19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/* 29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright (C) 2007 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 199b4742cf25c2cd7e10d87554c1e8a60c6702edaaAmith Yamasaniimport android.app.Dialog; 209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.Context; 219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.res.TypedArray; 229b4742cf25c2cd7e10d87554c1e8a60c6702edaaAmith Yamasaniimport android.os.Parcel; 239b4742cf25c2cd7e10d87554c1e8a60c6702edaaAmith Yamasaniimport android.os.Parcelable; 249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.util.AttributeSet; 2569f593ccb7414ee98991b1da1a4bfbd9951e3570Marco Nelissenimport android.view.KeyEvent; 269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.view.View; 279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.widget.SeekBar; 289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 295c3188e75e33c8edaf18af71fa681cd7759aee87Alan Viveretteimport com.android.internal.R; 305c3188e75e33c8edaf18af71fa681cd7759aee87Alan Viverette 319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/** 329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @hide 339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 34014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reckpublic class VolumePreference extends SeekBarDialogPreference implements 3574a2e06d831432f27ebd17cf6f1d0086356e7ee0John Spurlock PreferenceManager.OnActivityStopListener, View.OnKeyListener, SeekBarVolumizer.Callback { 369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private int mStreamType; 379b4742cf25c2cd7e10d87554c1e8a60c6702edaaAmith Yamasani 389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** May be null if the dialog isn't visible. */ 399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private SeekBarVolumizer mSeekBarVolumizer; 40014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reck 41617feb99a06e7ffb3894e86a286bf30e085f321aAlan Viverette public VolumePreference( 42617feb99a06e7ffb3894e86a286bf30e085f321aAlan Viverette Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { 43617feb99a06e7ffb3894e86a286bf30e085f321aAlan Viverette super(context, attrs, defStyleAttr, defStyleRes); 44014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reck 45617feb99a06e7ffb3894e86a286bf30e085f321aAlan Viverette final TypedArray a = context.obtainStyledAttributes(attrs, 465c3188e75e33c8edaf18af71fa681cd7759aee87Alan Viverette R.styleable.VolumePreference, defStyleAttr, defStyleRes); 479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mStreamType = a.getInt(android.R.styleable.VolumePreference_streamType, 0); 48998127c8049f22cb6f74483f11d693bfd7c59511Amith Yamasani a.recycle(); 499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 509b4742cf25c2cd7e10d87554c1e8a60c6702edaaAmith Yamasani 51617feb99a06e7ffb3894e86a286bf30e085f321aAlan Viverette public VolumePreference(Context context, AttributeSet attrs, int defStyleAttr) { 52617feb99a06e7ffb3894e86a286bf30e085f321aAlan Viverette this(context, attrs, defStyleAttr, 0); 53617feb99a06e7ffb3894e86a286bf30e085f321aAlan Viverette } 54617feb99a06e7ffb3894e86a286bf30e085f321aAlan Viverette 55617feb99a06e7ffb3894e86a286bf30e085f321aAlan Viverette public VolumePreference(Context context, AttributeSet attrs) { 565c3188e75e33c8edaf18af71fa681cd7759aee87Alan Viverette this(context, attrs, R.attr.seekBarDialogPreferenceStyle); 575c3188e75e33c8edaf18af71fa681cd7759aee87Alan Viverette } 585c3188e75e33c8edaf18af71fa681cd7759aee87Alan Viverette 595c3188e75e33c8edaf18af71fa681cd7759aee87Alan Viverette public VolumePreference(Context context) { 605c3188e75e33c8edaf18af71fa681cd7759aee87Alan Viverette this(context, null); 61617feb99a06e7ffb3894e86a286bf30e085f321aAlan Viverette } 62617feb99a06e7ffb3894e86a286bf30e085f321aAlan Viverette 639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setStreamType(int streamType) { 649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mStreamType = streamType; 659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project protected void onBindDialogView(View view) { 699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project super.onBindDialogView(view); 70014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reck 715c3188e75e33c8edaf18af71fa681cd7759aee87Alan Viverette final SeekBar seekBar = (SeekBar) view.findViewById(R.id.seekbar); 7295caba127051845ff1e26d7e64909db89408e8e7John Spurlock mSeekBarVolumizer = new SeekBarVolumizer(getContext(), mStreamType, null, this); 730e588ea8e1746f3335b2b5c8a51fdd9a96167b59John Spurlock mSeekBarVolumizer.start(); 7495caba127051845ff1e26d7e64909db89408e8e7John Spurlock mSeekBarVolumizer.setSeekBar(seekBar); 759b4742cf25c2cd7e10d87554c1e8a60c6702edaaAmith Yamasani 769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project getPreferenceManager().registerOnActivityStopListener(this); 7769f593ccb7414ee98991b1da1a4bfbd9951e3570Marco Nelissen 7869f593ccb7414ee98991b1da1a4bfbd9951e3570Marco Nelissen // grab focus and key events so that pressing the volume buttons in the 7969f593ccb7414ee98991b1da1a4bfbd9951e3570Marco Nelissen // dialog doesn't also show the normal volume adjust toast. 8069f593ccb7414ee98991b1da1a4bfbd9951e3570Marco Nelissen view.setOnKeyListener(this); 8169f593ccb7414ee98991b1da1a4bfbd9951e3570Marco Nelissen view.setFocusableInTouchMode(true); 8269f593ccb7414ee98991b1da1a4bfbd9951e3570Marco Nelissen view.requestFocus(); 8369f593ccb7414ee98991b1da1a4bfbd9951e3570Marco Nelissen } 8469f593ccb7414ee98991b1da1a4bfbd9951e3570Marco Nelissen 8569f593ccb7414ee98991b1da1a4bfbd9951e3570Marco Nelissen public boolean onKey(View v, int keyCode, KeyEvent event) { 866ff5906981fac2aa67c8c1f0df151b536e80ccafAmith Yamasani // If key arrives immediately after the activity has been cleaned up. 876ff5906981fac2aa67c8c1f0df151b536e80ccafAmith Yamasani if (mSeekBarVolumizer == null) return true; 8869f593ccb7414ee98991b1da1a4bfbd9951e3570Marco Nelissen boolean isdown = (event.getAction() == KeyEvent.ACTION_DOWN); 8969f593ccb7414ee98991b1da1a4bfbd9951e3570Marco Nelissen switch (keyCode) { 9069f593ccb7414ee98991b1da1a4bfbd9951e3570Marco Nelissen case KeyEvent.KEYCODE_VOLUME_DOWN: 9169f593ccb7414ee98991b1da1a4bfbd9951e3570Marco Nelissen if (isdown) { 9269f593ccb7414ee98991b1da1a4bfbd9951e3570Marco Nelissen mSeekBarVolumizer.changeVolumeBy(-1); 9369f593ccb7414ee98991b1da1a4bfbd9951e3570Marco Nelissen } 9469f593ccb7414ee98991b1da1a4bfbd9951e3570Marco Nelissen return true; 9569f593ccb7414ee98991b1da1a4bfbd9951e3570Marco Nelissen case KeyEvent.KEYCODE_VOLUME_UP: 9669f593ccb7414ee98991b1da1a4bfbd9951e3570Marco Nelissen if (isdown) { 9769f593ccb7414ee98991b1da1a4bfbd9951e3570Marco Nelissen mSeekBarVolumizer.changeVolumeBy(1); 9869f593ccb7414ee98991b1da1a4bfbd9951e3570Marco Nelissen } 9969f593ccb7414ee98991b1da1a4bfbd9951e3570Marco Nelissen return true; 100b0418da0e7594a8c2164a46985c5f1993632e010Jeff Brown case KeyEvent.KEYCODE_VOLUME_MUTE: 101b0418da0e7594a8c2164a46985c5f1993632e010Jeff Brown if (isdown) { 102b0418da0e7594a8c2164a46985c5f1993632e010Jeff Brown mSeekBarVolumizer.muteVolume(); 103b0418da0e7594a8c2164a46985c5f1993632e010Jeff Brown } 104b0418da0e7594a8c2164a46985c5f1993632e010Jeff Brown return true; 10569f593ccb7414ee98991b1da1a4bfbd9951e3570Marco Nelissen default: 10669f593ccb7414ee98991b1da1a4bfbd9951e3570Marco Nelissen return false; 10769f593ccb7414ee98991b1da1a4bfbd9951e3570Marco Nelissen } 1089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 1119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project protected void onDialogClosed(boolean positiveResult) { 1129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project super.onDialogClosed(positiveResult); 113014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reck 1149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (!positiveResult && mSeekBarVolumizer != null) { 1159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mSeekBarVolumizer.revertVolume(); 1169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1179b4742cf25c2cd7e10d87554c1e8a60c6702edaaAmith Yamasani 1189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project cleanup(); 1199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void onActivityStop() { 122a458868fd432d4b106f2beddec8bdb2a65808fdbSamuel Asteberg if (mSeekBarVolumizer != null) { 123735f9ebc188e1cb225533e1f5f9ef925d1f0b20eJohn Spurlock mSeekBarVolumizer.stopSample(); 124a458868fd432d4b106f2beddec8bdb2a65808fdbSamuel Asteberg } 1259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Do clean up. This can be called multiple times! 1299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private void cleanup() { 1319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project getPreferenceManager().unregisterOnActivityStopListener(this); 1329b4742cf25c2cd7e10d87554c1e8a60c6702edaaAmith Yamasani 1339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mSeekBarVolumizer != null) { 1345c3188e75e33c8edaf18af71fa681cd7759aee87Alan Viverette final Dialog dialog = getDialog(); 1359b4742cf25c2cd7e10d87554c1e8a60c6702edaaAmith Yamasani if (dialog != null && dialog.isShowing()) { 1365c3188e75e33c8edaf18af71fa681cd7759aee87Alan Viverette final View view = dialog.getWindow().getDecorView().findViewById(R.id.seekbar); 1375c3188e75e33c8edaf18af71fa681cd7759aee87Alan Viverette if (view != null) { 1385c3188e75e33c8edaf18af71fa681cd7759aee87Alan Viverette view.setOnKeyListener(null); 1395c3188e75e33c8edaf18af71fa681cd7759aee87Alan Viverette } 1405c3188e75e33c8edaf18af71fa681cd7759aee87Alan Viverette 1419b4742cf25c2cd7e10d87554c1e8a60c6702edaaAmith Yamasani // Stopped while dialog was showing, revert changes 1429b4742cf25c2cd7e10d87554c1e8a60c6702edaaAmith Yamasani mSeekBarVolumizer.revertVolume(); 1439b4742cf25c2cd7e10d87554c1e8a60c6702edaaAmith Yamasani } 1445c3188e75e33c8edaf18af71fa681cd7759aee87Alan Viverette 1459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mSeekBarVolumizer.stop(); 1469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mSeekBarVolumizer = null; 1479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1489b4742cf25c2cd7e10d87554c1e8a60c6702edaaAmith Yamasani 1499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1509b4742cf25c2cd7e10d87554c1e8a60c6702edaaAmith Yamasani 15174a2e06d831432f27ebd17cf6f1d0086356e7ee0John Spurlock @Override 15274a2e06d831432f27ebd17cf6f1d0086356e7ee0John Spurlock public void onSampleStarting(SeekBarVolumizer volumizer) { 1539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mSeekBarVolumizer != null && volumizer != mSeekBarVolumizer) { 1549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mSeekBarVolumizer.stopSample(); 1559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1579b4742cf25c2cd7e10d87554c1e8a60c6702edaaAmith Yamasani 1589b4742cf25c2cd7e10d87554c1e8a60c6702edaaAmith Yamasani @Override 159bcc1087af40a0e1bb35dbe8a39c830ecdea8280bJohn Spurlock public void onProgressChanged(SeekBar seekBar, int progress, boolean fromTouch) { 160bcc1087af40a0e1bb35dbe8a39c830ecdea8280bJohn Spurlock // noop 161bcc1087af40a0e1bb35dbe8a39c830ecdea8280bJohn Spurlock } 162bcc1087af40a0e1bb35dbe8a39c830ecdea8280bJohn Spurlock 163bcc1087af40a0e1bb35dbe8a39c830ecdea8280bJohn Spurlock @Override 16496d4a9ec394975818b073b537ccb6220ef0949baJohn Spurlock public void onMuted(boolean muted, boolean zenMuted) { 165bcc1087af40a0e1bb35dbe8a39c830ecdea8280bJohn Spurlock // noop 166bcc1087af40a0e1bb35dbe8a39c830ecdea8280bJohn Spurlock } 167bcc1087af40a0e1bb35dbe8a39c830ecdea8280bJohn Spurlock 168bcc1087af40a0e1bb35dbe8a39c830ecdea8280bJohn Spurlock @Override 1699b4742cf25c2cd7e10d87554c1e8a60c6702edaaAmith Yamasani protected Parcelable onSaveInstanceState() { 1709b4742cf25c2cd7e10d87554c1e8a60c6702edaaAmith Yamasani final Parcelable superState = super.onSaveInstanceState(); 1719b4742cf25c2cd7e10d87554c1e8a60c6702edaaAmith Yamasani if (isPersistent()) { 1729b4742cf25c2cd7e10d87554c1e8a60c6702edaaAmith Yamasani // No need to save instance state since it's persistent 1739b4742cf25c2cd7e10d87554c1e8a60c6702edaaAmith Yamasani return superState; 1749b4742cf25c2cd7e10d87554c1e8a60c6702edaaAmith Yamasani } 1759b4742cf25c2cd7e10d87554c1e8a60c6702edaaAmith Yamasani 1769b4742cf25c2cd7e10d87554c1e8a60c6702edaaAmith Yamasani final SavedState myState = new SavedState(superState); 1779b4742cf25c2cd7e10d87554c1e8a60c6702edaaAmith Yamasani if (mSeekBarVolumizer != null) { 1789b4742cf25c2cd7e10d87554c1e8a60c6702edaaAmith Yamasani mSeekBarVolumizer.onSaveInstanceState(myState.getVolumeStore()); 1799b4742cf25c2cd7e10d87554c1e8a60c6702edaaAmith Yamasani } 1809b4742cf25c2cd7e10d87554c1e8a60c6702edaaAmith Yamasani return myState; 1819b4742cf25c2cd7e10d87554c1e8a60c6702edaaAmith Yamasani } 1829b4742cf25c2cd7e10d87554c1e8a60c6702edaaAmith Yamasani 1839b4742cf25c2cd7e10d87554c1e8a60c6702edaaAmith Yamasani @Override 1849b4742cf25c2cd7e10d87554c1e8a60c6702edaaAmith Yamasani protected void onRestoreInstanceState(Parcelable state) { 1859b4742cf25c2cd7e10d87554c1e8a60c6702edaaAmith Yamasani if (state == null || !state.getClass().equals(SavedState.class)) { 1869b4742cf25c2cd7e10d87554c1e8a60c6702edaaAmith Yamasani // Didn't save state for us in onSaveInstanceState 1879b4742cf25c2cd7e10d87554c1e8a60c6702edaaAmith Yamasani super.onRestoreInstanceState(state); 1889b4742cf25c2cd7e10d87554c1e8a60c6702edaaAmith Yamasani return; 1899b4742cf25c2cd7e10d87554c1e8a60c6702edaaAmith Yamasani } 1909b4742cf25c2cd7e10d87554c1e8a60c6702edaaAmith Yamasani 1919b4742cf25c2cd7e10d87554c1e8a60c6702edaaAmith Yamasani SavedState myState = (SavedState) state; 1929b4742cf25c2cd7e10d87554c1e8a60c6702edaaAmith Yamasani super.onRestoreInstanceState(myState.getSuperState()); 1939b4742cf25c2cd7e10d87554c1e8a60c6702edaaAmith Yamasani if (mSeekBarVolumizer != null) { 1949b4742cf25c2cd7e10d87554c1e8a60c6702edaaAmith Yamasani mSeekBarVolumizer.onRestoreInstanceState(myState.getVolumeStore()); 1959b4742cf25c2cd7e10d87554c1e8a60c6702edaaAmith Yamasani } 1969b4742cf25c2cd7e10d87554c1e8a60c6702edaaAmith Yamasani } 1979b4742cf25c2cd7e10d87554c1e8a60c6702edaaAmith Yamasani 1989b4742cf25c2cd7e10d87554c1e8a60c6702edaaAmith Yamasani public static class VolumeStore { 1999b4742cf25c2cd7e10d87554c1e8a60c6702edaaAmith Yamasani public int volume = -1; 2009b4742cf25c2cd7e10d87554c1e8a60c6702edaaAmith Yamasani public int originalVolume = -1; 2019b4742cf25c2cd7e10d87554c1e8a60c6702edaaAmith Yamasani } 2029b4742cf25c2cd7e10d87554c1e8a60c6702edaaAmith Yamasani 2039b4742cf25c2cd7e10d87554c1e8a60c6702edaaAmith Yamasani private static class SavedState extends BaseSavedState { 2049b4742cf25c2cd7e10d87554c1e8a60c6702edaaAmith Yamasani VolumeStore mVolumeStore = new VolumeStore(); 2059b4742cf25c2cd7e10d87554c1e8a60c6702edaaAmith Yamasani 2069b4742cf25c2cd7e10d87554c1e8a60c6702edaaAmith Yamasani public SavedState(Parcel source) { 2079b4742cf25c2cd7e10d87554c1e8a60c6702edaaAmith Yamasani super(source); 2089b4742cf25c2cd7e10d87554c1e8a60c6702edaaAmith Yamasani mVolumeStore.volume = source.readInt(); 2099b4742cf25c2cd7e10d87554c1e8a60c6702edaaAmith Yamasani mVolumeStore.originalVolume = source.readInt(); 2109b4742cf25c2cd7e10d87554c1e8a60c6702edaaAmith Yamasani } 2119b4742cf25c2cd7e10d87554c1e8a60c6702edaaAmith Yamasani 2129b4742cf25c2cd7e10d87554c1e8a60c6702edaaAmith Yamasani @Override 2139b4742cf25c2cd7e10d87554c1e8a60c6702edaaAmith Yamasani public void writeToParcel(Parcel dest, int flags) { 2149b4742cf25c2cd7e10d87554c1e8a60c6702edaaAmith Yamasani super.writeToParcel(dest, flags); 2159b4742cf25c2cd7e10d87554c1e8a60c6702edaaAmith Yamasani dest.writeInt(mVolumeStore.volume); 2169b4742cf25c2cd7e10d87554c1e8a60c6702edaaAmith Yamasani dest.writeInt(mVolumeStore.originalVolume); 2179b4742cf25c2cd7e10d87554c1e8a60c6702edaaAmith Yamasani } 2189b4742cf25c2cd7e10d87554c1e8a60c6702edaaAmith Yamasani 2199b4742cf25c2cd7e10d87554c1e8a60c6702edaaAmith Yamasani VolumeStore getVolumeStore() { 2209b4742cf25c2cd7e10d87554c1e8a60c6702edaaAmith Yamasani return mVolumeStore; 2219b4742cf25c2cd7e10d87554c1e8a60c6702edaaAmith Yamasani } 2229b4742cf25c2cd7e10d87554c1e8a60c6702edaaAmith Yamasani 2239b4742cf25c2cd7e10d87554c1e8a60c6702edaaAmith Yamasani public SavedState(Parcelable superState) { 2249b4742cf25c2cd7e10d87554c1e8a60c6702edaaAmith Yamasani super(superState); 2259b4742cf25c2cd7e10d87554c1e8a60c6702edaaAmith Yamasani } 2269b4742cf25c2cd7e10d87554c1e8a60c6702edaaAmith Yamasani 2279b4742cf25c2cd7e10d87554c1e8a60c6702edaaAmith Yamasani public static final Parcelable.Creator<SavedState> CREATOR = 2289b4742cf25c2cd7e10d87554c1e8a60c6702edaaAmith Yamasani new Parcelable.Creator<SavedState>() { 2299b4742cf25c2cd7e10d87554c1e8a60c6702edaaAmith Yamasani public SavedState createFromParcel(Parcel in) { 2309b4742cf25c2cd7e10d87554c1e8a60c6702edaaAmith Yamasani return new SavedState(in); 2319b4742cf25c2cd7e10d87554c1e8a60c6702edaaAmith Yamasani } 2329b4742cf25c2cd7e10d87554c1e8a60c6702edaaAmith Yamasani 2339b4742cf25c2cd7e10d87554c1e8a60c6702edaaAmith Yamasani public SavedState[] newArray(int size) { 2349b4742cf25c2cd7e10d87554c1e8a60c6702edaaAmith Yamasani return new SavedState[size]; 2359b4742cf25c2cd7e10d87554c1e8a60c6702edaaAmith Yamasani } 2369b4742cf25c2cd7e10d87554c1e8a60c6702edaaAmith Yamasani }; 2379b4742cf25c2cd7e10d87554c1e8a60c6702edaaAmith Yamasani } 2389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 239