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

Commit 59e5dc72 authored by mxyyiyi's avatar mxyyiyi
Browse files

Add whether app optimization mode mutable in BatteryUsageDiff proto.

Bug: 350657779
Test: atest ConvertUtilsTest
Flag: EXEMPT bug fix
Change-Id: I80a5e6513e1bee88f85caeed7661b10204df8a51
parent 3a8ce3f9
Loading
Loading
Loading
Loading
+20 −11
Original line number Diff line number Diff line
@@ -17,38 +17,47 @@
package com.android.settings.fuelgauge.batteryusage;

import android.content.Context;
import android.util.ArrayMap;
import android.util.SparseArray;

import androidx.annotation.VisibleForTesting;
import androidx.core.util.Pair;

import com.android.settings.fuelgauge.BatteryOptimizeUtils;
import com.android.settingslib.fuelgauge.PowerAllowlistBackend;

import java.util.Map;

/** A cache to log battery optimization mode of an app */
final class BatteryOptimizationModeCache {
    private static final String TAG = "BatteryOptimizationModeCache";

    @VisibleForTesting final Map<Integer, BatteryOptimizationMode> mBatteryOptimizeModeCacheMap;
    /* Stores the battery optimization mode and mutable state for each UID. */
    @VisibleForTesting
    final SparseArray<Pair<BatteryOptimizationMode, Boolean>> mBatteryOptimizeModeCache;

    private final Context mContext;

    BatteryOptimizationModeCache(final Context context) {
        mContext = context;
        mBatteryOptimizeModeCacheMap = new ArrayMap<>();
        mBatteryOptimizeModeCache = new SparseArray<>();
        PowerAllowlistBackend.getInstance(mContext).refreshList();
    }

    BatteryOptimizationMode getBatteryOptimizeMode(final int uid, final String packageName) {
        if (!mBatteryOptimizeModeCacheMap.containsKey(uid)) {
    Pair<BatteryOptimizationMode, Boolean> getBatteryOptimizeModeInfo(
            final int uid, final String packageName) {
        if (!mBatteryOptimizeModeCache.contains(uid)) {
            final BatteryOptimizeUtils batteryOptimizeUtils =
                    new BatteryOptimizeUtils(mContext, uid, packageName);
            mBatteryOptimizeModeCacheMap.put(
            mBatteryOptimizeModeCache.put(
                    uid,
                    Pair.create(
                            BatteryOptimizationMode.forNumber(
                            batteryOptimizeUtils.getAppOptimizationMode(/* refreshList= */ false)));
                                    batteryOptimizeUtils.getAppOptimizationMode(
                                            /* refreshList= */ false)),
                            batteryOptimizeUtils.isOptimizeModeMutable()));
        }
        return mBatteryOptimizeModeCacheMap.get(uid);
        final Pair<BatteryOptimizationMode, Boolean> batteryOptimizeModeInfo =
                mBatteryOptimizeModeCache.get(uid);
        return batteryOptimizeModeInfo != null
                ? batteryOptimizeModeInfo
                : new Pair<>(BatteryOptimizationMode.MODE_UNKNOWN, false);
    }
}
+6 −3
Original line number Diff line number Diff line
@@ -35,6 +35,7 @@ import android.util.Log;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.annotation.VisibleForTesting;
import androidx.core.util.Pair;

import com.android.settings.fuelgauge.BatteryUtils;
import com.android.settings.fuelgauge.batteryusage.db.AppUsageEventEntity;
@@ -542,9 +543,11 @@ public final class ConvertUtils {
        }
        // Log the battery optimization mode of AppEntry while converting to batteryUsageSlot.
        if (optimizationModeCache != null && !batteryDiffEntry.isSystemEntry()) {
            builder.setAppOptimizationMode(
                    optimizationModeCache.getBatteryOptimizeMode(
                            (int) batteryDiffEntry.mUid, batteryDiffEntry.getPackageName()));
            final Pair<BatteryOptimizationMode, Boolean> batteryOptimizationModeInfo =
                    optimizationModeCache.getBatteryOptimizeModeInfo(
                            (int) batteryDiffEntry.mUid, batteryDiffEntry.getPackageName());
            builder.setAppOptimizationMode(batteryOptimizationModeInfo.first)
                    .setIsAppOptimizationModeMutable(batteryOptimizationModeInfo.second);
        }
        return builder.build();
    }
+1 −0
Original line number Diff line number Diff line
@@ -40,4 +40,5 @@ message BatteryUsageDiff {
  optional int64 screen_on_time = 16;
  optional int64 foreground_service_usage_time = 17;
  optional BatteryOptimizationMode app_optimization_mode = 18;
  optional bool is_app_optimization_mode_mutable = 19;
}
+6 −2
Original line number Diff line number Diff line
@@ -38,6 +38,8 @@ import android.os.BatteryUsageStats;
import android.os.LocaleList;
import android.os.UserHandle;

import androidx.core.util.Pair;

import com.android.settings.fuelgauge.batteryusage.db.AppUsageEventEntity;
import com.android.settings.fuelgauge.batteryusage.db.BatteryEventEntity;
import com.android.settings.fuelgauge.batteryusage.db.BatteryUsageSlotEntity;
@@ -384,8 +386,9 @@ public final class ConvertUtilsTest {
                        /* cachedUsageConsumePower= */ 1.5);
        BatteryOptimizationModeCache optimizationModeCache =
                new BatteryOptimizationModeCache(mContext);
        optimizationModeCache.mBatteryOptimizeModeCacheMap.put(
                (int) batteryDiffEntry.mUid, BatteryOptimizationMode.MODE_OPTIMIZED);
        optimizationModeCache.mBatteryOptimizeModeCache.put(
                (int) batteryDiffEntry.mUid,
                Pair.create(BatteryOptimizationMode.MODE_OPTIMIZED, false));

        final BatteryUsageDiff batteryUsageDiff =
                ConvertUtils.convertToBatteryUsageDiff(batteryDiffEntry, optimizationModeCache);
@@ -408,6 +411,7 @@ public final class ConvertUtilsTest {
        assertThat(batteryUsageDiff.getKey()).isEqualTo("key");
        assertThat(batteryUsageDiff.getAppOptimizationMode())
                .isEqualTo(BatteryOptimizationMode.MODE_OPTIMIZED);
        assertThat(batteryUsageDiff.getIsAppOptimizationModeMutable()).isFalse();
        assertThat(batteryUsageDiff.hasPackageName()).isFalse();
        assertThat(batteryUsageDiff.hasLabel()).isFalse();
    }