Added a "lite" flag on ContentCaptureOptions.
It will be used to let activities from the ContentCapture service package to use
the ContentCaptureManager APIs (such as isContentCaptureFeatureEnabled()), without
triggering content capture per se.
Bug: 122958583
Test: manual verification
Test: atest CtsContentCaptureServiceTestCases # sanity check
Change-Id: I0305fa9f3adb68e6faff80afcb965ae4643f2992
diff --git a/core/java/android/content/ContentCaptureOptions.java b/core/java/android/content/ContentCaptureOptions.java
index 6be0bea..1727d34 100644
--- a/core/java/android/content/ContentCaptureOptions.java
+++ b/core/java/android/content/ContentCaptureOptions.java
@@ -72,9 +72,29 @@
@Nullable
public final ArraySet<ComponentName> whitelistedComponents;
+ /**
+ * Used to enable just a small set of APIs so it can used by activities belonging to the
+ * content capture service APK.
+ */
+ public final boolean lite;
+
+ public ContentCaptureOptions(int loggingLevel) {
+ this(/* lite= */ true, loggingLevel, /* maxBufferSize= */ 0,
+ /* idleFlushingFrequencyMs= */ 0, /* textChangeFlushingFrequencyMs= */ 0,
+ /* logHistorySize= */ 0, /* whitelistedComponents= */ null);
+ }
+
public ContentCaptureOptions(int loggingLevel, int maxBufferSize, int idleFlushingFrequencyMs,
int textChangeFlushingFrequencyMs, int logHistorySize,
@Nullable ArraySet<ComponentName> whitelistedComponents) {
+ this(/* lite= */ false, loggingLevel, maxBufferSize, idleFlushingFrequencyMs,
+ textChangeFlushingFrequencyMs, logHistorySize, whitelistedComponents);
+ }
+
+ private ContentCaptureOptions(boolean lite, int loggingLevel, int maxBufferSize,
+ int idleFlushingFrequencyMs, int textChangeFlushingFrequencyMs, int logHistorySize,
+ @Nullable ArraySet<ComponentName> whitelistedComponents) {
+ this.lite = lite;
this.loggingLevel = loggingLevel;
this.maxBufferSize = maxBufferSize;
this.idleFlushingFrequencyMs = idleFlushingFrequencyMs;
@@ -115,6 +135,9 @@
@Override
public String toString() {
+ if (lite) {
+ return "ContentCaptureOptions [(lite) loggingLevel=" + loggingLevel + "]";
+ }
return "ContentCaptureOptions [loggingLevel=" + loggingLevel + ", maxBufferSize="
+ maxBufferSize + ", idleFlushingFrequencyMs=" + idleFlushingFrequencyMs
+ ", textChangeFlushingFrequencyMs=" + textChangeFlushingFrequencyMs
@@ -125,6 +148,10 @@
/** @hide */
public void dumpShort(@NonNull PrintWriter pw) {
pw.print("logLvl="); pw.print(loggingLevel);
+ if (lite) {
+ pw.print(", lite");
+ return;
+ }
pw.print(", bufferSize="); pw.print(maxBufferSize);
pw.print(", idle="); pw.print(idleFlushingFrequencyMs);
pw.print(", textIdle="); pw.print(textChangeFlushingFrequencyMs);
@@ -141,7 +168,10 @@
@Override
public void writeToParcel(Parcel parcel, int flags) {
+ parcel.writeBoolean(lite);
parcel.writeInt(loggingLevel);
+ if (lite) return;
+
parcel.writeInt(maxBufferSize);
parcel.writeInt(idleFlushingFrequencyMs);
parcel.writeInt(textChangeFlushingFrequencyMs);
@@ -154,7 +184,11 @@
@Override
public ContentCaptureOptions createFromParcel(Parcel parcel) {
+ final boolean lite = parcel.readBoolean();
final int loggingLevel = parcel.readInt();
+ if (lite) {
+ return new ContentCaptureOptions(loggingLevel);
+ }
final int maxBufferSize = parcel.readInt();
final int idleFlushingFrequencyMs = parcel.readInt();
final int textChangeFlushingFrequencyMs = parcel.readInt();
@@ -171,6 +205,5 @@
public ContentCaptureOptions[] newArray(int size) {
return new ContentCaptureOptions[size];
}
-
};
}
diff --git a/core/java/android/view/contentcapture/ContentCaptureManager.java b/core/java/android/view/contentcapture/ContentCaptureManager.java
index afddc38..9e546a8 100644
--- a/core/java/android/view/contentcapture/ContentCaptureManager.java
+++ b/core/java/android/view/contentcapture/ContentCaptureManager.java
@@ -246,6 +246,7 @@
@UiThread
public void onActivityCreated(@NonNull IBinder applicationToken,
@NonNull ComponentName activityComponent, int flags) {
+ if (mOptions.lite) return;
synchronized (mLock) {
mFlags |= flags;
getMainContentCaptureSession().start(applicationToken, activityComponent, mFlags);
@@ -255,18 +256,21 @@
/** @hide */
@UiThread
public void onActivityResumed() {
+ if (mOptions.lite) return;
getMainContentCaptureSession().notifySessionLifecycle(/* started= */ true);
}
/** @hide */
@UiThread
public void onActivityPaused() {
+ if (mOptions.lite) return;
getMainContentCaptureSession().notifySessionLifecycle(/* started= */ false);
}
/** @hide */
@UiThread
public void onActivityDestroyed() {
+ if (mOptions.lite) return;
getMainContentCaptureSession().destroy();
}
@@ -279,6 +283,7 @@
*/
@UiThread
public void flush(@FlushReason int reason) {
+ if (mOptions.lite) return;
getMainContentCaptureSession().flush(reason);
}
@@ -288,7 +293,7 @@
*/
@Nullable
public ComponentName getServiceComponentName() {
- if (!isContentCaptureEnabled()) return null;
+ if (!isContentCaptureEnabled() && !mOptions.lite) return null;
final SyncResultReceiver resultReceiver = new SyncResultReceiver(SYNC_CALLS_TIMEOUT_MS);
try {
@@ -307,6 +312,7 @@
*
* @hide
*/
+ // TODO: use "lite" options as it's done by activities from the content capture service
@Nullable
public static ComponentName getServiceSettingsComponentName() {
final IBinder binder = ServiceManager
@@ -342,6 +348,8 @@
* </ul>
*/
public boolean isContentCaptureEnabled() {
+ if (mOptions.lite) return false;
+
final MainContentCaptureSession mainSession;
synchronized (mLock) {
mainSession = mMainSession;