diff --git a/res/values/strings.xml b/res/values/strings.xml
index 9ab8c61f631..0151746f0e3 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -3434,6 +3434,10 @@
Moving
+
+ Another migration is already in progress.
+
Not enough storage space.
App doesn\u2019t exist.
diff --git a/src/com/android/settings/deviceinfo/StorageWizardMigrateConfirm.java b/src/com/android/settings/deviceinfo/StorageWizardMigrateConfirm.java
index 3eae0817f14..7b98dc252ad 100644
--- a/src/com/android/settings/deviceinfo/StorageWizardMigrateConfirm.java
+++ b/src/com/android/settings/deviceinfo/StorageWizardMigrateConfirm.java
@@ -19,11 +19,16 @@ package com.android.settings.deviceinfo;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.os.Bundle;
+import android.os.storage.DiskInfo;
+import android.os.storage.StorageManager;
import android.os.storage.VolumeInfo;
import android.util.Log;
+import android.widget.Toast;
import com.android.settings.R;
+import java.util.Objects;
+
import static com.android.settings.deviceinfo.StorageSettings.TAG;
public class StorageWizardMigrateConfirm extends StorageWizardBase {
@@ -70,7 +75,31 @@ public class StorageWizardMigrateConfirm extends StorageWizardBase {
@Override
public void onNavigateNext() {
- final int moveId = getPackageManager().movePrimaryStorage(mVolume);
+ int moveId;
+
+ // We only expect exceptions from MountService#setPrimaryStorageUuid
+ try {
+ moveId = getPackageManager().movePrimaryStorage(mVolume);
+ } catch (IllegalArgumentException e) {
+ StorageManager sm = (StorageManager) getSystemService(STORAGE_SERVICE);
+
+ if (Objects.equals(mVolume.getFsUuid(), sm.getPrimaryStorageVolume().getUuid())) {
+ final Intent intent = new Intent(this, StorageWizardReady.class);
+ intent.putExtra(DiskInfo.EXTRA_DISK_ID, mDisk.getId());
+ startActivity(intent);
+ finishAffinity();
+
+ return;
+ } else {
+ throw e;
+ }
+ } catch (IllegalStateException e) {
+ Toast.makeText(this, getString(R.string.another_migration_already_in_progress),
+ Toast.LENGTH_LONG).show();
+ finishAffinity();
+
+ return;
+ }
final Intent intent = new Intent(this, StorageWizardMigrateProgress.class);
intent.putExtra(VolumeInfo.EXTRA_VOLUME_ID, mVolume.getId());
diff --git a/src/com/android/settings/deviceinfo/StorageWizardMigrateProgress.java b/src/com/android/settings/deviceinfo/StorageWizardMigrateProgress.java
index 163ff42b865..ade3bfab6db 100644
--- a/src/com/android/settings/deviceinfo/StorageWizardMigrateProgress.java
+++ b/src/com/android/settings/deviceinfo/StorageWizardMigrateProgress.java
@@ -76,9 +76,11 @@ public class StorageWizardMigrateProgress extends StorageWizardBase {
finishIntent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY);
sendBroadcast(finishIntent);
- final Intent intent = new Intent(context, StorageWizardReady.class);
- intent.putExtra(DiskInfo.EXTRA_DISK_ID, mDisk.getId());
- startActivity(intent);
+ if (!StorageWizardMigrateProgress.this.isFinishing()) {
+ final Intent intent = new Intent(context, StorageWizardReady.class);
+ intent.putExtra(DiskInfo.EXTRA_DISK_ID, mDisk.getId());
+ startActivity(intent);
+ }
}
} else {
Toast.makeText(context, getString(R.string.insufficient_storage),