4141import com .d4rk .androidtutorials .java .utils .EdgeToEdgeDelegate ;
4242import com .google .android .gms .ads .AdRequest ;
4343import com .google .android .gms .ads .MobileAds ;
44- import com .google .android .material .bottomnavigation .BottomNavigationView ;
4544import com .google .android .material .dialog .MaterialAlertDialogBuilder ;
45+ import com .google .android .material .navigation .NavigationBarView ;
4646import com .google .android .material .navigationrail .NavigationRailView ;
4747import com .google .android .material .snackbar .Snackbar ;
4848import com .google .android .play .core .appupdate .AppUpdateInfo ;
@@ -185,18 +185,29 @@ private void launcherShortcuts() {
185185 ShortcutManagerCompat .pushDynamicShortcut (this , shortcut );
186186 }
187187
188+ private boolean shouldUseNavigationRail () {
189+ return getResources ().getConfiguration ().smallestScreenWidthDp >= 600 ;
190+ }
191+
188192 private void observeViewModel () {
189193 mainViewModel .getUiState ().observe (this , uiState -> {
190194 if (uiState == null ) {
191195 return ;
192196 }
193197
198+ boolean useRail = shouldUseNavigationRail ();
194199 EdgeToEdgeDelegate edgeToEdgeDelegate = new EdgeToEdgeDelegate (this );
195- if (mBinding .navView instanceof BottomNavigationView ) {
196-
197- edgeToEdgeDelegate .applyEdgeToEdgeBottomBar (mBinding .container , mBinding .navView );
200+ NavigationBarView navBarView = (NavigationBarView ) mBinding .navView ;
201+ if (useRail ) {
202+ mBinding .navRail .setVisibility (View .VISIBLE );
203+ navBarView .setVisibility (View .GONE );
204+ edgeToEdgeDelegate .applyEdgeToEdge (mBinding .container );
205+ } else {
206+ mBinding .navRail .setVisibility (View .GONE );
207+ navBarView .setVisibility (View .VISIBLE );
208+ edgeToEdgeDelegate .applyEdgeToEdgeBottomBar (mBinding .container , navBarView );
198209
199- (( BottomNavigationView ) mBinding . navView ) .setLabelVisibilityMode (uiState .getBottomNavVisibility ());
210+ navBarView .setLabelVisibilityMode (uiState .getBottomNavVisibility ());
200211 if (mBinding .adView != null ) {
201212 if (ConsentUtils .canShowAds (this )) {
202213 MobileAds .initialize (this );
@@ -206,8 +217,6 @@ private void observeViewModel() {
206217 mBinding .adView .setVisibility (View .GONE );
207218 }
208219 }
209- } else {
210- edgeToEdgeDelegate .applyEdgeToEdge (mBinding .container );
211220 }
212221
213222 NavHostFragment navHostFragment = (NavHostFragment )
@@ -225,15 +234,15 @@ private void observeViewModel() {
225234 .setPopExitAnim (R .anim .fragment_spring_pop_exit )
226235 .build ();
227236
228- if (mBinding . navView instanceof BottomNavigationView bottomNav ) {
229- NavigationUI .setupWithNavController (bottomNav , navController );
230- bottomNav .setOnItemSelectedListener (item -> {
237+ if (useRail ) {
238+ NavigationUI .setupWithNavController (mBinding . navRail , navController );
239+ mBinding . navRail .setOnItemSelectedListener (item -> {
231240 navController .navigate (item .getItemId (), null , springNavOptions );
232241 return true ;
233242 });
234- } else if ( mBinding . navView instanceof NavigationRailView railView ) {
235- NavigationUI .setupWithNavController (railView , navController );
236- railView .setOnItemSelectedListener (item -> {
243+ } else {
244+ NavigationUI .setupWithNavController (navBarView , navController );
245+ navBarView .setOnItemSelectedListener (item -> {
237246 navController .navigate (item .getItemId (), null , springNavOptions );
238247 return true ;
239248 });
0 commit comments