Skip to content

Commit

Permalink
[feat/indicator]: Indicator 추가
Browse files Browse the repository at this point in the history
  • Loading branch information
kez-lab committed Jul 7, 2023
1 parent f510097 commit 2e4c42d
Show file tree
Hide file tree
Showing 7 changed files with 109 additions and 12 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,18 @@ package com.teampophory.pophory.feature.album
import android.os.Bundle
import androidx.activity.viewModels
import androidx.appcompat.app.AppCompatActivity
import androidx.lifecycle.Lifecycle
import androidx.lifecycle.flowWithLifecycle
import androidx.lifecycle.lifecycleScope
import androidx.recyclerview.widget.LinearLayoutManager
import com.teampophory.pophory.common.activity.hideLoading
import com.teampophory.pophory.common.activity.showLoading
import com.teampophory.pophory.common.view.viewBinding
import com.teampophory.pophory.databinding.ActivityAlbumListBinding
import com.teampophory.pophory.feature.album.adapter.AlbumAdapter
import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.flow.launchIn
import kotlinx.coroutines.flow.onEach

@AndroidEntryPoint
class AlbumListActivity : AppCompatActivity() {
Expand All @@ -23,22 +30,28 @@ class AlbumListActivity : AppCompatActivity() {
}

private fun initObserver() {
viewModel.albumList.observe(this) { albumState ->
viewModel.albumList.flowWithLifecycle(lifecycle, Lifecycle.State.STARTED).onEach { albumState ->
when (albumState) {
is AlbumState.Uninitialized -> {
initRecyclerView()
viewModel.getAlbums()
}

is AlbumState.Loading -> {}
is AlbumState.Loading -> {
showLoading()
}

is AlbumState.SuccessAlbums -> {
hideLoading()
albumAdapter.submitList(albumState.data)
}

is AlbumState.Error -> {}
is AlbumState.Error -> {
hideLoading()
//TODO ERROR 처리
}
}
}
}.launchIn(lifecycleScope)
}

private fun initRecyclerView() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@ import androidx.lifecycle.viewModelScope
import com.teampophory.pophory.data.repository.photo.PhotoRepository
import com.teampophory.pophory.network.model.toPhotoList
import dagger.hilt.android.lifecycle.HiltViewModel
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.StateFlow
import kotlinx.coroutines.launch
import timber.log.Timber
import javax.inject.Inject
Expand All @@ -16,18 +18,18 @@ class AlbumListViewModel @Inject constructor(
private val photoRepository: PhotoRepository
) : ViewModel() {

private val _albumList = MutableLiveData<AlbumState>(AlbumState.Uninitialized)
val albumList: LiveData<AlbumState> get() = _albumList
private val _albumList = MutableStateFlow<AlbumState>(AlbumState.Uninitialized)
val albumList: StateFlow<AlbumState> get() = _albumList

fun getAlbums() {
viewModelScope.launch {
_albumList.value = AlbumState.Loading
_albumList.emit(AlbumState.Loading)
photoRepository.getPhotos()
.onSuccess {
_albumList.value = AlbumState.SuccessAlbums(it.toPhotoList())
_albumList.emit(AlbumState.SuccessAlbums(it.toPhotoList()))
}.onFailure {
Timber.e(it)
_albumList.value = AlbumState.Error(it)
_albumList.emit(AlbumState.Error(it))
}
}
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,8 @@
package com.teampophory.pophory.feature.onboarding

import android.content.Context
import android.content.Intent
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import androidx.appcompat.content.res.AppCompatResources
import androidx.core.content.ContextCompat
import androidx.core.splashscreen.SplashScreen.Companion.installSplashScreen
import androidx.viewpager2.widget.ViewPager2
import com.teampophory.pophory.R
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package com.teampophory.pophory.common.activity

import androidx.appcompat.app.AppCompatActivity
import com.teampophory.pophory.common.view.LoadingProgressIndicator

fun AppCompatActivity.showLoading() {
supportFragmentManager.beginTransaction()
.add(LoadingProgressIndicator.newInstance(), LoadingProgressIndicator.TAG)
.commitAllowingStateLoss()
}

fun AppCompatActivity.hideLoading() {
supportFragmentManager.findFragmentByTag(LoadingProgressIndicator.TAG)?.let {
supportFragmentManager.beginTransaction()
.remove(it)
.commitAllowingStateLoss()
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import androidx.core.content.ContextCompat
import androidx.fragment.app.Fragment
import androidx.lifecycle.lifecycleScope
import com.google.android.material.snackbar.Snackbar
import com.teampophory.pophory.common.view.LoadingProgressIndicator

fun Fragment.toast(message: String) {
Toast.makeText(requireContext(), message, Toast.LENGTH_SHORT).show()
Expand All @@ -28,6 +29,20 @@ fun Fragment.colorOf(@ColorRes resId: Int) = ContextCompat.getColor(requireConte

fun Fragment.drawableOf(@DrawableRes resId: Int) = ContextCompat.getDrawable(requireContext(), resId)

fun Fragment.showLoading() {
childFragmentManager.beginTransaction()
.add(LoadingProgressIndicator.newInstance(), LoadingProgressIndicator.TAG)
.commitAllowingStateLoss()
}

fun Fragment.hideLoading() {
childFragmentManager.findFragmentByTag(LoadingProgressIndicator.TAG)?.let {
childFragmentManager.beginTransaction()
.remove(it)
.commitAllowingStateLoss()
}
}

val Fragment.viewLifeCycle
get() = viewLifecycleOwner.lifecycle

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
package com.teampophory.pophory.common.view

import android.graphics.Color
import android.graphics.drawable.ColorDrawable
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.DialogFragment
import com.teampophory.pophory.common.R

class LoadingProgressIndicator : DialogFragment() {

override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
isCancelable = false
return inflater.inflate(R.layout.fragment_progress_dialog, container, false)
}

override fun onStart() {
super.onStart()
context?.let {
dialog?.window?.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))
}
}

companion object {
const val TAG = "LoadingProgressIndicator"
@JvmStatic
fun newInstance() = LoadingProgressIndicator()
}
}
18 changes: 18 additions & 0 deletions core/common/src/main/res/layout/fragment_progress_dialog.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"
android:layout_width="match_parent"
android:layout_height="match_parent">

<com.google.android.material.progressindicator.CircularProgressIndicator
android:id="@+id/cpiLoading"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:indeterminate="true"
android:theme="@style/Widget.Material3.CircularProgressIndicator"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />

</androidx.constraintlayout.widget.ConstraintLayout>

0 comments on commit 2e4c42d

Please sign in to comment.