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

Commit d0393cd0 authored by Jeff Sharkey's avatar Jeff Sharkey Committed by Android (Google) Code Review
Browse files

Merge "Warn user when adopted device is slow." into mnc-dev

parents 3a310719 0de20143
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
@@ -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: -->
+90 −35
Original line number Diff line number Diff line
@@ -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,7 +95,63 @@ public class StorageWizardFormatProgress extends StorageWizardBase {
        @Override
        protected void onPostExecute(Exception e) {
            final Context context = StorageWizardFormatProgress.this;
            if (e == null) {
            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)) {
@@ -108,21 +170,14 @@ public class StorageWizardFormatProgress extends StorageWizardBase {
        }

        if (offerMigrate) {
                    final Intent intent = new Intent(context, StorageWizardMigrate.class);
            final Intent intent = new Intent(this, StorageWizardMigrate.class);
            intent.putExtra(DiskInfo.EXTRA_DISK_ID, mDisk.getId());
            startActivity(intent);
        } else {
                    final Intent intent = new Intent(context, StorageWizardReady.class);
            final Intent intent = new Intent(this, StorageWizardReady.class);
            intent.putExtra(DiskInfo.EXTRA_DISK_ID, mDisk.getId());
            startActivity(intent);
        }
        finishAffinity();

            } else {
                Log.e(TAG, "Failed to partition", e);
                Toast.makeText(context, e.getMessage(), Toast.LENGTH_LONG).show();
                finishAffinity();
            }
        }
    }
}