Merge "Fix boot loop when upgrading sensor privacy file" into sc-dev am: 66d5c60581

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/15529225

Change-Id: I755d889f1219f9104919bf88a0b481ff7b9b37cd
This commit is contained in:
TreeHugger Robot
2021-08-12 18:28:40 +00:00
committed by Automerger Merge Worker
3 changed files with 21 additions and 6 deletions

View File

@@ -1021,7 +1021,15 @@ public final class SensorPrivacyService extends SystemService {
}
}
return upgradeAndInit(version, map);
try {
return upgradeAndInit(version, map);
} catch (Exception e) {
Log.wtf(TAG, "Failed to upgrade and set sensor privacy state,"
+ " resetting to default.", e);
mEnabled = new SparseBooleanArray();
mIndividualEnabled = new SparseArray<>();
return true;
}
}
private boolean upgradeAndInit(int version, SparseArray map) {
@@ -1037,22 +1045,22 @@ public final class SensorPrivacyService extends SystemService {
final int[] users = getLocalService(UserManagerInternal.class).getUserIds();
if (version == 0) {
final boolean enabled = (boolean) map.get(VER0_ENABLED);
final SparseBooleanArray individualEnabled =
(SparseBooleanArray) map.get(VER0_INDIVIDUAL_ENABLED);
final SparseArray<SensorState> individualEnabled =
(SparseArray<SensorState>) map.get(VER0_INDIVIDUAL_ENABLED);
final SparseBooleanArray perUserEnabled = new SparseBooleanArray();
final SparseArray<SparseBooleanArray> perUserIndividualEnabled =
final SparseArray<SparseArray<SensorState>> perUserIndividualEnabled =
new SparseArray<>();
// Copy global state to each user
for (int i = 0; i < users.length; i++) {
int user = users[i];
perUserEnabled.put(user, enabled);
SparseBooleanArray userIndividualSensorEnabled = new SparseBooleanArray();
SparseArray<SensorState> userIndividualSensorEnabled = new SparseArray<>();
perUserIndividualEnabled.put(user, userIndividualSensorEnabled);
for (int j = 0; j < individualEnabled.size(); j++) {
final int sensor = individualEnabled.keyAt(j);
final boolean isSensorEnabled = individualEnabled.valueAt(j);
final SensorState isSensorEnabled = individualEnabled.valueAt(j);
userIndividualSensorEnabled.put(sensor, isSensorEnabled);
}
}

View File

@@ -0,0 +1,3 @@
<?xml version='1.0' encoding='UTF-8' standalone='yes' ?>
<sensor-privacy enabled="false">
</sensor-privacy>

View File

@@ -60,6 +60,8 @@ public class SensorPrivacyServiceMockingTest {
String.format(PERSISTENCE_FILE_PATHS_TEMPLATE, 4);
public static final String PERSISTENCE_FILE5 =
String.format(PERSISTENCE_FILE_PATHS_TEMPLATE, 5);
public static final String PERSISTENCE_FILE6 =
String.format(PERSISTENCE_FILE_PATHS_TEMPLATE, 6);
private Context mContext;
@Mock
@@ -111,6 +113,7 @@ public class SensorPrivacyServiceMockingTest {
initServiceWithPersistenceFile(onDeviceFile, PERSISTENCE_FILE3);
initServiceWithPersistenceFile(onDeviceFile, PERSISTENCE_FILE4);
initServiceWithPersistenceFile(onDeviceFile, PERSISTENCE_FILE5);
initServiceWithPersistenceFile(onDeviceFile, PERSISTENCE_FILE6);
// Try all files with two known users
doReturn(new int[]{0, 10}).when(mMockedUserManagerInternal).getUserIds();
@@ -124,6 +127,7 @@ public class SensorPrivacyServiceMockingTest {
initServiceWithPersistenceFile(onDeviceFile, PERSISTENCE_FILE3);
initServiceWithPersistenceFile(onDeviceFile, PERSISTENCE_FILE4);
initServiceWithPersistenceFile(onDeviceFile, PERSISTENCE_FILE5);
initServiceWithPersistenceFile(onDeviceFile, PERSISTENCE_FILE6);
} finally {
mockitoSession.finishMocking();