Loading services/core/java/com/android/server/DeviceIdleController.java +42 −1 Original line number Diff line number Diff line Loading @@ -141,6 +141,8 @@ public class DeviceIdleController extends SystemService private boolean mHasNetworkLocation; private Location mLastGenericLocation; private Location mLastGpsLocation; // Current locked state of the screen private boolean mScreenLocked; /** Device is currently active. */ private static final int STATE_ACTIVE = 0; Loading @@ -156,6 +158,7 @@ public class DeviceIdleController extends SystemService private static final int STATE_IDLE = 5; /** Device is in the idle state, but temporarily out of idle to do regular maintenance. */ private static final int STATE_IDLE_MAINTENANCE = 6; private static String stateToString(int state) { switch (state) { case STATE_ACTIVE: return "ACTIVE"; Loading Loading @@ -547,6 +550,11 @@ public class DeviceIdleController extends SystemService "sms_temp_app_whitelist_duration"; private static final String KEY_NOTIFICATION_WHITELIST_DURATION = "notification_whitelist_duration"; /** * Whether to wait for the user to unlock the device before causing screen-on to * exit doze. Default = true */ private static final String KEY_WAIT_FOR_UNLOCK = "wait_for_unlock"; /** * This is the time, after becoming inactive, that we go in to the first Loading Loading @@ -765,6 +773,8 @@ public class DeviceIdleController extends SystemService */ public long NOTIFICATION_WHITELIST_DURATION; public boolean WAIT_FOR_UNLOCK; private final ContentResolver mResolver; private final boolean mSmallBatteryDevice; private final KeyValueListParser mParser = new KeyValueListParser(','); Loading Loading @@ -855,6 +865,7 @@ public class DeviceIdleController extends SystemService KEY_SMS_TEMP_APP_WHITELIST_DURATION, 20 * 1000L); NOTIFICATION_WHITELIST_DURATION = mParser.getDurationMillis( KEY_NOTIFICATION_WHITELIST_DURATION, 30 * 1000L); WAIT_FOR_UNLOCK = mParser.getBoolean(KEY_WAIT_FOR_UNLOCK, false); } } Loading Loading @@ -962,6 +973,9 @@ public class DeviceIdleController extends SystemService pw.print(" "); pw.print(KEY_NOTIFICATION_WHITELIST_DURATION); pw.print("="); TimeUtils.formatDuration(NOTIFICATION_WHITELIST_DURATION, pw); pw.println(); pw.print(" "); pw.print(KEY_WAIT_FOR_UNLOCK); pw.print("="); pw.println(WAIT_FOR_UNLOCK); } } Loading Loading @@ -1340,6 +1354,19 @@ public class DeviceIdleController extends SystemService } } private ActivityManagerInternal.ScreenObserver mScreenObserver = new ActivityManagerInternal.ScreenObserver() { @Override public void onAwakeStateChanged(boolean isAwake) { } @Override public void onKeyguardStateChanged(boolean isShowing) { synchronized (DeviceIdleController.this) { DeviceIdleController.this.keyguardShowingLocked(isShowing); } } }; public DeviceIdleController(Context context) { super(context); mConfigFile = new AtomicFile(new File(getSystemDir(), "deviceidle.xml")); Loading Loading @@ -1406,6 +1433,7 @@ public class DeviceIdleController extends SystemService mNetworkConnected = true; mScreenOn = true; mScreenLocked = false; // Start out assuming we are charging. If we aren't, we will at least get // a battery update the next time the level drops. mCharging = true; Loading Loading @@ -1501,6 +1529,8 @@ public class DeviceIdleController extends SystemService mLocalActivityManager.setDeviceIdleWhitelist(mPowerSaveWhitelistAllAppIdArray); mLocalPowerManager.setDeviceIdleWhitelist(mPowerSaveWhitelistAllAppIdArray); mLocalActivityManager.registerScreenObserver(mScreenObserver); passWhiteListToForceAppStandbyTrackerLocked(); updateInteractivityLocked(); } Loading Loading @@ -1976,7 +2006,7 @@ public class DeviceIdleController extends SystemService } } else if (screenOn) { mScreenOn = true; if (!mForceIdle) { if (!mForceIdle && (!mScreenLocked || !mConstants.WAIT_FOR_UNLOCK)) { becomeActiveLocked("screen", Process.myUid()); } } Loading @@ -1997,6 +2027,16 @@ public class DeviceIdleController extends SystemService } } void keyguardShowingLocked(boolean showing) { if (DEBUG) Slog.i(TAG, "keyguardShowing=" + showing); if (mScreenLocked != showing) { mScreenLocked = showing; if (mScreenOn && !mForceIdle && !mScreenLocked) { becomeActiveLocked("unlocked", Process.myUid()); } } } void scheduleReportActiveLocked(String activeReason, int activeUid) { Message msg = mHandler.obtainMessage(MSG_REPORT_ACTIVE, activeUid, 0, activeReason); mHandler.sendMessage(msg); Loading Loading @@ -3308,6 +3348,7 @@ public class DeviceIdleController extends SystemService pw.print(" mForceIdle="); pw.println(mForceIdle); pw.print(" mMotionSensor="); pw.println(mMotionSensor); pw.print(" mScreenOn="); pw.println(mScreenOn); pw.print(" mScreenLocked="); pw.println(mScreenLocked); pw.print(" mNetworkConnected="); pw.println(mNetworkConnected); pw.print(" mCharging="); pw.println(mCharging); pw.print(" mMotionActive="); pw.println(mMotionListener.active); Loading services/core/java/com/android/server/notification/NotificationManagerService.java +16 −0 Original line number Diff line number Diff line Loading @@ -111,6 +111,7 @@ import android.os.Environment; import android.os.Handler; import android.os.HandlerThread; import android.os.IBinder; import android.os.IDeviceIdleController; import android.os.IInterface; import android.os.Looper; import android.os.Message; Loading Loading @@ -286,6 +287,7 @@ public class NotificationManagerService extends SystemService { private AlarmManager mAlarmManager; private ICompanionDeviceManager mCompanionManager; private AccessibilityManager mAccessibilityManager; private IDeviceIdleController mDeviceIdleController; final IBinder mForegroundToken = new Binder(); private WorkerHandler mHandler; Loading Loading @@ -659,6 +661,7 @@ public class NotificationManagerService extends SystemService { @Override public void onNotificationClick(int callingUid, int callingPid, String key) { exitIdle(); synchronized (mNotificationLock) { NotificationRecord r = mNotificationsByKey.get(key); if (r == null) { Loading @@ -683,6 +686,7 @@ public class NotificationManagerService extends SystemService { @Override public void onNotificationActionClick(int callingUid, int callingPid, String key, int actionIndex) { exitIdle(); synchronized (mNotificationLock) { NotificationRecord r = mNotificationsByKey.get(key); if (r == null) { Loading Loading @@ -812,6 +816,7 @@ public class NotificationManagerService extends SystemService { @Override public void onNotificationDirectReplied(String key) { exitIdle(); synchronized (mNotificationLock) { NotificationRecord r = mNotificationsByKey.get(key); if (r != null) { Loading Loading @@ -1280,6 +1285,8 @@ public class NotificationManagerService extends SystemService { mAlarmManager = (AlarmManager) getContext().getSystemService(Context.ALARM_SERVICE); mCompanionManager = companionManager; mActivityManager = activityManager; mDeviceIdleController = IDeviceIdleController.Stub.asInterface( ServiceManager.getService(Context.DEVICE_IDLE_CONTROLLER)); mHandler = new WorkerHandler(looper); mRankingThread.start(); Loading Loading @@ -1533,6 +1540,15 @@ public class NotificationManagerService extends SystemService { sendRegisteredOnlyBroadcast(NotificationManager.ACTION_EFFECTS_SUPPRESSOR_CHANGED); } private void exitIdle() { try { if (mDeviceIdleController != null) { mDeviceIdleController.exitIdle("notification interaction"); } } catch (RemoteException e) { } } private void updateNotificationChannelInt(String pkg, int uid, NotificationChannel channel, boolean fromListener) { if (channel.getImportance() == NotificationManager.IMPORTANCE_NONE) { Loading services/tests/uiservicestests/AndroidManifest.xml +1 −0 Original line number Diff line number Diff line Loading @@ -26,6 +26,7 @@ <uses-permission android:name="android.permission.READ_CONTACTS" /> <uses-permission android:name="android.permission.STATUS_BAR_SERVICE" /> <uses-permission android:name="android.permission.ACCESS_VOICE_INTERACTION_SERVICE" /> <uses-permission android:name="android.permission.DEVICE_POWER" /> <application> <uses-library android:name="android.test.runner" /> Loading Loading
services/core/java/com/android/server/DeviceIdleController.java +42 −1 Original line number Diff line number Diff line Loading @@ -141,6 +141,8 @@ public class DeviceIdleController extends SystemService private boolean mHasNetworkLocation; private Location mLastGenericLocation; private Location mLastGpsLocation; // Current locked state of the screen private boolean mScreenLocked; /** Device is currently active. */ private static final int STATE_ACTIVE = 0; Loading @@ -156,6 +158,7 @@ public class DeviceIdleController extends SystemService private static final int STATE_IDLE = 5; /** Device is in the idle state, but temporarily out of idle to do regular maintenance. */ private static final int STATE_IDLE_MAINTENANCE = 6; private static String stateToString(int state) { switch (state) { case STATE_ACTIVE: return "ACTIVE"; Loading Loading @@ -547,6 +550,11 @@ public class DeviceIdleController extends SystemService "sms_temp_app_whitelist_duration"; private static final String KEY_NOTIFICATION_WHITELIST_DURATION = "notification_whitelist_duration"; /** * Whether to wait for the user to unlock the device before causing screen-on to * exit doze. Default = true */ private static final String KEY_WAIT_FOR_UNLOCK = "wait_for_unlock"; /** * This is the time, after becoming inactive, that we go in to the first Loading Loading @@ -765,6 +773,8 @@ public class DeviceIdleController extends SystemService */ public long NOTIFICATION_WHITELIST_DURATION; public boolean WAIT_FOR_UNLOCK; private final ContentResolver mResolver; private final boolean mSmallBatteryDevice; private final KeyValueListParser mParser = new KeyValueListParser(','); Loading Loading @@ -855,6 +865,7 @@ public class DeviceIdleController extends SystemService KEY_SMS_TEMP_APP_WHITELIST_DURATION, 20 * 1000L); NOTIFICATION_WHITELIST_DURATION = mParser.getDurationMillis( KEY_NOTIFICATION_WHITELIST_DURATION, 30 * 1000L); WAIT_FOR_UNLOCK = mParser.getBoolean(KEY_WAIT_FOR_UNLOCK, false); } } Loading Loading @@ -962,6 +973,9 @@ public class DeviceIdleController extends SystemService pw.print(" "); pw.print(KEY_NOTIFICATION_WHITELIST_DURATION); pw.print("="); TimeUtils.formatDuration(NOTIFICATION_WHITELIST_DURATION, pw); pw.println(); pw.print(" "); pw.print(KEY_WAIT_FOR_UNLOCK); pw.print("="); pw.println(WAIT_FOR_UNLOCK); } } Loading Loading @@ -1340,6 +1354,19 @@ public class DeviceIdleController extends SystemService } } private ActivityManagerInternal.ScreenObserver mScreenObserver = new ActivityManagerInternal.ScreenObserver() { @Override public void onAwakeStateChanged(boolean isAwake) { } @Override public void onKeyguardStateChanged(boolean isShowing) { synchronized (DeviceIdleController.this) { DeviceIdleController.this.keyguardShowingLocked(isShowing); } } }; public DeviceIdleController(Context context) { super(context); mConfigFile = new AtomicFile(new File(getSystemDir(), "deviceidle.xml")); Loading Loading @@ -1406,6 +1433,7 @@ public class DeviceIdleController extends SystemService mNetworkConnected = true; mScreenOn = true; mScreenLocked = false; // Start out assuming we are charging. If we aren't, we will at least get // a battery update the next time the level drops. mCharging = true; Loading Loading @@ -1501,6 +1529,8 @@ public class DeviceIdleController extends SystemService mLocalActivityManager.setDeviceIdleWhitelist(mPowerSaveWhitelistAllAppIdArray); mLocalPowerManager.setDeviceIdleWhitelist(mPowerSaveWhitelistAllAppIdArray); mLocalActivityManager.registerScreenObserver(mScreenObserver); passWhiteListToForceAppStandbyTrackerLocked(); updateInteractivityLocked(); } Loading Loading @@ -1976,7 +2006,7 @@ public class DeviceIdleController extends SystemService } } else if (screenOn) { mScreenOn = true; if (!mForceIdle) { if (!mForceIdle && (!mScreenLocked || !mConstants.WAIT_FOR_UNLOCK)) { becomeActiveLocked("screen", Process.myUid()); } } Loading @@ -1997,6 +2027,16 @@ public class DeviceIdleController extends SystemService } } void keyguardShowingLocked(boolean showing) { if (DEBUG) Slog.i(TAG, "keyguardShowing=" + showing); if (mScreenLocked != showing) { mScreenLocked = showing; if (mScreenOn && !mForceIdle && !mScreenLocked) { becomeActiveLocked("unlocked", Process.myUid()); } } } void scheduleReportActiveLocked(String activeReason, int activeUid) { Message msg = mHandler.obtainMessage(MSG_REPORT_ACTIVE, activeUid, 0, activeReason); mHandler.sendMessage(msg); Loading Loading @@ -3308,6 +3348,7 @@ public class DeviceIdleController extends SystemService pw.print(" mForceIdle="); pw.println(mForceIdle); pw.print(" mMotionSensor="); pw.println(mMotionSensor); pw.print(" mScreenOn="); pw.println(mScreenOn); pw.print(" mScreenLocked="); pw.println(mScreenLocked); pw.print(" mNetworkConnected="); pw.println(mNetworkConnected); pw.print(" mCharging="); pw.println(mCharging); pw.print(" mMotionActive="); pw.println(mMotionListener.active); Loading
services/core/java/com/android/server/notification/NotificationManagerService.java +16 −0 Original line number Diff line number Diff line Loading @@ -111,6 +111,7 @@ import android.os.Environment; import android.os.Handler; import android.os.HandlerThread; import android.os.IBinder; import android.os.IDeviceIdleController; import android.os.IInterface; import android.os.Looper; import android.os.Message; Loading Loading @@ -286,6 +287,7 @@ public class NotificationManagerService extends SystemService { private AlarmManager mAlarmManager; private ICompanionDeviceManager mCompanionManager; private AccessibilityManager mAccessibilityManager; private IDeviceIdleController mDeviceIdleController; final IBinder mForegroundToken = new Binder(); private WorkerHandler mHandler; Loading Loading @@ -659,6 +661,7 @@ public class NotificationManagerService extends SystemService { @Override public void onNotificationClick(int callingUid, int callingPid, String key) { exitIdle(); synchronized (mNotificationLock) { NotificationRecord r = mNotificationsByKey.get(key); if (r == null) { Loading @@ -683,6 +686,7 @@ public class NotificationManagerService extends SystemService { @Override public void onNotificationActionClick(int callingUid, int callingPid, String key, int actionIndex) { exitIdle(); synchronized (mNotificationLock) { NotificationRecord r = mNotificationsByKey.get(key); if (r == null) { Loading Loading @@ -812,6 +816,7 @@ public class NotificationManagerService extends SystemService { @Override public void onNotificationDirectReplied(String key) { exitIdle(); synchronized (mNotificationLock) { NotificationRecord r = mNotificationsByKey.get(key); if (r != null) { Loading Loading @@ -1280,6 +1285,8 @@ public class NotificationManagerService extends SystemService { mAlarmManager = (AlarmManager) getContext().getSystemService(Context.ALARM_SERVICE); mCompanionManager = companionManager; mActivityManager = activityManager; mDeviceIdleController = IDeviceIdleController.Stub.asInterface( ServiceManager.getService(Context.DEVICE_IDLE_CONTROLLER)); mHandler = new WorkerHandler(looper); mRankingThread.start(); Loading Loading @@ -1533,6 +1540,15 @@ public class NotificationManagerService extends SystemService { sendRegisteredOnlyBroadcast(NotificationManager.ACTION_EFFECTS_SUPPRESSOR_CHANGED); } private void exitIdle() { try { if (mDeviceIdleController != null) { mDeviceIdleController.exitIdle("notification interaction"); } } catch (RemoteException e) { } } private void updateNotificationChannelInt(String pkg, int uid, NotificationChannel channel, boolean fromListener) { if (channel.getImportance() == NotificationManager.IMPORTANCE_NONE) { Loading
services/tests/uiservicestests/AndroidManifest.xml +1 −0 Original line number Diff line number Diff line Loading @@ -26,6 +26,7 @@ <uses-permission android:name="android.permission.READ_CONTACTS" /> <uses-permission android:name="android.permission.STATUS_BAR_SERVICE" /> <uses-permission android:name="android.permission.ACCESS_VOICE_INTERACTION_SERVICE" /> <uses-permission android:name="android.permission.DEVICE_POWER" /> <application> <uses-library android:name="android.test.runner" /> Loading