Merge "Rewrite dumping NSSL hierarchy" into sc-v2-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
2bb5aa5527
@@ -107,6 +107,7 @@ import com.android.systemui.statusbar.phone.KeyguardBypassController;
|
||||
import com.android.systemui.statusbar.phone.StatusBar;
|
||||
import com.android.systemui.statusbar.policy.HeadsUpManager;
|
||||
import com.android.systemui.statusbar.policy.InflatedSmartReplyState;
|
||||
import com.android.systemui.util.DumpUtilsKt;
|
||||
import com.android.systemui.wmshell.BubblesManager;
|
||||
|
||||
import java.io.FileDescriptor;
|
||||
@@ -3305,40 +3306,45 @@ public class ExpandableNotificationRow extends ActivatableNotificationView
|
||||
|
||||
@Override
|
||||
public void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
|
||||
super.dump(fd, pw, args);
|
||||
pw.println(" Notification: " + mEntry.getKey());
|
||||
pw.print(" visibility: " + getVisibility());
|
||||
pw.print(", alpha: " + getAlpha());
|
||||
pw.print(", translation: " + getTranslation());
|
||||
pw.print(", removed: " + isRemoved());
|
||||
pw.print(", expandAnimationRunning: " + mExpandAnimationRunning);
|
||||
NotificationContentView showingLayout = getShowingLayout();
|
||||
pw.print(", privateShowing: " + (showingLayout == mPrivateLayout));
|
||||
pw.println();
|
||||
showingLayout.dump(fd, pw, args);
|
||||
pw.print(" ");
|
||||
if (getViewState() != null) {
|
||||
getViewState().dump(fd, pw, args);
|
||||
} else {
|
||||
pw.print("no viewState!!!");
|
||||
}
|
||||
pw.println();
|
||||
pw.println();
|
||||
if (mIsSummaryWithChildren) {
|
||||
pw.print(" ChildrenContainer");
|
||||
pw.print(" visibility: " + mChildrenContainer.getVisibility());
|
||||
pw.print(", alpha: " + mChildrenContainer.getAlpha());
|
||||
pw.print(", translationY: " + mChildrenContainer.getTranslationY());
|
||||
pw.println();
|
||||
List<ExpandableNotificationRow> notificationChildren = getAttachedChildren();
|
||||
pw.println(" Children: " + notificationChildren.size());
|
||||
pw.println(" {");
|
||||
for(ExpandableNotificationRow child : notificationChildren) {
|
||||
child.dump(fd, pw, args);
|
||||
// Skip super call; dump viewState ourselves
|
||||
pw.println("Notification: " + mEntry.getKey());
|
||||
DumpUtilsKt.withIndenting(pw, ipw -> {
|
||||
ipw.print("visibility: " + getVisibility());
|
||||
ipw.print(", alpha: " + getAlpha());
|
||||
ipw.print(", translation: " + getTranslation());
|
||||
ipw.print(", removed: " + isRemoved());
|
||||
ipw.print(", expandAnimationRunning: " + mExpandAnimationRunning);
|
||||
NotificationContentView showingLayout = getShowingLayout();
|
||||
ipw.print(", privateShowing: " + (showingLayout == mPrivateLayout));
|
||||
ipw.println();
|
||||
showingLayout.dump(fd, ipw, args);
|
||||
|
||||
if (getViewState() != null) {
|
||||
getViewState().dump(fd, ipw, args);
|
||||
ipw.println();
|
||||
} else {
|
||||
ipw.println("no viewState!!!");
|
||||
}
|
||||
pw.println(" }");
|
||||
pw.println();
|
||||
}
|
||||
|
||||
if (mIsSummaryWithChildren) {
|
||||
ipw.println();
|
||||
ipw.print("ChildrenContainer");
|
||||
ipw.print(" visibility: " + mChildrenContainer.getVisibility());
|
||||
ipw.print(", alpha: " + mChildrenContainer.getAlpha());
|
||||
ipw.print(", translationY: " + mChildrenContainer.getTranslationY());
|
||||
ipw.println();
|
||||
List<ExpandableNotificationRow> notificationChildren = getAttachedChildren();
|
||||
ipw.println("Children: " + notificationChildren.size());
|
||||
ipw.print("{");
|
||||
ipw.increaseIndent();
|
||||
for (ExpandableNotificationRow child : notificationChildren) {
|
||||
ipw.println();
|
||||
child.dump(fd, ipw, args);
|
||||
}
|
||||
ipw.decreaseIndent();
|
||||
ipw.println("}");
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -34,6 +34,7 @@ import com.android.systemui.animation.Interpolators;
|
||||
import com.android.systemui.statusbar.StatusBarIconView;
|
||||
import com.android.systemui.statusbar.notification.stack.ExpandableViewState;
|
||||
import com.android.systemui.statusbar.notification.stack.NotificationStackScrollLayout;
|
||||
import com.android.systemui.util.DumpUtilsKt;
|
||||
|
||||
import java.io.FileDescriptor;
|
||||
import java.io.PrintWriter;
|
||||
@@ -743,6 +744,16 @@ public abstract class ExpandableView extends FrameLayout implements Dumpable {
|
||||
|
||||
@Override
|
||||
public void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
|
||||
pw.println(getClass().getSimpleName());
|
||||
DumpUtilsKt.withIndenting(pw, ipw -> {
|
||||
ExpandableViewState viewState = getViewState();
|
||||
if (viewState == null) {
|
||||
ipw.println("no viewState!!!");
|
||||
} else {
|
||||
viewState.dump(fd, ipw, args);
|
||||
ipw.println();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -25,6 +25,10 @@ import android.view.View;
|
||||
import com.android.systemui.R;
|
||||
import com.android.systemui.statusbar.notification.stack.ExpandableViewState;
|
||||
import com.android.systemui.statusbar.notification.stack.ViewState;
|
||||
import com.android.systemui.util.DumpUtilsKt;
|
||||
|
||||
import java.io.FileDescriptor;
|
||||
import java.io.PrintWriter;
|
||||
|
||||
public class FooterView extends StackScrollerDecorView {
|
||||
private FooterViewButton mDismissButton;
|
||||
@@ -44,6 +48,19 @@ public class FooterView extends StackScrollerDecorView {
|
||||
return findViewById(R.id.dismiss_text);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
|
||||
super.dump(fd, pw, args);
|
||||
DumpUtilsKt.withIndenting(pw, ipw -> {
|
||||
ipw.println("visibility: " + DumpUtilsKt.visibilityString(getVisibility()));
|
||||
ipw.println("manageButton showHistory: " + mShowHistory);
|
||||
ipw.println("manageButton visibility: "
|
||||
+ DumpUtilsKt.visibilityString(mDismissButton.getVisibility()));
|
||||
ipw.println("dismissButton visibility: "
|
||||
+ DumpUtilsKt.visibilityString(mDismissButton.getVisibility()));
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onFinishInflate() {
|
||||
super.onFinishInflate();
|
||||
|
||||
@@ -1938,7 +1938,6 @@ public class NotificationContentView extends FrameLayout {
|
||||
}
|
||||
|
||||
public void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
|
||||
pw.print(" ");
|
||||
pw.print("contentView visibility: " + getVisibility());
|
||||
pw.print(", alpha: " + getAlpha());
|
||||
pw.print(", clipBounds: " + getClipBounds());
|
||||
|
||||
@@ -109,6 +109,7 @@ import com.android.systemui.statusbar.phone.UnlockedScreenOffAnimationController
|
||||
import com.android.systemui.statusbar.policy.HeadsUpUtil;
|
||||
import com.android.systemui.statusbar.policy.ScrollAdapter;
|
||||
import com.android.systemui.util.Assert;
|
||||
import com.android.systemui.util.DumpUtilsKt;
|
||||
|
||||
import java.io.FileDescriptor;
|
||||
import java.io.PrintWriter;
|
||||
@@ -4899,54 +4900,42 @@ public class NotificationStackScrollLayout extends ViewGroup implements Dumpable
|
||||
|
||||
@ShadeViewRefactor(RefactorComponent.SHADE_VIEW)
|
||||
public void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
|
||||
pw.println(String.format("[%s: pulsing=%s visibility=%s"
|
||||
+ " alpha=%f scrollY:%d maxTopPadding=%d showShelfOnly=%s"
|
||||
+ " qsExpandFraction=%f"
|
||||
+ " hideAmount=%f]",
|
||||
this.getClass().getSimpleName(),
|
||||
mPulsing ? "T" : "f",
|
||||
getVisibility() == View.VISIBLE ? "visible"
|
||||
: getVisibility() == View.GONE ? "gone"
|
||||
: "invisible",
|
||||
getAlpha(),
|
||||
mAmbientState.getScrollY(),
|
||||
mMaxTopPadding,
|
||||
mShouldShowShelfOnly ? "T" : "f",
|
||||
mQsExpansionFraction,
|
||||
mAmbientState.getHideAmount()));
|
||||
int childCount = getChildCount();
|
||||
pw.println(" Number of children: " + childCount);
|
||||
pw.println();
|
||||
StringBuilder sb = new StringBuilder("[")
|
||||
.append(this.getClass().getSimpleName()).append(":")
|
||||
.append(" pulsing=").append(mPulsing ? "T" : "f")
|
||||
.append(" visibility=").append(DumpUtilsKt.visibilityString(getVisibility()))
|
||||
.append(" alpha=").append(getAlpha())
|
||||
.append(" scrollY=").append(mAmbientState.getScrollY())
|
||||
.append(" maxTopPadding=").append(mMaxTopPadding)
|
||||
.append(" showShelfOnly=").append(mShouldShowShelfOnly ? "T" : "f")
|
||||
.append(" qsExpandFraction=").append(mQsExpansionFraction)
|
||||
.append(" isCurrentUserSetup=").append(mIsCurrentUserSetup)
|
||||
.append(" hideAmount=").append(mAmbientState.getHideAmount())
|
||||
.append("]");
|
||||
pw.println(sb.toString());
|
||||
DumpUtilsKt.withIndenting(pw, ipw -> {
|
||||
int childCount = getChildCount();
|
||||
ipw.println("Number of children: " + childCount);
|
||||
ipw.println();
|
||||
|
||||
for (int i = 0; i < childCount; i++) {
|
||||
ExpandableView child = (ExpandableView) getChildAt(i);
|
||||
child.dump(fd, pw, args);
|
||||
if (!(child instanceof ExpandableNotificationRow)) {
|
||||
pw.println(" " + child.getClass().getSimpleName());
|
||||
// Notifications dump it's viewstate as part of their dump to support children
|
||||
ExpandableViewState viewState = child.getViewState();
|
||||
if (viewState == null) {
|
||||
pw.println(" no viewState!!!");
|
||||
} else {
|
||||
pw.print(" ");
|
||||
viewState.dump(fd, pw, args);
|
||||
pw.println();
|
||||
pw.println();
|
||||
}
|
||||
for (int i = 0; i < childCount; i++) {
|
||||
ExpandableView child = (ExpandableView) getChildAt(i);
|
||||
child.dump(fd, ipw, args);
|
||||
ipw.println();
|
||||
}
|
||||
}
|
||||
int transientViewCount = getTransientViewCount();
|
||||
pw.println(" Transient Views: " + transientViewCount);
|
||||
for (int i = 0; i < transientViewCount; i++) {
|
||||
ExpandableView child = (ExpandableView) getTransientView(i);
|
||||
child.dump(fd, pw, args);
|
||||
}
|
||||
View swipedView = mSwipeHelper.getSwipedView();
|
||||
pw.println(" Swiped view: " + swipedView);
|
||||
if (swipedView instanceof ExpandableView) {
|
||||
ExpandableView expandableView = (ExpandableView) swipedView;
|
||||
expandableView.dump(fd, pw, args);
|
||||
}
|
||||
int transientViewCount = getTransientViewCount();
|
||||
pw.println("Transient Views: " + transientViewCount);
|
||||
for (int i = 0; i < transientViewCount; i++) {
|
||||
ExpandableView child = (ExpandableView) getTransientView(i);
|
||||
child.dump(fd, pw, args);
|
||||
}
|
||||
View swipedView = mSwipeHelper.getSwipedView();
|
||||
pw.println("Swiped view: " + swipedView);
|
||||
if (swipedView instanceof ExpandableView) {
|
||||
ExpandableView expandableView = (ExpandableView) swipedView;
|
||||
expandableView.dump(fd, pw, args);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@ShadeViewRefactor(RefactorComponent.SHADE_VIEW)
|
||||
|
||||
@@ -129,7 +129,6 @@ import com.android.keyguard.ViewMediatorCallback;
|
||||
import com.android.systemui.ActivityIntentHelper;
|
||||
import com.android.systemui.AutoReinflateContainer;
|
||||
import com.android.systemui.DejankUtils;
|
||||
import com.android.systemui.Dumpable;
|
||||
import com.android.systemui.EventLogTags;
|
||||
import com.android.systemui.InitController;
|
||||
import com.android.systemui.Prefs;
|
||||
@@ -235,6 +234,7 @@ import com.android.systemui.unfold.UnfoldLightRevealOverlayAnimation;
|
||||
import com.android.systemui.unfold.UnfoldTransitionWallpaperController;
|
||||
import com.android.systemui.unfold.config.UnfoldTransitionConfig;
|
||||
import com.android.systemui.unfold.util.NaturalRotationUnfoldProgressProvider;
|
||||
import com.android.systemui.util.DumpUtilsKt;
|
||||
import com.android.systemui.util.WallpaperController;
|
||||
import com.android.systemui.util.concurrency.DelayableExecutor;
|
||||
import com.android.systemui.util.concurrency.MessageRouter;
|
||||
@@ -936,8 +936,6 @@ public class StatusBar extends SystemUI implements
|
||||
data -> mCommandQueueCallbacks.animateExpandSettingsPanel(data.mSubpanel));
|
||||
mMessageRouter.subscribeTo(MSG_LAUNCH_TRANSITION_TIMEOUT,
|
||||
id -> onLaunchTransitionTimeout());
|
||||
|
||||
dumpManager.registerDumpable(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -2445,8 +2443,14 @@ public class StatusBar extends SystemUI implements
|
||||
}
|
||||
pw.println(" mStackScroller: ");
|
||||
if (mStackScroller != null) {
|
||||
pw.print (" ");
|
||||
((Dumpable) mStackScroller).dump(fd, pw, args);
|
||||
DumpUtilsKt.withIndenting(pw, ipw -> {
|
||||
// Triple indent until we rewrite the rest of this dump()
|
||||
ipw.increaseIndent();
|
||||
ipw.increaseIndent();
|
||||
mStackScroller.dump(fd, ipw, args);
|
||||
ipw.decreaseIndent();
|
||||
ipw.decreaseIndent();
|
||||
});
|
||||
}
|
||||
pw.println(" Theme:");
|
||||
String nightMode = mUiModeManager == null ? "null" : mUiModeManager.getNightMode() + "";
|
||||
|
||||
75
packages/SystemUI/src/com/android/systemui/util/DumpUtils.kt
Normal file
75
packages/SystemUI/src/com/android/systemui/util/DumpUtils.kt
Normal file
@@ -0,0 +1,75 @@
|
||||
/*
|
||||
* Copyright (C) 2021 The Android Open Source Project
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package com.android.systemui.util
|
||||
|
||||
import android.util.IndentingPrintWriter
|
||||
import android.view.View
|
||||
import java.io.PrintWriter
|
||||
import java.util.function.Consumer
|
||||
|
||||
/**
|
||||
* Run some code that will print to an [IndentingPrintWriter] that wraps the given [PrintWriter].
|
||||
*
|
||||
* If the given [PrintWriter] is an [IndentingPrintWriter], the block will be passed that same
|
||||
* instance with [IndentingPrintWriter.increaseIndent] having been called, and calling
|
||||
* [IndentingPrintWriter.decreaseIndent] after completion of the block, so the passed [PrintWriter]
|
||||
* should not be used before the block completes.
|
||||
*/
|
||||
inline fun PrintWriter.withIndenting(block: (IndentingPrintWriter) -> Unit) {
|
||||
if (this is IndentingPrintWriter) {
|
||||
this.withIncreasedIndent { block(this) }
|
||||
} else {
|
||||
block(IndentingPrintWriter(this))
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Run some code that will print to an [IndentingPrintWriter] that wraps the given [PrintWriter].
|
||||
*
|
||||
* If the given [PrintWriter] is an [IndentingPrintWriter], the block will be passed that same
|
||||
* instance with [IndentingPrintWriter.increaseIndent] having been called, and calling
|
||||
* [IndentingPrintWriter.decreaseIndent] after completion of the block, so the passed [PrintWriter]
|
||||
* should not be used before the block completes.
|
||||
*/
|
||||
fun PrintWriter.withIndenting(consumer: Consumer<IndentingPrintWriter>) {
|
||||
if (this is IndentingPrintWriter) {
|
||||
this.withIncreasedIndent { consumer.accept(this) }
|
||||
} else {
|
||||
consumer.accept(IndentingPrintWriter(this))
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Run some code inside a block, with [IndentingPrintWriter.increaseIndent] having been called on
|
||||
* the given argument, and calling [IndentingPrintWriter.decreaseIndent] after completion.
|
||||
*/
|
||||
inline fun IndentingPrintWriter.withIncreasedIndent(block: () -> Unit) {
|
||||
this.increaseIndent()
|
||||
try {
|
||||
block()
|
||||
} finally {
|
||||
this.decreaseIndent()
|
||||
}
|
||||
}
|
||||
|
||||
/** Return a readable string for the visibility */
|
||||
fun visibilityString(@View.Visibility visibility: Int): String = when (visibility) {
|
||||
View.GONE -> "gone"
|
||||
View.VISIBLE -> "visible"
|
||||
View.INVISIBLE -> "invisible"
|
||||
else -> "unknown:$visibility"
|
||||
}
|
||||
Reference in New Issue
Block a user