Tint battery fix icon
Fixes: 129492004 Test: manual Change-Id: I161284619bc47e342d78f1507ae291f7c23ad3ff
This commit is contained in:
@@ -160,7 +160,7 @@ public abstract class BatteryTip implements Comparable<BatteryTip>, Parcelable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/** Returns the color resid for tinting {@link #getIconId()} or {@link View#NO_ID} if none. */
|
/** Returns the color resid for tinting {@link #getIconId()} or {@link View#NO_ID} if none. */
|
||||||
protected @IdRes int getIconTintColorId() {
|
public @IdRes int getIconTintColorId() {
|
||||||
return View.NO_ID;
|
return View.NO_ID;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -25,6 +25,9 @@ import android.app.settings.SettingsEnums;
|
|||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.content.SharedPreferences;
|
import android.content.SharedPreferences;
|
||||||
|
import android.graphics.PorterDuff;
|
||||||
|
import android.graphics.PorterDuffColorFilter;
|
||||||
|
import android.graphics.drawable.Drawable;
|
||||||
import android.net.Uri;
|
import android.net.Uri;
|
||||||
import android.util.ArrayMap;
|
import android.util.ArrayMap;
|
||||||
|
|
||||||
@@ -39,6 +42,7 @@ import androidx.slice.builders.SliceAction;
|
|||||||
import com.android.internal.os.BatteryStatsHelper;
|
import com.android.internal.os.BatteryStatsHelper;
|
||||||
import com.android.settings.R;
|
import com.android.settings.R;
|
||||||
import com.android.settings.SubSettings;
|
import com.android.settings.SubSettings;
|
||||||
|
import com.android.settings.Utils;
|
||||||
import com.android.settings.fuelgauge.BatteryStatsHelperLoader;
|
import com.android.settings.fuelgauge.BatteryStatsHelperLoader;
|
||||||
import com.android.settings.fuelgauge.PowerUsageSummary;
|
import com.android.settings.fuelgauge.PowerUsageSummary;
|
||||||
import com.android.settings.fuelgauge.batterytip.BatteryTipLoader;
|
import com.android.settings.fuelgauge.batterytip.BatteryTipLoader;
|
||||||
@@ -107,8 +111,12 @@ public class BatteryFixSlice implements CustomSliceable {
|
|||||||
if (batteryTip.getState() == BatteryTip.StateType.INVISIBLE) {
|
if (batteryTip.getState() == BatteryTip.StateType.INVISIBLE) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
final IconCompat icon = IconCompat.createWithResource(mContext,
|
final Drawable drawable = mContext.getDrawable(batteryTip.getIconId());
|
||||||
batteryTip.getIconId());
|
drawable.setColorFilter(new PorterDuffColorFilter(
|
||||||
|
mContext.getResources().getColor(batteryTip.getIconTintColorId()),
|
||||||
|
PorterDuff.Mode.SRC_IN));
|
||||||
|
|
||||||
|
final IconCompat icon = Utils.createIconWithDrawable(drawable);
|
||||||
final SliceAction primaryAction = SliceAction.createDeeplink(getPrimaryAction(),
|
final SliceAction primaryAction = SliceAction.createDeeplink(getPrimaryAction(),
|
||||||
icon,
|
icon,
|
||||||
ListBuilder.ICON_IMAGE,
|
ListBuilder.ICON_IMAGE,
|
||||||
|
@@ -18,7 +18,11 @@ package com.android.settings.homepage.contextualcards.slices;
|
|||||||
|
|
||||||
import static com.google.common.truth.Truth.assertThat;
|
import static com.google.common.truth.Truth.assertThat;
|
||||||
|
|
||||||
|
import static org.mockito.Mockito.mock;
|
||||||
|
import static org.mockito.Mockito.when;
|
||||||
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
|
import android.net.Uri;
|
||||||
|
|
||||||
import androidx.slice.Slice;
|
import androidx.slice.Slice;
|
||||||
import androidx.slice.SliceMetadata;
|
import androidx.slice.SliceMetadata;
|
||||||
@@ -26,11 +30,13 @@ import androidx.slice.SliceProvider;
|
|||||||
import androidx.slice.widget.SliceLiveData;
|
import androidx.slice.widget.SliceLiveData;
|
||||||
|
|
||||||
import com.android.internal.os.BatteryStatsHelper;
|
import com.android.internal.os.BatteryStatsHelper;
|
||||||
|
import com.android.settings.R;
|
||||||
import com.android.settings.fuelgauge.BatteryStatsHelperLoader;
|
import com.android.settings.fuelgauge.BatteryStatsHelperLoader;
|
||||||
import com.android.settings.fuelgauge.batterytip.BatteryTipLoader;
|
import com.android.settings.fuelgauge.batterytip.BatteryTipLoader;
|
||||||
import com.android.settings.fuelgauge.batterytip.tips.BatteryTip;
|
import com.android.settings.fuelgauge.batterytip.tips.BatteryTip;
|
||||||
import com.android.settings.fuelgauge.batterytip.tips.EarlyWarningTip;
|
import com.android.settings.fuelgauge.batterytip.tips.EarlyWarningTip;
|
||||||
import com.android.settings.fuelgauge.batterytip.tips.LowBatteryTip;
|
import com.android.settings.fuelgauge.batterytip.tips.LowBatteryTip;
|
||||||
|
import com.android.settings.slices.SliceBackgroundWorker;
|
||||||
|
|
||||||
import org.junit.After;
|
import org.junit.After;
|
||||||
import org.junit.Before;
|
import org.junit.Before;
|
||||||
@@ -48,6 +54,10 @@ import java.util.ArrayList;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
@RunWith(RobolectricTestRunner.class)
|
@RunWith(RobolectricTestRunner.class)
|
||||||
|
@Config(shadows = {
|
||||||
|
BatteryFixSliceTest.ShadowBatteryStatsHelperLoader.class,
|
||||||
|
BatteryFixSliceTest.ShadowBatteryTipLoader.class
|
||||||
|
})
|
||||||
public class BatteryFixSliceTest {
|
public class BatteryFixSliceTest {
|
||||||
|
|
||||||
private Context mContext;
|
private Context mContext;
|
||||||
@@ -66,13 +76,11 @@ public class BatteryFixSliceTest {
|
|||||||
@After
|
@After
|
||||||
public void tearDown() {
|
public void tearDown() {
|
||||||
ShadowBatteryTipLoader.reset();
|
ShadowBatteryTipLoader.reset();
|
||||||
|
ShadowSliceBackgroundWorker.reset();
|
||||||
|
ShadowEarlyWarningTip.reset();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@Config(shadows = {
|
|
||||||
ShadowBatteryStatsHelperLoader.class,
|
|
||||||
ShadowBatteryTipLoader.class
|
|
||||||
})
|
|
||||||
public void updateBatteryTipAvailabilityCache_hasImportantTip_shouldReturnTrue() {
|
public void updateBatteryTipAvailabilityCache_hasImportantTip_shouldReturnTrue() {
|
||||||
final List<BatteryTip> tips = new ArrayList<>();
|
final List<BatteryTip> tips = new ArrayList<>();
|
||||||
tips.add(new LowBatteryTip(BatteryTip.StateType.INVISIBLE, false, ""));
|
tips.add(new LowBatteryTip(BatteryTip.StateType.INVISIBLE, false, ""));
|
||||||
@@ -85,10 +93,6 @@ public class BatteryFixSliceTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@Config(shadows = {
|
|
||||||
ShadowBatteryStatsHelperLoader.class,
|
|
||||||
ShadowBatteryTipLoader.class
|
|
||||||
})
|
|
||||||
public void getSlice_unimportantSlice_shouldSkip() {
|
public void getSlice_unimportantSlice_shouldSkip() {
|
||||||
final List<BatteryTip> tips = new ArrayList<>();
|
final List<BatteryTip> tips = new ArrayList<>();
|
||||||
tips.add(new LowBatteryTip(BatteryTip.StateType.INVISIBLE, false, ""));
|
tips.add(new LowBatteryTip(BatteryTip.StateType.INVISIBLE, false, ""));
|
||||||
@@ -101,6 +105,28 @@ public class BatteryFixSliceTest {
|
|||||||
assertThat(SliceMetadata.from(mContext, slice).isErrorSlice()).isTrue();
|
assertThat(SliceMetadata.from(mContext, slice).isErrorSlice()).isTrue();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@Config(shadows = {
|
||||||
|
BatteryFixSliceTest.ShadowEarlyWarningTip.class,
|
||||||
|
BatteryFixSliceTest.ShadowSliceBackgroundWorker.class
|
||||||
|
})
|
||||||
|
public void getSlice_hasImportantTip_shouldTintIcon() {
|
||||||
|
final List<BatteryTip> tips = new ArrayList<>();
|
||||||
|
tips.add(new EarlyWarningTip(BatteryTip.StateType.NEW, false));
|
||||||
|
// Create fake cache data
|
||||||
|
ShadowBatteryTipLoader.setBatteryTips(tips);
|
||||||
|
BatteryFixSlice.updateBatteryTipAvailabilityCache(mContext);
|
||||||
|
// Create fake background worker data
|
||||||
|
BatteryFixSlice.BatteryTipWorker batteryTipWorker = mock(
|
||||||
|
BatteryFixSlice.BatteryTipWorker.class);
|
||||||
|
when(batteryTipWorker.getResults()).thenReturn(tips);
|
||||||
|
ShadowSliceBackgroundWorker.setBatteryTipWorkerWorker(batteryTipWorker);
|
||||||
|
|
||||||
|
final Slice slice = mSlice.getSlice();
|
||||||
|
|
||||||
|
assertThat(ShadowEarlyWarningTip.isIconTintColorIdCalled()).isTrue();
|
||||||
|
}
|
||||||
|
|
||||||
@Implements(BatteryStatsHelperLoader.class)
|
@Implements(BatteryStatsHelperLoader.class)
|
||||||
public static class ShadowBatteryStatsHelperLoader {
|
public static class ShadowBatteryStatsHelperLoader {
|
||||||
|
|
||||||
@@ -129,4 +155,45 @@ public class BatteryFixSliceTest {
|
|||||||
sBatteryTips = tips;
|
sBatteryTips = tips;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Implements(SliceBackgroundWorker.class)
|
||||||
|
public static class ShadowSliceBackgroundWorker {
|
||||||
|
|
||||||
|
private static BatteryFixSlice.BatteryTipWorker sBatteryTipWorkerWorker;
|
||||||
|
|
||||||
|
@Resetter
|
||||||
|
public static void reset() {
|
||||||
|
sBatteryTipWorkerWorker = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Implementation
|
||||||
|
protected static <T extends SliceBackgroundWorker> T getInstance(Uri uri) {
|
||||||
|
return (T) sBatteryTipWorkerWorker;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void setBatteryTipWorkerWorker(BatteryFixSlice.BatteryTipWorker worker) {
|
||||||
|
sBatteryTipWorkerWorker = worker;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Implements(EarlyWarningTip.class)
|
||||||
|
public static class ShadowEarlyWarningTip {
|
||||||
|
|
||||||
|
private static boolean mIsGetIconTintColorIdCalled;
|
||||||
|
|
||||||
|
@Resetter
|
||||||
|
public static void reset() {
|
||||||
|
mIsGetIconTintColorIdCalled = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Implementation
|
||||||
|
protected int getIconTintColorId() {
|
||||||
|
mIsGetIconTintColorIdCalled = true;
|
||||||
|
return R.color.battery_bad_color_light;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean isIconTintColorIdCalled() {
|
||||||
|
return mIsGetIconTintColorIdCalled;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user