commit adb1e0c40523716ae46b02821950986d543bfa6b Author: Fabio Mazza Date: Tue Apr 21 14:57:02 2026 +0200 Use new OnBackPressed support API with old logic, put default settings values in Intro Activity too diff --git a/app/src/main/java/it/reyboz/bustorino/ActivityIntro.kt b/app/src/main/java/it/reyboz/bustorino/ActivityIntro.kt index a422291..b65224f 100644 --- a/app/src/main/java/it/reyboz/bustorino/ActivityIntro.kt +++ b/app/src/main/java/it/reyboz/bustorino/ActivityIntro.kt @@ -32,7 +32,8 @@ class ActivityIntro : GeneralActivity(), IntroFragment.IntroListener { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_intro) - + //check default settings and apply them + checkApplyDefaultSettingsValues() viewPager = findViewById(R.id.viewPager) btnBackward = findViewById(R.id.btnPrevious) btnForward = findViewById(R.id.btnNext) diff --git a/app/src/main/java/it/reyboz/bustorino/ActivityPrincipal.java b/app/src/main/java/it/reyboz/bustorino/ActivityPrincipal.java index e703dc7..6f94cde 100644 --- a/app/src/main/java/it/reyboz/bustorino/ActivityPrincipal.java +++ b/app/src/main/java/it/reyboz/bustorino/ActivityPrincipal.java @@ -29,6 +29,7 @@ import android.util.Log; import android.view.*; import android.widget.Toast; +import androidx.activity.OnBackPressedCallback; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.appcompat.app.ActionBarDrawerToggle; @@ -46,11 +47,8 @@ import com.google.android.material.navigation.NavigationView; import com.google.android.material.snackbar.Snackbar; import java.util.Arrays; -import java.util.HashSet; -import java.util.Set; import it.reyboz.bustorino.backend.Stop; -import it.reyboz.bustorino.backend.utils; import it.reyboz.bustorino.data.DBUpdateCheckWorker; import it.reyboz.bustorino.data.DBUpdateWorker; import it.reyboz.bustorino.data.PreferencesHolder; @@ -73,6 +71,13 @@ public class ActivityPrincipal extends GeneralActivity implements FragmentListen private boolean showingMainFragmentFromOther = false; private boolean onCreateComplete = false; + private final OnBackPressedCallback callback = new OnBackPressedCallback(false) { + @Override + public void handleOnBackPressed() { + activityCustomBackPressed(); + } + }; + @Override protected void onCreate(@Nullable Bundle savedInstanceState) { @@ -83,6 +88,10 @@ public class ActivityPrincipal extends GeneralActivity implements FragmentListen getWindow().setNavigationBarContrastEnforced(false); } */ + + //onBackPressed solution required from Android 16 + callback.setEnabled(true); + this.getOnBackPressedDispatcher().addCallback( callback); boolean showingArrivalsFromIntent = false; final Toolbar mToolbar = findViewById(R.id.default_toolbar); @@ -240,7 +249,7 @@ public class ActivityPrincipal extends GeneralActivity implements FragmentListen onCreateComplete = true; //last but not least, set the good default values - setDefaultSettingsValuesWhenMissing(); + checkApplyDefaultSettingsValues(); // handle the device "insets" ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.rootRelativeLayout), (v, windowInsets) -> { Insets insets = windowInsets.getInsets(WindowInsetsCompat.Type.systemBars()); @@ -290,6 +299,8 @@ public class ActivityPrincipal extends GeneralActivity implements FragmentListen } + + //check if first run activity (IntroActivity) has been started once or not final SharedPreferences theShPr = getMainSharedPreferences(); boolean hasIntroRun = theShPr.getBoolean(PreferencesHolder.PREF_INTRO_ACTIVITY_RUN,false); @@ -454,9 +465,16 @@ public class ActivityPrincipal extends GeneralActivity implements FragmentListen } - @Override + /*@Override public void onBackPressed() { - boolean foundFragment = false; + if (!activityCustomBackPressed()) + super.onBackPressed(); + } + + */ + + private boolean activityCustomBackPressed(){ + boolean resolved = true; Fragment shownFrag = getSupportFragmentManager().findFragmentById(R.id.mainActContentFrame); if (mDrawer.isDrawerOpen(GravityCompat.START)) mDrawer.closeDrawer(GravityCompat.START); @@ -476,8 +494,10 @@ public class ActivityPrincipal extends GeneralActivity implements FragmentListen getSupportFragmentManager().popBackStack(); Log.d(DEBUG_TAG, "Popping main frame backstack for fragments"); } - else - super.onBackPressed(); + else{ + resolved = false; + } + return resolved; } /** @@ -826,45 +846,4 @@ public class ActivityPrincipal extends GeneralActivity implements FragmentListen } } - /** - * Adjust setting to match the default ones - */ - private void setDefaultSettingsValuesWhenMissing(){ - SharedPreferences mainSharedPref = PreferenceManager.getDefaultSharedPreferences(this); - SharedPreferences.Editor editor = mainSharedPref.edit(); - //Main fragment to show - String screen = mainSharedPref.getString(SettingsFragment.PREF_KEY_STARTUP_SCREEN, ""); - boolean edit = false; - if (screen.isEmpty()){ - editor.putString(SettingsFragment.PREF_KEY_STARTUP_SCREEN, "arrivals"); - edit=true; - } - //Fetchers - final Set setSelected = mainSharedPref.getStringSet(SettingsFragment.KEY_ARRIVALS_FETCHERS_USE, new HashSet<>()); - if (setSelected.isEmpty()){ - String[] defaultVals = getResources().getStringArray(R.array.arrivals_sources_values_default); - editor.putStringSet(SettingsFragment.KEY_ARRIVALS_FETCHERS_USE, utils.convertArrayToSet(defaultVals)); - edit=true; - } - //Live bus positions - final String keySourcePositions=getString(R.string.pref_positions_source); - final String positionsSource = mainSharedPref.getString(keySourcePositions, ""); - if(positionsSource.isEmpty()){ - String[] defaultVals = getResources().getStringArray(R.array.positions_source_values); - editor.putString(keySourcePositions, defaultVals[0]); - edit=true; - } - //Map style - final String mapStylePref = mainSharedPref.getString(SettingsFragment.LIBREMAP_STYLE_PREF_KEY, ""); - if(mapStylePref.isEmpty()){ - final String[] defaultVals = getResources().getStringArray(R.array.map_style_pref_values); - editor.putString(SettingsFragment.LIBREMAP_STYLE_PREF_KEY, defaultVals[0]); - edit=true; - } - if (edit){ - editor.commit(); - } - - - } } diff --git a/app/src/main/java/it/reyboz/bustorino/middleware/GeneralActivity.java b/app/src/main/java/it/reyboz/bustorino/middleware/GeneralActivity.java index 3bfda66..b848a7d 100644 --- a/app/src/main/java/it/reyboz/bustorino/middleware/GeneralActivity.java +++ b/app/src/main/java/it/reyboz/bustorino/middleware/GeneralActivity.java @@ -29,6 +29,7 @@ import androidx.core.graphics.Insets; import androidx.core.view.OnApplyWindowInsetsListener; import androidx.core.view.ViewCompat; import androidx.core.view.WindowInsetsCompat; +import androidx.preference.PreferenceManager; import com.google.android.material.snackbar.Snackbar; import androidx.annotation.Nullable; @@ -42,10 +43,13 @@ import android.view.inputmethod.InputMethodManager; import android.widget.Toast; import java.util.HashMap; +import java.util.HashSet; +import java.util.Set; import it.reyboz.bustorino.R; import it.reyboz.bustorino.backend.utils; import it.reyboz.bustorino.data.PreferencesHolder; +import it.reyboz.bustorino.fragments.SettingsFragment; /** * Activity class that contains all the generally useful methods @@ -227,4 +231,44 @@ public abstract class GeneralActivity extends AppCompatActivity { return WindowInsetsCompat.CONSUMED; }; + /** + * Adjust setting to match the default ones + */ + protected void checkApplyDefaultSettingsValues(){ + SharedPreferences mainSharedPref = PreferenceManager.getDefaultSharedPreferences(this); + SharedPreferences.Editor editor = mainSharedPref.edit(); + //Main fragment to show + String screen = mainSharedPref.getString(SettingsFragment.PREF_KEY_STARTUP_SCREEN, ""); + boolean edit = false; + if (screen.isEmpty()){ + editor.putString(SettingsFragment.PREF_KEY_STARTUP_SCREEN, "arrivals"); + edit=true; + } + //Fetchers + final Set setSelected = mainSharedPref.getStringSet(SettingsFragment.KEY_ARRIVALS_FETCHERS_USE, new HashSet<>()); + if (setSelected.isEmpty()){ + String[] defaultVals = getResources().getStringArray(R.array.arrivals_sources_values_default); + editor.putStringSet(SettingsFragment.KEY_ARRIVALS_FETCHERS_USE, utils.convertArrayToSet(defaultVals)); + edit=true; + } + //Live bus positions + final String keySourcePositions=getString(R.string.pref_positions_source); + final String positionsSource = mainSharedPref.getString(keySourcePositions, ""); + if(positionsSource.isEmpty()){ + String[] defaultVals = getResources().getStringArray(R.array.positions_source_values); + editor.putString(keySourcePositions, defaultVals[0]); + edit=true; + } + //Map style + final String mapStylePref = mainSharedPref.getString(SettingsFragment.LIBREMAP_STYLE_PREF_KEY, ""); + if(mapStylePref.isEmpty()){ + final String[] defaultVals = getResources().getStringArray(R.array.map_style_pref_values); + editor.putString(SettingsFragment.LIBREMAP_STYLE_PREF_KEY, defaultVals[0]); + edit=true; + } + if (edit){ + editor.commit(); + } + + } }