Loading services/core/java/com/android/server/om/OverlayManagerService.java +12 −13 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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 { Loading services/core/java/com/android/server/om/OverlayManagerServiceImpl.java +4 −0 Original line number Diff line number Diff line Loading @@ -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 { Loading services/core/java/com/android/server/om/OverlayManagerSettings.java +8 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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--; Loading Loading
services/core/java/com/android/server/om/OverlayManagerService.java +12 −13 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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 { Loading
services/core/java/com/android/server/om/OverlayManagerServiceImpl.java +4 −0 Original line number Diff line number Diff line Loading @@ -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 { Loading
services/core/java/com/android/server/om/OverlayManagerSettings.java +8 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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--; Loading