diff --git a/protos/fuelgauge_log.proto b/protos/fuelgauge_log.proto index 8512cb82506..150c2e2ce6a 100644 --- a/protos/fuelgauge_log.proto +++ b/protos/fuelgauge_log.proto @@ -20,6 +20,7 @@ message BatteryOptimizeHistoricalLogEntry { RESET = 3; RESTORE = 4; BACKUP = 5; + FORCE_RESET = 6; } optional string package_name = 1; diff --git a/res/values/config.xml b/res/values/config.xml index 52d7183ebff..334d4e574c5 100755 --- a/res/values/config.xml +++ b/res/values/config.xml @@ -526,6 +526,10 @@ content://com.android.settings.slices/intent/media_output_indicator + + + + diff --git a/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetail.java b/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetail.java index 777e4281764..79e01940ecd 100644 --- a/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetail.java +++ b/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetail.java @@ -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( diff --git a/src/com/android/settings/fuelgauge/BatteryBackupHelper.java b/src/com/android/settings/fuelgauge/BatteryBackupHelper.java index 79df57ab08d..1bb3b4de001 100644 --- a/src/com/android/settings/fuelgauge/BatteryBackupHelper.java +++ b/src/com/android/settings/fuelgauge/BatteryBackupHelper.java @@ -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; - } } diff --git a/src/com/android/settings/fuelgauge/BatteryBroadcastReceiver.java b/src/com/android/settings/fuelgauge/BatteryBroadcastReceiver.java index 81a15ca7275..79ecd4076ae 100644 --- a/src/com/android/settings/fuelgauge/BatteryBroadcastReceiver.java +++ b/src/com/android/settings/fuelgauge/BatteryBroadcastReceiver.java @@ -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); diff --git a/src/com/android/settings/fuelgauge/BatteryInfo.java b/src/com/android/settings/fuelgauge/BatteryInfo.java index 300db23007c..27d7154d72a 100644 --- a/src/com/android/settings/fuelgauge/BatteryInfo.java +++ b/src/com/android/settings/fuelgauge/BatteryInfo.java @@ -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 diff --git a/src/com/android/settings/fuelgauge/BatteryOptimizeUtils.java b/src/com/android/settings/fuelgauge/BatteryOptimizeUtils.java index b9ac64dd781..589e1fd4055 100644 --- a/src/com/android/settings/fuelgauge/BatteryOptimizeUtils.java +++ b/src/com/android/settings/fuelgauge/BatteryOptimizeUtils.java @@ -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 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, diff --git a/src/com/android/settings/fuelgauge/BatterySettingsMigrateChecker.java b/src/com/android/settings/fuelgauge/BatterySettingsMigrateChecker.java index c54e6d8c503..4b9e6efaff0 100644 --- a/src/com/android/settings/fuelgauge/BatterySettingsMigrateChecker.java +++ b/src/com/android/settings/fuelgauge/BatterySettingsMigrateChecker.java @@ -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 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); diff --git a/src/com/android/settings/fuelgauge/BatteryUtils.java b/src/com/android/settings/fuelgauge/BatteryUtils.java index 72d84ef6663..12760b18b0a 100644 --- a/src/com/android/settings/fuelgauge/BatteryUtils.java +++ b/src/com/android/settings/fuelgauge/BatteryUtils.java @@ -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; } } diff --git a/src/com/android/settings/fuelgauge/OptimizedPreferenceController.java b/src/com/android/settings/fuelgauge/OptimizedPreferenceController.java index 88241b6ff39..ca75b0e8d22 100644 --- a/src/com/android/settings/fuelgauge/OptimizedPreferenceController.java +++ b/src/com/android/settings/fuelgauge/OptimizedPreferenceController.java @@ -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; diff --git a/src/com/android/settings/fuelgauge/RestrictedPreferenceController.java b/src/com/android/settings/fuelgauge/RestrictedPreferenceController.java index fe896a6aed0..7db77f15e40 100644 --- a/src/com/android/settings/fuelgauge/RestrictedPreferenceController.java +++ b/src/com/android/settings/fuelgauge/RestrictedPreferenceController.java @@ -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 { diff --git a/src/com/android/settings/fuelgauge/UnrestrictedPreferenceController.java b/src/com/android/settings/fuelgauge/UnrestrictedPreferenceController.java index be4091c782f..4578723ce5e 100644 --- a/src/com/android/settings/fuelgauge/UnrestrictedPreferenceController.java +++ b/src/com/android/settings/fuelgauge/UnrestrictedPreferenceController.java @@ -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 { diff --git a/src/com/android/settings/fuelgauge/batterytip/detectors/BatteryDefenderDetector.java b/src/com/android/settings/fuelgauge/batterytip/detectors/BatteryDefenderDetector.java index 2dc057ea7a3..8b7d4c18856 100644 --- a/src/com/android/settings/fuelgauge/batterytip/detectors/BatteryDefenderDetector.java +++ b/src/com/android/settings/fuelgauge/batterytip/detectors/BatteryDefenderDetector.java @@ -37,13 +37,12 @@ public class BatteryDefenderDetector implements BatteryTipDetector { @Override public BatteryTip detect() { - final boolean isBasicBatteryDefend = mBatteryInfo.isOverheated - && !FeatureFactory.getFactory(mContext) - .getPowerUsageFeatureProvider(mContext) - .isExtraDefend(); - final int state = isBasicBatteryDefend - ? BatteryTip.StateType.NEW : BatteryTip.StateType.INVISIBLE; - final boolean isPluggedIn = mBatteryInfo.pluggedStatus != 0; - return new BatteryDefenderTip(state, isPluggedIn); + final boolean isBasicBatteryDefend = mBatteryInfo.isBatteryDefender + && !FeatureFactory.getFactory(mContext).getPowerUsageFeatureProvider(mContext) + .isExtraDefend(); + final int state = isBasicBatteryDefend + ? BatteryTip.StateType.NEW : BatteryTip.StateType.INVISIBLE; + final boolean isPluggedIn = mBatteryInfo.pluggedStatus != 0; + return new BatteryDefenderTip(state, isPluggedIn); } } diff --git a/src/com/android/settings/password/BiometricFragment.java b/src/com/android/settings/password/BiometricFragment.java index d364c71b331..4ad04a1a903 100644 --- a/src/com/android/settings/password/BiometricFragment.java +++ b/src/com/android/settings/password/BiometricFragment.java @@ -141,6 +141,7 @@ public class BiometricFragment extends InstrumentedFragment { .setDisallowBiometricsIfPolicyExists( promptInfo.isDisallowBiometricsIfPolicyExists()) .setReceiveSystemEvents(true) + .setAllowBackgroundAuthentication(true) .build(); } diff --git a/tests/robotests/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetailTest.java b/tests/robotests/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetailTest.java index 0278553b2a5..5e9fb738672 100644 --- a/tests/robotests/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetailTest.java +++ b/tests/robotests/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetailTest.java @@ -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); diff --git a/tests/robotests/src/com/android/settings/fuelgauge/BatteryBroadcastReceiverTest.java b/tests/robotests/src/com/android/settings/fuelgauge/BatteryBroadcastReceiverTest.java index a829c40e9a6..62f812d299a 100644 --- a/tests/robotests/src/com/android/settings/fuelgauge/BatteryBroadcastReceiverTest.java +++ b/tests/robotests/src/com/android/settings/fuelgauge/BatteryBroadcastReceiverTest.java @@ -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); } diff --git a/tests/robotests/src/com/android/settings/fuelgauge/BatteryHeaderPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/fuelgauge/BatteryHeaderPreferenceControllerTest.java index f94e5bf7b66..2779e0ac0c7 100644 --- a/tests/robotests/src/com/android/settings/fuelgauge/BatteryHeaderPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/fuelgauge/BatteryHeaderPreferenceControllerTest.java @@ -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); diff --git a/tests/robotests/src/com/android/settings/fuelgauge/BatteryInfoTest.java b/tests/robotests/src/com/android/settings/fuelgauge/BatteryInfoTest.java index ded108cfc89..b0d6da6ca2b 100644 --- a/tests/robotests/src/com/android/settings/fuelgauge/BatteryInfoTest.java +++ b/tests/robotests/src/com/android/settings/fuelgauge/BatteryInfoTest.java @@ -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, diff --git a/tests/robotests/src/com/android/settings/fuelgauge/BatteryOptimizeUtilsTest.java b/tests/robotests/src/com/android/settings/fuelgauge/BatteryOptimizeUtilsTest.java index 83a75f61e96..f9d3108f904 100644 --- a/tests/robotests/src/com/android/settings/fuelgauge/BatteryOptimizeUtilsTest.java +++ b/tests/robotests/src/com/android/settings/fuelgauge/BatteryOptimizeUtilsTest.java @@ -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 diff --git a/tests/robotests/src/com/android/settings/fuelgauge/BatterySettingsMigrateCheckerTest.java b/tests/robotests/src/com/android/settings/fuelgauge/BatterySettingsMigrateCheckerTest.java index dfee3e797b9..c34dcecce73 100644 --- a/tests/robotests/src/com/android/settings/fuelgauge/BatterySettingsMigrateCheckerTest.java +++ b/tests/robotests/src/com/android/settings/fuelgauge/BatterySettingsMigrateCheckerTest.java @@ -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()); + + 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; + } + } } diff --git a/tests/robotests/src/com/android/settings/fuelgauge/BatteryUtilsTest.java b/tests/robotests/src/com/android/settings/fuelgauge/BatteryUtilsTest.java index b5f81499ea5..2fe0cec63d8 100644 --- a/tests/robotests/src/com/android/settings/fuelgauge/BatteryUtilsTest.java +++ b/tests/robotests/src/com/android/settings/fuelgauge/BatteryUtilsTest.java @@ -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(); diff --git a/tests/robotests/src/com/android/settings/fuelgauge/OptimizedPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/fuelgauge/OptimizedPreferenceControllerTest.java index 1fec92a8134..71bb998e4b8 100644 --- a/tests/robotests/src/com/android/settings/fuelgauge/OptimizedPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/fuelgauge/OptimizedPreferenceControllerTest.java @@ -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); diff --git a/tests/robotests/src/com/android/settings/fuelgauge/RestrictedPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/fuelgauge/RestrictedPreferenceControllerTest.java index 944376c77dd..bcddbc2500b 100644 --- a/tests/robotests/src/com/android/settings/fuelgauge/RestrictedPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/fuelgauge/RestrictedPreferenceControllerTest.java @@ -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); diff --git a/tests/robotests/src/com/android/settings/fuelgauge/UnrestrictedPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/fuelgauge/UnrestrictedPreferenceControllerTest.java index c5642df576c..9bed9bad152 100644 --- a/tests/robotests/src/com/android/settings/fuelgauge/UnrestrictedPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/fuelgauge/UnrestrictedPreferenceControllerTest.java @@ -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); diff --git a/tests/robotests/src/com/android/settings/fuelgauge/batterytip/detectors/BatteryDefenderDetectorTest.java b/tests/robotests/src/com/android/settings/fuelgauge/batterytip/detectors/BatteryDefenderDetectorTest.java index f81a4be8d63..64d5d0460ef 100644 --- a/tests/robotests/src/com/android/settings/fuelgauge/batterytip/detectors/BatteryDefenderDetectorTest.java +++ b/tests/robotests/src/com/android/settings/fuelgauge/batterytip/detectors/BatteryDefenderDetectorTest.java @@ -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()) diff --git a/tests/robotests/src/com/android/settings/fuelgauge/batterytip/detectors/DockDefenderDetectorTest.java b/tests/robotests/src/com/android/settings/fuelgauge/batterytip/detectors/DockDefenderDetectorTest.java index 9652a00ca18..bd2c5d1173b 100644 --- a/tests/robotests/src/com/android/settings/fuelgauge/batterytip/detectors/DockDefenderDetectorTest.java +++ b/tests/robotests/src/com/android/settings/fuelgauge/batterytip/detectors/DockDefenderDetectorTest.java @@ -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();