159c8d77c8c5ee62fabd962db2555b5324caa51dfDaniel Nishi/**
259c8d77c8c5ee62fabd962db2555b5324caa51dfDaniel Nishi * Copyright (C) 2017 The Android Open Source Project
359c8d77c8c5ee62fabd962db2555b5324caa51dfDaniel Nishi *
459c8d77c8c5ee62fabd962db2555b5324caa51dfDaniel Nishi * <p>Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file
559c8d77c8c5ee62fabd962db2555b5324caa51dfDaniel Nishi * except in compliance with the License. You may obtain a copy of the License at
659c8d77c8c5ee62fabd962db2555b5324caa51dfDaniel Nishi *
759c8d77c8c5ee62fabd962db2555b5324caa51dfDaniel Nishi * <p>http://www.apache.org/licenses/LICENSE-2.0
859c8d77c8c5ee62fabd962db2555b5324caa51dfDaniel Nishi *
959c8d77c8c5ee62fabd962db2555b5324caa51dfDaniel Nishi * <p>Unless required by applicable law or agreed to in writing, software distributed under the
1059c8d77c8c5ee62fabd962db2555b5324caa51dfDaniel Nishi * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
1159c8d77c8c5ee62fabd962db2555b5324caa51dfDaniel Nishi * express or implied. See the License for the specific language governing permissions and
1259c8d77c8c5ee62fabd962db2555b5324caa51dfDaniel Nishi * limitations under the License.
1359c8d77c8c5ee62fabd962db2555b5324caa51dfDaniel Nishi */
1459c8d77c8c5ee62fabd962db2555b5324caa51dfDaniel Nishipackage com.android.settings.deletionhelper;
1559c8d77c8c5ee62fabd962db2555b5324caa51dfDaniel Nishi
1659c8d77c8c5ee62fabd962db2555b5324caa51dfDaniel Nishiimport android.content.ContentResolver;
1759c8d77c8c5ee62fabd962db2555b5324caa51dfDaniel Nishiimport android.content.Context;
1859c8d77c8c5ee62fabd962db2555b5324caa51dfDaniel Nishiimport android.provider.Settings;
1959c8d77c8c5ee62fabd962db2555b5324caa51dfDaniel Nishiimport android.support.v7.preference.Preference;
2059c8d77c8c5ee62fabd962db2555b5324caa51dfDaniel Nishiimport android.support.v7.preference.PreferenceScreen;
2159c8d77c8c5ee62fabd962db2555b5324caa51dfDaniel Nishiimport android.text.format.DateUtils;
2259c8d77c8c5ee62fabd962db2555b5324caa51dfDaniel Nishiimport android.text.format.Formatter;
2359c8d77c8c5ee62fabd962db2555b5324caa51dfDaniel Nishi
2459c8d77c8c5ee62fabd962db2555b5324caa51dfDaniel Nishiimport com.android.settings.R;
2559c8d77c8c5ee62fabd962db2555b5324caa51dfDaniel Nishiimport com.android.settings.core.PreferenceControllerMixin;
2659c8d77c8c5ee62fabd962db2555b5324caa51dfDaniel Nishiimport com.android.settingslib.core.AbstractPreferenceController;
2759c8d77c8c5ee62fabd962db2555b5324caa51dfDaniel Nishi
2859c8d77c8c5ee62fabd962db2555b5324caa51dfDaniel Nishi/**
2959c8d77c8c5ee62fabd962db2555b5324caa51dfDaniel Nishi * Handles the wall of text which appears below the options in the Storage Management settings drill
3059c8d77c8c5ee62fabd962db2555b5324caa51dfDaniel Nishi * down.
3159c8d77c8c5ee62fabd962db2555b5324caa51dfDaniel Nishi */
3259c8d77c8c5ee62fabd962db2555b5324caa51dfDaniel Nishipublic class AutomaticStorageManagerDescriptionPreferenceController
3359c8d77c8c5ee62fabd962db2555b5324caa51dfDaniel Nishi        extends AbstractPreferenceController implements PreferenceControllerMixin {
3459c8d77c8c5ee62fabd962db2555b5324caa51dfDaniel Nishi    private static final String KEY_FREED = "freed_bytes";
3559c8d77c8c5ee62fabd962db2555b5324caa51dfDaniel Nishi
3659c8d77c8c5ee62fabd962db2555b5324caa51dfDaniel Nishi    public AutomaticStorageManagerDescriptionPreferenceController(Context context) {
3759c8d77c8c5ee62fabd962db2555b5324caa51dfDaniel Nishi        super(context);
3859c8d77c8c5ee62fabd962db2555b5324caa51dfDaniel Nishi    }
3959c8d77c8c5ee62fabd962db2555b5324caa51dfDaniel Nishi
4059c8d77c8c5ee62fabd962db2555b5324caa51dfDaniel Nishi    @Override
4159c8d77c8c5ee62fabd962db2555b5324caa51dfDaniel Nishi    public boolean isAvailable() {
4259c8d77c8c5ee62fabd962db2555b5324caa51dfDaniel Nishi        return true;
4359c8d77c8c5ee62fabd962db2555b5324caa51dfDaniel Nishi    }
4459c8d77c8c5ee62fabd962db2555b5324caa51dfDaniel Nishi
4559c8d77c8c5ee62fabd962db2555b5324caa51dfDaniel Nishi    @Override
4659c8d77c8c5ee62fabd962db2555b5324caa51dfDaniel Nishi    public String getPreferenceKey() {
4759c8d77c8c5ee62fabd962db2555b5324caa51dfDaniel Nishi        return KEY_FREED;
4859c8d77c8c5ee62fabd962db2555b5324caa51dfDaniel Nishi    }
4959c8d77c8c5ee62fabd962db2555b5324caa51dfDaniel Nishi
5059c8d77c8c5ee62fabd962db2555b5324caa51dfDaniel Nishi    @Override
5159c8d77c8c5ee62fabd962db2555b5324caa51dfDaniel Nishi    public void displayPreference(PreferenceScreen screen) {
5259c8d77c8c5ee62fabd962db2555b5324caa51dfDaniel Nishi        Preference preference = screen.findPreference(getPreferenceKey());
5359c8d77c8c5ee62fabd962db2555b5324caa51dfDaniel Nishi        final Context context = preference.getContext();
5459c8d77c8c5ee62fabd962db2555b5324caa51dfDaniel Nishi        ContentResolver cr = context.getContentResolver();
5559c8d77c8c5ee62fabd962db2555b5324caa51dfDaniel Nishi        long freedBytes =
5659c8d77c8c5ee62fabd962db2555b5324caa51dfDaniel Nishi                Settings.Secure.getLong(
5759c8d77c8c5ee62fabd962db2555b5324caa51dfDaniel Nishi                        cr, Settings.Secure.AUTOMATIC_STORAGE_MANAGER_BYTES_CLEARED, 0);
5859c8d77c8c5ee62fabd962db2555b5324caa51dfDaniel Nishi        long lastRunMillis =
5959c8d77c8c5ee62fabd962db2555b5324caa51dfDaniel Nishi                Settings.Secure.getLong(cr, Settings.Secure.AUTOMATIC_STORAGE_MANAGER_LAST_RUN, 0);
6059c8d77c8c5ee62fabd962db2555b5324caa51dfDaniel Nishi        if (freedBytes == 0 || lastRunMillis == 0 || !isStorageManagerEnabled(cr)) {
6159c8d77c8c5ee62fabd962db2555b5324caa51dfDaniel Nishi            preference.setSummary(R.string.automatic_storage_manager_text);
6259c8d77c8c5ee62fabd962db2555b5324caa51dfDaniel Nishi        } else {
6359c8d77c8c5ee62fabd962db2555b5324caa51dfDaniel Nishi            preference.setSummary(
6459c8d77c8c5ee62fabd962db2555b5324caa51dfDaniel Nishi                    context.getString(
6559c8d77c8c5ee62fabd962db2555b5324caa51dfDaniel Nishi                            R.string.automatic_storage_manager_freed_bytes,
6659c8d77c8c5ee62fabd962db2555b5324caa51dfDaniel Nishi                            Formatter.formatFileSize(context, freedBytes),
6759c8d77c8c5ee62fabd962db2555b5324caa51dfDaniel Nishi                            DateUtils.formatDateTime(
6859c8d77c8c5ee62fabd962db2555b5324caa51dfDaniel Nishi                                    context, lastRunMillis, DateUtils.FORMAT_SHOW_DATE)));
6959c8d77c8c5ee62fabd962db2555b5324caa51dfDaniel Nishi        }
7059c8d77c8c5ee62fabd962db2555b5324caa51dfDaniel Nishi    }
7159c8d77c8c5ee62fabd962db2555b5324caa51dfDaniel Nishi
7259c8d77c8c5ee62fabd962db2555b5324caa51dfDaniel Nishi    private boolean isStorageManagerEnabled(ContentResolver cr) {
7359c8d77c8c5ee62fabd962db2555b5324caa51dfDaniel Nishi        return Settings.Secure.getInt(cr, Settings.Secure.AUTOMATIC_STORAGE_MANAGER_ENABLED, 0)
7459c8d77c8c5ee62fabd962db2555b5324caa51dfDaniel Nishi                != 0;
7559c8d77c8c5ee62fabd962db2555b5324caa51dfDaniel Nishi    }
7659c8d77c8c5ee62fabd962db2555b5324caa51dfDaniel Nishi}
77