added swipe to delete for cookies and command templates items

This commit is contained in:
deniscerri 2023-04-24 20:27:32 +02:00
parent d6c5e6b692
commit 7073a358eb
No known key found for this signature in database
GPG key ID: 95C43D517D830350
5 changed files with 173 additions and 65 deletions

View file

@ -50,9 +50,6 @@ class CookieAdapter(onItemClickListener: OnItemClickListener, activity: Activity
onItemClickListener.onItemClick(item!!) onItemClickListener.onItemClick(item!!)
} }
card.setOnLongClickListener {
onItemClickListener.onDelete(item!!); true
}
} }
interface OnItemClickListener { interface OnItemClickListener {

View file

@ -55,10 +55,6 @@ class TemplatesAdapter(onItemClickListener: OnItemClickListener, activity: Activ
card.setOnClickListener { card.setOnClickListener {
onItemClickListener.onItemClick(item!!, position) onItemClickListener.onItemClick(item!!, position)
} }
card.setOnLongClickListener {
onItemClickListener.onDelete(item!!); true
}
} }
interface OnItemClickListener { interface OnItemClickListener {

View file

@ -7,34 +7,26 @@ import android.content.Context.CLIPBOARD_SERVICE
import android.content.res.ColorStateList import android.content.res.ColorStateList
import android.content.res.Configuration import android.content.res.Configuration
import android.graphics.Color import android.graphics.Color
import android.graphics.drawable.ColorDrawable
import android.graphics.drawable.Drawable
import android.graphics.drawable.RippleDrawable
import android.os.Bundle import android.os.Bundle
import android.os.Handler import android.os.Handler
import android.os.Looper import android.os.Looper
import android.text.Editable import android.text.Editable
import android.util.DisplayMetrics
import android.util.Log import android.util.Log
import android.view.* import android.view.*
import android.view.View.* import android.view.View.*
import android.widget.* import android.widget.*
import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.app.AppCompatActivity
import androidx.appcompat.view.ActionMode import androidx.appcompat.view.ActionMode
import androidx.appcompat.view.StandaloneActionMode
import androidx.constraintlayout.widget.ConstraintLayout import androidx.constraintlayout.widget.ConstraintLayout
import androidx.coordinatorlayout.widget.CoordinatorLayout import androidx.coordinatorlayout.widget.CoordinatorLayout
import androidx.core.view.children import androidx.core.view.children
import androidx.core.view.forEach import androidx.core.view.forEach
import androidx.core.widget.addTextChangedListener
import androidx.core.widget.doAfterTextChanged import androidx.core.widget.doAfterTextChanged
import androidx.fragment.app.Fragment import androidx.fragment.app.Fragment
import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.ViewModelProvider
import androidx.lifecycle.lifecycleScope import androidx.lifecycle.lifecycleScope
import androidx.recyclerview.widget.GridLayoutManager import androidx.recyclerview.widget.GridLayoutManager
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
import com.deniscerri.ytdlnis.App
import com.deniscerri.ytdlnis.MainActivity import com.deniscerri.ytdlnis.MainActivity
import com.deniscerri.ytdlnis.R import com.deniscerri.ytdlnis.R
import com.deniscerri.ytdlnis.adapter.HomeAdapter import com.deniscerri.ytdlnis.adapter.HomeAdapter
@ -87,6 +79,8 @@ class HomeFragment : Fragment(), HomeAdapter.OnItemClickListener, View.OnClickLi
private var layoutinflater: LayoutInflater? = null private var layoutinflater: LayoutInflater? = null
private var shimmerCards: ShimmerFrameLayout? = null private var shimmerCards: ShimmerFrameLayout? = null
private var searchBar: SearchBar? = null private var searchBar: SearchBar? = null
private var searchView: SearchView? = null
private var linkYouCopied: ConstraintLayout? = null
private var queriesChipGroup: ChipGroup? = null private var queriesChipGroup: ChipGroup? = null
private var recyclerView: RecyclerView? = null private var recyclerView: RecyclerView? = null
private var uiHandler: Handler? = null private var uiHandler: Handler? = null
@ -130,6 +124,8 @@ class HomeFragment : Fragment(), HomeAdapter.OnItemClickListener, View.OnClickLi
//initViews //initViews
shimmerCards = view.findViewById(R.id.shimmer_results_framelayout) shimmerCards = view.findViewById(R.id.shimmer_results_framelayout)
searchBar = view.findViewById(R.id.search_bar) searchBar = view.findViewById(R.id.search_bar)
searchView = view.findViewById(R.id.search_view)
linkYouCopied = searchView?.findViewById<ConstraintLayout>(R.id.link_you_copied)
appBarLayout = view.findViewById(R.id.home_appbarlayout) appBarLayout = view.findViewById(R.id.home_appbarlayout)
queriesChipGroup = view.findViewById(R.id.queries) queriesChipGroup = view.findViewById(R.id.queries)
searchSuggestions = view.findViewById(R.id.search_suggestions_scroll_view) searchSuggestions = view.findViewById(R.id.search_suggestions_scroll_view)
@ -206,19 +202,20 @@ class HomeFragment : Fragment(), HomeAdapter.OnItemClickListener, View.OnClickLi
override fun onResume() { override fun onResume() {
super.onResume() super.onResume()
resultViewModel.checkTrending() resultViewModel.checkTrending()
if (searchView?.currentTransitionState == SearchView.TransitionState.SHOWN){
updateSearchViewItems(searchView?.editText?.text, linkYouCopied)
}
} }
@SuppressLint("ClickableViewAccessibility") @SuppressLint("ClickableViewAccessibility")
private fun initMenu() { private fun initMenu() {
val searchView = requireView().findViewById<SearchView>(R.id.search_view)
val queriesConstraint = requireView().findViewById<ConstraintLayout>(R.id.queries_constraint) val queriesConstraint = requireView().findViewById<ConstraintLayout>(R.id.queries_constraint)
val queriesInitStartBtn = queriesConstraint.findViewById<MaterialButton>(R.id.init_search_query) val queriesInitStartBtn = queriesConstraint.findViewById<MaterialButton>(R.id.init_search_query)
val isRightToLeft = resources.getBoolean(R.bool.is_right_to_left) val isRightToLeft = resources.getBoolean(R.bool.is_right_to_left)
infoUtil = InfoUtil(requireContext()) infoUtil = InfoUtil(requireContext())
val linkYouCopied = searchView.findViewById<ConstraintLayout>(R.id.link_you_copied) searchView!!.addTransitionListener { _, _, newState ->
searchView.addTransitionListener { view, previousState, newState ->
if (newState == SearchView.TransitionState.SHOWN) { if (newState == SearchView.TransitionState.SHOWN) {
try{ try{
val clipboard = val clipboard =
@ -227,11 +224,11 @@ class HomeFragment : Fragment(), HomeAdapter.OnItemClickListener, View.OnClickLi
"(https?://(?:www\\.|(?!www))[a-zA-Z\\d][a-zA-Z\\d-]+[a-zA-Z\\d]\\.\\S{2,}|www\\.[a-zA-Z\\d][a-zA-Z\\d-]+[a-zA-Z\\d]\\.\\S{2,}|https?://(?:www\\.|(?!www))[a-zA-Z\\d]+\\.\\S{2,}|www\\.[a-zA-Z\\d]+\\.\\S{2,})".toRegex() "(https?://(?:www\\.|(?!www))[a-zA-Z\\d][a-zA-Z\\d-]+[a-zA-Z\\d]\\.\\S{2,}|www\\.[a-zA-Z\\d][a-zA-Z\\d-]+[a-zA-Z\\d]\\.\\S{2,}|https?://(?:www\\.|(?!www))[a-zA-Z\\d]+\\.\\S{2,}|www\\.[a-zA-Z\\d]+\\.\\S{2,})".toRegex()
val clip = clipboard.primaryClip!!.getItemAt(0).text val clip = clipboard.primaryClip!!.getItemAt(0).text
if (regex.containsMatchIn(clip.toString())) { if (regex.containsMatchIn(clip.toString())) {
linkYouCopied.visibility = VISIBLE linkYouCopied!!.visibility = VISIBLE
val textView = linkYouCopied.findViewById<TextView>(R.id.suggestion_text) val textView = linkYouCopied!!.findViewById<TextView>(R.id.suggestion_text)
textView.text = getString(R.string.link_you_copied) textView.text = getString(R.string.link_you_copied)
textView.setCompoundDrawablesRelativeWithIntrinsicBounds(R.drawable.ic_language, 0, 0, 0) textView.setCompoundDrawablesRelativeWithIntrinsicBounds(R.drawable.ic_language, 0, 0, 0)
val mb = linkYouCopied.findViewById<ImageButton>(R.id.set_search_query_button) val mb = linkYouCopied!!.findViewById<ImageButton>(R.id.set_search_query_button)
mb.setImageResource(R.drawable.ic_plus) mb.setImageResource(R.drawable.ic_plus)
mb.setOnClickListener { mb.setOnClickListener {
@ -247,31 +244,31 @@ class HomeFragment : Fragment(), HomeAdapter.OnItemClickListener, View.OnClickLi
} }
if (queriesChipGroup!!.childCount == 0) queriesConstraint.visibility = GONE if (queriesChipGroup!!.childCount == 0) queriesConstraint.visibility = GONE
else queriesConstraint.visibility = VISIBLE else queriesConstraint.visibility = VISIBLE
searchView.editText.setText("") searchView!!.editText.setText("")
linkYouCopied.visibility = GONE linkYouCopied!!.visibility = GONE
} }
textView.setOnClickListener { textView.setOnClickListener {
searchView.setText(clip.toString()) searchView!!.setText(clip.toString())
initSearch(searchView) initSearch(searchView!!)
} }
}else{ }else{
linkYouCopied.visibility = GONE linkYouCopied!!.visibility = GONE
} }
updateSearchViewItems(searchView.editText.text, searchView, linkYouCopied) updateSearchViewItems(searchView!!.editText.text, linkYouCopied)
}catch (e: Exception){ }catch (e: Exception){
e.printStackTrace() e.printStackTrace()
linkYouCopied.visibility = GONE linkYouCopied!!.visibility = GONE
} }
} }
} }
searchView.editText.doAfterTextChanged { searchView!!.editText.doAfterTextChanged {
if (searchView.currentTransitionState != SearchView.TransitionState.SHOWN) return@doAfterTextChanged if (searchView!!.currentTransitionState != SearchView.TransitionState.SHOWN) return@doAfterTextChanged
updateSearchViewItems(it, searchView, linkYouCopied) updateSearchViewItems(it, linkYouCopied)
} }
searchView.editText.setOnTouchListener(OnTouchListener { v, event -> searchView!!.editText.setOnTouchListener(OnTouchListener { v, event ->
try{ try{
val drawableLeft = 0 val drawableLeft = 0
val drawableTop = 1 val drawableTop = 1
@ -279,14 +276,14 @@ class HomeFragment : Fragment(), HomeAdapter.OnItemClickListener, View.OnClickLi
val drawableBottom = 3 val drawableBottom = 3
if (event.action == MotionEvent.ACTION_UP) { if (event.action == MotionEvent.ACTION_UP) {
if ( if (
(isRightToLeft && (event.x < (searchView.editText.left - searchView.editText.compoundDrawables[drawableLeft].bounds.width()))) || (isRightToLeft && (event.x < (searchView!!.editText.left - searchView!!.editText.compoundDrawables[drawableLeft].bounds.width()))) ||
(!isRightToLeft && (event.x > (searchView.editText.right - searchView.editText.compoundDrawables[drawableRight].bounds.width()))) (!isRightToLeft && (event.x > (searchView!!.editText.right - searchView!!.editText.compoundDrawables[drawableRight].bounds.width())))
){ ){
val present = queriesChipGroup!!.children.firstOrNull { (it as Chip).text.toString() == searchView.editText.text.toString() } val present = queriesChipGroup!!.children.firstOrNull { (it as Chip).text.toString() == searchView!!.editText.text.toString() }
if (present == null) { if (present == null) {
val chip = layoutinflater!!.inflate(R.layout.input_chip, queriesChipGroup, false) as Chip val chip = layoutinflater!!.inflate(R.layout.input_chip, queriesChipGroup, false) as Chip
chip.text = searchView.editText.text chip.text = searchView!!.editText.text
chip.chipBackgroundColor = ColorStateList.valueOf(MaterialColors.getColor(requireContext(), R.attr.colorSecondaryContainer, Color.BLACK)) chip.chipBackgroundColor = ColorStateList.valueOf(MaterialColors.getColor(requireContext(), R.attr.colorSecondaryContainer, Color.BLACK))
chip.setOnClickListener { chip.setOnClickListener {
queriesChipGroup!!.removeView(chip) queriesChipGroup!!.removeView(chip)
@ -295,7 +292,7 @@ class HomeFragment : Fragment(), HomeAdapter.OnItemClickListener, View.OnClickLi
} }
if (queriesChipGroup!!.childCount == 0) queriesConstraint.visibility = GONE if (queriesChipGroup!!.childCount == 0) queriesConstraint.visibility = GONE
else queriesConstraint.visibility = VISIBLE else queriesConstraint.visibility = VISIBLE
searchView.editText.setText("") searchView!!.editText.setText("")
return@OnTouchListener true return@OnTouchListener true
} }
@ -304,8 +301,8 @@ class HomeFragment : Fragment(), HomeAdapter.OnItemClickListener, View.OnClickLi
false false
}) })
searchView.editText.setOnEditorActionListener { textView, i, keyEvent -> searchView!!.editText.setOnEditorActionListener { _, _, _ ->
initSearch(searchView) initSearch(searchView!!)
true true
} }
@ -314,7 +311,7 @@ class HomeFragment : Fragment(), HomeAdapter.OnItemClickListener, View.OnClickLi
R.id.delete_results -> { R.id.delete_results -> {
resultViewModel.getTrending() resultViewModel.getTrending()
selectedObjects = ArrayList() selectedObjects = ArrayList()
searchBar!!.setText("") searchBar!!.text = ""
downloadAllFabCoordinator!!.visibility = GONE downloadAllFabCoordinator!!.visibility = GONE
downloadFabs!!.visibility = GONE downloadFabs!!.visibility = GONE
} }
@ -328,15 +325,15 @@ class HomeFragment : Fragment(), HomeAdapter.OnItemClickListener, View.OnClickLi
queriesChipGroup!!.addOnLayoutChangeListener { view, i, i2, i3, i4, i5, i6, i7, i8 -> queriesChipGroup!!.addOnLayoutChangeListener { view, i, i2, i3, i4, i5, i6, i7, i8 ->
if (queriesChipGroup!!.childCount == 0) queriesConstraint.visibility = GONE if (queriesChipGroup!!.childCount == 0) queriesConstraint.visibility = GONE
else queriesConstraint.visibility = VISIBLE else queriesConstraint.visibility = VISIBLE
searchView.editText.setText("") searchView!!.editText.setText("")
} }
queriesInitStartBtn.setOnClickListener { queriesInitStartBtn.setOnClickListener {
initSearch(searchView) initSearch(searchView!!)
} }
} }
private fun updateSearchViewItems(it: Editable?, searchView: SearchView, linkYouCopied: View?){ private fun updateSearchViewItems(it: Editable?, linkYouCopied: View?){
lifecycleScope.launch { lifecycleScope.launch {
searchSuggestionsLinearLayout!!.removeAllViews() searchSuggestionsLinearLayout!!.removeAllViews()
searchHistoryLinearLayout!!.removeAllViews() searchHistoryLinearLayout!!.removeAllViews()
@ -345,10 +342,10 @@ class HomeFragment : Fragment(), HomeAdapter.OnItemClickListener, View.OnClickLi
searchHistoryLinearLayout!!.visibility = GONE searchHistoryLinearLayout!!.visibility = GONE
linkYouCopied!!.visibility = GONE linkYouCopied!!.visibility = GONE
if (searchView.editText.text.isEmpty()){ if (searchView!!.editText.text.isEmpty()){
searchView.editText.setCompoundDrawablesRelativeWithIntrinsicBounds(0, 0, 0, 0) searchView!!.editText.setCompoundDrawablesRelativeWithIntrinsicBounds(0, 0, 0, 0)
}else{ }else{
searchView.editText.setCompoundDrawablesRelativeWithIntrinsicBounds(0, 0, R.drawable.ic_plus, 0) searchView!!.editText.setCompoundDrawablesRelativeWithIntrinsicBounds(0, 0, R.drawable.ic_plus, 0)
} }
val suggestions = withContext(Dispatchers.IO){ val suggestions = withContext(Dispatchers.IO){
if (it!!.isEmpty()) { if (it!!.isEmpty()) {
@ -371,8 +368,8 @@ class HomeFragment : Fragment(), HomeAdapter.OnItemClickListener, View.OnClickLi
) )
} }
textView.setOnClickListener { textView.setOnClickListener {
searchView.setText(textView.text) searchView!!.setText(textView.text)
initSearch(searchView) initSearch(searchView!!)
} }
textView.setOnLongClickListener { textView.setOnLongClickListener {
val deleteDialog = MaterialAlertDialogBuilder(requireContext()) val deleteDialog = MaterialAlertDialogBuilder(requireContext())
@ -388,8 +385,8 @@ class HomeFragment : Fragment(), HomeAdapter.OnItemClickListener, View.OnClickLi
val mb = v.findViewById<ImageButton>(R.id.set_search_query_button) val mb = v.findViewById<ImageButton>(R.id.set_search_query_button)
mb.setOnClickListener { mb.setOnClickListener {
searchView.setText(textView.text) searchView!!.setText(textView.text)
searchView.editText.setSelection(searchView.editText.length()) searchView!!.editText.setSelection(searchView!!.editText.length())
} }
} }
searchHistoryLinearLayout!!.visibility = VISIBLE searchHistoryLinearLayout!!.visibility = VISIBLE
@ -408,13 +405,13 @@ class HomeFragment : Fragment(), HomeAdapter.OnItemClickListener, View.OnClickLi
) )
} }
textView.setOnClickListener { textView.setOnClickListener {
searchView.setText(textView.text) searchView!!.setText(textView.text)
initSearch(searchView) initSearch(searchView!!)
} }
val mb = v.findViewById<ImageButton>(R.id.set_search_query_button) val mb = v.findViewById<ImageButton>(R.id.set_search_query_button)
mb.setOnClickListener { mb.setOnClickListener {
searchView.setText(textView.text) searchView!!.setText(textView.text)
searchView.editText.setSelection(searchView.editText.length()) searchView!!.editText.setSelection(searchView!!.editText.length())
} }
} }
searchSuggestionsLinearLayout!!.visibility = VISIBLE searchSuggestionsLinearLayout!!.visibility = VISIBLE
@ -442,7 +439,7 @@ class HomeFragment : Fragment(), HomeAdapter.OnItemClickListener, View.OnClickLi
if (queryList.isEmpty()) return if (queryList.isEmpty()) return
if (queryList.size == 1){ if (queryList.size == 1){
searchBar!!.setText(searchView.text) searchBar!!.text = searchView.text
} }
searchView.hide() searchView.hide()
@ -466,16 +463,6 @@ class HomeFragment : Fragment(), HomeAdapter.OnItemClickListener, View.OnClickLi
(searchBar!!.parent as AppBarLayout).setExpanded(true, true) (searchBar!!.parent as AppBarLayout).setExpanded(true, true)
} }
private fun findVideo(url: String): ResultItem? {
for (i in resultsList!!.indices) {
val v = resultsList!![i]
if (v!!.url == url) {
return v
}
}
return null
}
@SuppressLint("ResourceType") @SuppressLint("ResourceType")
override fun onButtonClick(videoURL: String, type: DownloadViewModel.Type?) { override fun onButtonClick(videoURL: String, type: DownloadViewModel.Type?) {
Log.e(TAG, type.toString() + " " + videoURL) Log.e(TAG, type.toString() + " " + videoURL)

View file

@ -2,12 +2,15 @@ package com.deniscerri.ytdlnis.ui.more
import android.content.Context import android.content.Context
import android.content.DialogInterface import android.content.DialogInterface
import android.graphics.Canvas
import android.graphics.Color
import android.os.Bundle import android.os.Bundle
import android.view.MenuItem import android.view.MenuItem
import android.widget.Toast import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.app.AppCompatActivity
import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.ViewModelProvider
import androidx.lifecycle.lifecycleScope import androidx.lifecycle.lifecycleScope
import androidx.recyclerview.widget.ItemTouchHelper
import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
import com.deniscerri.ytdlnis.R import com.deniscerri.ytdlnis.R
@ -20,6 +23,7 @@ import com.deniscerri.ytdlnis.util.UiUtil
import com.google.android.material.appbar.MaterialToolbar import com.google.android.material.appbar.MaterialToolbar
import com.google.android.material.chip.Chip import com.google.android.material.chip.Chip
import com.google.android.material.dialog.MaterialAlertDialogBuilder import com.google.android.material.dialog.MaterialAlertDialogBuilder
import it.xabaras.android.recyclerview.swipedecorator.RecyclerViewSwipeDecorator
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext import kotlinx.coroutines.withContext
@ -31,12 +35,14 @@ class CommandTemplatesActivity : BaseActivity(), TemplatesAdapter.OnItemClickLis
private lateinit var topAppBar: MaterialToolbar private lateinit var topAppBar: MaterialToolbar
private lateinit var commandTemplateViewModel: CommandTemplateViewModel private lateinit var commandTemplateViewModel: CommandTemplateViewModel
private lateinit var uiUtil: UiUtil private lateinit var uiUtil: UiUtil
private lateinit var templatesList: List<CommandTemplate>
var context: Context? = null var context: Context? = null
public override fun onCreate(savedInstanceState: Bundle?) { public override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
setContentView(R.layout.activity_command_templates) setContentView(R.layout.activity_command_templates)
context = baseContext context = baseContext
templatesList = listOf()
topAppBar = findViewById(R.id.logs_toolbar) topAppBar = findViewById(R.id.logs_toolbar)
topAppBar.setNavigationOnClickListener { onBackPressedDispatcher.onBackPressed() } topAppBar.setNavigationOnClickListener { onBackPressedDispatcher.onBackPressed() }
@ -49,11 +55,14 @@ class CommandTemplatesActivity : BaseActivity(), TemplatesAdapter.OnItemClickLis
recyclerView = findViewById(R.id.template_recyclerview) recyclerView = findViewById(R.id.template_recyclerview)
recyclerView.layoutManager = LinearLayoutManager(context) recyclerView.layoutManager = LinearLayoutManager(context)
recyclerView.adapter = templatesAdapter recyclerView.adapter = templatesAdapter
val itemTouchHelper = ItemTouchHelper(simpleCallback)
itemTouchHelper.attachToRecyclerView(recyclerView)
uiUtil = UiUtil(FileUtil()) uiUtil = UiUtil(FileUtil())
commandTemplateViewModel = ViewModelProvider(this)[CommandTemplateViewModel::class.java] commandTemplateViewModel = ViewModelProvider(this)[CommandTemplateViewModel::class.java]
commandTemplateViewModel.items.observe(this) { commandTemplateViewModel.items.observe(this) {
templatesList = it
templatesAdapter.submitList(it) templatesAdapter.submitList(it)
} }
initMenu() initMenu()
@ -117,4 +126,58 @@ class CommandTemplatesActivity : BaseActivity(), TemplatesAdapter.OnItemClickLis
} }
deleteDialog.show() deleteDialog.show()
} }
private var simpleCallback: ItemTouchHelper.SimpleCallback =
object : ItemTouchHelper.SimpleCallback(0, ItemTouchHelper.LEFT ) {
override fun onMove(recyclerView: RecyclerView,viewHolder: RecyclerView.ViewHolder,target: RecyclerView.ViewHolder
): Boolean {
return false
}
override fun onSwiped(viewHolder: RecyclerView.ViewHolder, direction: Int) {
val position = viewHolder.bindingAdapterPosition
when (direction) {
ItemTouchHelper.LEFT -> {
val deletedItem = templatesList[position]
templatesAdapter.notifyItemChanged(position)
onDelete(deletedItem)
}
}
}
override fun onChildDraw(
c: Canvas,
recyclerView: RecyclerView,
viewHolder: RecyclerView.ViewHolder,
dX: Float,
dY: Float,
actionState: Int,
isCurrentlyActive: Boolean
) {
RecyclerViewSwipeDecorator.Builder(
context,
c,
recyclerView,
viewHolder,
dX,
dY,
actionState,
isCurrentlyActive
)
.addSwipeLeftBackgroundColor(Color.RED)
.addSwipeLeftActionIcon(R.drawable.baseline_delete_24)
.create()
.decorate()
super.onChildDraw(
c,
recyclerView,
viewHolder,
dX,
dY,
actionState,
isCurrentlyActive
)
}
}
} }

View file

@ -3,6 +3,8 @@ package com.deniscerri.ytdlnis.ui.more
import android.content.Context import android.content.Context
import android.content.DialogInterface import android.content.DialogInterface
import android.content.Intent import android.content.Intent
import android.graphics.Canvas
import android.graphics.Color
import android.os.Bundle import android.os.Bundle
import android.view.MenuItem import android.view.MenuItem
import android.view.inputmethod.InputMethodManager import android.view.inputmethod.InputMethodManager
@ -12,6 +14,7 @@ import androidx.appcompat.app.AppCompatActivity
import androidx.core.widget.doOnTextChanged import androidx.core.widget.doOnTextChanged
import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.ViewModelProvider
import androidx.lifecycle.lifecycleScope import androidx.lifecycle.lifecycleScope
import androidx.recyclerview.widget.ItemTouchHelper
import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
import com.deniscerri.ytdlnis.R import com.deniscerri.ytdlnis.R
@ -19,11 +22,14 @@ import com.deniscerri.ytdlnis.adapter.CookieAdapter
import com.deniscerri.ytdlnis.database.models.CookieItem import com.deniscerri.ytdlnis.database.models.CookieItem
import com.deniscerri.ytdlnis.database.viewmodel.CookieViewModel import com.deniscerri.ytdlnis.database.viewmodel.CookieViewModel
import com.deniscerri.ytdlnis.ui.BaseActivity import com.deniscerri.ytdlnis.ui.BaseActivity
import com.deniscerri.ytdlnis.ui.downloadcard.DownloadBottomSheetDialog
import com.deniscerri.ytdlnis.util.FileUtil import com.deniscerri.ytdlnis.util.FileUtil
import com.deniscerri.ytdlnis.util.UiUtil import com.deniscerri.ytdlnis.util.UiUtil
import com.google.android.material.appbar.MaterialToolbar import com.google.android.material.appbar.MaterialToolbar
import com.google.android.material.chip.Chip import com.google.android.material.chip.Chip
import com.google.android.material.color.MaterialColors
import com.google.android.material.dialog.MaterialAlertDialogBuilder import com.google.android.material.dialog.MaterialAlertDialogBuilder
import it.xabaras.android.recyclerview.swipedecorator.RecyclerViewSwipeDecorator
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import java.io.File import java.io.File
@ -35,6 +41,7 @@ class CookiesActivity : BaseActivity(), CookieAdapter.OnItemClickListener {
private lateinit var topAppBar: MaterialToolbar private lateinit var topAppBar: MaterialToolbar
private lateinit var cookiesViewModel: CookieViewModel private lateinit var cookiesViewModel: CookieViewModel
private lateinit var uiUtil: UiUtil private lateinit var uiUtil: UiUtil
private lateinit var cookiesList: List<CookieItem>
var context: Context? = null var context: Context? = null
public override fun onCreate(savedInstanceState: Bundle?) { public override fun onCreate(savedInstanceState: Bundle?) {
@ -44,6 +51,7 @@ class CookiesActivity : BaseActivity(), CookieAdapter.OnItemClickListener {
topAppBar = findViewById(R.id.logs_toolbar) topAppBar = findViewById(R.id.logs_toolbar)
topAppBar.setNavigationOnClickListener { onBackPressedDispatcher.onBackPressed() } topAppBar.setNavigationOnClickListener { onBackPressedDispatcher.onBackPressed() }
cookiesList = listOf()
listAdapter = listAdapter =
CookieAdapter( CookieAdapter(
@ -53,11 +61,14 @@ class CookiesActivity : BaseActivity(), CookieAdapter.OnItemClickListener {
recyclerView = findViewById(R.id.template_recyclerview) recyclerView = findViewById(R.id.template_recyclerview)
recyclerView.layoutManager = LinearLayoutManager(context) recyclerView.layoutManager = LinearLayoutManager(context)
recyclerView.adapter = listAdapter recyclerView.adapter = listAdapter
val itemTouchHelper = ItemTouchHelper(simpleCallback)
itemTouchHelper.attachToRecyclerView(recyclerView)
uiUtil = UiUtil(FileUtil()) uiUtil = UiUtil(FileUtil())
cookiesViewModel = ViewModelProvider(this)[CookieViewModel::class.java] cookiesViewModel = ViewModelProvider(this)[CookieViewModel::class.java]
cookiesViewModel.items.observe(this) { cookiesViewModel.items.observe(this) {
cookiesList = it
listAdapter.submitList(it) listAdapter.submitList(it)
} }
initMenu() initMenu()
@ -155,4 +166,58 @@ class CookiesActivity : BaseActivity(), CookieAdapter.OnItemClickListener {
} }
deleteDialog.show() deleteDialog.show()
} }
private var simpleCallback: ItemTouchHelper.SimpleCallback =
object : ItemTouchHelper.SimpleCallback(0, ItemTouchHelper.LEFT ) {
override fun onMove(recyclerView: RecyclerView,viewHolder: RecyclerView.ViewHolder,target: RecyclerView.ViewHolder
): Boolean {
return false
}
override fun onSwiped(viewHolder: RecyclerView.ViewHolder, direction: Int) {
val position = viewHolder.bindingAdapterPosition
when (direction) {
ItemTouchHelper.LEFT -> {
val deletedItem = cookiesList[position]
listAdapter.notifyItemChanged(position)
onDelete(deletedItem)
}
}
}
override fun onChildDraw(
c: Canvas,
recyclerView: RecyclerView,
viewHolder: RecyclerView.ViewHolder,
dX: Float,
dY: Float,
actionState: Int,
isCurrentlyActive: Boolean
) {
RecyclerViewSwipeDecorator.Builder(
context,
c,
recyclerView,
viewHolder,
dX,
dY,
actionState,
isCurrentlyActive
)
.addSwipeLeftBackgroundColor(Color.RED)
.addSwipeLeftActionIcon(R.drawable.baseline_delete_24)
.create()
.decorate()
super.onChildDraw(
c,
recyclerView,
viewHolder,
dX,
dY,
actionState,
isCurrentlyActive
)
}
}
} }