Files
app_Settings/src/com/android/settings/fuelgauge/batteryusage/BatteryOptimizationModeCache.java
mxyyiyi 59e5dc720a Add whether app optimization mode mutable in BatteryUsageDiff proto.
Bug: 350657779
Test: atest ConvertUtilsTest
Flag: EXEMPT bug fix
Change-Id: I80a5e6513e1bee88f85caeed7661b10204df8a51
2024-08-02 10:41:24 +08:00

64 lines
2.5 KiB
Java

/*
* Copyright (C) 2024 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.android.settings.fuelgauge.batteryusage;
import android.content.Context;
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;
/** A cache to log battery optimization mode of an app */
final class BatteryOptimizationModeCache {
private static final String TAG = "BatteryOptimizationModeCache";
/* 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;
mBatteryOptimizeModeCache = new SparseArray<>();
PowerAllowlistBackend.getInstance(mContext).refreshList();
}
Pair<BatteryOptimizationMode, Boolean> getBatteryOptimizeModeInfo(
final int uid, final String packageName) {
if (!mBatteryOptimizeModeCache.contains(uid)) {
final BatteryOptimizeUtils batteryOptimizeUtils =
new BatteryOptimizeUtils(mContext, uid, packageName);
mBatteryOptimizeModeCache.put(
uid,
Pair.create(
BatteryOptimizationMode.forNumber(
batteryOptimizeUtils.getAppOptimizationMode(
/* refreshList= */ false)),
batteryOptimizeUtils.isOptimizeModeMutable()));
}
final Pair<BatteryOptimizationMode, Boolean> batteryOptimizeModeInfo =
mBatteryOptimizeModeCache.get(uid);
return batteryOptimizeModeInfo != null
? batteryOptimizeModeInfo
: new Pair<>(BatteryOptimizationMode.MODE_UNKNOWN, false);
}
}