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

Commit 36e1d426 authored by Will Burr's avatar Will Burr
Browse files

Dropbox report: use ProcessRecord for SDK sandbox client package

Use ProcessRecord instead of fetching packages for UID to obtain the SDK
sandbox client package. This will ensure that this behaviour works for
shared UIDs.

Fixes: 262229123
Test: (manual) adb shell dumpsys dropbox
Test: (for regression) atest SdkSandboxMetricsHostTest

Change-Id: Ie09a72919ee1c4a3fd469e9161788da011b71b69
parent 03882bc8
Loading
Loading
Loading
Loading
+17 −21
Original line number Diff line number Diff line
@@ -84,7 +84,6 @@ import static android.os.Process.ZYGOTE_POLICY_FLAG_LATENCY_SENSITIVE;
import static android.os.Process.ZYGOTE_POLICY_FLAG_SYSTEM_PROCESS;
import static android.os.Process.ZYGOTE_PROCESS;
import static android.os.Process.getTotalMemory;
import static android.os.Process.isSdkSandboxUid;
import static android.os.Process.isThreadInProcess;
import static android.os.Process.killProcess;
import static android.os.Process.killProcessQuiet;
@@ -9040,35 +9039,32 @@ public class ActivityManagerService extends IActivityManager.Stub
                sb.append("Instant-App: true\n");
            }
            if (isSdkSandboxUid(process.uid)) {
                final int appUid = Process.getAppUidForSdkSandboxUid(process.uid);
            if (process.isSdkSandbox) {
                final String clientPackage = process.sdkSandboxClientAppPackage;
                try {
                    String[] clientPackages = pm.getPackagesForUid(appUid);
                    // In shared UID case, don't add the package information
                    if (clientPackages.length == 1) {
                        appendSdkSandboxClientPackageHeader(sb, clientPackages[0], callingUserId);
                    final PackageInfo pi = pm.getPackageInfo(clientPackage, 0, callingUserId);
                    if (pi != null) {
                        appendSdkSandboxClientPackageHeader(sb, pi);
                    } else {
                        Slog.e(TAG,
                                "PackageInfo is null for SDK sandbox client: " + clientPackage);
                    }
                } catch (RemoteException e) {
                    Slog.e(TAG, "Error getting packages for client app uid: " + appUid, e);
                    Slog.e(TAG,
                            "Error getting package info for SDK sandbox client: " + clientPackage,
                            e);
                }
                sb.append("SdkSandbox: true\n");
            }
        }
    }
    private void appendSdkSandboxClientPackageHeader(StringBuilder sb, String pkg, int userId) {
        final IPackageManager pm = AppGlobals.getPackageManager();
        sb.append("SdkSandbox-Client-Package: ").append(pkg);
        try {
            final PackageInfo pi = pm.getPackageInfo(pkg, 0, userId);
            if (pi != null) {
                sb.append(" v").append(pi.getLongVersionCode());
                if (pi.versionName != null) {
                    sb.append(" (").append(pi.versionName).append(")");
                }
            }
        } catch (RemoteException e) {
            Slog.e(TAG, "Error getting package info for SDK sandbox client: " + pkg, e);
    private void appendSdkSandboxClientPackageHeader(StringBuilder sb,
            PackageInfo clientPackageInfo) {
        sb.append("SdkSandbox-Client-Package: ").append(clientPackageInfo.packageName);
        sb.append(" v").append(clientPackageInfo.getLongVersionCode());
        if (clientPackageInfo.versionName != null) {
            sb.append(" (").append(clientPackageInfo.versionName).append(")");
        }
        sb.append("\n");
    }