diff options
author | Ricardo Cerqueira <cyanogenmod@cerqueira.org> | 2012-01-23 20:18:48 +0300 |
---|---|---|
committer | Gerrit Code Review <gerrit@review.cyanogenmod.com> | 2012-01-23 20:18:48 +0300 |
commit | 24f42a2830422e69684b6ea5a1d7d8badc9660a0 (patch) | |
tree | 58eb7ddda0a62cf4508b570a702468e339a629fe | |
parent | e32c8c413e6cb5aa01b5de5e9480a2ab91751ec4 (diff) | |
parent | 2f1d66c6235c2004dc64fd840b8d721c285ff008 (diff) | |
download | frameworks_base-24f42a2830422e69684b6ea5a1d7d8badc9660a0.zip frameworks_base-24f42a2830422e69684b6ea5a1d7d8badc9660a0.tar.gz frameworks_base-24f42a2830422e69684b6ea5a1d7d8badc9660a0.tar.bz2 |
Merge "Add option to lock volume keys in silent mode (framework part)" into gingerbread
-rw-r--r-- | core/java/android/provider/Settings.java | 7 | ||||
-rw-r--r-- | policy/src/com/android/internal/policy/impl/PhoneWindow.java | 65 |
2 files changed, 64 insertions, 8 deletions
diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java index e2caf7b..2211bbc 100644 --- a/core/java/android/provider/Settings.java +++ b/core/java/android/provider/Settings.java @@ -1648,6 +1648,13 @@ public final class Settings { public static final String VOLUME_CONTROL_SILENT = "volume_contol_silent"; /** + * Whether to lock ringer volume changes in silent mode. + * + * @hide + */ + public static final String LOCK_VOLUME_KEYS = "lock_volume_keys"; + + /** * Whether notifications should vibrate during phone calls or not. * * @hide diff --git a/policy/src/com/android/internal/policy/impl/PhoneWindow.java b/policy/src/com/android/internal/policy/impl/PhoneWindow.java index 09b3dc2..a4b5976 100644 --- a/policy/src/com/android/internal/policy/impl/PhoneWindow.java +++ b/policy/src/com/android/internal/policy/impl/PhoneWindow.java @@ -44,6 +44,7 @@ import android.graphics.PixelFormat; import android.graphics.Rect; import android.graphics.drawable.Drawable; import android.media.AudioManager; +import android.media.AudioSystem; import android.net.Uri; import android.os.Bundle; import android.os.Parcel; @@ -1177,15 +1178,25 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback { Context.AUDIO_SERVICE); if (audioManager != null) { /* - * Adjust the volume in on key down since it is more - * responsive to the user. + * Adjust the volume in on key down + * since it is more responsive to the user. + * (if volume key lock condition unsatisfied) */ - audioManager.adjustSuggestedStreamVolume( - keyCode == KeyEvent.KEYCODE_VOLUME_UP - ? AudioManager.ADJUST_RAISE - : AudioManager.ADJUST_LOWER, - mVolumeControlStreamType, - AudioManager.FLAG_SHOW_UI | AudioManager.FLAG_VIBRATE); + if (shouldSuppressVolumeKey(audioManager)) { + //Show volume popup to acknowledge button press and + //show that volume did not change + audioManager.adjustSuggestedStreamVolume( + AudioManager.ADJUST_SAME, + mVolumeControlStreamType, + AudioManager.FLAG_SHOW_UI); + } else { + audioManager.adjustSuggestedStreamVolume( + keyCode == KeyEvent.KEYCODE_VOLUME_UP + ? AudioManager.ADJUST_RAISE + : AudioManager.ADJUST_LOWER, + mVolumeControlStreamType, + AudioManager.FLAG_SHOW_UI | AudioManager.FLAG_VIBRATE); + } } return true; } @@ -1318,6 +1329,44 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback { return false; } + private boolean shouldSuppressVolumeKey(AudioManager audioManager) { + boolean lockVolumeKeys = Settings.System.getInt( + getContext().getContentResolver(), Settings.System.LOCK_VOLUME_KEYS, 0) == 1; + + if (!lockVolumeKeys) { + /* don't suppress if the user doesn't want it */ + return false; + } + if (audioManager.getRingerMode() == AudioManager.RINGER_MODE_NORMAL) { + /* only suppress in silent mode */ + return false; + } + if (mVolumeControlStreamType != AudioManager.USE_DEFAULT_STREAM_TYPE && + mVolumeControlStreamType != AudioManager.STREAM_RING) { + /* only suppress ringtone volume changes */ + return false; + } + if (AudioSystem.getForceUse(AudioSystem.FOR_COMMUNICATION) == AudioSystem.FORCE_BT_SCO) { + /* don't suppress BT volume changes */ + return false; + } + if (AudioSystem.isStreamActive(AudioSystem.STREAM_MUSIC)) { + /* don't suppress music volume keys */ + return false; + } + if (mTelephonyManager == null) { + mTelephonyManager = (TelephonyManager) + getContext().getSystemService(Context.TELEPHONY_SERVICE); + } + if (AudioSystem.isStreamActive(AudioSystem.STREAM_VOICE_CALL) || + mTelephonyManager.getCallState() == TelephonyManager.CALL_STATE_OFFHOOK) { + /* don't suppress call volume changes */ + return false; + } + + return true; + } + /** * @return A handle to the keyguard manager. */ |