diff options
author | Jeff Sharkey <jsharkey@android.com> | 2015-05-19 19:03:34 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2015-05-19 19:03:35 +0000 |
commit | d0393cd0417ecc8aed686578381745a88fb77f92 (patch) | |
tree | 7d444134c5c85f08ba12a23f21ca85383aa22629 | |
parent | 3a310719d816b8608cd51469c62231a1ed41a608 (diff) | |
parent | 0de2014380459caa48bc278ce92cc60344f58ebd (diff) | |
download | packages_apps_Settings-d0393cd0417ecc8aed686578381745a88fb77f92.zip packages_apps_Settings-d0393cd0417ecc8aed686578381745a88fb77f92.tar.gz packages_apps_Settings-d0393cd0417ecc8aed686578381745a88fb77f92.tar.bz2 |
Merge "Warn user when adopted device is slow." into mnc-dev
-rw-r--r-- | res/values/strings.xml | 6 | ||||
-rw-r--r-- | src/com/android/settings/deviceinfo/StorageWizardFormatProgress.java | 125 |
2 files changed, 96 insertions, 35 deletions
diff --git a/res/values/strings.xml b/res/values/strings.xml index feb10a7..c00d904 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -2451,6 +2451,12 @@ <!-- Title of wizard button offering to cancel move [CHAR LIMIT=32] --> <string name="storage_wizard_move_progress_cancel">Cancel move</string> + <!-- Title of wizard step prompting user to start data migration [CHAR LIMIT=32] --> + <string name="storage_wizard_slow_body">This <xliff:g id="name" example="SD card">^1</xliff:g> appears to be slow. +\n\nYou can continue, but apps moved to this location may stutter and data transfers may take a long time. +\n\nConsider using a faster <xliff:g id="name" example="SD card">^1</xliff:g> for better performance. +</string> + <!-- Phone info screen, section titles: --> <string name="battery_status_title">Battery status</string> <!-- Phone info screen, section titles: --> diff --git a/src/com/android/settings/deviceinfo/StorageWizardFormatProgress.java b/src/com/android/settings/deviceinfo/StorageWizardFormatProgress.java index e2e6dbe..f1f4510 100644 --- a/src/com/android/settings/deviceinfo/StorageWizardFormatProgress.java +++ b/src/com/android/settings/deviceinfo/StorageWizardFormatProgress.java @@ -18,7 +18,11 @@ package com.android.settings.deviceinfo; import static com.android.settings.deviceinfo.StorageSettings.TAG; +import android.app.AlertDialog; +import android.app.Dialog; +import android.app.DialogFragment; import android.content.Context; +import android.content.DialogInterface; import android.content.Intent; import android.os.AsyncTask; import android.os.Bundle; @@ -33,6 +37,8 @@ import com.android.internal.util.Preconditions; import com.android.settings.R; public class StorageWizardFormatProgress extends StorageWizardBase { + private static final String TAG_SLOW_WARNING = "slow_warning"; + private boolean mFormatPrivate; @Override @@ -56,6 +62,9 @@ public class StorageWizardFormatProgress extends StorageWizardBase { } public class PartitionTask extends AsyncTask<Void, Integer, Exception> { + private volatile long mInternalBench; + private volatile long mPrivateBench; + @Override protected Exception doInBackground(Void... params) { try { @@ -63,15 +72,12 @@ public class StorageWizardFormatProgress extends StorageWizardBase { mStorage.partitionPrivate(mDisk.getId()); publishProgress(40); - final long internalBench = mStorage.benchmark(null); + mInternalBench = mStorage.benchmark(null); publishProgress(60); final VolumeInfo privateVol = findFirstVolume(VolumeInfo.TYPE_PRIVATE); - final long privateBench = mStorage.benchmark(privateVol.id); + mPrivateBench = mStorage.benchmark(privateVol.id); - // TODO: plumb through to user when below threshold - final float pct = (float) internalBench / (float) privateBench; - Log.d(TAG, "New volume is " + pct + "x the speed of internal"); } else { mStorage.partitionPublic(mDisk.getId()); } @@ -89,40 +95,89 @@ public class StorageWizardFormatProgress extends StorageWizardBase { @Override protected void onPostExecute(Exception e) { final Context context = StorageWizardFormatProgress.this; - if (e == null) { - final String forgetUuid = getIntent().getStringExtra( - StorageWizardFormatConfirm.EXTRA_FORGET_UUID); - if (!TextUtils.isEmpty(forgetUuid)) { - mStorage.forgetVolume(forgetUuid); - } - - final boolean offerMigrate; - if (mFormatPrivate) { - // Offer to migrate only if storage is currently internal - final VolumeInfo privateVol = getPackageManager() - .getPrimaryStorageCurrentVolume(); - offerMigrate = (privateVol != null - && VolumeInfo.ID_PRIVATE_INTERNAL.equals(privateVol.getId())); - } else { - offerMigrate = false; - } - - if (offerMigrate) { - final Intent intent = new Intent(context, StorageWizardMigrate.class); - intent.putExtra(DiskInfo.EXTRA_DISK_ID, mDisk.getId()); - startActivity(intent); - } else { - final Intent intent = new Intent(context, StorageWizardReady.class); - intent.putExtra(DiskInfo.EXTRA_DISK_ID, mDisk.getId()); - startActivity(intent); - } - finishAffinity(); - - } else { + if (e != null) { Log.e(TAG, "Failed to partition", e); Toast.makeText(context, e.getMessage(), Toast.LENGTH_LONG).show(); finishAffinity(); + return; + } + + final float pct = (float) mInternalBench / (float) mPrivateBench; + Log.d(TAG, "New volume is " + pct + "x the speed of internal"); + + // TODO: refine this warning threshold + if (mPrivateBench > 2000000000) { + final SlowWarningFragment dialog = new SlowWarningFragment(); + dialog.show(getFragmentManager(), TAG_SLOW_WARNING); + } else { + onFormatFinished(); } } } + + public class SlowWarningFragment extends DialogFragment { + @Override + public Dialog onCreateDialog(Bundle savedInstanceState) { + final Context context = getActivity(); + + final AlertDialog.Builder builder = new AlertDialog.Builder(context); + + final String descrip = mDisk.getDescription(); + final String genericDescip = getGenericDescription(mDisk); + builder.setMessage(TextUtils.expandTemplate(getText(R.string.storage_wizard_slow_body), + descrip, genericDescip)); + + builder.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + final StorageWizardFormatProgress target = + (StorageWizardFormatProgress) getActivity(); + target.onFormatFinished(); + } + }); + + return builder.create(); + } + } + + private String getGenericDescription(DiskInfo disk) { + // TODO: move this directly to DiskInfo + if (disk.isSd()) { + return getString(com.android.internal.R.string.storage_sd_card); + } else if (disk.isUsb()) { + return getString(com.android.internal.R.string.storage_usb_drive); + } else { + return null; + } + } + + private void onFormatFinished() { + final String forgetUuid = getIntent().getStringExtra( + StorageWizardFormatConfirm.EXTRA_FORGET_UUID); + if (!TextUtils.isEmpty(forgetUuid)) { + mStorage.forgetVolume(forgetUuid); + } + + final boolean offerMigrate; + if (mFormatPrivate) { + // Offer to migrate only if storage is currently internal + final VolumeInfo privateVol = getPackageManager() + .getPrimaryStorageCurrentVolume(); + offerMigrate = (privateVol != null + && VolumeInfo.ID_PRIVATE_INTERNAL.equals(privateVol.getId())); + } else { + offerMigrate = false; + } + + if (offerMigrate) { + final Intent intent = new Intent(this, StorageWizardMigrate.class); + intent.putExtra(DiskInfo.EXTRA_DISK_ID, mDisk.getId()); + startActivity(intent); + } else { + final Intent intent = new Intent(this, StorageWizardReady.class); + intent.putExtra(DiskInfo.EXTRA_DISK_ID, mDisk.getId()); + startActivity(intent); + } + finishAffinity(); + } } |