19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/*
2014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reck * Copyright (C) 2011 The Android Open Source Project
39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License");
59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * you may not use this file except in compliance with the License.
69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * You may obtain a copy of the License at
79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *      http://www.apache.org/licenses/LICENSE-2.0
99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unless required by applicable law or agreed to in writing, software
119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS,
129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See the License for the specific language governing permissions and
149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * limitations under the License.
159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */
169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpackage android.preference;
189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.Context;
20014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reckimport android.content.res.TypedArray;
21014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reckimport android.os.Parcel;
22014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reckimport android.os.Parcelable;
239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.util.AttributeSet;
24014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reckimport android.view.KeyEvent;
259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.view.View;
269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.widget.SeekBar;
27014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reckimport android.widget.SeekBar.OnSeekBarChangeListener;
289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/**
309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @hide
319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */
32014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reckpublic class SeekBarPreference extends Preference
33014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reck        implements OnSeekBarChangeListener {
344c8aafe300fd61527a4cb89669e804b843f21257Jim Miller
35014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reck    private int mProgress;
36014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reck    private int mMax;
37014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reck    private boolean mTrackingTouch;
38014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reck
39014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reck    public SeekBarPreference(
40617feb99a06e7ffb3894e86a286bf30e085f321aAlan Viverette            Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
41617feb99a06e7ffb3894e86a286bf30e085f321aAlan Viverette        super(context, attrs, defStyleAttr, defStyleRes);
42617feb99a06e7ffb3894e86a286bf30e085f321aAlan Viverette
4319ae4ca5a7d84a8a79feba560b024120b56b55b8Fabrice Di Meglio        TypedArray a = context.obtainStyledAttributes(
44617feb99a06e7ffb3894e86a286bf30e085f321aAlan Viverette                attrs, com.android.internal.R.styleable.ProgressBar, defStyleAttr, defStyleRes);
45014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reck        setMax(a.getInt(com.android.internal.R.styleable.ProgressBar_max, mMax));
46014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reck        a.recycle();
4719ae4ca5a7d84a8a79feba560b024120b56b55b8Fabrice Di Meglio
4819ae4ca5a7d84a8a79feba560b024120b56b55b8Fabrice Di Meglio        a = context.obtainStyledAttributes(attrs,
4919ae4ca5a7d84a8a79feba560b024120b56b55b8Fabrice Di Meglio                com.android.internal.R.styleable.SeekBarPreference, defStyleAttr, defStyleRes);
5019ae4ca5a7d84a8a79feba560b024120b56b55b8Fabrice Di Meglio        final int layoutResId = a.getResourceId(
5119ae4ca5a7d84a8a79feba560b024120b56b55b8Fabrice Di Meglio                com.android.internal.R.styleable.SeekBarPreference_layout,
5219ae4ca5a7d84a8a79feba560b024120b56b55b8Fabrice Di Meglio                com.android.internal.R.layout.preference_widget_seekbar);
5319ae4ca5a7d84a8a79feba560b024120b56b55b8Fabrice Di Meglio        a.recycle();
5419ae4ca5a7d84a8a79feba560b024120b56b55b8Fabrice Di Meglio
5519ae4ca5a7d84a8a79feba560b024120b56b55b8Fabrice Di Meglio        setLayoutResource(layoutResId);
56014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reck    }
579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
58617feb99a06e7ffb3894e86a286bf30e085f321aAlan Viverette    public SeekBarPreference(Context context, AttributeSet attrs, int defStyleAttr) {
59617feb99a06e7ffb3894e86a286bf30e085f321aAlan Viverette        this(context, attrs, defStyleAttr, 0);
60617feb99a06e7ffb3894e86a286bf30e085f321aAlan Viverette    }
61617feb99a06e7ffb3894e86a286bf30e085f321aAlan Viverette
629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public SeekBarPreference(Context context, AttributeSet attrs) {
6319ae4ca5a7d84a8a79feba560b024120b56b55b8Fabrice Di Meglio        this(context, attrs, com.android.internal.R.attr.seekBarPreferenceStyle);
64014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reck    }
65014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reck
66014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reck    public SeekBarPreference(Context context) {
67014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reck        this(context, null);
68014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reck    }
69014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reck
70014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reck    @Override
71014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reck    protected void onBindView(View view) {
72014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reck        super.onBindView(view);
73014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reck        SeekBar seekBar = (SeekBar) view.findViewById(
74014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reck                com.android.internal.R.id.seekbar);
75014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reck        seekBar.setOnSeekBarChangeListener(this);
76014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reck        seekBar.setMax(mMax);
77014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reck        seekBar.setProgress(mProgress);
78014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reck        seekBar.setEnabled(isEnabled());
79014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reck    }
80014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reck
81014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reck    @Override
82014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reck    public CharSequence getSummary() {
83014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reck        return null;
84014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reck    }
85014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reck
86014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reck    @Override
87014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reck    protected void onSetInitialValue(boolean restoreValue, Object defaultValue) {
88014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reck        setProgress(restoreValue ? getPersistedInt(mProgress)
89014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reck                : (Integer) defaultValue);
90014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reck    }
91014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reck
92014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reck    @Override
93595d2bdc16885e4e182527204e62c4e375a3e53aJohn Reck    protected Object onGetDefaultValue(TypedArray a, int index) {
94595d2bdc16885e4e182527204e62c4e375a3e53aJohn Reck        return a.getInt(index, 0);
95595d2bdc16885e4e182527204e62c4e375a3e53aJohn Reck    }
96595d2bdc16885e4e182527204e62c4e375a3e53aJohn Reck
97595d2bdc16885e4e182527204e62c4e375a3e53aJohn Reck    @Override
98014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reck    public boolean onKey(View v, int keyCode, KeyEvent event) {
99014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reck        if (event.getAction() != KeyEvent.ACTION_UP) {
100014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reck            if (keyCode == KeyEvent.KEYCODE_PLUS
101014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reck                    || keyCode == KeyEvent.KEYCODE_EQUALS) {
102014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reck                setProgress(getProgress() + 1);
103014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reck                return true;
104014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reck            }
105014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reck            if (keyCode == KeyEvent.KEYCODE_MINUS) {
106014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reck                setProgress(getProgress() - 1);
107014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reck                return true;
108014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reck            }
109014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reck        }
110014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reck        return false;
111014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reck    }
112014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reck
113014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reck    public void setMax(int max) {
114014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reck        if (max != mMax) {
115014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reck            mMax = max;
116014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reck            notifyChanged();
117014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reck        }
118014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reck    }
119014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reck
120014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reck    public void setProgress(int progress) {
121014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reck        setProgress(progress, true);
122014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reck    }
123014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reck
124014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reck    private void setProgress(int progress, boolean notifyChanged) {
125014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reck        if (progress > mMax) {
126014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reck            progress = mMax;
127014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reck        }
128014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reck        if (progress < 0) {
129014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reck            progress = 0;
130014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reck        }
131014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reck        if (progress != mProgress) {
132014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reck            mProgress = progress;
133014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reck            persistInt(progress);
134014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reck            if (notifyChanged) {
135014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reck                notifyChanged();
136014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reck            }
137014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reck        }
138014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reck    }
1399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
140014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reck    public int getProgress() {
141014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reck        return mProgress;
142014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reck    }
143014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reck
144014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reck    /**
145014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reck     * Persist the seekBar's progress value if callChangeListener
146014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reck     * returns true, otherwise set the seekBar's progress to the stored value
147014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reck     */
148014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reck    void syncProgress(SeekBar seekBar) {
149014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reck        int progress = seekBar.getProgress();
150014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reck        if (progress != mProgress) {
151014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reck            if (callChangeListener(progress)) {
152014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reck                setProgress(progress, false);
153014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reck            } else {
154014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reck                seekBar.setProgress(mProgress);
155014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reck            }
156014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reck        }
157014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reck    }
158014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reck
159014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reck    @Override
160014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reck    public void onProgressChanged(
161014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reck            SeekBar seekBar, int progress, boolean fromUser) {
162014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reck        if (fromUser && !mTrackingTouch) {
163014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reck            syncProgress(seekBar);
164014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reck        }
165014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reck    }
1664c8aafe300fd61527a4cb89669e804b843f21257Jim Miller
167014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reck    @Override
168014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reck    public void onStartTrackingTouch(SeekBar seekBar) {
169014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reck        mTrackingTouch = true;
1709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
172014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reck    @Override
173014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reck    public void onStopTrackingTouch(SeekBar seekBar) {
174014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reck        mTrackingTouch = false;
175014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reck        if (seekBar.getProgress() != mProgress) {
176014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reck            syncProgress(seekBar);
177014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reck        }
178014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reck    }
179014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reck
180014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reck    @Override
181014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reck    protected Parcelable onSaveInstanceState() {
182014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reck        /*
183014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reck         * Suppose a client uses this preference type without persisting. We
184014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reck         * must save the instance state so it is able to, for example, survive
185014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reck         * orientation changes.
186014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reck         */
187014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reck
188014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reck        final Parcelable superState = super.onSaveInstanceState();
189014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reck        if (isPersistent()) {
190014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reck            // No need to save instance state since it's persistent
191014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reck            return superState;
192014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reck        }
193014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reck
194014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reck        // Save the instance state
195014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reck        final SavedState myState = new SavedState(superState);
196014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reck        myState.progress = mProgress;
197014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reck        myState.max = mMax;
198014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reck        return myState;
1994c8aafe300fd61527a4cb89669e804b843f21257Jim Miller    }
2004c8aafe300fd61527a4cb89669e804b843f21257Jim Miller
2019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    @Override
202014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reck    protected void onRestoreInstanceState(Parcelable state) {
203014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reck        if (!state.getClass().equals(SavedState.class)) {
204014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reck            // Didn't save state for us in onSaveInstanceState
205014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reck            super.onRestoreInstanceState(state);
206014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reck            return;
2079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
208014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reck
209014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reck        // Restore the instance state
210014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reck        SavedState myState = (SavedState) state;
211014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reck        super.onRestoreInstanceState(myState.getSuperState());
212014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reck        mProgress = myState.progress;
213014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reck        mMax = myState.max;
214014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reck        notifyChanged();
2159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
217014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reck    /**
218014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reck     * SavedState, a subclass of {@link BaseSavedState}, will store the state
219014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reck     * of MyPreference, a subclass of Preference.
220014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reck     * <p>
221014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reck     * It is important to always call through to super methods.
222014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reck     */
223014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reck    private static class SavedState extends BaseSavedState {
224014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reck        int progress;
225014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reck        int max;
226014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reck
227014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reck        public SavedState(Parcel source) {
228014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reck            super(source);
229014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reck
230014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reck            // Restore the click counter
231014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reck            progress = source.readInt();
232014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reck            max = source.readInt();
233014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reck        }
234014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reck
235014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reck        @Override
236014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reck        public void writeToParcel(Parcel dest, int flags) {
237014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reck            super.writeToParcel(dest, flags);
238014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reck
239014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reck            // Save the click counter
240014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reck            dest.writeInt(progress);
241014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reck            dest.writeInt(max);
242014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reck        }
243014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reck
244014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reck        public SavedState(Parcelable superState) {
245014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reck            super(superState);
246014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reck        }
247014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reck
248014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reck        @SuppressWarnings("unused")
249014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reck        public static final Parcelable.Creator<SavedState> CREATOR =
250014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reck                new Parcelable.Creator<SavedState>() {
251014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reck            public SavedState createFromParcel(Parcel in) {
252014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reck                return new SavedState(in);
253014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reck            }
254014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reck
255014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reck            public SavedState[] newArray(int size) {
256014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reck                return new SavedState[size];
257014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reck            }
258014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reck        };
2599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
261