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