Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 5aeed432 authored by András Kurucz's avatar András Kurucz
Browse files

Make NotificationStatsLogger and its ViewModel non-optional

After inlining the NotificationsLiveDataStoreRefactor flag, the new
NotificationStatsLogger should be always created. It was just made
optional to make sure that we're not constructing it with the flag being
off.

Bug: 424001722
Test: smoke test the new NotificationLogger
Test: check lights out mode
Flag: EXEMPT mechanical refactor
Change-Id: Ibad2e4a249ac9b233231699a1d965394bb4528e0
parent ef3a92e0
Loading
Loading
Loading
Loading
+1 −2
Original line number Diff line number Diff line
@@ -27,7 +27,6 @@ import com.android.systemui.statusbar.notification.stack.ui.view.NotificationSta
import com.android.systemui.util.mockito.mock
import com.android.systemui.util.mockito.whenever
import com.android.systemui.util.mockito.withArgCaptor
import java.util.Optional
import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith
@@ -42,7 +41,7 @@ class NotificationStatsLoggerCoordinatorTest : SysuiTestCase() {

    private val pipeline: NotifPipeline = mock()
    private val logger: NotificationStatsLogger = mock()
    private val underTest = NotificationStatsLoggerCoordinator(Optional.of(logger))
    private val underTest = NotificationStatsLoggerCoordinator(logger)

    @Before
    fun attachPipeline() {
+3 −4
Original line number Diff line number Diff line
@@ -21,24 +21,23 @@ import com.android.systemui.statusbar.notification.collection.NotificationEntry
import com.android.systemui.statusbar.notification.collection.coordinator.dagger.CoordinatorScope
import com.android.systemui.statusbar.notification.collection.notifcollection.NotifCollectionListener
import com.android.systemui.statusbar.notification.stack.ui.view.NotificationStatsLogger
import java.util.Optional
import javax.inject.Inject

@CoordinatorScope
class NotificationStatsLoggerCoordinator
@Inject
constructor(private val loggerOptional: Optional<NotificationStatsLogger>) : Coordinator {
constructor(private val logger: NotificationStatsLogger) : Coordinator {

    private val collectionListener =
        object : NotifCollectionListener {
            override fun onEntryUpdated(entry: NotificationEntry) {
                super.onEntryUpdated(entry)
                loggerOptional.ifPresent { it.onNotificationUpdated(entry.key) }
                logger.onNotificationUpdated(entry.key)
            }

            override fun onEntryRemoved(entry: NotificationEntry, reason: Int) {
                super.onEntryRemoved(entry, reason)
                loggerOptional.ifPresent { it.onNotificationRemoved(entry.key) }
                logger.onNotificationRemoved(entry.key)
            }
        }

+2 −38
Original line number Diff line number Diff line
@@ -19,12 +19,8 @@ package com.android.systemui.statusbar.notification.dagger
import com.android.systemui.statusbar.notification.stack.ui.view.NotificationRowStatsLogger
import com.android.systemui.statusbar.notification.stack.ui.view.NotificationStatsLogger
import com.android.systemui.statusbar.notification.stack.ui.view.NotificationStatsLoggerImpl
import com.android.systemui.statusbar.notification.stack.ui.viewmodel.NotificationLoggerViewModel
import dagger.Binds
import dagger.Module
import dagger.Provides
import java.util.Optional
import javax.inject.Provider

@Module
interface NotificationStatsLoggerModule {
@@ -32,38 +28,6 @@ interface NotificationStatsLoggerModule {
    /** Binds an implementation to the [NotificationStatsLogger]. */
    @Binds fun bindsStatsLoggerImpl(impl: NotificationStatsLoggerImpl): NotificationStatsLogger

    companion object {

        // TODO(b/424001722) no need to keep it optional anymore
        /** Provides a [NotificationStatsLogger] if the refactor flag is on. */
        @Provides
        fun provideStatsLogger(
            provider: Provider<NotificationStatsLogger>
        ): Optional<NotificationStatsLogger> {
            return Optional.of(provider.get())
        }

        // TODO(b/424001722) no need to keep it optional anymore
        /** Provides a [NotificationLoggerViewModel] if the refactor flag is on. */
        @Provides
        fun provideViewModel(
            provider: Provider<NotificationLoggerViewModel>
        ): Optional<NotificationLoggerViewModel> {
            return Optional.of(provider.get())
        }

        /**
         * Provides a the legacy [NotificationLogger] or the new [NotificationStatsLogger] to the
         * notification row.
         *
         * TODO(b/308623704) remove the [NotificationRowStatsLogger] interface, and provide a
         *   [NotificationStatsLogger] to the row directly.
         */
        @Provides
        fun provideRowStatsLogger(
            provider: Provider<NotificationStatsLogger>
        ): NotificationRowStatsLogger {
            return provider.get()
        }
    }
    /** Binds [NotificationStatsLogger] to [NotificationRowStatsLogger]. */
    @Binds fun bindRowStatsLogger(logger: NotificationStatsLogger): NotificationRowStatsLogger
}
+2 −8
Original line number Diff line number Diff line
@@ -61,13 +61,11 @@ import com.android.systemui.statusbar.notification.stack.ui.viewmodel.Notificati
import com.android.systemui.statusbar.notification.stack.ui.viewmodel.SummarizationOnboardingViewModel
import com.android.systemui.statusbar.notification.ui.viewbinder.HeadsUpNotificationViewBinder
import com.android.systemui.util.kotlin.awaitCancellationThenDispose
import com.android.systemui.util.kotlin.getOrNull
import com.android.systemui.util.time.SystemClock
import com.android.systemui.util.ui.isAnimating
import com.android.systemui.util.ui.stopAnimating
import com.android.systemui.util.ui.value
import com.android.systemui.utils.coroutines.flow.flatMapLatestConflated
import java.util.Optional
import javax.inject.Inject
import javax.inject.Provider
import kotlinx.coroutines.CoroutineDispatcher
@@ -89,7 +87,7 @@ constructor(
    @ShadeDisplayAware private val configuration: ConfigurationState,
    private val falsingManager: FalsingManager,
    private val hunBinder: HeadsUpNotificationViewBinder,
    private val loggerOptional: Optional<NotificationStatsLogger>,
    private val logger: NotificationStatsLogger,
    private val metricsLogger: MetricsLogger,
    private val nicBinder: NotificationIconContainerShelfViewBinder,
    // Using a provider to avoid a circular dependency.
@@ -323,11 +321,7 @@ constructor(
    }

    private suspend fun bindLogger(view: NotificationStackScrollLayout) {
        viewModel.logger.getOrNull()?.let { viewModel ->
            loggerOptional.getOrNull()?.let { logger ->
                NotificationStatsLoggerBinder.bindLogger(view, logger, viewModel, systemClock)
            }
        }
        NotificationStatsLoggerBinder.bindLogger(view, logger, viewModel.logger, systemClock)
    }

    private suspend fun bindBundleOnboarding(parentView: NotificationStackScrollLayout) {
+1 −2
Original line number Diff line number Diff line
@@ -39,7 +39,6 @@ import com.android.systemui.util.kotlin.sample
import com.android.systemui.util.ui.AnimatableEvent
import com.android.systemui.util.ui.AnimatedValue
import com.android.systemui.util.ui.toAnimatedValueFlow
import java.util.Optional
import javax.inject.Inject
import kotlinx.coroutines.CoroutineDispatcher
import kotlinx.coroutines.flow.Flow
@@ -64,7 +63,7 @@ constructor(
    val emptyShadeViewModelFactory: EmptyShadeViewModel.Factory,
    val bundleOnboarding: BundleOnboardingViewModel,
    val summarizationOnboarding: SummarizationOnboardingViewModel,
    val logger: Optional<NotificationLoggerViewModel>,
    val logger: NotificationLoggerViewModel,
    activeNotificationsInteractor: ActiveNotificationsInteractor,
    notificationStackInteractor: NotificationStackInteractor,
    private val headsUpNotificationInteractor: HeadsUpNotificationInteractor,
Loading