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

Commit eba95fad 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 rvc-dev am: 73a8e537

Change-Id: Ib5c184e852d32a2b7d84fb6f48f1fe31aece9267
parents b9553dc6 73a8e537
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.
        }