Skip to content
This repository was archived by the owner on Nov 30, 2024. It is now read-only.
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
58 changes: 21 additions & 37 deletions TAVE/app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -2,21 +2,22 @@ plugins {
id 'com.android.application'
id 'org.jetbrains.kotlin.android'
id 'kotlin-kapt'
id 'com.google.dagger.hilt.android'
}

apply plugin: 'com.google.dagger.hilt.android'

Properties properties = new Properties()
properties.load(project.rootProject.file('local.properties').newDataInputStream())

kotlin { jvmToolchain(17) }

android {
namespace 'com.example.tave'
compileSdk 33
compileSdk 34

defaultConfig {
applicationId "com.example.tave"
minSdk 31
targetSdk 33
targetSdk 34
versionCode 1
versionName "1.0"
buildConfigField "String", "TAVE_API_URL", properties["TAVE_API_URL"]
Expand All @@ -31,19 +32,9 @@ android {
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
kotlinOptions {
jvmTarget = '1.8'
}
buildFeatures {
compose true
}
composeOptions {
kotlinCompilerExtensionVersion '1.4.3'
}
buildFeatures { compose true }
composeOptions { kotlinCompilerExtensionVersion '1.5.3' }

packagingOptions {
resources {
excludes += '/META-INF/{AL2.0,LGPL2.1}'
Expand All @@ -52,17 +43,19 @@ android {
}

dependencies {
implementation 'androidx.core:core-ktx:1.10.1'
implementation 'androidx.activity:activity-compose:1.7.2'
implementation 'androidx.core:core-ktx:1.12.0'
implementation 'androidx.activity:activity-compose:1.8.2'
implementation "androidx.compose.ui:ui:$compose_version"
implementation "androidx.compose.ui:ui-tooling-preview:$compose_version"
implementation 'androidx.compose.material3:material3:1.2.0-alpha02'
implementation "androidx.constraintlayout:constraintlayout-compose:1.0.1"

// Android Material & Material3 (Stable Version 1.1.1)
implementation 'com.google.android.material:material:1.11.0'
implementation 'androidx.compose.material3:material3:1.1.2'

// AndroidX Lifecycle, LiveData, ViewModel
implementation 'androidx.lifecycle:lifecycle-runtime-ktx:2.6.1'
implementation "androidx.lifecycle:lifecycle-viewmodel-compose:2.6.1"
implementation 'androidx.lifecycle:lifecycle-runtime-ktx:2.6.2'
implementation "androidx.lifecycle:lifecycle-viewmodel-compose:2.6.2"
implementation "androidx.compose.runtime:runtime-livedata:$compose_version"

// Project Dependency
Expand All @@ -77,31 +70,22 @@ dependencies {
debugImplementation "androidx.compose.ui:ui-tooling:$compose_version"
debugImplementation "androidx.compose.ui:ui-test-manifest:$compose_version"

// Android Material
implementation 'com.google.android.material:material:1.9.0'

// Jetpack Compose Navigation
def nav_version = "2.6.0"
implementation("androidx.navigation:navigation-compose:$nav_version")
implementation("androidx.navigation:navigation-compose:2.7.6")

// Dagger-Hilt DI(Dependency Injection) Tool
implementation "com.google.dagger:hilt-android:2.44.2"
kapt "com.google.dagger:hilt-android-compiler:2.44.2"
implementation 'androidx.hilt:hilt-navigation-compose:1.0.0'
implementation 'com.google.dagger:hilt-android:2.48'
kapt 'com.google.dagger:hilt-android-compiler:2.48'
implementation 'androidx.hilt:hilt-navigation-compose:1.1.0'

// LandScapist-Glide
implementation "com.github.skydoves:landscapist-glide:2.2.2"
implementation 'com.github.skydoves:landscapist-glide:2.2.10'

// Zxing
implementation('com.journeyapps:zxing-android-embedded:4.3.0') { transitive = false }
implementation 'com.google.zxing:core:3.3.0'

// Server Sent Events
implementation "com.squareup.okhttp3:okhttp-sse:4.11.0"
testImplementation "com.squareup.okhttp3:okhttp-sse:4.11.0"
implementation 'com.google.zxing:core:3.5.1'

// Retrofit2
implementation 'com.squareup.retrofit2:retrofit:2.9.0'
implementation 'com.squareup.retrofit2:converter-gson:2.9.0'

}
1 change: 1 addition & 0 deletions TAVE/app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -24,4 +24,5 @@
android:name="preloaded_fonts"
android:resource="@array/preloaded_fonts" />
</application>

</manifest>
2 changes: 1 addition & 1 deletion TAVE/app/src/main/java/com/example/tave/TaveApplication.kt
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package com.example.tave

import android.app.Application
import com.example.tave.common.util.PreferenceUtil
import com.example.tave.util.PreferenceUtil
import dagger.hilt.android.HiltAndroidApp

@HiltAndroidApp
Expand Down
98 changes: 87 additions & 11 deletions TAVE/app/src/main/java/com/example/tave/TaveNavHost.kt
Original file line number Diff line number Diff line change
@@ -1,10 +1,14 @@
package com.example.tave

import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.runtime.collectAsState
import androidx.compose.runtime.getValue
import androidx.compose.runtime.livedata.observeAsState
import androidx.hilt.navigation.compose.hiltViewModel
import androidx.navigation.NavHostController
import androidx.navigation.compose.NavHost
import androidx.navigation.compose.composable
import com.example.tave.common.Constants
import com.example.tave.pages.HomePage
import com.example.tave.pages.InitPasswordPage
import com.example.tave.pages.LoginPage
Expand All @@ -13,19 +17,49 @@ import com.example.tave.pages.NoticePage
import com.example.tave.pages.OTPCodePage
import com.example.tave.pages.ProfilePage
import com.example.tave.pages.SendSMSCodePage
import com.example.tave.viewmodel.HomeViewModel
import com.example.tave.viewmodel.InitPWDViewModel
import com.example.tave.viewmodel.InputOTPViewModel
import com.example.tave.viewmodel.LogInViewModel
import com.example.tave.viewmodel.NoticeDetailViewModel
import com.example.tave.viewmodel.NoticeViewModel
import com.example.tave.viewmodel.ProfileViewModel
import com.example.tave.viewmodel.SendSMSViewModel

@Composable
fun TaveNavHost(navController: NavHostController) {
val startPoint: String = if (
TaveApplication
.authPrefs
.getTokenValue(Constants.ACCESS_TOKEN_TITLE, "")
.isNotEmpty()
) {
LogInPage.route
} else {
HomePage.route
}

NavHost(
navController = navController,
startDestination = LogInPage.route
startDestination = startPoint
) {
composable(route = LogInPage.route) {
LoginPage(modifier = Modifier, navController = navController)
val logInViewModel = hiltViewModel<LogInViewModel>()
val loginState by logInViewModel.logInState.collectAsState()

LoginPage(
navController = navController,
loginState = loginState,
onLogIn = logInViewModel::userLogInAccount
)
}
composable(route = SendSMSCodePage.route) {
val sendSMSViewModel = hiltViewModel<SendSMSViewModel>()
val sendSMSCodeState by sendSMSViewModel.isSendSMSCode.collectAsState()

SendSMSCodePage(
modifier = Modifier,
sendSMSCodeState = sendSMSCodeState,
sendSMSCode = sendSMSViewModel::sendSMSCode,
onNavigateOTP = { phoneNumber -> navController.navigateToOTPPage(phoneNumber) }
)
}
Expand All @@ -34,24 +68,59 @@ fun TaveNavHost(navController: NavHostController) {
arguments = InputOTPCodePage.argument
) { navBackStackEntry ->
val phoneNumber = navBackStackEntry.arguments?.getString(InputOTPCodePage.phone_Number)
val inputOTPViewModel = hiltViewModel<InputOTPViewModel>()
val isOTPChecked by inputOTPViewModel.isOTPCodeChecked.collectAsState()

OTPCodePage(
modifier = Modifier,
phoneNumber = phoneNumber,
navController = navController
navController = navController,
isOTPChecked = isOTPChecked,
checkOTPCode = inputOTPViewModel::checkOTPCode
)
}
composable(route = InitPasswordPage.route) {
InitPasswordPage(modifier = Modifier, navController = navController)
val initPWDViewMode = hiltViewModel<InitPWDViewModel>()
val isPWDChanged by initPWDViewMode.isPasswordChanged.collectAsState()

InitPasswordPage(
navController = navController,
isPWDChanged = isPWDChanged,
validatePWD = initPWDViewMode::validatePWD
)
}
composable(route = HomePage.route) {
HomePage(modifier = Modifier, navController = navController)
val homeViewModel = hiltViewModel<HomeViewModel>()
val userProfile by homeViewModel.userProfile.observeAsState()
val personalScore by homeViewModel.personalScore.observeAsState()
val teamScore by homeViewModel.teamScore.observeAsState()
val scheduleTitle by homeViewModel.scheduleTitle.observeAsState()
val scheduleRemainDay by homeViewModel.scheduleRemainDay.observeAsState()

HomePage(
navController = navController,
userProfile = userProfile,
personalScore = personalScore,
teamScore = teamScore,
scheduleTitle = scheduleTitle,
scheduleRemainDay = scheduleRemainDay,
getPersonalScore = homeViewModel::getPersonalScore,
getTeamScore = homeViewModel::getTeamScore
)
}
composable(route = ProfilePage.route) {
ProfilePage(modifier = Modifier)
val profileViewModel = hiltViewModel<ProfileViewModel>()
val userProfile by profileViewModel.userProfile.observeAsState()

ProfilePage(userProfile = userProfile)
}
composable(route = NoticePage.route) {
val noticeViewModel = hiltViewModel<NoticeViewModel>()
val noticeMainCard by noticeViewModel.noticeMainData.observeAsState()
val noticeNewsList by noticeViewModel.noticeSubDate.observeAsState()

NoticePage(
modifier = Modifier,
noticeMainCard = noticeMainCard,
noticeNewsList = noticeNewsList,
onMainItemClick = { noticeID -> navController.navigateToNoticeDetail(noticeID) },
onSubItemClick = { noticeID -> navController.navigateToNoticeDetail(noticeID) }
)
Expand All @@ -61,7 +130,14 @@ fun TaveNavHost(navController: NavHostController) {
arguments = NoticeDetailPage.arguments
) { navBackStackEntry ->
val noticeID = navBackStackEntry.arguments?.getInt(NoticeDetailPage.noticeID)
NoticeDetailPage(modifier = Modifier, noticeID = noticeID)
val noticeDetailViewModel = hiltViewModel<NoticeDetailViewModel>()
val noticeDetailInfo by noticeDetailViewModel.noticeData.observeAsState()

NoticeDetailPage(
noticeID = noticeID,
noticeDetailInfo = noticeDetailInfo,
getNoticeDetail = noticeDetailViewModel::getNoticeDetail
)
}
}
}
Expand Down
12 changes: 4 additions & 8 deletions TAVE/app/src/main/java/com/example/tave/common/Constants.kt
Original file line number Diff line number Diff line change
Expand Up @@ -3,17 +3,13 @@ package com.example.tave.common
object Constants {
const val TAVE_ADMIN: String = "TAVE 운영진"

//URL REQUEST HEADER
const val AUTHORIZATION_HEADER_TITLE: String = "authorization"
const val SSE_HEADER_TITLE: String = "accept"
const val SSE_HEADER_VALUE: String = "text/event-stream"
// //URL REQUEST HEADER
// const val AUTHORIZATION_HEADER_TITLE: String = "authorization"
// const val SSE_HEADER_TITLE: String = "accept"
// const val SSE_HEADER_VALUE: String = "text/event-stream"

//MODULE TEXT
const val ACCESS_TOKEN_TITLE: String = "accessToken"
const val ACCESS_CERT_ALIAS: String = "TaveCA"
const val ACCESS_CERT_TYPE: String = "X.509"
const val SSL_PROTOCOL: String = "TLS"
const val SSE_ACK_FLAG: String = "connected!"

//GLIDE IMAGE CONTENT DESCRIPTION
const val IMAGE_LOAD_SUCCESS_CONTENT_DESC: String = "이미지 로드 성공"
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.example.tave.items.glide
package com.example.tave.components.glide

import androidx.compose.foundation.Image
import androidx.compose.foundation.layout.*
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.example.tave.items.glide
package com.example.tave.components.glide

import androidx.compose.animation.core.*
import androidx.compose.foundation.background
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.example.tave.items.home
package com.example.tave.components.home

import android.graphics.Bitmap
import androidx.compose.foundation.Image
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.example.tave.items.home
package com.example.tave.components.home

import androidx.compose.foundation.Image
import androidx.compose.foundation.layout.*
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.example.tave.items.home
package com.example.tave.components.home

import androidx.compose.foundation.layout.*
import androidx.compose.material3.*
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.example.tave.items.home
package com.example.tave.components.home

import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Arrangement
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.example.tave.items.home
package com.example.tave.components.home

import androidx.compose.foundation.layout.Column
import androidx.compose.material3.Text
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.example.tave.items.initpassword
package com.example.tave.components.initpassword

import androidx.compose.foundation.layout.size
import androidx.compose.material3.ButtonDefaults
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.example.tave.items.initpassword
package com.example.tave.components.initpassword

import androidx.compose.foundation.Image
import androidx.compose.foundation.layout.Arrangement
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.example.tave.items.login
package com.example.tave.components.login

import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Column
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.example.tave.items.login
package com.example.tave.components.login

import androidx.compose.foundation.layout.size
import androidx.compose.material3.*
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.example.tave.items.notice
package com.example.tave.components.notice

import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.*
Expand All @@ -16,7 +16,7 @@ import androidx.compose.ui.unit.sp
import com.example.domain.entity.notice.NoticeDetailEntity
import com.example.tave.R
import com.example.tave.common.Constants
import com.example.tave.items.glide.GlideImageView
import com.example.tave.components.glide.GlideImageView
import com.example.tave.ui.font.NotoSansKr
import com.example.tave.ui.theme.Shape

Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.example.tave.items.notice
package com.example.tave.components.notice

import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.*
Expand All @@ -14,7 +14,7 @@ import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import com.example.tave.R
import com.example.tave.items.glide.GlideImageView
import com.example.tave.components.glide.GlideImageView
import com.example.tave.ui.font.NotoSansKr
import com.example.tave.ui.theme.Shape

Expand Down
Loading