From 60b3b2295fdfccc687d20af388588db17bee6cef Mon Sep 17 00:00:00 2001 From: KanuKim97 <74421057+KanuKim97@users.noreply.github.com> Date: Sat, 15 Jul 2023 04:16:59 +0900 Subject: [PATCH 1/6] =?UTF-8?q?=EC=8A=A4=EC=BC=80=EC=A5=B4=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/example/tave/pages/Home.kt | 3 +- .../example/tave/viewmodel/HomeViewModel.kt | 28 +++++++++++-------- .../data/model/schedule/ScheduleModel.kt | 8 +++++- 3 files changed, 26 insertions(+), 13 deletions(-) diff --git a/TAVE/app/src/main/java/com/example/tave/pages/Home.kt b/TAVE/app/src/main/java/com/example/tave/pages/Home.kt index 4fbefff..7a9e7e3 100644 --- a/TAVE/app/src/main/java/com/example/tave/pages/Home.kt +++ b/TAVE/app/src/main/java/com/example/tave/pages/Home.kt @@ -1,8 +1,10 @@ package com.example.tave.pages +import android.util.Log import androidx.compose.foundation.layout.* import androidx.compose.material3.* import androidx.compose.runtime.Composable +import androidx.compose.runtime.collectAsState import androidx.compose.runtime.livedata.observeAsState import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember @@ -29,7 +31,6 @@ fun HomePage( ) { homeViewModel.getPersonalScore() homeViewModel.getTeamScore() - homeViewModel.getScheduleAll() val homeProfile = homeViewModel.userProfile.observeAsState() val personalScore = homeViewModel.personalScore.observeAsState() diff --git a/TAVE/app/src/main/java/com/example/tave/viewmodel/HomeViewModel.kt b/TAVE/app/src/main/java/com/example/tave/viewmodel/HomeViewModel.kt index b3b0772..2963747 100644 --- a/TAVE/app/src/main/java/com/example/tave/viewmodel/HomeViewModel.kt +++ b/TAVE/app/src/main/java/com/example/tave/viewmodel/HomeViewModel.kt @@ -2,13 +2,13 @@ package com.example.tave.viewmodel import android.icu.text.SimpleDateFormat import android.icu.util.Calendar +import android.util.Log import androidx.lifecycle.LiveData import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import com.example.data.api.TaveAPIService import com.example.domain.entity.profile.UserProfileEntity -import com.example.domain.entity.schedule.ScheduleEntity import com.example.domain.usecases.profile.GetUserProfileUseCase import com.example.domain.usecases.schedule.GetRecentScheduleUseCase import com.example.domain.usecases.score.GetPersonalScoreUseCase @@ -30,14 +30,12 @@ import okhttp3.sse.EventSourceListener import java.util.Date import java.util.Locale import javax.inject.Inject - @HiltViewModel class HomeViewModel @Inject constructor( private val taveAPIService: TaveAPIService, private val getUserProfileUseCase: GetUserProfileUseCase, private val getPersonalScoreUseCase: GetPersonalScoreUseCase, private val getTeamScoreUseCase: GetTeamScoreUseCase, - private val getScheduleAllUseCase: GetRecentScheduleUseCase, private val sseEventListener: EventSource.Factory, private val sseEventSourceListener: EventSourceListener, @IoDispatcher private val ioDispatcher: CoroutineDispatcher, @@ -58,15 +56,16 @@ class HomeViewModel @Inject constructor( private val accessToken: String = TaveApplication.authPrefs.getTokenValue(Constants.ACCESS_TOKEN_TITLE, "") private val dateFormat = SimpleDateFormat(Constants.SCHEDULE_DATE_TIME_FORMAT, Locale.KOREAN) - private val todayDate: Long = Calendar.getInstance().apply { + private val todayDate: Date = Calendar.getInstance().apply { set(Calendar.HOUR_OF_DAY, 0) set(Calendar.MINUTE, 0) set(Calendar.SECOND, 0) set(Calendar.MILLISECOND, 0) - }.time.time + }.time init { getUserProfile() + getScheduleAll() sseEventSource().request() } @@ -104,13 +103,16 @@ class HomeViewModel @Inject constructor( } } - fun getScheduleAll(): Job = viewModelScope.launch(ioDispatcher) { - getScheduleAllUseCase(accessToken).collect { item -> - if (item.isEmpty()) { + private fun getScheduleAll(): Job = viewModelScope.launch(ioDispatcher) { + val response = taveAPIService.getScheduleAll(accessToken) + if (response.isSuccessful) { + val responseBody = response.body()?: listOf() + + if (responseBody.isEmpty()) { _scheduleTitle.postValue(Constants.IS_SCHEDULE_EMPTY_TITLE) _scheduleRemainDay.postValue(Constants.IS_SCHEDULE_EMPTY_DAY) } else { - val recentSchedule: ScheduleEntity = item.first() + val recentSchedule = responseBody.sortedBy { item -> dateFormat.parse(item.date).time }.first() val scheduleDate: Date = dateFormat.parse(recentSchedule.date) val remainDate: Int = calculateDDay(scheduleDate.time) @@ -128,8 +130,12 @@ class HomeViewModel @Inject constructor( } } - private fun calculateDDay(scheduleDate: Long): Int = - (((scheduleDate - todayDate) / (60 * 60 * 24 * 1000))).toInt() + private fun calculateDDay(scheduleDate: Long): Int { + Log.d("로그", "${((scheduleDate - todayDate.time) / (60 * 60 * 24 * 1000))}") + val result = (scheduleDate - todayDate.time) / (60 * 60 * 24 * 1000) + return result.toInt() + } + override fun onCleared() { super.onCleared() diff --git a/TAVE/data/src/main/java/com/example/data/model/schedule/ScheduleModel.kt b/TAVE/data/src/main/java/com/example/data/model/schedule/ScheduleModel.kt index 2d29c22..5e16fea 100644 --- a/TAVE/data/src/main/java/com/example/data/model/schedule/ScheduleModel.kt +++ b/TAVE/data/src/main/java/com/example/data/model/schedule/ScheduleModel.kt @@ -3,6 +3,12 @@ package com.example.data.model.schedule import com.google.gson.annotations.SerializedName data class ScheduleModel( + @SerializedName("id") val id: Int, @SerializedName("title") val title: String, - @SerializedName("date") val date: String + @SerializedName("date") val date: String, + @SerializedName("place") val place: String, + @SerializedName("adminId") val adminId: Int, + @SerializedName("attendanceMemberId") val attendanceMemberId: List, + @SerializedName("createAt") val createdTime: String, + @SerializedName("modifiedAt") val modifiedTime: String ) \ No newline at end of file From 160c0e85df8ba661e2ee28abaa4ddc91a3cc67aa Mon Sep 17 00:00:00 2001 From: KanuKim97 <74421057+KanuKim97@users.noreply.github.com> Date: Sun, 23 Jul 2023 23:57:20 +0900 Subject: [PATCH 2/6] 1. Update Gradle to 8.0.2 version 2. Update build.gradle java version to 17 --- TAVE/app/build.gradle | 42 +++++++++---------- TAVE/app/src/main/AndroidManifest.xml | 1 + .../tave/common/util/PreferenceUtil.kt | 4 +- TAVE/build.gradle | 7 ++-- TAVE/data/build.gradle | 14 +++---- TAVE/domain/build.gradle | 14 +++---- .../domain/entity/schedule/ScheduleEntity.kt | 2 +- .../schedule/GetRecentScheduleUseCase.kt | 3 +- TAVE/gradle.properties | 4 +- TAVE/gradle/wrapper/gradle-wrapper.properties | 2 +- 10 files changed, 46 insertions(+), 47 deletions(-) diff --git a/TAVE/app/build.gradle b/TAVE/app/build.gradle index 1429716..3b3e3dd 100644 --- a/TAVE/app/build.gradle +++ b/TAVE/app/build.gradle @@ -31,19 +31,18 @@ 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' + sourceCompatibility JavaVersion.VERSION_17 + targetCompatibility JavaVersion.VERSION_17 } + + kotlinOptions { jvmTarget = '17' } + + buildFeatures { compose true } + + composeOptions { kotlinCompilerExtensionVersion '1.4.3' } + packagingOptions { resources { excludes += '/META-INF/{AL2.0,LGPL2.1}' @@ -56,9 +55,11 @@ dependencies { implementation 'androidx.activity:activity-compose:1.7.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.9.0' + implementation 'androidx.compose.material3:material3:1.1.1' // AndroidX Lifecycle, LiveData, ViewModel implementation 'androidx.lifecycle:lifecycle-runtime-ktx:2.6.1' @@ -77,31 +78,28 @@ 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") // 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 'com.google.dagger:hilt-android:2.47' + kapt 'com.google.dagger:hilt-android-compiler:2.47' implementation 'androidx.hilt:hilt-navigation-compose:1.0.0' // LandScapist-Glide - implementation "com.github.skydoves:landscapist-glide:2.2.2" + implementation 'com.github.skydoves:landscapist-glide:2.2.3' // Zxing implementation('com.journeyapps:zxing-android-embedded:4.3.0') { transitive = false } - implementation 'com.google.zxing:core:3.3.0' + implementation 'com.google.zxing:core:3.5.1' - // Server Sent Events - implementation "com.squareup.okhttp3:okhttp-sse:4.11.0" - testImplementation "com.squareup.okhttp3:okhttp-sse:4.11.0" + // OkHttp3-sse + implementation 'com.squareup.okhttp3:okhttp-sse:5.0.0-alpha.11' + testImplementation 'com.squareup.okhttp3:okhttp-sse:5.0.0-alpha.11' // Retrofit2 implementation 'com.squareup.retrofit2:retrofit:2.9.0' implementation 'com.squareup.retrofit2:converter-gson:2.9.0' - } \ No newline at end of file diff --git a/TAVE/app/src/main/AndroidManifest.xml b/TAVE/app/src/main/AndroidManifest.xml index b373906..2afb016 100644 --- a/TAVE/app/src/main/AndroidManifest.xml +++ b/TAVE/app/src/main/AndroidManifest.xml @@ -24,4 +24,5 @@ android:name="preloaded_fonts" android:resource="@array/preloaded_fonts" /> + \ No newline at end of file diff --git a/TAVE/app/src/main/java/com/example/tave/common/util/PreferenceUtil.kt b/TAVE/app/src/main/java/com/example/tave/common/util/PreferenceUtil.kt index a3b6637..eef57b9 100644 --- a/TAVE/app/src/main/java/com/example/tave/common/util/PreferenceUtil.kt +++ b/TAVE/app/src/main/java/com/example/tave/common/util/PreferenceUtil.kt @@ -5,8 +5,8 @@ import android.content.SharedPreferences import com.example.tave.common.Constants class PreferenceUtil(context: Context) { - private val prefs: SharedPreferences = - context.getSharedPreferences(Constants.ACCESS_TOKEN_TITLE, Context.MODE_PRIVATE) + private val prefs: SharedPreferences = context + .getSharedPreferences(Constants.ACCESS_TOKEN_TITLE, Context.MODE_PRIVATE) fun getTokenValue( tokenKey: String, diff --git a/TAVE/build.gradle b/TAVE/build.gradle index 345b784..594c519 100644 --- a/TAVE/build.gradle +++ b/TAVE/build.gradle @@ -1,15 +1,14 @@ buildscript { - ext { compose_version = '1.4.3'} + ext { compose_version = '1.4.3' } repositories { google() - jcenter() mavenCentral() } } plugins { - id 'com.android.application' version '7.4.1' apply false - id 'com.android.library' version '7.4.1' apply false + id 'com.android.application' version '8.0.2' apply false + id 'com.android.library' version '8.0.2' apply false id 'org.jetbrains.kotlin.android' version '1.8.10' apply false id 'com.google.dagger.hilt.android' version "2.44.2" apply false } \ No newline at end of file diff --git a/TAVE/data/build.gradle b/TAVE/data/build.gradle index 5611df3..acdafc0 100644 --- a/TAVE/data/build.gradle +++ b/TAVE/data/build.gradle @@ -27,13 +27,13 @@ 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' + sourceCompatibility JavaVersion.VERSION_17 + targetCompatibility JavaVersion.VERSION_17 } + + kotlinOptions { jvmTarget = '17' } } dependencies { @@ -47,8 +47,8 @@ dependencies { implementation 'com.squareup.retrofit2:converter-gson:2.9.0' // 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 'com.google.dagger:hilt-android:2.47' + kapt 'com.google.dagger:hilt-android-compiler:2.47' testImplementation 'junit:junit:4.13.2' androidTestImplementation 'androidx.test.ext:junit:1.1.5' diff --git a/TAVE/domain/build.gradle b/TAVE/domain/build.gradle index 226512f..298939f 100644 --- a/TAVE/domain/build.gradle +++ b/TAVE/domain/build.gradle @@ -23,21 +23,21 @@ 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' + sourceCompatibility JavaVersion.VERSION_17 + targetCompatibility JavaVersion.VERSION_17 } + + kotlinOptions { jvmTarget = '17' } } dependencies { implementation 'androidx.core:core-ktx:1.10.1' // 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 'com.google.dagger:hilt-android:2.47' + kapt 'com.google.dagger:hilt-android-compiler:2.47' // Retrofit2 implementation 'com.squareup.retrofit2:retrofit:2.9.0' diff --git a/TAVE/domain/src/main/java/com/example/domain/entity/schedule/ScheduleEntity.kt b/TAVE/domain/src/main/java/com/example/domain/entity/schedule/ScheduleEntity.kt index d676066..0fe8932 100644 --- a/TAVE/domain/src/main/java/com/example/domain/entity/schedule/ScheduleEntity.kt +++ b/TAVE/domain/src/main/java/com/example/domain/entity/schedule/ScheduleEntity.kt @@ -1,3 +1,3 @@ package com.example.domain.entity.schedule -data class ScheduleEntity(val title: String, val date: String) +data class ScheduleEntity(val title: String, val date: String) \ No newline at end of file diff --git a/TAVE/domain/src/main/java/com/example/domain/usecases/schedule/GetRecentScheduleUseCase.kt b/TAVE/domain/src/main/java/com/example/domain/usecases/schedule/GetRecentScheduleUseCase.kt index 489b391..c16c082 100644 --- a/TAVE/domain/src/main/java/com/example/domain/usecases/schedule/GetRecentScheduleUseCase.kt +++ b/TAVE/domain/src/main/java/com/example/domain/usecases/schedule/GetRecentScheduleUseCase.kt @@ -31,5 +31,4 @@ class GetRecentScheduleUseCase @Inject constructor( private fun filteringSchedule(scheduleTime: Date): Boolean { return ((scheduleTime.time - todayDate)/(24*60*60/1000)) < 0 } -} - +} \ No newline at end of file diff --git a/TAVE/gradle.properties b/TAVE/gradle.properties index 0dee8cb..0d0adbc 100644 --- a/TAVE/gradle.properties +++ b/TAVE/gradle.properties @@ -1,4 +1,6 @@ org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8 android.useAndroidX=true kotlin.code.style=official -android.nonTransitiveRClass=true \ No newline at end of file +android.nonTransitiveRClass=true +android.defaults.buildfeatures.buildconfig=true +android.nonFinalResIds=false \ No newline at end of file diff --git a/TAVE/gradle/wrapper/gradle-wrapper.properties b/TAVE/gradle/wrapper/gradle-wrapper.properties index ca217ae..3150b3b 100644 --- a/TAVE/gradle/wrapper/gradle-wrapper.properties +++ b/TAVE/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ #Thu Jun 01 23:50:13 KST 2023 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.5-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.0-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists From 86aad2ae7fd5701603829d90129b6a78a980f0d3 Mon Sep 17 00:00:00 2001 From: kanukim97 Date: Tue, 14 Nov 2023 05:25:45 +0900 Subject: [PATCH 3/6] =?UTF-8?q?[Refactoring]=20=20-=20Compose=20View?= =?UTF-8?q?=EC=9D=98=20hiltViewModel=20=EB=B0=8F=20StateFlow=20=EB=B0=A9?= =?UTF-8?q?=EC=8B=9D=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/example/tave/TaveNavHost.kt | 52 ++++++++++++++++--- .../noticeDetail/NoticeDetailLazyGridsPics.kt | 5 +- .../com/example/tave/pages/InitPassword.kt | 15 +++--- .../main/java/com/example/tave/pages/Login.kt | 28 ++++++---- .../java/com/example/tave/pages/OTPInput.kt | 19 +++---- .../com/example/tave/pages/SendSMSCode.kt | 16 +++--- ...sswordViewModel.kt => InitPWDViewModel.kt} | 4 +- .../example/tave/viewmodel/LogInViewModel.kt | 5 -- 8 files changed, 88 insertions(+), 56 deletions(-) rename TAVE/app/src/main/java/com/example/tave/viewmodel/{InitPasswordViewModel.kt => InitPWDViewModel.kt} (97%) diff --git a/TAVE/app/src/main/java/com/example/tave/TaveNavHost.kt b/TAVE/app/src/main/java/com/example/tave/TaveNavHost.kt index e48ec31..87795e7 100644 --- a/TAVE/app/src/main/java/com/example/tave/TaveNavHost.kt +++ b/TAVE/app/src/main/java/com/example/tave/TaveNavHost.kt @@ -1,10 +1,14 @@ package com.example.tave import androidx.compose.runtime.Composable +import androidx.compose.runtime.collectAsState +import androidx.compose.runtime.getValue import androidx.compose.ui.Modifier +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 @@ -13,19 +17,44 @@ 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.InitPWDViewModel +import com.example.tave.viewmodel.InputOTPViewModel +import com.example.tave.viewmodel.LogInViewModel +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() + val loginState by logInViewModel.logInState.collectAsState() + + LoginPage( + navController = navController, + loginState = loginState, + onLogIn = logInViewModel::userLogInAccount + ) } composable(route = SendSMSCodePage.route) { + val sendSMSViewModel = hiltViewModel() + val sendSMSCodeState by sendSMSViewModel.isSendSMSCode.collectAsState() + SendSMSCodePage( - modifier = Modifier, + sendSMSCodeState = sendSMSCodeState, + sendSMSCode = sendSMSViewModel::sendSMSCode, onNavigateOTP = { phoneNumber -> navController.navigateToOTPPage(phoneNumber) } ) } @@ -34,14 +63,25 @@ fun TaveNavHost(navController: NavHostController) { arguments = InputOTPCodePage.argument ) { navBackStackEntry -> val phoneNumber = navBackStackEntry.arguments?.getString(InputOTPCodePage.phone_Number) + val inputOTPViewModel = hiltViewModel() + 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() + val isPWDChanged by initPWDViewMode.isPasswordChanged.collectAsState() + + InitPasswordPage( + navController = navController, + isPWDChanged = isPWDChanged, + validatePWD = initPWDViewMode::validatePWD + ) } composable(route = HomePage.route) { HomePage(modifier = Modifier, navController = navController) diff --git a/TAVE/app/src/main/java/com/example/tave/items/noticeDetail/NoticeDetailLazyGridsPics.kt b/TAVE/app/src/main/java/com/example/tave/items/noticeDetail/NoticeDetailLazyGridsPics.kt index 24930ed..eb4fc52 100644 --- a/TAVE/app/src/main/java/com/example/tave/items/noticeDetail/NoticeDetailLazyGridsPics.kt +++ b/TAVE/app/src/main/java/com/example/tave/items/noticeDetail/NoticeDetailLazyGridsPics.kt @@ -94,15 +94,16 @@ fun HorizontalImagePager( imageList: List? ) { val imageCount = if (imageList?.isNotEmpty() == true) { imageList.size } else { 0 } - val pagerState = rememberPagerState(pageCount = { imageCount }) + val pagerState = rememberPagerState(initialPage = imageCount) Box( modifier = Modifier.fillMaxSize(), contentAlignment = Alignment.Center ) { HorizontalPager( + pageCount = imageCount, state = pagerState, - key = { imageList?.get(it) ?: 0 } + //key = { imageList?.get(it) ?: 0 } ) { GlideImage( imageModel = { "${imageList?.get(it)}" } , diff --git a/TAVE/app/src/main/java/com/example/tave/pages/InitPassword.kt b/TAVE/app/src/main/java/com/example/tave/pages/InitPassword.kt index d87747a..81f2653 100644 --- a/TAVE/app/src/main/java/com/example/tave/pages/InitPassword.kt +++ b/TAVE/app/src/main/java/com/example/tave/pages/InitPassword.kt @@ -13,24 +13,23 @@ import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.input.KeyboardType import androidx.compose.ui.text.input.PasswordVisualTransformation import androidx.compose.ui.unit.dp -import androidx.hilt.navigation.compose.hiltViewModel import androidx.navigation.NavController import com.example.tave.common.util.state.InitPasswordState.* import com.example.tave.items.initpassword.InitPasswordBtn import com.example.tave.items.initpassword.InitPasswordLogo import com.example.tave.ui.theme.Shape -import com.example.tave.viewmodel.InitPasswordViewModel import com.example.tave.HomePage import com.example.tave.R +import com.example.tave.common.util.state.InitPasswordState @Composable fun InitPasswordPage( - modifier: Modifier, navController: NavController, - initPWViewModel: InitPasswordViewModel = hiltViewModel() + isPWDChanged: InitPasswordState, + validatePWD: (String, String) -> Unit, + modifier: Modifier = Modifier ) { val localContext: Context = LocalContext.current - val isPasswordChange by initPWViewModel.isPasswordChanged.collectAsState() var password by remember { mutableStateOf("") } var confirmPassword by remember { mutableStateOf("") } @@ -68,8 +67,8 @@ fun InitPasswordPage( ) Spacer(modifier = modifier.height(70.dp)) - when (isPasswordChange) { - is Idle -> InitPasswordBtn { initPWViewModel.validatePassword(password, confirmPassword) } + when (isPWDChanged) { + is Idle -> InitPasswordBtn { validatePWD(password, confirmPassword) } is IsLoading -> CircularProgressIndicator() is IsComplete -> LaunchedEffect(Unit) { navController.navigate(HomePage.route) } is IsFailed -> { @@ -80,7 +79,7 @@ fun InitPasswordPage( Toast.LENGTH_SHORT ).show() } - InitPasswordBtn { initPWViewModel.validatePassword(password, confirmPassword) } + InitPasswordBtn { validatePWD(password, confirmPassword) } } } } diff --git a/TAVE/app/src/main/java/com/example/tave/pages/Login.kt b/TAVE/app/src/main/java/com/example/tave/pages/Login.kt index a877bb7..962ee8c 100644 --- a/TAVE/app/src/main/java/com/example/tave/pages/Login.kt +++ b/TAVE/app/src/main/java/com/example/tave/pages/Login.kt @@ -15,31 +15,29 @@ import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.input.KeyboardType import androidx.compose.ui.text.input.PasswordVisualTransformation +import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp -import androidx.hilt.navigation.compose.hiltViewModel import androidx.navigation.NavController +import androidx.navigation.compose.rememberNavController import com.example.tave.R import com.example.tave.common.util.state.LogInUserState.* import com.example.tave.items.login.LoginBtn import com.example.tave.items.login.LoginIntro import com.example.tave.ui.theme.Shape -import com.example.tave.viewmodel.LogInViewModel import com.example.tave.HomePage import com.example.tave.SendSMSCodePage +import com.example.tave.common.util.state.LogInUserState @Composable fun LoginPage( - modifier: Modifier, navController: NavController, - logInViewModel: LogInViewModel = hiltViewModel() + loginState: LogInUserState, + onLogIn: (String, String) -> Unit, + modifier: Modifier = Modifier ) { var userEmail by remember { mutableStateOf("") } var userPassword by remember { mutableStateOf("") } val localContext: Context = LocalContext.current - val loginState by logInViewModel.logInState.collectAsState() - - if (logInViewModel.isExistToken) - LaunchedEffect(Unit) { navController.navigate(route = HomePage.route) } Surface(modifier = modifier.fillMaxSize()) { Column( @@ -84,7 +82,7 @@ fun LoginPage( Spacer(modifier = modifier.height(50.dp)) when (loginState) { - is Idle -> LoginBtn { logInViewModel.userLogInAccount(userEmail, userPassword) } + is Idle -> LoginBtn(onClicked = { onLogIn(userEmail, userPassword) }) is IsLoading -> CircularProgressIndicator() is IsSuccess -> LaunchedEffect(Unit) { navController.navigate(HomePage.route) @@ -100,10 +98,20 @@ fun LoginPage( Toast.LENGTH_SHORT ).show() } - LoginBtn { logInViewModel.userLogInAccount(userEmail, userPassword) } + LoginBtn(onClicked = { onLogIn(userEmail, userPassword) }) } } } ) } +} + +@Preview +@Composable +fun Preview() { + LoginPage( + navController = rememberNavController(), + loginState = Idle, + onLogIn = { _, _ ->} + ) } \ No newline at end of file diff --git a/TAVE/app/src/main/java/com/example/tave/pages/OTPInput.kt b/TAVE/app/src/main/java/com/example/tave/pages/OTPInput.kt index b5ffaf5..d0532b1 100644 --- a/TAVE/app/src/main/java/com/example/tave/pages/OTPInput.kt +++ b/TAVE/app/src/main/java/com/example/tave/pages/OTPInput.kt @@ -20,7 +20,6 @@ import androidx.compose.material3.Surface import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect -import androidx.compose.runtime.collectAsState import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember @@ -30,26 +29,24 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp -import androidx.hilt.navigation.compose.hiltViewModel import androidx.navigation.NavController import com.example.tave.InitPasswordPage import com.example.tave.R +import com.example.tave.common.util.state.CheckOTPCodeState import com.example.tave.common.util.state.CheckOTPCodeState.* import com.example.tave.items.otp.OTPCodeInput import com.example.tave.items.otp.OtpLogo import com.example.tave.ui.theme.Shape -import com.example.tave.viewmodel.InputOTPViewModel @Composable fun OTPCodePage( - modifier: Modifier, phoneNumber: String?, navController: NavController, - inputOTPViewModel: InputOTPViewModel = hiltViewModel() + isOTPChecked: CheckOTPCodeState, + checkOTPCode: (String, String) -> Unit, + modifier: Modifier = Modifier ) { val localContext: Context = LocalContext.current - val isOTPChecked by inputOTPViewModel.isOTPCodeChecked.collectAsState() - var otpCode by remember { mutableStateOf("") } Surface( @@ -92,9 +89,7 @@ fun OTPCodePage( is Idle -> { OTPCodeInput( modifier = modifier, - checkOTPCode = { - inputOTPViewModel.checkOTPCode("$phoneNumber", otpCode) - } + checkOTPCode = { checkOTPCode("$phoneNumber", otpCode) } ) } is IsLoading -> CircularProgressIndicator() @@ -111,9 +106,7 @@ fun OTPCodePage( } OTPCodeInput( modifier = modifier, - checkOTPCode = { - inputOTPViewModel.checkOTPCode("$phoneNumber", otpCode) - } + checkOTPCode = { checkOTPCode("$phoneNumber", otpCode) } ) } } diff --git a/TAVE/app/src/main/java/com/example/tave/pages/SendSMSCode.kt b/TAVE/app/src/main/java/com/example/tave/pages/SendSMSCode.kt index f9d3ab6..5ba7dc7 100644 --- a/TAVE/app/src/main/java/com/example/tave/pages/SendSMSCode.kt +++ b/TAVE/app/src/main/java/com/example/tave/pages/SendSMSCode.kt @@ -20,7 +20,6 @@ import androidx.compose.material3.Surface import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect -import androidx.compose.runtime.collectAsState import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember @@ -30,23 +29,20 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp -import androidx.hilt.navigation.compose.hiltViewModel import com.example.tave.R import com.example.tave.common.util.state.SendSMSCodeState import com.example.tave.items.sms.SMSLogo import com.example.tave.items.sms.SMSPhoneNumberBtn import com.example.tave.ui.theme.Shape -import com.example.tave.viewmodel.SendSMSViewModel @Composable fun SendSMSCodePage( - modifier: Modifier, + sendSMSCodeState: SendSMSCodeState, + sendSMSCode: (String) -> Unit, onNavigateOTP: (String) -> Unit, - sendSMSViewModel: SendSMSViewModel = hiltViewModel() + modifier: Modifier = Modifier ) { val localContext: Context = LocalContext.current - val isSendSMSCodeState by sendSMSViewModel.isSendSMSCode.collectAsState() - var phoneNumber by remember { mutableStateOf("") } Surface( @@ -84,11 +80,11 @@ fun SendSMSCodePage( singleLine = true, ) Spacer(modifier = modifier.size(10.dp)) - when (isSendSMSCodeState) { + when (sendSMSCodeState) { is SendSMSCodeState.Idle -> { SMSPhoneNumberBtn( modifier = modifier, - sendSMSCode = { sendSMSViewModel.sendSMSCode(phoneNumber) } + sendSMSCode = { sendSMSCode(phoneNumber) } ) } is SendSMSCodeState.IsLoading -> CircularProgressIndicator() @@ -98,7 +94,7 @@ fun SendSMSCodePage( is SendSMSCodeState.IsFailed -> { SMSPhoneNumberBtn( modifier = modifier, - sendSMSCode = { sendSMSViewModel.sendSMSCode(phoneNumber) } + sendSMSCode = { sendSMSCode(phoneNumber) } ) Toast.makeText( localContext, diff --git a/TAVE/app/src/main/java/com/example/tave/viewmodel/InitPasswordViewModel.kt b/TAVE/app/src/main/java/com/example/tave/viewmodel/InitPWDViewModel.kt similarity index 97% rename from TAVE/app/src/main/java/com/example/tave/viewmodel/InitPasswordViewModel.kt rename to TAVE/app/src/main/java/com/example/tave/viewmodel/InitPWDViewModel.kt index 2f38a35..ba87b5b 100644 --- a/TAVE/app/src/main/java/com/example/tave/viewmodel/InitPasswordViewModel.kt +++ b/TAVE/app/src/main/java/com/example/tave/viewmodel/InitPWDViewModel.kt @@ -20,7 +20,7 @@ import kotlinx.coroutines.launch import javax.inject.Inject @HiltViewModel -class InitPasswordViewModel @Inject constructor( +class InitPWDViewModel @Inject constructor( private val updateMemberPasswordUseCase: ModifyPasswordUseCase, @IoDispatcher private val ioDispatcher: CoroutineDispatcher ): ViewModel() { @@ -30,7 +30,7 @@ class InitPasswordViewModel @Inject constructor( private val accessToken: String = TaveApplication.authPrefs.getTokenValue(Constants.ACCESS_TOKEN_TITLE, "") - fun validatePassword( + fun validatePWD( password: String, confirmPassword: String ) { diff --git a/TAVE/app/src/main/java/com/example/tave/viewmodel/LogInViewModel.kt b/TAVE/app/src/main/java/com/example/tave/viewmodel/LogInViewModel.kt index d5f1e39..221d784 100644 --- a/TAVE/app/src/main/java/com/example/tave/viewmodel/LogInViewModel.kt +++ b/TAVE/app/src/main/java/com/example/tave/viewmodel/LogInViewModel.kt @@ -29,11 +29,6 @@ class LogInViewModel @Inject constructor( private val _logInState = MutableStateFlow(LogInUserState.Idle) val logInState: StateFlow = _logInState.asStateFlow() - val isExistToken: Boolean = - TaveApplication.authPrefs - .getTokenValue(Constants.ACCESS_TOKEN_TITLE, "") - .isNotEmpty() - fun userLogInAccount( userEmail: String, userPassword: String From 546872eba760cf1bcfa3b11cea28eadc8e892cb4 Mon Sep 17 00:00:00 2001 From: kanukim97 Date: Tue, 14 Nov 2023 22:44:07 +0900 Subject: [PATCH 4/6] =?UTF-8?q?[Refactoring]=20=20-=20Compose=20View?= =?UTF-8?q?=EC=9D=98=20hiltViewModel=20=EB=B0=8F=20StateFlow=20=EB=B0=A9?= =?UTF-8?q?=EC=8B=9D=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/example/tave/TaveNavHost.kt | 45 +++++++++-- .../main/java/com/example/tave/pages/Home.kt | 46 +++++------ .../java/com/example/tave/pages/Notice.kt | 75 +++++++++--------- .../com/example/tave/pages/NoticeDetail.kt | 48 +++++------ .../java/com/example/tave/pages/Profile.kt | 79 +++++++++---------- 5 files changed, 165 insertions(+), 128 deletions(-) diff --git a/TAVE/app/src/main/java/com/example/tave/TaveNavHost.kt b/TAVE/app/src/main/java/com/example/tave/TaveNavHost.kt index 87795e7..7f624c7 100644 --- a/TAVE/app/src/main/java/com/example/tave/TaveNavHost.kt +++ b/TAVE/app/src/main/java/com/example/tave/TaveNavHost.kt @@ -3,7 +3,7 @@ package com.example.tave import androidx.compose.runtime.Composable import androidx.compose.runtime.collectAsState import androidx.compose.runtime.getValue -import androidx.compose.ui.Modifier +import androidx.compose.runtime.livedata.observeAsState import androidx.hilt.navigation.compose.hiltViewModel import androidx.navigation.NavHostController import androidx.navigation.compose.NavHost @@ -17,9 +17,13 @@ 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 @@ -84,14 +88,38 @@ fun TaveNavHost(navController: NavHostController) { ) } composable(route = HomePage.route) { - HomePage(modifier = Modifier, navController = navController) + val homeViewModel = hiltViewModel() + 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() + val userProfile by profileViewModel.userProfile.observeAsState() + + ProfilePage(userProfile = userProfile) } composable(route = NoticePage.route) { + val noticeViewModel = hiltViewModel() + 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) } ) @@ -101,7 +129,14 @@ fun TaveNavHost(navController: NavHostController) { arguments = NoticeDetailPage.arguments ) { navBackStackEntry -> val noticeID = navBackStackEntry.arguments?.getInt(NoticeDetailPage.noticeID) - NoticeDetailPage(modifier = Modifier, noticeID = noticeID) + val noticeDetailViewModel = hiltViewModel() + val noticeDetailInfo by noticeDetailViewModel.noticeData.observeAsState() + + NoticeDetailPage( + noticeID = noticeID, + noticeDetailInfo = noticeDetailInfo, + getNoticeDetail = noticeDetailViewModel::getNoticeDetail + ) } } } diff --git a/TAVE/app/src/main/java/com/example/tave/pages/Home.kt b/TAVE/app/src/main/java/com/example/tave/pages/Home.kt index 7a9e7e3..23be6a1 100644 --- a/TAVE/app/src/main/java/com/example/tave/pages/Home.kt +++ b/TAVE/app/src/main/java/com/example/tave/pages/Home.kt @@ -1,11 +1,9 @@ package com.example.tave.pages -import android.util.Log import androidx.compose.foundation.layout.* import androidx.compose.material3.* import androidx.compose.runtime.Composable -import androidx.compose.runtime.collectAsState -import androidx.compose.runtime.livedata.observeAsState +import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.ui.Alignment @@ -14,45 +12,49 @@ import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp -import androidx.hilt.navigation.compose.hiltViewModel import androidx.navigation.NavController +import com.example.domain.entity.profile.UserProfileEntity import com.example.tave.NoticePage import com.example.tave.ProfilePage import com.example.tave.R import com.example.tave.items.home.* import com.example.tave.ui.theme.CustomShape -import com.example.tave.viewmodel.HomeViewModel @Composable fun HomePage( - modifier: Modifier, navController: NavController, - homeViewModel: HomeViewModel = hiltViewModel() + userProfile: UserProfileEntity?, + personalScore: Int?, + teamScore: Int?, + scheduleTitle: String?, + scheduleRemainDay: String?, + getPersonalScore: () -> Unit, + getTeamScore: () -> Unit, + modifier: Modifier = Modifier, ) { - homeViewModel.getPersonalScore() - homeViewModel.getTeamScore() - - val homeProfile = homeViewModel.userProfile.observeAsState() - val personalScore = homeViewModel.personalScore.observeAsState() - val teamScore = homeViewModel.teamScore.observeAsState() - val scheduleTitle = homeViewModel.scheduleTitle.observeAsState() - val scheduledDay = homeViewModel.scheduleRemainDay.observeAsState() + LaunchedEffect( + key1 = Unit, + block = { + getPersonalScore() + getTeamScore() + } + ) Column( modifier = modifier.padding(start = 24.dp, top = 24.dp, bottom = 24.dp), verticalArrangement = Arrangement.Center, horizontalAlignment = Alignment.Start ) { - TopTitle(modifier = modifier, name = homeViewModel.userProfile.value?.userName.toString()) + TopTitle(modifier = modifier, name = userProfile?.userName.toString()) Row { UserBadge( - text = "${homeProfile.value?.userRadix}기", + text = "${userProfile?.userRadix}기", textColor = MaterialTheme.colorScheme.onPrimary, backgroundColor = MaterialTheme.colorScheme.primary ) Spacer(modifier = modifier.width(10.dp)) UserBadge( - text = homeProfile.value?.userType.toString(), + text = userProfile?.userType.toString(), textColor = MaterialTheme.colorScheme.onSecondary, backgroundColor = MaterialTheme.colorScheme.secondary ) @@ -61,10 +63,10 @@ fun HomePage( HomeMenu( modifier = modifier, navController= navController, - personalScore = personalScore.value, - teamScore = teamScore.value, - scheduleTitle = scheduleTitle.value, - scheduledDay = scheduledDay.value + personalScore = personalScore, + teamScore = teamScore, + scheduleTitle = scheduleTitle, + scheduledDay = scheduleRemainDay ) } } diff --git a/TAVE/app/src/main/java/com/example/tave/pages/Notice.kt b/TAVE/app/src/main/java/com/example/tave/pages/Notice.kt index 246178c..2e140f4 100644 --- a/TAVE/app/src/main/java/com/example/tave/pages/Notice.kt +++ b/TAVE/app/src/main/java/com/example/tave/pages/Notice.kt @@ -5,7 +5,6 @@ import androidx.compose.material3.Divider import androidx.compose.material3.Scaffold import androidx.compose.material3.Text import androidx.compose.runtime.Composable -import androidx.compose.runtime.livedata.observeAsState import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color import androidx.compose.ui.res.stringResource @@ -14,52 +13,52 @@ import androidx.compose.ui.text.TextStyle import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp -import androidx.hilt.navigation.compose.hiltViewModel +import com.example.domain.entity.notice.NoticeDetailEntity import com.example.tave.R import com.example.tave.items.notice.MainNoticeCard import com.example.tave.items.notice.NoticeSubItemsColumns import com.example.tave.ui.font.NotoSansKr -import com.example.tave.viewmodel.NoticeViewModel @Composable fun NoticePage( - modifier: Modifier, + noticeMainCard: NoticeDetailEntity?, + noticeNewsList: List?, onMainItemClick: (Int) -> Unit, onSubItemClick: (Int) -> Unit, - noticeViewModel: NoticeViewModel = hiltViewModel() + modifier: Modifier = Modifier ) { - val noticeMainCard = noticeViewModel.noticeMainData.observeAsState() - val noticeSubItems = noticeViewModel.noticeSubDate.observeAsState() - - Scaffold(modifier = modifier.padding(10.dp)) { contentPadding -> - Column( - modifier = modifier.padding(contentPadding), - content = { - Text( - text = stringResource(id = R.string.Notice), - modifier = modifier.padding(bottom = 10.dp), - style = TextStyle( - fontSize = 30.sp, - fontFamily = NotoSansKr, - fontWeight = FontWeight.Bold, - platformStyle = PlatformTextStyle(includeFontPadding = false) + Scaffold( + modifier = modifier.padding(10.dp), + content = { contentPadding -> + Column( + modifier = modifier.padding(contentPadding), + content = { + Text( + text = stringResource(id = R.string.Notice), + modifier = modifier.padding(bottom = 10.dp), + style = TextStyle( + fontSize = 30.sp, + fontFamily = NotoSansKr, + fontWeight = FontWeight.Bold, + platformStyle = PlatformTextStyle(includeFontPadding = false) + ) + ) + MainNoticeCard( + modifier = modifier, + onItemClick = onMainItemClick, + noticeMainCard = noticeMainCard + ) + Divider( + color = Color.Black.copy(alpha = 0.2f), + modifier = modifier.fillMaxWidth() + ) + NoticeSubItemsColumns( + modifier = modifier, + onItemClick = onSubItemClick, + noticeSubItems = noticeNewsList ) - ) - MainNoticeCard( - modifier = modifier, - onItemClick = onMainItemClick, - noticeMainCard = noticeMainCard.value - ) - Divider( - color = Color.Black.copy(alpha = 0.2f), - modifier = modifier.fillMaxWidth() - ) - NoticeSubItemsColumns( - modifier = modifier, - onItemClick = onSubItemClick, - noticeSubItems = noticeSubItems.value - ) - } - ) - } + } + ) + } + ) } \ No newline at end of file diff --git a/TAVE/app/src/main/java/com/example/tave/pages/NoticeDetail.kt b/TAVE/app/src/main/java/com/example/tave/pages/NoticeDetail.kt index d7875d0..399f93d 100644 --- a/TAVE/app/src/main/java/com/example/tave/pages/NoticeDetail.kt +++ b/TAVE/app/src/main/java/com/example/tave/pages/NoticeDetail.kt @@ -5,7 +5,6 @@ import androidx.compose.material3.Divider import androidx.compose.material3.Scaffold import androidx.compose.material3.Text import androidx.compose.runtime.* -import androidx.compose.runtime.livedata.observeAsState import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color import androidx.compose.ui.text.PlatformTextStyle @@ -13,7 +12,7 @@ import androidx.compose.ui.text.TextStyle import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp -import androidx.hilt.navigation.compose.hiltViewModel +import com.example.domain.entity.notice.NoticeDetailEntity import com.example.tave.common.Constants import com.example.tave.items.glide.ShimmerEffectItem import com.example.tave.items.noticeDetail.NoticeDetailCard @@ -21,29 +20,31 @@ import com.example.tave.items.noticeDetail.NoticeDetailLazyGridsPics import com.example.tave.items.noticeDetail.NoticeDetailPublisherBar import com.example.tave.items.noticeDetail.NoticeDetailTopBar import com.example.tave.ui.font.NotoSansKr -import com.example.tave.viewmodel.NoticeDetailViewModel import kotlinx.coroutines.delay @Composable fun NoticeDetailPage( - modifier: Modifier, noticeID: Int?, - noticeDetailViewModel: NoticeDetailViewModel = hiltViewModel() + noticeDetailInfo: NoticeDetailEntity?, + getNoticeDetail: (Int) -> Unit, + modifier: Modifier = Modifier ) { - noticeDetailViewModel.getNoticeDetail(noticeID) - var isLoading by remember { mutableStateOf(true) } - val noticeDetailData = noticeDetailViewModel.noticeData.observeAsState() - val admin: String = if (noticeDetailData.value != null) { Constants.TAVE_ADMIN } else { "" } - - LaunchedEffect(key1 = true) { - delay(1000) - isLoading = false - } - + LaunchedEffect( + key1 = true, + block = { + delay(1000) + isLoading = false + } + ) + LaunchedEffect(key1 = Unit, block = { getNoticeDetail(noticeID!!) }) Scaffold( modifier = modifier.fillMaxSize(), - topBar = { NoticeDetailTopBar(modifier = modifier, publisher = admin) } + topBar = { + NoticeDetailTopBar( + modifier = modifier, + publisher = if (noticeDetailInfo != null) { Constants.TAVE_ADMIN } else { "" }) + } ) { contentPadding -> Column( modifier = modifier @@ -52,14 +53,14 @@ fun NoticeDetailPage( content = { NoticeDetailCard( modifier = modifier, - cardTitle = "${noticeDetailData.value?.title}", - noticeImage = noticeDetailData.value?.images, + cardTitle = "${noticeDetailInfo?.title}", + noticeImage = noticeDetailInfo?.images, isLoading = isLoading, ) NoticeDetailPublisherBar( modifier = modifier, - publisherTxt = admin, - upDateTime = "${noticeDetailData.value?.createdTime}", + publisherTxt = if (noticeDetailInfo != null) { Constants.TAVE_ADMIN } else { "" }, + upDateTime = "${noticeDetailInfo?.createdTime}", isLoading = isLoading ) ShimmerEffectItem( @@ -67,7 +68,7 @@ fun NoticeDetailPage( contentLoading = { Box(modifier = modifier.fillMaxWidth()) }, contentAfterLoading = { Text( - text = "${noticeDetailData.value?.content}", + text = "${noticeDetailInfo?.content}", style = TextStyle( fontSize = 16.sp, fontFamily = NotoSansKr, @@ -81,7 +82,10 @@ fun NoticeDetailPage( Spacer(modifier = modifier.size(5.dp)) Divider(modifier = modifier.fillMaxWidth(), thickness = 0.5.dp, Color.Gray) Spacer(modifier = modifier.size(5.dp)) - NoticeDetailLazyGridsPics(modifier = modifier, imageList = noticeDetailData.value?.images) + NoticeDetailLazyGridsPics( + modifier = modifier, + imageList = noticeDetailInfo?.images + ) } ) } diff --git a/TAVE/app/src/main/java/com/example/tave/pages/Profile.kt b/TAVE/app/src/main/java/com/example/tave/pages/Profile.kt index d6d6651..a8504ff 100644 --- a/TAVE/app/src/main/java/com/example/tave/pages/Profile.kt +++ b/TAVE/app/src/main/java/com/example/tave/pages/Profile.kt @@ -3,56 +3,53 @@ package com.example.tave.pages import androidx.compose.foundation.layout.* import androidx.compose.material3.* import androidx.compose.runtime.Composable -import androidx.compose.runtime.livedata.observeAsState import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.unit.dp -import androidx.hilt.navigation.compose.hiltViewModel +import com.example.domain.entity.profile.UserProfileEntity import com.example.tave.items.profile.* -import com.example.tave.viewmodel.ProfileViewModel @Composable fun ProfilePage( - modifier: Modifier, - profileViewModel: ProfileViewModel = hiltViewModel() + userProfile: UserProfileEntity?, + modifier: Modifier = Modifier ) { - val profileInfo = profileViewModel.userProfile.observeAsState() - Scaffold( - modifier = modifier.fillMaxSize() - ) { contentPadding -> - Column( - verticalArrangement = Arrangement.Center, - horizontalAlignment = Alignment.CenterHorizontally - ) { + modifier = modifier.fillMaxSize(), + content = { contentPadding -> Column( - modifier = modifier - .fillMaxWidth() - .fillMaxHeight(0.4f) - .padding(contentPadding), - verticalArrangement = Arrangement.Top, - horizontalAlignment = Alignment.CenterHorizontally, - content = { - ProfileBox( - modifier = modifier, - userName = profileInfo.value?.userName ?: "", - userProfileImage = profileInfo.value?.userProfileImage?: "" - ) - } - ) - Spacer(modifier = modifier.size(20.dp)) - ProfileInfoRow( - modifier = modifier, - userRadix = profileInfo.value?.userRadix, - userDivision = profileInfo.value?.userType, - userTechDept = profileInfo.value?.userTech - ) - ProfileInfoColumn( - modifier = modifier, - userUniv = profileInfo.value?.userUniv, - userEmail = profileInfo.value?.userEmail, - userPhoneNumber = profileInfo.value?.userPhoneNumber - ) + verticalArrangement = Arrangement.Center, + horizontalAlignment = Alignment.CenterHorizontally + ) { + Column( + modifier = modifier + .fillMaxWidth() + .fillMaxHeight(0.4f) + .padding(contentPadding), + verticalArrangement = Arrangement.Top, + horizontalAlignment = Alignment.CenterHorizontally, + content = { + ProfileBox( + modifier = modifier, + userName = userProfile?.userName ?: "", + userProfileImage = userProfile?.userProfileImage?: "" + ) + } + ) + Spacer(modifier = modifier.size(20.dp)) + ProfileInfoRow( + modifier = modifier, + userRadix = userProfile?.userRadix, + userDivision = userProfile?.userType, + userTechDept = userProfile?.userTech + ) + ProfileInfoColumn( + modifier = modifier, + userUniv = userProfile?.userUniv, + userEmail = userProfile?.userEmail, + userPhoneNumber = userProfile?.userPhoneNumber + ) + } } - } + ) } \ No newline at end of file From 0cdcc206238bbe812cac0edeaa063d37967b7ef4 Mon Sep 17 00:00:00 2001 From: kanukim97 Date: Tue, 14 Nov 2023 23:06:29 +0900 Subject: [PATCH 5/6] [Update] - build.gradle Update --- TAVE/app/build.gradle | 43 ++++++++----------- .../noticeDetail/NoticeDetailLazyGridsPics.kt | 8 +--- TAVE/build.gradle | 10 ++--- TAVE/data/build.gradle | 22 ++++------ TAVE/domain/build.gradle | 20 +++------ 5 files changed, 39 insertions(+), 64 deletions(-) diff --git a/TAVE/app/build.gradle b/TAVE/app/build.gradle index 3b3e3dd..133785d 100644 --- a/TAVE/app/build.gradle +++ b/TAVE/app/build.gradle @@ -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"] @@ -31,17 +32,8 @@ android { proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' } } - - compileOptions { - sourceCompatibility JavaVersion.VERSION_17 - targetCompatibility JavaVersion.VERSION_17 - } - - kotlinOptions { jvmTarget = '17' } - buildFeatures { compose true } - - composeOptions { kotlinCompilerExtensionVersion '1.4.3' } + composeOptions { kotlinCompilerExtensionVersion '1.5.3' } packagingOptions { resources { @@ -51,19 +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.0' implementation "androidx.compose.ui:ui:$compose_version" implementation "androidx.compose.ui:ui-tooling-preview:$compose_version" implementation "androidx.constraintlayout:constraintlayout-compose:1.0.1" // Android Material & Material3 (Stable Version 1.1.1) - implementation 'com.google.android.material:material:1.9.0' - implementation 'androidx.compose.material3:material3:1.1.1' + implementation 'com.google.android.material:material:1.10.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 @@ -80,16 +72,15 @@ dependencies { // Jetpack Compose Navigation - def nav_version = "2.6.0" - implementation("androidx.navigation:navigation-compose:$nav_version") + implementation("androidx.navigation:navigation-compose:2.7.5") // Dagger-Hilt DI(Dependency Injection) Tool - implementation 'com.google.dagger:hilt-android:2.47' - kapt 'com.google.dagger:hilt-android-compiler:2.47' - 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.3' + implementation 'com.github.skydoves:landscapist-glide:2.2.10' // Zxing implementation('com.journeyapps:zxing-android-embedded:4.3.0') { transitive = false } diff --git a/TAVE/app/src/main/java/com/example/tave/items/noticeDetail/NoticeDetailLazyGridsPics.kt b/TAVE/app/src/main/java/com/example/tave/items/noticeDetail/NoticeDetailLazyGridsPics.kt index eb4fc52..554d757 100644 --- a/TAVE/app/src/main/java/com/example/tave/items/noticeDetail/NoticeDetailLazyGridsPics.kt +++ b/TAVE/app/src/main/java/com/example/tave/items/noticeDetail/NoticeDetailLazyGridsPics.kt @@ -94,17 +94,13 @@ fun HorizontalImagePager( imageList: List? ) { val imageCount = if (imageList?.isNotEmpty() == true) { imageList.size } else { 0 } - val pagerState = rememberPagerState(initialPage = imageCount) + val pagerState = rememberPagerState(pageCount = { imageCount }) Box( modifier = Modifier.fillMaxSize(), contentAlignment = Alignment.Center ) { - HorizontalPager( - pageCount = imageCount, - state = pagerState, - //key = { imageList?.get(it) ?: 0 } - ) { + HorizontalPager(state = pagerState) { GlideImage( imageModel = { "${imageList?.get(it)}" } , modifier = Modifier diff --git a/TAVE/build.gradle b/TAVE/build.gradle index 594c519..8e108cc 100644 --- a/TAVE/build.gradle +++ b/TAVE/build.gradle @@ -1,5 +1,5 @@ buildscript { - ext { compose_version = '1.4.3' } + ext { compose_version = '1.5.3' } repositories { google() mavenCentral() @@ -7,8 +7,8 @@ buildscript { } plugins { - id 'com.android.application' version '8.0.2' apply false - id 'com.android.library' version '8.0.2' apply false - id 'org.jetbrains.kotlin.android' version '1.8.10' apply false - id 'com.google.dagger.hilt.android' version "2.44.2" apply false + id 'com.android.application' version '8.1.3' apply false + id 'com.android.library' version '8.1.3' apply false + id 'org.jetbrains.kotlin.android' version '1.9.10' apply false + id 'com.google.dagger.hilt.android' version "2.48" apply false } \ No newline at end of file diff --git a/TAVE/data/build.gradle b/TAVE/data/build.gradle index acdafc0..66c1019 100644 --- a/TAVE/data/build.gradle +++ b/TAVE/data/build.gradle @@ -2,20 +2,21 @@ plugins { id 'com.android.library' 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.data' - compileSdk 33 + compileSdk 34 defaultConfig { minSdk 31 - targetSdk 33 + targetSdk 34 testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" buildConfigField "String", "COOL_SMS_API_KEY", properties["COOL_SMS_API_KEY"] consumerProguardFiles "consumer-rules.pro" @@ -27,17 +28,10 @@ android { proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' } } - - compileOptions { - sourceCompatibility JavaVersion.VERSION_17 - targetCompatibility JavaVersion.VERSION_17 - } - - kotlinOptions { jvmTarget = '17' } } dependencies { - implementation 'androidx.core:core-ktx:1.10.1' + implementation 'androidx.core:core-ktx:1.12.0' // Project Dependency implementation project(path: ':domain') @@ -47,8 +41,8 @@ dependencies { implementation 'com.squareup.retrofit2:converter-gson:2.9.0' // Dagger-Hilt DI(Dependency Injection) Tool - implementation 'com.google.dagger:hilt-android:2.47' - kapt 'com.google.dagger:hilt-android-compiler:2.47' + implementation 'com.google.dagger:hilt-android:2.48' + kapt 'com.google.dagger:hilt-android-compiler:2.48' testImplementation 'junit:junit:4.13.2' androidTestImplementation 'androidx.test.ext:junit:1.1.5' diff --git a/TAVE/domain/build.gradle b/TAVE/domain/build.gradle index 298939f..16ca1c2 100644 --- a/TAVE/domain/build.gradle +++ b/TAVE/domain/build.gradle @@ -2,17 +2,18 @@ plugins { id 'com.android.library' id 'org.jetbrains.kotlin.android' id 'kotlin-kapt' + id 'com.google.dagger.hilt.android' } -apply plugin: 'com.google.dagger.hilt.android' +kotlin { jvmToolchain(17) } android { namespace 'com.example.domain' - compileSdk 33 + compileSdk 34 defaultConfig { minSdk 31 - targetSdk 33 + targetSdk 34 testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" consumerProguardFiles "consumer-rules.pro" } @@ -23,21 +24,14 @@ android { proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' } } - - compileOptions { - sourceCompatibility JavaVersion.VERSION_17 - targetCompatibility JavaVersion.VERSION_17 - } - - kotlinOptions { jvmTarget = '17' } } dependencies { - implementation 'androidx.core:core-ktx:1.10.1' + implementation 'androidx.core:core-ktx:1.12.0' // Dagger-Hilt DI(Dependency Injection) Tool - implementation 'com.google.dagger:hilt-android:2.47' - kapt 'com.google.dagger:hilt-android-compiler:2.47' + implementation 'com.google.dagger:hilt-android:2.48' + kapt 'com.google.dagger:hilt-android-compiler:2.48' // Retrofit2 implementation 'com.squareup.retrofit2:retrofit:2.9.0' From 3a0adbe0a76ec476a1fc191bb508592687389210 Mon Sep 17 00:00:00 2001 From: kanukim97 Date: Tue, 19 Dec 2023 01:31:33 +0900 Subject: [PATCH 6/6] [Update] - Module Update --- TAVE/app/build.gradle | 11 +--- .../java/com/example/tave/TaveApplication.kt | 2 +- .../main/java/com/example/tave/TaveNavHost.kt | 3 +- .../java/com/example/tave/common/Constants.kt | 12 ++-- .../{items => components}/glide/GlideImage.kt | 2 +- .../glide/ShimmerEffectItem.kt | 2 +- .../{items => components}/home/CheckQrcode.kt | 2 +- .../home/MainMenuButtons.kt | 2 +- .../home/MainMenuCard.kt | 2 +- .../{items => components}/home/UserBadge.kt | 2 +- .../{items => components}/home/WelcomeTxt.kt | 2 +- .../initpassword/InitPasswordBtn.kt | 2 +- .../initpassword/InitPasswordLogo.kt | 2 +- .../{items => components}/login/LogInIntro.kt | 2 +- .../{items => components}/login/LoginBtn.kt | 2 +- .../notice/NoticeMainCard.kt | 4 +- .../notice/NoticeSubItems.kt | 4 +- .../notice/NoticeSubItemsColumns.kt | 2 +- .../noticeDetail/NoticeDetailCard.kt | 6 +- .../noticeDetail/NoticeDetailLazyGridsPics.kt | 6 +- .../noticeDetail/NoticeDetailPublisherBar.kt | 4 +- .../noticeDetail/NoticeDetailTopBar.kt | 2 +- .../{items => components}/otp/OTPCodeInput.kt | 2 +- .../tave/{items => components}/otp/OTPLogo.kt | 2 +- .../profile/ProfileBox.kt | 6 +- .../profile/ProfileInfoColumn.kt | 2 +- .../profile/ProfileInfoRow.kt | 2 +- .../tave/{items => components}/sms/SMSLogo.kt | 2 +- .../sms/SMSPhoneNumbeBtn.kt | 2 +- .../tave/di/{module => }/DispatcherModule.kt | 14 ++--- .../di/{qualifier => }/DispatcherQualifier.kt | 2 +- .../example/tave/di/module/OKHttpModule.kt | 30 ---------- .../tave/di/module/SSEConnectModule.kt | 57 ------------------- .../main/java/com/example/tave/pages/Home.kt | 5 +- .../com/example/tave/pages/InitPassword.kt | 8 +-- .../main/java/com/example/tave/pages/Login.kt | 8 +-- .../java/com/example/tave/pages/Notice.kt | 4 +- .../com/example/tave/pages/NoticeDetail.kt | 10 ++-- .../java/com/example/tave/pages/OTPInput.kt | 8 +-- .../java/com/example/tave/pages/Profile.kt | 2 +- .../com/example/tave/pages/SendSMSCode.kt | 6 +- .../tave/{common => }/util/PathUtil.kt | 2 +- .../tave/{common => }/util/PreferenceUtil.kt | 2 +- .../util/state/CheckOTPCodeState.kt | 2 +- .../util/state/InitPasswordState.kt | 2 +- .../{common => }/util/state/LogInUserState.kt | 2 +- .../util/state/SendSMSCodeState.kt | 2 +- .../example/tave/viewmodel/HomeViewModel.kt | 32 +++++------ .../tave/viewmodel/InitPWDViewModel.kt | 4 +- .../tave/viewmodel/InputOTPViewModel.kt | 4 +- .../example/tave/viewmodel/LogInViewModel.kt | 4 +- .../tave/viewmodel/NoticeDetailViewModel.kt | 2 +- .../example/tave/viewmodel/NoticeViewModel.kt | 2 +- .../tave/viewmodel/ProfileViewModel.kt | 2 +- .../tave/viewmodel/SendSMSViewModel.kt | 4 +- .../com/example/data/constants/Constants.kt | 15 +++++ .../java/com/example/data/di/OkHttpModule.kt | 33 +++++++++++ .../data/di}/SSLSocketFactoryModule.kt | 10 +--- .../com/example/data/di}/TaveAPIModule.kt | 12 ++-- .../data/{api => remote}/TaveAPIService.kt | 2 +- .../repositoryImpl/TaveAPIRepositoryImpl.kt | 4 +- .../com/example/data/util/common/Constants.kt | 7 --- .../domain/{util => constants}/Constants.kt | 2 +- .../domain/entity/notice/NoticeTypeMap.kt | 10 ++-- 64 files changed, 172 insertions(+), 239 deletions(-) rename TAVE/app/src/main/java/com/example/tave/{items => components}/glide/GlideImage.kt (97%) rename TAVE/app/src/main/java/com/example/tave/{items => components}/glide/ShimmerEffectItem.kt (97%) rename TAVE/app/src/main/java/com/example/tave/{items => components}/home/CheckQrcode.kt (98%) rename TAVE/app/src/main/java/com/example/tave/{items => components}/home/MainMenuButtons.kt (98%) rename TAVE/app/src/main/java/com/example/tave/{items => components}/home/MainMenuCard.kt (97%) rename TAVE/app/src/main/java/com/example/tave/{items => components}/home/UserBadge.kt (97%) rename TAVE/app/src/main/java/com/example/tave/{items => components}/home/WelcomeTxt.kt (97%) rename TAVE/app/src/main/java/com/example/tave/{items => components}/initpassword/InitPasswordBtn.kt (96%) rename TAVE/app/src/main/java/com/example/tave/{items => components}/initpassword/InitPasswordLogo.kt (97%) rename TAVE/app/src/main/java/com/example/tave/{items => components}/login/LogInIntro.kt (98%) rename TAVE/app/src/main/java/com/example/tave/{items => components}/login/LoginBtn.kt (96%) rename TAVE/app/src/main/java/com/example/tave/{items => components}/notice/NoticeMainCard.kt (97%) rename TAVE/app/src/main/java/com/example/tave/{items => components}/notice/NoticeSubItems.kt (97%) rename TAVE/app/src/main/java/com/example/tave/{items => components}/notice/NoticeSubItemsColumns.kt (97%) rename TAVE/app/src/main/java/com/example/tave/{items => components}/noticeDetail/NoticeDetailCard.kt (94%) rename TAVE/app/src/main/java/com/example/tave/{items => components}/noticeDetail/NoticeDetailLazyGridsPics.kt (96%) rename TAVE/app/src/main/java/com/example/tave/{items => components}/noticeDetail/NoticeDetailPublisherBar.kt (96%) rename TAVE/app/src/main/java/com/example/tave/{items => components}/noticeDetail/NoticeDetailTopBar.kt (97%) rename TAVE/app/src/main/java/com/example/tave/{items => components}/otp/OTPCodeInput.kt (97%) rename TAVE/app/src/main/java/com/example/tave/{items => components}/otp/OTPLogo.kt (98%) rename TAVE/app/src/main/java/com/example/tave/{items => components}/profile/ProfileBox.kt (97%) rename TAVE/app/src/main/java/com/example/tave/{items => components}/profile/ProfileInfoColumn.kt (98%) rename TAVE/app/src/main/java/com/example/tave/{items => components}/profile/ProfileInfoRow.kt (99%) rename TAVE/app/src/main/java/com/example/tave/{items => components}/sms/SMSLogo.kt (98%) rename TAVE/app/src/main/java/com/example/tave/{items => components}/sms/SMSPhoneNumbeBtn.kt (98%) rename TAVE/app/src/main/java/com/example/tave/di/{module => }/DispatcherModule.kt (63%) rename TAVE/app/src/main/java/com/example/tave/di/{qualifier => }/DispatcherQualifier.kt (88%) delete mode 100644 TAVE/app/src/main/java/com/example/tave/di/module/OKHttpModule.kt delete mode 100644 TAVE/app/src/main/java/com/example/tave/di/module/SSEConnectModule.kt rename TAVE/app/src/main/java/com/example/tave/{common => }/util/PathUtil.kt (88%) rename TAVE/app/src/main/java/com/example/tave/{common => }/util/PreferenceUtil.kt (93%) rename TAVE/app/src/main/java/com/example/tave/{common => }/util/state/CheckOTPCodeState.kt (85%) rename TAVE/app/src/main/java/com/example/tave/{common => }/util/state/InitPasswordState.kt (85%) rename TAVE/app/src/main/java/com/example/tave/{common => }/util/state/LogInUserState.kt (88%) rename TAVE/app/src/main/java/com/example/tave/{common => }/util/state/SendSMSCodeState.kt (85%) create mode 100644 TAVE/data/src/main/java/com/example/data/constants/Constants.kt create mode 100644 TAVE/data/src/main/java/com/example/data/di/OkHttpModule.kt rename TAVE/{app/src/main/java/com/example/tave/di/module => data/src/main/java/com/example/data/di}/SSLSocketFactoryModule.kt (94%) rename TAVE/{app/src/main/java/com/example/tave/di/module => data/src/main/java/com/example/data/di}/TaveAPIModule.kt (79%) rename TAVE/data/src/main/java/com/example/data/{api => remote}/TaveAPIService.kt (98%) delete mode 100644 TAVE/data/src/main/java/com/example/data/util/common/Constants.kt rename TAVE/domain/src/main/java/com/example/domain/{util => constants}/Constants.kt (89%) diff --git a/TAVE/app/build.gradle b/TAVE/app/build.gradle index 133785d..0b21cc7 100644 --- a/TAVE/app/build.gradle +++ b/TAVE/app/build.gradle @@ -44,13 +44,13 @@ android { dependencies { implementation 'androidx.core:core-ktx:1.12.0' - implementation 'androidx.activity:activity-compose:1.8.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.constraintlayout:constraintlayout-compose:1.0.1" // Android Material & Material3 (Stable Version 1.1.1) - implementation 'com.google.android.material:material:1.10.0' + implementation 'com.google.android.material:material:1.11.0' implementation 'androidx.compose.material3:material3:1.1.2' // AndroidX Lifecycle, LiveData, ViewModel @@ -70,9 +70,8 @@ dependencies { debugImplementation "androidx.compose.ui:ui-tooling:$compose_version" debugImplementation "androidx.compose.ui:ui-test-manifest:$compose_version" - // Jetpack Compose Navigation - implementation("androidx.navigation:navigation-compose:2.7.5") + implementation("androidx.navigation:navigation-compose:2.7.6") // Dagger-Hilt DI(Dependency Injection) Tool implementation 'com.google.dagger:hilt-android:2.48' @@ -86,10 +85,6 @@ dependencies { implementation('com.journeyapps:zxing-android-embedded:4.3.0') { transitive = false } implementation 'com.google.zxing:core:3.5.1' - // OkHttp3-sse - implementation 'com.squareup.okhttp3:okhttp-sse:5.0.0-alpha.11' - testImplementation 'com.squareup.okhttp3:okhttp-sse:5.0.0-alpha.11' - // Retrofit2 implementation 'com.squareup.retrofit2:retrofit:2.9.0' implementation 'com.squareup.retrofit2:converter-gson:2.9.0' diff --git a/TAVE/app/src/main/java/com/example/tave/TaveApplication.kt b/TAVE/app/src/main/java/com/example/tave/TaveApplication.kt index 3cfaf63..4d06d2d 100644 --- a/TAVE/app/src/main/java/com/example/tave/TaveApplication.kt +++ b/TAVE/app/src/main/java/com/example/tave/TaveApplication.kt @@ -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 diff --git a/TAVE/app/src/main/java/com/example/tave/TaveNavHost.kt b/TAVE/app/src/main/java/com/example/tave/TaveNavHost.kt index 7f624c7..8640d02 100644 --- a/TAVE/app/src/main/java/com/example/tave/TaveNavHost.kt +++ b/TAVE/app/src/main/java/com/example/tave/TaveNavHost.kt @@ -29,7 +29,8 @@ import com.example.tave.viewmodel.SendSMSViewModel @Composable fun TaveNavHost(navController: NavHostController) { val startPoint: String = if ( - TaveApplication.authPrefs + TaveApplication + .authPrefs .getTokenValue(Constants.ACCESS_TOKEN_TITLE, "") .isNotEmpty() ) { diff --git a/TAVE/app/src/main/java/com/example/tave/common/Constants.kt b/TAVE/app/src/main/java/com/example/tave/common/Constants.kt index 7ff707f..ded99f6 100644 --- a/TAVE/app/src/main/java/com/example/tave/common/Constants.kt +++ b/TAVE/app/src/main/java/com/example/tave/common/Constants.kt @@ -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 = "이미지 로드 성공" diff --git a/TAVE/app/src/main/java/com/example/tave/items/glide/GlideImage.kt b/TAVE/app/src/main/java/com/example/tave/components/glide/GlideImage.kt similarity index 97% rename from TAVE/app/src/main/java/com/example/tave/items/glide/GlideImage.kt rename to TAVE/app/src/main/java/com/example/tave/components/glide/GlideImage.kt index 15360ec..ae35dbd 100644 --- a/TAVE/app/src/main/java/com/example/tave/items/glide/GlideImage.kt +++ b/TAVE/app/src/main/java/com/example/tave/components/glide/GlideImage.kt @@ -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.* diff --git a/TAVE/app/src/main/java/com/example/tave/items/glide/ShimmerEffectItem.kt b/TAVE/app/src/main/java/com/example/tave/components/glide/ShimmerEffectItem.kt similarity index 97% rename from TAVE/app/src/main/java/com/example/tave/items/glide/ShimmerEffectItem.kt rename to TAVE/app/src/main/java/com/example/tave/components/glide/ShimmerEffectItem.kt index c66c954..947182a 100644 --- a/TAVE/app/src/main/java/com/example/tave/items/glide/ShimmerEffectItem.kt +++ b/TAVE/app/src/main/java/com/example/tave/components/glide/ShimmerEffectItem.kt @@ -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 diff --git a/TAVE/app/src/main/java/com/example/tave/items/home/CheckQrcode.kt b/TAVE/app/src/main/java/com/example/tave/components/home/CheckQrcode.kt similarity index 98% rename from TAVE/app/src/main/java/com/example/tave/items/home/CheckQrcode.kt rename to TAVE/app/src/main/java/com/example/tave/components/home/CheckQrcode.kt index 4590008..99adef7 100644 --- a/TAVE/app/src/main/java/com/example/tave/items/home/CheckQrcode.kt +++ b/TAVE/app/src/main/java/com/example/tave/components/home/CheckQrcode.kt @@ -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 diff --git a/TAVE/app/src/main/java/com/example/tave/items/home/MainMenuButtons.kt b/TAVE/app/src/main/java/com/example/tave/components/home/MainMenuButtons.kt similarity index 98% rename from TAVE/app/src/main/java/com/example/tave/items/home/MainMenuButtons.kt rename to TAVE/app/src/main/java/com/example/tave/components/home/MainMenuButtons.kt index 403cc93..eef37f1 100644 --- a/TAVE/app/src/main/java/com/example/tave/items/home/MainMenuButtons.kt +++ b/TAVE/app/src/main/java/com/example/tave/components/home/MainMenuButtons.kt @@ -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.* diff --git a/TAVE/app/src/main/java/com/example/tave/items/home/MainMenuCard.kt b/TAVE/app/src/main/java/com/example/tave/components/home/MainMenuCard.kt similarity index 97% rename from TAVE/app/src/main/java/com/example/tave/items/home/MainMenuCard.kt rename to TAVE/app/src/main/java/com/example/tave/components/home/MainMenuCard.kt index 76a348f..3ba8f87 100644 --- a/TAVE/app/src/main/java/com/example/tave/items/home/MainMenuCard.kt +++ b/TAVE/app/src/main/java/com/example/tave/components/home/MainMenuCard.kt @@ -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.* diff --git a/TAVE/app/src/main/java/com/example/tave/items/home/UserBadge.kt b/TAVE/app/src/main/java/com/example/tave/components/home/UserBadge.kt similarity index 97% rename from TAVE/app/src/main/java/com/example/tave/items/home/UserBadge.kt rename to TAVE/app/src/main/java/com/example/tave/components/home/UserBadge.kt index 7f6bd3a..144c078 100644 --- a/TAVE/app/src/main/java/com/example/tave/items/home/UserBadge.kt +++ b/TAVE/app/src/main/java/com/example/tave/components/home/UserBadge.kt @@ -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 diff --git a/TAVE/app/src/main/java/com/example/tave/items/home/WelcomeTxt.kt b/TAVE/app/src/main/java/com/example/tave/components/home/WelcomeTxt.kt similarity index 97% rename from TAVE/app/src/main/java/com/example/tave/items/home/WelcomeTxt.kt rename to TAVE/app/src/main/java/com/example/tave/components/home/WelcomeTxt.kt index b034fd8..bbfb603 100644 --- a/TAVE/app/src/main/java/com/example/tave/items/home/WelcomeTxt.kt +++ b/TAVE/app/src/main/java/com/example/tave/components/home/WelcomeTxt.kt @@ -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 diff --git a/TAVE/app/src/main/java/com/example/tave/items/initpassword/InitPasswordBtn.kt b/TAVE/app/src/main/java/com/example/tave/components/initpassword/InitPasswordBtn.kt similarity index 96% rename from TAVE/app/src/main/java/com/example/tave/items/initpassword/InitPasswordBtn.kt rename to TAVE/app/src/main/java/com/example/tave/components/initpassword/InitPasswordBtn.kt index 024215c..7cbba22 100644 --- a/TAVE/app/src/main/java/com/example/tave/items/initpassword/InitPasswordBtn.kt +++ b/TAVE/app/src/main/java/com/example/tave/components/initpassword/InitPasswordBtn.kt @@ -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 diff --git a/TAVE/app/src/main/java/com/example/tave/items/initpassword/InitPasswordLogo.kt b/TAVE/app/src/main/java/com/example/tave/components/initpassword/InitPasswordLogo.kt similarity index 97% rename from TAVE/app/src/main/java/com/example/tave/items/initpassword/InitPasswordLogo.kt rename to TAVE/app/src/main/java/com/example/tave/components/initpassword/InitPasswordLogo.kt index 594b80e..2810b8c 100644 --- a/TAVE/app/src/main/java/com/example/tave/items/initpassword/InitPasswordLogo.kt +++ b/TAVE/app/src/main/java/com/example/tave/components/initpassword/InitPasswordLogo.kt @@ -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 diff --git a/TAVE/app/src/main/java/com/example/tave/items/login/LogInIntro.kt b/TAVE/app/src/main/java/com/example/tave/components/login/LogInIntro.kt similarity index 98% rename from TAVE/app/src/main/java/com/example/tave/items/login/LogInIntro.kt rename to TAVE/app/src/main/java/com/example/tave/components/login/LogInIntro.kt index d06cf13..35df3a5 100644 --- a/TAVE/app/src/main/java/com/example/tave/items/login/LogInIntro.kt +++ b/TAVE/app/src/main/java/com/example/tave/components/login/LogInIntro.kt @@ -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 diff --git a/TAVE/app/src/main/java/com/example/tave/items/login/LoginBtn.kt b/TAVE/app/src/main/java/com/example/tave/components/login/LoginBtn.kt similarity index 96% rename from TAVE/app/src/main/java/com/example/tave/items/login/LoginBtn.kt rename to TAVE/app/src/main/java/com/example/tave/components/login/LoginBtn.kt index 29b5017..093c627 100644 --- a/TAVE/app/src/main/java/com/example/tave/items/login/LoginBtn.kt +++ b/TAVE/app/src/main/java/com/example/tave/components/login/LoginBtn.kt @@ -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.* diff --git a/TAVE/app/src/main/java/com/example/tave/items/notice/NoticeMainCard.kt b/TAVE/app/src/main/java/com/example/tave/components/notice/NoticeMainCard.kt similarity index 97% rename from TAVE/app/src/main/java/com/example/tave/items/notice/NoticeMainCard.kt rename to TAVE/app/src/main/java/com/example/tave/components/notice/NoticeMainCard.kt index 0941c53..8e53ece 100644 --- a/TAVE/app/src/main/java/com/example/tave/items/notice/NoticeMainCard.kt +++ b/TAVE/app/src/main/java/com/example/tave/components/notice/NoticeMainCard.kt @@ -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.* @@ -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 diff --git a/TAVE/app/src/main/java/com/example/tave/items/notice/NoticeSubItems.kt b/TAVE/app/src/main/java/com/example/tave/components/notice/NoticeSubItems.kt similarity index 97% rename from TAVE/app/src/main/java/com/example/tave/items/notice/NoticeSubItems.kt rename to TAVE/app/src/main/java/com/example/tave/components/notice/NoticeSubItems.kt index 743e6b6..8216998 100644 --- a/TAVE/app/src/main/java/com/example/tave/items/notice/NoticeSubItems.kt +++ b/TAVE/app/src/main/java/com/example/tave/components/notice/NoticeSubItems.kt @@ -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.* @@ -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 diff --git a/TAVE/app/src/main/java/com/example/tave/items/notice/NoticeSubItemsColumns.kt b/TAVE/app/src/main/java/com/example/tave/components/notice/NoticeSubItemsColumns.kt similarity index 97% rename from TAVE/app/src/main/java/com/example/tave/items/notice/NoticeSubItemsColumns.kt rename to TAVE/app/src/main/java/com/example/tave/components/notice/NoticeSubItemsColumns.kt index 520749b..96bb624 100644 --- a/TAVE/app/src/main/java/com/example/tave/items/notice/NoticeSubItemsColumns.kt +++ b/TAVE/app/src/main/java/com/example/tave/components/notice/NoticeSubItemsColumns.kt @@ -1,4 +1,4 @@ -package com.example.tave.items.notice +package com.example.tave.components.notice import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.fillMaxWidth diff --git a/TAVE/app/src/main/java/com/example/tave/items/noticeDetail/NoticeDetailCard.kt b/TAVE/app/src/main/java/com/example/tave/components/noticeDetail/NoticeDetailCard.kt similarity index 94% rename from TAVE/app/src/main/java/com/example/tave/items/noticeDetail/NoticeDetailCard.kt rename to TAVE/app/src/main/java/com/example/tave/components/noticeDetail/NoticeDetailCard.kt index 5ca55f2..fe8a565 100644 --- a/TAVE/app/src/main/java/com/example/tave/items/noticeDetail/NoticeDetailCard.kt +++ b/TAVE/app/src/main/java/com/example/tave/components/noticeDetail/NoticeDetailCard.kt @@ -1,4 +1,4 @@ -package com.example.tave.items.noticeDetail +package com.example.tave.components.noticeDetail import androidx.compose.foundation.layout.* import androidx.compose.material3.Text @@ -12,8 +12,8 @@ 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.items.glide.ShimmerEffectItem +import com.example.tave.components.glide.GlideImageView +import com.example.tave.components.glide.ShimmerEffectItem import com.example.tave.ui.font.NotoSansKr import com.example.tave.ui.theme.NoticeImageCardCustomShape diff --git a/TAVE/app/src/main/java/com/example/tave/items/noticeDetail/NoticeDetailLazyGridsPics.kt b/TAVE/app/src/main/java/com/example/tave/components/noticeDetail/NoticeDetailLazyGridsPics.kt similarity index 96% rename from TAVE/app/src/main/java/com/example/tave/items/noticeDetail/NoticeDetailLazyGridsPics.kt rename to TAVE/app/src/main/java/com/example/tave/components/noticeDetail/NoticeDetailLazyGridsPics.kt index 554d757..65fa459 100644 --- a/TAVE/app/src/main/java/com/example/tave/items/noticeDetail/NoticeDetailLazyGridsPics.kt +++ b/TAVE/app/src/main/java/com/example/tave/components/noticeDetail/NoticeDetailLazyGridsPics.kt @@ -1,4 +1,4 @@ -package com.example.tave.items.noticeDetail +package com.example.tave.components.noticeDetail import androidx.compose.foundation.ExperimentalFoundationApi import androidx.compose.foundation.Image @@ -20,11 +20,11 @@ import androidx.compose.ui.res.painterResource import androidx.compose.ui.unit.dp import androidx.compose.ui.window.Dialog import androidx.hilt.navigation.compose.hiltViewModel -import com.example.tave.items.glide.GlideImageView +import com.example.tave.components.glide.GlideImageView import com.example.tave.ui.theme.Shape import com.example.tave.R import com.example.tave.common.Constants -import com.example.tave.items.glide.ShimmerEffectItem +import com.example.tave.components.glide.ShimmerEffectItem import com.example.tave.viewmodel.NoticeDetailViewModel import com.skydoves.landscapist.glide.GlideImage diff --git a/TAVE/app/src/main/java/com/example/tave/items/noticeDetail/NoticeDetailPublisherBar.kt b/TAVE/app/src/main/java/com/example/tave/components/noticeDetail/NoticeDetailPublisherBar.kt similarity index 96% rename from TAVE/app/src/main/java/com/example/tave/items/noticeDetail/NoticeDetailPublisherBar.kt rename to TAVE/app/src/main/java/com/example/tave/components/noticeDetail/NoticeDetailPublisherBar.kt index 0a78c83..abc8fc3 100644 --- a/TAVE/app/src/main/java/com/example/tave/items/noticeDetail/NoticeDetailPublisherBar.kt +++ b/TAVE/app/src/main/java/com/example/tave/components/noticeDetail/NoticeDetailPublisherBar.kt @@ -1,4 +1,4 @@ -package com.example.tave.items.noticeDetail +package com.example.tave.components.noticeDetail import androidx.compose.foundation.Image import androidx.compose.foundation.layout.* @@ -15,7 +15,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.ShimmerEffectItem +import com.example.tave.components.glide.ShimmerEffectItem import com.example.tave.ui.font.NotoSansKr import com.example.tave.ui.theme.Shape diff --git a/TAVE/app/src/main/java/com/example/tave/items/noticeDetail/NoticeDetailTopBar.kt b/TAVE/app/src/main/java/com/example/tave/components/noticeDetail/NoticeDetailTopBar.kt similarity index 97% rename from TAVE/app/src/main/java/com/example/tave/items/noticeDetail/NoticeDetailTopBar.kt rename to TAVE/app/src/main/java/com/example/tave/components/noticeDetail/NoticeDetailTopBar.kt index aa1ddac..93215ea 100644 --- a/TAVE/app/src/main/java/com/example/tave/items/noticeDetail/NoticeDetailTopBar.kt +++ b/TAVE/app/src/main/java/com/example/tave/components/noticeDetail/NoticeDetailTopBar.kt @@ -1,4 +1,4 @@ -package com.example.tave.items.noticeDetail +package com.example.tave.components.noticeDetail import androidx.compose.foundation.Image import androidx.compose.foundation.layout.Arrangement diff --git a/TAVE/app/src/main/java/com/example/tave/items/otp/OTPCodeInput.kt b/TAVE/app/src/main/java/com/example/tave/components/otp/OTPCodeInput.kt similarity index 97% rename from TAVE/app/src/main/java/com/example/tave/items/otp/OTPCodeInput.kt rename to TAVE/app/src/main/java/com/example/tave/components/otp/OTPCodeInput.kt index e58d1af..53ca440 100644 --- a/TAVE/app/src/main/java/com/example/tave/items/otp/OTPCodeInput.kt +++ b/TAVE/app/src/main/java/com/example/tave/components/otp/OTPCodeInput.kt @@ -1,4 +1,4 @@ -package com.example.tave.items.otp +package com.example.tave.components.otp import androidx.compose.foundation.layout.width import androidx.compose.material3.ButtonDefaults diff --git a/TAVE/app/src/main/java/com/example/tave/items/otp/OTPLogo.kt b/TAVE/app/src/main/java/com/example/tave/components/otp/OTPLogo.kt similarity index 98% rename from TAVE/app/src/main/java/com/example/tave/items/otp/OTPLogo.kt rename to TAVE/app/src/main/java/com/example/tave/components/otp/OTPLogo.kt index 689b5d8..fcc37b1 100644 --- a/TAVE/app/src/main/java/com/example/tave/items/otp/OTPLogo.kt +++ b/TAVE/app/src/main/java/com/example/tave/components/otp/OTPLogo.kt @@ -1,4 +1,4 @@ -package com.example.tave.items.otp +package com.example.tave.components.otp import androidx.compose.foundation.Image import androidx.compose.foundation.layout.Arrangement diff --git a/TAVE/app/src/main/java/com/example/tave/items/profile/ProfileBox.kt b/TAVE/app/src/main/java/com/example/tave/components/profile/ProfileBox.kt similarity index 97% rename from TAVE/app/src/main/java/com/example/tave/items/profile/ProfileBox.kt rename to TAVE/app/src/main/java/com/example/tave/components/profile/ProfileBox.kt index 5a25276..b0a3189 100644 --- a/TAVE/app/src/main/java/com/example/tave/items/profile/ProfileBox.kt +++ b/TAVE/app/src/main/java/com/example/tave/components/profile/ProfileBox.kt @@ -1,4 +1,4 @@ -package com.example.tave.items.profile +package com.example.tave.components.profile import androidx.compose.foundation.Canvas import androidx.compose.foundation.Image @@ -28,8 +28,8 @@ import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import com.example.tave.R import com.example.tave.common.Constants -import com.example.tave.common.util.standardQuadFromTo -import com.example.tave.items.glide.ShimmerEffectItem +import com.example.tave.util.standardQuadFromTo +import com.example.tave.components.glide.ShimmerEffectItem import com.example.tave.ui.font.NotoSansKr import com.example.tave.ui.theme.DarkBlue import com.example.tave.ui.theme.MidBlue diff --git a/TAVE/app/src/main/java/com/example/tave/items/profile/ProfileInfoColumn.kt b/TAVE/app/src/main/java/com/example/tave/components/profile/ProfileInfoColumn.kt similarity index 98% rename from TAVE/app/src/main/java/com/example/tave/items/profile/ProfileInfoColumn.kt rename to TAVE/app/src/main/java/com/example/tave/components/profile/ProfileInfoColumn.kt index 184c351..d0308c2 100644 --- a/TAVE/app/src/main/java/com/example/tave/items/profile/ProfileInfoColumn.kt +++ b/TAVE/app/src/main/java/com/example/tave/components/profile/ProfileInfoColumn.kt @@ -1,4 +1,4 @@ -package com.example.tave.items.profile +package com.example.tave.components.profile import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column diff --git a/TAVE/app/src/main/java/com/example/tave/items/profile/ProfileInfoRow.kt b/TAVE/app/src/main/java/com/example/tave/components/profile/ProfileInfoRow.kt similarity index 99% rename from TAVE/app/src/main/java/com/example/tave/items/profile/ProfileInfoRow.kt rename to TAVE/app/src/main/java/com/example/tave/components/profile/ProfileInfoRow.kt index b440f03..e7ddef7 100644 --- a/TAVE/app/src/main/java/com/example/tave/items/profile/ProfileInfoRow.kt +++ b/TAVE/app/src/main/java/com/example/tave/components/profile/ProfileInfoRow.kt @@ -1,4 +1,4 @@ -package com.example.tave.items.profile +package com.example.tave.components.profile import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column diff --git a/TAVE/app/src/main/java/com/example/tave/items/sms/SMSLogo.kt b/TAVE/app/src/main/java/com/example/tave/components/sms/SMSLogo.kt similarity index 98% rename from TAVE/app/src/main/java/com/example/tave/items/sms/SMSLogo.kt rename to TAVE/app/src/main/java/com/example/tave/components/sms/SMSLogo.kt index 1bbf55f..fb76c21 100644 --- a/TAVE/app/src/main/java/com/example/tave/items/sms/SMSLogo.kt +++ b/TAVE/app/src/main/java/com/example/tave/components/sms/SMSLogo.kt @@ -1,4 +1,4 @@ -package com.example.tave.items.sms +package com.example.tave.components.sms import androidx.compose.foundation.Image import androidx.compose.foundation.layout.Arrangement diff --git a/TAVE/app/src/main/java/com/example/tave/items/sms/SMSPhoneNumbeBtn.kt b/TAVE/app/src/main/java/com/example/tave/components/sms/SMSPhoneNumbeBtn.kt similarity index 98% rename from TAVE/app/src/main/java/com/example/tave/items/sms/SMSPhoneNumbeBtn.kt rename to TAVE/app/src/main/java/com/example/tave/components/sms/SMSPhoneNumbeBtn.kt index 234bcc2..b976f75 100644 --- a/TAVE/app/src/main/java/com/example/tave/items/sms/SMSPhoneNumbeBtn.kt +++ b/TAVE/app/src/main/java/com/example/tave/components/sms/SMSPhoneNumbeBtn.kt @@ -1,4 +1,4 @@ -package com.example.tave.items.sms +package com.example.tave.components.sms import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column diff --git a/TAVE/app/src/main/java/com/example/tave/di/module/DispatcherModule.kt b/TAVE/app/src/main/java/com/example/tave/di/DispatcherModule.kt similarity index 63% rename from TAVE/app/src/main/java/com/example/tave/di/module/DispatcherModule.kt rename to TAVE/app/src/main/java/com/example/tave/di/DispatcherModule.kt index cb6db67..44e3824 100644 --- a/TAVE/app/src/main/java/com/example/tave/di/module/DispatcherModule.kt +++ b/TAVE/app/src/main/java/com/example/tave/di/DispatcherModule.kt @@ -1,8 +1,5 @@ -package com.example.tave.di.module +package com.example.tave.di -import com.example.tave.di.qualifier.DefaultDispatcher -import com.example.tave.di.qualifier.IoDispatcher -import com.example.tave.di.qualifier.MainDispatcher import dagger.Module import dagger.Provides import dagger.hilt.InstallIn @@ -13,12 +10,15 @@ import kotlinx.coroutines.Dispatchers @Module @InstallIn(SingletonComponent::class) object DispatcherModule { - @MainDispatcher @Provides + @MainDispatcher + @Provides fun provideMainDispatcher(): CoroutineDispatcher = Dispatchers.Main - @IoDispatcher @Provides + @IoDispatcher + @Provides fun provideIoDispatcher(): CoroutineDispatcher = Dispatchers.IO - @DefaultDispatcher @Provides + @DefaultDispatcher + @Provides fun provideDefaultDispatcher(): CoroutineDispatcher = Dispatchers.Default } \ No newline at end of file diff --git a/TAVE/app/src/main/java/com/example/tave/di/qualifier/DispatcherQualifier.kt b/TAVE/app/src/main/java/com/example/tave/di/DispatcherQualifier.kt similarity index 88% rename from TAVE/app/src/main/java/com/example/tave/di/qualifier/DispatcherQualifier.kt rename to TAVE/app/src/main/java/com/example/tave/di/DispatcherQualifier.kt index 5185b8f..a1e8d06 100644 --- a/TAVE/app/src/main/java/com/example/tave/di/qualifier/DispatcherQualifier.kt +++ b/TAVE/app/src/main/java/com/example/tave/di/DispatcherQualifier.kt @@ -1,4 +1,4 @@ -package com.example.tave.di.qualifier +package com.example.tave.di import javax.inject.Qualifier diff --git a/TAVE/app/src/main/java/com/example/tave/di/module/OKHttpModule.kt b/TAVE/app/src/main/java/com/example/tave/di/module/OKHttpModule.kt deleted file mode 100644 index 0a76f3e..0000000 --- a/TAVE/app/src/main/java/com/example/tave/di/module/OKHttpModule.kt +++ /dev/null @@ -1,30 +0,0 @@ -package com.example.tave.di.module - -import dagger.Module -import dagger.Provides -import dagger.hilt.InstallIn -import dagger.hilt.components.SingletonComponent -import okhttp3.OkHttpClient -import java.util.concurrent.TimeUnit -import javax.inject.Singleton -import javax.net.ssl.SSLSocketFactory -import javax.net.ssl.TrustManagerFactory -import javax.net.ssl.X509TrustManager - -@Module -@InstallIn(SingletonComponent::class) -object OKHttpModule { - @Provides - @Singleton - fun provideOKHttpClient( - sslSocketFactory: SSLSocketFactory, - trustManagerFactory: TrustManagerFactory, - ): OkHttpClient = OkHttpClient() - .newBuilder() - .readTimeout(1, TimeUnit.HOURS) - .sslSocketFactory( - sslSocketFactory, - trustManagerFactory.trustManagers[0] as X509TrustManager - ) - .build() -} \ No newline at end of file diff --git a/TAVE/app/src/main/java/com/example/tave/di/module/SSEConnectModule.kt b/TAVE/app/src/main/java/com/example/tave/di/module/SSEConnectModule.kt deleted file mode 100644 index bb97388..0000000 --- a/TAVE/app/src/main/java/com/example/tave/di/module/SSEConnectModule.kt +++ /dev/null @@ -1,57 +0,0 @@ -package com.example.tave.di.module - -import android.content.Context -import android.os.Handler -import android.os.Looper -import android.widget.Toast -import com.example.tave.R -import com.example.tave.common.Constants -import dagger.Module -import dagger.Provides -import dagger.hilt.InstallIn -import dagger.hilt.android.qualifiers.ApplicationContext -import dagger.hilt.components.SingletonComponent -import okhttp3.OkHttpClient -import okhttp3.sse.EventSource -import okhttp3.sse.EventSourceListener -import okhttp3.sse.EventSources -import javax.inject.Singleton - -@Module -@InstallIn(SingletonComponent::class) -object SSEConnectModule { - @Provides - @Singleton - fun provideEventSourceListener(@ApplicationContext context: Context): EventSourceListener { - val eventSourceListener = object : EventSourceListener() { - override fun onEvent( - eventSource: EventSource, - id: String?, - type: String?, - data: String - ) { - super.onEvent(eventSource, id, type, data) - if (data != Constants.SSE_ACK_FLAG) { - Handler(Looper.getMainLooper()).postDelayed( - { - Toast.makeText( - context, - context.getText(R.string.New_Notice_Message), - Toast.LENGTH_SHORT - ).show() - }, 0 - ) - } - } - } - - return eventSourceListener - } - - @Provides - @Singleton - fun provideEventSource(okHttpClient: OkHttpClient): EventSource.Factory = - EventSources.createFactory(okHttpClient) - - -} \ No newline at end of file diff --git a/TAVE/app/src/main/java/com/example/tave/pages/Home.kt b/TAVE/app/src/main/java/com/example/tave/pages/Home.kt index 23be6a1..af6747f 100644 --- a/TAVE/app/src/main/java/com/example/tave/pages/Home.kt +++ b/TAVE/app/src/main/java/com/example/tave/pages/Home.kt @@ -17,7 +17,7 @@ import com.example.domain.entity.profile.UserProfileEntity import com.example.tave.NoticePage import com.example.tave.ProfilePage import com.example.tave.R -import com.example.tave.items.home.* +import com.example.tave.components.home.* import com.example.tave.ui.theme.CustomShape @Composable @@ -33,7 +33,8 @@ fun HomePage( modifier: Modifier = Modifier, ) { LaunchedEffect( - key1 = Unit, + key1 = personalScore, + key2 = teamScore, block = { getPersonalScore() getTeamScore() diff --git a/TAVE/app/src/main/java/com/example/tave/pages/InitPassword.kt b/TAVE/app/src/main/java/com/example/tave/pages/InitPassword.kt index 81f2653..3ab17bc 100644 --- a/TAVE/app/src/main/java/com/example/tave/pages/InitPassword.kt +++ b/TAVE/app/src/main/java/com/example/tave/pages/InitPassword.kt @@ -14,13 +14,13 @@ import androidx.compose.ui.text.input.KeyboardType import androidx.compose.ui.text.input.PasswordVisualTransformation import androidx.compose.ui.unit.dp import androidx.navigation.NavController -import com.example.tave.common.util.state.InitPasswordState.* -import com.example.tave.items.initpassword.InitPasswordBtn -import com.example.tave.items.initpassword.InitPasswordLogo +import com.example.tave.util.state.InitPasswordState.* +import com.example.tave.components.initpassword.InitPasswordBtn +import com.example.tave.components.initpassword.InitPasswordLogo import com.example.tave.ui.theme.Shape import com.example.tave.HomePage import com.example.tave.R -import com.example.tave.common.util.state.InitPasswordState +import com.example.tave.util.state.InitPasswordState @Composable fun InitPasswordPage( diff --git a/TAVE/app/src/main/java/com/example/tave/pages/Login.kt b/TAVE/app/src/main/java/com/example/tave/pages/Login.kt index 962ee8c..a9bc21f 100644 --- a/TAVE/app/src/main/java/com/example/tave/pages/Login.kt +++ b/TAVE/app/src/main/java/com/example/tave/pages/Login.kt @@ -20,13 +20,13 @@ import androidx.compose.ui.unit.dp import androidx.navigation.NavController import androidx.navigation.compose.rememberNavController import com.example.tave.R -import com.example.tave.common.util.state.LogInUserState.* -import com.example.tave.items.login.LoginBtn -import com.example.tave.items.login.LoginIntro +import com.example.tave.util.state.LogInUserState.* +import com.example.tave.components.login.LoginBtn +import com.example.tave.components.login.LoginIntro import com.example.tave.ui.theme.Shape import com.example.tave.HomePage import com.example.tave.SendSMSCodePage -import com.example.tave.common.util.state.LogInUserState +import com.example.tave.util.state.LogInUserState @Composable fun LoginPage( diff --git a/TAVE/app/src/main/java/com/example/tave/pages/Notice.kt b/TAVE/app/src/main/java/com/example/tave/pages/Notice.kt index 2e140f4..ad62462 100644 --- a/TAVE/app/src/main/java/com/example/tave/pages/Notice.kt +++ b/TAVE/app/src/main/java/com/example/tave/pages/Notice.kt @@ -15,8 +15,8 @@ import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import com.example.domain.entity.notice.NoticeDetailEntity import com.example.tave.R -import com.example.tave.items.notice.MainNoticeCard -import com.example.tave.items.notice.NoticeSubItemsColumns +import com.example.tave.components.notice.MainNoticeCard +import com.example.tave.components.notice.NoticeSubItemsColumns import com.example.tave.ui.font.NotoSansKr @Composable diff --git a/TAVE/app/src/main/java/com/example/tave/pages/NoticeDetail.kt b/TAVE/app/src/main/java/com/example/tave/pages/NoticeDetail.kt index 399f93d..37998d7 100644 --- a/TAVE/app/src/main/java/com/example/tave/pages/NoticeDetail.kt +++ b/TAVE/app/src/main/java/com/example/tave/pages/NoticeDetail.kt @@ -14,11 +14,11 @@ import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import com.example.domain.entity.notice.NoticeDetailEntity import com.example.tave.common.Constants -import com.example.tave.items.glide.ShimmerEffectItem -import com.example.tave.items.noticeDetail.NoticeDetailCard -import com.example.tave.items.noticeDetail.NoticeDetailLazyGridsPics -import com.example.tave.items.noticeDetail.NoticeDetailPublisherBar -import com.example.tave.items.noticeDetail.NoticeDetailTopBar +import com.example.tave.components.glide.ShimmerEffectItem +import com.example.tave.components.noticeDetail.NoticeDetailCard +import com.example.tave.components.noticeDetail.NoticeDetailLazyGridsPics +import com.example.tave.components.noticeDetail.NoticeDetailPublisherBar +import com.example.tave.components.noticeDetail.NoticeDetailTopBar import com.example.tave.ui.font.NotoSansKr import kotlinx.coroutines.delay diff --git a/TAVE/app/src/main/java/com/example/tave/pages/OTPInput.kt b/TAVE/app/src/main/java/com/example/tave/pages/OTPInput.kt index d0532b1..5e20ed7 100644 --- a/TAVE/app/src/main/java/com/example/tave/pages/OTPInput.kt +++ b/TAVE/app/src/main/java/com/example/tave/pages/OTPInput.kt @@ -32,10 +32,10 @@ import androidx.compose.ui.unit.dp import androidx.navigation.NavController import com.example.tave.InitPasswordPage import com.example.tave.R -import com.example.tave.common.util.state.CheckOTPCodeState -import com.example.tave.common.util.state.CheckOTPCodeState.* -import com.example.tave.items.otp.OTPCodeInput -import com.example.tave.items.otp.OtpLogo +import com.example.tave.util.state.CheckOTPCodeState +import com.example.tave.util.state.CheckOTPCodeState.* +import com.example.tave.components.otp.OTPCodeInput +import com.example.tave.components.otp.OtpLogo import com.example.tave.ui.theme.Shape @Composable diff --git a/TAVE/app/src/main/java/com/example/tave/pages/Profile.kt b/TAVE/app/src/main/java/com/example/tave/pages/Profile.kt index a8504ff..2920862 100644 --- a/TAVE/app/src/main/java/com/example/tave/pages/Profile.kt +++ b/TAVE/app/src/main/java/com/example/tave/pages/Profile.kt @@ -7,7 +7,7 @@ import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.unit.dp import com.example.domain.entity.profile.UserProfileEntity -import com.example.tave.items.profile.* +import com.example.tave.components.profile.* @Composable fun ProfilePage( diff --git a/TAVE/app/src/main/java/com/example/tave/pages/SendSMSCode.kt b/TAVE/app/src/main/java/com/example/tave/pages/SendSMSCode.kt index 5ba7dc7..67a292f 100644 --- a/TAVE/app/src/main/java/com/example/tave/pages/SendSMSCode.kt +++ b/TAVE/app/src/main/java/com/example/tave/pages/SendSMSCode.kt @@ -30,9 +30,9 @@ import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp import com.example.tave.R -import com.example.tave.common.util.state.SendSMSCodeState -import com.example.tave.items.sms.SMSLogo -import com.example.tave.items.sms.SMSPhoneNumberBtn +import com.example.tave.util.state.SendSMSCodeState +import com.example.tave.components.sms.SMSLogo +import com.example.tave.components.sms.SMSPhoneNumberBtn import com.example.tave.ui.theme.Shape @Composable diff --git a/TAVE/app/src/main/java/com/example/tave/common/util/PathUtil.kt b/TAVE/app/src/main/java/com/example/tave/util/PathUtil.kt similarity index 88% rename from TAVE/app/src/main/java/com/example/tave/common/util/PathUtil.kt rename to TAVE/app/src/main/java/com/example/tave/util/PathUtil.kt index 14eec3c..fbede05 100644 --- a/TAVE/app/src/main/java/com/example/tave/common/util/PathUtil.kt +++ b/TAVE/app/src/main/java/com/example/tave/util/PathUtil.kt @@ -1,4 +1,4 @@ -package com.example.tave.common.util +package com.example.tave.util import androidx.compose.ui.geometry.Offset import androidx.compose.ui.graphics.Path diff --git a/TAVE/app/src/main/java/com/example/tave/common/util/PreferenceUtil.kt b/TAVE/app/src/main/java/com/example/tave/util/PreferenceUtil.kt similarity index 93% rename from TAVE/app/src/main/java/com/example/tave/common/util/PreferenceUtil.kt rename to TAVE/app/src/main/java/com/example/tave/util/PreferenceUtil.kt index eef57b9..41d4a1b 100644 --- a/TAVE/app/src/main/java/com/example/tave/common/util/PreferenceUtil.kt +++ b/TAVE/app/src/main/java/com/example/tave/util/PreferenceUtil.kt @@ -1,4 +1,4 @@ -package com.example.tave.common.util +package com.example.tave.util import android.content.Context import android.content.SharedPreferences diff --git a/TAVE/app/src/main/java/com/example/tave/common/util/state/CheckOTPCodeState.kt b/TAVE/app/src/main/java/com/example/tave/util/state/CheckOTPCodeState.kt similarity index 85% rename from TAVE/app/src/main/java/com/example/tave/common/util/state/CheckOTPCodeState.kt rename to TAVE/app/src/main/java/com/example/tave/util/state/CheckOTPCodeState.kt index 09d923d..f97813a 100644 --- a/TAVE/app/src/main/java/com/example/tave/common/util/state/CheckOTPCodeState.kt +++ b/TAVE/app/src/main/java/com/example/tave/util/state/CheckOTPCodeState.kt @@ -1,4 +1,4 @@ -package com.example.tave.common.util.state +package com.example.tave.util.state sealed class CheckOTPCodeState { object Idle: CheckOTPCodeState() diff --git a/TAVE/app/src/main/java/com/example/tave/common/util/state/InitPasswordState.kt b/TAVE/app/src/main/java/com/example/tave/util/state/InitPasswordState.kt similarity index 85% rename from TAVE/app/src/main/java/com/example/tave/common/util/state/InitPasswordState.kt rename to TAVE/app/src/main/java/com/example/tave/util/state/InitPasswordState.kt index 7b0900a..ea573c8 100644 --- a/TAVE/app/src/main/java/com/example/tave/common/util/state/InitPasswordState.kt +++ b/TAVE/app/src/main/java/com/example/tave/util/state/InitPasswordState.kt @@ -1,4 +1,4 @@ -package com.example.tave.common.util.state +package com.example.tave.util.state sealed class InitPasswordState { object Idle: InitPasswordState() diff --git a/TAVE/app/src/main/java/com/example/tave/common/util/state/LogInUserState.kt b/TAVE/app/src/main/java/com/example/tave/util/state/LogInUserState.kt similarity index 88% rename from TAVE/app/src/main/java/com/example/tave/common/util/state/LogInUserState.kt rename to TAVE/app/src/main/java/com/example/tave/util/state/LogInUserState.kt index 874880d..0c5597a 100644 --- a/TAVE/app/src/main/java/com/example/tave/common/util/state/LogInUserState.kt +++ b/TAVE/app/src/main/java/com/example/tave/util/state/LogInUserState.kt @@ -1,4 +1,4 @@ -package com.example.tave.common.util.state +package com.example.tave.util.state sealed class LogInUserState { object Idle: LogInUserState() diff --git a/TAVE/app/src/main/java/com/example/tave/common/util/state/SendSMSCodeState.kt b/TAVE/app/src/main/java/com/example/tave/util/state/SendSMSCodeState.kt similarity index 85% rename from TAVE/app/src/main/java/com/example/tave/common/util/state/SendSMSCodeState.kt rename to TAVE/app/src/main/java/com/example/tave/util/state/SendSMSCodeState.kt index 1ae8515..cc6f64c 100644 --- a/TAVE/app/src/main/java/com/example/tave/common/util/state/SendSMSCodeState.kt +++ b/TAVE/app/src/main/java/com/example/tave/util/state/SendSMSCodeState.kt @@ -1,4 +1,4 @@ -package com.example.tave.common.util.state +package com.example.tave.util.state sealed class SendSMSCodeState { object Idle: SendSMSCodeState() diff --git a/TAVE/app/src/main/java/com/example/tave/viewmodel/HomeViewModel.kt b/TAVE/app/src/main/java/com/example/tave/viewmodel/HomeViewModel.kt index 2963747..d400ef2 100644 --- a/TAVE/app/src/main/java/com/example/tave/viewmodel/HomeViewModel.kt +++ b/TAVE/app/src/main/java/com/example/tave/viewmodel/HomeViewModel.kt @@ -7,37 +7,31 @@ import androidx.lifecycle.LiveData import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope -import com.example.data.api.TaveAPIService +import com.example.data.remote.TaveAPIService import com.example.domain.entity.profile.UserProfileEntity import com.example.domain.usecases.profile.GetUserProfileUseCase -import com.example.domain.usecases.schedule.GetRecentScheduleUseCase import com.example.domain.usecases.score.GetPersonalScoreUseCase import com.example.domain.usecases.score.GetTeamScoreUseCase -import com.example.tave.BuildConfig import com.example.tave.TaveApplication import com.example.tave.common.Constants -import com.example.tave.di.qualifier.DefaultDispatcher -import com.example.tave.di.qualifier.IoDispatcher +import com.example.tave.di.DefaultDispatcher +import com.example.tave.di.IoDispatcher import dagger.hilt.android.lifecycle.HiltViewModel import kotlinx.coroutines.CoroutineDispatcher import kotlinx.coroutines.Job import kotlinx.coroutines.cancel import kotlinx.coroutines.launch import kotlinx.coroutines.withContext -import okhttp3.Request -import okhttp3.sse.EventSource -import okhttp3.sse.EventSourceListener import java.util.Date import java.util.Locale import javax.inject.Inject + @HiltViewModel class HomeViewModel @Inject constructor( private val taveAPIService: TaveAPIService, private val getUserProfileUseCase: GetUserProfileUseCase, private val getPersonalScoreUseCase: GetPersonalScoreUseCase, private val getTeamScoreUseCase: GetTeamScoreUseCase, - private val sseEventListener: EventSource.Factory, - private val sseEventSourceListener: EventSourceListener, @IoDispatcher private val ioDispatcher: CoroutineDispatcher, @DefaultDispatcher private val defaultDispatcher: CoroutineDispatcher ): ViewModel() { @@ -66,17 +60,17 @@ class HomeViewModel @Inject constructor( init { getUserProfile() getScheduleAll() - sseEventSource().request() + //sseEventSource().request() } - private fun setSSERequestInstance(): Request = Request.Builder() - .url(BuildConfig.TAVE_SSE_URL) - .addHeader(Constants.AUTHORIZATION_HEADER_TITLE, accessToken) - .addHeader(Constants.SSE_HEADER_TITLE, Constants.SSE_HEADER_VALUE) - .build() - - private fun sseEventSource(): EventSource = - sseEventListener.newEventSource(setSSERequestInstance(), sseEventSourceListener) +// private fun setSSERequestInstance(): Request = Request.Builder() +// .url(BuildConfig.TAVE_SSE_URL) +// .addHeader(Constants.AUTHORIZATION_HEADER_TITLE, accessToken) +// .addHeader(Constants.SSE_HEADER_TITLE, Constants.SSE_HEADER_VALUE) +// .build() +// +// private fun sseEventSource(): EventSource = +// sseEventListener.newEventSource(setSSERequestInstance(), sseEventSourceListener) private fun getUserProfile(): Job = viewModelScope.launch(ioDispatcher) { diff --git a/TAVE/app/src/main/java/com/example/tave/viewmodel/InitPWDViewModel.kt b/TAVE/app/src/main/java/com/example/tave/viewmodel/InitPWDViewModel.kt index ba87b5b..37b4920 100644 --- a/TAVE/app/src/main/java/com/example/tave/viewmodel/InitPWDViewModel.kt +++ b/TAVE/app/src/main/java/com/example/tave/viewmodel/InitPWDViewModel.kt @@ -6,8 +6,8 @@ import com.example.domain.entity.login.ModifyPasswordEntity import com.example.domain.usecases.login.ModifyPasswordUseCase import com.example.tave.TaveApplication import com.example.tave.common.Constants -import com.example.tave.common.util.state.InitPasswordState -import com.example.tave.di.qualifier.IoDispatcher +import com.example.tave.util.state.InitPasswordState +import com.example.tave.di.IoDispatcher import dagger.hilt.android.lifecycle.HiltViewModel import kotlinx.coroutines.CoroutineDispatcher import kotlinx.coroutines.Job diff --git a/TAVE/app/src/main/java/com/example/tave/viewmodel/InputOTPViewModel.kt b/TAVE/app/src/main/java/com/example/tave/viewmodel/InputOTPViewModel.kt index 4dcd12d..1168e5a 100644 --- a/TAVE/app/src/main/java/com/example/tave/viewmodel/InputOTPViewModel.kt +++ b/TAVE/app/src/main/java/com/example/tave/viewmodel/InputOTPViewModel.kt @@ -5,8 +5,8 @@ import androidx.lifecycle.viewModelScope import com.example.domain.usecases.sms.CheckOTPUseCase import com.example.tave.TaveApplication import com.example.tave.common.Constants -import com.example.tave.common.util.state.CheckOTPCodeState -import com.example.tave.di.qualifier.IoDispatcher +import com.example.tave.util.state.CheckOTPCodeState +import com.example.tave.di.IoDispatcher import dagger.hilt.android.lifecycle.HiltViewModel import kotlinx.coroutines.CoroutineDispatcher import kotlinx.coroutines.Job diff --git a/TAVE/app/src/main/java/com/example/tave/viewmodel/LogInViewModel.kt b/TAVE/app/src/main/java/com/example/tave/viewmodel/LogInViewModel.kt index 221d784..091091e 100644 --- a/TAVE/app/src/main/java/com/example/tave/viewmodel/LogInViewModel.kt +++ b/TAVE/app/src/main/java/com/example/tave/viewmodel/LogInViewModel.kt @@ -7,8 +7,8 @@ import com.example.domain.usecases.login.LogInUserUseCase import com.example.domain.usecases.profile.GetCheckedSMSUseCase import com.example.tave.TaveApplication import com.example.tave.common.Constants -import com.example.tave.common.util.state.LogInUserState -import com.example.tave.di.qualifier.IoDispatcher +import com.example.tave.util.state.LogInUserState +import com.example.tave.di.IoDispatcher import dagger.hilt.android.lifecycle.HiltViewModel import kotlinx.coroutines.CoroutineDispatcher import kotlinx.coroutines.Job diff --git a/TAVE/app/src/main/java/com/example/tave/viewmodel/NoticeDetailViewModel.kt b/TAVE/app/src/main/java/com/example/tave/viewmodel/NoticeDetailViewModel.kt index d31ebe5..5c3746e 100644 --- a/TAVE/app/src/main/java/com/example/tave/viewmodel/NoticeDetailViewModel.kt +++ b/TAVE/app/src/main/java/com/example/tave/viewmodel/NoticeDetailViewModel.kt @@ -11,7 +11,7 @@ import com.example.domain.entity.notice.noticeTypeMap import com.example.domain.usecases.notice.GetNoticeDetailUseCase import com.example.tave.TaveApplication import com.example.tave.common.Constants -import com.example.tave.di.qualifier.IoDispatcher +import com.example.tave.di.IoDispatcher import dagger.hilt.android.lifecycle.HiltViewModel import kotlinx.coroutines.CoroutineDispatcher import kotlinx.coroutines.Job diff --git a/TAVE/app/src/main/java/com/example/tave/viewmodel/NoticeViewModel.kt b/TAVE/app/src/main/java/com/example/tave/viewmodel/NoticeViewModel.kt index 8267b5f..88756c6 100644 --- a/TAVE/app/src/main/java/com/example/tave/viewmodel/NoticeViewModel.kt +++ b/TAVE/app/src/main/java/com/example/tave/viewmodel/NoticeViewModel.kt @@ -12,7 +12,7 @@ import com.example.domain.usecases.notice.GetNoticeSubItemsUseCase import com.example.domain.usecases.notice.GetNoticeMainUseCase import com.example.tave.TaveApplication import com.example.tave.common.Constants -import com.example.tave.di.qualifier.IoDispatcher +import com.example.tave.di.IoDispatcher import dagger.hilt.android.lifecycle.HiltViewModel import kotlinx.coroutines.CoroutineDispatcher import kotlinx.coroutines.Job diff --git a/TAVE/app/src/main/java/com/example/tave/viewmodel/ProfileViewModel.kt b/TAVE/app/src/main/java/com/example/tave/viewmodel/ProfileViewModel.kt index c5f2d15..c4f97c2 100644 --- a/TAVE/app/src/main/java/com/example/tave/viewmodel/ProfileViewModel.kt +++ b/TAVE/app/src/main/java/com/example/tave/viewmodel/ProfileViewModel.kt @@ -8,7 +8,7 @@ import com.example.domain.entity.profile.UserProfileEntity import com.example.domain.usecases.profile.GetUserProfileUseCase import com.example.tave.TaveApplication import com.example.tave.common.Constants -import com.example.tave.di.qualifier.IoDispatcher +import com.example.tave.di.IoDispatcher import dagger.hilt.android.lifecycle.HiltViewModel import kotlinx.coroutines.CoroutineDispatcher import kotlinx.coroutines.Job diff --git a/TAVE/app/src/main/java/com/example/tave/viewmodel/SendSMSViewModel.kt b/TAVE/app/src/main/java/com/example/tave/viewmodel/SendSMSViewModel.kt index 65d701a..d295dfc 100644 --- a/TAVE/app/src/main/java/com/example/tave/viewmodel/SendSMSViewModel.kt +++ b/TAVE/app/src/main/java/com/example/tave/viewmodel/SendSMSViewModel.kt @@ -5,8 +5,8 @@ import androidx.lifecycle.viewModelScope import com.example.domain.usecases.sms.SendSMSUseCase import com.example.tave.TaveApplication import com.example.tave.common.Constants -import com.example.tave.common.util.state.SendSMSCodeState -import com.example.tave.di.qualifier.IoDispatcher +import com.example.tave.util.state.SendSMSCodeState +import com.example.tave.di.IoDispatcher import dagger.hilt.android.lifecycle.HiltViewModel import kotlinx.coroutines.CoroutineDispatcher import kotlinx.coroutines.Job diff --git a/TAVE/data/src/main/java/com/example/data/constants/Constants.kt b/TAVE/data/src/main/java/com/example/data/constants/Constants.kt new file mode 100644 index 0000000..d0ade4a --- /dev/null +++ b/TAVE/data/src/main/java/com/example/data/constants/Constants.kt @@ -0,0 +1,15 @@ +package com.example.data.constants + +object Constants { + const val AUTHORIZATION_HEADER: String = "Authorization" + const val DELAY_TIME_MILLIS: Long = 2000L + const val FLOW_RETRY_MAX_ATTEMPTS: Int = 5 + + //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 TAVE_BASE_URL: String = "tave.kro.kr/" +} \ No newline at end of file diff --git a/TAVE/data/src/main/java/com/example/data/di/OkHttpModule.kt b/TAVE/data/src/main/java/com/example/data/di/OkHttpModule.kt new file mode 100644 index 0000000..f0c7f70 --- /dev/null +++ b/TAVE/data/src/main/java/com/example/data/di/OkHttpModule.kt @@ -0,0 +1,33 @@ +package com.example.data.di + +import dagger.Module +import dagger.Provides +import dagger.hilt.InstallIn +import dagger.hilt.components.SingletonComponent +import okhttp3.OkHttpClient +import java.util.concurrent.TimeUnit +import javax.net.ssl.SSLSocketFactory +import javax.net.ssl.TrustManagerFactory +import javax.net.ssl.X509TrustManager + +@Module +@InstallIn(SingletonComponent::class) +object OkHttpModule { + @Provides + fun provideHttpClient( + sslSocketFactory: SSLSocketFactory, + trustManagerFactory: TrustManagerFactory + ): OkHttpClient { + return OkHttpClient() + .newBuilder() + .connectTimeout(30, TimeUnit.SECONDS) + .callTimeout(30, TimeUnit.SECONDS) + .readTimeout(30, TimeUnit.SECONDS) + .writeTimeout(30, TimeUnit.SECONDS) + .sslSocketFactory( + sslSocketFactory, + trustManagerFactory.trustManagers[0] as X509TrustManager + ) + .build() + } +} \ No newline at end of file diff --git a/TAVE/app/src/main/java/com/example/tave/di/module/SSLSocketFactoryModule.kt b/TAVE/data/src/main/java/com/example/data/di/SSLSocketFactoryModule.kt similarity index 94% rename from TAVE/app/src/main/java/com/example/tave/di/module/SSLSocketFactoryModule.kt rename to TAVE/data/src/main/java/com/example/data/di/SSLSocketFactoryModule.kt index 8a8d311..c5c53c7 100644 --- a/TAVE/app/src/main/java/com/example/tave/di/module/SSLSocketFactoryModule.kt +++ b/TAVE/data/src/main/java/com/example/data/di/SSLSocketFactoryModule.kt @@ -1,8 +1,8 @@ -package com.example.tave.di.module +package com.example.data.di import android.content.Context -import com.example.tave.R -import com.example.tave.common.Constants +import com.example.data.R +import com.example.data.constants.Constants import dagger.Module import dagger.Provides import dagger.hilt.InstallIn @@ -26,7 +26,6 @@ import javax.net.ssl.TrustManagerFactory @InstallIn(SingletonComponent::class) object SSLSocketFactoryModule { @Provides - @Singleton fun provideCertification(@ApplicationContext context: Context): Certificate? { val certFactory: CertificateFactory = CertificateFactory.getInstance(Constants.ACCESS_CERT_TYPE) val certAuthInputStream: InputStream = context.resources.openRawResource(R.raw.certificate) @@ -44,7 +43,6 @@ object SSLSocketFactoryModule { } @Provides - @Singleton fun provideKeyStore(certification: Certificate?): KeyStore { val keyStoreType: String = KeyStore.getDefaultType() val keyStore: KeyStore = KeyStore.getInstance(keyStoreType) @@ -58,7 +56,6 @@ object SSLSocketFactoryModule { } @Provides - @Singleton fun provideTrustManagerFactory(keystore: KeyStore): TrustManagerFactory { val tmfAlgorithm: String = TrustManagerFactory.getDefaultAlgorithm() val tmFactory: TrustManagerFactory = TrustManagerFactory.getInstance(tmfAlgorithm) @@ -68,7 +65,6 @@ object SSLSocketFactoryModule { } @Provides - @Singleton fun provideSSLSocketFactory(trustManagerFactory: TrustManagerFactory): SSLSocketFactory { try { val sslContext: SSLContext = SSLContext.getInstance(Constants.SSL_PROTOCOL) diff --git a/TAVE/app/src/main/java/com/example/tave/di/module/TaveAPIModule.kt b/TAVE/data/src/main/java/com/example/data/di/TaveAPIModule.kt similarity index 79% rename from TAVE/app/src/main/java/com/example/tave/di/module/TaveAPIModule.kt rename to TAVE/data/src/main/java/com/example/data/di/TaveAPIModule.kt index f35ffa5..391ec1e 100644 --- a/TAVE/app/src/main/java/com/example/tave/di/module/TaveAPIModule.kt +++ b/TAVE/data/src/main/java/com/example/data/di/TaveAPIModule.kt @@ -1,9 +1,9 @@ -package com.example.tave.di.module +package com.example.data.di -import com.example.data.api.TaveAPIService +import com.example.data.constants.Constants +import com.example.data.remote.TaveAPIService import com.example.data.repositoryImpl.TaveAPIRepositoryImpl import com.example.domain.repository.TaveAPIRepository -import com.example.tave.BuildConfig import dagger.Module import dagger.Provides import dagger.hilt.InstallIn @@ -11,27 +11,23 @@ import dagger.hilt.components.SingletonComponent import okhttp3.OkHttpClient import retrofit2.Retrofit import retrofit2.converter.gson.GsonConverterFactory -import javax.inject.Singleton @Module @InstallIn(SingletonComponent::class) object TaveAPIModule { @Provides - @Singleton fun provideRetrofitClient(httpClient: OkHttpClient): Retrofit = Retrofit.Builder() - .baseUrl(BuildConfig.TAVE_API_URL) + .baseUrl(Constants.TAVE_BASE_URL) .client(httpClient) .addConverterFactory(GsonConverterFactory.create()) .build() @Provides - @Singleton fun provideAPIService(retrofit: Retrofit): TaveAPIService = retrofit.create(TaveAPIService::class.java) @Provides - @Singleton fun provideTaveApiRepoImpl(taveAPIService: TaveAPIService): TaveAPIRepository = TaveAPIRepositoryImpl(taveAPIService) } \ No newline at end of file diff --git a/TAVE/data/src/main/java/com/example/data/api/TaveAPIService.kt b/TAVE/data/src/main/java/com/example/data/remote/TaveAPIService.kt similarity index 98% rename from TAVE/data/src/main/java/com/example/data/api/TaveAPIService.kt rename to TAVE/data/src/main/java/com/example/data/remote/TaveAPIService.kt index ddddb81..df33692 100644 --- a/TAVE/data/src/main/java/com/example/data/api/TaveAPIService.kt +++ b/TAVE/data/src/main/java/com/example/data/remote/TaveAPIService.kt @@ -1,4 +1,4 @@ -package com.example.data.api +package com.example.data.remote import com.example.data.model.login.LogInBodyModel import com.example.data.model.login.ModifyPasswordModel diff --git a/TAVE/data/src/main/java/com/example/data/repositoryImpl/TaveAPIRepositoryImpl.kt b/TAVE/data/src/main/java/com/example/data/repositoryImpl/TaveAPIRepositoryImpl.kt index 2bfaf73..921f3ff 100644 --- a/TAVE/data/src/main/java/com/example/data/repositoryImpl/TaveAPIRepositoryImpl.kt +++ b/TAVE/data/src/main/java/com/example/data/repositoryImpl/TaveAPIRepositoryImpl.kt @@ -1,13 +1,13 @@ package com.example.data.repositoryImpl import com.example.data.BuildConfig -import com.example.data.api.TaveAPIService +import com.example.data.remote.TaveAPIService import com.example.data.model.login.LogInBodyModel import com.example.data.model.login.ModifyPasswordModel import com.example.data.model.notice.NoticeDetailModel import com.example.data.model.profile.UserProfileModel import com.example.data.model.schedule.ScheduleModel -import com.example.data.util.common.Constants +import com.example.data.constants.Constants import com.example.data.util.toLogInModelMapper import com.example.data.util.toNoticeDetailEntityListMapper import com.example.data.util.toNoticeDetailEntityMapper diff --git a/TAVE/data/src/main/java/com/example/data/util/common/Constants.kt b/TAVE/data/src/main/java/com/example/data/util/common/Constants.kt deleted file mode 100644 index 44e0004..0000000 --- a/TAVE/data/src/main/java/com/example/data/util/common/Constants.kt +++ /dev/null @@ -1,7 +0,0 @@ -package com.example.data.util.common - -object Constants { - const val AUTHORIZATION_HEADER: String = "Authorization" - const val DELAY_TIME_MILLIS: Long = 2000L - const val FLOW_RETRY_MAX_ATTEMPTS: Int = 5 -} \ No newline at end of file diff --git a/TAVE/domain/src/main/java/com/example/domain/util/Constants.kt b/TAVE/domain/src/main/java/com/example/domain/constants/Constants.kt similarity index 89% rename from TAVE/domain/src/main/java/com/example/domain/util/Constants.kt rename to TAVE/domain/src/main/java/com/example/domain/constants/Constants.kt index c5c740d..76ee586 100644 --- a/TAVE/domain/src/main/java/com/example/domain/util/Constants.kt +++ b/TAVE/domain/src/main/java/com/example/domain/constants/Constants.kt @@ -1,4 +1,4 @@ -package com.example.domain.util +package com.example.domain.constants object Constants { const val NOTICE_TYPE_SCHEDULE: String = "[뉴스] " diff --git a/TAVE/domain/src/main/java/com/example/domain/entity/notice/NoticeTypeMap.kt b/TAVE/domain/src/main/java/com/example/domain/entity/notice/NoticeTypeMap.kt index 1bbbbee..e2abdd4 100644 --- a/TAVE/domain/src/main/java/com/example/domain/entity/notice/NoticeTypeMap.kt +++ b/TAVE/domain/src/main/java/com/example/domain/entity/notice/NoticeTypeMap.kt @@ -1,10 +1,10 @@ package com.example.domain.entity.notice -import com.example.domain.util.Constants.NOTICE_TYPE_GENERAL -import com.example.domain.util.Constants.NOTICE_TYPE_NEWS -import com.example.domain.util.Constants.NOTICE_TYPE_REVIEW -import com.example.domain.util.Constants.NOTICE_TYPE_SCHEDULE -import com.example.domain.util.Constants.NOTICE_TYPE_TECH +import com.example.domain.constants.Constants.NOTICE_TYPE_GENERAL +import com.example.domain.constants.Constants.NOTICE_TYPE_NEWS +import com.example.domain.constants.Constants.NOTICE_TYPE_REVIEW +import com.example.domain.constants.Constants.NOTICE_TYPE_SCHEDULE +import com.example.domain.constants.Constants.NOTICE_TYPE_TECH val noticeTypeMap = mapOf( NoticeTypeEnumClass.SCHEDULE.name to NOTICE_TYPE_SCHEDULE,