mirror of
https://github.com/commons-app/apps-android-commons.git
synced 2025-10-26 12:23:58 +01:00
Merge 38cd528fc7 into aae9d4a387
This commit is contained in:
commit
5ab7f5fb50
2 changed files with 84 additions and 56 deletions
|
|
@ -28,8 +28,11 @@ class PendingUploadsFragment :
|
||||||
CommonsDaggerSupportFragment(),
|
CommonsDaggerSupportFragment(),
|
||||||
PendingUploadsContract.View,
|
PendingUploadsContract.View,
|
||||||
PendingUploadsAdapter.Callback {
|
PendingUploadsAdapter.Callback {
|
||||||
|
|
||||||
|
//fix:public and nullable to allow the dagger injection and prevent crash on the rotation.
|
||||||
@Inject
|
@Inject
|
||||||
lateinit var pendingUploadsPresenter: PendingUploadsPresenter
|
@JvmField
|
||||||
|
var pendingUploadsPresenter: PendingUploadsPresenter? = null
|
||||||
|
|
||||||
private lateinit var binding: FragmentPendingUploadsBinding
|
private lateinit var binding: FragmentPendingUploadsBinding
|
||||||
|
|
||||||
|
|
@ -55,15 +58,11 @@ class PendingUploadsFragment :
|
||||||
): View {
|
): View {
|
||||||
super.onCreate(savedInstanceState)
|
super.onCreate(savedInstanceState)
|
||||||
binding = FragmentPendingUploadsBinding.inflate(inflater, container, false)
|
binding = FragmentPendingUploadsBinding.inflate(inflater, container, false)
|
||||||
pendingUploadsPresenter.onAttachView(this)
|
pendingUploadsPresenter?.onAttachView(this)
|
||||||
initAdapter()
|
initAdapter()
|
||||||
return binding.root
|
return binding.root
|
||||||
}
|
}
|
||||||
|
|
||||||
fun initAdapter() {
|
|
||||||
adapter = PendingUploadsAdapter(this)
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onViewCreated(
|
override fun onViewCreated(
|
||||||
view: View,
|
view: View,
|
||||||
savedInstanceState: Bundle?,
|
savedInstanceState: Bundle?,
|
||||||
|
|
@ -72,47 +71,51 @@ class PendingUploadsFragment :
|
||||||
initRecyclerView()
|
initRecyclerView()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun initAdapter() {
|
||||||
|
adapter = PendingUploadsAdapter(this)
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Initializes the recycler view.
|
* Initializes the recycler view.
|
||||||
*/
|
*/
|
||||||
private fun initRecyclerView() {
|
private fun initRecyclerView() {
|
||||||
binding.pendingUploadsRecyclerView.setLayoutManager(LinearLayoutManager(this.context))
|
binding.pendingUploadsRecyclerView.setLayoutManager(LinearLayoutManager(this.context))
|
||||||
binding.pendingUploadsRecyclerView.adapter = adapter
|
binding.pendingUploadsRecyclerView.adapter = adapter
|
||||||
pendingUploadsPresenter.setup()
|
pendingUploadsPresenter?.setup()
|
||||||
pendingUploadsPresenter.totalContributionList
|
pendingUploadsPresenter?.totalContributionList
|
||||||
.observe(viewLifecycleOwner) { list: PagedList<Contribution> ->
|
?.observe(viewLifecycleOwner) { list: PagedList<Contribution> ->
|
||||||
contributionsSize = list.size
|
contributionsSize = list.size
|
||||||
contributionsList = mutableListOf()
|
contributionsList = mutableListOf()
|
||||||
var pausedOrQueuedUploads = 0
|
var pausedOrQueuedUploads = 0
|
||||||
list.forEach {
|
list.forEach {
|
||||||
if (it != null) {
|
if (it != null) {
|
||||||
if (it.state == STATE_PAUSED ||
|
if (it.state == STATE_PAUSED ||
|
||||||
it.state == STATE_QUEUED ||
|
it.state == STATE_QUEUED ||
|
||||||
it.state == STATE_IN_PROGRESS
|
it.state == STATE_IN_PROGRESS
|
||||||
) {
|
) {
|
||||||
contributionsList.add(it)
|
contributionsList.add(it)
|
||||||
}
|
}
|
||||||
if (it.state == STATE_PAUSED || it.state == STATE_QUEUED) {
|
if (it.state == STATE_PAUSED || it.state == STATE_QUEUED) {
|
||||||
pausedOrQueuedUploads++
|
pausedOrQueuedUploads++
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
if (contributionsSize == 0) {
|
||||||
if (contributionsSize == 0) {
|
binding.nopendingTextView.visibility = View.VISIBLE
|
||||||
binding.nopendingTextView.visibility = View.VISIBLE
|
binding.pendingUplaodsLl.visibility = View.GONE
|
||||||
binding.pendingUplaodsLl.visibility = View.GONE
|
uploadProgressActivity.hidePendingIcons()
|
||||||
uploadProgressActivity.hidePendingIcons()
|
|
||||||
} else {
|
|
||||||
binding.nopendingTextView.visibility = View.GONE
|
|
||||||
binding.pendingUplaodsLl.visibility = View.VISIBLE
|
|
||||||
adapter.submitList(list)
|
|
||||||
binding.progressTextView.setText("$contributionsSize uploads left")
|
|
||||||
if ((pausedOrQueuedUploads == contributionsSize) || CommonsApplication.isPaused) {
|
|
||||||
uploadProgressActivity.setPausedIcon(true)
|
|
||||||
} else {
|
} else {
|
||||||
uploadProgressActivity.setPausedIcon(false)
|
binding.nopendingTextView.visibility = View.GONE
|
||||||
|
binding.pendingUplaodsLl.visibility = View.VISIBLE
|
||||||
|
adapter.submitList(list)
|
||||||
|
binding.progressTextView.setText("$contributionsSize uploads left")
|
||||||
|
if ((pausedOrQueuedUploads == contributionsSize) || CommonsApplication.isPaused) {
|
||||||
|
uploadProgressActivity.setPausedIcon(true)
|
||||||
|
} else {
|
||||||
|
uploadProgressActivity.setPausedIcon(false)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -129,7 +132,8 @@ class PendingUploadsFragment :
|
||||||
String.format(locale, activity.getString(R.string.no)),
|
String.format(locale, activity.getString(R.string.no)),
|
||||||
{
|
{
|
||||||
ViewUtil.showShortToast(context, R.string.cancelling_upload)
|
ViewUtil.showShortToast(context, R.string.cancelling_upload)
|
||||||
pendingUploadsPresenter.deleteUpload(
|
// uses the safe call directly
|
||||||
|
pendingUploadsPresenter?.deleteUpload(
|
||||||
contribution, requireContext().applicationContext,
|
contribution, requireContext().applicationContext,
|
||||||
)
|
)
|
||||||
},
|
},
|
||||||
|
|
@ -140,19 +144,24 @@ class PendingUploadsFragment :
|
||||||
/**
|
/**
|
||||||
* Restarts all the paused uploads.
|
* Restarts all the paused uploads.
|
||||||
*/
|
*/
|
||||||
fun restartUploads() = pendingUploadsPresenter.restartUploads(
|
fun restartUploads() {
|
||||||
contributionsList, 0, requireContext().applicationContext
|
pendingUploadsPresenter?.restartUploads(
|
||||||
)
|
contributionsList, 0, requireContext().applicationContext
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Pauses all the ongoing uploads.
|
* Pauses all the ongoing uploads.
|
||||||
*/
|
*/
|
||||||
fun pauseUploads() = pendingUploadsPresenter.pauseUploads()
|
fun pauseUploads() { pendingUploadsPresenter?.pauseUploads()
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Cancels all the uploads after getting a confirmation from the user using Dialog.
|
* Cancels all the uploads after getting a confirmation from the user using Dialog.
|
||||||
*/
|
*/
|
||||||
fun deleteUploads() {
|
fun deleteUploads() {
|
||||||
|
pendingUploadsPresenter ?: return
|
||||||
|
|
||||||
val activity = requireActivity()
|
val activity = requireActivity()
|
||||||
val locale = Locale.getDefault()
|
val locale = Locale.getDefault()
|
||||||
showAlertDialog(
|
showAlertDialog(
|
||||||
|
|
@ -164,7 +173,7 @@ class PendingUploadsFragment :
|
||||||
{
|
{
|
||||||
ViewUtil.showShortToast(context, R.string.cancelling_upload)
|
ViewUtil.showShortToast(context, R.string.cancelling_upload)
|
||||||
uploadProgressActivity.hidePendingIcons()
|
uploadProgressActivity.hidePendingIcons()
|
||||||
pendingUploadsPresenter.deleteUploads(
|
pendingUploadsPresenter?.deleteUploads(
|
||||||
listOf(
|
listOf(
|
||||||
STATE_QUEUED,
|
STATE_QUEUED,
|
||||||
STATE_IN_PROGRESS,
|
STATE_IN_PROGRESS,
|
||||||
|
|
|
||||||
|
|
@ -21,8 +21,6 @@ import javax.inject.Inject
|
||||||
*/
|
*/
|
||||||
class UploadProgressActivity : BaseActivity() {
|
class UploadProgressActivity : BaseActivity() {
|
||||||
private lateinit var binding: ActivityUploadProgressBinding
|
private lateinit var binding: ActivityUploadProgressBinding
|
||||||
private var pendingUploadsFragment: PendingUploadsFragment? = null
|
|
||||||
private var failedUploadsFragment: FailedUploadsFragment? = null
|
|
||||||
var viewPagerAdapter: ViewPagerAdapter? = null
|
var viewPagerAdapter: ViewPagerAdapter? = null
|
||||||
var menu: Menu? = null
|
var menu: Menu? = null
|
||||||
|
|
||||||
|
|
@ -68,18 +66,37 @@ class UploadProgressActivity : BaseActivity() {
|
||||||
setTabs()
|
setTabs()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun getPendingUploadsFragment(): PendingUploadsFragment? {
|
||||||
|
return supportFragmentManager.findFragmentByTag(
|
||||||
|
"android:switcher:${R.id.upload_progress_view_pager}:${0}",
|
||||||
|
) as? PendingUploadsFragment
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// the helper to retrieve the current, non-stale FailedUploadsFragment instance.
|
||||||
|
|
||||||
|
private fun getFailedUploadsFragment(): FailedUploadsFragment? {
|
||||||
|
return supportFragmentManager.findFragmentByTag(
|
||||||
|
"android:switcher:${R.id.upload_progress_view_pager}:${1}",
|
||||||
|
) as? FailedUploadsFragment
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Initializes and sets up the tabs data by creating instances of `PendingUploadsFragment`
|
* Initializes and sets up the tabs data by creating instances of `PendingUploadsFragment`
|
||||||
* and `FailedUploadsFragment`, adds them to the `fragmentList`, and assigns corresponding
|
* and `FailedUploadsFragment`, adds them to the `fragmentList`, and assigns corresponding
|
||||||
* titles from resources to the `titleList`.
|
* titles from resources to the `titleList`.
|
||||||
*/
|
*/
|
||||||
fun setTabs() {
|
fun setTabs() {
|
||||||
pendingUploadsFragment = PendingUploadsFragment()
|
val pendingUploadsFragment: Fragment
|
||||||
failedUploadsFragment = FailedUploadsFragment()
|
val failedUploadsFragment: Fragment
|
||||||
|
|
||||||
|
// checks if the fragmentManager already has the fragments (after the rotation)
|
||||||
|
pendingUploadsFragment = getPendingUploadsFragment() ?: PendingUploadsFragment()
|
||||||
|
failedUploadsFragment = getFailedUploadsFragment() ?: FailedUploadsFragment()
|
||||||
|
|
||||||
viewPagerAdapter!!.setTabs(
|
viewPagerAdapter!!.setTabs(
|
||||||
R.string.pending to pendingUploadsFragment!!,
|
R.string.pending to pendingUploadsFragment,
|
||||||
R.string.failed to failedUploadsFragment!!
|
R.string.failed to failedUploadsFragment
|
||||||
)
|
)
|
||||||
viewPagerAdapter!!.notifyDataSetChanged()
|
viewPagerAdapter!!.notifyDataSetChanged()
|
||||||
}
|
}
|
||||||
|
|
@ -119,7 +136,8 @@ class UploadProgressActivity : BaseActivity() {
|
||||||
getString(R.string.pause),
|
getString(R.string.pause),
|
||||||
).setIcon(R.drawable.pause_icon)
|
).setIcon(R.drawable.pause_icon)
|
||||||
.setOnMenuItemClickListener {
|
.setOnMenuItemClickListener {
|
||||||
pendingUploadsFragment!!.pauseUploads()
|
//retrieves the current fragment instance just before the use
|
||||||
|
getPendingUploadsFragment()?.pauseUploads()
|
||||||
setPausedIcon(true)
|
setPausedIcon(true)
|
||||||
true
|
true
|
||||||
}.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM)
|
}.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM)
|
||||||
|
|
@ -133,7 +151,8 @@ class UploadProgressActivity : BaseActivity() {
|
||||||
getString(R.string.cancel),
|
getString(R.string.cancel),
|
||||||
).setIcon(R.drawable.ic_cancel_upload)
|
).setIcon(R.drawable.ic_cancel_upload)
|
||||||
.setOnMenuItemClickListener {
|
.setOnMenuItemClickListener {
|
||||||
pendingUploadsFragment!!.deleteUploads()
|
//retrieve the current fragment instance just before thee use
|
||||||
|
getPendingUploadsFragment()?.deleteUploads()
|
||||||
true
|
true
|
||||||
}.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM)
|
}.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM)
|
||||||
}
|
}
|
||||||
|
|
@ -147,7 +166,8 @@ class UploadProgressActivity : BaseActivity() {
|
||||||
getString(R.string.resume),
|
getString(R.string.resume),
|
||||||
).setIcon(R.drawable.play_icon)
|
).setIcon(R.drawable.play_icon)
|
||||||
.setOnMenuItemClickListener {
|
.setOnMenuItemClickListener {
|
||||||
pendingUploadsFragment!!.restartUploads()
|
//retrieve the current fragment instance just before the use
|
||||||
|
getPendingUploadsFragment()?.restartUploads()
|
||||||
setPausedIcon(false)
|
setPausedIcon(false)
|
||||||
true
|
true
|
||||||
}.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM)
|
}.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM)
|
||||||
|
|
@ -160,8 +180,7 @@ class UploadProgressActivity : BaseActivity() {
|
||||||
menu!!
|
menu!!
|
||||||
.add(Menu.NONE, R.id.retry_icon, Menu.NONE, getString(R.string.retry))
|
.add(Menu.NONE, R.id.retry_icon, Menu.NONE, getString(R.string.retry))
|
||||||
.setIcon(R.drawable.ic_refresh_24dp)
|
.setIcon(R.drawable.ic_refresh_24dp)
|
||||||
.setOnMenuItemClickListener {
|
.setOnMenuItemClickListener { getFailedUploadsFragment()?.restartUploads()
|
||||||
failedUploadsFragment!!.restartUploads()
|
|
||||||
true
|
true
|
||||||
}.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM)
|
}.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM)
|
||||||
}
|
}
|
||||||
|
|
@ -174,7 +193,7 @@ class UploadProgressActivity : BaseActivity() {
|
||||||
getString(R.string.cancel),
|
getString(R.string.cancel),
|
||||||
).setIcon(R.drawable.ic_cancel_upload)
|
).setIcon(R.drawable.ic_cancel_upload)
|
||||||
.setOnMenuItemClickListener {
|
.setOnMenuItemClickListener {
|
||||||
failedUploadsFragment!!.deleteUploads()
|
getFailedUploadsFragment()?.deleteUploads()
|
||||||
true
|
true
|
||||||
}.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM)
|
}.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue