Skip to content

Commit

Permalink
feat : pull-refresh 기능 구현 (#27)
Browse files Browse the repository at this point in the history
  • Loading branch information
HyomK authored Mar 24, 2024
1 parent 8514f9d commit e8619e2
Show file tree
Hide file tree
Showing 2 changed files with 52 additions and 13 deletions.
18 changes: 12 additions & 6 deletions app/src/main/java/nexters/hyomk/dontforget/MainActivity.kt
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,10 @@ import androidx.navigation.compose.rememberNavController
import com.google.android.gms.tasks.OnCompleteListener
import com.google.firebase.messaging.FirebaseMessaging
import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.flow.collectLatest
import kotlinx.coroutines.launch
import nexters.hyomk.dontforget.navigation.AppNavHost
import nexters.hyomk.dontforget.presentation.compositionlocal.GuideCompositionLocal
import nexters.hyomk.dontforget.presentation.feature.splash.SplashViewModel
Expand All @@ -34,7 +38,7 @@ class MainActivity : ComponentActivity() {

private val lan: String = Locale.getDefault().language
private val guide = getSupportGuide(lan.enumValueOrNull<SupportLanguage>())
private fun getFcmToken() {
private fun getFcmToken(deviceId: String) {
FirebaseMessaging.getInstance().token.addOnCompleteListener(
OnCompleteListener { task ->
if (!task.isSuccessful) {
Expand All @@ -46,10 +50,8 @@ class MainActivity : ComponentActivity() {
val token = task.result

// Log and toast
Timber.d("[device] : ${viewModel.deviceId.value} /[fcm] : $token")
if (viewModel.deviceId.value.isNotBlank() && token.isNotBlank()) {
viewModel.updateFcmInfo(token)
}
Timber.d("[device] : $deviceId /[fcm] : $token")
viewModel.updateFcmInfo(token)
},
)
}
Expand All @@ -62,7 +64,11 @@ class MainActivity : ComponentActivity() {

override fun onResume() {
super.onResume()
getFcmToken()
CoroutineScope(Dispatchers.IO).launch {
viewModel.deviceId.collectLatest { deviceId ->
if (deviceId.isNotBlank()) getFcmToken(deviceId)
}
}
}

override fun onCreate(savedInstanceState: Bundle?) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -83,11 +83,10 @@ import nexters.hyomk.dontforget.presentation.utils.pixelsToDp
import nexters.hyomk.dontforget.ui.language.TransGuide
import nexters.hyomk.dontforget.ui.theme.Gray400
import nexters.hyomk.dontforget.ui.theme.Gray900
import nexters.hyomk.dontforget.ui.theme.Pink500
import nexters.hyomk.dontforget.ui.theme.Primary500
import java.util.Calendar

@OptIn(ExperimentalLayoutApi::class)
@OptIn(ExperimentalLayoutApi::class, ExperimentalMaterialApi::class)
@SuppressLint("UnusedMaterial3ScaffoldPaddingParameter")
@Composable
fun HomeScreen(
Expand All @@ -107,7 +106,6 @@ fun HomeScreen(
val coroutine = rememberCoroutineScope()

val displayMetrics = context.resources.displayMetrics
val maxHeightPx = displayMetrics.heightPixels
val maxWidthPx = displayMetrics.widthPixels

LaunchedEffect(Unit) {
Expand Down Expand Up @@ -137,15 +135,34 @@ fun HomeScreen(
lottieAnimatable.animate(composition)
}

val refreshScope = rememberCoroutineScope()
var refreshing by remember { mutableStateOf(false) }

val state = rememberPullRefreshState(
refreshing = refreshing,
onRefresh = {
refreshing = true
refreshScope.launch {
homeViewModel.getAnniversaryList()
delay(1000)
}.invokeOnCompletion {
refreshing = false
}
},
)

Scaffold(
modifier = Modifier.background(Gray900),
containerColor = Gray900,

) {
Column(
Modifier
.fillMaxSize()
.padding(bottom = 16.dp)
.consumeWindowInsets(it),
.consumeWindowInsets(it)
.pullRefresh(state), // state 적용

) {
val anniversarys = (uiState as HomeUiState.Success).list
val main = (uiState as HomeUiState.Success).main
Expand All @@ -167,9 +184,13 @@ fun HomeScreen(
) {
Box(
modifier = Modifier
.height(560.dp)
.fillMaxWidth()
.background(Pink500),
.height(
if (refreshing) {
600.dp
} else {
lerp(560.dp, 600.dp, state.progress.coerceIn(0f..1f))
},
).fillMaxWidth(),
) {
Image(
painter = painterResource(id = R.drawable.bg_splash),
Expand All @@ -189,6 +210,18 @@ fun HomeScreen(

)

if (refreshing) {
Box(modifier = Modifier.height(80.dp).fillMaxWidth()) {
CircularProgressIndicator(
modifier = Modifier
.size(30.dp)
.align(Alignment.BottomCenter),
color = Color.White,
strokeWidth = 1.dp,
)
}
}

Box(
modifier = Modifier,
) {
Expand Down

0 comments on commit e8619e2

Please sign in to comment.