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

Commit 03bf28bf authored by Ryan Mitchell's avatar Ryan Mitchell
Browse files

Update ProcessRecord ApplicationInfo for RROs

When overlays update, the changes in ApplicationInfo are propagated
to affected processes. The ApplicationInfo in the ProcessRecords of the
running processes are not updated in ActivityManagerService. Persistent
processes reuse the existing ProcessRecord when they are restarted, so
they are restarted with outdated overlay paths.

This change updates the ApplicationInfo of ProcessRecords when overlay
paths change.

Bug: 154242963
Test: open settings > system > gestures
      switch to another navigation mode
      kill sysui (adb shell kill `pid com.android.systemui`)
      Confirm that navigation mode has not been reset
Change-Id: I85f89df538079e1fb1d695a9b13b388dc338b47b
parent 2d8d9812
Loading
Loading
Loading
Loading
+15 −10
Original line number Diff line number Diff line
@@ -3569,12 +3569,18 @@ public final class ProcessList {
            final int packageCount = app.pkgList.size();
            for (int j = 0; j < packageCount; j++) {
                final String packageName = app.pkgList.keyAt(j);
                if (updateFrameworkRes || packagesToUpdate.contains(packageName)) {
                if (!updateFrameworkRes && !packagesToUpdate.contains(packageName)) {
                    continue;
                }
                try {
                    final ApplicationInfo ai = AppGlobals.getPackageManager()
                            .getApplicationInfo(packageName, STOCK_PM_FLAGS, app.userId);
                        if (ai != null) {
                    if (ai == null) {
                        continue;
                    }
                    app.thread.scheduleApplicationInfoChanged(ai);
                    if (ai.packageName.equals(app.info.packageName)) {
                        app.info = ai;
                    }
                } catch (RemoteException e) {
                    Slog.w(TAG, String.format("Failed to update %s ApplicationInfo for %s",
@@ -3583,7 +3589,6 @@ public final class ProcessList {
            }
        }
    }
    }

    @GuardedBy("mService")
    void sendPackageBroadcastLocked(int cmd, String[] packages, int userId) {
+1 −1
Original line number Diff line number Diff line
@@ -86,7 +86,7 @@ class ProcessRecord implements WindowProcessListener {
    private static final String TAG = TAG_WITH_CLASS_NAME ? "ProcessRecord" : TAG_AM;

    private final ActivityManagerService mService; // where we came from
    final ApplicationInfo info; // all about the first app in the process
    volatile ApplicationInfo info; // all about the first app in the process
    final ProcessInfo processInfo; // if non-null, process-specific manifest info
    final boolean isolated;     // true if this is a special isolated process
    final boolean appZygote;    // true if this is forked from the app zygote