From 1746369a6bcd1a7219e94366b3774bfdfff08fc6 Mon Sep 17 00:00:00 2001 From: keunyoung Date: Wed, 23 Sep 2015 11:33:58 -0700 Subject: [PATCH] allow locking UI mode and block launching car dock for automotive - add config to lock UI mode change: When this is enabled, request to change car mode will be ignored. Apps can check the config using UiModeManager.isUiModeLocked() - add config to lock day / night mode: When this is enabled, apps cannot change day / night mode without having MODIFY_DAY_NIGHT_MODE permission. Apps can check the config using UiModeManager.isNightModeLocked() - add config to disable car dock intent launch for home key and mode change - All new configs have default values which keeps the current behavior. Car products should override the configs to get desirable behavior. bug: 22700993 Change-Id: I351fc53163575d2f523c2d6e886befdb69a5a0c6 --- api/current.txt | 2 + api/system-current.txt | 3 ++ core/java/android/app/IUiModeManager.aidl | 10 ++++ core/java/android/app/UiModeManager.java | 31 +++++++++++ core/res/AndroidManifest.xml | 7 +++ core/res/res/values/config.xml | 16 ++++++ core/res/res/values/symbols.xml | 3 ++ .../android/server/UiModeManagerService.java | 54 +++++++++++++++++-- .../server/policy/PhoneWindowManager.java | 14 +++-- 9 files changed, 131 insertions(+), 9 deletions(-) diff --git a/api/current.txt b/api/current.txt index 96ecad617a917..ba86137251099 100644 --- a/api/current.txt +++ b/api/current.txt @@ -5491,6 +5491,8 @@ package android.app { method public void enableCarMode(int); method public int getCurrentModeType(); method public int getNightMode(); + method public boolean isNightModeLocked(); + method public boolean isUiModeLocked(); method public void setNightMode(int); field public static java.lang.String ACTION_ENTER_CAR_MODE; field public static java.lang.String ACTION_ENTER_DESK_MODE; diff --git a/api/system-current.txt b/api/system-current.txt index 0605851f058d9..888f347c9e5d7 100644 --- a/api/system-current.txt +++ b/api/system-current.txt @@ -131,6 +131,7 @@ package android { field public static final java.lang.String MODIFY_AUDIO_ROUTING = "android.permission.MODIFY_AUDIO_ROUTING"; field public static final java.lang.String MODIFY_AUDIO_SETTINGS = "android.permission.MODIFY_AUDIO_SETTINGS"; field public static final java.lang.String MODIFY_CELL_BROADCASTS = "android.permission.MODIFY_CELL_BROADCASTS"; + field public static final java.lang.String MODIFY_DAY_NIGHT_MODE = "android.permission.MODIFY_DAY_NIGHT_MODE"; field public static final java.lang.String MODIFY_NETWORK_ACCOUNTING = "android.permission.MODIFY_NETWORK_ACCOUNTING"; field public static final java.lang.String MODIFY_PARENTAL_CONTROLS = "android.permission.MODIFY_PARENTAL_CONTROLS"; field public static final java.lang.String MODIFY_PHONE_STATE = "android.permission.MODIFY_PHONE_STATE"; @@ -5609,6 +5610,8 @@ package android.app { method public void enableCarMode(int); method public int getCurrentModeType(); method public int getNightMode(); + method public boolean isNightModeLocked(); + method public boolean isUiModeLocked(); method public void setNightMode(int); field public static java.lang.String ACTION_ENTER_CAR_MODE; field public static java.lang.String ACTION_ENTER_DESK_MODE; diff --git a/core/java/android/app/IUiModeManager.aidl b/core/java/android/app/IUiModeManager.aidl index 7e9873e5f2f27..cae54b6c0611f 100644 --- a/core/java/android/app/IUiModeManager.aidl +++ b/core/java/android/app/IUiModeManager.aidl @@ -51,4 +51,14 @@ interface IUiModeManager { * 2 for night, and 3 for automatic mode switching. */ int getNightMode(); + + /** + * Tells if UI mode is locked or not. + */ + boolean isUiModeLocked(); + + /** + * Tells if Night mode is locked or not. + */ + boolean isNightModeLocked(); } diff --git a/core/java/android/app/UiModeManager.java b/core/java/android/app/UiModeManager.java index 0f6ce1227ca45..44164158c7b47 100644 --- a/core/java/android/app/UiModeManager.java +++ b/core/java/android/app/UiModeManager.java @@ -233,4 +233,35 @@ public class UiModeManager { } return -1; } + + /** + * @return If UI mode is locked or not. When UI mode is locked, calls to change UI mode + * like {@link #enableCarMode(int)} will silently fail. + */ + public boolean isUiModeLocked() { + if (mService != null) { + try { + return mService.isUiModeLocked(); + } catch (RemoteException e) { + Log.e(TAG, "isUiModeLocked: RemoteException", e); + } + } + return true; + } + + /** + * @return If Night mode is locked or not. When Night mode is locked, changing Night mode + * is only allowed to privileged system components and normal application's call + * to change Night mode using {@link #setNightMode(int)} will silently fail. + */ + public boolean isNightModeLocked() { + if (mService != null) { + try { + return mService.isNightModeLocked(); + } catch (RemoteException e) { + Log.e(TAG, "isNightModeLocked: RemoteException", e); + } + } + return true; + } } diff --git a/core/res/AndroidManifest.xml b/core/res/AndroidManifest.xml index 6bdf71bdba6f7..9df0ecbe06806 100644 --- a/core/res/AndroidManifest.xml +++ b/core/res/AndroidManifest.xml @@ -2693,6 +2693,13 @@ + + + diff --git a/core/res/res/values/config.xml b/core/res/res/values/config.xml index 9c75b7aa701b8..315f7e2da62f2 100644 --- a/core/res/res/values/config.xml +++ b/core/res/res/values/config.xml @@ -716,6 +716,13 @@ true + + true + 1 + + false + + + false +