summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPerumaal S <perumaal@google.com>2020-01-13 21:01:35 -0800
committerPerumaal S <perumaal@google.com>2020-01-21 18:44:38 -0800
commit3c78cc58c7a4f9fef0d13528633796218c104e30 (patch)
treefaec87bbc2ea145154f170ab3299a8b340a5e89b
parent41d2cdf3d1774f7a41c212532a29842dde22c36f (diff)
Change provideContextImage() API to accept Bitmap
provideContextImage currently takes in taskId which works for the Recents screen. In Android QPR2 timeframe, content suggestions also powers Screenshots feature which requires passing an explicit Bitmap. This change adds a Bitmap parameter to the 'provideContextImage'. Launcher/Recents will continue using the taskId-based API to obtain a fresh snapshot using the Activity/Window Manager; or obtain an on-disk one for paused tasks. Bug: 147324195 Test: atest ContentSuggestionsManagerTest in separate CL ag/10146598 Change-Id: I686eb8d90a4a44fdd80403ef2df58020c82ca69a
-rwxr-xr-xapi/system-current.txt1
-rw-r--r--core/java/android/app/contentsuggestions/ContentSuggestionsManager.java23
-rw-r--r--core/java/android/app/contentsuggestions/IContentSuggestionsManager.aidl5
-rw-r--r--services/contentsuggestions/java/com/android/server/contentsuggestions/ContentSuggestionsManagerService.java32
4 files changed, 61 insertions, 0 deletions
diff --git a/api/system-current.txt b/api/system-current.txt
index d833e828d92a..c05ad65e7cb8 100755
--- a/api/system-current.txt
+++ b/api/system-current.txt
@@ -1165,6 +1165,7 @@ package android.app.contentsuggestions {
method public void classifyContentSelections(@NonNull android.app.contentsuggestions.ClassificationsRequest, @NonNull java.util.concurrent.Executor, @NonNull android.app.contentsuggestions.ContentSuggestionsManager.ClassificationsCallback);
method public boolean isEnabled();
method public void notifyInteraction(@NonNull String, @NonNull android.os.Bundle);
+ method public void provideContextImage(@NonNull android.graphics.Bitmap, @NonNull android.os.Bundle);
method public void provideContextImage(int, @NonNull android.os.Bundle);
method public void suggestContentSelections(@NonNull android.app.contentsuggestions.SelectionsRequest, @NonNull java.util.concurrent.Executor, @NonNull android.app.contentsuggestions.ContentSuggestionsManager.SelectionsCallback);
}
diff --git a/core/java/android/app/contentsuggestions/ContentSuggestionsManager.java b/core/java/android/app/contentsuggestions/ContentSuggestionsManager.java
index 1e6ab4136187..bea1bd6e70d6 100644
--- a/core/java/android/app/contentsuggestions/ContentSuggestionsManager.java
+++ b/core/java/android/app/contentsuggestions/ContentSuggestionsManager.java
@@ -21,6 +21,7 @@ import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.SystemApi;
import android.annotation.UserIdInt;
+import android.graphics.Bitmap;
import android.os.Binder;
import android.os.Bundle;
import android.os.RemoteException;
@@ -77,6 +78,28 @@ public final class ContentSuggestionsManager {
}
/**
+ * Hints to the system that a new context image using the provided bitmap should be sent to
+ * the system content suggestions service.
+ *
+ * @param bitmap the new context image
+ * @param imageContextRequestExtras sent with request to provide implementation specific
+ * extra information.
+ */
+ public void provideContextImage(
+ @NonNull Bitmap bitmap, @NonNull Bundle imageContextRequestExtras) {
+ if (mService == null) {
+ Log.e(TAG, "provideContextImage called, but no ContentSuggestionsManager configured");
+ return;
+ }
+
+ try {
+ mService.provideContextBitmap(mUser, bitmap, imageContextRequestExtras);
+ } catch (RemoteException e) {
+ e.rethrowFromSystemServer();
+ }
+ }
+
+ /**
* Hints to the system that a new context image for the provided task should be sent to the
* system content suggestions service.
*
diff --git a/core/java/android/app/contentsuggestions/IContentSuggestionsManager.aidl b/core/java/android/app/contentsuggestions/IContentSuggestionsManager.aidl
index b18a758ff69e..8e6338babf22 100644
--- a/core/java/android/app/contentsuggestions/IContentSuggestionsManager.aidl
+++ b/core/java/android/app/contentsuggestions/IContentSuggestionsManager.aidl
@@ -20,6 +20,7 @@ import android.app.contentsuggestions.IClassificationsCallback;
import android.app.contentsuggestions.ISelectionsCallback;
import android.app.contentsuggestions.ClassificationsRequest;
import android.app.contentsuggestions.SelectionsRequest;
+import android.graphics.Bitmap;
import android.os.Bundle;
import android.os.UserHandle;
import com.android.internal.os.IResultReceiver;
@@ -30,6 +31,10 @@ oneway interface IContentSuggestionsManager {
int userId,
int taskId,
in Bundle imageContextRequestExtras);
+ void provideContextBitmap(
+ int userId,
+ in Bitmap bitmap,
+ in Bundle imageContextRequestExtras);
void suggestContentSelections(
int userId,
in SelectionsRequest request,
diff --git a/services/contentsuggestions/java/com/android/server/contentsuggestions/ContentSuggestionsManagerService.java b/services/contentsuggestions/java/com/android/server/contentsuggestions/ContentSuggestionsManagerService.java
index 9cdb58d8c019..b54ec4ea9441 100644
--- a/services/contentsuggestions/java/com/android/server/contentsuggestions/ContentSuggestionsManagerService.java
+++ b/services/contentsuggestions/java/com/android/server/contentsuggestions/ContentSuggestionsManagerService.java
@@ -27,6 +27,7 @@ import android.app.contentsuggestions.IContentSuggestionsManager;
import android.app.contentsuggestions.ISelectionsCallback;
import android.app.contentsuggestions.SelectionsRequest;
import android.content.Context;
+import android.graphics.Bitmap;
import android.os.Binder;
import android.os.Bundle;
import android.os.RemoteException;
@@ -61,6 +62,10 @@ public class ContentSuggestionsManagerService extends
private static final boolean VERBOSE = false; // TODO: make dynamic
private static final int MAX_TEMP_SERVICE_DURATION_MS = 1_000 * 60 * 2; // 2 minutes
+ /**
+ * Key into the extras Bundle passed to {@link #provideContextImage(int, Bundle)}.
+ */
+ private static final String EXTRA_BITMAP = "android.contentsuggestions.extra.BITMAP";
private ActivityTaskManagerInternal mActivityTaskManagerInternal;
@@ -111,6 +116,33 @@ public class ContentSuggestionsManagerService extends
private class ContentSuggestionsManagerStub extends IContentSuggestionsManager.Stub {
@Override
+ public void provideContextBitmap(
+ int userId,
+ @NonNull Bitmap bitmap,
+ @NonNull Bundle imageContextRequestExtras) {
+ if (bitmap == null) {
+ throw new IllegalArgumentException("Expected non-null bitmap");
+ }
+ if (imageContextRequestExtras == null) {
+ throw new IllegalArgumentException("Expected non-null imageContextRequestExtras");
+ }
+ enforceCaller(UserHandle.getCallingUserId(), "provideContextBitmap");
+
+ synchronized (mLock) {
+ final ContentSuggestionsPerUserService service = getServiceForUserLocked(userId);
+ if (service != null) {
+ // TODO(b/147324195): Temporarily pass bitmap until we change the service API.
+ imageContextRequestExtras.putParcelable(EXTRA_BITMAP, bitmap);
+ service.provideContextImageLocked(/* taskId = */ -1, imageContextRequestExtras);
+ } else {
+ if (VERBOSE) {
+ Slog.v(TAG, "provideContextImageLocked: no service for " + userId);
+ }
+ }
+ }
+ }
+
+ @Override
public void provideContextImage(
int userId,
int taskId,