Skip to content

Commit 7e37df5

Browse files
committed
Tie screen saver to the screen off timeout.
The window manager now monitors the plug state; the screen saver will never be automatically started if the device is running off battery. Change-Id: Ib1064d9cdd540238957df3ba7020303b0f6943c2
1 parent aefc0ed commit 7e37df5

File tree

1 file changed

+44
-4
lines changed

1 file changed

+44
-4
lines changed

policy/src/com/android/internal/policy/impl/PhoneWindowManager.java

Lines changed: 44 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@
3939
import android.graphics.PixelFormat;
4040
import android.graphics.Rect;
4141
import android.graphics.RectF;
42+
import android.os.BatteryManager;
4243
import android.os.Binder;
4344
import android.os.Bundle;
4445
import android.os.Handler;
@@ -162,6 +163,9 @@ public class PhoneWindowManager implements WindowManagerPolicy {
162163
static final boolean ENABLE_CAR_DOCK_HOME_CAPTURE = true;
163164
static final boolean ENABLE_DESK_DOCK_HOME_CAPTURE = false;
164165

166+
// Should screen savers use their own timeout, or the SCREEN_OFF_TIMEOUT?
167+
static final boolean SEPARATE_TIMEOUT_FOR_SCREEN_SAVER = false;
168+
165169
static final int LONG_PRESS_POWER_NOTHING = 0;
166170
static final int LONG_PRESS_POWER_GLOBAL_ACTIONS = 1;
167171
static final int LONG_PRESS_POWER_SHUT_OFF = 2;
@@ -397,6 +401,7 @@ public void handleMotion(MotionEvent event, InputQueue.FinishedCallback finished
397401
// visual screen saver support
398402
int mScreenSaverTimeout = 0;
399403
boolean mScreenSaverEnabled = true;
404+
boolean mPluggedIn;
400405

401406
// Behavior of ENDCALL Button. (See Settings.System.END_BUTTON_BEHAVIOR.)
402407
int mEndcallBehavior;
@@ -460,8 +465,10 @@ void observe() {
460465
Settings.Secure.DEFAULT_INPUT_METHOD), false, this);
461466
resolver.registerContentObserver(Settings.System.getUriFor(
462467
"fancy_rotation_anim"), false, this);
463-
resolver.registerContentObserver(Settings.Secure.getUriFor(
464-
Settings.Secure.DREAM_TIMEOUT), false, this);
468+
if (SEPARATE_TIMEOUT_FOR_SCREEN_SAVER) {
469+
resolver.registerContentObserver(Settings.Secure.getUriFor(
470+
Settings.Secure.DREAM_TIMEOUT), false, this);
471+
} // otherwise SCREEN_OFF_TIMEOUT will do nicely
465472
updateSettings();
466473
}
467474

@@ -768,6 +775,15 @@ public void init(Context context, IWindowManager windowManager,
768775
mDockMode = intent.getIntExtra(Intent.EXTRA_DOCK_STATE,
769776
Intent.EXTRA_DOCK_STATE_UNDOCKED);
770777
}
778+
779+
// watch the plug to know whether to trigger the screen saver
780+
filter = new IntentFilter();
781+
filter.addAction(Intent.ACTION_BATTERY_CHANGED);
782+
intent = context.registerReceiver(mPowerReceiver, filter);
783+
if (intent != null) {
784+
mPluggedIn = (0 != intent.getIntExtra(BatteryManager.EXTRA_PLUGGED, 0));
785+
}
786+
771787
mVibrator = new Vibrator();
772788
mLongPressVibePattern = getLongIntArray(mContext.getResources(),
773789
com.android.internal.R.array.config_longPressVibePattern);
@@ -917,8 +933,18 @@ public void updateSettings() {
917933
updateRotation = true;
918934
}
919935

920-
mScreenSaverTimeout = Settings.Secure.getInt(resolver,
921-
Settings.Secure.DREAM_TIMEOUT, 0);
936+
if (SEPARATE_TIMEOUT_FOR_SCREEN_SAVER) {
937+
mScreenSaverTimeout = Settings.Secure.getInt(resolver,
938+
Settings.Secure.DREAM_TIMEOUT, 0);
939+
} else {
940+
mScreenSaverTimeout = Settings.System.getInt(resolver,
941+
Settings.System.SCREEN_OFF_TIMEOUT, 0);
942+
if (mScreenSaverTimeout > 0) {
943+
// We actually want to activate the screensaver just before the
944+
// power manager's screen timeout
945+
mScreenSaverTimeout -= 5000;
946+
}
947+
}
922948
updateScreenSaverTimeoutLocked();
923949
}
924950
if (updateRotation) {
@@ -2954,6 +2980,15 @@ public void onReceive(Context context, Intent intent) {
29542980
}
29552981
};
29562982

2983+
BroadcastReceiver mPowerReceiver = new BroadcastReceiver() {
2984+
public void onReceive(Context context, Intent intent) {
2985+
if (Intent.ACTION_BATTERY_CHANGED.equals(intent.getAction())) {
2986+
mPluggedIn = (0 != intent.getIntExtra(BatteryManager.EXTRA_PLUGGED, 0));
2987+
if (localLOGV) Log.v(TAG, "BATTERY_CHANGED: " + intent + " plugged=" + mPluggedIn);
2988+
}
2989+
}
2990+
};
2991+
29572992
/** {@inheritDoc} */
29582993
public void screenTurnedOff(int why) {
29592994
EventLog.writeEvent(70000, 0);
@@ -3420,8 +3455,13 @@ public void run() {
34203455
Log.w(TAG, "mScreenSaverActivator ran, but the screensaver should not be showing. Who's driving this thing?");
34213456
return;
34223457
}
3458+
if (!mPluggedIn) {
3459+
if (localLOGV) Log.v(TAG, "mScreenSaverActivator: not running screen saver when not plugged in");
3460+
return;
3461+
}
34233462

34243463
if (localLOGV) Log.v(TAG, "mScreenSaverActivator entering dreamland");
3464+
34253465
try {
34263466
String component = Settings.Secure.getString(
34273467
mContext.getContentResolver(), Settings.Secure.DREAM_COMPONENT);

0 commit comments

Comments
 (0)