summaryrefslogtreecommitdiff
path: root/services/appprediction
diff options
context:
space:
mode:
authorPinyao Ting <pinyaoting@google.com>2020-02-07 16:24:01 -0800
committerPinyao Ting <pinyaoting@google.com>2020-02-10 17:13:32 -0800
commitac68aac0ac9897f162c69ad62416444d1c3e83b6 (patch)
tree4ed0ad293b8dfedd6400213b3dfc7a231b54d195 /services/appprediction
parent88cb2d9df821c50ab36e72077537d45fa61184d5 (diff)
Enable App Prediction for Work Profile
call to different instance of AppPredictionPerUserService based on calling context. Bug: 148230574 Test: Manual Change-Id: I5987ed6a80155a8aed7c1985e8edd1ba98e51149
Diffstat (limited to 'services/appprediction')
-rw-r--r--services/appprediction/java/com/android/server/appprediction/AppPredictionManagerService.java28
1 files changed, 16 insertions, 12 deletions
diff --git a/services/appprediction/java/com/android/server/appprediction/AppPredictionManagerService.java b/services/appprediction/java/com/android/server/appprediction/AppPredictionManagerService.java
index 5844f9873001..1c4db1214d3b 100644
--- a/services/appprediction/java/com/android/server/appprediction/AppPredictionManagerService.java
+++ b/services/appprediction/java/com/android/server/appprediction/AppPredictionManagerService.java
@@ -18,12 +18,14 @@ package com.android.server.appprediction;
import static android.Manifest.permission.MANAGE_APP_PREDICTIONS;
import static android.Manifest.permission.PACKAGE_USAGE_STATS;
+import static android.app.ActivityManagerInternal.ALLOW_NON_FULL;
import static android.content.Context.APP_PREDICTION_SERVICE;
import static android.content.pm.PackageManager.PERMISSION_GRANTED;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.UserIdInt;
+import android.app.ActivityManagerInternal;
import android.app.prediction.AppPredictionContext;
import android.app.prediction.AppPredictionSessionId;
import android.app.prediction.AppTargetEvent;
@@ -34,7 +36,6 @@ import android.content.pm.ParceledListSlice;
import android.os.Binder;
import android.os.ResultReceiver;
import android.os.ShellCallback;
-import android.os.UserHandle;
import android.util.Slog;
import com.android.server.LocalServices;
@@ -108,21 +109,21 @@ public class AppPredictionManagerService extends
@Override
public void createPredictionSession(@NonNull AppPredictionContext context,
@NonNull AppPredictionSessionId sessionId) {
- runForUserLocked("createPredictionSession",
+ runForUserLocked("createPredictionSession", sessionId,
(service) -> service.onCreatePredictionSessionLocked(context, sessionId));
}
@Override
public void notifyAppTargetEvent(@NonNull AppPredictionSessionId sessionId,
@NonNull AppTargetEvent event) {
- runForUserLocked("notifyAppTargetEvent",
+ runForUserLocked("notifyAppTargetEvent", sessionId,
(service) -> service.notifyAppTargetEventLocked(sessionId, event));
}
@Override
public void notifyLaunchLocationShown(@NonNull AppPredictionSessionId sessionId,
@NonNull String launchLocation, @NonNull ParceledListSlice targetIds) {
- runForUserLocked("notifyLaunchLocationShown", (service) ->
+ runForUserLocked("notifyLaunchLocationShown", sessionId, (service) ->
service.notifyLaunchLocationShownLocked(sessionId, launchLocation, targetIds));
}
@@ -130,32 +131,32 @@ public class AppPredictionManagerService extends
public void sortAppTargets(@NonNull AppPredictionSessionId sessionId,
@NonNull ParceledListSlice targets,
IPredictionCallback callback) {
- runForUserLocked("sortAppTargets",
+ runForUserLocked("sortAppTargets", sessionId,
(service) -> service.sortAppTargetsLocked(sessionId, targets, callback));
}
@Override
public void registerPredictionUpdates(@NonNull AppPredictionSessionId sessionId,
@NonNull IPredictionCallback callback) {
- runForUserLocked("registerPredictionUpdates",
+ runForUserLocked("registerPredictionUpdates", sessionId,
(service) -> service.registerPredictionUpdatesLocked(sessionId, callback));
}
public void unregisterPredictionUpdates(@NonNull AppPredictionSessionId sessionId,
@NonNull IPredictionCallback callback) {
- runForUserLocked("unregisterPredictionUpdates",
+ runForUserLocked("unregisterPredictionUpdates", sessionId,
(service) -> service.unregisterPredictionUpdatesLocked(sessionId, callback));
}
@Override
public void requestPredictionUpdate(@NonNull AppPredictionSessionId sessionId) {
- runForUserLocked("requestPredictionUpdate",
+ runForUserLocked("requestPredictionUpdate", sessionId,
(service) -> service.requestPredictionUpdateLocked(sessionId));
}
@Override
public void onDestroyPredictionSession(@NonNull AppPredictionSessionId sessionId) {
- runForUserLocked("onDestroyPredictionSession",
+ runForUserLocked("onDestroyPredictionSession", sessionId,
(service) -> service.onDestroyPredictionSessionLocked(sessionId));
}
@@ -167,9 +168,12 @@ public class AppPredictionManagerService extends
.exec(this, in, out, err, args, callback, resultReceiver);
}
- private void runForUserLocked(@NonNull String func,
- @NonNull Consumer<AppPredictionPerUserService> c) {
- final int userId = UserHandle.getCallingUserId();
+ private void runForUserLocked(@NonNull final String func,
+ @NonNull final AppPredictionSessionId sessionId,
+ @NonNull final Consumer<AppPredictionPerUserService> c) {
+ ActivityManagerInternal am = LocalServices.getService(ActivityManagerInternal.class);
+ final int userId = am.handleIncomingUser(Binder.getCallingPid(), Binder.getCallingUid(),
+ sessionId.getUserId(), false, ALLOW_NON_FULL, null, null);
Context ctx = getContext();
if (!(ctx.checkCallingPermission(PACKAGE_USAGE_STATS) == PERMISSION_GRANTED