[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:
@@ -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] -->
|
||||||
|
@@ -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(
|
||||||
|
@@ -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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user