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

Commit ad982e23 authored by Winson's avatar Winson Committed by android-build-merger
Browse files

Merge "Force system ApplicationInfo update and notify DisplayManager" into qt-dev

am: 70e0438d

Change-Id: I9fb1919d9d49e944bbcc15855f1c937ce6c8d1c5
parents a11a2df3 70e0438d
Loading
Loading
Loading
Loading
+10 −1
Original line number Original line Diff line number Diff line
@@ -123,7 +123,6 @@ import android.provider.Settings;
import android.renderscript.RenderScriptCacheDir;
import android.renderscript.RenderScriptCacheDir;
import android.security.NetworkSecurityPolicy;
import android.security.NetworkSecurityPolicy;
import android.security.net.config.NetworkSecurityConfigProvider;
import android.security.net.config.NetworkSecurityConfigProvider;
import android.service.voice.VoiceInteractionSession;
import android.system.ErrnoException;
import android.system.ErrnoException;
import android.system.OsConstants;
import android.system.OsConstants;
import android.system.StructStat;
import android.system.StructStat;
@@ -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)
    @VisibleForTesting(visibility = PACKAGE)
    public void handleApplicationInfoChanged(@NonNull final ApplicationInfo ai) {
    public void handleApplicationInfoChanged(@NonNull final ApplicationInfo ai) {
        // Updates triggered by package installation go through a package update
        // Updates triggered by package installation go through a package update
+16 −0
Original line number Original line Diff line number Diff line
@@ -33,6 +33,7 @@ import static android.app.AppOpsManager.OP_NONE;
import static android.content.Intent.FLAG_ACTIVITY_NEW_TASK;
import static android.content.Intent.FLAG_ACTIVITY_NEW_TASK;
import static android.content.pm.ApplicationInfo.HIDDEN_API_ENFORCEMENT_DEFAULT;
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_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_ALL;
import static android.content.pm.PackageManager.MATCH_ANY_USER;
import static android.content.pm.PackageManager.MATCH_ANY_USER;
import static android.content.pm.PackageManager.MATCH_DEBUG_TRIAGED_MISSING;
import static android.content.pm.PackageManager.MATCH_DEBUG_TRIAGED_MISSING;
@@ -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) {
    void updateApplicationInfoLocked(@NonNull List<String> packagesToUpdate, int userId) {
        final boolean updateFrameworkRes = packagesToUpdate.contains("android");
        final boolean updateFrameworkRes = packagesToUpdate.contains("android");
        if (updateFrameworkRes) {
        if (updateFrameworkRes) {
+13 −1
Original line number Original line Diff line number Diff line
@@ -254,6 +254,9 @@ public final class DisplayManagerService extends SystemService {
    // device).
    // device).
    private Point mStableDisplaySize = new Point();
    private Point mStableDisplaySize = new Point();


    // Whether the system has finished booting or not.
    private boolean mSystemReady;

    // The top inset of the default display.
    // The top inset of the default display.
    // This gets persisted so that the boot animation knows how to transition from the display's
    // 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
    // full size to the size configured by the user. Right now we only persist and animate the top
@@ -330,6 +333,8 @@ public final class DisplayManagerService extends SystemService {
        mCurrentUserId = UserHandle.USER_SYSTEM;
        mCurrentUserId = UserHandle.USER_SYSTEM;
        ColorSpace[] colorSpaces = SurfaceControl.getCompositionColorSpaces();
        ColorSpace[] colorSpaces = SurfaceControl.getCompositionColorSpaces();
        mWideColorSpace = colorSpaces[1];
        mWideColorSpace = colorSpaces[1];

        mSystemReady = false;
    }
    }


    public void setupSchedulerPolicies() {
    public void setupSchedulerPolicies() {
@@ -418,6 +423,10 @@ public final class DisplayManagerService extends SystemService {
        synchronized (mSyncRoot) {
        synchronized (mSyncRoot) {
            mSafeMode = safeMode;
            mSafeMode = safeMode;
            mOnlyCore = onlyCore;
            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());
        mDisplayModeDirector.setListener(new AllowedDisplayModeObserver());
@@ -1057,7 +1066,10 @@ public final class DisplayManagerService extends SystemService {
    }
    }


    private void recordTopInsetLocked(@Nullable LogicalDisplay d) {
    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;
            return;
        }
        }
        int topInset = d.getInsets().top;
        int topInset = d.getInsets().top;
+7 −0
Original line number Original line Diff line number Diff line
@@ -36,6 +36,7 @@ import android.content.res.Configuration;
import android.content.res.Resources.Theme;
import android.content.res.Resources.Theme;
import android.database.sqlite.SQLiteCompatibilityWalFlags;
import android.database.sqlite.SQLiteCompatibilityWalFlags;
import android.database.sqlite.SQLiteGlobal;
import android.database.sqlite.SQLiteGlobal;
import android.hardware.display.DisplayManagerInternal;
import android.net.NetworkStackClient;
import android.net.NetworkStackClient;
import android.os.BaseBundle;
import android.os.BaseBundle;
import android.os.Binder;
import android.os.Binder;
@@ -790,6 +791,12 @@ public final class SystemServer {
        mSystemServiceManager.startService(new SensorPrivacyService(mSystemContext));
        mSystemServiceManager.startService(new SensorPrivacyService(mSystemContext));
        traceEnd();
        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
        // The sensor service needs access to package manager service, app ops
        // service, and permissions service, therefore we start it after them.
        // service, and permissions service, therefore we start it after them.
        // Start sensor service in a separate thread. Completion should be checked
        // Start sensor service in a separate thread. Completion should be checked