1fbd185f9f8ecdff72743b435c9e3cc4154606473Tony Mantler/*
2fbd185f9f8ecdff72743b435c9e3cc4154606473Tony Mantler * Copyright (C) 2015 The Android Open Source Project
3fbd185f9f8ecdff72743b435c9e3cc4154606473Tony Mantler *
4fbd185f9f8ecdff72743b435c9e3cc4154606473Tony Mantler * Licensed under the Apache License, Version 2.0 (the "License");
5fbd185f9f8ecdff72743b435c9e3cc4154606473Tony Mantler * you may not use this file except in compliance with the License.
6fbd185f9f8ecdff72743b435c9e3cc4154606473Tony Mantler * You may obtain a copy of the License at
7fbd185f9f8ecdff72743b435c9e3cc4154606473Tony Mantler *
8fbd185f9f8ecdff72743b435c9e3cc4154606473Tony Mantler *      http://www.apache.org/licenses/LICENSE-2.0
9fbd185f9f8ecdff72743b435c9e3cc4154606473Tony Mantler *
10fbd185f9f8ecdff72743b435c9e3cc4154606473Tony Mantler * Unless required by applicable law or agreed to in writing, software
11fbd185f9f8ecdff72743b435c9e3cc4154606473Tony Mantler * distributed under the License is distributed on an "AS IS" BASIS,
12fbd185f9f8ecdff72743b435c9e3cc4154606473Tony Mantler * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13fbd185f9f8ecdff72743b435c9e3cc4154606473Tony Mantler * See the License for the specific language governing permissions and
14fbd185f9f8ecdff72743b435c9e3cc4154606473Tony Mantler * limitations under the License
15fbd185f9f8ecdff72743b435c9e3cc4154606473Tony Mantler */
16fbd185f9f8ecdff72743b435c9e3cc4154606473Tony Mantler
17fbd185f9f8ecdff72743b435c9e3cc4154606473Tony Mantlerpackage com.android.tv.settings.device.storage;
18fbd185f9f8ecdff72743b435c9e3cc4154606473Tony Mantler
19fbd185f9f8ecdff72743b435c9e3cc4154606473Tony Mantlerimport android.app.Activity;
20fbd185f9f8ecdff72743b435c9e3cc4154606473Tony Mantlerimport android.app.Fragment;
21b339f6e838fc5a4c3f51b18379b58de7b51b8b6bTony Mantlerimport android.content.BroadcastReceiver;
22fbd185f9f8ecdff72743b435c9e3cc4154606473Tony Mantlerimport android.content.Context;
23fbd185f9f8ecdff72743b435c9e3cc4154606473Tony Mantlerimport android.content.Intent;
24b339f6e838fc5a4c3f51b18379b58de7b51b8b6bTony Mantlerimport android.content.IntentFilter;
25fbd185f9f8ecdff72743b435c9e3cc4154606473Tony Mantlerimport android.content.pm.PackageManager;
26fbd185f9f8ecdff72743b435c9e3cc4154606473Tony Mantlerimport android.os.Bundle;
27fbd185f9f8ecdff72743b435c9e3cc4154606473Tony Mantlerimport android.os.storage.DiskInfo;
28fbd185f9f8ecdff72743b435c9e3cc4154606473Tony Mantlerimport android.os.storage.StorageManager;
29fbd185f9f8ecdff72743b435c9e3cc4154606473Tony Mantlerimport android.os.storage.VolumeInfo;
30fbd185f9f8ecdff72743b435c9e3cc4154606473Tony Mantlerimport android.support.annotation.NonNull;
318f38002bda894e4e9fd55fb87bff2818460c2304Tony Mantlerimport android.support.annotation.Nullable;
32b339f6e838fc5a4c3f51b18379b58de7b51b8b6bTony Mantlerimport android.support.v4.content.LocalBroadcastManager;
33fbd185f9f8ecdff72743b435c9e3cc4154606473Tony Mantlerimport android.text.TextUtils;
34fbd185f9f8ecdff72743b435c9e3cc4154606473Tony Mantlerimport android.util.Log;
35fbd185f9f8ecdff72743b435c9e3cc4154606473Tony Mantlerimport android.widget.Toast;
36fbd185f9f8ecdff72743b435c9e3cc4154606473Tony Mantler
37fbd185f9f8ecdff72743b435c9e3cc4154606473Tony Mantlerimport com.android.tv.settings.R;
38fbd185f9f8ecdff72743b435c9e3cc4154606473Tony Mantler
39fbd185f9f8ecdff72743b435c9e3cc4154606473Tony Mantlerimport java.util.List;
40fbd185f9f8ecdff72743b435c9e3cc4154606473Tony Mantler
41fbd185f9f8ecdff72743b435c9e3cc4154606473Tony Mantlerpublic class FormatActivity extends Activity
42754ccda2d59a46be682bee0e2c6633f20b6c3fb3Tony Mantler        implements FormatAsPrivateStepFragment.Callback,
4336d01a438bf77012c50b1164e5ecdd02dd699817Tony Mantler        FormatAsPublicStepFragment.Callback, SlowDriveStepFragment.Callback {
44fbd185f9f8ecdff72743b435c9e3cc4154606473Tony Mantler
45fbd185f9f8ecdff72743b435c9e3cc4154606473Tony Mantler    private static final String TAG = "FormatActivity";
46fbd185f9f8ecdff72743b435c9e3cc4154606473Tony Mantler
47fbd185f9f8ecdff72743b435c9e3cc4154606473Tony Mantler    public static final String INTENT_ACTION_FORMAT_AS_PRIVATE =
48fbd185f9f8ecdff72743b435c9e3cc4154606473Tony Mantler            "com.android.tv.settings.device.storage.FormatActivity.formatAsPrivate";
49fbd185f9f8ecdff72743b435c9e3cc4154606473Tony Mantler    public static final String INTENT_ACTION_FORMAT_AS_PUBLIC =
50fbd185f9f8ecdff72743b435c9e3cc4154606473Tony Mantler            "com.android.tv.settings.device.storage.FormatActivity.formatAsPublic";
51fbd185f9f8ecdff72743b435c9e3cc4154606473Tony Mantler
52fbd185f9f8ecdff72743b435c9e3cc4154606473Tony Mantler    private static final String SAVE_STATE_FORMAT_PRIVATE_DISK_ID =
53fbd185f9f8ecdff72743b435c9e3cc4154606473Tony Mantler            "StorageResetActivity.formatPrivateDiskId";
54fbd185f9f8ecdff72743b435c9e3cc4154606473Tony Mantler    private static final String SAVE_STATE_FORMAT_DISK_DESC =
55fbd185f9f8ecdff72743b435c9e3cc4154606473Tony Mantler            "StorageResetActivity.formatDiskDesc";
56fbd185f9f8ecdff72743b435c9e3cc4154606473Tony Mantler    private static final String SAVE_STATE_FORMAT_PUBLIC_DISK_ID =
57fbd185f9f8ecdff72743b435c9e3cc4154606473Tony Mantler            "StorageResetActivity.formatPrivateDiskId";
58fbd185f9f8ecdff72743b435c9e3cc4154606473Tony Mantler
59fbd185f9f8ecdff72743b435c9e3cc4154606473Tony Mantler    // Non-null means we're in the process of formatting this volume as private
60fbd185f9f8ecdff72743b435c9e3cc4154606473Tony Mantler    private String mFormatAsPrivateDiskId;
61fbd185f9f8ecdff72743b435c9e3cc4154606473Tony Mantler    // Non-null means we're in the process of formatting this volume as public
62fbd185f9f8ecdff72743b435c9e3cc4154606473Tony Mantler    private String mFormatAsPublicDiskId;
63fbd185f9f8ecdff72743b435c9e3cc4154606473Tony Mantler
64fbd185f9f8ecdff72743b435c9e3cc4154606473Tony Mantler    private String mFormatDiskDesc;
65fbd185f9f8ecdff72743b435c9e3cc4154606473Tony Mantler
66b339f6e838fc5a4c3f51b18379b58de7b51b8b6bTony Mantler    private final BroadcastReceiver mFormatReceiver = new FormatReceiver();
67fbd185f9f8ecdff72743b435c9e3cc4154606473Tony Mantler    private PackageManager mPackageManager;
68fbd185f9f8ecdff72743b435c9e3cc4154606473Tony Mantler    private StorageManager mStorageManager;
69fbd185f9f8ecdff72743b435c9e3cc4154606473Tony Mantler
70fbd185f9f8ecdff72743b435c9e3cc4154606473Tony Mantler    public static Intent getFormatAsPublicIntent(Context context, String diskId) {
71fbd185f9f8ecdff72743b435c9e3cc4154606473Tony Mantler        final Intent i = new Intent(context, FormatActivity.class);
72fbd185f9f8ecdff72743b435c9e3cc4154606473Tony Mantler        i.setAction(INTENT_ACTION_FORMAT_AS_PUBLIC);
73fbd185f9f8ecdff72743b435c9e3cc4154606473Tony Mantler        i.putExtra(DiskInfo.EXTRA_DISK_ID, diskId);
74fbd185f9f8ecdff72743b435c9e3cc4154606473Tony Mantler        return i;
75fbd185f9f8ecdff72743b435c9e3cc4154606473Tony Mantler    }
76fbd185f9f8ecdff72743b435c9e3cc4154606473Tony Mantler
77fbd185f9f8ecdff72743b435c9e3cc4154606473Tony Mantler    public static Intent getFormatAsPrivateIntent(Context context, String diskId) {
78fbd185f9f8ecdff72743b435c9e3cc4154606473Tony Mantler        final Intent i = new Intent(context, FormatActivity.class);
79fbd185f9f8ecdff72743b435c9e3cc4154606473Tony Mantler        i.setAction(INTENT_ACTION_FORMAT_AS_PRIVATE);
80fbd185f9f8ecdff72743b435c9e3cc4154606473Tony Mantler        i.putExtra(DiskInfo.EXTRA_DISK_ID, diskId);
81fbd185f9f8ecdff72743b435c9e3cc4154606473Tony Mantler        return i;
82fbd185f9f8ecdff72743b435c9e3cc4154606473Tony Mantler    }
83fbd185f9f8ecdff72743b435c9e3cc4154606473Tony Mantler
84fbd185f9f8ecdff72743b435c9e3cc4154606473Tony Mantler    @Override
85fbd185f9f8ecdff72743b435c9e3cc4154606473Tony Mantler    protected void onCreate(@Nullable Bundle savedInstanceState) {
86fbd185f9f8ecdff72743b435c9e3cc4154606473Tony Mantler        super.onCreate(savedInstanceState);
87fbd185f9f8ecdff72743b435c9e3cc4154606473Tony Mantler
88fbd185f9f8ecdff72743b435c9e3cc4154606473Tony Mantler        mPackageManager = getPackageManager();
89fbd185f9f8ecdff72743b435c9e3cc4154606473Tony Mantler        mStorageManager = getSystemService(StorageManager.class);
90fbd185f9f8ecdff72743b435c9e3cc4154606473Tony Mantler
91b339f6e838fc5a4c3f51b18379b58de7b51b8b6bTony Mantler        final IntentFilter filter = new IntentFilter();
92b339f6e838fc5a4c3f51b18379b58de7b51b8b6bTony Mantler        filter.addAction(SettingsStorageService.ACTION_FORMAT_AS_PRIVATE);
93b339f6e838fc5a4c3f51b18379b58de7b51b8b6bTony Mantler        filter.addAction(SettingsStorageService.ACTION_FORMAT_AS_PUBLIC);
94b339f6e838fc5a4c3f51b18379b58de7b51b8b6bTony Mantler        LocalBroadcastManager.getInstance(this).registerReceiver(mFormatReceiver, filter);
95b339f6e838fc5a4c3f51b18379b58de7b51b8b6bTony Mantler
96fbd185f9f8ecdff72743b435c9e3cc4154606473Tony Mantler        if (savedInstanceState != null) {
97fbd185f9f8ecdff72743b435c9e3cc4154606473Tony Mantler            mFormatAsPrivateDiskId =
98fbd185f9f8ecdff72743b435c9e3cc4154606473Tony Mantler                    savedInstanceState.getString(SAVE_STATE_FORMAT_PRIVATE_DISK_ID);
99fbd185f9f8ecdff72743b435c9e3cc4154606473Tony Mantler            mFormatAsPublicDiskId = savedInstanceState.getString(SAVE_STATE_FORMAT_PUBLIC_DISK_ID);
100fbd185f9f8ecdff72743b435c9e3cc4154606473Tony Mantler            mFormatDiskDesc = savedInstanceState.getString(SAVE_STATE_FORMAT_DISK_DESC);
101fbd185f9f8ecdff72743b435c9e3cc4154606473Tony Mantler        } else {
102fbd185f9f8ecdff72743b435c9e3cc4154606473Tony Mantler            final String diskId = getIntent().getStringExtra(DiskInfo.EXTRA_DISK_ID);
103fbd185f9f8ecdff72743b435c9e3cc4154606473Tony Mantler            final String action = getIntent().getAction();
104fbd185f9f8ecdff72743b435c9e3cc4154606473Tony Mantler            final Fragment f;
105fbd185f9f8ecdff72743b435c9e3cc4154606473Tony Mantler            if (TextUtils.equals(action, INTENT_ACTION_FORMAT_AS_PRIVATE)) {
106fbd185f9f8ecdff72743b435c9e3cc4154606473Tony Mantler                f = FormatAsPrivateStepFragment.newInstance(diskId);
107fbd185f9f8ecdff72743b435c9e3cc4154606473Tony Mantler            } else if (TextUtils.equals(action, INTENT_ACTION_FORMAT_AS_PUBLIC)) {
108fbd185f9f8ecdff72743b435c9e3cc4154606473Tony Mantler                f = FormatAsPublicStepFragment.newInstance(diskId);
109fbd185f9f8ecdff72743b435c9e3cc4154606473Tony Mantler            } else {
110fbd185f9f8ecdff72743b435c9e3cc4154606473Tony Mantler                throw new IllegalStateException("No known action specified");
111fbd185f9f8ecdff72743b435c9e3cc4154606473Tony Mantler            }
112fbd185f9f8ecdff72743b435c9e3cc4154606473Tony Mantler            getFragmentManager().beginTransaction()
113fbd185f9f8ecdff72743b435c9e3cc4154606473Tony Mantler                    .add(android.R.id.content, f)
114fbd185f9f8ecdff72743b435c9e3cc4154606473Tony Mantler                    .commit();
115fbd185f9f8ecdff72743b435c9e3cc4154606473Tony Mantler        }
116fbd185f9f8ecdff72743b435c9e3cc4154606473Tony Mantler    }
117fbd185f9f8ecdff72743b435c9e3cc4154606473Tony Mantler
118fbd185f9f8ecdff72743b435c9e3cc4154606473Tony Mantler    @Override
119fbd185f9f8ecdff72743b435c9e3cc4154606473Tony Mantler    protected void onResume() {
120fbd185f9f8ecdff72743b435c9e3cc4154606473Tony Mantler        super.onResume();
121b339f6e838fc5a4c3f51b18379b58de7b51b8b6bTony Mantler        if (!TextUtils.isEmpty(mFormatAsPrivateDiskId)) {
122b339f6e838fc5a4c3f51b18379b58de7b51b8b6bTony Mantler            final VolumeInfo volumeInfo = findVolume(mFormatAsPrivateDiskId);
123b339f6e838fc5a4c3f51b18379b58de7b51b8b6bTony Mantler            if (volumeInfo != null && volumeInfo.getType() == VolumeInfo.TYPE_PRIVATE) {
124b339f6e838fc5a4c3f51b18379b58de7b51b8b6bTony Mantler                // Formatting must have completed while we were paused
125b339f6e838fc5a4c3f51b18379b58de7b51b8b6bTony Mantler                // We've lost the benchmark data, so just assume the drive is fast enough
126b339f6e838fc5a4c3f51b18379b58de7b51b8b6bTony Mantler                handleFormatAsPrivateComplete(-1, -1);
127b339f6e838fc5a4c3f51b18379b58de7b51b8b6bTony Mantler            }
128b339f6e838fc5a4c3f51b18379b58de7b51b8b6bTony Mantler        }
129b339f6e838fc5a4c3f51b18379b58de7b51b8b6bTony Mantler    }
130fbd185f9f8ecdff72743b435c9e3cc4154606473Tony Mantler
131b339f6e838fc5a4c3f51b18379b58de7b51b8b6bTony Mantler    @Override
132b339f6e838fc5a4c3f51b18379b58de7b51b8b6bTony Mantler    protected void onDestroy() {
133b339f6e838fc5a4c3f51b18379b58de7b51b8b6bTony Mantler        super.onDestroy();
134b339f6e838fc5a4c3f51b18379b58de7b51b8b6bTony Mantler        LocalBroadcastManager.getInstance(this).unregisterReceiver(mFormatReceiver);
135b339f6e838fc5a4c3f51b18379b58de7b51b8b6bTony Mantler    }
136b339f6e838fc5a4c3f51b18379b58de7b51b8b6bTony Mantler
137b339f6e838fc5a4c3f51b18379b58de7b51b8b6bTony Mantler    private VolumeInfo findVolume(String diskId) {
138b339f6e838fc5a4c3f51b18379b58de7b51b8b6bTony Mantler        final List<VolumeInfo> vols = mStorageManager.getVolumes();
139b339f6e838fc5a4c3f51b18379b58de7b51b8b6bTony Mantler        for (final VolumeInfo vol : vols) {
140b339f6e838fc5a4c3f51b18379b58de7b51b8b6bTony Mantler            if (TextUtils.equals(diskId, vol.getDiskId())
141b339f6e838fc5a4c3f51b18379b58de7b51b8b6bTony Mantler                    && (vol.getType() == VolumeInfo.TYPE_PRIVATE)) {
142b339f6e838fc5a4c3f51b18379b58de7b51b8b6bTony Mantler                return vol;
143b339f6e838fc5a4c3f51b18379b58de7b51b8b6bTony Mantler            }
144b339f6e838fc5a4c3f51b18379b58de7b51b8b6bTony Mantler        }
145b339f6e838fc5a4c3f51b18379b58de7b51b8b6bTony Mantler        return null;
146fbd185f9f8ecdff72743b435c9e3cc4154606473Tony Mantler    }
147fbd185f9f8ecdff72743b435c9e3cc4154606473Tony Mantler
148fbd185f9f8ecdff72743b435c9e3cc4154606473Tony Mantler    @Override
149fbd185f9f8ecdff72743b435c9e3cc4154606473Tony Mantler    protected void onSaveInstanceState(@NonNull Bundle outState) {
150fbd185f9f8ecdff72743b435c9e3cc4154606473Tony Mantler        super.onSaveInstanceState(outState);
151fbd185f9f8ecdff72743b435c9e3cc4154606473Tony Mantler        outState.putString(SAVE_STATE_FORMAT_PRIVATE_DISK_ID, mFormatAsPrivateDiskId);
152fbd185f9f8ecdff72743b435c9e3cc4154606473Tony Mantler        outState.putString(SAVE_STATE_FORMAT_PUBLIC_DISK_ID, mFormatAsPublicDiskId);
153fbd185f9f8ecdff72743b435c9e3cc4154606473Tony Mantler        outState.putString(SAVE_STATE_FORMAT_DISK_DESC, mFormatDiskDesc);
154fbd185f9f8ecdff72743b435c9e3cc4154606473Tony Mantler    }
155fbd185f9f8ecdff72743b435c9e3cc4154606473Tony Mantler
156b339f6e838fc5a4c3f51b18379b58de7b51b8b6bTony Mantler    private void handleFormatAsPrivateComplete(float privateBench, float internalBench) {
157b339f6e838fc5a4c3f51b18379b58de7b51b8b6bTony Mantler        if (Math.abs(-1 - privateBench) < 0.1) {
158b339f6e838fc5a4c3f51b18379b58de7b51b8b6bTony Mantler            final float frac = privateBench / internalBench;
159b339f6e838fc5a4c3f51b18379b58de7b51b8b6bTony Mantler            Log.d(TAG, "New volume is " + frac + "x the speed of internal");
160b339f6e838fc5a4c3f51b18379b58de7b51b8b6bTony Mantler
161b339f6e838fc5a4c3f51b18379b58de7b51b8b6bTony Mantler            // TODO: better threshold
162b339f6e838fc5a4c3f51b18379b58de7b51b8b6bTony Mantler            if (privateBench > 2000000000) {
163b339f6e838fc5a4c3f51b18379b58de7b51b8b6bTony Mantler                getFragmentManager().beginTransaction()
164b339f6e838fc5a4c3f51b18379b58de7b51b8b6bTony Mantler                        .replace(android.R.id.content,
165b339f6e838fc5a4c3f51b18379b58de7b51b8b6bTony Mantler                                SlowDriveStepFragment.newInstance())
166b339f6e838fc5a4c3f51b18379b58de7b51b8b6bTony Mantler                        .commit();
167b339f6e838fc5a4c3f51b18379b58de7b51b8b6bTony Mantler                return;
168fbd185f9f8ecdff72743b435c9e3cc4154606473Tony Mantler            }
169fbd185f9f8ecdff72743b435c9e3cc4154606473Tony Mantler        }
170b339f6e838fc5a4c3f51b18379b58de7b51b8b6bTony Mantler        launchMigrateStorageAndFinish(mFormatAsPrivateDiskId);
171fbd185f9f8ecdff72743b435c9e3cc4154606473Tony Mantler    }
172fbd185f9f8ecdff72743b435c9e3cc4154606473Tony Mantler
173b339f6e838fc5a4c3f51b18379b58de7b51b8b6bTony Mantler    private class FormatReceiver extends BroadcastReceiver {
174fbd185f9f8ecdff72743b435c9e3cc4154606473Tony Mantler
175fbd185f9f8ecdff72743b435c9e3cc4154606473Tony Mantler        @Override
176b339f6e838fc5a4c3f51b18379b58de7b51b8b6bTony Mantler        public void onReceive(Context context, Intent intent) {
177b339f6e838fc5a4c3f51b18379b58de7b51b8b6bTony Mantler            if (TextUtils.equals(intent.getAction(),
178b339f6e838fc5a4c3f51b18379b58de7b51b8b6bTony Mantler                    SettingsStorageService.ACTION_FORMAT_AS_PRIVATE)
179b339f6e838fc5a4c3f51b18379b58de7b51b8b6bTony Mantler                    && !TextUtils.isEmpty(mFormatAsPrivateDiskId)) {
180b339f6e838fc5a4c3f51b18379b58de7b51b8b6bTony Mantler                final String diskId = intent.getStringExtra(DiskInfo.EXTRA_DISK_ID);
181b339f6e838fc5a4c3f51b18379b58de7b51b8b6bTony Mantler                if (TextUtils.equals(mFormatAsPrivateDiskId, diskId)) {
182b339f6e838fc5a4c3f51b18379b58de7b51b8b6bTony Mantler                    final boolean success =
183b339f6e838fc5a4c3f51b18379b58de7b51b8b6bTony Mantler                            intent.getBooleanExtra(SettingsStorageService.EXTRA_SUCCESS, false);
184b339f6e838fc5a4c3f51b18379b58de7b51b8b6bTony Mantler                    if (success) {
185fbd185f9f8ecdff72743b435c9e3cc4154606473Tony Mantler                        if (isResumed()) {
186b339f6e838fc5a4c3f51b18379b58de7b51b8b6bTony Mantler                            final float privateBench = intent.getFloatExtra(
187b339f6e838fc5a4c3f51b18379b58de7b51b8b6bTony Mantler                                    SettingsStorageService.EXTRA_PRIVATE_BENCH, -1);
188b339f6e838fc5a4c3f51b18379b58de7b51b8b6bTony Mantler                            final float internalBench = intent.getFloatExtra(
189b339f6e838fc5a4c3f51b18379b58de7b51b8b6bTony Mantler                                    SettingsStorageService.EXTRA_INTERNAL_BENCH, -1);
190b339f6e838fc5a4c3f51b18379b58de7b51b8b6bTony Mantler                            handleFormatAsPrivateComplete(privateBench, internalBench);
191fbd185f9f8ecdff72743b435c9e3cc4154606473Tony Mantler                        }
192fbd185f9f8ecdff72743b435c9e3cc4154606473Tony Mantler
193072a5491523bc3cb09b0198d6c42dd6a237371dbTony Mantler                        Toast.makeText(context, getString(
194b339f6e838fc5a4c3f51b18379b58de7b51b8b6bTony Mantler                                R.string.storage_format_success, mFormatDiskDesc),
195b339f6e838fc5a4c3f51b18379b58de7b51b8b6bTony Mantler                                Toast.LENGTH_SHORT).show();
196b339f6e838fc5a4c3f51b18379b58de7b51b8b6bTony Mantler                    } else {
197072a5491523bc3cb09b0198d6c42dd6a237371dbTony Mantler                        Toast.makeText(context,
198b339f6e838fc5a4c3f51b18379b58de7b51b8b6bTony Mantler                                getString(R.string.storage_format_failure, mFormatDiskDesc),
199b339f6e838fc5a4c3f51b18379b58de7b51b8b6bTony Mantler                                Toast.LENGTH_SHORT).show();
200b339f6e838fc5a4c3f51b18379b58de7b51b8b6bTony Mantler                        finish();
2010f64713c1f0379031e523fef2a0777cc11f7531aTony Mantler                    }
2020f64713c1f0379031e523fef2a0777cc11f7531aTony Mantler                }
203b339f6e838fc5a4c3f51b18379b58de7b51b8b6bTony Mantler            } else if (TextUtils.equals(intent.getAction(),
204b339f6e838fc5a4c3f51b18379b58de7b51b8b6bTony Mantler                    SettingsStorageService.ACTION_FORMAT_AS_PUBLIC)
205b339f6e838fc5a4c3f51b18379b58de7b51b8b6bTony Mantler                    && !TextUtils.isEmpty(mFormatAsPublicDiskId)) {
206b339f6e838fc5a4c3f51b18379b58de7b51b8b6bTony Mantler                final String diskId = intent.getStringExtra(DiskInfo.EXTRA_DISK_ID);
207b339f6e838fc5a4c3f51b18379b58de7b51b8b6bTony Mantler                if (TextUtils.equals(mFormatAsPublicDiskId, diskId)) {
208b339f6e838fc5a4c3f51b18379b58de7b51b8b6bTony Mantler                    final boolean success =
209b339f6e838fc5a4c3f51b18379b58de7b51b8b6bTony Mantler                            intent.getBooleanExtra(SettingsStorageService.EXTRA_SUCCESS, false);
210b339f6e838fc5a4c3f51b18379b58de7b51b8b6bTony Mantler                    if (success) {
211072a5491523bc3cb09b0198d6c42dd6a237371dbTony Mantler                        Toast.makeText(context,
212b339f6e838fc5a4c3f51b18379b58de7b51b8b6bTony Mantler                                getString(R.string.storage_format_success,
213b339f6e838fc5a4c3f51b18379b58de7b51b8b6bTony Mantler                                        mFormatDiskDesc), Toast.LENGTH_SHORT).show();
214b339f6e838fc5a4c3f51b18379b58de7b51b8b6bTony Mantler                    } else {
215072a5491523bc3cb09b0198d6c42dd6a237371dbTony Mantler                        Toast.makeText(context,
216b339f6e838fc5a4c3f51b18379b58de7b51b8b6bTony Mantler                                getString(R.string.storage_format_failure,
217b339f6e838fc5a4c3f51b18379b58de7b51b8b6bTony Mantler                                        mFormatDiskDesc), Toast.LENGTH_SHORT).show();
218b339f6e838fc5a4c3f51b18379b58de7b51b8b6bTony Mantler                    }
219b339f6e838fc5a4c3f51b18379b58de7b51b8b6bTony Mantler                    finish();
220b339f6e838fc5a4c3f51b18379b58de7b51b8b6bTony Mantler                }
221fbd185f9f8ecdff72743b435c9e3cc4154606473Tony Mantler            }
222fbd185f9f8ecdff72743b435c9e3cc4154606473Tony Mantler        }
223fbd185f9f8ecdff72743b435c9e3cc4154606473Tony Mantler    }
224fbd185f9f8ecdff72743b435c9e3cc4154606473Tony Mantler
225fbd185f9f8ecdff72743b435c9e3cc4154606473Tony Mantler    @Override
226fbd185f9f8ecdff72743b435c9e3cc4154606473Tony Mantler    public void onRequestFormatAsPrivate(String diskId) {
227fbd185f9f8ecdff72743b435c9e3cc4154606473Tony Mantler        final FormattingProgressFragment fragment = FormattingProgressFragment.newInstance();
228fbd185f9f8ecdff72743b435c9e3cc4154606473Tony Mantler        getFragmentManager().beginTransaction()
229fbd185f9f8ecdff72743b435c9e3cc4154606473Tony Mantler                .replace(android.R.id.content, fragment)
230fbd185f9f8ecdff72743b435c9e3cc4154606473Tony Mantler                .commit();
231fbd185f9f8ecdff72743b435c9e3cc4154606473Tony Mantler
232fbd185f9f8ecdff72743b435c9e3cc4154606473Tony Mantler        mFormatAsPrivateDiskId = diskId;
233fbd185f9f8ecdff72743b435c9e3cc4154606473Tony Mantler        final List<VolumeInfo> volumes = mStorageManager.getVolumes();
234fbd185f9f8ecdff72743b435c9e3cc4154606473Tony Mantler        for (final VolumeInfo volume : volumes) {
235fbd185f9f8ecdff72743b435c9e3cc4154606473Tony Mantler            if ((volume.getType() == VolumeInfo.TYPE_PRIVATE ||
236fbd185f9f8ecdff72743b435c9e3cc4154606473Tony Mantler                    volume.getType() == VolumeInfo.TYPE_PUBLIC) &&
237fbd185f9f8ecdff72743b435c9e3cc4154606473Tony Mantler                    TextUtils.equals(volume.getDiskId(), diskId)) {
238fbd185f9f8ecdff72743b435c9e3cc4154606473Tony Mantler                mFormatDiskDesc = mStorageManager.getBestVolumeDescription(volume);
239fbd185f9f8ecdff72743b435c9e3cc4154606473Tony Mantler            }
240fbd185f9f8ecdff72743b435c9e3cc4154606473Tony Mantler        }
241fbd185f9f8ecdff72743b435c9e3cc4154606473Tony Mantler        if (TextUtils.isEmpty(mFormatDiskDesc)) {
242fbd185f9f8ecdff72743b435c9e3cc4154606473Tony Mantler            final DiskInfo info = mStorageManager.findDiskById(diskId);
243fbd185f9f8ecdff72743b435c9e3cc4154606473Tony Mantler            if (info != null) {
244fbd185f9f8ecdff72743b435c9e3cc4154606473Tony Mantler                mFormatDiskDesc = info.getDescription();
245fbd185f9f8ecdff72743b435c9e3cc4154606473Tony Mantler            }
246fbd185f9f8ecdff72743b435c9e3cc4154606473Tony Mantler        }
247b339f6e838fc5a4c3f51b18379b58de7b51b8b6bTony Mantler        SettingsStorageService.formatAsPrivate(this, diskId);
248fbd185f9f8ecdff72743b435c9e3cc4154606473Tony Mantler    }
249fbd185f9f8ecdff72743b435c9e3cc4154606473Tony Mantler
25036d01a438bf77012c50b1164e5ecdd02dd699817Tony Mantler    private void launchMigrateStorageAndFinish(String diskId) {
25136d01a438bf77012c50b1164e5ecdd02dd699817Tony Mantler        final List<VolumeInfo> candidates =
25236d01a438bf77012c50b1164e5ecdd02dd699817Tony Mantler                mPackageManager.getPrimaryStorageCandidateVolumes();
25336d01a438bf77012c50b1164e5ecdd02dd699817Tony Mantler        VolumeInfo moveTarget = null;
25436d01a438bf77012c50b1164e5ecdd02dd699817Tony Mantler        for (final VolumeInfo candidate : candidates) {
25536d01a438bf77012c50b1164e5ecdd02dd699817Tony Mantler            if (TextUtils.equals(candidate.getDiskId(), diskId)) {
25636d01a438bf77012c50b1164e5ecdd02dd699817Tony Mantler                moveTarget = candidate;
25736d01a438bf77012c50b1164e5ecdd02dd699817Tony Mantler                break;
25836d01a438bf77012c50b1164e5ecdd02dd699817Tony Mantler            }
25936d01a438bf77012c50b1164e5ecdd02dd699817Tony Mantler        }
26036d01a438bf77012c50b1164e5ecdd02dd699817Tony Mantler
26136d01a438bf77012c50b1164e5ecdd02dd699817Tony Mantler        if (moveTarget != null) {
26236d01a438bf77012c50b1164e5ecdd02dd699817Tony Mantler            startActivity(MigrateStorageActivity.getLaunchIntent(this, moveTarget.getId(), true));
26336d01a438bf77012c50b1164e5ecdd02dd699817Tony Mantler        }
26436d01a438bf77012c50b1164e5ecdd02dd699817Tony Mantler
26536d01a438bf77012c50b1164e5ecdd02dd699817Tony Mantler        finish();
26636d01a438bf77012c50b1164e5ecdd02dd699817Tony Mantler    }
26736d01a438bf77012c50b1164e5ecdd02dd699817Tony Mantler
268fbd185f9f8ecdff72743b435c9e3cc4154606473Tony Mantler    @Override
269fbd185f9f8ecdff72743b435c9e3cc4154606473Tony Mantler    public void onRequestFormatAsPublic(String diskId, String volumeId) {
270fbd185f9f8ecdff72743b435c9e3cc4154606473Tony Mantler        final FormattingProgressFragment fragment = FormattingProgressFragment.newInstance();
271fbd185f9f8ecdff72743b435c9e3cc4154606473Tony Mantler        getFragmentManager().beginTransaction()
272fbd185f9f8ecdff72743b435c9e3cc4154606473Tony Mantler                .replace(android.R.id.content, fragment)
273fbd185f9f8ecdff72743b435c9e3cc4154606473Tony Mantler                .commit();
274fbd185f9f8ecdff72743b435c9e3cc4154606473Tony Mantler
275fbd185f9f8ecdff72743b435c9e3cc4154606473Tony Mantler        mFormatAsPublicDiskId = diskId;
276fbd185f9f8ecdff72743b435c9e3cc4154606473Tony Mantler        if (!TextUtils.isEmpty(volumeId)) {
277fbd185f9f8ecdff72743b435c9e3cc4154606473Tony Mantler            final VolumeInfo info = mStorageManager.findVolumeById(volumeId);
278fbd185f9f8ecdff72743b435c9e3cc4154606473Tony Mantler            if (info != null) {
279fbd185f9f8ecdff72743b435c9e3cc4154606473Tony Mantler                mFormatDiskDesc = mStorageManager.getBestVolumeDescription(info);
280fbd185f9f8ecdff72743b435c9e3cc4154606473Tony Mantler            }
281fbd185f9f8ecdff72743b435c9e3cc4154606473Tony Mantler        }
282fbd185f9f8ecdff72743b435c9e3cc4154606473Tony Mantler        if (TextUtils.isEmpty(mFormatDiskDesc)) {
283fbd185f9f8ecdff72743b435c9e3cc4154606473Tony Mantler            final DiskInfo info = mStorageManager.findDiskById(diskId);
284fbd185f9f8ecdff72743b435c9e3cc4154606473Tony Mantler            if (info != null) {
285fbd185f9f8ecdff72743b435c9e3cc4154606473Tony Mantler                mFormatDiskDesc = info.getDescription();
286fbd185f9f8ecdff72743b435c9e3cc4154606473Tony Mantler            }
287fbd185f9f8ecdff72743b435c9e3cc4154606473Tony Mantler        }
288b339f6e838fc5a4c3f51b18379b58de7b51b8b6bTony Mantler        SettingsStorageService.formatAsPublic(this, diskId);
289fbd185f9f8ecdff72743b435c9e3cc4154606473Tony Mantler    }
290fbd185f9f8ecdff72743b435c9e3cc4154606473Tony Mantler
291fbd185f9f8ecdff72743b435c9e3cc4154606473Tony Mantler    @Override
292fbd185f9f8ecdff72743b435c9e3cc4154606473Tony Mantler    public void onCancelFormatDialog() {
293fbd185f9f8ecdff72743b435c9e3cc4154606473Tony Mantler        finish();
294fbd185f9f8ecdff72743b435c9e3cc4154606473Tony Mantler    }
295fbd185f9f8ecdff72743b435c9e3cc4154606473Tony Mantler
29636d01a438bf77012c50b1164e5ecdd02dd699817Tony Mantler    @Override
29736d01a438bf77012c50b1164e5ecdd02dd699817Tony Mantler    public void onSlowDriveWarningComplete() {
29836d01a438bf77012c50b1164e5ecdd02dd699817Tony Mantler        launchMigrateStorageAndFinish(mFormatAsPrivateDiskId);
29936d01a438bf77012c50b1164e5ecdd02dd699817Tony Mantler    }
300fbd185f9f8ecdff72743b435c9e3cc4154606473Tony Mantler}
301