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