Bedrud Belgeler

Bedrud Android uygulaması Jetpack Compose ve Kotlin ile oluşturulmuş olup, resim içinde resim, derin bağlantı ve çoklu örnek desteği ile yerel bir video toplantısı deneyimi sunar.

Teknoloji Yığını

TeknolojiSürümAmaç
Kotlin2.1.0Dil
Jetpack ComposeMaterial 3UI araç takımı
Koin4.0.0Bağımlılık enjeksiyonu
Retrofit + OkHttpEn sonHTTP istemcisi
LiveKit Android SDK2.23.3WebRTC medya
Credentials APIEn sonPasskey desteği
Encrypted SharedPreferencesEn sonGüvenli depolama
CoilEn sonGörsel yükleme

Hedef: Min SDK 28, Target SDK 35, JDK 17

Dizin Yapısı

apps/android/app/src/main/java/com/bedrud/app/
├── BedrudApplication.kt           # Uygulama sınıfı (Koin başlatma)
├── MainActivity.kt                # Tek etkinlik giriş noktası
├── core/
│   ├── api/                       # Retrofit API istemcisi
│   │   ├── ApiClient.kt           # Auth yakalayıcılı temel HTTP istemcisi
│   │   ├── AuthApi.kt             # Auth uç nokta tanımları
│   │   └── RoomApi.kt             # Oda uç nokta tanımları
│   ├── auth/
│   │   └── AuthManager.kt         # Token yönetimi, giriş/çıkış
│   ├── call/
│   │   ├── CallService.kt         # Aramalar için ön plan servisi
│   │   └── CallConnectionService.kt  # Android ConnectionService
│   ├── deeplink/
│   │   └── DeepLinkHandler.kt     # bedrud.com derin bağlantılarını işleme
│   ├── di/
│   │   └── AppModule.kt           # Koin modülü tanımları
│   ├── instance/
│   │   ├── InstanceManager.kt     # Merkezi çoklu örnek düzenleyici
│   │   ├── InstanceStore.kt       # Kalıcı örnek depolama
│   │   └── InstanceDeps.kt        # Örnek başına bağımlılık konteyneri
│   ├── livekit/
│   │   └── RoomManager.kt         # LiveKit oda bağlantı yöneticisi
│   └── pip/
│       └── PipManager.kt          # Resim içinde resim denetleyicisi
├── models/
│   ├── User.kt                    # Kullanıcı veri modeli
│   ├── Room.kt                    # Oda veri modeli
│   ├── Instance.kt                # Sunucu örneği modeli
│   └── ApiResponse.kt             # API yanıt sarmalayıcıları
└── ui/
    ├── screens/
    │   ├── auth/
    │   │   ├── LoginScreen.kt     # E-posta/parola + passkey girişi
    │   │   └── RegisterScreen.kt  # Hesap kaydı
    │   ├── dashboard/
    │   │   └── DashboardScreen.kt # Oda listesi ve yönetimi
    │   ├── meeting/
    │   │   └── MeetingScreen.kt   # Görüntülü arama arayüzü
    │   ├── instance/
    │   │   ├── AddInstanceScreen.kt    # Sunucu örneği ekleme
    │   │   └── InstanceSwitcher.kt     # Örnekler arasında geçiş
    │   ├── profile/
    │   │   └── ProfileScreen.kt   # Kullanıcı profili
    │   └── settings/
    │       └── SettingsScreen.kt  # Uygulama ayarları
    ├── components/                 # Yeniden kullanılabilir Compose bileşenleri
    └── theme/                      # Material 3 tema tanımı

Çoklu Örnek Mimarisi

Android uygulaması aynı anda birden fazla Bedrud sunucusuna bağlanmayı destekler.

flowchart TB
    subgraph IM ["InstanceManager (Koin singleton)"]
        IS["InstanceStore<br/>Persists list to SharedPreferences"]
        AI["Active Instance (StateFlow)"]
        INST["instances: List Instance"]
    end
 
    subgraph DEPS ["InstanceDeps"]
        AM["AuthManager"]
        AC["ApiClient"]
        AA["AuthApi"]
        RA["RoomApi"]
        PM["PasskeyManager"]
        RM["RoomManager"]
    end
 
    AI --> DEPS

Temel Örüntü

Örnek başına tüm bağımlılıklar InstanceManager üzerinde StateFlow<T?> olarak sunulur. Composable’lar bunları toplar:

val authManager = instanceManager.authManager.collectAsState().value ?: return
val roomApi = instanceManager.roomApi.collectAsState().value ?: return

?: return örüntüsü composable’ın örnek tam olarak başlatılana kadar_RENDERLENMEMESİNİ sağlar.

Gezinti Akışı

flowchart LR
    A["No instances"] --> B[AddInstanceScreen]
    C["Has instances, not logged in"] --> D[LoginScreen]
    E["Has instances, logged in"] --> F[DashboardScreen]

Örnek değiştirici Dashboard araç çubuğundan tetiklenen bir ModalBottomSheet olarak görünür.

Özellikler

Derin Bağlantı

Uygulama şu URL kalıplarını işler:

  • https://bedrud.com/m/* - Doğrudan odaya katılma
  • https://bedrud.com/c/* - Kod ile odaya katılma

AndroidManifest.xml dosyasındaki intent filtreleri ile yapılandırılır.

Arama Yönetimi

  • CallService - Aramalar sırasında bağlantıyı canlı tutan ön plan servisi
  • CallConnectionService - Uygun arama arayüzü için Android’in telefon çerçevesiyle entegre olur
  • Gerekli izinler: MANAGE_OWN_CALLS, FOREGROUND_SERVICE_PHONE_CALL, FOREGROUND_SERVICE_CAMERA, FOREGROUND_SERVICE_MICROPHONE

Resim İçinde Resim

Toplantı ekranı PiP modunu destekler, kullanıcıların diğer uygulamaları kullanırken video yayını görmesine olanak tanır.

Passkey

FIDO2/WebAuthn passkey kaydı ve girişi için Android’in Credentials API’sini kullanır.

Derleme

# Hata ayıklama APK
make build-android-debug
 
# Sürüm APK (keystore.properties gerektirir)
make build-android
 
# Derle + bağlı cihaza yükle
make release-android
 
# Android Studio'da aç
make dev-android

Sürüm İmzalama

Sürüm derlemeleri Android proje kökünde imzalama yapılandırmanızı içeren bir keystore.properties dosyası gerektirir.