summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/NotificationEntry.java13
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationRowContentBinderImpl.kt76
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/notification/row/shared/HeadsUpStatusBarModel.kt22
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/notification/row/shared/NewRemoteViews.kt12
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/notification/row/shared/NotificationContentModel.kt24
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/NotificationRowContentBinderImplTest.kt12
6 files changed, 118 insertions, 41 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/NotificationEntry.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/NotificationEntry.java
index b397906fc06f..1adfef061235 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/NotificationEntry.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/NotificationEntry.java
@@ -68,6 +68,9 @@ import com.android.systemui.statusbar.notification.icon.IconPack;
import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow;
import com.android.systemui.statusbar.notification.row.ExpandableNotificationRowController;
import com.android.systemui.statusbar.notification.row.NotificationGuts;
+import com.android.systemui.statusbar.notification.row.shared.HeadsUpStatusBarModel;
+import com.android.systemui.statusbar.notification.row.shared.NotificationContentModel;
+import com.android.systemui.statusbar.notification.row.shared.NotificationRowContentBinderRefactor;
import com.android.systemui.statusbar.notification.stack.PriorityBucket;
import com.android.systemui.util.ListenerSet;
@@ -951,6 +954,7 @@ public final class NotificationEntry extends ListEntry {
* heads up.
*/
public void setHeadsUpStatusBarText(CharSequence headsUpStatusBarText) {
+ NotificationRowContentBinderRefactor.assertInLegacyMode();
this.mHeadsUpStatusBarText.setValue(headsUpStatusBarText);
}
@@ -964,6 +968,7 @@ public final class NotificationEntry extends ListEntry {
* heads up, and its content is sensitive right now.
*/
public void setHeadsUpStatusBarTextPublic(CharSequence headsUpStatusBarTextPublic) {
+ NotificationRowContentBinderRefactor.assertInLegacyMode();
this.mHeadsUpStatusBarTextPublic.setValue(headsUpStatusBarTextPublic);
}
@@ -1036,6 +1041,14 @@ public final class NotificationEntry extends ListEntry {
== Notification.VISIBILITY_PRIVATE;
}
+ /** Set the content generated by the notification inflater. */
+ public void setContentModel(NotificationContentModel contentModel) {
+ if (NotificationRowContentBinderRefactor.isUnexpectedlyInLegacyMode()) return;
+ HeadsUpStatusBarModel headsUpStatusBarModel = contentModel.getHeadsUpStatusBarModel();
+ this.mHeadsUpStatusBarText.setValue(headsUpStatusBarModel.getPrivateText());
+ this.mHeadsUpStatusBarTextPublic.setValue(headsUpStatusBarModel.getPublicText());
+ }
+
/** Information about a suggestion that is being edited. */
public static class EditedSuggestionInfo {
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationRowContentBinderImpl.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationRowContentBinderImpl.kt
index 3d0133090ff5..b40458c73b9c 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationRowContentBinderImpl.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationRowContentBinderImpl.kt
@@ -58,11 +58,12 @@ import com.android.systemui.statusbar.notification.row.NotificationRowContentBin
import com.android.systemui.statusbar.notification.row.NotificationRowContentBinder.InflationFlag
import com.android.systemui.statusbar.notification.row.shared.AsyncGroupHeaderViewInflation
import com.android.systemui.statusbar.notification.row.shared.AsyncHybridViewInflation
+import com.android.systemui.statusbar.notification.row.shared.HeadsUpStatusBarModel
import com.android.systemui.statusbar.notification.row.shared.NewRemoteViews
+import com.android.systemui.statusbar.notification.row.shared.NotificationContentModel
import com.android.systemui.statusbar.notification.row.shared.NotificationRowContentBinderRefactor
import com.android.systemui.statusbar.notification.row.ui.viewbinder.SingleLineConversationViewBinder
import com.android.systemui.statusbar.notification.row.ui.viewbinder.SingleLineViewBinder
-import com.android.systemui.statusbar.notification.row.ui.viewmodel.SingleLineViewModel
import com.android.systemui.statusbar.notification.row.wrapper.NotificationViewWrapper
import com.android.systemui.statusbar.notification.stack.NotificationChildrenContainer
import com.android.systemui.statusbar.policy.InflatedSmartReplyState
@@ -161,6 +162,7 @@ constructor(
packageContext: Context,
smartRepliesInflater: SmartReplyStateInflater
): InflationProgress {
+ val systemUIContext = row.context
val result =
beginInflationAsync(
reInflateFlags = reInflateFlags,
@@ -169,7 +171,7 @@ constructor(
isMinimized = bindParams.isMinimized,
usesIncreasedHeight = bindParams.usesIncreasedHeight,
usesIncreasedHeadsUpHeight = bindParams.usesIncreasedHeadsUpHeight,
- systemUIContext = packageContext,
+ systemUIContext = systemUIContext,
packageContext = packageContext,
row = row,
notifLayoutInflaterFactoryProvider = notifLayoutInflaterFactoryProvider,
@@ -181,7 +183,7 @@ constructor(
result,
reInflateFlags,
entry,
- row.context,
+ systemUIContext,
packageContext,
row.existingSmartReplyState,
smartRepliesInflater,
@@ -189,12 +191,12 @@ constructor(
)
if (AsyncHybridViewInflation.isEnabled) {
result.inflatedSingleLineView =
- result.inflatedSingleLineViewModel?.let { viewModel ->
+ result.contentModel.singleLineViewModel?.let { viewModel ->
SingleLineViewInflater.inflateSingleLineViewHolder(
viewModel.isConversation(),
reInflateFlags,
entry,
- row.context,
+ systemUIContext,
logger,
)
}
@@ -451,9 +453,9 @@ constructor(
if (AsyncHybridViewInflation.isEnabled) {
logger.logAsyncTaskProgress(entry, "inflating single line view")
inflationProgress.inflatedSingleLineView =
- inflationProgress.inflatedSingleLineViewModel?.let { viewModel ->
+ inflationProgress.contentModel.singleLineViewModel?.let {
SingleLineViewInflater.inflateSingleLineViewHolder(
- viewModel.isConversation(),
+ it.isConversation(),
reInflateFlags,
entry,
context,
@@ -551,10 +553,11 @@ constructor(
}
@VisibleForTesting
- class InflationProgress {
- lateinit var remoteViews: NewRemoteViews
-
- @VisibleForTesting var packageContext: Context? = null
+ class InflationProgress(
+ @VisibleForTesting val packageContext: Context,
+ val remoteViews: NewRemoteViews,
+ val contentModel: NotificationContentModel,
+ ) {
var inflatedContentView: View? = null
var inflatedHeadsUpView: View? = null
@@ -562,15 +565,10 @@ constructor(
var inflatedPublicView: View? = null
var inflatedGroupHeaderView: NotificationHeaderView? = null
var inflatedMinimizedGroupHeaderView: NotificationHeaderView? = null
- var headsUpStatusBarText: CharSequence? = null
- var headsUpStatusBarTextPublic: CharSequence? = null
var inflatedSmartReplyState: InflatedSmartReplyState? = null
var expandedInflatedSmartReplies: InflatedSmartReplyViewHolder? = null
var headsUpInflatedSmartReplies: InflatedSmartReplyViewHolder? = null
- // ViewModel for SingleLineView, holds the UI State
- var inflatedSingleLineViewModel: SingleLineViewModel? = null
-
// Inflated SingleLineView that lacks the UI State
var inflatedSingleLineView: HybridNotificationView? = null
}
@@ -647,15 +645,13 @@ constructor(
conversationProcessor: ConversationNotificationProcessor,
logger: NotificationRowContentBinderLogger
): InflationProgress {
- val result = InflationProgress()
-
// process conversations and extract the messaging style
val messagingStyle =
if (entry.ranking.isConversation) {
conversationProcessor.processNotification(entry, builder, logger)
} else null
- result.remoteViews =
+ val remoteViews =
createRemoteViews(
reInflateFlags = reInflateFlags,
builder = builder,
@@ -668,22 +664,37 @@ constructor(
logger = logger,
)
- if (AsyncHybridViewInflation.isEnabled) {
- logger.logAsyncTaskProgress(entry, "inflating single line view model")
- result.inflatedSingleLineViewModel =
+ val singleLineViewModel =
+ if (
+ AsyncHybridViewInflation.isEnabled &&
+ reInflateFlags and FLAG_CONTENT_VIEW_SINGLE_LINE != 0
+ ) {
+ logger.logAsyncTaskProgress(entry, "inflating single line view model")
SingleLineViewInflater.inflateSingleLineViewModel(
notification = entry.sbn.notification,
messagingStyle = messagingStyle,
builder = builder,
systemUiContext = systemUIContext,
)
- }
+ } else null
+
+ val headsUpStatusBarModel =
+ HeadsUpStatusBarModel(
+ privateText = builder.getHeadsUpStatusBarText(/* publicMode= */ false),
+ publicText = builder.getHeadsUpStatusBarText(/* publicMode= */ true),
+ )
- result.packageContext = packageContext
- result.headsUpStatusBarText = builder.getHeadsUpStatusBarText(false /* showingPublic */)
- result.headsUpStatusBarTextPublic =
- builder.getHeadsUpStatusBarText(true /* showingPublic */)
- return result
+ val contentModel =
+ NotificationContentModel(
+ headsUpStatusBarModel = headsUpStatusBarModel,
+ singleLineViewModel = singleLineViewModel,
+ )
+
+ return InflationProgress(
+ packageContext = packageContext,
+ remoteViews = remoteViews,
+ contentModel = contentModel,
+ )
}
private fun createRemoteViews(
@@ -877,7 +888,7 @@ constructor(
}
override val remoteView: RemoteViews
- get() = result.remoteViews.expanded!!
+ get() = result.remoteViews.expanded
}
logger.logAsyncTaskProgress(entry, "applying expanded view")
applyRemoteView(
@@ -922,7 +933,7 @@ constructor(
}
override val remoteView: RemoteViews
- get() = result.remoteViews.headsUp!!
+ get() = result.remoteViews.headsUp
}
logger.logAsyncTaskProgress(entry, "applying heads up view")
applyRemoteView(
@@ -1448,7 +1459,7 @@ constructor(
reInflateFlags and FLAG_CONTENT_VIEW_SINGLE_LINE != 0
) {
val singleLineView = result.inflatedSingleLineView
- val viewModel: SingleLineViewModel? = result.inflatedSingleLineViewModel
+ val viewModel = result.contentModel.singleLineViewModel
if (singleLineView != null && viewModel != null) {
if (viewModel.isConversation()) {
SingleLineConversationViewBinder.bind(viewModel, singleLineView)
@@ -1525,8 +1536,7 @@ constructor(
}
}
}
- entry.setHeadsUpStatusBarText(result.headsUpStatusBarText)
- entry.setHeadsUpStatusBarTextPublic(result.headsUpStatusBarTextPublic)
+ entry.setContentModel(result.contentModel)
Trace.endAsyncSection(APPLY_TRACE_METHOD, System.identityHashCode(row))
endListener?.onAsyncInflationFinished(entry)
return true
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/shared/HeadsUpStatusBarModel.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/shared/HeadsUpStatusBarModel.kt
new file mode 100644
index 000000000000..e43ce76d6482
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/shared/HeadsUpStatusBarModel.kt
@@ -0,0 +1,22 @@
+/*
+ * Copyright (C) 2024 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.row.shared
+
+class HeadsUpStatusBarModel(
+ val privateText: CharSequence,
+ val publicText: CharSequence,
+)
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/shared/NewRemoteViews.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/shared/NewRemoteViews.kt
index 02a8a0747f1b..63bba86464b4 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/shared/NewRemoteViews.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/shared/NewRemoteViews.kt
@@ -19,10 +19,10 @@ package com.android.systemui.statusbar.notification.row.shared
import android.widget.RemoteViews
class NewRemoteViews(
- val contracted: RemoteViews?,
- val headsUp: RemoteViews?,
- val expanded: RemoteViews?,
- val public: RemoteViews?,
- val normalGroupHeader: RemoteViews?,
- val minimizedGroupHeader: RemoteViews?,
+ val contracted: RemoteViews? = null,
+ val headsUp: RemoteViews? = null,
+ val expanded: RemoteViews? = null,
+ val public: RemoteViews? = null,
+ val normalGroupHeader: RemoteViews? = null,
+ val minimizedGroupHeader: RemoteViews? = null,
)
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/shared/NotificationContentModel.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/shared/NotificationContentModel.kt
new file mode 100644
index 000000000000..b2421bc72d00
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/shared/NotificationContentModel.kt
@@ -0,0 +1,24 @@
+/*
+ * Copyright (C) 2024 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.row.shared
+
+import com.android.systemui.statusbar.notification.row.ui.viewmodel.SingleLineViewModel
+
+data class NotificationContentModel(
+ val headsUpStatusBarModel: HeadsUpStatusBarModel,
+ val singleLineViewModel: SingleLineViewModel? = null,
+)
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/NotificationRowContentBinderImplTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/NotificationRowContentBinderImplTest.kt
index fdd1966db027..e6cba1c39c85 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/NotificationRowContentBinderImplTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/NotificationRowContentBinderImplTest.kt
@@ -36,6 +36,9 @@ import com.android.systemui.statusbar.notification.collection.NotificationEntry
import com.android.systemui.statusbar.notification.row.NotificationRowContentBinder.BindParams
import com.android.systemui.statusbar.notification.row.NotificationRowContentBinder.InflationCallback
import com.android.systemui.statusbar.notification.row.NotificationRowContentBinder.InflationFlag
+import com.android.systemui.statusbar.notification.row.shared.HeadsUpStatusBarModel
+import com.android.systemui.statusbar.notification.row.shared.NewRemoteViews
+import com.android.systemui.statusbar.notification.row.shared.NotificationContentModel
import com.android.systemui.statusbar.notification.row.shared.NotificationRowContentBinderRefactor
import com.android.systemui.statusbar.policy.InflatedSmartReplyState
import com.android.systemui.statusbar.policy.InflatedSmartReplyViewHolder
@@ -219,8 +222,13 @@ class NotificationRowContentBinderImplTest : SysuiTestCase() {
@Test
@Ignore("b/345418902")
fun testInflationIsRetriedIfAsyncFails() {
- val result = NotificationRowContentBinderImpl.InflationProgress()
- result.packageContext = mContext
+ val headsUpStatusBarModel = HeadsUpStatusBarModel("private", "public")
+ val result =
+ NotificationRowContentBinderImpl.InflationProgress(
+ packageContext = mContext,
+ remoteViews = NewRemoteViews(),
+ contentModel = NotificationContentModel(headsUpStatusBarModel)
+ )
val countDownLatch = CountDownLatch(1)
NotificationRowContentBinderImpl.applyRemoteView(
AsyncTask.SERIAL_EXECUTOR,