Skip to content

Commit

Permalink
Merge pull request #276 from mash-up-kr/develop
Browse files Browse the repository at this point in the history
[배포] v 1.1.0 개발 완료
  • Loading branch information
SEO-J17 authored Aug 29, 2024
2 parents 8b2c06a + dff02d8 commit 2c1f4c7
Show file tree
Hide file tree
Showing 42 changed files with 506 additions and 362 deletions.
102 changes: 98 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,99 @@
# gabbangzip-Android
가자빵집으로 Android Repository
# 📸 PIC

### Shortcuts
- [Code Convention](https://github.com/mash-up-kr/gabbangzip-Android/wiki/Code-Convention)
<img src="https://github.com/user-attachments/assets/b8330514-e473-4087-b724-d3b67641426e"/>

**그날의 추억을 기록하는 우리만의 네컷사진**

- 원하는 친구들과 그룹방을 만들어요
- 함께 찍은 사진들을 투표해요
- 베스트 사진으로 네컷 사진이 만들어져요

# 💾 App Download

<a href="https://play.google.com/store/apps/details?id=com.mashup.gabbangzip.sharedalbum">
<img src="https://user-images.githubusercontent.com/63157395/211233100-2f255c00-3336-4125-b5da-2fd935e40b5a.png" width="101px" />
</a>

# 💻 Contributor

<div align="center">
<table style="font-weight : bold">
<tr>
<td align="center">
<a href="https://github.com/sooziini">
<img alt="sooziini" src="https://avatars.githubusercontent.com/sooziini " width="100" />
</a>
</td>
<td align="center">
<a href="https://github.com/SEO-J17">
<img alt="SEO-J17" src="https://avatars.githubusercontent.com/SEO-J17" width="100" />
</a>
</td>
<td align="center">
<a href="https://github.com/oreocube">
<img alt="oreocube" src="https://avatars.githubusercontent.com/oreocube" width="100" />
</a>
</td>
<td align="center">
<a href="https://github.com/JeonK1">
<img alt="JeonK1" src="https://avatars.githubusercontent.com/JeonK1" width="100" />
</a>
</td>
</tr>
<tr>
<td align="center">박수진</td>
<td align="center">서정우</td>
<td align="center">주지혜</td>
<td align="center">전계원</td>
</tr>
</table>
</div>

# 🎨 Structure

<img src=https://github.com/user-attachments/assets/2678bf88-461d-436a-abb8-f3406313db45/>

+ Claen Architecture와 MVVM 패턴을 적용하여 프로젝트를 구성했습니다
+ 가이드에 따라 App, Data, Domain, Presentation 모듈로 분리하고 다음 그림과 같은 의존성을 가지도록 설계했습니다.

# 🛠 Tech & Library

+ Target SDK Level 34
+ Min SDK Level 26
+ Kotlin 1.9.10

| 구분 | 내용 |
|-------------------------|-----------------------------------------------------------------------|
| Architecture | Clean Architecture |
| DesignPattern | MVVM |
| Jetpack | Compose, Lifecycle, Navigation, EncryptedSharedPreferences, ViewModel |
| Network | Retrofit, OkHttp, Moshi |
| Asynchronous Processing | Coroutine, Flow |
| Dependency Injection | Hilt |
| Third Party Library | Coil-Compose, Kakao SDK, Firebase Cloud Messaging |
| Other Tool | Figma |

# ✨ Features

<div>
<img
width="23%"
alt="image"
src="https://github.com/user-attachments/assets/344b519d-af89-4ea5-9a0d-890aeab7114e"
/>
<img
width="23%"
alt="image"
src="https://github.com/user-attachments/assets/e1d161ad-1e12-487e-afe8-3061f2f46ec8"
/>
<img
width="23%"
alt="image"
src="https://github.com/user-attachments/assets/80bdc49e-8b49-4432-b59e-4ae5fb83a04a"
/>
<img
width="23%"
alt="image"
src="https://github.com/user-attachments/assets/f0c99971-3a71-473d-820e-1dbd9df5cac3"
/>
</div>
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,8 @@ object AppConfig {
const val applicationId = "com.mashup.gabbangzip.sharedalbum"
const val appNameSpace = "com.mashup.gabbangzip.sharedalbum"

const val appVersionCode = 1
const val appVersionName = "1.0.0"
const val appVersionCode = 2
const val appVersionName = "1.1.0"

const val dataNameSpace = "com.mashup.gabbangzip.sharedalbum.data"
const val domainNameSpace = "com.mashup.gabbangzip.sharedalbum.domain"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -103,6 +103,7 @@ fun PicNormalButton(
backgroundColor: Color = Gray80,
contentColor: Color = Gray0,
@DrawableRes iconRes: Int? = null,
isHaptic: Boolean = false,
onButtonClicked: () -> Unit = {},
) {
Box(
Expand All @@ -111,9 +112,9 @@ fun PicNormalButton(
.background(if (enable) backgroundColor else SilverSand)
.then(
if (isRippleClickable) {
Modifier.rippleClickable(onClick = onButtonClicked)
Modifier.rippleClickable(onClick = onButtonClicked, isHaptic = isHaptic)
} else {
Modifier.noRippleClickable(onClick = onButtonClicked)
Modifier.noRippleClickable(onClick = onButtonClicked, isHaptic = isHaptic)
},
)
.padding(
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
package com.mashup.gabbangzip.sharedalbum.presentation.ui.common

import androidx.compose.animation.animateColorAsState
import androidx.compose.animation.core.LinearEasing
import androidx.compose.animation.core.animateFloat
import androidx.compose.animation.core.infiniteRepeatable
import androidx.compose.animation.core.rememberInfiniteTransition
import androidx.compose.animation.core.tween
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.material3.CircularProgressIndicator
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.tooling.preview.Preview
import com.mashup.gabbangzip.sharedalbum.presentation.theme.Conifer
import com.mashup.gabbangzip.sharedalbum.presentation.theme.Coral
import com.mashup.gabbangzip.sharedalbum.presentation.theme.Dandelion
import com.mashup.gabbangzip.sharedalbum.presentation.theme.Lavender
import com.mashup.gabbangzip.sharedalbum.presentation.theme.MagentaPink
import com.mashup.gabbangzip.sharedalbum.presentation.theme.Malibu
import com.mashup.gabbangzip.sharedalbum.presentation.theme.MayaBlue

private val colorList = listOf(
Conifer,
MayaBlue,
MagentaPink,
Lavender,
Coral,
Dandelion,
Malibu,
)

@Composable
fun PicLoadingIndicator(modifier: Modifier, isVisible: Boolean) {
if (isVisible) {
val infiniteTransition = rememberInfiniteTransition(label = "InfiniteTransition")
val transition = infiniteTransition.animateFloat(
initialValue = 0f,
targetValue = 1f,
animationSpec = infiniteRepeatable(
animation = tween(durationMillis = 10_000, easing = LinearEasing),
),
label = "InfiniteTransition",
)
val currentColorIndex = ((transition.value * colorList.size).toInt() % colorList.size)
val loadingColor by animateColorAsState(
targetValue = colorList[currentColorIndex],
animationSpec = tween(durationMillis = 1000, easing = LinearEasing),
label = "LoadingAnimation",
)

Box(
modifier = modifier,
) {
CircularProgressIndicator(
modifier = Modifier.align(Alignment.Center),
color = loadingColor,
)
}
}
}

@Preview
@Composable
private fun PicLoadingScreenPreview() {
PicLoadingIndicator(
modifier = Modifier.fillMaxSize(),
isVisible = true,
)
}
Loading

0 comments on commit 2c1f4c7

Please sign in to comment.