diff options
| author | 2021-02-01 19:01:30 +0800 | |
|---|---|---|
| committer | 2021-03-02 06:47:48 +0000 | |
| commit | af76755ff76e5e323ee31af593870dcde154b1d2 (patch) | |
| tree | 57d3ccacc51c3a4912673b4594b12f3040badaec /services/contentcapture/java | |
| parent | ea5f042755856ab9b249f83adcb8e47e64a0cab9 (diff) | |
Update ContentCaptureContext to have a token information
In order to support auto translation, we need to give information to
content capture service to let the app can use this information to
find the Activity which needed to be translated.
It's not safe to provide an activity token to the client app directly
even if it is a privilege app. They can use this activity token to
access many activity/windows related functions. We create a new token
for use for content capture and translation. This token will be used
get the target Activity for translation new APIs.
This change focuses on the Content capture API change, the API change
about translation will be done in the next change,
Bug: 177789967
Test: manual. Make sure cc service can get the information.
Test: atest android.view.contentcapture.ContentCaptureContextTest
Test: atest CtsContentCaptureServiceTestCases
Change-Id: Ife8096a8bd1e71ce4e686d95043e347222ad7ee6
Diffstat (limited to 'services/contentcapture/java')
3 files changed, 21 insertions, 17 deletions
diff --git a/services/contentcapture/java/com/android/server/contentcapture/ContentCaptureManagerService.java b/services/contentcapture/java/com/android/server/contentcapture/ContentCaptureManagerService.java index 220f87db8bd4..02930dc238ba 100644 --- a/services/contentcapture/java/com/android/server/contentcapture/ContentCaptureManagerService.java +++ b/services/contentcapture/java/com/android/server/contentcapture/ContentCaptureManagerService.java @@ -88,7 +88,6 @@ import com.android.internal.infra.AbstractRemoteService; import com.android.internal.infra.GlobalWhitelistState; import com.android.internal.os.IResultReceiver; import com.android.internal.util.DumpUtils; -import com.android.internal.util.Preconditions; import com.android.server.LocalServices; import com.android.server.infra.AbstractMasterSystemService; import com.android.server.infra.FrameworkResourcesServiceNameResolver; @@ -101,6 +100,7 @@ import java.io.PrintWriter; import java.util.ArrayList; import java.util.HashSet; import java.util.List; +import java.util.Objects; import java.util.Set; import java.util.concurrent.Executor; import java.util.concurrent.Executors; @@ -602,10 +602,11 @@ public final class ContentCaptureManagerService extends @Override public void startSession(@NonNull IBinder activityToken, - @NonNull ComponentName componentName, int sessionId, int flags, - @NonNull IResultReceiver result) { - Preconditions.checkNotNull(activityToken); - Preconditions.checkNotNull(sessionId); + @NonNull IBinder shareableActivityToken, @NonNull ComponentName componentName, + int sessionId, int flags, @NonNull IResultReceiver result) { + Objects.requireNonNull(activityToken); + Objects.requireNonNull(shareableActivityToken); + Objects.requireNonNull(sessionId); final int userId = UserHandle.getCallingUserId(); final ActivityPresentationInfo activityPresentationInfo = getAmInternal() @@ -617,14 +618,14 @@ public final class ContentCaptureManagerService extends setClientState(result, STATE_DISABLED, /* binder= */ null); return; } - service.startSessionLocked(activityToken, activityPresentationInfo, sessionId, - Binder.getCallingUid(), flags, result); + service.startSessionLocked(activityToken, shareableActivityToken, + activityPresentationInfo, sessionId, Binder.getCallingUid(), flags, result); } } @Override public void finishSession(int sessionId) { - Preconditions.checkNotNull(sessionId); + Objects.requireNonNull(sessionId); final int userId = UserHandle.getCallingUserId(); synchronized (mLock) { @@ -650,7 +651,7 @@ public final class ContentCaptureManagerService extends @Override public void removeData(@NonNull DataRemovalRequest request) { - Preconditions.checkNotNull(request); + Objects.requireNonNull(request); assertCalledByPackageOwner(request.getPackageName()); final int userId = UserHandle.getCallingUserId(); @@ -663,8 +664,8 @@ public final class ContentCaptureManagerService extends @Override public void shareData(@NonNull DataShareRequest request, @NonNull IDataShareWriteAdapter clientAdapter) { - Preconditions.checkNotNull(request); - Preconditions.checkNotNull(clientAdapter); + Objects.requireNonNull(request); + Objects.requireNonNull(clientAdapter); assertCalledByPackageOwner(request.getPackageName()); diff --git a/services/contentcapture/java/com/android/server/contentcapture/ContentCapturePerUserService.java b/services/contentcapture/java/com/android/server/contentcapture/ContentCapturePerUserService.java index ea68e190ff1f..53cdc330cf9e 100644 --- a/services/contentcapture/java/com/android/server/contentcapture/ContentCapturePerUserService.java +++ b/services/contentcapture/java/com/android/server/contentcapture/ContentCapturePerUserService.java @@ -35,6 +35,7 @@ import android.annotation.NonNull; import android.annotation.Nullable; import android.annotation.UserIdInt; import android.app.ActivityManagerInternal; +import android.app.assist.ActivityId; import android.app.assist.AssistContent; import android.app.assist.AssistStructure; import android.content.ComponentName; @@ -241,6 +242,7 @@ final class ContentCapturePerUserService @GuardedBy("mLock") public void startSessionLocked(@NonNull IBinder activityToken, + @NonNull IBinder shareableActivityToken, @NonNull ActivityPresentationInfo activityPresentationInfo, int sessionId, int uid, int flags, @NonNull IResultReceiver clientReceiver) { if (activityPresentationInfo == null) { @@ -340,8 +342,8 @@ final class ContentCapturePerUserService mRemoteService.ensureBoundLocked(); final ContentCaptureServerSession newSession = new ContentCaptureServerSession(mLock, - activityToken, this, componentName, clientReceiver, taskId, displayId, sessionId, - uid, flags); + activityToken, new ActivityId(taskId, shareableActivityToken), this, componentName, + clientReceiver, taskId, displayId, sessionId, uid, flags); if (mMaster.verbose) { Slog.v(TAG, "startSession(): new session for " + ComponentName.flattenToShortString(componentName) + " and id " + sessionId); diff --git a/services/contentcapture/java/com/android/server/contentcapture/ContentCaptureServerSession.java b/services/contentcapture/java/com/android/server/contentcapture/ContentCaptureServerSession.java index 06ab426c6698..9f3045e68550 100644 --- a/services/contentcapture/java/com/android/server/contentcapture/ContentCaptureServerSession.java +++ b/services/contentcapture/java/com/android/server/contentcapture/ContentCaptureServerSession.java @@ -25,6 +25,7 @@ import static android.view.contentcapture.ContentCaptureSession.STATE_SERVICE_RE import static android.view.contentcapture.ContentCaptureSession.STATE_SERVICE_UPDATING; import android.annotation.NonNull; +import android.app.assist.ActivityId; import android.content.ComponentName; import android.os.Bundle; import android.os.IBinder; @@ -75,9 +76,9 @@ final class ContentCaptureServerSession { public final ComponentName appComponentName; ContentCaptureServerSession(@NonNull Object lock, @NonNull IBinder activityToken, - @NonNull ContentCapturePerUserService service, @NonNull ComponentName appComponentName, - @NonNull IResultReceiver sessionStateReceiver, int taskId, int displayId, int sessionId, - int uid, int flags) { + @NonNull ActivityId activityId, @NonNull ContentCapturePerUserService service, + @NonNull ComponentName appComponentName, @NonNull IResultReceiver sessionStateReceiver, + int taskId, int displayId, int sessionId, int uid, int flags) { Preconditions.checkArgument(sessionId != NO_SESSION_ID); mLock = lock; mActivityToken = activityToken; @@ -86,7 +87,7 @@ final class ContentCaptureServerSession { mId = sessionId; mUid = uid; mContentCaptureContext = new ContentCaptureContext(/* clientContext= */ null, - appComponentName, taskId, displayId, flags); + activityId, appComponentName, displayId, flags); mSessionStateReceiver = sessionStateReceiver; try { sessionStateReceiver.asBinder().linkToDeath(() -> onClientDeath(), 0); |