| /* | |
| * Copyright (C) 2014 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.notification; | |
| import android.content.ContentResolver; | |
| import android.content.Context; | |
| import android.content.res.Resources; | |
| import android.net.Uri; | |
| import android.provider.Settings.Global; | |
| import android.provider.Settings.System; | |
| import android.support.v7.preference.DropDownPreference; | |
| import android.support.v7.preference.Preference; | |
| import android.support.v7.preference.Preference.OnPreferenceChangeListener; | |
| import android.support.v7.preference.TwoStatePreference; | |
| import com.android.settings.SettingsPreferenceFragment; | |
| /** Helper to manage a two-state or dropdown preference bound to a global or system setting. */ | |
| public class SettingPref { | |
| public static final int TYPE_GLOBAL = 1; | |
| public static final int TYPE_SYSTEM = 2; | |
| protected final int mType; | |
| private final String mKey; | |
| protected final String mSetting; | |
| protected final int mDefault; | |
| private final int[] mValues; | |
| private final Uri mUri; | |
| protected TwoStatePreference mTwoState; | |
| protected DropDownPreference mDropDown; | |
| public SettingPref(int type, String key, String setting, int def, int... values) { | |
| mType = type; | |
| mKey = key; | |
| mSetting = setting; | |
| mDefault = def; | |
| mValues = values; | |
| mUri = getUriFor(mType, mSetting); | |
| } | |
| public boolean isApplicable(Context context) { | |
| return true; | |
| } | |
| protected String getCaption(Resources res, int value) { | |
| throw new UnsupportedOperationException(); | |
| } | |
| public Preference init(SettingsPreferenceFragment settings) { | |
| final Context context = settings.getActivity(); | |
| Preference p = settings.getPreferenceScreen().findPreference(mKey); | |
| if (p != null && !isApplicable(context)) { | |
| settings.getPreferenceScreen().removePreference(p); | |
| p = null; | |
| } | |
| if (p instanceof TwoStatePreference) { | |
| mTwoState = (TwoStatePreference) p; | |
| } else if (p instanceof DropDownPreference) { | |
| mDropDown = (DropDownPreference) p; | |
| CharSequence[] entries = new CharSequence[mValues.length]; | |
| CharSequence[] values = new CharSequence[mValues.length]; | |
| for (int i = 0; i < mValues.length; i++) { | |
| entries[i] = getCaption(context.getResources(), mValues[i]); | |
| values[i] = Integer.toString(mValues[i]); | |
| } | |
| mDropDown.setEntries(entries); | |
| mDropDown.setEntryValues(values); | |
| } | |
| update(context); | |
| if (mTwoState != null) { | |
| p.setOnPreferenceChangeListener(new OnPreferenceChangeListener() { | |
| @Override | |
| public boolean onPreferenceChange(Preference preference, Object newValue) { | |
| setSetting(context, (Boolean) newValue ? 1 : 0); | |
| return true; | |
| } | |
| }); | |
| return mTwoState; | |
| } | |
| if (mDropDown != null) { | |
| p.setOnPreferenceChangeListener(new OnPreferenceChangeListener() { | |
| @Override | |
| public boolean onPreferenceChange(Preference preference, Object newValue) { | |
| return setSetting(context, Integer.parseInt((String) newValue)); | |
| } | |
| }); | |
| return mDropDown; | |
| } | |
| return null; | |
| } | |
| protected boolean setSetting(Context context, int value) { | |
| return putInt(mType, context.getContentResolver(), mSetting, value); | |
| } | |
| public Uri getUri() { | |
| return mUri; | |
| } | |
| public String getKey() { | |
| return mKey; | |
| } | |
| public void update(Context context) { | |
| final int val = getInt(mType, context.getContentResolver(), mSetting, mDefault); | |
| if (mTwoState != null) { | |
| mTwoState.setChecked(val != 0); | |
| } else if (mDropDown != null) { | |
| mDropDown.setValue(Integer.toString(val)); | |
| } | |
| } | |
| private static Uri getUriFor(int type, String setting) { | |
| switch(type) { | |
| case TYPE_GLOBAL: | |
| return Global.getUriFor(setting); | |
| case TYPE_SYSTEM: | |
| return System.getUriFor(setting); | |
| } | |
| throw new IllegalArgumentException(); | |
| } | |
| protected static boolean putInt(int type, ContentResolver cr, String setting, int value) { | |
| switch(type) { | |
| case TYPE_GLOBAL: | |
| return Global.putInt(cr, setting, value); | |
| case TYPE_SYSTEM: | |
| return System.putInt(cr, setting, value); | |
| } | |
| throw new IllegalArgumentException(); | |
| } | |
| protected static int getInt(int type, ContentResolver cr, String setting, int def) { | |
| switch(type) { | |
| case TYPE_GLOBAL: | |
| return Global.getInt(cr, setting, def); | |
| case TYPE_SYSTEM: | |
| return System.getInt(cr, setting, def); | |
| } | |
| throw new IllegalArgumentException(); | |
| } | |
| } |