Merge "Force system ApplicationInfo update and notify DisplayManager" into qt-dev
am: 70e0438d59
Change-Id: I9fb1919d9d49e944bbcc15855f1c937ce6c8d1c5
This commit is contained in:
@@ -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;
|
||||
@@ -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
|
||||
|
||||
@@ -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;
|
||||
@@ -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) {
|
||||
|
||||
@@ -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
|
||||
@@ -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() {
|
||||
@@ -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());
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user