New Pipeline: log structure in dumpsys
For debugging reference purposes, log the full structure of the pipeline as constructed in dumpsys. Test: manual Change-Id: I774c444deae8a215921a80946d1d82cf2ad128bf
This commit is contained in:
@@ -34,6 +34,8 @@ import com.android.systemui.dagger.qualifiers.Main;
|
||||
import com.android.systemui.shared.plugins.PluginManager;
|
||||
import com.android.systemui.statusbar.dagger.CentralSurfacesModule;
|
||||
import com.android.systemui.statusbar.notification.collection.NotifCollection;
|
||||
import com.android.systemui.statusbar.notification.collection.PipelineDumpable;
|
||||
import com.android.systemui.statusbar.notification.collection.PipelineDumper;
|
||||
import com.android.systemui.statusbar.phone.CentralSurfaces;
|
||||
import com.android.systemui.statusbar.phone.NotificationListenerWithPlugins;
|
||||
import com.android.systemui.util.time.SystemClock;
|
||||
@@ -52,7 +54,8 @@ import javax.inject.Inject;
|
||||
*/
|
||||
@SysUISingleton
|
||||
@SuppressLint("OverrideAbstract")
|
||||
public class NotificationListener extends NotificationListenerWithPlugins {
|
||||
public class NotificationListener extends NotificationListenerWithPlugins implements
|
||||
PipelineDumpable {
|
||||
private static final String TAG = "NotificationListener";
|
||||
private static final boolean DEBUG = CentralSurfaces.DEBUG;
|
||||
private static final long MAX_RANKING_DELAY_MILLIS = 500L;
|
||||
@@ -255,6 +258,11 @@ public class NotificationListener extends NotificationListenerWithPlugins {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void dumpPipeline(@NonNull PipelineDumper d) {
|
||||
d.dump("notificationHandlers", mNotificationHandlers);
|
||||
}
|
||||
|
||||
private static Ranking getRankingOrTemporaryStandIn(RankingMap rankingMap, String key) {
|
||||
Ranking ranking = new Ranking();
|
||||
if (!rankingMap.getRanking(key, ranking)) {
|
||||
|
||||
@@ -137,7 +137,7 @@ import javax.inject.Inject;
|
||||
*/
|
||||
@MainThread
|
||||
@SysUISingleton
|
||||
public class NotifCollection implements Dumpable {
|
||||
public class NotifCollection implements Dumpable, PipelineDumpable {
|
||||
private final IStatusBarService mStatusBarService;
|
||||
private final SystemClock mClock;
|
||||
private final NotifPipelineFlags mNotifPipelineFlags;
|
||||
@@ -841,6 +841,14 @@ public class NotifCollection implements Dumpable {
|
||||
"\t\t"));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void dumpPipeline(@NonNull PipelineDumper d) {
|
||||
d.dump("notifCollectionListeners", mNotifCollectionListeners);
|
||||
d.dump("lifetimeExtenders", mLifetimeExtenders);
|
||||
d.dump("dismissInterceptors", mDismissInterceptors);
|
||||
d.dump("buildListener", mBuildListener);
|
||||
}
|
||||
|
||||
private final BatchableNotificationHandler mNotifHandler = new BatchableNotificationHandler() {
|
||||
@Override
|
||||
public void onNotificationPosted(StatusBarNotification sbn, RankingMap rankingMap) {
|
||||
|
||||
@@ -0,0 +1,21 @@
|
||||
/*
|
||||
* Copyright (C) 2022 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.statusbar.notification.collection
|
||||
|
||||
interface PipelineDumpable {
|
||||
fun dumpPipeline(d: PipelineDumper)
|
||||
}
|
||||
@@ -0,0 +1,51 @@
|
||||
package com.android.systemui.statusbar.notification.collection
|
||||
|
||||
import com.android.systemui.statusbar.notification.collection.listbuilder.pluggable.Pluggable
|
||||
import com.android.systemui.statusbar.notification.collection.notifcollection.NotifDismissInterceptor
|
||||
import com.android.systemui.statusbar.notification.collection.notifcollection.NotifLifetimeExtender
|
||||
import com.android.systemui.util.asIndenting
|
||||
import com.android.systemui.util.withIncreasedIndent
|
||||
import java.io.PrintWriter
|
||||
|
||||
class PipelineDumper(pw: PrintWriter) {
|
||||
private val ipw = pw.asIndenting()
|
||||
|
||||
fun println(a: Any?) = ipw.println(a)
|
||||
|
||||
fun dump(label: String, value: Any?) {
|
||||
ipw.print("$label: ")
|
||||
dump(value)
|
||||
}
|
||||
|
||||
private fun dump(value: Any?) = when (value) {
|
||||
null, is String, is Int -> ipw.println(value)
|
||||
is Collection<*> -> dumpCollection(value)
|
||||
else -> {
|
||||
ipw.println(value.fullPipelineName)
|
||||
(value as? PipelineDumpable)?.let {
|
||||
ipw.withIncreasedIndent { it.dumpPipeline(this) }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun dumpCollection(values: Collection<Any?>) {
|
||||
ipw.println(values.size)
|
||||
ipw.withIncreasedIndent { values.forEach { dump(it) } }
|
||||
}
|
||||
}
|
||||
|
||||
private val Any.bareClassName: String get() {
|
||||
val className = javaClass.name
|
||||
val packagePrefixLength = javaClass.`package`?.name?.length?.plus(1) ?: 0
|
||||
return className.substring(packagePrefixLength)
|
||||
}
|
||||
|
||||
private val Any.barePipelineName: String? get() = when (this) {
|
||||
is NotifLifetimeExtender -> name
|
||||
is NotifDismissInterceptor -> name
|
||||
is Pluggable<*> -> name
|
||||
else -> null
|
||||
}
|
||||
|
||||
private val Any.fullPipelineName: String get() =
|
||||
barePipelineName?.let { "\"$it\" ($bareClassName)" } ?: bareClassName
|
||||
@@ -87,7 +87,7 @@ import javax.inject.Inject;
|
||||
*/
|
||||
@MainThread
|
||||
@SysUISingleton
|
||||
public class ShadeListBuilder implements Dumpable {
|
||||
public class ShadeListBuilder implements Dumpable, PipelineDumpable {
|
||||
private final SystemClock mSystemClock;
|
||||
private final ShadeListBuilderLogger mLogger;
|
||||
private final NotificationInteractionTracker mInteractionTracker;
|
||||
@@ -1397,6 +1397,21 @@ public class ShadeListBuilder implements Dumpable {
|
||||
"\t\t"));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void dumpPipeline(@NonNull PipelineDumper d) {
|
||||
d.dump("choreographer", mChoreographer);
|
||||
d.dump("notifPreGroupFilters", mNotifPreGroupFilters);
|
||||
d.dump("onBeforeTransformGroupsListeners", mOnBeforeTransformGroupsListeners);
|
||||
d.dump("notifPromoters", mNotifPromoters);
|
||||
d.dump("onBeforeSortListeners", mOnBeforeSortListeners);
|
||||
d.dump("notifSections", mNotifSections);
|
||||
d.dump("notifComparators", mNotifComparators);
|
||||
d.dump("onBeforeFinalizeFilterListeners", mOnBeforeFinalizeFilterListeners);
|
||||
d.dump("notifFinalizeFilters", mNotifFinalizeFilters);
|
||||
d.dump("onBeforeRenderListListeners", mOnBeforeRenderListListeners);
|
||||
d.dump("onRenderListListener", mOnRenderListListener);
|
||||
}
|
||||
|
||||
/** See {@link #setOnRenderListListener(OnRenderListListener)} */
|
||||
public interface OnRenderListListener {
|
||||
/**
|
||||
|
||||
@@ -32,6 +32,8 @@ import com.android.systemui.Dumpable;
|
||||
import com.android.systemui.dagger.qualifiers.Main;
|
||||
import com.android.systemui.statusbar.NotificationListener;
|
||||
import com.android.systemui.statusbar.NotificationListener.NotificationHandler;
|
||||
import com.android.systemui.statusbar.notification.collection.PipelineDumpable;
|
||||
import com.android.systemui.statusbar.notification.collection.PipelineDumper;
|
||||
import com.android.systemui.util.concurrency.DelayableExecutor;
|
||||
import com.android.systemui.util.time.SystemClock;
|
||||
|
||||
@@ -63,7 +65,7 @@ import javax.inject.Inject;
|
||||
* passed along to the NotifCollection.
|
||||
*/
|
||||
@MainThread
|
||||
public class GroupCoalescer implements Dumpable {
|
||||
public class GroupCoalescer implements Dumpable, PipelineDumpable {
|
||||
private final DelayableExecutor mMainExecutor;
|
||||
private final SystemClock mClock;
|
||||
private final GroupCoalescerLogger mLogger;
|
||||
@@ -314,6 +316,11 @@ public class GroupCoalescer implements Dumpable {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void dumpPipeline(@NonNull PipelineDumper d) {
|
||||
d.dump("handler", mHandler);
|
||||
}
|
||||
|
||||
private final Comparator<CoalescedEvent> mEventComparator = (o1, o2) -> {
|
||||
int cmp = Boolean.compare(
|
||||
o2.getSbn().getNotification().isGroupSummary(),
|
||||
|
||||
@@ -15,24 +15,22 @@
|
||||
*/
|
||||
package com.android.systemui.statusbar.notification.collection.coordinator
|
||||
|
||||
import com.android.systemui.Dumpable
|
||||
import com.android.systemui.dump.DumpManager
|
||||
import com.android.systemui.statusbar.notification.NotifPipelineFlags
|
||||
import com.android.systemui.statusbar.notification.collection.NotifPipeline
|
||||
import com.android.systemui.statusbar.notification.collection.PipelineDumpable
|
||||
import com.android.systemui.statusbar.notification.collection.PipelineDumper
|
||||
import com.android.systemui.statusbar.notification.collection.coordinator.dagger.CoordinatorScope
|
||||
import com.android.systemui.statusbar.notification.collection.listbuilder.pluggable.NotifSectioner
|
||||
import java.io.PrintWriter
|
||||
import javax.inject.Inject
|
||||
|
||||
/**
|
||||
* Handles the attachment of [Coordinator]s to the [NotifPipeline] so that the
|
||||
* Coordinators can register their respective callbacks.
|
||||
*/
|
||||
interface NotifCoordinators : Coordinator, Dumpable
|
||||
interface NotifCoordinators : Coordinator, PipelineDumpable
|
||||
|
||||
@CoordinatorScope
|
||||
class NotifCoordinatorsImpl @Inject constructor(
|
||||
dumpManager: DumpManager,
|
||||
notifPipelineFlags: NotifPipelineFlags,
|
||||
dataStoreCoordinator: DataStoreCoordinator,
|
||||
hideLocallyDismissedNotifsCoordinator: HideLocallyDismissedNotifsCoordinator,
|
||||
@@ -66,8 +64,6 @@ class NotifCoordinatorsImpl @Inject constructor(
|
||||
* Creates all the coordinators.
|
||||
*/
|
||||
init {
|
||||
dumpManager.registerDumpable(TAG, this)
|
||||
|
||||
// TODO(b/208866714): formalize the system by which some coordinators may be required by the
|
||||
// pipeline, such as this DataStoreCoordinator which cannot be removed, as it's a critical
|
||||
// glue between the pipeline and parts of SystemUI which depend on pipeline output via the
|
||||
@@ -127,15 +123,12 @@ class NotifCoordinatorsImpl @Inject constructor(
|
||||
pipeline.setSections(mOrderedSections)
|
||||
}
|
||||
|
||||
override fun dump(pw: PrintWriter, args: Array<String>) {
|
||||
pw.println()
|
||||
pw.println("$TAG:")
|
||||
for (c in mCoordinators) {
|
||||
pw.println("\t${c.javaClass}")
|
||||
}
|
||||
for (s in mOrderedSections) {
|
||||
pw.println("\t${s.name}")
|
||||
}
|
||||
/*
|
||||
* As part of the NotifPipeline dumpable, dumps the list of coordinators; sections are omitted
|
||||
* as they are dumped in the RenderStageManager instead.
|
||||
*/
|
||||
override fun dumpPipeline(d: PipelineDumper) = with(d) {
|
||||
dump("coordinators", mCoordinators)
|
||||
}
|
||||
|
||||
companion object {
|
||||
|
||||
@@ -18,6 +18,8 @@ package com.android.systemui.statusbar.notification.collection.init;
|
||||
|
||||
import android.util.Log;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
|
||||
import com.android.systemui.Dumpable;
|
||||
import com.android.systemui.dagger.SysUISingleton;
|
||||
import com.android.systemui.dump.DumpManager;
|
||||
@@ -26,12 +28,15 @@ import com.android.systemui.statusbar.notification.NotifPipelineFlags;
|
||||
import com.android.systemui.statusbar.notification.collection.NotifCollection;
|
||||
import com.android.systemui.statusbar.notification.collection.NotifInflaterImpl;
|
||||
import com.android.systemui.statusbar.notification.collection.NotifPipeline;
|
||||
import com.android.systemui.statusbar.notification.collection.PipelineDumpable;
|
||||
import com.android.systemui.statusbar.notification.collection.PipelineDumper;
|
||||
import com.android.systemui.statusbar.notification.collection.ShadeListBuilder;
|
||||
import com.android.systemui.statusbar.notification.collection.coalescer.GroupCoalescer;
|
||||
import com.android.systemui.statusbar.notification.collection.coordinator.NotifCoordinators;
|
||||
import com.android.systemui.statusbar.notification.collection.inflation.NotificationRowBinderImpl;
|
||||
import com.android.systemui.statusbar.notification.collection.render.NotifStackController;
|
||||
import com.android.systemui.statusbar.notification.collection.render.RenderStageManager;
|
||||
import com.android.systemui.statusbar.notification.collection.render.ShadeViewManager;
|
||||
import com.android.systemui.statusbar.notification.collection.render.ShadeViewManagerFactory;
|
||||
import com.android.systemui.statusbar.notification.stack.NotificationListContainer;
|
||||
|
||||
@@ -43,7 +48,7 @@ import javax.inject.Inject;
|
||||
* Initialization code for the new notification pipeline.
|
||||
*/
|
||||
@SysUISingleton
|
||||
public class NotifPipelineInitializer implements Dumpable {
|
||||
public class NotifPipelineInitializer implements Dumpable, PipelineDumpable {
|
||||
private final NotifPipeline mPipelineWrapper;
|
||||
private final GroupCoalescer mGroupCoalescer;
|
||||
private final NotifCollection mNotifCollection;
|
||||
@@ -55,6 +60,9 @@ public class NotifPipelineInitializer implements Dumpable {
|
||||
private final ShadeViewManagerFactory mShadeViewManagerFactory;
|
||||
private final NotifPipelineFlags mNotifPipelineFlags;
|
||||
|
||||
/* These are saved just for dumping. */
|
||||
private ShadeViewManager mShadeViewManager;
|
||||
private NotificationListener mNotificationService;
|
||||
|
||||
@Inject
|
||||
public NotifPipelineInitializer(
|
||||
@@ -87,9 +95,10 @@ public class NotifPipelineInitializer implements Dumpable {
|
||||
NotificationRowBinderImpl rowBinder,
|
||||
NotificationListContainer listContainer,
|
||||
NotifStackController stackController) {
|
||||
|
||||
mDumpManager.registerDumpable("NotifPipeline", this);
|
||||
|
||||
mNotificationService = notificationService;
|
||||
|
||||
// Setup inflation
|
||||
if (mNotifPipelineFlags.isNewPipelineEnabled()) {
|
||||
mNotifInflater.setRowBinder(rowBinder);
|
||||
@@ -100,14 +109,13 @@ public class NotifPipelineInitializer implements Dumpable {
|
||||
|
||||
// Wire up pipeline
|
||||
if (mNotifPipelineFlags.isNewPipelineEnabled()) {
|
||||
mShadeViewManagerFactory
|
||||
.create(listContainer, stackController)
|
||||
.attach(mRenderStageManager);
|
||||
mShadeViewManager = mShadeViewManagerFactory.create(listContainer, stackController);
|
||||
mShadeViewManager.attach(mRenderStageManager);
|
||||
}
|
||||
mRenderStageManager.attach(mListBuilder);
|
||||
mListBuilder.attach(mNotifCollection);
|
||||
mNotifCollection.attach(mGroupCoalescer);
|
||||
mGroupCoalescer.attach(notificationService);
|
||||
mGroupCoalescer.attach(mNotificationService);
|
||||
|
||||
Log.d(TAG, "Notif pipeline initialized."
|
||||
+ " rendering=" + mNotifPipelineFlags.isNewPipelineEnabled());
|
||||
@@ -115,8 +123,37 @@ public class NotifPipelineInitializer implements Dumpable {
|
||||
|
||||
@Override
|
||||
public void dump(PrintWriter pw, String[] args) {
|
||||
mNotifPluggableCoordinators.dump(pw, args);
|
||||
mGroupCoalescer.dump(pw, args);
|
||||
dumpPipeline(new PipelineDumper(pw));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void dumpPipeline(@NonNull PipelineDumper d) {
|
||||
d.println("STAGE 0: SETUP");
|
||||
d.dump("notifPluggableCoordinators", mNotifPluggableCoordinators);
|
||||
d.println("");
|
||||
|
||||
d.println("STAGE 1: LISTEN");
|
||||
d.dump("notificationService", mNotificationService);
|
||||
d.println("");
|
||||
|
||||
d.println("STAGE 2: BATCH EVENTS");
|
||||
d.dump("groupCoalescer", mGroupCoalescer);
|
||||
d.println("");
|
||||
|
||||
d.println("STAGE 3: COLLECT");
|
||||
d.dump("notifCollection", mNotifCollection);
|
||||
d.println("");
|
||||
|
||||
d.println("STAGE 4: BUILD LIST");
|
||||
d.dump("listBuilder", mListBuilder);
|
||||
d.println("");
|
||||
|
||||
d.println("STAGE 5: DISPATCH RENDER");
|
||||
d.dump("renderStageManager", mRenderStageManager);
|
||||
d.println("");
|
||||
|
||||
d.println("STAGE 6: UPDATE SHADE");
|
||||
d.dump("shadeViewManager", mShadeViewManager);
|
||||
}
|
||||
|
||||
private static final String TAG = "NotifPipeline";
|
||||
|
||||
@@ -16,6 +16,8 @@
|
||||
|
||||
package com.android.systemui.statusbar.notification.collection.listbuilder
|
||||
|
||||
import com.android.systemui.statusbar.notification.collection.PipelineDumpable
|
||||
import com.android.systemui.statusbar.notification.collection.PipelineDumper
|
||||
import com.android.systemui.statusbar.notification.collection.listbuilder.pluggable.NotifComparator
|
||||
import com.android.systemui.statusbar.notification.collection.listbuilder.pluggable.NotifSectioner
|
||||
import com.android.systemui.statusbar.notification.collection.render.NodeController
|
||||
@@ -24,10 +26,18 @@ import com.android.systemui.statusbar.notification.stack.PriorityBucket
|
||||
data class NotifSection(
|
||||
val sectioner: NotifSectioner,
|
||||
val index: Int
|
||||
) {
|
||||
) : PipelineDumpable {
|
||||
@PriorityBucket
|
||||
val bucket: Int = sectioner.bucket
|
||||
val label: String = "$index:$bucket:${sectioner.name}"
|
||||
val headerController: NodeController? = sectioner.headerNodeController
|
||||
val comparator: NotifComparator? = sectioner.comparator
|
||||
|
||||
override fun dumpPipeline(d: PipelineDumper) = with(d) {
|
||||
dump("index", index)
|
||||
dump("bucket", bucket)
|
||||
dump("sectioner", sectioner)
|
||||
dump("headerController", headerController)
|
||||
dump("comparator", comparator)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -20,6 +20,8 @@ import com.android.systemui.dagger.SysUISingleton
|
||||
import com.android.systemui.statusbar.notification.collection.GroupEntry
|
||||
import com.android.systemui.statusbar.notification.collection.ListEntry
|
||||
import com.android.systemui.statusbar.notification.collection.NotificationEntry
|
||||
import com.android.systemui.statusbar.notification.collection.PipelineDumpable
|
||||
import com.android.systemui.statusbar.notification.collection.PipelineDumper
|
||||
import com.android.systemui.statusbar.notification.collection.ShadeListBuilder
|
||||
import com.android.systemui.statusbar.notification.collection.listbuilder.OnAfterRenderEntryListener
|
||||
import com.android.systemui.statusbar.notification.collection.listbuilder.OnAfterRenderGroupListener
|
||||
@@ -33,7 +35,7 @@ import javax.inject.Inject
|
||||
* provided to [setViewRenderer].
|
||||
*/
|
||||
@SysUISingleton
|
||||
class RenderStageManager @Inject constructor() {
|
||||
class RenderStageManager @Inject constructor() : PipelineDumpable {
|
||||
private val onAfterRenderListListeners = mutableListOf<OnAfterRenderListListener>()
|
||||
private val onAfterRenderGroupListeners = mutableListOf<OnAfterRenderGroupListener>()
|
||||
private val onAfterRenderEntryListeners = mutableListOf<OnAfterRenderEntryListener>()
|
||||
@@ -75,6 +77,13 @@ class RenderStageManager @Inject constructor() {
|
||||
onAfterRenderEntryListeners.add(listener)
|
||||
}
|
||||
|
||||
override fun dumpPipeline(d: PipelineDumper) = with(d) {
|
||||
dump("viewRenderer", viewRenderer)
|
||||
dump("onAfterRenderListListeners", onAfterRenderListListeners)
|
||||
dump("onAfterRenderGroupListeners", onAfterRenderGroupListeners)
|
||||
dump("onAfterRenderEntryListeners", onAfterRenderEntryListeners)
|
||||
}
|
||||
|
||||
private fun dispatchOnAfterRenderList(
|
||||
viewRenderer: NotifViewRenderer,
|
||||
entries: List<ListEntry>
|
||||
@@ -139,4 +148,4 @@ class RenderStageManager @Inject constructor() {
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -17,6 +17,8 @@
|
||||
package com.android.systemui.statusbar.notification.collection.render
|
||||
|
||||
import android.view.View
|
||||
import com.android.systemui.statusbar.notification.collection.PipelineDumpable
|
||||
import com.android.systemui.statusbar.notification.collection.PipelineDumper
|
||||
import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow
|
||||
import com.android.systemui.statusbar.notification.row.ExpandableView
|
||||
import com.android.systemui.statusbar.notification.stack.NotificationListContainer
|
||||
@@ -28,7 +30,7 @@ import com.android.systemui.statusbar.notification.stack.NotificationListContain
|
||||
class RootNodeController(
|
||||
private val listContainer: NotificationListContainer,
|
||||
override val view: View
|
||||
) : NodeController {
|
||||
) : NodeController, PipelineDumpable {
|
||||
override val nodeLabel: String = "<root>"
|
||||
|
||||
override fun getChildAt(index: Int): View? {
|
||||
@@ -59,4 +61,8 @@ class RootNodeController(
|
||||
listContainer.setChildTransferInProgress(false)
|
||||
}
|
||||
}
|
||||
|
||||
override fun dumpPipeline(d: PipelineDumper) = with(d) {
|
||||
dump("listContainer", listContainer)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -22,6 +22,8 @@ import com.android.systemui.statusbar.notification.NotificationSectionsFeatureMa
|
||||
import com.android.systemui.statusbar.notification.collection.GroupEntry
|
||||
import com.android.systemui.statusbar.notification.collection.ListEntry
|
||||
import com.android.systemui.statusbar.notification.collection.NotificationEntry
|
||||
import com.android.systemui.statusbar.notification.collection.PipelineDumpable
|
||||
import com.android.systemui.statusbar.notification.collection.PipelineDumper
|
||||
import com.android.systemui.statusbar.notification.collection.provider.SectionHeaderVisibilityProvider
|
||||
import com.android.systemui.statusbar.notification.stack.NotificationListContainer
|
||||
import com.android.systemui.util.traceSection
|
||||
@@ -43,12 +45,12 @@ class ShadeViewManager @AssistedInject constructor(
|
||||
nodeSpecBuilderLogger: NodeSpecBuilderLogger,
|
||||
shadeViewDifferLogger: ShadeViewDifferLogger,
|
||||
private val viewBarn: NotifViewBarn
|
||||
) {
|
||||
) : PipelineDumpable {
|
||||
// We pass a shim view here because the listContainer may not actually have a view associated
|
||||
// with it and the differ never actually cares about the root node's view.
|
||||
private val rootController = RootNodeController(listContainer, View(context))
|
||||
private val specBuilder = NodeSpecBuilder(mediaContainerController, featureManager,
|
||||
sectionHeaderVisibilityProvider, viewBarn, nodeSpecBuilderLogger)
|
||||
sectionHeaderVisibilityProvider, viewBarn, nodeSpecBuilderLogger)
|
||||
private val viewDiffer = ShadeViewDiffer(rootController, shadeViewDifferLogger)
|
||||
|
||||
/** Method for attaching this manager to the pipeline. */
|
||||
@@ -56,6 +58,12 @@ class ShadeViewManager @AssistedInject constructor(
|
||||
renderStageManager.setViewRenderer(viewRenderer)
|
||||
}
|
||||
|
||||
override fun dumpPipeline(d: PipelineDumper) = with(d) {
|
||||
dump("rootController", rootController)
|
||||
dump("specBuilder", specBuilder)
|
||||
dump("viewDiffer", viewDiffer)
|
||||
}
|
||||
|
||||
private val viewRenderer = object : NotifViewRenderer {
|
||||
|
||||
override fun onRenderList(notifList: List<ListEntry>) {
|
||||
|
||||
@@ -91,6 +91,8 @@ import com.android.systemui.statusbar.notification.NotificationEntryManager;
|
||||
import com.android.systemui.statusbar.notification.collection.NotifCollection;
|
||||
import com.android.systemui.statusbar.notification.collection.NotifPipeline;
|
||||
import com.android.systemui.statusbar.notification.collection.NotificationEntry;
|
||||
import com.android.systemui.statusbar.notification.collection.PipelineDumpable;
|
||||
import com.android.systemui.statusbar.notification.collection.PipelineDumper;
|
||||
import com.android.systemui.statusbar.notification.collection.legacy.NotificationGroupManagerLegacy;
|
||||
import com.android.systemui.statusbar.notification.collection.legacy.NotificationGroupManagerLegacy.OnGroupChangeListener;
|
||||
import com.android.systemui.statusbar.notification.collection.legacy.VisualStabilityManager;
|
||||
@@ -1610,7 +1612,8 @@ public class NotificationStackScrollLayoutController {
|
||||
}
|
||||
}
|
||||
|
||||
private class NotificationListContainerImpl implements NotificationListContainer {
|
||||
private class NotificationListContainerImpl implements NotificationListContainer,
|
||||
PipelineDumpable {
|
||||
|
||||
@Override
|
||||
public void setChildTransferInProgress(boolean childTransferInProgress) {
|
||||
@@ -1756,6 +1759,12 @@ public class NotificationStackScrollLayoutController {
|
||||
public void setWillExpand(boolean willExpand) {
|
||||
mView.setWillExpand(willExpand);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void dumpPipeline(@NonNull PipelineDumper d) {
|
||||
d.dump("NotificationStackScrollLayoutController.this",
|
||||
NotificationStackScrollLayoutController.this);
|
||||
}
|
||||
}
|
||||
|
||||
class TouchHandler implements Gefingerpoken {
|
||||
|
||||
Reference in New Issue
Block a user