summaryrefslogtreecommitdiff
path: root/core/java/android
diff options
context:
space:
mode:
authorPhilip P. Moltmann <moltmann@google.com>2020-05-07 05:22:23 +0000
committerAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>2020-05-07 05:22:23 +0000
commit2ed09527447303ed785202228a5d6bf71ebb701f (patch)
tree4446333f1ab20f8cf3e2673098033d282d0e56bb /core/java/android
parent10662e54cc84c2cd22455dca96919ac44cc7dfae (diff)
parentf7d1f1a40c0bd8bdf346c723fc2cfbbc897e9494 (diff)
Merge "Forward dumps from PermissionControllerManager to permissionmgr" into rvc-dev am: f7d1f1a40c
Change-Id: I6a179fc69d68b70107de794c113c6acfcef67f3f
Diffstat (limited to 'core/java/android')
-rw-r--r--core/java/android/permission/PermissionControllerManager.java37
-rw-r--r--core/java/android/permission/PermissionControllerService.java7
2 files changed, 44 insertions, 0 deletions
diff --git a/core/java/android/permission/PermissionControllerManager.java b/core/java/android/permission/PermissionControllerManager.java
index ed429dd835c3..06caa03e3cb4 100644
--- a/core/java/android/permission/PermissionControllerManager.java
+++ b/core/java/android/permission/PermissionControllerManager.java
@@ -56,10 +56,15 @@ import com.android.internal.annotations.GuardedBy;
import com.android.internal.infra.AndroidFuture;
import com.android.internal.infra.RemoteStream;
import com.android.internal.infra.ServiceConnector;
+import com.android.internal.os.TransferPipe;
import com.android.internal.util.CollectionUtils;
import libcore.util.EmptyArray;
+import java.io.FileDescriptor;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.PrintWriter;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.util.ArrayList;
@@ -67,7 +72,9 @@ import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.Map;
+import java.util.concurrent.CompletableFuture;
import java.util.concurrent.Executor;
+import java.util.concurrent.TimeUnit;
import java.util.function.Consumer;
/**
@@ -476,6 +483,36 @@ public final class PermissionControllerManager {
}
/**
+ * Dump permission controller state.
+ *
+ * @hide
+ */
+ public void dump(@NonNull FileDescriptor fd, @NonNull PrintWriter pw, @Nullable String[] args) {
+ CompletableFuture<Throwable> dumpResult = new CompletableFuture<>();
+ mRemoteService.postForResult(
+ service -> TransferPipe.dumpAsync(service.asBinder(), args))
+ .whenComplete(
+ (dump, err) -> {
+ try (FileOutputStream out = new FileOutputStream(fd)) {
+ out.write(dump);
+ } catch (IOException | NullPointerException e) {
+ Log.e(TAG, "Could for forwards permission controller dump", e);
+ }
+
+ dumpResult.complete(err);
+ });
+
+ try {
+ Throwable err = dumpResult.get(UNBIND_TIMEOUT_MILLIS, TimeUnit.MILLISECONDS);
+ if (err != null) {
+ throw err;
+ }
+ } catch (Throwable e) {
+ Log.e(TAG, "Could not dump permission controller state", e);
+ }
+ }
+
+ /**
* Gets the runtime permissions for an app.
*
* @param packageName The package for which to query.
diff --git a/core/java/android/permission/PermissionControllerService.java b/core/java/android/permission/PermissionControllerService.java
index 82a7d788100d..c6ede32d0864 100644
--- a/core/java/android/permission/PermissionControllerService.java
+++ b/core/java/android/permission/PermissionControllerService.java
@@ -50,9 +50,11 @@ import com.android.internal.infra.AndroidFuture;
import com.android.internal.util.CollectionUtils;
import com.android.internal.util.Preconditions;
+import java.io.FileDescriptor;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
+import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
@@ -494,6 +496,11 @@ public abstract class PermissionControllerService extends Service {
"packageName cannot be null");
onOneTimePermissionSessionTimeout(packageName);
}
+
+ @Override
+ protected void dump(FileDescriptor fd, PrintWriter writer, String[] args) {
+ PermissionControllerService.this.dump(fd, writer, args);
+ }
};
}
}