summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Tony Mak <tonymak@google.com> 2019-09-26 20:39:03 +0100
committer Tony Mak <tonymak@google.com> 2019-10-04 14:47:49 +0000
commit384b8a69f9897ac7d3407a6da1fb16e2b9f096f8 (patch)
tree6a96f62a633d7b83cac9db47342437f62d880739
parent09ff08d055236ffbec540861cc9179901aecc08e (diff)
Fix an issue that dumpsys textclassification does not print latest settings
Issue: When we run dumpsys textclassification, shell spawns a process to run the dumpsys executable which binds to TCMS and calls TCMS.dump(). In TCMS.dump(), we create a TCM instance, and the TCM instance setups an ContentObserver to observe the settings changes. However, it does not pass the checkContentProviderAccess check because AMS does not keep track of processes spawned from shell. Solution: Create the TCM instance using the system server identity. Fixes: 141690465 Test: Execute the following commands 1. dumpsys textclassification 2. adb shell cmd device_config put textclassifier {key} {value} 3. dumpsys textclassification 4. Verify the output now reflects the latest value. Change-Id: Ia1185bd02688c0e7a3eb83487d3b843250b7f2cf
-rw-r--r--services/core/java/com/android/server/textclassifier/TextClassificationManagerService.java12
1 files changed, 9 insertions, 3 deletions
diff --git a/services/core/java/com/android/server/textclassifier/TextClassificationManagerService.java b/services/core/java/com/android/server/textclassifier/TextClassificationManagerService.java
index 4c935643da55..5493afd1b123 100644
--- a/services/core/java/com/android/server/textclassifier/TextClassificationManagerService.java
+++ b/services/core/java/com/android/server/textclassifier/TextClassificationManagerService.java
@@ -365,10 +365,16 @@ public final class TextClassificationManagerService extends ITextClassifierServi
protected void dump(FileDescriptor fd, PrintWriter fout, String[] args) {
if (!DumpUtils.checkDumpPermission(mContext, LOG_TAG, fout)) return;
IndentingPrintWriter pw = new IndentingPrintWriter(fout, " ");
- TextClassificationManager tcm = mContext.getSystemService(TextClassificationManager.class);
- tcm.dump(pw);
- pw.printPair("context", mContext); pw.println();
+ // Create a TCM instance with the system server identity. TCM creates a ContentObserver
+ // to listen for settings changes. It does not pass the checkContentProviderAccess check
+ // if we are using the shell identity, because AMS does not track of processes spawn from
+ // shell.
+ Binder.withCleanCallingIdentity(
+ () -> mContext.getSystemService(TextClassificationManager.class).dump(pw));
+
+ pw.printPair("context", mContext);
+ pw.println();
synchronized (mLock) {
int size = mUserStates.size();
pw.print("Number user states: "); pw.println(size);