Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

library: smoother select all (fixes #4493) #5357

Draft
wants to merge 2 commits into
base: master
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -755,6 +755,7 @@ class DashboardActivity : DashboardElementActivity(), OnHomeItemClickListener, N
}

private fun menuAction(selectedMenuId: Int) {
ResourcesFragment.clearSelectionState()
when (selectedMenuId) {
R.string.menu_myplanet -> openCallFragment(BellDashboardFragment())
R.string.menu_library -> openCallFragment(ResourcesFragment())
Expand Down Expand Up @@ -873,6 +874,7 @@ class DashboardActivity : DashboardElementActivity(), OnHomeItemClickListener, N

override fun onNavigationItemSelected(item: MenuItem): Boolean {
item.isChecked = true
ResourcesFragment.clearSelectionState()
when (item.itemId) {
R.id.menu_library -> {
openCallFragment(ResourcesFragment())
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -755,6 +755,7 @@ class DashboardActivity : DashboardElementActivity(), OnHomeItemClickListener, N
}

private fun menuAction(selectedMenuId: Int) {
ResourcesFragment.clearSelectionState()
when (selectedMenuId) {
R.string.menu_myplanet -> openCallFragment(BellDashboardFragment())
R.string.menu_library -> openCallFragment(ResourcesFragment())
Expand Down Expand Up @@ -873,6 +874,7 @@ class DashboardActivity : DashboardElementActivity(), OnHomeItemClickListener, N

override fun onNavigationItemSelected(item: MenuItem): Boolean {
item.isChecked = true
ResourcesFragment.clearSelectionState()
when (item.itemId) {
R.id.menu_library -> {
openCallFragment(ResourcesFragment())
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package org.ole.planet.myplanet.ui.resources

import android.content.Context
import android.text.TextUtils
import android.util.Log
import android.view.LayoutInflater
import android.view.MotionEvent
import android.view.View
Expand Down Expand Up @@ -87,7 +88,10 @@ class AdapterResource(private val context: Context, private var libraryList: Lis
}
holder.rowLibraryBinding.tvDate.text = libraryList[position]?.createdDate?.let { formatDate(it, "MMM dd, yyyy") }
displayTagCloud(holder.rowLibraryBinding.flexboxDrawable, position)
holder.itemView.setOnClickListener { openLibrary(libraryList[position]) }
holder.itemView.setOnClickListener {
Log.d("okuro", "AdapterResource onBindViewHolder: ${libraryList[position]?.id}")
openLibrary(libraryList[position])
}
userModel = UserProfileDbHandler(context).userModel
if (libraryList[position]?.isResourceOffline() == true) {
holder.rowLibraryBinding.ivDownloaded.visibility = View.INVISIBLE
Expand All @@ -109,8 +113,7 @@ class AdapterResource(private val context: Context, private var libraryList: Lis

if (userModel?.isGuest() == false) {
holder.rowLibraryBinding.checkbox.setOnClickListener { view: View ->
holder.rowLibraryBinding.checkbox.contentDescription =
context.getString(R.string.select_res_course, libraryList[position]?.title)
holder.rowLibraryBinding.checkbox.contentDescription = context.getString(R.string.select_res_course, libraryList[position]?.title)
Utilities.handleCheck((view as CheckBox).isChecked, position, selectedItems, libraryList)
if (listener != null) listener?.onSelectedListChange(selectedItems)
}
Expand All @@ -129,16 +132,24 @@ class AdapterResource(private val context: Context, private var libraryList: Lis
if (selectAll) {
selectedItems.clear()
selectedItems.addAll(libraryList)
ResourcesFragment.wasAllSelected = true
} else {
selectedItems.clear()
ResourcesFragment.wasAllSelected = false
}
ResourcesFragment.lastSelectionState.clear()
for (item in selectedItems) {
item?.id?.let { ResourcesFragment.lastSelectionState.add(it) }
}

notifyDataSetChanged()
if (listener != null) {
listener?.onSelectedListChange(selectedItems)
}
}

private fun openLibrary(library: RealmMyLibrary?) {
ResourcesFragment.enableSelectionRestoration()
homeItemClickListener?.openLibraryDetailFragment(library)
}

Expand Down Expand Up @@ -195,6 +206,22 @@ class AdapterResource(private val context: Context, private var libraryList: Lis
return libraryList.size
}

fun restoreSelectionState(itemIds: List<String>) {
selectedItems.clear()
for (id in itemIds) {
for (currentItem in libraryList) {
if (currentItem?.id == id) {
selectedItems.add(currentItem)
break
}
}
}
notifyDataSetChanged()
if (listener != null) {
listener?.onSelectedListChange(selectedItems)
}
}

internal inner class ViewHolderLibrary(val rowLibraryBinding: RowLibraryBinding) :
RecyclerView.ViewHolder(rowLibraryBinding.root) {
init {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,7 @@ class ResourcesFragment : BaseRecyclerFragment<RealmMyLibrary?>(), OnLibraryItem

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
isMyCourseLib = arguments?.getBoolean("isMyCourseLib", false) ?: false
isMyCourseLib = arguments?.getBoolean("isMyCourseLib", false) == true
userModel = UserProfileDbHandler(requireContext()).userModel
searchTags = ArrayList()
config = Utilities.getCloudConfig().showClose(R.color.black_overlay)
Expand All @@ -97,6 +97,22 @@ class ResourcesFragment : BaseRecyclerFragment<RealmMyLibrary?>(), OnLibraryItem
tvSelected.visibility = View.VISIBLE
}
initArrays()
view.post {
if (shouldRestoreSelection && lastSelectionState.isNotEmpty()) {
adapterLibrary.restoreSelectionState(lastSelectionState)

if (wasAllSelected) {
selectAll.isChecked = true
selectAll.text = getString(R.string.unselect_all)
} else {
selectAll.isChecked = false
selectAll.text = getString(R.string.select_all)
}
} else {
selectAll.isChecked = false
selectAll.text = getString(R.string.select_all)
}
}
hideButton()

if(userModel?.isGuest() == true){
Expand Down Expand Up @@ -234,16 +250,16 @@ class ResourcesFragment : BaseRecyclerFragment<RealmMyLibrary?>(), OnLibraryItem
builder.setMessage(msg)
builder.setCancelable(true)
.setPositiveButton(R.string.go_to_mylibrary) { dialog: DialogInterface, _: Int ->
if (userModel?.id?.startsWith("guest") == true) {
guestDialog(requireContext())
} else {
val fragment = ResourcesFragment().apply {
arguments = Bundle().apply {
putBoolean("isMyCourseLib", true)
}
if (userModel?.id?.startsWith("guest") == true) {
guestDialog(requireContext())
} else {
val fragment = ResourcesFragment().apply {
arguments = Bundle().apply {
putBoolean("isMyCourseLib", true)
}
homeItemClickListener?.openMyFragment(fragment)
}
homeItemClickListener?.openMyFragment(fragment)
}
}
builder.setNegativeButton(getString(R.string.ok)) { dialog: DialogInterface, _: Int ->
dialog.cancel()
Expand Down Expand Up @@ -274,6 +290,12 @@ class ResourcesFragment : BaseRecyclerFragment<RealmMyLibrary?>(), OnLibraryItem

override fun onSelectedListChange(list: MutableList<RealmMyLibrary?>) {
selectedItems = list
lastSelectionState.clear()
for (item in list) {
item?.id?.let { lastSelectionState.add(it) }
}
wasAllSelected = list.size == adapterLibrary.getLibraryList().size

changeButtonStatus()
hideButton()
}
Expand Down Expand Up @@ -422,4 +444,20 @@ class ResourcesFragment : BaseRecyclerFragment<RealmMyLibrary?>(), OnLibraryItem
orderByDate.setOnClickListener { adapterLibrary.toggleSortOrder() }
orderByTitle.setOnClickListener { adapterLibrary.toggleTitleSortOrder() }
}

companion object {
var lastSelectionState: MutableList<String> = mutableListOf()
var wasAllSelected = false
var shouldRestoreSelection = true

fun clearSelectionState() {
lastSelectionState.clear()
wasAllSelected = false
shouldRestoreSelection = false
}

fun enableSelectionRestoration() {
shouldRestoreSelection = true
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ import org.ole.planet.myplanet.ui.dashboard.BellDashboardFragment
import org.ole.planet.myplanet.ui.dashboard.DashboardFragment
import org.ole.planet.myplanet.ui.feedback.FeedbackFragment
import org.ole.planet.myplanet.ui.rating.RatingFragment.Companion.newInstance
import org.ole.planet.myplanet.ui.resources.ResourceDetailFragment
import org.ole.planet.myplanet.ui.resources.ResourcesFragment
import org.ole.planet.myplanet.ui.team.TeamFragment
import org.ole.planet.myplanet.utilities.Constants
Expand Down Expand Up @@ -86,6 +87,10 @@ abstract class DashboardElementActivity : SyncActivity(), FragmentManager.OnBack
}

fun openCallFragment(newFragment: Fragment, tag: String?) {
if (newFragment !is ResourceDetailFragment) {
ResourcesFragment.clearSelectionState()
}

val fragmentManager = supportFragmentManager
if(c<2){
c=0
Expand Down
Loading