Merge "BICS: Add InstallEventType as a type of extras and send it during notifyAllCallbacks based on whether it was install or uninstall Bug: 375000910 Flag: NONE (API has no consumers yet) Test: Unit test" into main
diff --git a/services/core/java/com/android/server/pm/BackgroundInstallControlCallbackHelper.java b/services/core/java/com/android/server/pm/BackgroundInstallControlCallbackHelper.java
index 1553618..27c4e9d 100644
--- a/services/core/java/com/android/server/pm/BackgroundInstallControlCallbackHelper.java
+++ b/services/core/java/com/android/server/pm/BackgroundInstallControlCallbackHelper.java
@@ -35,6 +35,7 @@
@VisibleForTesting static final String FLAGGED_PACKAGE_NAME_KEY = "packageName";
@VisibleForTesting static final String FLAGGED_USER_ID_KEY = "userId";
+ @VisibleForTesting static final String INSTALL_EVENT_TYPE_KEY = "installEventType";
private static final String TAG = "BackgroundInstallControlCallbackHelper";
private final Handler mHandler;
@@ -74,10 +75,14 @@
* Invokes all registered callbacks Callbacks are processed through user provided-threads and
* parameters are passed in via {@link BackgroundInstallControlManager} InstallEvent
*/
- public void notifyAllCallbacks(int userId, String packageName) {
+ public void notifyAllCallbacks(
+ int userId,
+ String packageName,
+ @BackgroundInstallControlService.InstallEventType int installEventType) {
Bundle extras = new Bundle();
extras.putCharSequence(FLAGGED_PACKAGE_NAME_KEY, packageName);
extras.putInt(FLAGGED_USER_ID_KEY, userId);
+ extras.putInt(INSTALL_EVENT_TYPE_KEY, installEventType);
synchronized (mCallbacks) {
mHandler.post(
() ->
diff --git a/services/core/java/com/android/server/pm/BackgroundInstallControlService.java b/services/core/java/com/android/server/pm/BackgroundInstallControlService.java
index b6daed1..20cca969 100644
--- a/services/core/java/com/android/server/pm/BackgroundInstallControlService.java
+++ b/services/core/java/com/android/server/pm/BackgroundInstallControlService.java
@@ -19,6 +19,7 @@
import static android.Manifest.permission.GET_BACKGROUND_INSTALLED_PACKAGES;
import static android.content.pm.PackageManager.PERMISSION_GRANTED;
+import android.annotation.IntDef;
import android.annotation.NonNull;
import android.annotation.RequiresPermission;
import android.app.Flags;
@@ -64,6 +65,8 @@
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
@@ -76,11 +79,23 @@
* @hide
*/
public class BackgroundInstallControlService extends SystemService {
+ public static final int INSTALL_EVENT_TYPE_UNKNOWN = 0;
+ public static final int INSTALL_EVENT_TYPE_INSTALL = 1;
+ public static final int INSTALL_EVENT_TYPE_UNINSTALL = 2;
+
+ @IntDef(
+ value = {
+ INSTALL_EVENT_TYPE_UNKNOWN,
+ INSTALL_EVENT_TYPE_INSTALL,
+ INSTALL_EVENT_TYPE_UNINSTALL,
+ })
+ @Retention(RetentionPolicy.SOURCE)
+ public @interface InstallEventType {}
+
private static final String TAG = "BackgroundInstallControlService";
private static final String DISK_FILE_NAME = "states";
private static final String DISK_DIR_NAME = "bic";
-
private static final String ENFORCE_PERMISSION_ERROR_MSG =
"User is not permitted to call service: ";
@@ -313,7 +328,7 @@
initBackgroundInstalledPackages();
mBackgroundInstalledPackages.add(userId, packageName);
- mCallbackHelper.notifyAllCallbacks(userId, packageName);
+ mCallbackHelper.notifyAllCallbacks(userId, packageName, INSTALL_EVENT_TYPE_INSTALL);
writeBackgroundInstalledPackagesToDisk();
}
@@ -391,6 +406,7 @@
initBackgroundInstalledPackages();
mBackgroundInstalledPackages.remove(userId, packageName);
writeBackgroundInstalledPackagesToDisk();
+ mCallbackHelper.notifyAllCallbacks(userId, packageName, INSTALL_EVENT_TYPE_UNINSTALL);
}
void handleUsageEvent(UsageEvents.Event event, int userId) {
diff --git a/services/tests/mockingservicestests/src/com/android/server/pm/BackgroundInstallControlCallbackHelperTest.java b/services/tests/mockingservicestests/src/com/android/server/pm/BackgroundInstallControlCallbackHelperTest.java
index 574f369..ae404cf 100644
--- a/services/tests/mockingservicestests/src/com/android/server/pm/BackgroundInstallControlCallbackHelperTest.java
+++ b/services/tests/mockingservicestests/src/com/android/server/pm/BackgroundInstallControlCallbackHelperTest.java
@@ -18,6 +18,7 @@
import static com.android.server.pm.BackgroundInstallControlCallbackHelper.FLAGGED_PACKAGE_NAME_KEY;
import static com.android.server.pm.BackgroundInstallControlCallbackHelper.FLAGGED_USER_ID_KEY;
+import static com.android.server.pm.BackgroundInstallControlCallbackHelper.INSTALL_EVENT_TYPE_KEY;
import static org.junit.Assert.assertEquals;
import static org.mockito.Mockito.after;
@@ -84,12 +85,18 @@
int testUserId = 1;
mCallbackHelper.registerBackgroundInstallCallback(mCallback);
- mCallbackHelper.notifyAllCallbacks(testUserId, testPackageName);
+ mCallbackHelper.notifyAllCallbacks(
+ testUserId,
+ testPackageName,
+ BackgroundInstallControlService.INSTALL_EVENT_TYPE_INSTALL);
ArgumentCaptor<Bundle> bundleCaptor = ArgumentCaptor.forClass(Bundle.class);
verify(mCallback, after(1000).times(1)).sendResult(bundleCaptor.capture());
Bundle receivedBundle = bundleCaptor.getValue();
assertEquals(testPackageName, receivedBundle.getString(FLAGGED_PACKAGE_NAME_KEY));
assertEquals(testUserId, receivedBundle.getInt(FLAGGED_USER_ID_KEY));
+ assertEquals(
+ BackgroundInstallControlService.INSTALL_EVENT_TYPE_INSTALL,
+ receivedBundle.getInt(INSTALL_EVENT_TYPE_KEY));
}
}