diff options
author | ByteHamster <info@bytehamster.com> | 2020-10-11 19:26:15 +0200 |
---|---|---|
committer | ByteHamster <info@bytehamster.com> | 2020-10-11 19:31:06 +0200 |
commit | 7f7863b7be12dbdf8bfa038f6282bc1b0f3d6ab6 (patch) | |
tree | dee747f298bcb995e4a02214d9105b3fce896361 /app/src/main/java/de/danoeh/antennapod/activity/MainActivity.java | |
parent | 3e771c664f6705ac557d5d418132f992f2fb68be (diff) | |
download | AntennaPod-7f7863b7be12dbdf8bfa038f6282bc1b0f3d6ab6.zip |
Generate unique view IDs
Diffstat (limited to 'app/src/main/java/de/danoeh/antennapod/activity/MainActivity.java')
-rw-r--r-- | app/src/main/java/de/danoeh/antennapod/activity/MainActivity.java | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/app/src/main/java/de/danoeh/antennapod/activity/MainActivity.java b/app/src/main/java/de/danoeh/antennapod/activity/MainActivity.java index eaa423708..fffe5be60 100644 --- a/app/src/main/java/de/danoeh/antennapod/activity/MainActivity.java +++ b/app/src/main/java/de/danoeh/antennapod/activity/MainActivity.java @@ -19,6 +19,7 @@ import androidx.annotation.Nullable; import androidx.appcompat.app.ActionBarDrawerToggle; import androidx.appcompat.app.AlertDialog; import androidx.appcompat.widget.Toolbar; +import androidx.core.view.ViewCompat; import androidx.drawerlayout.widget.DrawerLayout; import androidx.fragment.app.Fragment; import androidx.fragment.app.FragmentManager; @@ -67,6 +68,7 @@ public class MainActivity extends CastEnabledActivity { public static final String EXTRA_FEED_ID = "fragment_feed_id"; public static final String EXTRA_OPEN_PLAYER = "open_player"; public static final String EXTRA_REFRESH_ON_START = "refresh_on_start"; + public static final String KEY_GENERATED_VIEW_ID = "generated_view_id"; private DrawerLayout drawerLayout; private View navDrawer; @@ -88,6 +90,9 @@ public class MainActivity extends CastEnabledActivity { public void onCreate(Bundle savedInstanceState) { lastTheme = UserPreferences.getNoTitleTheme(); setTheme(lastTheme); + if (savedInstanceState != null) { + ensureGeneratedViewIdGreaterThan(savedInstanceState.getInt(KEY_GENERATED_VIEW_ID, 0)); + } super.onCreate(savedInstanceState); StorageUtils.checkStorageAvailability(this); setContentView(R.layout.main); @@ -132,6 +137,25 @@ public class MainActivity extends CastEnabledActivity { sheetBehavior.setBottomSheetCallback(bottomSheetCallback); } + /** + * ViewCompat.generateViewId stores the current ID in a static variable. + * When the process is killed, the variable gets reset. + * This makes sure that we do not get ID collisions + * and therefore errors when trying to restore state from another view. + */ + @SuppressWarnings("StatementWithEmptyBody") + private void ensureGeneratedViewIdGreaterThan(int minimum) { + while (ViewCompat.generateViewId() <= minimum) { + // Generate new IDs + } + } + + @Override + protected void onSaveInstanceState(@NonNull Bundle outState) { + super.onSaveInstanceState(outState); + outState.putInt(KEY_GENERATED_VIEW_ID, ViewCompat.generateViewId()); + } + private BottomSheetBehavior.BottomSheetCallback bottomSheetCallback = new BottomSheetBehavior.BottomSheetCallback() { @Override |