added swipe to delete for cookies and command templates items
This commit is contained in:
parent
d6c5e6b692
commit
7073a358eb
5 changed files with 173 additions and 65 deletions
|
|
@ -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 {
|
||||||
|
|
|
||||||
|
|
@ -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 {
|
||||||
|
|
|
||||||
|
|
@ -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)
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -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
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
Loading…
Reference in a new issue