Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b699603f authored by Li YanJia's avatar Li YanJia Committed by Takamasa Kuramitsu
Browse files

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
parent c4b0fa58
Loading
Loading
Loading
Loading
+13 −9
Original line number Diff line number Diff line
@@ -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,6 +232,8 @@ public class StorageSettings extends SettingsPreferenceFragment implements Index
        if (mInternalCategory.getPreferenceCount() == 2
                && mExternalCategory.getPreferenceCount() == 0) {
            // Only showing primary internal storage, so just shortcut
            if (!mHasLaunchedPrivateVolumeSettings) {
                mHasLaunchedPrivateVolumeSettings = true;
                final Bundle args = new Bundle();
                args.putString(VolumeInfo.EXTRA_VOLUME_ID, VolumeInfo.ID_PRIVATE_INTERNAL);
                Intent intent = Utils.onBuildStartFragmentIntent(getActivity(),
@@ -241,6 +244,7 @@ public class StorageSettings extends SettingsPreferenceFragment implements Index
                finish();
            }
        }
    }

    @Override
    public void onResume() {