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

Commit b6e0cd99 authored by Treehugger Robot's avatar Treehugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Add whether app optimization mode mutable in BatteryUsageDiff proto." into main

parents f2d6fe9e 59e5dc72
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();
    }