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

Commit 130ea393 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

Change-Id: I24f3660f7655ce1119d52db817e45f8daf37df92
parents 161c51c3 16a43652
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.
        }