Skip to content

Commit 7099e42

Browse files
authored
Merge pull request #168 from YAPP-Github/BOOK-259-chore/#141
chore: README 작성
2 parents 993f756 + 09933a9 commit 7099e42

File tree

6 files changed

+153
-7
lines changed

6 files changed

+153
-7
lines changed

README.md

Lines changed: 148 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,148 @@
1+
# Reed - 문장과 감정을 함께 담는 독서 기록
2+
3+
[![Kotlin](https://img.shields.io/badge/Kotlin-2.2.0-blue.svg)](https://kotlinlang.org)
4+
[![Gradle](https://img.shields.io/badge/gradle-8.11.1-green.svg)](https://gradle.org/)
5+
[![Android Studio](https://img.shields.io/badge/Android%20Studio-2025.1.2%20%28Narwhal%29-green)](https://developer.android.com/studio)
6+
[![minSdkVersion](https://img.shields.io/badge/minSdkVersion-28-red)](https://developer.android.com/distribute/best-practices/develop/target-sdk)
7+
[![targetSdkVersion](https://img.shields.io/badge/targetSdkVersion-35-orange)](https://developer.android.com/distribute/best-practices/develop/target-sdk)
8+
![CodeRabbit Pull Request Reviews](https://img.shields.io/coderabbit/prs/github/YAPP-Github/Reed-Android?utm_source=oss&utm_medium=github&utm_campaign=YAPP-Github%2FReed-Android&labelColor=171717&color=FF570A&link=https%3A%2F%2Fcoderabbit.ai&label=CodeRabbit+Reviews)
9+
<br/>
10+
<img width="1024" height="500" alt="reed_graphic" src="https://github.com/user-attachments/assets/357cab12-db36-4de0-8fad-664abc5df8c8" />
11+
12+
<a href="https://play.google.com/store/apps/details?id=com.ninecraft.booket&hl=ko">
13+
<img src="https://github.com/user-attachments/assets/8699ffd3-3399-45eb-9e2b-88818ba62091" width="200" />
14+
</a>
15+
16+
<p align="center">
17+
<img src="https://github.com/user-attachments/assets/f31d5681-bbf0-4de4-93a6-37a2adf54df7" width="30%"/>
18+
<img src="https://github.com/user-attachments/assets/db92e159-091d-425b-8cc2-2324d4191463" width="30%"/>
19+
<img src="https://github.com/user-attachments/assets/5fd3f726-f493-4850-9d99-3933815dcd8b" width="30%"/>
20+
</p>
21+
<p align="center">
22+
<img src="https://github.com/user-attachments/assets/bb7e3281-c7e4-453d-a921-cc4e9a051434" width="30%"/>
23+
<img src="https://github.com/user-attachments/assets/7c211781-58e5-4413-9f20-f92b1d0c8f24" width="30%"/>
24+
</p>
25+
26+
## Features
27+
|| 도서 검색 및 등록 | 내서재 |
28+
|:---:|:---:|:---:|
29+
| <img width="230" alt="" src="https://github.com/user-attachments/assets/657e14e1-e578-4d7c-8c38-3591d61b1429" /> | <img width="230" alt="도서 검색 및 등록" src="https://github.com/user-attachments/assets/7a166abf-1160-4cdf-8ec5-f8071d7f0891" /> | <img width="230" alt="내서재" src="https://github.com/user-attachments/assets/d4679cd4-0188-4763-9adc-e210bef44ef0" /> |
30+
31+
| OCR | 기록 등록 | 도서 & 기록 상세 |
32+
|:---:|:---:|:---:|
33+
| <img width="230" alt="OCR" src="https://github.com/user-attachments/assets/8861b7ea-a0f6-4e26-91be-c15450259752" /> | <img width="230" alt="기록 등록" src="https://github.com/user-attachments/assets/32774861-c9fa-439c-a889-ccbc842eb528" /> | <img width="230" alt="도서 & 기록 상세" src="https://github.com/user-attachments/assets/34304a37-7de1-4876-bd55-f041077b3266" /> |
34+
35+
| 기록 카드 공유 |
36+
|:---:|
37+
| <img width="230" alt="기록 카드 공유" src="https://github.com/user-attachments/assets/4c01a5ed-e5a2-4be4-b950-96a457c87ad7" /> |
38+
39+
## TroubleShooting
40+
- [[Compose] M3 ModalBottomSheet 드래그(터치 이벤트) 막는 법](https://velog.io/@mraz3068/Compose-M3-ModalBottomSheet-Drag-Disabled)
41+
- [Circuit 찍먹해보기(부제: Circuit 희망편)](https://speakerdeck.com/easyhooon/circuit-jjigmeoghaebogi-buje-circuit-hyimangpyeon)
42+
- [Circuit 찍먹해보기(부제: Circuit 절망편)](https://speakerdeck.com/easyhooon/circuit-jjigmeoghaebogi-buje-circuit-jeolmangpyeon)
43+
- [Jetpack Compose에서 CameraX + MLKit으로 OCR을 구현해보자](https://velog.io/@syoon513/Jetpack-Compose%EC%97%90%EC%84%9C-CameraX-MLKit%EC%9C%BC%EB%A1%9C-OCR%EC%9D%84-%EA%B5%AC%ED%98%84%ED%95%B4%EB%B3%B4%EC%9E%90)
44+
- [[Android] 일회성 이벤트를 StateFlow, Compose의 State로 처리할 때 주의해야할 점](https://velog.io/@mraz3068/Handle-One-Time-Event-As-State)
45+
- [Circuit Navigation 사용 시 feature 모듈간의 참조는 어떻게 해결했을까?](https://velog.io/@syoon513/Circuit-Navigation-%EC%82%AC%EC%9A%A9-%EC%8B%9C-feature-%EB%AA%A8%EB%93%88%EA%B0%84-%EC%88%9C%ED%99%98-%EC%B0%B8%EC%A1%B0%EB%8A%94-%EC%96%B4%EB%96%BB%EA%B2%8C-%ED%95%B4%EA%B2%B0%ED%96%88%EC%9D%84%EA%B9%8C)
46+
- [Coroutine 에러 처리 패턴: 여러 API 호출을 한 번에 성공/실패 판정하기](https://velog.io/@syoon513/Coroutine-%EC%98%88%EC%99%B8-%EC%B2%98%EB%A6%AC)
47+
- [[Circuit] ImpressionEffect](https://velog.io/@mraz3068/Circuit-ImpressionEffect)
48+
- [Coroutine CancellationException 따로 처리해야하는 케이스](https://velog.io/@mraz3068/Coroutine-CancellationException-UseCase)
49+
50+
## Development
51+
52+
### Required
53+
54+
- IDE : Android Studio 최신 버전
55+
- JDK : Java 17을 실행할 수 있는 JDK
56+
- (권장) Android Studio 설치 시 Embedded 된 JDK (Open JDK)
57+
- Java 17을 사용하는 JDK (Open JDK, AdoptOpenJDK, GraalVM)
58+
- Kotlin Language : 2.2.0
59+
60+
### Language
61+
62+
- Kotlin
63+
64+
### Libraries
65+
66+
- AndroidX
67+
- Activity Compose
68+
- Core
69+
- DataStore
70+
- StartUp
71+
- Splash
72+
- CameraX
73+
74+
- Kotlin Libraries (Coroutine, Serialization, Immutable Collection)
75+
- Compose
76+
- Material3
77+
78+
- [Circuit](https://github.com/slackhq/circuit)
79+
- ~~Google ML Kit~~ Google Cloud Vision
80+
- Dagger Hilt
81+
- Retrofit, OkHttp3
82+
- Lottie-Compose
83+
- Firebase(Analytics, Crashlytics, Remote Config)
84+
- Kakao-Auth
85+
- [Logger](https://github.com/orhanobut/logger)
86+
- [Compose-Stable-Marker](https://github.com/skydoves/compose-stable-marker)
87+
- [Landscapist](https://github.com/skydoves/landscapist), Coil-Compose
88+
- [ComposeExtensions](https://github.com/taehwandev/ComposeExtensions)
89+
- [compose-effects](https://github.com/skydoves/compose-effects)
90+
- [compose-shadow](https://github.com/adamglin0/compose-shadow)
91+
92+
#### Test & Code analysis
93+
94+
- Ktlint
95+
- Detekt
96+
97+
#### Gradle Dependency
98+
99+
- Gradle Version Catalog
100+
101+
## Architecture
102+
- Android App Architecture
103+
- MVI
104+
105+
## Developers
106+
107+
|Android|Android|
108+
|:---:|:---:|
109+
|[이지훈](https://github.com/easyhooon)|[이서윤](https://github.com/seoyoon513)|
110+
|<img width="144" src="https://github.com/user-attachments/assets/7e54768a-ce44-421d-8c03-9df7d0492855">|<img width="144" src="https://github.com/user-attachments/assets/a6cea688-cf9b-41ad-a3a0-9a0c11775fa2">|
111+
112+
## Module
113+
<img width="1631" height="719" alt="image" src="https://github.com/user-attachments/assets/f6a26dcd-761a-4dab-ae3f-a32e87eb423b" />
114+
115+
## Package Structure
116+
```
117+
├── app
118+
│   └── application
119+
├── build-logic
120+
├── core
121+
│   ├── common
122+
│   ├── data-api
123+
│   ├── data-impl
124+
│   ├── datastore-api
125+
│   ├── datastore-impl
126+
│   ├── designsystem
127+
│   ├── model
128+
│   ├── network
129+
│   ├── ocr
130+
│   └── ui
131+
├── feature
132+
│   ├── detail
133+
│   ├── edit
134+
│   ├── home
135+
│   ├── library
136+
│   ├── login
137+
│   ├── main
138+
│   ├── onboarding
139+
│   ├── record
140+
│   ├── screens
141+
│   ├── settings
142+
│   ├── splash
143+
│   └── webview
144+
├── gradle
145+
   └── libs.versions.toml
146+
147+
```
148+
<br/>

feature/detail/src/main/kotlin/com/ninecraft/booket/feature/detail/book/BookDetailPresenter.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package com.ninecraft.booket.feature.detail.book
22

33
import androidx.compose.runtime.Composable
4-
import androidx.compose.runtime.LaunchedEffect
54
import androidx.compose.runtime.getValue
65
import androidx.compose.runtime.mutableIntStateOf
76
import androidx.compose.runtime.mutableStateOf
@@ -25,6 +24,7 @@ import com.ninecraft.booket.feature.screens.RecordScreen
2524
import com.ninecraft.booket.feature.screens.arguments.RecordEditArgs
2625
import com.ninecraft.booket.feature.screens.extensions.delayedGoTo
2726
import com.orhanobut.logger.Logger
27+
import com.skydoves.compose.effects.RememberedEffect
2828
import com.slack.circuit.codegen.annotations.CircuitInject
2929
import com.slack.circuit.retained.rememberRetained
3030
import com.slack.circuit.runtime.Navigator
@@ -241,7 +241,7 @@ class BookDetailPresenter @AssistedInject constructor(
241241
}
242242
}
243243

244-
LaunchedEffect(Unit) {
244+
RememberedEffect(Unit) {
245245
initialLoad()
246246
}
247247

feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/osslicenses/OssLicensesPresenter.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ class OssLicensesPresenter @AssistedInject constructor(
1717
override fun present(): OssLicensesUiState {
1818
fun handleEvent(event: OssLicensesUiEvent) {
1919
when (event) {
20-
is OssLicensesUiEvent.OnBackClicked -> {
20+
is OssLicensesUiEvent.OnBackClick -> {
2121
navigator.pop()
2222
}
2323
}

feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/osslicenses/OssLicensesUi.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ internal fun OssLicenses(
7171
ReedBackTopAppBar(
7272
title = stringResource(R.string.oss_licenses_title),
7373
onBackClick = {
74-
state.eventSink(OssLicensesUiEvent.OnBackClicked)
74+
state.eventSink(OssLicensesUiEvent.OnBackClick)
7575
},
7676
)
7777
LazyColumn {

feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/osslicenses/OssLicensesUiState.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,5 +8,5 @@ data class OssLicensesUiState(
88
) : CircuitUiState
99

1010
sealed interface OssLicensesUiEvent : CircuitUiEvent {
11-
data object OnBackClicked : OssLicensesUiEvent
11+
data object OnBackClick : OssLicensesUiEvent
1212
}

gradle/libs.versions.toml

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@ android-gradle-plugin = "8.9.3"
1212

1313
## AndroidX
1414
androidx-core = "1.16.0"
15-
androidx-lifecycle = "2.9.2"
1615
androidx-activity-compose = "1.10.1"
1716
androidx-startup = "1.2.0"
1817
androidx-splash = "1.0.1"
@@ -89,7 +88,6 @@ kotlin-gradle-plugin = { group = "org.jetbrains.kotlin", name = "kotlin-gradle-p
8988
compose-compiler-gradle-plugin = { group = "org.jetbrains.kotlin", name = "compose-compiler-gradle-plugin", version.ref = "kotlin" }
9089

9190
androidx-core-ktx = { group = "androidx.core", name = "core-ktx", version.ref = "androidx-core" }
92-
androidx-lifecycle-runtime-ktx = { group = "androidx.lifecycle", name = "lifecycle-runtime-ktx", version.ref = "androidx-lifecycle" }
9391
androidx-activity-compose = { group = "androidx.activity", name = "activity-compose", version.ref = "androidx-activity-compose" }
9492
androidx-splash = { group = "androidx.core", name = "core-splashscreen", version.ref = "androidx-splash" }
9593
androidx-startup = { group = "androidx.startup", name = "startup-runtime", version.ref = "androidx-startup" }

0 commit comments

Comments
 (0)