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

Commit 3e7436fc authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Automerger Merge Worker
Browse files

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

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

Change-Id: If69a9a5707f42df449627272836ab088f3570d5f
parents e7cd1a0d 66d5c605
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();