mirror of
https://github.com/commons-app/apps-android-commons.git
synced 2025-10-26 12:23:58 +01:00
Show progress dialog on mark/unmark photos not for upload (#5322)
This commit is contained in:
parent
b314fe1896
commit
373c6201bd
4 changed files with 83 additions and 26 deletions
|
|
@ -95,6 +95,8 @@ class CustomSelectorActivity : BaseActivity(), FolderClickListener, ImageSelectL
|
|||
*/
|
||||
var imageFragment: ImageFragment? = null
|
||||
|
||||
private var progressDialogText:String=""
|
||||
|
||||
/**
|
||||
* onCreate Activity, sets theme, initialises the view model, setup view.
|
||||
*/
|
||||
|
|
@ -221,6 +223,10 @@ class CustomSelectorActivity : BaseActivity(), FolderClickListener, ImageSelectL
|
|||
*/
|
||||
private fun insertIntoNotForUpload(images: ArrayList<Image>) {
|
||||
scope.launch {
|
||||
imageFragment!!.showMarkUnmarkProgressDialog(
|
||||
text= progressDialogText
|
||||
)
|
||||
|
||||
var allImagesAlreadyNotForUpload = true
|
||||
images.forEach {
|
||||
val imageSHA1 = CustomSelectorUtils.getImageSHA1(
|
||||
|
|
@ -269,6 +275,8 @@ class CustomSelectorActivity : BaseActivity(), FolderClickListener, ImageSelectL
|
|||
}
|
||||
|
||||
imageFragment!!.refresh()
|
||||
imageFragment!!.dismissMarkUnmarkProgressDialog()
|
||||
|
||||
val bottomLayout: ConstraintLayout = findViewById(R.id.bottom_layout)
|
||||
bottomLayout.visibility = View.GONE
|
||||
}
|
||||
|
|
@ -334,8 +342,14 @@ class CustomSelectorActivity : BaseActivity(), FolderClickListener, ImageSelectL
|
|||
|
||||
bottomSheetBinding.notForUpload.text =
|
||||
when (selectedImages.size == selectedNotForUploadImages) {
|
||||
true -> getString(R.string.unmark_as_not_for_upload)
|
||||
else -> getString(R.string.mark_as_not_for_upload)
|
||||
true -> {
|
||||
progressDialogText=getString(R.string.unmarking_as_not_for_upload)
|
||||
getString(R.string.unmark_as_not_for_upload)
|
||||
}
|
||||
else -> {
|
||||
progressDialogText=getString(R.string.marking_as_not_for_upload)
|
||||
getString(R.string.mark_as_not_for_upload)
|
||||
}
|
||||
}
|
||||
|
||||
val bottomLayout: ConstraintLayout = findViewById(R.id.bottom_layout)
|
||||
|
|
|
|||
|
|
@ -9,6 +9,7 @@ import android.view.View
|
|||
import android.view.ViewGroup
|
||||
import android.widget.ProgressBar
|
||||
import android.widget.Switch
|
||||
import androidx.appcompat.app.AlertDialog
|
||||
import androidx.constraintlayout.widget.ConstraintLayout
|
||||
import androidx.lifecycle.Observer
|
||||
import androidx.lifecycle.ViewModelProvider
|
||||
|
|
@ -17,16 +18,17 @@ import androidx.recyclerview.widget.RecyclerView
|
|||
import fr.free.nrw.commons.customselector.database.NotForUploadStatusDao
|
||||
import fr.free.nrw.commons.customselector.database.UploadedStatusDao
|
||||
import fr.free.nrw.commons.customselector.helper.ImageHelper
|
||||
import fr.free.nrw.commons.customselector.listeners.PassDataListener
|
||||
import fr.free.nrw.commons.customselector.helper.ImageHelper.CUSTOM_SELECTOR_PREFERENCE_KEY
|
||||
import fr.free.nrw.commons.customselector.helper.ImageHelper.SHOW_ALREADY_ACTIONED_IMAGES_PREFERENCE_KEY
|
||||
import fr.free.nrw.commons.customselector.listeners.ImageSelectListener
|
||||
import fr.free.nrw.commons.customselector.listeners.PassDataListener
|
||||
import fr.free.nrw.commons.customselector.listeners.RefreshUIListener
|
||||
import fr.free.nrw.commons.customselector.model.CallbackStatus
|
||||
import fr.free.nrw.commons.customselector.model.Image
|
||||
import fr.free.nrw.commons.customselector.model.Result
|
||||
import fr.free.nrw.commons.customselector.ui.adapter.ImageAdapter
|
||||
import fr.free.nrw.commons.databinding.FragmentCustomSelectorBinding
|
||||
import fr.free.nrw.commons.databinding.ProgressDialogBinding
|
||||
import fr.free.nrw.commons.di.CommonsDaggerSupportFragment
|
||||
import fr.free.nrw.commons.media.MediaClient
|
||||
import fr.free.nrw.commons.theme.BaseActivity
|
||||
|
|
@ -34,12 +36,11 @@ import fr.free.nrw.commons.upload.FileProcessor
|
|||
import fr.free.nrw.commons.upload.FileUtilsWrapper
|
||||
import java.util.*
|
||||
import javax.inject.Inject
|
||||
import kotlin.collections.ArrayList
|
||||
|
||||
/**
|
||||
* Custom Selector Image Fragment.
|
||||
*/
|
||||
class ImageFragment: CommonsDaggerSupportFragment(), RefreshUIListener, PassDataListener {
|
||||
class ImageFragment : CommonsDaggerSupportFragment(), RefreshUIListener, PassDataListener {
|
||||
|
||||
private var _binding: FragmentCustomSelectorBinding? = null
|
||||
private val binding get() = _binding
|
||||
|
|
@ -57,7 +58,7 @@ class ImageFragment: CommonsDaggerSupportFragment(), RefreshUIListener, PassData
|
|||
/**
|
||||
* View model for images.
|
||||
*/
|
||||
private var viewModel: CustomSelectorViewModel? = null
|
||||
private var viewModel: CustomSelectorViewModel? = null
|
||||
|
||||
/**
|
||||
* View Elements.
|
||||
|
|
@ -99,6 +100,10 @@ class ImageFragment: CommonsDaggerSupportFragment(), RefreshUIListener, PassData
|
|||
*/
|
||||
private var progressLayout: ConstraintLayout? = null
|
||||
|
||||
private lateinit var progressDialog: AlertDialog
|
||||
private lateinit var progressDialogLayout: ProgressDialogBinding
|
||||
|
||||
|
||||
/**
|
||||
* NotForUploadStatus Dao class for database operations
|
||||
*/
|
||||
|
|
@ -163,7 +168,9 @@ class ImageFragment: CommonsDaggerSupportFragment(), RefreshUIListener, PassData
|
|||
super.onCreate(savedInstanceState)
|
||||
bucketId = arguments?.getLong(BUCKET_ID)
|
||||
lastItemId = arguments?.getLong(LAST_ITEM_ID, 0)
|
||||
viewModel = ViewModelProvider(requireActivity(),customSelectorViewModelFactory).get(CustomSelectorViewModel::class.java)
|
||||
viewModel = ViewModelProvider(requireActivity(), customSelectorViewModelFactory).get(
|
||||
CustomSelectorViewModel::class.java
|
||||
)
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -171,17 +178,22 @@ class ImageFragment: CommonsDaggerSupportFragment(), RefreshUIListener, PassData
|
|||
* Init imageAdapter, gridLayoutManger.
|
||||
* SetUp recycler view.
|
||||
*/
|
||||
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
|
||||
override fun onCreateView(
|
||||
inflater: LayoutInflater,
|
||||
container: ViewGroup?,
|
||||
savedInstanceState: Bundle?
|
||||
): View? {
|
||||
_binding = FragmentCustomSelectorBinding.inflate(inflater, container, false)
|
||||
imageAdapter = ImageAdapter(requireActivity(), activity as ImageSelectListener, imageLoader!!)
|
||||
gridLayoutManager = GridLayoutManager(context,getSpanCount())
|
||||
with(binding?.selectorRv){
|
||||
imageAdapter =
|
||||
ImageAdapter(requireActivity(), activity as ImageSelectListener, imageLoader!!)
|
||||
gridLayoutManager = GridLayoutManager(context, getSpanCount())
|
||||
with(binding?.selectorRv) {
|
||||
this?.layoutManager = gridLayoutManager
|
||||
this?.setHasFixedSize(true)
|
||||
this?.adapter = imageAdapter
|
||||
}
|
||||
|
||||
viewModel?.result?.observe(viewLifecycleOwner, Observer{
|
||||
viewModel?.result?.observe(viewLifecycleOwner, Observer {
|
||||
handleResult(it)
|
||||
})
|
||||
|
||||
|
|
@ -194,9 +206,16 @@ class ImageFragment: CommonsDaggerSupportFragment(), RefreshUIListener, PassData
|
|||
|
||||
val sharedPreferences: SharedPreferences =
|
||||
requireContext().getSharedPreferences(CUSTOM_SELECTOR_PREFERENCE_KEY, MODE_PRIVATE)
|
||||
showAlreadyActionedImages = sharedPreferences.getBoolean(SHOW_ALREADY_ACTIONED_IMAGES_PREFERENCE_KEY, true)
|
||||
showAlreadyActionedImages =
|
||||
sharedPreferences.getBoolean(SHOW_ALREADY_ACTIONED_IMAGES_PREFERENCE_KEY, true)
|
||||
switch?.isChecked = showAlreadyActionedImages
|
||||
|
||||
val builder = AlertDialog.Builder(requireActivity())
|
||||
builder.setCancelable(false)
|
||||
progressDialogLayout = ProgressDialogBinding.inflate(layoutInflater, container, false)
|
||||
builder.setView(progressDialogLayout.root)
|
||||
progressDialog = builder.create()
|
||||
|
||||
return binding?.root
|
||||
}
|
||||
|
||||
|
|
@ -236,10 +255,10 @@ class ImageFragment: CommonsDaggerSupportFragment(), RefreshUIListener, PassData
|
|||
/**
|
||||
* Handle view model result.
|
||||
*/
|
||||
private fun handleResult(result:Result){
|
||||
if(result.status is CallbackStatus.SUCCESS){
|
||||
private fun handleResult(result: Result) {
|
||||
if (result.status is CallbackStatus.SUCCESS) {
|
||||
val images = result.images
|
||||
if(images.isNotEmpty()) {
|
||||
if (images.isNotEmpty()) {
|
||||
filteredImages = ImageHelper.filterImages(images, bucketId)
|
||||
allImages = ArrayList(filteredImages)
|
||||
imageAdapter.init(filteredImages, allImages, TreeMap())
|
||||
|
|
@ -250,18 +269,18 @@ class ImageFragment: CommonsDaggerSupportFragment(), RefreshUIListener, PassData
|
|||
.scrollToPosition(ImageHelper.getIndexFromId(filteredImages, pos))
|
||||
}
|
||||
}
|
||||
}
|
||||
else{
|
||||
} else {
|
||||
binding?.emptyText?.let {
|
||||
it.visibility = View.VISIBLE
|
||||
}
|
||||
selectorRV?.let{
|
||||
selectorRV?.let {
|
||||
it.visibility = View.GONE
|
||||
}
|
||||
}
|
||||
}
|
||||
loader?.let {
|
||||
it.visibility = if (result.status is CallbackStatus.FETCHING) View.VISIBLE else View.GONE
|
||||
it.visibility =
|
||||
if (result.status is CallbackStatus.FETCHING) View.VISIBLE else View.GONE
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -324,7 +343,7 @@ class ImageFragment: CommonsDaggerSupportFragment(), RefreshUIListener, PassData
|
|||
* Passes selected images and other information from Activity to Fragment and connects it with
|
||||
* the adapter
|
||||
*/
|
||||
override fun passSelectedImages(selectedImages: ArrayList<Image>, shouldRefresh: Boolean){
|
||||
override fun passSelectedImages(selectedImages: ArrayList<Image>, shouldRefresh: Boolean) {
|
||||
imageAdapter.setSelectedImages(selectedImages)
|
||||
|
||||
if (!showAlreadyActionedImages && shouldRefresh) {
|
||||
|
|
@ -332,4 +351,24 @@ class ImageFragment: CommonsDaggerSupportFragment(), RefreshUIListener, PassData
|
|||
imageAdapter.setSelectedImages(selectedImages)
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Shows mark/unmark progress dialog
|
||||
*/
|
||||
fun showMarkUnmarkProgressDialog(text: String) {
|
||||
if (!progressDialog.isShowing) {
|
||||
progressDialogLayout.progressDialogText.text = text
|
||||
progressDialog.show()
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Dismisses mark/unmark progress dialog
|
||||
*/
|
||||
fun dismissMarkUnmarkProgressDialog() {
|
||||
if (progressDialog.isShowing) {
|
||||
progressDialog.dismiss()
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -1,11 +1,12 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:orientation="horizontal"
|
||||
android:id="@+id/progressDialog"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginHorizontal="10dp"
|
||||
android:paddingVertical="20dp"
|
||||
android:layout_weight="2"
|
||||
android:layout_height="wrap_content">
|
||||
android:orientation="horizontal"
|
||||
android:paddingVertical="20dp">
|
||||
|
||||
<ProgressBar
|
||||
android:layout_width="0dp"
|
||||
|
|
@ -13,11 +14,12 @@
|
|||
android:layout_weight="0.6" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/progressDialogText"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/pausing_upload"
|
||||
android:layout_weight="1.5"
|
||||
android:layout_gravity="center"
|
||||
android:layout_weight="1.5"
|
||||
android:text="@string/pausing_upload"
|
||||
android:textSize="14sp" />
|
||||
|
||||
</LinearLayout>
|
||||
|
|
@ -756,6 +756,8 @@ Upload your first media by tapping on the add button.</string>
|
|||
<string name="your_feedback">Your feedback</string>
|
||||
<string name="mark_as_not_for_upload">Mark as not for upload</string>
|
||||
<string name="unmark_as_not_for_upload">Unmark as not for upload</string>
|
||||
<string name="marking_as_not_for_upload">Marking as not for upload</string>
|
||||
<string name="unmarking_as_not_for_upload">Unmarking as not for upload</string>
|
||||
<string name="show_already_actioned_pictures">Show already actioned pictures</string>
|
||||
<string name="hiding_already_actioned_pictures">Hiding already actioned pictures</string>
|
||||
<string name="no_more_images_found">No more images found</string>
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue