diff options
| author | 2024-03-20 22:45:56 +0000 | |
|---|---|---|
| committer | 2024-03-20 22:45:56 +0000 | |
| commit | cd8c61268b72e67f7eb0bbf326f83a3b4f87fa95 (patch) | |
| tree | 2c02a8bac5fc453f1a864cf51cb7928de0aea654 | |
| parent | 183586796d00a18f587445afd63f07ab78afe04a (diff) | |
| parent | 6138f980b24a1c008f1e5be262b4f348208a8ef6 (diff) | |
Merge "Do not recompute if the source is unknown" into main
| -rw-r--r-- | packages/PackageInstaller/src/com/android/packageinstaller/InstallStart.java | 23 | ||||
| -rw-r--r-- | packages/PackageInstaller/src/com/android/packageinstaller/PackageInstallerActivity.java | 18 |
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 { |