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

Commit 25f9982b 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: eba95fad

Change-Id: I5852d5ed8f0268fb1b465c103661462477df40da
parents 161c51c3 eba95fad
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.
        }