EdgeDeck2
Kişisel, LAN-only bir **Stream Deck** alternatifi. Eski bir Android telefonu (örn. Samsung Note Edge) bilgisayara bağlı bir kontrol paneline çevirir: medya kontrolü, sistem sesi, Spotify kitaplığı, masaüstü uygulaması açma, makrolar.
Proje sağlığı
%100 uygulama ilerlemesi
Problem
Çözüm
Mimari & Veri Modeli
Diller
Kotlin, Python, PowerShell
Notlar
Mimari detayları düzenle
Ana dil
Kotlin
Özellikler
Zorluklar
Öğrenimler
Yol haritası
Bu Projenin Geliştirme Günlükleri
Mixer fix: slider snap-back bug + preset filter
Mixer fix: slider snap-back bug + preset filter Slider 0'a düşüp geri çıkma animasyonu fix'i + preset bottom sheet'te Özel/ Hazır toggle (game kanalında 317 hazır + 5 özel ayrımı yapılabilsin). Device write endpoint'i bu Sonar versiyonunda hala kapalı (Allow:GET). Server (PC): - sonar_api.py: set_volume/set_mute/set_config artık PUT response'unu değil full get_state()'i broadcast eder. Önceki kod PUT'un volume-only yanıtını kullanıyordu; bu telefonda preset/device/configs alanlarını sıfırlıyordu (tüm sliders'ın bir an "0'a snap" görünmesinin asıl nedeni) - _refresh_and_notify() helper'ı Android: - SonarChannelStrip: pendingValue pattern * Drag bitince localValue → pendingValue olarak set edilir * displayValue = isDragging ? localValue : pendingValue ?? volume * LaunchedEffect(volume): server pending'e yaklaşınca pendingValue temizlenir * Diğer kanalın server update'i bu kanalın slider'ını artık bozmaz - PresetPickerSheet: Özel/Hazır toggle (isPreset bayrağı) * Özel = kullanıcı kayıtları (default sekme) * Hazır = SteelSeries built-in preset'leri * Boş tab için empty state
Sonar mixer: preset switch + device display
Sonar mixer: preset switch + device display Mixer'a kanal başına EQ preset değiştirme + kanalın çıkış cihazı adı eklendi. Cihaz değiştirme (PUT) endpoint'i bu Sonar versiyonunda kapalı (Allow: GET); şimdilik read-only gösteriliyor. Preset switch çalışıyor. Sonar API: - PUT /configs/{configId}/select (200 OK) -> preset switch - GET /configs/selected -> her kanalda aktif preset - GET /classicRedirections -> kanal -> deviceId - GET /audioDevices -> deviceId -> friendlyName Server (PC): - SonarService.get_state() artik selectedConfig/configs/deviceId/deviceName de iceriyor (per channel) - SonarService.set_config(configId) eklendi - handlers: SonarSelectConfig komutu + TYPE_ALIASES Android: - SonarConfig modeli, SonarChannelState alanlari (selectedConfigId/Name, configs, deviceId, deviceName) - Command.SonarSelectConfig variant - Mixer kanal seritlerinde: - Baslik altinda tiklanabilir preset chip ('hyperx music' / 'Custom' vb.) - Slider altinda cihaz adi (read-only) - Preset secimi icin ModalBottomSheet (LazyColumn, 300+ preset destekli)