summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBryce Lee <brycelee@google.com>2014-10-21 15:55:55 -0700
committerBryce Lee <brycelee@google.com>2014-10-21 15:55:55 -0700
commit584a44517950204a04ef01345be70b33d8ba43f9 (patch)
tree064810ffab925197bac2fb8aae2f1df03df0b5d5
parente463bc388e7f5d83f864b320dde400e390ef5817 (diff)
downloadframeworks_base-584a44517950204a04ef01345be70b33d8ba43f9.zip
frameworks_base-584a44517950204a04ef01345be70b33d8ba43f9.tar.gz
frameworks_base-584a44517950204a04ef01345be70b33d8ba43f9.tar.bz2
[Theater Mode] framework implementation through global setting
Bug: 17684570 Change-Id: I64a9c9c0620049cdfcca0150648fa201281f7178
-rw-r--r--core/java/android/provider/Settings.java6
-rw-r--r--core/res/res/values/config.xml20
-rw-r--r--core/res/res/values/symbols.xml9
-rw-r--r--packages/SettingsProvider/res/values/defaults.xml1
-rw-r--r--packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java21
-rw-r--r--policy/src/com/android/internal/policy/impl/PhoneWindowManager.java51
-rw-r--r--services/core/java/com/android/server/DockObserver.java12
-rw-r--r--services/core/java/com/android/server/power/PowerManagerService.java22
-rw-r--r--services/core/java/com/android/server/wm/WindowManagerService.java14
9 files changed, 145 insertions, 11 deletions
diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java
index 79e84d9..b1c338e 100644
--- a/core/java/android/provider/Settings.java
+++ b/core/java/android/provider/Settings.java
@@ -5086,6 +5086,12 @@ public final class Settings {
public static final String AIRPLANE_MODE_ON = "airplane_mode_on";
/**
+ * Whether Theater Mode is on.
+ * {@hide}
+ */
+ public static final String THEATER_MODE_ON = "theater_mode_on";
+
+ /**
* Constant for use in AIRPLANE_MODE_RADIOS to specify Bluetooth radio.
*/
public static final String RADIO_BLUETOOTH = "bluetooth";
diff --git a/core/res/res/values/config.xml b/core/res/res/values/config.xml
index 59b4e9c..eed2ef2 100644
--- a/core/res/res/values/config.xml
+++ b/core/res/res/values/config.xml
@@ -453,6 +453,26 @@
<!-- If this is true, key chords can be used to take a screenshot on the device. -->
<bool name="config_enableScreenshotChord">true</bool>
+ <!-- If this is true, allow wake from theater mode when plugged in or unplugged. -->
+ <bool name="config_allowTheaterModeWakeFromUnplug">false</bool>
+ <!-- If this is true, allow wake from theater mode from gesture. -->
+ <bool name="config_allowTheaterModeWakeFromGesture">false</bool>
+ <!-- If this is true, allow wake from theater mode from camera lens cover is switched. -->
+ <bool name="config_allowTheaterModeWakeFromCameraLens">false</bool>
+ <!-- If this is true, allow wake from theater mode from power key press. -->
+ <bool name="config_allowTheaterModeWakeFromPowerKey">true</bool>
+ <!-- If this is true, allow wake from theater mode from regular key press. Setting this value to
+ true implies config_allowTheaterModeWakeFromPowerKey is also true-->
+ <bool name="config_allowTheaterModeWakeFromKey">false</bool>
+ <!-- If this is true, allow wake from theater mode from motion. -->
+ <bool name="config_allowTheaterModeWakeFromMotion">false</bool>
+ <!-- If this is true, allow wake from theater mode from lid switch. -->
+ <bool name="config_allowTheaterModeWakeFromLidSwitch">false</bool>
+ <!-- If this is true, allow wake from theater mode when docked. -->
+ <bool name="config_allowTheaterModeWakeFromDock">false</bool>
+ <!-- If this is true, allow wake from theater mode from window layout flag. -->
+ <bool name="config_allowTheaterModeWakeFromWindowLayout">false</bool>
+
<!-- Auto-rotation behavior -->
<!-- If true, enables auto-rotation features using the accelerometer.
diff --git a/core/res/res/values/symbols.xml b/core/res/res/values/symbols.xml
index 82d398e..47978eb 100644
--- a/core/res/res/values/symbols.xml
+++ b/core/res/res/values/symbols.xml
@@ -1571,6 +1571,15 @@
<java-symbol type="bool" name="config_enableNetworkLocationOverlay" />
<java-symbol type="bool" name="config_sf_limitedAlpha" />
<java-symbol type="bool" name="config_unplugTurnsOnScreen" />
+ <java-symbol type="bool" name="config_allowTheaterModeWakeFromUnplug" />
+ <java-symbol type="bool" name="config_allowTheaterModeWakeFromGesture" />
+ <java-symbol type="bool" name="config_allowTheaterModeWakeFromCameraLens" />
+ <java-symbol type="bool" name="config_allowTheaterModeWakeFromPowerKey" />
+ <java-symbol type="bool" name="config_allowTheaterModeWakeFromKey" />
+ <java-symbol type="bool" name="config_allowTheaterModeWakeFromMotion" />
+ <java-symbol type="bool" name="config_allowTheaterModeWakeFromLidSwitch" />
+ <java-symbol type="bool" name="config_allowTheaterModeWakeFromDock" />
+ <java-symbol type="bool" name="config_allowTheaterModeWakeFromWindowLayout" />
<java-symbol type="bool" name="config_wifi_background_scan_support" />
<java-symbol type="bool" name="config_wifi_dual_band_support" />
<java-symbol type="bool" name="config_wimaxEnabled" />
diff --git a/packages/SettingsProvider/res/values/defaults.xml b/packages/SettingsProvider/res/values/defaults.xml
index efba03d..16c6075 100644
--- a/packages/SettingsProvider/res/values/defaults.xml
+++ b/packages/SettingsProvider/res/values/defaults.xml
@@ -21,6 +21,7 @@
<integer name="def_screen_off_timeout">60000</integer>
<integer name="def_sleep_timeout">-1</integer>
<bool name="def_airplane_mode_on">false</bool>
+ <bool name="def_theater_mode_on">false</bool>
<!-- Comma-separated list of bluetooth, wifi, and cell. -->
<string name="def_airplane_mode_radios" translatable="false">cell,bluetooth,wifi,nfc,wimax</string>
<string name="airplane_mode_toggleable_radios" translatable="false">bluetooth,wifi,nfc</string>
diff --git a/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java b/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java
index b17b4cc..8ac1c96 100644
--- a/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java
+++ b/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java
@@ -70,7 +70,7 @@ public class DatabaseHelper extends SQLiteOpenHelper {
// database gets upgraded properly. At a minimum, please confirm that 'upgradeVersion'
// is properly propagated through your change. Not doing so will result in a loss of user
// settings.
- private static final int DATABASE_VERSION = 113;
+ private static final int DATABASE_VERSION = 114;
private Context mContext;
private int mUserHandle;
@@ -1827,6 +1827,22 @@ public class DatabaseHelper extends SQLiteOpenHelper {
upgradeVersion = 113;
}
+ if (upgradeVersion < 114) {
+ db.beginTransaction();
+ SQLiteStatement stmt = null;
+ try {
+ stmt = db.compileStatement("INSERT OR IGNORE INTO global(name,value)"
+ + " VALUES(?,?);");
+ loadBooleanSetting(stmt, Global.THEATER_MODE_ON,
+ R.bool.def_theater_mode_on);
+ db.setTransactionSuccessful();
+ } finally {
+ db.endTransaction();
+ if (stmt != null) stmt.close();
+ }
+ upgradeVersion = 114;
+ }
+
// *** Remember to update DATABASE_VERSION above!
if (upgradeVersion != currentVersion) {
@@ -2423,6 +2439,9 @@ public class DatabaseHelper extends SQLiteOpenHelper {
loadBooleanSetting(stmt, Settings.Global.AIRPLANE_MODE_ON,
R.bool.def_airplane_mode_on);
+ loadBooleanSetting(stmt, Settings.Global.THEATER_MODE_ON,
+ R.bool.def_theater_mode_on);
+
loadStringSetting(stmt, Settings.Global.AIRPLANE_MODE_RADIOS,
R.string.def_airplane_mode_radios);
diff --git a/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java b/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java
index 99d5848..1882d56 100644
--- a/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java
+++ b/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java
@@ -503,6 +503,14 @@ public class PhoneWindowManager implements WindowManagerPolicy {
// What we do when the user double-taps on home
private int mDoubleTapOnHomeBehavior;
+ // Allowed theater mode wake actions
+ private boolean mAllowTheaterModeWakeFromKey;
+ private boolean mAllowTheaterModeWakeFromPowerKey;
+ private boolean mAllowTheaterModeWakeFromMotion;
+ private boolean mAllowTheaterModeWakeFromCameraLens;
+ private boolean mAllowTheaterModeWakeFromLidSwitch;
+ private boolean mAllowTheaterModeWakeFromWakeGesture;
+
// Screenshot trigger states
// Time to volume and power must be pressed within this interval of each other.
private static final long SCREENSHOT_CHORD_DEBOUNCE_DELAY_MILLIS = 150;
@@ -656,7 +664,7 @@ public class PhoneWindowManager implements WindowManagerPolicy {
synchronized (mLock) {
if (shouldEnableWakeGestureLp()) {
performHapticFeedbackLw(null, HapticFeedbackConstants.VIRTUAL_KEY, false);
- mPowerManager.wakeUp(SystemClock.uptimeMillis());
+ wakeUp(SystemClock.uptimeMillis(), mAllowTheaterModeWakeFromWakeGesture);
}
}
}
@@ -1022,6 +1030,21 @@ public class PhoneWindowManager implements WindowManagerPolicy {
com.android.internal.R.bool.config_lidControlsSleep);
mTranslucentDecorEnabled = mContext.getResources().getBoolean(
com.android.internal.R.bool.config_enableTranslucentDecor);
+
+ mAllowTheaterModeWakeFromKey = mContext.getResources().getBoolean(
+ com.android.internal.R.bool.config_allowTheaterModeWakeFromKey);
+ mAllowTheaterModeWakeFromPowerKey = mAllowTheaterModeWakeFromKey
+ || mContext.getResources().getBoolean(
+ com.android.internal.R.bool.config_allowTheaterModeWakeFromPowerKey);
+ mAllowTheaterModeWakeFromMotion = mContext.getResources().getBoolean(
+ com.android.internal.R.bool.config_allowTheaterModeWakeFromMotion);
+ mAllowTheaterModeWakeFromCameraLens = mContext.getResources().getBoolean(
+ com.android.internal.R.bool.config_allowTheaterModeWakeFromCameraLens);
+ mAllowTheaterModeWakeFromLidSwitch = mContext.getResources().getBoolean(
+ com.android.internal.R.bool.config_allowTheaterModeWakeFromLidSwitch);
+ mAllowTheaterModeWakeFromWakeGesture = mContext.getResources().getBoolean(
+ com.android.internal.R.bool.config_allowTheaterModeWakeFromGesture);
+
readConfigurationDependentBehaviors();
mAccessibilityManager = (AccessibilityManager) context.getSystemService(
@@ -4071,7 +4094,7 @@ public class PhoneWindowManager implements WindowManagerPolicy {
updateRotation(true);
if (lidOpen) {
- mPowerManager.wakeUp(SystemClock.uptimeMillis());
+ wakeUp(SystemClock.uptimeMillis(), mAllowTheaterModeWakeFromLidSwitch);
} else if (!mLidControlsSleep) {
mPowerManager.userActivity(SystemClock.uptimeMillis(), false);
}
@@ -4093,7 +4116,7 @@ public class PhoneWindowManager implements WindowManagerPolicy {
} else {
intent = new Intent(MediaStore.INTENT_ACTION_STILL_IMAGE_CAMERA);
}
- mPowerManager.wakeUp(whenNanos / 1000000);
+ wakeUp(whenNanos / 1000000, mAllowTheaterModeWakeFromCameraLens);
mContext.startActivityAsUser(intent, UserHandle.CURRENT_OR_SELF);
}
mCameraLensCoverState = lensCoverState;
@@ -4271,7 +4294,8 @@ public class PhoneWindowManager implements WindowManagerPolicy {
// key processing.
if (mGlobalKeyManager.shouldHandleGlobalKey(keyCode, event)) {
if (isWakeKey) {
- mPowerManager.wakeUp(event.getEventTime());
+ wakeUp(event.getEventTime(), keyCode == KeyEvent.KEYCODE_POWER
+ ? mAllowTheaterModeWakeFromPowerKey : mAllowTheaterModeWakeFromKey);
}
return result;
}
@@ -4520,8 +4544,10 @@ public class PhoneWindowManager implements WindowManagerPolicy {
}
if (isWakeKey) {
- mPowerManager.wakeUp(event.getEventTime());
+ wakeUp(event.getEventTime(), keyCode == KeyEvent.KEYCODE_POWER
+ ? mAllowTheaterModeWakeFromPowerKey : mAllowTheaterModeWakeFromKey);
}
+
return result;
}
@@ -4564,7 +4590,7 @@ public class PhoneWindowManager implements WindowManagerPolicy {
@Override
public int interceptMotionBeforeQueueingNonInteractive(long whenNanos, int policyFlags) {
if ((policyFlags & FLAG_WAKE) != 0) {
- mPowerManager.wakeUp(whenNanos / 1000000);
+ wakeUp(whenNanos / 1000000, mAllowTheaterModeWakeFromMotion);
return 0;
}
if (shouldDispatchInputWhenNonInteractive()) {
@@ -4742,6 +4768,14 @@ public class PhoneWindowManager implements WindowManagerPolicy {
}
}
+ private void wakeUp(long wakeTime, boolean wakeInTheaterMode) {
+ if (!wakeInTheaterMode && isTheaterModeEnabled()) {
+ return;
+ }
+
+ mPowerManager.wakeUp(wakeTime);
+ }
+
// Called on the PowerManager's Notifier thread.
@Override
public void wakingUp() {
@@ -5620,6 +5654,11 @@ public class PhoneWindowManager implements WindowManagerPolicy {
ringTone.play();
}
+ private boolean isTheaterModeEnabled() {
+ return Settings.Global.getInt(mContext.getContentResolver(),
+ Settings.Global.THEATER_MODE_ON, 0) == 1;
+ }
+
private boolean isGlobalAccessibilityGestureEnabled() {
return Settings.Global.getInt(mContext.getContentResolver(),
Settings.Global.ENABLE_ACCESSIBILITY_GLOBAL_GESTURE_ENABLED, 0) == 1;
diff --git a/services/core/java/com/android/server/DockObserver.java b/services/core/java/com/android/server/DockObserver.java
index d05c280..41ce25d 100644
--- a/services/core/java/com/android/server/DockObserver.java
+++ b/services/core/java/com/android/server/DockObserver.java
@@ -65,11 +65,15 @@ final class DockObserver extends SystemService {
private boolean mUpdatesStopped;
+ private final boolean mAllowTheaterModeWakeFromDock;
+
public DockObserver(Context context) {
super(context);
mPowerManager = (PowerManager)context.getSystemService(Context.POWER_SERVICE);
mWakeLock = mPowerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, TAG);
+ mAllowTheaterModeWakeFromDock = context.getResources().getBoolean(
+ com.android.internal.R.bool.config_allowTheaterModeWakeFromDock);
init(); // set initial status
@@ -126,8 +130,12 @@ final class DockObserver extends SystemService {
if (newState != mReportedDockState) {
mReportedDockState = newState;
if (mSystemReady) {
- // Wake up immediately when docked or undocked.
- mPowerManager.wakeUp(SystemClock.uptimeMillis());
+ // Wake up immediately when docked or undocked except in theater mode.
+ if (mAllowTheaterModeWakeFromDock
+ || Settings.Global.getInt(getContext().getContentResolver(),
+ Settings.Global.THEATER_MODE_ON, 0) == 0) {
+ mPowerManager.wakeUp(SystemClock.uptimeMillis());
+ }
updateLocked();
}
}
diff --git a/services/core/java/com/android/server/power/PowerManagerService.java b/services/core/java/com/android/server/power/PowerManagerService.java
index 52807c0..5e95dfe 100644
--- a/services/core/java/com/android/server/power/PowerManagerService.java
+++ b/services/core/java/com/android/server/power/PowerManagerService.java
@@ -281,6 +281,9 @@ public final class PowerManagerService extends SystemService
// True if the device should wake up when plugged or unplugged.
private boolean mWakeUpWhenPluggedOrUnpluggedConfig;
+ // True if the device should wake up when plugged or unplugged in theater mode.
+ private boolean mWakeUpWhenPluggedOrUnpluggedInTheaterModeConfig;
+
// True if the device should suspend when the screen is off due to proximity.
private boolean mSuspendWhenScreenOffDueToProximityConfig;
@@ -420,6 +423,9 @@ public final class PowerManagerService extends SystemService
// True if the battery level is currently considered low.
private boolean mBatteryLevelLow;
+ // True if theater mode is enabled
+ private boolean mTheaterModeEnabled;
+
private final ArrayList<PowerManagerInternal.LowPowerModeListener> mLowPowerModeListeners
= new ArrayList<PowerManagerInternal.LowPowerModeListener>();
@@ -568,6 +574,9 @@ public final class PowerManagerService extends SystemService
resolver.registerContentObserver(Settings.Global.getUriFor(
Settings.Global.LOW_POWER_MODE_TRIGGER_LEVEL),
false, mSettingsObserver, UserHandle.USER_ALL);
+ resolver.registerContentObserver(Settings.Global.getUriFor(
+ Settings.Global.THEATER_MODE_ON),
+ false, mSettingsObserver, UserHandle.USER_ALL);
// Go.
readConfigurationLocked();
updateSettingsLocked();
@@ -585,6 +594,8 @@ public final class PowerManagerService extends SystemService
com.android.internal.R.bool.config_powerDecoupleInteractiveModeFromDisplay);
mWakeUpWhenPluggedOrUnpluggedConfig = resources.getBoolean(
com.android.internal.R.bool.config_unplugTurnsOnScreen);
+ mWakeUpWhenPluggedOrUnpluggedInTheaterModeConfig = resources.getBoolean(
+ com.android.internal.R.bool.config_allowTheaterModeWakeFromUnplug);
mSuspendWhenScreenOffDueToProximityConfig = resources.getBoolean(
com.android.internal.R.bool.config_suspendWhenScreenOffDueToProximity);
mDreamsSupportedConfig = resources.getBoolean(
@@ -636,6 +647,8 @@ public final class PowerManagerService extends SystemService
UserHandle.USER_CURRENT);
mStayOnWhilePluggedInSetting = Settings.Global.getInt(resolver,
Settings.Global.STAY_ON_WHILE_PLUGGED_IN, BatteryManager.BATTERY_PLUGGED_AC);
+ mTheaterModeEnabled = Settings.Global.getInt(mContext.getContentResolver(),
+ Settings.Global.THEATER_MODE_ON, 0) == 1;
final int oldScreenBrightnessSetting = mScreenBrightnessSetting;
mScreenBrightnessSetting = Settings.System.getIntForUser(resolver,
@@ -1334,6 +1347,11 @@ public final class PowerManagerService extends SystemService
return false;
}
+ // Don't wake while theater mode is enabled.
+ if (mTheaterModeEnabled && !mWakeUpWhenPluggedOrUnpluggedInTheaterModeConfig) {
+ return false;
+ }
+
// Otherwise wake up!
return true;
}
@@ -2360,6 +2378,10 @@ public final class PowerManagerService extends SystemService
+ mDecoupleHalInteractiveModeFromDisplayConfig);
pw.println(" mWakeUpWhenPluggedOrUnpluggedConfig="
+ mWakeUpWhenPluggedOrUnpluggedConfig);
+ pw.println(" mWakeUpWhenPluggedOrUnpluggedInTheaterModeConfig="
+ + mWakeUpWhenPluggedOrUnpluggedInTheaterModeConfig);
+ pw.println(" mTheaterModeEnabled="
+ + mTheaterModeEnabled);
pw.println(" mSuspendWhenScreenOffDueToProximityConfig="
+ mSuspendWhenScreenOffDueToProximityConfig);
pw.println(" mDreamsSupportedConfig=" + mDreamsSupportedConfig);
diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/android/server/wm/WindowManagerService.java
index 837672a..e8d446a 100644
--- a/services/core/java/com/android/server/wm/WindowManagerService.java
+++ b/services/core/java/com/android/server/wm/WindowManagerService.java
@@ -619,6 +619,9 @@ public class WindowManagerService extends IWindowManager.Stub
boolean mTurnOnScreen;
+ // Whether or not a layout can cause a wake up when theater mode is enabled.
+ boolean mAllowTheaterModeWakeFromLayout;
+
DragState mDragState = null;
// For frozen screen animations.
@@ -881,6 +884,9 @@ public class WindowManagerService extends IWindowManager.Stub
mAnimator = new WindowAnimator(this);
+ mAllowTheaterModeWakeFromLayout = context.getResources().getBoolean(
+ com.android.internal.R.bool.config_allowTheaterModeWakeFromWindowLayout);
+
LocalServices.addService(WindowManagerInternal.class, new LocalService());
initPolicy();
@@ -9954,8 +9960,12 @@ public class WindowManagerService extends IWindowManager.Stub
}
if (mTurnOnScreen) {
- if (DEBUG_VISIBILITY) Slog.v(TAG, "Turning screen on after layout!");
- mPowerManager.wakeUp(SystemClock.uptimeMillis());
+ if (mAllowTheaterModeWakeFromLayout
+ || Settings.Global.getInt(mContext.getContentResolver(),
+ Settings.Global.THEATER_MODE_ON, 0) == 0) {
+ if (DEBUG_VISIBILITY) Slog.v(TAG, "Turning screen on after layout!");
+ mPowerManager.wakeUp(SystemClock.uptimeMillis());
+ }
mTurnOnScreen = false;
}