Improve mouse accessibility

This commit is contained in:
Koitharu
2025-05-21 14:01:42 +03:00
parent 2dfc9b75a2
commit a52730fff0
3 changed files with 26 additions and 14 deletions

View File

@@ -114,20 +114,6 @@ open class CoilImageView @JvmOverloads constructor(
.build(),
)
@Deprecated("Use more specific overrides instead")
fun setImageAsync(request: ImageRequest) = enqueueRequest(
request.newBuilder()
.lifecycle(request.lifecycle ?: findViewTreeLifecycleOwner()?.lifecycle)
.target(this)
.size(
if (request.sizeResolver == SizeResolver.ORIGINAL) {
ViewSizeResolver(this)
} else {
request.sizeResolver
},
).build(),
)
fun disposeImage() {
CoilUtils.dispose(this)
currentRequest = null

View File

@@ -9,7 +9,10 @@ import android.util.AttributeSet
import android.view.GestureDetector
import android.view.MotionEvent
import android.view.View
import androidx.appcompat.widget.TooltipCompat
import androidx.core.graphics.ColorUtils
import androidx.core.view.PointerIconCompat
import androidx.core.view.ViewCompat
import org.koitharu.kotatsu.core.util.ext.getThemeColor
import org.koitharu.kotatsu.core.util.ext.resolveDp
import org.koitharu.kotatsu.parsers.util.replaceWith
@@ -21,10 +24,12 @@ class PieChartView @JvmOverloads constructor(
) : View(context, attrs, defStyleAttr), GestureDetector.OnGestureListener {
private val paint = Paint(Paint.ANTI_ALIAS_FLAG)
private val activePointerIcon = PointerIconCompat.getSystemIcon(context, PointerIconCompat.TYPE_HAND)
private val segments = ArrayList<Segment>()
private val chartBounds = RectF()
private val clearColor = context.getThemeColor(android.R.attr.colorBackground)
private val touchDetector = GestureDetector(context, this)
private var hoverSegment = -1
private var highlightedSegment = -1
var onSegmentClickListener: OnSegmentClickListener? = null
@@ -41,6 +46,8 @@ class PieChartView @JvmOverloads constructor(
paint.color = segment.color
if (i == highlightedSegment) {
paint.color = ColorUtils.setAlphaComponent(paint.color, 180)
} else if (i == hoverSegment) {
paint.color = ColorUtils.setAlphaComponent(paint.color, 200)
}
paint.style = Paint.Style.FILL
val sweepAngle = segment.percent * 360f
@@ -119,6 +126,23 @@ class PieChartView @JvmOverloads constructor(
override fun onFling(e1: MotionEvent?, e2: MotionEvent, velocityX: Float, velocityY: Float): Boolean = false
override fun onHoverEvent(event: MotionEvent): Boolean {
val segment = when (event.actionMasked) {
MotionEvent.ACTION_HOVER_ENTER,
MotionEvent.ACTION_HOVER_MOVE -> findSegmentIndex(event.x, event.y)
MotionEvent.ACTION_HOVER_EXIT -> -1
else -> hoverSegment
}
if (hoverSegment != segment) {
hoverSegment = segment
TooltipCompat.setTooltipText(this, segments.getOrNull(segment)?.label)
ViewCompat.setPointerIcon(this, if (segment == -1) null else activePointerIcon)
invalidate()
}
return super.onHoverEvent(event) || segment != -1
}
fun setData(value: List<Segment>) {
segments.replaceWith(value)
invalidate()

View File

@@ -46,8 +46,10 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="?selectableItemBackgroundBorderless"
android:contentDescription="@string/details"
android:minWidth="?minTouchTargetSize"
android:minHeight="?minTouchTargetSize"
android:tooltipText="@string/details"
app:srcCompat="@drawable/ic_open_external" />
</LinearLayout>