From 53332883543868fb83e111a07306368b7772b340 Mon Sep 17 00:00:00 2001 From: Tobias Haamel Date: Thu, 18 Feb 2010 16:15:43 -0800 Subject: Manager for controlling the UI modes. The ui modes can be controlled with the UiModeManager class, which is can be retrieved as a system service via getSytemService(Context.UIMODE_SERVICE). The class is necessary so that CarHome can be unbundled and other apps can disable the car mode. Its currently a hidden class, since I'm not sure if this is the best way to provide this functionality to the user. --- core/java/android/app/ContextImpl.java | 12 +++++ core/java/android/app/UiModeManager.java | 83 ++++++++++++++++++++++++++++++++ core/java/android/content/Context.java | 12 +++++ 3 files changed, 107 insertions(+) create mode 100644 core/java/android/app/UiModeManager.java (limited to 'core') diff --git a/core/java/android/app/ContextImpl.java b/core/java/android/app/ContextImpl.java index c7c9429..33e8535 100644 --- a/core/java/android/app/ContextImpl.java +++ b/core/java/android/app/ContextImpl.java @@ -194,6 +194,7 @@ class ContextImpl extends Context { private AccountManager mAccountManager; // protected by mSync private DropBoxManager mDropBoxManager = null; private DevicePolicyManager mDevicePolicyManager = null; + private UiModeManager mUiModeManager = null; private final Object mSync = new Object(); @@ -960,6 +961,8 @@ class ContextImpl extends Context { return getDropBoxManager(); } else if (DEVICE_POLICY_SERVICE.equals(name)) { return getDevicePolicyManager(); + } else if (UIMODE_SERVICE.equals(name)) { + return getUiModeManager(); } return null; @@ -1153,6 +1156,15 @@ class ContextImpl extends Context { return mDevicePolicyManager; } + private UiModeManager getUiModeManager() { + synchronized (mSync) { + if (mUiModeManager == null) { + mUiModeManager = new UiModeManager(); + } + } + return mUiModeManager; + } + @Override public int checkPermission(String permission, int pid, int uid) { if (permission == null) { diff --git a/core/java/android/app/UiModeManager.java b/core/java/android/app/UiModeManager.java new file mode 100644 index 0000000..eea9257 --- /dev/null +++ b/core/java/android/app/UiModeManager.java @@ -0,0 +1,83 @@ +package android.app; + +import android.os.RemoteException; +import android.os.ServiceManager; +import android.util.Log; + +/** + * This class provides access to the system uimode services. These services + * allow applications to control UI modes of the device. + * It provides functionality to disable the car mode and it gives access to the + * night mode settings. + * + *

You do not instantiate this class directly; instead, retrieve it through + * {@link android.content.Context#getSystemService + * Context.getSystemService(Context.UIMODE_SERVICE)}. + */ +public class UiModeManager { + private static final String TAG = "UiModeManager"; + + public static final int MODE_NOTNIGHT = 1; + public static final int MODE_NIGHT = 2; + public static final int MODE_AUTO = 3; + + private IUiModeManager mService; + + /*package*/ UiModeManager() { + mService = IUiModeManager.Stub.asInterface( + ServiceManager.getService("uimode")); + } + + /** + * Disables the car mode. + */ + public void disableCarMode() { + if (mService != null) { + try { + mService.disableCarMode(); + } catch (RemoteException e) { + Log.e(TAG, "disableCarMode: RemoteException", e); + } + } + } + + /** + * Sets the night mode. Changes to the night mode are only effective when + * the car mode is enabled on a device. + * + *

The mode can be one of: + *