diff --git a/app/android/app/src/main/kotlin/com/friend/ios/BleHostApiImpl.kt b/app/android/app/src/main/kotlin/com/friend/ios/BleHostApiImpl.kt index d2314589153..b3f7285d35b 100644 --- a/app/android/app/src/main/kotlin/com/friend/ios/BleHostApiImpl.kt +++ b/app/android/app/src/main/kotlin/com/friend/ios/BleHostApiImpl.kt @@ -2,6 +2,7 @@ package com.friend.ios import android.app.Activity import android.content.Intent +import android.provider.Settings import android.util.Log import androidx.core.content.ContextCompat @@ -147,6 +148,31 @@ class BleHostApiImpl(private val getActivity: () -> Activity?) : BleHostApi { cm.associate(deviceAddress = deviceAddress) } + // ── System settings deep-link ── + + override fun openBluetoothSettings() { + val activity = getActivity() ?: run { + Log.w(TAG, "openBluetoothSettings: no activity available") + return + } + val intent = Intent(Settings.ACTION_BLUETOOTH_SETTINGS).apply { + addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) + } + try { + activity.startActivity(intent) + } catch (e: Exception) { + Log.e(TAG, "openBluetoothSettings failed: ${e.message}") + // Fallback to general settings if the Bluetooth-specific intent isn't resolvable. + try { + activity.startActivity(Intent(Settings.ACTION_SETTINGS).apply { + addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) + }) + } catch (e2: Exception) { + Log.e(TAG, "openBluetoothSettings fallback also failed: ${e2.message}") + } + } + } + /** * Called from MainActivity.onActivityResult to handle companion chooser result. */ diff --git a/app/android/app/src/main/kotlin/com/friend/ios/OmiBleForegroundService.kt b/app/android/app/src/main/kotlin/com/friend/ios/OmiBleForegroundService.kt index 9520d369d75..1e96ce5d698 100644 --- a/app/android/app/src/main/kotlin/com/friend/ios/OmiBleForegroundService.kt +++ b/app/android/app/src/main/kotlin/com/friend/ios/OmiBleForegroundService.kt @@ -375,7 +375,15 @@ class OmiBleForegroundService : Service() { val addr = address.uppercase() + // Android GATT statuses that indicate the OS-level bond is broken / out of sync + // with the peripheral's pairing record. Auto-retry will loop forever until the + // user forgets the device in system Bluetooth settings. + // 137 = GATT_AUTH_FAIL (most common when the peer wiped its bonding info) + // 15 = GATT_INSUF_ENCRYPTION + val pairingLost = status == 137 || status == 15 + val error = when { + pairingLost -> "pairing_lost" status == 22 -> "paired_to_another_phone" status != 0 -> "gatt_status_$status" else -> null @@ -411,6 +419,13 @@ class OmiBleForegroundService : Service() { if (isDestroying || status == -1 || !isBluetoothEnabled) return + // Skip retry when the bond is broken — every retry will fail with the same + // status until the user forgets the device in system Bluetooth settings. + if (status == 137 || status == 15) { + Log.i(TAG, "Skip retry for $addr: pairing lost (status=$status). Waiting for user to forget device in system settings.") + return + } + managed.retryCount++ Log.i(TAG, "Retry #${managed.retryCount} for $addr in ${RECONNECT_DELAY_MS}ms (status=$status)") diff --git a/app/android/app/src/main/kotlin/com/friend/ios/PigeonCommunicator.g.kt b/app/android/app/src/main/kotlin/com/friend/ios/PigeonCommunicator.g.kt index 9d27257b66f..2bbd82a68b9 100644 --- a/app/android/app/src/main/kotlin/com/friend/ios/PigeonCommunicator.g.kt +++ b/app/android/app/src/main/kotlin/com/friend/ios/PigeonCommunicator.g.kt @@ -818,6 +818,13 @@ interface BleHostApi { fun hasCompanionDeviceAssociation(): Boolean /** (Android only) Initiate CompanionDeviceManager association for a device. */ fun requestCompanionDeviceAssociation(deviceAddress: String, callback: (Result) -> Unit) + /** + * Open the system Bluetooth settings page so the user can forget a stale + * bond. iOS uses the App-Prefs:root=Bluetooth deep-link (falls back to the + * general Settings app on iOS versions where Apple has restricted the URL); + * Android fires the Settings.ACTION_BLUETOOTH_SETTINGS intent. + */ + fun openBluetoothSettings() companion object { /** The codec used by BleHostApi. */ @@ -1147,6 +1154,22 @@ interface BleHostApi { channel.setMessageHandler(null) } } + run { + val channel = BasicMessageChannel(binaryMessenger, "dev.flutter.pigeon.omi_pigeon.BleHostApi.openBluetoothSettings$separatedMessageChannelSuffix", codec) + if (api != null) { + channel.setMessageHandler { _, reply -> + val wrapped: List = try { + api.openBluetoothSettings() + listOf(null) + } catch (exception: Throwable) { + PigeonCommunicatorPigeonUtils.wrapError(exception) + } + reply.reply(wrapped) + } + } else { + channel.setMessageHandler(null) + } + } } } } diff --git a/app/ios/Runner/BleHostApiImpl.swift b/app/ios/Runner/BleHostApiImpl.swift index 8dc8608785d..7c9cf325bb5 100644 --- a/app/ios/Runner/BleHostApiImpl.swift +++ b/app/ios/Runner/BleHostApiImpl.swift @@ -1,4 +1,5 @@ import Flutter +import UIKit /// Bridges Pigeon BleHostApi calls to OmiBleManager. final class BleHostApiImpl: BleHostApi { @@ -101,4 +102,27 @@ final class BleHostApiImpl: BleHostApi { // No-op on iOS — state restoration handles background reconnection completion(.success("")) } + + func openBluetoothSettings() throws { + // Try the Bluetooth-specific deep-link first; Apple has restricted this URL + // on newer iOS versions. canOpenURL would always return false here without + // an LSApplicationQueriesSchemes entry for App-Prefs (a non-public scheme), + // so check the open() completion handler's success flag instead — that + // reflects what actually happened. Fall back to the app's settings page + // (UIApplication.openSettingsURLString) which is guaranteed to open and at + // least gets the user into Settings. + let bluetoothUrl = URL(string: "App-Prefs:root=Bluetooth") + let appSettingsUrl = URL(string: UIApplication.openSettingsURLString) + DispatchQueue.main.async { + if let url = bluetoothUrl { + UIApplication.shared.open(url, options: [:]) { success in + if !success, let settingsUrl = appSettingsUrl { + UIApplication.shared.open(settingsUrl, options: [:], completionHandler: nil) + } + } + } else if let url = appSettingsUrl { + UIApplication.shared.open(url, options: [:], completionHandler: nil) + } + } + } } diff --git a/app/ios/Runner/OmiBleManager.swift b/app/ios/Runner/OmiBleManager.swift index bac02ccfdea..e761c6bb290 100644 --- a/app/ios/Runner/OmiBleManager.swift +++ b/app/ios/Runner/OmiBleManager.swift @@ -364,10 +364,16 @@ final class OmiBleManager: NSObject { case .connectionTimeout: return "connection_timeout" case .peripheralDisconnected: return "remote_device_terminated" case .connectionFailed: return "connection_failed_instant_passed" + case .peerRemovedPairingInformation: return "pairing_lost" default: return "gatt_error_\(cbError.code.rawValue)" } } + private static func isPairingLostError(_ error: Error?) -> Bool { + guard let cbError = error as? CBError else { return false } + return cbError.code == .peerRemovedPairingInformation + } + /// Append a disconnect/fail event to the per-device history ring buffer. /// `eventType` is "disconnect" for an established link lost, or "fail_to_connect" /// for a connect attempt that never reached didConnect. @@ -608,6 +614,7 @@ extension OmiBleManager: CBCentralManagerDelegate { func centralManager(_ central: CBCentralManager, didFailToConnect peripheral: CBPeripheral, error: Error?) { let uuid = peripheralUuidString(peripheral) let isManual = manuallyDisconnected.contains(uuid) + let pairingLost = Self.isPairingLostError(error) NSLog("[OmiBle] didFailToConnect: \(peripheral.name ?? ""), uuid=\(uuid), error=\(error?.localizedDescription ?? "nil")") cleanupPeripheral(uuid) @@ -624,11 +631,14 @@ extension OmiBleManager: CBCentralManagerDelegate { incrementFailToConnectCount(uuid: uuid) } - flutterApi?.onPeripheralDisconnected(peripheralUuid: uuid, error: error?.localizedDescription) { _ in } + let flutterError = pairingLost ? "pairing_lost" : error?.localizedDescription + flutterApi?.onPeripheralDisconnected(peripheralUuid: uuid, error: flutterError) { _ in } // Retry previously-connected peripherals — otherwise a failed connect silently // drops the user. iOS queues this at the chipset level; it's free while waiting. - if !isManual, everConnected.contains(uuid) { + // Skip retry on pairing_lost: the OS-level bond is broken and every retry will + // fail with the same error until the user forgets the device in iOS Settings. + if !isManual, !pairingLost, everConnected.contains(uuid) { DispatchQueue.main.asyncAfter(deadline: .now() + .milliseconds(200)) { [weak self] in guard let self = self else { return } self.centralManager.connect(peripheral, options: nil) @@ -639,6 +649,7 @@ extension OmiBleManager: CBCentralManagerDelegate { func centralManager(_ central: CBCentralManager, didDisconnectPeripheral peripheral: CBPeripheral, error: Error?) { let uuid = peripheralUuidString(peripheral) let isManual = manuallyDisconnected.contains(uuid) + let pairingLost = Self.isPairingLostError(error) NSLog("[OmiBle] didDisconnect: \(peripheral.name ?? ""), uuid=\(uuid), error=\(error?.localizedDescription ?? "nil")") cleanupPeripheral(uuid) @@ -657,10 +668,12 @@ extension OmiBleManager: CBCentralManagerDelegate { } connectionStartTimes.removeValue(forKey: uuid) - flutterApi?.onPeripheralDisconnected(peripheralUuid: uuid, error: error?.localizedDescription) { _ in } + let flutterError = pairingLost ? "pairing_lost" : error?.localizedDescription + flutterApi?.onPeripheralDisconnected(peripheralUuid: uuid, error: flutterError) { _ in } - // Auto-reconnect unless manually disconnected - if !isManual { + // Auto-reconnect unless manually disconnected. Skip on pairing_lost — the bond + // is broken and retries will loop until the user forgets the device. + if !isManual, !pairingLost { DispatchQueue.main.asyncAfter(deadline: .now() + .milliseconds(200)) { [weak self] in guard let self = self else { return } // iOS handles this at the BLE chipset level — zero CPU/radio cost while waiting diff --git a/app/ios/Runner/PigeonCommunicator.g.swift b/app/ios/Runner/PigeonCommunicator.g.swift index 10ef43ed1c2..03fb2af41cd 100644 --- a/app/ios/Runner/PigeonCommunicator.g.swift +++ b/app/ios/Runner/PigeonCommunicator.g.swift @@ -827,6 +827,11 @@ protocol BleHostApi { func hasCompanionDeviceAssociation() throws -> Bool /// (Android only) Initiate CompanionDeviceManager association for a device. func requestCompanionDeviceAssociation(deviceAddress: String, completion: @escaping (Result) -> Void) + /// Open the system Bluetooth settings page so the user can forget a stale + /// bond. iOS uses the App-Prefs:root=Bluetooth deep-link (falls back to the + /// general Settings app on iOS versions where Apple has restricted the URL); + /// Android fires the Settings.ACTION_BLUETOOTH_SETTINGS intent. + func openBluetoothSettings() throws } /// Generated setup class from Pigeon to handle messages through the `binaryMessenger`. @@ -1109,6 +1114,23 @@ class BleHostApiSetup { } else { requestCompanionDeviceAssociationChannel.setMessageHandler(nil) } + /// Open the system Bluetooth settings page so the user can forget a stale + /// bond. iOS uses the App-Prefs:root=Bluetooth deep-link (falls back to the + /// general Settings app on iOS versions where Apple has restricted the URL); + /// Android fires the Settings.ACTION_BLUETOOTH_SETTINGS intent. + let openBluetoothSettingsChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.omi_pigeon.BleHostApi.openBluetoothSettings\(channelSuffix)", binaryMessenger: binaryMessenger, codec: codec) + if let api = api { + openBluetoothSettingsChannel.setMessageHandler { _, reply in + do { + try api.openBluetoothSettings() + reply(wrapResult(nil)) + } catch { + reply(wrapError(error)) + } + } + } else { + openBluetoothSettingsChannel.setMessageHandler(nil) + } } } /// Generated protocol from Pigeon that represents Flutter messages that can be called from Swift. diff --git a/app/lib/gen/pigeon_communicator.g.dart b/app/lib/gen/pigeon_communicator.g.dart index d3703abe077..e580c9a9608 100644 --- a/app/lib/gen/pigeon_communicator.g.dart +++ b/app/lib/gen/pigeon_communicator.g.dart @@ -1467,6 +1467,33 @@ class BleHostApi { return (pigeonVar_replyList[0] as String?)!; } } + + /// Open the system Bluetooth settings page so the user can forget a stale + /// bond. iOS uses the App-Prefs:root=Bluetooth deep-link (falls back to the + /// general Settings app on iOS versions where Apple has restricted the URL); + /// Android fires the Settings.ACTION_BLUETOOTH_SETTINGS intent. + Future openBluetoothSettings() async { + final String pigeonVar_channelName = 'dev.flutter.pigeon.omi_pigeon.BleHostApi.openBluetoothSettings$pigeonVar_messageChannelSuffix'; + final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( + pigeonVar_channelName, + pigeonChannelCodec, + binaryMessenger: pigeonVar_binaryMessenger, + ); + final Future pigeonVar_sendFuture = pigeonVar_channel.send(null); + final List? pigeonVar_replyList = + await pigeonVar_sendFuture as List?; + if (pigeonVar_replyList == null) { + throw _createConnectionError(pigeonVar_channelName); + } else if (pigeonVar_replyList.length > 1) { + throw PlatformException( + code: pigeonVar_replyList[0]! as String, + message: pigeonVar_replyList[1] as String?, + details: pigeonVar_replyList[2], + ); + } else { + return; + } + } } abstract class BleFlutterApi { diff --git a/app/lib/l10n/app_ar.arb b/app/lib/l10n/app_ar.arb index bc8e2685c7a..e03073eec0c 100644 --- a/app/lib/l10n/app_ar.arb +++ b/app/lib/l10n/app_ar.arb @@ -2980,5 +2980,8 @@ "selectAllTasksMenu": "تحديد الكل", "showCompletedTasks": "إظهار المكتملة", "startCallRecording": "بدء تسجيل المكالمة", - "startVoiceRecording": "بدء التسجيل الصوتي" + "startVoiceRecording": "بدء التسجيل الصوتي", + "pairingLostTitle": "لا يمكن الاتصال بجهاز أومي الخاص بك", + "pairingLostBody": "يرجى فتح إعدادات البلوتوث في هاتفك، وإزالة جهاز Omi الموجود من القائمة، ثم العودة والمحاولة مرة أخرى.", + "pairingLostButton": "افتح إعدادات البلوتوث" } diff --git a/app/lib/l10n/app_be.arb b/app/lib/l10n/app_be.arb index 20374fb7588..474b0c232fb 100644 --- a/app/lib/l10n/app_be.arb +++ b/app/lib/l10n/app_be.arb @@ -10721,5 +10721,8 @@ "selectAllTasksMenu": "Выбраць усе", "showCompletedTasks": "Паказаць завершаныя", "startCallRecording": "Пачаць запіс званка", - "startVoiceRecording": "Пачаць галасавы запіс" + "startVoiceRecording": "Пачаць галасавы запіс", + "pairingLostTitle": "Не ўдаецца падключыцца да вашага Omi", + "pairingLostBody": "Калі ласка, адкрыйце налады Bluetooth вашага тэлефона, выдаліце існуючы Omi са спісу, а затым вярніцеся і паспрабуйце яшчэ раз.", + "pairingLostButton": "Адкрыйце налады Bluetooth" } diff --git a/app/lib/l10n/app_bg.arb b/app/lib/l10n/app_bg.arb index e8e029093b9..c1223dea6a3 100644 --- a/app/lib/l10n/app_bg.arb +++ b/app/lib/l10n/app_bg.arb @@ -2982,5 +2982,8 @@ "selectAllTasksMenu": "Избиране на всички", "showCompletedTasks": "Показване на завършените", "startCallRecording": "Стартиране на запис на разговор", - "startVoiceRecording": "Стартиране на гласов запис" + "startVoiceRecording": "Стартиране на гласов запис", + "pairingLostTitle": "Не мога да се свържа с вашия Omi", + "pairingLostBody": "Моля, отворете настройките за Bluetooth на телефона си, премахнете съществуващия Omi от списъка, след което се върнете и опитайте отново.", + "pairingLostButton": "Отворете настройките на Bluetooth" } diff --git a/app/lib/l10n/app_bn.arb b/app/lib/l10n/app_bn.arb index 5ccb4b91bb9..6d79853adb5 100644 --- a/app/lib/l10n/app_bn.arb +++ b/app/lib/l10n/app_bn.arb @@ -10721,5 +10721,8 @@ "selectAllTasksMenu": "সমস্ত নির্বাচন", "showCompletedTasks": "সম্পন্ন দেখান", "startCallRecording": "কল রেকর্ডিং শুরু করুন", - "startVoiceRecording": "ভয়েস রেকর্ডিং শুরু করুন" + "startVoiceRecording": "ভয়েস রেকর্ডিং শুরু করুন", + "pairingLostTitle": "আপনার ওমির সাথে সংযোগ করা যাচ্ছে না।", + "pairingLostBody": "অনুগ্রহ করে আপনার ফোনের ব্লুটুথ সেটিংসে গিয়ে তালিকা থেকে বিদ্যমান Omi-কে সরিয়ে দিন, তারপর ফিরে এসে আবার চেষ্টা করুন।", + "pairingLostButton": "ব্লুটুথ সেটিংস খুলুন" } diff --git a/app/lib/l10n/app_bs.arb b/app/lib/l10n/app_bs.arb index d132b406ba4..7c8bfb17e26 100644 --- a/app/lib/l10n/app_bs.arb +++ b/app/lib/l10n/app_bs.arb @@ -10721,5 +10721,8 @@ "selectAllTasksMenu": "Odaberi sve", "showCompletedTasks": "Prikaži završene", "startCallRecording": "Pokreni snimanje poziva", - "startVoiceRecording": "Pokreni glasovno snimanje" + "startVoiceRecording": "Pokreni glasovno snimanje", + "pairingLostTitle": "Ne mogu se povezati s vašim Omi uređajem", + "pairingLostBody": "Molimo vas da otvorite Bluetooth postavke na telefonu, uklonite postojeći Omi sa liste, a zatim se vratite i pokušajte ponovo.", + "pairingLostButton": "Otvori postavke Bluetootha" } diff --git a/app/lib/l10n/app_ca.arb b/app/lib/l10n/app_ca.arb index 4842cb406af..fcb50e7cd51 100644 --- a/app/lib/l10n/app_ca.arb +++ b/app/lib/l10n/app_ca.arb @@ -2982,5 +2982,8 @@ "selectAllTasksMenu": "Selecciona tot", "showCompletedTasks": "Mostra les completades", "startCallRecording": "Inicia l'enregistrament de trucada", - "startVoiceRecording": "Inicia l'enregistrament de veu" + "startVoiceRecording": "Inicia l'enregistrament de veu", + "pairingLostTitle": "No em puc connectar al teu Omi", + "pairingLostBody": "Obriu la configuració de Bluetooth del telèfon, elimineu l'Omi existent de la llista i torneu-ho a provar.", + "pairingLostButton": "Obre la configuració de Bluetooth" } diff --git a/app/lib/l10n/app_cs.arb b/app/lib/l10n/app_cs.arb index 8e177c5021f..3eea2beb152 100644 --- a/app/lib/l10n/app_cs.arb +++ b/app/lib/l10n/app_cs.arb @@ -2982,5 +2982,8 @@ "selectAllTasksMenu": "Vybrat vše", "showCompletedTasks": "Zobrazit dokončené", "startCallRecording": "Zahájit nahrávání hovoru", - "startVoiceRecording": "Zahájit hlasový záznam" + "startVoiceRecording": "Zahájit hlasový záznam", + "pairingLostTitle": "Nelze se připojit k vašemu Omi", + "pairingLostBody": "Otevřete prosím nastavení Bluetooth v telefonu, odeberte stávající zařízení Omi ze seznamu a zkuste to znovu.", + "pairingLostButton": "Otevřít nastavení Bluetooth" } diff --git a/app/lib/l10n/app_da.arb b/app/lib/l10n/app_da.arb index 0bd676a8b38..b2cfa2d9a5c 100644 --- a/app/lib/l10n/app_da.arb +++ b/app/lib/l10n/app_da.arb @@ -3022,5 +3022,8 @@ "selectAllTasksMenu": "Vælg alle", "showCompletedTasks": "Vis fuldførte", "startCallRecording": "Start opkaldsoptagelse", - "startVoiceRecording": "Start stemmeoptagelse" + "startVoiceRecording": "Start stemmeoptagelse", + "pairingLostTitle": "Kan ikke oprette forbindelse til din Omi", + "pairingLostBody": "Åbn din telefons Bluetooth-indstillinger, fjern den eksisterende Omi fra listen, og prøv derefter igen.", + "pairingLostButton": "Åbn Bluetooth-indstillinger" } diff --git a/app/lib/l10n/app_de.arb b/app/lib/l10n/app_de.arb index 407d1af3c3b..dd62b24527e 100644 --- a/app/lib/l10n/app_de.arb +++ b/app/lib/l10n/app_de.arb @@ -2981,5 +2981,8 @@ "selectAllTasksMenu": "Alle auswählen", "showCompletedTasks": "Erledigte anzeigen", "startCallRecording": "Anrufaufnahme starten", - "startVoiceRecording": "Sprachaufnahme starten" + "startVoiceRecording": "Sprachaufnahme starten", + "pairingLostTitle": "Verbindung zu Ihrem Omi nicht möglich", + "pairingLostBody": "Bitte öffnen Sie die Bluetooth-Einstellungen Ihres Telefons, entfernen Sie das vorhandene Omi aus der Liste und versuchen Sie es dann erneut.", + "pairingLostButton": "Öffnen Sie die Bluetooth-Einstellungen." } diff --git a/app/lib/l10n/app_el.arb b/app/lib/l10n/app_el.arb index 91bc094399c..2dee68d476c 100644 --- a/app/lib/l10n/app_el.arb +++ b/app/lib/l10n/app_el.arb @@ -3013,5 +3013,8 @@ "selectAllTasksMenu": "Επιλογή όλων", "showCompletedTasks": "Εμφάνιση ολοκληρωμένων", "startCallRecording": "Έναρξη εγγραφής κλήσης", - "startVoiceRecording": "Έναρξη ηχογράφησης" + "startVoiceRecording": "Έναρξη ηχογράφησης", + "pairingLostTitle": "Δεν είναι δυνατή η σύνδεση με το Omi σας", + "pairingLostBody": "Ανοίξτε τις ρυθμίσεις Bluetooth του τηλεφώνου σας, καταργήστε το υπάρχον Omi από τη λίστα και, στη συνέχεια, επιστρέψτε και προσπαθήστε ξανά.", + "pairingLostButton": "Άνοιγμα ρυθμίσεων Bluetooth" } diff --git a/app/lib/l10n/app_en.arb b/app/lib/l10n/app_en.arb index 18d4c0271c5..b31d3aaa496 100644 --- a/app/lib/l10n/app_en.arb +++ b/app/lib/l10n/app_en.arb @@ -11004,5 +11004,17 @@ "deselectAllTasksMenu": "Deselect all", "@deselectAllTasksMenu": { "description": "Action menu entry that clears any current task selection while staying in selection mode" + }, + "pairingLostTitle": "Can't connect to your Omi", + "@pairingLostTitle": { + "description": "Title of the dialog shown when the BLE pairing between phone and Omi is broken (iOS peerRemovedPairingInformation / Android GATT_AUTH_FAIL or GATT_INSUF_ENCRYPTION). The user must remove the existing Omi from their phone's Bluetooth list to recover." + }, + "pairingLostBody": "Please open your phone's Bluetooth settings, remove the existing Omi from the list, then come back and try again.", + "@pairingLostBody": { + "description": "Body of the pairing-lost recovery dialog. Plain instructions, no jargon." + }, + "pairingLostButton": "Open Bluetooth Settings", + "@pairingLostButton": { + "description": "Confirm button on the pairing-lost dialog. Acts as the dismiss action; user manually navigates to system Bluetooth settings." } } diff --git a/app/lib/l10n/app_es.arb b/app/lib/l10n/app_es.arb index d0ffd2c2e6e..541b2e2883f 100644 --- a/app/lib/l10n/app_es.arb +++ b/app/lib/l10n/app_es.arb @@ -3014,5 +3014,8 @@ "selectAllTasksMenu": "Seleccionar todo", "showCompletedTasks": "Mostrar completadas", "startCallRecording": "Iniciar grabación de llamada", - "startVoiceRecording": "Iniciar grabación de voz" + "startVoiceRecording": "Iniciar grabación de voz", + "pairingLostTitle": "No puedo conectarme a tu Omi", + "pairingLostBody": "Por favor, abre la configuración de Bluetooth de tu teléfono, elimina el dispositivo Omi de la lista y vuelve a intentarlo.", + "pairingLostButton": "Abrir la configuración de Bluetooth" } diff --git a/app/lib/l10n/app_et.arb b/app/lib/l10n/app_et.arb index 5bc2119a849..b70abd0dddf 100644 --- a/app/lib/l10n/app_et.arb +++ b/app/lib/l10n/app_et.arb @@ -3013,5 +3013,8 @@ "selectAllTasksMenu": "Vali kõik", "showCompletedTasks": "Kuva lõpetatud", "startCallRecording": "Alusta kõne salvestamist", - "startVoiceRecording": "Alusta häälsalvestust" + "startVoiceRecording": "Alusta häälsalvestust", + "pairingLostTitle": "Ei saa teie Omiga ühendust luua", + "pairingLostBody": "Palun avage oma telefoni Bluetoothi seaded, eemaldage olemasolev Omi loendist ja proovige uuesti.", + "pairingLostButton": "Ava Bluetoothi seaded" } diff --git a/app/lib/l10n/app_fa.arb b/app/lib/l10n/app_fa.arb index 33f48e72081..23024f3e809 100644 --- a/app/lib/l10n/app_fa.arb +++ b/app/lib/l10n/app_fa.arb @@ -10721,5 +10721,8 @@ "selectAllTasksMenu": "انتخاب همه", "showCompletedTasks": "نمایش انجام‌شده‌ها", "startCallRecording": "شروع ضبط تماس", - "startVoiceRecording": "شروع ضبط صدا" + "startVoiceRecording": "شروع ضبط صدا", + "pairingLostTitle": "نمی‌توان به Omi شما متصل شد", + "pairingLostBody": "لطفاً تنظیمات بلوتوث گوشی خود را باز کنید، Omi موجود را از لیست حذف کنید، سپس برگردید و دوباره امتحان کنید.", + "pairingLostButton": "تنظیمات بلوتوث را باز کنید" } diff --git a/app/lib/l10n/app_fi.arb b/app/lib/l10n/app_fi.arb index fd40a4f2d9c..d7b301c2f2a 100644 --- a/app/lib/l10n/app_fi.arb +++ b/app/lib/l10n/app_fi.arb @@ -3013,5 +3013,8 @@ "selectAllTasksMenu": "Valitse kaikki", "showCompletedTasks": "Näytä valmiit", "startCallRecording": "Aloita puhelun nauhoitus", - "startVoiceRecording": "Aloita ääninauhoitus" + "startVoiceRecording": "Aloita ääninauhoitus", + "pairingLostTitle": "Ei voida muodostaa yhteyttä Omiin", + "pairingLostBody": "Avaa puhelimesi Bluetooth-asetukset, poista nykyinen Omi listalta ja yritä uudelleen.", + "pairingLostButton": "Avaa Bluetooth-asetukset" } diff --git a/app/lib/l10n/app_fr.arb b/app/lib/l10n/app_fr.arb index 329930f1f64..4327613a3ac 100644 --- a/app/lib/l10n/app_fr.arb +++ b/app/lib/l10n/app_fr.arb @@ -3048,5 +3048,8 @@ "selectAllTasksMenu": "Tout sélectionner", "showCompletedTasks": "Afficher les terminées", "startCallRecording": "Démarrer l'enregistrement d'appel", - "startVoiceRecording": "Démarrer l'enregistrement vocal" + "startVoiceRecording": "Démarrer l'enregistrement vocal", + "pairingLostTitle": "Impossible de se connecter à votre Omi", + "pairingLostBody": "Veuillez ouvrir les paramètres Bluetooth de votre téléphone, supprimer l'appareil Omi existant de la liste, puis revenir et réessayer.", + "pairingLostButton": "Ouvrir les paramètres Bluetooth" } diff --git a/app/lib/l10n/app_he.arb b/app/lib/l10n/app_he.arb index c3ab2bcf9b9..9d68d9a3c80 100644 --- a/app/lib/l10n/app_he.arb +++ b/app/lib/l10n/app_he.arb @@ -10721,5 +10721,8 @@ "selectAllTasksMenu": "בחר הכל", "showCompletedTasks": "הצג הושלמו", "startCallRecording": "התחל הקלטת שיחה", - "startVoiceRecording": "התחל הקלטה קולית" + "startVoiceRecording": "התחל הקלטה קולית", + "pairingLostTitle": "לא ניתן להתחבר לאומי שלך", + "pairingLostBody": "אנא פתח את הגדרות ה-Bluetooth של הטלפון שלך, הסר את ה-Omi הקיים מהרשימה, לאחר מכן חזור ונסה שוב.", + "pairingLostButton": "פתח את הגדרות בלוטות'" } diff --git a/app/lib/l10n/app_hi.arb b/app/lib/l10n/app_hi.arb index f380574586a..18ffdf42d6d 100644 --- a/app/lib/l10n/app_hi.arb +++ b/app/lib/l10n/app_hi.arb @@ -3014,5 +3014,8 @@ "selectAllTasksMenu": "सभी चुनें", "showCompletedTasks": "पूर्ण दिखाएं", "startCallRecording": "कॉल रिकॉर्डिंग शुरू करें", - "startVoiceRecording": "वॉइस रिकॉर्डिंग शुरू करें" + "startVoiceRecording": "वॉइस रिकॉर्डिंग शुरू करें", + "pairingLostTitle": "आपके ओमी से कनेक्ट नहीं हो पा रहा है", + "pairingLostBody": "कृपया अपने फोन की ब्लूटूथ सेटिंग खोलें, सूची से मौजूदा ओमी को हटा दें, फिर वापस आकर दोबारा प्रयास करें।", + "pairingLostButton": "ब्लूटूथ सेटिंग्स खोलें" } diff --git a/app/lib/l10n/app_hr.arb b/app/lib/l10n/app_hr.arb index 2af9c62e6b6..6c970a21eab 100644 --- a/app/lib/l10n/app_hr.arb +++ b/app/lib/l10n/app_hr.arb @@ -10721,5 +10721,8 @@ "selectAllTasksMenu": "Odaberi sve", "showCompletedTasks": "Prikaži dovršene", "startCallRecording": "Pokreni snimanje poziva", - "startVoiceRecording": "Pokreni glasovno snimanje" + "startVoiceRecording": "Pokreni glasovno snimanje", + "pairingLostTitle": "Ne mogu se povezati s vašim Omi uređajem", + "pairingLostBody": "Otvorite postavke Bluetootha na telefonu, uklonite postojeći Omi s popisa, a zatim se vratite i pokušajte ponovno.", + "pairingLostButton": "Otvori postavke Bluetootha" } diff --git a/app/lib/l10n/app_hu.arb b/app/lib/l10n/app_hu.arb index 509c896b39f..f9e1708940f 100644 --- a/app/lib/l10n/app_hu.arb +++ b/app/lib/l10n/app_hu.arb @@ -3109,5 +3109,8 @@ "selectAllTasksMenu": "Összes kijelölése", "showCompletedTasks": "Befejezettek megjelenítése", "startCallRecording": "Hívásfelvétel indítása", - "startVoiceRecording": "Hangfelvétel indítása" + "startVoiceRecording": "Hangfelvétel indítása", + "pairingLostTitle": "Nem tudok csatlakozni az Omi-hoz", + "pairingLostBody": "Kérjük, nyissa meg a telefon Bluetooth-beállításait, távolítsa el a meglévő Omi-t a listából, majd próbálja újra.", + "pairingLostButton": "Nyissa meg a Bluetooth-beállításokat" } diff --git a/app/lib/l10n/app_id.arb b/app/lib/l10n/app_id.arb index e497e232001..3e5168740ba 100644 --- a/app/lib/l10n/app_id.arb +++ b/app/lib/l10n/app_id.arb @@ -3055,5 +3055,8 @@ "selectAllTasksMenu": "Pilih semua", "showCompletedTasks": "Tampilkan selesai", "startCallRecording": "Mulai rekaman panggilan", - "startVoiceRecording": "Mulai rekaman suara" + "startVoiceRecording": "Mulai rekaman suara", + "pairingLostTitle": "Tidak dapat terhubung ke Omi Anda", + "pairingLostBody": "Silakan buka pengaturan Bluetooth ponsel Anda, hapus Omi yang ada dari daftar, lalu kembali dan coba lagi.", + "pairingLostButton": "Buka Pengaturan Bluetooth" } diff --git a/app/lib/l10n/app_it.arb b/app/lib/l10n/app_it.arb index 07c5f52f904..3097fa53fe9 100644 --- a/app/lib/l10n/app_it.arb +++ b/app/lib/l10n/app_it.arb @@ -3013,5 +3013,8 @@ "selectAllTasksMenu": "Seleziona tutto", "showCompletedTasks": "Mostra completate", "startCallRecording": "Avvia registrazione chiamata", - "startVoiceRecording": "Avvia registrazione vocale" + "startVoiceRecording": "Avvia registrazione vocale", + "pairingLostTitle": "Impossibile connettersi al tuo Omi", + "pairingLostBody": "Apri le impostazioni Bluetooth del tuo telefono, rimuovi Omi dall'elenco e riprova.", + "pairingLostButton": "Apri le impostazioni Bluetooth" } diff --git a/app/lib/l10n/app_ja.arb b/app/lib/l10n/app_ja.arb index f89102ce396..2d3e4624407 100644 --- a/app/lib/l10n/app_ja.arb +++ b/app/lib/l10n/app_ja.arb @@ -3014,5 +3014,8 @@ "selectAllTasksMenu": "すべて選択", "showCompletedTasks": "完了を表示", "startCallRecording": "通話録音を開始", - "startVoiceRecording": "音声録音を開始" + "startVoiceRecording": "音声録音を開始", + "pairingLostTitle": "Omiに接続できません", + "pairingLostBody": "スマートフォンのBluetooth設定を開き、リストから既存のOmiを削除してから、もう一度お試しください。", + "pairingLostButton": "Bluetooth設定を開く" } diff --git a/app/lib/l10n/app_kn.arb b/app/lib/l10n/app_kn.arb index b88068926cd..a2d6f8a8820 100644 --- a/app/lib/l10n/app_kn.arb +++ b/app/lib/l10n/app_kn.arb @@ -10721,5 +10721,8 @@ "selectAllTasksMenu": "ಎಲ್ಲವನ್ನೂ ಆಯ್ಕೆ ಮಾಡಿ", "showCompletedTasks": "ಪೂರ್ಣಗೊಂಡವು ತೋರಿಸಿ", "startCallRecording": "ಕರೆ ರೆಕಾರ್ಡಿಂಗ್ ಪ್ರಾರಂಭಿಸಿ", - "startVoiceRecording": "ಧ್ವನಿ ರೆಕಾರ್ಡಿಂಗ್ ಪ್ರಾರಂಭಿಸಿ" + "startVoiceRecording": "ಧ್ವನಿ ರೆಕಾರ್ಡಿಂಗ್ ಪ್ರಾರಂಭಿಸಿ", + "pairingLostTitle": "ನಿಮ್ಮ Omi ಗೆ ಸಂಪರ್ಕಿಸಲು ಸಾಧ್ಯವಾಗುತ್ತಿಲ್ಲ.", + "pairingLostBody": "ದಯವಿಟ್ಟು ನಿಮ್ಮ ಫೋನ್‌ನ ಬ್ಲೂಟೂತ್ ಸೆಟ್ಟಿಂಗ್‌ಗಳನ್ನು ತೆರೆಯಿರಿ, ಪಟ್ಟಿಯಿಂದ ಅಸ್ತಿತ್ವದಲ್ಲಿರುವ ಓಮಿಯನ್ನು ತೆಗೆದುಹಾಕಿ, ನಂತರ ಹಿಂತಿರುಗಿ ಮತ್ತೆ ಪ್ರಯತ್ನಿಸಿ.", + "pairingLostButton": "ಬ್ಲೂಟೂತ್ ಸೆಟ್ಟಿಂಗ್‌ಗಳನ್ನು ತೆರೆಯಿರಿ" } diff --git a/app/lib/l10n/app_ko.arb b/app/lib/l10n/app_ko.arb index 7e9ddf2ea94..3b9528de75a 100644 --- a/app/lib/l10n/app_ko.arb +++ b/app/lib/l10n/app_ko.arb @@ -3013,5 +3013,8 @@ "selectAllTasksMenu": "모두 선택", "showCompletedTasks": "완료 보기", "startCallRecording": "통화 녹음 시작", - "startVoiceRecording": "음성 녹음 시작" + "startVoiceRecording": "음성 녹음 시작", + "pairingLostTitle": "Omi에 연결할 수 없습니다", + "pairingLostBody": "휴대폰의 블루투스 설정에서 기존 Omi를 목록에서 제거한 후 다시 시도해 주세요.", + "pairingLostButton": "블루투스 설정 열기" } diff --git a/app/lib/l10n/app_localizations.dart b/app/lib/l10n/app_localizations.dart index 62c000c994e..368595cf0f2 100644 --- a/app/lib/l10n/app_localizations.dart +++ b/app/lib/l10n/app_localizations.dart @@ -17222,6 +17222,24 @@ abstract class AppLocalizations { /// In en, this message translates to: /// **'Deselect all'** String get deselectAllTasksMenu; + + /// Title of the dialog shown when the BLE pairing between phone and Omi is broken (iOS peerRemovedPairingInformation / Android GATT_AUTH_FAIL or GATT_INSUF_ENCRYPTION). The user must remove the existing Omi from their phone's Bluetooth list to recover. + /// + /// In en, this message translates to: + /// **'Can\'t connect to your Omi'** + String get pairingLostTitle; + + /// Body of the pairing-lost recovery dialog. Plain instructions, no jargon. + /// + /// In en, this message translates to: + /// **'Please open your phone\'s Bluetooth settings, remove the existing Omi from the list, then come back and try again.'** + String get pairingLostBody; + + /// Confirm button on the pairing-lost dialog. Acts as the dismiss action; user manually navigates to system Bluetooth settings. + /// + /// In en, this message translates to: + /// **'Open Bluetooth Settings'** + String get pairingLostButton; } class _AppLocalizationsDelegate extends LocalizationsDelegate { diff --git a/app/lib/l10n/app_localizations_ar.dart b/app/lib/l10n/app_localizations_ar.dart index 67f82a3f97d..0f68b429692 100644 --- a/app/lib/l10n/app_localizations_ar.dart +++ b/app/lib/l10n/app_localizations_ar.dart @@ -9167,4 +9167,14 @@ class AppLocalizationsAr extends AppLocalizations { @override String get deselectAllTasksMenu => 'إلغاء تحديد الكل'; + + @override + String get pairingLostTitle => 'لا يمكن الاتصال بجهاز أومي الخاص بك'; + + @override + String get pairingLostBody => + 'يرجى فتح إعدادات البلوتوث في هاتفك، وإزالة جهاز Omi الموجود من القائمة، ثم العودة والمحاولة مرة أخرى.'; + + @override + String get pairingLostButton => 'افتح إعدادات البلوتوث'; } diff --git a/app/lib/l10n/app_localizations_be.dart b/app/lib/l10n/app_localizations_be.dart index ddbb26d7523..1c29844bcbc 100644 --- a/app/lib/l10n/app_localizations_be.dart +++ b/app/lib/l10n/app_localizations_be.dart @@ -9254,4 +9254,14 @@ class AppLocalizationsBe extends AppLocalizations { @override String get deselectAllTasksMenu => 'Зняць выбар усіх'; + + @override + String get pairingLostTitle => 'Не ўдаецца падключыцца да вашага Omi'; + + @override + String get pairingLostBody => + 'Калі ласка, адкрыйце налады Bluetooth вашага тэлефона, выдаліце існуючы Omi са спісу, а затым вярніцеся і паспрабуйце яшчэ раз.'; + + @override + String get pairingLostButton => 'Адкрыйце налады Bluetooth'; } diff --git a/app/lib/l10n/app_localizations_bg.dart b/app/lib/l10n/app_localizations_bg.dart index c29e64dc9df..c646db9c2a4 100644 --- a/app/lib/l10n/app_localizations_bg.dart +++ b/app/lib/l10n/app_localizations_bg.dart @@ -9263,4 +9263,14 @@ class AppLocalizationsBg extends AppLocalizations { @override String get deselectAllTasksMenu => 'Премахване на избора'; + + @override + String get pairingLostTitle => 'Не мога да се свържа с вашия Omi'; + + @override + String get pairingLostBody => + 'Моля, отворете настройките за Bluetooth на телефона си, премахнете съществуващия Omi от списъка, след което се върнете и опитайте отново.'; + + @override + String get pairingLostButton => 'Отворете настройките на Bluetooth'; } diff --git a/app/lib/l10n/app_localizations_bn.dart b/app/lib/l10n/app_localizations_bn.dart index 9c7f1d6b345..9c916cde7ac 100644 --- a/app/lib/l10n/app_localizations_bn.dart +++ b/app/lib/l10n/app_localizations_bn.dart @@ -9237,4 +9237,14 @@ class AppLocalizationsBn extends AppLocalizations { @override String get deselectAllTasksMenu => 'সমস্ত নির্বাচন বাতিল'; + + @override + String get pairingLostTitle => 'আপনার ওমির সাথে সংযোগ করা যাচ্ছে না।'; + + @override + String get pairingLostBody => + 'অনুগ্রহ করে আপনার ফোনের ব্লুটুথ সেটিংসে গিয়ে তালিকা থেকে বিদ্যমান Omi-কে সরিয়ে দিন, তারপর ফিরে এসে আবার চেষ্টা করুন।'; + + @override + String get pairingLostButton => 'ব্লুটুথ সেটিংস খুলুন'; } diff --git a/app/lib/l10n/app_localizations_bs.dart b/app/lib/l10n/app_localizations_bs.dart index 889acadc788..44a10716fc2 100644 --- a/app/lib/l10n/app_localizations_bs.dart +++ b/app/lib/l10n/app_localizations_bs.dart @@ -9252,4 +9252,14 @@ class AppLocalizationsBs extends AppLocalizations { @override String get deselectAllTasksMenu => 'Poništi odabir svih'; + + @override + String get pairingLostTitle => 'Ne mogu se povezati s vašim Omi uređajem'; + + @override + String get pairingLostBody => + 'Molimo vas da otvorite Bluetooth postavke na telefonu, uklonite postojeći Omi sa liste, a zatim se vratite i pokušajte ponovo.'; + + @override + String get pairingLostButton => 'Otvori postavke Bluetootha'; } diff --git a/app/lib/l10n/app_localizations_ca.dart b/app/lib/l10n/app_localizations_ca.dart index bd1531a0159..986a63dfc94 100644 --- a/app/lib/l10n/app_localizations_ca.dart +++ b/app/lib/l10n/app_localizations_ca.dart @@ -9282,4 +9282,14 @@ class AppLocalizationsCa extends AppLocalizations { @override String get deselectAllTasksMenu => 'Desselecciona tot'; + + @override + String get pairingLostTitle => 'No em puc connectar al teu Omi'; + + @override + String get pairingLostBody => + 'Obriu la configuració de Bluetooth del telèfon, elimineu l\'Omi existent de la llista i torneu-ho a provar.'; + + @override + String get pairingLostButton => 'Obre la configuració de Bluetooth'; } diff --git a/app/lib/l10n/app_localizations_cs.dart b/app/lib/l10n/app_localizations_cs.dart index 95a458ec0a0..2d04a1f8d7f 100644 --- a/app/lib/l10n/app_localizations_cs.dart +++ b/app/lib/l10n/app_localizations_cs.dart @@ -9224,4 +9224,14 @@ class AppLocalizationsCs extends AppLocalizations { @override String get deselectAllTasksMenu => 'Zrušit výběr všech'; + + @override + String get pairingLostTitle => 'Nelze se připojit k vašemu Omi'; + + @override + String get pairingLostBody => + 'Otevřete prosím nastavení Bluetooth v telefonu, odeberte stávající zařízení Omi ze seznamu a zkuste to znovu.'; + + @override + String get pairingLostButton => 'Otevřít nastavení Bluetooth'; } diff --git a/app/lib/l10n/app_localizations_da.dart b/app/lib/l10n/app_localizations_da.dart index ec2952d27c9..4cdd0f4b663 100644 --- a/app/lib/l10n/app_localizations_da.dart +++ b/app/lib/l10n/app_localizations_da.dart @@ -9214,4 +9214,14 @@ class AppLocalizationsDa extends AppLocalizations { @override String get deselectAllTasksMenu => 'Fravælg alle'; + + @override + String get pairingLostTitle => 'Kan ikke oprette forbindelse til din Omi'; + + @override + String get pairingLostBody => + 'Åbn din telefons Bluetooth-indstillinger, fjern den eksisterende Omi fra listen, og prøv derefter igen.'; + + @override + String get pairingLostButton => 'Åbn Bluetooth-indstillinger'; } diff --git a/app/lib/l10n/app_localizations_de.dart b/app/lib/l10n/app_localizations_de.dart index 5f33f5c5ac3..54976d04941 100644 --- a/app/lib/l10n/app_localizations_de.dart +++ b/app/lib/l10n/app_localizations_de.dart @@ -9305,4 +9305,14 @@ class AppLocalizationsDe extends AppLocalizations { @override String get deselectAllTasksMenu => 'Alle abwählen'; + + @override + String get pairingLostTitle => 'Verbindung zu Ihrem Omi nicht möglich'; + + @override + String get pairingLostBody => + 'Bitte öffnen Sie die Bluetooth-Einstellungen Ihres Telefons, entfernen Sie das vorhandene Omi aus der Liste und versuchen Sie es dann erneut.'; + + @override + String get pairingLostButton => 'Öffnen Sie die Bluetooth-Einstellungen.'; } diff --git a/app/lib/l10n/app_localizations_el.dart b/app/lib/l10n/app_localizations_el.dart index ade037ec801..b11330a51d3 100644 --- a/app/lib/l10n/app_localizations_el.dart +++ b/app/lib/l10n/app_localizations_el.dart @@ -9293,4 +9293,14 @@ class AppLocalizationsEl extends AppLocalizations { @override String get deselectAllTasksMenu => 'Αποεπιλογή όλων'; + + @override + String get pairingLostTitle => 'Δεν είναι δυνατή η σύνδεση με το Omi σας'; + + @override + String get pairingLostBody => + 'Ανοίξτε τις ρυθμίσεις Bluetooth του τηλεφώνου σας, καταργήστε το υπάρχον Omi από τη λίστα και, στη συνέχεια, επιστρέψτε και προσπαθήστε ξανά.'; + + @override + String get pairingLostButton => 'Άνοιγμα ρυθμίσεων Bluetooth'; } diff --git a/app/lib/l10n/app_localizations_en.dart b/app/lib/l10n/app_localizations_en.dart index 39e3c6572a4..589193a2344 100644 --- a/app/lib/l10n/app_localizations_en.dart +++ b/app/lib/l10n/app_localizations_en.dart @@ -9225,4 +9225,14 @@ class AppLocalizationsEn extends AppLocalizations { @override String get deselectAllTasksMenu => 'Deselect all'; + + @override + String get pairingLostTitle => 'Can\'t connect to your Omi'; + + @override + String get pairingLostBody => + 'Please open your phone\'s Bluetooth settings, remove the existing Omi from the list, then come back and try again.'; + + @override + String get pairingLostButton => 'Open Bluetooth Settings'; } diff --git a/app/lib/l10n/app_localizations_es.dart b/app/lib/l10n/app_localizations_es.dart index 2b4bd45be1e..749eca9f1ee 100644 --- a/app/lib/l10n/app_localizations_es.dart +++ b/app/lib/l10n/app_localizations_es.dart @@ -9249,4 +9249,14 @@ class AppLocalizationsEs extends AppLocalizations { @override String get deselectAllTasksMenu => 'Deseleccionar todo'; + + @override + String get pairingLostTitle => 'No puedo conectarme a tu Omi'; + + @override + String get pairingLostBody => + 'Por favor, abre la configuración de Bluetooth de tu teléfono, elimina el dispositivo Omi de la lista y vuelve a intentarlo.'; + + @override + String get pairingLostButton => 'Abrir la configuración de Bluetooth'; } diff --git a/app/lib/l10n/app_localizations_et.dart b/app/lib/l10n/app_localizations_et.dart index 8b8b6da078b..60da1cea255 100644 --- a/app/lib/l10n/app_localizations_et.dart +++ b/app/lib/l10n/app_localizations_et.dart @@ -9225,4 +9225,14 @@ class AppLocalizationsEt extends AppLocalizations { @override String get deselectAllTasksMenu => 'Tühista kõigi valik'; + + @override + String get pairingLostTitle => 'Ei saa teie Omiga ühendust luua'; + + @override + String get pairingLostBody => + 'Palun avage oma telefoni Bluetoothi seaded, eemaldage olemasolev Omi loendist ja proovige uuesti.'; + + @override + String get pairingLostButton => 'Ava Bluetoothi seaded'; } diff --git a/app/lib/l10n/app_localizations_fa.dart b/app/lib/l10n/app_localizations_fa.dart index 8d3912fc8b9..759c83bac25 100644 --- a/app/lib/l10n/app_localizations_fa.dart +++ b/app/lib/l10n/app_localizations_fa.dart @@ -9231,4 +9231,14 @@ class AppLocalizationsFa extends AppLocalizations { @override String get deselectAllTasksMenu => 'لغو انتخاب همه'; + + @override + String get pairingLostTitle => 'نمی‌توان به Omi شما متصل شد'; + + @override + String get pairingLostBody => + 'لطفاً تنظیمات بلوتوث گوشی خود را باز کنید، Omi موجود را از لیست حذف کنید، سپس برگردید و دوباره امتحان کنید.'; + + @override + String get pairingLostButton => 'تنظیمات بلوتوث را باز کنید'; } diff --git a/app/lib/l10n/app_localizations_fi.dart b/app/lib/l10n/app_localizations_fi.dart index d585561732e..2115fcd9fca 100644 --- a/app/lib/l10n/app_localizations_fi.dart +++ b/app/lib/l10n/app_localizations_fi.dart @@ -9227,4 +9227,13 @@ class AppLocalizationsFi extends AppLocalizations { @override String get deselectAllTasksMenu => 'Poista kaikkien valinta'; + + @override + String get pairingLostTitle => 'Ei voida muodostaa yhteyttä Omiin'; + + @override + String get pairingLostBody => 'Avaa puhelimesi Bluetooth-asetukset, poista nykyinen Omi listalta ja yritä uudelleen.'; + + @override + String get pairingLostButton => 'Avaa Bluetooth-asetukset'; } diff --git a/app/lib/l10n/app_localizations_fr.dart b/app/lib/l10n/app_localizations_fr.dart index 74150ec710c..8d1b25f4cd1 100644 --- a/app/lib/l10n/app_localizations_fr.dart +++ b/app/lib/l10n/app_localizations_fr.dart @@ -9311,4 +9311,14 @@ class AppLocalizationsFr extends AppLocalizations { @override String get deselectAllTasksMenu => 'Tout désélectionner'; + + @override + String get pairingLostTitle => 'Impossible de se connecter à votre Omi'; + + @override + String get pairingLostBody => + 'Veuillez ouvrir les paramètres Bluetooth de votre téléphone, supprimer l\'appareil Omi existant de la liste, puis revenir et réessayer.'; + + @override + String get pairingLostButton => 'Ouvrir les paramètres Bluetooth'; } diff --git a/app/lib/l10n/app_localizations_he.dart b/app/lib/l10n/app_localizations_he.dart index f40b80e013a..6dfad6107f7 100644 --- a/app/lib/l10n/app_localizations_he.dart +++ b/app/lib/l10n/app_localizations_he.dart @@ -9156,4 +9156,14 @@ class AppLocalizationsHe extends AppLocalizations { @override String get deselectAllTasksMenu => 'בטל בחירת הכל'; + + @override + String get pairingLostTitle => 'לא ניתן להתחבר לאומי שלך'; + + @override + String get pairingLostBody => + 'אנא פתח את הגדרות ה-Bluetooth של הטלפון שלך, הסר את ה-Omi הקיים מהרשימה, לאחר מכן חזור ונסה שוב.'; + + @override + String get pairingLostButton => 'פתח את הגדרות בלוטות\''; } diff --git a/app/lib/l10n/app_localizations_hi.dart b/app/lib/l10n/app_localizations_hi.dart index f80d060e017..32e8ee7767f 100644 --- a/app/lib/l10n/app_localizations_hi.dart +++ b/app/lib/l10n/app_localizations_hi.dart @@ -9208,4 +9208,14 @@ class AppLocalizationsHi extends AppLocalizations { @override String get deselectAllTasksMenu => 'सभी का चयन हटाएं'; + + @override + String get pairingLostTitle => 'आपके ओमी से कनेक्ट नहीं हो पा रहा है'; + + @override + String get pairingLostBody => + 'कृपया अपने फोन की ब्लूटूथ सेटिंग खोलें, सूची से मौजूदा ओमी को हटा दें, फिर वापस आकर दोबारा प्रयास करें।'; + + @override + String get pairingLostButton => 'ब्लूटूथ सेटिंग्स खोलें'; } diff --git a/app/lib/l10n/app_localizations_hr.dart b/app/lib/l10n/app_localizations_hr.dart index e4aa12cdf16..dd2b5fd6c1c 100644 --- a/app/lib/l10n/app_localizations_hr.dart +++ b/app/lib/l10n/app_localizations_hr.dart @@ -9258,4 +9258,14 @@ class AppLocalizationsHr extends AppLocalizations { @override String get deselectAllTasksMenu => 'Poništi odabir svih'; + + @override + String get pairingLostTitle => 'Ne mogu se povezati s vašim Omi uređajem'; + + @override + String get pairingLostBody => + 'Otvorite postavke Bluetootha na telefonu, uklonite postojeći Omi s popisa, a zatim se vratite i pokušajte ponovno.'; + + @override + String get pairingLostButton => 'Otvori postavke Bluetootha'; } diff --git a/app/lib/l10n/app_localizations_hu.dart b/app/lib/l10n/app_localizations_hu.dart index 65927480d3d..f775d110ead 100644 --- a/app/lib/l10n/app_localizations_hu.dart +++ b/app/lib/l10n/app_localizations_hu.dart @@ -9267,4 +9267,14 @@ class AppLocalizationsHu extends AppLocalizations { @override String get deselectAllTasksMenu => 'Összes kijelölés törlése'; + + @override + String get pairingLostTitle => 'Nem tudok csatlakozni az Omi-hoz'; + + @override + String get pairingLostBody => + 'Kérjük, nyissa meg a telefon Bluetooth-beállításait, távolítsa el a meglévő Omi-t a listából, majd próbálja újra.'; + + @override + String get pairingLostButton => 'Nyissa meg a Bluetooth-beállításokat'; } diff --git a/app/lib/l10n/app_localizations_id.dart b/app/lib/l10n/app_localizations_id.dart index 43d9a074480..593c94c4837 100644 --- a/app/lib/l10n/app_localizations_id.dart +++ b/app/lib/l10n/app_localizations_id.dart @@ -9238,4 +9238,14 @@ class AppLocalizationsId extends AppLocalizations { @override String get deselectAllTasksMenu => 'Batalkan pilihan semua'; + + @override + String get pairingLostTitle => 'Tidak dapat terhubung ke Omi Anda'; + + @override + String get pairingLostBody => + 'Silakan buka pengaturan Bluetooth ponsel Anda, hapus Omi yang ada dari daftar, lalu kembali dan coba lagi.'; + + @override + String get pairingLostButton => 'Buka Pengaturan Bluetooth'; } diff --git a/app/lib/l10n/app_localizations_it.dart b/app/lib/l10n/app_localizations_it.dart index ed655b64da3..00bc4e3b91d 100644 --- a/app/lib/l10n/app_localizations_it.dart +++ b/app/lib/l10n/app_localizations_it.dart @@ -9283,4 +9283,13 @@ class AppLocalizationsIt extends AppLocalizations { @override String get deselectAllTasksMenu => 'Deseleziona tutto'; + + @override + String get pairingLostTitle => 'Impossibile connettersi al tuo Omi'; + + @override + String get pairingLostBody => 'Apri le impostazioni Bluetooth del tuo telefono, rimuovi Omi dall\'elenco e riprova.'; + + @override + String get pairingLostButton => 'Apri le impostazioni Bluetooth'; } diff --git a/app/lib/l10n/app_localizations_ja.dart b/app/lib/l10n/app_localizations_ja.dart index b27434a8e38..6e44ccb8f9b 100644 --- a/app/lib/l10n/app_localizations_ja.dart +++ b/app/lib/l10n/app_localizations_ja.dart @@ -9079,4 +9079,13 @@ class AppLocalizationsJa extends AppLocalizations { @override String get deselectAllTasksMenu => 'すべて選択解除'; + + @override + String get pairingLostTitle => 'Omiに接続できません'; + + @override + String get pairingLostBody => 'スマートフォンのBluetooth設定を開き、リストから既存のOmiを削除してから、もう一度お試しください。'; + + @override + String get pairingLostButton => 'Bluetooth設定を開く'; } diff --git a/app/lib/l10n/app_localizations_kn.dart b/app/lib/l10n/app_localizations_kn.dart index 231ad69aeda..c666f081b73 100644 --- a/app/lib/l10n/app_localizations_kn.dart +++ b/app/lib/l10n/app_localizations_kn.dart @@ -9260,4 +9260,14 @@ class AppLocalizationsKn extends AppLocalizations { @override String get deselectAllTasksMenu => 'ಎಲ್ಲವನ್ನೂ ಆಯ್ಕೆ ರದ್ದು ಮಾಡಿ'; + + @override + String get pairingLostTitle => 'ನಿಮ್ಮ Omi ಗೆ ಸಂಪರ್ಕಿಸಲು ಸಾಧ್ಯವಾಗುತ್ತಿಲ್ಲ.'; + + @override + String get pairingLostBody => + 'ದಯವಿಟ್ಟು ನಿಮ್ಮ ಫೋನ್‌ನ ಬ್ಲೂಟೂತ್ ಸೆಟ್ಟಿಂಗ್‌ಗಳನ್ನು ತೆರೆಯಿರಿ, ಪಟ್ಟಿಯಿಂದ ಅಸ್ತಿತ್ವದಲ್ಲಿರುವ ಓಮಿಯನ್ನು ತೆಗೆದುಹಾಕಿ, ನಂತರ ಹಿಂತಿರುಗಿ ಮತ್ತೆ ಪ್ರಯತ್ನಿಸಿ.'; + + @override + String get pairingLostButton => 'ಬ್ಲೂಟೂತ್ ಸೆಟ್ಟಿಂಗ್‌ಗಳನ್ನು ತೆರೆಯಿರಿ'; } diff --git a/app/lib/l10n/app_localizations_ko.dart b/app/lib/l10n/app_localizations_ko.dart index c276ce418c9..980888dce1a 100644 --- a/app/lib/l10n/app_localizations_ko.dart +++ b/app/lib/l10n/app_localizations_ko.dart @@ -9080,4 +9080,13 @@ class AppLocalizationsKo extends AppLocalizations { @override String get deselectAllTasksMenu => '모두 선택 해제'; + + @override + String get pairingLostTitle => 'Omi에 연결할 수 없습니다'; + + @override + String get pairingLostBody => '휴대폰의 블루투스 설정에서 기존 Omi를 목록에서 제거한 후 다시 시도해 주세요.'; + + @override + String get pairingLostButton => '블루투스 설정 열기'; } diff --git a/app/lib/l10n/app_localizations_lt.dart b/app/lib/l10n/app_localizations_lt.dart index 99a3bedff47..ac1b84165fc 100644 --- a/app/lib/l10n/app_localizations_lt.dart +++ b/app/lib/l10n/app_localizations_lt.dart @@ -9237,4 +9237,14 @@ class AppLocalizationsLt extends AppLocalizations { @override String get deselectAllTasksMenu => 'Atžymėti viską'; + + @override + String get pairingLostTitle => 'Nepavyksta prisijungti prie jūsų „Omi“'; + + @override + String get pairingLostBody => + 'Atidarykite telefono „Bluetooth“ nustatymus, pašalinkite esamą „Omi“ iš sąrašo ir bandykite dar kartą.'; + + @override + String get pairingLostButton => 'Atidaryti „Bluetooth“ nustatymus'; } diff --git a/app/lib/l10n/app_localizations_lv.dart b/app/lib/l10n/app_localizations_lv.dart index aefcf5a4521..26a370ff2c9 100644 --- a/app/lib/l10n/app_localizations_lv.dart +++ b/app/lib/l10n/app_localizations_lv.dart @@ -9246,4 +9246,14 @@ class AppLocalizationsLv extends AppLocalizations { @override String get deselectAllTasksMenu => 'Noņemt visu atlasi'; + + @override + String get pairingLostTitle => 'Nevar izveidot savienojumu ar jūsu Omi'; + + @override + String get pairingLostBody => + 'Lūdzu, atveriet tālruņa Bluetooth iestatījumus, noņemiet esošo Omi no saraksta un pēc tam atgriezieties un mēģiniet vēlreiz.'; + + @override + String get pairingLostButton => 'Atvērt Bluetooth iestatījumus'; } diff --git a/app/lib/l10n/app_localizations_mk.dart b/app/lib/l10n/app_localizations_mk.dart index bb73233281b..55c1faf4552 100644 --- a/app/lib/l10n/app_localizations_mk.dart +++ b/app/lib/l10n/app_localizations_mk.dart @@ -9277,4 +9277,14 @@ class AppLocalizationsMk extends AppLocalizations { @override String get deselectAllTasksMenu => 'Одселектирај ги сите'; + + @override + String get pairingLostTitle => 'Не може да се поврзе со вашиот Omi'; + + @override + String get pairingLostBody => + 'Отворете ги поставките за Bluetooth на вашиот телефон, отстранете го постоечкиот Omi од листата, а потоа вратете се и обидете се повторно.'; + + @override + String get pairingLostButton => 'Отвори поставки за Bluetooth'; } diff --git a/app/lib/l10n/app_localizations_mr.dart b/app/lib/l10n/app_localizations_mr.dart index edbf47fe68a..1657d4e7420 100644 --- a/app/lib/l10n/app_localizations_mr.dart +++ b/app/lib/l10n/app_localizations_mr.dart @@ -9239,4 +9239,14 @@ class AppLocalizationsMr extends AppLocalizations { @override String get deselectAllTasksMenu => 'सर्वांची निवड रद्द करा'; + + @override + String get pairingLostTitle => 'तुमच्या ओमीशी कनेक्ट होऊ शकत नाही'; + + @override + String get pairingLostBody => + 'कृपया तुमच्या फोनचे ब्लूटूथ सेटिंग्ज उघडा, यादीतून असलेले \'Omi\' काढून टाका, त्यानंतर परत येऊन पुन्हा प्रयत्न करा.'; + + @override + String get pairingLostButton => 'ब्लूटूथ सेटिंग्ज उघडा'; } diff --git a/app/lib/l10n/app_localizations_ms.dart b/app/lib/l10n/app_localizations_ms.dart index a6e1e16ddfc..a23d29e1910 100644 --- a/app/lib/l10n/app_localizations_ms.dart +++ b/app/lib/l10n/app_localizations_ms.dart @@ -9252,4 +9252,14 @@ class AppLocalizationsMs extends AppLocalizations { @override String get deselectAllTasksMenu => 'Nyahpilih semua'; + + @override + String get pairingLostTitle => 'Tidak dapat bersambung ke Omi anda'; + + @override + String get pairingLostBody => + 'Sila buka tetapan Bluetooth telefon anda, alih keluar Omi sedia ada daripada senarai, kemudian kembali dan cuba lagi.'; + + @override + String get pairingLostButton => 'Buka Tetapan Bluetooth'; } diff --git a/app/lib/l10n/app_localizations_nl.dart b/app/lib/l10n/app_localizations_nl.dart index e1d33a32e8a..32f28aca173 100644 --- a/app/lib/l10n/app_localizations_nl.dart +++ b/app/lib/l10n/app_localizations_nl.dart @@ -9256,4 +9256,14 @@ class AppLocalizationsNl extends AppLocalizations { @override String get deselectAllTasksMenu => 'Alles deselecteren'; + + @override + String get pairingLostTitle => 'Kan geen verbinding maken met uw Omi'; + + @override + String get pairingLostBody => + 'Open de Bluetooth-instellingen van je telefoon, verwijder de Omi uit de lijst en probeer het daarna opnieuw.'; + + @override + String get pairingLostButton => 'Open de Bluetooth-instellingen'; } diff --git a/app/lib/l10n/app_localizations_no.dart b/app/lib/l10n/app_localizations_no.dart index fcbea2049f2..cf2f2aac040 100644 --- a/app/lib/l10n/app_localizations_no.dart +++ b/app/lib/l10n/app_localizations_no.dart @@ -9224,4 +9224,14 @@ class AppLocalizationsNo extends AppLocalizations { @override String get deselectAllTasksMenu => 'Fjern alle valg'; + + @override + String get pairingLostTitle => 'Kan ikke koble til Omi-en din'; + + @override + String get pairingLostBody => + 'Åpne telefonens Bluetooth-innstillinger, fjern den eksisterende Omi-en fra listen, og prøv deretter på nytt.'; + + @override + String get pairingLostButton => 'Åpne Bluetooth-innstillingene'; } diff --git a/app/lib/l10n/app_localizations_pl.dart b/app/lib/l10n/app_localizations_pl.dart index 16e4a606d4f..7f7c4f6bb04 100644 --- a/app/lib/l10n/app_localizations_pl.dart +++ b/app/lib/l10n/app_localizations_pl.dart @@ -9248,4 +9248,14 @@ class AppLocalizationsPl extends AppLocalizations { @override String get deselectAllTasksMenu => 'Odznacz wszystkie'; + + @override + String get pairingLostTitle => 'Nie można połączyć się z Omi'; + + @override + String get pairingLostBody => + 'Otwórz ustawienia Bluetooth w telefonie, usuń istniejące urządzenie Omi z listy, a następnie wróć i spróbuj ponownie.'; + + @override + String get pairingLostButton => 'Otwórz ustawienia Bluetooth'; } diff --git a/app/lib/l10n/app_localizations_pt.dart b/app/lib/l10n/app_localizations_pt.dart index 1a813616d5a..09d6dd3bc17 100644 --- a/app/lib/l10n/app_localizations_pt.dart +++ b/app/lib/l10n/app_localizations_pt.dart @@ -9232,4 +9232,14 @@ class AppLocalizationsPt extends AppLocalizations { @override String get deselectAllTasksMenu => 'Desmarcar todos'; + + @override + String get pairingLostTitle => 'Não consigo conectar ao seu Omi.'; + + @override + String get pairingLostBody => + 'Por favor, abra as configurações de Bluetooth do seu telefone, remova o dispositivo Omi da lista e tente novamente.'; + + @override + String get pairingLostButton => 'Abra as configurações de Bluetooth.'; } diff --git a/app/lib/l10n/app_localizations_ro.dart b/app/lib/l10n/app_localizations_ro.dart index bcb73488c03..af52c2e4107 100644 --- a/app/lib/l10n/app_localizations_ro.dart +++ b/app/lib/l10n/app_localizations_ro.dart @@ -9271,4 +9271,14 @@ class AppLocalizationsRo extends AppLocalizations { @override String get deselectAllTasksMenu => 'Deselectați tot'; + + @override + String get pairingLostTitle => 'Nu mă pot conecta la Omi-ul tău'; + + @override + String get pairingLostBody => + 'Deschideți setările Bluetooth ale telefonului, eliminați dispozitivul Omi existent din listă, apoi reveniți și încercați din nou.'; + + @override + String get pairingLostButton => 'Deschideți setările Bluetooth'; } diff --git a/app/lib/l10n/app_localizations_ru.dart b/app/lib/l10n/app_localizations_ru.dart index b0c63e27e75..7a93b93f67f 100644 --- a/app/lib/l10n/app_localizations_ru.dart +++ b/app/lib/l10n/app_localizations_ru.dart @@ -9257,4 +9257,14 @@ class AppLocalizationsRu extends AppLocalizations { @override String get deselectAllTasksMenu => 'Снять выделение со всех'; + + @override + String get pairingLostTitle => 'Не удаётся подключиться к Omi.'; + + @override + String get pairingLostBody => + 'Пожалуйста, откройте настройки Bluetooth на своем телефоне, удалите существующее приложение Omi из списка, затем вернитесь и попробуйте снова.'; + + @override + String get pairingLostButton => 'Откройте настройки Bluetooth'; } diff --git a/app/lib/l10n/app_localizations_sk.dart b/app/lib/l10n/app_localizations_sk.dart index 1a9904d9488..122ec73bd90 100644 --- a/app/lib/l10n/app_localizations_sk.dart +++ b/app/lib/l10n/app_localizations_sk.dart @@ -9216,4 +9216,14 @@ class AppLocalizationsSk extends AppLocalizations { @override String get deselectAllTasksMenu => 'Zrušiť výber všetkých'; + + @override + String get pairingLostTitle => 'Nedá sa pripojiť k vášmu Omi'; + + @override + String get pairingLostBody => + 'Otvorte nastavenia Bluetooth v telefóne, odstráňte existujúce zariadenie Omi zo zoznamu a potom sa vráťte a skúste to znova.'; + + @override + String get pairingLostButton => 'Otvoriť nastavenia Bluetooth'; } diff --git a/app/lib/l10n/app_localizations_sl.dart b/app/lib/l10n/app_localizations_sl.dart index b9f889e6dd9..700fba9217c 100644 --- a/app/lib/l10n/app_localizations_sl.dart +++ b/app/lib/l10n/app_localizations_sl.dart @@ -9252,4 +9252,14 @@ class AppLocalizationsSl extends AppLocalizations { @override String get deselectAllTasksMenu => 'Prekliči izbor vseh'; + + @override + String get pairingLostTitle => 'Ni se mogoče povezati z vašim Omijem'; + + @override + String get pairingLostBody => + 'Odprite nastavitve Bluetooth v telefonu, odstranite obstoječi Omi s seznama in poskusite znova.'; + + @override + String get pairingLostButton => 'Odprite nastavitve Bluetootha'; } diff --git a/app/lib/l10n/app_localizations_sr.dart b/app/lib/l10n/app_localizations_sr.dart index 2ddd31026ad..7c21b648601 100644 --- a/app/lib/l10n/app_localizations_sr.dart +++ b/app/lib/l10n/app_localizations_sr.dart @@ -9241,4 +9241,14 @@ class AppLocalizationsSr extends AppLocalizations { @override String get deselectAllTasksMenu => 'Поништи избор свих'; + + @override + String get pairingLostTitle => 'Не могу да се повежем са вашим Оми уређајем'; + + @override + String get pairingLostBody => + 'Отворите подешавања Bluetooth-а на телефону, уклоните постојећи Omi са листе, а затим се вратите и покушајте поново.'; + + @override + String get pairingLostButton => 'Отворите подешавања Bluetooth-а'; } diff --git a/app/lib/l10n/app_localizations_sv.dart b/app/lib/l10n/app_localizations_sv.dart index e709651aba9..4c1ff7fa340 100644 --- a/app/lib/l10n/app_localizations_sv.dart +++ b/app/lib/l10n/app_localizations_sv.dart @@ -9232,4 +9232,14 @@ class AppLocalizationsSv extends AppLocalizations { @override String get deselectAllTasksMenu => 'Avmarkera alla'; + + @override + String get pairingLostTitle => 'Kan inte ansluta till din Omi'; + + @override + String get pairingLostBody => + 'Öppna telefonens Bluetooth-inställningar, ta bort den befintliga Omi från listan och försök sedan igen.'; + + @override + String get pairingLostButton => 'Öppna Bluetooth-inställningar'; } diff --git a/app/lib/l10n/app_localizations_ta.dart b/app/lib/l10n/app_localizations_ta.dart index 6a4c68ad832..3da3156b273 100644 --- a/app/lib/l10n/app_localizations_ta.dart +++ b/app/lib/l10n/app_localizations_ta.dart @@ -9297,4 +9297,14 @@ class AppLocalizationsTa extends AppLocalizations { @override String get deselectAllTasksMenu => 'அனைத்தையும் தேர்வு நீக்கு'; + + @override + String get pairingLostTitle => 'உங்கள் ஓமியுடன் இணைக்க முடியவில்லை'; + + @override + String get pairingLostBody => + 'தயவுசெய்து உங்கள் தொலைபேசியின் புளூடூத் அமைப்புகளைத் திறந்து, பட்டியலில் இருந்து ஏற்கனவே உள்ள ஓமியை அகற்றிவிட்டு, மீண்டும் வந்து முயற்சிக்கவும்.'; + + @override + String get pairingLostButton => 'புளூடூத் அமைப்புகளைத் திறக்கவும்'; } diff --git a/app/lib/l10n/app_localizations_te.dart b/app/lib/l10n/app_localizations_te.dart index 2241521448b..652b2e5898e 100644 --- a/app/lib/l10n/app_localizations_te.dart +++ b/app/lib/l10n/app_localizations_te.dart @@ -9279,4 +9279,14 @@ class AppLocalizationsTe extends AppLocalizations { @override String get deselectAllTasksMenu => 'అన్ని ఎంపికలు తొలగించు'; + + @override + String get pairingLostTitle => 'మీ Omiకి కనెక్ట్ అవ్వలేకపోతున్నాను'; + + @override + String get pairingLostBody => + 'దయచేసి మీ ఫోన్ బ్లూటూత్ సెట్టింగ్‌లను తెరిచి, జాబితా నుండి ఇప్పటికే ఉన్న Omiని తీసివేసి, ఆ తర్వాత తిరిగి వచ్చి మళ్లీ ప్రయత్నించండి.'; + + @override + String get pairingLostButton => 'బ్లూటూత్ సెట్టింగ్‌లను తెరవండి'; } diff --git a/app/lib/l10n/app_localizations_th.dart b/app/lib/l10n/app_localizations_th.dart index 148a3da85c5..b861e3168c8 100644 --- a/app/lib/l10n/app_localizations_th.dart +++ b/app/lib/l10n/app_localizations_th.dart @@ -9182,4 +9182,14 @@ class AppLocalizationsTh extends AppLocalizations { @override String get deselectAllTasksMenu => 'ยกเลิกเลือกทั้งหมด'; + + @override + String get pairingLostTitle => 'ไม่สามารถเชื่อมต่อกับ Omi ของคุณได้'; + + @override + String get pairingLostBody => + 'โปรดเปิดการตั้งค่าบลูทูธในโทรศัพท์ของคุณ ลบแอป Omi ที่มีอยู่จากรายการ แล้วลองใหม่อีกครั้ง'; + + @override + String get pairingLostButton => 'เปิดการตั้งค่าบลูทูธ'; } diff --git a/app/lib/l10n/app_localizations_tl.dart b/app/lib/l10n/app_localizations_tl.dart index 9d90da4ca88..d9e8e6d7ad8 100644 --- a/app/lib/l10n/app_localizations_tl.dart +++ b/app/lib/l10n/app_localizations_tl.dart @@ -9313,4 +9313,14 @@ class AppLocalizationsTl extends AppLocalizations { @override String get deselectAllTasksMenu => 'I-deselect lahat'; + + @override + String get pairingLostTitle => 'Hindi makakonekta sa iyong Omi'; + + @override + String get pairingLostBody => + 'Pakibuksan ang mga setting ng Bluetooth ng iyong telepono, alisin ang kasalukuyang Omi sa listahan, pagkatapos ay bumalik at subukang muli.'; + + @override + String get pairingLostButton => 'Buksan ang Mga Setting ng Bluetooth'; } diff --git a/app/lib/l10n/app_localizations_tr.dart b/app/lib/l10n/app_localizations_tr.dart index 6b5faa80d64..381f959f1af 100644 --- a/app/lib/l10n/app_localizations_tr.dart +++ b/app/lib/l10n/app_localizations_tr.dart @@ -9241,4 +9241,14 @@ class AppLocalizationsTr extends AppLocalizations { @override String get deselectAllTasksMenu => 'Tümünün seçimini kaldır'; + + @override + String get pairingLostTitle => 'Omi cihazınıza bağlanamıyorum.'; + + @override + String get pairingLostBody => + 'Lütfen telefonunuzun Bluetooth ayarlarını açın, mevcut Omi uygulamasını listeden kaldırın, ardından geri dönüp tekrar deneyin.'; + + @override + String get pairingLostButton => 'Bluetooth Ayarlarını Açın'; } diff --git a/app/lib/l10n/app_localizations_uk.dart b/app/lib/l10n/app_localizations_uk.dart index 3d3c67e02a4..1d7484d079d 100644 --- a/app/lib/l10n/app_localizations_uk.dart +++ b/app/lib/l10n/app_localizations_uk.dart @@ -9242,4 +9242,14 @@ class AppLocalizationsUk extends AppLocalizations { @override String get deselectAllTasksMenu => 'Зняти виділення з усіх'; + + @override + String get pairingLostTitle => 'Не вдається підключитися до вашого Omi'; + + @override + String get pairingLostBody => + 'Будь ласка, відкрийте налаштування Bluetooth вашого телефону, видаліть існуючий Omi зі списку, а потім поверніться та спробуйте ще раз.'; + + @override + String get pairingLostButton => 'Відкрийте налаштування Bluetooth'; } diff --git a/app/lib/l10n/app_localizations_ur.dart b/app/lib/l10n/app_localizations_ur.dart index 65f498d8fc7..6944b15eb4f 100644 --- a/app/lib/l10n/app_localizations_ur.dart +++ b/app/lib/l10n/app_localizations_ur.dart @@ -9245,4 +9245,14 @@ class AppLocalizationsUr extends AppLocalizations { @override String get deselectAllTasksMenu => 'تمام کا انتخاب ختم کریں'; + + @override + String get pairingLostTitle => 'آپ کے Omi سے رابطہ نہیں ہو سکتا'; + + @override + String get pairingLostBody => + 'براہ کرم اپنے فون کی بلوٹوتھ سیٹنگز کھولیں، فہرست سے موجودہ Omi کو ہٹائیں، پھر واپس آئیں اور دوبارہ کوشش کریں۔'; + + @override + String get pairingLostButton => 'بلوٹوتھ کی ترتیبات کھولیں۔'; } diff --git a/app/lib/l10n/app_localizations_vi.dart b/app/lib/l10n/app_localizations_vi.dart index 33339067136..0ec70243513 100644 --- a/app/lib/l10n/app_localizations_vi.dart +++ b/app/lib/l10n/app_localizations_vi.dart @@ -9228,4 +9228,14 @@ class AppLocalizationsVi extends AppLocalizations { @override String get deselectAllTasksMenu => 'Bỏ chọn tất cả'; + + @override + String get pairingLostTitle => 'Không thể kết nối với Omi của bạn'; + + @override + String get pairingLostBody => + 'Vui lòng mở cài đặt Bluetooth trên điện thoại, xóa thiết bị Omi hiện có khỏi danh sách, sau đó quay lại và thử lại.'; + + @override + String get pairingLostButton => 'Mở cài đặt Bluetooth'; } diff --git a/app/lib/l10n/app_localizations_zh.dart b/app/lib/l10n/app_localizations_zh.dart index e2ddb5dc87e..2179d736df5 100644 --- a/app/lib/l10n/app_localizations_zh.dart +++ b/app/lib/l10n/app_localizations_zh.dart @@ -9065,4 +9065,13 @@ class AppLocalizationsZh extends AppLocalizations { @override String get deselectAllTasksMenu => '取消全选'; + + @override + String get pairingLostTitle => '无法连接到您的 Omi'; + + @override + String get pairingLostBody => '请打开手机的蓝牙设置,从列表中删除现有的 Omi,然后回来重试。'; + + @override + String get pairingLostButton => '打开蓝牙设置'; } diff --git a/app/lib/l10n/app_lt.arb b/app/lib/l10n/app_lt.arb index 13cd7ca1008..d4bc99e8811 100644 --- a/app/lib/l10n/app_lt.arb +++ b/app/lib/l10n/app_lt.arb @@ -3013,5 +3013,8 @@ "selectAllTasksMenu": "Pasirinkti viską", "showCompletedTasks": "Rodyti užbaigtas", "startCallRecording": "Pradėti skambučio įrašymą", - "startVoiceRecording": "Pradėti balso įrašymą" + "startVoiceRecording": "Pradėti balso įrašymą", + "pairingLostTitle": "Nepavyksta prisijungti prie jūsų „Omi“", + "pairingLostBody": "Atidarykite telefono „Bluetooth“ nustatymus, pašalinkite esamą „Omi“ iš sąrašo ir bandykite dar kartą.", + "pairingLostButton": "Atidaryti „Bluetooth“ nustatymus" } diff --git a/app/lib/l10n/app_lv.arb b/app/lib/l10n/app_lv.arb index 8661fce140a..33a9523389c 100644 --- a/app/lib/l10n/app_lv.arb +++ b/app/lib/l10n/app_lv.arb @@ -3013,5 +3013,8 @@ "selectAllTasksMenu": "Atlasīt visus", "showCompletedTasks": "Rādīt pabeigtās", "startCallRecording": "Sākt zvana ierakstīšanu", - "startVoiceRecording": "Sākt balss ierakstīšanu" + "startVoiceRecording": "Sākt balss ierakstīšanu", + "pairingLostTitle": "Nevar izveidot savienojumu ar jūsu Omi", + "pairingLostBody": "Lūdzu, atveriet tālruņa Bluetooth iestatījumus, noņemiet esošo Omi no saraksta un pēc tam atgriezieties un mēģiniet vēlreiz.", + "pairingLostButton": "Atvērt Bluetooth iestatījumus" } diff --git a/app/lib/l10n/app_mk.arb b/app/lib/l10n/app_mk.arb index 8914b8aef5c..c35970b246b 100644 --- a/app/lib/l10n/app_mk.arb +++ b/app/lib/l10n/app_mk.arb @@ -10721,5 +10721,8 @@ "selectAllTasksMenu": "Избери ги сите", "showCompletedTasks": "Прикажи завршени", "startCallRecording": "Започни снимање повик", - "startVoiceRecording": "Започни гласовно снимање" + "startVoiceRecording": "Започни гласовно снимање", + "pairingLostTitle": "Не може да се поврзе со вашиот Omi", + "pairingLostBody": "Отворете ги поставките за Bluetooth на вашиот телефон, отстранете го постоечкиот Omi од листата, а потоа вратете се и обидете се повторно.", + "pairingLostButton": "Отвори поставки за Bluetooth" } diff --git a/app/lib/l10n/app_mr.arb b/app/lib/l10n/app_mr.arb index a14b21e8451..d1030aea8ec 100644 --- a/app/lib/l10n/app_mr.arb +++ b/app/lib/l10n/app_mr.arb @@ -10721,5 +10721,8 @@ "selectAllTasksMenu": "सर्व निवडा", "showCompletedTasks": "पूर्ण झालेले दाखवा", "startCallRecording": "कॉल रेकॉर्डिंग सुरू करा", - "startVoiceRecording": "व्हॉइस रेकॉर्डिंग सुरू करा" + "startVoiceRecording": "व्हॉइस रेकॉर्डिंग सुरू करा", + "pairingLostTitle": "तुमच्या ओमीशी कनेक्ट होऊ शकत नाही", + "pairingLostBody": "कृपया तुमच्या फोनचे ब्लूटूथ सेटिंग्ज उघडा, यादीतून असलेले 'Omi' काढून टाका, त्यानंतर परत येऊन पुन्हा प्रयत्न करा.", + "pairingLostButton": "ब्लूटूथ सेटिंग्ज उघडा" } diff --git a/app/lib/l10n/app_ms.arb b/app/lib/l10n/app_ms.arb index b1f9fa4b6d3..9f173672b4a 100644 --- a/app/lib/l10n/app_ms.arb +++ b/app/lib/l10n/app_ms.arb @@ -3013,5 +3013,8 @@ "selectAllTasksMenu": "Pilih semua", "showCompletedTasks": "Tunjukkan selesai", "startCallRecording": "Mula rakaman panggilan", - "startVoiceRecording": "Mula rakaman suara" + "startVoiceRecording": "Mula rakaman suara", + "pairingLostTitle": "Tidak dapat bersambung ke Omi anda", + "pairingLostBody": "Sila buka tetapan Bluetooth telefon anda, alih keluar Omi sedia ada daripada senarai, kemudian kembali dan cuba lagi.", + "pairingLostButton": "Buka Tetapan Bluetooth" } diff --git a/app/lib/l10n/app_nl.arb b/app/lib/l10n/app_nl.arb index aea2249cec1..be1e4acaa07 100644 --- a/app/lib/l10n/app_nl.arb +++ b/app/lib/l10n/app_nl.arb @@ -3013,5 +3013,8 @@ "selectAllTasksMenu": "Alles selecteren", "showCompletedTasks": "Voltooide tonen", "startCallRecording": "Gespreksopname starten", - "startVoiceRecording": "Spraakopname starten" + "startVoiceRecording": "Spraakopname starten", + "pairingLostTitle": "Kan geen verbinding maken met uw Omi", + "pairingLostBody": "Open de Bluetooth-instellingen van je telefoon, verwijder de Omi uit de lijst en probeer het daarna opnieuw.", + "pairingLostButton": "Open de Bluetooth-instellingen" } diff --git a/app/lib/l10n/app_no.arb b/app/lib/l10n/app_no.arb index 8229113d3de..d3260bd557e 100644 --- a/app/lib/l10n/app_no.arb +++ b/app/lib/l10n/app_no.arb @@ -3013,5 +3013,8 @@ "selectAllTasksMenu": "Velg alle", "showCompletedTasks": "Vis fullførte", "startCallRecording": "Start samtaleopptak", - "startVoiceRecording": "Start stemmeopptak" + "startVoiceRecording": "Start stemmeopptak", + "pairingLostTitle": "Kan ikke koble til Omi-en din", + "pairingLostBody": "Åpne telefonens Bluetooth-innstillinger, fjern den eksisterende Omi-en fra listen, og prøv deretter på nytt.", + "pairingLostButton": "Åpne Bluetooth-innstillingene" } diff --git a/app/lib/l10n/app_pl.arb b/app/lib/l10n/app_pl.arb index 4db6759af1d..7bdf69050f0 100644 --- a/app/lib/l10n/app_pl.arb +++ b/app/lib/l10n/app_pl.arb @@ -3048,5 +3048,8 @@ "selectAllTasksMenu": "Zaznacz wszystkie", "showCompletedTasks": "Pokaż ukończone", "startCallRecording": "Rozpocznij nagrywanie rozmowy", - "startVoiceRecording": "Rozpocznij nagrywanie głosu" + "startVoiceRecording": "Rozpocznij nagrywanie głosu", + "pairingLostTitle": "Nie można połączyć się z Omi", + "pairingLostBody": "Otwórz ustawienia Bluetooth w telefonie, usuń istniejące urządzenie Omi z listy, a następnie wróć i spróbuj ponownie.", + "pairingLostButton": "Otwórz ustawienia Bluetooth" } diff --git a/app/lib/l10n/app_pt.arb b/app/lib/l10n/app_pt.arb index c3914b1db49..642faf1f643 100644 --- a/app/lib/l10n/app_pt.arb +++ b/app/lib/l10n/app_pt.arb @@ -3049,5 +3049,8 @@ "selectAllTasksMenu": "Selecionar todos", "showCompletedTasks": "Mostrar concluídas", "startCallRecording": "Iniciar gravação de chamada", - "startVoiceRecording": "Iniciar gravação de voz" + "startVoiceRecording": "Iniciar gravação de voz", + "pairingLostTitle": "Não consigo conectar ao seu Omi.", + "pairingLostBody": "Por favor, abra as configurações de Bluetooth do seu telefone, remova o dispositivo Omi da lista e tente novamente.", + "pairingLostButton": "Abra as configurações de Bluetooth." } diff --git a/app/lib/l10n/app_ro.arb b/app/lib/l10n/app_ro.arb index d0b07e9dacc..4d8f4c432c4 100644 --- a/app/lib/l10n/app_ro.arb +++ b/app/lib/l10n/app_ro.arb @@ -3013,5 +3013,8 @@ "selectAllTasksMenu": "Selectați tot", "showCompletedTasks": "Afișați finalizate", "startCallRecording": "Porniți înregistrarea apelului", - "startVoiceRecording": "Porniți înregistrarea vocală" + "startVoiceRecording": "Porniți înregistrarea vocală", + "pairingLostTitle": "Nu mă pot conecta la Omi-ul tău", + "pairingLostBody": "Deschideți setările Bluetooth ale telefonului, eliminați dispozitivul Omi existent din listă, apoi reveniți și încercați din nou.", + "pairingLostButton": "Deschideți setările Bluetooth" } diff --git a/app/lib/l10n/app_ru.arb b/app/lib/l10n/app_ru.arb index 37cedc8d100..1524b0f766a 100644 --- a/app/lib/l10n/app_ru.arb +++ b/app/lib/l10n/app_ru.arb @@ -3048,5 +3048,8 @@ "selectAllTasksMenu": "Выбрать все", "showCompletedTasks": "Показать завершённые", "startCallRecording": "Начать запись звонка", - "startVoiceRecording": "Начать голосовую запись" + "startVoiceRecording": "Начать голосовую запись", + "pairingLostTitle": "Не удаётся подключиться к Omi.", + "pairingLostBody": "Пожалуйста, откройте настройки Bluetooth на своем телефоне, удалите существующее приложение Omi из списка, затем вернитесь и попробуйте снова.", + "pairingLostButton": "Откройте настройки Bluetooth" } diff --git a/app/lib/l10n/app_sk.arb b/app/lib/l10n/app_sk.arb index 9d2f9d36044..f23617a716e 100644 --- a/app/lib/l10n/app_sk.arb +++ b/app/lib/l10n/app_sk.arb @@ -3018,5 +3018,8 @@ "selectAllTasksMenu": "Vybrať všetko", "showCompletedTasks": "Zobraziť dokončené", "startCallRecording": "Spustiť nahrávanie hovoru", - "startVoiceRecording": "Spustiť hlasový záznam" + "startVoiceRecording": "Spustiť hlasový záznam", + "pairingLostTitle": "Nedá sa pripojiť k vášmu Omi", + "pairingLostBody": "Otvorte nastavenia Bluetooth v telefóne, odstráňte existujúce zariadenie Omi zo zoznamu a potom sa vráťte a skúste to znova.", + "pairingLostButton": "Otvoriť nastavenia Bluetooth" } diff --git a/app/lib/l10n/app_sl.arb b/app/lib/l10n/app_sl.arb index 012c30ba680..fa3f7adcba3 100644 --- a/app/lib/l10n/app_sl.arb +++ b/app/lib/l10n/app_sl.arb @@ -10721,5 +10721,8 @@ "selectAllTasksMenu": "Izberi vse", "showCompletedTasks": "Prikaži dokončane", "startCallRecording": "Začni snemanje klica", - "startVoiceRecording": "Začni glasovno snemanje" + "startVoiceRecording": "Začni glasovno snemanje", + "pairingLostTitle": "Ni se mogoče povezati z vašim Omijem", + "pairingLostBody": "Odprite nastavitve Bluetooth v telefonu, odstranite obstoječi Omi s seznama in poskusite znova.", + "pairingLostButton": "Odprite nastavitve Bluetootha" } diff --git a/app/lib/l10n/app_sr.arb b/app/lib/l10n/app_sr.arb index e822ccd1363..7d64c7be814 100644 --- a/app/lib/l10n/app_sr.arb +++ b/app/lib/l10n/app_sr.arb @@ -10721,5 +10721,8 @@ "selectAllTasksMenu": "Изабери све", "showCompletedTasks": "Прикажи завршене", "startCallRecording": "Покрени снимање позива", - "startVoiceRecording": "Покрени гласовно снимање" + "startVoiceRecording": "Покрени гласовно снимање", + "pairingLostTitle": "Не могу да се повежем са вашим Оми уређајем", + "pairingLostBody": "Отворите подешавања Bluetooth-а на телефону, уклоните постојећи Omi са листе, а затим се вратите и покушајте поново.", + "pairingLostButton": "Отворите подешавања Bluetooth-а" } diff --git a/app/lib/l10n/app_sv.arb b/app/lib/l10n/app_sv.arb index e6e8544214d..1b0b77bcab1 100644 --- a/app/lib/l10n/app_sv.arb +++ b/app/lib/l10n/app_sv.arb @@ -3013,5 +3013,8 @@ "selectAllTasksMenu": "Välj alla", "showCompletedTasks": "Visa slutförda", "startCallRecording": "Starta samtalsinspelning", - "startVoiceRecording": "Starta röstinspelning" + "startVoiceRecording": "Starta röstinspelning", + "pairingLostTitle": "Kan inte ansluta till din Omi", + "pairingLostBody": "Öppna telefonens Bluetooth-inställningar, ta bort den befintliga Omi från listan och försök sedan igen.", + "pairingLostButton": "Öppna Bluetooth-inställningar" } diff --git a/app/lib/l10n/app_ta.arb b/app/lib/l10n/app_ta.arb index aaab485665a..4cad954c7f2 100644 --- a/app/lib/l10n/app_ta.arb +++ b/app/lib/l10n/app_ta.arb @@ -10721,5 +10721,8 @@ "selectAllTasksMenu": "அனைத்தையும் தேர்ந்தெடு", "showCompletedTasks": "முடிந்தவற்றைக் காட்டு", "startCallRecording": "அழைப்பு பதிவைத் தொடங்கு", - "startVoiceRecording": "குரல் பதிவைத் தொடங்கு" + "startVoiceRecording": "குரல் பதிவைத் தொடங்கு", + "pairingLostTitle": "உங்கள் ஓமியுடன் இணைக்க முடியவில்லை", + "pairingLostBody": "தயவுசெய்து உங்கள் தொலைபேசியின் புளூடூத் அமைப்புகளைத் திறந்து, பட்டியலில் இருந்து ஏற்கனவே உள்ள ஓமியை அகற்றிவிட்டு, மீண்டும் வந்து முயற்சிக்கவும்.", + "pairingLostButton": "புளூடூத் அமைப்புகளைத் திறக்கவும்" } diff --git a/app/lib/l10n/app_te.arb b/app/lib/l10n/app_te.arb index f0a3b6b9a10..0c9b9ad35f8 100644 --- a/app/lib/l10n/app_te.arb +++ b/app/lib/l10n/app_te.arb @@ -10721,5 +10721,8 @@ "selectAllTasksMenu": "అన్నీ ఎంచుకోండి", "showCompletedTasks": "పూర్తయినవి చూపించు", "startCallRecording": "కాల్ రికార్డింగ్ ప్రారంభించండి", - "startVoiceRecording": "వాయిస్ రికార్డింగ్ ప్రారంభించండి" + "startVoiceRecording": "వాయిస్ రికార్డింగ్ ప్రారంభించండి", + "pairingLostTitle": "మీ Omiకి కనెక్ట్ అవ్వలేకపోతున్నాను", + "pairingLostBody": "దయచేసి మీ ఫోన్ బ్లూటూత్ సెట్టింగ్‌లను తెరిచి, జాబితా నుండి ఇప్పటికే ఉన్న Omiని తీసివేసి, ఆ తర్వాత తిరిగి వచ్చి మళ్లీ ప్రయత్నించండి.", + "pairingLostButton": "బ్లూటూత్ సెట్టింగ్‌లను తెరవండి" } diff --git a/app/lib/l10n/app_th.arb b/app/lib/l10n/app_th.arb index 9992077a7cc..cb074778ed5 100644 --- a/app/lib/l10n/app_th.arb +++ b/app/lib/l10n/app_th.arb @@ -3013,5 +3013,8 @@ "selectAllTasksMenu": "เลือกทั้งหมด", "showCompletedTasks": "แสดงที่เสร็จแล้ว", "startCallRecording": "เริ่มบันทึกการโทร", - "startVoiceRecording": "เริ่มบันทึกเสียง" + "startVoiceRecording": "เริ่มบันทึกเสียง", + "pairingLostTitle": "ไม่สามารถเชื่อมต่อกับ Omi ของคุณได้", + "pairingLostBody": "โปรดเปิดการตั้งค่าบลูทูธในโทรศัพท์ของคุณ ลบแอป Omi ที่มีอยู่จากรายการ แล้วลองใหม่อีกครั้ง", + "pairingLostButton": "เปิดการตั้งค่าบลูทูธ" } diff --git a/app/lib/l10n/app_tl.arb b/app/lib/l10n/app_tl.arb index c82c9a7b0c6..b4fb742aeb5 100644 --- a/app/lib/l10n/app_tl.arb +++ b/app/lib/l10n/app_tl.arb @@ -10721,5 +10721,8 @@ "selectAllTasksMenu": "Piliin lahat", "showCompletedTasks": "Ipakita ang tapos na", "startCallRecording": "Simulan ang pag-record ng tawag", - "startVoiceRecording": "Simulan ang voice recording" + "startVoiceRecording": "Simulan ang voice recording", + "pairingLostTitle": "Hindi makakonekta sa iyong Omi", + "pairingLostBody": "Pakibuksan ang mga setting ng Bluetooth ng iyong telepono, alisin ang kasalukuyang Omi sa listahan, pagkatapos ay bumalik at subukang muli.", + "pairingLostButton": "Buksan ang Mga Setting ng Bluetooth" } diff --git a/app/lib/l10n/app_tr.arb b/app/lib/l10n/app_tr.arb index ddd57e77a6b..480f84bcf40 100644 --- a/app/lib/l10n/app_tr.arb +++ b/app/lib/l10n/app_tr.arb @@ -3048,5 +3048,8 @@ "selectAllTasksMenu": "Tümünü seç", "showCompletedTasks": "Tamamlananları göster", "startCallRecording": "Arama kaydını başlat", - "startVoiceRecording": "Ses kaydını başlat" + "startVoiceRecording": "Ses kaydını başlat", + "pairingLostTitle": "Omi cihazınıza bağlanamıyorum.", + "pairingLostBody": "Lütfen telefonunuzun Bluetooth ayarlarını açın, mevcut Omi uygulamasını listeden kaldırın, ardından geri dönüp tekrar deneyin.", + "pairingLostButton": "Bluetooth Ayarlarını Açın" } diff --git a/app/lib/l10n/app_uk.arb b/app/lib/l10n/app_uk.arb index ace12ebacad..5ee4bbe4e9e 100644 --- a/app/lib/l10n/app_uk.arb +++ b/app/lib/l10n/app_uk.arb @@ -3013,5 +3013,8 @@ "selectAllTasksMenu": "Вибрати все", "showCompletedTasks": "Показати завершені", "startCallRecording": "Почати запис дзвінка", - "startVoiceRecording": "Почати голосовий запис" + "startVoiceRecording": "Почати голосовий запис", + "pairingLostTitle": "Не вдається підключитися до вашого Omi", + "pairingLostBody": "Будь ласка, відкрийте налаштування Bluetooth вашого телефону, видаліть існуючий Omi зі списку, а потім поверніться та спробуйте ще раз.", + "pairingLostButton": "Відкрийте налаштування Bluetooth" } diff --git a/app/lib/l10n/app_ur.arb b/app/lib/l10n/app_ur.arb index ee43455f165..020014cf00c 100644 --- a/app/lib/l10n/app_ur.arb +++ b/app/lib/l10n/app_ur.arb @@ -10721,5 +10721,8 @@ "selectAllTasksMenu": "سب منتخب کریں", "showCompletedTasks": "مکمل شدہ دکھائیں", "startCallRecording": "کال ریکارڈنگ شروع کریں", - "startVoiceRecording": "وائس ریکارڈنگ شروع کریں" + "startVoiceRecording": "وائس ریکارڈنگ شروع کریں", + "pairingLostTitle": "آپ کے Omi سے رابطہ نہیں ہو سکتا", + "pairingLostBody": "براہ کرم اپنے فون کی بلوٹوتھ سیٹنگز کھولیں، فہرست سے موجودہ Omi کو ہٹائیں، پھر واپس آئیں اور دوبارہ کوشش کریں۔", + "pairingLostButton": "بلوٹوتھ کی ترتیبات کھولیں۔" } diff --git a/app/lib/l10n/app_vi.arb b/app/lib/l10n/app_vi.arb index 3c7f7fc1fa2..4e3b1d8366c 100644 --- a/app/lib/l10n/app_vi.arb +++ b/app/lib/l10n/app_vi.arb @@ -3018,5 +3018,8 @@ "selectAllTasksMenu": "Chọn tất cả", "showCompletedTasks": "Hiện đã hoàn thành", "startCallRecording": "Bắt đầu ghi âm cuộc gọi", - "startVoiceRecording": "Bắt đầu ghi âm giọng nói" + "startVoiceRecording": "Bắt đầu ghi âm giọng nói", + "pairingLostTitle": "Không thể kết nối với Omi của bạn", + "pairingLostBody": "Vui lòng mở cài đặt Bluetooth trên điện thoại, xóa thiết bị Omi hiện có khỏi danh sách, sau đó quay lại và thử lại.", + "pairingLostButton": "Mở cài đặt Bluetooth" } diff --git a/app/lib/l10n/app_zh.arb b/app/lib/l10n/app_zh.arb index b167ad58fa5..519d0d80301 100644 --- a/app/lib/l10n/app_zh.arb +++ b/app/lib/l10n/app_zh.arb @@ -3035,5 +3035,8 @@ "selectAllTasksMenu": "全选", "showCompletedTasks": "显示已完成", "startCallRecording": "开始通话录音", - "startVoiceRecording": "开始语音录音" + "startVoiceRecording": "开始语音录音", + "pairingLostTitle": "无法连接到您的 Omi", + "pairingLostBody": "请打开手机的蓝牙设置,从列表中删除现有的 Omi,然后回来重试。", + "pairingLostButton": "打开蓝牙设置" } diff --git a/app/lib/pigeon_interfaces.dart b/app/lib/pigeon_interfaces.dart index a6c8a1b6b3b..525a71da1a4 100644 --- a/app/lib/pigeon_interfaces.dart +++ b/app/lib/pigeon_interfaces.dart @@ -220,6 +220,13 @@ abstract class BleHostApi { @async @SwiftFunction('requestCompanionDeviceAssociation(deviceAddress:)') String requestCompanionDeviceAssociation(String deviceAddress); + + /// Open the system Bluetooth settings page so the user can forget a stale + /// bond. iOS uses the App-Prefs:root=Bluetooth deep-link (falls back to the + /// general Settings app on iOS versions where Apple has restricted the URL); + /// Android fires the Settings.ACTION_BLUETOOTH_SETTINGS intent. + @SwiftFunction('openBluetoothSettings()') + void openBluetoothSettings(); } @FlutterApi() diff --git a/app/lib/providers/device_provider.dart b/app/lib/providers/device_provider.dart index a10a03c047f..8d2761681cc 100644 --- a/app/lib/providers/device_provider.dart +++ b/app/lib/providers/device_provider.dart @@ -16,6 +16,7 @@ import 'package:omi/providers/capture_provider.dart'; import 'package:omi/services/devices.dart'; import 'package:omi/services/devices/omi_connection.dart'; import 'package:omi/services/notifications.dart'; +import 'package:omi/services/bridges/ble_bridge.dart'; import 'package:omi/services/services.dart'; import 'package:omi/services/battery_widget_service.dart'; import 'package:omi/utils/analytics/mixpanel.dart'; @@ -70,8 +71,42 @@ class DeviceProvider extends ChangeNotifier implements IDeviceServiceSubsciption void Function(BtDevice device)? onDeviceConnected; void Function(BtDevice device, int fileCount, int totalBytes)? onOfflineDataDetected; + bool _pairingLostDialogShowing = false; + DeviceProvider() { ServiceManager.instance().device.subscribe(this, this); + BleBridge.instance.pairingLostCallback = (uuid) => _showPairingLostDialog(); + } + + void _showPairingLostDialog() { + if (_pairingLostDialogShowing) return; + final ctx = globalNavigatorKey.currentContext; + if (ctx == null) return; + _pairingLostDialogShowing = true; + showDialog( + context: ctx, + barrierDismissible: false, + builder: (dialogContext) => ConfirmationDialog( + title: dialogContext.l10n.pairingLostTitle, + description: dialogContext.l10n.pairingLostBody, + confirmText: dialogContext.l10n.pairingLostButton, + onConfirm: () async { + Navigator.pop(dialogContext); + // Open the system Bluetooth settings page so the user can forget the + // existing Omi entry. iOS uses App-Prefs:root=Bluetooth (with a fallback + // to UIApplication.openSettingsURLString); Android fires + // Settings.ACTION_BLUETOOTH_SETTINGS. await so PlatformException from + // the Pigeon channel is caught here rather than escaping as an + // unhandled future error. + try { + await BleHostApi().openBluetoothSettings(); + } catch (e) { + Logger.debug('openBluetoothSettings failed: $e'); + } + }, + onCancel: () {}, + ), + ).whenComplete(() => _pairingLostDialogShowing = false); } void setProviders(CaptureProvider provider) { @@ -347,6 +382,7 @@ class DeviceProvider extends ChangeNotifier implements IDeviceServiceSubsciption _discoveryTimer?.cancel(); _disconnectDebouncer.cancel(); _connectDebouncer.cancel(); + BleBridge.instance.pairingLostCallback = null; ServiceManager.instance().device.unsubscribe(this); super.dispose(); } diff --git a/app/lib/services/bridges/ble_bridge.dart b/app/lib/services/bridges/ble_bridge.dart index 3250ff4880c..028ba89be9c 100644 --- a/app/lib/services/bridges/ble_bridge.dart +++ b/app/lib/services/bridges/ble_bridge.dart @@ -31,6 +31,21 @@ class BleBridge implements BleFlutterApi { void Function(BlePeripheral peripheral)? peripheralDiscoveredCallback; void Function(List peripheralUuids)? stateRestoredCallback; + /// Fired when a peripheral disconnect carries the normalized "pairing_lost" + /// error token from native (iOS CBError.peerRemovedPairingInformation / + /// Android GATT statuses 137 and 15). Listener surfaces the recovery dialog + /// regardless of which screen is in front. + void Function(String peripheralUuid)? pairingLostCallback; + + /// Token sent by native layers to flag a stale-bond disconnect. See iOS + /// OmiBleManager.bleReasonString and Android OmiBleForegroundService.handleDisconnection. + static const String pairingLostToken = 'pairing_lost'; + + static bool isPairingLostError(String? error) { + if (error == null) return false; + return error.toLowerCase().contains(pairingLostToken); + } + void registerPeripheral({ required String peripheralUuid, CharacteristicValueCallback? onCharacteristicValue, @@ -78,6 +93,9 @@ class BleBridge implements BleFlutterApi { void onPeripheralDisconnected(String peripheralUuid, String? error) { final key = peripheralUuid.toUpperCase(); _disconnectCallbacks[key]?.call(false, error); + if (isPairingLostError(error)) { + pairingLostCallback?.call(key); + } } @override