Skip to content

Commit a26f7c7

Browse files
committed
Show Delete indicator while note item is being swiped
1 parent 33851a0 commit a26f7c7

File tree

5 files changed

+94
-2
lines changed

5 files changed

+94
-2
lines changed

app/src/main/java/dev/arkbuilders/arkmemo/graphics/ColorCode.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,4 +11,5 @@ internal object ColorCode {
1111
val white by lazy { android.graphics.Color.parseColor("#FFFFFF") }
1212
val brown by lazy { android.graphics.Color.parseColor("#B54708") }
1313
val lightYellow by lazy { android.graphics.Color.parseColor("#f8f6ed") }
14+
val borderPrimary by lazy { android.graphics.Color.parseColor("#D0D5DD") }
1415
}

app/src/main/java/dev/arkbuilders/arkmemo/ui/fragments/NotesFragment.kt

Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,15 @@
11
package dev.arkbuilders.arkmemo.ui.fragments
22

33
import android.content.res.ColorStateList
4+
import android.graphics.Canvas
5+
import android.graphics.Color
6+
import android.graphics.Paint
47
import android.os.Bundle
8+
import android.util.TypedValue
59
import android.view.LayoutInflater
610
import android.view.View
711
import android.view.ViewGroup
12+
import android.widget.TextView
813
import android.widget.Toast
914
import androidx.core.content.ContextCompat
1015
import androidx.core.widget.addTextChangedListener
@@ -20,6 +25,7 @@ import dagger.hilt.android.AndroidEntryPoint
2025
import dev.arkbuilders.arkmemo.BuildConfig
2126
import dev.arkbuilders.arkmemo.R
2227
import dev.arkbuilders.arkmemo.databinding.FragmentHomeBinding
28+
import dev.arkbuilders.arkmemo.graphics.ColorCode
2329
import dev.arkbuilders.arkmemo.models.Note
2430
import dev.arkbuilders.arkmemo.models.RootNotFound
2531
import dev.arkbuilders.arkmemo.models.VoiceNote
@@ -31,6 +37,7 @@ import dev.arkbuilders.arkmemo.ui.viewmodels.ArkMediaPlayerSideEffect
3137
import dev.arkbuilders.arkmemo.ui.viewmodels.ArkMediaPlayerViewModel
3238
import dev.arkbuilders.arkmemo.ui.viewmodels.NotesViewModel
3339
import dev.arkbuilders.arkmemo.ui.views.toast
40+
import dev.arkbuilders.arkmemo.utils.dpToPx
3441
import dev.arkbuilders.arkmemo.utils.getTextFromClipBoard
3542
import dev.arkbuilders.arkmemo.utils.gone
3643
import 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,

app/src/main/res/drawable/bg_big_radius.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,5 +3,6 @@
33

44
<stroke android:width="@dimen/border_width_thin" android:color="@color/border_primary"/>
55
<corners android:radius="@dimen/corner_radius_big"/>
6+
<solid android:color="@color/white"/>
67

78
</shape>

app/src/main/res/layout/adapter_text_note.xml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@
8383
android:id="@+id/iv_graphics_thumb"
8484
android:layout_width="@dimen/graphic_thumb_width"
8585
android:layout_height="match_parent"
86-
app:layout_constraintEnd_toEndOf="parent"
86+
app:layout_constraintEnd_toStartOf="@+id/tv_delete"
8787
android:layout_marginEnd="@dimen/border_width_thin"
8888
app:layout_constraintTop_toTopOf="parent"
8989
app:layout_constraintBottom_toBottomOf="parent"
@@ -116,7 +116,7 @@
116116
app:layout_constraintBottom_toBottomOf="parent"
117117
android:text="@string/action_delete"
118118
android:textColor="@color/white"
119-
android:textSize="14sp"
119+
android:textSize="@dimen/text_size_delete"
120120
android:id="@+id/tv_delete"
121121
android:visibility="gone"
122122
tools:visibility="visible"

app/src/main/res/values/dimens.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
<dimen name="radius_medium">12dp</dimen>
2121
<dimen name="radius_full">36dp</dimen>
2222
<dimen name="border_width_thin">1dp</dimen>
23+
<dimen name="text_size_delete">14sp</dimen>
2324

2425
<!-- Recording -->
2526
<dimen name="record_small_button_size">30dp</dimen>

0 commit comments

Comments
 (0)