diff options
| author | Jorge Ruesga <jorge@ruesga.com> | 2013-01-27 05:03:48 +0100 |
|---|---|---|
| committer | Jorge Ruesga <jorge@ruesga.com> | 2013-02-08 01:29:23 +0100 |
| commit | 042159d9e9a129da3e290a5c6a2d4629acd56a65 (patch) | |
| tree | c4bc85f8ed82ee0d66d3f304826e04d0e0525cc8 /services/java/com/android/server/DeviceHandlerService.java | |
| parent | eeb11165b6e5443be802b475017cb7aca9d6f213 (diff) | |
| download | frameworks_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.java | 125 |
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; + } +} |
