Loading packages/SystemUI/src/com/android/systemui/BatteryMeterDrawable.java +7 −14 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -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); Loading Loading @@ -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) { Loading Loading @@ -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 Loading packages/SystemUI/src/com/android/systemui/BatteryMeterView.java +1 −1 Original line number Diff line number Diff line Loading @@ -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( Loading packages/SystemUI/src/com/android/systemui/qs/tiles/BatteryTile.java +2 −2 Original line number Diff line number Diff line Loading @@ -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); Loading Loading @@ -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 Loading packages/SystemUI/tests/src/com/android/systemui/BatteryMeterDrawableTest.java 0 → 100644 +121 −0 Original line number Diff line number Diff line /* * 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()); } } Loading
packages/SystemUI/src/com/android/systemui/BatteryMeterDrawable.java +7 −14 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -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); Loading Loading @@ -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) { Loading Loading @@ -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 Loading
packages/SystemUI/src/com/android/systemui/BatteryMeterView.java +1 −1 Original line number Diff line number Diff line Loading @@ -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( Loading
packages/SystemUI/src/com/android/systemui/qs/tiles/BatteryTile.java +2 −2 Original line number Diff line number Diff line Loading @@ -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); Loading Loading @@ -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 Loading
packages/SystemUI/tests/src/com/android/systemui/BatteryMeterDrawableTest.java 0 → 100644 +121 −0 Original line number Diff line number Diff line /* * 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()); } }