summaryrefslogtreecommitdiffstats
path: root/services/java/com/android/server/DeviceHandlerService.java
diff options
context:
space:
mode:
authorJorge Ruesga <jorge@ruesga.com>2013-01-27 05:03:48 +0100
committerJorge Ruesga <jorge@ruesga.com>2013-02-08 01:29:23 +0100
commit042159d9e9a129da3e290a5c6a2d4629acd56a65 (patch)
treec4bc85f8ed82ee0d66d3f304826e04d0e0525cc8 /services/java/com/android/server/DeviceHandlerService.java
parenteeb11165b6e5443be802b475017cb7aca9d6f213 (diff)
downloadframeworks_base-042159d9e9a129da3e290a5c6a2d4629acd56a65.zip
frameworks_base-042159d9e9a129da3e290a5c6a2d4629acd56a65.tar.gz
frameworks_base-042159d9e9a129da3e290a5c6a2d4629acd56a65.tar.bz2
SystemUI: Add dock battery icon styles
Support for dock battery icon styles. This changes does a refactor of DockBatteryController to extend BatteryController and create a new CircleDockBattery that extends CircleBattery (that listen for dock battery events) Patchset 2: Fully functional. Patchset 3: Fixed min icons. Rebased. Patchset 4: Create full device specific service in frameworks Move dock battery stuff from the framework to a device handler. Register/unregister DockBatteryController receivers Remove battery views if device doesn't support dock battery Refresh status on dock and screen on events Rebased Patchset 5: Transformers backwards compatibility Better main battery status detection (use status instead of plugged type) Fixed battery cluster space in status bar Rebased Patchset 6: Fix dock icons in ligths out mode Patchset 7: Fix code style Fix lockscreen status Fix lights out mode (typo) Fix images size Rebased Patchset 8: Fix icon images Fix status on full charge Rebased TF700T implementation: http://review.cyanogenmod.org/#/c/31298/ Change-Id: I9a576d1b279f1883f736ac3bcd2435c4b95a73de Signed-off-by: Jorge Ruesga <jorge@ruesga.com>
Diffstat (limited to 'services/java/com/android/server/DeviceHandlerService.java')
-rw-r--r--services/java/com/android/server/DeviceHandlerService.java125
1 files changed, 125 insertions, 0 deletions
diff --git a/services/java/com/android/server/DeviceHandlerService.java b/services/java/com/android/server/DeviceHandlerService.java
new file mode 100644
index 0000000..ddf455d
--- /dev/null
+++ b/services/java/com/android/server/DeviceHandlerService.java
@@ -0,0 +1,125 @@
+/*
+ * Copyright (C) 2013 The CyanogenMod Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.server;
+
+import android.content.Context;
+import android.content.ContextWrapper;
+import android.content.res.Resources;
+import android.os.Binder;
+import android.util.Log;
+
+import com.android.internal.os.DeviceDockBatteryHandler;
+import com.android.internal.os.DeviceKeyHandler;
+import com.android.internal.os.IDeviceHandler;
+
+import dalvik.system.DexClassLoader;
+
+import java.lang.reflect.Constructor;
+
+/**
+ * DeviceHandlerService exposed device specific handlers to other services.
+ * All specific device, not implemented by aosp, should be included here.
+ * @see DeviceKeyHandler
+ * @see DeviceDockBatteryHandler
+ * @hide
+ */
+public final class DeviceHandlerService extends Binder implements IDeviceHandler {
+ private static final String TAG = DeviceHandlerService.class.getSimpleName();
+
+ private static final boolean DEBUG = true;
+
+ private final Context mContext;
+
+ private DeviceKeyHandler mDeviceKeyHandler = null;
+ private DeviceDockBatteryHandler mDeviceDockBatteryHandler = null;
+
+ public DeviceHandlerService(Context context) {
+ mContext = context;
+ registerHandlers();
+ }
+
+ private void registerHandlers() {
+ // For register device specific handlers at least a library with the
+ // implementations is required.
+ Resources res = mContext.getResources();
+ String deviceHandlersLib =
+ res.getString(
+ com.android.internal.R.string.config_deviceHandlersLib);
+ if (deviceHandlersLib.isEmpty()) {
+ Log.i(TAG, "No device specific handler lib was defined.");
+ return;
+ }
+ ClassLoader classLoader =
+ new DexClassLoader(
+ deviceHandlersLib,
+ new ContextWrapper(mContext).getCacheDir().getAbsolutePath(),
+ null,
+ ClassLoader.getSystemClassLoader());
+
+ // ------------------
+ // DeviceKeyHandler
+ // ------------------
+ String handlerClass =
+ res.getString(com.android.internal.R.string.config_deviceKeyHandlerClass);
+ if (!handlerClass.isEmpty()) {
+ mDeviceKeyHandler = (DeviceKeyHandler)getHandler(classLoader, "key", handlerClass);
+ }
+
+ // ------------------
+ // DeviceDockBatteryHandler
+ // ------------------
+ // Has dock battery? and device specific handler?
+ boolean hasDockBattery = res.getBoolean(com.android.internal.R.bool.config_hasDockBattery);
+ if (hasDockBattery) {
+ handlerClass =
+ res.getString(
+ com.android.internal.R.string.config_deviceDockBatteryHandlerClass);
+ if (!handlerClass.isEmpty()) {
+ mDeviceDockBatteryHandler =
+ (DeviceDockBatteryHandler)getHandler(
+ classLoader, "dock battery", handlerClass);
+ }
+ }
+ }
+
+ private Object getHandler(final ClassLoader classLoader,
+ final String type, final String handlerClass) {
+ try {
+ Class<?> clazz = classLoader.loadClass(handlerClass);
+ Constructor<?> constructor = clazz.getConstructor(Context.class);
+ Object handler = constructor.newInstance(mContext);
+ if(DEBUG) {
+ Log.d(TAG, String.format("Instantiated %s handler class %s", type, handlerClass));
+ }
+ return handler;
+
+ } catch (Exception e) {
+ Log.w(TAG,
+ String.format(
+ "Could not instantiate %s handler class %s", type, handlerClass), e);
+ }
+ return null;
+ }
+
+ public DeviceKeyHandler getDeviceKeyHandler() {
+ return mDeviceKeyHandler;
+ }
+
+ public DeviceDockBatteryHandler getDeviceDockBatteryHandler() {
+ return mDeviceDockBatteryHandler;
+ }
+}