Kluczowe Wnioski
- Na ekranie 1.4" Rotary Input (koronka) jest lepszy niż dotyk.
- Streaming odpowiedzi (Server-Sent Events) jest krytyczny dla percepcji szybkości AI.
- Szyfrowanie kluczy API w
EncryptedSharedPreferencesto wymóg bezpieczeństwa.
Zegarki z systemem Wear OS stają się coraz potężniejsze, ale uruchamianie na nich asystentów AI wciąż jest wyzwaniem. Mój projekt "Gemini Client" udowadnia, że jest to możliwe przy zachowaniu płynności interfejsu, pod warunkiem rygorystycznego podejścia do zarządzania pamięcią i siecią.
1. UX na 1.4 cala: Walka o piksele
Największym problemem chatbota na zegarku jest to, że palec użytkownika zasłania tekst podczas przewijania. Standardowe gesty "swipe" są niewygodne przy czytaniu długich odpowiedzi LLM.
Rozwiązanie: Rotary Input. Zaimplementowałem obsługę fizycznej koronki (lub ramki w Galaxy Watch), która mapuje obrót na zdarzenia przewijania listy. Dzięki temu użytkownik może czytać odpowiedź bez dotykania ekranu.
// Obsługa Rotary Input w Compose
ScalingLazyColumn(
state = listState,
modifier = Modifier.rotaryWithScroll(listState)
) { ... }
2. Streaming Odpowiedzi (SSE)
Czekanie 5 sekund na pełną odpowiedź na zegarku wydaje się wiecznością (ręka drętwieje). Dlatego kluczowe było wdrożenie strumieniowania odpowiedzi z Gemini API.
Aplikacja odbiera fragmenty tekstu (chunks) i na bieżąco aktualizuje stan UI. Aby uniknąć migotania, zastosowałem buforowanie, które renderuje tekst dopiero, gdy uzbiera się pełne słowo lub zdanie.
3. Bezpieczeństwo Kluczy API
Użytkownicy podają własny klucz API Gemini. Przechowywanie go w zwykłym tekście byłoby nieodpowiedzialne. Aplikacja wykorzystuje EncryptedSharedPreferences z biblioteki Android Security, która szyfruje dane kluczem przechowywanym sprzętowo w Android Keystore.
Podsumowanie
Tworzenie na Wear OS to sztuka kompromisu. Musisz zapomnieć o rozbudowanych layoutach i skupić się na jednej, kluczowej interakcji. W przypadku Gemini Client, tą interakcją jest szybki dostęp do wiedzy bez wyciągania telefonu.