Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 66d5c605 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Fix boot loop when upgrading sensor privacy file" into sc-dev

parents 9d0e91c7 4fa06df1
Loading
Loading
Loading
Loading
+14 −6
Original line number Diff line number Diff line
@@ -1021,7 +1021,15 @@ public final class SensorPrivacyService extends SystemService {
                }
            }

            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);
                    }
                }
+3 −0
Original line number Diff line number Diff line
<?xml version='1.0' encoding='UTF-8' standalone='yes' ?>
<sensor-privacy enabled="false">
</sensor-privacy>
+4 −0
Original line number Diff line number Diff line
@@ -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();