Skip to content

Commit

Permalink
Gradle 8.3, Kotlin 1.9.10, AGP 8.1.0, SDK 34, Coroutines 1.7.3, Compo…
Browse files Browse the repository at this point in the history
…se Compiler 1.5.3, Koin 3.5.0, Dagger 2.48 with KSP, kmp-viewmodel 0.5.0, FlowExt 0.7.1 and refactor. (#90)

* deps

* Update build.gradle.kts

kapt {
    correctErrorTypes = true
}

* Update deps.kt

* a

* deps

* deps: hilt ksp google/dagger#2349

* fix ios

* refactor android

* jdk 17

* fix tests

* gradle

* gradle

* gradle
  • Loading branch information
hoc081098 committed Sep 28, 2023
1 parent 313a8b3 commit 1c47019
Show file tree
Hide file tree
Showing 51 changed files with 1,087 additions and 993 deletions.
2 changes: 1 addition & 1 deletion .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ jobs:
uses: actions/setup-java@v3
with:
distribution: 'zulu'
java-version: '11'
java-version: '17'

- name: Cache gradle, wrapper and buildSrc
uses: actions/cache@v3
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/gradle-versions-checker.yml
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ jobs:
uses: actions/setup-java@v3
with:
distribution: 'zulu'
java-version: '11'
java-version: '17'

- name: Cache gradle, wrapper and buildSrc
uses: actions/cache@v3
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/ios-build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ jobs:
uses: actions/setup-java@v3
with:
distribution: 'zulu'
java-version: '11'
java-version: '17'

# - name: Make gradlew executable
# run: chmod +x ./gradlew
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/review-suggest.yml
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ jobs:
- uses: actions/setup-java@v3
with:
distribution: 'zulu'
java-version: '11'
java-version: '17'
- name: Cache gradle, wrapper and buildSrc
uses: actions/cache@v3
with:
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ jobs:
uses: actions/setup-java@v3
with:
distribution: 'zulu'
java-version: '11'
java-version: '17'

- name: Cache gradle, wrapper and buildSrc
uses: actions/cache@v3
Expand Down
3 changes: 2 additions & 1 deletion androidApp/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,7 @@ android {
}

kotlinOptions {
options.jvmTarget = org.jetbrains.kotlin.gradle.dsl.JvmTarget.JVM_11
freeCompilerArgs = freeCompilerArgs + buildComposeMetricsParameters() + listOf(
"-opt-in=kotlin.RequiresOptIn",
// Enable experimental coroutines APIs, including Flow
Expand All @@ -63,7 +64,7 @@ android {
all {
if (it.name == "testDebugUnitTest") {
it.extensions.configure<kotlinx.kover.api.KoverTaskExtension> {
isDisabled.set(false)
isDisabled = false
// excludes.addAll(excludedClasses)
}
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package com.hoc081098.github_search_kmm.android.compose_utils

import androidx.compose.runtime.Stable

@Stable
@JvmInline
value class StableWrapper<T>(val value: T)
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
package com.hoc081098.github_search_kmm.android.compose_utils

import androidx.compose.runtime.Composable
import androidx.compose.runtime.NonRestartableComposable
import androidx.compose.runtime.RememberObserver
import androidx.compose.runtime.getValue
import androidx.compose.runtime.remember
import androidx.compose.runtime.rememberUpdatedState
import androidx.compose.ui.platform.LocalLifecycleOwner
import androidx.lifecycle.Lifecycle
import androidx.lifecycle.LifecycleOwner
import androidx.lifecycle.flowWithLifecycle
import androidx.lifecycle.repeatOnLifecycle
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.Job
import kotlinx.coroutines.cancel
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.launch

@Composable
fun <T> rememberFlowWithLifecycle(
flow: Flow<T>,
lifecycle: Lifecycle = LocalLifecycleOwner.current.lifecycle,
minActiveState: Lifecycle.State = Lifecycle.State.STARTED
): Flow<T> = remember(flow, lifecycle, minActiveState) {
flow.flowWithLifecycle(
lifecycle = lifecycle,
minActiveState = minActiveState
)
}

/**
* Collect the given [Flow] in a Effect that runs in the [Dispatchers.Main.immediate] coroutine,
* when [LifecycleOwner.lifecycle] is at least at [minActiveState].
*/
@Composable
fun <T> Flow<T>.CollectWithLifecycleEffect(
vararg keys: Any?,
lifecycleOwner: LifecycleOwner = LocalLifecycleOwner.current,
minActiveState: Lifecycle.State = Lifecycle.State.STARTED,
collector: (T) -> Unit,
) {
val flow = this
val currentCollector by rememberUpdatedState(collector)

LaunchedEffectInImmediateMain(flow, lifecycleOwner, minActiveState, *keys) {
lifecycleOwner.repeatOnLifecycle(minActiveState) {
flow.collect { currentCollector(it) }
}
}
}

@Composable
@NonRestartableComposable
@Suppress("ArrayReturn")
private fun LaunchedEffectInImmediateMain(
vararg keys: Any?,
block: suspend CoroutineScope.() -> Unit,
) {
remember(*keys) { LaunchedEffectImpl(block) }
}

private class LaunchedEffectImpl(
private val task: suspend CoroutineScope.() -> Unit,
) : RememberObserver {
private val scope = CoroutineScope(Dispatchers.Main.immediate)
private var job: Job? = null

override fun onRemembered() {
job?.cancel("Old job was still running!")
job = scope.launch(block = task)
}

override fun onForgotten() {
job?.cancel()
job = null
}

override fun onAbandoned() {
job?.cancel()
job = null
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
// Copyright (C) 2023 Slack Technologies, LLC
// SPDX-License-Identifier: Apache-2.0
package com.hoc081098.github_search_kmm.android
package com.hoc081098.github_search_kmm.android.compose_utils

import androidx.compose.runtime.Composable
import androidx.compose.runtime.Stable
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
package com.hoc081098.github_search_kmm.android
package com.hoc081098.github_search_kmm.android.core_ui

import android.content.Context
import androidx.compose.runtime.Composable
import androidx.compose.runtime.ReadOnlyComposable
import androidx.compose.ui.platform.LocalContext
import com.hoc081098.github_search_kmm.android.R
import com.hoc081098.github_search_kmm.domain.model.AppError

@Composable
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ import androidx.compose.ui.unit.dp
import coil.compose.AsyncImage
import coil.request.ImageRequest
import com.hoc081098.github_search_kmm.android.R
import com.hoc081098.github_search_kmm.android.StableWrapper
import com.hoc081098.github_search_kmm.android.compose_utils.StableWrapper
import com.hoc081098.github_search_kmm.android.core_ui.fromArgbColor
import com.hoc081098.github_search_kmm.domain.model.RepoItem
import java.text.DecimalFormat
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,10 +17,10 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.unit.dp
import com.hoc081098.flowext.ThrottleConfiguration
import com.hoc081098.flowext.throttleTime
import com.hoc081098.github_search_kmm.android.StableWrapper
import com.hoc081098.github_search_kmm.android.compose_utils.StableWrapper
import com.hoc081098.github_search_kmm.android.core_ui.LoadingIndicator
import com.hoc081098.github_search_kmm.android.core_ui.RetryButton
import com.hoc081098.github_search_kmm.android.getReadableMessage
import com.hoc081098.github_search_kmm.android.core_ui.getReadableMessage
import com.hoc081098.github_search_kmm.domain.model.AppError
import com.hoc081098.github_search_kmm.domain.model.RepoItem
import io.github.aakira.napier.Napier
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,13 +31,13 @@ import androidx.compose.ui.unit.dp
import androidx.hilt.navigation.compose.hiltViewModel
import androidx.lifecycle.compose.collectAsStateWithLifecycle
import com.hoc081098.github_search_kmm.android.R
import com.hoc081098.github_search_kmm.android.collectInLaunchedEffectWithLifecycle
import com.hoc081098.github_search_kmm.android.compose_utils.CollectWithLifecycleEffect
import com.hoc081098.github_search_kmm.android.compose_utils.rememberStableCoroutineScope
import com.hoc081098.github_search_kmm.android.core_ui.AppBackground
import com.hoc081098.github_search_kmm.android.core_ui.AppTheme
import com.hoc081098.github_search_kmm.android.core_ui.LoadingIndicator
import com.hoc081098.github_search_kmm.android.core_ui.RetryButton
import com.hoc081098.github_search_kmm.android.getReadableMessage
import com.hoc081098.github_search_kmm.android.rememberStableCoroutineScope
import com.hoc081098.github_search_kmm.android.core_ui.getReadableMessage
import com.hoc081098.github_search_kmm.domain.model.Owner
import com.hoc081098.github_search_kmm.domain.model.RepoItem
import com.hoc081098.github_search_kmm.presentation.DaggerGithubSearchViewModel
Expand All @@ -64,7 +64,7 @@ fun GithubRepoItemsSearchScreen(
val context = LocalContext.current
val scope = rememberStableCoroutineScope()

vm.eventFlow.collectInLaunchedEffectWithLifecycle { event ->
vm.eventFlow.CollectWithLifecycleEffect { event ->
when (event) {
is GithubSearchSingleEvent.SearchFailure -> {
scope.launch {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,6 @@ fun GithubSearchKmmApp() {

@Preview
@Composable
fun GithubSearchKmmAppPreview() {
private fun GithubSearchKmmAppPreview() {
GithubSearchKmmApp()
}
2 changes: 1 addition & 1 deletion buildSrc/buildSrc/gradle/wrapper/gradle-wrapper.properties
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.1.1-bin.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-bin.zip
networkTimeout=10000
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
2 changes: 1 addition & 1 deletion buildSrc/gradle/wrapper/gradle-wrapper.properties
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.1.1-bin.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-bin.zip
networkTimeout=10000
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
Loading

0 comments on commit 1c47019

Please sign in to comment.