mirror of
https://github.com/SimpleMobileTools/Simple-App-Launcher.git
synced 2025-06-05 21:49:21 +02:00
try implementing multiple choicemode on recyclerview
This commit is contained in:
@ -30,6 +30,7 @@ dependencies {
|
|||||||
compile 'com.android.support:appcompat-v7:23.4.0'
|
compile 'com.android.support:appcompat-v7:23.4.0'
|
||||||
compile 'com.android.support:recyclerview-v7:23.4.0'
|
compile 'com.android.support:recyclerview-v7:23.4.0'
|
||||||
compile 'com.android.support:design:23.4.0'
|
compile 'com.android.support:design:23.4.0'
|
||||||
|
compile 'com.bignerdranch.android:recyclerview-multiselect:0.2'
|
||||||
compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
|
compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -54,7 +54,7 @@ class MainActivity : SimpleActivity(), AddAppDialog.AddLaunchersInterface {
|
|||||||
|
|
||||||
private fun setupLaunchers() {
|
private fun setupLaunchers() {
|
||||||
launchers = dbHelper.getLaunchers()
|
launchers = dbHelper.getLaunchers()
|
||||||
launchers_holder.adapter = RecyclerAdapter(applicationContext, launchers) {
|
launchers_holder.adapter = RecyclerAdapter(this, launchers) {
|
||||||
val launchIntent = packageManager.getLaunchIntentForPackage(it.pkgName)
|
val launchIntent = packageManager.getLaunchIntentForPackage(it.pkgName)
|
||||||
if (launchIntent != null) {
|
if (launchIntent != null) {
|
||||||
startActivity(launchIntent)
|
startActivity(launchIntent)
|
||||||
|
@ -1,19 +1,44 @@
|
|||||||
package com.simplemobiletools.applauncher.adapters
|
package com.simplemobiletools.applauncher.adapters
|
||||||
|
|
||||||
import android.content.Context
|
import android.app.Activity
|
||||||
|
import android.support.v7.app.AppCompatActivity
|
||||||
|
import android.support.v7.view.ActionMode
|
||||||
import android.support.v7.widget.RecyclerView
|
import android.support.v7.widget.RecyclerView
|
||||||
import android.view.LayoutInflater
|
import android.view.*
|
||||||
import android.view.View
|
import com.bignerdranch.android.multiselector.ModalMultiSelectorCallback
|
||||||
import android.view.ViewGroup
|
import com.bignerdranch.android.multiselector.MultiSelector
|
||||||
|
import com.bignerdranch.android.multiselector.SwappingHolder
|
||||||
import com.simplemobiletools.applauncher.R
|
import com.simplemobiletools.applauncher.R
|
||||||
import com.simplemobiletools.applauncher.models.AppLauncher
|
import com.simplemobiletools.applauncher.models.AppLauncher
|
||||||
import kotlinx.android.synthetic.main.app_launcher_dialog_item.view.*
|
import kotlinx.android.synthetic.main.app_launcher_dialog_item.view.*
|
||||||
|
|
||||||
class RecyclerAdapter(val cxt: Context, val launchers: List<AppLauncher>, val itemClick: (AppLauncher) -> Unit) :
|
class RecyclerAdapter(val act: Activity, val launchers: List<AppLauncher>, val itemClick: (AppLauncher) -> Unit) :
|
||||||
RecyclerView.Adapter<RecyclerAdapter.ViewHolder>() {
|
RecyclerView.Adapter<RecyclerAdapter.ViewHolder>() {
|
||||||
|
|
||||||
|
val multiSelector = MultiSelector()
|
||||||
|
|
||||||
|
val deleteMode = object : ModalMultiSelectorCallback(multiSelector) {
|
||||||
|
override fun onActionItemClicked(mode: ActionMode?, item: MenuItem?): Boolean {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onCreateActionMode(actionMode: ActionMode?, menu: Menu?): Boolean {
|
||||||
|
super.onCreateActionMode(actionMode, menu)
|
||||||
|
act.menuInflater.inflate(R.menu.cab, menu)
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onAttachedToRecyclerView(recyclerView: RecyclerView?) {
|
||||||
|
super.onAttachedToRecyclerView(recyclerView)
|
||||||
|
if (multiSelector.isSelectable) {
|
||||||
|
deleteMode.setClearOnPrepare(false)
|
||||||
|
(act as AppCompatActivity).startSupportActionMode(deleteMode)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
|
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
|
||||||
holder.bindView(cxt, launchers[position])
|
holder.bindView(act, deleteMode, multiSelector, launchers[position])
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onCreateViewHolder(parent: ViewGroup?, viewType: Int): ViewHolder {
|
override fun onCreateViewHolder(parent: ViewGroup?, viewType: Int): ViewHolder {
|
||||||
@ -25,19 +50,26 @@ class RecyclerAdapter(val cxt: Context, val launchers: List<AppLauncher>, val it
|
|||||||
return launchers.count()
|
return launchers.count()
|
||||||
}
|
}
|
||||||
|
|
||||||
class ViewHolder(view: View, val itemClick: (AppLauncher) -> (Unit)) : RecyclerView.ViewHolder(view) {
|
class ViewHolder(view: View, val itemClick: (AppLauncher) -> (Unit)) : SwappingHolder(view, MultiSelector()) {
|
||||||
fun bindView(context: Context, launcher: AppLauncher) {
|
val viewHolder = this
|
||||||
|
fun bindView(act: Activity, deleteMode: ModalMultiSelectorCallback, multiSelector: MultiSelector, launcher: AppLauncher) {
|
||||||
with(launcher) {
|
with(launcher) {
|
||||||
itemView.launcher_label.text = launcher.name
|
itemView.launcher_label.text = launcher.name
|
||||||
itemView.setOnClickListener {
|
itemView.setOnClickListener {
|
||||||
itemClick(this)
|
itemClick(this)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
itemView.setOnLongClickListener {
|
||||||
|
(act as AppCompatActivity).startSupportActionMode(deleteMode)
|
||||||
|
multiSelector.setSelected(viewHolder, true)
|
||||||
|
true
|
||||||
|
}
|
||||||
|
|
||||||
if (launcher.iconId != 0) {
|
if (launcher.iconId != 0) {
|
||||||
val icon = context.resources.getDrawable(launcher.iconId)
|
val icon = act.resources.getDrawable(launcher.iconId)
|
||||||
itemView.launcher_icon.setImageDrawable(icon)
|
itemView.launcher_icon.setImageDrawable(icon)
|
||||||
} else {
|
} else {
|
||||||
val icon = context.packageManager.getApplicationIcon(launcher.pkgName)
|
val icon = act.packageManager.getApplicationIcon(launcher.pkgName)
|
||||||
itemView.launcher_icon.setImageDrawable(icon)
|
itemView.launcher_icon.setImageDrawable(icon)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user