Restricting UiModeManager#setNightMode
Apps have been trying to set their night modes by calling this
function but they end up toggling the system-wide UiMode.
From now on, an error message will be logged if the app doesn't
hold the right permission.
Change-Id: Ie62c870b84190a62321a05a007cd2bf3dc9851f8
Fixes: 113605757
Test: manual. open app that tries to trigger night mode
diff --git a/core/res/res/values/config.xml b/core/res/res/values/config.xml
index 1404383..9462c81 100644
--- a/core/res/res/values/config.xml
+++ b/core/res/res/values/config.xml
@@ -913,7 +913,7 @@
<!-- Control whether to lock day/night mode change from normal application. When it is
true, day / night mode change is only allowed to apps with MODIFY_DAY_NIGHT_MODE
permission. -->
- <bool name="config_lockDayNightMode">false</bool>
+ <bool name="config_lockDayNightMode">true</bool>
<!-- Control the default night mode to use when there is no other mode override set.
One of the following values (see UiModeManager.java):
diff --git a/services/core/java/com/android/server/UiModeManagerService.java b/services/core/java/com/android/server/UiModeManagerService.java
index cb03255..01be691 100644
--- a/services/core/java/com/android/server/UiModeManagerService.java
+++ b/services/core/java/com/android/server/UiModeManagerService.java
@@ -303,11 +303,10 @@
@Override
public void setNightMode(int mode) {
- if (isNightModeLocked() && (getContext().checkCallingOrSelfPermission(
+ if (isNightModeLocked() && (getContext().checkCallingOrSelfPermission(
android.Manifest.permission.MODIFY_DAY_NIGHT_MODE)
!= PackageManager.PERMISSION_GRANTED)) {
- Slog.e(TAG,
- "Night mode locked, requires MODIFY_DAY_NIGHT_MODE permission");
+ Slog.e(TAG, "Night mode locked, requires MODIFY_DAY_NIGHT_MODE permission");
return;
}
switch (mode) {