diff options
| -rw-r--r-- | services/core/java/com/android/server/pm/PackageInstallerService.java | 72 | ||||
| -rw-r--r-- | services/core/java/com/android/server/pm/PackageInstallerSession.java | 87 |
2 files changed, 79 insertions, 80 deletions
diff --git a/services/core/java/com/android/server/pm/PackageInstallerService.java b/services/core/java/com/android/server/pm/PackageInstallerService.java index cdc37364ca79..2ff3d2a3a938 100644 --- a/services/core/java/com/android/server/pm/PackageInstallerService.java +++ b/services/core/java/com/android/server/pm/PackageInstallerService.java @@ -47,7 +47,6 @@ import android.graphics.Bitmap; import android.net.Uri; import android.os.Binder; import android.os.Build; -import android.os.Bundle; import android.os.Environment; import android.os.Handler; import android.os.HandlerThread; @@ -1038,80 +1037,11 @@ public class PackageInstallerService extends IPackageInstaller.Stub implements } } - static void sendPendingStreaming(Context context, IntentSender target, int sessionId, - Throwable cause) { - final Intent intent = new Intent(); - intent.putExtra(PackageInstaller.EXTRA_SESSION_ID, sessionId); - intent.putExtra(PackageInstaller.EXTRA_STATUS, PackageInstaller.STATUS_PENDING_STREAMING); - if (cause != null && !TextUtils.isEmpty(cause.getMessage())) { - intent.putExtra(PackageInstaller.EXTRA_STATUS_MESSAGE, - "Staging Image Not Ready [" + cause.getMessage() + "]"); - } else { - intent.putExtra(PackageInstaller.EXTRA_STATUS_MESSAGE, "Staging Image Not Ready"); - } - try { - target.sendIntent(context, 0, intent, null, null); - } catch (SendIntentException ignored) { - } - } - - static void sendOnUserActionRequired(Context context, IntentSender target, int sessionId, - Intent intent) { - final Intent fillIn = new Intent(); - fillIn.putExtra(PackageInstaller.EXTRA_SESSION_ID, sessionId); - fillIn.putExtra(PackageInstaller.EXTRA_STATUS, PackageInstaller.STATUS_PENDING_USER_ACTION); - fillIn.putExtra(Intent.EXTRA_INTENT, intent); - try { - target.sendIntent(context, 0, fillIn, null, null); - } catch (SendIntentException ignored) { - } - } - - static void sendOnPackageInstalled(Context context, IntentSender target, int sessionId, - boolean showNotification, int userId, String basePackageName, int returnCode, - String msg, Bundle extras) { - if (PackageManager.INSTALL_SUCCEEDED == returnCode && showNotification) { - boolean update = (extras != null) && extras.getBoolean(Intent.EXTRA_REPLACING); - Notification notification = buildSuccessNotification(context, - context.getResources() - .getString(update ? R.string.package_updated_device_owner : - R.string.package_installed_device_owner), - basePackageName, - userId); - if (notification != null) { - NotificationManager notificationManager = (NotificationManager) - context.getSystemService(Context.NOTIFICATION_SERVICE); - notificationManager.notify(basePackageName, - SystemMessage.NOTE_PACKAGE_STATE, - notification); - } - } - final Intent fillIn = new Intent(); - fillIn.putExtra(PackageInstaller.EXTRA_PACKAGE_NAME, basePackageName); - fillIn.putExtra(PackageInstaller.EXTRA_SESSION_ID, sessionId); - fillIn.putExtra(PackageInstaller.EXTRA_STATUS, - PackageManager.installStatusToPublicStatus(returnCode)); - fillIn.putExtra(PackageInstaller.EXTRA_STATUS_MESSAGE, - PackageManager.installStatusToString(returnCode, msg)); - fillIn.putExtra(PackageInstaller.EXTRA_LEGACY_STATUS, returnCode); - if (extras != null) { - final String existing = extras.getString( - PackageManager.EXTRA_FAILURE_EXISTING_PACKAGE); - if (!TextUtils.isEmpty(existing)) { - fillIn.putExtra(PackageInstaller.EXTRA_OTHER_PACKAGE_NAME, existing); - } - } - try { - target.sendIntent(context, 0, fillIn, null, null); - } catch (SendIntentException ignored) { - } - } - /** * Build a notification for package installation / deletion by device owners that is shown if * the operation succeeds. */ - private static Notification buildSuccessNotification(Context context, String contentText, + static Notification buildSuccessNotification(Context context, String contentText, String basePackageName, int userId) { PackageInfo packageInfo = null; try { diff --git a/services/core/java/com/android/server/pm/PackageInstallerSession.java b/services/core/java/com/android/server/pm/PackageInstallerSession.java index 28d7c13d5b13..45a25a04e971 100644 --- a/services/core/java/com/android/server/pm/PackageInstallerSession.java +++ b/services/core/java/com/android/server/pm/PackageInstallerSession.java @@ -51,6 +51,8 @@ import static com.android.server.pm.PackageInstallerService.prepareStageDir; import android.Manifest; import android.annotation.NonNull; import android.annotation.Nullable; +import android.app.Notification; +import android.app.NotificationManager; import android.app.admin.DevicePolicyEventLogger; import android.app.admin.DevicePolicyManagerInternal; import android.content.ComponentName; @@ -119,9 +121,11 @@ import android.util.Slog; import android.util.SparseIntArray; import android.util.apk.ApkSignatureVerifier; +import com.android.internal.R; import com.android.internal.annotations.GuardedBy; import com.android.internal.content.NativeLibraryHelper; import com.android.internal.content.PackageHelper; +import com.android.internal.messages.nano.SystemMessageProto; import com.android.internal.os.SomeArgs; import com.android.internal.util.ArrayUtils; import com.android.internal.util.IndentingPrintWriter; @@ -440,8 +444,7 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub { final int returnCode = args.argi1; args.recycle(); - PackageInstallerService.sendOnPackageInstalled(mContext, - statusReceiver, sessionId, + sendOnPackageInstalled(mContext, statusReceiver, sessionId, isInstallerDeviceOwnerOrAffiliatedProfileOwnerLocked(), userId, packageName, returnCode, message, extras); @@ -1636,8 +1639,7 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub { } } if (!success) { - PackageInstallerService.sendOnPackageInstalled(mContext, - mRemoteStatusReceiver, sessionId, + sendOnPackageInstalled(mContext, mRemoteStatusReceiver, sessionId, isInstallerDeviceOwnerOrAffiliatedProfileOwnerLocked(), userId, null, failure.error, failure.getLocalizedMessage(), null); return; @@ -1684,8 +1686,7 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub { intent.setPackage(mPm.getPackageInstallerPackageName()); intent.putExtra(PackageInstaller.EXTRA_SESSION_ID, sessionId); - PackageInstallerService.sendOnUserActionRequired(mContext, - mRemoteStatusReceiver, sessionId, intent); + sendOnUserActionRequired(mContext, mRemoteStatusReceiver, sessionId, intent); // Commit was keeping session marked as active until now; release // that extra refcount so session appears idle. @@ -2620,9 +2621,8 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub { } catch (RemoteException e) { // In case of streaming failure we don't want to fail or commit the session. // Just return from this method and allow caller to commit again. - PackageInstallerService.sendPendingStreaming(mContext, - mRemoteStatusReceiver, - sessionId, new StreamingException(e)); + sendPendingStreaming(mContext, mRemoteStatusReceiver, sessionId, + new StreamingException(e)); } } }; @@ -2924,6 +2924,75 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub { pw.decreaseIndent(); } + private static void sendOnUserActionRequired(Context context, IntentSender target, + int sessionId, Intent intent) { + final Intent fillIn = new Intent(); + fillIn.putExtra(PackageInstaller.EXTRA_SESSION_ID, sessionId); + fillIn.putExtra(PackageInstaller.EXTRA_STATUS, PackageInstaller.STATUS_PENDING_USER_ACTION); + fillIn.putExtra(Intent.EXTRA_INTENT, intent); + try { + target.sendIntent(context, 0, fillIn, null, null); + } catch (IntentSender.SendIntentException ignored) { + } + } + + private static void sendOnPackageInstalled(Context context, IntentSender target, int sessionId, + boolean showNotification, int userId, String basePackageName, int returnCode, + String msg, Bundle extras) { + if (PackageManager.INSTALL_SUCCEEDED == returnCode && showNotification) { + boolean update = (extras != null) && extras.getBoolean(Intent.EXTRA_REPLACING); + Notification notification = PackageInstallerService.buildSuccessNotification(context, + context.getResources() + .getString(update ? R.string.package_updated_device_owner : + R.string.package_installed_device_owner), + basePackageName, + userId); + if (notification != null) { + NotificationManager notificationManager = (NotificationManager) + context.getSystemService(Context.NOTIFICATION_SERVICE); + notificationManager.notify(basePackageName, + SystemMessageProto.SystemMessage.NOTE_PACKAGE_STATE, + notification); + } + } + final Intent fillIn = new Intent(); + fillIn.putExtra(PackageInstaller.EXTRA_PACKAGE_NAME, basePackageName); + fillIn.putExtra(PackageInstaller.EXTRA_SESSION_ID, sessionId); + fillIn.putExtra(PackageInstaller.EXTRA_STATUS, + PackageManager.installStatusToPublicStatus(returnCode)); + fillIn.putExtra(PackageInstaller.EXTRA_STATUS_MESSAGE, + PackageManager.installStatusToString(returnCode, msg)); + fillIn.putExtra(PackageInstaller.EXTRA_LEGACY_STATUS, returnCode); + if (extras != null) { + final String existing = extras.getString( + PackageManager.EXTRA_FAILURE_EXISTING_PACKAGE); + if (!TextUtils.isEmpty(existing)) { + fillIn.putExtra(PackageInstaller.EXTRA_OTHER_PACKAGE_NAME, existing); + } + } + try { + target.sendIntent(context, 0, fillIn, null, null); + } catch (IntentSender.SendIntentException ignored) { + } + } + + private static void sendPendingStreaming(Context context, IntentSender target, int sessionId, + Throwable cause) { + final Intent intent = new Intent(); + intent.putExtra(PackageInstaller.EXTRA_SESSION_ID, sessionId); + intent.putExtra(PackageInstaller.EXTRA_STATUS, PackageInstaller.STATUS_PENDING_STREAMING); + if (cause != null && !TextUtils.isEmpty(cause.getMessage())) { + intent.putExtra(PackageInstaller.EXTRA_STATUS_MESSAGE, + "Staging Image Not Ready [" + cause.getMessage() + "]"); + } else { + intent.putExtra(PackageInstaller.EXTRA_STATUS_MESSAGE, "Staging Image Not Ready"); + } + try { + target.sendIntent(context, 0, intent, null, null); + } catch (IntentSender.SendIntentException ignored) { + } + } + private static void writeGrantedRuntimePermissionsLocked(XmlSerializer out, String[] grantedRuntimePermissions) throws IOException { if (grantedRuntimePermissions != null) { |