Home / Specs / TrackPoint Navigation
Gestures v1.2.4

TrackPoint Navigation

Joystick-style cursor control on navigation keys

TrackPoint Navigation Mode Specification

Feature Overview

Feature Name: TrackPoint Navigation Mode

Priority: P1

Status: Complete

Target Version: v1.2.4

Summary

A joystick-style cursor control mode activated by holding navigation keys (arrow keys), enabling proportional multi-directional cursor movement.

Motivation

Traditional arrow key navigation requires repeated taps to move multiple positions. TrackPoint mode allows fluid, continuous cursor movement in any direction by holding a nav key and moving the finger, similar to a ThinkPad TrackPoint.

Requirements

Functional Requirements

Non-Functional Requirements

User Stories

Technical Design

Architecture

User Input (arrow key)

|

v

+------------------+

| onTouchDown() | -- Records initial touch position

+------------------+

|

v (no initial movement + hold)

+------------------+

| TrackPoint Mode | -- FLAG_P_TRACKPOINT_MODE activated

| Activation | -- CLOCK_TICK haptic feedback

+------------------+

|

v

+------------------+

| Continuous | -- Repeating handler tracks finger position

| Position Track | -- Calculates direction and distance

+------------------+

|

v

+------------------+

| Cursor Movement | -- Sends arrow key events proportionally

| Handler | -- Supports all 8 directions

+------------------+

Component Breakdown

Data Structures

// State flag for mode tracking

private const val FLAG_P_TRACKPOINT_MODE = 64

// Timer identifier

private val trackpointWhat = Any()

// Direction constants

enum class TrackPointDirection {

NORTH, NORTHEAST, EAST, SOUTHEAST,

SOUTH, SOUTHWEST, WEST, NORTHWEST

}

API/Interface Design

// TrackPoint handling in Pointers.kt

private fun handleTrackPointRepeat(ptr: Pointer) {

val dx = ptr.currentX - ptr.activationX

val dy = ptr.currentY - ptr.activationY

// Calculate direction from delta

val direction = getTrackPointDirection(dx, dy)

// Send cursor movement based on direction

when (direction) {

NORTH -> sendArrowKey(KeyEvent.KEYCODE_DPAD_UP)

NORTHEAST -> {

sendArrowKey(KeyEvent.KEYCODE_DPAD_UP)

sendArrowKey(KeyEvent.KEYCODE_DPAD_RIGHT)

}

// ... other directions

}

}

// Haptic feedback on activation

private fun triggerTrackPointHaptic() {

VibratorCompat.vibrate(HapticEvent.TRACKPOINT_ACTIVATE)

}

State Management

Implementation Plan

Phase 1: Core TrackPoint Mode

Status: Complete

Deliverables:

Phase 2: Integration & Polish

Status: Complete

Deliverables:

Testing Strategy

Unit Tests

Integration Tests

UI/UX Tests

Dependencies

Internal Dependencies

External Dependencies

Breaking Changes

Configuration

Haptic Settings

The TrackPoint activation haptic can be toggled in Settings > Accessibility > Haptic Feedback:

Related Settings

Error Handling

Success Metrics


Created: 2026-01-14

Last Updated: 2026-01-14

Owner: CleverKeys Development

Reviewers: tribixbite