Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
110 commits
Select commit Hold shift + click to select a range
c030dd3
1.1.2버전 develop -> release 머지합니다 (#168)
LeeYongIn0517 Oct 13, 2024
44e2126
Merge branch 'release' of https://github.com/HMOAA/HMOA_ANDROID into …
LeeYongIn0517 Oct 13, 2024
9feb75f
Delete
LeeYongIn0517 Oct 13, 2024
a48f754
Delete
LeeYongIn0517 Oct 13, 2024
066804e
Delete
LeeYongIn0517 Oct 13, 2024
7dc9e0e
Release 1.1.2 버전 업로드 - 커밋 누락된 부분 추가 푸시 (#169)
LeeYongIn0517 Oct 14, 2024
eecba5c
HotFix: 카카오 sdk 버전 업그레이드 (#170) (#171)
LeeYongIn0517 Oct 15, 2024
3fc6571
v1.1.3 업데이트 수정 (#175)
LeeYongIn0517 Oct 15, 2024
689234e
v1.1.3 업데이트 (#172)
LeeYongIn0517 Oct 15, 2024
96ace7a
동기화 (#178)
uselessnaming Oct 30, 2024
dafd989
Chore: 데이터백업설정 변경
LeeYongIn0517 Nov 4, 2024
520fbe0
Chore: 테스트 버전 업그레이드 25->27
LeeYongIn0517 Nov 4, 2024
33d04e6
Fix: 주소지 추가 오류 수정 (#180)
uselessnaming Nov 5, 2024
3768957
chore: gitignore 파일 추가
LeeYongIn0517 Nov 6, 2024
6a5f790
chore: 주석해제
LeeYongIn0517 Nov 6, 2024
3c76629
Feat: 상품 구매 여부 확인 다이얼로그 추가
LeeYongIn0517 Nov 6, 2024
9e65cfe
Feat: Hbti 설문 양옆 스크롤 기능 추가
LeeYongIn0517 Nov 6, 2024
fc4893e
Delete: 주석 삭제
LeeYongIn0517 Nov 6, 2024
62698c2
Fix: LazyColumn으로 변경 후 스크롤위치 초기화 적용
LeeYongIn0517 Nov 6, 2024
ad96af9
Feature/hbti shj (#182)
uselessnaming Nov 12, 2024
8ed4112
Refactor: isNoteSelectedData상태 업데이트 함수 수정
LeeYongIn0517 Nov 13, 2024
1dc9e41
fix: Hbti ProgressBar 리컴포지션 최적화 및 UI 버그 개선
LeeYongIn0517 Nov 13, 2024
1cace44
Design: Hbti 향료 선택화면 디테일 변경
LeeYongIn0517 Nov 13, 2024
124959d
Fix: nullable 처리 누락 수정
LeeYongIn0517 Nov 13, 2024
caacc79
Merge commit 'ad96af9dba4682f44e701d7cdaabb5b31a8d71b6'
LeeYongIn0517 Nov 14, 2024
9d04ab6
Feature/hbti 버그 및 HBTI UI 수정 (#183)
LeeYongIn0517 Nov 15, 2024
bb08512
Feat: 향료주문 과정 설명 화면 api 적용
LeeYongIn0517 Nov 19, 2024
2b4ffc0
Feat: 향료주문 과정 설명 화면 네비게이션 추가
LeeYongIn0517 Nov 19, 2024
02db089
Feat: 가격대 향수추천 결과 화면 추가
LeeYongIn0517 Nov 19, 2024
284607a
Test: 향수 추천결과 화면 UI/단위 테스트 작성
LeeYongIn0517 Nov 19, 2024
4296f93
Test: 뷰모델 변경사항 반영한 테스트 수정
LeeYongIn0517 Nov 19, 2024
81d2d72
Fix: 브랜드 이미지 삭제 반영
LeeYongIn0517 Nov 19, 2024
706377a
Design: 상단 바 패딩 불일치 수정
LeeYongIn0517 Nov 19, 2024
7a7fe0b
Merge commit '9d04ab64d8d9b6c162dca26db501a7aa072cfb1a'
LeeYongIn0517 Nov 19, 2024
d308d8e
Fix: 향수 화면의 브랜드 사진 삭제 반영
LeeYongIn0517 Nov 19, 2024
fe16e40
Feature/hbti HBTI 디자인 최종 수정 반영 (#184)
LeeYongIn0517 Nov 19, 2024
b724f3b
Design: 디자인 추가 수정
LeeYongIn0517 Nov 19, 2024
2927c68
Chore: 버전 코드 수정 27->28
LeeYongIn0517 Nov 19, 2024
54d3185
Design: 버튼 크기 작아지는 현상 수정
LeeYongIn0517 Nov 19, 2024
7178580
Feature/hbti 디자인 수정 (#185)
LeeYongIn0517 Nov 19, 2024
473a19b
Feature/hbti shj 마지막 merge (#186)
uselessnaming Nov 21, 2024
23072c9
Merge commit '473a19b92871c8b6414e4c0578430fde17027ed2'
LeeYongIn0517 Nov 21, 2024
7e58fce
Chore: 버전코드 변경 28->30
LeeYongIn0517 Nov 22, 2024
d23f0cb
Merge commit '85f22d20ee326c5194b7c8ac4864899f2e830064'
LeeYongIn0517 Nov 23, 2024
b81b182
Merge commit '3fc657177ea7fcf0d8e0f4682bb259e3471c698d'
LeeYongIn0517 Nov 26, 2024
a6f43d1
Merge commit '689234e6e6f587bcfbab8c65d25c2fcd79656418'
LeeYongIn0517 Nov 26, 2024
71e93a9
Feat: SearchTopBar Debounce 적용
LeeYongIn0517 Dec 1, 2024
c1b7248
Fix: Debounce 필터링 조건 변경
LeeYongIn0517 Dec 1, 2024
b9ec5e4
Design: 홈 글씨 align 수정
LeeYongIn0517 Dec 1, 2024
9977649
Design: 향수 이미지 패딩 추가
LeeYongIn0517 Dec 1, 2024
455fd1e
Chore: 버전코드 변경 30->31
LeeYongIn0517 Dec 1, 2024
b074256
HotFix: nullable 처리 속성 추가
LeeYongIn0517 Dec 3, 2024
14962f1
Chore: 1.2.0 버전으로 업데이트 표기 변경
LeeYongIn0517 Dec 6, 2024
3eca334
Hotfix/1.2.0 (#190)
LeeYongIn0517 Dec 6, 2024
f6e2d19
Merge commit '3eca334fd3ee3fe344dadff2169582af41f012fe' into hotfix/d…
LeeYongIn0517 Dec 10, 2024
e3d76aa
Hotfix/1.2.0 (#193)
LeeYongIn0517 Dec 10, 2024
e2de217
Chore: compiler-metrics 옵션 추가
LeeYongIn0517 Dec 14, 2024
0898f15
Chore: kotlinx-collections-immutable 추가
LeeYongIn0517 Dec 14, 2024
5131f57
Docs: 임시 주석처리
LeeYongIn0517 Dec 14, 2024
12da75e
Chore: JUnit 의존성 누락된 부분 추가
LeeYongIn0517 Dec 14, 2024
08b8330
Docs: 임시 주석처리
LeeYongIn0517 Dec 14, 2024
46dd3c4
Refactor: 데이터 클래스 및 파라미터 안정성 보완
LeeYongIn0517 Dec 14, 2024
f487dac
Chore: .kotlin 빌드파일 gitignore 추가
LeeYongIn0517 Dec 14, 2024
f9d5fc3
Chore: kotlin 버전 업그레이드 1.9.0->1.9.21
LeeYongIn0517 Dec 14, 2024
154fab6
Chore: Immutable컬렉션 및 stable marker 라이브러리 추가
LeeYongIn0517 Dec 14, 2024
246eaf4
Refactor: 데이터 클래스 안정성 개선 및 리컴포지션 최적화
LeeYongIn0517 Dec 14, 2024
12ba5cd
Merge commit '0a1600e176d082cf483ddfd2eee772fcc813e20c' into migrate/ksp
LeeYongIn0517 Dec 15, 2024
f49e04a
Fix: 리컴포지션 최적화 오류 수정
LeeYongIn0517 Dec 18, 2024
5e6018a
Chore: compose-stable-marker 라이브러리 제거
LeeYongIn0517 Dec 18, 2024
a27e69e
Chore: immutable collection 제거
LeeYongIn0517 Dec 18, 2024
4b7715f
Merge: hotifx/design(1.2.0)
LeeYongIn0517 Dec 18, 2024
74c1540
Merge commit 'aaa1c8e27d03b246e11090eef9e62d1ee1a87016' into migrate/ksp
LeeYongIn0517 Dec 18, 2024
d7c2605
Merge commit '92f65bb1133ac045b938625cfff4b83a5dcbe53b' into migrate/ksp
LeeYongIn0517 Dec 21, 2024
cd06086
Refactor: 폴더 생성 및 이동
LeeYongIn0517 Dec 21, 2024
4070db6
Chore: google inapp update 라이브러리 추가
LeeYongIn0517 Dec 21, 2024
d95d32a
Chore: 버전코드 변경
LeeYongIn0517 Dec 22, 2024
2e84ca8
Feat: 인앱 업데이트 기능 추가
LeeYongIn0517 Dec 22, 2024
f9700b2
Refactor: 기존 PagingSource -> 제네릭 PerfumePagingSource로 리팩터링
LeeYongIn0517 Dec 24, 2024
0a1d9b4
Refactor: 향수 별 댓글 페이징소스 파일 통합
LeeYongIn0517 Dec 26, 2024
91025ae
Merge commit '5457f459567259a3ba72afab0ee61c158168ee64' into optimize
LeeYongIn0517 Dec 26, 2024
c1d0363
Chore: 버전 업데이트
LeeYongIn0517 Dec 26, 2024
7664306
Refactor: LazyColumn 추가
LeeYongIn0517 Jan 6, 2025
41652db
Merge commit '44e5896e6b5f07c50a7a8ad60df09ee65ee05693' into 1.3.0
LeeYongIn0517 Jan 6, 2025
a276cb7
Chore: 컴포지션 리포트 컴파일 옵션 추가
LeeYongIn0517 Jan 7, 2025
b0c2c82
Fix: SearchTopBar 검색어삭제 기능 수정
LeeYongIn0517 Jan 7, 2025
fe0576b
Refactor: 리컴포지션 최소화 및 상태관리 수정
LeeYongIn0517 Jan 7, 2025
b6a19a5
Fix: delete fcm API 반복 호출 현상 수정
LeeYongIn0517 Jan 7, 2025
847091b
Merge commit 'e3d76aab40d2b058afedba89ec3107fd2aa257bc' into optimize
LeeYongIn0517 Jan 9, 2025
8662827
Merge branch '1.3.0' of https://github.com/HMOAA/HMOA_ANDROID into op…
LeeYongIn0517 Jan 9, 2025
bd46d86
Chore: gradle 패키지 설정 변경
LeeYongIn0517 Jan 14, 2025
af43fc0
Refactor: WrapContent 커스텀 뷰 생성
LeeYongIn0517 Jan 14, 2025
d79c2b7
Chore: mockito-inline 라이브러리 버전 오류 수정
LeeYongIn0517 Jan 15, 2025
7a5948f
Chore: compilerOption 추가
LeeYongIn0517 Jan 15, 2025
3a62f96
Refactor: LazyColumn 적용 및 Horizontal 키값 추가
LeeYongIn0517 Jan 16, 2025
1dd90e3
Chore: strong skipping mode 컴파일 옵션 추가
LeeYongIn0517 Jan 16, 2025
4f25bad
Feat: @Stable 어노테이션 추가 및 코드 정리
LeeYongIn0517 Jan 16, 2025
99ef61f
Chore: .trace 파일 추가
LeeYongIn0517 Jan 16, 2025
abcc2ed
Chore: 컴파일러 옵션 및 android 라이브러리 추가
LeeYongIn0517 Jan 16, 2025
bc714f3
Fix: Snackbar view 생성 및 적용
LeeYongIn0517 Jan 16, 2025
cf42e19
Fix: 헤더토큰 발급 로직 변경
LeeYongIn0517 Jan 16, 2025
333438c
Chore: ConstraintLayout 라이브러리 버전관리 추가
LeeYongIn0517 Jan 16, 2025
db64a21
Refactor: screen 폴더 생성 및 이동
LeeYongIn0517 Jan 16, 2025
35d981f
Delete: 주석 삭제
LeeYongIn0517 Jan 16, 2025
0896311
Refactor: MVI 패턴 적용
LeeYongIn0517 Jan 17, 2025
a2e43fc
Merge commit '0781c329b201b5a2fe1919465d6b7aaba7bcabef' into optimize
LeeYongIn0517 Jan 17, 2025
2b0f050
Rename
LeeYongIn0517 Jan 17, 2025
50efd49
Move: contract 폴더 생성 및 이름변경
LeeYongIn0517 Jan 17, 2025
092ed99
Refactor: PickPersonalInfo기능 MVI 패턴 적용
LeeYongIn0517 Jan 21, 2025
00baf1a
Refactor: RadioButtonList LazyRow 적용
LeeYongIn0517 Jan 22, 2025
e149cf7
Refactor: PickPersonalInfo 페이지 MVI 패턴 적용
LeeYongIn0517 Jan 22, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -18,3 +18,4 @@ deploymentTargetDropDown.xml
/.idea/other.xml
/.idea/deploymentTargetSelector.xml
.kotlin/
*.trace
13 changes: 13 additions & 0 deletions .idea/androidTestResultsUserPreferences.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

19 changes: 17 additions & 2 deletions .idea/deploymentTargetSelector.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

35 changes: 34 additions & 1 deletion .idea/other.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

20 changes: 20 additions & 0 deletions app/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,25 @@ android {
excludes += "META-INF/gradle/incremental.annotation.processors"
}
}

tasks.withType<org.jetbrains.kotlin.gradle.tasks.KotlinCompile>() {
compilerOptions.freeCompilerArgs.addAll(
"-P",
"plugin:androidx.compose.compiler.plugins.kotlin:metricsDestination=${project.buildDir.absolutePath}/compose_metrics",
)
}
tasks.withType<org.jetbrains.kotlin.gradle.tasks.KotlinCompile>() {
compilerOptions.freeCompilerArgs.addAll(
"-P",
"plugin:androidx.compose.compiler.plugins.kotlin:reportsDestination=${project.buildDir.absolutePath}/compose_reports",
)
}
tasks.withType<org.jetbrains.kotlin.gradle.tasks.KotlinCompile>() {
compilerOptions.freeCompilerArgs.addAll(
"-P",
"plugin:androidx.compose.compiler.plugins.kotlin:experimentalStrongSkipping=true",
)
}
}


Expand All @@ -92,6 +111,7 @@ dependencies {

implementation(libs.app.update.ktx)
implementation(libs.bootpay) //부트페이
implementation(libs.constraintlayout)
implementation(libs.bundles.kakao.login) // kakao
implementation(libs.bundles.hilt) // hilt
kapt(libs.hilt.android.compiler)
Expand Down
3 changes: 1 addition & 2 deletions app/src/main/java/com/hmoa/app/App.kt
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,5 @@ class App : Application() {
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO)
super.onCreate()
KakaoSdk.init(this, BuildConfig.NATIVE_APP_KEY)

}
}
}
13 changes: 3 additions & 10 deletions app/src/main/java/com/hmoa/app/view/MainActivity.kt
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import android.net.Uri
import android.os.Build
import android.os.Bundle
import android.util.Log
import android.widget.ImageView
import androidx.activity.compose.setContent
import androidx.activity.result.ActivityResult
import androidx.activity.result.contract.ActivityResultContracts
Expand Down Expand Up @@ -44,10 +45,10 @@ import com.google.android.play.core.install.model.InstallStatus
import com.google.android.play.core.install.model.UpdateAvailability
import com.google.firebase.messaging.FirebaseMessaging
import com.hmoa.app.BuildConfig
import com.hmoa.app.R
import com.hmoa.app.navigation.SetUpNavGraph
import com.hmoa.app.viewmodel.AppViewModel
import com.hmoa.core_common.permissions
import com.hmoa.core_designsystem.BottomScreen
import com.hmoa.core_designsystem.component.HomeTopBar
import com.hmoa.core_designsystem.component.MainBottomBar
import com.hmoa.core_domain.entity.navigation.*
Expand Down Expand Up @@ -86,13 +87,6 @@ class MainActivity : AppCompatActivity() {
MagazineRoute.Magazine.name
)

private val needTopBarScreens = HomeRoute.Home.name
private val bottomNav = listOf(
BottomScreen.Home.name,
BottomScreen.HPedia.name,
BottomScreen.Magazine.name,
BottomScreen.MyPage.name
)
private lateinit var appUpdateManager: AppUpdateManager
private val activityResultLauncher =
registerForActivityResult(ActivityResultContracts.StartIntentSenderForResult()) { result: ActivityResult ->
Expand All @@ -102,7 +96,7 @@ class MainActivity : AppCompatActivity() {
// Displays the snackbar notification and call to action.
fun popupSnackbarForCompleteUpdate() {
Snackbar.make(
findViewById(com.hmoa.core_designsystem.R.drawable.ic_fab),
findViewById<ImageView>(R.id.snackbar),
"새로운 업데이트 다운로드가 완료되었습니다.",
Snackbar.LENGTH_INDEFINITE
).apply {
Expand Down Expand Up @@ -180,7 +174,6 @@ class MainActivity : AppCompatActivity() {

appUpdateManager = AppUpdateManagerFactory.create(this)
checkImmediateUpdateAvailability()

requestNotificationPermission()
BootpayAnalytics.init(this, BuildConfig.BOOTPAY_APPLICATION_ID)

Expand Down
18 changes: 18 additions & 0 deletions app/src/main/res/layout/update_image_view.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/view"
tools:context=".view.MainActivity">

<Button
android:text="업데이트 완료됨"
android:layout_width="0dp"
android:layout_height="wrap_content" android:id="@+id/snackbar"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintBottom_toBottomOf="parent" android:layout_marginEnd="16dp"
android:layout_marginStart="16dp" android:backgroundTint="@color/material_dynamic_neutral40"
android:textColor="@color/white" android:textAlignment="viewStart" android:enabled="false"/>
</androidx.constraintlayout.widget.ConstraintLayout>
3 changes: 2 additions & 1 deletion core-common/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,8 @@ dependencies {
implementation(project(":core-model"))

implementation(libs.bundles.basic)
implementation(libs.lifecycle.viewmodel.ktx)
androidTestImplementation("androidx.test.ext:junit:1.1.5")
androidTestImplementation("androidx.test.espresso:espresso-core:3.5.1")
testImplementation("junit:junit:4.13.2")
}
}
59 changes: 59 additions & 0 deletions core-common/src/main/java/com/hmoa/core_common/ui/BaseViewModel.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
package com.hmoa.core_common.ui

import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import com.hmoa.core_common.ui.contract.UiEffect
import com.hmoa.core_common.ui.contract.UiEvent
import com.hmoa.core_common.ui.contract.UiState
import kotlinx.coroutines.channels.Channel
import kotlinx.coroutines.flow.*
import kotlinx.coroutines.launch

abstract class BaseViewModel<Event : UiEvent, State : UiState, Effect : UiEffect> : ViewModel() {

private val initialState: State by lazy { createInitialState() }
abstract fun createInitialState(): State

val currentState: State
get() = uiState.value

private val _uiState: MutableStateFlow<State> = MutableStateFlow(initialState)
val uiState = _uiState.asStateFlow()

private val _event: MutableSharedFlow<Event> = MutableSharedFlow()
val event = _event.asSharedFlow()

private val _effects: Channel<Effect> = Channel()
val effects = _effects.receiveAsFlow()

init {
subscribeEvents()
}

protected fun subscribeEvents() {
viewModelScope.launch {
event.collect {
handleEvent(it)
}
}
}

abstract fun handleEvent(event: Event)

protected fun setEvent(event: Event) {
val newEvent = event
viewModelScope.launch { _event.emit(newEvent) }
}

protected fun setState(reduce: State.() -> State) {
_uiState.update { it.reduce() }
}

protected fun setEffect(vararg builder: Effect) {
viewModelScope.launch {
for (effectValue in builder) {
_effects.send(effectValue)
}
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
package com.hmoa.core_common.ui.contract

interface UiState
interface UiEvent
interface UiEffect
Original file line number Diff line number Diff line change
Expand Up @@ -10,11 +10,13 @@ import androidx.datastore.preferences.core.emptyPreferences
import androidx.datastore.preferences.core.stringPreferencesKey
import androidx.datastore.preferences.preferencesDataStore
import dagger.hilt.android.qualifiers.ApplicationContext
import kotlinx.coroutines.*
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.SupervisorJob
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.filterNotNull
import kotlinx.coroutines.flow.first
import kotlinx.coroutines.flow.map
import kotlinx.coroutines.runBlocking
import javax.inject.Inject

val Context.datastore: DataStore<Preferences> by preferencesDataStore(
Expand All @@ -38,15 +40,8 @@ class TokenManagerImpl @Inject constructor(@ApplicationContext context: Context)
}

override fun getAuthTokenForHeader(): String {
val token = runBlocking {
try {
withTimeout(2000L) {
getAuthToken().filterNotNull().first()
}
} catch (e: TimeoutCancellationException) {
Log.d("TokenManagerImpl", "getAuthTokenForHeader: Timeout occurred, returning null.")
null
}
val token: String? = runBlocking {
getAuthToken().first()
}
if (token != null) {
Log.d("TokenManagerImpl", "getAuthTokenForHeader: AuthToken(accessToken):${token}")
Expand Down Expand Up @@ -147,4 +142,4 @@ class TokenManagerImpl @Inject constructor(@ApplicationContext context: Context)
preferences.remove(FCM_TOKEN_KEY)
}
}
}
}
Loading
Loading