From b699603f68a421bc7e2b9e7522b17489000f99eb Mon Sep 17 00:00:00 2001 From: Li YanJia Date: Mon, 6 Feb 2017 14:50:56 +0800 Subject: [PATCH] Fix PrivateVolumeSettings be launched repeatedly Symptom: After manually pull out the removable sd card or usb storage in StorageSettings screen, it automatically moves to PrivateVolumeSettings screen. This time, launching PrivateVolumeSettings Activity is triggered six times and end-user has to press back key six times to exit PrivateVolumeSettings screen. Root cause: When sd card is pulled out, StorageSettings got three state change event (UNMOUNTED, BAD_REMOVAL and onDiskDestroyed) through StorageEventListener that triggers launching PrivateVolumeSettings screen. In addition StorageSettings register the listener two times, then StorageSettings receives six event in total. Therefore, PrivateVolumeSettings screen is launched six times. Solution: Skip launching PrivateVolumeSettings if it's already triggered. And removed the duplicated listener registration. Bug: 67612903 Change-Id: Iabef51677a393977b7be29fc54aa050434213500 --- .../settings/deviceinfo/StorageSettings.java | 22 +++++++++++-------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/src/com/android/settings/deviceinfo/StorageSettings.java b/src/com/android/settings/deviceinfo/StorageSettings.java index ce9ea9b0c2e..80b8ac2a2d2 100644 --- a/src/com/android/settings/deviceinfo/StorageSettings.java +++ b/src/com/android/settings/deviceinfo/StorageSettings.java @@ -93,6 +93,8 @@ public class StorageSettings extends SettingsPreferenceFragment implements Index private StorageSummaryPreference mInternalSummary; private static long sTotalInternalStorage; + private boolean mHasLaunchedPrivateVolumeSettings = false; + @Override public int getMetricsCategory() { return MetricsEvent.DEVICEINFO_STORAGE; @@ -110,7 +112,6 @@ public class StorageSettings extends SettingsPreferenceFragment implements Index final Context context = getActivity(); mStorageManager = context.getSystemService(StorageManager.class); - mStorageManager.registerListener(mStorageListener); if (sTotalInternalStorage <= 0) { sTotalInternalStorage = mStorageManager.getPrimaryStorageSize(); @@ -231,14 +232,17 @@ public class StorageSettings extends SettingsPreferenceFragment implements Index if (mInternalCategory.getPreferenceCount() == 2 && mExternalCategory.getPreferenceCount() == 0) { // Only showing primary internal storage, so just shortcut - final Bundle args = new Bundle(); - args.putString(VolumeInfo.EXTRA_VOLUME_ID, VolumeInfo.ID_PRIVATE_INTERNAL); - Intent intent = Utils.onBuildStartFragmentIntent(getActivity(), - StorageDashboardFragment.class.getName(), args, null, - R.string.storage_settings, null, false, getMetricsCategory()); - intent.putExtra(SettingsDrawerActivity.EXTRA_SHOW_MENU, true); - getActivity().startActivity(intent); - finish(); + if (!mHasLaunchedPrivateVolumeSettings) { + mHasLaunchedPrivateVolumeSettings = true; + final Bundle args = new Bundle(); + args.putString(VolumeInfo.EXTRA_VOLUME_ID, VolumeInfo.ID_PRIVATE_INTERNAL); + Intent intent = Utils.onBuildStartFragmentIntent(getActivity(), + StorageDashboardFragment.class.getName(), args, null, + R.string.storage_settings, null, false, getMetricsCategory()); + intent.putExtra(SettingsDrawerActivity.EXTRA_SHOW_MENU, true); + getActivity().startActivity(intent); + finish(); + } } }