[B&R] notify BackupManager when app optimization mode is changed am: 935a9321b5 am: 5f3bc01915

Original change: https://googleplex-android-review.googlesource.com/c/platform/packages/apps/Settings/+/15667992

Change-Id: I8e422e893bb80e202ed50550c05ea5484b1b2756
This commit is contained in:
ykhung
2021-08-25 03:55:48 +00:00
committed by Automerger Merge Worker
3 changed files with 72 additions and 9 deletions

View File

@@ -6148,7 +6148,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;
@@ -114,7 +115,12 @@ public class AdvancedPowerUsageDetail extends DashboardFragment implements
@VisibleForTesting @VisibleForTesting
SelectorWithWidgetPreference mUnrestrictedPreference; SelectorWithWidgetPreference 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;
@@ -246,7 +252,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);
@@ -264,7 +270,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()
@@ -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 @VisibleForTesting
void initHeader() { void initHeader() {
final View appSnippet = mHeaderPreference.findViewById(R.id.entity_header); 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)); 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);
@@ -375,7 +397,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
@@ -389,7 +411,7 @@ public class AdvancedPowerUsageDetail extends DashboardFragment implements
(SettingsActivity) getActivity(), this, getSettingsLifecycle(), (SettingsActivity) getActivity(), this, getSettingsLifecycle(),
packageName, mState, REQUEST_UNINSTALL, REQUEST_REMOVE_DEVICE_ADMIN); packageName, 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));
@@ -469,6 +491,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);
}
} }