Snap for 10136934 from 5cd3a7298e
to udc-release
Change-Id: I848054e5a4efca9961be83b84368436fccb144a0
This commit is contained in:
@@ -20,6 +20,7 @@ message BatteryOptimizeHistoricalLogEntry {
|
||||
RESET = 3;
|
||||
RESTORE = 4;
|
||||
BACKUP = 5;
|
||||
FORCE_RESET = 6;
|
||||
}
|
||||
|
||||
optional string package_name = 1;
|
||||
|
@@ -526,6 +526,10 @@
|
||||
<item>content://com.android.settings.slices/intent/media_output_indicator</item>
|
||||
</string-array>
|
||||
|
||||
<!-- List containing the apps cannot be changed the battery optimize modes -->
|
||||
<string-array name="config_disable_optimization_mode_apps" translatable="false">
|
||||
</string-array>
|
||||
|
||||
<!-- Uri to query non-public Slice Uris. -->
|
||||
<string name="config_non_public_slice_query_uri" translatable="false"></string>
|
||||
|
||||
|
@@ -343,7 +343,7 @@ public class AdvancedPowerUsageDetail extends DashboardFragment implements
|
||||
final String stateString;
|
||||
final String footerString;
|
||||
|
||||
if (!mBatteryOptimizeUtils.isValidPackageName()) {
|
||||
if (mBatteryOptimizeUtils.isDisabledForOptimizeModeOnly()) {
|
||||
// Present optimized only string when the package name is invalid.
|
||||
stateString = context.getString(R.string.manager_battery_usage_optimized_only);
|
||||
footerString = context.getString(
|
||||
|
@@ -91,11 +91,12 @@ public final class BatteryBackupHelper implements BackupHelper {
|
||||
|
||||
@Override
|
||||
public void restoreEntity(BackupDataInputStream data) {
|
||||
BatterySettingsMigrateChecker.verifyConfiguration(mContext);
|
||||
BatterySettingsMigrateChecker.verifySaverConfiguration(mContext);
|
||||
if (!isOwner() || data == null || data.size() == 0) {
|
||||
Log.w(TAG, "ignore restoreEntity() for non-owner or empty data");
|
||||
return;
|
||||
}
|
||||
|
||||
if (KEY_OPTIMIZATION_LIST.equals(data.getKey())) {
|
||||
final int dataSize = data.size();
|
||||
final byte[] dataBytes = new byte[dataSize];
|
||||
@@ -105,7 +106,10 @@ public final class BatteryBackupHelper implements BackupHelper {
|
||||
Log.e(TAG, "failed to load BackupDataInputStream", e);
|
||||
return;
|
||||
}
|
||||
restoreOptimizationMode(dataBytes);
|
||||
final int restoreCount = restoreOptimizationMode(dataBytes);
|
||||
if (restoreCount > 0) {
|
||||
BatterySettingsMigrateChecker.verifyOptimizationModes(mContext);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -175,17 +179,17 @@ public final class BatteryBackupHelper implements BackupHelper {
|
||||
}
|
||||
|
||||
@VisibleForTesting
|
||||
void restoreOptimizationMode(byte[] dataBytes) {
|
||||
int restoreOptimizationMode(byte[] dataBytes) {
|
||||
final long timestamp = System.currentTimeMillis();
|
||||
final String dataContent = new String(dataBytes, StandardCharsets.UTF_8);
|
||||
if (dataContent == null || dataContent.isEmpty()) {
|
||||
Log.w(TAG, "no data found in the restoreOptimizationMode()");
|
||||
return;
|
||||
return 0;
|
||||
}
|
||||
final String[] appConfigurations = dataContent.split(BatteryBackupHelper.DELIMITER);
|
||||
if (appConfigurations == null || appConfigurations.length == 0) {
|
||||
Log.w(TAG, "no data found from the split() processing");
|
||||
return;
|
||||
return 0;
|
||||
}
|
||||
int restoreCount = 0;
|
||||
for (int index = 0; index < appConfigurations.length; index++) {
|
||||
@@ -217,6 +221,7 @@ public final class BatteryBackupHelper implements BackupHelper {
|
||||
}
|
||||
Log.d(TAG, String.format("restoreOptimizationMode() count=%d in %d/ms",
|
||||
restoreCount, (System.currentTimeMillis() - timestamp)));
|
||||
return restoreCount;
|
||||
}
|
||||
|
||||
/** Dump the app optimization mode backup history data. */
|
||||
@@ -225,6 +230,23 @@ public final class BatteryBackupHelper implements BackupHelper {
|
||||
getSharedPreferences(context), writer);
|
||||
}
|
||||
|
||||
static boolean isOwner() {
|
||||
return UserHandle.myUserId() == UserHandle.USER_SYSTEM;
|
||||
}
|
||||
|
||||
static BatteryOptimizeUtils newBatteryOptimizeUtils(
|
||||
Context context, String packageName, BatteryOptimizeUtils testOptimizeUtils) {
|
||||
final int uid = BatteryUtils.getInstance(context).getPackageUid(packageName);
|
||||
if (uid == BatteryUtils.UID_NULL) {
|
||||
return null;
|
||||
}
|
||||
final BatteryOptimizeUtils batteryOptimizeUtils =
|
||||
testOptimizeUtils != null
|
||||
? testOptimizeUtils /*testing only*/
|
||||
: new BatteryOptimizeUtils(context, uid, packageName);
|
||||
return batteryOptimizeUtils;
|
||||
}
|
||||
|
||||
@VisibleForTesting
|
||||
static SharedPreferences getSharedPreferences(Context context) {
|
||||
return context.getSharedPreferences(
|
||||
@@ -233,14 +255,11 @@ public final class BatteryBackupHelper implements BackupHelper {
|
||||
|
||||
private void restoreOptimizationMode(
|
||||
String packageName, @BatteryOptimizeUtils.OptimizationMode int mode) {
|
||||
final int uid = BatteryUtils.getInstance(mContext).getPackageUid(packageName);
|
||||
if (uid == BatteryUtils.UID_NULL) {
|
||||
final BatteryOptimizeUtils batteryOptimizeUtils =
|
||||
newBatteryOptimizeUtils(mContext, packageName, mBatteryOptimizeUtils);
|
||||
if (batteryOptimizeUtils == null) {
|
||||
return;
|
||||
}
|
||||
final BatteryOptimizeUtils batteryOptimizeUtils =
|
||||
mBatteryOptimizeUtils != null
|
||||
? mBatteryOptimizeUtils /*testing only*/
|
||||
: new BatteryOptimizeUtils(mContext, uid, packageName);
|
||||
batteryOptimizeUtils.setAppUsageState(
|
||||
mode, BatteryOptimizeHistoricalLogEntry.Action.RESTORE);
|
||||
Log.d(TAG, String.format("restore:%s mode=%d", packageName, mode));
|
||||
@@ -294,8 +313,4 @@ public final class BatteryBackupHelper implements BackupHelper {
|
||||
Log.e(TAG, "writeBackupData() is failed for " + dataKey, e);
|
||||
}
|
||||
}
|
||||
|
||||
private static boolean isOwner() {
|
||||
return UserHandle.myUserId() == UserHandle.USER_SYSTEM;
|
||||
}
|
||||
}
|
||||
|
@@ -34,24 +34,20 @@ import java.lang.annotation.Retention;
|
||||
import java.lang.annotation.RetentionPolicy;
|
||||
|
||||
/**
|
||||
* Use this broadcastReceiver to listen to the battery change, and it will invoke
|
||||
* {@link OnBatteryChangedListener} if any of the following has been changed:
|
||||
*
|
||||
* 1. Battery level(e.g. 100%->99%)
|
||||
* 2. Battery status(e.g. plugged->unplugged)
|
||||
* 3. Battery saver(e.g. off->on)
|
||||
* 4. Battery health(e.g. good->overheat)
|
||||
* Use this broadcastReceiver to listen to the battery change and it will invoke
|
||||
* {@link OnBatteryChangedListener}
|
||||
*/
|
||||
public class BatteryBroadcastReceiver extends BroadcastReceiver {
|
||||
|
||||
private static final String TAG = "BatteryBroadcastRcvr";
|
||||
/**
|
||||
* Callback when the following has been changed:
|
||||
* Callback if any of the monitored fields has been changed:
|
||||
*
|
||||
* Battery level(e.g. 100%->99%)
|
||||
* Battery status(e.g. plugged->unplugged)
|
||||
* Battery saver(e.g. off->on)
|
||||
* Battery health(e.g. good->overheat)
|
||||
* Battery charging status(e.g. default->long life)
|
||||
*/
|
||||
public interface OnBatteryChangedListener {
|
||||
void onBatteryChanged(@BatteryUpdateType int type);
|
||||
@@ -63,6 +59,7 @@ public class BatteryBroadcastReceiver extends BroadcastReceiver {
|
||||
BatteryUpdateType.BATTERY_SAVER,
|
||||
BatteryUpdateType.BATTERY_STATUS,
|
||||
BatteryUpdateType.BATTERY_HEALTH,
|
||||
BatteryUpdateType.CHARGING_STATUS,
|
||||
BatteryUpdateType.BATTERY_NOT_PRESENT})
|
||||
public @interface BatteryUpdateType {
|
||||
int MANUAL = 0;
|
||||
@@ -70,7 +67,8 @@ public class BatteryBroadcastReceiver extends BroadcastReceiver {
|
||||
int BATTERY_SAVER = 2;
|
||||
int BATTERY_STATUS = 3;
|
||||
int BATTERY_HEALTH = 4;
|
||||
int BATTERY_NOT_PRESENT = 5;
|
||||
int CHARGING_STATUS = 5;
|
||||
int BATTERY_NOT_PRESENT = 6;
|
||||
}
|
||||
|
||||
@VisibleForTesting
|
||||
@@ -78,6 +76,8 @@ public class BatteryBroadcastReceiver extends BroadcastReceiver {
|
||||
@VisibleForTesting
|
||||
String mBatteryStatus;
|
||||
@VisibleForTesting
|
||||
int mChargingStatus;
|
||||
@VisibleForTesting
|
||||
int mBatteryHealth;
|
||||
private OnBatteryChangedListener mBatteryListener;
|
||||
private Context mContext;
|
||||
@@ -121,21 +121,27 @@ public class BatteryBroadcastReceiver extends BroadcastReceiver {
|
||||
final String batteryLevel = Utils.getBatteryPercentage(intent);
|
||||
final String batteryStatus =
|
||||
Utils.getBatteryStatus(mContext, intent, /* compactStatus= */ false);
|
||||
final int chargingStatus = intent.getIntExtra(
|
||||
BatteryManager.EXTRA_CHARGING_STATUS, BatteryManager.CHARGING_POLICY_DEFAULT);
|
||||
final int batteryHealth = intent.getIntExtra(
|
||||
BatteryManager.EXTRA_HEALTH, BatteryManager.BATTERY_HEALTH_UNKNOWN);
|
||||
Log.d(
|
||||
TAG,
|
||||
"Battery changed: level="
|
||||
"Battery changed: level: "
|
||||
+ batteryLevel
|
||||
+ ", status="
|
||||
+ "| status: "
|
||||
+ batteryStatus
|
||||
+ ", health="
|
||||
+ "| chargingStatus: "
|
||||
+ chargingStatus
|
||||
+ "| health: "
|
||||
+ batteryHealth);
|
||||
if (!Utils.isBatteryPresent(intent)) {
|
||||
Log.w(TAG, "Problem reading the battery meter.");
|
||||
mBatteryListener.onBatteryChanged(BatteryUpdateType.BATTERY_NOT_PRESENT);
|
||||
} else if (forceUpdate) {
|
||||
mBatteryListener.onBatteryChanged(BatteryUpdateType.MANUAL);
|
||||
} else if (chargingStatus != mChargingStatus) {
|
||||
mBatteryListener.onBatteryChanged(BatteryUpdateType.CHARGING_STATUS);
|
||||
} else if (batteryHealth != mBatteryHealth) {
|
||||
mBatteryListener.onBatteryChanged(BatteryUpdateType.BATTERY_HEALTH);
|
||||
} else if(!batteryLevel.equals(mBatteryLevel)) {
|
||||
@@ -145,6 +151,7 @@ public class BatteryBroadcastReceiver extends BroadcastReceiver {
|
||||
}
|
||||
mBatteryLevel = batteryLevel;
|
||||
mBatteryStatus = batteryStatus;
|
||||
mChargingStatus = chargingStatus;
|
||||
mBatteryHealth = batteryHealth;
|
||||
} else if (PowerManager.ACTION_POWER_SAVE_MODE_CHANGED.equals(action)) {
|
||||
mBatteryListener.onBatteryChanged(BatteryUpdateType.BATTERY_SAVER);
|
||||
|
@@ -51,7 +51,7 @@ public class BatteryInfo {
|
||||
public int batteryStatus;
|
||||
public int pluggedStatus;
|
||||
public boolean discharging = true;
|
||||
public boolean isOverheated;
|
||||
public boolean isBatteryDefender;
|
||||
public long remainingTimeUs = 0;
|
||||
public long averageTimeToDischarge = EstimateKt.AVERAGE_TIME_TO_DISCHARGE_UNKNOWN;
|
||||
public String batteryPercentString;
|
||||
@@ -257,9 +257,9 @@ public class BatteryInfo {
|
||||
info.pluggedStatus = batteryBroadcast.getIntExtra(BatteryManager.EXTRA_PLUGGED, 0);
|
||||
info.mCharging = info.pluggedStatus != 0;
|
||||
info.averageTimeToDischarge = estimate.getAverageDischargeTime();
|
||||
info.isOverheated = batteryBroadcast.getIntExtra(
|
||||
BatteryManager.EXTRA_HEALTH, BatteryManager.BATTERY_HEALTH_UNKNOWN)
|
||||
== BatteryManager.BATTERY_HEALTH_OVERHEAT;
|
||||
info.isBatteryDefender = batteryBroadcast.getIntExtra(
|
||||
BatteryManager.EXTRA_CHARGING_STATUS, BatteryManager.CHARGING_POLICY_DEFAULT)
|
||||
== BatteryManager.CHARGING_POLICY_ADAPTIVE_LONGLIFE;
|
||||
|
||||
info.statusLabel = Utils.getBatteryStatus(context, batteryBroadcast, isCompactStatus);
|
||||
info.batteryStatus = batteryBroadcast.getIntExtra(
|
||||
@@ -283,7 +283,7 @@ public class BatteryInfo {
|
||||
info.discharging = false;
|
||||
info.suggestionLabel = null;
|
||||
int dockDefenderMode = BatteryUtils.getCurrentDockDefenderMode(context, info);
|
||||
if ((info.isOverheated && status != BatteryManager.BATTERY_STATUS_FULL
|
||||
if ((info.isBatteryDefender && status != BatteryManager.BATTERY_STATUS_FULL
|
||||
&& dockDefenderMode == BatteryUtils.DockDefenderMode.DISABLED)
|
||||
|| dockDefenderMode == BatteryUtils.DockDefenderMode.ACTIVE) {
|
||||
// Battery defender active, battery charging paused
|
||||
|
@@ -31,11 +31,14 @@ import android.util.Log;
|
||||
|
||||
import androidx.annotation.VisibleForTesting;
|
||||
|
||||
import com.android.settings.R;
|
||||
import com.android.settings.fuelgauge.BatteryOptimizeHistoricalLogEntry.Action;
|
||||
import com.android.settingslib.fuelgauge.PowerAllowlistBackend;
|
||||
|
||||
import java.lang.annotation.Retention;
|
||||
import java.lang.annotation.RetentionPolicy;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
/** A utility class for application usage operation. */
|
||||
public class BatteryOptimizeUtils {
|
||||
@@ -125,11 +128,10 @@ public class BatteryOptimizeUtils {
|
||||
mContext, mode, mUid, mPackageName, mBatteryUtils, mPowerAllowListBackend, action);
|
||||
}
|
||||
|
||||
/**
|
||||
* Return {@code true} if package name is valid (can get an uid).
|
||||
*/
|
||||
public boolean isValidPackageName() {
|
||||
return mBatteryUtils.getPackageUid(mPackageName) != BatteryUtils.UID_NULL;
|
||||
/** Return {@code true} if it is disabled for default optimized mode only. */
|
||||
public boolean isDisabledForOptimizeModeOnly() {
|
||||
return getAllowList(mContext).contains(mPackageName)
|
||||
|| mBatteryUtils.getPackageUid(mPackageName) == BatteryUtils.UID_NULL;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -214,6 +216,11 @@ public class BatteryOptimizeUtils {
|
||||
|| powerAllowlistBackend.isDefaultActiveApp(packageName, uid);
|
||||
}
|
||||
|
||||
static List<String> getAllowList(Context context) {
|
||||
return Arrays.asList(context.getResources().getStringArray(
|
||||
R.array.config_disable_optimization_mode_apps));
|
||||
}
|
||||
|
||||
private static void setAppUsageStateInternal(
|
||||
Context context, @OptimizationMode int mode, int uid, String packageName,
|
||||
BatteryUtils batteryUtils, PowerAllowlistBackend powerAllowlistBackend,
|
||||
|
@@ -23,16 +23,27 @@ import android.content.Intent;
|
||||
import android.provider.Settings;
|
||||
import android.util.Log;
|
||||
|
||||
import androidx.annotation.VisibleForTesting;
|
||||
|
||||
import com.android.settings.R;
|
||||
import com.android.settings.fuelgauge.BatteryOptimizeHistoricalLogEntry;
|
||||
import com.android.settings.fuelgauge.batterysaver.BatterySaverScheduleRadioButtonsController;
|
||||
import com.android.settingslib.fuelgauge.BatterySaverUtils;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/** Execute battery settings migration tasks in the device booting stage. */
|
||||
public final class BatterySettingsMigrateChecker extends BroadcastReceiver {
|
||||
private static final String TAG = "BatterySettingsMigrateChecker";
|
||||
|
||||
@VisibleForTesting
|
||||
static BatteryOptimizeUtils sBatteryOptimizeUtils = null;
|
||||
|
||||
@Override
|
||||
public void onReceive(Context context, Intent intent) {
|
||||
if (intent != null && Intent.ACTION_BOOT_COMPLETED.equals(intent.getAction())) {
|
||||
if (intent != null
|
||||
&& Intent.ACTION_BOOT_COMPLETED.equals(intent.getAction())
|
||||
&& BatteryBackupHelper.isOwner()) {
|
||||
verifyConfiguration(context);
|
||||
}
|
||||
}
|
||||
@@ -40,9 +51,35 @@ public final class BatterySettingsMigrateChecker extends BroadcastReceiver {
|
||||
static void verifyConfiguration(Context context) {
|
||||
context = context.getApplicationContext();
|
||||
verifySaverConfiguration(context);
|
||||
verifyOptimizationModes(context);
|
||||
}
|
||||
|
||||
private static void verifySaverConfiguration(Context context) {
|
||||
/** Avoid users set important apps into the unexpected battery optimize modes */
|
||||
static void verifyOptimizationModes(Context context) {
|
||||
Log.d(TAG, "invoke verifyOptimizationModes()");
|
||||
verifyOptimizationModes(context, BatteryOptimizeUtils.getAllowList(context));
|
||||
}
|
||||
|
||||
@VisibleForTesting
|
||||
static void verifyOptimizationModes(Context context, List<String> allowList) {
|
||||
allowList.forEach(packageName -> {
|
||||
final BatteryOptimizeUtils batteryOptimizeUtils =
|
||||
BatteryBackupHelper.newBatteryOptimizeUtils(context, packageName,
|
||||
/* testOptimizeUtils */ sBatteryOptimizeUtils);
|
||||
if (batteryOptimizeUtils == null) {
|
||||
return;
|
||||
}
|
||||
if (batteryOptimizeUtils.getAppOptimizationMode() !=
|
||||
BatteryOptimizeUtils.MODE_OPTIMIZED) {
|
||||
Log.w(TAG, "Reset optimization mode for: " + packageName);
|
||||
batteryOptimizeUtils.setAppUsageState(BatteryOptimizeUtils.MODE_OPTIMIZED,
|
||||
BatteryOptimizeHistoricalLogEntry.Action.FORCE_RESET);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
static void verifySaverConfiguration(Context context) {
|
||||
Log.d(TAG, "invoke verifySaverConfiguration()");
|
||||
final ContentResolver resolver = context.getContentResolver();
|
||||
final int threshold = Settings.Global.getInt(resolver,
|
||||
Settings.Global.LOW_POWER_MODE_TRIGGER_LEVEL, 0);
|
||||
|
@@ -18,7 +18,6 @@ package com.android.settings.fuelgauge;
|
||||
import android.app.AppOpsManager;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.content.IntentFilter;
|
||||
import android.content.pm.ApplicationInfo;
|
||||
import android.content.pm.InstallSourceInfo;
|
||||
import android.content.pm.PackageInfo;
|
||||
@@ -322,10 +321,10 @@ public class BatteryUtils {
|
||||
}
|
||||
|
||||
/**
|
||||
* Return {@code true} if battery is overheated and charging.
|
||||
* Return {@code true} if battery defender is on and charging.
|
||||
*/
|
||||
public static boolean isBatteryDefenderOn(BatteryInfo batteryInfo) {
|
||||
return batteryInfo.isOverheated && !batteryInfo.discharging;
|
||||
return batteryInfo.isBatteryDefender && !batteryInfo.discharging;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -627,11 +626,11 @@ public class BatteryUtils {
|
||||
if (Settings.Global.getInt(context.getContentResolver(),
|
||||
SETTINGS_GLOBAL_DOCK_DEFENDER_BYPASS, 0) == 1) {
|
||||
return DockDefenderMode.TEMPORARILY_BYPASSED;
|
||||
} else if (batteryInfo.isOverheated && FeatureFactory.getFactory(context)
|
||||
} else if (batteryInfo.isBatteryDefender && FeatureFactory.getFactory(context)
|
||||
.getPowerUsageFeatureProvider(context)
|
||||
.isExtraDefend()) {
|
||||
return DockDefenderMode.ACTIVE;
|
||||
} else if (!batteryInfo.isOverheated) {
|
||||
} else if (!batteryInfo.isBatteryDefender) {
|
||||
return DockDefenderMode.FUTURE_BYPASS;
|
||||
}
|
||||
}
|
||||
|
@@ -46,8 +46,8 @@ public class OptimizedPreferenceController extends AbstractPreferenceController
|
||||
|
||||
@Override
|
||||
public void updateState(Preference preference) {
|
||||
if (!mBatteryOptimizeUtils.isValidPackageName()) {
|
||||
Log.d(TAG, "invalid package name, optimized states only");
|
||||
if (mBatteryOptimizeUtils.isDisabledForOptimizeModeOnly()) {
|
||||
Log.d(TAG, "disable preference for " + mBatteryOptimizeUtils.getPackageName());
|
||||
preference.setEnabled(true);
|
||||
((SelectorWithWidgetPreference) preference).setChecked(true);
|
||||
return;
|
||||
|
@@ -14,7 +14,6 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
|
||||
package com.android.settings.fuelgauge;
|
||||
|
||||
import android.content.Context;
|
||||
@@ -43,8 +42,8 @@ public class RestrictedPreferenceController extends AbstractPreferenceController
|
||||
@Override
|
||||
public void updateState(Preference preference) {
|
||||
|
||||
if (!mBatteryOptimizeUtils.isValidPackageName()) {
|
||||
Log.d(TAG, "invalid package name, disable pref");
|
||||
if (mBatteryOptimizeUtils.isDisabledForOptimizeModeOnly()) {
|
||||
Log.d(TAG, "disable preference for " + mBatteryOptimizeUtils.getPackageName());
|
||||
preference.setEnabled(false);
|
||||
return;
|
||||
} else {
|
||||
|
@@ -42,8 +42,8 @@ public class UnrestrictedPreferenceController extends AbstractPreferenceControll
|
||||
@Override
|
||||
public void updateState(Preference preference) {
|
||||
|
||||
if (!mBatteryOptimizeUtils.isValidPackageName()) {
|
||||
Log.d(TAG, "invalid package name, disable pref");
|
||||
if (mBatteryOptimizeUtils.isDisabledForOptimizeModeOnly()) {
|
||||
Log.d(TAG, "disable preference for " + mBatteryOptimizeUtils.getPackageName());
|
||||
preference.setEnabled(false);
|
||||
return;
|
||||
} else {
|
||||
|
@@ -37,9 +37,8 @@ public class BatteryDefenderDetector implements BatteryTipDetector {
|
||||
|
||||
@Override
|
||||
public BatteryTip detect() {
|
||||
final boolean isBasicBatteryDefend = mBatteryInfo.isOverheated
|
||||
&& !FeatureFactory.getFactory(mContext)
|
||||
.getPowerUsageFeatureProvider(mContext)
|
||||
final boolean isBasicBatteryDefend = mBatteryInfo.isBatteryDefender
|
||||
&& !FeatureFactory.getFactory(mContext).getPowerUsageFeatureProvider(mContext)
|
||||
.isExtraDefend();
|
||||
final int state = isBasicBatteryDefend
|
||||
? BatteryTip.StateType.NEW : BatteryTip.StateType.INVISIBLE;
|
||||
|
@@ -141,6 +141,7 @@ public class BiometricFragment extends InstrumentedFragment {
|
||||
.setDisallowBiometricsIfPolicyExists(
|
||||
promptInfo.isDisallowBiometricsIfPolicyExists())
|
||||
.setReceiveSystemEvents(true)
|
||||
.setAllowBackgroundAuthentication(true)
|
||||
.build();
|
||||
}
|
||||
|
||||
|
@@ -710,7 +710,7 @@ public class AdvancedPowerUsageDetailTest {
|
||||
|
||||
@Test
|
||||
public void initPreferenceForTriState_isValidPackageName_hasCorrectString() {
|
||||
when(mBatteryOptimizeUtils.isValidPackageName()).thenReturn(false);
|
||||
when(mBatteryOptimizeUtils.isDisabledForOptimizeModeOnly()).thenReturn(true);
|
||||
|
||||
mFragment.initPreferenceForTriState(mContext);
|
||||
|
||||
@@ -720,7 +720,7 @@ public class AdvancedPowerUsageDetailTest {
|
||||
|
||||
@Test
|
||||
public void initPreferenceForTriState_isSystemOrDefaultApp_hasCorrectString() {
|
||||
when(mBatteryOptimizeUtils.isValidPackageName()).thenReturn(true);
|
||||
when(mBatteryOptimizeUtils.isDisabledForOptimizeModeOnly()).thenReturn(false);
|
||||
when(mBatteryOptimizeUtils.isSystemOrDefaultApp()).thenReturn(true);
|
||||
|
||||
mFragment.initPreferenceForTriState(mContext);
|
||||
@@ -731,7 +731,7 @@ public class AdvancedPowerUsageDetailTest {
|
||||
|
||||
@Test
|
||||
public void initPreferenceForTriState_hasCorrectString() {
|
||||
when(mBatteryOptimizeUtils.isValidPackageName()).thenReturn(true);
|
||||
when(mBatteryOptimizeUtils.isDisabledForOptimizeModeOnly()).thenReturn(false);
|
||||
when(mBatteryOptimizeUtils.isSystemOrDefaultApp()).thenReturn(false);
|
||||
|
||||
mFragment.initPreferenceForTriState(mContext);
|
||||
|
@@ -69,6 +69,7 @@ public class BatteryBroadcastReceiverTest {
|
||||
mBatteryBroadcastReceiver.mBatteryLevel = BATTERY_INIT_LEVEL;
|
||||
mBatteryBroadcastReceiver.mBatteryStatus = BATTERY_INIT_STATUS;
|
||||
mBatteryBroadcastReceiver.mBatteryHealth = BatteryManager.BATTERY_HEALTH_UNKNOWN;
|
||||
mBatteryBroadcastReceiver.mChargingStatus = BatteryManager.CHARGING_POLICY_DEFAULT;
|
||||
mBatteryBroadcastReceiver.setBatteryChangedListener(mBatteryListener);
|
||||
|
||||
mChargingIntent = new Intent(Intent.ACTION_BATTERY_CHANGED);
|
||||
@@ -91,8 +92,8 @@ public class BatteryBroadcastReceiverTest {
|
||||
|
||||
@Test
|
||||
public void onReceive_batteryHealthChanged_dataUpdated() {
|
||||
mChargingIntent
|
||||
.putExtra(BatteryManager.EXTRA_HEALTH, BatteryManager.BATTERY_HEALTH_OVERHEAT);
|
||||
mChargingIntent.putExtra(
|
||||
BatteryManager.EXTRA_HEALTH, BatteryManager.BATTERY_HEALTH_OVERHEAT);
|
||||
mBatteryBroadcastReceiver.onReceive(mContext, mChargingIntent);
|
||||
|
||||
assertThat(mBatteryBroadcastReceiver.mBatteryHealth)
|
||||
@@ -100,6 +101,17 @@ public class BatteryBroadcastReceiverTest {
|
||||
verify(mBatteryListener).onBatteryChanged(BatteryUpdateType.BATTERY_HEALTH);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void onReceive_chargingStatusChanged_dataUpdated() {
|
||||
mChargingIntent.putExtra(BatteryManager.EXTRA_CHARGING_STATUS,
|
||||
BatteryManager.CHARGING_POLICY_ADAPTIVE_LONGLIFE);
|
||||
mBatteryBroadcastReceiver.onReceive(mContext, mChargingIntent);
|
||||
|
||||
assertThat(mBatteryBroadcastReceiver.mChargingStatus)
|
||||
.isEqualTo(BatteryManager.CHARGING_POLICY_ADAPTIVE_LONGLIFE);
|
||||
verify(mBatteryListener).onBatteryChanged(BatteryUpdateType.CHARGING_STATUS);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void onReceive_batteryNotPresent_shouldShowHelpMessage() {
|
||||
mChargingIntent.putExtra(BatteryManager.EXTRA_PRESENT, false);
|
||||
@@ -131,6 +143,8 @@ public class BatteryBroadcastReceiverTest {
|
||||
assertThat(mBatteryBroadcastReceiver.mBatteryStatus).isEqualTo(batteryStatus);
|
||||
assertThat(mBatteryBroadcastReceiver.mBatteryHealth)
|
||||
.isEqualTo(BatteryManager.BATTERY_HEALTH_UNKNOWN);
|
||||
assertThat(mBatteryBroadcastReceiver.mChargingStatus)
|
||||
.isEqualTo(BatteryManager.CHARGING_POLICY_DEFAULT);
|
||||
verify(mBatteryListener, never()).onBatteryChanged(anyInt());
|
||||
}
|
||||
|
||||
@@ -163,6 +177,8 @@ public class BatteryBroadcastReceiverTest {
|
||||
Utils.getBatteryStatus(mContext, mChargingIntent, /* compactStatus= */ false));
|
||||
assertThat(mBatteryBroadcastReceiver.mBatteryHealth)
|
||||
.isEqualTo(BatteryManager.BATTERY_HEALTH_UNKNOWN);
|
||||
assertThat(mBatteryBroadcastReceiver.mChargingStatus)
|
||||
.isEqualTo(BatteryManager.CHARGING_POLICY_DEFAULT);
|
||||
// 2 times because register will force update the battery
|
||||
verify(mBatteryListener, times(2)).onBatteryChanged(BatteryUpdateType.MANUAL);
|
||||
}
|
||||
|
@@ -290,8 +290,8 @@ public class BatteryHeaderPreferenceControllerTest {
|
||||
}
|
||||
|
||||
@Test
|
||||
public void updatePreference_isOverheat_showEmptyText() {
|
||||
mBatteryInfo.isOverheated = true;
|
||||
public void updatePreference_isBatteryDefender_showEmptyText() {
|
||||
mBatteryInfo.isBatteryDefender = true;
|
||||
|
||||
mController.updateHeaderPreference(mBatteryInfo);
|
||||
|
||||
|
@@ -214,18 +214,18 @@ public class BatteryInfoTest {
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGetBatteryInfo_chargingWithOverheated_updateChargeLabel() {
|
||||
public void testGetBatteryInfo_chargingWithDefender_updateChargeLabel() {
|
||||
doReturn(TEST_CHARGE_TIME_REMAINING)
|
||||
.when(mBatteryUsageStats)
|
||||
.getChargeTimeRemainingMs();
|
||||
mChargingBatteryBroadcast
|
||||
.putExtra(BatteryManager.EXTRA_HEALTH, BatteryManager.BATTERY_HEALTH_OVERHEAT);
|
||||
mChargingBatteryBroadcast.putExtra(BatteryManager.EXTRA_CHARGING_STATUS,
|
||||
BatteryManager.CHARGING_POLICY_ADAPTIVE_LONGLIFE);
|
||||
|
||||
BatteryInfo info = BatteryInfo.getBatteryInfo(mContext, mChargingBatteryBroadcast,
|
||||
mBatteryUsageStats, MOCK_ESTIMATE, SystemClock.elapsedRealtime() * 1000,
|
||||
false /* shortString */);
|
||||
|
||||
assertThat(info.isOverheated).isTrue();
|
||||
assertThat(info.isBatteryDefender).isTrue();
|
||||
assertThat(info.chargeLabel.toString()).contains(STATUS_CHARGING_PAUSED);
|
||||
}
|
||||
|
||||
@@ -238,7 +238,8 @@ public class BatteryInfoTest {
|
||||
50 /* level */,
|
||||
100 /* scale */,
|
||||
BatteryManager.BATTERY_STATUS_CHARGING)
|
||||
.putExtra(BatteryManager.EXTRA_HEALTH, BatteryManager.BATTERY_HEALTH_OVERHEAT);
|
||||
.putExtra(BatteryManager.EXTRA_CHARGING_STATUS,
|
||||
BatteryManager.CHARGING_POLICY_ADAPTIVE_LONGLIFE);
|
||||
|
||||
BatteryInfo info = BatteryInfo.getBatteryInfo(mContext, intent,
|
||||
mBatteryUsageStats, MOCK_ESTIMATE, SystemClock.elapsedRealtime() * 1000,
|
||||
@@ -250,8 +251,8 @@ public class BatteryInfoTest {
|
||||
@Test
|
||||
public void testGetBatteryInfo_dockDefenderTemporarilyBypassed_updateChargeLabel() {
|
||||
doReturn(REMAINING_TIME).when(mBatteryUsageStats).getChargeTimeRemainingMs();
|
||||
mChargingBatteryBroadcast
|
||||
.putExtra(BatteryManager.EXTRA_HEALTH, BatteryManager.BATTERY_HEALTH_GOOD);
|
||||
mChargingBatteryBroadcast.putExtra(BatteryManager.EXTRA_CHARGING_STATUS,
|
||||
BatteryManager.CHARGING_POLICY_DEFAULT);
|
||||
Settings.Global.putInt(mContext.getContentResolver(),
|
||||
BatteryUtils.SETTINGS_GLOBAL_DOCK_DEFENDER_BYPASS, 1);
|
||||
|
||||
@@ -269,8 +270,8 @@ public class BatteryInfoTest {
|
||||
@Test
|
||||
public void testGetBatteryInfo_dockDefenderFutureBypass_updateChargeLabel() {
|
||||
doReturn(false).when(mFeatureFactory.powerUsageFeatureProvider).isExtraDefend();
|
||||
mChargingBatteryBroadcast
|
||||
.putExtra(BatteryManager.EXTRA_HEALTH, BatteryManager.BATTERY_HEALTH_GOOD);
|
||||
mChargingBatteryBroadcast.putExtra(BatteryManager.EXTRA_CHARGING_STATUS,
|
||||
BatteryManager.CHARGING_POLICY_DEFAULT);
|
||||
|
||||
BatteryInfo info = BatteryInfo.getBatteryInfo(mContext,
|
||||
BatteryTestUtils.getCustomBatteryIntent(BatteryManager.BATTERY_PLUGGED_DOCK,
|
||||
|
@@ -136,16 +136,16 @@ public class BatteryOptimizeUtilsTest {
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testIsValidPackageName_InvalidPackageName_returnFalse() {
|
||||
public void isDisabledForOptimizeModeOnly_invalidPackageName_returnTrue() {
|
||||
final BatteryOptimizeUtils testBatteryOptimizeUtils =
|
||||
new BatteryOptimizeUtils(mContext, UID, null);
|
||||
|
||||
assertThat(testBatteryOptimizeUtils.isValidPackageName()).isFalse();
|
||||
assertThat(testBatteryOptimizeUtils.isDisabledForOptimizeModeOnly()).isTrue();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testIsValidPackageName_validPackageName_returnTrue() {
|
||||
assertThat(mBatteryOptimizeUtils.isValidPackageName()).isTrue();
|
||||
public void isDisabledForOptimizeModeOnly_validPackageName_returnFalse() {
|
||||
assertThat(mBatteryOptimizeUtils.isDisabledForOptimizeModeOnly()).isFalse();
|
||||
}
|
||||
|
||||
@Test
|
||||
|
@@ -18,35 +18,76 @@ package com.android.settings.fuelgauge;
|
||||
|
||||
import static com.google.common.truth.Truth.assertThat;
|
||||
|
||||
import static org.mockito.ArgumentMatchers.any;
|
||||
import static org.mockito.ArgumentMatchers.anyInt;
|
||||
import static org.mockito.Mockito.doReturn;
|
||||
import static org.mockito.Mockito.inOrder;
|
||||
import static org.mockito.Mockito.never;
|
||||
import static org.mockito.Mockito.spy;
|
||||
import static org.mockito.Mockito.verify;
|
||||
import static org.mockito.Mockito.verifyNoInteractions;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.content.pm.PackageManager;
|
||||
import android.os.UserHandle;
|
||||
import android.os.UserManager;
|
||||
|
||||
import com.android.settings.TestUtils;
|
||||
import com.android.settings.fuelgauge.BatteryOptimizeHistoricalLogEntry;
|
||||
import com.android.settings.fuelgauge.batterysaver.BatterySaverScheduleRadioButtonsController;
|
||||
|
||||
import org.junit.After;
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.mockito.InOrder;
|
||||
import org.mockito.Mock;
|
||||
import org.mockito.MockitoAnnotations;
|
||||
import org.robolectric.RobolectricTestRunner;
|
||||
import org.robolectric.RuntimeEnvironment;
|
||||
import org.robolectric.annotation.Config;
|
||||
import org.robolectric.annotation.Implementation;
|
||||
import org.robolectric.annotation.Implements;
|
||||
import org.robolectric.annotation.Resetter;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
|
||||
@RunWith(RobolectricTestRunner.class)
|
||||
@Config(shadows = {BatterySettingsMigrateCheckerTest.ShadowUserHandle.class})
|
||||
public final class BatterySettingsMigrateCheckerTest {
|
||||
|
||||
private static final Intent BOOT_COMPLETED_INTENT =
|
||||
new Intent(Intent.ACTION_BOOT_COMPLETED);
|
||||
private static final int UID = 2003;
|
||||
private static final String PACKAGE_NAME = "com.android.test.app";
|
||||
|
||||
private Context mContext;
|
||||
private BatterySettingsMigrateChecker mBatterySettingsMigrateChecker;
|
||||
|
||||
@Mock
|
||||
private PackageManager mPackageManager;
|
||||
@Mock
|
||||
private BatteryOptimizeUtils mBatteryOptimizeUtils;
|
||||
|
||||
@Before
|
||||
public void setUp() {
|
||||
public void setUp() throws Exception {
|
||||
MockitoAnnotations.initMocks(this);
|
||||
mContext = RuntimeEnvironment.application;
|
||||
mContext = spy(RuntimeEnvironment.application);
|
||||
doReturn(mContext).when(mContext).getApplicationContext();
|
||||
doReturn(mPackageManager).when(mContext).getPackageManager();
|
||||
doReturn(UID).when(mPackageManager)
|
||||
.getPackageUid(PACKAGE_NAME, PackageManager.GET_META_DATA);
|
||||
BatterySettingsMigrateChecker.sBatteryOptimizeUtils = mBatteryOptimizeUtils;
|
||||
mBatterySettingsMigrateChecker = new BatterySettingsMigrateChecker();
|
||||
}
|
||||
|
||||
@After
|
||||
public void resetShadows() {
|
||||
ShadowUserHandle.reset();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void onReceive_invalidScheduledLevel_resetScheduledValue() {
|
||||
final int invalidScheduledLevel = 5;
|
||||
@@ -98,6 +139,54 @@ public final class BatterySettingsMigrateCheckerTest {
|
||||
assertThat(getScheduledLevel()).isEqualTo(invalidScheduledLevel);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void onReceive_nonOwner_noAction() {
|
||||
ShadowUserHandle.setUid(1);
|
||||
final int invalidScheduledLevel = 5;
|
||||
setScheduledLevel(invalidScheduledLevel);
|
||||
|
||||
mBatterySettingsMigrateChecker.onReceive(mContext, BOOT_COMPLETED_INTENT);
|
||||
|
||||
assertThat(getScheduledLevel()).isEqualTo(invalidScheduledLevel);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void verifyOptimizationModes_inAllowList_resetOptimizationMode() throws Exception {
|
||||
doReturn(BatteryOptimizeUtils.MODE_RESTRICTED).when(mBatteryOptimizeUtils)
|
||||
.getAppOptimizationMode();
|
||||
|
||||
mBatterySettingsMigrateChecker.verifyOptimizationModes(
|
||||
mContext, Arrays.asList(PACKAGE_NAME));
|
||||
|
||||
final InOrder inOrder = inOrder(mBatteryOptimizeUtils);
|
||||
inOrder.verify(mBatteryOptimizeUtils).getAppOptimizationMode();
|
||||
inOrder.verify(mBatteryOptimizeUtils).setAppUsageState(
|
||||
BatteryOptimizeUtils.MODE_OPTIMIZED,
|
||||
BatteryOptimizeHistoricalLogEntry.Action.FORCE_RESET);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void verifyOptimizationModes_optimizedMode_noAction() throws Exception {
|
||||
doReturn(BatteryOptimizeUtils.MODE_OPTIMIZED).when(mBatteryOptimizeUtils)
|
||||
.getAppOptimizationMode();
|
||||
|
||||
mBatterySettingsMigrateChecker.verifyOptimizationModes(
|
||||
mContext, Arrays.asList(PACKAGE_NAME));
|
||||
|
||||
verify(mBatteryOptimizeUtils, never()).setAppUsageState(anyInt(), any());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void verifyOptimizationModes_notInAllowList_noAction() throws Exception {
|
||||
doReturn(BatteryOptimizeUtils.MODE_RESTRICTED).when(mBatteryOptimizeUtils)
|
||||
.getAppOptimizationMode();
|
||||
|
||||
mBatterySettingsMigrateChecker.verifyOptimizationModes(
|
||||
mContext, new ArrayList<String>());
|
||||
|
||||
verifyNoInteractions(mBatteryOptimizeUtils);
|
||||
}
|
||||
|
||||
private void setScheduledLevel(int scheduledLevel) {
|
||||
TestUtils.setScheduledLevel(mContext, scheduledLevel);
|
||||
}
|
||||
@@ -105,4 +194,24 @@ public final class BatterySettingsMigrateCheckerTest {
|
||||
private int getScheduledLevel() {
|
||||
return TestUtils.getScheduledLevel(mContext);
|
||||
}
|
||||
|
||||
@Implements(UserHandle.class)
|
||||
public static class ShadowUserHandle {
|
||||
// Sets the default as thte OWNER role.
|
||||
private static int sUid = 0;
|
||||
|
||||
public static void setUid(int uid) {
|
||||
sUid = uid;
|
||||
}
|
||||
|
||||
@Implementation
|
||||
public static int myUserId() {
|
||||
return sUid;
|
||||
}
|
||||
|
||||
@Resetter
|
||||
public static void reset() {
|
||||
sUid = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -487,32 +487,32 @@ public class BatteryUtilsTest {
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testIsBatteryDefenderOn_isOverheatedAndIsCharging_returnTrue() {
|
||||
mBatteryInfo.isOverheated = true;
|
||||
public void testIsBatteryDefenderOn_isDefenderAndIsCharging_returnTrue() {
|
||||
mBatteryInfo.isBatteryDefender = true;
|
||||
mBatteryInfo.discharging = false;
|
||||
|
||||
assertThat(mBatteryUtils.isBatteryDefenderOn(mBatteryInfo)).isTrue();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testIsBatteryDefenderOn_isOverheatedAndDischarging_returnFalse() {
|
||||
mBatteryInfo.isOverheated = true;
|
||||
public void testIsBatteryDefenderOn_isDefenderAndDischarging_returnFalse() {
|
||||
mBatteryInfo.isBatteryDefender = true;
|
||||
mBatteryInfo.discharging = true;
|
||||
|
||||
assertThat(mBatteryUtils.isBatteryDefenderOn(mBatteryInfo)).isFalse();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testIsBatteryDefenderOn_notOverheatedAndDischarging_returnFalse() {
|
||||
mBatteryInfo.isOverheated = false;
|
||||
public void testIsBatteryDefenderOn_notDefenderAndDischarging_returnFalse() {
|
||||
mBatteryInfo.isBatteryDefender = false;
|
||||
mBatteryInfo.discharging = true;
|
||||
|
||||
assertThat(mBatteryUtils.isBatteryDefenderOn(mBatteryInfo)).isFalse();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testIsBatteryDefenderOn_notOverheatedAndIsCharging_returnFalse() {
|
||||
mBatteryInfo.isOverheated = false;
|
||||
public void testIsBatteryDefenderOn_notDefenderAndIsCharging_returnFalse() {
|
||||
mBatteryInfo.isBatteryDefender = false;
|
||||
mBatteryInfo.discharging = false;
|
||||
|
||||
assertThat(mBatteryUtils.isBatteryDefenderOn(mBatteryInfo)).isFalse();
|
||||
|
@@ -52,7 +52,7 @@ public class OptimizedPreferenceControllerTest {
|
||||
|
||||
@Test
|
||||
public void testUpdateState_invalidPackage_prefEnabled() {
|
||||
when(mockBatteryOptimizeUtils.isValidPackageName()).thenReturn(false);
|
||||
when(mockBatteryOptimizeUtils.isDisabledForOptimizeModeOnly()).thenReturn(true);
|
||||
|
||||
mController.updateState(mPreference);
|
||||
|
||||
@@ -62,7 +62,7 @@ public class OptimizedPreferenceControllerTest {
|
||||
|
||||
@Test
|
||||
public void testUpdateState_isSystemOrDefaultAppAndOptimizeStates_prefChecked() {
|
||||
when(mockBatteryOptimizeUtils.isValidPackageName()).thenReturn(true);
|
||||
when(mockBatteryOptimizeUtils.isDisabledForOptimizeModeOnly()).thenReturn(false);
|
||||
when(mockBatteryOptimizeUtils.isSystemOrDefaultApp()).thenReturn(true);
|
||||
when(mockBatteryOptimizeUtils.getAppOptimizationMode()).thenReturn(
|
||||
BatteryOptimizeUtils.MODE_OPTIMIZED);
|
||||
@@ -74,7 +74,7 @@ public class OptimizedPreferenceControllerTest {
|
||||
|
||||
@Test
|
||||
public void testUpdateState_isSystemOrDefaultApp_prefUnchecked() {
|
||||
when(mockBatteryOptimizeUtils.isValidPackageName()).thenReturn(true);
|
||||
when(mockBatteryOptimizeUtils.isDisabledForOptimizeModeOnly()).thenReturn(false);
|
||||
when(mockBatteryOptimizeUtils.isSystemOrDefaultApp()).thenReturn(true);
|
||||
|
||||
mController.updateState(mPreference);
|
||||
@@ -85,7 +85,7 @@ public class OptimizedPreferenceControllerTest {
|
||||
|
||||
@Test
|
||||
public void testUpdateState_isOptimizedStates_prefChecked() {
|
||||
when(mockBatteryOptimizeUtils.isValidPackageName()).thenReturn(true);
|
||||
when(mockBatteryOptimizeUtils.isDisabledForOptimizeModeOnly()).thenReturn(false);
|
||||
when(mockBatteryOptimizeUtils.getAppOptimizationMode()).thenReturn(
|
||||
BatteryOptimizeUtils.MODE_OPTIMIZED);
|
||||
|
||||
@@ -96,7 +96,7 @@ public class OptimizedPreferenceControllerTest {
|
||||
|
||||
@Test
|
||||
public void testUpdateState_prefUnchecked() {
|
||||
when(mockBatteryOptimizeUtils.isValidPackageName()).thenReturn(true);
|
||||
when(mockBatteryOptimizeUtils.isDisabledForOptimizeModeOnly()).thenReturn(false);
|
||||
|
||||
mController.updateState(mPreference);
|
||||
|
||||
|
@@ -52,7 +52,7 @@ public class RestrictedPreferenceControllerTest {
|
||||
|
||||
@Test
|
||||
public void testUpdateState_isValidPackage_prefEnabled() {
|
||||
when(mockBatteryOptimizeUtils.isValidPackageName()).thenReturn(true);
|
||||
when(mockBatteryOptimizeUtils.isDisabledForOptimizeModeOnly()).thenReturn(false);
|
||||
|
||||
mController.updateState(mPreference);
|
||||
|
||||
@@ -61,7 +61,7 @@ public class RestrictedPreferenceControllerTest {
|
||||
|
||||
@Test
|
||||
public void testUpdateState_invalidPackage_prefDisabled() {
|
||||
when(mockBatteryOptimizeUtils.isValidPackageName()).thenReturn(false);
|
||||
when(mockBatteryOptimizeUtils.isDisabledForOptimizeModeOnly()).thenReturn(true);
|
||||
|
||||
mController.updateState(mPreference);
|
||||
|
||||
@@ -70,7 +70,7 @@ public class RestrictedPreferenceControllerTest {
|
||||
|
||||
@Test
|
||||
public void testUpdateState_isSystemOrDefaultAppAndRestrictedStates_prefChecked() {
|
||||
when(mockBatteryOptimizeUtils.isValidPackageName()).thenReturn(true);
|
||||
when(mockBatteryOptimizeUtils.isDisabledForOptimizeModeOnly()).thenReturn(false);
|
||||
when(mockBatteryOptimizeUtils.isSystemOrDefaultApp()).thenReturn(true);
|
||||
when(mockBatteryOptimizeUtils.getAppOptimizationMode()).thenReturn(
|
||||
BatteryOptimizeUtils.MODE_RESTRICTED);
|
||||
@@ -82,7 +82,7 @@ public class RestrictedPreferenceControllerTest {
|
||||
|
||||
@Test
|
||||
public void testUpdateState_isSystemOrDefaultApp_prefUnchecked() {
|
||||
when(mockBatteryOptimizeUtils.isValidPackageName()).thenReturn(true);
|
||||
when(mockBatteryOptimizeUtils.isDisabledForOptimizeModeOnly()).thenReturn(false);
|
||||
when(mockBatteryOptimizeUtils.isSystemOrDefaultApp()).thenReturn(true);
|
||||
|
||||
mController.updateState(mPreference);
|
||||
@@ -93,7 +93,7 @@ public class RestrictedPreferenceControllerTest {
|
||||
|
||||
@Test
|
||||
public void testUpdateState_isRestrictedStates_prefChecked() {
|
||||
when(mockBatteryOptimizeUtils.isValidPackageName()).thenReturn(true);
|
||||
when(mockBatteryOptimizeUtils.isDisabledForOptimizeModeOnly()).thenReturn(false);
|
||||
when(mockBatteryOptimizeUtils.getAppOptimizationMode()).thenReturn(
|
||||
BatteryOptimizeUtils.MODE_RESTRICTED);
|
||||
|
||||
@@ -104,7 +104,7 @@ public class RestrictedPreferenceControllerTest {
|
||||
|
||||
@Test
|
||||
public void testUpdateState_prefUnchecked() {
|
||||
when(mockBatteryOptimizeUtils.isValidPackageName()).thenReturn(true);
|
||||
when(mockBatteryOptimizeUtils.isDisabledForOptimizeModeOnly()).thenReturn(false);
|
||||
|
||||
mController.updateState(mPreference);
|
||||
|
||||
|
@@ -14,7 +14,6 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
|
||||
package com.android.settings.fuelgauge;
|
||||
|
||||
import static com.google.common.truth.Truth.assertThat;
|
||||
@@ -53,7 +52,7 @@ public class UnrestrictedPreferenceControllerTest {
|
||||
|
||||
@Test
|
||||
public void testUpdateState_isValidPackage_prefEnabled() {
|
||||
when(mockBatteryOptimizeUtils.isValidPackageName()).thenReturn(true);
|
||||
when(mockBatteryOptimizeUtils.isDisabledForOptimizeModeOnly()).thenReturn(false);
|
||||
|
||||
mController.updateState(mPreference);
|
||||
|
||||
@@ -62,7 +61,7 @@ public class UnrestrictedPreferenceControllerTest {
|
||||
|
||||
@Test
|
||||
public void testUpdateState_invalidPackage_prefDisabled() {
|
||||
when(mockBatteryOptimizeUtils.isValidPackageName()).thenReturn(false);
|
||||
when(mockBatteryOptimizeUtils.isDisabledForOptimizeModeOnly()).thenReturn(true);
|
||||
|
||||
mController.updateState(mPreference);
|
||||
|
||||
@@ -71,7 +70,7 @@ public class UnrestrictedPreferenceControllerTest {
|
||||
|
||||
@Test
|
||||
public void testUpdateState_isSystemOrDefaultAppAndUnrestrictedStates_prefChecked() {
|
||||
when(mockBatteryOptimizeUtils.isValidPackageName()).thenReturn(true);
|
||||
when(mockBatteryOptimizeUtils.isDisabledForOptimizeModeOnly()).thenReturn(false);
|
||||
when(mockBatteryOptimizeUtils.isSystemOrDefaultApp()).thenReturn(true);
|
||||
when(mockBatteryOptimizeUtils.getAppOptimizationMode()).thenReturn(
|
||||
BatteryOptimizeUtils.MODE_UNRESTRICTED);
|
||||
@@ -83,7 +82,7 @@ public class UnrestrictedPreferenceControllerTest {
|
||||
|
||||
@Test
|
||||
public void testUpdateState_isSystemOrDefaultApp_prefUnchecked() {
|
||||
when(mockBatteryOptimizeUtils.isValidPackageName()).thenReturn(true);
|
||||
when(mockBatteryOptimizeUtils.isDisabledForOptimizeModeOnly()).thenReturn(false);
|
||||
when(mockBatteryOptimizeUtils.isSystemOrDefaultApp()).thenReturn(true);
|
||||
|
||||
mController.updateState(mPreference);
|
||||
@@ -94,7 +93,7 @@ public class UnrestrictedPreferenceControllerTest {
|
||||
|
||||
@Test
|
||||
public void testUpdateState_isUnrestrictedStates_prefChecked() {
|
||||
when(mockBatteryOptimizeUtils.isValidPackageName()).thenReturn(true);
|
||||
when(mockBatteryOptimizeUtils.isDisabledForOptimizeModeOnly()).thenReturn(false);
|
||||
when(mockBatteryOptimizeUtils.getAppOptimizationMode()).thenReturn(
|
||||
BatteryOptimizeUtils.MODE_UNRESTRICTED);
|
||||
|
||||
@@ -105,7 +104,7 @@ public class UnrestrictedPreferenceControllerTest {
|
||||
|
||||
@Test
|
||||
public void testUpdateState_prefUnchecked() {
|
||||
when(mockBatteryOptimizeUtils.isValidPackageName()).thenReturn(true);
|
||||
when(mockBatteryOptimizeUtils.isDisabledForOptimizeModeOnly()).thenReturn(false);
|
||||
|
||||
mController.updateState(mPreference);
|
||||
|
||||
|
@@ -60,32 +60,32 @@ public class BatteryDefenderDetectorTest {
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDetect_notOverheatedNotExtraDefend_tipInvisible() {
|
||||
mBatteryInfo.isOverheated = false;
|
||||
public void testDetect_notDefenderNotExtraDefend_tipInvisible() {
|
||||
mBatteryInfo.isBatteryDefender = false;
|
||||
when(mFakeFeatureFactory.powerUsageFeatureProvider.isExtraDefend()).thenReturn(false);
|
||||
|
||||
assertThat(mBatteryDefenderDetector.detect().isVisible()).isFalse();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDetect_notOverheatedIsExtraDefend_tipInvisible() {
|
||||
mBatteryInfo.isOverheated = false;
|
||||
public void testDetect_notDefenderIsExtraDefend_tipInvisible() {
|
||||
mBatteryInfo.isBatteryDefender = false;
|
||||
when(mFakeFeatureFactory.powerUsageFeatureProvider.isExtraDefend()).thenReturn(true);
|
||||
|
||||
assertThat(mBatteryDefenderDetector.detect().isVisible()).isFalse();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDetect_isOverheatedIsExtraDefend_tipInvisible() {
|
||||
mBatteryInfo.isOverheated = false;
|
||||
public void testDetect_isDefenderIsExtraDefend_tipInvisible() {
|
||||
mBatteryInfo.isBatteryDefender = false;
|
||||
when(mFakeFeatureFactory.powerUsageFeatureProvider.isExtraDefend()).thenReturn(true);
|
||||
|
||||
assertThat(mBatteryDefenderDetector.detect().isVisible()).isFalse();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDetect_isOverheatedNotExtraDefend_tipNew() {
|
||||
mBatteryInfo.isOverheated = true;
|
||||
public void testDetect_isDefenderNotExtraDefend_tipNew() {
|
||||
mBatteryInfo.isBatteryDefender = true;
|
||||
when(mFakeFeatureFactory.powerUsageFeatureProvider.isExtraDefend()).thenReturn(false);
|
||||
|
||||
assertThat(mBatteryDefenderDetector.detect().getState())
|
||||
|
@@ -83,7 +83,7 @@ public class DockDefenderDetectorTest {
|
||||
|
||||
@Test
|
||||
public void testDetect_dockDefenderActive() {
|
||||
mBatteryInfo.isOverheated = true;
|
||||
mBatteryInfo.isBatteryDefender = true;
|
||||
doReturn(true).when(mFakeFeatureFactory.powerUsageFeatureProvider).isExtraDefend();
|
||||
|
||||
BatteryTip batteryTip = mDockDefenderDetector.detect();
|
||||
@@ -95,7 +95,7 @@ public class DockDefenderDetectorTest {
|
||||
|
||||
@Test
|
||||
public void testDetect_dockDefenderFutureBypass() {
|
||||
mBatteryInfo.isOverheated = false;
|
||||
mBatteryInfo.isBatteryDefender = false;
|
||||
doReturn(false).when(mFakeFeatureFactory.powerUsageFeatureProvider).isExtraDefend();
|
||||
|
||||
BatteryTip batteryTip = mDockDefenderDetector.detect();
|
||||
@@ -107,7 +107,7 @@ public class DockDefenderDetectorTest {
|
||||
|
||||
@Test
|
||||
public void testDetect_overheatedTrue_dockDefenderDisabled() {
|
||||
mBatteryInfo.isOverheated = true;
|
||||
mBatteryInfo.isBatteryDefender = true;
|
||||
doReturn(false).when(mFakeFeatureFactory.powerUsageFeatureProvider).isExtraDefend();
|
||||
|
||||
BatteryTip batteryTip = mDockDefenderDetector.detect();
|
||||
@@ -131,7 +131,7 @@ public class DockDefenderDetectorTest {
|
||||
@Test
|
||||
public void testDetect_overheatedTrueAndDockDefenderNotTriggered_dockDefenderDisabled() {
|
||||
doReturn(false).when(mFakeFeatureFactory.powerUsageFeatureProvider).isExtraDefend();
|
||||
mBatteryInfo.isOverheated = true;
|
||||
mBatteryInfo.isBatteryDefender = true;
|
||||
|
||||
BatteryTip batteryTip = mDockDefenderDetector.detect();
|
||||
|
||||
|
Reference in New Issue
Block a user