Skip to content

Commit

Permalink
init get with arguments
Browse files Browse the repository at this point in the history
  • Loading branch information
stslex committed Jul 23, 2023
1 parent ad2fdc8 commit 3da2269
Show file tree
Hide file tree
Showing 12 changed files with 114 additions and 49 deletions.
16 changes: 1 addition & 15 deletions app/src/main/java/com/stslex/aproselection/ui/InitialApp.kt
Original file line number Diff line number Diff line change
@@ -1,28 +1,14 @@
package com.stslex.aproselection.ui

import androidx.compose.foundation.isSystemInDarkTheme
import androidx.compose.runtime.Composable
import androidx.compose.runtime.DisposableEffect
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.tooling.preview.Preview
import androidx.navigation.compose.rememberNavController
import com.google.accompanist.systemuicontroller.rememberSystemUiController
import com.stslex.aproselection.navigation.NavigationHost
import com.stslex.aproselection.core.ui.theme.AppTheme
import com.stslex.aproselection.navigation.NavigationHost

@Composable
fun InitialApp() {
val navController = rememberNavController()
val systemUiController = rememberSystemUiController()
val isDarkTheme = isSystemInDarkTheme()

DisposableEffect(systemUiController, isDarkTheme) {
systemUiController.setSystemBarsColor(
color = Color.Transparent,
darkIcons = isDarkTheme.not(),
)
onDispose {}
}

NavigationHost(navController = navController)
}
Expand Down
4 changes: 0 additions & 4 deletions app/src/main/java/com/stslex/aproselection/ui/MainActivity.kt
Original file line number Diff line number Diff line change
Expand Up @@ -3,16 +3,12 @@ package com.stslex.aproselection.ui
import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.core.view.WindowCompat
import com.stslex.aproselection.core.ui.theme.AppTheme

class MainActivity : ComponentActivity() {

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)

WindowCompat.setDecorFitsSystemWindows(window, false)

setContent {
AppTheme {
InitialApp()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,5 +4,5 @@ import com.stslex.aproselection.core.network.clients.auth.model.HelloRequestMode

interface AuthNetworkClient {

suspend fun getHello(): HelloRequestModel
suspend fun getHello(username: String): HelloRequestModel
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,15 +5,21 @@ import com.stslex.aproselection.core.network.clients.auth.model.HelloRequestMode
import io.ktor.client.call.body
import io.ktor.client.request.get
import io.ktor.http.appendPathSegments
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.withContext

class AuthNetworkClientImpl(
private val networkClient: NetworkClient
) : AuthNetworkClient {

override suspend fun getHello(): HelloRequestModel = networkClient
.apiClient
.get {
url.appendPathSegments("hello")
}
.body()
override suspend fun getHello(
username: String
): HelloRequestModel = withContext(Dispatchers.IO) {
networkClient
.apiClient
.get {
url.appendPathSegments("hello", username)
}
.body()
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,11 +9,12 @@ import androidx.compose.material3.dynamicDarkColorScheme
import androidx.compose.material3.dynamicLightColorScheme
import androidx.compose.material3.lightColorScheme
import androidx.compose.runtime.Composable
import androidx.compose.runtime.SideEffect
import androidx.compose.ui.graphics.toArgb
import androidx.compose.runtime.DisposableEffect
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.platform.LocalView
import androidx.core.view.WindowCompat
import com.google.accompanist.systemuicontroller.rememberSystemUiController

private val DarkColorScheme = darkColorScheme(
primary = Purple80,
Expand Down Expand Up @@ -55,10 +56,19 @@ fun AppTheme(
}
val view = LocalView.current
if (!view.isInEditMode) {
SideEffect {
val window = (view.context as Activity).window
window.statusBarColor = colorScheme.primary.toArgb()
WindowCompat.getInsetsController(window, view).isAppearanceLightStatusBars = darkTheme
val window = (view.context as Activity).window
val systemUiController = rememberSystemUiController()
val isDarkTheme = isSystemInDarkTheme()

DisposableEffect(systemUiController, isDarkTheme) {
WindowCompat.setDecorFitsSystemWindows(window, false)
systemUiController.setSystemBarsColor(
color = Color.Transparent,
darkIcons = isDarkTheme.not(),
)
onDispose {
WindowCompat.setDecorFitsSystemWindows(window, true)
}
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,5 +4,5 @@ import kotlinx.coroutines.flow.Flow

interface AuthRepository {

val hello: Flow<String>
fun getHello(username: String): Flow<String>
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,10 @@ class AuthRepositoryImpl(
private val networkClient: AuthNetworkClient
) : AuthRepository {

override val hello: Flow<String> = flow {
val helloResponse = networkClient.getHello().text
override fun getHello(username: String): Flow<String> = flow {
val helloResponse = networkClient
.getHello(username = username)
.text
emit(helloResponse)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,5 +4,5 @@ import kotlinx.coroutines.flow.Flow

interface AuthInteractor {

val hello: Flow<String>
fun getHello(username: String): Flow<String>
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,9 @@ class AuthInteractorImpl(
private val repository: AuthRepository
) : AuthInteractor {

override val hello: Flow<String>
get() = repository.hello
override fun getHello(
username: String
): Flow<String> = repository.getHello(
username = username
)
}
Original file line number Diff line number Diff line change
@@ -1,37 +1,84 @@
package com.stslex.aproselection.feature.auth.ui

import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.padding
import androidx.compose.material3.Divider
import androidx.compose.material3.ElevatedButton
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.material3.TextField
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import com.stslex.aproselection.core.ui.navigation.NavigationScreen

@Composable
fun AuthScreen(
text: String,
navigate: (NavigationScreen) -> Unit,
setUsername: (String) -> Unit,
modifier: Modifier = Modifier,
) {
var inputUsername by remember {
mutableStateOf("")
}

Box(
modifier = modifier.fillMaxSize()
modifier = modifier
.fillMaxSize()
.background(MaterialTheme.colorScheme.background),
contentAlignment = Alignment.Center,
) {
Text(
modifier = Modifier.align(Alignment.Center),
text = text,
style = MaterialTheme.typography.headlineMedium
)

Column(
horizontalAlignment = Alignment.CenterHorizontally
) {
TextField(
value = inputUsername,
onValueChange = { value ->
if (inputUsername != value) {
inputUsername = value
}
},
maxLines = 1,
)
Divider(Modifier.padding(16.dp))
ElevatedButton(
onClick = {
setUsername(inputUsername)
inputUsername = ""
}
) {
Text(
text = "submit",
style = MaterialTheme.typography.headlineMedium
)
}
Divider(Modifier.padding(16.dp))
Text(
text = text,
style = MaterialTheme.typography.headlineMedium,
color = MaterialTheme.colorScheme.onBackground
)
}
}
}

@Preview
@Preview(device = "id:pixel_6", showSystemUi = true, showBackground = true)
@Composable
fun AuthScreenPreview() {
AuthScreen(
text = "text",
navigate = {}
navigate = {},
setUsername = {}
)
}
Original file line number Diff line number Diff line change
@@ -1,19 +1,33 @@
package com.stslex.aproselection.feature.auth.ui

import androidx.lifecycle.viewModelScope
import com.stslex.aproselection.core.ui.base.BaseViewModel
import com.stslex.aproselection.feature.auth.domain.interactor.AuthInteractor
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.StateFlow
import kotlinx.coroutines.flow.asStateFlow
import kotlinx.coroutines.flow.catch
import kotlinx.coroutines.flow.launchIn
import kotlinx.coroutines.flow.onEach

class AuthViewModel(
private val interactor: AuthInteractor
) : BaseViewModel() {

private val _text: MutableStateFlow<String> = MutableStateFlow("...")

val text: StateFlow<String>
get() = interactor
.hello
get() = _text.asStateFlow()

fun setUsername(username: String) {
_text.value = "..."
interactor.getHello(username)
.catch { throwable ->
handleError(throwable)
}
.stateIn("")
.onEach { receivedText ->
_text.emit(receivedText)
}
.launchIn(viewModelScope)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ fun NavGraphBuilder.authRouter(
AuthScreen(
text = text,
navigate = navigate,
setUsername = viewModel::setUsername,
modifier = modifier
)
}
Expand Down

0 comments on commit 3da2269

Please sign in to comment.