mirror of
				https://github.com/commons-app/apps-android-commons.git
				synced 2025-10-30 22:34:02 +01:00 
			
		
		
		
	refactor: replace LiveData with StateFlow
This commit is contained in:
		
							parent
							
								
									8af59a7cee
								
							
						
					
					
						commit
						001a23683a
					
				
					 2 changed files with 33 additions and 11 deletions
				
			
		|  | @ -7,8 +7,6 @@ import android.view.ViewGroup | |||
| import android.widget.ImageView | ||||
| import android.widget.Toast | ||||
| import androidx.constraintlayout.widget.Group | ||||
| import androidx.lifecycle.LiveData | ||||
| import androidx.lifecycle.MutableLiveData | ||||
| import androidx.recyclerview.widget.DiffUtil | ||||
| import androidx.recyclerview.widget.RecyclerView | ||||
| import com.bumptech.glide.Glide | ||||
|  | @ -26,6 +24,7 @@ import kotlinx.coroutines.CoroutineScope | |||
| import kotlinx.coroutines.Dispatchers | ||||
| import kotlinx.coroutines.MainScope | ||||
| import kotlinx.coroutines.cancel | ||||
| import kotlinx.coroutines.flow.MutableStateFlow | ||||
| import kotlinx.coroutines.launch | ||||
| import java.util.TreeMap | ||||
| import kotlin.collections.ArrayList | ||||
|  | @ -108,8 +107,8 @@ class ImageAdapter( | |||
|     /** | ||||
|      * Stores the number of images currently visible on the screen | ||||
|      */ | ||||
|     private val _currentImagesCount = MutableLiveData(0) | ||||
|     val currentImagesCountLiveData: LiveData<Int> = _currentImagesCount | ||||
|     private val _currentImagesCount = MutableStateFlow(0) | ||||
|     val currentImagesCount = _currentImagesCount | ||||
| 
 | ||||
|     /** | ||||
|      * Coroutine Dispatchers and Scope. | ||||
|  |  | |||
|  | @ -13,8 +13,11 @@ import android.widget.Switch | |||
| import androidx.appcompat.app.AlertDialog | ||||
| import androidx.constraintlayout.widget.ConstraintLayout | ||||
| import androidx.core.view.isVisible | ||||
| import androidx.lifecycle.Lifecycle | ||||
| import androidx.lifecycle.Observer | ||||
| import androidx.lifecycle.ViewModelProvider | ||||
| import androidx.lifecycle.lifecycleScope | ||||
| import androidx.lifecycle.repeatOnLifecycle | ||||
| import androidx.recyclerview.widget.GridLayoutManager | ||||
| import androidx.recyclerview.widget.RecyclerView | ||||
| import fr.free.nrw.commons.contributions.Contribution | ||||
|  | @ -39,6 +42,10 @@ import fr.free.nrw.commons.theme.BaseActivity | |||
| import fr.free.nrw.commons.upload.FileProcessor | ||||
| import fr.free.nrw.commons.upload.FileUtilsWrapper | ||||
| import io.reactivex.schedulers.Schedulers | ||||
| import kotlinx.coroutines.flow.MutableStateFlow | ||||
| import kotlinx.coroutines.flow.asStateFlow | ||||
| import kotlinx.coroutines.flow.combine | ||||
| import kotlinx.coroutines.launch | ||||
| import java.util.TreeMap | ||||
| import javax.inject.Inject | ||||
| import kotlin.collections.ArrayList | ||||
|  | @ -81,6 +88,12 @@ class ImageFragment : | |||
|      */ | ||||
|     var allImages: ArrayList<Image> = ArrayList() | ||||
| 
 | ||||
|     /** | ||||
|      * Keeps track of switch state | ||||
|      */ | ||||
|     private val _switchState = MutableStateFlow(false) | ||||
|     val switchState = _switchState.asStateFlow() | ||||
| 
 | ||||
|     /** | ||||
|      * View model Factory. | ||||
|      */ | ||||
|  | @ -215,15 +228,25 @@ class ImageFragment : | |||
| 
 | ||||
|         switch = binding?.switchWidget | ||||
|         switch?.visibility = View.VISIBLE | ||||
|         switch?.setOnCheckedChangeListener { _, isChecked -> onChangeSwitchState(isChecked) } | ||||
| 
 | ||||
|         imageAdapter.currentImagesCountLiveData.observe(viewLifecycleOwner, Observer { | ||||
|             if (switch?.isChecked == false && it == 0 && switch?.isVisible == true) { | ||||
|                 binding?.allImagesUploadedOrMarked?.isVisible = true | ||||
|             } else { | ||||
|                 binding?.allImagesUploadedOrMarked?.isVisible = false | ||||
|         _switchState.value = switch?.isChecked ?: false | ||||
|         switch?.setOnCheckedChangeListener { _, isChecked -> | ||||
|             onChangeSwitchState(isChecked) | ||||
|             _switchState.value = isChecked | ||||
|         } | ||||
| 
 | ||||
|         viewLifecycleOwner.lifecycleScope.launch { | ||||
|             repeatOnLifecycle(Lifecycle.State.STARTED) { | ||||
|                 combine( | ||||
|                     imageAdapter.currentImagesCount, | ||||
|                     switchState | ||||
|                 ) { imageCount, isChecked -> | ||||
|                     imageCount to isChecked | ||||
|                 }.collect { (imageCount, isChecked) -> | ||||
|                     binding?.allImagesUploadedOrMarked?.isVisible = | ||||
|                         !isChecked && imageCount == 0 && (switch?.isVisible == true) | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
|         }) | ||||
| 
 | ||||
|         selectorRV = binding?.selectorRv | ||||
|         loader = binding?.loader | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 yuvraj-coder1
						yuvraj-coder1