diff options
-rw-r--r-- | Android.mk | 1 | ||||
-rw-r--r-- | cmds/pm/src/com/android/commands/pm/Pm.java | 32 | ||||
-rw-r--r-- | core/java/android/app/ApplicationPackageManager.java | 49 | ||||
-rw-r--r-- | core/java/android/app/PackageInstallObserver.java | 48 | ||||
-rw-r--r-- | core/java/android/content/pm/IPackageInstallObserver2.aidl | 45 | ||||
-rw-r--r-- | core/java/android/content/pm/IPackageManager.aidl | 16 | ||||
-rw-r--r-- | core/java/android/content/pm/PackageManager.java | 139 | ||||
-rw-r--r-- | core/java/android/content/pm/PackageParser.java | 1 | ||||
-rw-r--r-- | core/tests/coretests/src/android/content/pm/PackageManagerTests.java | 10 | ||||
-rwxr-xr-x | services/core/java/com/android/server/pm/PackageManagerService.java | 138 | ||||
-rw-r--r-- | test-runner/src/android/test/mock/MockPackageManager.java | 31 |
11 files changed, 41 insertions, 469 deletions
@@ -120,7 +120,6 @@ LOCAL_SRC_FILES += \ core/java/android/content/pm/IPackageDataObserver.aidl \ core/java/android/content/pm/IPackageDeleteObserver.aidl \ core/java/android/content/pm/IPackageInstallObserver.aidl \ - core/java/android/content/pm/IPackageInstallObserver2.aidl \ core/java/android/content/pm/IPackageManager.aidl \ core/java/android/content/pm/IPackageMoveObserver.aidl \ core/java/android/content/pm/IPackageStatsObserver.aidl \ diff --git a/cmds/pm/src/com/android/commands/pm/Pm.java b/cmds/pm/src/com/android/commands/pm/Pm.java index f92bed2..d513a10 100644 --- a/cmds/pm/src/com/android/commands/pm/Pm.java +++ b/cmds/pm/src/com/android/commands/pm/Pm.java @@ -25,7 +25,7 @@ import android.content.pm.ContainerEncryptionParams; import android.content.pm.FeatureInfo; import android.content.pm.IPackageDataObserver; import android.content.pm.IPackageDeleteObserver; -import android.content.pm.IPackageInstallObserver2; +import android.content.pm.IPackageInstallObserver; import android.content.pm.IPackageManager; import android.content.pm.InstrumentationInfo; import android.content.pm.PackageInfo; @@ -39,7 +39,6 @@ import android.content.pm.VerificationParams; import android.content.res.AssetManager; import android.content.res.Resources; import android.net.Uri; -import android.os.Bundle; import android.os.IUserManager; import android.os.Process; import android.os.RemoteException; @@ -701,21 +700,14 @@ public final class Pm { ActivityManager.dumpPackageStateStatic(FileDescriptor.out, pkg); } - class PackageInstallObserver extends IPackageInstallObserver2.Stub { + class PackageInstallObserver extends IPackageInstallObserver.Stub { boolean finished; int result; - String extraPermission; - String extraPackage; - @Override - public void packageInstalled(String name, Bundle extras, int status) { + public void packageInstalled(String name, int status) { synchronized( this) { finished = true; result = status; - if (status == PackageManager.INSTALL_FAILED_DUPLICATE_PERMISSION) { - extraPermission = extras.getString(PackageManager.EXTRA_EXISTING_PERMISSION); - extraPackage = extras.getString(PackageManager.EXTRA_EXISTING_PACKAGE); - } notifyAll(); } } @@ -725,8 +717,7 @@ public final class Pm { * Converts a failure code into a string by using reflection to find a matching constant * in PackageManager. */ - private String installFailureToString(PackageInstallObserver obs) { - final int result = obs.result; + private String installFailureToString(int result) { Field[] fields = PackageManager.class.getFields(); for (Field f: fields) { if (f.getType() == int.class) { @@ -741,16 +732,7 @@ public final class Pm { // get the int value and compare it to result. try { if (result == f.getInt(null)) { - StringBuilder sb = new StringBuilder(64); - sb.append(fieldName); - if (obs.extraPermission != null) { - sb.append(" perm="); - sb.append(obs.extraPermission); - } - if (obs.extraPackage != null) { - sb.append(" pkg=" + obs.extraPackage); - } - return sb.toString(); + return fieldName; } } catch (IllegalAccessException e) { // this shouldn't happen since we only look for public static fields. @@ -974,7 +956,7 @@ public final class Pm { VerificationParams verificationParams = new VerificationParams(verificationURI, originatingURI, referrerURI, VerificationParams.NO_UID, null); - mPm.installPackageWithVerificationAndEncryptionEtc(apkURI, null, obs, installFlags, + mPm.installPackageWithVerificationAndEncryption(apkURI, obs, installFlags, installerPackageName, verificationParams, encryptionParams); synchronized (obs) { @@ -988,7 +970,7 @@ public final class Pm { System.out.println("Success"); } else { System.err.println("Failure [" - + installFailureToString(obs) + + installFailureToString(obs.result) + "]"); } } diff --git a/core/java/android/app/ApplicationPackageManager.java b/core/java/android/app/ApplicationPackageManager.java index 6ca5244..0615bd9 100644 --- a/core/java/android/app/ApplicationPackageManager.java +++ b/core/java/android/app/ApplicationPackageManager.java @@ -29,7 +29,6 @@ import android.content.pm.FeatureInfo; import android.content.pm.IPackageDataObserver; import android.content.pm.IPackageDeleteObserver; import android.content.pm.IPackageInstallObserver; -import android.content.pm.IPackageInstallObserver2; import android.content.pm.IPackageManager; import android.content.pm.IPackageMoveObserver; import android.content.pm.IPackageStatsObserver; @@ -1074,7 +1073,7 @@ final class ApplicationPackageManager extends PackageManager { public void installPackage(Uri packageURI, IPackageInstallObserver observer, int flags, String installerPackageName) { try { - mPM.installPackageEtc(packageURI, observer, null, flags, installerPackageName); + mPM.installPackage(packageURI, observer, flags, installerPackageName); } catch (RemoteException e) { // Should never happen! } @@ -1085,8 +1084,8 @@ final class ApplicationPackageManager extends PackageManager { int flags, String installerPackageName, Uri verificationURI, ManifestDigest manifestDigest, ContainerEncryptionParams encryptionParams) { try { - mPM.installPackageWithVerificationEtc(packageURI, observer, null, flags, - installerPackageName, verificationURI, manifestDigest, encryptionParams); + mPM.installPackageWithVerification(packageURI, observer, flags, installerPackageName, + verificationURI, manifestDigest, encryptionParams); } catch (RemoteException e) { // Should never happen! } @@ -1097,46 +1096,8 @@ final class ApplicationPackageManager extends PackageManager { IPackageInstallObserver observer, int flags, String installerPackageName, VerificationParams verificationParams, ContainerEncryptionParams encryptionParams) { try { - mPM.installPackageWithVerificationAndEncryptionEtc(packageURI, observer, null, - flags, installerPackageName, verificationParams, encryptionParams); - } catch (RemoteException e) { - // Should never happen! - } - } - - // Expanded observer-API versions - @Override - public void installPackage(Uri packageURI, PackageInstallObserver observer, - int flags, String installerPackageName) { - try { - mPM.installPackageEtc(packageURI, null, observer.mObserver, - flags, installerPackageName); - } catch (RemoteException e) { - // Should never happen! - } - } - - @Override - public void installPackageWithVerification(Uri packageURI, - PackageInstallObserver observer, int flags, String installerPackageName, - Uri verificationURI, ManifestDigest manifestDigest, - ContainerEncryptionParams encryptionParams) { - try { - mPM.installPackageWithVerificationEtc(packageURI, null, observer.mObserver, flags, - installerPackageName, verificationURI, manifestDigest, encryptionParams); - } catch (RemoteException e) { - // Should never happen! - } - } - - @Override - public void installPackageWithVerificationAndEncryption(Uri packageURI, - PackageInstallObserver observer, int flags, String installerPackageName, - VerificationParams verificationParams, ContainerEncryptionParams encryptionParams) { - try { - mPM.installPackageWithVerificationAndEncryptionEtc(packageURI, null, - observer.mObserver, flags, installerPackageName, verificationParams, - encryptionParams); + mPM.installPackageWithVerificationAndEncryption(packageURI, observer, flags, + installerPackageName, verificationParams, encryptionParams); } catch (RemoteException e) { // Should never happen! } diff --git a/core/java/android/app/PackageInstallObserver.java b/core/java/android/app/PackageInstallObserver.java deleted file mode 100644 index 78c2ec9..0000000 --- a/core/java/android/app/PackageInstallObserver.java +++ /dev/null @@ -1,48 +0,0 @@ -/* - * Copyright (C) 2014 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package android.app; - -import android.content.pm.IPackageInstallObserver2; -import android.os.Bundle; -import android.os.IBinder; -import android.os.RemoteException; - -/** - * @hide - * - * New-style observer for package installers to use. - */ -public class PackageInstallObserver { - IPackageInstallObserver2.Stub mObserver = new IPackageInstallObserver2.Stub() { - @Override - public void packageInstalled(String pkgName, Bundle extras, int result) - throws RemoteException { - PackageInstallObserver.this.packageInstalled(pkgName, extras, result); - } - }; - - /** - * This method will be called to report the result of the package installation attempt. - * - * @param pkgName Name of the package whose installation was attempted - * @param extras If non-null, this Bundle contains extras providing additional information - * about the install result - * @param result The numeric success or failure code indicating the basic outcome - */ - public void packageInstalled(String pkgName, Bundle extras, int result) { - } -} diff --git a/core/java/android/content/pm/IPackageInstallObserver2.aidl b/core/java/android/content/pm/IPackageInstallObserver2.aidl deleted file mode 100644 index eff7bfe..0000000 --- a/core/java/android/content/pm/IPackageInstallObserver2.aidl +++ /dev/null @@ -1,45 +0,0 @@ -/* -** -** Copyright 2014, The Android Open Source Project -** -** Licensed under the Apache License, Version 2.0 (the "License"); -** you may not use this file except in compliance with the License. -** You may obtain a copy of the License at -** -** http://www.apache.org/licenses/LICENSE-2.0 -** -** Unless required by applicable law or agreed to in writing, software -** distributed under the License is distributed on an "AS IS" BASIS, -** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -** See the License for the specific language governing permissions and -** limitations under the License. -*/ - -package android.content.pm; - -import android.os.Bundle; - -/** - * API for installation callbacks from the Package Manager. In certain result cases - * additional information will be provided. - * @hide - */ -oneway interface IPackageInstallObserver2 { - /** - * The install operation has completed. {@code returnCode} holds a numeric code - * indicating success or failure. In certain cases the {@code extras} Bundle will - * contain additional details: - * - * <p><table> - * <tr> - * <td>INSTALL_FAILED_DUPLICATE_PERMISSION</td> - * <td>Two strings are provided in the extras bundle: EXTRA_EXISTING_PERMISSION - * is the name of the permission that the app is attempting to define, and - * EXTRA_EXISTING_PACKAGE is the package name of the app which has already - * defined the permission.</td> - * </tr> - * </table> - */ - void packageInstalled(in String packageName, in Bundle extras, int returnCode); -} - diff --git a/core/java/android/content/pm/IPackageManager.aidl b/core/java/android/content/pm/IPackageManager.aidl index ae0899f..c9fb530 100644 --- a/core/java/android/content/pm/IPackageManager.aidl +++ b/core/java/android/content/pm/IPackageManager.aidl @@ -25,7 +25,6 @@ import android.content.pm.ApplicationInfo; import android.content.pm.ContainerEncryptionParams; import android.content.pm.FeatureInfo; import android.content.pm.IPackageInstallObserver; -import android.content.pm.IPackageInstallObserver2; import android.content.pm.IPackageDeleteObserver; import android.content.pm.IPackageDataObserver; import android.content.pm.IPackageMoveObserver; @@ -407,21 +406,6 @@ interface IPackageManager { in VerificationParams verificationParams, in ContainerEncryptionParams encryptionParams); - /** Expanded observer versions */ - void installPackageEtc(in Uri packageURI, IPackageInstallObserver observer, - IPackageInstallObserver2 observer2, int flags, in String installerPackageName); - - void installPackageWithVerificationEtc(in Uri packageURI, - in IPackageInstallObserver observer, IPackageInstallObserver2 observer2, - int flags, in String installerPackageName, in Uri verificationURI, - in ManifestDigest manifestDigest, in ContainerEncryptionParams encryptionParams); - - void installPackageWithVerificationAndEncryptionEtc(in Uri packageURI, - in IPackageInstallObserver observer, in IPackageInstallObserver2 observer2, - int flags, in String installerPackageName, - in VerificationParams verificationParams, - in ContainerEncryptionParams encryptionParams); - int installExistingPackageAsUser(String packageName, int userId); void verifyPendingInstall(int id, int verificationCode); diff --git a/core/java/android/content/pm/PackageManager.java b/core/java/android/content/pm/PackageManager.java index ca66bae..e86833b 100644 --- a/core/java/android/content/pm/PackageManager.java +++ b/core/java/android/content/pm/PackageManager.java @@ -19,7 +19,6 @@ package android.content.pm; import android.annotation.IntDef; import android.annotation.SdkConstant; import android.annotation.SdkConstant.SdkConstantType; -import android.app.PackageInstallObserver; import android.content.ComponentName; import android.content.Context; import android.content.Intent; @@ -684,20 +683,6 @@ public abstract class PackageManager { public static final int INSTALL_FAILED_USER_RESTRICTED = -111; /** - * Installation failed return code: this is passed to the {@link IPackageInstallObserver} by - * {@link #installPackage(android.net.Uri, IPackageInstallObserver, int)} - * if the system failed to install the package because it is attempting to define a - * permission that is already defined by some existing package. - * - * <p>The package name of the app which has already defined the permission is passed to - * a {@link IPackageInstallObserver2}, if any, as the {@link #EXTRA_EXISTING_PACKAGE} - * string extra; and the name of the permission being redefined is passed in the - * {@link #EXTRA_EXISTING_PERMISSION} string extra. - * @hide - */ - public static final int INSTALL_FAILED_DUPLICATE_PERMISSION = -112; - - /** * Flag parameter for {@link #deletePackage} to indicate that you don't want to delete the * package's data directory. * @@ -1405,24 +1390,6 @@ public abstract class PackageManager { = "android.content.pm.extra.PERMISSION_LIST"; /** - * String extra for {@link IPackageInstallObserver2} in the 'extras' Bundle in case of - * {@link #INSTALL_FAILED_DUPLICATE_PERMISSION}. This extra names the package which provides - * the existing definition for the permission. - * @hide - */ - public static final String EXTRA_EXISTING_PACKAGE - = "android.content.pm.extra.EXISTING_PACKAGE"; - - /** - * String extra for {@link IPackageInstallObserver2} in the 'extras' Bundle in case of - * {@link #INSTALL_FAILED_DUPLICATE_PERMISSION}. This extra names the permission that is - * being redundantly defined by the package being installed. - * @hide - */ - public static final String EXTRA_EXISTING_PERMISSION - = "android.content.pm.extra.EXISTING_PERMISSION"; - - /** * Retrieve overall information about an application package that is * installed on the system. * <p> @@ -2785,14 +2752,11 @@ public abstract class PackageManager { * 'content:' URI. * @param observer An observer callback to get notified when the package installation is * complete. {@link IPackageInstallObserver#packageInstalled(String, int)} will be - * called when that happens. This parameter must not be null. + * called when that happens. observer may be null to indicate that no callback is desired. * @param flags - possible values: {@link #INSTALL_FORWARD_LOCK}, * {@link #INSTALL_REPLACE_EXISTING}, {@link #INSTALL_ALLOW_TEST}. * @param installerPackageName Optional package name of the application that is performing the * installation. This identifies which market the package came from. - * @deprecated Use {@link #installPackage(Uri, IPackageInstallObserver2, int, String)} - * instead. This method will continue to be supported but the older observer interface - * will not get additional failure details. */ public abstract void installPackage( Uri packageURI, IPackageInstallObserver observer, int flags, @@ -2808,7 +2772,8 @@ public abstract class PackageManager { * @param observer An observer callback to get notified when the package * installation is complete. * {@link IPackageInstallObserver#packageInstalled(String, int)} - * will be called when that happens. This parameter must not be null. + * will be called when that happens. observer may be null to + * indicate that no callback is desired. * @param flags - possible values: {@link #INSTALL_FORWARD_LOCK}, * {@link #INSTALL_REPLACE_EXISTING}, {@link #INSTALL_ALLOW_TEST} * . @@ -2824,10 +2789,6 @@ public abstract class PackageManager { * these parameters describing the encryption and authentication * used. May be {@code null}. * @hide - * @deprecated Use {@link #installPackageWithVerification(Uri, IPackageInstallObserver2, - * int, String, Uri, ManifestDigest, ContainerEncryptionParams)} instead. This method will - * continue to be supported but the older observer interface will not get additional failure - * details. */ public abstract void installPackageWithVerification(Uri packageURI, IPackageInstallObserver observer, int flags, String installerPackageName, @@ -2844,7 +2805,8 @@ public abstract class PackageManager { * @param observer An observer callback to get notified when the package * installation is complete. * {@link IPackageInstallObserver#packageInstalled(String, int)} - * will be called when that happens. This parameter must not be null. + * will be called when that happens. observer may be null to + * indicate that no callback is desired. * @param flags - possible values: {@link #INSTALL_FORWARD_LOCK}, * {@link #INSTALL_REPLACE_EXISTING}, {@link #INSTALL_ALLOW_TEST} * . @@ -2858,103 +2820,12 @@ public abstract class PackageManager { * used. May be {@code null}. * * @hide - * @deprecated Use {@link #installPackageWithVerificationAndEncryption(Uri, - * IPackageInstallObserver2, int, String, VerificationParams, - * ContainerEncryptionParams)} instead. This method will continue to be - * supported but the older observer interface will not get additional failure details. */ - @Deprecated public abstract void installPackageWithVerificationAndEncryption(Uri packageURI, IPackageInstallObserver observer, int flags, String installerPackageName, VerificationParams verificationParams, ContainerEncryptionParams encryptionParams); - // Package-install variants that take the new, expanded form of observer interface. - // Note that these *also* take the original observer type and will redundantly - // report the same information to that observer if supplied; but it is not required. - - /** - * @hide - * - * Install a package. Since this may take a little while, the result will - * be posted back to the given observer. An installation will fail if the calling context - * lacks the {@link android.Manifest.permission#INSTALL_PACKAGES} permission, if the - * package named in the package file's manifest is already installed, or if there's no space - * available on the device. - * - * @param packageURI The location of the package file to install. This can be a 'file:' or a - * 'content:' URI. - * @param observer An observer callback to get notified when the package installation is - * complete. {@link PackageInstallObserver#packageInstalled(String, Bundle, int)} will be - * called when that happens. This parameter must not be null. - * @param flags - possible values: {@link #INSTALL_FORWARD_LOCK}, - * {@link #INSTALL_REPLACE_EXISTING}, {@link #INSTALL_ALLOW_TEST}. - * @param installerPackageName Optional package name of the application that is performing the - * installation. This identifies which market the package came from. - */ - public abstract void installPackage( - Uri packageURI, PackageInstallObserver observer, - int flags, String installerPackageName); - - /** - * Similar to - * {@link #installPackage(Uri, IPackageInstallObserver, int, String)} but - * with an extra verification file provided. - * - * @param packageURI The location of the package file to install. This can - * be a 'file:' or a 'content:' URI. - * @param observer An observer callback to get notified when the package installation is - * complete. {@link PackageInstallObserver#packageInstalled(String, Bundle, int)} will be - * called when that happens. This parameter must not be null. - * @param flags - possible values: {@link #INSTALL_FORWARD_LOCK}, - * {@link #INSTALL_REPLACE_EXISTING}, {@link #INSTALL_ALLOW_TEST} - * . - * @param installerPackageName Optional package name of the application that - * is performing the installation. This identifies which market - * the package came from. - * @param verificationURI The location of the supplementary verification - * file. This can be a 'file:' or a 'content:' URI. May be - * {@code null}. - * @param manifestDigest an object that holds the digest of the package - * which can be used to verify ownership. May be {@code null}. - * @param encryptionParams if the package to be installed is encrypted, - * these parameters describing the encryption and authentication - * used. May be {@code null}. - * @hide - */ - public abstract void installPackageWithVerification(Uri packageURI, - PackageInstallObserver observer, int flags, String installerPackageName, - Uri verificationURI, ManifestDigest manifestDigest, - ContainerEncryptionParams encryptionParams); - - /** - * Similar to - * {@link #installPackage(Uri, IPackageInstallObserver, int, String)} but - * with an extra verification information provided. - * - * @param packageURI The location of the package file to install. This can - * be a 'file:' or a 'content:' URI. - * @param observer An observer callback to get notified when the package installation is - * complete. {@link PackageInstallObserver#packageInstalled(String, Bundle, int)} will be - * called when that happens. This parameter must not be null. - * @param flags - possible values: {@link #INSTALL_FORWARD_LOCK}, - * {@link #INSTALL_REPLACE_EXISTING}, {@link #INSTALL_ALLOW_TEST} - * . - * @param installerPackageName Optional package name of the application that - * is performing the installation. This identifies which market - * the package came from. - * @param verificationParams an object that holds signal information to - * assist verification. May be {@code null}. - * @param encryptionParams if the package to be installed is encrypted, - * these parameters describing the encryption and authentication - * used. May be {@code null}. - * - * @hide - */ - public abstract void installPackageWithVerificationAndEncryption(Uri packageURI, - PackageInstallObserver observer, int flags, String installerPackageName, - VerificationParams verificationParams, ContainerEncryptionParams encryptionParams); - /** * If there is already an application with the given package name installed * on the system for other users, also install it for the calling user. diff --git a/core/java/android/content/pm/PackageParser.java b/core/java/android/content/pm/PackageParser.java index 8898beb..cf44ad8 100644 --- a/core/java/android/content/pm/PackageParser.java +++ b/core/java/android/content/pm/PackageParser.java @@ -1105,6 +1105,7 @@ public class PackageParser { if (!parseUsesPermission(pkg, res, parser, attrs, outError)) { return null; } + } else if (tagName.equals("uses-configuration")) { ConfigurationInfo cPref = new ConfigurationInfo(); sa = res.obtainAttributes(attrs, diff --git a/core/tests/coretests/src/android/content/pm/PackageManagerTests.java b/core/tests/coretests/src/android/content/pm/PackageManagerTests.java index e77564f..04f8009 100644 --- a/core/tests/coretests/src/android/content/pm/PackageManagerTests.java +++ b/core/tests/coretests/src/android/content/pm/PackageManagerTests.java @@ -21,7 +21,6 @@ import static libcore.io.OsConstants.*; import com.android.frameworks.coretests.R; import com.android.internal.content.PackageHelper; -import android.app.PackageInstallObserver; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; @@ -32,7 +31,6 @@ import android.content.pm.PackageManager.NameNotFoundException; import android.content.res.Resources; import android.content.res.Resources.NotFoundException; import android.net.Uri; -import android.os.Bundle; import android.os.Environment; import android.os.FileUtils; import android.os.IBinder; @@ -119,12 +117,12 @@ public class PackageManagerTests extends AndroidTestCase { super.tearDown(); } - private class TestInstallObserver extends PackageInstallObserver { + private class PackageInstallObserver extends IPackageInstallObserver.Stub { public int returnCode; private boolean doneFlag = false; - public void packageInstalled(String packageName, Bundle extras, int returnCode) { + public void packageInstalled(String packageName, int returnCode) { synchronized (this) { this.returnCode = returnCode; doneFlag = true; @@ -205,7 +203,7 @@ public class PackageManagerTests extends AndroidTestCase { public void invokeInstallPackage(Uri packageURI, int flags, GenericReceiver receiver, boolean shouldSucceed) { - TestInstallObserver observer = new TestInstallObserver(); + PackageInstallObserver observer = new PackageInstallObserver(); mContext.registerReceiver(receiver, receiver.filter); try { // Wait on observer @@ -263,7 +261,7 @@ public class PackageManagerTests extends AndroidTestCase { } public void invokeInstallPackageFail(Uri packageURI, int flags, int expectedResult) { - TestInstallObserver observer = new TestInstallObserver(); + PackageInstallObserver observer = new PackageInstallObserver(); try { // Wait on observer synchronized (observer) { diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java index ed54e47..a01c586 100755 --- a/services/core/java/com/android/server/pm/PackageManagerService.java +++ b/services/core/java/com/android/server/pm/PackageManagerService.java @@ -69,7 +69,6 @@ import android.content.pm.FeatureInfo; import android.content.pm.IPackageDataObserver; import android.content.pm.IPackageDeleteObserver; import android.content.pm.IPackageInstallObserver; -import android.content.pm.IPackageInstallObserver2; import android.content.pm.IPackageManager; import android.content.pm.IPackageMoveObserver; import android.content.pm.IPackageStatsObserver; @@ -341,7 +340,7 @@ public class PackageManagerService extends IPackageManager.Stub { // Lock for state used when installing and doing other long running // operations. Methods that must be called with this lock held have - // the suffix "LI". + // the prefix "LI". final Object mInstallLock = new Object(); // These are the directories in the 3rd party applications installed dir @@ -917,14 +916,6 @@ public class PackageManagerService extends IPackageManager.Stub { Slog.i(TAG, "Observer no longer exists."); } } - if (args.observer2 != null) { - try { - Bundle extras = extrasForInstallResult(res); - args.observer2.packageInstalled(res.name, extras, res.returnCode); - } catch (RemoteException e) { - Slog.i(TAG, "Observer no longer exists."); - } - } } else { Slog.e(TAG, "Bogus post-install token " + msg.arg1); } @@ -1053,19 +1044,6 @@ public class PackageManagerService extends IPackageManager.Stub { } } - Bundle extrasForInstallResult(PackageInstalledInfo res) { - Bundle extras = null; - switch (res.returnCode) { - case PackageManager.INSTALL_FAILED_DUPLICATE_PERMISSION: { - extras = new Bundle(); - extras.putString(PackageManager.EXTRA_EXISTING_PERMISSION, res.origPermission); - extras.putString(PackageManager.EXTRA_EXISTING_PACKAGE, res.origPackage); - break; - } - } - return extras; - } - void scheduleWriteSettingsLocked() { if (!mHandler.hasMessages(WRITE_SETTINGS)) { mHandler.sendEmptyMessageDelayed(WRITE_SETTINGS, WRITE_SETTINGS_DELAY); @@ -6794,24 +6772,18 @@ public class PackageManagerService extends IPackageManager.Stub { private final boolean mIsPrivileged; } - /* - * The old-style observer methods all just trampoline to the newer signature with - * expanded install observer API. The older API continues to work but does not - * supply the additional details of the Observer2 API. - */ - /* Called when a downloaded package installation has been confirmed by the user */ public void installPackage( final Uri packageURI, final IPackageInstallObserver observer, final int flags) { - installPackageEtc(packageURI, observer, null, flags, null); + installPackage(packageURI, observer, flags, null); } /* Called when a downloaded package installation has been confirmed by the user */ public void installPackage( final Uri packageURI, final IPackageInstallObserver observer, final int flags, final String installerPackageName) { - installPackageWithVerificationEtc(packageURI, observer, null, flags, - installerPackageName, null, null, null); + installPackageWithVerification(packageURI, observer, flags, installerPackageName, null, + null, null); } @Override @@ -6820,67 +6792,20 @@ public class PackageManagerService extends IPackageManager.Stub { ManifestDigest manifestDigest, ContainerEncryptionParams encryptionParams) { VerificationParams verificationParams = new VerificationParams(verificationURI, null, null, VerificationParams.NO_UID, manifestDigest); - installPackageWithVerificationAndEncryptionEtc(packageURI, observer, null, flags, + installPackageWithVerificationAndEncryption(packageURI, observer, flags, installerPackageName, verificationParams, encryptionParams); } public void installPackageWithVerificationAndEncryption(Uri packageURI, IPackageInstallObserver observer, int flags, String installerPackageName, VerificationParams verificationParams, ContainerEncryptionParams encryptionParams) { - installPackageWithVerificationAndEncryptionEtc(packageURI, observer, null, flags, - installerPackageName, verificationParams, encryptionParams); - } - - /* - * And here are the "live" versions that take both observer arguments - */ - public void installPackageEtc( - final Uri packageURI, final IPackageInstallObserver observer, - IPackageInstallObserver2 observer2, final int flags) { - installPackageEtc(packageURI, observer, observer2, flags, null); - } - - public void installPackageEtc( - final Uri packageURI, final IPackageInstallObserver observer, - final IPackageInstallObserver2 observer2, final int flags, - final String installerPackageName) { - installPackageWithVerificationEtc(packageURI, observer, observer2, flags, - installerPackageName, null, null, null); - } - - @Override - public void installPackageWithVerificationEtc(Uri packageURI, IPackageInstallObserver observer, - IPackageInstallObserver2 observer2, - int flags, String installerPackageName, Uri verificationURI, - ManifestDigest manifestDigest, ContainerEncryptionParams encryptionParams) { - VerificationParams verificationParams = new VerificationParams(verificationURI, null, null, - VerificationParams.NO_UID, manifestDigest); - installPackageWithVerificationAndEncryptionEtc(packageURI, observer, observer2, flags, - installerPackageName, verificationParams, encryptionParams); - } - - /* - * All of the installPackage...*() methods redirect to this one for the master implementation - */ - public void installPackageWithVerificationAndEncryptionEtc(Uri packageURI, - IPackageInstallObserver observer, IPackageInstallObserver2 observer2, - int flags, String installerPackageName, - VerificationParams verificationParams, ContainerEncryptionParams encryptionParams) { - if (observer == null && observer2 == null) { - throw new IllegalArgumentException("No install observer supplied"); - } mContext.enforceCallingOrSelfPermission(android.Manifest.permission.INSTALL_PACKAGES, null); final int uid = Binder.getCallingUid(); if (isUserRestricted(UserHandle.getUserId(uid), UserManager.DISALLOW_INSTALL_APPS)) { try { - if (observer != null) { - observer.packageInstalled("", PackageManager.INSTALL_FAILED_USER_RESTRICTED); - } - if (observer2 != null) { - observer2.packageInstalled("", null, PackageManager.INSTALL_FAILED_USER_RESTRICTED); - } + observer.packageInstalled("", PackageManager.INSTALL_FAILED_USER_RESTRICTED); } catch (RemoteException re) { } return; @@ -6907,8 +6832,8 @@ public class PackageManagerService extends IPackageManager.Stub { verificationParams.setInstallerUid(uid); final Message msg = mHandler.obtainMessage(INIT_COPY); - msg.obj = new InstallParams(packageURI, observer, observer2, filteredFlags, - installerPackageName, verificationParams, encryptionParams, user); + msg.obj = new InstallParams(packageURI, observer, filteredFlags, installerPackageName, + verificationParams, encryptionParams, user); mHandler.sendMessage(msg); } @@ -7597,7 +7522,6 @@ public class PackageManagerService extends IPackageManager.Stub { class InstallParams extends HandlerParams { final IPackageInstallObserver observer; - final IPackageInstallObserver2 observer2; int flags; private final Uri mPackageURI; @@ -7609,14 +7533,13 @@ public class PackageManagerService extends IPackageManager.Stub { final ContainerEncryptionParams encryptionParams; InstallParams(Uri packageURI, - IPackageInstallObserver observer, IPackageInstallObserver2 observer2, - int flags, String installerPackageName, VerificationParams verificationParams, + IPackageInstallObserver observer, int flags, + String installerPackageName, VerificationParams verificationParams, ContainerEncryptionParams encryptionParams, UserHandle user) { super(user); this.mPackageURI = packageURI; this.flags = flags; this.observer = observer; - this.observer2 = observer2; this.installerPackageName = installerPackageName; this.verificationParams = verificationParams; this.encryptionParams = encryptionParams; @@ -8186,7 +8109,6 @@ public class PackageManagerService extends IPackageManager.Stub { static abstract class InstallArgs { final IPackageInstallObserver observer; - final IPackageInstallObserver2 observer2; // Always refers to PackageManager flags only final int flags; final Uri packageURI; @@ -8194,14 +8116,12 @@ public class PackageManagerService extends IPackageManager.Stub { final ManifestDigest manifestDigest; final UserHandle user; - InstallArgs(Uri packageURI, - IPackageInstallObserver observer, IPackageInstallObserver2 observer2, - int flags, String installerPackageName, ManifestDigest manifestDigest, + InstallArgs(Uri packageURI, IPackageInstallObserver observer, int flags, + String installerPackageName, ManifestDigest manifestDigest, UserHandle user) { this.packageURI = packageURI; this.flags = flags; this.observer = observer; - this.observer2 = observer2; this.installerPackageName = installerPackageName; this.manifestDigest = manifestDigest; this.user = user; @@ -8258,13 +8178,13 @@ public class PackageManagerService extends IPackageManager.Stub { boolean created = false; FileInstallArgs(InstallParams params) { - super(params.getPackageUri(), params.observer, params.observer2, params.flags, + super(params.getPackageUri(), params.observer, params.flags, params.installerPackageName, params.getManifestDigest(), params.getUser()); } FileInstallArgs(String fullCodePath, String fullResourcePath, String nativeLibraryPath) { - super(null, null, null, 0, null, null, null); + super(null, null, 0, null, null, null); File codeFile = new File(fullCodePath); installDir = codeFile.getParentFile(); codeFileName = fullCodePath; @@ -8273,7 +8193,7 @@ public class PackageManagerService extends IPackageManager.Stub { } FileInstallArgs(Uri packageURI, String pkgName, String dataDir) { - super(packageURI, null, null, 0, null, null, null); + super(packageURI, null, 0, null, null, null); installDir = isFwdLocked() ? mDrmAppPrivateInstallDir : mAppInstallDir; String apkName = getNextCodePath(null, pkgName, ".apk"); codeFileName = new File(installDir, apkName + ".apk").getPath(); @@ -8594,14 +8514,14 @@ public class PackageManagerService extends IPackageManager.Stub { String libraryPath; AsecInstallArgs(InstallParams params) { - super(params.getPackageUri(), params.observer, params.observer2, params.flags, + super(params.getPackageUri(), params.observer, params.flags, params.installerPackageName, params.getManifestDigest(), params.getUser()); } AsecInstallArgs(String fullCodePath, String fullResourcePath, String nativeLibraryPath, boolean isExternal, boolean isForwardLocked) { - super(null, null, null, (isExternal ? PackageManager.INSTALL_EXTERNAL : 0) + super(null, null, (isExternal ? PackageManager.INSTALL_EXTERNAL : 0) | (isForwardLocked ? PackageManager.INSTALL_FORWARD_LOCK : 0), null, null, null); // Extract cid from fullCodePath @@ -8613,7 +8533,7 @@ public class PackageManagerService extends IPackageManager.Stub { } AsecInstallArgs(String cid, boolean isForwardLocked) { - super(null, null, null, (isAsecExternal(cid) ? PackageManager.INSTALL_EXTERNAL : 0) + super(null, null, (isAsecExternal(cid) ? PackageManager.INSTALL_EXTERNAL : 0) | (isForwardLocked ? PackageManager.INSTALL_FORWARD_LOCK : 0), null, null, null); this.cid = cid; @@ -8621,7 +8541,7 @@ public class PackageManagerService extends IPackageManager.Stub { } AsecInstallArgs(Uri packageURI, String cid, boolean isExternal, boolean isForwardLocked) { - super(packageURI, null, null, (isExternal ? PackageManager.INSTALL_EXTERNAL : 0) + super(packageURI, null, (isExternal ? PackageManager.INSTALL_EXTERNAL : 0) | (isForwardLocked ? PackageManager.INSTALL_FORWARD_LOCK : 0), null, null, null); this.cid = cid; @@ -8955,10 +8875,6 @@ public class PackageManagerService extends IPackageManager.Stub { PackageParser.Package pkg; int returnCode; PackageRemovedInfo removedInfo; - - // In some error cases we want to convey more info back to the observer - String origPackage; - String origPermission; } /* @@ -9383,22 +9299,6 @@ public class PackageManagerService extends IPackageManager.Stub { String oldCodePath = null; boolean systemApp = false; synchronized (mPackages) { - // Check whether the newly-scanned package wants to define an already-defined perm - int N = pkg.permissions.size(); - for (int i = 0; i < N; i++) { - PackageParser.Permission perm = pkg.permissions.get(i); - BasePermission bp = mSettings.mPermissions.get(perm.info.name); - if (bp != null) { - Slog.w(TAG, "Package " + pkg.packageName - + " attempting to redeclare permission " + perm.info.name - + " already owned by " + bp.sourcePackage); - res.returnCode = PackageManager.INSTALL_FAILED_DUPLICATE_PERMISSION; - res.origPermission = perm.info.name; - res.origPackage = bp.sourcePackage; - return; - } - } - // Check if installing already existing package if ((pFlags&PackageManager.INSTALL_REPLACE_EXISTING) != 0) { String oldName = mSettings.mRenamedPackages.get(pkgName); diff --git a/test-runner/src/android/test/mock/MockPackageManager.java b/test-runner/src/android/test/mock/MockPackageManager.java index daef37a..118cba4 100644 --- a/test-runner/src/android/test/mock/MockPackageManager.java +++ b/test-runner/src/android/test/mock/MockPackageManager.java @@ -16,7 +16,6 @@ package android.test.mock; -import android.app.PackageInstallObserver; import android.content.ComponentName; import android.content.Intent; import android.content.IntentFilter; @@ -665,34 +664,4 @@ public class MockPackageManager extends PackageManager { public VerifierDeviceIdentity getVerifierDeviceIdentity() { throw new UnsupportedOperationException(); } - - /** - * @hide - */ - @Override - public void installPackage(Uri packageURI, PackageInstallObserver observer, - int flags, String installerPackageName) { - throw new UnsupportedOperationException(); - } - - /** - * @hide - */ - @Override - public void installPackageWithVerification(Uri packageURI, - PackageInstallObserver observer, int flags, String installerPackageName, - Uri verificationURI, ManifestDigest manifestDigest, - ContainerEncryptionParams encryptionParams) { - throw new UnsupportedOperationException(); - } - - /** - * @hide - */ - @Override - public void installPackageWithVerificationAndEncryption(Uri packageURI, - PackageInstallObserver observer, int flags, String installerPackageName, - VerificationParams verificationParams, ContainerEncryptionParams encryptionParams) { - throw new UnsupportedOperationException(); - } } |