annotate XposedLibrary/src/de/robv/android/xposed/library/ui/ValueSeekBarPreference.java @ 0:3da8a7a621cd

Initial commit
author Brad Greco <brad@bgreco.net>
date Mon, 20 Jan 2014 22:56:13 -0600
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
1 /*
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
2 * Copyright (C) 2011 The Android Open Source Project
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
3 *
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
4 * Licensed under the Apache License, Version 2.0 (the "License");
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
5 * you may not use this file except in compliance with the License.
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
6 * You may obtain a copy of the License at
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
7 *
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
8 * http://www.apache.org/licenses/LICENSE-2.0
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
9 *
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
10 * Unless required by applicable law or agreed to in writing, software
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
11 * distributed under the License is distributed on an "AS IS" BASIS,
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
13 * See the License for the specific language governing permissions and
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
14 * limitations under the License.
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
15 */
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
16
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
17 package de.robv.android.xposed.library.ui;
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
18
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
19 import android.content.Context;
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
20 import android.content.res.TypedArray;
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
21 import android.os.Parcel;
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
22 import android.os.Parcelable;
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
23 import android.preference.Preference;
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
24 import android.util.AttributeSet;
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
25 import android.view.LayoutInflater;
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
26 import android.view.View;
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
27 import android.view.ViewGroup;
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
28 import android.widget.SeekBar;
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
29 import android.widget.SeekBar.OnSeekBarChangeListener;
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
30 import android.widget.TextView;
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
31 import de.robv.android.xposed.library.R;
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
32
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
33 public class ValueSeekBarPreference extends Preference implements OnSeekBarChangeListener {
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
34
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
35 private int mProgress;
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
36 private int mStep;
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
37 private int mMin;
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
38 private int mMax;
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
39 private String valueDisplayFormat;
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
40 private boolean mTrackingTouch;
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
41 private TextView tvValue;
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
42
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
43 public ValueSeekBarPreference(
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
44 Context context, AttributeSet attrs, int defStyle) {
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
45 super(context, attrs, defStyle);
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
46
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
47 if (attrs != null) {
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
48 setStep(attrs.getAttributeIntValue(null, "step", 1));
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
49 setMin(attrs.getAttributeIntValue(null, "min", 0));
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
50 setMax(attrs.getAttributeIntValue(null, "max", 100));
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
51 valueDisplayFormat = attrs.getAttributeValue(null, "displayFormat");
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
52 if (valueDisplayFormat == null)
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
53 valueDisplayFormat = "%d";
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
54 }
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
55 }
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
56
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
57 public ValueSeekBarPreference(Context context, AttributeSet attrs) {
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
58 this(context, attrs, android.R.attr.preferenceStyle);
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
59 }
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
60
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
61 public ValueSeekBarPreference(Context context) {
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
62 this(context, null);
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
63 }
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
64
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
65 @Override
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
66 protected View onCreateView(ViewGroup parent) {
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
67 ViewGroup originalView = (ViewGroup) super.onCreateView(parent);
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
68
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
69 final LayoutInflater layoutInflater =
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
70 (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
71
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
72 ViewGroup newlayout = (ViewGroup) layoutInflater.inflate(R.layout.preference_valueseekbar_extension, null);
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
73 newlayout.addView(originalView, 0);
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
74
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
75 tvValue = (TextView) newlayout.findViewById(R.id.valueseekbar_preference_value);
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
76
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
77 return newlayout;
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
78 }
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
79
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
80 @Override
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
81 protected void onBindView(View view) {
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
82 super.onBindView(view);
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
83 SeekBar seekBar = (SeekBar) view.findViewById(R.id.valueseekbar_preference_seekbar);
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
84 seekBar.setOnSeekBarChangeListener(this);
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
85 seekBar.setMax((mMax - mMin) / mStep);
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
86 seekBar.setProgress((mProgress - mMin) / mStep);
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
87 tvValue.setText(String.format(valueDisplayFormat, mProgress));
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
88 seekBar.setEnabled(isEnabled());
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
89 }
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
90
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
91 @Override
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
92 protected void onSetInitialValue(boolean restoreValue, Object defaultValue) {
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
93 setProgress(restoreValue ? getPersistedInt(mProgress)
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
94 : (Integer) defaultValue);
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
95 }
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
96
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
97 @Override
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
98 protected Object onGetDefaultValue(TypedArray a, int index) {
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
99 return a.getInt(index, 0);
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
100 }
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
101
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
102 public void setStep(int step) {
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
103 if (step != mStep) {
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
104 mStep = step;
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
105 notifyChanged();
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
106 }
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
107 }
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
108
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
109 public void setMin(int min) {
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
110 if (min != mMin) {
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
111 mMin = min;
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
112 notifyChanged();
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
113 }
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
114 }
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
115
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
116 public void setMax(int max) {
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
117 if (max != mMax) {
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
118 mMax = max;
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
119 notifyChanged();
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
120 }
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
121 }
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
122
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
123 public void setProgress(int progress) {
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
124 setProgress(progress, true);
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
125 }
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
126
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
127 private void setProgress(int progress, boolean notifyChanged) {
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
128 if (progress > mMax) {
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
129 progress = mMax;
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
130 }
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
131 if (progress < mMin) {
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
132 progress = mMin;
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
133 }
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
134 if (progress != mProgress) {
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
135 mProgress = progress;
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
136 persistInt(progress);
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
137 if (notifyChanged) {
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
138 notifyChanged();
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
139 }
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
140 }
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
141 }
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
142
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
143 public int getProgress() {
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
144 return mProgress;
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
145 }
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
146
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
147 /**
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
148 * Persist the seekBar's progress value if callChangeListener
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
149 * returns true, otherwise set the seekBar's progress to the stored value
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
150 */
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
151 void syncProgress(SeekBar seekBar) {
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
152 int progress = seekBar.getProgress() * mStep + mMin;
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
153 if (progress != mProgress) {
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
154 if (callChangeListener(progress)) {
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
155 setProgress(progress, false);
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
156 } else {
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
157 seekBar.setProgress((mProgress - mMin) / mStep);
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
158 }
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
159 }
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
160 }
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
161
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
162 @Override
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
163 public void onProgressChanged(
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
164 SeekBar seekBar, int progress, boolean fromUser) {
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
165 if (fromUser && !mTrackingTouch) {
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
166 syncProgress(seekBar);
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
167 }
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
168 tvValue.setText(String.format(valueDisplayFormat, progress * mStep + mMin));
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
169 }
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
170
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
171 @Override
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
172 public void onStartTrackingTouch(SeekBar seekBar) {
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
173 mTrackingTouch = true;
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
174 }
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
175
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
176 @Override
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
177 public void onStopTrackingTouch(SeekBar seekBar) {
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
178 mTrackingTouch = false;
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
179 if (seekBar.getProgress() * mStep + mMin != mProgress) {
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
180 syncProgress(seekBar);
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
181 }
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
182 }
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
183
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
184 @Override
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
185 protected Parcelable onSaveInstanceState() {
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
186 /*
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
187 * Suppose a client uses this preference type without persisting. We
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
188 * must save the instance state so it is able to, for example, survive
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
189 * orientation changes.
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
190 */
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
191
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
192 final Parcelable superState = super.onSaveInstanceState();
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
193 if (isPersistent()) {
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
194 // No need to save instance state since it's persistent
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
195 return superState;
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
196 }
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
197
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
198 // Save the instance state
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
199 final SavedState myState = new SavedState(superState);
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
200 myState.progress = mProgress;
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
201 myState.step = mStep;
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
202 myState.min = mMin;
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
203 myState.max = mMax;
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
204 return myState;
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
205 }
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
206
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
207 @Override
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
208 protected void onRestoreInstanceState(Parcelable state) {
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
209 if (!state.getClass().equals(SavedState.class)) {
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
210 // Didn't save state for us in onSaveInstanceState
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
211 super.onRestoreInstanceState(state);
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
212 return;
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
213 }
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
214
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
215 // Restore the instance state
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
216 SavedState myState = (SavedState) state;
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
217 super.onRestoreInstanceState(myState.getSuperState());
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
218 mProgress = myState.progress;
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
219 mStep = myState.step;
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
220 mMin = myState.min;
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
221 mMax = myState.max;
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
222 notifyChanged();
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
223 }
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
224
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
225 /**
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
226 * SavedState, a subclass of {@link BaseSavedState}, will store the state
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
227 * of MyPreference, a subclass of Preference.
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
228 * <p>
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
229 * It is important to always call through to super methods.
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
230 */
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
231 private static class SavedState extends BaseSavedState {
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
232 int progress;
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
233 int step;
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
234 int min;
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
235 int max;
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
236
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
237 public SavedState(Parcel source) {
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
238 super(source);
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
239
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
240 // Restore the click counter
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
241 progress = source.readInt();
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
242 step = source.readInt();
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
243 min = source.readInt();
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
244 max = source.readInt();
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
245 }
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
246
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
247 @Override
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
248 public void writeToParcel(Parcel dest, int flags) {
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
249 super.writeToParcel(dest, flags);
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
250
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
251 dest.writeInt(progress);
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
252 dest.writeInt(step);
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
253 dest.writeInt(min);
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
254 dest.writeInt(max);
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
255 }
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
256
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
257 public SavedState(Parcelable superState) {
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
258 super(superState);
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
259 }
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
260
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
261 @SuppressWarnings("unused")
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
262 public static final Parcelable.Creator<SavedState> CREATOR =
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
263 new Parcelable.Creator<SavedState>() {
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
264 public SavedState createFromParcel(Parcel in) {
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
265 return new SavedState(in);
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
266 }
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
267
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
268 public SavedState[] newArray(int size) {
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
269 return new SavedState[size];
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
270 }
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
271 };
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
272 }
3da8a7a621cd Initial commit
Brad Greco <brad@bgreco.net>
parents:
diff changeset
273 }