1116a55cdabccb86e0c9a2548eebeb72b7d7d387eDaniel Nishi/** 2116a55cdabccb86e0c9a2548eebeb72b7d7d387eDaniel Nishi * Copyright (C) 2016 The Android Open Source Project 3116a55cdabccb86e0c9a2548eebeb72b7d7d387eDaniel Nishi * 4116a55cdabccb86e0c9a2548eebeb72b7d7d387eDaniel Nishi * Licensed under the Apache License, Version 2.0 (the "License"); 5116a55cdabccb86e0c9a2548eebeb72b7d7d387eDaniel Nishi * you may not use this file except in compliance with the License. 6116a55cdabccb86e0c9a2548eebeb72b7d7d387eDaniel Nishi * You may obtain a copy of the License at 7116a55cdabccb86e0c9a2548eebeb72b7d7d387eDaniel Nishi * 8da4fa8071717e514b37dd33580d66a43bac2d655Daniel Nishi * http://www.apache.org/licenses/LICENSE-2.0 9116a55cdabccb86e0c9a2548eebeb72b7d7d387eDaniel Nishi * 10116a55cdabccb86e0c9a2548eebeb72b7d7d387eDaniel Nishi * Unless required by applicable law or agreed to in writing, software 11116a55cdabccb86e0c9a2548eebeb72b7d7d387eDaniel Nishi * distributed under the License is distributed on an "AS IS" BASIS, 12116a55cdabccb86e0c9a2548eebeb72b7d7d387eDaniel Nishi * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13116a55cdabccb86e0c9a2548eebeb72b7d7d387eDaniel Nishi * See the License for the specific language governing permissions and 14116a55cdabccb86e0c9a2548eebeb72b7d7d387eDaniel Nishi * limitations under the License. 15116a55cdabccb86e0c9a2548eebeb72b7d7d387eDaniel Nishi */ 16116a55cdabccb86e0c9a2548eebeb72b7d7d387eDaniel Nishi 17116a55cdabccb86e0c9a2548eebeb72b7d7d387eDaniel Nishipackage com.android.settings.deletionhelper; 18116a55cdabccb86e0c9a2548eebeb72b7d7d387eDaniel Nishi 191b9afaff2b0532950fc77386b2ab31c3066eaa2eDaniel Nishiimport android.content.ContentResolver; 2059c8d77c8c5ee62fabd962db2555b5324caa51dfDaniel Nishiimport android.content.Context; 21116a55cdabccb86e0c9a2548eebeb72b7d7d387eDaniel Nishiimport android.os.Bundle; 22ed39bf639b801e6f0eef9f4f56a9e1160fa385c6Daniel Nishiimport android.provider.Settings; 23116a55cdabccb86e0c9a2548eebeb72b7d7d387eDaniel Nishiimport android.support.v7.preference.DropDownPreference; 24116a55cdabccb86e0c9a2548eebeb72b7d7d387eDaniel Nishiimport android.support.v7.preference.Preference; 25116a55cdabccb86e0c9a2548eebeb72b7d7d387eDaniel Nishiimport android.support.v7.preference.Preference.OnPreferenceChangeListener; 261ee13fd38693835ee6ee138e2d798076d7753224Daniel Nishiimport android.view.LayoutInflater; 271ee13fd38693835ee6ee138e2d798076d7753224Daniel Nishiimport android.view.View; 281ee13fd38693835ee6ee138e2d798076d7753224Daniel Nishiimport android.view.ViewGroup; 29116a55cdabccb86e0c9a2548eebeb72b7d7d387eDaniel Nishi 30265d3c2a0c36251bf8a9f571d7239b6dd404d942Tamas Berghammerimport com.android.internal.logging.nano.MetricsProto.MetricsEvent; 31116a55cdabccb86e0c9a2548eebeb72b7d7d387eDaniel Nishiimport com.android.settings.R; 321ee13fd38693835ee6ee138e2d798076d7753224Daniel Nishiimport com.android.settings.SettingsActivity; 339b868d95ead7ccec7ab2febcc95554139fa6ce8aDaniel Nishiimport com.android.settings.Utils; 3459c8d77c8c5ee62fabd962db2555b5324caa51dfDaniel Nishiimport com.android.settings.dashboard.DashboardFragment; 3559c8d77c8c5ee62fabd962db2555b5324caa51dfDaniel Nishiimport com.android.settings.search.BaseSearchIndexProvider; 3659c8d77c8c5ee62fabd962db2555b5324caa51dfDaniel Nishiimport com.android.settings.search.Indexable; 371ee13fd38693835ee6ee138e2d798076d7753224Daniel Nishiimport com.android.settings.widget.SwitchBar; 3859c8d77c8c5ee62fabd962db2555b5324caa51dfDaniel Nishiimport com.android.settingslib.core.AbstractPreferenceController; 3959c8d77c8c5ee62fabd962db2555b5324caa51dfDaniel Nishi 4059c8d77c8c5ee62fabd962db2555b5324caa51dfDaniel Nishiimport java.util.ArrayList; 4159c8d77c8c5ee62fabd962db2555b5324caa51dfDaniel Nishiimport java.util.List; 42116a55cdabccb86e0c9a2548eebeb72b7d7d387eDaniel Nishi 43116a55cdabccb86e0c9a2548eebeb72b7d7d387eDaniel Nishi/** 44116a55cdabccb86e0c9a2548eebeb72b7d7d387eDaniel Nishi * AutomaticStorageManagerSettings is the Settings screen for configuration and management of the 45116a55cdabccb86e0c9a2548eebeb72b7d7d387eDaniel Nishi * automatic storage manager. 46116a55cdabccb86e0c9a2548eebeb72b7d7d387eDaniel Nishi */ 4759c8d77c8c5ee62fabd962db2555b5324caa51dfDaniel Nishipublic class AutomaticStorageManagerSettings extends DashboardFragment 481ee13fd38693835ee6ee138e2d798076d7753224Daniel Nishi implements OnPreferenceChangeListener { 49116a55cdabccb86e0c9a2548eebeb72b7d7d387eDaniel Nishi private static final String KEY_DAYS = "days"; 50116a55cdabccb86e0c9a2548eebeb72b7d7d387eDaniel Nishi 511ee13fd38693835ee6ee138e2d798076d7753224Daniel Nishi private AutomaticStorageManagerSwitchBarController mSwitchController; 52116a55cdabccb86e0c9a2548eebeb72b7d7d387eDaniel Nishi private DropDownPreference mDaysToRetain; 531ee13fd38693835ee6ee138e2d798076d7753224Daniel Nishi private SwitchBar mSwitchBar; 54116a55cdabccb86e0c9a2548eebeb72b7d7d387eDaniel Nishi 55116a55cdabccb86e0c9a2548eebeb72b7d7d387eDaniel Nishi @Override 561ee13fd38693835ee6ee138e2d798076d7753224Daniel Nishi public View onCreateView( 571ee13fd38693835ee6ee138e2d798076d7753224Daniel Nishi LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 581ee13fd38693835ee6ee138e2d798076d7753224Daniel Nishi View view = super.onCreateView(inflater, container, savedInstanceState); 59ba03d2ff211ee6bcaff40b9e4b098162e76d2ec5Daniel Nishi 601ee13fd38693835ee6ee138e2d798076d7753224Daniel Nishi initializeDaysToRetainPreference(); 611ee13fd38693835ee6ee138e2d798076d7753224Daniel Nishi initializeSwitchBar(); 621b9afaff2b0532950fc77386b2ab31c3066eaa2eDaniel Nishi 631ee13fd38693835ee6ee138e2d798076d7753224Daniel Nishi return view; 641ee13fd38693835ee6ee138e2d798076d7753224Daniel Nishi } 65ba03d2ff211ee6bcaff40b9e4b098162e76d2ec5Daniel Nishi 661ee13fd38693835ee6ee138e2d798076d7753224Daniel Nishi private void initializeDaysToRetainPreference() { 671ee13fd38693835ee6ee138e2d798076d7753224Daniel Nishi mDaysToRetain = (DropDownPreference) findPreference(KEY_DAYS); 681ee13fd38693835ee6ee138e2d798076d7753224Daniel Nishi mDaysToRetain.setOnPreferenceChangeListener(this); 6980c204420bcc7973ec385ed1d62deb4781238f7dDaniel Nishi 701b9afaff2b0532950fc77386b2ab31c3066eaa2eDaniel Nishi ContentResolver cr = getContentResolver(); 719b868d95ead7ccec7ab2febcc95554139fa6ce8aDaniel Nishi int photosDaysToRetain = 729b868d95ead7ccec7ab2febcc95554139fa6ce8aDaniel Nishi Settings.Secure.getInt( 739b868d95ead7ccec7ab2febcc95554139fa6ce8aDaniel Nishi cr, 749b868d95ead7ccec7ab2febcc95554139fa6ce8aDaniel Nishi Settings.Secure.AUTOMATIC_STORAGE_MANAGER_DAYS_TO_RETAIN, 759b868d95ead7ccec7ab2febcc95554139fa6ce8aDaniel Nishi Utils.getDefaultStorageManagerDaysToRetain(getResources())); 7680c204420bcc7973ec385ed1d62deb4781238f7dDaniel Nishi String[] stringValues = 7780c204420bcc7973ec385ed1d62deb4781238f7dDaniel Nishi getResources().getStringArray(R.array.automatic_storage_management_days_values); 784a184d4360518c3781f0424989a22f3d4a360ecdDaniel Nishi mDaysToRetain.setValue(stringValues[daysValueToIndex(photosDaysToRetain, stringValues)]); 791ee13fd38693835ee6ee138e2d798076d7753224Daniel Nishi } 801ee13fd38693835ee6ee138e2d798076d7753224Daniel Nishi 811ee13fd38693835ee6ee138e2d798076d7753224Daniel Nishi private void initializeSwitchBar() { 821ee13fd38693835ee6ee138e2d798076d7753224Daniel Nishi final SettingsActivity activity = (SettingsActivity) getActivity(); 831ee13fd38693835ee6ee138e2d798076d7753224Daniel Nishi mSwitchBar = activity.getSwitchBar(); 8487d120a7e1571b8f7743c676cdf7a0d2cd82e7b1Fan Zhang mSwitchBar.setSwitchBarText(R.string.automatic_storage_manager_master_switch_title, 8587d120a7e1571b8f7743c676cdf7a0d2cd82e7b1Fan Zhang R.string.automatic_storage_manager_master_switch_title); 861ee13fd38693835ee6ee138e2d798076d7753224Daniel Nishi mSwitchBar.show(); 871ee13fd38693835ee6ee138e2d798076d7753224Daniel Nishi mSwitchController = 881ee13fd38693835ee6ee138e2d798076d7753224Daniel Nishi new AutomaticStorageManagerSwitchBarController( 891ee13fd38693835ee6ee138e2d798076d7753224Daniel Nishi getContext(), 901ee13fd38693835ee6ee138e2d798076d7753224Daniel Nishi mSwitchBar, 911ee13fd38693835ee6ee138e2d798076d7753224Daniel Nishi mMetricsFeatureProvider, 921ee13fd38693835ee6ee138e2d798076d7753224Daniel Nishi mDaysToRetain, 931ee13fd38693835ee6ee138e2d798076d7753224Daniel Nishi getFragmentManager()); 941ee13fd38693835ee6ee138e2d798076d7753224Daniel Nishi } 954a184d4360518c3781f0424989a22f3d4a360ecdDaniel Nishi 96116a55cdabccb86e0c9a2548eebeb72b7d7d387eDaniel Nishi @Override 97116a55cdabccb86e0c9a2548eebeb72b7d7d387eDaniel Nishi public void onResume() { 98116a55cdabccb86e0c9a2548eebeb72b7d7d387eDaniel Nishi super.onResume(); 99da4fa8071717e514b37dd33580d66a43bac2d655Daniel Nishi mDaysToRetain.setEnabled(Utils.isStorageManagerEnabled(getContext())); 10059c8d77c8c5ee62fabd962db2555b5324caa51dfDaniel Nishi } 10159c8d77c8c5ee62fabd962db2555b5324caa51dfDaniel Nishi 10259c8d77c8c5ee62fabd962db2555b5324caa51dfDaniel Nishi @Override 10359c8d77c8c5ee62fabd962db2555b5324caa51dfDaniel Nishi protected String getLogTag() { 10459c8d77c8c5ee62fabd962db2555b5324caa51dfDaniel Nishi return null; 10559c8d77c8c5ee62fabd962db2555b5324caa51dfDaniel Nishi } 10659c8d77c8c5ee62fabd962db2555b5324caa51dfDaniel Nishi 10759c8d77c8c5ee62fabd962db2555b5324caa51dfDaniel Nishi @Override 10859c8d77c8c5ee62fabd962db2555b5324caa51dfDaniel Nishi protected int getPreferenceScreenResId() { 10959c8d77c8c5ee62fabd962db2555b5324caa51dfDaniel Nishi return R.xml.automatic_storage_management_settings; 11059c8d77c8c5ee62fabd962db2555b5324caa51dfDaniel Nishi } 11159c8d77c8c5ee62fabd962db2555b5324caa51dfDaniel Nishi 11259c8d77c8c5ee62fabd962db2555b5324caa51dfDaniel Nishi @Override 113f7843adabd4e8e1cc84a52721daabefa3a1410fdFan Zhang protected List<AbstractPreferenceController> createPreferenceControllers(Context context) { 11459c8d77c8c5ee62fabd962db2555b5324caa51dfDaniel Nishi return buildPreferenceControllers(context); 115116a55cdabccb86e0c9a2548eebeb72b7d7d387eDaniel Nishi } 116116a55cdabccb86e0c9a2548eebeb72b7d7d387eDaniel Nishi 117116a55cdabccb86e0c9a2548eebeb72b7d7d387eDaniel Nishi @Override 1181ee13fd38693835ee6ee138e2d798076d7753224Daniel Nishi public void onDestroyView() { 1191ee13fd38693835ee6ee138e2d798076d7753224Daniel Nishi super.onDestroyView(); 1201ee13fd38693835ee6ee138e2d798076d7753224Daniel Nishi 1211ee13fd38693835ee6ee138e2d798076d7753224Daniel Nishi mSwitchBar.hide(); 1221ee13fd38693835ee6ee138e2d798076d7753224Daniel Nishi mSwitchController.tearDown(); 1231ee13fd38693835ee6ee138e2d798076d7753224Daniel Nishi } 1241ee13fd38693835ee6ee138e2d798076d7753224Daniel Nishi 1251ee13fd38693835ee6ee138e2d798076d7753224Daniel Nishi @Override 126116a55cdabccb86e0c9a2548eebeb72b7d7d387eDaniel Nishi public boolean onPreferenceChange(Preference preference, Object newValue) { 1271ee13fd38693835ee6ee138e2d798076d7753224Daniel Nishi if (KEY_DAYS.equals(preference.getKey())) { 1281ee13fd38693835ee6ee138e2d798076d7753224Daniel Nishi Settings.Secure.putInt( 1291ee13fd38693835ee6ee138e2d798076d7753224Daniel Nishi getContentResolver(), 1301ee13fd38693835ee6ee138e2d798076d7753224Daniel Nishi Settings.Secure.AUTOMATIC_STORAGE_MANAGER_DAYS_TO_RETAIN, 1311ee13fd38693835ee6ee138e2d798076d7753224Daniel Nishi Integer.parseInt((String) newValue)); 132ba03d2ff211ee6bcaff40b9e4b098162e76d2ec5Daniel Nishi } 133116a55cdabccb86e0c9a2548eebeb72b7d7d387eDaniel Nishi return true; 134116a55cdabccb86e0c9a2548eebeb72b7d7d387eDaniel Nishi } 135116a55cdabccb86e0c9a2548eebeb72b7d7d387eDaniel Nishi 136116a55cdabccb86e0c9a2548eebeb72b7d7d387eDaniel Nishi @Override 1376507613ebcd22e4691c2af92a5c161bd327db336Fan Zhang public int getMetricsCategory() { 138116a55cdabccb86e0c9a2548eebeb72b7d7d387eDaniel Nishi return MetricsEvent.STORAGE_MANAGER_SETTINGS; 139116a55cdabccb86e0c9a2548eebeb72b7d7d387eDaniel Nishi } 140116a55cdabccb86e0c9a2548eebeb72b7d7d387eDaniel Nishi 141ba03d2ff211ee6bcaff40b9e4b098162e76d2ec5Daniel Nishi @Override 142e0b0e9f9025038d72f8129606cc1f432afcb54e0Fan Zhang public int getHelpResource() { 143f21465e14fd64a84389c649ecd21cade212b0e66Daniel Nishi return R.string.help_uri_storage; 144f21465e14fd64a84389c649ecd21cade212b0e66Daniel Nishi } 145f21465e14fd64a84389c649ecd21cade212b0e66Daniel Nishi 14680c204420bcc7973ec385ed1d62deb4781238f7dDaniel Nishi private static int daysValueToIndex(int value, String[] indices) { 14780c204420bcc7973ec385ed1d62deb4781238f7dDaniel Nishi for (int i = 0; i < indices.length; i++) { 14880c204420bcc7973ec385ed1d62deb4781238f7dDaniel Nishi int thisValue = Integer.parseInt(indices[i]); 14980c204420bcc7973ec385ed1d62deb4781238f7dDaniel Nishi if (value == thisValue) { 15080c204420bcc7973ec385ed1d62deb4781238f7dDaniel Nishi return i; 15180c204420bcc7973ec385ed1d62deb4781238f7dDaniel Nishi } 15280c204420bcc7973ec385ed1d62deb4781238f7dDaniel Nishi } 15380c204420bcc7973ec385ed1d62deb4781238f7dDaniel Nishi return indices.length - 1; 15480c204420bcc7973ec385ed1d62deb4781238f7dDaniel Nishi } 1559b868d95ead7ccec7ab2febcc95554139fa6ce8aDaniel Nishi 15659c8d77c8c5ee62fabd962db2555b5324caa51dfDaniel Nishi private static List<AbstractPreferenceController> buildPreferenceControllers(Context context) { 15759c8d77c8c5ee62fabd962db2555b5324caa51dfDaniel Nishi final List<AbstractPreferenceController> controllers = new ArrayList<>(); 15859c8d77c8c5ee62fabd962db2555b5324caa51dfDaniel Nishi controllers.add(new AutomaticStorageManagerDescriptionPreferenceController(context)); 15959c8d77c8c5ee62fabd962db2555b5324caa51dfDaniel Nishi return controllers; 16059c8d77c8c5ee62fabd962db2555b5324caa51dfDaniel Nishi } 16159c8d77c8c5ee62fabd962db2555b5324caa51dfDaniel Nishi 16259c8d77c8c5ee62fabd962db2555b5324caa51dfDaniel Nishi /** For Search. */ 16359c8d77c8c5ee62fabd962db2555b5324caa51dfDaniel Nishi public static final Indexable.SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER = 16459c8d77c8c5ee62fabd962db2555b5324caa51dfDaniel Nishi new BaseSearchIndexProvider() { 16559c8d77c8c5ee62fabd962db2555b5324caa51dfDaniel Nishi @Override 16659c8d77c8c5ee62fabd962db2555b5324caa51dfDaniel Nishi protected boolean isPageSearchEnabled(Context context) { 16759c8d77c8c5ee62fabd962db2555b5324caa51dfDaniel Nishi return false; 16859c8d77c8c5ee62fabd962db2555b5324caa51dfDaniel Nishi } 16959c8d77c8c5ee62fabd962db2555b5324caa51dfDaniel Nishi 17059c8d77c8c5ee62fabd962db2555b5324caa51dfDaniel Nishi @Override 171aed8994f6f50a6bc0adfaa92b499ebde3a8f2a76Fan Zhang public List<AbstractPreferenceController> createPreferenceControllers( 17259c8d77c8c5ee62fabd962db2555b5324caa51dfDaniel Nishi Context context) { 17359c8d77c8c5ee62fabd962db2555b5324caa51dfDaniel Nishi return buildPreferenceControllers(context); 17459c8d77c8c5ee62fabd962db2555b5324caa51dfDaniel Nishi } 17559c8d77c8c5ee62fabd962db2555b5324caa51dfDaniel Nishi }; 176116a55cdabccb86e0c9a2548eebeb72b7d7d387eDaniel Nishi} 177