summaryrefslogtreecommitdiff
path: root/services/appwidget
diff options
context:
space:
mode:
authorMario Bertschler <bmario@google.com>2017-01-25 15:36:55 -0800
committerMario Bertschler <bmario@google.com>2017-02-01 10:58:31 -0800
commit86882f4587031e48ef1bb60f5f3d8a9a5281c7ee (patch)
treed17d55ed226111b78240a9b2bb5b805a51bc1155 /services/appwidget
parentcb07efbf74e99dd92230de5394834561bdba3326 (diff)
App Widget Service with dump in protobuf format
Test: This protobuf format is validated as a CTS test Bug: 33088921 Change-Id: I9d2a983052ade06cd3a13857b7e7f9e3d9bc275e
Diffstat (limited to 'services/appwidget')
-rw-r--r--services/appwidget/java/com/android/server/appwidget/AppWidgetServiceImpl.java93
1 files changed, 70 insertions, 23 deletions
diff --git a/services/appwidget/java/com/android/server/appwidget/AppWidgetServiceImpl.java b/services/appwidget/java/com/android/server/appwidget/AppWidgetServiceImpl.java
index ce50b301ddbe..4d2b10610fa8 100644
--- a/services/appwidget/java/com/android/server/appwidget/AppWidgetServiceImpl.java
+++ b/services/appwidget/java/com/android/server/appwidget/AppWidgetServiceImpl.java
@@ -71,6 +71,8 @@ import android.os.SystemClock;
import android.os.UserHandle;
import android.os.UserManager;
import android.os.storage.StorageManager;
+import android.service.appwidget.AppWidgetServiceDumpProto;
+import android.service.appwidget.WidgetProto;
import android.text.TextUtils;
import android.util.ArraySet;
import android.util.AtomicFile;
@@ -83,6 +85,7 @@ import android.util.SparseIntArray;
import android.util.SparseLongArray;
import android.util.TypedValue;
import android.util.Xml;
+import android.util.proto.ProtoOutputStream;
import android.view.Display;
import android.view.View;
import android.view.WindowManager;
@@ -717,34 +720,78 @@ class AppWidgetServiceImpl extends IAppWidgetService.Stub implements WidgetBacku
+ ", uid=" + Binder.getCallingUid());
synchronized (mLock) {
- int N = mProviders.size();
- pw.println("Providers:");
- for (int i = 0; i < N; i++) {
- dumpProvider(mProviders.get(i), i, pw);
+ if (args.length > 0 && "--proto".equals(args[0])) {
+ dumpProto(fd);
+ } else {
+ dumpInternal(pw);
}
+ }
+ }
- N = mWidgets.size();
- pw.println(" ");
- pw.println("Widgets:");
- for (int i = 0; i < N; i++) {
- dumpWidget(mWidgets.get(i), i, pw);
- }
+ private void dumpProto(FileDescriptor fd) {
+ Slog.i(TAG, "dump proto for " + mWidgets.size() + " widgets");
- N = mHosts.size();
- pw.println(" ");
- pw.println("Hosts:");
- for (int i = 0; i < N; i++) {
- dumpHost(mHosts.get(i), i, pw);
- }
+ ProtoOutputStream proto = new ProtoOutputStream(fd);
+ int N = mWidgets.size();
+ for (int i=0; i < N; i++) {
+ dumpProtoWidget(proto, mWidgets.get(i));
+ }
+ proto.flush();
+ }
+ private void dumpProtoWidget(ProtoOutputStream proto, Widget widget) {
+ if (widget.host == null || widget.provider == null) {
+ Slog.d(TAG, "skip dumping widget because host or provider is null: widget.host="
+ + widget.host + " widget.provider=" + widget.provider);
+ return;
+ }
+ long token = proto.start(AppWidgetServiceDumpProto.WIDGETS);
+ proto.write(WidgetProto.IS_CROSS_PROFILE,
+ widget.host.getUserId() != widget.provider.getUserId());
+ proto.write(WidgetProto.IS_HOST_STOPPED, widget.host.callbacks == null);
+ proto.write(WidgetProto.HOST_PACKAGE, widget.host.id.packageName);
+ proto.write(WidgetProto.PROVIDER_PACKAGE, widget.provider.id.componentName.getPackageName());
+ proto.write(WidgetProto.PROVIDER_CLASS, widget.provider.id.componentName.getClassName());
+ if (widget.options != null) {
+ proto.write(WidgetProto.MIN_WIDTH,
+ widget.options.getInt(AppWidgetManager.OPTION_APPWIDGET_MIN_WIDTH, 0));
+ proto.write(WidgetProto.MIN_HEIGHT,
+ widget.options.getInt(AppWidgetManager.OPTION_APPWIDGET_MIN_HEIGHT, 0));
+ proto.write(WidgetProto.MAX_WIDTH,
+ widget.options.getInt(AppWidgetManager.OPTION_APPWIDGET_MAX_WIDTH, 0));
+ proto.write(WidgetProto.MAX_HEIGHT,
+ widget.options.getInt(AppWidgetManager.OPTION_APPWIDGET_MAX_HEIGHT, 0));
+ }
+ proto.end(token);
+ }
- N = mPackagesWithBindWidgetPermission.size();
- pw.println(" ");
- pw.println("Grants:");
- for (int i = 0; i < N; i++) {
- Pair<Integer, String> grant = mPackagesWithBindWidgetPermission.valueAt(i);
- dumpGrant(grant, i, pw);
- }
+ private void dumpInternal(PrintWriter pw) {
+ int N = mProviders.size();
+ pw.println("Providers:");
+ for (int i = 0; i < N; i++) {
+ dumpProvider(mProviders.get(i), i, pw);
+ }
+
+ N = mWidgets.size();
+ pw.println(" ");
+ pw.println("Widgets:");
+ for (int i = 0; i < N; i++) {
+ dumpWidget(mWidgets.get(i), i, pw);
+ }
+
+ N = mHosts.size();
+ pw.println(" ");
+ pw.println("Hosts:");
+ for (int i = 0; i < N; i++) {
+ dumpHost(mHosts.get(i), i, pw);
+ }
+
+ N = mPackagesWithBindWidgetPermission.size();
+ pw.println(" ");
+ pw.println("Grants:");
+ for (int i = 0; i < N; i++) {
+ Pair<Integer, String> grant = mPackagesWithBindWidgetPermission.valueAt(i);
+ dumpGrant(grant, i, pw);
}
}