1 /*
2  * Copyright (C) 2015 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package com.android.settings.deviceinfo;
18 
19 import android.content.Intent;
20 import android.content.pm.PackageManager;
21 import android.os.Bundle;
22 import android.os.storage.DiskInfo;
23 import android.os.storage.StorageManager;
24 import android.os.storage.VolumeInfo;
25 import android.util.Log;
26 
27 import android.widget.Toast;
28 import com.android.settings.R;
29 
30 import java.util.Objects;
31 
32 import static com.android.settings.deviceinfo.StorageSettings.TAG;
33 
34 public class StorageWizardMigrateConfirm extends StorageWizardBase {
35     private MigrateEstimateTask mEstimate;
36 
37     @Override
onCreate(Bundle savedInstanceState)38     protected void onCreate(Bundle savedInstanceState) {
39         super.onCreate(savedInstanceState);
40         setContentView(R.layout.storage_wizard_generic);
41 
42         // When called with just disk, find the first private volume
43         if (mVolume == null) {
44             mVolume = findFirstVolume(VolumeInfo.TYPE_PRIVATE);
45         }
46 
47         final VolumeInfo sourceVol = getPackageManager().getPrimaryStorageCurrentVolume();
48         if (sourceVol == null || mVolume == null) {
49             Log.d(TAG, "Missing either source or target volume");
50             finish();
51             return;
52         }
53 
54         final String sourceDescrip = mStorage.getBestVolumeDescription(sourceVol);
55         final String targetDescrip = mStorage.getBestVolumeDescription(mVolume);
56 
57         setIllustrationType(ILLUSTRATION_INTERNAL);
58         setHeaderText(R.string.storage_wizard_migrate_confirm_title, targetDescrip);
59         setBodyText(R.string.memory_calculating_size);
60         setSecondaryBodyText(R.string.storage_wizard_migrate_details, targetDescrip);
61 
62         mEstimate = new MigrateEstimateTask(this) {
63             @Override
64             public void onPostExecute(String size, String time) {
65                 setBodyText(R.string.storage_wizard_migrate_confirm_body, time, size,
66                         sourceDescrip);
67             }
68         };
69 
70         mEstimate.copyFrom(getIntent());
71         mEstimate.execute();
72 
73         getNextButton().setText(R.string.storage_wizard_migrate_confirm_next);
74     }
75 
76     @Override
onNavigateNext()77     public void onNavigateNext() {
78         int moveId;
79 
80         // We only expect exceptions from StorageManagerService#setPrimaryStorageUuid
81         try {
82             moveId = getPackageManager().movePrimaryStorage(mVolume);
83         } catch (IllegalArgumentException e) {
84             StorageManager sm = (StorageManager) getSystemService(STORAGE_SERVICE);
85 
86             if (Objects.equals(mVolume.getFsUuid(), sm.getPrimaryStorageVolume().getUuid())) {
87                 final Intent intent = new Intent(this, StorageWizardReady.class);
88                 intent.putExtra(DiskInfo.EXTRA_DISK_ID,
89                         getIntent().getStringExtra(DiskInfo.EXTRA_DISK_ID));
90                 startActivity(intent);
91                 finishAffinity();
92 
93                 return;
94             } else {
95                 throw e;
96             }
97         } catch (IllegalStateException e) {
98             Toast.makeText(this, getString(R.string.another_migration_already_in_progress),
99                     Toast.LENGTH_LONG).show();
100             finishAffinity();
101 
102             return;
103         }
104 
105         final Intent intent = new Intent(this, StorageWizardMigrateProgress.class);
106         intent.putExtra(VolumeInfo.EXTRA_VOLUME_ID, mVolume.getId());
107         intent.putExtra(PackageManager.EXTRA_MOVE_ID, moveId);
108         startActivity(intent);
109         finishAffinity();
110     }
111 }
112