Skip to content
Merged

dev #88

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
12 changes: 12 additions & 0 deletions .github/workflows/android_build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,18 @@ jobs:
echo "storePassword=$KEYSTORE_STORE_PASSWORD" >> keystore.properties
echo "keyPassword=$KEYSTORE_KEY_PASSWORD" >> keystore.properties

- name: Cache Gradle
uses: actions/cache@v4
with:
path: ~/.gradle/caches/
key: cache-clean-gradle-${{ matrix.os }}-${{ matrix.jdk }}

- name: Cache Gradle Wrapper
uses: actions/cache@v4
with:
path: ~/.gradle/wrapper/
key: cache-clean-wrapper-${{ matrix.os }}-${{ matrix.jdk }}

- name: Grant execute permission for gradlew
run: chmod +x gradlew

Expand Down
6 changes: 3 additions & 3 deletions .github/workflows/android_deploy_beta.yml
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ jobs:
ruby-version: '3.3'

- name: Cache Ruby - Bundler
uses: actions/cache@v2
uses: actions/cache@v4
with:
path: vendor/bundle
key: ${{ runner.os }}-gems-${{ hashFiles('**/Gemfile.lock') }}
Expand All @@ -41,13 +41,13 @@ jobs:
cache: gradle

- name: Cache Gradle
uses: actions/cache@v1
uses: actions/cache@v4
with:
path: ~/.gradle/caches/
key: cache-clean-gradle-${{ matrix.os }}-${{ matrix.jdk }}

- name: Cache Gradle Wrapper
uses: actions/cache@v1
uses: actions/cache@v4
with:
path: ~/.gradle/wrapper/
key: cache-clean-wrapper-${{ matrix.os }}-${{ matrix.jdk }}
Expand Down
6 changes: 3 additions & 3 deletions .github/workflows/android_deploy_prod.yml
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ jobs:
ruby-version: '3.3'

- name: Cache Ruby - Bundler
uses: actions/cache@v2
uses: actions/cache@v4
with:
path: vendor/bundle
key: ${{ runner.os }}-gems-${{ hashFiles('**/Gemfile.lock') }}
Expand All @@ -39,13 +39,13 @@ jobs:
cache: gradle

- name: Cache Gradle
uses: actions/cache@v1
uses: actions/cache@v4
with:
path: ~/.gradle/caches/
key: cache-clean-gradle-${{ matrix.os }}-${{ matrix.jdk }}

- name: Cache Gradle Wrapper
uses: actions/cache@v1
uses: actions/cache@v4
with:
path: ~/.gradle/wrapper/
key: cache-clean-wrapper-${{ matrix.os }}-${{ matrix.jdk }}
Expand Down
22 changes: 3 additions & 19 deletions app/src/main/java/st/slex/csplashscreen/ui/InitialApp.kt
Original file line number Diff line number Diff line change
Expand Up @@ -14,20 +14,14 @@ import androidx.compose.material3.Scaffold
import androidx.compose.runtime.Composable
import androidx.compose.runtime.DisposableEffect
import androidx.compose.runtime.Stable
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.unit.dp
import com.google.accompanist.systemuicontroller.rememberSystemUiController
import st.slex.csplashscreen.core.core.Logger
import st.slex.csplashscreen.core.navigation.Screen
import st.slex.csplashscreen.ui.components.NavHostControllerHolder
import st.slex.csplashscreen.ui.components.NavigationHost
import st.slex.csplashscreen.ui.components.bottom_appbar.BottomAppBarResource
import st.slex.csplashscreen.ui.components.bottom_appbar.BottomAppBarResource.Companion.getByRoute
import st.slex.csplashscreen.ui.components.bottom_appbar.BottomAppBarResource.Companion.isAppbar
import st.slex.csplashscreen.ui.components.bottom_appbar.MainBottomAppBar

@SuppressLint("UnusedMaterial3ScaffoldPaddingParameter")
Expand All @@ -41,16 +35,6 @@ fun InitialApp(
val systemUiController = rememberSystemUiController()
val isDarkTheme = isSystemInDarkTheme()

var currentDestination by remember {
mutableStateOf<Screen?>(Screen.Home)
}

navControllerHolder.navController.addOnDestinationChangedListener { _, destination, _ ->
Logger.d("current route: ${destination.route}")
currentDestination = destination.route?.let(::getByRoute)
Logger.d("currentDestination: ${currentDestination}")
}

DisposableEffect(systemUiController, isDarkTheme) {
systemUiController.setSystemBarsColor(
color = Color.Transparent,
Expand All @@ -65,13 +49,13 @@ fun InitialApp(
containerColor = MaterialTheme.colorScheme.background,
bottomBar = {
AnimatedVisibility(
visible = BottomAppBarResource.isAppbar(currentDestination),
visible = navControllerHolder.bottomBarDestination.value.isAppbar(),
enter = slideInVertically(tween(300)) { it },
exit = slideOutVertically(tween(300)) { it }
) {
MainBottomAppBar(
onBottomAppBarClick = onBottomAppBarClick,
currentDestination = currentDestination
currentDestination = navControllerHolder.bottomBarDestination
)
}
},
Expand Down
5 changes: 2 additions & 3 deletions app/src/main/java/st/slex/csplashscreen/ui/MainActivity.kt
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,11 @@ import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.compose.runtime.remember
import androidx.core.view.WindowCompat
import androidx.navigation.compose.rememberNavController
import org.koin.androidx.compose.koinViewModel
import org.koin.compose.getKoin
import st.slex.csplashscreen.core.ui.theme.AppTheme
import st.slex.csplashscreen.navigation.BaseNavigationHolder
import st.slex.csplashscreen.ui.components.NavHostControllerHolder
import st.slex.csplashscreen.ui.components.NavHostControllerHolder.Companion.rememberNavHostControllerHolder

class MainActivity : ComponentActivity() {

Expand All @@ -20,7 +19,7 @@ class MainActivity : ComponentActivity() {
WindowCompat.setDecorFitsSystemWindows(window, false)
setContent {
AppTheme {
val navHostControllerHolder = NavHostControllerHolder(rememberNavController())
val navHostControllerHolder = rememberNavHostControllerHolder()
getKoin().get<BaseNavigationHolder>().setNavController(navHostControllerHolder)

val viewModel = koinViewModel<InitialAppViewModel>()
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
package st.slex.csplashscreen.ui.components

import androidx.compose.runtime.Composable
import androidx.compose.runtime.DisposableEffect
import androidx.compose.runtime.Stable
import androidx.compose.runtime.State
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.navigation.NavController.OnDestinationChangedListener
import androidx.navigation.NavHostController
import androidx.navigation.compose.rememberNavController
import st.slex.csplashscreen.core.navigation.Screen
import st.slex.csplashscreen.ui.components.bottom_appbar.BottomAppBarResource

@Stable
class NavHostControllerHolder private constructor(
val navController: NavHostController,
val bottomBarDestination: State<Screen?>
) {

companion object {

@Composable
fun rememberNavHostControllerHolder(): NavHostControllerHolder {
val controller = rememberNavController()
val bottomBarDestination = remember {
mutableStateOf<Screen?>(Screen.Home)
}
DisposableEffect(controller) {
val listener = OnDestinationChangedListener { _, destination, _ ->
bottomBarDestination.value =
destination.route?.let(BottomAppBarResource::getByRoute)
}
controller.addOnDestinationChangedListener(listener)
onDispose {
controller.removeOnDestinationChangedListener(listener)
}
}
return remember(controller) {
NavHostControllerHolder(
navController = controller,
bottomBarDestination = bottomBarDestination
)
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,20 +6,16 @@ import androidx.compose.runtime.Composable
import androidx.compose.runtime.CompositionLocalProvider
import androidx.compose.runtime.Stable
import androidx.compose.ui.Modifier
import androidx.navigation.NavHostController
import androidx.navigation.compose.NavHost
import st.slex.csplashscreen.core.navigation.Screen
import st.slex.csplashscreen.core.ui.theme.LocalSharedTransitionScope
import st.slex.csplashscreen.feature.collection.navigation.singleCollectionGraph
import st.slex.csplashscreen.feature.favourite.navigation.favouriteGraph
import st.slex.csplashscreen.feature.photo_detail.navigation.imageDetailGraph
import st.slex.csplashscreen.feature.home.navigation.homeGraph
import st.slex.csplashscreen.feature.photo_detail.navigation.imageDetailGraph
import st.slex.csplashscreen.feature.search.navigation.searchPhotosGraph
import st.slex.csplashscreen.feature.user.navigation.userGraph

@Stable
class NavHostControllerHolder(val navController: NavHostController)

@OptIn(ExperimentalSharedTransitionApi::class)
@Composable
@Stable
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import androidx.compose.material3.NavigationBar
import androidx.compose.material3.NavigationBarItem
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.State
import androidx.compose.runtime.remember
import androidx.compose.ui.Modifier
import androidx.compose.ui.res.stringResource
Expand All @@ -16,7 +17,7 @@ import st.slex.csplashscreen.core.navigation.Screen
@Composable
fun MainBottomAppBar(
onBottomAppBarClick: (Screen) -> Unit,
currentDestination: Screen?
currentDestination: State<Screen?>
) {
NavigationBar(
modifier = Modifier
Expand All @@ -26,7 +27,7 @@ fun MainBottomAppBar(
BottomAppBarResource
.entries
.forEach { item ->
val isSelected = currentDestination == item.screen
val isSelected = currentDestination.value == item.screen
BottomAppBarItem(
item = item,
isSelected = isSelected,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,6 @@ import st.slex.csplashscreen.core.navigation.Screen
import st.slex.csplashscreen.core.navigation.Screen.Favourite
import st.slex.csplashscreen.core.navigation.Screen.Home
import st.slex.csplashscreen.core.navigation.Screen.SearchPhotosScreen
import kotlin.reflect.KClass

enum class BottomAppBarResource(
val unselectedIcon: ImageVector,
Expand Down Expand Up @@ -44,16 +43,12 @@ enum class BottomAppBarResource(

companion object {

fun isAppbar(screen: Any?): Boolean = entries.any { it.screen == screen }
fun Screen?.isAppbar(): Boolean = entries.any { it.screen == this }

fun getByRoute(route: String): Screen? = when {
Home::class.checkScreen(route) -> HOME
SearchPhotosScreen::class.checkScreen(route) -> SEARCH
Favourite::class.checkScreen(route) -> FAVOURITE
else -> null
fun getByRoute(
route: String
): Screen? = BottomAppBarResource.entries.find { entry ->
route.startsWith(checkNotNull(entry.screen.javaClass.canonicalName))
}?.screen

private fun <T : Screen> KClass<T>.checkScreen(route: String): Boolean =
route.contains(simpleName.orEmpty())
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -28,4 +28,17 @@ object Logger {
val currentTag = "$DEFAULT_TAG:${tag.orEmpty()}"
Log.d(currentTag, message)
}
}

fun i(
message: String,
tag: String? = null,
throwable: Throwable? = null,
) {
if (BuildConfig.DEBUG.not()) return
val currentTag = "$DEFAULT_TAG:${tag.orEmpty()}"
Log.i(currentTag, message, throwable)
}

fun tag(tag: String): LoggerTag = LoggerTag(tag)
}

Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
package st.slex.csplashscreen.core.core

class LoggerTag(
private val tag: String
) {

fun e(throwable: Throwable, message: String? = null) {
Logger.e(
throwable = throwable,
tag = tag,
message = message
)
}

fun d(message: String) {
Logger.d(
message = message,
tag = tag
)
}

fun i(
message: String,
throwable: Throwable? = null,
) {
Logger.i(
message = message,
tag = tag,
throwable = throwable
)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,14 @@ import androidx.compose.runtime.remember
import androidx.compose.ui.platform.LocalContext
import coil3.request.CachePolicy
import coil3.request.ImageRequest
import st.slex.csplashscreen.core.core.Logger

object AppImageRequest {

@Composable
fun createImageRequestBuilder(url: String): ImageRequest.Builder {
val context = LocalContext.current
Logger.tag("AppImageRequest").d("createImageRequestBuilder: $url")
return remember {
createImageRequestBuilder(context, url)
.placeholderMemoryCacheKey(url)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,6 @@ data class RemoteUserLinksModel(
@SerialName("photos") val photos: String,
@SerialName("likes") val likes: String,
@SerialName("portfolio") val portfolio: String,
@SerialName("following") val following: String,
@SerialName("followers") val followers: String
@SerialName("following") val following: String?,
@SerialName("followers") val followers: String?
)
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,11 @@ package st.slex.csplashscreen.core.ui.components
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.layout.ContentScale
import androidx.compose.ui.platform.LocalContext
import coil3.compose.AsyncImage
import coil3.request.CachePolicy
import coil3.request.ImageRequest
import coil3.request.crossfade
import st.slex.scplashscreen.core.image.AppImageRequest.createImageRequestBuilder

@Composable
fun ImageComponent(
Expand All @@ -15,7 +17,14 @@ fun ImageComponent(
) {
AsyncImage(
modifier = modifier,
model = createImageRequestBuilder(url)
model = ImageRequest.Builder(LocalContext.current)
.data(url)
.placeholderMemoryCacheKey(url)
.memoryCacheKey(url)
.diskCacheKey(url)
.networkCachePolicy(CachePolicy.ENABLED)
.diskCachePolicy(CachePolicy.ENABLED)
.memoryCachePolicy(CachePolicy.ENABLED)
.crossfade(true)
.build(),
contentDescription = null,
Expand Down
Loading