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
This commit is contained in:
committed by
Takamasa Kuramitsu
parent
c4b0fa5858
commit
b699603f68
@@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user