[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
This commit is contained in:
ykhung
2021-08-25 01:24:19 +08:00
committed by YUKAI HUNG
parent 0ab0a3af56
commit 935a9321b5
3 changed files with 72 additions and 9 deletions

View File

@@ -6143,7 +6143,7 @@
<!-- Activity title for battery usage history details [CHAR LIMIT=60] --> <!-- Activity title for battery usage history details [CHAR LIMIT=60] -->
<string name="history_details_title">History details</string> <string name="history_details_title">History details</string>
<!-- Preference title for advanced battery usage [CHAR LIMIT=40] --> <!-- Preference title for advanced battery usage [CHAR LIMIT=40] -->
<string name="advanced_battery_preference_title">Battery Usage</string> <string name="advanced_battery_preference_title">Battery usage</string>
<!-- Preference summary for advanced battery usage, for past 24 hours [CHAR LIMIT=40] --> <!-- Preference summary for advanced battery usage, for past 24 hours [CHAR LIMIT=40] -->
<string name="advanced_battery_preference_summary_with_hours">View usage for past 24 hours</string> <string name="advanced_battery_preference_summary_with_hours">View usage for past 24 hours</string>
<!-- Preference summary for advanced battery usage, from last full charge [CHAR LIMIT=40] --> <!-- Preference summary for advanced battery usage, from last full charge [CHAR LIMIT=40] -->

View File

@@ -20,6 +20,7 @@ import android.annotation.UserIdInt;
import android.app.Activity; import android.app.Activity;
import android.app.ActivityManager; import android.app.ActivityManager;
import android.app.settings.SettingsEnums; import android.app.settings.SettingsEnums;
import android.app.backup.BackupManager;
import android.content.Context; import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.content.pm.PackageManager; import android.content.pm.PackageManager;
@@ -113,7 +114,12 @@ public class AdvancedPowerUsageDetail extends DashboardFragment implements
@VisibleForTesting @VisibleForTesting
RadioButtonPreference mUnrestrictedPreference; RadioButtonPreference mUnrestrictedPreference;
@VisibleForTesting @VisibleForTesting
boolean enableTriState = true; boolean mEnableTriState = true;
@VisibleForTesting
@BatteryOptimizeUtils.OptimizationMode
int mOptimizationMode = BatteryOptimizeUtils.MODE_UNKNOWN;
@VisibleForTesting
BackupManager mBackupManager;
private AppButtonsPreferenceController mAppButtonsPreferenceController; private AppButtonsPreferenceController mAppButtonsPreferenceController;
private BackgroundActivityPreferenceController mBackgroundActivityPreferenceController; private BackgroundActivityPreferenceController mBackgroundActivityPreferenceController;
@@ -245,7 +251,7 @@ public class AdvancedPowerUsageDetail extends DashboardFragment implements
super.onCreate(icicle); super.onCreate(icicle);
final String packageName = getArguments().getString(EXTRA_PACKAGE_NAME); final String packageName = getArguments().getString(EXTRA_PACKAGE_NAME);
if (enableTriState) { if (mEnableTriState) {
onCreateForTriState(packageName); onCreateForTriState(packageName);
} else { } else {
mForegroundPreference = findPreference(KEY_PREF_FOREGROUND); mForegroundPreference = findPreference(KEY_PREF_FOREGROUND);
@@ -263,7 +269,7 @@ public class AdvancedPowerUsageDetail extends DashboardFragment implements
super.onResume(); super.onResume();
initHeader(); initHeader();
if (enableTriState) { if (mEnableTriState) {
initPreferenceForTriState(getContext()); initPreferenceForTriState(getContext());
final String packageName = mBatteryOptimizeUtils.getPackageName(); final String packageName = mBatteryOptimizeUtils.getPackageName();
FeatureFactory.getFactory(getContext()).getMetricsFeatureProvider() 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 @VisibleForTesting
void initHeader() { void initHeader() {
final View appSnippet = mHeaderPreference.findViewById(R.id.entity_header); 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)); controller.setIsInstantApp(AppUtils.isInstant(mAppEntry.info));
} }
if (enableTriState) { if (mEnableTriState) {
final long foregroundTimeMs = bundle.getLong(EXTRA_FOREGROUND_TIME); final long foregroundTimeMs = bundle.getLong(EXTRA_FOREGROUND_TIME);
final long backgroundTimeMs = bundle.getLong(EXTRA_BACKGROUND_TIME); final long backgroundTimeMs = bundle.getLong(EXTRA_BACKGROUND_TIME);
final String slotTime = bundle.getString(EXTRA_SLOT_TIME, null); final String slotTime = bundle.getString(EXTRA_SLOT_TIME, null);
@@ -374,7 +396,7 @@ public class AdvancedPowerUsageDetail extends DashboardFragment implements
@Override @Override
protected int getPreferenceScreenResId() { 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 @Override
@@ -388,7 +410,7 @@ public class AdvancedPowerUsageDetail extends DashboardFragment implements
(SettingsActivity) getActivity(), this, getSettingsLifecycle(), packageName, (SettingsActivity) getActivity(), this, getSettingsLifecycle(), packageName,
mState, REQUEST_UNINSTALL, REQUEST_REMOVE_DEVICE_ADMIN); mState, REQUEST_UNINSTALL, REQUEST_REMOVE_DEVICE_ADMIN);
controllers.add(mAppButtonsPreferenceController); controllers.add(mAppButtonsPreferenceController);
if (enableTriState) { if (mEnableTriState) {
controllers.add(new UnrestrictedPreferenceController(context, uid, packageName)); controllers.add(new UnrestrictedPreferenceController(context, uid, packageName));
controllers.add(new OptimizedPreferenceController(context, uid, packageName)); controllers.add(new OptimizedPreferenceController(context, uid, packageName));
controllers.add(new RestrictedPreferenceController(context, uid, packageName)); controllers.add(new RestrictedPreferenceController(context, uid, packageName));
@@ -467,6 +489,7 @@ public class AdvancedPowerUsageDetail extends DashboardFragment implements
mBatteryOptimizeUtils = new BatteryOptimizeUtils( mBatteryOptimizeUtils = new BatteryOptimizeUtils(
getContext(), getArguments().getInt(EXTRA_UID), packageName); getContext(), getArguments().getInt(EXTRA_UID), packageName);
mOptimizationMode = mBatteryOptimizeUtils.getAppOptimizationMode();
} }
private CharSequence getAppActiveTime( private CharSequence getAppActiveTime(

View File

@@ -30,9 +30,11 @@ import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.mock; import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.spy; import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.verifyZeroInteractions;
import static org.mockito.Mockito.when; import static org.mockito.Mockito.when;
import android.app.AppOpsManager; import android.app.AppOpsManager;
import android.app.backup.BackupManager;
import android.app.settings.SettingsEnums; import android.app.settings.SettingsEnums;
import android.content.Context; import android.content.Context;
import android.content.Intent; import android.content.Intent;
@@ -123,6 +125,9 @@ public class AdvancedPowerUsageDetailTest {
private BatteryUtils mBatteryUtils; private BatteryUtils mBatteryUtils;
@Mock @Mock
private BatteryOptimizeUtils mBatteryOptimizeUtils; private BatteryOptimizeUtils mBatteryOptimizeUtils;
@Mock
private BackupManager mBackupManager;
private Context mContext; private Context mContext;
private Preference mForegroundPreference; private Preference mForegroundPreference;
private Preference mBackgroundPreference; private Preference mBackgroundPreference;
@@ -180,9 +185,10 @@ public class AdvancedPowerUsageDetailTest {
mFragment.mHeaderPreference = mHeaderPreference; mFragment.mHeaderPreference = mHeaderPreference;
mFragment.mState = mState; mFragment.mState = mState;
mFragment.enableTriState = true; mFragment.mEnableTriState = true;
mFragment.mBatteryUtils = new BatteryUtils(RuntimeEnvironment.application); mFragment.mBatteryUtils = new BatteryUtils(RuntimeEnvironment.application);
mFragment.mBatteryOptimizeUtils = mBatteryOptimizeUtils; mFragment.mBatteryOptimizeUtils = mBatteryOptimizeUtils;
mFragment.mBackupManager = mBackupManager;
mAppEntry.info = mock(ApplicationInfo.class); mAppEntry.info = mock(ApplicationInfo.class);
mTestActivity = spy(new SettingsActivity()); mTestActivity = spy(new SettingsActivity());
@@ -231,7 +237,7 @@ public class AdvancedPowerUsageDetailTest {
@Test @Test
public void testGetPreferenceScreenResId_disableTriState_returnLegacyLayout() { public void testGetPreferenceScreenResId_disableTriState_returnLegacyLayout() {
mFragment.enableTriState = false; mFragment.mEnableTriState = false;
assertThat(mFragment.getPreferenceScreenResId()).isEqualTo(R.xml.power_usage_detail_legacy); 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") 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);
}
} }