fixing launcher deletion

This commit is contained in:
tibbi 2017-11-12 16:22:12 +01:00
parent f5ddb72a6f
commit 1dfd1c5673

View File

@ -17,6 +17,7 @@ import com.simplemobiletools.applauncher.extensions.dbHelper
import com.simplemobiletools.applauncher.extensions.getLauncherDrawable import com.simplemobiletools.applauncher.extensions.getLauncherDrawable
import com.simplemobiletools.applauncher.extensions.isAPredefinedApp import com.simplemobiletools.applauncher.extensions.isAPredefinedApp
import com.simplemobiletools.applauncher.models.AppLauncher import com.simplemobiletools.applauncher.models.AppLauncher
import com.simplemobiletools.commons.dialogs.ConfirmationDialog
import com.simplemobiletools.commons.extensions.applyColorFilter import com.simplemobiletools.commons.extensions.applyColorFilter
import com.simplemobiletools.commons.extensions.beGone import com.simplemobiletools.commons.extensions.beGone
import com.simplemobiletools.commons.extensions.beVisibleIf import com.simplemobiletools.commons.extensions.beVisibleIf
@ -24,7 +25,7 @@ import com.simplemobiletools.commons.interfaces.MyAdapterListener
import kotlinx.android.synthetic.main.app_launcher_item.view.* import kotlinx.android.synthetic.main.app_launcher_item.view.*
import java.util.* import java.util.*
class RecyclerAdapter(val activity: SimpleActivity, val launchers: List<AppLauncher>, val listener: AppLaunchersListener?, val itemClick: (AppLauncher) -> Unit) : class RecyclerAdapter(val activity: SimpleActivity, val launchers: MutableList<AppLauncher>, val listener: AppLaunchersListener?, val itemClick: (AppLauncher) -> Unit) :
RecyclerView.Adapter<RecyclerAdapter.ViewHolder>() { RecyclerView.Adapter<RecyclerAdapter.ViewHolder>() {
private val config = activity.config private val config = activity.config
@ -75,7 +76,7 @@ class RecyclerAdapter(val activity: SimpleActivity, val launchers: List<AppLaunc
override fun onActionItemClicked(mode: ActionMode?, item: MenuItem): Boolean { override fun onActionItemClicked(mode: ActionMode?, item: MenuItem): Boolean {
when (item.itemId) { when (item.itemId) {
R.id.cab_edit -> showEditDialog() R.id.cab_edit -> showEditDialog()
R.id.cab_delete -> deleteSelectedItems() R.id.cab_delete -> askConfirmDelete()
else -> return false else -> return false
} }
return true return true
@ -121,32 +122,33 @@ class RecyclerAdapter(val activity: SimpleActivity, val launchers: List<AppLaunc
} }
} }
private fun deleteSelectedItems() { private fun askConfirmDelete() {
val positions = multiSelector.selectedPositions ConfirmationDialog(activity) {
val deleteIds = ArrayList<String>(positions.size) deleteItems()
val deletedLaunchers = ArrayList<AppLauncher>(positions.size)
for (i in positions) {
val launcher = launchers[i]
deleteIds.add(launcher.id.toString())
launcher.name = getRealAppName(launcher)
if (launcher.name.isNotEmpty()) {
deletedLaunchers.add(launcher)
}
} }
activity.dbHelper.deleteLaunchers(deleteIds)
actMode?.finish()
listener?.refreshLaunchers()
} }
private fun getRealAppName(launcher: AppLauncher): String { private fun deleteItems() {
return try { val deleteIds = ArrayList<String>(selectedPositions.size)
val applicationInfo = activity.packageManager.getApplicationInfo(launcher.packageName, 0) val removeLaunchers = ArrayList<AppLauncher>(selectedPositions.size)
activity.packageManager.getApplicationLabel(applicationInfo).toString() selectedPositions.sortedDescending().forEach {
} catch (e: PackageManager.NameNotFoundException) { val launcher = launchers[it]
"" deleteIds.add(launcher.id.toString())
removeLaunchers.add(launcher)
notifyItemRemoved(it)
itemViews.put(it, null)
} }
launchers.removeAll(removeLaunchers)
activity.dbHelper.deleteLaunchers(deleteIds)
val newItems = SparseArray<View>()
(0 until itemViews.size())
.filter { itemViews[it] != null }
.forEachIndexed { curIndex, i -> newItems.put(curIndex, itemViews[i]) }
itemViews = newItems
actMode?.finish()
} }
class ViewHolder(view: View, val adapterListener: MyAdapterListener, val activity: SimpleActivity, val multiSelectorCallback: ModalMultiSelectorCallback, class ViewHolder(view: View, val adapterListener: MyAdapterListener, val activity: SimpleActivity, val multiSelectorCallback: ModalMultiSelectorCallback,