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
diff --git a/src/com/android/settings/deviceinfo/StorageSettings.java b/src/com/android/settings/deviceinfo/StorageSettings.java
index ce9ea9b..80b8ac2 100644
--- a/src/com/android/settings/deviceinfo/StorageSettings.java
+++ b/src/com/android/settings/deviceinfo/StorageSettings.java
@@ -93,6 +93,8 @@
     private StorageSummaryPreference mInternalSummary;
     private static long sTotalInternalStorage;
 
+    private boolean mHasLaunchedPrivateVolumeSettings = false;
+
     @Override
     public int getMetricsCategory() {
         return MetricsEvent.DEVICEINFO_STORAGE;
@@ -110,7 +112,6 @@
         final Context context = getActivity();
 
         mStorageManager = context.getSystemService(StorageManager.class);
-        mStorageManager.registerListener(mStorageListener);
 
         if (sTotalInternalStorage <= 0) {
             sTotalInternalStorage = mStorageManager.getPrimaryStorageSize();
@@ -231,14 +232,17 @@
         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();
+            }
         }
     }