On older devices, the activation warning dialog would show upon the switchbar changing to On. This was occurring when the page opens because the status was changing onResume. By shuffling the switchbar changes into the ASMSwitchBarController, we can register our listener after the initialization of the switch bar's first status. Change-Id: I3610d07345684d1e66444981a8059d1c2965e955 Fixes: 37472724 Test: Settings robotests
168 lines
6.1 KiB
Java
168 lines
6.1 KiB
Java
/**
|
|
* Copyright (C) 2016 The Android Open Source Project
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
|
|
package com.android.settings.deletionhelper;
|
|
|
|
import android.app.Activity;
|
|
import android.content.ContentResolver;
|
|
import android.os.Bundle;
|
|
import android.provider.Settings;
|
|
import android.support.v7.preference.DropDownPreference;
|
|
import android.support.v7.preference.Preference;
|
|
import android.support.v7.preference.Preference.OnPreferenceChangeListener;
|
|
import android.text.format.DateUtils;
|
|
import android.text.format.Formatter;
|
|
import android.view.LayoutInflater;
|
|
import android.view.View;
|
|
import android.view.ViewGroup;
|
|
|
|
import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
|
|
import com.android.settings.R;
|
|
import com.android.settings.SettingsActivity;
|
|
import com.android.settings.SettingsPreferenceFragment;
|
|
import com.android.settings.widget.SwitchBar;
|
|
|
|
/**
|
|
* AutomaticStorageManagerSettings is the Settings screen for configuration and management of the
|
|
* automatic storage manager.
|
|
*/
|
|
public class AutomaticStorageManagerSettings extends SettingsPreferenceFragment
|
|
implements OnPreferenceChangeListener {
|
|
private static final String KEY_DAYS = "days";
|
|
private static final String KEY_FREED = "freed_bytes";
|
|
private static final String STORAGE_MANAGER_ENABLED_BY_DEFAULT_PROPERTY =
|
|
"ro.storage_manager.enabled";
|
|
|
|
private AutomaticStorageManagerSwitchBarController mSwitchController;
|
|
private DropDownPreference mDaysToRetain;
|
|
private Preference mFreedBytes;
|
|
private SwitchBar mSwitchBar;
|
|
|
|
@Override
|
|
public void onCreate(Bundle savedInstanceState) {
|
|
super.onCreate(savedInstanceState);
|
|
addPreferencesFromResource(R.xml.automatic_storage_management_settings);
|
|
}
|
|
|
|
@Override
|
|
public View onCreateView(
|
|
LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
|
|
View view = super.onCreateView(inflater, container, savedInstanceState);
|
|
|
|
initializeDaysToRetainPreference();
|
|
initializeFreedBytesPreference();
|
|
initializeSwitchBar();
|
|
|
|
return view;
|
|
}
|
|
|
|
private void initializeDaysToRetainPreference() {
|
|
mDaysToRetain = (DropDownPreference) findPreference(KEY_DAYS);
|
|
mDaysToRetain.setOnPreferenceChangeListener(this);
|
|
|
|
ContentResolver cr = getContentResolver();
|
|
int photosDaysToRetain = Settings.Secure.getInt(cr,
|
|
Settings.Secure.AUTOMATIC_STORAGE_MANAGER_DAYS_TO_RETAIN,
|
|
Settings.Secure.AUTOMATIC_STORAGE_MANAGER_DAYS_TO_RETAIN_DEFAULT);
|
|
String[] stringValues =
|
|
getResources().getStringArray(R.array.automatic_storage_management_days_values);
|
|
mDaysToRetain.setValue(stringValues[daysValueToIndex(photosDaysToRetain, stringValues)]);
|
|
}
|
|
|
|
private void initializeSwitchBar() {
|
|
final SettingsActivity activity = (SettingsActivity) getActivity();
|
|
mSwitchBar = activity.getSwitchBar();
|
|
mSwitchBar.show();
|
|
mSwitchController =
|
|
new AutomaticStorageManagerSwitchBarController(
|
|
getContext(),
|
|
mSwitchBar,
|
|
mMetricsFeatureProvider,
|
|
mDaysToRetain,
|
|
getFragmentManager());
|
|
}
|
|
|
|
private void initializeFreedBytesPreference() {
|
|
ContentResolver cr = getContentResolver();
|
|
mFreedBytes = findPreference(KEY_FREED);
|
|
long freedBytes = Settings.Secure.getLong(cr,
|
|
Settings.Secure.AUTOMATIC_STORAGE_MANAGER_BYTES_CLEARED,
|
|
0);
|
|
long lastRunMillis = Settings.Secure.getLong(cr,
|
|
Settings.Secure.AUTOMATIC_STORAGE_MANAGER_LAST_RUN,
|
|
0);
|
|
if (freedBytes == 0 || lastRunMillis == 0) {
|
|
mFreedBytes.setVisible(false);
|
|
} else {
|
|
final Activity activity = getActivity();
|
|
mFreedBytes.setSummary(
|
|
activity.getString(
|
|
R.string.automatic_storage_manager_freed_bytes,
|
|
Formatter.formatFileSize(activity, freedBytes),
|
|
DateUtils.formatDateTime(
|
|
activity, lastRunMillis, DateUtils.FORMAT_SHOW_DATE)));
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public void onResume() {
|
|
super.onResume();
|
|
boolean isStorageManagerChecked =
|
|
Settings.Secure.getInt(getContentResolver(),
|
|
Settings.Secure.AUTOMATIC_STORAGE_MANAGER_ENABLED, 0) != 0;
|
|
mDaysToRetain.setEnabled(isStorageManagerChecked);
|
|
}
|
|
|
|
@Override
|
|
public void onDestroyView() {
|
|
super.onDestroyView();
|
|
|
|
mSwitchBar.hide();
|
|
mSwitchController.tearDown();
|
|
}
|
|
|
|
@Override
|
|
public boolean onPreferenceChange(Preference preference, Object newValue) {
|
|
if (KEY_DAYS.equals(preference.getKey())) {
|
|
Settings.Secure.putInt(
|
|
getContentResolver(),
|
|
Settings.Secure.AUTOMATIC_STORAGE_MANAGER_DAYS_TO_RETAIN,
|
|
Integer.parseInt((String) newValue));
|
|
}
|
|
return true;
|
|
}
|
|
|
|
@Override
|
|
public int getMetricsCategory() {
|
|
return MetricsEvent.STORAGE_MANAGER_SETTINGS;
|
|
}
|
|
|
|
@Override
|
|
protected int getHelpResource() {
|
|
return R.string.help_uri_storage;
|
|
}
|
|
|
|
private static int daysValueToIndex(int value, String[] indices) {
|
|
for (int i = 0; i < indices.length; i++) {
|
|
int thisValue = Integer.parseInt(indices[i]);
|
|
if (value == thisValue) {
|
|
return i;
|
|
}
|
|
}
|
|
return indices.length - 1;
|
|
}
|
|
}
|