From 2ec61cf6ac269fbabe3b15d1df24b9646b0b8daa Mon Sep 17 00:00:00 2001 From: lihenggui Date: Wed, 23 Oct 2024 10:03:39 -0700 Subject: [PATCH] Inject lazyStats correctly --- app/build.gradle.kts | 2 + .../samples/apps/nowinandroid/MainActivity.kt | 16 +++++--- .../apps/nowinandroid/di/JankStatsModule.kt | 41 ++++++------------- gradle/libs.versions.toml | 1 + 4 files changed, 26 insertions(+), 34 deletions(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 803bb7f78..c1b123e90 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -123,6 +123,8 @@ kotlin { implementation(libs.androidx.window.core) implementation(libs.kotlinx.coroutines.guava) implementation(libs.koin.android) + implementation(libs.koin.androidx.compose) + implementation(libs.koin.androidx.startup) } commonTest.dependencies { diff --git a/app/src/androidMain/kotlin/com/google/samples/apps/nowinandroid/MainActivity.kt b/app/src/androidMain/kotlin/com/google/samples/apps/nowinandroid/MainActivity.kt index 242ef5104..87d396ba5 100644 --- a/app/src/androidMain/kotlin/com/google/samples/apps/nowinandroid/MainActivity.kt +++ b/app/src/androidMain/kotlin/com/google/samples/apps/nowinandroid/MainActivity.kt @@ -21,7 +21,6 @@ import androidx.activity.ComponentActivity import androidx.activity.SystemBarStyle import androidx.activity.compose.setContent import androidx.activity.enableEdgeToEdge -import androidx.activity.viewModels import androidx.compose.foundation.isSystemInDarkTheme import androidx.compose.runtime.Composable import androidx.compose.runtime.CompositionLocalProvider @@ -52,13 +51,16 @@ import kotlinx.coroutines.flow.collect import kotlinx.coroutines.flow.onEach import kotlinx.coroutines.launch import org.koin.android.ext.android.inject +import org.koin.androidx.compose.KoinAndroidContext +import org.koin.androidx.viewmodel.ext.android.viewModel +import org.koin.core.parameter.parametersOf class MainActivity : ComponentActivity() { /** * Lazily inject [JankStats], which is used to track jank throughout the app. */ - private val stats: JankStats by inject() + private val lazyStats by inject { parametersOf(this) } private val networkMonitor: NetworkMonitor by inject() @@ -68,7 +70,7 @@ class MainActivity : ComponentActivity() { private val userNewsResourceRepository: UserNewsResourceRepository by inject() - private val viewModel: MainScreenViewModel by inject() + private val viewModel: MainScreenViewModel by viewModel() override fun onCreate(savedInstanceState: Bundle?) { val splashScreen = installSplashScreen() @@ -138,7 +140,9 @@ class MainActivity : ComponentActivity() { androidTheme = shouldUseAndroidTheme(uiState), disableDynamicTheming = shouldDisableDynamicTheming(uiState), ) { - NiaApp(appState) + KoinAndroidContext { + NiaApp(appState) + } } } } @@ -146,12 +150,12 @@ class MainActivity : ComponentActivity() { override fun onResume() { super.onResume() - stats.isTrackingEnabled = true + lazyStats.isTrackingEnabled = true } override fun onPause() { super.onPause() - stats.isTrackingEnabled = false + lazyStats.isTrackingEnabled = false } } diff --git a/app/src/androidMain/kotlin/com/google/samples/apps/nowinandroid/di/JankStatsModule.kt b/app/src/androidMain/kotlin/com/google/samples/apps/nowinandroid/di/JankStatsModule.kt index 8cf915047..71c9db760 100644 --- a/app/src/androidMain/kotlin/com/google/samples/apps/nowinandroid/di/JankStatsModule.kt +++ b/app/src/androidMain/kotlin/com/google/samples/apps/nowinandroid/di/JankStatsModule.kt @@ -18,36 +18,21 @@ package com.google.samples.apps.nowinandroid.di import android.app.Activity import android.util.Log -import android.view.Window import androidx.metrics.performance.JankStats import androidx.metrics.performance.JankStats.OnFrameListener import com.google.samples.apps.nowinandroid.util.ProfileVerifierLogger -import kotlinx.coroutines.CoroutineScope -import org.koin.core.annotation.Factory -import org.koin.core.annotation.Module -import org.koin.core.annotation.Single +import org.koin.core.module.dsl.singleOf +import org.koin.dsl.module -@Module -class JankStatsModule { - @Factory - fun providesOnFrameListener(): OnFrameListener = OnFrameListener { frameData -> - // Make sure to only log janky frames. - if (frameData.isJank) { - // We're currently logging this but would better report it to a backend. - Log.v("NiA Jank", frameData.toString()) - } - } - - @Single - fun providesWindow(activity: Activity): Window = activity.window - - @Factory - fun providesJankStats( - window: Window, - frameListener: OnFrameListener, - ): JankStats = JankStats.createAndTrack(window, frameListener) - - @Single - fun provideProfileVerifierLogger(scope: CoroutineScope): ProfileVerifierLogger = - ProfileVerifierLogger(scope) +val jankStatsModule = module { + singleOf(::ProfileVerifierLogger) + factory { (activity : Activity) -> JankStats.createAndTrack(activity.window, providesOnFrameListener()) } } + +fun providesOnFrameListener(): OnFrameListener = OnFrameListener { frameData -> + // Make sure to only log janky frames. + if (frameData.isJank) { + // We're currently logging this but would better report it to a backend. + Log.v("NiA Jank", frameData.toString()) + } +} \ No newline at end of file diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index f76dcbb14..da92293be 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -151,6 +151,7 @@ koin-annotations = { group = "io.insert-koin", name = "koin-annotations" } koin-ksp-compiler = { group = "io.insert-koin", name = "koin-ksp-compiler", version.ref = "koin-annotations" } koin-bom = { group = "io.insert-koin", name = "koin-bom", version.ref = "koin" } koin-android = { group = "io.insert-koin", name = "koin-android"} +koin-androidx-compose = { group = "io.insert-koin", name = "koin-androidx-compose"} koin-androidx-startup = { group = "io.insert-koin", name = "koin-androidx-startup"} koin-core = { group = "io.insert-koin", name = "koin-core"} koin-core-coroutines = { group = "io.insert-koin", name = "koin-android-coroutines"}