Skip to content

Feature/make precompose happy #237

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 6 commits into
base: develop
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 0 additions & 10 deletions buildSrc/src/main/kotlin/Config.kt
Original file line number Diff line number Diff line change
Expand Up @@ -35,16 +35,6 @@ fun com.android.build.api.dsl.LibraryExtension.setupLibrary() {
sourceSets["debug"].java.srcDir("build/generated/ksp/android/androidDebug/kotlin")
}


fun com.android.build.gradle.LibraryExtension.withCompose() {
buildFeatures {
compose = true
}
composeOptions {
kotlinCompilerExtensionVersion = Versions.compose
}
}

fun Project.kspAndroid(dependencyNotation: Any) {
project.dependencies.add("kspAndroid", dependencyNotation)
}
Expand Down
1 change: 0 additions & 1 deletion buildSrc/src/main/kotlin/Versions.kt
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,6 @@ object Versions {
const val spotless = "6.3.0"
const val ktlint = "0.43.2"
const val compose_jb = "1.1.0"
const val compose = "1.1.0"
const val accompanist = "0.23.0"
const val navigation = "2.4.1"
const val lifecycle = "2.4.1"
Expand Down
21 changes: 12 additions & 9 deletions common/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,18 @@ kotlin {
implementation(projects.common.routeProcessor.annotations)
kspAndroid(projects.common.routeProcessor)
api(projects.common.bigDecimal)

// Compose
api("org.jetbrains.compose.ui:ui:${Versions.compose_jb}")
api("org.jetbrains.compose.ui:ui-util:${Versions.compose_jb}")
api("org.jetbrains.compose.foundation:foundation:${Versions.compose_jb}")
api("org.jetbrains.compose.material:material:${Versions.compose_jb}")
api("org.jetbrains.compose.material:material-icons-core:${Versions.compose_jb}")
api("org.jetbrains.compose.material:material-icons-extended:${Versions.compose_jb}")
api("org.jetbrains.compose.ui:ui-tooling:${Versions.compose_jb}")

// Koin
api("io.insert-koin:koin-core:${Versions.koin}")
}
}
val commonTest by getting {
Expand All @@ -33,15 +45,6 @@ kotlin {
api(projects.common.okhttp)
api(projects.common.bigDecimal)

// Compose
api("org.jetbrains.compose.ui:ui:${Versions.compose_jb}")
api("org.jetbrains.compose.ui:ui-util:${Versions.compose_jb}")
api("org.jetbrains.compose.foundation:foundation:${Versions.compose_jb}")
api("org.jetbrains.compose.material:material:${Versions.compose_jb}")
api("org.jetbrains.compose.material:material-icons-core:${Versions.compose_jb}")
api("org.jetbrains.compose.material:material-icons-extended:${Versions.compose_jb}")
api("org.jetbrains.compose.ui:ui-tooling:${Versions.compose_jb}")

// Koin
api("io.insert-koin:koin-android:${Versions.koin}")
api("io.insert-koin:koin-androidx-compose:${Versions.koin}")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -47,8 +47,8 @@ import com.squareup.kotlinpoet.ksp.toTypeName
import com.squareup.kotlinpoet.ksp.writeTo
import com.squareup.kotlinpoet.withIndent

private val navControllerType = ClassName("androidx.navigation", "NavController")
private val navBackStackEntryType = ClassName("androidx.navigation", "NavBackStackEntry")
private val navControllerType = ClassName("moe.tlaster.precompose.navigation", "NavController")
private val navBackStackEntryType = ClassName("moe.tlaster.precompose.navigation", "BackStackEntry")
private const val navControllerName = "controller"

@OptIn(KotlinPoetKspPreview::class, KspExperimental::class)
Expand Down Expand Up @@ -100,7 +100,7 @@ internal class RouteGraphProcessor(
fileBuilder.addFunction(
FunSpec.builder(generatedFunctionName)
.addModifiers(KModifier.INTERNAL)
.receiver(ClassName("androidx.navigation", "NavGraphBuilder"))
.receiver(ClassName("moe.tlaster.precompose.navigation", "RouteBuilder"))
.addParameter(
navControllerName,
navControllerType,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,6 @@
*/
package com.dimension.maskbook.common

import androidx.navigation.NavController
import androidx.navigation.NavGraphBuilder
import com.dimension.maskbook.common.manager.ImageLoaderManager
import com.dimension.maskbook.common.manager.KeyStoreManager
import com.dimension.maskbook.common.util.BiometricAuthenticator
Expand All @@ -32,12 +30,14 @@ import com.dimension.maskbook.common.viewmodel.SetUpPaymentPasswordViewModel
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.SupervisorJob
import org.koin.androidx.viewmodel.dsl.viewModel
import moe.tlaster.koin.viewModel
import moe.tlaster.precompose.navigation.NavController
import moe.tlaster.precompose.navigation.RouteBuilder
import org.koin.core.qualifier.named
import org.koin.dsl.module

object CommonSetup : ModuleSetup {
override fun NavGraphBuilder.route(navController: NavController) {
override fun RouteBuilder.route(navController: NavController) {
}

override fun dependencyInject() = module {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,15 +20,15 @@
*/
package com.dimension.maskbook.common

import androidx.navigation.NavController
import androidx.navigation.NavGraphBuilder
import moe.tlaster.precompose.navigation.NavController
import moe.tlaster.precompose.navigation.RouteBuilder
import org.koin.core.module.Module

interface ModuleSetup {
fun NavGraphBuilder.route(navController: NavController)
fun RouteBuilder.route(navController: NavController)
fun dependencyInject(): Module
fun onExtensionReady() {}
}

fun ModuleSetup.route(builder: NavGraphBuilder, navController: NavController) =
fun ModuleSetup.route(builder: RouteBuilder, navController: NavController) =
builder.route(navController)
Original file line number Diff line number Diff line change
Expand Up @@ -20,13 +20,9 @@
*/
package com.dimension.maskbook.common.ext

import android.annotation.SuppressLint
import androidx.compose.runtime.Composable
import androidx.compose.runtime.State
import androidx.compose.runtime.collectAsState
import androidx.compose.runtime.remember
import androidx.compose.ui.platform.LocalLifecycleOwner
import androidx.lifecycle.flowWithLifecycle
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.SharingStarted
Expand All @@ -35,16 +31,12 @@ import kotlinx.coroutines.flow.stateIn

@Composable
fun <T> Flow<T>.observeAsState(initial: T): State<T> {
val lifecycleOwner = LocalLifecycleOwner.current
return remember(this, lifecycleOwner) {
flowWithLifecycle(lifecycleOwner.lifecycle)
}.collectAsState(initial = initial)
return collectAsState(initial = initial)
}

@SuppressLint("StateFlowValueCalledInComposition")
@Composable
fun <T> StateFlow<T>.observeAsState(): State<T> {
return observeAsState(initial = value)
return collectAsState()
}

fun <T> Flow<T>.asStateIn(scope: CoroutineScope, initial: T) =
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,8 +22,8 @@ package com.dimension.maskbook.common.ext

import androidx.compose.runtime.Composable
import androidx.compose.runtime.remember
import androidx.lifecycle.ViewModel
import androidx.navigation.NavController
import moe.tlaster.precompose.navigation.NavController
import moe.tlaster.precompose.viewmodel.ViewModel
import org.koin.androidx.viewmodel.ViewModelOwner
import org.koin.androidx.viewmodel.scope.getViewModel
import org.koin.core.annotation.KoinInternalApi
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,11 +21,11 @@
package com.dimension.maskbook.common.ext

import android.net.Uri
import androidx.navigation.NavController
import androidx.navigation.NavOptionsBuilder
import androidx.navigation.navOptions
import com.dimension.maskbook.common.route.CommonRoute
import com.dimension.maskbook.common.route.Deeplinks
import moe.tlaster.precompose.navigation.NavController

fun NavController.navigate(uri: Uri, builder: NavOptionsBuilder.() -> Unit) {
navigate(uri, navOptions(builder))
Expand All @@ -35,16 +35,18 @@ fun NavController.navigateUri(uri: Uri, builder: NavOptionsBuilder.() -> Unit =
navigate(uri, navOptions(builder))
}

fun NavController.navigateWithPopSelf(route: String) {
fun NavController.navigateWithPopSelf(route: String, launchSingleTop: Boolean = false) {
navigate(route) {
this.launchSingleTop = launchSingleTop
currentDestination?.id?.let { popId ->
popUpTo(popId) { inclusive = true }
}
}
}

fun NavController.navigateUriWithPopSelf(uri: String) {
fun NavController.navigateUriWithPopSelf(uri: String, launchSingleTop: Boolean = false) {
navigate(Uri.parse(uri)) {
this.launchSingleTop = launchSingleTop
currentDestination?.id?.let { popId ->
popUpTo(popId) { inclusive = true }
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,11 +20,8 @@
*/
package com.dimension.maskbook.common.ext

import androidx.lifecycle.ViewModel
import androidx.lifecycle.ViewModelProvider
import androidx.lifecycle.ViewModelStoreOwner
import androidx.lifecycle.viewModelScope
import androidx.navigation.NavController
import com.dimension.maskbook.common.model.ResultEvent
import kotlinx.coroutines.delay
import kotlinx.coroutines.flow.Flow
Expand All @@ -34,6 +31,9 @@ import kotlinx.coroutines.flow.collectLatest
import kotlinx.coroutines.flow.filterIsInstance
import kotlinx.coroutines.flow.filterNot
import kotlinx.coroutines.launch
import moe.tlaster.precompose.navigation.NavController
import moe.tlaster.precompose.viewmodel.ViewModel
import moe.tlaster.precompose.viewmodel.viewModelScope

/**
* use for navigate result, use like:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,12 +30,12 @@ import androidx.compose.animation.slideOutVertically
import androidx.compose.foundation.layout.ColumnScope
import androidx.compose.runtime.Composable
import androidx.navigation.NamedNavArgument
import androidx.navigation.NavBackStackEntry
import androidx.navigation.NavDeepLink
import androidx.navigation.NavGraphBuilder
import com.google.accompanist.navigation.animation.composable
import com.google.accompanist.navigation.material.ExperimentalMaterialNavigationApi
import com.google.accompanist.navigation.material.bottomSheet
import moe.tlaster.precompose.navigation.BackStackEntry
import moe.tlaster.precompose.navigation.RouteBuilder

const val navigationComposeDialogPackage = "androidx.navigation.compose"
const val navigationComposeDialog = "dialog"
Expand All @@ -53,11 +53,11 @@ const val navigationComposeBottomSheetPackage = "com.dimension.maskbook.common.r
const val navigationComposeBottomSheet = "bottomSheet"

@OptIn(ExperimentalAnimationApi::class)
fun NavGraphBuilder.composable(
fun RouteBuilder.composable(
route: String,
arguments: List<NamedNavArgument> = emptyList(),
deepLinks: List<NavDeepLink> = emptyList(),
content: @Composable AnimatedVisibilityScope.(NavBackStackEntry) -> Unit
content: @Composable AnimatedVisibilityScope.(BackStackEntry) -> Unit
) {
composable(
route = route,
Expand All @@ -68,11 +68,11 @@ fun NavGraphBuilder.composable(
}

@OptIn(ExperimentalAnimationApi::class)
fun NavGraphBuilder.modalComposable(
fun RouteBuilder.modalComposable(
route: String,
arguments: List<NamedNavArgument> = emptyList(),
deepLinks: List<NavDeepLink> = emptyList(),
content: @Composable AnimatedVisibilityScope.(NavBackStackEntry) -> Unit
content: @Composable AnimatedVisibilityScope.(BackStackEntry) -> Unit
) {
composable(
route = route,
Expand All @@ -95,11 +95,11 @@ fun NavGraphBuilder.modalComposable(
}

@OptIn(ExperimentalAnimationApi::class)
fun NavGraphBuilder.homeComposable(
fun RouteBuilder.homeComposable(
route: String,
arguments: List<NamedNavArgument> = emptyList(),
deepLinks: List<NavDeepLink> = emptyList(),
content: @Composable AnimatedVisibilityScope.(NavBackStackEntry) -> Unit
content: @Composable AnimatedVisibilityScope.(BackStackEntry) -> Unit
) {
var isPopExtension = false
composable(
Expand All @@ -126,11 +126,11 @@ fun NavGraphBuilder.homeComposable(
}

@OptIn(ExperimentalMaterialNavigationApi::class)
fun NavGraphBuilder.bottomSheet(
fun RouteBuilder.bottomSheet(
route: String,
arguments: List<NamedNavArgument> = emptyList(),
deepLinks: List<NavDeepLink> = emptyList(),
content: @Composable ColumnScope.(backstackEntry: NavBackStackEntry) -> Unit
content: @Composable ColumnScope.(backstackEntry: BackStackEntry) -> Unit
) {
bottomSheet(
route = route,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ import com.dimension.maskbook.common.ui.widget.MaskModal
import com.dimension.maskbook.common.ui.widget.MaskPasswordInputField
import com.dimension.maskbook.common.ui.widget.button.PrimaryButton
import com.dimension.maskbook.common.viewmodel.SetUpPaymentPasswordViewModel
import org.koin.androidx.compose.getViewModel
import moe.tlaster.koin.compose.getViewModel

@Composable
fun SetUpPaymentPassword(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@
package com.dimension.maskbook.common.ui.tab

import androidx.compose.runtime.Composable
import androidx.navigation.NavController
import moe.tlaster.precompose.navigation.NavController

interface TabScreen {

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ import androidx.compose.runtime.staticCompositionLocalOf
import com.dimension.maskbook.common.ext.observeAsState
import com.dimension.maskbook.setting.export.SettingServices
import com.dimension.maskbook.setting.export.model.Appearance
import org.koin.androidx.compose.get
import moe.tlaster.koin.compose.get

internal val LocalIsDarkTheme = staticCompositionLocalOf { false }

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,14 +28,14 @@ import androidx.compose.foundation.shape.CornerSize
import androidx.compose.material.MaterialTheme
import androidx.compose.runtime.Composable
import androidx.compose.ui.unit.dp
import androidx.navigation.NavGraphBuilder
import androidx.navigation.NavHostController
import com.dimension.maskbook.common.ui.theme.modalScrimColor
import com.google.accompanist.navigation.animation.AnimatedNavHost
import com.google.accompanist.navigation.animation.rememberAnimatedNavController
import com.google.accompanist.navigation.material.BottomSheetNavigator
import com.google.accompanist.navigation.material.ExperimentalMaterialNavigationApi
import com.google.accompanist.navigation.material.ModalBottomSheetLayout
import moe.tlaster.precompose.navigation.RouteBuilder

private const val navHostAnimationDurationMillis = 320

Expand All @@ -46,7 +46,7 @@ fun RouteHost(
bottomSheetNavigator: BottomSheetNavigator = rememberMaskBottomSheetNavigator(),
navController: NavHostController = rememberAnimatedNavController(bottomSheetNavigator),
startDestination: String,
builder: NavGraphBuilder.() -> Unit
builder: RouteBuilder.() -> Unit
) {
ModalBottomSheetLayout(
bottomSheetNavigator,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,14 +20,14 @@
*/
package com.dimension.maskbook.common.viewmodel

import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import com.dimension.maskbook.common.BuildConfig
import com.dimension.maskbook.common.ext.asStateIn
import com.dimension.maskbook.common.model.MnemonicWord
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.combine
import kotlinx.coroutines.flow.map
import moe.tlaster.precompose.viewmodel.ViewModel
import moe.tlaster.precompose.viewmodel.viewModelScope

abstract class BaseMnemonicPhraseViewModel : ViewModel() {
protected val _words = MutableStateFlow(emptyList<MnemonicWord>())
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,9 +21,9 @@
package com.dimension.maskbook.common.viewmodel

import android.content.Context
import androidx.lifecycle.ViewModel
import com.dimension.maskbook.common.util.BiometricAuthenticator
import com.dimension.maskbook.setting.export.SettingServices
import moe.tlaster.precompose.viewmodel.ViewModel

class BiometricEnableViewModel(
private val biometricAuthenticator: BiometricAuthenticator,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,6 @@
package com.dimension.maskbook.common.viewmodel

import android.content.Context
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import com.dimension.maskbook.common.R
import com.dimension.maskbook.common.ext.asStateIn
import com.dimension.maskbook.common.util.BiometricAuthenticator
Expand All @@ -31,6 +29,8 @@ import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.combine
import kotlinx.coroutines.flow.first
import kotlinx.coroutines.launch
import moe.tlaster.precompose.viewmodel.ViewModel
import moe.tlaster.precompose.viewmodel.viewModelScope

open class BiometricViewModel(
private val biometricAuthenticator: BiometricAuthenticator,
Expand Down
Loading