1e31550d809193bf32278fdf86a9dcbad1cf34b8eDaniel Nishi/* 2e31550d809193bf32278fdf86a9dcbad1cf34b8eDaniel Nishi * Copyright (C) 2017 The Android Open Source Project 3e31550d809193bf32278fdf86a9dcbad1cf34b8eDaniel Nishi * 4e31550d809193bf32278fdf86a9dcbad1cf34b8eDaniel Nishi * Licensed under the Apache License, Version 2.0 (the "License"); 5e31550d809193bf32278fdf86a9dcbad1cf34b8eDaniel Nishi * you may not use this file except in compliance with the License. 6e31550d809193bf32278fdf86a9dcbad1cf34b8eDaniel Nishi * You may obtain a copy of the License at 7e31550d809193bf32278fdf86a9dcbad1cf34b8eDaniel Nishi * 8e31550d809193bf32278fdf86a9dcbad1cf34b8eDaniel Nishi * http://www.apache.org/licenses/LICENSE-2.0 9e31550d809193bf32278fdf86a9dcbad1cf34b8eDaniel Nishi * 10e31550d809193bf32278fdf86a9dcbad1cf34b8eDaniel Nishi * Unless required by applicable law or agreed to in writing, software 11e31550d809193bf32278fdf86a9dcbad1cf34b8eDaniel Nishi * distributed under the License is distributed on an "AS IS" BASIS, 12e31550d809193bf32278fdf86a9dcbad1cf34b8eDaniel Nishi * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13e31550d809193bf32278fdf86a9dcbad1cf34b8eDaniel Nishi * See the License for the specific language governing permissions and 14e31550d809193bf32278fdf86a9dcbad1cf34b8eDaniel Nishi * limitations under the License. 15e31550d809193bf32278fdf86a9dcbad1cf34b8eDaniel Nishi */ 16e31550d809193bf32278fdf86a9dcbad1cf34b8eDaniel Nishi 17e31550d809193bf32278fdf86a9dcbad1cf34b8eDaniel Nishipackage com.android.settings.deviceinfo; 18e31550d809193bf32278fdf86a9dcbad1cf34b8eDaniel Nishi 19e31550d809193bf32278fdf86a9dcbad1cf34b8eDaniel Nishiimport android.content.Context; 20e31550d809193bf32278fdf86a9dcbad1cf34b8eDaniel Nishiimport android.content.Intent; 21e31550d809193bf32278fdf86a9dcbad1cf34b8eDaniel Nishiimport android.os.storage.VolumeInfo; 22e31550d809193bf32278fdf86a9dcbad1cf34b8eDaniel Nishiimport android.view.Menu; 23e31550d809193bf32278fdf86a9dcbad1cf34b8eDaniel Nishiimport android.view.MenuInflater; 24e31550d809193bf32278fdf86a9dcbad1cf34b8eDaniel Nishiimport android.view.MenuItem; 25e31550d809193bf32278fdf86a9dcbad1cf34b8eDaniel Nishi 26e31550d809193bf32278fdf86a9dcbad1cf34b8eDaniel Nishiimport com.android.settings.R; 27e31550d809193bf32278fdf86a9dcbad1cf34b8eDaniel Nishiimport com.android.settings.applications.PackageManagerWrapper; 28777ed2535a7fd6f618a0d12f381af99252283574Juan Langimport com.android.settingslib.core.lifecycle.Lifecycle; 29777ed2535a7fd6f618a0d12f381af99252283574Juan Langimport com.android.settingslib.core.lifecycle.LifecycleObserver; 30777ed2535a7fd6f618a0d12f381af99252283574Juan Langimport com.android.settingslib.core.lifecycle.events.OnCreateOptionsMenu; 31777ed2535a7fd6f618a0d12f381af99252283574Juan Langimport com.android.settingslib.core.lifecycle.events.OnOptionsItemSelected; 32777ed2535a7fd6f618a0d12f381af99252283574Juan Langimport com.android.settingslib.core.lifecycle.events.OnPrepareOptionsMenu; 33e31550d809193bf32278fdf86a9dcbad1cf34b8eDaniel Nishi 34e31550d809193bf32278fdf86a9dcbad1cf34b8eDaniel Nishiimport java.util.Objects; 35e31550d809193bf32278fdf86a9dcbad1cf34b8eDaniel Nishi 36e31550d809193bf32278fdf86a9dcbad1cf34b8eDaniel Nishi/** 37e31550d809193bf32278fdf86a9dcbad1cf34b8eDaniel Nishi * Handles the option menu on the Storage settings. 38e31550d809193bf32278fdf86a9dcbad1cf34b8eDaniel Nishi */ 39e31550d809193bf32278fdf86a9dcbad1cf34b8eDaniel Nishipublic class PrivateVolumeOptionMenuController implements LifecycleObserver, OnCreateOptionsMenu, 40e31550d809193bf32278fdf86a9dcbad1cf34b8eDaniel Nishi OnPrepareOptionsMenu, OnOptionsItemSelected { 41e31550d809193bf32278fdf86a9dcbad1cf34b8eDaniel Nishi private static final int OPTIONS_MENU_MIGRATE_DATA = 100; 42e31550d809193bf32278fdf86a9dcbad1cf34b8eDaniel Nishi 43e31550d809193bf32278fdf86a9dcbad1cf34b8eDaniel Nishi private Context mContext; 44e31550d809193bf32278fdf86a9dcbad1cf34b8eDaniel Nishi private VolumeInfo mVolumeInfo; 45e31550d809193bf32278fdf86a9dcbad1cf34b8eDaniel Nishi private PackageManagerWrapper mPm; 46e31550d809193bf32278fdf86a9dcbad1cf34b8eDaniel Nishi 47e31550d809193bf32278fdf86a9dcbad1cf34b8eDaniel Nishi public PrivateVolumeOptionMenuController( 48e31550d809193bf32278fdf86a9dcbad1cf34b8eDaniel Nishi Context context, VolumeInfo volumeInfo, PackageManagerWrapper packageManager) { 49e31550d809193bf32278fdf86a9dcbad1cf34b8eDaniel Nishi mContext = context; 50e31550d809193bf32278fdf86a9dcbad1cf34b8eDaniel Nishi mVolumeInfo = volumeInfo; 51e31550d809193bf32278fdf86a9dcbad1cf34b8eDaniel Nishi mPm = packageManager; 52e31550d809193bf32278fdf86a9dcbad1cf34b8eDaniel Nishi } 53e31550d809193bf32278fdf86a9dcbad1cf34b8eDaniel Nishi 54e31550d809193bf32278fdf86a9dcbad1cf34b8eDaniel Nishi @Override 55e31550d809193bf32278fdf86a9dcbad1cf34b8eDaniel Nishi public void onCreateOptionsMenu(final Menu menu, final MenuInflater inflater) { 56e31550d809193bf32278fdf86a9dcbad1cf34b8eDaniel Nishi menu.add(Menu.NONE, OPTIONS_MENU_MIGRATE_DATA, 0, R.string.storage_menu_migrate); 57e31550d809193bf32278fdf86a9dcbad1cf34b8eDaniel Nishi } 58e31550d809193bf32278fdf86a9dcbad1cf34b8eDaniel Nishi 59e31550d809193bf32278fdf86a9dcbad1cf34b8eDaniel Nishi @Override 60e31550d809193bf32278fdf86a9dcbad1cf34b8eDaniel Nishi public void onPrepareOptionsMenu(Menu menu) { 61e31550d809193bf32278fdf86a9dcbad1cf34b8eDaniel Nishi if (mVolumeInfo == null) { 62e31550d809193bf32278fdf86a9dcbad1cf34b8eDaniel Nishi return; 63e31550d809193bf32278fdf86a9dcbad1cf34b8eDaniel Nishi } 64e31550d809193bf32278fdf86a9dcbad1cf34b8eDaniel Nishi 65e31550d809193bf32278fdf86a9dcbad1cf34b8eDaniel Nishi // Only offer to migrate when not current storage 66e31550d809193bf32278fdf86a9dcbad1cf34b8eDaniel Nishi final VolumeInfo privateVol = mPm.getPrimaryStorageCurrentVolume(); 67e31550d809193bf32278fdf86a9dcbad1cf34b8eDaniel Nishi final MenuItem migrate = menu.findItem(OPTIONS_MENU_MIGRATE_DATA); 68e31550d809193bf32278fdf86a9dcbad1cf34b8eDaniel Nishi if (migrate != null) { 69e31550d809193bf32278fdf86a9dcbad1cf34b8eDaniel Nishi migrate.setVisible((privateVol != null) 70e31550d809193bf32278fdf86a9dcbad1cf34b8eDaniel Nishi && (privateVol.getType() == VolumeInfo.TYPE_PRIVATE) 71e31550d809193bf32278fdf86a9dcbad1cf34b8eDaniel Nishi && !Objects.equals(mVolumeInfo, privateVol)); 72e31550d809193bf32278fdf86a9dcbad1cf34b8eDaniel Nishi } 73e31550d809193bf32278fdf86a9dcbad1cf34b8eDaniel Nishi } 74e31550d809193bf32278fdf86a9dcbad1cf34b8eDaniel Nishi 75e31550d809193bf32278fdf86a9dcbad1cf34b8eDaniel Nishi @Override 76e31550d809193bf32278fdf86a9dcbad1cf34b8eDaniel Nishi public boolean onOptionsItemSelected(MenuItem menuItem) { 77e31550d809193bf32278fdf86a9dcbad1cf34b8eDaniel Nishi if (menuItem.getItemId() == OPTIONS_MENU_MIGRATE_DATA) { 78e31550d809193bf32278fdf86a9dcbad1cf34b8eDaniel Nishi final Intent intent = new Intent(mContext, StorageWizardMigrateConfirm.class); 79e31550d809193bf32278fdf86a9dcbad1cf34b8eDaniel Nishi intent.putExtra(VolumeInfo.EXTRA_VOLUME_ID, mVolumeInfo.getId()); 80e31550d809193bf32278fdf86a9dcbad1cf34b8eDaniel Nishi mContext.startActivity(intent); 81e31550d809193bf32278fdf86a9dcbad1cf34b8eDaniel Nishi return true; 82e31550d809193bf32278fdf86a9dcbad1cf34b8eDaniel Nishi } 83e31550d809193bf32278fdf86a9dcbad1cf34b8eDaniel Nishi return false; 84e31550d809193bf32278fdf86a9dcbad1cf34b8eDaniel Nishi } 85e31550d809193bf32278fdf86a9dcbad1cf34b8eDaniel Nishi} 86