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

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

Merge "OMS: Fix bug where overlay settings wouldn't persist" into oc-dev

parents fd89a95f d11c5510
Loading
Loading
Loading
Loading
+12 −13
Original line number Diff line number Diff line
@@ -71,6 +71,7 @@ import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
@@ -754,26 +755,24 @@ public final class OverlayManagerService extends SystemService {
                // restarted before we received USER_REMOVED. Remove data for
                // users that will not exist after the system is ready.

                final List<UserInfo> deadUsers = getDeadUsers();
                final int N = deadUsers.size();
                for (int i = 0; i < N; i++) {
                    final UserInfo deadUser = deadUsers.get(i);
                    final int userId = deadUser.getUserHandle().getIdentifier();
                final List<UserInfo> liveUsers = mUserManager.getUsers(true /*excludeDying*/);
                final int[] liveUserIds = new int[liveUsers.size()];
                for (int i = 0; i < liveUsers.size(); i++) {
                    liveUserIds[i] = liveUsers.get(i).getUserHandle().getIdentifier();
                }
                Arrays.sort(liveUserIds);

                for (int userId : mSettings.getUsers()) {
                    if (Arrays.binarySearch(liveUserIds, userId) < 0) {
                        mSettings.removeUser(userId);
                    }
                }
            } catch (IOException | XmlPullParserException e) {
                Slog.e(TAG, "failed to restore overlay state", e);
            }
        }
    }

    private List<UserInfo> getDeadUsers() {
        final List<UserInfo> users = mUserManager.getUsers(false);
        final List<UserInfo> onlyLiveUsers = mUserManager.getUsers(true);
        users.removeAll(onlyLiveUsers);
        return users;
    }

    private static final class PackageManagerHelper implements
            OverlayManagerServiceImpl.PackageManagerHelper {

+4 −0
Original line number Diff line number Diff line
@@ -109,6 +109,10 @@ final class OverlayManagerServiceImpl {
                    if (overlayPackage.isStaticOverlay ||
                            mDefaultOverlays.contains(overlayPackage.packageName)) {
                        // Enable this overlay by default.
                        if (DEBUG) {
                            Slog.d(TAG, "Enabling overlay " + overlayPackage.packageName
                                    + " for user " + newUserId + " by default");
                        }
                        mSettings.setEnabled(overlayPackage.packageName, newUserId, true);
                    }
                } else {
+8 −0
Original line number Diff line number Diff line
@@ -16,11 +16,15 @@

package com.android.server.om;

import static com.android.server.om.OverlayManagerService.DEBUG;
import static com.android.server.om.OverlayManagerService.TAG;

import android.annotation.NonNull;
import android.annotation.Nullable;
import android.content.om.OverlayInfo;
import android.util.AndroidRuntimeException;
import android.util.ArrayMap;
import android.util.Slog;
import android.util.Xml;

import com.android.internal.util.FastXmlSerializer;
@@ -185,6 +189,10 @@ final class OverlayManagerSettings {
        for (int i = 0; i < mItems.size(); i++) {
            final SettingsItem item = mItems.get(i);
            if (item.getUserId() == userId) {
                if (DEBUG) {
                    Slog.d(TAG, "Removing overlay " + item.mPackageName + " for user " + userId
                            + " from settings because user was removed");
                }
                mItems.remove(i);
                removed = true;
                i--;