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

Commit 3284e082 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Automerger Merge Worker
Browse files

Merge "Fix PackageInstaller failure when called from different user" into...

Merge "Fix PackageInstaller failure when called from different user" into rvc-dev am: 73a8e537 am: 16a43652 am: 33181699

Change-Id: I2e21c227af0f1fdbb90c62e94cdb391646d976e7
parents 6e5720f2 33181699
Loading
Loading
Loading
Loading
+14 −5
Original line number Diff line number Diff line
@@ -30,13 +30,17 @@ import android.content.pm.IPackageManager;
import android.content.pm.PackageInstaller;
import android.content.pm.PackageManager;
import android.content.pm.ProviderInfo;
import android.content.pm.UserInfo;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.os.RemoteException;
import android.os.UserManager;
import android.permission.IPermissionManager;
import android.util.Log;

import java.util.List;

/**
 * Select which activity is the first visible activity of the installation and forward the intent to
 * it.
@@ -47,6 +51,7 @@ public class InstallStart extends Activity {
    private static final String DOWNLOADS_AUTHORITY = "downloads";
    private IPackageManager mIPackageManager;
    private IPermissionManager mIPermissionManager;
    private UserManager mUserManager;
    private boolean mAbortInstall = false;

    @Override
@@ -54,6 +59,7 @@ public class InstallStart extends Activity {
        super.onCreate(savedInstanceState);
        mIPackageManager = AppGlobals.getPackageManager();
        mIPermissionManager = AppGlobals.getPermissionManager();
        mUserManager = getSystemService(UserManager.class);
        Intent intent = getIntent();
        String callingPackage = getCallingPackage();

@@ -144,15 +150,18 @@ public class InstallStart extends Activity {
            if (packages == null) {
                return false;
            }
            final List<UserInfo> users = mUserManager.getUsers();
            for (String packageName : packages) {
                for (UserInfo user : users) {
                    try {
                    if (uid == getPackageManager().getPackageUid(packageName, 0)) {
                        if (uid == getPackageManager().getPackageUidAsUser(packageName, user.id)) {
                            return true;
                        }
                    } catch (PackageManager.NameNotFoundException e) {
                        // Ignore and try the next package
                    }
                }
            }
        } catch (RemoteException rexc) {
            // If remote package manager cannot be reached, install will likely fail anyway.
        }