From dd08e5d55a42e3f6cde44d453919059affa62b50 Mon Sep 17 00:00:00 2001 From: Sudheer Shanka Date: Wed, 11 Jan 2023 07:16:24 +0000 Subject: [PATCH] Send PACKAGE/CANCEL_ENABLE_ROLLBACK as foreground broadcast. Rollback system expects timely delivery of these broadcasts, which broadcasting system does not provide. Ideally, these should be a direct callbacks but sending them as foreground broadcasts seems to work for now and safe to do so. Also add an explicit dependency of RollbackTest app for MultiUserRollbackTest, so that that the app gets rebuilt if needed when building and running the test. Bug: 259202331 Test: atest com.android.tests.rollback.host.MultiUserRollbackTest Change-Id: I6ede9bfd4a5d170fb7448a1417433593fdd9e332 --- services/core/java/com/android/server/pm/PackageHandler.java | 4 ++-- .../core/java/com/android/server/pm/VerifyingSession.java | 3 ++- tests/RollbackTest/Android.bp | 1 + 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/services/core/java/com/android/server/pm/PackageHandler.java b/services/core/java/com/android/server/pm/PackageHandler.java index 93a119c36f3d3..7f7a23419dda6 100644 --- a/services/core/java/com/android/server/pm/PackageHandler.java +++ b/services/core/java/com/android/server/pm/PackageHandler.java @@ -291,8 +291,8 @@ final class PackageHandler extends Handler { rollbackTimeoutIntent.putExtra( PackageManagerInternal.EXTRA_ENABLE_ROLLBACK_SESSION_ID, sessionId); - rollbackTimeoutIntent.addFlags( - Intent.FLAG_RECEIVER_REGISTERED_ONLY_BEFORE_BOOT); + rollbackTimeoutIntent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY_BEFORE_BOOT + | Intent.FLAG_RECEIVER_FOREGROUND); mPm.mContext.sendBroadcastAsUser(rollbackTimeoutIntent, UserHandle.SYSTEM, android.Manifest.permission.PACKAGE_ROLLBACK_AGENT); } diff --git a/services/core/java/com/android/server/pm/VerifyingSession.java b/services/core/java/com/android/server/pm/VerifyingSession.java index a54f52619f357..8ec6241cce072 100644 --- a/services/core/java/com/android/server/pm/VerifyingSession.java +++ b/services/core/java/com/android/server/pm/VerifyingSession.java @@ -233,7 +233,8 @@ final class VerifyingSession { PackageManagerInternal.EXTRA_ENABLE_ROLLBACK_SESSION_ID, mSessionId); enableRollbackIntent.setType(PACKAGE_MIME_TYPE); - enableRollbackIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); + enableRollbackIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION + | Intent.FLAG_RECEIVER_FOREGROUND); // Allow the broadcast to be sent before boot complete. // This is needed when committing the apk part of a staged diff --git a/tests/RollbackTest/Android.bp b/tests/RollbackTest/Android.bp index f2234fb64108b..21007ef1396fb 100644 --- a/tests/RollbackTest/Android.bp +++ b/tests/RollbackTest/Android.bp @@ -74,6 +74,7 @@ java_test_host { ], test_suites: ["general-tests"], test_config: "MultiUserRollbackTest.xml", + data : [":RollbackTest"], } java_library_host {