summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/java/android/app/Activity.java63
-rw-r--r--core/java/android/view/autofill/AutofillClientController.java1
-rw-r--r--core/java/android/view/contentcapture/ContentCaptureManager.java14
-rw-r--r--core/java/com/android/internal/util/dump/DumpableContainerImpl.java6
4 files changed, 58 insertions, 26 deletions
diff --git a/core/java/android/app/Activity.java b/core/java/android/app/Activity.java
index 983dde3beda0..eaf79b49d461 100644
--- a/core/java/android/app/Activity.java
+++ b/core/java/android/app/Activity.java
@@ -7348,43 +7348,67 @@ public class Activity extends ContextThemeWrapper
public void dumpInternal(@NonNull String prefix,
@SuppressLint("UseParcelFileDescriptor") @Nullable FileDescriptor fd,
@NonNull PrintWriter writer, @Nullable String[] args) {
- if (args != null && args.length > 0
- && CompatChanges.isChangeEnabled(DUMP_IGNORES_SPECIAL_ARGS)) {
+
+ // Lazy-load mDumpableContainer with Dumpables activity might already have a reference to
+ if (mAutofillClientController != null) {
+ addDumpable(mAutofillClientController);
+ }
+ if (mUiTranslationController != null) {
+ addDumpable(mUiTranslationController);
+ }
+ if (mContentCaptureManager != null) {
+ mContentCaptureManager.addDumpable(this);
+ }
+
+ boolean dumpInternalState = true;
+ String arg = null;
+ if (args != null && args.length > 0) {
+ arg = args[0];
+ boolean isSpecialCase = true;
// Handle special cases
- switch (args[0]) {
+ switch (arg) {
case "--autofill":
dumpAutofillManager(prefix, writer, args);
- return;
+ break;
case "--contentcapture":
dumpContentCaptureManager(prefix, writer);
- return;
+ break;
case "--translation":
dumpUiTranslation(prefix, writer);
- return;
+ break;
case "--list-dumpables":
if (mDumpableContainer == null) {
writer.print(prefix); writer.println("No dumpables");
- return;
+ } else {
+ mDumpableContainer.listDumpables(prefix, writer);
}
- mDumpableContainer.listDumpables(prefix, writer);
- return;
+ break;
case "--dump-dumpable":
if (args.length == 1) {
writer.println("--dump-dumpable requires the dumpable name");
- return;
- }
- if (mDumpableContainer == null) {
+ } else if (mDumpableContainer == null) {
writer.println("no dumpables");
- return;
+ } else {
+ // Strips --dump-dumpable NAME
+ String[] prunedArgs = new String[args.length - 2];
+ System.arraycopy(args, 2, prunedArgs, 0, prunedArgs.length);
+ mDumpableContainer.dumpOneDumpable(prefix, writer, args[1], prunedArgs);
}
- // Strips --dump-dumpable NAME
- String[] prunedArgs = new String[args.length - 2];
- System.arraycopy(args, 2, prunedArgs, 0, prunedArgs.length);
- mDumpableContainer.dumpOneDumpable(prefix, writer, args[1], prunedArgs);
- return;
+ break;
+ default:
+ isSpecialCase = false;
+ break;
+ }
+ if (isSpecialCase) {
+ dumpInternalState = !CompatChanges.isChangeEnabled(DUMP_IGNORES_SPECIAL_ARGS);
}
}
- dump(prefix, fd, writer, args);
+
+ if (dumpInternalState) {
+ dump(prefix, fd, writer, args);
+ } else {
+ Log.i(TAG, "Not calling dump() on " + this + " because of special argument " + arg);
+ }
}
void dumpInner(@NonNull String prefix, @Nullable FileDescriptor fd,
@@ -7429,7 +7453,6 @@ public class Activity extends ContextThemeWrapper
}
private void dumpContentCaptureManager(String prefix, PrintWriter writer) {
- getContentCaptureManager();
dumpLegacyDumpable(prefix, writer, ContentCaptureManager.DUMPABLE_NAME, /* args= */ null);
}
diff --git a/core/java/android/view/autofill/AutofillClientController.java b/core/java/android/view/autofill/AutofillClientController.java
index 0f0fa4a83c00..93d98ac51c3b 100644
--- a/core/java/android/view/autofill/AutofillClientController.java
+++ b/core/java/android/view/autofill/AutofillClientController.java
@@ -76,7 +76,6 @@ public final class AutofillClientController implements AutofillManager.AutofillC
*/
public AutofillClientController(Activity activity) {
mActivity = activity;
- activity.addDumpable(this);
}
private AutofillManager getAutofillManager() {
diff --git a/core/java/android/view/contentcapture/ContentCaptureManager.java b/core/java/android/view/contentcapture/ContentCaptureManager.java
index 54bd9e701acf..ad48ea006a21 100644
--- a/core/java/android/view/contentcapture/ContentCaptureManager.java
+++ b/core/java/android/view/contentcapture/ContentCaptureManager.java
@@ -391,6 +391,9 @@ public final class ContentCaptureManager {
@GuardedBy("mLock")
private MainContentCaptureSession mMainSession;
+ @Nullable // set on-demand by addDumpable()
+ private Dumper mDumpable;
+
/** @hide */
public interface ContentCaptureClient {
/**
@@ -407,9 +410,6 @@ public final class ContentCaptureManager {
mService = Objects.requireNonNull(service, "service cannot be null");
mOptions = Objects.requireNonNull(options, "options cannot be null");
- if (context instanceof Activity) {
- ((Activity) context).addDumpable(new Dumper());
- }
ContentCaptureHelper.setLoggingLevel(mOptions.loggingLevel);
if (sVerbose) Log.v(TAG, "Constructor for " + context.getPackageName());
@@ -748,6 +748,14 @@ public final class ContentCaptureManager {
return resultReceiver;
}
+ /** @hide */
+ public void addDumpable(Activity activity) {
+ if (mDumpable == null) {
+ mDumpable = new Dumper();
+ }
+ activity.addDumpable(mDumpable);
+ }
+
// NOTE: ContentCaptureManager cannot implement it directly as it would be exposed as public API
private final class Dumper implements Dumpable {
@Override
diff --git a/core/java/com/android/internal/util/dump/DumpableContainerImpl.java b/core/java/com/android/internal/util/dump/DumpableContainerImpl.java
index 2e56ebf1e41c..ccec6c61b92a 100644
--- a/core/java/com/android/internal/util/dump/DumpableContainerImpl.java
+++ b/core/java/com/android/internal/util/dump/DumpableContainerImpl.java
@@ -47,8 +47,10 @@ public final class DumpableContainerImpl implements DumpableContainer {
Objects.requireNonNull(name, () -> "name of" + dumpable);
if (mDumpables.containsKey(name)) {
- Log.e(TAG, "addDumpable(): ignoring " + dumpable + " as there is already a dumpable"
- + " with that name (" + name + "): " + mDumpables.get(name));
+ if (DEBUG) {
+ Log.d(TAG, "addDumpable(): ignoring " + dumpable + " as there is already a dumpable"
+ + " with that name (" + name + "): " + mDumpables.get(name));
+ }
return false;
}