Skip to content

Commit

Permalink
Merge pull request #10 from team-haribo/feature/9-publishing-login
Browse files Browse the repository at this point in the history
🔀 :: (#9) - publishing login
  • Loading branch information
diejdkll authored Jan 13, 2024
2 parents 6cb0b72 + 62388cb commit f9996f1
Show file tree
Hide file tree
Showing 22 changed files with 506 additions and 35 deletions.
1 change: 1 addition & 0 deletions app/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ android {

dependencies {
implementation(project(":core:design-system"))
implementation(project(":feature:login"))

implementation(libs.junit)
androidTestImplementation(libs.androidx.test.ext)
Expand Down
43 changes: 8 additions & 35 deletions app/src/main/java/com/goms/goms_android_v2/MainActivity.kt
Original file line number Diff line number Diff line change
Expand Up @@ -3,53 +3,26 @@ package com.goms.goms_android_v2
import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.material3.windowsizeclass.ExperimentalMaterial3WindowSizeClassApi
import androidx.compose.material3.windowsizeclass.calculateWindowSizeClass
import androidx.compose.runtime.CompositionLocalProvider
import androidx.core.splashscreen.SplashScreen.Companion.installSplashScreen
import com.goms.design_system.theme.GomsTheme
import com.goms.goms_android_v2.ui.GomsApp
import dagger.hilt.android.AndroidEntryPoint

@AndroidEntryPoint
class MainActivity : ComponentActivity() {
@OptIn(ExperimentalMaterial3WindowSizeClassApi::class)
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
installSplashScreen()
GomsTheme { colors, typography ->
// A surface container using the 'background' color from the theme
Box(
modifier = Modifier
.fillMaxSize()
.background(colors.BLACK),
) {
Greeting("Android", Modifier.align(Alignment.Center))
CompositionLocalProvider {
GomsTheme { _, _ ->
GomsApp(windowSizeClass = calculateWindowSizeClass(this))
}
}
}
}
}

@Composable
fun Greeting(name: String, modifier: Modifier = Modifier) {
GomsTheme { colors, typography ->
Text(
text = "Hello $name!",
modifier = modifier,
color = colors.WHITE
)
}
}

@Preview(showBackground = true)
@Composable
fun GreetingPreview() {
GomsTheme { colors, typography ->
Greeting("Android")
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package com.goms.goms_android_v2.navigation

import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.navigation.compose.NavHost
import com.goms.goms_android_v2.ui.GomsAppState
import com.goms.login.navigation.loginRoute
import com.goms.login.navigation.loginScreen
import com.goms.login.navigation.navigateToLogin

@Composable
fun GomsNavHost(
appState: GomsAppState,
modifier: Modifier = Modifier,
startDestination: String = loginRoute
) {
val navController = appState.navController
NavHost(
navController = navController,
startDestination = startDestination,
modifier = modifier
) {
loginScreen(
onNumberLoginClick = navController::navigateToLogin // number login 나오면 수정
)
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
package com.goms.goms_android_v2.navigation

enum class TopLevelDestination {
LOGIN,
}
18 changes: 18 additions & 0 deletions app/src/main/java/com/goms/goms_android_v2/ui/GomsApp.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package com.goms.goms_android_v2.ui

import androidx.compose.material3.windowsizeclass.WindowSizeClass
import androidx.compose.runtime.Composable
import com.goms.design_system.theme.GomsTheme
import com.goms.goms_android_v2.navigation.GomsNavHost

@Composable
fun GomsApp(
windowSizeClass: WindowSizeClass,
appState: GomsAppState = rememberBitgoeulAppState(
windowSizeClass = windowSizeClass
)
) {
GomsTheme { _,_ ->
GomsNavHost(appState = appState)
}
}
56 changes: 56 additions & 0 deletions app/src/main/java/com/goms/goms_android_v2/ui/GomsAppState.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
package com.goms.goms_android_v2.ui

import androidx.compose.material3.windowsizeclass.WindowSizeClass
import androidx.compose.material3.windowsizeclass.WindowWidthSizeClass
import androidx.compose.runtime.Composable
import androidx.compose.runtime.Stable
import androidx.compose.runtime.remember
import androidx.compose.runtime.rememberCoroutineScope
import androidx.navigation.NavDestination
import androidx.navigation.NavHostController
import androidx.navigation.compose.currentBackStackEntryAsState
import androidx.navigation.compose.rememberNavController
import com.goms.goms_android_v2.navigation.TopLevelDestination
import com.goms.login.navigation.loginRoute
import kotlinx.coroutines.CoroutineScope

@Composable
fun rememberBitgoeulAppState(
windowSizeClass: WindowSizeClass,
coroutineScope: CoroutineScope = rememberCoroutineScope(),
navController: NavHostController = rememberNavController()
) : GomsAppState {
return remember(
navController,
coroutineScope,
windowSizeClass
) {
GomsAppState(
navController,
coroutineScope,
windowSizeClass
)
}
}

@Stable
class GomsAppState(
val navController: NavHostController,
val coroutineScope: CoroutineScope,
val windowSizeClass: WindowSizeClass
) {
val currentDestination: NavDestination?
@Composable get() = navController
.currentBackStackEntryAsState().value?.destination

val currentTopLeverDestination: TopLevelDestination?
@Composable get() = when (currentDestination?.route) {
loginRoute -> TopLevelDestination.LOGIN
else -> null
}

val shouldShowBottomBar: Boolean
get() = windowSizeClass.widthSizeClass == WindowWidthSizeClass.Compact

val topLevelDestinations: List<TopLevelDestination> = TopLevelDestination.values().asList()
}
20 changes: 20 additions & 0 deletions core/design-system/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
import java.io.FileInputStream
import java.util.Properties

@Suppress("DSL_SCOPE_VIOLATION")
plugins {
id("goms.android.core")
Expand All @@ -6,9 +9,26 @@ plugins {
}

android {
buildFeatures {
buildConfig = true
}

defaultConfig {
buildConfigField("String", "CLIENT_ID", getApiKey("CLIENT_ID"))
buildConfigField("String", "REDIRECT_URL", getApiKey("REDIRECT_URL"))
}

namespace = "com.goms.design_system"
}

dependencies {
implementation(libs.coil.kt.compose)
implementation(libs.gauth)
}

fun getApiKey(propertyKey: String): String {
val propFile = rootProject.file("./local.properties")
val properties = Properties()
properties.load(FileInputStream(propFile))
return properties.getProperty(propertyKey)
}
Empty file.
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package com.goms.design_system.component.button

import androidx.compose.runtime.Composable
import com.msg.gauthsignin.component.GAuthButton
import com.msg.gauthsignin.component.utils.Types

@Composable
fun AuthButton(onClick: () -> Unit) {
GAuthButton(
style = Types.Style.DEFAULT,
actionType = Types.ActionType.SIGNIN,
colors = Types.Colors.COLORED,
horizontalPercent = 1f
) {
onClick()
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package com.goms.design_system.component.modifier

internal interface MultipleEventsCutter {
fun processEvent(event: () -> Unit)

companion object
}

internal fun MultipleEventsCutter.Companion.get(): MultipleEventsCutter =
MultipleEventsCutterImpl()

private class MultipleEventsCutterImpl : MultipleEventsCutter {
private val now: Long
get() = System.currentTimeMillis()

private var lastEventTimeMs: Long = 0

override fun processEvent(event: () -> Unit) {
if (now - lastEventTimeMs >= 1000L) {
event.invoke()
}
lastEventTimeMs = now
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
package com.goms.design_system.component.modifier

import androidx.compose.foundation.LocalIndication
import androidx.compose.foundation.clickable
import androidx.compose.foundation.interaction.MutableInteractionSource
import androidx.compose.runtime.remember
import androidx.compose.ui.Modifier
import androidx.compose.ui.composed
import androidx.compose.ui.platform.debugInspectorInfo
import androidx.compose.ui.semantics.Role

fun Modifier.gomsClickable(
enabled: Boolean = true,
isIndication: Boolean = false,
onClickLabel: String? = null,
role: Role? = null,
onClick: () -> Unit
) = composed(
inspectorInfo = debugInspectorInfo {
name = "clickable"
properties["enabled"] = enabled
properties["onClickLabel"] = onClickLabel
properties["role"] = role
properties["onClick"] = onClick
}
) {
val multipleEventsCutter = remember { MultipleEventsCutter.get() }
Modifier.clickable(
enabled = enabled,
onClickLabel = onClickLabel,
onClick = { multipleEventsCutter.processEvent { onClick() } },
role = role,
indication = if (isIndication) LocalIndication.current else null,
interactionSource = remember { MutableInteractionSource() }
)
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
package com.goms.design_system.component.text

import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding
import androidx.compose.material3.Divider
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.unit.dp
import com.goms.design_system.component.modifier.gomsClickable
import com.goms.design_system.theme.GomsTheme

@Composable
fun LinkText(
text: String,
onLinkTextClick: () -> Unit
) {
GomsTheme { colors, typography ->
Column(
modifier = Modifier.fillMaxWidth(),
horizontalAlignment = Alignment.CenterHorizontally
) {
Row(
modifier = Modifier
.fillMaxWidth()
.height(20.dp),
verticalAlignment = Alignment.CenterVertically
) {
Divider(
modifier = Modifier
.weight(1f)
.height(1.dp),
color = colors.WHITE.copy(0.15f)
)
Text(
modifier = Modifier.padding(horizontal = 4.dp),
text = "또는",
style = typography.caption,
fontWeight = FontWeight.Normal,
color = colors.G4
)
Divider(
modifier = Modifier
.weight(1f)
.height(1.dp),
color = colors.WHITE.copy(0.15f)
)
}
Box(
modifier = Modifier
.height(48.dp)
.gomsClickable { onLinkTextClick() }
) {
Text(
modifier = Modifier.align(Alignment.Center),
text = text,
style = typography.buttonLarge,
fontWeight = FontWeight.Normal,
color = colors.I5
)
}
}
}
}
Loading

0 comments on commit f9996f1

Please sign in to comment.