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