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

Commit c886544a authored by Raff Tsai's avatar Raff Tsai
Browse files

Do not return null in getSlice()

- It will result in a empty SliceView. Because we can use
slice.hasHint(HINT_ERROR) to check if we should show the slice,
always return a valid slice object.
- Set tintcolor -1 therefore battery icon will not have tint

Bug: 120221527
Test: manual
Change-Id: Idfc97f90c75515b079e1faed802c9b9047bfdeb4
parent 2602e42b
Loading
Loading
Loading
Loading
+41 −41
Original line number Diff line number Diff line
@@ -18,11 +18,14 @@ package com.android.settings.homepage.contextualcards.slices;

import static android.content.Context.MODE_PRIVATE;

import static com.android.settings.slices.CustomSliceRegistry.BATTERY_FIX_SLICE_URI;

import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.net.Uri;
import android.util.Log;

import androidx.annotation.VisibleForTesting;
import androidx.annotation.WorkerThread;
@@ -36,13 +39,11 @@ import com.android.internal.logging.nano.MetricsProto;
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;
import com.android.settings.fuelgauge.batterytip.BatteryTipPreferenceController;
import com.android.settings.fuelgauge.batterytip.tips.BatteryTip;
import com.android.settings.slices.CustomSliceRegistry;
import com.android.settings.slices.CustomSliceable;
import com.android.settings.slices.SliceBackgroundWorker;
import com.android.settings.slices.SliceBuilderUtils;
@@ -67,59 +68,44 @@ public class BatteryFixSlice implements CustomSliceable {

    @Override
    public Uri getUri() {
        return CustomSliceRegistry.BATTERY_FIX_SLICE_URI;
        return BATTERY_FIX_SLICE_URI;
    }

    @Override
    public Slice getSlice() {
        IconCompat icon;
        SliceAction primaryAction;
        Slice slice = null;
        final ListBuilder sliceBuilder =
                new ListBuilder(mContext, BATTERY_FIX_SLICE_URI, ListBuilder.INFINITY)
                        .setAccentColor(-1);

        // TipType.SUMMARY is battery good
        if (readBatteryTipAvailabilityCache(mContext) == BatteryTip.TipType.SUMMARY) {
            return null;
            return buildBatteryGoodSlice(sliceBuilder, true);
        }

        final List<BatteryTip> batteryTips = SliceBackgroundWorker.getInstance(mContext,
                this).getResults();

        if (batteryTips != null) {
        if (batteryTips == null) {
            // Because we need wait slice background worker return data
            return buildBatteryGoodSlice(sliceBuilder, false);
        }

        for (BatteryTip batteryTip : batteryTips) {
            if (batteryTip.getState() != BatteryTip.StateType.INVISIBLE) {
                    icon = IconCompat.createWithResource(mContext, batteryTip.getIconId());
                    primaryAction = SliceAction.createDeeplink(getPrimaryAction(),
                final IconCompat icon = IconCompat.createWithResource(mContext, batteryTip.getIconId());
                final SliceAction primaryAction = SliceAction.createDeeplink(getPrimaryAction(),
                        icon,
                        ListBuilder.ICON_IMAGE,
                        batteryTip.getTitle(mContext));
                    slice = new ListBuilder(mContext, CustomSliceRegistry.BATTERY_FIX_SLICE_URI,
                            ListBuilder.INFINITY)
                            .setAccentColor(Utils.getColorAccentDefaultColor(mContext))
                            .addRow(new RowBuilder()
                sliceBuilder.addRow(new RowBuilder()
                        .setTitle(batteryTip.getTitle(mContext))
                        .setSubtitle(batteryTip.getSummary(mContext))
                        .setPrimaryAction(primaryAction)
                                    .addEndItem(icon, ListBuilder.ICON_IMAGE))
                            .build();
                        .addEndItem(icon, ListBuilder.ICON_IMAGE));
                break;
            }
        }
        } else {
            icon = IconCompat.createWithResource(mContext,
                    R.drawable.ic_battery_status_good_24dp);
            final String title = mContext.getString(R.string.power_usage_summary_title);
            primaryAction = SliceAction.createDeeplink(getPrimaryAction(), icon,
                    ListBuilder.ICON_IMAGE, title);
            slice = new ListBuilder(mContext, CustomSliceRegistry.BATTERY_FIX_SLICE_URI,
                    ListBuilder.INFINITY)
                    .setAccentColor(Utils.getColorAccentDefaultColor(mContext))
                    .addRow(new RowBuilder()
                            .setTitle(title)
                            .setPrimaryAction(primaryAction)
                            .addEndItem(icon, ListBuilder.ICON_IMAGE))
                    .build();
        }
        return slice;
        return sliceBuilder.build();
    }

    @Override
@@ -151,6 +137,20 @@ public class BatteryFixSlice implements CustomSliceable {
        return PendingIntent.getActivity(mContext, 0  /* requestCode */, intent, 0  /* flags */);
    }

    private Slice buildBatteryGoodSlice(ListBuilder sliceBuilder, boolean isError) {
        final IconCompat icon = IconCompat.createWithResource(mContext,
                R.drawable.ic_battery_status_good_24dp);
        final String title = mContext.getString(R.string.power_usage_summary_title);
        final SliceAction primaryAction = SliceAction.createDeeplink(getPrimaryAction(), icon,
                ListBuilder.ICON_IMAGE, title);
        sliceBuilder.addRow(new RowBuilder()
                .setTitle(title)
                .setPrimaryAction(primaryAction)
                .addEndItem(icon, ListBuilder.ICON_IMAGE))
                .setIsError(isError);
        return sliceBuilder.build();
    }

    // TODO(b/114807643): we should find a better way to get current battery tip type quickly
    // Now we save battery tip type to shared preference when battery level changes
    public static void updateBatteryTipAvailabilityCache(Context context) {