am a2875f48: Merge "Notify verifiers that verification is complete" into jb-mr1-dev
* commit 'a2875f481bc40fb5c7e5ae2d475dfb6d557294c0': Notify verifiers that verification is complete
This commit is contained in:
@@ -5758,6 +5758,7 @@ package android.content {
|
|||||||
field public static final java.lang.String ACTION_PACKAGE_REMOVED = "android.intent.action.PACKAGE_REMOVED";
|
field public static final java.lang.String ACTION_PACKAGE_REMOVED = "android.intent.action.PACKAGE_REMOVED";
|
||||||
field public static final java.lang.String ACTION_PACKAGE_REPLACED = "android.intent.action.PACKAGE_REPLACED";
|
field public static final java.lang.String ACTION_PACKAGE_REPLACED = "android.intent.action.PACKAGE_REPLACED";
|
||||||
field public static final java.lang.String ACTION_PACKAGE_RESTARTED = "android.intent.action.PACKAGE_RESTARTED";
|
field public static final java.lang.String ACTION_PACKAGE_RESTARTED = "android.intent.action.PACKAGE_RESTARTED";
|
||||||
|
field public static final java.lang.String ACTION_PACKAGE_VERIFIED = "android.intent.action.PACKAGE_VERIFIED";
|
||||||
field public static final java.lang.String ACTION_PASTE = "android.intent.action.PASTE";
|
field public static final java.lang.String ACTION_PASTE = "android.intent.action.PASTE";
|
||||||
field public static final java.lang.String ACTION_PICK = "android.intent.action.PICK";
|
field public static final java.lang.String ACTION_PICK = "android.intent.action.PICK";
|
||||||
field public static final java.lang.String ACTION_PICK_ACTIVITY = "android.intent.action.PICK_ACTIVITY";
|
field public static final java.lang.String ACTION_PICK_ACTIVITY = "android.intent.action.PICK_ACTIVITY";
|
||||||
@@ -6550,6 +6551,7 @@ package android.content.pm {
|
|||||||
field public static final int COMPONENT_ENABLED_STATE_ENABLED = 1; // 0x1
|
field public static final int COMPONENT_ENABLED_STATE_ENABLED = 1; // 0x1
|
||||||
field public static final int DONT_KILL_APP = 1; // 0x1
|
field public static final int DONT_KILL_APP = 1; // 0x1
|
||||||
field public static final java.lang.String EXTRA_VERIFICATION_ID = "android.content.pm.extra.VERIFICATION_ID";
|
field public static final java.lang.String EXTRA_VERIFICATION_ID = "android.content.pm.extra.VERIFICATION_ID";
|
||||||
|
field public static final java.lang.String EXTRA_VERIFICATION_RESULT = "android.content.pm.extra.VERIFICATION_RESULT";
|
||||||
field public static final java.lang.String FEATURE_AUDIO_LOW_LATENCY = "android.hardware.audio.low_latency";
|
field public static final java.lang.String FEATURE_AUDIO_LOW_LATENCY = "android.hardware.audio.low_latency";
|
||||||
field public static final java.lang.String FEATURE_BLUETOOTH = "android.hardware.bluetooth";
|
field public static final java.lang.String FEATURE_BLUETOOTH = "android.hardware.bluetooth";
|
||||||
field public static final java.lang.String FEATURE_CAMERA = "android.hardware.camera";
|
field public static final java.lang.String FEATURE_CAMERA = "android.hardware.camera";
|
||||||
|
|||||||
@@ -1640,6 +1640,15 @@ public class Intent implements Parcelable, Cloneable {
|
|||||||
@SdkConstant(SdkConstantType.BROADCAST_INTENT_ACTION)
|
@SdkConstant(SdkConstantType.BROADCAST_INTENT_ACTION)
|
||||||
public static final String ACTION_PACKAGE_NEEDS_VERIFICATION = "android.intent.action.PACKAGE_NEEDS_VERIFICATION";
|
public static final String ACTION_PACKAGE_NEEDS_VERIFICATION = "android.intent.action.PACKAGE_NEEDS_VERIFICATION";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Broadcast Action: Sent to the system package verifier when a package is
|
||||||
|
* verified. The data contains the package URI.
|
||||||
|
* <p class="note">
|
||||||
|
* This is a protected intent that can only be sent by the system.
|
||||||
|
*/
|
||||||
|
@SdkConstant(SdkConstantType.BROADCAST_INTENT_ACTION)
|
||||||
|
public static final String ACTION_PACKAGE_VERIFIED = "android.intent.action.PACKAGE_VERIFIED";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Broadcast Action: Resources for a set of packages (which were
|
* Broadcast Action: Resources for a set of packages (which were
|
||||||
* previously unavailable) are currently
|
* previously unavailable) are currently
|
||||||
|
|||||||
@@ -1150,6 +1150,14 @@ public abstract class PackageManager {
|
|||||||
public static final String EXTRA_VERIFICATION_INSTALL_FLAGS
|
public static final String EXTRA_VERIFICATION_INSTALL_FLAGS
|
||||||
= "android.content.pm.extra.VERIFICATION_INSTALL_FLAGS";
|
= "android.content.pm.extra.VERIFICATION_INSTALL_FLAGS";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Extra field name for the result of a verification, either
|
||||||
|
* {@link #VERIFICATION_ALLOW}, or {@link #VERIFICATION_REJECT}.
|
||||||
|
* Passed to package verifiers after a package is verified.
|
||||||
|
*/
|
||||||
|
public static final String EXTRA_VERIFICATION_RESULT
|
||||||
|
= "android.content.pm.extra.VERIFICATION_RESULT";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Retrieve overall information about an application package that is
|
* Retrieve overall information about an application package that is
|
||||||
* installed on the system.
|
* installed on the system.
|
||||||
@@ -2361,12 +2369,19 @@ public abstract class PackageManager {
|
|||||||
* {@link PackageManager#EXTRA_VERIFICATION_ID} Intent extra
|
* {@link PackageManager#EXTRA_VERIFICATION_ID} Intent extra
|
||||||
* @param verificationCodeAtTimeout either
|
* @param verificationCodeAtTimeout either
|
||||||
* {@link PackageManager#VERIFICATION_ALLOW} or
|
* {@link PackageManager#VERIFICATION_ALLOW} or
|
||||||
|
* {@link PackageManager#VERIFICATION_REJECT}. If
|
||||||
|
* {@code verificationCodeAtTimeout} is neither
|
||||||
|
* {@link PackageManager#VERIFICATION_ALLOW} or
|
||||||
|
* {@link PackageManager#VERIFICATION_REJECT}, then
|
||||||
|
* {@code verificationCodeAtTimeout} will default to
|
||||||
* {@link PackageManager#VERIFICATION_REJECT}.
|
* {@link PackageManager#VERIFICATION_REJECT}.
|
||||||
* @param millisecondsToDelay the amount of time requested for the timeout.
|
* @param millisecondsToDelay the amount of time requested for the timeout.
|
||||||
* Must be positive and less than
|
* Must be positive and less than
|
||||||
|
* {@link PackageManager#MAXIMUM_VERIFICATION_TIMEOUT}. If
|
||||||
|
* {@code millisecondsToDelay} is out of bounds,
|
||||||
|
* {@code millisecondsToDelay} will be set to the closest in
|
||||||
|
* bounds value; namely, 0 or
|
||||||
* {@link PackageManager#MAXIMUM_VERIFICATION_TIMEOUT}.
|
* {@link PackageManager#MAXIMUM_VERIFICATION_TIMEOUT}.
|
||||||
* @throws IllegalArgumentException if {@code millisecondsToDelay} is out
|
|
||||||
* of bounds or {@code verificationCodeAtTimeout} is unknown.
|
|
||||||
* @throws SecurityException if the caller does not have the
|
* @throws SecurityException if the caller does not have the
|
||||||
* {@link android.Manifest.permission#PACKAGE_VERIFICATION_AGENT}
|
* {@link android.Manifest.permission#PACKAGE_VERIFICATION_AGENT}
|
||||||
* permission.
|
* permission.
|
||||||
|
|||||||
@@ -43,6 +43,7 @@
|
|||||||
<protected-broadcast android:name="android.intent.action.PACKAGE_DATA_CLEARED" />
|
<protected-broadcast android:name="android.intent.action.PACKAGE_DATA_CLEARED" />
|
||||||
<protected-broadcast android:name="android.intent.action.PACKAGE_FIRST_LAUNCH" />
|
<protected-broadcast android:name="android.intent.action.PACKAGE_FIRST_LAUNCH" />
|
||||||
<protected-broadcast android:name="android.intent.action.PACKAGE_NEEDS_VERIFICATION" />
|
<protected-broadcast android:name="android.intent.action.PACKAGE_NEEDS_VERIFICATION" />
|
||||||
|
<protected-broadcast android:name="android.intent.action.PACKAGE_VERIFIED" />
|
||||||
<protected-broadcast android:name="android.intent.action.UID_REMOVED" />
|
<protected-broadcast android:name="android.intent.action.UID_REMOVED" />
|
||||||
<protected-broadcast android:name="android.intent.action.CONFIGURATION_CHANGED" />
|
<protected-broadcast android:name="android.intent.action.CONFIGURATION_CHANGED" />
|
||||||
<protected-broadcast android:name="android.intent.action.LOCALE_CHANGED" />
|
<protected-broadcast android:name="android.intent.action.LOCALE_CHANGED" />
|
||||||
|
|||||||
@@ -851,11 +851,16 @@ public class PackageManagerService extends IPackageManager.Stub {
|
|||||||
+ args.packageURI.toString());
|
+ args.packageURI.toString());
|
||||||
state.setVerifierResponse(Binder.getCallingUid(),
|
state.setVerifierResponse(Binder.getCallingUid(),
|
||||||
PackageManager.VERIFICATION_ALLOW_WITHOUT_SUFFICIENT);
|
PackageManager.VERIFICATION_ALLOW_WITHOUT_SUFFICIENT);
|
||||||
|
broadcastPackageVerified(verificationId, args.packageURI,
|
||||||
|
PackageManager.VERIFICATION_ALLOW);
|
||||||
try {
|
try {
|
||||||
ret = args.copyApk(mContainerService, true);
|
ret = args.copyApk(mContainerService, true);
|
||||||
} catch (RemoteException e) {
|
} catch (RemoteException e) {
|
||||||
Slog.e(TAG, "Could not contact the ContainerService");
|
Slog.e(TAG, "Could not contact the ContainerService");
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
broadcastPackageVerified(verificationId, args.packageURI,
|
||||||
|
PackageManager.VERIFICATION_REJECT);
|
||||||
}
|
}
|
||||||
|
|
||||||
processPendingInstall(args, ret);
|
processPendingInstall(args, ret);
|
||||||
@@ -884,6 +889,8 @@ public class PackageManagerService extends IPackageManager.Stub {
|
|||||||
int ret;
|
int ret;
|
||||||
if (state.isInstallAllowed()) {
|
if (state.isInstallAllowed()) {
|
||||||
ret = PackageManager.INSTALL_FAILED_INTERNAL_ERROR;
|
ret = PackageManager.INSTALL_FAILED_INTERNAL_ERROR;
|
||||||
|
broadcastPackageVerified(verificationId, args.packageURI,
|
||||||
|
response.code);
|
||||||
try {
|
try {
|
||||||
ret = args.copyApk(mContainerService, true);
|
ret = args.copyApk(mContainerService, true);
|
||||||
} catch (RemoteException e) {
|
} catch (RemoteException e) {
|
||||||
@@ -5641,13 +5648,15 @@ public class PackageManagerService extends IPackageManager.Stub {
|
|||||||
final PackageVerificationResponse response = new PackageVerificationResponse(
|
final PackageVerificationResponse response = new PackageVerificationResponse(
|
||||||
verificationCodeAtTimeout, Binder.getCallingUid());
|
verificationCodeAtTimeout, Binder.getCallingUid());
|
||||||
|
|
||||||
if ((millisecondsToDelay > PackageManager.MAXIMUM_VERIFICATION_TIMEOUT)
|
if (millisecondsToDelay > PackageManager.MAXIMUM_VERIFICATION_TIMEOUT) {
|
||||||
|| (millisecondsToDelay < 0)) {
|
millisecondsToDelay = PackageManager.MAXIMUM_VERIFICATION_TIMEOUT;
|
||||||
throw new IllegalArgumentException("millisecondsToDelay is out of bounds.");
|
}
|
||||||
|
if (millisecondsToDelay < 0) {
|
||||||
|
millisecondsToDelay = 0;
|
||||||
}
|
}
|
||||||
if ((verificationCodeAtTimeout != PackageManager.VERIFICATION_ALLOW)
|
if ((verificationCodeAtTimeout != PackageManager.VERIFICATION_ALLOW)
|
||||||
|| (verificationCodeAtTimeout != PackageManager.VERIFICATION_REJECT)) {
|
&& (verificationCodeAtTimeout != PackageManager.VERIFICATION_REJECT)) {
|
||||||
throw new IllegalArgumentException("verificationCodeAtTimeout is unknown.");
|
verificationCodeAtTimeout = PackageManager.VERIFICATION_REJECT;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((state != null) && !state.timeoutExtended()) {
|
if ((state != null) && !state.timeoutExtended()) {
|
||||||
@@ -5660,6 +5669,17 @@ public class PackageManagerService extends IPackageManager.Stub {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void broadcastPackageVerified(int verificationId, Uri packageUri,
|
||||||
|
int verificationCode) {
|
||||||
|
final Intent intent = new Intent(Intent.ACTION_PACKAGE_VERIFIED);
|
||||||
|
intent.setDataAndType(packageUri, PACKAGE_MIME_TYPE);
|
||||||
|
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
|
||||||
|
intent.putExtra(PackageManager.EXTRA_VERIFICATION_ID, verificationId);
|
||||||
|
intent.putExtra(PackageManager.EXTRA_VERIFICATION_RESULT, verificationCode);
|
||||||
|
|
||||||
|
mContext.sendBroadcast(intent, android.Manifest.permission.PACKAGE_VERIFICATION_AGENT);
|
||||||
|
}
|
||||||
|
|
||||||
private ComponentName matchComponentForVerifier(String packageName,
|
private ComponentName matchComponentForVerifier(String packageName,
|
||||||
List<ResolveInfo> receivers) {
|
List<ResolveInfo> receivers) {
|
||||||
ActivityInfo targetReceiver = null;
|
ActivityInfo targetReceiver = null;
|
||||||
|
|||||||
Reference in New Issue
Block a user