From 935a9321b5b4387f178f75a4e99256424c7c272d Mon Sep 17 00:00:00 2001 From: ykhung Date: Wed, 25 Aug 2021 01:24:19 +0800 Subject: [PATCH] [B&R] notify BackupManager when app optimization mode is changed Invoke BackupManager.dataChanged() when app optimization mode is changed to notify BackupManager to execute Settings agent to backup data in the next backup session, when performing the partial backup event. Bug: 192523697 Bug: 197608038 Bug: 194633034 Test: make SettingsRoboTests Change-Id: I456acc2594d22503763e4ce286435148ae0644a4 --- res/values/strings.xml | 2 +- .../fuelgauge/AdvancedPowerUsageDetail.java | 35 ++++++++++++--- .../AdvancedPowerUsageDetailTest.java | 44 ++++++++++++++++++- 3 files changed, 72 insertions(+), 9 deletions(-) diff --git a/res/values/strings.xml b/res/values/strings.xml index f193a3180f9..a33a6bca061 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -6143,7 +6143,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 3319e1b1492..be1ea31169f 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; @@ -113,7 +114,12 @@ public class AdvancedPowerUsageDetail extends DashboardFragment implements @VisibleForTesting RadioButtonPreference 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; @@ -245,7 +251,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); @@ -263,7 +269,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() @@ -276,6 +282,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); @@ -303,7 +325,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); @@ -374,7 +396,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 @@ -388,7 +410,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)); @@ -467,6 +489,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 b50e0832ec0..a2e78c3a2b5 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); + } }