summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xpackages/SystemUI/src/com/android/systemui/BatteryMeterDrawable.java21
-rw-r--r--packages/SystemUI/src/com/android/systemui/BatteryMeterView.java2
-rw-r--r--packages/SystemUI/src/com/android/systemui/qs/tiles/BatteryTile.java4
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/BatteryMeterDrawableTest.java121
4 files changed, 131 insertions, 17 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/BatteryMeterDrawable.java b/packages/SystemUI/src/com/android/systemui/BatteryMeterDrawable.java
index 076b5bcd0861..e1d6a94fcf07 100755
--- a/packages/SystemUI/src/com/android/systemui/BatteryMeterDrawable.java
+++ b/packages/SystemUI/src/com/android/systemui/BatteryMeterDrawable.java
@@ -31,10 +31,9 @@ import android.graphics.RectF;
import android.graphics.Typeface;
import android.graphics.drawable.Drawable;
import android.net.Uri;
-import android.os.Bundle;
import android.os.Handler;
+import android.os.Looper;
import android.provider.Settings;
-
import com.android.systemui.statusbar.policy.BatteryController;
public class BatteryMeterDrawable extends Drawable implements
@@ -92,18 +91,17 @@ public class BatteryMeterDrawable extends Drawable implements
private int mLightModeBackgroundColor;
private int mLightModeFillColor;
- private final SettingObserver mSettingObserver = new SettingObserver();
+ private final SettingObserver mSettingObserver;
private final Context mContext;
- private final Handler mHandler;
private int mLevel = -1;
private boolean mPluggedIn;
private boolean mListening;
- public BatteryMeterDrawable(Context context, Handler handler, int frameColor) {
+ public BatteryMeterDrawable(Context context, int frameColor) {
mContext = context;
- mHandler = handler;
+ mSettingObserver = new SettingObserver(new Handler(mContext.getMainLooper()));
final Resources res = context.getResources();
TypedArray levels = res.obtainTypedArray(R.array.batterymeter_color_levels);
TypedArray colors = res.obtainTypedArray(R.array.batterymeter_color_values);
@@ -199,12 +197,7 @@ public class BatteryMeterDrawable extends Drawable implements
}
private void postInvalidate() {
- mHandler.post(new Runnable() {
- @Override
- public void run() {
- invalidateSelf();
- }
- });
+ scheduleSelf(this::invalidateSelf, 0);
}
public void setBatteryController(BatteryController batteryController) {
@@ -506,8 +499,8 @@ public class BatteryMeterDrawable extends Drawable implements
}
private final class SettingObserver extends ContentObserver {
- public SettingObserver() {
- super(new Handler());
+ public SettingObserver(Handler handler) {
+ super(handler);
}
@Override
diff --git a/packages/SystemUI/src/com/android/systemui/BatteryMeterView.java b/packages/SystemUI/src/com/android/systemui/BatteryMeterView.java
index d8b95cc28b57..4f3ffde06294 100644
--- a/packages/SystemUI/src/com/android/systemui/BatteryMeterView.java
+++ b/packages/SystemUI/src/com/android/systemui/BatteryMeterView.java
@@ -49,7 +49,7 @@ public class BatteryMeterView extends ImageView implements
defStyle, 0);
final int frameColor = atts.getColor(R.styleable.BatteryMeterView_frameColor,
context.getColor(R.color.batterymeter_frame_color));
- mDrawable = new BatteryMeterDrawable(context, new Handler(), frameColor);
+ mDrawable = new BatteryMeterDrawable(context, frameColor);
atts.recycle();
mSlotBattery = context.getString(
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/BatteryTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/BatteryTile.java
index b61a81cbfdcc..d89fbfd3c8df 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/BatteryTile.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/BatteryTile.java
@@ -118,7 +118,7 @@ public class BatteryTile extends QSTile<QSTile.State> implements BatteryControll
@Override
public Drawable getDrawable(Context context) {
BatteryMeterDrawable drawable =
- new BatteryMeterDrawable(context, new Handler(Looper.getMainLooper()),
+ new BatteryMeterDrawable(context,
context.getColor(R.color.batterymeter_frame_color));
drawable.onBatteryLevelChanged(mLevel, mPluggedIn, mCharging);
drawable.onPowerSaveChanged(mPowerSave);
@@ -165,7 +165,7 @@ public class BatteryTile extends QSTile<QSTile.State> implements BatteryControll
private final class BatteryDetail implements DetailAdapter, OnClickListener,
OnAttachStateChangeListener {
private final BatteryMeterDrawable mDrawable = new BatteryMeterDrawable(mHost.getContext(),
- new Handler(), mHost.getContext().getColor(R.color.batterymeter_frame_color));
+ mHost.getContext().getColor(R.color.batterymeter_frame_color));
private View mCurrentView;
@Override
diff --git a/packages/SystemUI/tests/src/com/android/systemui/BatteryMeterDrawableTest.java b/packages/SystemUI/tests/src/com/android/systemui/BatteryMeterDrawableTest.java
new file mode 100644
index 000000000000..5cb5e68fe6f8
--- /dev/null
+++ b/packages/SystemUI/tests/src/com/android/systemui/BatteryMeterDrawableTest.java
@@ -0,0 +1,121 @@
+/*
+ * Copyright (C) 2016 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.
+ */
+
+package com.android.systemui;
+
+import static junit.framework.Assert.assertEquals;
+import static junit.framework.Assert.assertTrue;
+import static org.mockito.Mockito.any;
+import static org.mockito.Mockito.anyFloat;
+import static org.mockito.Mockito.anyString;
+import static org.mockito.Mockito.atLeastOnce;
+import static org.mockito.Mockito.eq;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.never;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
+
+import android.content.Context;
+import android.content.res.Resources;
+import android.graphics.Canvas;
+import android.support.test.InstrumentationRegistry;
+import android.support.test.runner.AndroidJUnit4;
+import android.test.suitebuilder.annotation.SmallTest;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+@SmallTest
+@RunWith(AndroidJUnit4.class)
+public class BatteryMeterDrawableTest {
+
+ private Context mContext;
+ private Resources mResources;
+ private BatteryMeterDrawable mBatteryMeter;
+
+ @Before
+ public void setUp() throws Exception {
+ mContext = InstrumentationRegistry.getTargetContext();
+ mResources = mContext.getResources();
+ mBatteryMeter = new BatteryMeterDrawable(mContext, 0);
+ }
+
+ @Test
+ public void testGetIntrinsicSize() {
+ assertEquals(
+ mResources.getDimensionPixelSize(R.dimen.battery_width),
+ mBatteryMeter.getIntrinsicWidth());
+ assertEquals(
+ mResources.getDimensionPixelSize(R.dimen.battery_height),
+ mBatteryMeter.getIntrinsicHeight());
+ }
+
+ @Test
+ public void testDrawNothingBeforeOnBatteryLevelChanged() {
+ final Canvas canvas = mock(Canvas.class);
+ mBatteryMeter.draw(canvas);
+ verify(canvas, never()).drawPath(any(), any());
+ verify(canvas, never()).drawText(anyString(), anyFloat(), anyFloat(), any());
+ }
+
+ @Test
+ public void testDrawImageButNoTextIfPluggedIn() {
+ mBatteryMeter.onBatteryLevelChanged(0, true, true);
+ final Canvas canvas = mock(Canvas.class);
+ mBatteryMeter.draw(canvas);
+ verify(canvas, atLeastOnce()).drawPath(any(), any());
+ verify(canvas, never()).drawText(anyString(), anyFloat(), anyFloat(), any());
+ }
+
+ @Test
+ public void testDrawTextIfNotPluggedIn() {
+ mBatteryMeter.onBatteryLevelChanged(0, false, false);
+ final Canvas canvas = mock(Canvas.class);
+ mBatteryMeter.draw(canvas);
+ verify(canvas, times(1)).drawText(anyString(), anyFloat(), anyFloat(), any());
+ }
+
+ @Test
+ public void testDrawNoTextIfPowerSaveEnabled() {
+ mBatteryMeter.onBatteryLevelChanged(0, false, false);
+ mBatteryMeter.onPowerSaveChanged(true);
+ final Canvas canvas = mock(Canvas.class);
+ mBatteryMeter.draw(canvas);
+ verify(canvas, never()).drawText(anyString(), anyFloat(), anyFloat(), any());
+ }
+
+ @Test
+ public void testDrawTextWarningAtCriticalLevel() {
+ int criticalLevel = mResources.getInteger(
+ com.android.internal.R.integer.config_criticalBatteryWarningLevel);
+ mBatteryMeter.onBatteryLevelChanged(criticalLevel, false, false);
+ final Canvas canvas = mock(Canvas.class);
+ mBatteryMeter.draw(canvas);
+ String warningString = mResources.getString(R.string.battery_meter_very_low_overlay_symbol);
+ verify(canvas, times(1)).drawText(eq(warningString), anyFloat(), anyFloat(), any());
+ }
+
+ @Test
+ public void testDrawTextNoWarningAboveCriticalLevel() {
+ int criticalLevel = mResources.getInteger(
+ com.android.internal.R.integer.config_criticalBatteryWarningLevel);
+ mBatteryMeter.onBatteryLevelChanged(criticalLevel + 1, false, false);
+ final Canvas canvas = mock(Canvas.class);
+ mBatteryMeter.draw(canvas);
+ String warningString = mResources.getString(R.string.battery_meter_very_low_overlay_symbol);
+ verify(canvas, never()).drawText(eq(warningString), anyFloat(), anyFloat(), any());
+ }
+}