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

Commit 14b7c134 authored by Xiang Wang's avatar Xiang Wang Committed by Android (Google) Code Review
Browse files

Merge "Fix the DiskReadViolation in GameManagerSettings" into main

parents 997e3c83 cb1eb9b9
Loading
Loading
Loading
Loading
+18 −8
Original line number Diff line number Diff line
@@ -361,6 +361,14 @@ public final class GameManagerService extends IGameManagerService.Stub {
                case POPULATE_GAME_MODE_SETTINGS: {
                    removeEqualMessages(POPULATE_GAME_MODE_SETTINGS, msg.obj);
                    final int userId = (int) msg.obj;
                    synchronized (mLock) {
                        if (!mSettings.containsKey(userId)) {
                            GameManagerSettings userSettings = new GameManagerSettings(
                                    Environment.getDataSystemDeDirectory(userId));
                            mSettings.put(userId, userSettings);
                            userSettings.readPersistentDataLocked();
                        }
                    }
                    final String[] packageNames = getInstalledGamePackageNames(userId);
                    updateConfigsForUser(userId, false /*checkGamePackage*/, packageNames);
                    break;
@@ -990,8 +998,7 @@ public final class GameManagerService extends IGameManagerService.Stub {
        @Override
        public void onUserStarting(@NonNull TargetUser user) {
            Slog.d(TAG, "Starting user " + user.getUserIdentifier());
            mService.onUserStarting(user,
                    Environment.getDataSystemDeDirectory(user.getUserIdentifier()));
            mService.onUserStarting(user, /*settingDataDirOverride*/ null);
        }

        @Override
@@ -1596,15 +1603,18 @@ public final class GameManagerService extends IGameManagerService.Stub {
        }
    }

    void onUserStarting(@NonNull TargetUser user, File settingDataDir) {
    void onUserStarting(@NonNull TargetUser user, File settingDataDirOverride) {
        final int userId = user.getUserIdentifier();
        if (settingDataDirOverride != null) {
            synchronized (mLock) {
                if (!mSettings.containsKey(userId)) {
                GameManagerSettings userSettings = new GameManagerSettings(settingDataDir);
                    GameManagerSettings userSettings = new GameManagerSettings(
                            settingDataDirOverride);
                    mSettings.put(userId, userSettings);
                    userSettings.readPersistentDataLocked();
                }
            }
        }
        sendUserMessage(userId, POPULATE_GAME_MODE_SETTINGS, EVENT_ON_USER_STARTING,
                0 /*delayMillis*/);

+1 −4
Original line number Diff line number Diff line
@@ -221,9 +221,7 @@ public class GameManagerSettings {
            return false;
        }

        try {
            final FileInputStream str = mSettingsFile.openRead();

        try (FileInputStream str = mSettingsFile.openRead()) {
            final TypedXmlPullParser parser = Xml.resolvePullParser(str);
            int type;
            while ((type = parser.next()) != XmlPullParser.START_TAG
@@ -251,7 +249,6 @@ public class GameManagerSettings {
                            + type);
                }
            }
            str.close();
        } catch (XmlPullParserException | java.io.IOException e) {
            Slog.wtf(TAG, "Error reading game manager settings", e);
            return false;
+4 −0
Original line number Diff line number Diff line
@@ -116,6 +116,10 @@ public class GameManagerServiceSettingsTests {
        deleteFolder(InstrumentationRegistry.getTargetContext().getFilesDir());
    }

    static {
        System.loadLibrary("servicestestjni");
    }

    @Test
    public void testReadGameServiceSettings() {
        writeOldFiles();