diff options
author | Tony Mantler <nicoya@google.com> | 2016-05-31 21:41:20 +0000 |
---|---|---|
committer | android-build-merger <android-build-merger@google.com> | 2016-05-31 21:41:20 +0000 |
commit | 1485479b48d6ecb3166ec0ca72eaa09dd7f9afb5 (patch) | |
tree | e00ca8e4156bb0eb4b60fe1e6fef2a1d9194b8ce | |
parent | 02e4f676969fd60cf88e61a3fa4fd36d6b7b67b6 (diff) | |
parent | f235e5cb3f3a0b6738907ce31e47b9c382badaa2 (diff) | |
download | TvSettings-1485479b48d6ecb3166ec0ca72eaa09dd7f9afb5.tar.gz |
Merge "Handle exceptions when migrating storage" into nyc-dev
am: f235e5cb3f
* commit 'f235e5cb3f3a0b6738907ce31e47b9c382badaa2':
Handle exceptions when migrating storage
Change-Id: If8c0e4f318c08b78f7fc1341f3fccfbb0c4f0662
-rw-r--r-- | Settings/src/com/android/tv/settings/device/storage/BackupAppsStepFragment.java | 5 | ||||
-rw-r--r-- | Settings/src/com/android/tv/settings/device/storage/MigrateStorageActivity.java | 64 |
2 files changed, 50 insertions, 19 deletions
diff --git a/Settings/src/com/android/tv/settings/device/storage/BackupAppsStepFragment.java b/Settings/src/com/android/tv/settings/device/storage/BackupAppsStepFragment.java index 1057da644..4638f3b01 100644 --- a/Settings/src/com/android/tv/settings/device/storage/BackupAppsStepFragment.java +++ b/Settings/src/com/android/tv/settings/device/storage/BackupAppsStepFragment.java @@ -290,9 +290,12 @@ public class BackupAppsStepFragment extends GuidedStepFragment implements @Override protected void onPostExecute(Map<String, Drawable> stringDrawableMap) { + mIconLoaderTask = null; + if (!isAdded()) { + return; + } mIconMap.putAll(stringDrawableMap); setActions(getAppActions(false, mEntries)); - mIconLoaderTask = null; } } diff --git a/Settings/src/com/android/tv/settings/device/storage/MigrateStorageActivity.java b/Settings/src/com/android/tv/settings/device/storage/MigrateStorageActivity.java index 619c0937e..d276f24b2 100644 --- a/Settings/src/com/android/tv/settings/device/storage/MigrateStorageActivity.java +++ b/Settings/src/com/android/tv/settings/device/storage/MigrateStorageActivity.java @@ -31,6 +31,7 @@ import android.support.v17.leanback.widget.GuidanceStylist; import android.support.v17.leanback.widget.GuidedAction; import android.text.TextUtils; import android.text.format.Formatter; +import android.util.Log; import android.view.View; import android.widget.Toast; @@ -39,8 +40,10 @@ import com.android.tv.settings.dialog.ProgressDialogFragment; import java.io.File; import java.util.List; +import java.util.Objects; public class MigrateStorageActivity extends Activity { + private static final String TAG = "MigrateStorageActivity"; private static final String EXTRA_MIGRATE_HERE = "com.android.tv.settings.device.storage.MigrateStorageActivity.MIGRATE_HERE"; @@ -61,13 +64,9 @@ public class MigrateStorageActivity extends Activity { return; } if (status == PackageManager.MOVE_SUCCEEDED) { - Toast.makeText(MigrateStorageActivity.this, - getString(R.string.storage_wizard_migrate_toast_success, mTargetVolumeDesc), - Toast.LENGTH_SHORT).show(); + showMigrationSuccessToast(); } else { - Toast.makeText(MigrateStorageActivity.this, - getString(R.string.storage_wizard_migrate_toast_failure, mTargetVolumeDesc), - Toast.LENGTH_SHORT).show(); + showMigrationFailureToast(); } finish(); } @@ -134,24 +133,53 @@ public class MigrateStorageActivity extends Activity { } private void onConfirmProceed() { - getFragmentManager().beginTransaction() - .replace(android.R.id.content, - MigrateProgressFragment.newInstance(mTargetVolumeDesc)) - .commit(); - getFragmentManager().executePendingTransactions(); - mMoveId = mPackageManager.movePrimaryStorage(mTargetVolumeInfo); + startMigrationInternal(); } private void onChoose(VolumeInfo volumeInfo) { mTargetVolumeInfo = volumeInfo; final StorageManager storageManager = getSystemService(StorageManager.class); mTargetVolumeDesc = storageManager.getBestVolumeDescription(mTargetVolumeInfo); - getFragmentManager().beginTransaction() - .replace(android.R.id.content, - MigrateProgressFragment.newInstance(mTargetVolumeDesc)) - .commit(); - getFragmentManager().executePendingTransactions(); - mMoveId = mPackageManager.movePrimaryStorage(mTargetVolumeInfo); + startMigrationInternal(); + } + + private void startMigrationInternal() { + try { + mMoveId = mPackageManager.movePrimaryStorage(mTargetVolumeInfo); + getFragmentManager().beginTransaction() + .replace(android.R.id.content, + MigrateProgressFragment.newInstance(mTargetVolumeDesc)) + .commitNow(); + } catch (IllegalArgumentException e) { + // This will generally happen if there's a move already in progress or completed + StorageManager sm = (StorageManager) getSystemService(STORAGE_SERVICE); + + if (Objects.equals(mTargetVolumeInfo.getFsUuid(), + sm.getPrimaryStorageVolume().getUuid())) { + // The data is already on the target volume + showMigrationSuccessToast(); + } else { + // The data is most likely in the process of being moved + Log.e(TAG, "Storage migration failure", e); + showMigrationFailureToast(); + } + finish(); + } catch (IllegalStateException e) { + showMigrationFailureToast(); + finish(); + } + } + + private void showMigrationSuccessToast() { + Toast.makeText(MigrateStorageActivity.this, + getString(R.string.storage_wizard_migrate_toast_success, mTargetVolumeDesc), + Toast.LENGTH_SHORT).show(); + } + + private void showMigrationFailureToast() { + Toast.makeText(MigrateStorageActivity.this, + getString(R.string.storage_wizard_migrate_toast_failure, mTargetVolumeDesc), + Toast.LENGTH_SHORT).show(); } public static class MigrateConfirmationStepFragment extends GuidedStepFragment { |