Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 77c56714 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Tint battery fix icon" into qt-dev

parents 957da73a 006582b4
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -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. */
    protected @IdRes int getIconTintColorId() {
    public @IdRes int getIconTintColorId() {
        return View.NO_ID;
    }

+10 −2
Original line number Diff line number Diff line
@@ -25,6 +25,9 @@ import android.app.settings.SettingsEnums;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.graphics.PorterDuff;
import android.graphics.PorterDuffColorFilter;
import android.graphics.drawable.Drawable;
import android.net.Uri;
import android.util.ArrayMap;

@@ -39,6 +42,7 @@ import androidx.slice.builders.SliceAction;
import com.android.internal.os.BatteryStatsHelper;
import com.android.settings.R;
import com.android.settings.SubSettings;
import com.android.settings.Utils;
import com.android.settings.fuelgauge.BatteryStatsHelperLoader;
import com.android.settings.fuelgauge.PowerUsageSummary;
import com.android.settings.fuelgauge.batterytip.BatteryTipLoader;
@@ -107,8 +111,12 @@ public class BatteryFixSlice implements CustomSliceable {
            if (batteryTip.getState() == BatteryTip.StateType.INVISIBLE) {
                continue;
            }
            final IconCompat icon = IconCompat.createWithResource(mContext,
                    batteryTip.getIconId());
            final Drawable drawable = mContext.getDrawable(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(),
                    icon,
                    ListBuilder.ICON_IMAGE,
+75 −8
Original line number Diff line number Diff line
@@ -18,7 +18,11 @@ package com.android.settings.homepage.contextualcards.slices;

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.net.Uri;

import androidx.slice.Slice;
import androidx.slice.SliceMetadata;
@@ -26,11 +30,13 @@ import androidx.slice.SliceProvider;
import androidx.slice.widget.SliceLiveData;

import com.android.internal.os.BatteryStatsHelper;
import com.android.settings.R;
import com.android.settings.fuelgauge.BatteryStatsHelperLoader;
import com.android.settings.fuelgauge.batterytip.BatteryTipLoader;
import com.android.settings.fuelgauge.batterytip.tips.BatteryTip;
import com.android.settings.fuelgauge.batterytip.tips.EarlyWarningTip;
import com.android.settings.fuelgauge.batterytip.tips.LowBatteryTip;
import com.android.settings.slices.SliceBackgroundWorker;

import org.junit.After;
import org.junit.Before;
@@ -48,6 +54,10 @@ import java.util.ArrayList;
import java.util.List;

@RunWith(RobolectricTestRunner.class)
@Config(shadows = {
        BatteryFixSliceTest.ShadowBatteryStatsHelperLoader.class,
        BatteryFixSliceTest.ShadowBatteryTipLoader.class
})
public class BatteryFixSliceTest {

    private Context mContext;
@@ -66,13 +76,11 @@ public class BatteryFixSliceTest {
    @After
    public void tearDown() {
        ShadowBatteryTipLoader.reset();
        ShadowSliceBackgroundWorker.reset();
        ShadowEarlyWarningTip.reset();
    }

    @Test
    @Config(shadows = {
            ShadowBatteryStatsHelperLoader.class,
            ShadowBatteryTipLoader.class
    })
    public void updateBatteryTipAvailabilityCache_hasImportantTip_shouldReturnTrue() {
        final List<BatteryTip> tips = new ArrayList<>();
        tips.add(new LowBatteryTip(BatteryTip.StateType.INVISIBLE, false, ""));
@@ -85,10 +93,6 @@ public class BatteryFixSliceTest {
    }

    @Test
    @Config(shadows = {
            ShadowBatteryStatsHelperLoader.class,
            ShadowBatteryTipLoader.class
    })
    public void getSlice_unimportantSlice_shouldSkip() {
        final List<BatteryTip> tips = new ArrayList<>();
        tips.add(new LowBatteryTip(BatteryTip.StateType.INVISIBLE, false, ""));
@@ -101,6 +105,28 @@ public class BatteryFixSliceTest {
        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)
    public static class ShadowBatteryStatsHelperLoader {

@@ -129,4 +155,45 @@ public class BatteryFixSliceTest {
            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;
        }
    }
}