@@ -186,31 +186,38 @@ private void setUpSheetGravityButtonToggleGroup(@NonNull View view) {
186
186
});
187
187
}
188
188
189
- private void setupBackHandling (SideSheetBehavior <View > sideSheetBehavior ) {
189
+ private void setupBackHandling (View sideSheet , SideSheetBehavior <View > sideSheetBehavior ) {
190
190
OnBackPressedCallback nonModalOnBackPressedCallback =
191
191
createNonModalOnBackPressedCallback (sideSheetBehavior );
192
192
requireActivity ().getOnBackPressedDispatcher ().addCallback (this , nonModalOnBackPressedCallback );
193
193
sideSheetBehavior .addCallback (
194
194
new SideSheetCallback () {
195
195
@ Override
196
196
public void onStateChanged (@ NonNull View sheet , int newState ) {
197
- switch (newState ) {
198
- case SideSheetBehavior .STATE_EXPANDED :
199
- case SideSheetBehavior .STATE_SETTLING :
200
- nonModalOnBackPressedCallback .setEnabled (true );
201
- break ;
202
- case SideSheetBehavior .STATE_HIDDEN :
203
- nonModalOnBackPressedCallback .setEnabled (false );
204
- break ;
205
- case SideSheetBehavior .STATE_DRAGGING :
206
- default :
207
- break ;
208
- }
197
+ updateBackHandlingEnabled (nonModalOnBackPressedCallback , newState );
209
198
}
210
199
211
200
@ Override
212
201
public void onSlide (@ NonNull View sheet , float slideOffset ) {}
213
202
});
203
+ sideSheet .post (
204
+ () ->
205
+ updateBackHandlingEnabled (nonModalOnBackPressedCallback , sideSheetBehavior .getState ()));
206
+ }
207
+
208
+ private void updateBackHandlingEnabled (OnBackPressedCallback onBackPressedCallback , int state ) {
209
+ switch (state ) {
210
+ case SideSheetBehavior .STATE_EXPANDED :
211
+ case SideSheetBehavior .STATE_SETTLING :
212
+ onBackPressedCallback .setEnabled (true );
213
+ break ;
214
+ case SideSheetBehavior .STATE_HIDDEN :
215
+ onBackPressedCallback .setEnabled (false );
216
+ break ;
217
+ case SideSheetBehavior .STATE_DRAGGING :
218
+ default :
219
+ break ;
220
+ }
214
221
}
215
222
216
223
private View setUpSideSheet (
@@ -227,7 +234,7 @@ private View setUpSideSheet(
227
234
View standardSideSheetCloseIconButton = sideSheet .findViewById (closeIconButtonId );
228
235
standardSideSheetCloseIconButton .setOnClickListener (v -> hideSideSheet (sideSheetBehavior ));
229
236
230
- setupBackHandling (sideSheetBehavior );
237
+ setupBackHandling (sideSheet , sideSheetBehavior );
231
238
232
239
sideSheetViews .add (sideSheet );
233
240
@@ -237,9 +244,10 @@ private View setUpSideSheet(
237
244
private void setSideSheetCallback (
238
245
View sideSheet , @ IdRes int stateTextViewId , @ IdRes int slideOffsetTextId ) {
239
246
SideSheetBehavior <View > sideSheetBehavior = SideSheetBehavior .from (sideSheet );
247
+ TextView stateTextView = sideSheet .findViewById (stateTextViewId );
240
248
sideSheetBehavior .addCallback (
241
- createSideSheetCallback (
242
- sideSheet .findViewById ( stateTextViewId ), sideSheet . findViewById ( slideOffsetTextId )));
249
+ createSideSheetCallback (stateTextView , sideSheet . findViewById ( slideOffsetTextId )));
250
+ sideSheet .post (() -> updateStateTextView ( stateTextView , sideSheetBehavior . getState ( )));
243
251
}
244
252
245
253
private void setUpDetachedModalSheet () {
@@ -373,22 +381,7 @@ private SideSheetCallback createSideSheetCallback(
373
381
return new SideSheetCallback () {
374
382
@ Override
375
383
public void onStateChanged (@ NonNull View sheet , int newState ) {
376
- stateTextView .setVisibility (View .VISIBLE );
377
-
378
- switch (newState ) {
379
- case SideSheetBehavior .STATE_DRAGGING :
380
- stateTextView .setText (R .string .cat_sidesheet_state_dragging );
381
- break ;
382
- case SideSheetBehavior .STATE_EXPANDED :
383
- stateTextView .setText (R .string .cat_sidesheet_state_expanded );
384
- break ;
385
- case SideSheetBehavior .STATE_SETTLING :
386
- stateTextView .setText (R .string .cat_sidesheet_state_settling );
387
- break ;
388
- case SideSheetBehavior .STATE_HIDDEN :
389
- default :
390
- break ;
391
- }
384
+ updateStateTextView (stateTextView , newState );
392
385
}
393
386
394
387
@ Override
@@ -400,6 +393,25 @@ public void onSlide(@NonNull View sheet, float slideOffset) {
400
393
};
401
394
}
402
395
396
+ private void updateStateTextView (@ NonNull TextView stateTextView , int state ) {
397
+ stateTextView .setVisibility (View .VISIBLE );
398
+
399
+ switch (state ) {
400
+ case SideSheetBehavior .STATE_DRAGGING :
401
+ stateTextView .setText (R .string .cat_sidesheet_state_dragging );
402
+ break ;
403
+ case SideSheetBehavior .STATE_EXPANDED :
404
+ stateTextView .setText (R .string .cat_sidesheet_state_expanded );
405
+ break ;
406
+ case SideSheetBehavior .STATE_SETTLING :
407
+ stateTextView .setText (R .string .cat_sidesheet_state_settling );
408
+ break ;
409
+ case SideSheetBehavior .STATE_HIDDEN :
410
+ default :
411
+ break ;
412
+ }
413
+ }
414
+
403
415
private OnBackPressedCallback createNonModalOnBackPressedCallback (
404
416
SideSheetBehavior <View > behavior ) {
405
417
return new OnBackPressedCallback (/* enabled= */ false ) {
0 commit comments