[B&R] ignore backup system app or default app optimization modes am: a90496e92e
Original change: https://googleplex-android-review.googlesource.com/c/platform/packages/apps/Settings/+/15671541 Change-Id: I8b0df014d4e0c317349f1937a649df3ae9ba613f
This commit is contained in:
@@ -37,6 +37,8 @@ import android.util.Log;
|
|||||||
|
|
||||||
import androidx.annotation.VisibleForTesting;
|
import androidx.annotation.VisibleForTesting;
|
||||||
|
|
||||||
|
import com.android.settingslib.fuelgauge.PowerAllowlistBackend;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
@@ -63,6 +65,8 @@ public final class BatteryBackupHelper implements BackupHelper {
|
|||||||
static final String KEY_FULL_POWER_LIST = "full_power_list";
|
static final String KEY_FULL_POWER_LIST = "full_power_list";
|
||||||
static final String KEY_OPTIMIZATION_LIST = "optimization_mode_list";
|
static final String KEY_OPTIMIZATION_LIST = "optimization_mode_list";
|
||||||
|
|
||||||
|
@VisibleForTesting
|
||||||
|
PowerAllowlistBackend mPowerAllowlistBackend;
|
||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
IDeviceIdleController mIDeviceIdleController;
|
IDeviceIdleController mIDeviceIdleController;
|
||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
@@ -127,6 +131,7 @@ public final class BatteryBackupHelper implements BackupHelper {
|
|||||||
Log.w(TAG, "no data found in the getInstalledApplications()");
|
Log.w(TAG, "no data found in the getInstalledApplications()");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
int backupCount = 0;
|
||||||
final StringBuilder builder = new StringBuilder();
|
final StringBuilder builder = new StringBuilder();
|
||||||
final AppOpsManager appOps = mContext.getSystemService(AppOpsManager.class);
|
final AppOpsManager appOps = mContext.getSystemService(AppOpsManager.class);
|
||||||
// Converts application into the AppUsageState.
|
// Converts application into the AppUsageState.
|
||||||
@@ -136,20 +141,22 @@ public final class BatteryBackupHelper implements BackupHelper {
|
|||||||
@BatteryOptimizeUtils.OptimizationMode
|
@BatteryOptimizeUtils.OptimizationMode
|
||||||
final int optimizationMode = BatteryOptimizeUtils.getAppOptimizationMode(
|
final int optimizationMode = BatteryOptimizeUtils.getAppOptimizationMode(
|
||||||
mode, allowlistedApps.contains(info.packageName));
|
mode, allowlistedApps.contains(info.packageName));
|
||||||
// Ignores default optimized or unknown state.
|
// Ignores default optimized/unknown state or system/default apps.
|
||||||
if (optimizationMode == BatteryOptimizeUtils.MODE_OPTIMIZED
|
if (optimizationMode == BatteryOptimizeUtils.MODE_OPTIMIZED
|
||||||
|| optimizationMode == BatteryOptimizeUtils.MODE_UNKNOWN) {
|
|| optimizationMode == BatteryOptimizeUtils.MODE_UNKNOWN
|
||||||
|
|| isSystemOrDefaultApp(info.packageName)) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
final String packageOptimizeMode =
|
final String packageOptimizeMode =
|
||||||
info.packageName + DELIMITER_MODE + optimizationMode;
|
info.packageName + DELIMITER_MODE + optimizationMode;
|
||||||
builder.append(packageOptimizeMode + DELIMITER);
|
builder.append(packageOptimizeMode + DELIMITER);
|
||||||
debugLog(packageOptimizeMode);
|
debugLog(packageOptimizeMode);
|
||||||
|
backupCount++;
|
||||||
}
|
}
|
||||||
|
|
||||||
writeBackupData(data, KEY_OPTIMIZATION_LIST, builder.toString());
|
writeBackupData(data, KEY_OPTIMIZATION_LIST, builder.toString());
|
||||||
Log.d(TAG, String.format("backup getInstalledApplications() size=%d in %d/ms",
|
Log.d(TAG, String.format("backup getInstalledApplications():%d count=%d in %d/ms",
|
||||||
applications.size(), (System.currentTimeMillis() - timestamp)));
|
applications.size(), backupCount, (System.currentTimeMillis() - timestamp)));
|
||||||
}
|
}
|
||||||
|
|
||||||
// Provides an opportunity to inject mock IDeviceIdleController for testing.
|
// Provides an opportunity to inject mock IDeviceIdleController for testing.
|
||||||
@@ -170,6 +177,20 @@ public final class BatteryBackupHelper implements BackupHelper {
|
|||||||
return mIPackageManager;
|
return mIPackageManager;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private PowerAllowlistBackend getPowerAllowlistBackend() {
|
||||||
|
if (mPowerAllowlistBackend != null) {
|
||||||
|
return mPowerAllowlistBackend;
|
||||||
|
}
|
||||||
|
mPowerAllowlistBackend = PowerAllowlistBackend.getInstance(mContext);
|
||||||
|
return mPowerAllowlistBackend;
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean isSystemOrDefaultApp(String packageName) {
|
||||||
|
final PowerAllowlistBackend powerAllowlistBackend = getPowerAllowlistBackend();
|
||||||
|
return powerAllowlistBackend.isSysAllowlisted(packageName)
|
||||||
|
|| powerAllowlistBackend.isDefaultActiveApp(packageName);
|
||||||
|
}
|
||||||
|
|
||||||
private List<ApplicationInfo> getInstalledApplications() {
|
private List<ApplicationInfo> getInstalledApplications() {
|
||||||
final List<ApplicationInfo> applications = new ArrayList<>();
|
final List<ApplicationInfo> applications = new ArrayList<>();
|
||||||
final UserManager um = mContext.getSystemService(UserManager.class);
|
final UserManager um = mContext.getSystemService(UserManager.class);
|
||||||
|
@@ -40,6 +40,8 @@ import android.os.RemoteException;
|
|||||||
import android.os.UserHandle;
|
import android.os.UserHandle;
|
||||||
import android.os.UserManager;
|
import android.os.UserManager;
|
||||||
|
|
||||||
|
import com.android.settingslib.fuelgauge.PowerAllowlistBackend;
|
||||||
|
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
@@ -59,6 +61,9 @@ import org.robolectric.annotation.Resetter;
|
|||||||
@RunWith(RobolectricTestRunner.class)
|
@RunWith(RobolectricTestRunner.class)
|
||||||
@Config(shadows = {BatteryBackupHelperTest.ShadowUserHandle.class})
|
@Config(shadows = {BatteryBackupHelperTest.ShadowUserHandle.class})
|
||||||
public final class BatteryBackupHelperTest {
|
public final class BatteryBackupHelperTest {
|
||||||
|
private static final String PACKAGE_NAME1 = "com.android.testing.1";
|
||||||
|
private static final String PACKAGE_NAME2 = "com.android.testing.2";
|
||||||
|
private static final String PACKAGE_NAME3 = "com.android.testing.3";
|
||||||
|
|
||||||
private Context mContext;
|
private Context mContext;
|
||||||
private BatteryBackupHelper mBatteryBackupHelper;
|
private BatteryBackupHelper mBatteryBackupHelper;
|
||||||
@@ -73,6 +78,8 @@ public final class BatteryBackupHelperTest {
|
|||||||
private AppOpsManager mAppOpsManager;
|
private AppOpsManager mAppOpsManager;
|
||||||
@Mock
|
@Mock
|
||||||
private UserManager mUserManager;
|
private UserManager mUserManager;
|
||||||
|
@Mock
|
||||||
|
private PowerAllowlistBackend mPowerAllowlistBackend;
|
||||||
|
|
||||||
@Before
|
@Before
|
||||||
public void setUp() {
|
public void setUp() {
|
||||||
@@ -84,6 +91,7 @@ public final class BatteryBackupHelperTest {
|
|||||||
mBatteryBackupHelper = new BatteryBackupHelper(mContext);
|
mBatteryBackupHelper = new BatteryBackupHelper(mContext);
|
||||||
mBatteryBackupHelper.mIDeviceIdleController = mDeviceController;
|
mBatteryBackupHelper.mIDeviceIdleController = mDeviceController;
|
||||||
mBatteryBackupHelper.mIPackageManager = mIPackageManager;
|
mBatteryBackupHelper.mIPackageManager = mIPackageManager;
|
||||||
|
mBatteryBackupHelper.mPowerAllowlistBackend = mPowerAllowlistBackend;
|
||||||
}
|
}
|
||||||
|
|
||||||
@After
|
@After
|
||||||
@@ -172,16 +180,49 @@ public final class BatteryBackupHelperTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void backupOptimizationMode_backupOptimizationMode() throws Exception {
|
public void backupOptimizationMode_backupOptimizationMode() throws Exception {
|
||||||
final String packageName1 = "com.android.testing.1";
|
final List<String> allowlistedApps = Arrays.asList(PACKAGE_NAME1);
|
||||||
final String packageName2 = "com.android.testing.2";
|
createTestingData(PACKAGE_NAME1, PACKAGE_NAME2, PACKAGE_NAME3);
|
||||||
final String packageName3 = "com.android.testing.3";
|
|
||||||
final List<String> allowlistedApps = Arrays.asList(packageName1);
|
|
||||||
createTestingData(packageName1, packageName2, packageName3);
|
|
||||||
|
|
||||||
mBatteryBackupHelper.backupOptimizationMode(mBackupDataOutput, allowlistedApps);
|
mBatteryBackupHelper.backupOptimizationMode(mBackupDataOutput, allowlistedApps);
|
||||||
|
|
||||||
// 2 for UNRESTRICTED mode and 1 for RESTRICTED mode.
|
// 2 for UNRESTRICTED mode and 1 for RESTRICTED mode.
|
||||||
final String expectedResult = packageName1 + "|2," + packageName2 + "|1,";
|
final String expectedResult = PACKAGE_NAME1 + "|2," + PACKAGE_NAME2 + "|1,";
|
||||||
|
verifyBackupData(expectedResult);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void backupOptimizationMode_backupOptimizationModeAndIgnoreSystemApp()
|
||||||
|
throws Exception {
|
||||||
|
final List<String> allowlistedApps = Arrays.asList(PACKAGE_NAME1);
|
||||||
|
createTestingData(PACKAGE_NAME1, PACKAGE_NAME2, PACKAGE_NAME3);
|
||||||
|
// Sets "com.android.testing.1" as system app.
|
||||||
|
doReturn(true).when(mPowerAllowlistBackend).isSysAllowlisted(PACKAGE_NAME1);
|
||||||
|
doReturn(false).when(mPowerAllowlistBackend).isDefaultActiveApp(anyString());
|
||||||
|
|
||||||
|
mBatteryBackupHelper.backupOptimizationMode(mBackupDataOutput, allowlistedApps);
|
||||||
|
|
||||||
|
// "com.android.testing.2" for RESTRICTED mode.
|
||||||
|
final String expectedResult = PACKAGE_NAME2 + "|1,";
|
||||||
|
verifyBackupData(expectedResult);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void backupOptimizationMode_backupOptimizationModeAndIgnoreDefaultApp()
|
||||||
|
throws Exception {
|
||||||
|
final List<String> allowlistedApps = Arrays.asList(PACKAGE_NAME1);
|
||||||
|
createTestingData(PACKAGE_NAME1, PACKAGE_NAME2, PACKAGE_NAME3);
|
||||||
|
// Sets "com.android.testing.1" as device default app.
|
||||||
|
doReturn(true).when(mPowerAllowlistBackend).isDefaultActiveApp(PACKAGE_NAME1);
|
||||||
|
doReturn(false).when(mPowerAllowlistBackend).isSysAllowlisted(anyString());
|
||||||
|
|
||||||
|
mBatteryBackupHelper.backupOptimizationMode(mBackupDataOutput, allowlistedApps);
|
||||||
|
|
||||||
|
// "com.android.testing.2" for RESTRICTED mode.
|
||||||
|
final String expectedResult = PACKAGE_NAME2 + "|1,";
|
||||||
|
verifyBackupData(expectedResult);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void verifyBackupData(String expectedResult) throws Exception {
|
||||||
final byte[] expectedBytes = expectedResult.getBytes();
|
final byte[] expectedBytes = expectedResult.getBytes();
|
||||||
verify(mBackupDataOutput).writeEntityHeader(
|
verify(mBackupDataOutput).writeEntityHeader(
|
||||||
BatteryBackupHelper.KEY_OPTIMIZATION_LIST, expectedBytes.length);
|
BatteryBackupHelper.KEY_OPTIMIZATION_LIST, expectedBytes.length);
|
||||||
|
Reference in New Issue
Block a user