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

Commit 577a74da 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 am: 1e0ce0d1

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

Change-Id: I1d4cbcddc71cdeb96f290b689e037bda007aad6a
parents 8100a960 1e0ce0d1
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();