VolumePreference.java revision bcc1087af40a0e1bb35dbe8a39c830ecdea8280b
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 299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/** 309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @hide 319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 32014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reckpublic class VolumePreference extends SeekBarDialogPreference implements 3374a2e06d831432f27ebd17cf6f1d0086356e7ee0John Spurlock PreferenceManager.OnActivityStopListener, View.OnKeyListener, SeekBarVolumizer.Callback { 349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3574a2e06d831432f27ebd17cf6f1d0086356e7ee0John Spurlock static final String TAG = "VolumePreference"; 36014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reck 379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private int mStreamType; 389b4742cf25c2cd7e10d87554c1e8a60c6702edaaAmith Yamasani 399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** May be null if the dialog isn't visible. */ 409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private SeekBarVolumizer mSeekBarVolumizer; 41014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reck 42617feb99a06e7ffb3894e86a286bf30e085f321aAlan Viverette public VolumePreference( 43617feb99a06e7ffb3894e86a286bf30e085f321aAlan Viverette Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { 44617feb99a06e7ffb3894e86a286bf30e085f321aAlan Viverette super(context, attrs, defStyleAttr, defStyleRes); 45014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reck 46617feb99a06e7ffb3894e86a286bf30e085f321aAlan Viverette final TypedArray a = context.obtainStyledAttributes(attrs, 47617feb99a06e7ffb3894e86a286bf30e085f321aAlan Viverette com.android.internal.R.styleable.VolumePreference, defStyleAttr, defStyleRes); 489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mStreamType = a.getInt(android.R.styleable.VolumePreference_streamType, 0); 49998127c8049f22cb6f74483f11d693bfd7c59511Amith Yamasani a.recycle(); 509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 519b4742cf25c2cd7e10d87554c1e8a60c6702edaaAmith Yamasani 52617feb99a06e7ffb3894e86a286bf30e085f321aAlan Viverette public VolumePreference(Context context, AttributeSet attrs, int defStyleAttr) { 53617feb99a06e7ffb3894e86a286bf30e085f321aAlan Viverette this(context, attrs, defStyleAttr, 0); 54617feb99a06e7ffb3894e86a286bf30e085f321aAlan Viverette } 55617feb99a06e7ffb3894e86a286bf30e085f321aAlan Viverette 56617feb99a06e7ffb3894e86a286bf30e085f321aAlan Viverette public VolumePreference(Context context, AttributeSet attrs) { 57fcb48b3ab94ab6f87b5e29f8d56a3939d4938129Alan Viverette this(context, attrs, com.android.internal.R.attr.dialogPreferenceStyle); 58617feb99a06e7ffb3894e86a286bf30e085f321aAlan Viverette } 59617feb99a06e7ffb3894e86a286bf30e085f321aAlan Viverette 609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setStreamType(int streamType) { 619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mStreamType = streamType; 629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project protected void onBindDialogView(View view) { 669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project super.onBindDialogView(view); 67014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reck 689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final SeekBar seekBar = (SeekBar) view.findViewById(com.android.internal.R.id.seekbar); 6995caba127051845ff1e26d7e64909db89408e8e7John Spurlock mSeekBarVolumizer = new SeekBarVolumizer(getContext(), mStreamType, null, this); 700e588ea8e1746f3335b2b5c8a51fdd9a96167b59John Spurlock mSeekBarVolumizer.start(); 7195caba127051845ff1e26d7e64909db89408e8e7John Spurlock mSeekBarVolumizer.setSeekBar(seekBar); 729b4742cf25c2cd7e10d87554c1e8a60c6702edaaAmith Yamasani 739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project getPreferenceManager().registerOnActivityStopListener(this); 7469f593ccb7414ee98991b1da1a4bfbd9951e3570Marco Nelissen 7569f593ccb7414ee98991b1da1a4bfbd9951e3570Marco Nelissen // grab focus and key events so that pressing the volume buttons in the 7669f593ccb7414ee98991b1da1a4bfbd9951e3570Marco Nelissen // dialog doesn't also show the normal volume adjust toast. 7769f593ccb7414ee98991b1da1a4bfbd9951e3570Marco Nelissen view.setOnKeyListener(this); 7869f593ccb7414ee98991b1da1a4bfbd9951e3570Marco Nelissen view.setFocusableInTouchMode(true); 7969f593ccb7414ee98991b1da1a4bfbd9951e3570Marco Nelissen view.requestFocus(); 8069f593ccb7414ee98991b1da1a4bfbd9951e3570Marco Nelissen } 8169f593ccb7414ee98991b1da1a4bfbd9951e3570Marco Nelissen 8269f593ccb7414ee98991b1da1a4bfbd9951e3570Marco Nelissen public boolean onKey(View v, int keyCode, KeyEvent event) { 836ff5906981fac2aa67c8c1f0df151b536e80ccafAmith Yamasani // If key arrives immediately after the activity has been cleaned up. 846ff5906981fac2aa67c8c1f0df151b536e80ccafAmith Yamasani if (mSeekBarVolumizer == null) return true; 8569f593ccb7414ee98991b1da1a4bfbd9951e3570Marco Nelissen boolean isdown = (event.getAction() == KeyEvent.ACTION_DOWN); 8669f593ccb7414ee98991b1da1a4bfbd9951e3570Marco Nelissen switch (keyCode) { 8769f593ccb7414ee98991b1da1a4bfbd9951e3570Marco Nelissen case KeyEvent.KEYCODE_VOLUME_DOWN: 8869f593ccb7414ee98991b1da1a4bfbd9951e3570Marco Nelissen if (isdown) { 8969f593ccb7414ee98991b1da1a4bfbd9951e3570Marco Nelissen mSeekBarVolumizer.changeVolumeBy(-1); 9069f593ccb7414ee98991b1da1a4bfbd9951e3570Marco Nelissen } 9169f593ccb7414ee98991b1da1a4bfbd9951e3570Marco Nelissen return true; 9269f593ccb7414ee98991b1da1a4bfbd9951e3570Marco Nelissen case KeyEvent.KEYCODE_VOLUME_UP: 9369f593ccb7414ee98991b1da1a4bfbd9951e3570Marco Nelissen if (isdown) { 9469f593ccb7414ee98991b1da1a4bfbd9951e3570Marco Nelissen mSeekBarVolumizer.changeVolumeBy(1); 9569f593ccb7414ee98991b1da1a4bfbd9951e3570Marco Nelissen } 9669f593ccb7414ee98991b1da1a4bfbd9951e3570Marco Nelissen return true; 97b0418da0e7594a8c2164a46985c5f1993632e010Jeff Brown case KeyEvent.KEYCODE_VOLUME_MUTE: 98b0418da0e7594a8c2164a46985c5f1993632e010Jeff Brown if (isdown) { 99b0418da0e7594a8c2164a46985c5f1993632e010Jeff Brown mSeekBarVolumizer.muteVolume(); 100b0418da0e7594a8c2164a46985c5f1993632e010Jeff Brown } 101b0418da0e7594a8c2164a46985c5f1993632e010Jeff Brown return true; 10269f593ccb7414ee98991b1da1a4bfbd9951e3570Marco Nelissen default: 10369f593ccb7414ee98991b1da1a4bfbd9951e3570Marco Nelissen return false; 10469f593ccb7414ee98991b1da1a4bfbd9951e3570Marco Nelissen } 1059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 1089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project protected void onDialogClosed(boolean positiveResult) { 1099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project super.onDialogClosed(positiveResult); 110014fea2a663ab0bc2d80a6293b84b2647a4a1895John Reck 1119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (!positiveResult && mSeekBarVolumizer != null) { 1129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mSeekBarVolumizer.revertVolume(); 1139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1149b4742cf25c2cd7e10d87554c1e8a60c6702edaaAmith Yamasani 1159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project cleanup(); 1169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void onActivityStop() { 119a458868fd432d4b106f2beddec8bdb2a65808fdbSamuel Asteberg if (mSeekBarVolumizer != null) { 120735f9ebc188e1cb225533e1f5f9ef925d1f0b20eJohn Spurlock mSeekBarVolumizer.stopSample(); 121a458868fd432d4b106f2beddec8bdb2a65808fdbSamuel Asteberg } 1229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Do clean up. This can be called multiple times! 1269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private void cleanup() { 1289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project getPreferenceManager().unregisterOnActivityStopListener(this); 1299b4742cf25c2cd7e10d87554c1e8a60c6702edaaAmith Yamasani 1309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mSeekBarVolumizer != null) { 1319b4742cf25c2cd7e10d87554c1e8a60c6702edaaAmith Yamasani Dialog dialog = getDialog(); 1329b4742cf25c2cd7e10d87554c1e8a60c6702edaaAmith Yamasani if (dialog != null && dialog.isShowing()) { 133e43530ab571e901f94361078c7c1f970a0bd27f2Amith Yamasani View view = dialog.getWindow().getDecorView() 134e43530ab571e901f94361078c7c1f970a0bd27f2Amith Yamasani .findViewById(com.android.internal.R.id.seekbar); 135e43530ab571e901f94361078c7c1f970a0bd27f2Amith Yamasani if (view != null) view.setOnKeyListener(null); 1369b4742cf25c2cd7e10d87554c1e8a60c6702edaaAmith Yamasani // Stopped while dialog was showing, revert changes 1379b4742cf25c2cd7e10d87554c1e8a60c6702edaaAmith Yamasani mSeekBarVolumizer.revertVolume(); 1389b4742cf25c2cd7e10d87554c1e8a60c6702edaaAmith Yamasani } 1399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mSeekBarVolumizer.stop(); 1409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mSeekBarVolumizer = null; 1419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1429b4742cf25c2cd7e10d87554c1e8a60c6702edaaAmith Yamasani 1439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1449b4742cf25c2cd7e10d87554c1e8a60c6702edaaAmith Yamasani 14574a2e06d831432f27ebd17cf6f1d0086356e7ee0John Spurlock @Override 14674a2e06d831432f27ebd17cf6f1d0086356e7ee0John Spurlock public void onSampleStarting(SeekBarVolumizer volumizer) { 1479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mSeekBarVolumizer != null && volumizer != mSeekBarVolumizer) { 1489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mSeekBarVolumizer.stopSample(); 1499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1519b4742cf25c2cd7e10d87554c1e8a60c6702edaaAmith Yamasani 1529b4742cf25c2cd7e10d87554c1e8a60c6702edaaAmith Yamasani @Override 153bcc1087af40a0e1bb35dbe8a39c830ecdea8280bJohn Spurlock public void onProgressChanged(SeekBar seekBar, int progress, boolean fromTouch) { 154bcc1087af40a0e1bb35dbe8a39c830ecdea8280bJohn Spurlock // noop 155bcc1087af40a0e1bb35dbe8a39c830ecdea8280bJohn Spurlock } 156bcc1087af40a0e1bb35dbe8a39c830ecdea8280bJohn Spurlock 157bcc1087af40a0e1bb35dbe8a39c830ecdea8280bJohn Spurlock @Override 158bcc1087af40a0e1bb35dbe8a39c830ecdea8280bJohn Spurlock public void onMuted(boolean muted) { 159bcc1087af40a0e1bb35dbe8a39c830ecdea8280bJohn Spurlock // noop 160bcc1087af40a0e1bb35dbe8a39c830ecdea8280bJohn Spurlock } 161bcc1087af40a0e1bb35dbe8a39c830ecdea8280bJohn Spurlock 162bcc1087af40a0e1bb35dbe8a39c830ecdea8280bJohn Spurlock @Override 1639b4742cf25c2cd7e10d87554c1e8a60c6702edaaAmith Yamasani protected Parcelable onSaveInstanceState() { 1649b4742cf25c2cd7e10d87554c1e8a60c6702edaaAmith Yamasani final Parcelable superState = super.onSaveInstanceState(); 1659b4742cf25c2cd7e10d87554c1e8a60c6702edaaAmith Yamasani if (isPersistent()) { 1669b4742cf25c2cd7e10d87554c1e8a60c6702edaaAmith Yamasani // No need to save instance state since it's persistent 1679b4742cf25c2cd7e10d87554c1e8a60c6702edaaAmith Yamasani return superState; 1689b4742cf25c2cd7e10d87554c1e8a60c6702edaaAmith Yamasani } 1699b4742cf25c2cd7e10d87554c1e8a60c6702edaaAmith Yamasani 1709b4742cf25c2cd7e10d87554c1e8a60c6702edaaAmith Yamasani final SavedState myState = new SavedState(superState); 1719b4742cf25c2cd7e10d87554c1e8a60c6702edaaAmith Yamasani if (mSeekBarVolumizer != null) { 1729b4742cf25c2cd7e10d87554c1e8a60c6702edaaAmith Yamasani mSeekBarVolumizer.onSaveInstanceState(myState.getVolumeStore()); 1739b4742cf25c2cd7e10d87554c1e8a60c6702edaaAmith Yamasani } 1749b4742cf25c2cd7e10d87554c1e8a60c6702edaaAmith Yamasani return myState; 1759b4742cf25c2cd7e10d87554c1e8a60c6702edaaAmith Yamasani } 1769b4742cf25c2cd7e10d87554c1e8a60c6702edaaAmith Yamasani 1779b4742cf25c2cd7e10d87554c1e8a60c6702edaaAmith Yamasani @Override 1789b4742cf25c2cd7e10d87554c1e8a60c6702edaaAmith Yamasani protected void onRestoreInstanceState(Parcelable state) { 1799b4742cf25c2cd7e10d87554c1e8a60c6702edaaAmith Yamasani if (state == null || !state.getClass().equals(SavedState.class)) { 1809b4742cf25c2cd7e10d87554c1e8a60c6702edaaAmith Yamasani // Didn't save state for us in onSaveInstanceState 1819b4742cf25c2cd7e10d87554c1e8a60c6702edaaAmith Yamasani super.onRestoreInstanceState(state); 1829b4742cf25c2cd7e10d87554c1e8a60c6702edaaAmith Yamasani return; 1839b4742cf25c2cd7e10d87554c1e8a60c6702edaaAmith Yamasani } 1849b4742cf25c2cd7e10d87554c1e8a60c6702edaaAmith Yamasani 1859b4742cf25c2cd7e10d87554c1e8a60c6702edaaAmith Yamasani SavedState myState = (SavedState) state; 1869b4742cf25c2cd7e10d87554c1e8a60c6702edaaAmith Yamasani super.onRestoreInstanceState(myState.getSuperState()); 1879b4742cf25c2cd7e10d87554c1e8a60c6702edaaAmith Yamasani if (mSeekBarVolumizer != null) { 1889b4742cf25c2cd7e10d87554c1e8a60c6702edaaAmith Yamasani mSeekBarVolumizer.onRestoreInstanceState(myState.getVolumeStore()); 1899b4742cf25c2cd7e10d87554c1e8a60c6702edaaAmith Yamasani } 1909b4742cf25c2cd7e10d87554c1e8a60c6702edaaAmith Yamasani } 1919b4742cf25c2cd7e10d87554c1e8a60c6702edaaAmith Yamasani 1929b4742cf25c2cd7e10d87554c1e8a60c6702edaaAmith Yamasani public static class VolumeStore { 1939b4742cf25c2cd7e10d87554c1e8a60c6702edaaAmith Yamasani public int volume = -1; 1949b4742cf25c2cd7e10d87554c1e8a60c6702edaaAmith Yamasani public int originalVolume = -1; 1959b4742cf25c2cd7e10d87554c1e8a60c6702edaaAmith Yamasani } 1969b4742cf25c2cd7e10d87554c1e8a60c6702edaaAmith Yamasani 1979b4742cf25c2cd7e10d87554c1e8a60c6702edaaAmith Yamasani private static class SavedState extends BaseSavedState { 1989b4742cf25c2cd7e10d87554c1e8a60c6702edaaAmith Yamasani VolumeStore mVolumeStore = new VolumeStore(); 1999b4742cf25c2cd7e10d87554c1e8a60c6702edaaAmith Yamasani 2009b4742cf25c2cd7e10d87554c1e8a60c6702edaaAmith Yamasani public SavedState(Parcel source) { 2019b4742cf25c2cd7e10d87554c1e8a60c6702edaaAmith Yamasani super(source); 2029b4742cf25c2cd7e10d87554c1e8a60c6702edaaAmith Yamasani mVolumeStore.volume = source.readInt(); 2039b4742cf25c2cd7e10d87554c1e8a60c6702edaaAmith Yamasani mVolumeStore.originalVolume = source.readInt(); 2049b4742cf25c2cd7e10d87554c1e8a60c6702edaaAmith Yamasani } 2059b4742cf25c2cd7e10d87554c1e8a60c6702edaaAmith Yamasani 2069b4742cf25c2cd7e10d87554c1e8a60c6702edaaAmith Yamasani @Override 2079b4742cf25c2cd7e10d87554c1e8a60c6702edaaAmith Yamasani public void writeToParcel(Parcel dest, int flags) { 2089b4742cf25c2cd7e10d87554c1e8a60c6702edaaAmith Yamasani super.writeToParcel(dest, flags); 2099b4742cf25c2cd7e10d87554c1e8a60c6702edaaAmith Yamasani dest.writeInt(mVolumeStore.volume); 2109b4742cf25c2cd7e10d87554c1e8a60c6702edaaAmith Yamasani dest.writeInt(mVolumeStore.originalVolume); 2119b4742cf25c2cd7e10d87554c1e8a60c6702edaaAmith Yamasani } 2129b4742cf25c2cd7e10d87554c1e8a60c6702edaaAmith Yamasani 2139b4742cf25c2cd7e10d87554c1e8a60c6702edaaAmith Yamasani VolumeStore getVolumeStore() { 2149b4742cf25c2cd7e10d87554c1e8a60c6702edaaAmith Yamasani return mVolumeStore; 2159b4742cf25c2cd7e10d87554c1e8a60c6702edaaAmith Yamasani } 2169b4742cf25c2cd7e10d87554c1e8a60c6702edaaAmith Yamasani 2179b4742cf25c2cd7e10d87554c1e8a60c6702edaaAmith Yamasani public SavedState(Parcelable superState) { 2189b4742cf25c2cd7e10d87554c1e8a60c6702edaaAmith Yamasani super(superState); 2199b4742cf25c2cd7e10d87554c1e8a60c6702edaaAmith Yamasani } 2209b4742cf25c2cd7e10d87554c1e8a60c6702edaaAmith Yamasani 2219b4742cf25c2cd7e10d87554c1e8a60c6702edaaAmith Yamasani public static final Parcelable.Creator<SavedState> CREATOR = 2229b4742cf25c2cd7e10d87554c1e8a60c6702edaaAmith Yamasani new Parcelable.Creator<SavedState>() { 2239b4742cf25c2cd7e10d87554c1e8a60c6702edaaAmith Yamasani public SavedState createFromParcel(Parcel in) { 2249b4742cf25c2cd7e10d87554c1e8a60c6702edaaAmith Yamasani return new SavedState(in); 2259b4742cf25c2cd7e10d87554c1e8a60c6702edaaAmith Yamasani } 2269b4742cf25c2cd7e10d87554c1e8a60c6702edaaAmith Yamasani 2279b4742cf25c2cd7e10d87554c1e8a60c6702edaaAmith Yamasani public SavedState[] newArray(int size) { 2289b4742cf25c2cd7e10d87554c1e8a60c6702edaaAmith Yamasani return new SavedState[size]; 2299b4742cf25c2cd7e10d87554c1e8a60c6702edaaAmith Yamasani } 2309b4742cf25c2cd7e10d87554c1e8a60c6702edaaAmith Yamasani }; 2319b4742cf25c2cd7e10d87554c1e8a60c6702edaaAmith Yamasani } 2329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 233