Loading services/core/java/com/android/server/power/PowerManagerService.java +5 −46 Original line number Diff line number Diff line Loading @@ -42,8 +42,6 @@ import android.annotation.UserIdInt; import android.app.ActivityManager; import android.app.AppOpsManager; import android.app.SynchronousUserSwitchObserver; import android.compat.annotation.ChangeId; import android.compat.annotation.EnabledSince; import android.content.BroadcastReceiver; import android.content.ContentResolver; import android.content.Context; Loading @@ -64,7 +62,6 @@ import android.os.BatteryManager; import android.os.BatteryManagerInternal; import android.os.BatterySaverPolicyConfig; import android.os.Binder; import android.os.Build; import android.os.Handler; import android.os.HandlerExecutor; import android.os.IBinder; Loading Loading @@ -127,7 +124,6 @@ import com.android.server.UiThread; import com.android.server.UserspaceRebootLogger; import com.android.server.Watchdog; import com.android.server.am.BatteryStatsService; import com.android.server.compat.PlatformCompat; import com.android.server.lights.LightsManager; import com.android.server.lights.LogicalLight; import com.android.server.policy.WindowManagerPolicy; Loading Loading @@ -284,17 +280,6 @@ public final class PowerManagerService extends SystemService */ private static final long ENHANCED_DISCHARGE_PREDICTION_BROADCAST_MIN_DELAY_MS = 60 * 1000L; /** * Apps targeting Android U and above need to define * {@link android.Manifest.permission#TURN_SCREEN_ON} in their manifest for * {@link android.os.PowerManager#ACQUIRE_CAUSES_WAKEUP} to have any effect. * Note that most applications should use {@link android.R.attr#turnScreenOn} or * {@link android.app.Activity#setTurnScreenOn(boolean)} instead, as this prevents the * previous foreground app from being resumed first when the screen turns on. */ @ChangeId @EnabledSince(targetSdkVersion = Build.VERSION_CODES.UPSIDE_DOWN_CAKE) public static final long REQUIRE_TURN_SCREEN_ON_PERMISSION = 216114297L; /** Reason ID for holding display suspend blocker. */ private static final String HOLDING_DISPLAY_SUSPEND_BLOCKER = "holding display"; Loading @@ -318,7 +303,6 @@ public final class PowerManagerService extends SystemService private final SystemPropertiesWrapper mSystemProperties; private final Clock mClock; private final Injector mInjector; private final PlatformCompat mPlatformCompat; private AppOpsManager mAppOpsManager; private LightsManager mLightsManager; Loading Loading @@ -1012,11 +996,6 @@ public final class PowerManagerService extends SystemService public void set(String key, String val) { SystemProperties.set(key, val); } @Override public boolean getBoolean(String key, boolean def) { return SystemProperties.getBoolean(key, def); } }; } Loading Loading @@ -1053,10 +1032,6 @@ public final class PowerManagerService extends SystemService AppOpsManager createAppOpsManager(Context context) { return context.getSystemService(AppOpsManager.class); } PlatformCompat createPlatformCompat(Context context) { return context.getSystemService(PlatformCompat.class); } } final Constants mConstants; Loading Loading @@ -1114,8 +1089,6 @@ public final class PowerManagerService extends SystemService mAppOpsManager = injector.createAppOpsManager(mContext); mPlatformCompat = injector.createPlatformCompat(mContext); mPowerGroupWakefulnessChangeListener = new PowerGroupWakefulnessChangeListener(); // Save brightness values: Loading Loading @@ -1626,28 +1599,14 @@ public final class PowerManagerService extends SystemService } if (mAppOpsManager.checkOpNoThrow(AppOpsManager.OP_TURN_SCREEN_ON, opUid, opPackageName) == AppOpsManager.MODE_ALLOWED) { if (mPlatformCompat.isChangeEnabledByPackageName(REQUIRE_TURN_SCREEN_ON_PERMISSION, opPackageName, UserHandle.getUserId(opUid))) { if (mContext.checkCallingOrSelfPermission( android.Manifest.permission.TURN_SCREEN_ON) if (mContext.checkCallingOrSelfPermission(android.Manifest.permission.TURN_SCREEN_ON) == PackageManager.PERMISSION_GRANTED) { if (DEBUG_SPEW) { Slog.d(TAG, "Allowing device wake-up from app " + opPackageName); } return true; } } else { // android.permission.TURN_SCREEN_ON has only been introduced in Android U, only // check for appOp for apps targeting lower SDK versions if (DEBUG_SPEW) { Slog.d(TAG, "Allowing device wake-up from app with " + "REQUIRE_TURN_SCREEN_ON_PERMISSION disabled " + opPackageName); } Slog.i(TAG, "Allowing device wake-up from app " + opPackageName); return true; } } if (PowerProperties.permissionless_turn_screen_on().orElse(true)) { Slog.d(TAG, "Device wake-up will be denied without android.permission.TURN_SCREEN_ON"); if (PowerProperties.permissionless_turn_screen_on().orElse(false)) { Slog.d(TAG, "Device wake-up allowed by debug.power.permissionless_turn_screen_on"); return true; } Slog.w(TAG, "Not allowing device wake-up for " + opPackageName); Loading services/core/java/com/android/server/power/SystemPropertiesWrapper.java +0 −15 Original line number Diff line number Diff line Loading @@ -48,19 +48,4 @@ interface SystemPropertiesWrapper { * SELinux. libc will log the underlying reason. */ void set(@NonNull String key, @Nullable String val); /** * Get the value for the given {@code key}, returned as a boolean. * Values 'n', 'no', '0', 'false' or 'off' are considered false. * Values 'y', 'yes', '1', 'true' or 'on' are considered true. * (case sensitive). * If the key does not exist, or has any other value, then the default * result is returned. * * @param key the key to lookup * @param def a default value to return * @return the key parsed as a boolean, or def if the key isn't found or is * not able to be parsed as a boolean. */ boolean getBoolean(@NonNull String key, boolean def); } services/tests/servicestests/src/com/android/server/power/PowerManagerServiceTest.java +2 −32 Original line number Diff line number Diff line Loading @@ -87,7 +87,6 @@ import com.android.internal.app.IBatteryStats; import com.android.internal.util.test.FakeSettingsProvider; import com.android.server.LocalServices; import com.android.server.SystemService; import com.android.server.compat.PlatformCompat; import com.android.server.lights.LightsManager; import com.android.server.policy.WindowManagerPolicy; import com.android.server.power.PowerManagerService.BatteryReceiver; Loading Loading @@ -147,7 +146,6 @@ public class PowerManagerServiceTest { @Mock private SystemPropertiesWrapper mSystemPropertiesMock; @Mock private AppOpsManager mAppOpsManagerMock; @Mock private LowPowerStandbyController mLowPowerStandbyControllerMock; @Mock private PlatformCompat mPlatformCompat; @Mock private InattentiveSleepWarningController mInattentiveSleepWarningControllerMock; Loading Loading @@ -321,11 +319,6 @@ public class PowerManagerServiceTest { AppOpsManager createAppOpsManager(Context context) { return mAppOpsManagerMock; } @Override PlatformCompat createPlatformCompat(Context context) { return mPlatformCompat; } }); return mService; } Loading Loading @@ -505,9 +498,6 @@ public class PowerManagerServiceTest { String packageName = "pkg.name"; when(mAppOpsManagerMock.checkOpNoThrow(AppOpsManager.OP_TURN_SCREEN_ON, Binder.getCallingUid(), packageName)).thenReturn(MODE_ALLOWED); when(mPlatformCompat.isChangeEnabledByPackageName( eq(PowerManagerService.REQUIRE_TURN_SCREEN_ON_PERMISSION), anyString(), anyInt())).thenReturn(true); when(mContextSpy.checkCallingOrSelfPermission( android.Manifest.permission.TURN_SCREEN_ON)).thenReturn( PackageManager.PERMISSION_GRANTED); Loading @@ -532,23 +522,6 @@ public class PowerManagerServiceTest { null /* workSource */, null /* historyTag */, Display.INVALID_DISPLAY, null); assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_AWAKE); mService.getBinderServiceInstance().releaseWakeLock(token, 0 /* flags */); // Verify that on older platforms only the appOp is necessary and the permission isn't // checked when(mPlatformCompat.isChangeEnabledByPackageName( eq(PowerManagerService.REQUIRE_TURN_SCREEN_ON_PERMISSION), anyString(), anyInt())).thenReturn(false); when(mContextSpy.checkCallingOrSelfPermission( android.Manifest.permission.TURN_SCREEN_ON)).thenReturn( PackageManager.PERMISSION_DENIED); forceSleep(); assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_ASLEEP); flags = PowerManager.FULL_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP; mService.getBinderServiceInstance().acquireWakeLock(token, flags, tag, packageName, null /* workSource */, null /* historyTag */, Display.INVALID_DISPLAY, null); assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_AWAKE); mService.getBinderServiceInstance().releaseWakeLock(token, 0 /* flags */); } @Test Loading @@ -568,7 +541,7 @@ public class PowerManagerServiceTest { int flags = PowerManager.FULL_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP; mService.getBinderServiceInstance().acquireWakeLock(token, flags, tag, packageName, null /* workSource */, null /* historyTag */, Display.INVALID_DISPLAY, null); if (PowerProperties.permissionless_turn_screen_on().orElse(true)) { if (PowerProperties.permissionless_turn_screen_on().orElse(false)) { assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_AWAKE); } else { assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_ASLEEP); Loading @@ -577,9 +550,6 @@ public class PowerManagerServiceTest { when(mAppOpsManagerMock.checkOpNoThrow(AppOpsManager.OP_TURN_SCREEN_ON, Binder.getCallingUid(), packageName)).thenReturn(MODE_ALLOWED); when(mPlatformCompat.isChangeEnabledByPackageName( eq(PowerManagerService.REQUIRE_TURN_SCREEN_ON_PERMISSION), anyString(), anyInt())).thenReturn(true); when(mContextSpy.checkCallingOrSelfPermission( android.Manifest.permission.TURN_SCREEN_ON)).thenReturn( PackageManager.PERMISSION_DENIED); Loading @@ -589,7 +559,7 @@ public class PowerManagerServiceTest { flags = PowerManager.FULL_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP; mService.getBinderServiceInstance().acquireWakeLock(token, flags, tag, packageName, null /* workSource */, null /* historyTag */, Display.INVALID_DISPLAY, null); if (PowerProperties.permissionless_turn_screen_on().orElse(true)) { if (PowerProperties.permissionless_turn_screen_on().orElse(false)) { assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_AWAKE); } else { assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_ASLEEP); Loading Loading
services/core/java/com/android/server/power/PowerManagerService.java +5 −46 Original line number Diff line number Diff line Loading @@ -42,8 +42,6 @@ import android.annotation.UserIdInt; import android.app.ActivityManager; import android.app.AppOpsManager; import android.app.SynchronousUserSwitchObserver; import android.compat.annotation.ChangeId; import android.compat.annotation.EnabledSince; import android.content.BroadcastReceiver; import android.content.ContentResolver; import android.content.Context; Loading @@ -64,7 +62,6 @@ import android.os.BatteryManager; import android.os.BatteryManagerInternal; import android.os.BatterySaverPolicyConfig; import android.os.Binder; import android.os.Build; import android.os.Handler; import android.os.HandlerExecutor; import android.os.IBinder; Loading Loading @@ -127,7 +124,6 @@ import com.android.server.UiThread; import com.android.server.UserspaceRebootLogger; import com.android.server.Watchdog; import com.android.server.am.BatteryStatsService; import com.android.server.compat.PlatformCompat; import com.android.server.lights.LightsManager; import com.android.server.lights.LogicalLight; import com.android.server.policy.WindowManagerPolicy; Loading Loading @@ -284,17 +280,6 @@ public final class PowerManagerService extends SystemService */ private static final long ENHANCED_DISCHARGE_PREDICTION_BROADCAST_MIN_DELAY_MS = 60 * 1000L; /** * Apps targeting Android U and above need to define * {@link android.Manifest.permission#TURN_SCREEN_ON} in their manifest for * {@link android.os.PowerManager#ACQUIRE_CAUSES_WAKEUP} to have any effect. * Note that most applications should use {@link android.R.attr#turnScreenOn} or * {@link android.app.Activity#setTurnScreenOn(boolean)} instead, as this prevents the * previous foreground app from being resumed first when the screen turns on. */ @ChangeId @EnabledSince(targetSdkVersion = Build.VERSION_CODES.UPSIDE_DOWN_CAKE) public static final long REQUIRE_TURN_SCREEN_ON_PERMISSION = 216114297L; /** Reason ID for holding display suspend blocker. */ private static final String HOLDING_DISPLAY_SUSPEND_BLOCKER = "holding display"; Loading @@ -318,7 +303,6 @@ public final class PowerManagerService extends SystemService private final SystemPropertiesWrapper mSystemProperties; private final Clock mClock; private final Injector mInjector; private final PlatformCompat mPlatformCompat; private AppOpsManager mAppOpsManager; private LightsManager mLightsManager; Loading Loading @@ -1012,11 +996,6 @@ public final class PowerManagerService extends SystemService public void set(String key, String val) { SystemProperties.set(key, val); } @Override public boolean getBoolean(String key, boolean def) { return SystemProperties.getBoolean(key, def); } }; } Loading Loading @@ -1053,10 +1032,6 @@ public final class PowerManagerService extends SystemService AppOpsManager createAppOpsManager(Context context) { return context.getSystemService(AppOpsManager.class); } PlatformCompat createPlatformCompat(Context context) { return context.getSystemService(PlatformCompat.class); } } final Constants mConstants; Loading Loading @@ -1114,8 +1089,6 @@ public final class PowerManagerService extends SystemService mAppOpsManager = injector.createAppOpsManager(mContext); mPlatformCompat = injector.createPlatformCompat(mContext); mPowerGroupWakefulnessChangeListener = new PowerGroupWakefulnessChangeListener(); // Save brightness values: Loading Loading @@ -1626,28 +1599,14 @@ public final class PowerManagerService extends SystemService } if (mAppOpsManager.checkOpNoThrow(AppOpsManager.OP_TURN_SCREEN_ON, opUid, opPackageName) == AppOpsManager.MODE_ALLOWED) { if (mPlatformCompat.isChangeEnabledByPackageName(REQUIRE_TURN_SCREEN_ON_PERMISSION, opPackageName, UserHandle.getUserId(opUid))) { if (mContext.checkCallingOrSelfPermission( android.Manifest.permission.TURN_SCREEN_ON) if (mContext.checkCallingOrSelfPermission(android.Manifest.permission.TURN_SCREEN_ON) == PackageManager.PERMISSION_GRANTED) { if (DEBUG_SPEW) { Slog.d(TAG, "Allowing device wake-up from app " + opPackageName); } return true; } } else { // android.permission.TURN_SCREEN_ON has only been introduced in Android U, only // check for appOp for apps targeting lower SDK versions if (DEBUG_SPEW) { Slog.d(TAG, "Allowing device wake-up from app with " + "REQUIRE_TURN_SCREEN_ON_PERMISSION disabled " + opPackageName); } Slog.i(TAG, "Allowing device wake-up from app " + opPackageName); return true; } } if (PowerProperties.permissionless_turn_screen_on().orElse(true)) { Slog.d(TAG, "Device wake-up will be denied without android.permission.TURN_SCREEN_ON"); if (PowerProperties.permissionless_turn_screen_on().orElse(false)) { Slog.d(TAG, "Device wake-up allowed by debug.power.permissionless_turn_screen_on"); return true; } Slog.w(TAG, "Not allowing device wake-up for " + opPackageName); Loading
services/core/java/com/android/server/power/SystemPropertiesWrapper.java +0 −15 Original line number Diff line number Diff line Loading @@ -48,19 +48,4 @@ interface SystemPropertiesWrapper { * SELinux. libc will log the underlying reason. */ void set(@NonNull String key, @Nullable String val); /** * Get the value for the given {@code key}, returned as a boolean. * Values 'n', 'no', '0', 'false' or 'off' are considered false. * Values 'y', 'yes', '1', 'true' or 'on' are considered true. * (case sensitive). * If the key does not exist, or has any other value, then the default * result is returned. * * @param key the key to lookup * @param def a default value to return * @return the key parsed as a boolean, or def if the key isn't found or is * not able to be parsed as a boolean. */ boolean getBoolean(@NonNull String key, boolean def); }
services/tests/servicestests/src/com/android/server/power/PowerManagerServiceTest.java +2 −32 Original line number Diff line number Diff line Loading @@ -87,7 +87,6 @@ import com.android.internal.app.IBatteryStats; import com.android.internal.util.test.FakeSettingsProvider; import com.android.server.LocalServices; import com.android.server.SystemService; import com.android.server.compat.PlatformCompat; import com.android.server.lights.LightsManager; import com.android.server.policy.WindowManagerPolicy; import com.android.server.power.PowerManagerService.BatteryReceiver; Loading Loading @@ -147,7 +146,6 @@ public class PowerManagerServiceTest { @Mock private SystemPropertiesWrapper mSystemPropertiesMock; @Mock private AppOpsManager mAppOpsManagerMock; @Mock private LowPowerStandbyController mLowPowerStandbyControllerMock; @Mock private PlatformCompat mPlatformCompat; @Mock private InattentiveSleepWarningController mInattentiveSleepWarningControllerMock; Loading Loading @@ -321,11 +319,6 @@ public class PowerManagerServiceTest { AppOpsManager createAppOpsManager(Context context) { return mAppOpsManagerMock; } @Override PlatformCompat createPlatformCompat(Context context) { return mPlatformCompat; } }); return mService; } Loading Loading @@ -505,9 +498,6 @@ public class PowerManagerServiceTest { String packageName = "pkg.name"; when(mAppOpsManagerMock.checkOpNoThrow(AppOpsManager.OP_TURN_SCREEN_ON, Binder.getCallingUid(), packageName)).thenReturn(MODE_ALLOWED); when(mPlatformCompat.isChangeEnabledByPackageName( eq(PowerManagerService.REQUIRE_TURN_SCREEN_ON_PERMISSION), anyString(), anyInt())).thenReturn(true); when(mContextSpy.checkCallingOrSelfPermission( android.Manifest.permission.TURN_SCREEN_ON)).thenReturn( PackageManager.PERMISSION_GRANTED); Loading @@ -532,23 +522,6 @@ public class PowerManagerServiceTest { null /* workSource */, null /* historyTag */, Display.INVALID_DISPLAY, null); assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_AWAKE); mService.getBinderServiceInstance().releaseWakeLock(token, 0 /* flags */); // Verify that on older platforms only the appOp is necessary and the permission isn't // checked when(mPlatformCompat.isChangeEnabledByPackageName( eq(PowerManagerService.REQUIRE_TURN_SCREEN_ON_PERMISSION), anyString(), anyInt())).thenReturn(false); when(mContextSpy.checkCallingOrSelfPermission( android.Manifest.permission.TURN_SCREEN_ON)).thenReturn( PackageManager.PERMISSION_DENIED); forceSleep(); assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_ASLEEP); flags = PowerManager.FULL_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP; mService.getBinderServiceInstance().acquireWakeLock(token, flags, tag, packageName, null /* workSource */, null /* historyTag */, Display.INVALID_DISPLAY, null); assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_AWAKE); mService.getBinderServiceInstance().releaseWakeLock(token, 0 /* flags */); } @Test Loading @@ -568,7 +541,7 @@ public class PowerManagerServiceTest { int flags = PowerManager.FULL_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP; mService.getBinderServiceInstance().acquireWakeLock(token, flags, tag, packageName, null /* workSource */, null /* historyTag */, Display.INVALID_DISPLAY, null); if (PowerProperties.permissionless_turn_screen_on().orElse(true)) { if (PowerProperties.permissionless_turn_screen_on().orElse(false)) { assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_AWAKE); } else { assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_ASLEEP); Loading @@ -577,9 +550,6 @@ public class PowerManagerServiceTest { when(mAppOpsManagerMock.checkOpNoThrow(AppOpsManager.OP_TURN_SCREEN_ON, Binder.getCallingUid(), packageName)).thenReturn(MODE_ALLOWED); when(mPlatformCompat.isChangeEnabledByPackageName( eq(PowerManagerService.REQUIRE_TURN_SCREEN_ON_PERMISSION), anyString(), anyInt())).thenReturn(true); when(mContextSpy.checkCallingOrSelfPermission( android.Manifest.permission.TURN_SCREEN_ON)).thenReturn( PackageManager.PERMISSION_DENIED); Loading @@ -589,7 +559,7 @@ public class PowerManagerServiceTest { flags = PowerManager.FULL_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP; mService.getBinderServiceInstance().acquireWakeLock(token, flags, tag, packageName, null /* workSource */, null /* historyTag */, Display.INVALID_DISPLAY, null); if (PowerProperties.permissionless_turn_screen_on().orElse(true)) { if (PowerProperties.permissionless_turn_screen_on().orElse(false)) { assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_AWAKE); } else { assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_ASLEEP); Loading