diff options
Diffstat (limited to 'android/WALT/app/src/main/java/org/chromium/latency/walt/NumberPickerPreference.java')
-rw-r--r-- | android/WALT/app/src/main/java/org/chromium/latency/walt/NumberPickerPreference.java | 134 |
1 files changed, 134 insertions, 0 deletions
diff --git a/android/WALT/app/src/main/java/org/chromium/latency/walt/NumberPickerPreference.java b/android/WALT/app/src/main/java/org/chromium/latency/walt/NumberPickerPreference.java new file mode 100644 index 0000000..9d71d42 --- /dev/null +++ b/android/WALT/app/src/main/java/org/chromium/latency/walt/NumberPickerPreference.java @@ -0,0 +1,134 @@ +/* + * 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 org.chromium.latency.walt; + +import android.content.Context; +import android.content.res.TypedArray; +import android.os.Bundle; +import android.support.annotation.NonNull; +import android.support.v7.preference.DialogPreference; +import android.support.v7.preference.PreferenceDialogFragmentCompat; +import android.util.AttributeSet; +import android.view.View; + +public class NumberPickerPreference extends DialogPreference { + private int currentValue; + private int maxValue; + private int minValue; + + private static final int DEFAULT_value = 0; + private static final int DEFAULT_maxValue = 0; + private static final int DEFAULT_minValue = 0; + + private final String defaultSummary; + + public NumberPickerPreference(Context context, AttributeSet attrs) { + super(context, attrs); + + defaultSummary = getSummary().toString(); + TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.NumberPickerPreference); + + try { + maxValue = a.getInt(R.styleable.NumberPickerPreference_maxValue, DEFAULT_maxValue); + minValue = a.getInt(R.styleable.NumberPickerPreference_minValue, DEFAULT_minValue); + } finally { + a.recycle(); + } + + setDialogLayoutResource(R.layout.numberpicker_dialog); + setPositiveButtonText(android.R.string.ok); + setNegativeButtonText(android.R.string.cancel); + + setDialogIcon(null); + + } + + public int getValue() { + return currentValue; + } + + public void setValue(int value) { + currentValue = value; + persistInt(currentValue); + setSummary(String.format(defaultSummary, getValue())); + } + + @Override + protected Object onGetDefaultValue(TypedArray a, int index) { + return a.getInt(index, DEFAULT_value); + } + + @Override + protected void onSetInitialValue(boolean restorePersistedValue, Object defaultValue) { + setValue(restorePersistedValue ? getPersistedInt(currentValue) : (Integer) defaultValue); + } + + public static class NumberPickerPreferenceDialogFragmentCompat + extends PreferenceDialogFragmentCompat { + private static final String SAVE_STATE_VALUE = "NumberPickerPreferenceDialogFragment.value"; + private CustomNumberPicker picker; + private int currentValue = 1; + + public NumberPickerPreferenceDialogFragmentCompat() { + } + + public static NumberPickerPreferenceDialogFragmentCompat newInstance(String key) { + NumberPickerPreferenceDialogFragmentCompat fragment = + new NumberPickerPreferenceDialogFragmentCompat(); + Bundle b = new Bundle(1); + b.putString(ARG_KEY, key); + fragment.setArguments(b); + return fragment; + } + + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + if (savedInstanceState == null) { + currentValue = getNumberPickerPreference().getValue(); + } else { + currentValue = savedInstanceState.getInt(SAVE_STATE_VALUE); + } + } + + public void onSaveInstanceState(@NonNull Bundle outState) { + outState.putInt(SAVE_STATE_VALUE, currentValue); + } + + private NumberPickerPreference getNumberPickerPreference() { + return (NumberPickerPreference) this.getPreference(); + } + + @Override + protected void onBindDialogView(View view) { + super.onBindDialogView(view); + picker = (CustomNumberPicker) view.findViewById(R.id.numpicker_pref); + picker.setMaxValue(getNumberPickerPreference().maxValue); + picker.setMinValue(getNumberPickerPreference().minValue); + picker.setValue(currentValue); + } + + @Override + public void onDialogClosed(boolean b) { + if (b) { + int value = picker.getValue(); + if(getPreference().callChangeListener(value)) { + getNumberPickerPreference().setValue(value); + } + } + } + } +} |