diff options
author | Mario Bertschler <bmario@google.com> | 2017-01-25 15:36:55 -0800 |
---|---|---|
committer | Mario Bertschler <bmario@google.com> | 2017-02-01 10:58:31 -0800 |
commit | 86882f4587031e48ef1bb60f5f3d8a9a5281c7ee (patch) | |
tree | d17d55ed226111b78240a9b2bb5b805a51bc1155 /services/appwidget | |
parent | cb07efbf74e99dd92230de5394834561bdba3326 (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.java | 93 |
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); } } |