mirror of
https://github.com/sky-systems/sky_phone.git
synced 2026-09-04 17:23:25 +00:00
ENH - add swipe-to-clear lock-screen notifications
This commit is contained in:
@@ -0,0 +1,46 @@
|
||||
export type NotificationSwipeAxis = 'horizontal' | 'vertical'
|
||||
|
||||
export const NOTIFICATION_SWIPE_ACTION_WIDTH = 76
|
||||
export const NOTIFICATION_SWIPE_AXIS_LOCK = 8
|
||||
export const NOTIFICATION_SWIPE_TRIGGER = 42
|
||||
|
||||
export function resolveNotificationSwipeAxis(
|
||||
deltaX: number,
|
||||
deltaY: number,
|
||||
): NotificationSwipeAxis | null {
|
||||
const horizontalDistance = Math.abs(deltaX)
|
||||
const verticalDistance = Math.abs(deltaY)
|
||||
if (
|
||||
Math.max(horizontalDistance, verticalDistance) <
|
||||
NOTIFICATION_SWIPE_AXIS_LOCK
|
||||
) {
|
||||
return null
|
||||
}
|
||||
|
||||
return horizontalDistance > verticalDistance * 1.15
|
||||
? 'horizontal'
|
||||
: 'vertical'
|
||||
}
|
||||
|
||||
export function clampNotificationSwipeOffset(deltaX: number): number {
|
||||
if (deltaX >= 0) return 0
|
||||
|
||||
const distance = Math.abs(deltaX)
|
||||
const resistedDistance =
|
||||
distance <= NOTIFICATION_SWIPE_ACTION_WIDTH
|
||||
? distance
|
||||
: NOTIFICATION_SWIPE_ACTION_WIDTH +
|
||||
(distance - NOTIFICATION_SWIPE_ACTION_WIDTH) * 0.16
|
||||
|
||||
return -Math.min(resistedDistance, NOTIFICATION_SWIPE_ACTION_WIDTH + 16)
|
||||
}
|
||||
|
||||
export function shouldRevealNotificationAction(
|
||||
offset: number,
|
||||
velocityX: number,
|
||||
): boolean {
|
||||
return (
|
||||
offset <= -NOTIFICATION_SWIPE_TRIGGER ||
|
||||
(offset <= -18 && velocityX <= -0.45)
|
||||
)
|
||||
}
|
||||
Reference in New Issue
Block a user