Loading core/java/android/app/ActivityThread.java +10 −1 Original line number Diff line number Diff line Loading @@ -123,7 +123,6 @@ import android.provider.Settings; import android.renderscript.RenderScriptCacheDir; import android.security.NetworkSecurityPolicy; import android.security.net.config.NetworkSecurityConfigProvider; import android.service.voice.VoiceInteractionSession; import android.system.ErrnoException; import android.system.OsConstants; import android.system.StructStat; Loading Loading @@ -5627,6 +5626,16 @@ public final class ActivityThread extends ClientTransactionHandler { } } /** * Updates the application info. * * This only works in the system process. Must be called on the main thread. */ public void handleSystemApplicationInfoChanged(@NonNull ApplicationInfo ai) { Preconditions.checkState(mSystemThread, "Must only be called in the system process"); handleApplicationInfoChanged(ai); } @VisibleForTesting(visibility = PACKAGE) public void handleApplicationInfoChanged(@NonNull final ApplicationInfo ai) { // Updates triggered by package installation go through a package update Loading services/core/java/com/android/server/am/ActivityManagerService.java +16 −0 Original line number Diff line number Diff line Loading @@ -33,6 +33,7 @@ import static android.app.AppOpsManager.OP_NONE; import static android.content.Intent.FLAG_ACTIVITY_NEW_TASK; import static android.content.pm.ApplicationInfo.HIDDEN_API_ENFORCEMENT_DEFAULT; import static android.content.pm.PackageManager.GET_PROVIDERS; import static android.content.pm.PackageManager.GET_SHARED_LIBRARY_FILES; import static android.content.pm.PackageManager.MATCH_ALL; import static android.content.pm.PackageManager.MATCH_ANY_USER; import static android.content.pm.PackageManager.MATCH_DEBUG_TRIAGED_MISSING; Loading Loading @@ -18566,6 +18567,21 @@ public class ActivityManagerService extends IActivityManager.Stub } } /** * Synchronously update the system ActivityThread, bypassing any deferred threading so any * resources and overlaid values are available immediately. */ public void updateSystemUiContext() { PackageManagerInternal packageManagerInternal; synchronized (this) { packageManagerInternal = getPackageManagerInternalLocked(); } ApplicationInfo ai = packageManagerInternal.getApplicationInfo("android", GET_SHARED_LIBRARY_FILES, Binder.getCallingUid(), UserHandle.USER_SYSTEM); ActivityThread.currentActivityThread().handleSystemApplicationInfoChanged(ai); } void updateApplicationInfoLocked(@NonNull List<String> packagesToUpdate, int userId) { final boolean updateFrameworkRes = packagesToUpdate.contains("android"); if (updateFrameworkRes) { services/core/java/com/android/server/display/DisplayManagerService.java +13 −1 Original line number Diff line number Diff line Loading @@ -254,6 +254,9 @@ public final class DisplayManagerService extends SystemService { // device). private Point mStableDisplaySize = new Point(); // Whether the system has finished booting or not. private boolean mSystemReady; // The top inset of the default display. // This gets persisted so that the boot animation knows how to transition from the display's // full size to the size configured by the user. Right now we only persist and animate the top Loading Loading @@ -330,6 +333,8 @@ public final class DisplayManagerService extends SystemService { mCurrentUserId = UserHandle.USER_SYSTEM; ColorSpace[] colorSpaces = SurfaceControl.getCompositionColorSpaces(); mWideColorSpace = colorSpaces[1]; mSystemReady = false; } public void setupSchedulerPolicies() { Loading Loading @@ -418,6 +423,10 @@ public final class DisplayManagerService extends SystemService { synchronized (mSyncRoot) { mSafeMode = safeMode; mOnlyCore = onlyCore; mSystemReady = true; // Just in case the top inset changed before the system was ready. At this point, any // relevant configuration should be in place. recordTopInsetLocked(mLogicalDisplays.get(Display.DEFAULT_DISPLAY)); } mDisplayModeDirector.setListener(new AllowedDisplayModeObserver()); Loading Loading @@ -1057,7 +1066,10 @@ public final class DisplayManagerService extends SystemService { } private void recordTopInsetLocked(@Nullable LogicalDisplay d) { if (d == null) { // We must only persist the inset after boot has completed, otherwise we will end up // overwriting the persisted value before the masking flag has been loaded from the // resource overlay. if (!mSystemReady || d == null) { return; } int topInset = d.getInsets().top; Loading services/java/com/android/server/SystemServer.java +7 −0 Original line number Diff line number Diff line Loading @@ -36,6 +36,7 @@ import android.content.res.Configuration; import android.content.res.Resources.Theme; import android.database.sqlite.SQLiteCompatibilityWalFlags; import android.database.sqlite.SQLiteGlobal; import android.hardware.display.DisplayManagerInternal; import android.net.NetworkStackClient; import android.os.BaseBundle; import android.os.Binder; Loading Loading @@ -790,6 +791,12 @@ public final class SystemServer { mSystemServiceManager.startService(new SensorPrivacyService(mSystemContext)); traceEnd(); if (SystemProperties.getInt("persist.sys.displayinset.top", 0) > 0) { // DisplayManager needs the overlay immediately. mActivityManagerService.updateSystemUiContext(); LocalServices.getService(DisplayManagerInternal.class).onOverlayChanged(); } // The sensor service needs access to package manager service, app ops // service, and permissions service, therefore we start it after them. // Start sensor service in a separate thread. Completion should be checked Loading Loading
core/java/android/app/ActivityThread.java +10 −1 Original line number Diff line number Diff line Loading @@ -123,7 +123,6 @@ import android.provider.Settings; import android.renderscript.RenderScriptCacheDir; import android.security.NetworkSecurityPolicy; import android.security.net.config.NetworkSecurityConfigProvider; import android.service.voice.VoiceInteractionSession; import android.system.ErrnoException; import android.system.OsConstants; import android.system.StructStat; Loading Loading @@ -5627,6 +5626,16 @@ public final class ActivityThread extends ClientTransactionHandler { } } /** * Updates the application info. * * This only works in the system process. Must be called on the main thread. */ public void handleSystemApplicationInfoChanged(@NonNull ApplicationInfo ai) { Preconditions.checkState(mSystemThread, "Must only be called in the system process"); handleApplicationInfoChanged(ai); } @VisibleForTesting(visibility = PACKAGE) public void handleApplicationInfoChanged(@NonNull final ApplicationInfo ai) { // Updates triggered by package installation go through a package update Loading
services/core/java/com/android/server/am/ActivityManagerService.java +16 −0 Original line number Diff line number Diff line Loading @@ -33,6 +33,7 @@ import static android.app.AppOpsManager.OP_NONE; import static android.content.Intent.FLAG_ACTIVITY_NEW_TASK; import static android.content.pm.ApplicationInfo.HIDDEN_API_ENFORCEMENT_DEFAULT; import static android.content.pm.PackageManager.GET_PROVIDERS; import static android.content.pm.PackageManager.GET_SHARED_LIBRARY_FILES; import static android.content.pm.PackageManager.MATCH_ALL; import static android.content.pm.PackageManager.MATCH_ANY_USER; import static android.content.pm.PackageManager.MATCH_DEBUG_TRIAGED_MISSING; Loading Loading @@ -18566,6 +18567,21 @@ public class ActivityManagerService extends IActivityManager.Stub } } /** * Synchronously update the system ActivityThread, bypassing any deferred threading so any * resources and overlaid values are available immediately. */ public void updateSystemUiContext() { PackageManagerInternal packageManagerInternal; synchronized (this) { packageManagerInternal = getPackageManagerInternalLocked(); } ApplicationInfo ai = packageManagerInternal.getApplicationInfo("android", GET_SHARED_LIBRARY_FILES, Binder.getCallingUid(), UserHandle.USER_SYSTEM); ActivityThread.currentActivityThread().handleSystemApplicationInfoChanged(ai); } void updateApplicationInfoLocked(@NonNull List<String> packagesToUpdate, int userId) { final boolean updateFrameworkRes = packagesToUpdate.contains("android"); if (updateFrameworkRes) {
services/core/java/com/android/server/display/DisplayManagerService.java +13 −1 Original line number Diff line number Diff line Loading @@ -254,6 +254,9 @@ public final class DisplayManagerService extends SystemService { // device). private Point mStableDisplaySize = new Point(); // Whether the system has finished booting or not. private boolean mSystemReady; // The top inset of the default display. // This gets persisted so that the boot animation knows how to transition from the display's // full size to the size configured by the user. Right now we only persist and animate the top Loading Loading @@ -330,6 +333,8 @@ public final class DisplayManagerService extends SystemService { mCurrentUserId = UserHandle.USER_SYSTEM; ColorSpace[] colorSpaces = SurfaceControl.getCompositionColorSpaces(); mWideColorSpace = colorSpaces[1]; mSystemReady = false; } public void setupSchedulerPolicies() { Loading Loading @@ -418,6 +423,10 @@ public final class DisplayManagerService extends SystemService { synchronized (mSyncRoot) { mSafeMode = safeMode; mOnlyCore = onlyCore; mSystemReady = true; // Just in case the top inset changed before the system was ready. At this point, any // relevant configuration should be in place. recordTopInsetLocked(mLogicalDisplays.get(Display.DEFAULT_DISPLAY)); } mDisplayModeDirector.setListener(new AllowedDisplayModeObserver()); Loading Loading @@ -1057,7 +1066,10 @@ public final class DisplayManagerService extends SystemService { } private void recordTopInsetLocked(@Nullable LogicalDisplay d) { if (d == null) { // We must only persist the inset after boot has completed, otherwise we will end up // overwriting the persisted value before the masking flag has been loaded from the // resource overlay. if (!mSystemReady || d == null) { return; } int topInset = d.getInsets().top; Loading
services/java/com/android/server/SystemServer.java +7 −0 Original line number Diff line number Diff line Loading @@ -36,6 +36,7 @@ import android.content.res.Configuration; import android.content.res.Resources.Theme; import android.database.sqlite.SQLiteCompatibilityWalFlags; import android.database.sqlite.SQLiteGlobal; import android.hardware.display.DisplayManagerInternal; import android.net.NetworkStackClient; import android.os.BaseBundle; import android.os.Binder; Loading Loading @@ -790,6 +791,12 @@ public final class SystemServer { mSystemServiceManager.startService(new SensorPrivacyService(mSystemContext)); traceEnd(); if (SystemProperties.getInt("persist.sys.displayinset.top", 0) > 0) { // DisplayManager needs the overlay immediately. mActivityManagerService.updateSystemUiContext(); LocalServices.getService(DisplayManagerInternal.class).onOverlayChanged(); } // The sensor service needs access to package manager service, app ops // service, and permissions service, therefore we start it after them. // Start sensor service in a separate thread. Completion should be checked Loading