summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRicardo Cerqueira <cyanogenmod@cerqueira.org>2012-01-23 20:18:48 +0300
committerGerrit Code Review <gerrit@review.cyanogenmod.com>2012-01-23 20:18:48 +0300
commit24f42a2830422e69684b6ea5a1d7d8badc9660a0 (patch)
tree58eb7ddda0a62cf4508b570a702468e339a629fe
parente32c8c413e6cb5aa01b5de5e9480a2ab91751ec4 (diff)
parent2f1d66c6235c2004dc64fd840b8d721c285ff008 (diff)
downloadframeworks_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.java7
-rw-r--r--policy/src/com/android/internal/policy/impl/PhoneWindow.java65
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.
*/