Reset app preferences does not trigger backup for App battery usages
Bug: 328712606 Fix: 328712606 Test: UT && Verify logcat when change/reset App battery usages Change-Id: Ia3917c8dc2654185f5f048c048362fd47379b7d1
This commit is contained in:
@@ -52,7 +52,6 @@ import com.android.settingslib.applications.AppUtils;
|
|||||||
import com.android.settingslib.applications.ApplicationsState;
|
import com.android.settingslib.applications.ApplicationsState;
|
||||||
import com.android.settingslib.core.AbstractPreferenceController;
|
import com.android.settingslib.core.AbstractPreferenceController;
|
||||||
import com.android.settingslib.core.instrumentation.Instrumentable;
|
import com.android.settingslib.core.instrumentation.Instrumentable;
|
||||||
import com.android.settingslib.datastore.ChangeReason;
|
|
||||||
import com.android.settingslib.widget.LayoutPreference;
|
import com.android.settingslib.widget.LayoutPreference;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
@@ -272,7 +271,6 @@ public class AdvancedPowerUsageDetail extends DashboardFragment
|
|||||||
public void onPause() {
|
public void onPause() {
|
||||||
super.onPause();
|
super.onPause();
|
||||||
|
|
||||||
notifyBackupManager();
|
|
||||||
final int currentOptimizeMode = mBatteryOptimizeUtils.getAppOptimizationMode();
|
final int currentOptimizeMode = mBatteryOptimizeUtils.getAppOptimizationMode();
|
||||||
mLogStringBuilder.append(", onPause mode = ").append(currentOptimizeMode);
|
mLogStringBuilder.append(", onPause mode = ").append(currentOptimizeMode);
|
||||||
logMetricCategory(currentOptimizeMode);
|
logMetricCategory(currentOptimizeMode);
|
||||||
@@ -289,13 +287,6 @@ public class AdvancedPowerUsageDetail extends DashboardFragment
|
|||||||
Log.d(TAG, "Leave with mode: " + currentOptimizeMode);
|
Log.d(TAG, "Leave with mode: " + currentOptimizeMode);
|
||||||
}
|
}
|
||||||
|
|
||||||
@VisibleForTesting
|
|
||||||
void notifyBackupManager() {
|
|
||||||
if (mOptimizationMode != mBatteryOptimizeUtils.getAppOptimizationMode()) {
|
|
||||||
BatterySettingsStorage.get(getContext()).notifyChange(ChangeReason.UPDATE);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
void initHeader() {
|
void initHeader() {
|
||||||
final View appSnippet = mHeaderPreference.findViewById(R.id.entity_header);
|
final View appSnippet = mHeaderPreference.findViewById(R.id.entity_header);
|
||||||
|
@@ -33,6 +33,7 @@ import androidx.annotation.VisibleForTesting;
|
|||||||
|
|
||||||
import com.android.settings.R;
|
import com.android.settings.R;
|
||||||
import com.android.settings.fuelgauge.BatteryOptimizeHistoricalLogEntry.Action;
|
import com.android.settings.fuelgauge.BatteryOptimizeHistoricalLogEntry.Action;
|
||||||
|
import com.android.settingslib.datastore.ChangeReason;
|
||||||
import com.android.settingslib.fuelgauge.PowerAllowlistBackend;
|
import com.android.settingslib.fuelgauge.PowerAllowlistBackend;
|
||||||
|
|
||||||
import java.lang.annotation.Retention;
|
import java.lang.annotation.Retention;
|
||||||
@@ -222,6 +223,10 @@ public class BatteryOptimizeUtils {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// App preferences are already clear when code reach here, and there may be no
|
||||||
|
// setAppUsageStateInternal call to notifyChange. So always trigger notifyChange here.
|
||||||
|
BatterySettingsStorage.get(context).notifyChange(ChangeReason.DELETE);
|
||||||
|
|
||||||
allowlistBackend.refreshList();
|
allowlistBackend.refreshList();
|
||||||
// Resets optimization mode for each application.
|
// Resets optimization mode for each application.
|
||||||
for (ApplicationInfo info : applications) {
|
for (ApplicationInfo info : applications) {
|
||||||
@@ -351,6 +356,9 @@ public class BatteryOptimizeUtils {
|
|||||||
}
|
}
|
||||||
BatteryOptimizeLogUtils.writeLog(
|
BatteryOptimizeLogUtils.writeLog(
|
||||||
context, action, packageNameKey, createLogEvent(appStandbyMode, allowListed));
|
context, action, packageNameKey, createLogEvent(appStandbyMode, allowListed));
|
||||||
|
if (action != Action.RESET) { // reset has been notified in resetAppOptimizationMode
|
||||||
|
BatterySettingsStorage.get(context).notifyChange(toChangeReason(action));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static String createLogEvent(int appStandbyMode, boolean allowListed) {
|
private static String createLogEvent(int appStandbyMode, boolean allowListed) {
|
||||||
@@ -362,4 +370,8 @@ public class BatteryOptimizeUtils {
|
|||||||
allowListed,
|
allowListed,
|
||||||
getAppOptimizationMode(appStandbyMode, allowListed));
|
getAppOptimizationMode(appStandbyMode, allowListed));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static @ChangeReason int toChangeReason(Action action) {
|
||||||
|
return action == Action.RESTORE ? ChangeReason.RESTORE : ChangeReason.UPDATE;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@@ -41,7 +41,6 @@ import com.android.settingslib.HelpUtils;
|
|||||||
import com.android.settingslib.applications.AppUtils;
|
import com.android.settingslib.applications.AppUtils;
|
||||||
import com.android.settingslib.applications.ApplicationsState;
|
import com.android.settingslib.applications.ApplicationsState;
|
||||||
import com.android.settingslib.core.AbstractPreferenceController;
|
import com.android.settingslib.core.AbstractPreferenceController;
|
||||||
import com.android.settingslib.datastore.ChangeReason;
|
|
||||||
import com.android.settingslib.widget.FooterPreference;
|
import com.android.settingslib.widget.FooterPreference;
|
||||||
import com.android.settingslib.widget.LayoutPreference;
|
import com.android.settingslib.widget.LayoutPreference;
|
||||||
import com.android.settingslib.widget.MainSwitchPreference;
|
import com.android.settingslib.widget.MainSwitchPreference;
|
||||||
@@ -116,7 +115,6 @@ public class PowerBackgroundUsageDetail extends DashboardFragment
|
|||||||
public void onPause() {
|
public void onPause() {
|
||||||
super.onPause();
|
super.onPause();
|
||||||
|
|
||||||
notifyBackupManager();
|
|
||||||
final int currentOptimizeMode = mBatteryOptimizeUtils.getAppOptimizationMode();
|
final int currentOptimizeMode = mBatteryOptimizeUtils.getAppOptimizationMode();
|
||||||
mLogStringBuilder.append(", onPause mode = ").append(currentOptimizeMode);
|
mLogStringBuilder.append(", onPause mode = ").append(currentOptimizeMode);
|
||||||
logMetricCategory(currentOptimizeMode);
|
logMetricCategory(currentOptimizeMode);
|
||||||
@@ -183,13 +181,6 @@ public class PowerBackgroundUsageDetail extends DashboardFragment
|
|||||||
onRadioButtonClicked(isEnabled ? mOptimizePreference : null);
|
onRadioButtonClicked(isEnabled ? mOptimizePreference : null);
|
||||||
}
|
}
|
||||||
|
|
||||||
@VisibleForTesting
|
|
||||||
void notifyBackupManager() {
|
|
||||||
if (mOptimizationMode != mBatteryOptimizeUtils.getAppOptimizationMode()) {
|
|
||||||
BatterySettingsStorage.get(getContext()).notifyChange(ChangeReason.UPDATE);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
int getSelectedPreference() {
|
int getSelectedPreference() {
|
||||||
if (!mMainSwitchPreference.isChecked()) {
|
if (!mMainSwitchPreference.isChecked()) {
|
||||||
|
@@ -60,12 +60,8 @@ import com.android.settingslib.applications.AppUtils;
|
|||||||
import com.android.settingslib.applications.ApplicationsState;
|
import com.android.settingslib.applications.ApplicationsState;
|
||||||
import com.android.settingslib.applications.instantapps.InstantAppDataProvider;
|
import com.android.settingslib.applications.instantapps.InstantAppDataProvider;
|
||||||
import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
|
import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
|
||||||
import com.android.settingslib.datastore.ChangeReason;
|
|
||||||
import com.android.settingslib.datastore.Observer;
|
|
||||||
import com.android.settingslib.widget.LayoutPreference;
|
import com.android.settingslib.widget.LayoutPreference;
|
||||||
|
|
||||||
import com.google.common.util.concurrent.MoreExecutors;
|
|
||||||
|
|
||||||
import org.junit.After;
|
import org.junit.After;
|
||||||
import org.junit.Before;
|
import org.junit.Before;
|
||||||
import org.junit.Rule;
|
import org.junit.Rule;
|
||||||
@@ -119,10 +115,8 @@ public class AdvancedPowerUsageDetailTest {
|
|||||||
@Mock private AppOpsManager mAppOpsManager;
|
@Mock private AppOpsManager mAppOpsManager;
|
||||||
@Mock private LoaderManager mLoaderManager;
|
@Mock private LoaderManager mLoaderManager;
|
||||||
@Mock private BatteryOptimizeUtils mBatteryOptimizeUtils;
|
@Mock private BatteryOptimizeUtils mBatteryOptimizeUtils;
|
||||||
@Mock private Observer mObserver;
|
|
||||||
|
|
||||||
private Context mContext;
|
private Context mContext;
|
||||||
private BatterySettingsStorage mBatterySettingsStorage;
|
|
||||||
private PrimarySwitchPreference mAllowBackgroundUsagePreference;
|
private PrimarySwitchPreference mAllowBackgroundUsagePreference;
|
||||||
private AdvancedPowerUsageDetail mFragment;
|
private AdvancedPowerUsageDetail mFragment;
|
||||||
private SettingsActivity mTestActivity;
|
private SettingsActivity mTestActivity;
|
||||||
@@ -134,7 +128,6 @@ public class AdvancedPowerUsageDetailTest {
|
|||||||
@Before
|
@Before
|
||||||
public void setUp() {
|
public void setUp() {
|
||||||
mContext = spy(ApplicationProvider.getApplicationContext());
|
mContext = spy(ApplicationProvider.getApplicationContext());
|
||||||
mBatterySettingsStorage = BatterySettingsStorage.get(mContext);
|
|
||||||
when(mContext.getPackageName()).thenReturn("foo");
|
when(mContext.getPackageName()).thenReturn("foo");
|
||||||
mFeatureFactory = FakeFeatureFactory.setupForTest();
|
mFeatureFactory = FakeFeatureFactory.setupForTest();
|
||||||
mMetricsFeatureProvider = mFeatureFactory.metricsFeatureProvider;
|
mMetricsFeatureProvider = mFeatureFactory.metricsFeatureProvider;
|
||||||
@@ -448,28 +441,4 @@ public class AdvancedPowerUsageDetailTest {
|
|||||||
TimeUnit.SECONDS.sleep(1);
|
TimeUnit.SECONDS.sleep(1);
|
||||||
verifyNoInteractions(mMetricsFeatureProvider);
|
verifyNoInteractions(mMetricsFeatureProvider);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
|
||||||
public void notifyBackupManager_optimizationModeIsNotChanged_notInvokeDataChanged() {
|
|
||||||
mBatterySettingsStorage.addObserver(mObserver, MoreExecutors.directExecutor());
|
|
||||||
final int mode = BatteryOptimizeUtils.MODE_RESTRICTED;
|
|
||||||
mFragment.mOptimizationMode = mode;
|
|
||||||
when(mBatteryOptimizeUtils.getAppOptimizationMode()).thenReturn(mode);
|
|
||||||
|
|
||||||
mFragment.notifyBackupManager();
|
|
||||||
|
|
||||||
verifyNoInteractions(mObserver);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void notifyBackupManager_optimizationModeIsChanged_invokeDataChanged() {
|
|
||||||
mBatterySettingsStorage.addObserver(mObserver, MoreExecutors.directExecutor());
|
|
||||||
mFragment.mOptimizationMode = BatteryOptimizeUtils.MODE_RESTRICTED;
|
|
||||||
when(mBatteryOptimizeUtils.getAppOptimizationMode())
|
|
||||||
.thenReturn(BatteryOptimizeUtils.MODE_UNRESTRICTED);
|
|
||||||
|
|
||||||
mFragment.notifyBackupManager();
|
|
||||||
|
|
||||||
verify(mObserver).onChanged(ChangeReason.UPDATE);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@@ -49,8 +49,12 @@ import android.os.UserManager;
|
|||||||
import android.util.ArraySet;
|
import android.util.ArraySet;
|
||||||
|
|
||||||
import com.android.settings.fuelgauge.BatteryOptimizeHistoricalLogEntry.Action;
|
import com.android.settings.fuelgauge.BatteryOptimizeHistoricalLogEntry.Action;
|
||||||
|
import com.android.settingslib.datastore.ChangeReason;
|
||||||
|
import com.android.settingslib.datastore.Observer;
|
||||||
import com.android.settingslib.fuelgauge.PowerAllowlistBackend;
|
import com.android.settingslib.fuelgauge.PowerAllowlistBackend;
|
||||||
|
|
||||||
|
import com.google.common.util.concurrent.MoreExecutors;
|
||||||
|
|
||||||
import org.junit.Before;
|
import org.junit.Before;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
import org.junit.runner.RunWith;
|
import org.junit.runner.RunWith;
|
||||||
@@ -74,14 +78,18 @@ public class BatteryOptimizeUtilsTest {
|
|||||||
@Mock private PowerAllowlistBackend mMockBackend;
|
@Mock private PowerAllowlistBackend mMockBackend;
|
||||||
@Mock private IPackageManager mMockIPackageManager;
|
@Mock private IPackageManager mMockIPackageManager;
|
||||||
@Mock private UserManager mMockUserManager;
|
@Mock private UserManager mMockUserManager;
|
||||||
|
@Mock private Observer mObserver;
|
||||||
|
|
||||||
private Context mContext;
|
private Context mContext;
|
||||||
private BatteryOptimizeUtils mBatteryOptimizeUtils;
|
private BatteryOptimizeUtils mBatteryOptimizeUtils;
|
||||||
|
private BatterySettingsStorage mBatterySettingsStorage;
|
||||||
|
|
||||||
@Before
|
@Before
|
||||||
public void setUp() {
|
public void setUp() {
|
||||||
MockitoAnnotations.initMocks(this);
|
MockitoAnnotations.initMocks(this);
|
||||||
mContext = spy(RuntimeEnvironment.application);
|
mContext = spy(RuntimeEnvironment.application);
|
||||||
|
mBatterySettingsStorage = BatterySettingsStorage.get(mContext);
|
||||||
|
mBatterySettingsStorage.addObserver(mObserver, MoreExecutors.directExecutor());
|
||||||
mBatteryOptimizeUtils = spy(new BatteryOptimizeUtils(mContext, UID, PACKAGE_NAME));
|
mBatteryOptimizeUtils = spy(new BatteryOptimizeUtils(mContext, UID, PACKAGE_NAME));
|
||||||
mBatteryOptimizeUtils.mAppOpsManager = mMockAppOpsManager;
|
mBatteryOptimizeUtils.mAppOpsManager = mMockAppOpsManager;
|
||||||
mBatteryOptimizeUtils.mBatteryUtils = mMockBatteryUtils;
|
mBatteryOptimizeUtils.mBatteryUtils = mMockBatteryUtils;
|
||||||
@@ -156,6 +164,7 @@ public class BatteryOptimizeUtilsTest {
|
|||||||
TimeUnit.SECONDS.sleep(1);
|
TimeUnit.SECONDS.sleep(1);
|
||||||
|
|
||||||
verifySetAppOptimizationMode(AppOpsManager.MODE_IGNORED, /* allowListed */ false);
|
verifySetAppOptimizationMode(AppOpsManager.MODE_IGNORED, /* allowListed */ false);
|
||||||
|
verify(mObserver).onChanged(ChangeReason.UPDATE);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -169,6 +178,7 @@ public class BatteryOptimizeUtilsTest {
|
|||||||
TimeUnit.SECONDS.sleep(1);
|
TimeUnit.SECONDS.sleep(1);
|
||||||
|
|
||||||
verifySetAppOptimizationMode(AppOpsManager.MODE_ALLOWED, /* allowListed */ true);
|
verifySetAppOptimizationMode(AppOpsManager.MODE_ALLOWED, /* allowListed */ true);
|
||||||
|
verify(mObserver).onChanged(ChangeReason.UPDATE);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -182,6 +192,7 @@ public class BatteryOptimizeUtilsTest {
|
|||||||
TimeUnit.SECONDS.sleep(1);
|
TimeUnit.SECONDS.sleep(1);
|
||||||
|
|
||||||
verifySetAppOptimizationMode(AppOpsManager.MODE_ALLOWED, /* allowListed */ false);
|
verifySetAppOptimizationMode(AppOpsManager.MODE_ALLOWED, /* allowListed */ false);
|
||||||
|
verify(mObserver).onChanged(ChangeReason.UPDATE);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -197,6 +208,7 @@ public class BatteryOptimizeUtilsTest {
|
|||||||
verify(mMockBatteryUtils, never()).setForceAppStandby(anyInt(), anyString(), anyInt());
|
verify(mMockBatteryUtils, never()).setForceAppStandby(anyInt(), anyString(), anyInt());
|
||||||
verify(mMockBackend, never()).addApp(anyString());
|
verify(mMockBackend, never()).addApp(anyString());
|
||||||
verify(mMockBackend, never()).removeApp(anyString());
|
verify(mMockBackend, never()).removeApp(anyString());
|
||||||
|
verifyNoInteractions(mObserver);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -288,6 +300,7 @@ public class BatteryOptimizeUtilsTest {
|
|||||||
inOrder.verify(mMockBackend).isAllowlisted(PACKAGE_NAME, UID);
|
inOrder.verify(mMockBackend).isAllowlisted(PACKAGE_NAME, UID);
|
||||||
inOrder.verify(mMockBackend).isSysAllowlisted(PACKAGE_NAME);
|
inOrder.verify(mMockBackend).isSysAllowlisted(PACKAGE_NAME);
|
||||||
verifyNoMoreInteractions(mMockBackend);
|
verifyNoMoreInteractions(mMockBackend);
|
||||||
|
verify(mObserver).onChanged(ChangeReason.DELETE);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -298,6 +311,7 @@ public class BatteryOptimizeUtilsTest {
|
|||||||
/* isSystemOrDefaultApp */ false);
|
/* isSystemOrDefaultApp */ false);
|
||||||
|
|
||||||
verifySetAppOptimizationMode(AppOpsManager.MODE_ALLOWED, /* allowListed */ false);
|
verifySetAppOptimizationMode(AppOpsManager.MODE_ALLOWED, /* allowListed */ false);
|
||||||
|
verify(mObserver).onChanged(ChangeReason.DELETE);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -308,6 +322,7 @@ public class BatteryOptimizeUtilsTest {
|
|||||||
/* isSystemOrDefaultApp */ false);
|
/* isSystemOrDefaultApp */ false);
|
||||||
|
|
||||||
verifySetAppOptimizationMode(AppOpsManager.MODE_ALLOWED, /* allowListed */ false);
|
verifySetAppOptimizationMode(AppOpsManager.MODE_ALLOWED, /* allowListed */ false);
|
||||||
|
verify(mObserver).onChanged(ChangeReason.DELETE);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void runTestForResetWithMode(
|
private void runTestForResetWithMode(
|
||||||
|
Reference in New Issue
Block a user