summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Treehugger Robot <android-test-infra-autosubmit@system.gserviceaccount.com> 2024-03-20 22:45:56 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2024-03-20 22:45:56 +0000
commitcd8c61268b72e67f7eb0bbf326f83a3b4f87fa95 (patch)
tree2c02a8bac5fc453f1a864cf51cb7928de0aea654
parent183586796d00a18f587445afd63f07ab78afe04a (diff)
parent6138f980b24a1c008f1e5be262b4f348208a8ef6 (diff)
Merge "Do not recompute if the source is unknown" into main
-rw-r--r--packages/PackageInstaller/src/com/android/packageinstaller/InstallStart.java23
-rw-r--r--packages/PackageInstaller/src/com/android/packageinstaller/PackageInstallerActivity.java18
2 files changed, 13 insertions, 28 deletions
diff --git a/packages/PackageInstaller/src/com/android/packageinstaller/InstallStart.java b/packages/PackageInstaller/src/com/android/packageinstaller/InstallStart.java
index ef418a5c5bde..7c313e8a871d 100644
--- a/packages/PackageInstaller/src/com/android/packageinstaller/InstallStart.java
+++ b/packages/PackageInstaller/src/com/android/packageinstaller/InstallStart.java
@@ -28,6 +28,7 @@ import android.content.Intent;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageInfo;
import android.content.pm.PackageInstaller;
+import android.content.pm.PackageInstaller.SessionInfo;
import android.content.pm.PackageManager;
import android.content.pm.ProviderInfo;
import android.net.Uri;
@@ -38,7 +39,6 @@ import android.os.UserManager;
import android.text.TextUtils;
import android.util.EventLog;
import android.util.Log;
-import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import com.android.packageinstaller.v2.ui.InstallLaunch;
import java.util.Arrays;
@@ -51,6 +51,7 @@ public class InstallStart extends Activity {
private static final String TAG = InstallStart.class.getSimpleName();
private PackageManager mPackageManager;
+ private PackageInstaller mPackageInstaller;
private UserManager mUserManager;
private boolean mAbortInstall = false;
private boolean mShouldFinish = true;
@@ -66,7 +67,7 @@ public class InstallStart extends Activity {
Log.i(TAG, "Using Pia V2");
Intent piaV2 = new Intent(getIntent());
- piaV2.putExtra(InstallLaunch.EXTRA_CALLING_PKG_NAME, getCallingPackage());
+ piaV2.putExtra(InstallLaunch.EXTRA_CALLING_PKG_NAME, getLaunchedFromPackage());
piaV2.putExtra(InstallLaunch.EXTRA_CALLING_PKG_UID, getLaunchedFromUid());
piaV2.setClass(this, InstallLaunch.class);
piaV2.addFlags(Intent.FLAG_ACTIVITY_FORWARD_RESULT);
@@ -75,6 +76,7 @@ public class InstallStart extends Activity {
return;
}
mPackageManager = getPackageManager();
+ mPackageInstaller = mPackageManager.getPackageInstaller();
mUserManager = getSystemService(UserManager.class);
Intent intent = getIntent();
@@ -94,12 +96,11 @@ public class InstallStart extends Activity {
// If the activity was started via a PackageInstaller session, we retrieve the calling
// package from that session
final int sessionId = (isSessionInstall
- ? intent.getIntExtra(PackageInstaller.EXTRA_SESSION_ID, -1)
- : -1);
+ ? intent.getIntExtra(PackageInstaller.EXTRA_SESSION_ID, SessionInfo.INVALID_ID)
+ : SessionInfo.INVALID_ID);
int originatingUidFromSession = callingUid;
- if (callingPackage == null && sessionId != -1) {
- PackageInstaller packageInstaller = getPackageManager().getPackageInstaller();
- PackageInstaller.SessionInfo sessionInfo = packageInstaller.getSessionInfo(sessionId);
+ if (callingPackage == null && sessionId != SessionInfo.INVALID_ID) {
+ PackageInstaller.SessionInfo sessionInfo = mPackageInstaller.getSessionInfo(sessionId);
if (sessionInfo != null) {
callingPackage = sessionInfo.getInstallerPackageName();
callingAttributionTag = sessionInfo.getInstallerAttributionTag();
@@ -188,6 +189,7 @@ public class InstallStart extends Activity {
nextActivity.putExtra(Intent.EXTRA_ORIGINATING_UID, originatingUid);
nextActivity.putExtra(PackageInstallerActivity.EXTRA_ORIGINATING_UID_FROM_SESSION_INFO,
originatingUidFromSession);
+ nextActivity.putExtra(PackageInstallerActivity.EXTRA_IS_TRUSTED_SOURCE, isTrustedSource);
if (isSessionInstall) {
nextActivity.setClass(this, PackageInstallerActivity.class);
@@ -257,7 +259,7 @@ public class InstallStart extends Activity {
private ApplicationInfo getSourceInfo(@Nullable String callingPackage) {
if (callingPackage != null) {
try {
- return getPackageManager().getApplicationInfo(callingPackage, 0);
+ return mPackageManager.getApplicationInfo(callingPackage, 0);
} catch (PackageManager.NameNotFoundException ex) {
// ignore
}
@@ -265,8 +267,6 @@ public class InstallStart extends Activity {
return null;
}
-
- @NonNull
private boolean canPackageQuery(int callingUid, Uri packageUri) {
ProviderInfo info = mPackageManager.resolveContentProvider(packageUri.getAuthority(),
PackageManager.ComponentInfoFlags.of(0));
@@ -295,8 +295,7 @@ public class InstallStart extends Activity {
if (originatingUid == Process.ROOT_UID) {
return true;
}
- PackageInstaller packageInstaller = getPackageManager().getPackageInstaller();
- PackageInstaller.SessionInfo sessionInfo = packageInstaller.getSessionInfo(sessionId);
+ PackageInstaller.SessionInfo sessionInfo = mPackageInstaller.getSessionInfo(sessionId);
if (sessionInfo == null) {
return false;
}
diff --git a/packages/PackageInstaller/src/com/android/packageinstaller/PackageInstallerActivity.java b/packages/PackageInstaller/src/com/android/packageinstaller/PackageInstallerActivity.java
index 45bfe5469172..1b93c10a8c13 100644
--- a/packages/PackageInstaller/src/com/android/packageinstaller/PackageInstallerActivity.java
+++ b/packages/PackageInstaller/src/com/android/packageinstaller/PackageInstallerActivity.java
@@ -86,6 +86,7 @@ public class PackageInstallerActivity extends Activity {
static final String EXTRA_APP_SNIPPET = "EXTRA_APP_SNIPPET";
static final String EXTRA_ORIGINATING_UID_FROM_SESSION_INFO =
"EXTRA_ORIGINATING_UID_FROM_SESSION_INFO";
+ static final String EXTRA_IS_TRUSTED_SOURCE = "EXTRA_IS_TRUSTED_SOURCE";
private static final String ALLOW_UNKNOWN_SOURCES_KEY =
PackageInstallerActivity.class.getName() + "ALLOW_UNKNOWN_SOURCES_KEY";
@@ -304,21 +305,6 @@ public class PackageInstallerActivity extends Activity {
return packagesForUid[0];
}
- private boolean isInstallRequestFromUnknownSource(Intent intent) {
- if (mCallingPackage != null && intent.getBooleanExtra(
- Intent.EXTRA_NOT_UNKNOWN_SOURCE, false)) {
- if (mSourceInfo != null && mSourceInfo.isPrivilegedApp()) {
- // Privileged apps can bypass unknown sources check if they want.
- return false;
- }
- }
- if (mSourceInfo != null && checkPermission(Manifest.permission.INSTALL_PACKAGES,
- -1 /* pid */, mSourceInfo.uid) == PackageManager.PERMISSION_GRANTED) {
- return false;
- }
- return true;
- }
-
private void initiateInstall() {
String pkgName = mPkgInfo.packageName;
// Check if there is already a package on the device with this name
@@ -557,7 +543,7 @@ public class PackageInstallerActivity extends Activity {
* Check if it is allowed to install the package and initiate install if allowed.
*/
private void checkIfAllowedAndInitiateInstall() {
- if (mAllowUnknownSources || !isInstallRequestFromUnknownSource(getIntent())) {
+ if (mAllowUnknownSources || getIntent().getBooleanExtra(EXTRA_IS_TRUSTED_SOURCE, false)) {
if (mLocalLOGV) Log.i(TAG, "install allowed");
initiateInstall();
} else {