diff --git a/app/src/main/java/com/d4rk/androidtutorials/java/ui/screens/main/MainActivity.java b/app/src/main/java/com/d4rk/androidtutorials/java/ui/screens/main/MainActivity.java index 3308efb4..a2abf5d6 100644 --- a/app/src/main/java/com/d4rk/androidtutorials/java/ui/screens/main/MainActivity.java +++ b/app/src/main/java/com/d4rk/androidtutorials/java/ui/screens/main/MainActivity.java @@ -41,8 +41,8 @@ import com.d4rk.androidtutorials.java.utils.EdgeToEdgeDelegate; import com.google.android.gms.ads.AdRequest; import com.google.android.gms.ads.MobileAds; -import com.google.android.material.bottomnavigation.BottomNavigationView; import com.google.android.material.dialog.MaterialAlertDialogBuilder; +import com.google.android.material.navigation.NavigationBarView; import com.google.android.material.navigationrail.NavigationRailView; import com.google.android.material.snackbar.Snackbar; import com.google.android.play.core.appupdate.AppUpdateInfo; @@ -185,18 +185,29 @@ private void launcherShortcuts() { ShortcutManagerCompat.pushDynamicShortcut(this, shortcut); } + private boolean shouldUseNavigationRail() { + return getResources().getConfiguration().smallestScreenWidthDp >= 600; + } + private void observeViewModel() { mainViewModel.getUiState().observe(this, uiState -> { if (uiState == null) { return; } + boolean useRail = shouldUseNavigationRail(); EdgeToEdgeDelegate edgeToEdgeDelegate = new EdgeToEdgeDelegate(this); - if (mBinding.navView instanceof BottomNavigationView) { - - edgeToEdgeDelegate.applyEdgeToEdgeBottomBar(mBinding.container, mBinding.navView); + NavigationBarView navBarView = (NavigationBarView) mBinding.navView; + if (useRail) { + mBinding.navRail.setVisibility(View.VISIBLE); + navBarView.setVisibility(View.GONE); + edgeToEdgeDelegate.applyEdgeToEdge(mBinding.container); + } else { + mBinding.navRail.setVisibility(View.GONE); + navBarView.setVisibility(View.VISIBLE); + edgeToEdgeDelegate.applyEdgeToEdgeBottomBar(mBinding.container, navBarView); - ((BottomNavigationView) mBinding.navView).setLabelVisibilityMode(uiState.getBottomNavVisibility()); + navBarView.setLabelVisibilityMode(uiState.getBottomNavVisibility()); if (mBinding.adView != null) { if (ConsentUtils.canShowAds(this)) { MobileAds.initialize(this); @@ -206,8 +217,6 @@ private void observeViewModel() { mBinding.adView.setVisibility(View.GONE); } } - } else { - edgeToEdgeDelegate.applyEdgeToEdge(mBinding.container); } NavHostFragment navHostFragment = (NavHostFragment) @@ -225,15 +234,15 @@ private void observeViewModel() { .setPopExitAnim(R.anim.fragment_spring_pop_exit) .build(); - if (mBinding.navView instanceof BottomNavigationView bottomNav) { - NavigationUI.setupWithNavController(bottomNav, navController); - bottomNav.setOnItemSelectedListener(item -> { + if (useRail) { + NavigationUI.setupWithNavController(mBinding.navRail, navController); + mBinding.navRail.setOnItemSelectedListener(item -> { navController.navigate(item.getItemId(), null, springNavOptions); return true; }); - } else if (mBinding.navView instanceof NavigationRailView railView) { - NavigationUI.setupWithNavController(railView, navController); - railView.setOnItemSelectedListener(item -> { + } else { + NavigationUI.setupWithNavController(navBarView, navController); + navBarView.setOnItemSelectedListener(item -> { navController.navigate(item.getItemId(), null, springNavOptions); return true; }); diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index 7dd30641..b8e38be0 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -19,12 +19,24 @@ app:title="@string/app_name" /> + + @@ -37,10 +49,11 @@ app:adUnitId="@string/ad_banner_unit_id" app:layout_constraintBottom_toTopOf="@id/nav_view" /> - \ No newline at end of file diff --git a/app/src/main/res/menu/bottom_nav_menu.xml b/app/src/main/res/menu/bottom_nav_menu.xml index 4ff7592a..1125fbb3 100644 --- a/app/src/main/res/menu/bottom_nav_menu.xml +++ b/app/src/main/res/menu/bottom_nav_menu.xml @@ -3,13 +3,16 @@ + android:title="@string/home" + android:contentDescription="@string/home" /> + android:title="@string/android_studio" + android:contentDescription="@string/android_studio" /> + android:title="@string/about" + android:contentDescription="@string/about" /> \ No newline at end of file