diff options
author | Pedlar <pedlar88@gmail.com> | 2010-10-05 00:51:57 -0400 |
---|---|---|
committer | Steve Kondik <shade@chemlab.org> | 2010-10-17 01:04:47 -0400 |
commit | eb0e39732842151e947f27cf64a00480d75e5631 (patch) | |
tree | 0dd9204ba0593c58ff964fdb49c5502591b5e42f /services/java/com/android/server/status/widget/SoundButton.java | |
parent | c5efffd3ea508745ceba287e1444e69b36b7d6e9 (diff) | |
download | frameworks_base-eb0e39732842151e947f27cf64a00480d75e5631.zip frameworks_base-eb0e39732842151e947f27cf64a00480d75e5631.tar.gz frameworks_base-eb0e39732842151e947f27cf64a00480d75e5631.tar.bz2 |
Galaxy S Style Power Widget
- Finally Ready - Review at will
- This Depends on the following:
CMParts: http://review.cyanogenmod.com/2063
Diffstat (limited to 'services/java/com/android/server/status/widget/SoundButton.java')
-rwxr-xr-x | services/java/com/android/server/status/widget/SoundButton.java | 220 |
1 files changed, 220 insertions, 0 deletions
diff --git a/services/java/com/android/server/status/widget/SoundButton.java b/services/java/com/android/server/status/widget/SoundButton.java new file mode 100755 index 0000000..bd96bd7 --- /dev/null +++ b/services/java/com/android/server/status/widget/SoundButton.java @@ -0,0 +1,220 @@ +package com.android.server.status.widget; + +import com.android.internal.R; +import com.android.server.status.widget.PowerButton; + +import android.content.Context; +import android.content.SharedPreferences; +import android.media.AudioManager; +import android.provider.Settings; + +public class SoundButton extends PowerButton { + + static SoundButton ownButton = null; + + public static final int RINGER_MODE_UNKNOWN = 0; + public static final int RINGER_MODE_SILENT = 1; + public static final int RINGER_MODE_VIBRATE_ONLY = 2; + public static final int RINGER_MODE_SOUND_ONLY = 3; + public static final int RINGER_MODE_SOUND_AND_VIBRATE = 4; + + public static final int MODE_SOUNDVIB_VIB = 0; + public static final int MODE_SOUND_VIB = 1; + public static final int MODE_SOUND_SILENT = 2; + public static final int MODE_SOUNDVIB_VIB_SILENT = 3; + public static final int MODE_SOUND_VIB_SILENT = 4; + + private static final int DEFAULT_SETTING = 0; + private static int currentMode; + + private static int getSoundState(Context context) { + AudioManager mAudioManager = (AudioManager) context + .getSystemService(Context.AUDIO_SERVICE); + + int ringMode = mAudioManager.getRingerMode(); + int vibrateMode = mAudioManager.getVibrateSetting(AudioManager.VIBRATE_TYPE_RINGER); + + if (ringMode == AudioManager.RINGER_MODE_NORMAL && vibrateMode == AudioManager.VIBRATE_SETTING_ON) { + return RINGER_MODE_SOUND_AND_VIBRATE; + } else if (ringMode == AudioManager.RINGER_MODE_NORMAL) { + return RINGER_MODE_SOUND_ONLY; + } else if (ringMode == AudioManager.RINGER_MODE_VIBRATE) { + return RINGER_MODE_VIBRATE_ONLY; + } else if (ringMode == AudioManager.RINGER_MODE_SILENT) { + return RINGER_MODE_SILENT; + } + return RINGER_MODE_UNKNOWN; + } + + /** + * Toggles the state of 2G3G. + * + * @param context + */ + public void toggleState(Context context) { + int currentMode = getSoundState(context); + AudioManager mAudioManager = (AudioManager) context + .getSystemService(Context.AUDIO_SERVICE); + + switch (currentMode) { + case RINGER_MODE_SOUND_AND_VIBRATE: + if(supports(RINGER_MODE_SOUND_ONLY)) { + Settings.System.putInt(context.getContentResolver(),Settings.System.VIBRATE_IN_SILENT,1); + mAudioManager. + setVibrateSetting(AudioManager.VIBRATE_TYPE_RINGER,AudioManager.VIBRATE_SETTING_ONLY_SILENT); + mAudioManager.setRingerMode(AudioManager.RINGER_MODE_NORMAL); + } else if(supports(RINGER_MODE_VIBRATE_ONLY)) { + Settings.System.putInt(context.getContentResolver(),Settings.System.VIBRATE_IN_SILENT,1); + mAudioManager. + setVibrateSetting(AudioManager.VIBRATE_TYPE_RINGER,AudioManager.VIBRATE_SETTING_ONLY_SILENT); + mAudioManager.setRingerMode(AudioManager.RINGER_MODE_VIBRATE); + } else if(supports(RINGER_MODE_SILENT)) { + Settings.System.putInt(context.getContentResolver(),Settings.System.VIBRATE_IN_SILENT,0); + mAudioManager. + setVibrateSetting(AudioManager.VIBRATE_TYPE_RINGER,AudioManager.VIBRATE_SETTING_OFF); + mAudioManager.setRingerMode(AudioManager.RINGER_MODE_SILENT); + } else { //Fall Back + Settings.System.putInt(context.getContentResolver(),Settings.System.VIBRATE_IN_SILENT,1); + mAudioManager. + setVibrateSetting(AudioManager.VIBRATE_TYPE_RINGER,AudioManager.VIBRATE_SETTING_ON); + mAudioManager.setRingerMode(AudioManager.RINGER_MODE_VIBRATE); + } + break; + case RINGER_MODE_SOUND_ONLY: + if(supports(RINGER_MODE_VIBRATE_ONLY)) { + Settings.System.putInt(context.getContentResolver(),Settings.System.VIBRATE_IN_SILENT,1); + mAudioManager. + setVibrateSetting(AudioManager.VIBRATE_TYPE_RINGER,AudioManager.VIBRATE_SETTING_ONLY_SILENT); + mAudioManager.setRingerMode(AudioManager.RINGER_MODE_VIBRATE); + } else if(supports(RINGER_MODE_SILENT)) { + Settings.System.putInt(context.getContentResolver(),Settings.System.VIBRATE_IN_SILENT,0); + mAudioManager. + setVibrateSetting(AudioManager.VIBRATE_TYPE_RINGER,AudioManager.VIBRATE_SETTING_OFF); + mAudioManager.setRingerMode(AudioManager.RINGER_MODE_SILENT); + } else if(supports(RINGER_MODE_SOUND_AND_VIBRATE)) { + Settings.System.putInt(context.getContentResolver(),Settings.System.VIBRATE_IN_SILENT,1); + mAudioManager. + setVibrateSetting(AudioManager.VIBRATE_TYPE_RINGER,AudioManager.VIBRATE_SETTING_ON); + mAudioManager.setRingerMode(AudioManager.RINGER_MODE_NORMAL); + } else { //Fall back + Settings.System.putInt(context.getContentResolver(),Settings.System.VIBRATE_IN_SILENT,1); + mAudioManager. + setRingerMode(AudioManager.RINGER_MODE_VIBRATE); + mAudioManager.setVibrateSetting(AudioManager.VIBRATE_TYPE_RINGER,AudioManager.VIBRATE_SETTING_ON); + } + break; + + case RINGER_MODE_VIBRATE_ONLY: + if(supports(RINGER_MODE_SILENT)) { + Settings.System.putInt(context.getContentResolver(),Settings.System.VIBRATE_IN_SILENT,0); + mAudioManager.setRingerMode(AudioManager.RINGER_MODE_SILENT); + mAudioManager.setVibrateSetting(AudioManager.VIBRATE_TYPE_RINGER,AudioManager.VIBRATE_SETTING_OFF); + } else if(supports(RINGER_MODE_SOUND_AND_VIBRATE)) { + Settings.System.putInt(context.getContentResolver(),Settings.System.VIBRATE_IN_SILENT,1); + mAudioManager.setRingerMode(AudioManager.RINGER_MODE_NORMAL); + mAudioManager.setVibrateSetting(AudioManager.VIBRATE_TYPE_RINGER,AudioManager.VIBRATE_SETTING_ON); + } else if(supports(RINGER_MODE_SOUND_ONLY)) { + Settings.System.putInt(context.getContentResolver(),Settings.System.VIBRATE_IN_SILENT,1); + mAudioManager.setRingerMode(AudioManager.RINGER_MODE_NORMAL); + mAudioManager.setVibrateSetting(AudioManager.VIBRATE_TYPE_RINGER,AudioManager.VIBRATE_SETTING_ONLY_SILENT); + } else { //Fall Back + Settings.System.putInt(context.getContentResolver(),Settings.System.VIBRATE_IN_SILENT,1); + mAudioManager.setRingerMode(AudioManager.RINGER_MODE_NORMAL); + mAudioManager.setVibrateSetting(AudioManager.VIBRATE_TYPE_RINGER,AudioManager.VIBRATE_SETTING_ON); + } + break; + case RINGER_MODE_SILENT: + if(supports(RINGER_MODE_SOUND_AND_VIBRATE)) { + Settings.System.putInt(context.getContentResolver(),Settings.System.VIBRATE_IN_SILENT,1); + mAudioManager.setRingerMode(AudioManager.RINGER_MODE_NORMAL); + mAudioManager.setVibrateSetting(AudioManager.VIBRATE_TYPE_RINGER,AudioManager.VIBRATE_SETTING_ON); + } else if(supports(RINGER_MODE_SOUND_ONLY)) { + Settings.System.putInt(context.getContentResolver(),Settings.System.VIBRATE_IN_SILENT,1); + mAudioManager.setRingerMode(AudioManager.RINGER_MODE_NORMAL); + mAudioManager.setVibrateSetting(AudioManager.VIBRATE_TYPE_RINGER,AudioManager.VIBRATE_SETTING_ONLY_SILENT); + } else if(supports(RINGER_MODE_VIBRATE_ONLY)) { + Settings.System.putInt(context.getContentResolver(),Settings.System.VIBRATE_IN_SILENT,1); + mAudioManager.setRingerMode(AudioManager.RINGER_MODE_VIBRATE); + mAudioManager.setVibrateSetting(AudioManager.VIBRATE_TYPE_RINGER,AudioManager.VIBRATE_SETTING_ONLY_SILENT); + } else { //Fall Back + Settings.System.putInt(context.getContentResolver(),Settings.System.VIBRATE_IN_SILENT,1); + mAudioManager.setRingerMode(AudioManager.RINGER_MODE_NORMAL); + mAudioManager.setVibrateSetting(AudioManager.VIBRATE_TYPE_RINGER,AudioManager.VIBRATE_SETTING_ON); + } + break; + default: + Settings.System.putInt(context.getContentResolver(),Settings.System.VIBRATE_IN_SILENT,1); + mAudioManager.setRingerMode(AudioManager.RINGER_MODE_NORMAL); + mAudioManager.setVibrateSetting(AudioManager.VIBRATE_TYPE_RINGER,AudioManager.VIBRATE_SETTING_ON); + + } + } + + private boolean supports(int ringerMode) { + switch (ringerMode) { + case RINGER_MODE_SILENT: + if (currentMode == MODE_SOUND_SILENT || + currentMode == MODE_SOUNDVIB_VIB_SILENT || + currentMode == MODE_SOUND_VIB_SILENT) + return true; + break; + case RINGER_MODE_VIBRATE_ONLY: + if (currentMode == MODE_SOUND_VIB || + currentMode == MODE_SOUNDVIB_VIB || + currentMode == MODE_SOUNDVIB_VIB_SILENT || + currentMode == MODE_SOUND_VIB_SILENT) + return true; + break; + case RINGER_MODE_SOUND_ONLY: + if (currentMode == MODE_SOUND_VIB || + currentMode == MODE_SOUND_SILENT || + currentMode == MODE_SOUND_VIB_SILENT) + return true; + break; + case RINGER_MODE_SOUND_AND_VIBRATE: + if (currentMode == MODE_SOUNDVIB_VIB || + currentMode == MODE_SOUNDVIB_VIB_SILENT) + return true; + } + + return false; + } + + public static SoundButton getInstance() { + if (ownButton == null) + ownButton = new SoundButton(); + + return ownButton; + } + + @Override + void initButton(int position) { + } + + @Override + public void updateState(Context context) { + int soundState = getSoundState(context); + currentMode = Settings.System.getInt(context.getContentResolver(), + Settings.System.EXPANDED_RING_MODE, DEFAULT_SETTING); + + switch (soundState) { + case RINGER_MODE_SOUND_AND_VIBRATE: + currentIcon = R.drawable.stat_ring_on; + currentState = PowerButton.STATE_ENABLED; + break; + case RINGER_MODE_SOUND_ONLY: + currentIcon = R.drawable.stat_ring_on; + currentState = PowerButton.STATE_INTERMEDIATE; + break; + case RINGER_MODE_VIBRATE_ONLY: + currentIcon = R.drawable.stat_vibrate_off; + currentState = PowerButton.STATE_DISABLED; + break; + case RINGER_MODE_SILENT: + currentIcon = R.drawable.stat_silent; + currentState = PowerButton.STATE_DISABLED; + break; + + } + } +} |