From 07be5877960b7424dbf8b6f38722d63671fdbe20 Mon Sep 17 00:00:00 2001 From: CDaut Date: Sun, 20 Mar 2022 12:07:37 +0100 Subject: [PATCH] began refactoring to avoid code duplicates --- .../activities/ActivityUtils.java | 44 +++++++++++++++++++ .../activities/DebugActivity.java | 20 ++++++++- .../climategoapp/activities/HomeActivity.java | 26 +---------- .../src/main/res/layout/activity_debug.xml | 3 +- 4 files changed, 66 insertions(+), 27 deletions(-) create mode 100644 ClimateGoApp/app/src/main/java/de/cdaut/climategoapp/activities/ActivityUtils.java diff --git a/ClimateGoApp/app/src/main/java/de/cdaut/climategoapp/activities/ActivityUtils.java b/ClimateGoApp/app/src/main/java/de/cdaut/climategoapp/activities/ActivityUtils.java new file mode 100644 index 0000000..63beadf --- /dev/null +++ b/ClimateGoApp/app/src/main/java/de/cdaut/climategoapp/activities/ActivityUtils.java @@ -0,0 +1,44 @@ +package de.cdaut.climategoapp.activities; + +import android.content.Intent; +import android.view.MenuItem; + +import androidx.annotation.NonNull; +import androidx.appcompat.app.AppCompatActivity; +import androidx.drawerlayout.widget.DrawerLayout; + +import de.cdaut.climategoapp.R; + +public final class ActivityUtils { + private ActivityUtils() { + throw new IllegalAccessError("Utility Class"); + } + + public static boolean handleNavBarItemClicks(@NonNull MenuItem item, + AppCompatActivity rootClass, + DrawerLayout drawer) { + + Class targetActivityClass; + + switch (item.getItemId()) { + case R.id.nav_main: + targetActivityClass = HomeActivity.class; + break; + case R.id.nav_debug: + targetActivityClass = DebugActivity.class; + break; + default: + throw new IllegalAccessError("Illegal activity met in nav drawer"); + } + + if (targetActivityClass.equals(rootClass.getClass())) { + drawer.closeDrawers(); + return false; + } + + Intent targetIntent = new Intent(rootClass, targetActivityClass); + rootClass.startActivity(targetIntent); + + return false; + } +} diff --git a/ClimateGoApp/app/src/main/java/de/cdaut/climategoapp/activities/DebugActivity.java b/ClimateGoApp/app/src/main/java/de/cdaut/climategoapp/activities/DebugActivity.java index 62dcaea..fe92282 100644 --- a/ClimateGoApp/app/src/main/java/de/cdaut/climategoapp/activities/DebugActivity.java +++ b/ClimateGoApp/app/src/main/java/de/cdaut/climategoapp/activities/DebugActivity.java @@ -1,8 +1,10 @@ package de.cdaut.climategoapp.activities; +import android.content.Intent; import android.os.Bundle; +import androidx.annotation.NonNull; import androidx.appcompat.app.ActionBarDrawerToggle; import androidx.appcompat.app.AppCompatActivity; @@ -18,7 +20,9 @@ import de.cdaut.climategoapp.databinding.ActivityDebugBinding; import android.view.Menu; import android.view.MenuItem; -public class DebugActivity extends AppCompatActivity { +import com.google.android.material.navigation.NavigationView; + +public class DebugActivity extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener { private AppBarConfiguration appBarConfiguration; private ActivityDebugBinding binding; @@ -37,7 +41,7 @@ public class DebugActivity extends AppCompatActivity { // drawer layout instance to toggle the menu icon to open // drawer and back button to close drawer - drawerLayout = findViewById(R.id.my_drawer_layout); + drawerLayout = findViewById(R.id.debug_drawer_layout); actionBarDrawerToggle = new ActionBarDrawerToggle(this, drawerLayout, R.string.nav_open, @@ -50,6 +54,8 @@ public class DebugActivity extends AppCompatActivity { // to make the Navigation drawer icon always appear on the action bar getSupportActionBar().setDisplayHomeAsUpEnabled(true); + + setNavigationViewListener(); } @Override @@ -84,4 +90,14 @@ public class DebugActivity extends AppCompatActivity { return NavigationUI.navigateUp(navController, appBarConfiguration) || super.onSupportNavigateUp(); } + + @Override + public boolean onNavigationItemSelected(@NonNull MenuItem item) { + return ActivityUtils.handleNavBarItemClicks(item, this, drawerLayout); + } + + private void setNavigationViewListener() { + NavigationView navigationView = findViewById(R.id.nav_drawer); + navigationView.setNavigationItemSelectedListener(this); + } } \ No newline at end of file diff --git a/ClimateGoApp/app/src/main/java/de/cdaut/climategoapp/activities/HomeActivity.java b/ClimateGoApp/app/src/main/java/de/cdaut/climategoapp/activities/HomeActivity.java index 06e0302..ebeadd4 100644 --- a/ClimateGoApp/app/src/main/java/de/cdaut/climategoapp/activities/HomeActivity.java +++ b/ClimateGoApp/app/src/main/java/de/cdaut/climategoapp/activities/HomeActivity.java @@ -52,7 +52,7 @@ public class HomeActivity extends AppCompatActivity implements NavigationView.On actionBarDrawerToggle.syncState(); // to make the Navigation drawer icon always appear on the action bar - getSupportActionBar().setDisplayHomeAsUpEnabled(true); + getSupportActionBar(). setDisplayHomeAsUpEnabled(true); setNavigationViewListener(); } @@ -93,29 +93,7 @@ public class HomeActivity extends AppCompatActivity implements NavigationView.On @Override public boolean onNavigationItemSelected(@NonNull MenuItem item) { - - Class targetActivityClass; - - switch (item.getItemId()) { - case R.id.nav_main: - targetActivityClass = HomeActivity.class; - break; - case R.id.nav_debug: - targetActivityClass = DebugActivity.class; - break; - default: - throw new IllegalAccessError("Illegal activity met in nav drawer"); - } - - if(targetActivityClass.equals(this.getClass())) { - drawerLayout.closeDrawers(); - return false; - } - - Intent targetIntent = new Intent(this, targetActivityClass); - startActivity(targetIntent); - - return false; + return ActivityUtils.handleNavBarItemClicks(item, this, drawerLayout); } private void setNavigationViewListener() { diff --git a/ClimateGoApp/app/src/main/res/layout/activity_debug.xml b/ClimateGoApp/app/src/main/res/layout/activity_debug.xml index 14532c5..fd9e1af 100644 --- a/ClimateGoApp/app/src/main/res/layout/activity_debug.xml +++ b/ClimateGoApp/app/src/main/res/layout/activity_debug.xml @@ -2,7 +2,7 @@