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

Commit 737bc2b8 authored by Treehugger Robot's avatar Treehugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Revert "rememberViewModel defaults to Dispatchers.Default"" into main

parents baebf97d 2cd97e53
Loading
Loading
Loading
Loading
+0 −2
Original line number Diff line number Diff line
@@ -24,7 +24,6 @@ import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
import com.android.systemui.SysuiTestCase
import com.android.systemui.display.domain.interactor.displayWindowPropertiesInteractor
import com.android.systemui.kosmos.testDispatcher
import com.android.systemui.kosmos.testScope
import com.android.systemui.lifecycle.activateIn
import com.android.systemui.statusbar.RankingBuilder
@@ -58,7 +57,6 @@ class ConnectedDisplaysStatusBarNotificationIconViewStoreTest : SysuiTestCase()
            kosmos.iconManager,
            kosmos.displayWindowPropertiesInteractor,
            kosmos.notifPipeline,
            kosmos.testDispatcher,
        )

    private val notifCollectionListeners = mutableListOf<NotifCollectionListener>()
+2 −24
Original line number Diff line number Diff line
@@ -21,13 +21,8 @@ import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.remember
import com.android.app.tracing.coroutines.launchTraced as launch
import com.android.app.tracing.coroutines.launchTraced
import com.android.app.tracing.coroutines.traceCoroutine
import com.android.systemui.Flags.rememberViewModelOffMainThread
import kotlin.coroutines.CoroutineContext
import kotlin.coroutines.EmptyCoroutineContext
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers

/**
 * Returns a remembered view-model of the type [T]. If the returned instance is also an
@@ -41,27 +36,10 @@ import kotlinx.coroutines.Dispatchers
 * of some complex concatenation or templating scheme.
 */
@Composable
fun <T> rememberViewModel(
    traceName: String,
    key: Any = Unit,
    context: CoroutineContext = EmptyCoroutineContext,
    factory: () -> T,
): T {
fun <T> rememberViewModel(traceName: String, key: Any = Unit, factory: () -> T): T {
    val instance = remember(key) { factory() }
    if (instance is Activatable) {
        LaunchedEffect(instance) {
            launchTraced(
                spanName = traceName,
                context =
                    when {
                        context != EmptyCoroutineContext -> context
                        rememberViewModelOffMainThread() -> Dispatchers.Default
                        else -> coroutineContext
                    },
            ) {
                instance.activate()
            }
        }
        LaunchedEffect(instance) { traceCoroutine(traceName) { instance.activate() } }
    }
    return instance
}
+5 −14
Original line number Diff line number Diff line
@@ -17,7 +17,6 @@
package com.android.systemui.statusbar.notification.icon.ui.viewbinder

import android.util.Log
import com.android.dream.lowlight.dagger.qualifiers.Main
import com.android.systemui.display.domain.interactor.DisplayWindowPropertiesInteractor
import com.android.systemui.lifecycle.Activatable
import com.android.systemui.statusbar.StatusBarIconView
@@ -31,10 +30,8 @@ import dagger.assisted.Assisted
import dagger.assisted.AssistedFactory
import dagger.assisted.AssistedInject
import java.util.concurrent.ConcurrentHashMap
import kotlinx.coroutines.CoroutineDispatcher
import kotlinx.coroutines.awaitCancellation
import kotlinx.coroutines.coroutineScope
import kotlinx.coroutines.withContext

/** [IconViewStore] for the status bar on multiple displays. */
class ConnectedDisplaysStatusBarNotificationIconViewStore
@@ -45,7 +42,6 @@ constructor(
    private val iconManager: IconManager,
    private val displayWindowPropertiesInteractor: DisplayWindowPropertiesInteractor,
    private val notifPipeline: NotifPipeline,
    @Main private val mainDispatcher: CoroutineDispatcher,
) : IconViewStore, Activatable {

    private val cachedIcons = ConcurrentHashMap<String, StatusBarIconView>()
@@ -83,10 +79,6 @@ constructor(
    }

    override suspend fun activate() = coroutineScope {
        // In case activate is being invoked off the main thread, make sure to switch to the main
        // thread to do the work here as some of the downstream calls assert they've been called on
        // the main thread.
        withContext(mainDispatcher) {
        start()
        try {
            awaitCancellation()
@@ -94,7 +86,6 @@ constructor(
            stop()
        }
    }
    }

    private fun start() {
        notifPipeline.addCollectionListener(notifCollectionListener)
+0 −2
Original line number Diff line number Diff line
@@ -19,7 +19,6 @@ package com.android.systemui.statusbar.notification.icon.ui.viewbinder
import android.content.testableContext
import com.android.systemui.display.domain.interactor.displayWindowPropertiesInteractor
import com.android.systemui.kosmos.Kosmos
import com.android.systemui.kosmos.testDispatcher
import com.android.systemui.statusbar.notification.collection.mockNotifCollection
import com.android.systemui.statusbar.notification.collection.notifPipeline
import com.android.systemui.statusbar.notification.icon.iconManager
@@ -37,7 +36,6 @@ var Kosmos.connectedDisplaysStatusBarNotificationIconViewStoreFactory:
                    iconManager,
                    displayWindowPropertiesInteractor,
                    notifPipeline,
                    testDispatcher,
                )
            }
        }