11e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato/* 21e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato * Copyright (C) 2010 The Android Open Source Project 31e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato * 41e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato * Licensed under the Apache License, Version 2.0 (the "License"); 51e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato * you may not use this file except in compliance with the License. 61e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato * You may obtain a copy of the License at 71e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato * 81e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato * http://www.apache.org/licenses/LICENSE-2.0 91e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato * 101e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato * Unless required by applicable law or agreed to in writing, software 111e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato * distributed under the License is distributed on an "AS IS" BASIS, 121e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 131e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato * See the License for the specific language governing permissions and 141e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato * limitations under the License. 151e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato */ 161e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato 171e28f4110f4005a38a1c55836b87df706e8e3229Joe Onoratopackage com.android.systemui.statusbar.policy; 181e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato 191e28f4110f4005a38a1c55836b87df706e8e3229Joe Onoratoimport android.content.ContentResolver; 201e28f4110f4005a38a1c55836b87df706e8e3229Joe Onoratoimport android.content.Context; 211e28f4110f4005a38a1c55836b87df706e8e3229Joe Onoratoimport android.os.RemoteException; 221e28f4110f4005a38a1c55836b87df706e8e3229Joe Onoratoimport android.os.ServiceManager; 23bffc3d1bd33eb2d8e00a9f8b6261d815db503311Eric Laurentimport android.os.Vibrator; 241e28f4110f4005a38a1c55836b87df706e8e3229Joe Onoratoimport android.media.AudioManager; 251e28f4110f4005a38a1c55836b87df706e8e3229Joe Onoratoimport android.provider.Settings; 261e28f4110f4005a38a1c55836b87df706e8e3229Joe Onoratoimport android.util.Slog; 271e28f4110f4005a38a1c55836b87df706e8e3229Joe Onoratoimport android.view.IWindowManager; 281e28f4110f4005a38a1c55836b87df706e8e3229Joe Onoratoimport android.widget.CompoundButton; 291e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato 301e28f4110f4005a38a1c55836b87df706e8e3229Joe Onoratopublic class VolumeController implements ToggleSlider.Listener { 311e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato private static final String TAG = "StatusBar.VolumeController"; 321e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato private static final int STREAM = AudioManager.STREAM_NOTIFICATION; 331e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato 341e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato private Context mContext; 351e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato private ToggleSlider mControl; 361e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato private AudioManager mAudioManager; 371e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato 381e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato private boolean mMute; 391e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato private int mVolume; 40bffc3d1bd33eb2d8e00a9f8b6261d815db503311Eric Laurent // Is there a vibrator 41bffc3d1bd33eb2d8e00a9f8b6261d815db503311Eric Laurent private final boolean mHasVibrator; 421e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato 431e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato public VolumeController(Context context, ToggleSlider control) { 441e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato mContext = context; 451e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato mControl = control; 46bffc3d1bd33eb2d8e00a9f8b6261d815db503311Eric Laurent 47bffc3d1bd33eb2d8e00a9f8b6261d815db503311Eric Laurent Vibrator vibrator = (Vibrator) context.getSystemService(Context.VIBRATOR_SERVICE); 48bffc3d1bd33eb2d8e00a9f8b6261d815db503311Eric Laurent mHasVibrator = vibrator == null ? false : vibrator.hasVibrator(); 49bffc3d1bd33eb2d8e00a9f8b6261d815db503311Eric Laurent 501e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato mAudioManager = (AudioManager)context.getSystemService(Context.AUDIO_SERVICE); 511e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato 521e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato mMute = mAudioManager.getRingerMode() != AudioManager.RINGER_MODE_NORMAL; 531e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato mVolume = mAudioManager.getStreamVolume(STREAM); 5448f37ec8c98a6281dbf067d1740a3bc4953ed26fJohn Spurlock 5548f37ec8c98a6281dbf067d1740a3bc4953ed26fJohn Spurlock control.setOnChangedListener(this); 5648f37ec8c98a6281dbf067d1740a3bc4953ed26fJohn Spurlock } 5748f37ec8c98a6281dbf067d1740a3bc4953ed26fJohn Spurlock 5848f37ec8c98a6281dbf067d1740a3bc4953ed26fJohn Spurlock @Override 5948f37ec8c98a6281dbf067d1740a3bc4953ed26fJohn Spurlock public void onInit(ToggleSlider control) { 601e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato control.setMax(mAudioManager.getStreamMaxVolume(STREAM)); 611e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato control.setValue(mVolume); 621e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato control.setChecked(mMute); 631e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato } 641e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato 651e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato public void onChanged(ToggleSlider view, boolean tracking, boolean mute, int level) { 661e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato if (!tracking) { 671e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato if (mute) { 681e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato mAudioManager.setRingerMode( 69bffc3d1bd33eb2d8e00a9f8b6261d815db503311Eric Laurent mHasVibrator ? AudioManager.RINGER_MODE_VIBRATE 701e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato : AudioManager.RINGER_MODE_SILENT); 711e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato } else { 721e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato mAudioManager.setRingerMode(AudioManager.RINGER_MODE_NORMAL); 731e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato mAudioManager.setStreamVolume(STREAM, level, AudioManager.FLAG_PLAY_SOUND); 741e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato } 751e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato } 761e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato } 771e28f4110f4005a38a1c55836b87df706e8e3229Joe Onorato} 78