Voice replies, on-device speech, message cards and 0.1.0-alpha

Gearslip now reads messages aloud and takes replies by voice. It asks
whether to reply, reads the reply back and sends it after a countdown.
Say "cancel" or "change it" to stop or redo it, or tap a quick reply.

Speech-to-text runs on the phone with whisper.cpp and a small Whisper
model, so voice works without Google services. The model ships in the
repo, so a fresh clone builds with nothing to download.

New messages show as one card at the top right, with a bar counting
down to when it closes or sends.

Other changes:
- Steering wheel buttons, knobs and D-pads drive the car screen.
- Smoother car audio: chunks wait for the car instead of dropping.
- Sharper, more responsive video.
- The Gearslip switch in Settings now stops it taking the USB
  connection.
- Apps that refuse Gearslip say so instead of loading forever.
- The phone asks for notification permission.
- The home screen stays upright.
- The car screen shows what's new after an update.
This commit is contained in:
Seb3thehacker committed 2026-10-01 00:03:53 -07:00
1 parent 1b2010f939
commit e314aa8546
46 files changed
+2290 -229

No files matched your search

+26 -1
View File
@@ -85,6 +85,14 @@
<intent>
<action android:name="android.media.browse.MediaBrowserService" />
</intent>
<!-- Speech: without these, Android hides the recognizer and the voice from us and
SpeechRecognizer reports none installed even when one is. -->
<intent>
<action android:name="android.speech.RecognitionService" />
</intent>
<intent>
<action android:name="android.intent.action.TTS_SERVICE" />
</intent>
</queries>
<application
@@ -121,6 +129,18 @@
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<!--
Answers the car's USB connection on GearslipActivity's behalf. Kept apart from the
activity so Settings can switch off just this (AppSettings.setGearslipEnabled) and leave
the head unit to Android Auto, without disabling the screen the switch is on.
-->
<activity-alias
android:name=".GearslipUsbAccessory"
android:targetActivity=".GearslipActivity"
android:exported="true">
<intent-filter>
<action android:name="android.hardware.usb.action.USB_ACCESSORY_ATTACHED" />
</intent-filter>
@@ -128,7 +148,12 @@
<meta-data
android:name="android.hardware.usb.action.USB_ACCESSORY_ATTACHED"
android:resource="@xml/accessory_filter" />
</activity>
</activity-alias>
<!-- Dev builds' test message: its Reply and Mark as read actions land here. -->
<receiver
android:name=".notify.TestMessageReceiver"
android:exported="false" />
<service
android:name=".mirror.MirrorService"