11package dev.arkbuilders.arkmemo.ui.fragments
22
33import android.content.res.ColorStateList
4+ import android.graphics.Canvas
5+ import android.graphics.Color
6+ import android.graphics.Paint
47import android.os.Bundle
8+ import android.util.TypedValue
59import android.view.LayoutInflater
610import android.view.View
711import android.view.ViewGroup
12+ import android.widget.TextView
813import android.widget.Toast
914import androidx.core.content.ContextCompat
1015import androidx.core.widget.addTextChangedListener
@@ -20,6 +25,7 @@ import dagger.hilt.android.AndroidEntryPoint
2025import dev.arkbuilders.arkmemo.BuildConfig
2126import dev.arkbuilders.arkmemo.R
2227import dev.arkbuilders.arkmemo.databinding.FragmentHomeBinding
28+ import dev.arkbuilders.arkmemo.graphics.ColorCode
2329import dev.arkbuilders.arkmemo.models.Note
2430import dev.arkbuilders.arkmemo.models.RootNotFound
2531import dev.arkbuilders.arkmemo.models.VoiceNote
@@ -31,6 +37,7 @@ import dev.arkbuilders.arkmemo.ui.viewmodels.ArkMediaPlayerSideEffect
3137import dev.arkbuilders.arkmemo.ui.viewmodels.ArkMediaPlayerViewModel
3238import dev.arkbuilders.arkmemo.ui.viewmodels.NotesViewModel
3339import dev.arkbuilders.arkmemo.ui.views.toast
40+ import dev.arkbuilders.arkmemo.utils.dpToPx
3441import dev.arkbuilders.arkmemo.utils.getTextFromClipBoard
3542import dev.arkbuilders.arkmemo.utils.gone
3643import dev.arkbuilders.arkmemo.utils.replaceFragment
@@ -94,6 +101,88 @@ class NotesFragment : BaseFragment() {
94101 return false
95102 }
96103
104+ override fun onChildDraw (
105+ c : Canvas ,
106+ recyclerView : RecyclerView ,
107+ viewHolder : RecyclerView .ViewHolder ,
108+ dX : Float ,
109+ dY : Float ,
110+ actionState : Int ,
111+ isCurrentlyActive : Boolean ,
112+ ) {
113+ if (actionState == ItemTouchHelper .ACTION_STATE_SWIPE ) {
114+ val itemView = viewHolder.itemView
115+ val context = itemView.context
116+ val paint =
117+ Paint ().apply {
118+ color = Color .RED
119+ isAntiAlias = true
120+ }
121+
122+ val strokePaint =
123+ Paint ().apply {
124+ style = Paint .Style .STROKE
125+ color = ColorCode .borderPrimary
126+ strokeWidth = 1 .dpToPx().toFloat()
127+ isAntiAlias = true
128+ }
129+
130+ val tvDelete =
131+ TextView (context).apply {
132+ // Size should be the same as R.dimen.text_size_delete
133+ setTextSize(TypedValue .COMPLEX_UNIT_SP , 14f )
134+ }
135+
136+ val textPaint =
137+ Paint ().apply {
138+ color = Color .WHITE
139+ textSize = tvDelete.textSize
140+ textAlign = Paint .Align .RIGHT
141+ typeface = tvDelete.typeface
142+ isAntiAlias = true
143+ }
144+
145+ val cornerRadius = context.resources.getDimension(R .dimen.corner_radius_big)
146+ val endMargin = 16 .dpToPx().toFloat()
147+
148+ val x = itemView.right.toFloat() - endMargin
149+ val y =
150+ (itemView.top + itemView.bottom) / 2f +
151+ (textPaint.descent() - textPaint.ascent()) / 2f - textPaint.descent()
152+
153+ c.drawRoundRect(
154+ itemView.left.toFloat(),
155+ itemView.top.toFloat(),
156+ itemView.right.toFloat(),
157+ itemView.bottom.toFloat(),
158+ cornerRadius,
159+ cornerRadius,
160+ paint,
161+ )
162+
163+ c.drawRoundRect(
164+ itemView.left.toFloat(),
165+ itemView.top.toFloat(),
166+ itemView.right.toFloat(),
167+ itemView.bottom.toFloat(),
168+ cornerRadius,
169+ cornerRadius,
170+ strokePaint,
171+ )
172+
173+ c.drawText(context.getString(R .string.action_delete), x, y, textPaint)
174+ }
175+ super .onChildDraw(
176+ c,
177+ recyclerView,
178+ viewHolder,
179+ dX,
180+ dY,
181+ actionState,
182+ isCurrentlyActive,
183+ )
184+ }
185+
97186 override fun onSwiped (
98187 viewHolder : RecyclerView .ViewHolder ,
99188 direction : Int ,
0 commit comments