11f4efd7360dea3038fe2096b1d4bccaae8e2a09fJeff Sharkey/* 21f4efd7360dea3038fe2096b1d4bccaae8e2a09fJeff Sharkey * Copyright (C) 2015 The Android Open Source Project 31f4efd7360dea3038fe2096b1d4bccaae8e2a09fJeff Sharkey * 41f4efd7360dea3038fe2096b1d4bccaae8e2a09fJeff Sharkey * Licensed under the Apache License, Version 2.0 (the "License"); 51f4efd7360dea3038fe2096b1d4bccaae8e2a09fJeff Sharkey * you may not use this file except in compliance with the License. 61f4efd7360dea3038fe2096b1d4bccaae8e2a09fJeff Sharkey * You may obtain a copy of the License at 71f4efd7360dea3038fe2096b1d4bccaae8e2a09fJeff Sharkey * 81f4efd7360dea3038fe2096b1d4bccaae8e2a09fJeff Sharkey * http://www.apache.org/licenses/LICENSE-2.0 91f4efd7360dea3038fe2096b1d4bccaae8e2a09fJeff Sharkey * 101f4efd7360dea3038fe2096b1d4bccaae8e2a09fJeff Sharkey * Unless required by applicable law or agreed to in writing, software 111f4efd7360dea3038fe2096b1d4bccaae8e2a09fJeff Sharkey * distributed under the License is distributed on an "AS IS" BASIS, 121f4efd7360dea3038fe2096b1d4bccaae8e2a09fJeff Sharkey * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 131f4efd7360dea3038fe2096b1d4bccaae8e2a09fJeff Sharkey * See the License for the specific language governing permissions and 141f4efd7360dea3038fe2096b1d4bccaae8e2a09fJeff Sharkey * limitations under the License. 151f4efd7360dea3038fe2096b1d4bccaae8e2a09fJeff Sharkey */ 161f4efd7360dea3038fe2096b1d4bccaae8e2a09fJeff Sharkey 171f4efd7360dea3038fe2096b1d4bccaae8e2a09fJeff Sharkeypackage com.android.settings.deviceinfo; 181f4efd7360dea3038fe2096b1d4bccaae8e2a09fJeff Sharkey 191f4efd7360dea3038fe2096b1d4bccaae8e2a09fJeff Sharkeyimport android.content.pm.PackageManager; 20954d8dad5e395544f95ca211466bcc7195d31877Jeff Sharkeyimport android.content.pm.PackageManager.MoveCallback; 211f4efd7360dea3038fe2096b1d4bccaae8e2a09fJeff Sharkeyimport android.os.Bundle; 22954d8dad5e395544f95ca211466bcc7195d31877Jeff Sharkeyimport android.os.Handler; 231f4efd7360dea3038fe2096b1d4bccaae8e2a09fJeff Sharkeyimport android.util.Log; 241f4efd7360dea3038fe2096b1d4bccaae8e2a09fJeff Sharkeyimport android.view.View; 251f4efd7360dea3038fe2096b1d4bccaae8e2a09fJeff Sharkeyimport android.widget.Toast; 261f4efd7360dea3038fe2096b1d4bccaae8e2a09fJeff Sharkey 271f4efd7360dea3038fe2096b1d4bccaae8e2a09fJeff Sharkeyimport com.android.settings.R; 281f4efd7360dea3038fe2096b1d4bccaae8e2a09fJeff Sharkey 2939b467482d1bf256a111c757e9b7621c6f523271Jason Monkimport static android.content.Intent.EXTRA_TITLE; 3039b467482d1bf256a111c757e9b7621c6f523271Jason Monkimport static android.content.pm.PackageManager.EXTRA_MOVE_ID; 3139b467482d1bf256a111c757e9b7621c6f523271Jason Monkimport static com.android.settings.deviceinfo.StorageSettings.TAG; 3239b467482d1bf256a111c757e9b7621c6f523271Jason Monk 331f4efd7360dea3038fe2096b1d4bccaae8e2a09fJeff Sharkeypublic class StorageWizardMoveProgress extends StorageWizardBase { 34954d8dad5e395544f95ca211466bcc7195d31877Jeff Sharkey private int mMoveId; 351f4efd7360dea3038fe2096b1d4bccaae8e2a09fJeff Sharkey 361f4efd7360dea3038fe2096b1d4bccaae8e2a09fJeff Sharkey @Override 371f4efd7360dea3038fe2096b1d4bccaae8e2a09fJeff Sharkey protected void onCreate(Bundle savedInstanceState) { 381f4efd7360dea3038fe2096b1d4bccaae8e2a09fJeff Sharkey super.onCreate(savedInstanceState); 391d37d0f7fb3c66462432d33c6db51ef79e5e7c88Makoto Onuki if (mVolume == null) { 401d37d0f7fb3c66462432d33c6db51ef79e5e7c88Makoto Onuki finish(); 411d37d0f7fb3c66462432d33c6db51ef79e5e7c88Makoto Onuki return; 421d37d0f7fb3c66462432d33c6db51ef79e5e7c88Makoto Onuki } 431f4efd7360dea3038fe2096b1d4bccaae8e2a09fJeff Sharkey setContentView(R.layout.storage_wizard_progress); 441f4efd7360dea3038fe2096b1d4bccaae8e2a09fJeff Sharkey 45954d8dad5e395544f95ca211466bcc7195d31877Jeff Sharkey mMoveId = getIntent().getIntExtra(EXTRA_MOVE_ID, -1); 46954d8dad5e395544f95ca211466bcc7195d31877Jeff Sharkey final String appName = getIntent().getStringExtra(EXTRA_TITLE); 471f4efd7360dea3038fe2096b1d4bccaae8e2a09fJeff Sharkey final String volumeName = mStorage.getBestVolumeDescription(mVolume); 481f4efd7360dea3038fe2096b1d4bccaae8e2a09fJeff Sharkey 49fba2fd8375f9eb4c93232cf08f2f2f5f043c4b16Daichi Hirono setIllustrationType(ILLUSTRATION_INTERNAL); 501f4efd7360dea3038fe2096b1d4bccaae8e2a09fJeff Sharkey setHeaderText(R.string.storage_wizard_move_progress_title, appName); 511f4efd7360dea3038fe2096b1d4bccaae8e2a09fJeff Sharkey setBodyText(R.string.storage_wizard_move_progress_body, volumeName, appName); 521f4efd7360dea3038fe2096b1d4bccaae8e2a09fJeff Sharkey 531f4efd7360dea3038fe2096b1d4bccaae8e2a09fJeff Sharkey getNextButton().setVisibility(View.GONE); 541f4efd7360dea3038fe2096b1d4bccaae8e2a09fJeff Sharkey 55954d8dad5e395544f95ca211466bcc7195d31877Jeff Sharkey // Register for updates and push through current status 56954d8dad5e395544f95ca211466bcc7195d31877Jeff Sharkey getPackageManager().registerMoveCallback(mCallback, new Handler()); 57e77f0687dd424ccfdc2b1061221c6c8ba4d6ac8dJeff Sharkey mCallback.onStatusChanged(mMoveId, getPackageManager().getMoveStatus(mMoveId), -1); 581f4efd7360dea3038fe2096b1d4bccaae8e2a09fJeff Sharkey } 591f4efd7360dea3038fe2096b1d4bccaae8e2a09fJeff Sharkey 60954d8dad5e395544f95ca211466bcc7195d31877Jeff Sharkey @Override 61954d8dad5e395544f95ca211466bcc7195d31877Jeff Sharkey protected void onDestroy() { 62954d8dad5e395544f95ca211466bcc7195d31877Jeff Sharkey super.onDestroy(); 63954d8dad5e395544f95ca211466bcc7195d31877Jeff Sharkey getPackageManager().unregisterMoveCallback(mCallback); 64954d8dad5e395544f95ca211466bcc7195d31877Jeff Sharkey } 65954d8dad5e395544f95ca211466bcc7195d31877Jeff Sharkey 66954d8dad5e395544f95ca211466bcc7195d31877Jeff Sharkey private final MoveCallback mCallback = new MoveCallback() { 67954d8dad5e395544f95ca211466bcc7195d31877Jeff Sharkey @Override 68e77f0687dd424ccfdc2b1061221c6c8ba4d6ac8dJeff Sharkey public void onStatusChanged(int moveId, int status, long estMillis) { 69954d8dad5e395544f95ca211466bcc7195d31877Jeff Sharkey if (mMoveId != moveId) return; 70954d8dad5e395544f95ca211466bcc7195d31877Jeff Sharkey 71954d8dad5e395544f95ca211466bcc7195d31877Jeff Sharkey if (PackageManager.isMoveStatusFinished(status)) { 72954d8dad5e395544f95ca211466bcc7195d31877Jeff Sharkey Log.d(TAG, "Finished with status " + status); 73954d8dad5e395544f95ca211466bcc7195d31877Jeff Sharkey if (status != PackageManager.MOVE_SUCCEEDED) { 74954d8dad5e395544f95ca211466bcc7195d31877Jeff Sharkey Toast.makeText(StorageWizardMoveProgress.this, moveStatusToMessage(status), 75954d8dad5e395544f95ca211466bcc7195d31877Jeff Sharkey Toast.LENGTH_LONG).show(); 76954d8dad5e395544f95ca211466bcc7195d31877Jeff Sharkey } 77954d8dad5e395544f95ca211466bcc7195d31877Jeff Sharkey finishAffinity(); 78954d8dad5e395544f95ca211466bcc7195d31877Jeff Sharkey 79954d8dad5e395544f95ca211466bcc7195d31877Jeff Sharkey } else { 80954d8dad5e395544f95ca211466bcc7195d31877Jeff Sharkey setCurrentProgress(status); 81954d8dad5e395544f95ca211466bcc7195d31877Jeff Sharkey } 82954d8dad5e395544f95ca211466bcc7195d31877Jeff Sharkey } 83954d8dad5e395544f95ca211466bcc7195d31877Jeff Sharkey }; 84954d8dad5e395544f95ca211466bcc7195d31877Jeff Sharkey 851f4efd7360dea3038fe2096b1d4bccaae8e2a09fJeff Sharkey private CharSequence moveStatusToMessage(int returnCode) { 861f4efd7360dea3038fe2096b1d4bccaae8e2a09fJeff Sharkey switch (returnCode) { 871f4efd7360dea3038fe2096b1d4bccaae8e2a09fJeff Sharkey case PackageManager.MOVE_FAILED_INSUFFICIENT_STORAGE: 881f4efd7360dea3038fe2096b1d4bccaae8e2a09fJeff Sharkey return getString(R.string.insufficient_storage); 899dbad57a84035642a6c174158352a2e03f88f522Makoto Onuki case PackageManager.MOVE_FAILED_DEVICE_ADMIN: 909dbad57a84035642a6c174158352a2e03f88f522Makoto Onuki return getString(R.string.move_error_device_admin); 911f4efd7360dea3038fe2096b1d4bccaae8e2a09fJeff Sharkey case PackageManager.MOVE_FAILED_DOESNT_EXIST: 921f4efd7360dea3038fe2096b1d4bccaae8e2a09fJeff Sharkey return getString(R.string.does_not_exist); 931f4efd7360dea3038fe2096b1d4bccaae8e2a09fJeff Sharkey case PackageManager.MOVE_FAILED_FORWARD_LOCKED: 941f4efd7360dea3038fe2096b1d4bccaae8e2a09fJeff Sharkey return getString(R.string.app_forward_locked); 951f4efd7360dea3038fe2096b1d4bccaae8e2a09fJeff Sharkey case PackageManager.MOVE_FAILED_INVALID_LOCATION: 961f4efd7360dea3038fe2096b1d4bccaae8e2a09fJeff Sharkey return getString(R.string.invalid_location); 971f4efd7360dea3038fe2096b1d4bccaae8e2a09fJeff Sharkey case PackageManager.MOVE_FAILED_SYSTEM_PACKAGE: 981f4efd7360dea3038fe2096b1d4bccaae8e2a09fJeff Sharkey return getString(R.string.system_package); 991f4efd7360dea3038fe2096b1d4bccaae8e2a09fJeff Sharkey case PackageManager.MOVE_FAILED_INTERNAL_ERROR: 1001f4efd7360dea3038fe2096b1d4bccaae8e2a09fJeff Sharkey default: 1011f4efd7360dea3038fe2096b1d4bccaae8e2a09fJeff Sharkey return getString(R.string.insufficient_storage); 1021f4efd7360dea3038fe2096b1d4bccaae8e2a09fJeff Sharkey } 1031f4efd7360dea3038fe2096b1d4bccaae8e2a09fJeff Sharkey } 1041f4efd7360dea3038fe2096b1d4bccaae8e2a09fJeff Sharkey} 105