package com.stormtales.notevault; import android.os.Bundle; import android.view.MenuItem; import android.view.Menu; import android.widget.Toast; import androidx.lifecycle.ViewModelProvider; import com.google.android.material.navigation.NavigationView; import androidx.navigation.NavController; import androidx.navigation.Navigation; import androidx.navigation.ui.AppBarConfiguration; import androidx.navigation.ui.NavigationUI; import androidx.drawerlayout.widget.DrawerLayout; import androidx.appcompat.app.AppCompatActivity; import com.stormtales.notevault.databinding.ActivityMainBinding; import com.stormtales.notevault.network.APICallback; import com.stormtales.notevault.network.auth.AuthService; import com.stormtales.notevault.ui.login.LoginDialog; import com.stormtales.notevault.ui.login.LoginViewModel; public class MainActivity extends AppCompatActivity { private AppBarConfiguration mAppBarConfiguration; private ActivityMainBinding binding; private LoginViewModel loginViewModel; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); binding = ActivityMainBinding.inflate(getLayoutInflater()); setContentView(binding.getRoot()); setSupportActionBar(binding.appBarMain.toolbar); binding.appBarMain.toolbar.setOnMenuItemClickListener(item -> { if (item.getItemId() == R.id.auth_action) { showLoginDialog(); return true; } return false; }); DrawerLayout drawer = binding.drawerLayout; NavigationView navigationView = binding.navView; // Passing each menu ID as a set of Ids because each // menu should be considered as top level destinations. mAppBarConfiguration = new AppBarConfiguration.Builder( R.id.nav_home, R.id.nav_gallery, R.id.nav_slideshow) .setOpenableLayout(drawer) .build(); NavController navController = Navigation.findNavController(this, R.id.nav_host_fragment_content_main); NavigationUI.setupActionBarWithNavController(this, navController, mAppBarConfiguration); NavigationUI.setupWithNavController(navigationView, navController); loginViewModel = new ViewModelProvider(this).get(LoginViewModel.class); loginViewModel.setAuthService(new AuthService(getApplicationContext())); loginViewModel.getIsLoggedIn().observe(this, isLoggedIn -> { this.invalidateOptionsMenu(); }); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } @Override public boolean onSupportNavigateUp() { NavController navController = Navigation.findNavController(this, R.id.nav_host_fragment_content_main); return NavigationUI.navigateUp(navController, mAppBarConfiguration) || super.onSupportNavigateUp(); } @Override public boolean onPrepareOptionsMenu(Menu menu) { MenuItem loginItem = menu.findItem(R.id.auth_action); if (Boolean.TRUE.equals(loginViewModel.getIsLoggedIn().getValue())) { loginItem.setIcon(R.drawable.logout); // Setze das Logout-Symbol } else { loginItem.setIcon(R.drawable.login); // Setze das Login-Symbol } return super.onPrepareOptionsMenu(menu); } public void showLoginDialog() { LoginDialog loginDialog = new LoginDialog(loginViewModel); loginDialog.show(getSupportFragmentManager(), "login"); } }