summaryrefslogtreecommitdiff
path: root/services/contentcapture/java
diff options
context:
space:
mode:
author Joanne Chung <joannechung@google.com> 2021-02-01 19:01:30 +0800
committer Joanne Chung <joannechung@google.com> 2021-03-02 06:47:48 +0000
commitaf76755ff76e5e323ee31af593870dcde154b1d2 (patch)
tree57d3ccacc51c3a4912673b4594b12f3040badaec /services/contentcapture/java
parentea5f042755856ab9b249f83adcb8e47e64a0cab9 (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')
-rw-r--r--services/contentcapture/java/com/android/server/contentcapture/ContentCaptureManagerService.java23
-rw-r--r--services/contentcapture/java/com/android/server/contentcapture/ContentCapturePerUserService.java6
-rw-r--r--services/contentcapture/java/com/android/server/contentcapture/ContentCaptureServerSession.java9
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);