diff --git a/res/values/strings.xml b/res/values/strings.xml index 871e6f30944..296e68819bb 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -6148,7 +6148,7 @@ History details - Battery Usage + Battery usage View usage for past 24 hours diff --git a/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetail.java b/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetail.java index 0bce57d526e..dada8142adc 100644 --- a/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetail.java +++ b/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetail.java @@ -20,6 +20,7 @@ import android.annotation.UserIdInt; import android.app.Activity; import android.app.ActivityManager; import android.app.settings.SettingsEnums; +import android.app.backup.BackupManager; import android.content.Context; import android.content.Intent; import android.content.pm.PackageManager; @@ -114,7 +115,12 @@ public class AdvancedPowerUsageDetail extends DashboardFragment implements @VisibleForTesting SelectorWithWidgetPreference mUnrestrictedPreference; @VisibleForTesting - boolean enableTriState = true; + boolean mEnableTriState = true; + @VisibleForTesting + @BatteryOptimizeUtils.OptimizationMode + int mOptimizationMode = BatteryOptimizeUtils.MODE_UNKNOWN; + @VisibleForTesting + BackupManager mBackupManager; private AppButtonsPreferenceController mAppButtonsPreferenceController; private BackgroundActivityPreferenceController mBackgroundActivityPreferenceController; @@ -246,7 +252,7 @@ public class AdvancedPowerUsageDetail extends DashboardFragment implements super.onCreate(icicle); final String packageName = getArguments().getString(EXTRA_PACKAGE_NAME); - if (enableTriState) { + if (mEnableTriState) { onCreateForTriState(packageName); } else { mForegroundPreference = findPreference(KEY_PREF_FOREGROUND); @@ -264,7 +270,7 @@ public class AdvancedPowerUsageDetail extends DashboardFragment implements super.onResume(); initHeader(); - if (enableTriState) { + if (mEnableTriState) { initPreferenceForTriState(getContext()); final String packageName = mBatteryOptimizeUtils.getPackageName(); FeatureFactory.getFactory(getContext()).getMetricsFeatureProvider() @@ -277,6 +283,22 @@ public class AdvancedPowerUsageDetail extends DashboardFragment implements } } + @Override + public void onDestroy() { + super.onDestroy(); + notifyBackupManager(); + } + + @VisibleForTesting + void notifyBackupManager() { + if (mEnableTriState + && mOptimizationMode != mBatteryOptimizeUtils.getAppOptimizationMode()) { + final BackupManager backupManager = mBackupManager != null + ? mBackupManager : new BackupManager(getContext()); + backupManager.dataChanged(); + } + } + @VisibleForTesting void initHeader() { final View appSnippet = mHeaderPreference.findViewById(R.id.entity_header); @@ -304,7 +326,7 @@ public class AdvancedPowerUsageDetail extends DashboardFragment implements controller.setIsInstantApp(AppUtils.isInstant(mAppEntry.info)); } - if (enableTriState) { + if (mEnableTriState) { final long foregroundTimeMs = bundle.getLong(EXTRA_FOREGROUND_TIME); final long backgroundTimeMs = bundle.getLong(EXTRA_BACKGROUND_TIME); final String slotTime = bundle.getString(EXTRA_SLOT_TIME, null); @@ -375,7 +397,7 @@ public class AdvancedPowerUsageDetail extends DashboardFragment implements @Override protected int getPreferenceScreenResId() { - return enableTriState ? R.xml.power_usage_detail : R.xml.power_usage_detail_legacy; + return mEnableTriState ? R.xml.power_usage_detail : R.xml.power_usage_detail_legacy; } @Override @@ -389,7 +411,7 @@ public class AdvancedPowerUsageDetail extends DashboardFragment implements (SettingsActivity) getActivity(), this, getSettingsLifecycle(), packageName, mState, REQUEST_UNINSTALL, REQUEST_REMOVE_DEVICE_ADMIN); controllers.add(mAppButtonsPreferenceController); - if (enableTriState) { + if (mEnableTriState) { controllers.add(new UnrestrictedPreferenceController(context, uid, packageName)); controllers.add(new OptimizedPreferenceController(context, uid, packageName)); controllers.add(new RestrictedPreferenceController(context, uid, packageName)); @@ -469,6 +491,7 @@ public class AdvancedPowerUsageDetail extends DashboardFragment implements mBatteryOptimizeUtils = new BatteryOptimizeUtils( getContext(), getArguments().getInt(EXTRA_UID), packageName); + mOptimizationMode = mBatteryOptimizeUtils.getAppOptimizationMode(); } private CharSequence getAppActiveTime( diff --git a/tests/robotests/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetailTest.java b/tests/robotests/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetailTest.java index a66cf4e0560..b99562add73 100644 --- a/tests/robotests/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetailTest.java +++ b/tests/robotests/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetailTest.java @@ -30,9 +30,11 @@ import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.verifyZeroInteractions; import static org.mockito.Mockito.when; import android.app.AppOpsManager; +import android.app.backup.BackupManager; import android.app.settings.SettingsEnums; import android.content.Context; import android.content.Intent; @@ -123,6 +125,9 @@ public class AdvancedPowerUsageDetailTest { private BatteryUtils mBatteryUtils; @Mock private BatteryOptimizeUtils mBatteryOptimizeUtils; + @Mock + private BackupManager mBackupManager; + private Context mContext; private Preference mForegroundPreference; private Preference mBackgroundPreference; @@ -180,9 +185,10 @@ public class AdvancedPowerUsageDetailTest { mFragment.mHeaderPreference = mHeaderPreference; mFragment.mState = mState; - mFragment.enableTriState = true; + mFragment.mEnableTriState = true; mFragment.mBatteryUtils = new BatteryUtils(RuntimeEnvironment.application); mFragment.mBatteryOptimizeUtils = mBatteryOptimizeUtils; + mFragment.mBackupManager = mBackupManager; mAppEntry.info = mock(ApplicationInfo.class); mTestActivity = spy(new SettingsActivity()); @@ -231,7 +237,7 @@ public class AdvancedPowerUsageDetailTest { @Test public void testGetPreferenceScreenResId_disableTriState_returnLegacyLayout() { - mFragment.enableTriState = false; + mFragment.mEnableTriState = false; assertThat(mFragment.getPreferenceScreenResId()).isEqualTo(R.xml.power_usage_detail_legacy); } @@ -780,4 +786,38 @@ public class AdvancedPowerUsageDetailTest { new Pair(ConvertUtils.METRIC_KEY_BATTERY_USAGE, "app label") }); } + + @Test + public void notifyBackupManager_optimizationModeIsNotChanged_notInvokeDataChanged() { + final int mode = BatteryOptimizeUtils.MODE_RESTRICTED; + mFragment.mOptimizationMode = mode; + when(mBatteryOptimizeUtils.getAppOptimizationMode()).thenReturn(mode); + + mFragment.notifyBackupManager(); + + verifyZeroInteractions(mBackupManager); + } + + @Test + public void notifyBackupManager_optimizationModeIsChanged_invokeDataChanged() { + mFragment.mOptimizationMode = BatteryOptimizeUtils.MODE_RESTRICTED; + when(mBatteryOptimizeUtils.getAppOptimizationMode()) + .thenReturn(BatteryOptimizeUtils.MODE_UNRESTRICTED); + + mFragment.notifyBackupManager(); + + verify(mBackupManager).dataChanged(); + } + + @Test + public void notifyBackupManager_triStateIsNotEnabled_notInvokeDataChanged() { + mFragment.mOptimizationMode = BatteryOptimizeUtils.MODE_RESTRICTED; + when(mBatteryOptimizeUtils.getAppOptimizationMode()) + .thenReturn(BatteryOptimizeUtils.MODE_UNRESTRICTED); + mFragment.mEnableTriState = false; + + mFragment.notifyBackupManager(); + + verifyZeroInteractions(mBackupManager); + } }