diff options
author | Oleg Kibirev <olegk@google.com> | 2023-11-30 01:16:30 +0000 |
---|---|---|
committer | Oleg Kibirev <olegk@google.com> | 2023-11-30 01:20:45 +0000 |
commit | 96008d7fa97615fb121d0a4b5b08f5cdc3f9eba5 (patch) | |
tree | 2535065949c07616b635fef3b6ee4a19ce665374 | |
parent | bce83d6c372617a55a051e475c0bb76e0143f9ea (diff) | |
download | TvSettings-96008d7fa97615fb121d0a4b5b08f5cdc3f9eba5.tar.gz |
Use state loss version of fragment transactions
This should get rid of entire class of rare crashes
Bug: 299249188
Change-Id: Ic2d0405e216b52f0aef7f13b4ccd053fe18c2a25
15 files changed, 33 insertions, 32 deletions
diff --git a/Settings/src/com/android/tv/settings/TvSettingsActivity.java b/Settings/src/com/android/tv/settings/TvSettingsActivity.java index a3ab44211..e80b04c87 100644 --- a/Settings/src/com/android/tv/settings/TvSettingsActivity.java +++ b/Settings/src/com/android/tv/settings/TvSettingsActivity.java @@ -94,7 +94,7 @@ public abstract class TvSettingsActivity extends FragmentActivity { .setCustomAnimations(android.R.animator.fade_in, android.R.animator.fade_out) .add(android.R.id.content, fragment, SETTINGS_FRAGMENT_TAG) - .commitNow(); + .commitNowAllowingStateLoss(); return; } @@ -114,7 +114,7 @@ public abstract class TvSettingsActivity extends FragmentActivity { getSupportFragmentManager().beginTransaction() .add(android.R.id.content, fragment, SETTINGS_FRAGMENT_TAG) - .commitNow(); + .commitNowAllowingStateLoss(); }); final Slide slide = new Slide(Gravity.END); @@ -144,7 +144,7 @@ public abstract class TvSettingsActivity extends FragmentActivity { final Scene scene = new Scene(root); scene.setEnterAction(() -> getSupportFragmentManager().beginTransaction() .remove(fragment) - .commitNow()); + .commitNowAllowingStateLoss()); final Slide slide = new Slide(Gravity.END); slide.setSlideFraction( getResources().getDimension(R.dimen.lb_settings_pane_width) / root.getWidth()); @@ -217,7 +217,7 @@ public abstract class TvSettingsActivity extends FragmentActivity { android.R.id.content, createSettingsFragment(), SETTINGS_FRAGMENT_TAG) - .commitNow(); + .commitNowAllowingStateLoss(); } } else { Log.v(TAG, "Startup verification cancelled or failed."); diff --git a/Settings/src/com/android/tv/settings/accessibility/AccessibilityColorCorrectionActivity.java b/Settings/src/com/android/tv/settings/accessibility/AccessibilityColorCorrectionActivity.java index d80f95f01..dd0d34b33 100644 --- a/Settings/src/com/android/tv/settings/accessibility/AccessibilityColorCorrectionActivity.java +++ b/Settings/src/com/android/tv/settings/accessibility/AccessibilityColorCorrectionActivity.java @@ -25,7 +25,7 @@ public class AccessibilityColorCorrectionActivity extends TvSettingsActivity { AccessibilityColorCorrectionSettingsFragment.newInstance()) .add(android.R.id.content, AccessibilityColorCorrectionPreviewFragment.newInstance()) - .commit(); + .commitAllowingStateLoss(); return null; } }
\ No newline at end of file diff --git a/Settings/src/com/android/tv/settings/accessories/AddAccessoryActivity.java b/Settings/src/com/android/tv/settings/accessories/AddAccessoryActivity.java index cf94bfaf7..255f134f4 100644 --- a/Settings/src/com/android/tv/settings/accessories/AddAccessoryActivity.java +++ b/Settings/src/com/android/tv/settings/accessories/AddAccessoryActivity.java @@ -237,7 +237,7 @@ public class AddAccessoryActivity extends FragmentActivity fm.beginTransaction() .add(R.id.action_fragment, mPreferenceFragment) .add(R.id.content_fragment, mContentFragment) - .commit(); + .commitAllowingStateLoss(); } else { mPreferenceFragment = (AddAccessoryPreferenceFragment) fm.getFragment(savedInstanceState, diff --git a/Settings/src/com/android/tv/settings/connectivity/AddWifiNetworkActivity.java b/Settings/src/com/android/tv/settings/connectivity/AddWifiNetworkActivity.java index 3b77e2c7a..370e96eb3 100644 --- a/Settings/src/com/android/tv/settings/connectivity/AddWifiNetworkActivity.java +++ b/Settings/src/com/android/tv/settings/connectivity/AddWifiNetworkActivity.java @@ -215,7 +215,7 @@ public class AddWifiNetworkActivity extends InstrumentedActivity updateTransaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_CLOSE); } updateTransaction.replace(R.id.wifi_container, fragment, TAG); - updateTransaction.commit(); + updateTransaction.commitAllowingStateLoss(); } } diff --git a/Settings/src/com/android/tv/settings/connectivity/EditIpSettingsActivity.java b/Settings/src/com/android/tv/settings/connectivity/EditIpSettingsActivity.java index a47f4ae1c..5814c6b1f 100644 --- a/Settings/src/com/android/tv/settings/connectivity/EditIpSettingsActivity.java +++ b/Settings/src/com/android/tv/settings/connectivity/EditIpSettingsActivity.java @@ -152,7 +152,7 @@ public class EditIpSettingsActivity extends InstrumentedActivity implements updateTransaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_CLOSE); } updateTransaction.replace(R.id.wifi_container, fragment, TAG); - updateTransaction.commit(); + updateTransaction.commitAllowingStateLoss(); } } diff --git a/Settings/src/com/android/tv/settings/connectivity/EditProxySettingsActivity.java b/Settings/src/com/android/tv/settings/connectivity/EditProxySettingsActivity.java index ee5b29f2b..34adc5c47 100644 --- a/Settings/src/com/android/tv/settings/connectivity/EditProxySettingsActivity.java +++ b/Settings/src/com/android/tv/settings/connectivity/EditProxySettingsActivity.java @@ -149,7 +149,7 @@ public class EditProxySettingsActivity extends InstrumentedActivity implements updateTransaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_CLOSE); } updateTransaction.replace(R.id.wifi_container, fragment, TAG); - updateTransaction.commit(); + updateTransaction.commitAllowingStateLoss(); } } diff --git a/Settings/src/com/android/tv/settings/device/apps/MoveAppActivity.java b/Settings/src/com/android/tv/settings/device/apps/MoveAppActivity.java index 47c7bb61d..ce6e88edd 100644 --- a/Settings/src/com/android/tv/settings/device/apps/MoveAppActivity.java +++ b/Settings/src/com/android/tv/settings/device/apps/MoveAppActivity.java @@ -86,7 +86,7 @@ public class MoveAppActivity extends FragmentActivity implements MoveAppStepFrag final Fragment fragment = MoveAppStepFragment.newInstance(packageName, packageDesc); getSupportFragmentManager().beginTransaction() .add(android.R.id.content, fragment) - .commit(); + .commitAllowingStateLoss(); } } @@ -118,7 +118,7 @@ public class MoveAppActivity extends FragmentActivity implements MoveAppStepFrag getSupportFragmentManager().beginTransaction() .replace(android.R.id.content, fragment) - .commit(); + .commitAllowingStateLoss(); } } diff --git a/Settings/src/com/android/tv/settings/device/eco/EnergyModeConfirmationActivity.java b/Settings/src/com/android/tv/settings/device/eco/EnergyModeConfirmationActivity.java index 9578d179a..6f642e68c 100644 --- a/Settings/src/com/android/tv/settings/device/eco/EnergyModeConfirmationActivity.java +++ b/Settings/src/com/android/tv/settings/device/eco/EnergyModeConfirmationActivity.java @@ -67,7 +67,7 @@ public class EnergyModeConfirmationActivity extends FragmentActivity { getSupportFragmentManager() .beginTransaction() .add(android.R.id.content, dialogFragment) - .commit(); + .commitAllowingStateLoss(); } } } diff --git a/Settings/src/com/android/tv/settings/device/storage/FormatActivity.java b/Settings/src/com/android/tv/settings/device/storage/FormatActivity.java index da3fa5db9..7e871e369 100644 --- a/Settings/src/com/android/tv/settings/device/storage/FormatActivity.java +++ b/Settings/src/com/android/tv/settings/device/storage/FormatActivity.java @@ -141,7 +141,7 @@ public class FormatActivity extends FragmentActivity } getSupportFragmentManager().beginTransaction() .add(android.R.id.content, f) - .commit(); + .commitAllowingStateLoss(); } } @@ -206,7 +206,7 @@ public class FormatActivity extends FragmentActivity getSupportFragmentManager().beginTransaction() .replace(android.R.id.content, SlowDriveStepFragment.newInstance()) - .commit(); + .commitAllowingStateLoss(); return; } } @@ -278,7 +278,7 @@ public class FormatActivity extends FragmentActivity final FormattingProgressFragment fragment = FormattingProgressFragment.newInstance(); getSupportFragmentManager().beginTransaction() .replace(android.R.id.content, fragment) - .commit(); + .commitAllowingStateLoss(); mFormatAsPrivateDiskId = diskId; final List<VolumeInfo> volumes = mStorageManager.getVolumes(); @@ -321,7 +321,7 @@ public class FormatActivity extends FragmentActivity final FormattingProgressFragment fragment = FormattingProgressFragment.newInstance(); getSupportFragmentManager().beginTransaction() .replace(android.R.id.content, fragment) - .commit(); + .commitAllowingStateLoss(); mFormatAsPublicDiskId = diskId; if (!TextUtils.isEmpty(volumeId)) { diff --git a/Settings/src/com/android/tv/settings/device/storage/FormatAsPublicStepFragment.java b/Settings/src/com/android/tv/settings/device/storage/FormatAsPublicStepFragment.java index 89e6d79eb..a3e1ee2a5 100644 --- a/Settings/src/com/android/tv/settings/device/storage/FormatAsPublicStepFragment.java +++ b/Settings/src/com/android/tv/settings/device/storage/FormatAsPublicStepFragment.java @@ -104,7 +104,7 @@ public class FormatAsPublicStepFragment extends GuidedStepSupportFragment { getFragmentManager().beginTransaction() .replace(android.R.id.content, f) .addToBackStack(null) - .commit(); + .commitAllowingStateLoss(); } else if (id == ACTION_ID_FORMAT) { ((Callback) getActivity()).onRequestFormatAsPublic(mDiskId, mVolumeId); } diff --git a/Settings/src/com/android/tv/settings/device/storage/MigrateStorageActivity.java b/Settings/src/com/android/tv/settings/device/storage/MigrateStorageActivity.java index e92cb237a..c9a3e1766 100644 --- a/Settings/src/com/android/tv/settings/device/storage/MigrateStorageActivity.java +++ b/Settings/src/com/android/tv/settings/device/storage/MigrateStorageActivity.java @@ -99,7 +99,7 @@ public class MigrateStorageActivity extends FragmentActivity { getSupportFragmentManager().beginTransaction() .add(android.R.id.content, MigrateConfirmationStepFragment.newInstance(mTargetVolumeDesc)) - .commit(); + .commitAllowingStateLoss(); } else { mVolumeInfo = storageManager.findVolumeById(volumeId); if (mVolumeInfo == null) { @@ -110,7 +110,7 @@ public class MigrateStorageActivity extends FragmentActivity { getSupportFragmentManager().beginTransaction() .add(android.R.id.content, ChooseStorageStepFragment.newInstance(mVolumeInfo)) - .commit(); + .commitAllowingStateLoss(); } mPackageManager = getPackageManager(); @@ -150,7 +150,7 @@ public class MigrateStorageActivity extends FragmentActivity { getSupportFragmentManager().beginTransaction() .replace(android.R.id.content, MigrateProgressFragment.newInstance(mTargetVolumeDesc)) - .commitNow(); + .commitNowAllowingStateLoss(); } catch (IllegalArgumentException e) { // This will generally happen if there's a move already in progress or completed StorageManager sm = (StorageManager) getSystemService(STORAGE_SERVICE); diff --git a/Settings/src/com/android/tv/settings/device/storage/NewStorageActivity.java b/Settings/src/com/android/tv/settings/device/storage/NewStorageActivity.java index a39c4f1a2..75ddfa44f 100644 --- a/Settings/src/com/android/tv/settings/device/storage/NewStorageActivity.java +++ b/Settings/src/com/android/tv/settings/device/storage/NewStorageActivity.java @@ -82,7 +82,7 @@ public class NewStorageActivity extends FragmentActivity { getSupportFragmentManager().beginTransaction() .add(android.R.id.content, MissingStorageFragment.newInstance(fsUuid)) - .commit(); + .commitAllowingStateLoss(); } else { final String volumeId = getIntent().getStringExtra(VolumeInfo.EXTRA_VOLUME_ID); final String diskId = getIntent().getStringExtra(DiskInfo.EXTRA_DISK_ID); @@ -93,7 +93,7 @@ public class NewStorageActivity extends FragmentActivity { getSupportFragmentManager().beginTransaction() .add(android.R.id.content, NewStorageFragment.newInstance(volumeId, diskId)) - .commit(); + .commitAllowingStateLoss(); } } } diff --git a/Settings/src/com/android/tv/settings/device/storage/UnmountActivity.java b/Settings/src/com/android/tv/settings/device/storage/UnmountActivity.java index 4eb543e2f..a334c027a 100644 --- a/Settings/src/com/android/tv/settings/device/storage/UnmountActivity.java +++ b/Settings/src/com/android/tv/settings/device/storage/UnmountActivity.java @@ -85,7 +85,7 @@ public class UnmountActivity extends FragmentActivity { final Fragment fragment = UnmountPrivateStepFragment.newInstance(mUnmountVolumeId); getSupportFragmentManager().beginTransaction() .replace(android.R.id.content, fragment) - .commit(); + .commitAllowingStateLoss(); } else { // Jump straight to unmounting onRequestUnmount(); @@ -104,7 +104,7 @@ public class UnmountActivity extends FragmentActivity { final Fragment fragment = UnmountProgressFragment.newInstance(mUnmountVolumeDesc); getSupportFragmentManager().beginTransaction() .replace(android.R.id.content, fragment) - .commit(); + .commitAllowingStateLoss(); // Post this so that it will presumably run after onResume, if we're calling from onCreate() mHandler.post(new Runnable() { @Override diff --git a/Settings/src/com/android/tv/settings/system/CaptionSetupActivity.java b/Settings/src/com/android/tv/settings/system/CaptionSetupActivity.java index c50094f8a..e51c554c5 100644 --- a/Settings/src/com/android/tv/settings/system/CaptionSetupActivity.java +++ b/Settings/src/com/android/tv/settings/system/CaptionSetupActivity.java @@ -27,7 +27,7 @@ public class CaptionSetupActivity extends FragmentActivity { if (savedInstanceState == null) { getSupportFragmentManager().beginTransaction() .add(android.R.id.content, CaptionSettingsFragment.newInstance()) - .commit(); + .commitAllowingStateLoss(); } } } diff --git a/TwoPanelSettingsLib/src/com/android/tv/twopanelsettings/TwoPanelSettingsFragment.java b/TwoPanelSettingsLib/src/com/android/tv/twopanelsettings/TwoPanelSettingsFragment.java index c8d817cff..6d70fa780 100644 --- a/TwoPanelSettingsLib/src/com/android/tv/twopanelsettings/TwoPanelSettingsFragment.java +++ b/TwoPanelSettingsLib/src/com/android/tv/twopanelsettings/TwoPanelSettingsFragment.java @@ -342,7 +342,7 @@ public abstract class TwoPanelSettingsFragment extends Fragment implements final FragmentTransaction transaction = getChildFragmentManager().beginTransaction(); transaction.replace(frameResIds[mPrefPanelIdx + 1], initialPreviewFragment, PREVIEW_FRAGMENT_TAG); - transaction.commit(); + transaction.commitAllowingStateLoss(); moveToPanel(mPrefPanelIdx, true); removeFragmentAndAddToBackStack(mPrefPanelIdx - 1); @@ -426,7 +426,7 @@ public abstract class TwoPanelSettingsFragment extends Fragment implements addOrRemovePreferenceFocusedListener(fragment, true); FragmentTransaction transaction = getChildFragmentManager().beginTransaction(); transaction.add(frameResIds[mPrefPanelIdx], fragment, PREFERENCE_FRAGMENT_TAG); - transaction.commitNow(); + transaction.commitNowAllowingStateLoss(); Fragment initialPreviewFragment = getInitialPreviewFragment(fragment); if (initialPreviewFragment == null) { @@ -437,7 +437,7 @@ public abstract class TwoPanelSettingsFragment extends Fragment implements transaction = getChildFragmentManager().beginTransaction(); transaction.add(frameResIds[mPrefPanelIdx + 1], initialPreviewFragment, initialPreviewFragment.getClass().toString()); - transaction.commit(); + transaction.commitAllowingStateLoss(); } @Override @@ -682,7 +682,7 @@ public abstract class TwoPanelSettingsFragment extends Fragment implements .add(R.id.two_panel_fragment_container, fragment) .remove(target) .addToBackStack(null) - .commit(); + .commitAllowingStateLoss(); mHandler.post(() -> { updateAccessibilityTitle(fragment); }); @@ -916,7 +916,7 @@ public abstract class TwoPanelSettingsFragment extends Fragment implements private void removeFragment(int index) { Fragment fragment = getChildFragmentManager().findFragmentById(frameResIds[index]); if (fragment != null) { - getChildFragmentManager().beginTransaction().remove(fragment).commit(); + getChildFragmentManager().beginTransaction().remove(fragment).commitAllowingStateLoss(); } } @@ -928,7 +928,8 @@ public abstract class TwoPanelSettingsFragment extends Fragment implements if (removePanel != null) { removePanel.setExitTransition(new Fade()); getChildFragmentManager().beginTransaction().remove(removePanel) - .addToBackStack("remove " + removePanel.getClass().getName()).commit(); + .addToBackStack("remove " + removePanel.getClass().getName()) + .commitAllowingStateLoss(); } } @@ -1207,7 +1208,7 @@ public abstract class TwoPanelSettingsFragment extends Fragment implements transaction.setCustomAnimations(R.animator.fade_in_preview_panel, R.animator.fade_out_preview_panel); transaction.replace(frameResIds[mPrefPanelIdx], newPrefFragment); - transaction.commit(); + transaction.commitAllowingStateLoss(); } else { Preference preference = getChosenPreference(prefFragment); if (preference != null) { |