summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid van Tonder <david.vantonder@gmail.com>2013-02-08 11:26:23 -0800
committerGerrit Code Review <gerrit@review.cyanogenmod.com>2013-02-08 11:26:23 -0800
commit12705e3d2779b7ca3f056a0a40ce131c4013d02c (patch)
tree7d8338b7c5474d5bd8a92e3ac8729f4393543393
parentddbadd0e3e37d37f6e3e657950b3f317228d5808 (diff)
parent042159d9e9a129da3e290a5c6a2d4629acd56a65 (diff)
downloadframeworks_base-12705e3d2779b7ca3f056a0a40ce131c4013d02c.zip
frameworks_base-12705e3d2779b7ca3f056a0a40ce131c4013d02c.tar.gz
frameworks_base-12705e3d2779b7ca3f056a0a40ce131c4013d02c.tar.bz2
Merge "SystemUI: Add dock battery icon styles" into cm-10.1
-rw-r--r--core/java/android/os/BatteryManager.java47
-rw-r--r--core/java/com/android/internal/os/DeviceDockBatteryHandler.java53
-rw-r--r--core/java/com/android/internal/os/IDeviceHandler.java25
-rw-r--r--core/java/com/android/internal/policy/IPolicy.java4
-rw-r--r--core/java/com/android/internal/policy/PolicyManager.java5
-rwxr-xr-xcore/res/res/values/config.xml26
-rw-r--r--core/res/res/values/symbols.xml7
-rw-r--r--packages/SystemUI/res/drawable-hdpi/stat_sys_kb_battery_charge_min_anim0.pngbin0 -> 1188 bytes
-rw-r--r--packages/SystemUI/res/drawable-hdpi/stat_sys_kb_battery_charge_min_anim100.pngbin0 -> 3267 bytes
-rw-r--r--packages/SystemUI/res/drawable-hdpi/stat_sys_kb_battery_charge_min_anim15.pngbin0 -> 3258 bytes
-rw-r--r--packages/SystemUI/res/drawable-hdpi/stat_sys_kb_battery_charge_min_anim28.pngbin0 -> 3270 bytes
-rw-r--r--packages/SystemUI/res/drawable-hdpi/stat_sys_kb_battery_charge_min_anim43.pngbin0 -> 3274 bytes
-rw-r--r--packages/SystemUI/res/drawable-hdpi/stat_sys_kb_battery_charge_min_anim57.pngbin0 -> 3269 bytes
-rw-r--r--packages/SystemUI/res/drawable-hdpi/stat_sys_kb_battery_charge_min_anim71.pngbin0 -> 3279 bytes
-rw-r--r--packages/SystemUI/res/drawable-hdpi/stat_sys_kb_battery_charge_min_anim85.pngbin0 -> 3279 bytes
-rw-r--r--packages/SystemUI/res/drawable-hdpi/stat_sys_kb_battery_icon.pngbin0 -> 543 bytes
-rw-r--r--packages/SystemUI/res/drawable-hdpi/stat_sys_kb_battery_min_0.pngbin0 -> 3161 bytes
-rw-r--r--packages/SystemUI/res/drawable-hdpi/stat_sys_kb_battery_min_100.pngbin0 -> 2930 bytes
-rw-r--r--packages/SystemUI/res/drawable-hdpi/stat_sys_kb_battery_min_15.pngbin0 -> 2961 bytes
-rw-r--r--packages/SystemUI/res/drawable-hdpi/stat_sys_kb_battery_min_28.pngbin0 -> 2940 bytes
-rw-r--r--packages/SystemUI/res/drawable-hdpi/stat_sys_kb_battery_min_43.pngbin0 -> 2948 bytes
-rw-r--r--packages/SystemUI/res/drawable-hdpi/stat_sys_kb_battery_min_57.pngbin0 -> 2943 bytes
-rw-r--r--packages/SystemUI/res/drawable-hdpi/stat_sys_kb_battery_min_71.pngbin0 -> 2937 bytes
-rw-r--r--packages/SystemUI/res/drawable-hdpi/stat_sys_kb_battery_min_85.pngbin0 -> 2929 bytes
-rw-r--r--packages/SystemUI/res/drawable-mdpi/stat_sys_kb_battery_charge_min_anim0.pngbin0 -> 1106 bytes
-rw-r--r--packages/SystemUI/res/drawable-mdpi/stat_sys_kb_battery_charge_min_anim100.pngbin0 -> 3116 bytes
-rw-r--r--packages/SystemUI/res/drawable-mdpi/stat_sys_kb_battery_charge_min_anim15.pngbin0 -> 3099 bytes
-rw-r--r--packages/SystemUI/res/drawable-mdpi/stat_sys_kb_battery_charge_min_anim28.pngbin0 -> 3105 bytes
-rw-r--r--packages/SystemUI/res/drawable-mdpi/stat_sys_kb_battery_charge_min_anim43.pngbin0 -> 3117 bytes
-rw-r--r--packages/SystemUI/res/drawable-mdpi/stat_sys_kb_battery_charge_min_anim57.pngbin0 -> 3118 bytes
-rw-r--r--packages/SystemUI/res/drawable-mdpi/stat_sys_kb_battery_charge_min_anim71.pngbin0 -> 3118 bytes
-rw-r--r--packages/SystemUI/res/drawable-mdpi/stat_sys_kb_battery_charge_min_anim85.pngbin0 -> 3120 bytes
-rw-r--r--packages/SystemUI/res/drawable-mdpi/stat_sys_kb_battery_icon.pngbin0 -> 538 bytes
-rw-r--r--packages/SystemUI/res/drawable-mdpi/stat_sys_kb_battery_min_0.pngbin0 -> 3051 bytes
-rw-r--r--packages/SystemUI/res/drawable-mdpi/stat_sys_kb_battery_min_100.pngbin0 -> 2941 bytes
-rw-r--r--packages/SystemUI/res/drawable-mdpi/stat_sys_kb_battery_min_15.pngbin0 -> 2973 bytes
-rw-r--r--packages/SystemUI/res/drawable-mdpi/stat_sys_kb_battery_min_28.pngbin0 -> 2965 bytes
-rw-r--r--packages/SystemUI/res/drawable-mdpi/stat_sys_kb_battery_min_43.pngbin0 -> 2967 bytes
-rw-r--r--packages/SystemUI/res/drawable-mdpi/stat_sys_kb_battery_min_57.pngbin0 -> 2963 bytes
-rw-r--r--packages/SystemUI/res/drawable-mdpi/stat_sys_kb_battery_min_71.pngbin0 -> 2956 bytes
-rw-r--r--packages/SystemUI/res/drawable-mdpi/stat_sys_kb_battery_min_85.pngbin0 -> 2955 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw720dp-hdpi/stat_sys_kb_battery_charge_min_anim0.pngbin0 -> 1182 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw720dp-hdpi/stat_sys_kb_battery_charge_min_anim100.pngbin0 -> 3255 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw720dp-hdpi/stat_sys_kb_battery_charge_min_anim15.pngbin0 -> 3235 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw720dp-hdpi/stat_sys_kb_battery_charge_min_anim28.pngbin0 -> 3256 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw720dp-hdpi/stat_sys_kb_battery_charge_min_anim43.pngbin0 -> 3256 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw720dp-hdpi/stat_sys_kb_battery_charge_min_anim57.pngbin0 -> 3255 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw720dp-hdpi/stat_sys_kb_battery_charge_min_anim71.pngbin0 -> 3257 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw720dp-hdpi/stat_sys_kb_battery_charge_min_anim85.pngbin0 -> 3262 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw720dp-hdpi/stat_sys_kb_battery_min_0.pngbin0 -> 3152 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw720dp-hdpi/stat_sys_kb_battery_min_100.pngbin0 -> 2958 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw720dp-hdpi/stat_sys_kb_battery_min_15.pngbin0 -> 2971 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw720dp-hdpi/stat_sys_kb_battery_min_28.pngbin0 -> 2963 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw720dp-hdpi/stat_sys_kb_battery_min_43.pngbin0 -> 2964 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw720dp-hdpi/stat_sys_kb_battery_min_57.pngbin0 -> 2962 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw720dp-hdpi/stat_sys_kb_battery_min_71.pngbin0 -> 2952 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw720dp-hdpi/stat_sys_kb_battery_min_85.pngbin0 -> 2946 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw720dp-xhdpi/stat_sys_kb_battery_charge_min_anim0.pngbin0 -> 1303 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw720dp-xhdpi/stat_sys_kb_battery_charge_min_anim100.pngbin0 -> 3489 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw720dp-xhdpi/stat_sys_kb_battery_charge_min_anim15.pngbin0 -> 3463 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw720dp-xhdpi/stat_sys_kb_battery_charge_min_anim28.pngbin0 -> 3503 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw720dp-xhdpi/stat_sys_kb_battery_charge_min_anim43.pngbin0 -> 3500 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw720dp-xhdpi/stat_sys_kb_battery_charge_min_anim57.pngbin0 -> 3500 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw720dp-xhdpi/stat_sys_kb_battery_charge_min_anim71.pngbin0 -> 3499 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw720dp-xhdpi/stat_sys_kb_battery_charge_min_anim85.pngbin0 -> 3478 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw720dp-xhdpi/stat_sys_kb_battery_min_0.pngbin0 -> 3328 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw720dp-xhdpi/stat_sys_kb_battery_min_100.pngbin0 -> 2974 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw720dp-xhdpi/stat_sys_kb_battery_min_15.pngbin0 -> 3003 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw720dp-xhdpi/stat_sys_kb_battery_min_28.pngbin0 -> 2994 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw720dp-xhdpi/stat_sys_kb_battery_min_43.pngbin0 -> 2994 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw720dp-xhdpi/stat_sys_kb_battery_min_57.pngbin0 -> 2996 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw720dp-xhdpi/stat_sys_kb_battery_min_71.pngbin0 -> 2986 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw720dp-xhdpi/stat_sys_kb_battery_min_85.pngbin0 -> 2992 bytes
-rw-r--r--packages/SystemUI/res/drawable-xhdpi/stat_sys_kb_battery_charge_min_anim0.pngbin0 -> 1302 bytes
-rw-r--r--packages/SystemUI/res/drawable-xhdpi/stat_sys_kb_battery_charge_min_anim100.pngbin0 -> 3488 bytes
-rw-r--r--packages/SystemUI/res/drawable-xhdpi/stat_sys_kb_battery_charge_min_anim15.pngbin0 -> 3475 bytes
-rw-r--r--packages/SystemUI/res/drawable-xhdpi/stat_sys_kb_battery_charge_min_anim28.pngbin0 -> 3501 bytes
-rw-r--r--packages/SystemUI/res/drawable-xhdpi/stat_sys_kb_battery_charge_min_anim43.pngbin0 -> 3504 bytes
-rw-r--r--packages/SystemUI/res/drawable-xhdpi/stat_sys_kb_battery_charge_min_anim57.pngbin0 -> 3493 bytes
-rw-r--r--packages/SystemUI/res/drawable-xhdpi/stat_sys_kb_battery_charge_min_anim71.pngbin0 -> 3504 bytes
-rw-r--r--packages/SystemUI/res/drawable-xhdpi/stat_sys_kb_battery_charge_min_anim85.pngbin0 -> 3508 bytes
-rw-r--r--packages/SystemUI/res/drawable-xhdpi/stat_sys_kb_battery_icon.pngbin0 -> 575 bytes
-rw-r--r--packages/SystemUI/res/drawable-xhdpi/stat_sys_kb_battery_min_0.pngbin0 -> 3316 bytes
-rw-r--r--packages/SystemUI/res/drawable-xhdpi/stat_sys_kb_battery_min_100.pngbin0 -> 2992 bytes
-rw-r--r--packages/SystemUI/res/drawable-xhdpi/stat_sys_kb_battery_min_15.pngbin0 -> 3017 bytes
-rw-r--r--packages/SystemUI/res/drawable-xhdpi/stat_sys_kb_battery_min_28.pngbin0 -> 3010 bytes
-rw-r--r--packages/SystemUI/res/drawable-xhdpi/stat_sys_kb_battery_min_43.pngbin0 -> 2993 bytes
-rw-r--r--packages/SystemUI/res/drawable-xhdpi/stat_sys_kb_battery_min_57.pngbin0 -> 3013 bytes
-rw-r--r--packages/SystemUI/res/drawable-xhdpi/stat_sys_kb_battery_min_71.pngbin0 -> 3007 bytes
-rw-r--r--packages/SystemUI/res/drawable-xhdpi/stat_sys_kb_battery_min_85.pngbin0 -> 2997 bytes
-rw-r--r--packages/SystemUI/res/drawable/stat_sys_kb_battery_charge.xml30
-rw-r--r--packages/SystemUI/res/drawable/stat_sys_kb_battery_charge_min.xml27
-rw-r--r--packages/SystemUI/res/drawable/stat_sys_kb_battery_min.xml30
-rw-r--r--packages/SystemUI/res/layout/status_bar.xml23
-rw-r--r--packages/SystemUI/res/values-sw600dp/dimens.xml5
-rw-r--r--packages/SystemUI/res/values/dimens.xml5
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java74
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/policy/BatteryController.java137
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/policy/CircleBattery.java95
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/policy/CircleDockBattery.java141
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/policy/DockBatteryController.java165
-rwxr-xr-xpolicy/src/com/android/internal/policy/impl/PhoneWindowManager.java34
-rw-r--r--policy/src/com/android/internal/policy/impl/Policy.java5
-rw-r--r--policy/src/com/android/internal/policy/impl/keyguard/KeyguardMessageArea.java7
-rw-r--r--services/java/com/android/server/BatteryService.java105
-rw-r--r--services/java/com/android/server/DeviceHandlerService.java125
-rw-r--r--services/java/com/android/server/SystemServer.java9
-rwxr-xr-xservices/java/com/android/server/wm/WindowManagerService.java10
-rw-r--r--services/jni/com_android_server_BatteryService.cpp80
109 files changed, 834 insertions, 440 deletions
diff --git a/core/java/android/os/BatteryManager.java b/core/java/android/os/BatteryManager.java
index 9822219..71c6d1e 100644
--- a/core/java/android/os/BatteryManager.java
+++ b/core/java/android/os/BatteryManager.java
@@ -28,12 +28,6 @@ public class BatteryManager {
public static final String EXTRA_STATUS = "status";
/**
- * Integer containing the current status constant for the dock battery.
- * @hide
- */
- public static final String EXTRA_DOCK_STATUS = "dock_status";
-
- /**
* Extra for {@link android.content.Intent#ACTION_BATTERY_CHANGED}:
* integer containing the current health constant.
*/
@@ -46,12 +40,6 @@ public class BatteryManager {
public static final String EXTRA_PRESENT = "present";
/**
- * Integer containing the current status constant for the dock battery.
- * @hide
- */
- public static final String EXTRA_DOCK_PRESENT = "dock_present";
-
- /**
* Extra for {@link android.content.Intent#ACTION_BATTERY_CHANGED}:
* integer field containing the current battery level, from 0 to
* {@link #EXTRA_SCALE}.
@@ -59,12 +47,6 @@ public class BatteryManager {
public static final String EXTRA_LEVEL = "level";
/**
- * Integer field containing the current dock battery level.
- * @hide
- */
- public static final String EXTRA_DOCK_LEVEL = "dock_level";
-
- /**
* Extra for {@link android.content.Intent#ACTION_BATTERY_CHANGED}:
* integer containing the maximum battery level.
*/
@@ -111,6 +93,28 @@ public class BatteryManager {
*/
public static final String EXTRA_INVALID_CHARGER = "invalid_charger";
+ // Dock intents
+ /** @hide **/
+ public static final String EXTRA_DOCK_STATUS = "dock_status";
+ /** @hide **/
+ public static final String EXTRA_DOCK_HEALTH = "dock_health";
+ /** @hide **/
+ public static final String EXTRA_DOCK_PRESENT = "dock_present";
+ /** @hide **/
+ public static final String EXTRA_DOCK_LEVEL = "dock_level";
+ /** @hide **/
+ public static final String EXTRA_DOCK_SCALE = "dock_scale";
+ /** @hide **/
+ public static final String EXTRA_DOCK_ICON_SMALL = "dock_icon-small";
+ /** @hide **/
+ public static final String EXTRA_DOCK_PLUGGED = "dock_plugged";
+ /** @hide **/
+ public static final String EXTRA_DOCK_VOLTAGE = "dock_voltage";
+ /** @hide **/
+ public static final String EXTRA_DOCK_TEMPERATURE = "dock_temperature";
+ /** @hide **/
+ public static final String EXTRA_DOCK_TECHNOLOGY = "dock_technology";
+
// values for "status" field in the ACTION_BATTERY_CHANGED Intent
public static final int BATTERY_STATUS_UNKNOWN = 1;
public static final int BATTERY_STATUS_CHARGING = 2;
@@ -127,13 +131,6 @@ public class BatteryManager {
public static final int BATTERY_HEALTH_UNSPECIFIED_FAILURE = 6;
public static final int BATTERY_HEALTH_COLD = 7;
- /** @hide */
- public static final int DOCK_BATTERY_STATUS_UNKNOWN = 1;
- /** @hide */
- public static final int DOCK_BATTERY_STATUS_CHARGING = 2;
- /** @hide */
- public static final int DOCK_BATTERY_STATUS_NOT_CHARGING = 4;
-
// values of the "plugged" field in the ACTION_BATTERY_CHANGED intent.
// These must be powers of 2.
/** Power source is an AC charger. */
diff --git a/core/java/com/android/internal/os/DeviceDockBatteryHandler.java b/core/java/com/android/internal/os/DeviceDockBatteryHandler.java
new file mode 100644
index 0000000..ef5a8b2
--- /dev/null
+++ b/core/java/com/android/internal/os/DeviceDockBatteryHandler.java
@@ -0,0 +1,53 @@
+/*
+ * 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.internal.os;
+
+import android.content.Intent;
+import android.os.Bundle;
+
+public interface DeviceDockBatteryHandler {
+
+ /**
+ * Invoked when the system request an update of the dock battery status. Device should
+ * access specific sysfs and read status, present and level of the device dock battery.
+ */
+ public void update();
+
+ /**
+ * Invoked after {@link #update()} for processing the values prior to notify them.
+ */
+ public void process();
+
+ /**
+ * Method that returns the data to notify to {@link Intent#ACTION_BATTERY_CHANGED} action.
+ */
+ public Bundle getNotifyData();
+
+ /**
+ * Method that returns if this handler has new battery data to notify
+ *
+ * @return If this handler has new battery data to notify.
+ */
+ public boolean hasNewData();
+
+ /**
+ * Method that returns if the dock battery is plugged (is powering device main battery)
+ *
+ * @return If the dock battery is plugged
+ */
+ public boolean isPlugged();
+}
diff --git a/core/java/com/android/internal/os/IDeviceHandler.java b/core/java/com/android/internal/os/IDeviceHandler.java
new file mode 100644
index 0000000..f6e196f
--- /dev/null
+++ b/core/java/com/android/internal/os/IDeviceHandler.java
@@ -0,0 +1,25 @@
+/*
+ * 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.internal.os;
+
+/**
+ * @hide
+ */
+public interface IDeviceHandler {
+ public DeviceKeyHandler getDeviceKeyHandler();
+ public DeviceDockBatteryHandler getDeviceDockBatteryHandler();
+}
diff --git a/core/java/com/android/internal/policy/IPolicy.java b/core/java/com/android/internal/policy/IPolicy.java
index d08b3b4..ad679d2 100644
--- a/core/java/com/android/internal/policy/IPolicy.java
+++ b/core/java/com/android/internal/policy/IPolicy.java
@@ -22,6 +22,8 @@ import android.view.LayoutInflater;
import android.view.Window;
import android.view.WindowManagerPolicy;
+import com.android.internal.os.IDeviceHandler;
+
/**
* {@hide}
*/
@@ -33,7 +35,7 @@ public interface IPolicy {
public LayoutInflater makeNewLayoutInflater(Context context);
- public WindowManagerPolicy makeNewWindowManager();
+ public WindowManagerPolicy makeNewWindowManager(IDeviceHandler device);
public FallbackEventHandler makeNewFallbackEventHandler(Context context);
}
diff --git a/core/java/com/android/internal/policy/PolicyManager.java b/core/java/com/android/internal/policy/PolicyManager.java
index 5274e54..8b09564 100644
--- a/core/java/com/android/internal/policy/PolicyManager.java
+++ b/core/java/com/android/internal/policy/PolicyManager.java
@@ -22,6 +22,7 @@ import android.view.LayoutInflater;
import android.view.Window;
import android.view.WindowManagerPolicy;
+import com.android.internal.os.IDeviceHandler;
import com.android.internal.policy.IPolicy;
/**
@@ -63,8 +64,8 @@ public final class PolicyManager {
return sPolicy.makeNewLayoutInflater(context);
}
- public static WindowManagerPolicy makeNewWindowManager() {
- return sPolicy.makeNewWindowManager();
+ public static WindowManagerPolicy makeNewWindowManager(IDeviceHandler device) {
+ return sPolicy.makeNewWindowManager(device);
}
public static FallbackEventHandler makeNewFallbackEventHandler(Context context) {
diff --git a/core/res/res/values/config.xml b/core/res/res/values/config.xml
index da35002..3fdd1d2 100755
--- a/core/res/res/values/config.xml
+++ b/core/res/res/values/config.xml
@@ -1092,20 +1092,14 @@
the GPU to handle. -->
<integer name="config_wallpaperMaxWidth">-1</integer>
- <!-- Asus dock compatibility disabled by default -->
- <bool name="config_hasDockBattery">false</bool>
+ <!-- Name of that dock battery handler class -->
+ <string name="config_deviceDockBatteryHandlerClass" translatable="false"></string>
<!-- LUN file to be used by legacy USB manager.
The existence of this file will be used to determine in the
legacy USB manager should be started. -->
<string name="config_legacyUmsLunFile">/sys/devices/platform/usb_mass_storage/lun0/file</string>
- <!-- Path to the library that contains a device specific key handler -->
- <string name="config_deviceKeyHandlerLib" translatable="false"></string>
-
- <!-- Name of that key handler class -->
- <string name="config_deviceKeyHandlerClass" translatable="false"></string>
-
<!-- If a dock provides a lid switch, that lid can be removed. This
setting is used to determine, whether lidOpenRotation has to be
applied. -->
@@ -1114,4 +1108,20 @@
<!-- If true, adds support for no delay A2DP in Samsung devices -->
<bool name="config_noDelayInATwoDP">false</bool>
+ <!-- Dock battery compatibility (disabled by default) -->
+ <bool name="config_hasDockBattery">false</bool>
+
+ <!-- The list absolute paths of jar/apk files containing the device specific handlers,
+ delimited by File.pathSeparator, which defaults to ":" on Android -->
+ <string name="config_deviceHandlersLib" translatable="false"></string>
+
+ <!-- Full qualified name of the class that implements
+ com.android.internal.os.DeviceKeyHandler interface. -->
+ <string name="config_deviceKeyHandlerClass" translatable="false"></string>
+
+ <!-- Full qualified name of the class that implements
+ com.android.internal.os.DeviceDockBatteryHandler interface.
+ Requires config_hasDockBattery set to true. -->
+ <string name="config_deviceDockBatteryHandlerLib" translatable="false"></string>
+
</resources>
diff --git a/core/res/res/values/symbols.xml b/core/res/res/values/symbols.xml
index cfaf3a2..9a14fb7 100644
--- a/core/res/res/values/symbols.xml
+++ b/core/res/res/values/symbols.xml
@@ -1840,8 +1840,6 @@
<java-symbol type="bool" name="config_hasRemovableLid" />
<java-symbol type="bool" name="config_hasDockBattery" />
<java-symbol type="bool" name="config_noDelayInATwoDP" />
- <java-symbol type="string" name="config_deviceKeyHandlerLib" />
- <java-symbol type="string" name="config_deviceKeyHandlerClass" />
<!-- Telephony -->
<java-symbol type="bool" name="config_smsSamsungCdmaAlternateMessageIDEncoding" />
@@ -1901,4 +1899,9 @@
<!-- Wifi -->
<java-symbol type="bool" name="config_wifiApStartInterface" />
<java-symbol type="bool" name="config_wifiApFirmwareReload" />
+
+ <!-- Device specific handlers -->
+ <java-symbol type="string" name="config_deviceHandlersLib" />
+ <java-symbol type="string" name="config_deviceKeyHandlerClass" />
+ <java-symbol type="string" name="config_deviceDockBatteryHandlerClass" />
</resources>
diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_kb_battery_charge_min_anim0.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_kb_battery_charge_min_anim0.png
new file mode 100644
index 0000000..51f8f2f
--- /dev/null
+++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_kb_battery_charge_min_anim0.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_kb_battery_charge_min_anim100.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_kb_battery_charge_min_anim100.png
new file mode 100644
index 0000000..d43e7c9
--- /dev/null
+++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_kb_battery_charge_min_anim100.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_kb_battery_charge_min_anim15.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_kb_battery_charge_min_anim15.png
new file mode 100644
index 0000000..8827ae8
--- /dev/null
+++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_kb_battery_charge_min_anim15.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_kb_battery_charge_min_anim28.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_kb_battery_charge_min_anim28.png
new file mode 100644
index 0000000..26a0b2e
--- /dev/null
+++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_kb_battery_charge_min_anim28.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_kb_battery_charge_min_anim43.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_kb_battery_charge_min_anim43.png
new file mode 100644
index 0000000..519437b
--- /dev/null
+++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_kb_battery_charge_min_anim43.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_kb_battery_charge_min_anim57.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_kb_battery_charge_min_anim57.png
new file mode 100644
index 0000000..8f44b53
--- /dev/null
+++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_kb_battery_charge_min_anim57.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_kb_battery_charge_min_anim71.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_kb_battery_charge_min_anim71.png
new file mode 100644
index 0000000..52c55af
--- /dev/null
+++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_kb_battery_charge_min_anim71.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_kb_battery_charge_min_anim85.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_kb_battery_charge_min_anim85.png
new file mode 100644
index 0000000..70fa203
--- /dev/null
+++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_kb_battery_charge_min_anim85.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_kb_battery_icon.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_kb_battery_icon.png
new file mode 100644
index 0000000..0405006
--- /dev/null
+++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_kb_battery_icon.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_kb_battery_min_0.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_kb_battery_min_0.png
new file mode 100644
index 0000000..8315123
--- /dev/null
+++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_kb_battery_min_0.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_kb_battery_min_100.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_kb_battery_min_100.png
new file mode 100644
index 0000000..1be1d88
--- /dev/null
+++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_kb_battery_min_100.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_kb_battery_min_15.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_kb_battery_min_15.png
new file mode 100644
index 0000000..49583cc
--- /dev/null
+++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_kb_battery_min_15.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_kb_battery_min_28.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_kb_battery_min_28.png
new file mode 100644
index 0000000..8dfeb7f
--- /dev/null
+++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_kb_battery_min_28.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_kb_battery_min_43.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_kb_battery_min_43.png
new file mode 100644
index 0000000..f172005
--- /dev/null
+++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_kb_battery_min_43.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_kb_battery_min_57.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_kb_battery_min_57.png
new file mode 100644
index 0000000..49f733f
--- /dev/null
+++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_kb_battery_min_57.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_kb_battery_min_71.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_kb_battery_min_71.png
new file mode 100644
index 0000000..d1b94a6
--- /dev/null
+++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_kb_battery_min_71.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_kb_battery_min_85.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_kb_battery_min_85.png
new file mode 100644
index 0000000..0a99fe2
--- /dev/null
+++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_kb_battery_min_85.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_kb_battery_charge_min_anim0.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_kb_battery_charge_min_anim0.png
new file mode 100644
index 0000000..47d9077
--- /dev/null
+++ b/packages/SystemUI/res/drawable-mdpi/stat_sys_kb_battery_charge_min_anim0.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_kb_battery_charge_min_anim100.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_kb_battery_charge_min_anim100.png
new file mode 100644
index 0000000..45b8f52
--- /dev/null
+++ b/packages/SystemUI/res/drawable-mdpi/stat_sys_kb_battery_charge_min_anim100.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_kb_battery_charge_min_anim15.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_kb_battery_charge_min_anim15.png
new file mode 100644
index 0000000..01328dd
--- /dev/null
+++ b/packages/SystemUI/res/drawable-mdpi/stat_sys_kb_battery_charge_min_anim15.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_kb_battery_charge_min_anim28.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_kb_battery_charge_min_anim28.png
new file mode 100644
index 0000000..2fcfc5c
--- /dev/null
+++ b/packages/SystemUI/res/drawable-mdpi/stat_sys_kb_battery_charge_min_anim28.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_kb_battery_charge_min_anim43.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_kb_battery_charge_min_anim43.png
new file mode 100644
index 0000000..b4a86bb
--- /dev/null
+++ b/packages/SystemUI/res/drawable-mdpi/stat_sys_kb_battery_charge_min_anim43.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_kb_battery_charge_min_anim57.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_kb_battery_charge_min_anim57.png
new file mode 100644
index 0000000..dc600d5
--- /dev/null
+++ b/packages/SystemUI/res/drawable-mdpi/stat_sys_kb_battery_charge_min_anim57.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_kb_battery_charge_min_anim71.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_kb_battery_charge_min_anim71.png
new file mode 100644
index 0000000..e1a4f49
--- /dev/null
+++ b/packages/SystemUI/res/drawable-mdpi/stat_sys_kb_battery_charge_min_anim71.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_kb_battery_charge_min_anim85.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_kb_battery_charge_min_anim85.png
new file mode 100644
index 0000000..1389c50
--- /dev/null
+++ b/packages/SystemUI/res/drawable-mdpi/stat_sys_kb_battery_charge_min_anim85.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_kb_battery_icon.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_kb_battery_icon.png
new file mode 100644
index 0000000..ba8d71b
--- /dev/null
+++ b/packages/SystemUI/res/drawable-mdpi/stat_sys_kb_battery_icon.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_kb_battery_min_0.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_kb_battery_min_0.png
new file mode 100644
index 0000000..50c91e9
--- /dev/null
+++ b/packages/SystemUI/res/drawable-mdpi/stat_sys_kb_battery_min_0.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_kb_battery_min_100.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_kb_battery_min_100.png
new file mode 100644
index 0000000..9fadfe8
--- /dev/null
+++ b/packages/SystemUI/res/drawable-mdpi/stat_sys_kb_battery_min_100.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_kb_battery_min_15.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_kb_battery_min_15.png
new file mode 100644
index 0000000..f9879a9
--- /dev/null
+++ b/packages/SystemUI/res/drawable-mdpi/stat_sys_kb_battery_min_15.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_kb_battery_min_28.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_kb_battery_min_28.png
new file mode 100644
index 0000000..5f780ec
--- /dev/null
+++ b/packages/SystemUI/res/drawable-mdpi/stat_sys_kb_battery_min_28.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_kb_battery_min_43.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_kb_battery_min_43.png
new file mode 100644
index 0000000..534043e
--- /dev/null
+++ b/packages/SystemUI/res/drawable-mdpi/stat_sys_kb_battery_min_43.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_kb_battery_min_57.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_kb_battery_min_57.png
new file mode 100644
index 0000000..047a2b5
--- /dev/null
+++ b/packages/SystemUI/res/drawable-mdpi/stat_sys_kb_battery_min_57.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_kb_battery_min_71.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_kb_battery_min_71.png
new file mode 100644
index 0000000..8d64d3e
--- /dev/null
+++ b/packages/SystemUI/res/drawable-mdpi/stat_sys_kb_battery_min_71.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_kb_battery_min_85.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_kb_battery_min_85.png
new file mode 100644
index 0000000..bc4652e
--- /dev/null
+++ b/packages/SystemUI/res/drawable-mdpi/stat_sys_kb_battery_min_85.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw720dp-hdpi/stat_sys_kb_battery_charge_min_anim0.png b/packages/SystemUI/res/drawable-sw720dp-hdpi/stat_sys_kb_battery_charge_min_anim0.png
new file mode 100644
index 0000000..7c2856d
--- /dev/null
+++ b/packages/SystemUI/res/drawable-sw720dp-hdpi/stat_sys_kb_battery_charge_min_anim0.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw720dp-hdpi/stat_sys_kb_battery_charge_min_anim100.png b/packages/SystemUI/res/drawable-sw720dp-hdpi/stat_sys_kb_battery_charge_min_anim100.png
new file mode 100644
index 0000000..401f534
--- /dev/null
+++ b/packages/SystemUI/res/drawable-sw720dp-hdpi/stat_sys_kb_battery_charge_min_anim100.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw720dp-hdpi/stat_sys_kb_battery_charge_min_anim15.png b/packages/SystemUI/res/drawable-sw720dp-hdpi/stat_sys_kb_battery_charge_min_anim15.png
new file mode 100644
index 0000000..7437da0
--- /dev/null
+++ b/packages/SystemUI/res/drawable-sw720dp-hdpi/stat_sys_kb_battery_charge_min_anim15.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw720dp-hdpi/stat_sys_kb_battery_charge_min_anim28.png b/packages/SystemUI/res/drawable-sw720dp-hdpi/stat_sys_kb_battery_charge_min_anim28.png
new file mode 100644
index 0000000..0cbc359
--- /dev/null
+++ b/packages/SystemUI/res/drawable-sw720dp-hdpi/stat_sys_kb_battery_charge_min_anim28.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw720dp-hdpi/stat_sys_kb_battery_charge_min_anim43.png b/packages/SystemUI/res/drawable-sw720dp-hdpi/stat_sys_kb_battery_charge_min_anim43.png
new file mode 100644
index 0000000..537de4b
--- /dev/null
+++ b/packages/SystemUI/res/drawable-sw720dp-hdpi/stat_sys_kb_battery_charge_min_anim43.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw720dp-hdpi/stat_sys_kb_battery_charge_min_anim57.png b/packages/SystemUI/res/drawable-sw720dp-hdpi/stat_sys_kb_battery_charge_min_anim57.png
new file mode 100644
index 0000000..1c5fc18
--- /dev/null
+++ b/packages/SystemUI/res/drawable-sw720dp-hdpi/stat_sys_kb_battery_charge_min_anim57.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw720dp-hdpi/stat_sys_kb_battery_charge_min_anim71.png b/packages/SystemUI/res/drawable-sw720dp-hdpi/stat_sys_kb_battery_charge_min_anim71.png
new file mode 100644
index 0000000..ebf6a34
--- /dev/null
+++ b/packages/SystemUI/res/drawable-sw720dp-hdpi/stat_sys_kb_battery_charge_min_anim71.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw720dp-hdpi/stat_sys_kb_battery_charge_min_anim85.png b/packages/SystemUI/res/drawable-sw720dp-hdpi/stat_sys_kb_battery_charge_min_anim85.png
new file mode 100644
index 0000000..253ad48
--- /dev/null
+++ b/packages/SystemUI/res/drawable-sw720dp-hdpi/stat_sys_kb_battery_charge_min_anim85.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw720dp-hdpi/stat_sys_kb_battery_min_0.png b/packages/SystemUI/res/drawable-sw720dp-hdpi/stat_sys_kb_battery_min_0.png
new file mode 100644
index 0000000..cee09ec
--- /dev/null
+++ b/packages/SystemUI/res/drawable-sw720dp-hdpi/stat_sys_kb_battery_min_0.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw720dp-hdpi/stat_sys_kb_battery_min_100.png b/packages/SystemUI/res/drawable-sw720dp-hdpi/stat_sys_kb_battery_min_100.png
new file mode 100644
index 0000000..3bd6fc2
--- /dev/null
+++ b/packages/SystemUI/res/drawable-sw720dp-hdpi/stat_sys_kb_battery_min_100.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw720dp-hdpi/stat_sys_kb_battery_min_15.png b/packages/SystemUI/res/drawable-sw720dp-hdpi/stat_sys_kb_battery_min_15.png
new file mode 100644
index 0000000..3ead40a
--- /dev/null
+++ b/packages/SystemUI/res/drawable-sw720dp-hdpi/stat_sys_kb_battery_min_15.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw720dp-hdpi/stat_sys_kb_battery_min_28.png b/packages/SystemUI/res/drawable-sw720dp-hdpi/stat_sys_kb_battery_min_28.png
new file mode 100644
index 0000000..4ce926b
--- /dev/null
+++ b/packages/SystemUI/res/drawable-sw720dp-hdpi/stat_sys_kb_battery_min_28.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw720dp-hdpi/stat_sys_kb_battery_min_43.png b/packages/SystemUI/res/drawable-sw720dp-hdpi/stat_sys_kb_battery_min_43.png
new file mode 100644
index 0000000..f01f6b8
--- /dev/null
+++ b/packages/SystemUI/res/drawable-sw720dp-hdpi/stat_sys_kb_battery_min_43.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw720dp-hdpi/stat_sys_kb_battery_min_57.png b/packages/SystemUI/res/drawable-sw720dp-hdpi/stat_sys_kb_battery_min_57.png
new file mode 100644
index 0000000..73f0d54
--- /dev/null
+++ b/packages/SystemUI/res/drawable-sw720dp-hdpi/stat_sys_kb_battery_min_57.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw720dp-hdpi/stat_sys_kb_battery_min_71.png b/packages/SystemUI/res/drawable-sw720dp-hdpi/stat_sys_kb_battery_min_71.png
new file mode 100644
index 0000000..a2074dd
--- /dev/null
+++ b/packages/SystemUI/res/drawable-sw720dp-hdpi/stat_sys_kb_battery_min_71.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw720dp-hdpi/stat_sys_kb_battery_min_85.png b/packages/SystemUI/res/drawable-sw720dp-hdpi/stat_sys_kb_battery_min_85.png
new file mode 100644
index 0000000..30e19c9
--- /dev/null
+++ b/packages/SystemUI/res/drawable-sw720dp-hdpi/stat_sys_kb_battery_min_85.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw720dp-xhdpi/stat_sys_kb_battery_charge_min_anim0.png b/packages/SystemUI/res/drawable-sw720dp-xhdpi/stat_sys_kb_battery_charge_min_anim0.png
new file mode 100644
index 0000000..7791c7e
--- /dev/null
+++ b/packages/SystemUI/res/drawable-sw720dp-xhdpi/stat_sys_kb_battery_charge_min_anim0.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw720dp-xhdpi/stat_sys_kb_battery_charge_min_anim100.png b/packages/SystemUI/res/drawable-sw720dp-xhdpi/stat_sys_kb_battery_charge_min_anim100.png
new file mode 100644
index 0000000..0aaa70a
--- /dev/null
+++ b/packages/SystemUI/res/drawable-sw720dp-xhdpi/stat_sys_kb_battery_charge_min_anim100.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw720dp-xhdpi/stat_sys_kb_battery_charge_min_anim15.png b/packages/SystemUI/res/drawable-sw720dp-xhdpi/stat_sys_kb_battery_charge_min_anim15.png
new file mode 100644
index 0000000..614601d
--- /dev/null
+++ b/packages/SystemUI/res/drawable-sw720dp-xhdpi/stat_sys_kb_battery_charge_min_anim15.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw720dp-xhdpi/stat_sys_kb_battery_charge_min_anim28.png b/packages/SystemUI/res/drawable-sw720dp-xhdpi/stat_sys_kb_battery_charge_min_anim28.png
new file mode 100644
index 0000000..8690413
--- /dev/null
+++ b/packages/SystemUI/res/drawable-sw720dp-xhdpi/stat_sys_kb_battery_charge_min_anim28.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw720dp-xhdpi/stat_sys_kb_battery_charge_min_anim43.png b/packages/SystemUI/res/drawable-sw720dp-xhdpi/stat_sys_kb_battery_charge_min_anim43.png
new file mode 100644
index 0000000..81835f0
--- /dev/null
+++ b/packages/SystemUI/res/drawable-sw720dp-xhdpi/stat_sys_kb_battery_charge_min_anim43.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw720dp-xhdpi/stat_sys_kb_battery_charge_min_anim57.png b/packages/SystemUI/res/drawable-sw720dp-xhdpi/stat_sys_kb_battery_charge_min_anim57.png
new file mode 100644
index 0000000..4c62c02
--- /dev/null
+++ b/packages/SystemUI/res/drawable-sw720dp-xhdpi/stat_sys_kb_battery_charge_min_anim57.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw720dp-xhdpi/stat_sys_kb_battery_charge_min_anim71.png b/packages/SystemUI/res/drawable-sw720dp-xhdpi/stat_sys_kb_battery_charge_min_anim71.png
new file mode 100644
index 0000000..f58c769
--- /dev/null
+++ b/packages/SystemUI/res/drawable-sw720dp-xhdpi/stat_sys_kb_battery_charge_min_anim71.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw720dp-xhdpi/stat_sys_kb_battery_charge_min_anim85.png b/packages/SystemUI/res/drawable-sw720dp-xhdpi/stat_sys_kb_battery_charge_min_anim85.png
new file mode 100644
index 0000000..93398a9
--- /dev/null
+++ b/packages/SystemUI/res/drawable-sw720dp-xhdpi/stat_sys_kb_battery_charge_min_anim85.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw720dp-xhdpi/stat_sys_kb_battery_min_0.png b/packages/SystemUI/res/drawable-sw720dp-xhdpi/stat_sys_kb_battery_min_0.png
new file mode 100644
index 0000000..3d78fb7
--- /dev/null
+++ b/packages/SystemUI/res/drawable-sw720dp-xhdpi/stat_sys_kb_battery_min_0.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw720dp-xhdpi/stat_sys_kb_battery_min_100.png b/packages/SystemUI/res/drawable-sw720dp-xhdpi/stat_sys_kb_battery_min_100.png
new file mode 100644
index 0000000..db00469
--- /dev/null
+++ b/packages/SystemUI/res/drawable-sw720dp-xhdpi/stat_sys_kb_battery_min_100.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw720dp-xhdpi/stat_sys_kb_battery_min_15.png b/packages/SystemUI/res/drawable-sw720dp-xhdpi/stat_sys_kb_battery_min_15.png
new file mode 100644
index 0000000..baa9099
--- /dev/null
+++ b/packages/SystemUI/res/drawable-sw720dp-xhdpi/stat_sys_kb_battery_min_15.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw720dp-xhdpi/stat_sys_kb_battery_min_28.png b/packages/SystemUI/res/drawable-sw720dp-xhdpi/stat_sys_kb_battery_min_28.png
new file mode 100644
index 0000000..e45f245
--- /dev/null
+++ b/packages/SystemUI/res/drawable-sw720dp-xhdpi/stat_sys_kb_battery_min_28.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw720dp-xhdpi/stat_sys_kb_battery_min_43.png b/packages/SystemUI/res/drawable-sw720dp-xhdpi/stat_sys_kb_battery_min_43.png
new file mode 100644
index 0000000..3847faf
--- /dev/null
+++ b/packages/SystemUI/res/drawable-sw720dp-xhdpi/stat_sys_kb_battery_min_43.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw720dp-xhdpi/stat_sys_kb_battery_min_57.png b/packages/SystemUI/res/drawable-sw720dp-xhdpi/stat_sys_kb_battery_min_57.png
new file mode 100644
index 0000000..5a0f1a1
--- /dev/null
+++ b/packages/SystemUI/res/drawable-sw720dp-xhdpi/stat_sys_kb_battery_min_57.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw720dp-xhdpi/stat_sys_kb_battery_min_71.png b/packages/SystemUI/res/drawable-sw720dp-xhdpi/stat_sys_kb_battery_min_71.png
new file mode 100644
index 0000000..2f1c574
--- /dev/null
+++ b/packages/SystemUI/res/drawable-sw720dp-xhdpi/stat_sys_kb_battery_min_71.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw720dp-xhdpi/stat_sys_kb_battery_min_85.png b/packages/SystemUI/res/drawable-sw720dp-xhdpi/stat_sys_kb_battery_min_85.png
new file mode 100644
index 0000000..04d3ab9
--- /dev/null
+++ b/packages/SystemUI/res/drawable-sw720dp-xhdpi/stat_sys_kb_battery_min_85.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_kb_battery_charge_min_anim0.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_kb_battery_charge_min_anim0.png
new file mode 100644
index 0000000..c3ef421
--- /dev/null
+++ b/packages/SystemUI/res/drawable-xhdpi/stat_sys_kb_battery_charge_min_anim0.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_kb_battery_charge_min_anim100.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_kb_battery_charge_min_anim100.png
new file mode 100644
index 0000000..133e238
--- /dev/null
+++ b/packages/SystemUI/res/drawable-xhdpi/stat_sys_kb_battery_charge_min_anim100.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_kb_battery_charge_min_anim15.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_kb_battery_charge_min_anim15.png
new file mode 100644
index 0000000..41d1eb2e
--- /dev/null
+++ b/packages/SystemUI/res/drawable-xhdpi/stat_sys_kb_battery_charge_min_anim15.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_kb_battery_charge_min_anim28.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_kb_battery_charge_min_anim28.png
new file mode 100644
index 0000000..255939d
--- /dev/null
+++ b/packages/SystemUI/res/drawable-xhdpi/stat_sys_kb_battery_charge_min_anim28.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_kb_battery_charge_min_anim43.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_kb_battery_charge_min_anim43.png
new file mode 100644
index 0000000..4b7a183
--- /dev/null
+++ b/packages/SystemUI/res/drawable-xhdpi/stat_sys_kb_battery_charge_min_anim43.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_kb_battery_charge_min_anim57.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_kb_battery_charge_min_anim57.png
new file mode 100644
index 0000000..04312d0
--- /dev/null
+++ b/packages/SystemUI/res/drawable-xhdpi/stat_sys_kb_battery_charge_min_anim57.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_kb_battery_charge_min_anim71.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_kb_battery_charge_min_anim71.png
new file mode 100644
index 0000000..63ceeb8
--- /dev/null
+++ b/packages/SystemUI/res/drawable-xhdpi/stat_sys_kb_battery_charge_min_anim71.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_kb_battery_charge_min_anim85.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_kb_battery_charge_min_anim85.png
new file mode 100644
index 0000000..07e1fb4
--- /dev/null
+++ b/packages/SystemUI/res/drawable-xhdpi/stat_sys_kb_battery_charge_min_anim85.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_kb_battery_icon.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_kb_battery_icon.png
new file mode 100644
index 0000000..4bfdd0f
--- /dev/null
+++ b/packages/SystemUI/res/drawable-xhdpi/stat_sys_kb_battery_icon.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_kb_battery_min_0.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_kb_battery_min_0.png
new file mode 100644
index 0000000..e638da9
--- /dev/null
+++ b/packages/SystemUI/res/drawable-xhdpi/stat_sys_kb_battery_min_0.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_kb_battery_min_100.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_kb_battery_min_100.png
new file mode 100644
index 0000000..65bd4fe
--- /dev/null
+++ b/packages/SystemUI/res/drawable-xhdpi/stat_sys_kb_battery_min_100.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_kb_battery_min_15.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_kb_battery_min_15.png
new file mode 100644
index 0000000..c97af71
--- /dev/null
+++ b/packages/SystemUI/res/drawable-xhdpi/stat_sys_kb_battery_min_15.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_kb_battery_min_28.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_kb_battery_min_28.png
new file mode 100644
index 0000000..1a138f3
--- /dev/null
+++ b/packages/SystemUI/res/drawable-xhdpi/stat_sys_kb_battery_min_28.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_kb_battery_min_43.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_kb_battery_min_43.png
new file mode 100644
index 0000000..92e1b7c
--- /dev/null
+++ b/packages/SystemUI/res/drawable-xhdpi/stat_sys_kb_battery_min_43.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_kb_battery_min_57.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_kb_battery_min_57.png
new file mode 100644
index 0000000..c4700d6
--- /dev/null
+++ b/packages/SystemUI/res/drawable-xhdpi/stat_sys_kb_battery_min_57.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_kb_battery_min_71.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_kb_battery_min_71.png
new file mode 100644
index 0000000..13871fd
--- /dev/null
+++ b/packages/SystemUI/res/drawable-xhdpi/stat_sys_kb_battery_min_71.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_kb_battery_min_85.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_kb_battery_min_85.png
new file mode 100644
index 0000000..100dac9
--- /dev/null
+++ b/packages/SystemUI/res/drawable-xhdpi/stat_sys_kb_battery_min_85.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable/stat_sys_kb_battery_charge.xml b/packages/SystemUI/res/drawable/stat_sys_kb_battery_charge.xml
index 9f64b1a..300657b 100644
--- a/packages/SystemUI/res/drawable/stat_sys_kb_battery_charge.xml
+++ b/packages/SystemUI/res/drawable/stat_sys_kb_battery_charge.xml
@@ -1,20 +1,18 @@
<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
-** Copyright 2011, The Android Open Source 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.
-*/
+<!-- Copyright (C) 2007 The Android Open Source Project
+ 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.
-->
<level-list xmlns:android="http://schemas.android.com/apk/res/android">
diff --git a/packages/SystemUI/res/drawable/stat_sys_kb_battery_charge_min.xml b/packages/SystemUI/res/drawable/stat_sys_kb_battery_charge_min.xml
new file mode 100644
index 0000000..d13c4ad
--- /dev/null
+++ b/packages/SystemUI/res/drawable/stat_sys_kb_battery_charge_min.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2007 The Android Open Source Project
+ 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.
+-->
+
+<level-list xmlns:android="http://schemas.android.com/apk/res/android">
+ <item android:maxLevel="4" android:drawable="@drawable/stat_sys_kb_battery_charge_min_anim0" />
+ <item android:maxLevel="15" android:drawable="@drawable/stat_sys_kb_battery_charge_min_anim15" />
+ <item android:maxLevel="35" android:drawable="@drawable/stat_sys_kb_battery_charge_min_anim28" />
+ <item android:maxLevel="49" android:drawable="@drawable/stat_sys_kb_battery_charge_min_anim43" />
+ <item android:maxLevel="60" android:drawable="@drawable/stat_sys_kb_battery_charge_min_anim57" />
+ <item android:maxLevel="75" android:drawable="@drawable/stat_sys_kb_battery_charge_min_anim71" />
+ <item android:maxLevel="90" android:drawable="@drawable/stat_sys_kb_battery_charge_min_anim85" />
+ <item android:maxLevel="100" android:drawable="@drawable/stat_sys_kb_battery_charge_min_anim100" />
+</level-list>
diff --git a/packages/SystemUI/res/drawable/stat_sys_kb_battery_min.xml b/packages/SystemUI/res/drawable/stat_sys_kb_battery_min.xml
new file mode 100644
index 0000000..68d363a
--- /dev/null
+++ b/packages/SystemUI/res/drawable/stat_sys_kb_battery_min.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/* //device/apps/common/res/drawable/stat_sys_battery.xml
+**
+** Copyright 2007, The Android Open Source 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.
+*/
+-->
+
+<level-list xmlns:android="http://schemas.android.com/apk/res/android">
+ <item android:maxLevel="4" android:drawable="@drawable/stat_sys_kb_battery_min_0" />
+ <item android:maxLevel="15" android:drawable="@drawable/stat_sys_kb_battery_min_15" />
+ <item android:maxLevel="35" android:drawable="@drawable/stat_sys_kb_battery_min_28" />
+ <item android:maxLevel="49" android:drawable="@drawable/stat_sys_kb_battery_min_43" />
+ <item android:maxLevel="60" android:drawable="@drawable/stat_sys_kb_battery_min_57" />
+ <item android:maxLevel="75" android:drawable="@drawable/stat_sys_kb_battery_min_71" />
+ <item android:maxLevel="90" android:drawable="@drawable/stat_sys_kb_battery_min_85" />
+ <item android:maxLevel="100" android:drawable="@drawable/stat_sys_kb_battery_min_100" />
+</level-list>
diff --git a/packages/SystemUI/res/layout/status_bar.xml b/packages/SystemUI/res/layout/status_bar.xml
index 36273db..deada5d 100644
--- a/packages/SystemUI/res/layout/status_bar.xml
+++ b/packages/SystemUI/res/layout/status_bar.xml
@@ -107,15 +107,24 @@
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:singleLine="true"
- android:paddingLeft="4dip"
- android:layout_marginRight="-3dip"
+ android:paddingLeft="@dimen/status_bar_battery_cluster_padding"
+ android:layout_marginRight="@dimen/status_bar_battery_cluster_text_margin"
android:gravity="center_vertical|left"
/>
<ImageView
android:id="@+id/dock_battery"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
- android:paddingLeft="4dip"
+ android:paddingLeft="@dimen/status_bar_battery_cluster_padding"
+ />
+ <com.android.systemui.statusbar.policy.CircleDockBattery
+ android:id="@+id/circle_dock_battery"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:textAppearance="@style/TextAppearance.StatusBar.Battery"
+ android:singleLine="true"
+ android:gravity="bottom"
+ android:paddingLeft="@dimen/status_bar_battery_cluster_padding"
/>
<TextView
android:id="@+id/battery_text"
@@ -123,15 +132,15 @@
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:singleLine="true"
- android:paddingLeft="4dip"
- android:layout_marginRight="-3dip"
+ android:paddingLeft="@dimen/status_bar_battery_cluster_padding"
+ android:layout_marginRight="@dimen/status_bar_battery_cluster_text_margin"
android:gravity="left|center_vertical"
/>
<ImageView
android:id="@+id/battery"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
- android:paddingLeft="4dip"
+ android:paddingLeft="@dimen/status_bar_battery_cluster_padding"
/>
<com.android.systemui.statusbar.policy.CircleBattery
android:id="@+id/circle_battery"
@@ -140,7 +149,7 @@
android:textAppearance="@style/TextAppearance.StatusBar.Battery"
android:singleLine="true"
android:gravity="bottom"
- android:paddingLeft="4dip"
+ android:paddingLeft="@dimen/status_bar_battery_cluster_padding"
/>
</LinearLayout>
diff --git a/packages/SystemUI/res/values-sw600dp/dimens.xml b/packages/SystemUI/res/values-sw600dp/dimens.xml
index fc80f5c..1b9518a 100644
--- a/packages/SystemUI/res/values-sw600dp/dimens.xml
+++ b/packages/SystemUI/res/values-sw600dp/dimens.xml
@@ -51,4 +51,9 @@
<!-- How far to slide the panel out when you touch it -->
<!-- On tablets this is just the close_handle_height -->
<dimen name="peek_height">@dimen/close_handle_height</dimen>
+
+ <!-- The padding of the items of the battery cluster -->
+ <dimen name="status_bar_battery_cluster_padding">4dip</dimen>
+ <!-- The margin adjusment of the text items of the battery cluster -->
+ <dimen name="status_bar_battery_cluster_text_margin">-3dip</dimen>
</resources>
diff --git a/packages/SystemUI/res/values/dimens.xml b/packages/SystemUI/res/values/dimens.xml
index f4ee1c8..8cd90b7 100644
--- a/packages/SystemUI/res/values/dimens.xml
+++ b/packages/SystemUI/res/values/dimens.xml
@@ -211,4 +211,9 @@
<!-- How far to slide the panel out when you touch it -->
<!-- For phones, this is close_handle_height + header_height -->
<dimen name="peek_height">84dp</dimen>
+
+ <!-- The padding of the items of the battery cluster -->
+ <dimen name="status_bar_battery_cluster_padding">2dip</dimen>
+ <!-- The margin adjusment of the text items of the battery cluster -->
+ <dimen name="status_bar_battery_cluster_text_margin">-1dip</dimen>
</resources>
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java
index 26972c4..b7116b8 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java
@@ -19,6 +19,7 @@ package com.android.systemui.statusbar.phone;
import java.io.FileDescriptor;
import java.io.PrintWriter;
import java.util.ArrayList;
+import java.util.List;
import android.animation.Animator;
import android.animation.AnimatorListenerAdapter;
@@ -609,12 +610,18 @@ public class PhoneStatusBar extends BaseStatusBar {
if (mHasDockBattery) {
mDockBatteryController = new DockBatteryController(mContext);
- mDockBatteryController.addIconView((ImageView)mStatusBarView.findViewById(R.id.dock_battery));
+ mDockBatteryController.addIconView(
+ (ImageView)mStatusBarView.findViewById(R.id.dock_battery));
mDockBatteryController.addLabelView(
(TextView)mStatusBarView.findViewById(R.id.dock_battery_text));
} else {
- mStatusBarView.findViewById(R.id.dock_battery).setVisibility(View.GONE);
- mStatusBarView.findViewById(R.id.dock_battery_text).setVisibility(View.GONE);
+ // Remove dock battery icons if device doesn't hava dock battery support
+ View v = mStatusBarView.findViewById(R.id.dock_battery);
+ if (v != null) mStatusBarView.removeView(v);
+ v = mStatusBarView.findViewById(R.id.dock_battery_text);
+ if (v != null) mStatusBarView.removeView(v);
+ v = mStatusBarView.findViewById(R.id.circle_dock_battery);
+ if (v != null) mStatusBarView.removeView(v);
}
mNetworkController = new NetworkController(mContext);
@@ -2109,32 +2116,57 @@ public class PhoneStatusBar extends BaseStatusBar {
final View battery = mStatusBarView.findViewById(R.id.battery);
final View battery2 = mStatusBarView.findViewById(R.id.battery_text);
final View battery3 = mStatusBarView.findViewById(R.id.circle_battery);
+ final View dockBattery = mStatusBarView.findViewById(R.id.dock_battery);
+ final View dockBattery2 = mStatusBarView.findViewById(R.id.dock_battery_text);
+ final View dockBattery3 = mStatusBarView.findViewById(R.id.circle_dock_battery);
final View clock = mStatusBarView.findViewById(R.id.clock);
+ List<ObjectAnimator> lightsOutObjs = new ArrayList<ObjectAnimator>();
+ lightsOutObjs.add(ObjectAnimator.ofFloat(notifications, View.ALPHA, 0));
+ lightsOutObjs.add(ObjectAnimator.ofFloat(systemIcons, View.ALPHA, 0));
+ lightsOutObjs.add(ObjectAnimator.ofFloat(signal, View.ALPHA, 0));
+ lightsOutObjs.add(ObjectAnimator.ofFloat(signal2, View.ALPHA, 0));
+ lightsOutObjs.add(ObjectAnimator.ofFloat(battery, View.ALPHA, 0.5f));
+ lightsOutObjs.add(ObjectAnimator.ofFloat(battery2, View.ALPHA, 0.5f));
+ lightsOutObjs.add(ObjectAnimator.ofFloat(battery3, View.ALPHA, 0.5f));
+ if (dockBattery != null) {
+ lightsOutObjs.add(ObjectAnimator.ofFloat(dockBattery, View.ALPHA, 0.5f));
+ }
+ if (dockBattery2 != null) {
+ lightsOutObjs.add(ObjectAnimator.ofFloat(dockBattery2, View.ALPHA, 0.5f));
+ }
+ if (dockBattery3 != null) {
+ lightsOutObjs.add(ObjectAnimator.ofFloat(dockBattery3, View.ALPHA, 0.5f));
+ }
+ lightsOutObjs.add(ObjectAnimator.ofFloat(clock, View.ALPHA, 0.5f));
+
+ List<ObjectAnimator> lightsOnObjs = new ArrayList<ObjectAnimator>();
+ lightsOnObjs.add(ObjectAnimator.ofFloat(notifications, View.ALPHA, 1));
+ lightsOnObjs.add(ObjectAnimator.ofFloat(systemIcons, View.ALPHA, 1));
+ lightsOnObjs.add(ObjectAnimator.ofFloat(signal, View.ALPHA, 1));
+ lightsOnObjs.add(ObjectAnimator.ofFloat(signal2, View.ALPHA, 1));
+ lightsOnObjs.add(ObjectAnimator.ofFloat(battery, View.ALPHA, 1));
+ lightsOnObjs.add(ObjectAnimator.ofFloat(battery2, View.ALPHA, 1));
+ lightsOnObjs.add(ObjectAnimator.ofFloat(battery3, View.ALPHA, 1));
+ if (dockBattery != null) {
+ lightsOnObjs.add(ObjectAnimator.ofFloat(dockBattery, View.ALPHA, 1));
+ }
+ if (dockBattery2 != null) {
+ lightsOnObjs.add(ObjectAnimator.ofFloat(dockBattery2, View.ALPHA, 1));
+ }
+ if (dockBattery3 != null) {
+ lightsOnObjs.add(ObjectAnimator.ofFloat(dockBattery3, View.ALPHA, 1));
+ }
+ lightsOnObjs.add(ObjectAnimator.ofFloat(clock, View.ALPHA, 1));
+
final AnimatorSet lightsOutAnim = new AnimatorSet();
lightsOutAnim.playTogether(
- ObjectAnimator.ofFloat(notifications, View.ALPHA, 0),
- ObjectAnimator.ofFloat(systemIcons, View.ALPHA, 0),
- ObjectAnimator.ofFloat(signal, View.ALPHA, 0),
- ObjectAnimator.ofFloat(signal2, View.ALPHA, 0),
- ObjectAnimator.ofFloat(battery, View.ALPHA, 0.5f),
- ObjectAnimator.ofFloat(battery2, View.ALPHA, 0.5f),
- ObjectAnimator.ofFloat(battery3, View.ALPHA, 0.5f),
- ObjectAnimator.ofFloat(clock, View.ALPHA, 0.5f)
- );
+ lightsOutObjs.toArray(new ObjectAnimator[lightsOutObjs.size()]));
lightsOutAnim.setDuration(750);
final AnimatorSet lightsOnAnim = new AnimatorSet();
lightsOnAnim.playTogether(
- ObjectAnimator.ofFloat(notifications, View.ALPHA, 1),
- ObjectAnimator.ofFloat(systemIcons, View.ALPHA, 1),
- ObjectAnimator.ofFloat(signal, View.ALPHA, 1),
- ObjectAnimator.ofFloat(signal2, View.ALPHA, 1),
- ObjectAnimator.ofFloat(battery, View.ALPHA, 1),
- ObjectAnimator.ofFloat(battery2, View.ALPHA, 1),
- ObjectAnimator.ofFloat(battery3, View.ALPHA, 1),
- ObjectAnimator.ofFloat(clock, View.ALPHA, 1)
- );
+ lightsOnObjs.toArray(new ObjectAnimator[lightsOnObjs.size()]));
lightsOnAnim.setDuration(250);
mLightsOutAnimation = lightsOutAnim;
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/BatteryController.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/BatteryController.java
index 287d388..95fede4 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/BatteryController.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/BatteryController.java
@@ -18,7 +18,6 @@ package com.android.systemui.statusbar.policy;
import java.util.ArrayList;
-import android.bluetooth.BluetoothAdapter.BluetoothStateChangeCallback;
import android.content.BroadcastReceiver;
import android.content.ContentResolver;
import android.content.Context;
@@ -28,7 +27,6 @@ import android.database.ContentObserver;
import android.os.BatteryManager;
import android.os.Handler;
import android.provider.Settings;
-import android.util.Slog;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;
@@ -42,8 +40,8 @@ public class BatteryController extends BroadcastReceiver {
private ArrayList<ImageView> mIconViews = new ArrayList<ImageView>();
private ArrayList<TextView> mLabelViews = new ArrayList<TextView>();
- private static final int BATTERY_STYLE_NORMAL = 0;
- private static final int BATTERY_STYLE_PERCENT = 1;
+ public static final int BATTERY_STYLE_NORMAL = 0;
+ public static final int BATTERY_STYLE_PERCENT = 1;
/***
* BATTERY_STYLE_CIRCLE* cannot be handled in this controller, since we cannot get views from
* statusbar here. Yet it is listed for completion and not to confuse at future updates
@@ -51,21 +49,17 @@ public class BatteryController extends BroadcastReceiver {
*
* set to public to be reused by CircleBattery
*/
- public static final int BATTERY_STYLE_CIRCLE = 2;
- public static final int BATTERY_STYLE_CIRCLE_PERCENT = 3;
- private static final int BATTERY_STYLE_GONE = 4;
+ public static final int BATTERY_STYLE_CIRCLE = 2;
+ public static final int BATTERY_STYLE_CIRCLE_PERCENT = 3;
+ public static final int BATTERY_STYLE_GONE = 4;
- private static final int BATTERY_ICON_STYLE_NORMAL = R.drawable.stat_sys_battery;
- private static final int BATTERY_ICON_STYLE_CHARGE = R.drawable.stat_sys_battery_charge;
- private static final int BATTERY_ICON_STYLE_NORMAL_MIN = R.drawable.stat_sys_battery_min;
- private static final int BATTERY_ICON_STYLE_CHARGE_MIN = R.drawable.stat_sys_battery_charge_min;
private static final int BATTERY_TEXT_STYLE_NORMAL = R.string.status_bar_settings_battery_meter_format;
private static final int BATTERY_TEXT_STYLE_MIN = R.string.status_bar_settings_battery_meter_min_format;
private boolean mBatteryPlugged = false;
+ private int mBatteryStatus = BatteryManager.BATTERY_STATUS_UNKNOWN;
private int mBatteryStyle;
- private int mBatteryIcon = BATTERY_ICON_STYLE_NORMAL;
Handler mHandler;
@@ -94,7 +88,6 @@ public class BatteryController extends BroadcastReceiver {
public BatteryController(Context context) {
mContext = context;
-
mHandler = new Handler();
SettingsObserver settingsObserver = new SettingsObserver(mHandler);
@@ -103,7 +96,7 @@ public class BatteryController extends BroadcastReceiver {
IntentFilter filter = new IntentFilter();
filter.addAction(Intent.ACTION_BATTERY_CHANGED);
- context.registerReceiver(this, filter);
+ mContext.registerReceiver(this, filter);
}
public void addIconView(ImageView v) {
@@ -118,46 +111,101 @@ public class BatteryController extends BroadcastReceiver {
mChangeCallbacks.add(cb);
}
+ // Allow override battery icons
+ public int getIconStyleUnknown() {
+ return R.drawable.stat_sys_battery;
+ }
+ public int getIconStyleNormal() {
+ return R.drawable.stat_sys_battery;
+ }
+ public int getIconStyleCharge() {
+ return R.drawable.stat_sys_battery_charge;
+ }
+ public int getIconStyleNormalMin() {
+ return R.drawable.stat_sys_battery_min;
+ }
+ public int getIconStyleChargeMin() {
+ return R.drawable.stat_sys_battery_charge_min;
+ }
+
+ protected int getBatteryStyle() {
+ return mBatteryStyle;
+ }
+
+ protected int getBatteryStatus() {
+ return mBatteryStatus;
+ }
+
+ protected boolean isBatteryPlugged() {
+ return mBatteryPlugged;
+ }
+
+ protected boolean isBatteryPresent() {
+ // the battery widget always is shown.
+ return true;
+ }
+
+ private boolean isBatteryStatusUnknown() {
+ return getBatteryStatus() == BatteryManager.BATTERY_STATUS_UNKNOWN;
+ }
+
+ private boolean isBatteryStatusCharging() {
+ return getBatteryStatus() == BatteryManager.BATTERY_STATUS_CHARGING;
+ }
+
public void onReceive(Context context, Intent intent) {
final String action = intent.getAction();
if (action.equals(Intent.ACTION_BATTERY_CHANGED)) {
final int level = intent.getIntExtra(BatteryManager.EXTRA_LEVEL, 0);
mBatteryPlugged = intent.getIntExtra(BatteryManager.EXTRA_PLUGGED, 0) != 0;
- int N = mIconViews.size();
- for (int i=0; i<N; i++) {
- ImageView v = mIconViews.get(i);
- v.setImageLevel(level);
- v.setContentDescription(mContext.getString(R.string.accessibility_battery_level,
- level));
- }
- N = mLabelViews.size();
- for (int i=0; i<N; i++) {
- TextView v = mLabelViews.get(i);
- v.setText(mContext.getString(BATTERY_TEXT_STYLE_MIN,
- level));
- }
-
- for (BatteryStateChangeCallback cb : mChangeCallbacks) {
- cb.onBatteryLevelChanged(level, mBatteryPlugged);
- }
+ mBatteryStatus = intent.getIntExtra(BatteryManager.EXTRA_STATUS,
+ BatteryManager.BATTERY_STATUS_UNKNOWN);
+ updateViews(level);
updateBattery();
}
}
- private void updateBattery() {
+ protected void updateViews(int level) {
+ int N = mIconViews.size();
+ for (int i=0; i<N; i++) {
+ ImageView v = mIconViews.get(i);
+ v.setImageLevel(level);
+ v.setContentDescription(mContext.getString(R.string.accessibility_battery_level,
+ level));
+ }
+ N = mLabelViews.size();
+ for (int i=0; i<N; i++) {
+ TextView v = mLabelViews.get(i);
+ v.setText(mContext.getString(BATTERY_TEXT_STYLE_MIN,
+ level));
+ }
+
+ for (BatteryStateChangeCallback cb : mChangeCallbacks) {
+ cb.onBatteryLevelChanged(level, isBatteryStatusCharging());
+ }
+ }
+
+ protected void updateBattery() {
int mIcon = View.GONE;
int mText = View.GONE;
- int mIconStyle = BATTERY_ICON_STYLE_NORMAL;
-
- if (mBatteryStyle == BATTERY_STYLE_NORMAL) {
- mIcon = (View.VISIBLE);
- mIconStyle = mBatteryPlugged ? BATTERY_ICON_STYLE_CHARGE
- : BATTERY_ICON_STYLE_NORMAL;
- } else if (mBatteryStyle == BATTERY_STYLE_PERCENT) {
- mIcon = (View.VISIBLE);
- mText = (View.VISIBLE);
- mIconStyle = mBatteryPlugged ? BATTERY_ICON_STYLE_CHARGE_MIN
- : BATTERY_ICON_STYLE_NORMAL_MIN;
+ int mIconStyle = getIconStyleNormal();
+
+ if (isBatteryPresent()) {
+ if ( isBatteryStatusUnknown() &&
+ (mBatteryStyle == BATTERY_STYLE_NORMAL || mBatteryStyle == BATTERY_STYLE_PERCENT)) {
+ // Unknown status doesn't relies on any style
+ mIcon = (View.VISIBLE);
+ mIconStyle = getIconStyleUnknown();
+ } else if (mBatteryStyle == BATTERY_STYLE_NORMAL) {
+ mIcon = (View.VISIBLE);
+ mIconStyle = isBatteryStatusCharging() ?
+ getIconStyleCharge() : getIconStyleNormal();
+ } else if (mBatteryStyle == BATTERY_STYLE_PERCENT) {
+ mIcon = (View.VISIBLE);
+ mText = (View.VISIBLE);
+ mIconStyle = isBatteryStatusCharging() ?
+ getIconStyleChargeMin() : getIconStyleNormalMin();
+ }
}
int N = mIconViews.size();
@@ -175,9 +223,8 @@ public class BatteryController extends BroadcastReceiver {
private void updateSettings() {
ContentResolver resolver = mContext.getContentResolver();
-
mBatteryStyle = (Settings.System.getInt(resolver,
- Settings.System.STATUS_BAR_BATTERY, 0));
+ Settings.System.STATUS_BAR_BATTERY, BATTERY_STYLE_NORMAL));
updateBattery();
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/CircleBattery.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/CircleBattery.java
index e521b02..01178c0 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/CircleBattery.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/CircleBattery.java
@@ -44,7 +44,7 @@ import com.android.internal.R;
/***
* Note about CircleBattery Implementation:
*
- * Unfortunately, we cannot use BatteryController or DockBatteryController here,
+ * Unfortunately, we cannot use BatteryController here,
* since communication between controller and this view is not possible without
* huge changes. As a result, this Class is doing everything by itself,
* monitoring battery level and battery settings.
@@ -59,22 +59,18 @@ public class CircleBattery extends ImageView {
private boolean mAttached; // whether or not attached to a window
private boolean mActivated; // whether or not activated due to system settings
private boolean mPercentage; // whether or not to show percentage number
- private boolean mIsCharging; // whether or not device is currently charging
+ private boolean mBatteryPlugged;// whether or not battery is currently plugged
+ private int mBatteryStatus; // current battery status
private int mLevel; // current battery level
private int mAnimOffset; // current level of charging animation
private boolean mIsAnimating; // stores charge-animation status to reliably remove callbacks
- private int mDockLevel; // current dock battery level
- private boolean mDockIsCharging;// whether or not dock battery is currently charging
- private boolean mIsDocked = false; // whether or not dock battery is connected
private int mCircleSize; // draw size of circle. read rather complicated from
// another status bar icon, so it fits the icon size
// no matter the dps and resolution
private RectF mRectLeft; // contains the precalculated rect used in drawArc(), derived from mCircleSize
- private RectF mRectRight; // contains the precalculated rect used in drawArc() for dock battery
private Float mTextLeftX; // precalculated x position for drawText() to appear centered
private Float mTextY; // precalculated y position for drawText() to appear vertical-centered
- private Float mTextRightX; // precalculated x position for dock battery drawText()
// quiet a lot of paint variables. helps to move cpu-usage from actual drawing to initialization
private Paint mPaintFont;
@@ -112,7 +108,7 @@ public class CircleBattery extends ImageView {
mActivated = (batteryStyle == BatteryController.BATTERY_STYLE_CIRCLE || batteryStyle == BatteryController.BATTERY_STYLE_CIRCLE_PERCENT);
mPercentage = (batteryStyle == BatteryController.BATTERY_STYLE_CIRCLE_PERCENT);
- setVisibility(mActivated ? View.VISIBLE : View.GONE);
+ setVisibility(mActivated && isBatteryPresent() ? View.VISIBLE : View.GONE);
if (mBatteryReceiver != null) {
mBatteryReceiver.updateRegistration();
}
@@ -134,13 +130,16 @@ public class CircleBattery extends ImageView {
public void onReceive(Context context, Intent intent) {
final String action = intent.getAction();
if (action.equals(Intent.ACTION_BATTERY_CHANGED)) {
- mLevel = intent.getIntExtra(BatteryManager.EXTRA_LEVEL, 0);
- mIsCharging = intent.getIntExtra(BatteryManager.EXTRA_PLUGGED, 0) != 0;
+ onBatteryStatusChange(intent);
+
+ int visibility = mActivated && isBatteryPresent() ? View.VISIBLE : View.GONE;
+ if (getVisibility() != visibility) {
+ setVisibility(visibility);
+ }
if (mActivated && mAttached) {
LayoutParams l = getLayoutParams();
- l.width = mCircleSize + getPaddingLeft()
- + (mIsDocked ? mCircleSize + getPaddingLeft() : 0);
+ l.width = mCircleSize + getPaddingLeft();
setLayoutParams(l);
invalidate();
@@ -208,6 +207,10 @@ public class CircleBattery extends ImageView {
mPaintSystem = new Paint(mPaintFont);
mPaintRed = new Paint(mPaintFont);
+ mPaintGray.setStrokeCap(Paint.Cap.BUTT);
+ mPaintSystem.setStrokeCap(Paint.Cap.BUTT);
+ mPaintRed.setStrokeCap(Paint.Cap.BUTT);
+
mPaintFont.setColor(res.getColor(R.color.holo_blue_dark));
mPaintSystem.setColor(res.getColor(R.color.holo_blue_dark));
// could not find the darker definition anywhere in resources
@@ -220,6 +223,38 @@ public class CircleBattery extends ImageView {
mPaintFont.setFakeBoldText(true);
}
+ protected int getLevel() {
+ return mLevel;
+ }
+
+ protected int getBatteryStatus() {
+ return mBatteryStatus;
+ }
+
+ protected boolean isBatteryPlugged() {
+ return mBatteryPlugged;
+ }
+
+ protected boolean isBatteryPresent() {
+ // the battery widget always is shown.
+ return true;
+ }
+
+ private boolean isBatteryStatusUnknown() {
+ return getBatteryStatus() == BatteryManager.BATTERY_STATUS_UNKNOWN;
+ }
+
+ private boolean isBatteryStatusCharging() {
+ return getBatteryStatus() == BatteryManager.BATTERY_STATUS_CHARGING;
+ }
+
+ protected void onBatteryStatusChange(Intent intent) {
+ mLevel = intent.getIntExtra(BatteryManager.EXTRA_LEVEL, 0);
+ mBatteryPlugged = intent.getIntExtra(BatteryManager.EXTRA_PLUGGED, 0) != 0;
+ mBatteryStatus = intent.getIntExtra(BatteryManager.EXTRA_STATUS,
+ BatteryManager.BATTERY_STATUS_UNKNOWN);
+ }
+
@Override
protected void onAttachedToWindow() {
super.onAttachedToWindow();
@@ -249,21 +284,25 @@ public class CircleBattery extends ImageView {
initSizeMeasureIconHeight();
}
- setMeasuredDimension(mCircleSize + getPaddingLeft()
- + (mIsDocked ? mCircleSize + getPaddingLeft() : 0), mCircleSize);
+ setMeasuredDimension(mCircleSize + getPaddingLeft(), mCircleSize);
}
- private void drawCircle(Canvas canvas, int level, int animOffset, float textX, RectF drawRect) {
+ protected void drawCircle(Canvas canvas, int level, int animOffset, float textX, RectF drawRect) {
Paint usePaint = mPaintSystem;
+ int internalLevel = level;
+ boolean unknownStatus = isBatteryStatusUnknown();
// turn red at 14% - same level android battery warning appears
- if (level <= 14) {
+ if (unknownStatus) {
+ usePaint = mPaintGray;
+ internalLevel = 100; // Draw all the circle;
+ } else if (internalLevel <= 14) {
usePaint = mPaintRed;
}
// pad circle percentage to 100% once it reaches 97%
// for one, the circle looks odd with a too small gap,
// for another, some phones never reach 100% due to hardware design
- int padLevel = level;
+ int padLevel = internalLevel;
if (padLevel >= 97) {
padLevel = 100;
}
@@ -274,9 +313,12 @@ public class CircleBattery extends ImageView {
canvas.drawArc(drawRect, 270 + animOffset, 3.6f * padLevel, false, usePaint);
// if chosen by options, draw percentage text in the middle
// always skip percentage when 100, so layout doesnt break
- if (level < 100 && mPercentage) {
+ if (unknownStatus) {
+ mPaintFont.setColor(usePaint.getColor());
+ canvas.drawText("?", textX, mTextY, mPaintFont);
+ } else if (internalLevel < 100 && mPercentage) {
mPaintFont.setColor(usePaint.getColor());
- canvas.drawText(Integer.toString(level), textX, mTextY, mPaintFont);
+ canvas.drawText(Integer.toString(internalLevel), textX, mTextY, mPaintFont);
}
}
@@ -289,12 +331,9 @@ public class CircleBattery extends ImageView {
updateChargeAnim();
- if (mIsDocked) {
- drawCircle(canvas, mDockLevel, (mDockIsCharging ? mAnimOffset : 0), mTextLeftX, mRectLeft);
- drawCircle(canvas, mLevel, (mIsCharging ? mAnimOffset : 0), mTextRightX, mRectRight);
- } else {
- drawCircle(canvas, mLevel, (mIsCharging ? mAnimOffset : 0), mTextLeftX, mRectLeft);
- }
+ drawCircle(canvas,
+ getLevel(),
+ (isBatteryStatusCharging() ? mAnimOffset : 0), mTextLeftX, mRectLeft);
}
/***
@@ -303,7 +342,7 @@ public class CircleBattery extends ImageView {
* uses mInvalidate for delayed invalidate() callbacks
*/
private void updateChargeAnim() {
- if (!(mIsCharging || mDockIsCharging) || (mLevel >= 97 && mDockLevel >= 97)) {
+ if (!isBatteryStatusCharging() || getLevel() >= 97) {
if (mIsAnimating) {
mIsAnimating = false;
mAnimOffset = 0;
@@ -345,15 +384,11 @@ public class CircleBattery extends ImageView {
int pLeft = getPaddingLeft();
mRectLeft = new RectF(pLeft + strokeWidth / 2.0f, 0 + strokeWidth / 2.0f, mCircleSize
- strokeWidth / 2.0f + pLeft, mCircleSize - strokeWidth / 2.0f);
- int off = pLeft + mCircleSize;
- mRectRight = new RectF(mRectLeft.left + off, mRectLeft.top, mRectLeft.right + off,
- mRectLeft.bottom);
// calculate Y position for text
Rect bounds = new Rect();
mPaintFont.getTextBounds("99", 0, "99".length(), bounds);
mTextLeftX = mCircleSize / 2.0f + getPaddingLeft();
- mTextRightX = mTextLeftX + off;
// the +1 at end of formular balances out rounding issues. works out on all resolutions
mTextY = mCircleSize / 2.0f + (bounds.bottom - bounds.top) / 2.0f - strokeWidth / 2.0f + 1;
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/CircleDockBattery.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/CircleDockBattery.java
new file mode 100644
index 0000000..dba10b8
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/CircleDockBattery.java
@@ -0,0 +1,141 @@
+/*
+ * Copyright (C) 2012 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.systemui.statusbar.policy;
+
+import android.content.Context;
+import android.content.Intent;
+import android.graphics.Bitmap;
+import android.graphics.BitmapFactory;
+import android.graphics.Canvas;
+import android.graphics.Paint;
+import android.graphics.Rect;
+import android.graphics.RectF;
+import android.os.BatteryManager;
+import android.util.AttributeSet;
+
+import com.android.systemui.R;
+
+/***
+ * Implementation of the CircleBattery widget adapted for listening dock battery status
+ * @see CircleBattery
+ */
+
+public class CircleDockBattery extends CircleBattery {
+
+ private int mLevel;
+ private int mDockBatteryStatus = BatteryManager.BATTERY_STATUS_UNKNOWN;
+ private boolean mBatteryPlugged = false;
+ private boolean mBatteryPresent = false;
+
+ private final Context mContext;
+ private boolean mAttached;
+
+ private Bitmap mDockIcon;
+ private Paint mPaint;
+
+ /***
+ * Start of CircleDockBattery implementation
+ */
+ public CircleDockBattery(Context context) {
+ this(context, null);
+ }
+
+ public CircleDockBattery(Context context, AttributeSet attrs) {
+ this(context, attrs, 0);
+ }
+
+ public CircleDockBattery(Context context, AttributeSet attrs, int defStyle) {
+ super(context, attrs, defStyle);
+ mContext = context;
+ }
+
+ @Override
+ protected void onAttachedToWindow() {
+ if (!mAttached) {
+ // Load the resource to display as dock icon
+ mDockIcon = BitmapFactory.decodeResource(
+ mContext.getResources(),
+ R.drawable.stat_sys_kb_battery_icon);
+
+ // Use an anti-alias while drawing the dock icon
+ mPaint = new Paint();
+ mPaint.setAntiAlias(true);
+ mPaint.setFilterBitmap(true);
+ mPaint.setDither(true);
+
+ mAttached = true;
+ }
+ super.onAttachedToWindow();
+ }
+
+ @Override
+ protected void onDetachedFromWindow() {
+ if (mDockIcon != null) {
+ mDockIcon.recycle();
+ }
+ mDockIcon = null;
+ mPaint = null;
+ mAttached = false;
+ super.onDetachedFromWindow();
+ }
+
+ @Override
+ protected int getLevel() {
+ return mLevel;
+ }
+
+ @Override
+ protected int getBatteryStatus() {
+ return mDockBatteryStatus;
+ }
+
+ @Override
+ protected boolean isBatteryPlugged() {
+ return mBatteryPlugged;
+ }
+
+ @Override
+ protected boolean isBatteryPresent() {
+ return mBatteryPresent;
+ }
+
+ @Override
+ protected void onBatteryStatusChange(Intent intent) {
+ mLevel = intent.getIntExtra(BatteryManager.EXTRA_DOCK_LEVEL, 0);
+ mDockBatteryStatus = intent.getIntExtra(
+ BatteryManager.EXTRA_DOCK_STATUS,
+ BatteryManager.BATTERY_STATUS_UNKNOWN);
+ mBatteryPlugged = intent.getIntExtra(BatteryManager.EXTRA_DOCK_PLUGGED, 0) != 0;
+ mBatteryPresent = intent.getBooleanExtra(BatteryManager.EXTRA_DOCK_PRESENT, false);
+ }
+
+ @Override
+ protected void drawCircle(Canvas canvas, int level, int animOffset, float textX, RectF drawRect) {
+ super.drawCircle(canvas, level, animOffset, textX, drawRect);
+ if (mDockIcon != null) {
+ Rect src = new Rect(0, 0, mDockIcon.getWidth(), mDockIcon.getHeight());
+ float h = getHeight() - getPaddingBottom();
+ float w = getWidth() - getPaddingLeft() - getPaddingRight();
+ RectF dst = new RectF(
+ getPaddingLeft() + (w / 2) - (src.width() / 2),
+ h - src.height(),
+ getWidth() - getPaddingRight() - (w / 2) + (src.width() / 2),
+ h);
+ canvas.drawBitmap(mDockIcon, src, dst, mPaint);
+ }
+ }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/DockBatteryController.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/DockBatteryController.java
index f022839..fae6572 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/DockBatteryController.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/DockBatteryController.java
@@ -16,151 +16,72 @@
package com.android.systemui.statusbar.policy;
-import java.util.ArrayList;
-
-import android.content.BroadcastReceiver;
-import android.content.ContentResolver;
import android.content.Context;
import android.content.Intent;
-import android.content.IntentFilter;
-import android.database.ContentObserver;
import android.os.BatteryManager;
-import android.os.Handler;
-import android.provider.Settings;
-import android.view.View;
-import android.widget.ImageView;
-import android.widget.TextView;
import com.android.systemui.R;
-public class DockBatteryController extends BroadcastReceiver {
+public class DockBatteryController extends BatteryController {
private static final String TAG = "StatusBar.DockBatteryController";
- private Context mContext;
- private ArrayList<ImageView> mIconViews = new ArrayList<ImageView>();
- private ArrayList<TextView> mLabelViews = new ArrayList<TextView>();
-
- private static final int BATTERY_STYLE_NORMAL = 0;
- private static final int BATTERY_STYLE_TEXT = 1;
- private static final int BATTERY_STYLE_HIDE = 2;
-
- private static final int BATTERY_ICON_STYLE_UNKNOWN = R.drawable.stat_sys_kb_battery_unknown;
- private static final int BATTERY_ICON_STYLE_NORMAL = R.drawable.stat_sys_kb_battery;
- private static final int BATTERY_ICON_STYLE_CHARGE = R.drawable.stat_sys_kb_battery_charge;
-
- private int mDockStatus = BatteryManager.DOCK_BATTERY_STATUS_UNKNOWN;
- private boolean mDockPresent = false;
- private int mBatteryStyle;
-
- private static final int BATTERY_TEXT_STYLE_MIN =
- R.string.status_bar_settings_battery_meter_min_format;
-
- private Handler mHandler;
-
- class SettingsObserver extends ContentObserver {
- SettingsObserver(Handler handler) {
- super(handler);
- }
-
- void observe() {
- ContentResolver resolver = mContext.getContentResolver();
- resolver.registerContentObserver(Settings.System.getUriFor(
- Settings.System.STATUS_BAR_BATTERY), false, this);
- }
-
- @Override
- public void onChange(boolean selfChange) {
- updateSettings();
- }
- }
+ private int mDockBatteryStatus = BatteryManager.BATTERY_STATUS_UNKNOWN;
+ private boolean mBatteryPlugged = false;
+ private boolean mBatteryPresent = false;
public DockBatteryController(Context context) {
- mContext = context;
- mHandler = new Handler();
-
- SettingsObserver settingsObserver = new SettingsObserver(mHandler);
- settingsObserver.observe();
- updateSettings();
-
- IntentFilter filter = new IntentFilter();
- filter.addAction(Intent.ACTION_BATTERY_CHANGED);
- context.registerReceiver(this, filter);
- }
-
- public void addIconView(ImageView v) {
- mIconViews.add(v);
- }
-
- public void addLabelView(TextView v) {
- mLabelViews.add(v);
+ super(context);
}
+ @Override
public void onReceive(Context context, Intent intent) {
final String action = intent.getAction();
if (action.equals(Intent.ACTION_BATTERY_CHANGED)) {
final int level = intent.getIntExtra(BatteryManager.EXTRA_DOCK_LEVEL, 0);
- mDockStatus = intent.getIntExtra(BatteryManager.EXTRA_DOCK_STATUS,
- BatteryManager.DOCK_BATTERY_STATUS_UNKNOWN);
- mDockPresent = intent.getBooleanExtra(BatteryManager.EXTRA_DOCK_PRESENT,
- false);
-
- int N = mIconViews.size();
- for (int i = 0; i < N; i++) {
- ImageView v = mIconViews.get(i);
- v.setImageLevel(level);
- v.setContentDescription(mContext.getString(R.string.accessibility_battery_level,
- level));
- }
-
- N = mLabelViews.size();
- for (int i = 0; i < N; i++) {
- TextView v = mLabelViews.get(i);
- v.setText(mContext.getString(BATTERY_TEXT_STYLE_MIN, level));
- }
-
+ mDockBatteryStatus = intent.getIntExtra(
+ BatteryManager.EXTRA_DOCK_STATUS,
+ BatteryManager.BATTERY_STATUS_UNKNOWN);
+ mBatteryPlugged = intent.getIntExtra(BatteryManager.EXTRA_DOCK_PLUGGED, 0) != 0;
+ mBatteryPresent = intent.getBooleanExtra(BatteryManager.EXTRA_DOCK_PRESENT, false);
+ updateViews(level);
updateBattery();
}
}
- private void updateBattery() {
- int icon = View.GONE;
- int text = View.GONE;
- int iconStyle = BATTERY_ICON_STYLE_UNKNOWN;
-
- if (mDockPresent && mBatteryStyle != BATTERY_STYLE_HIDE) {
- icon = View.VISIBLE;
-
- if (mBatteryStyle == BATTERY_STYLE_TEXT) {
- text = View.VISIBLE;
- }
-
- if (mDockStatus == BatteryManager.DOCK_BATTERY_STATUS_NOT_CHARGING) {
- iconStyle = BATTERY_ICON_STYLE_NORMAL;
- } else if (mDockStatus == BatteryManager.DOCK_BATTERY_STATUS_CHARGING) {
- iconStyle = BATTERY_ICON_STYLE_CHARGE;
- }
- }
-
- int N = mIconViews.size();
- for (int i = 0; i < N; i++) {
- ImageView v = mIconViews.get(i);
- v.setVisibility(icon);
- v.setImageResource(iconStyle);
- }
-
- N = mLabelViews.size();
- for (int i = 0; i < N; i++) {
- TextView v = mLabelViews.get(i);
- v.setVisibility(text);
- }
+ @Override
+ public int getIconStyleUnknown() {
+ return R.drawable.stat_sys_kb_battery_unknown;
+ }
+ @Override
+ public int getIconStyleNormal() {
+ return R.drawable.stat_sys_kb_battery;
+ }
+ @Override
+ public int getIconStyleCharge() {
+ return R.drawable.stat_sys_kb_battery_charge;
+ }
+ @Override
+ public int getIconStyleNormalMin() {
+ return R.drawable.stat_sys_kb_battery_min;
+ }
+ @Override
+ public int getIconStyleChargeMin() {
+ return R.drawable.stat_sys_kb_battery_charge_min;
}
- private void updateSettings() {
- ContentResolver resolver = mContext.getContentResolver();
+ @Override
+ protected int getBatteryStatus() {
+ return mDockBatteryStatus;
+ }
- mBatteryStyle = (Settings.System.getInt(resolver,
- Settings.System.STATUS_BAR_BATTERY, BATTERY_STYLE_NORMAL));
+ @Override
+ protected boolean isBatteryPlugged() {
+ return mBatteryPlugged;
+ }
- updateBattery();
+ @Override
+ protected boolean isBatteryPresent() {
+ return mBatteryPresent;
}
+
}
diff --git a/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java b/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java
index 6ea2077..ea2a524 100755
--- a/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java
+++ b/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java
@@ -69,6 +69,7 @@ import android.provider.Settings;
import com.android.internal.R;
import com.android.internal.app.ThemeUtils;
import com.android.internal.os.DeviceKeyHandler;
+import com.android.internal.os.IDeviceHandler;
import com.android.internal.policy.PolicyManager;
import com.android.internal.policy.impl.keyguard.KeyguardViewManager;
import com.android.internal.policy.impl.keyguard.KeyguardViewMediator;
@@ -76,8 +77,6 @@ import com.android.internal.statusbar.IStatusBarService;
import com.android.internal.telephony.ITelephony;
import com.android.internal.widget.PointerLocationView;
-import dalvik.system.DexClassLoader;
-
import android.util.DisplayMetrics;
import android.util.EventLog;
import android.util.Log;
@@ -170,7 +169,6 @@ import java.io.FileReader;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;
-import java.lang.reflect.Constructor;
/**
* WindowManagerPolicy implementation for the Android phone UI. This
@@ -259,7 +257,7 @@ public class PhoneWindowManager implements WindowManagerPolicy {
KeyEvent.KEYCODE_CALCULATOR, Intent.CATEGORY_APP_CALCULATOR);
}
- private DeviceKeyHandler mDeviceKeyHandler;
+ private final DeviceKeyHandler mDeviceKeyHandler;
/**
* Lock protecting internal state. Must not call out into window
@@ -680,6 +678,10 @@ public class PhoneWindowManager implements WindowManagerPolicy {
}
MyOrientationListener mOrientationListener;
+ public PhoneWindowManager(IDeviceHandler device) {
+ mDeviceKeyHandler = (device != null) ? device.getDeviceKeyHandler() : null;
+ }
+
IStatusBarService getStatusBarService() {
synchronized (mServiceAquireLock) {
if (mStatusBarService == null) {
@@ -1205,30 +1207,6 @@ public class PhoneWindowManager implements WindowManagerPolicy {
} else {
screenTurnedOff(WindowManagerPolicy.OFF_BECAUSE_OF_USER);
}
-
- String deviceKeyHandlerLib = mContext.getResources().getString(
- com.android.internal.R.string.config_deviceKeyHandlerLib);
-
- String deviceKeyHandlerClass = mContext.getResources().getString(
- com.android.internal.R.string.config_deviceKeyHandlerClass);
-
- if (!deviceKeyHandlerLib.isEmpty() && !deviceKeyHandlerClass.isEmpty()) {
- DexClassLoader loader = new DexClassLoader(deviceKeyHandlerLib,
- new ContextWrapper(mContext).getCacheDir().getAbsolutePath(),
- null,
- ClassLoader.getSystemClassLoader());
- try {
- Class<?> klass = loader.loadClass(deviceKeyHandlerClass);
- Constructor<?> constructor = klass.getConstructor(Context.class);
- mDeviceKeyHandler = (DeviceKeyHandler) constructor.newInstance(
- mContext);
- if(DEBUG) Slog.d(TAG, "Device key handler loaded");
- } catch (Exception e) {
- Slog.w(TAG, "Could not instantiate device key handler "
- + deviceKeyHandlerClass + " from class "
- + deviceKeyHandlerLib, e);
- }
- }
}
public void setInitialDisplaySize(Display display, int width, int height, int density) {
diff --git a/policy/src/com/android/internal/policy/impl/Policy.java b/policy/src/com/android/internal/policy/impl/Policy.java
index 153ef0f..25d653f 100644
--- a/policy/src/com/android/internal/policy/impl/Policy.java
+++ b/policy/src/com/android/internal/policy/impl/Policy.java
@@ -23,6 +23,7 @@ import android.view.LayoutInflater;
import android.view.Window;
import android.view.WindowManagerPolicy;
+import com.android.internal.os.IDeviceHandler;
import com.android.internal.policy.IPolicy;
import com.android.internal.policy.impl.PhoneLayoutInflater;
import com.android.internal.policy.impl.PhoneWindow;
@@ -67,8 +68,8 @@ public class Policy implements IPolicy {
return new PhoneLayoutInflater(context);
}
- public WindowManagerPolicy makeNewWindowManager() {
- return new PhoneWindowManager();
+ public WindowManagerPolicy makeNewWindowManager(IDeviceHandler device) {
+ return new PhoneWindowManager(device);
}
public FallbackEventHandler makeNewFallbackEventHandler(Context context) {
diff --git a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardMessageArea.java b/policy/src/com/android/internal/policy/impl/keyguard/KeyguardMessageArea.java
index 792c8e2..68a9645 100644
--- a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardMessageArea.java
+++ b/policy/src/com/android/internal/policy/impl/keyguard/KeyguardMessageArea.java
@@ -21,6 +21,7 @@ import android.animation.AnimatorListenerAdapter;
import android.animation.ObjectAnimator;
import android.content.ContentResolver;
import android.content.Context;
+import android.os.BatteryManager;
import android.os.Handler;
import android.os.Looper;
import android.os.UserHandle;
@@ -137,7 +138,9 @@ class KeyguardMessageArea extends TextView {
private KeyguardUpdateMonitorCallback mInfoCallback = new KeyguardUpdateMonitorCallback() {
@Override
public void onRefreshBatteryInfo(KeyguardUpdateMonitor.BatteryStatus status) {
- mPluggedIn = status.isPluggedIn();
+ // Use the status instead of plugged attribute
+ mPluggedIn = status.status == BatteryManager.BATTERY_STATUS_CHARGING ||
+ status.status == BatteryManager.BATTERY_STATUS_FULL;
mBatteryLevel = status.level;
mBatteryCharged = status.isCharged();
mBatteryIsLow = status.isBatteryLow();
@@ -229,7 +232,7 @@ class KeyguardMessageArea extends TextView {
if (mShowingBatteryInfo && !mShowingMessage) {
// Battery status
if (mPluggedIn) {
- // Charging, charged or waiting to charge.
+ // Charging, charged.
string = getContext().getString(mBatteryCharged ?
com.android.internal.R.string.lockscreen_charged
:com.android.internal.R.string.lockscreen_plugged_in, mBatteryLevel);
diff --git a/services/java/com/android/server/BatteryService.java b/services/java/com/android/server/BatteryService.java
index 5dbc2e4..08d9ffa 100644
--- a/services/java/com/android/server/BatteryService.java
+++ b/services/java/com/android/server/BatteryService.java
@@ -17,18 +17,23 @@
package com.android.server;
import com.android.internal.app.IBatteryStats;
+import com.android.internal.os.DeviceDockBatteryHandler;
+import com.android.internal.os.IDeviceHandler;
import com.android.server.am.BatteryStatsService;
import android.app.ActivityManagerNative;
+import android.content.BroadcastReceiver;
import android.content.ContentResolver;
import android.content.Context;
import android.content.Intent;
+import android.content.IntentFilter;
import android.content.pm.PackageManager;
import android.content.res.Resources;
import android.database.ContentObserver;
import android.graphics.Color;
import android.os.BatteryManager;
import android.os.Binder;
+import android.os.Bundle;
import android.os.FileUtils;
import android.os.Handler;
import android.os.IBinder;
@@ -65,7 +70,7 @@ import java.util.Calendar;
* <p>&quot;present&quot; - boolean, true if the battery is present<br />
* <p>&quot;icon-small&quot; - int, suggested small icon to use for this state</p>
* <p>&quot;plugged&quot; - int, 0 if the device is not plugged in; 1 if plugged
- * into an AC power adapter; 2 if plugged in via USB.</p>
+ * into an AC power adapter; 2 if plugged in via USB; 4 if plugged in via Wireless.</p>
* <p>&quot;voltage&quot; - int, current battery voltage in millivolts</p>
* <p>&quot;temperature&quot; - int, current battery temperature in tenths of
* a degree Centigrade</p>
@@ -129,15 +134,9 @@ public final class BatteryService extends Binder {
private boolean mLastBatteryLevelCritical;
private int mLastInvalidCharger;
+ // Device specific handler for extra dock battery
private boolean mHasDockBattery;
-
- private int mDockBatteryStatus;
- private int mDockBatteryLevel;
- private boolean mDockBatteryPresent;
-
- private int mLastDockBatteryStatus;
- private int mLastDockBatteryLevel;
- private boolean mLastDockBatteryPresent;
+ private DeviceDockBatteryHandler mDeviceDockBattery;
private int mLowBatteryWarningLevel;
private int mLowBatteryCloseWarningLevel;
@@ -168,7 +167,7 @@ public final class BatteryService extends Binder {
private int mQuietHoursEnd = 0;
private boolean mQuietHoursDim = true;
- public BatteryService(Context context, LightsService lights) {
+ public BatteryService(Context context, LightsService lights, IDeviceHandler deviceHandler) {
mContext = context;
mHandler = new Handler(true /*async*/);
mLed = new Led(context, lights);
@@ -183,8 +182,19 @@ public final class BatteryService extends Binder {
mShutdownBatteryTemperature = mContext.getResources().getInteger(
com.android.internal.R.integer.config_shutdownBatteryTemperature);
+ // Has Dock battery? and device specific handler?
mHasDockBattery = mContext.getResources().getBoolean(
com.android.internal.R.bool.config_hasDockBattery);
+ if (mHasDockBattery) {
+ if (deviceHandler != null) {
+ mDeviceDockBattery = deviceHandler.getDeviceDockBatteryHandler();
+
+ // Force an update of the data when dock state change
+ IntentFilter filter = new IntentFilter();
+ filter.addAction(Intent.ACTION_DOCK_EVENT);
+ context.registerReceiver(mDockReceiver, filter);
+ }
+ }
mPowerSupplyObserver.startObserving("SUBSYSTEM=power_supply");
@@ -226,6 +236,7 @@ public final class BatteryService extends Binder {
if (mBatteryStatus == BatteryManager.BATTERY_STATUS_UNKNOWN) {
return true;
}
+ // mAcOnline is used for main ac and dock battery ac
if ((plugTypeSet & BatteryManager.BATTERY_PLUGGED_AC) != 0 && mAcOnline) {
return true;
}
@@ -306,6 +317,9 @@ public final class BatteryService extends Binder {
if (!mUpdatesStopped) {
// Update the values of mAcOnline, et. all.
native_update();
+ if (mDeviceDockBattery != null) {
+ mDeviceDockBattery.update();
+ }
// Process the new values.
processValuesLocked();
@@ -316,8 +330,14 @@ public final class BatteryService extends Binder {
boolean logOutlier = false;
long dischargeDuration = 0;
+ // Process the dock battery values
+ if (mDeviceDockBattery != null) {
+ mDeviceDockBattery.process();
+ }
+
mBatteryLevelCritical = (mBatteryLevel <= mCriticalBatteryLevel);
- if (mAcOnline) {
+ if (mAcOnline ||
+ (mDeviceDockBattery != null && mDeviceDockBattery.isPlugged())) {
mPlugType = BatteryManager.BATTERY_PLUGGED_AC;
} else if (mUsbOnline) {
mPlugType = BatteryManager.BATTERY_PLUGGED_USB;
@@ -328,6 +348,7 @@ public final class BatteryService extends Binder {
}
if (DEBUG) {
+ String dockValues = String.valueOf(mDeviceDockBattery);
Slog.d(TAG, "Processing new values: "
+ "mAcOnline=" + mAcOnline
+ ", mUsbOnline=" + mUsbOnline
@@ -340,7 +361,9 @@ public final class BatteryService extends Binder {
+ ", mBatteryVoltage=" + mBatteryVoltage
+ ", mBatteryTemperature=" + mBatteryTemperature
+ ", mBatteryLevelCritical=" + mBatteryLevelCritical
- + ", mPlugType=" + mPlugType);
+ + ", mPlugType=" + mPlugType
+ + ", mHasDockBattery=" + mHasDockBattery
+ + ", mDeviceDockBattery=[" + dockValues + "]");
}
// Let the battery stats keep track of the current level.
@@ -355,12 +378,9 @@ public final class BatteryService extends Binder {
shutdownIfNoPowerLocked();
shutdownIfOverTempLocked();
- boolean dockBatteryChanged = false;
- if (mHasDockBattery &&
- (mDockBatteryLevel != mLastDockBatteryLevel ||
- mDockBatteryStatus != mLastDockBatteryStatus ||
- mDockBatteryPresent != mLastDockBatteryPresent)) {
- dockBatteryChanged = true;
+ boolean dockBatteryHasNewData = false;
+ if (mDeviceDockBattery != null) {
+ dockBatteryHasNewData = mDeviceDockBattery.hasNewData();
}
if (mBatteryStatus != mLastBatteryStatus ||
@@ -371,7 +391,7 @@ public final class BatteryService extends Binder {
mBatteryVoltage != mLastBatteryVoltage ||
mBatteryTemperature != mLastBatteryTemperature ||
mInvalidCharger != mLastInvalidCharger ||
- dockBatteryChanged) {
+ dockBatteryHasNewData) {
if (mPlugType != mLastPlugType) {
if (mLastPlugType == BATTERY_PLUGGED_NONE) {
@@ -494,12 +514,6 @@ public final class BatteryService extends Binder {
mLastBatteryTemperature = mBatteryTemperature;
mLastBatteryLevelCritical = mBatteryLevelCritical;
mLastInvalidCharger = mInvalidCharger;
-
- if (mHasDockBattery) {
- mLastDockBatteryLevel = mDockBatteryLevel;
- mLastDockBatteryStatus = mDockBatteryStatus;
- mLastDockBatteryPresent = mDockBatteryPresent;
- }
}
}
@@ -509,6 +523,11 @@ public final class BatteryService extends Binder {
intent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY
| Intent.FLAG_RECEIVER_REPLACE_PENDING);
+ Bundle dockData = new Bundle();
+ if (mDeviceDockBattery != null) {
+ dockData = mDeviceDockBattery.getNotifyData();
+ }
+
int icon = getIconLocked(mBatteryLevel);
intent.putExtra(BatteryManager.EXTRA_STATUS, mBatteryStatus);
@@ -522,8 +541,13 @@ public final class BatteryService extends Binder {
intent.putExtra(BatteryManager.EXTRA_TEMPERATURE, mBatteryTemperature);
intent.putExtra(BatteryManager.EXTRA_TECHNOLOGY, mBatteryTechnology);
intent.putExtra(BatteryManager.EXTRA_INVALID_CHARGER, mInvalidCharger);
+ intent.putExtras(dockData);
if (DEBUG) {
+ String dockDebug = "";
+ for (String key : dockData.keySet()) {
+ dockDebug += ", " + key + ": " + String.valueOf(dockData.get(key));
+ }
Slog.d(TAG, "Sending ACTION_BATTERY_CHANGED. level:" + mBatteryLevel +
", scale:" + BATTERY_SCALE + ", status:" + mBatteryStatus +
", health:" + mBatteryHealth + ", present:" + mBatteryPresent +
@@ -532,24 +556,8 @@ public final class BatteryService extends Binder {
", technology: " + mBatteryTechnology +
", AC powered:" + mAcOnline + ", USB powered:" + mUsbOnline +
", Wireless powered:" + mWirelessOnline +
- ", icon:" + icon + ", invalid charger:" + mInvalidCharger);
- }
-
- if (mHasDockBattery){
- intent.putExtra(BatteryManager.EXTRA_DOCK_PRESENT, mDockBatteryPresent);
- intent.putExtra(BatteryManager.EXTRA_DOCK_STATUS, mDockBatteryStatus);
- intent.putExtra(BatteryManager.EXTRA_DOCK_LEVEL, mDockBatteryLevel);
- }
-
- if (false) {
- Slog.d(TAG, "level:" + mBatteryLevel +
- " scale:" + BATTERY_SCALE + " status:" + mBatteryStatus +
- " health:" + mBatteryHealth + " present:" + mBatteryPresent +
- " voltage: " + mBatteryVoltage +
- " temperature: " + mBatteryTemperature +
- " technology: " + mBatteryTechnology +
- " AC powered:" + mAcOnline + " USB powered:" + mUsbOnline +
- " icon:" + icon + " invalid charger:" + mInvalidCharger);
+ ", icon:" + icon + ", invalid charger:" + mInvalidCharger +
+ dockDebug);
}
mHandler.post(new Runnable() {
@@ -711,6 +719,17 @@ public final class BatteryService extends Binder {
}
}
+ private final BroadcastReceiver mDockReceiver = new BroadcastReceiver() {
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ if (Intent.ACTION_DOCK_EVENT.equals(intent.getAction())) {
+ synchronized (mLock) {
+ updateLocked();
+ }
+ }
+ }
+ };
+
private final UEventObserver mPowerSupplyObserver = new UEventObserver() {
@Override
public void onUEvent(UEventObserver.UEvent event) {
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;
+ }
+}
diff --git a/services/java/com/android/server/SystemServer.java b/services/java/com/android/server/SystemServer.java
index 9decd62..fe04911 100644
--- a/services/java/com/android/server/SystemServer.java
+++ b/services/java/com/android/server/SystemServer.java
@@ -144,6 +144,7 @@ class ServerThread extends Thread {
LightsService lights = null;
PowerManagerService power = null;
DisplayManagerService display = null;
+ DeviceHandlerService device = null;
BatteryService battery = null;
VibratorService vibrator = null;
AlarmManagerService alarm = null;
@@ -300,11 +301,15 @@ class ServerThread extends Thread {
Slog.i(TAG, "System Content Providers");
ActivityManagerService.installSystemProviders();
+ // Requires context, activity manager y providers
+ Slog.i(TAG, "Device Handler Service");
+ device = new DeviceHandlerService(context);
+
Slog.i(TAG, "Lights Service");
lights = new LightsService(context);
Slog.i(TAG, "Battery Service");
- battery = new BatteryService(context, lights);
+ battery = new BatteryService(context, lights, device);
ServiceManager.addService("battery", battery);
Slog.i(TAG, "Vibrator Service");
@@ -329,7 +334,7 @@ class ServerThread extends Thread {
Slog.i(TAG, "Window Manager");
wm = WindowManagerService.main(context, power, display, inputManager,
- uiHandler, wmHandler,
+ device, uiHandler, wmHandler,
factoryTest != SystemServer.FACTORY_TEST_LOW_LEVEL,
!firstBoot, onlyCore);
ServiceManager.addService(Context.WINDOW_SERVICE, wm);
diff --git a/services/java/com/android/server/wm/WindowManagerService.java b/services/java/com/android/server/wm/WindowManagerService.java
index 7907931..826d7ba 100755
--- a/services/java/com/android/server/wm/WindowManagerService.java
+++ b/services/java/com/android/server/wm/WindowManagerService.java
@@ -43,6 +43,7 @@ import static android.view.WindowManager.LayoutParams.TYPE_WALLPAPER;
import com.android.internal.app.IBatteryStats;
import com.android.internal.app.ThemeUtils;
+import com.android.internal.os.IDeviceHandler;
import com.android.internal.policy.PolicyManager;
import com.android.internal.policy.impl.PhoneWindowManager;
import com.android.internal.view.IInputContext;
@@ -327,7 +328,7 @@ public class WindowManagerService extends IWindowManager.Stub
final boolean mLimitedAlphaCompositing;
- final WindowManagerPolicy mPolicy = PolicyManager.makeNewWindowManager();
+ final WindowManagerPolicy mPolicy;
final IActivityManager mActivityManager;
@@ -766,7 +767,7 @@ public class WindowManagerService extends IWindowManager.Stub
public static WindowManagerService main(final Context context,
final PowerManagerService pm, final DisplayManagerService dm,
- final InputManagerService im,
+ final InputManagerService im, final IDeviceHandler device,
final Handler uiHandler, final Handler wmHandler,
final boolean haveInputMethods, final boolean showBootMsgs,
final boolean onlyCore) {
@@ -775,7 +776,7 @@ public class WindowManagerService extends IWindowManager.Stub
@Override
public void run() {
holder[0] = new WindowManagerService(context, pm, dm, im,
- uiHandler, haveInputMethods, showBootMsgs, onlyCore);
+ device, uiHandler, haveInputMethods, showBootMsgs, onlyCore);
}
}, 0);
return holder[0];
@@ -797,7 +798,7 @@ public class WindowManagerService extends IWindowManager.Stub
private WindowManagerService(Context context, PowerManagerService pm,
DisplayManagerService displayManager, InputManagerService inputManager,
- Handler uiHandler,
+ IDeviceHandler device, Handler uiHandler,
boolean haveInputMethods, boolean showBootMsgs, boolean onlyCore) {
mContext = context;
mHaveInputMethods = haveInputMethods;
@@ -807,6 +808,7 @@ public class WindowManagerService extends IWindowManager.Stub
com.android.internal.R.bool.config_sf_limitedAlpha);
mDisplayManagerService = displayManager;
mHeadless = displayManager.isHeadless();
+ mPolicy = PolicyManager.makeNewWindowManager(device);
mDisplayManager = (DisplayManager)context.getSystemService(Context.DISPLAY_SERVICE);
mDisplayManager.registerDisplayListener(this, null);
diff --git a/services/jni/com_android_server_BatteryService.cpp b/services/jni/com_android_server_BatteryService.cpp
index c6fe620..c7e931e 100644
--- a/services/jni/com_android_server_BatteryService.cpp
+++ b/services/jni/com_android_server_BatteryService.cpp
@@ -50,11 +50,6 @@ struct FieldIds {
jfieldID mBatteryVoltage;
jfieldID mBatteryTemperature;
jfieldID mBatteryTechnology;
-#ifdef HAS_DOCK_BATTERY
- jfieldID mDockBatteryStatus;
- jfieldID mDockBatteryLevel;
- jfieldID mDockBatteryPresent;
-#endif
};
static FieldIds gFieldIds;
@@ -71,11 +66,6 @@ struct BatteryManagerConstants {
jint healthOverVoltage;
jint healthUnspecifiedFailure;
jint healthCold;
-#ifdef HAS_DOCK_BATTERY
- jint dockStatusUnknown;
- jint dockStatusCharging;
- jint dockStatusNotCharging;
-#endif
};
static BatteryManagerConstants gConstants;
@@ -90,11 +80,6 @@ struct PowerSupplyPaths {
char* batteryVoltagePath;
char* batteryTemperaturePath;
char* batteryTechnologyPath;
-#ifdef HAS_DOCK_BATTERY
- char* dockBatteryStatusPath;
- char* dockBatteryCapacityPath;
- char* dockBatteryPresentPath;
-#endif
};
static PowerSupplyPaths gPaths;
@@ -116,21 +101,6 @@ static jint getBatteryStatus(const char* status)
}
}
-#ifdef HAS_DOCK_BATTERY
-static jint getDockBatteryStatus(const char* status)
-{
- switch (status[0]) {
- case 'C': return gConstants.dockStatusCharging; // Charging
- case 'N': return gConstants.dockStatusNotCharging; // Not charging
-
- default: {
- ALOGW("Unknown dock battery status '%s'", status);
- return gConstants.dockStatusUnknown;
- }
- }
-}
-#endif
-
static jint getBatteryHealth(const char* status)
{
switch (status[0]) {
@@ -251,26 +221,6 @@ static void android_server_BatteryService_update(JNIEnv* env, jobject obj)
if (readFromFile(gPaths.batteryTechnologyPath, buf, SIZE) > 0)
env->SetObjectField(obj, gFieldIds.mBatteryTechnology, env->NewStringUTF(buf));
-
-#ifdef HAS_DOCK_BATTERY
- jboolean present = false;
- if (readFromFile(gPaths.dockBatteryPresentPath, buf, SIZE) >= 15) {
- // should return "dock detect = 1"
- if (buf[14] == '1') {
- present = true;
- }
- }
- env->SetBooleanField(obj, gFieldIds.mDockBatteryPresent, present);
-
- setIntField(env, obj, gPaths.dockBatteryCapacityPath, gFieldIds.mDockBatteryLevel);
-
- if (readFromFile(gPaths.dockBatteryStatusPath, buf, SIZE) > 0)
- env->SetIntField(obj, gFieldIds.mDockBatteryStatus,
- getDockBatteryStatus(buf));
- else
- env->SetIntField(obj, gFieldIds.mDockBatteryStatus,
- gConstants.dockStatusUnknown);
-#endif
}
static JNINativeMethod sMethods[] = {
@@ -356,19 +306,6 @@ int register_android_server_BatteryService(JNIEnv* env)
if (access(path, R_OK) == 0)
gPaths.batteryTechnologyPath = strdup(path);
}
-#ifdef HAS_DOCK_BATTERY
- else if(strcmp(buf, "DockBattery") == 0) {
- snprintf(path, sizeof(path), "%s/%s/status", POWER_SUPPLY_PATH, name);
- if (access(path, R_OK) == 0)
- gPaths.dockBatteryStatusPath = strdup(path);
- snprintf(path, sizeof(path), "%s/%s/capacity", POWER_SUPPLY_PATH, name);
- if (access(path, R_OK) == 0)
- gPaths.dockBatteryCapacityPath = strdup(path);
- snprintf(path, sizeof(path), "%s/%s/device/ec_dock", POWER_SUPPLY_PATH, name);
- if (access(path, R_OK) == 0)
- gPaths.dockBatteryPresentPath = strdup(path);
- }
-#endif
}
}
closedir(dir);
@@ -413,12 +350,6 @@ int register_android_server_BatteryService(JNIEnv* env)
gFieldIds.mBatteryVoltage = env->GetFieldID(clazz, "mBatteryVoltage", "I");
gFieldIds.mBatteryTemperature = env->GetFieldID(clazz, "mBatteryTemperature", "I");
-#ifdef HAS_DOCK_BATTERY
- gFieldIds.mDockBatteryStatus = env->GetFieldID(clazz, "mDockBatteryStatus", "I");
- gFieldIds.mDockBatteryLevel = env->GetFieldID(clazz, "mDockBatteryLevel", "I");
- gFieldIds.mDockBatteryPresent = env->GetFieldID(clazz, "mDockBatteryPresent", "Z");
-#endif
-
LOG_FATAL_IF(gFieldIds.mAcOnline == NULL, "Unable to find BatteryService.AC_ONLINE_PATH");
LOG_FATAL_IF(gFieldIds.mUsbOnline == NULL, "Unable to find BatteryService.USB_ONLINE_PATH");
LOG_FATAL_IF(gFieldIds.mWirelessOnline == NULL, "Unable to find BatteryService.WIRELESS_ONLINE_PATH");
@@ -473,17 +404,6 @@ int register_android_server_BatteryService(JNIEnv* env)
gConstants.healthCold = env->GetStaticIntField(clazz,
env->GetStaticFieldID(clazz, "BATTERY_HEALTH_COLD", "I"));
-#ifdef HAS_DOCK_BATTERY
- gConstants.dockStatusUnknown = env->GetStaticIntField(clazz,
- env->GetStaticFieldID(clazz, "DOCK_BATTERY_STATUS_UNKNOWN", "I"));
-
- gConstants.dockStatusCharging = env->GetStaticIntField(clazz,
- env->GetStaticFieldID(clazz, "DOCK_BATTERY_STATUS_CHARGING", "I"));
-
- gConstants.dockStatusNotCharging = env->GetStaticIntField(clazz,
- env->GetStaticFieldID(clazz, "DOCK_BATTERY_STATUS_NOT_CHARGING", "I"));
-#endif
-
return jniRegisterNativeMethods(env, "com/android/server/BatteryService", sMethods, NELEM(sMethods));
}