Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
16 commits
Select commit Hold shift + click to select a range
418a26e
chore: update dependencies for Navigation 3 and target SDK version
Iwillbeagood Feb 22, 2026
41ea89a
fix: Route์— NavKey ์„ค์ •
Iwillbeagood Feb 22, 2026
e27226d
fix: RouteStack์„ ํ†ตํ•œ ์Šคํƒ ๊ด€๋ฆฌ๋กœ ๋ณ€๊ฒฝ
Iwillbeagood Feb 22, 2026
238521e
fix: ๋„ค๋น„๊ฒŒ์ด์…˜ ๋กœ์ง ๊ฐœ์„  ๋ฐ ๋ถˆํ•„์š”ํ•œ ์ฝ”๋“œ ์ œ๊ฑฐ
Iwillbeagood Feb 22, 2026
f0ae0a5
feat: ๋„ค๋น„๊ฒŒ์ด์…˜ ์—”ํŠธ๋ฆฌ ์ถ”๊ฐ€
Iwillbeagood Feb 23, 2026
3a95524
fix: NavHost์—์„œ NavDisplay๋กœ ๋ณ€๊ฒฝ
Iwillbeagood Feb 23, 2026
cc87906
fix: MainNavigator ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ViewModel์—์„œ ์ฒ˜๋ฆฌํ•˜๋„๋ก ๋ณ€๊ฒฝ
Iwillbeagood Feb 23, 2026
e2cd51c
fix: Hilt ViewModel ์ž„ํฌํŠธ ๊ฒฝ๋กœ ์ˆ˜์ •
Iwillbeagood Feb 23, 2026
235cbd3
style: ๋ฉ”์ธ ์•กํ‹ฐ๋น„ํ‹ฐ ํ…Œ๋งˆ ๋ณ€๊ฒฝ ๋ฐ ์ƒˆ๋กœ์šด ํ…Œ๋งˆ ์ถ”๊ฐ€
Iwillbeagood Feb 23, 2026
9c40b00
fix: decideStartDestination ํ˜ธ์ถœ์„ LaunchedEffect๋กœ ๊ฐ์‹ธ ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ
Iwillbeagood Feb 23, 2026
01640b1
fix: RegistryRoute์—์„œ ViewModel ์ฃผ์ž… ๋ฐฉ์‹ ๋ณ€๊ฒฝ
Iwillbeagood Feb 23, 2026
fb0ef43
fix: ๋„ค๋น„๊ฒŒ์ด์…˜ ๋กœ์ง ์ˆ˜์ • ๋ฐ LaunchMode ์ ์šฉ
Iwillbeagood Feb 23, 2026
f276731
chore: ktlint formating ์ ์šฉ
Iwillbeagood Feb 23, 2026
43d4ac3
style: ์•ฑ ํ…Œ๋งˆ ๋ฐ ์Šคํ”Œ๋ž˜์‹œ ํ™”๋ฉด ์ˆ˜์ •
TaewoongR Mar 3, 2026
52836c0
fix: ๋„ค๋น„๊ฒŒ์ด์…˜ ๋ฐฑ์Šคํƒ ์ƒํƒœ ๊ด€๋ฆฌ ๊ฐœ์„ 
TaewoongR Mar 9, 2026
f2f6405
fix: ํ…Œ๋งˆ ๋ฆฌ์†Œ์Šค ์ฐธ์กฐ ์—๋Ÿฌ(not found) ์ˆ˜์ •
TaewoongR Mar 9, 2026
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
180 changes: 180 additions & 0 deletions .github/git-commit-instructions.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,180 @@
## ํ”„๋กœ์ ํŠธ ์ปจํ…์ŠคํŠธ

- **๊ธฐ์ˆ  ์Šคํƒ**: Kotlin, Jetpack Compose, MVVM/MVI ์•„ํ‚คํ…์ฒ˜, Multi-module
- **๋ชจ๋“ˆ ๊ตฌ์กฐ**:
- `feature/*`: ๊ธฐ๋Šฅ๋ณ„ ๋ชจ๋“ˆ (home, cargo-detail, myinfo ๋“ฑ)
- `core/*`: ๊ณตํ†ต ๋ชจ๋“ˆ (designsystem, data, domain, network ๋“ฑ)

## ์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€ ํ˜•์‹

```
ํƒ€์ž…: ๊ฐ„๋‹จํ•œ ์ œ๋ชฉ (ํ•œ๊ตญ์–ด, 50์ž ์ด๋‚ด)

- ๋ณ€๊ฒฝ ์‚ฌํ•ญ 1 (๊ตฌ์ฒด์ ์œผ๋กœ)
- ๋ณ€๊ฒฝ ์‚ฌํ•ญ 2 (ํŒŒ์ผ๋ช… ํฌํ•จ ๊ถŒ์žฅ)
- ๋ณ€๊ฒฝ ์‚ฌํ•ญ 3 (์™œ ๋ณ€๊ฒฝํ–ˆ๋Š”์ง€ ํฌํ•จ)
```

## ํƒ€์ž… ์ •์˜

๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ๋ถ„์„ํ•˜์—ฌ ๊ฐ€์žฅ ์ ํ•ฉํ•œ ํƒ€์ž… ํ•˜๋‚˜๋ฅผ ์„ ํƒํ•˜์„ธ์š”:

- **feat**: ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ ์ถ”๊ฐ€
- ์˜ˆ: ์ƒˆ๋กœ์šด ํ™”๋ฉด, ์ƒˆ๋กœ์šด ์ปดํฌ๋„ŒํŠธ, ์ƒˆ๋กœ์šด API ์—ฐ๋™

- **fix**: ๋ฒ„๊ทธ ์ˆ˜์ •
- ์˜ˆ: ํฌ๋ž˜์‹œ ์ˆ˜์ •, ์ž˜๋ชป๋œ ๋กœ์ง ์ˆ˜์ •, UI ๋ฒ„๊ทธ ์ˆ˜์ •

- **refactor**: ์ฝ”๋“œ ๋ฆฌํŒฉํ† ๋ง (๊ธฐ๋Šฅ ๋ณ€๊ฒฝ ์—†์Œ)
- ์˜ˆ: ํ•จ์ˆ˜ ๋ถ„๋ฆฌ, ๋ณ€์ˆ˜๋ช… ๋ณ€๊ฒฝ, ๊ตฌ์กฐ ๊ฐœ์„ 

- **style**: UI/๋””์ž์ธ ๋ณ€๊ฒฝ (์ฝ”๋“œ ์Šคํƒ€์ผ X)
- ์˜ˆ: ์ƒ‰์ƒ ๋ณ€๊ฒฝ, ๊ฐ„๊ฒฉ ์กฐ์ •, ํฐํŠธ ์ˆ˜์ •

- **test**: ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ถ”๊ฐ€/์ˆ˜์ •
- ์˜ˆ: ๋‹จ์œ„ ํ…Œ์ŠคํŠธ, UI ํ…Œ์ŠคํŠธ, Integration ํ…Œ์ŠคํŠธ

- **chore**: ๋นŒ๋“œ, ์„ค์ •, ์˜์กด์„ฑ ๊ด€๋ จ
- ์˜ˆ: Gradle ์—…๋ฐ์ดํŠธ, ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ถ”๊ฐ€, CI/CD ์„ค์ •

## ์ž‘์„ฑ ๊ทœ์น™

### 1. ์ œ๋ชฉ ์ž‘์„ฑ
- ํ•œ๊ตญ์–ด๋กœ ์ž‘์„ฑ
- 50์ž ์ด๋‚ด๋กœ ๊ฐ„๊ฒฐํ•˜๊ฒŒ
- ๋งˆ์นจํ‘œ ์—†์ด ๋ช…๋ นํ˜•์œผ๋กœ ์ž‘์„ฑ
- ๋ฌด์—‡์„ ํ–ˆ๋Š”์ง€ ๋ช…ํ™•ํ•˜๊ฒŒ

### 2. ๋ณธ๋ฌธ ์ž‘์„ฑ
- ๊ฐ ํ•ญ๋ชฉ์€ `-`๋กœ ์‹œ์ž‘
- ๊ตฌ์ฒด์ ์ธ ํŒŒ์ผ๋ช…์ด๋‚˜ ์ปดํฌ๋„ŒํŠธ๋ช… ํฌํ•จ
- ๋ณ€๊ฒฝ ์ด์œ ๋‚˜ ๋งฅ๋ฝ ํฌํ•จ (ํ•„์š”์‹œ)
- ๋ชจ๋“ˆ ๊ฒฝ๋กœ ๋ช…์‹œ (`feature/home`, `core/designsystem` ๋“ฑ)

โœ… ์ข‹์€ ์˜ˆ:
```
- HomeScreenRedesign.kt: ์‚ฌ์šฉ์ž ์ •๋ณด ์นด๋“œ ์ปดํฌ๋„ŒํŠธ ์ถ”๊ฐ€
- CargoItemCard.kt: ํ™”๋ฌผ ์ƒํƒœ๋ณ„ ์ƒ‰์ƒ ๊ตฌ๋ถ„ ๋กœ์ง ๊ตฌํ˜„
- Figma ๋””์ž์ธ(node-id: 1942-56177) ๊ธฐ๋ฐ˜ ๋ ˆ์ด์•„์›ƒ ์ ์šฉ
- Material 3 ๋””์ž์ธ ์‹œ์Šคํ…œ ์ ์šฉ
```

โŒ ๋‚˜์œ ์˜ˆ:
```
- ์ฝ”๋“œ ์ˆ˜์ •
- ํŒŒ์ผ ์ถ”๊ฐ€
- ์ž‘์—… ์™„๋ฃŒ
```

## ๋ณ€๊ฒฝ์‚ฌํ•ญ ๋ถ„์„ ์ฒดํฌ๋ฆฌ์ŠคํŠธ

์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€๋ฅผ ์ž‘์„ฑํ•˜๊ธฐ ์ „์— ๋‹ค์Œ์„ ํ™•์ธํ•˜์„ธ์š”:

1. **์–ด๋–ค ํŒŒ์ผ์ด ๋ณ€๊ฒฝ๋˜์—ˆ๋Š”๊ฐ€?**
- ํŒŒ์ผ๋ช…๊ณผ ๊ฒฝ๋กœ ํ™•์ธ

2. **๋ฌด์—‡์ด ์ถ”๊ฐ€/์ˆ˜์ •/์‚ญ์ œ๋˜์—ˆ๋Š”๊ฐ€?**
- ์ƒˆ๋กœ์šด ํ•จ์ˆ˜/ํด๋ž˜์Šค/์ปดํฌ๋„ŒํŠธ
- ์ˆ˜์ •๋œ ๋กœ์ง
- ์‚ญ์ œ๋œ ์ฝ”๋“œ

3. **์™œ ์ด ๋ณ€๊ฒฝ์ด ํ•„์š”ํ–ˆ๋Š”๊ฐ€?**
- ๋ฒ„๊ทธ ์ˆ˜์ •
- ๊ธฐ๋Šฅ ์ถ”๊ฐ€
- ์„ฑ๋Šฅ ๊ฐœ์„ 
- ๋””์ž์ธ ๋ฐ˜์˜

4. **์ด ๋ณ€๊ฒฝ์˜ ์˜ํ–ฅ ๋ฒ”์œ„๋Š”?**
- ๋‹ค๋ฅธ ๋ชจ๋“ˆ์— ์˜ํ–ฅ
- Breaking Change ์—ฌ๋ถ€
- ํ…Œ์ŠคํŠธ ํ•„์š” ์—ฌ๋ถ€

## ์‹ค์ œ ์˜ˆ์‹œ

### ์˜ˆ์‹œ 1: ์ƒˆ ํ™”๋ฉด ์ถ”๊ฐ€
```
feat: ํ™”๋ฌผ ์ƒ์„ธ ํ™”๋ฉด ์ถ”๊ฐ€

- CargoDetailScreen.kt: ์ƒˆ ํ™”๋ฉด ๊ตฌํ˜„
- CargoDetailViewModel.kt: ์ƒํƒœ ๊ด€๋ฆฌ
- CargoDetailUiState.kt: UI ์ƒํƒœ ์ •์˜
- ํ™”๋ฌผ ์ •๋ณด, ์ฐจ์ฃผ ์ •๋ณด, ๊ฒฝ๋กœ ์ •๋ณด ํ‘œ์‹œ
- ์ „ํ™”/๋ฌธ์ž ๋ฒ„ํŠผ ๊ธฐ๋Šฅ ๊ตฌํ˜„
- Navigation ์—ฐ๊ฒฐ ์™„๋ฃŒ
```

### ์˜ˆ์‹œ 2: ๋ฒ„๊ทธ ์ˆ˜์ •
```
fix: ํ™”๋ฌผ ๋“ฑ๋ก ์‹œ ๋‚ ์งœ ์„ ํƒ ์˜ค๋ฅ˜ ์ˆ˜์ •

- DatePicker.kt: ์‹œ๊ฐ„๋Œ€ ์ฒ˜๋ฆฌ ๋กœ์ง ์ˆ˜์ •
- LocalDateTime์„ ZonedDateTime์œผ๋กœ ๋ณ€๊ฒฝ
- ์„œ๋ฒ„์™€ ์‹œ๊ฐ„๋Œ€ ๋ถˆ์ผ์น˜๋กœ ๋ฐœ์ƒํ•œ ์˜ค๋ฅ˜ ํ•ด๊ฒฐ
- ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค ์ถ”๊ฐ€: DatePickerTest.kt
```

### ์˜ˆ์‹œ 3: ๋ฆฌํŒฉํ† ๋ง
```
refactor: Repository ๋ ˆ์ด์–ด ๋ถ„๋ฆฌ ๋ฐ ์ •๋ฆฌ

- CargoRepository.kt: Local/Remote ๋ถ„๋ฆฌ
- CargoLocalDataSource.kt: ๋กœ์ปฌ ๋ฐ์ดํ„ฐ ์†Œ์Šค
- CargoRemoteDataSource.kt: ๋ฆฌ๋ชจํŠธ ๋ฐ์ดํ„ฐ ์†Œ์Šค
- ๋‹จ์ผ ์ฑ…์ž„ ์›์น™ ์ ์šฉ
- ํ…Œ์ŠคํŠธ ์šฉ์ด์„ฑ ๊ฐœ์„ 
```

### ์˜ˆ์‹œ 4: UI ์Šคํƒ€์ผ ๋ณ€๊ฒฝ
```
style: ๋ฉ”์ธ ํ™ˆ ์นด๋“œ ๋””์ž์ธ ์ˆ˜์ •

- CargoItemCard.kt: ์นด๋“œ ์Šคํƒ€์ผ ์กฐ์ •
- elevation 2dp โ†’ 4dp ๋ณ€๊ฒฝ
- ๋ชจ์„œ๋ฆฌ ๋ฐ˜๊ฒฝ 6dp โ†’ 8dp ๋ณ€๊ฒฝ
- ๊ทธ๋ฆผ์ž ์ƒ‰์ƒ ์กฐ์ • (#000000 โ†’ #0000001A)
- Figma ๋””์ž์ธ๊ณผ ์ผ์น˜ํ•˜๋„๋ก ์ˆ˜์ •
```

### ์˜ˆ์‹œ 5: ์—ฌ๋Ÿฌ ํƒ€์ž…์˜ ๋ณ€๊ฒฝ
๊ฐ€์žฅ ์ค‘์š”ํ•œ ๋ณ€๊ฒฝ์‚ฌํ•ญ์˜ ํƒ€์ž…์„ ์‚ฌ์šฉํ•˜์„ธ์š”:

```
feat: ๋กœ๊ทธ์ธ ํ™”๋ฉด ๊ฐœ์„ 

- LoginScreen.kt: UI ๋ฆฌ๋””์ž์ธ (Figma ๊ธฐ๋ฐ˜)
- LoginViewModel.kt: ์ž๋™ ๋กœ๊ทธ์ธ ๊ธฐ๋Šฅ ์ถ”๊ฐ€
- PreferencesManager.kt: ๋กœ๊ทธ์ธ ์ƒํƒœ ์ €์žฅ ๋กœ์ง
- ๋ฒ„๊ทธ ์ˆ˜์ •: ๋น„๋ฐ€๋ฒˆํ˜ธ ์ž…๋ ฅ ์‹œ ํ‚ค๋ณด๋“œ ์ˆจ๊น€ ์ฒ˜๋ฆฌ
```

## ์ฃผ์˜์‚ฌํ•ญ

1. **ํ•˜๋‚˜์˜ ์ปค๋ฐ‹์—๋Š” ํ•˜๋‚˜์˜ ๋…ผ๋ฆฌ์  ๋ณ€๊ฒฝ๋งŒ**
- ์—ฌ๋Ÿฌ ๊ธฐ๋Šฅ์„ ํ•œ ์ปค๋ฐ‹์— ์„ž์ง€ ๋ง ๊ฒƒ
- ํ•„์š”์‹œ ์ปค๋ฐ‹์„ ๋ถ„๋ฆฌ

2. **WIP(Work In Progress) ์ปค๋ฐ‹ ์ง€์–‘**
- ์™„์ „ํ•˜์ง€ ์•Š์€ ์ž‘์—…์€ ์ปค๋ฐ‹ํ•˜์ง€ ๋ง ๊ฒƒ
- ๋ถ€๋“์ดํ•œ ๊ฒฝ์šฐ `[WIP]` ํƒœ๊ทธ ์‚ฌ์šฉ

3. **ํŒŒ์ผ ๊ฒฝ๋กœ๋Š” ํ”„๋กœ์ ํŠธ ์ด๋ฆ„ ๊ธฐ์ค€**
- โœ… `HomeScreen.kt`

4. **๋ฏผ๊ฐ ์ •๋ณด ํฌํ•จ ๊ธˆ์ง€**
- API ํ‚ค, ๋น„๋ฐ€๋ฒˆํ˜ธ, ๊ฐœ์ธ์ •๋ณด ์ œ์™ธ
- ํ™˜๊ฒฝ ์„ค์ •์€ .env ํŒŒ์ผ ํ™œ์šฉ

## ๋งˆ์ง€๋ง‰ ์ฒดํฌ

์ปค๋ฐ‹ํ•˜๊ธฐ ์ „ ํ™•์ธ:
- [ ] ํƒ€์ž…์ด ๋ช…ํ™•ํ•œ๊ฐ€?
- [ ] ์ œ๋ชฉ์ด 50์ž ์ด๋‚ด์ธ๊ฐ€?
- [ ] ๋ณธ๋ฌธ์— ๊ตฌ์ฒด์ ์ธ ๋‚ด์šฉ์ด ์žˆ๋Š”๊ฐ€?
- [ ] ํŒŒ์ผ๋ช…์ด๋‚˜ ์ปดํฌ๋„ŒํŠธ๋ช…์ด ํฌํ•จ๋˜์—ˆ๋Š”๊ฐ€?
- [ ] ๋ณ€๊ฒฝ ์ด์œ ๊ฐ€ ๋ช…ํ™•ํ•œ๊ฐ€?
- [ ] Breaking Change๊ฐ€ ์žˆ๋‹ค๋ฉด ๋ช…์‹œํ–ˆ๋Š”๊ฐ€?

---

์ด ๊ฐ€์ด๋“œ๋ฅผ ๋”ฐ๋ผ ์ผ๊ด€์„ฑ ์žˆ๊ณ  ๋ช…ํ™•ํ•œ ์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€๋ฅผ ์ž‘์„ฑํ•˜์„ธ์š”.

Comment on lines +1 to +180
Copy link

Copilot AI Feb 23, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This file appears to be unrelated to the Navigation3 migration described in the PR. It's a commit message guideline document. Consider whether this should be included in this PR or moved to a separate documentation update PR to keep changes focused and easier to review.

Copilot uses AI. Check for mistakes.
2 changes: 0 additions & 2 deletions build-logic/src/main/kotlin/brake.android.feature.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -32,9 +32,7 @@ dependencies {

val libs = project.extensions.libs
implementation(libs.findLibrary("hilt.navigation.compose").get())
implementation(libs.findLibrary("androidx.compose.navigation").get())
implementation(libs.findLibrary("androidx.compose.material.icon").get())
androidTestImplementation(libs.findLibrary("androidx.compose.navigation.test").get())

implementation(libs.findLibrary("androidx.lifecycle.viewModelCompose").get())
implementation(libs.findLibrary("androidx.lifecycle.runtimeCompose").get())
Expand Down
3 changes: 2 additions & 1 deletion core/navigation/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -12,5 +12,6 @@ android {

dependencies {
implementation(libs.kotlinx.serialization.json)
implementation(libs.androidx.compose.navigation)
api(libs.androidx.navigation3.runtime)
api(libs.androidx.navigation3.ui)
}
Original file line number Diff line number Diff line change
@@ -1,19 +1,19 @@
package com.teambrake.brake.core.navigation.action

import androidx.navigation.NavOptions
import com.teambrake.brake.core.navigation.route.LaunchMode

interface NavigatorAction {
fun popBackStack(navOptions: NavOptions? = null)
fun navigateToLogin(navOptions: NavOptions? = null)
fun navigateToSignup(navOptions: NavOptions? = null)
fun navigateToGuide(navOptions: NavOptions? = null)
fun navigateToPrivacy(navOptions: NavOptions? = null)
fun navigateToTerms(navOptions: NavOptions? = null)
fun navigateToComplete(navOptions: NavOptions? = null)
fun navigateToPermission(navOptions: NavOptions? = null)
fun navigateToHome(navOptions: NavOptions? = null)
fun navigateToRegistry(groupId: Long?, navOptions: NavOptions? = null)
fun navigateToNickname(navOptions: NavOptions? = null)
fun navigateToOpinion(navOptions: NavOptions? = null)
fun navigateToInquiry(navOptions: NavOptions? = null)
fun popBackStack()
fun navigateToLogin(launchMode: LaunchMode = LaunchMode.CLEAR_ALL)
fun navigateToSignup(launchMode: LaunchMode = LaunchMode.STANDARD)
fun navigateToGuide(launchMode: LaunchMode = LaunchMode.STANDARD)
fun navigateToPrivacy(launchMode: LaunchMode = LaunchMode.STANDARD)
fun navigateToTerms(launchMode: LaunchMode = LaunchMode.STANDARD)
fun navigateToComplete(launchMode: LaunchMode = LaunchMode.STANDARD)
fun navigateToPermission(launchMode: LaunchMode = LaunchMode.STANDARD)
fun navigateToHome(launchMode: LaunchMode = LaunchMode.CLEAR_ALL)
fun navigateToRegistry(groupId: Long? = null, launchMode: LaunchMode = LaunchMode.STANDARD)
fun navigateToNickname(launchMode: LaunchMode = LaunchMode.STANDARD)
fun navigateToOpinion(launchMode: LaunchMode = LaunchMode.STANDARD)
fun navigateToInquiry(launchMode: LaunchMode = LaunchMode.STANDARD)
}
Original file line number Diff line number Diff line change
@@ -1,8 +1,7 @@
package com.teambrake.brake.core.navigation.provider

import androidx.navigation.NavOptions
import com.teambrake.brake.core.navigation.route.Route

interface NavigatorProvider {
fun getNavOptionsClearingBackStack(): NavOptions
fun getPreviousDestination(): String
fun getPreviousDestination(): Route?
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
package com.teambrake.brake.core.navigation.route

/**
* ๋„ค๋น„๊ฒŒ์ด์…˜ ์‹œ ๋ฐฑ์Šคํƒ ๊ด€๋ฆฌ ๋ฐฉ์‹์„ ์ •์˜ํ•˜๋Š” LaunchMode
*
* Android์˜ launchMode์™€ ์œ ์‚ฌํ•œ ๊ฐœ๋…์œผ๋กœ ์„ค๊ณ„๋จ
*/
enum class LaunchMode {
/**
* ํ•ญ์ƒ ์ƒˆ๋กœ์šด ์ธ์Šคํ„ด์Šค๋ฅผ ๋ฐฑ์Šคํƒ์— ์ถ”๊ฐ€
* ๊ธฐ๋ณธ ๋™์ž‘
*/
STANDARD,

/**
* ๋Œ€์ƒ Route๊ฐ€ ์ด๋ฏธ ๋ฐฑ์Šคํƒ์˜ ์ตœ์ƒ๋‹จ์— ์žˆ์œผ๋ฉด ์žฌ์‚ฌ์šฉ
* ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ์ƒˆ๋กœ ์ถ”๊ฐ€
*/
SINGLE_TOP,

/**
* ๋ฐฑ์Šคํƒ์—์„œ ๋Œ€์ƒ Route๋ฅผ ์ฐพ์•„ ๊ทธ ์œ„์˜ ๋ชจ๋“  Route๋ฅผ ์ œ๊ฑฐ
* Route๊ฐ€ ๋ฐฑ์Šคํƒ์— ์—†์œผ๋ฉด ์ƒˆ๋กœ ์ถ”๊ฐ€
*/
CLEAR_TOP,

/**
* ๋ฐฑ์Šคํƒ์„ ์™„์ „ํžˆ ๋น„์šฐ๊ณ  ์ƒˆ๋กœ์šด Route๋งŒ ๋‚จ๊น€
*/
CLEAR_ALL,
}
Original file line number Diff line number Diff line change
@@ -1,15 +1,5 @@
package com.teambrake.brake.core.navigation.route

import timber.log.Timber
import androidx.navigation3.runtime.NavKey

interface Route

/**
* 2025-08-03 ๊ธฐ์ค€
* Jetpack Compose Type-Safe Navigation ๋‚ด๋ถ€์—์„œ Route ํƒ€์ž…์„ ๋ฌธ์ž์—ด๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๋ฐฉ์‹๊ณผ ๋™์ผํ•œ ๋ณ€ํ™˜ ํ•จ์ˆ˜
* Jetpack Compose Type-Safe Navigation ๋‚ด๋ถ€ ๋ณ€ํ™˜ ๋ฐฉ์‹์ด ๋ณ€๊ฒฝ๋  ์ˆ˜ ์žˆ์Œ
*/
fun Route.stringRoute(): String {
Timber.d("stringRoute: ${this::class.qualifiedName}")
return this::class.qualifiedName ?: ""
}
interface Route : NavKey
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package com.teambrake.brake.core.navigation.route

data class RouteStack(
val backStack: List<Route> = emptyList(),
) {
val current: Route? = backStack.lastOrNull()

val previous: Route? = backStack.dropLast(1).lastOrNull()

constructor(startDestination: Route) : this(backStack = listOf(startDestination))
Comment on lines +3 to +10
Copy link

Copilot AI Feb 23, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The RouteStack constructor that takes a single Route parameter wraps it in a list. However, the primary constructor initializes backStack with an empty list by default. While this works correctly, consider adding validation to prevent creating a RouteStack with an empty backStack after initialization, as an empty backStack could lead to null current and previous values, which might cause unexpected behavior in navigation logic.

Copilot uses AI. Check for mistakes.
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package com.teambrake.brake.core.navigation.route
import kotlinx.serialization.Serializable

interface SubRoute : Route {

@Serializable
data class Registry(val groupId: Long? = null) : SubRoute

Expand Down
13 changes: 10 additions & 3 deletions gradle/libs.versions.toml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
## SDK version
compileSdk = "36"
minSdk = "28"
targetSdk = "35"
targetSdk = "36"
Copy link

Copilot AI Feb 23, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The targetSdk has been updated from 35 to 36. Android 15 (API 36) includes significant behavior changes and new restrictions. Ensure that the app has been tested against API 36 requirements, including new runtime permissions, foreground service restrictions, and other breaking changes documented in the Android 15 behavior changes guide. This change could introduce runtime issues if not properly validated.

Suggested change
targetSdk = "36"
targetSdk = "35"

Copilot uses AI. Check for mistakes.

## App version
versionCode = "11"
Expand Down Expand Up @@ -182,6 +182,10 @@ material = "1.12.0"
accompanistPermissions = "0.37.3"
snapper = "0.3.0"

# Navigation 3
nav3Core = "1.0.1"
lifecycleViewmodelNav3 = "2.10.0"

[libraries]
# Gradle
android-gradlePlugin = { group = "com.android.tools.build", name = "gradle", version.ref = "agp" }
Expand All @@ -206,12 +210,15 @@ androidx-compose-ui-test = { group = "androidx.compose.ui", name = "ui-test-juni
androidx-compose-ui-tooling = { group = "androidx.compose.ui", name = "ui-tooling" }
androidx-compose-ui-tooling-preview = { group = "androidx.compose.ui", name = "ui-tooling-preview" }
androidx-compose-ui-testManifest = { group = "androidx.compose.ui", name = "ui-test-manifest" }
androidx-compose-navigation = { group = "androidx.navigation", name = "navigation-compose", version.ref = "androidxComposeNavigation" }
androidx-compose-navigation-test = { group = "androidx.navigation", name = "navigation-testing", version.ref = "androidxComposeNavigation" }
androidx-compose-material-icon = { module = "androidx.compose.material:material-icons-extended" }
androidx-constraintlayout-compose = { group = "androidx.constraintlayout", name = "constraintlayout-compose", version.ref = "androidxComposeConstraintlayout" }
compose-compiler-gradle-plugin = { module = "org.jetbrains.kotlin:compose-compiler-gradle-plugin", version.ref = "kotlin" }

# Navigation 3
androidx-navigation3-runtime = { module = "androidx.navigation3:navigation3-runtime", version.ref = "nav3Core" }
androidx-navigation3-ui = { module = "androidx.navigation3:navigation3-ui", version.ref = "nav3Core" }
androidx-lifecycle-viewmodel-navigation3 = { module = "androidx.lifecycle:lifecycle-viewmodel-navigation3", version.ref = "lifecycleViewmodelNav3" }

# Credentials
androidx-credentials = { group = "androidx.credentials", name = "credentials", version.ref = "androidxCredentials" }
androidx-credentials-play-services-auth = { group = "androidx.credentials", name = "credentials-play-services-auth", version.ref = "androidxCredentials" }
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ import androidx.compose.runtime.remember
import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalContext
import androidx.core.content.ContextCompat
import androidx.hilt.navigation.compose.hiltViewModel
import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel
import androidx.lifecycle.compose.collectAsStateWithLifecycle
import com.teambrake.brake.core.designsystem.theme.LinerGradient
import com.teambrake.brake.core.navigation.compositionlocal.LocalMainAction
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package com.teambrake.brake.presentation.home.navEntry

import androidx.compose.foundation.layout.PaddingValues
import androidx.navigation3.runtime.EntryProviderScope
import androidx.navigation3.runtime.NavKey
import com.teambrake.brake.core.navigation.route.MainTabRoute
import com.teambrake.brake.presentation.home.HomeRoute

fun EntryProviderScope<NavKey>.homeNavEntry(padding: PaddingValues) {
entry<MainTabRoute.Home> {
HomeRoute(padding = padding)
}
}
Loading