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

Commit 33181699 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: Id46a83fefc5934af726edc23c99d1e03955f91ae
parents e3daa6d4 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.
        }