Skip to content

Commit 203fa51

Browse files
committed
Fix issue with predictive back gesture
1 parent 1786b43 commit 203fa51

File tree

2 files changed

+35
-32
lines changed

2 files changed

+35
-32
lines changed

app/src/main/AndroidManifest.xml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,8 @@
2727
android:label="@string/app_name"
2828
android:supportsRtl="true"
2929
android:theme="@style/Theme.App.Starting"
30-
tools:targetApi="n">
30+
android:enableOnBackInvokedCallback="true"
31+
tools:targetApi="33">
3132

3233
<!--<activity
3334
android:name=".activities.SplashActivity"

library/src/main/java/candybar/lib/activities/CandyBarMainActivity.java

Lines changed: 33 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
import android.widget.TextView;
2424
import android.widget.Toast;
2525

26+
import androidx.activity.OnBackPressedCallback;
2627
import androidx.annotation.NonNull;
2728
import androidx.annotation.Nullable;
2829
import androidx.appcompat.app.ActionBarDrawerToggle;
@@ -167,21 +168,34 @@ public abstract class CandyBarMainActivity extends AppCompatActivity implements
167168
@NonNull
168169
public abstract ActivityConfiguration onInit();
169170

171+
private final OnBackPressedCallback backPressedCallback = new OnBackPressedCallback(true) {
172+
@Override
173+
public void handleOnBackPressed() {
174+
if (mFragManager.getBackStackEntryCount() > 0) {
175+
clearBackStack();
176+
return;
177+
}
178+
179+
if (mDrawerLayout.isDrawerOpen(GravityCompat.START)) {
180+
mDrawerLayout.closeDrawers();
181+
return;
182+
}
183+
184+
if (mFragmentTag != Extras.Tag.HOME) {
185+
mPosition = mLastPosition = 0;
186+
setFragment(getFragment(mPosition));
187+
}
188+
}
189+
};
190+
170191
@Override
171192
protected void onCreate(@Nullable Bundle savedInstanceState) {
172193
final boolean isMaterialYou = Preferences.get(this).isMaterialYou();
173-
final int nightMode;
174-
switch (Preferences.get(this).getTheme()) {
175-
case LIGHT:
176-
nightMode = AppCompatDelegate.MODE_NIGHT_NO;
177-
break;
178-
case DARK:
179-
nightMode = AppCompatDelegate.MODE_NIGHT_YES;
180-
break;
181-
default:
182-
nightMode = AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM;
183-
break;
184-
}
194+
final int nightMode = switch (Preferences.get(this).getTheme()) {
195+
case LIGHT -> AppCompatDelegate.MODE_NIGHT_NO;
196+
case DARK -> AppCompatDelegate.MODE_NIGHT_YES;
197+
default -> AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM;
198+
};
185199
AppCompatDelegate.setDefaultNightMode(nightMode);
186200

187201
LocaleHelper.setLocale(this);
@@ -202,6 +216,7 @@ protected void onCreate(@Nullable Bundle savedInstanceState) {
202216

203217
initNavigationView(toolbar);
204218
initNavigationViewHeader();
219+
registerBackPressHandler();
205220

206221
ViewCompat.setOnApplyWindowInsetsListener(toolbar, (v, insets) -> {
207222
ViewGroup.MarginLayoutParams params = (ViewGroup.MarginLayoutParams) v.getLayoutParams();
@@ -432,24 +447,8 @@ protected void onSaveInstanceState(Bundle outState) {
432447
super.onSaveInstanceState(outState);
433448
}
434449

435-
@Override
436-
public void onBackPressed() {
437-
if (mFragManager.getBackStackEntryCount() > 0) {
438-
clearBackStack();
439-
return;
440-
}
441-
442-
if (mDrawerLayout.isDrawerOpen(GravityCompat.START)) {
443-
mDrawerLayout.closeDrawers();
444-
return;
445-
}
446-
447-
if (mFragmentTag != Extras.Tag.HOME) {
448-
mPosition = mLastPosition = 0;
449-
setFragment(getFragment(mPosition));
450-
return;
451-
}
452-
super.onBackPressed();
450+
private void registerBackPressHandler() {
451+
getOnBackPressedDispatcher().addCallback(backPressedCallback);
453452
}
454453

455454
@Override
@@ -991,10 +990,11 @@ private void setFragment(Fragment fragment) {
991990
Menu menu = mNavigationView.getMenu();
992991
menu.getItem(mPosition).setChecked(true);
993992
mToolbarTitle.setText(menu.getItem(mPosition).getTitle());
993+
994+
backPressedCallback.setEnabled(mFragmentTag != Extras.Tag.HOME);
994995
}
995996

996997
private Fragment getFragment(int position) {
997-
mFragmentTag = Extras.Tag.HOME;
998998
if (position == Extras.Tag.HOME.idx) {
999999
mFragmentTag = Extras.Tag.HOME;
10001000
return new HomeFragment();
@@ -1023,6 +1023,8 @@ private Fragment getFragment(int position) {
10231023
mFragmentTag = Extras.Tag.ABOUT;
10241024
return new AboutFragment();
10251025
}
1026+
1027+
mFragmentTag = Extras.Tag.HOME;
10261028
return new HomeFragment();
10271029
}
10281030

0 commit comments

Comments
 (0)