3
3
import static com .mrboomdev .awery .app .AweryApp .addOnBackPressedListener ;
4
4
import static com .mrboomdev .awery .app .AweryApp .enableEdgeToEdge ;
5
5
import static com .mrboomdev .awery .app .AweryApp .getDatabase ;
6
+ import static com .mrboomdev .awery .app .AweryApp .getNavigationStyle ;
6
7
import static com .mrboomdev .awery .app .AweryApp .getResourceId ;
7
8
import static com .mrboomdev .awery .app .AweryApp .removeOnBackPressedListener ;
8
- import static com .mrboomdev .awery .app .AweryApp .snackbar ;
9
9
import static com .mrboomdev .awery .app .AweryApp .toast ;
10
10
import static com .mrboomdev .awery .app .AweryLifecycle .runDelayed ;
11
11
import static com .mrboomdev .awery .util .NiceUtils .find ;
12
12
import static com .mrboomdev .awery .util .NiceUtils .stream ;
13
13
import static com .mrboomdev .awery .util .io .FileUtil .readAssets ;
14
+ import static com .mrboomdev .awery .util .ui .ViewUtil .setBottomPadding ;
15
+ import static com .mrboomdev .awery .util .ui .ViewUtil .setLeftPadding ;
16
+ import static com .mrboomdev .awery .util .ui .ViewUtil .setOnApplyUiInsetsListener ;
17
+ import static com .mrboomdev .awery .util .ui .ViewUtil .setTopPadding ;
14
18
15
19
import android .content .Intent ;
16
20
import android .graphics .drawable .Drawable ;
17
21
import android .os .Bundle ;
18
22
import android .util .Log ;
23
+ import android .view .View ;
19
24
20
25
import androidx .annotation .NonNull ;
21
26
import androidx .annotation .Nullable ;
26
31
import androidx .lifecycle .Lifecycle ;
27
32
import androidx .viewpager2 .adapter .FragmentStateAdapter ;
28
33
34
+ import com .google .android .material .navigation .NavigationBarView ;
35
+ import com .google .android .material .navigationrail .NavigationRailView ;
29
36
import com .mrboomdev .awery .R ;
30
37
import com .mrboomdev .awery .app .CrashHandler ;
31
38
import com .mrboomdev .awery .data .db .item .DBTab ;
@@ -67,7 +74,7 @@ public void run() {
67
74
}
68
75
69
76
doubleBackToExitPressedOnce = true ;
70
- snackbar ( MainActivity . this , getString ( R .string .back_to_exit ) );
77
+ toast ( R .string .back_to_exit );
71
78
runDelayed (() -> doubleBackToExitPressedOnce = false , 2000 );
72
79
}
73
80
};
@@ -122,42 +129,76 @@ private void setupTabs(@NonNull List<DBTab> tabs) {
122
129
CrashHandler .showErrorDialog (this , "Failed to read an icons list!" , e );
123
130
}
124
131
125
- AnimatedBottomBar . Tab selectedNavbarItem = null ;
132
+ int selected = 0 ;
126
133
127
- for (int i = 0 ; i < tabs .size (); i ++) {
128
- Drawable drawable = null ;
129
- var tab = tabs .get (i );
134
+ switch (getNavigationStyle ()) {
135
+ case BUBBLE -> {
136
+ for (int i = 0 ; i < tabs .size (); i ++) {
137
+ Drawable drawable = null ;
138
+ var tab = tabs .get (i );
130
139
131
- if (icons != null ) {
132
- var icon = icons .get (tab .icon );
140
+ if (icons != null ) {
141
+ var icon = icons .get (tab .icon );
133
142
134
- if (icon != null ) {
135
- var id = getResourceId (R .drawable .class , icon .getInActive ());
136
- drawable = ContextCompat .getDrawable (this , id );
143
+ if (icon != null ) {
144
+ var id = getResourceId (R .drawable .class , icon .getInActive ());
145
+ drawable = ContextCompat .getDrawable (this , id );
146
+ }
147
+ }
148
+
149
+ if (drawable == null ) {
150
+ drawable = ContextCompat .getDrawable (
151
+ this , R .drawable .ic_view_cozy );
152
+ }
153
+
154
+ var navbarItem = new AnimatedBottomBar .Tab (
155
+ Objects .requireNonNull (drawable ), tab .title ,
156
+ i , null , true );
157
+
158
+ if (tab .id .equals (savedDefaultTab )) {
159
+ selected = i ;
160
+ }
161
+
162
+ binding .navbarBubble .addTab (navbarItem );
137
163
}
138
- }
139
164
140
- if (drawable == null ) {
141
- drawable = ContextCompat .getDrawable (
142
- this , R .drawable .ic_view_cozy );
165
+ binding .navbarBubble .selectTabAt (selected , false );
166
+ binding .navbarBubble .setVisibility (View .VISIBLE );
143
167
}
144
168
145
- var navbarItem = new AnimatedBottomBar .Tab (
146
- Objects .requireNonNull (drawable ), tab .title ,
147
- i , null , true );
169
+ case MATERIAL -> {
170
+ var nav = (NavigationBarView ) binding .navbarMaterial ;
148
171
149
- if ( tab . id . equals ( savedDefaultTab ) ) {
150
- selectedNavbarItem = navbarItem ;
151
- }
172
+ for ( int i = 0 ; i < tabs . size (); i ++ ) {
173
+ Drawable drawable = null ;
174
+ var tab = tabs . get ( i );
152
175
153
- binding . navbar . addTab ( navbarItem );
154
- }
176
+ if ( icons != null ) {
177
+ var icon = icons . get ( tab . icon );
155
178
156
- if (selectedNavbarItem == null && binding .navbar .getTabCount () > 0 ) {
157
- selectedNavbarItem = binding .navbar .getTabs ().get (0 );
158
- }
179
+ if (icon != null ) {
180
+ var id = getResourceId (R .drawable .class , icon .getInActive ());
181
+ drawable = ContextCompat .getDrawable (this , id );
182
+ }
183
+ }
184
+
185
+ if (drawable == null ) {
186
+ drawable = ContextCompat .getDrawable (
187
+ this , R .drawable .ic_view_cozy );
188
+ }
159
189
160
- binding .navbar .selectTab (Objects .requireNonNull (selectedNavbarItem ), false );
190
+ if (tab .id .equals (savedDefaultTab )) {
191
+ selected = i ;
192
+ }
193
+
194
+ nav .getMenu ().add (0 , i , 0 , tab .title );
195
+ nav .getMenu ().getItem (i ).setIcon (drawable );
196
+ }
197
+
198
+ nav .setSelectedItemId (selected );
199
+ nav .setVisibility (View .VISIBLE );
200
+ }
201
+ }
161
202
}
162
203
163
204
/**
@@ -186,7 +227,38 @@ private void setupNavigation() {
186
227
binding .pages .setUserInputEnabled (false );
187
228
binding .pages .setPageTransformer (new FadeTransformer ());
188
229
189
- binding .navbar .setOnTabSelectListener (new AnimatedBottomBar .OnTabSelectListener () {
230
+ setOnApplyUiInsetsListener (binding .navbarMaterial , insets -> {
231
+ setTopPadding (binding .navbarMaterial , (binding .navbarMaterial instanceof NavigationRailView ) ? insets .top : 0 );
232
+
233
+ setLeftPadding (binding .navbarMaterial , insets .left );
234
+ setBottomPadding (binding .navbarMaterial , insets .bottom );
235
+ return true ;
236
+ });
237
+
238
+ setOnApplyUiInsetsListener (binding .bottomSideBarrier , insets -> {
239
+ ViewUtil .setBottomMargin (binding .bottomSideBarrier , insets .bottom );
240
+ return true ;
241
+ });
242
+
243
+ ((NavigationBarView ) binding .navbarMaterial ).setOnItemSelectedListener (item -> {
244
+ binding .pages .setCurrentItem (item .getItemId (), false );
245
+ return true ;
246
+ });
247
+
248
+ ((NavigationBarView ) binding .navbarMaterial ).setOnItemReselectedListener (item -> {
249
+ var adapter = (FeedsAdapter ) binding .pages .getAdapter ();
250
+ if (adapter == null ) return ;
251
+
252
+ var ref = adapter .fragments .get (item .getItemId ());
253
+ if (ref == null ) return ;
254
+
255
+ var fragment = ref .get ();
256
+ if (fragment == null ) return ;
257
+
258
+ fragment .scrollToTop ();
259
+ });
260
+
261
+ binding .navbarBubble .setOnTabSelectListener (new AnimatedBottomBar .OnTabSelectListener () {
190
262
191
263
@ Override
192
264
public void onTabSelected (
@@ -212,11 +284,6 @@ public void onTabReselected(int i, @NonNull AnimatedBottomBar.Tab tab) {
212
284
fragment .scrollToTop ();
213
285
}
214
286
});
215
-
216
- ViewUtil .setOnApplyUiInsetsListener (binding .bottomSideBarrier , insets -> {
217
- ViewUtil .setBottomMargin (binding .bottomSideBarrier , insets .bottom );
218
- return true ;
219
- });
220
287
}
221
288
222
289
@ Override
@@ -234,7 +301,10 @@ protected void onPause() {
234
301
@ Override
235
302
protected void onSaveInstanceState (@ NonNull Bundle outState ) {
236
303
if (binding != null ) {
237
- outState .putInt ("nav_index" , binding .navbar .getSelectedIndex ());
304
+ outState .putInt ("nav_index" , switch (getNavigationStyle ()) {
305
+ case BUBBLE -> binding .navbarBubble .getSelectedIndex ();
306
+ case MATERIAL -> ((NavigationBarView ) binding .navbarMaterial ).getSelectedItemId ();
307
+ });
238
308
}
239
309
240
310
super .onSaveInstanceState (outState );
@@ -243,7 +313,9 @@ protected void onSaveInstanceState(@NonNull Bundle outState) {
243
313
@ Override
244
314
protected void onRestoreInstanceState (@ NonNull Bundle savedInstanceState ) {
245
315
if (binding != null ) {
246
- binding .navbar .selectTabAt (savedInstanceState .getInt ("nav_index" ), false );
316
+ /*var index = savedInstanceState.getInt("nav_index");
317
+ binding.navbarBubble.selectTabAt(index, false);
318
+ ((NavigationBarView) binding.navbarMaterial).setSelectedItemId(index);*/
247
319
}
248
320
249
321
super .onRestoreInstanceState (savedInstanceState );
0 commit comments