diff --git a/app/src/main/java/com/greenart7c3/nostrsigner/service/BootReceiver.kt b/app/src/main/java/com/greenart7c3/nostrsigner/service/BootReceiver.kt index 64bf3070..ab3de5c6 100644 --- a/app/src/main/java/com/greenart7c3/nostrsigner/service/BootReceiver.kt +++ b/app/src/main/java/com/greenart7c3/nostrsigner/service/BootReceiver.kt @@ -12,8 +12,9 @@ import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.SupervisorJob import kotlinx.coroutines.launch -class BootReceiver : BroadcastReceiver() { - val scope = CoroutineScope(Dispatchers.IO + SupervisorJob()) +class BootReceiver( + private val scope: CoroutineScope = CoroutineScope(Dispatchers.IO + SupervisorJob()), +) : BroadcastReceiver() { override fun onReceive(context: Context, intent: Intent) { if (BuildFlavorChecker.isOfflineFlavor()) return AmberLog.d(Amber.TAG, "Received intent: ${intent.action}") @@ -24,11 +25,8 @@ class BootReceiver : BroadcastReceiver() { -> { AmberLog.d(Amber.TAG, "Received ${intent.action}") scope.launch { - val shouldStartService = LocalPreferences.getStartServiceOnBoot(context) - if (intent.action == Intent.ACTION_BOOT_COMPLETED && - !shouldStartService - ) { - AmberLog.d(Amber.TAG, "Skipping service start on boot (disabled in settings)") + if (!LocalPreferences.getStartServiceOnBoot(context)) { + AmberLog.d(Amber.TAG, "Skipping service start (${intent.action}) (disabled in settings)") return@launch } Amber.instance.startService() diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index c3bed922..58d4dd75 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -646,7 +646,7 @@ Diensteinstellungen Dienst stoppen Dienst beim Start ausführen - Wenn aktiviert, startet Amber seinen Hintergrunddienst automatisch nach dem Gerätestart, damit Remote-Anmeldungen und NIP-46-Anfragen weiterhin funktionieren. + Wenn aktiviert, startet Amber seinen Hintergrunddienst automatisch nach dem Gerätestart oder nach einem App-Update, damit Remote-Anmeldungen und NIP-46-Anfragen weiterhin funktionieren. Profilabruf-Intervall Wie oft Amber die Relays auf aktualisierte Profilmetadaten (Name und Bild) prüft Immer (jedes Mal) diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index d8fc56c5..d9289017 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -649,7 +649,7 @@ Configuración del servicio Detener servicio Iniciar servicio al arrancar - Cuando está activado, Amber iniciará su servicio en segundo plano automáticamente tras el arranque del dispositivo, para que el inicio de sesión remoto y las solicitudes NIP-46 sigan funcionando. + Cuando está activado, Amber iniciará su servicio en segundo plano automáticamente tras el arranque del dispositivo o tras una actualización de la app, para que el inicio de sesión remoto y las solicitudes NIP-46 sigan funcionando. Intervalo de obtención de perfil Con qué frecuencia Amber consulta los relés en busca de metadatos de perfil actualizados (nombre e imagen) Siempre (cada vez) diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index b1f2a5ae..08c05267 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -646,7 +646,7 @@ Paramètres du service Arrêter le service Démarrer le service au démarrage - Lorsqu\'il est activé, Amber démarre automatiquement son service en arrière-plan après le démarrage de l\'appareil afin que la connexion à distance et les requêtes NIP-46 continuent de fonctionner. + Lorsqu\'il est activé, Amber démarre automatiquement son service en arrière-plan après le démarrage de l\'appareil ou après une mise à jour de l\'application afin que la connexion à distance et les requêtes NIP-46 continuent de fonctionner. Intervalle de récupération du profil À quelle fréquence Amber vérifie les relais pour des métadonnées de profil mises à jour (nom et image) Toujours (à chaque fois) diff --git a/app/src/main/res/values-in/strings.xml b/app/src/main/res/values-in/strings.xml index 155f8dfa..79afce46 100644 --- a/app/src/main/res/values-in/strings.xml +++ b/app/src/main/res/values-in/strings.xml @@ -649,7 +649,7 @@ Pengaturan layanan Hentikan layanan Mulai layanan saat boot - Jika diaktifkan, Amber akan memulai layanan latar belakangnya secara otomatis setelah perangkat boot sehingga login jarak jauh dan permintaan NIP-46 tetap berfungsi. + Jika diaktifkan, Amber akan memulai layanan latar belakangnya secara otomatis setelah perangkat boot atau setelah aplikasi diperbarui sehingga login jarak jauh dan permintaan NIP-46 tetap berfungsi. Interval pengambilan profil Seberapa sering Amber memeriksa relay untuk metadata profil yang diperbarui (nama dan gambar) Selalu (setiap saat) diff --git a/app/src/main/res/values-it-rIT/strings.xml b/app/src/main/res/values-it-rIT/strings.xml index 26a1dfc1..c41254ab 100644 --- a/app/src/main/res/values-it-rIT/strings.xml +++ b/app/src/main/res/values-it-rIT/strings.xml @@ -649,7 +649,7 @@ Impostazioni servizio Ferma servizio Avvia servizio all\'avvio - Quando abilitato, Amber avvierà automaticamente il suo servizio in background dopo l\'avvio del dispositivo, così l\'accesso remoto e le richieste NIP-46 continueranno a funzionare. + Quando abilitato, Amber avvierà automaticamente il suo servizio in background dopo l\'avvio del dispositivo o dopo un aggiornamento dell\'app, così l\'accesso remoto e le richieste NIP-46 continueranno a funzionare. Intervallo di recupero del profilo Con quale frequenza Amber controlla i relay per i metadati del profilo aggiornati (nome e immagine) Sempre (ogni volta) diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml index 9001cd70..cfc02e2b 100644 --- a/app/src/main/res/values-ja/strings.xml +++ b/app/src/main/res/values-ja/strings.xml @@ -625,7 +625,7 @@ サービス設定 サービスを停止 起動時にサービスを開始 - 有効にすると、デバイス起動後に Amber がバックグラウンドサービスを自動的に開始し、リモートログインと NIP-46 リクエストが継続して機能します。 + 有効にすると、デバイス起動後やアプリ更新後に Amber がバックグラウンドサービスを自動的に開始し、リモートログインと NIP-46 リクエストが継続して機能します。 プロフィール取得間隔 Amberが更新されたプロフィールメタデータ(名前と画像)をリレーで確認する頻度 常に(毎回) diff --git a/app/src/main/res/values-ko-rKR/strings.xml b/app/src/main/res/values-ko-rKR/strings.xml index 9aa7c3c5..8fe3282c 100644 --- a/app/src/main/res/values-ko-rKR/strings.xml +++ b/app/src/main/res/values-ko-rKR/strings.xml @@ -649,7 +649,7 @@ 서비스 설정 서비스 중지 부팅 시 서비스 시작 - 활성화하면 기기 부팅 후 Amber가 백그라운드 서비스를 자동으로 시작하여 원격 로그인 및 NIP-46 요청이 계속 작동합니다. + 활성화하면 기기 부팅 후 또는 앱 업데이트 후 Amber가 백그라운드 서비스를 자동으로 시작하여 원격 로그인 및 NIP-46 요청이 계속 작동합니다. 프로필 가져오기 간격 Amber가 업데이트된 프로필 메타데이터(이름 및 사진)를 릴레이에서 확인하는 빈도 항상(매번) diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index 05b5e7a5..9fa0d210 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -644,7 +644,7 @@ Configurações do serviço Parar serviço Iniciar serviço na inicialização - Quando ativado, o Amber iniciará seu serviço em segundo plano automaticamente após o dispositivo ser ligado, para que o login remoto e as solicitações NIP-46 continuem funcionando. + Quando ativado, o Amber iniciará seu serviço em segundo plano automaticamente após o dispositivo ser ligado ou após uma atualização do app, para que o login remoto e as solicitações NIP-46 continuem funcionando. Intervalo de busca de perfil Com que frequência o Amber verifica os relays em busca de metadados de perfil atualizados (nome e foto) Sempre (todas as vezes) diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index d4a0c355..7b467659 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -649,7 +649,7 @@ Настройки службы Остановить службу Запускать службу при загрузке - При включении Amber будет автоматически запускать фоновую службу после загрузки устройства, чтобы удалённый вход и запросы NIP-46 продолжали работать. + При включении Amber будет автоматически запускать фоновую службу после загрузки устройства или после обновления приложения, чтобы удалённый вход и запросы NIP-46 продолжали работать. Интервал получения профиля Как часто Amber проверяет реле на наличие обновлённых метаданных профиля (имя и изображение) Всегда (каждый раз) diff --git a/app/src/main/res/values-th/strings.xml b/app/src/main/res/values-th/strings.xml index 0ae556d4..464f7aef 100644 --- a/app/src/main/res/values-th/strings.xml +++ b/app/src/main/res/values-th/strings.xml @@ -625,7 +625,7 @@ การตั้งค่าบริการ หยุดบริการ เริ่มบริการเมื่อเปิดเครื่อง - เมื่อเปิดใช้งาน Amber จะเริ่มบริการพื้นหลังโดยอัตโนมัติหลังจากอุปกรณ์เปิดเครื่อง เพื่อให้การล็อกอินระยะไกลและคำขอ NIP-46 ยังคงทำงานได้ + เมื่อเปิดใช้งาน Amber จะเริ่มบริการพื้นหลังโดยอัตโนมัติหลังจากอุปกรณ์เปิดเครื่องหรือหลังแอปอัปเดต เพื่อให้การล็อกอินระยะไกลและคำขอ NIP-46 ยังคงทำงานได้ ช่วงเวลาดึงข้อมูลโปรไฟล์ ความถี่ที่ Amber ตรวจสอบรีเลย์เพื่อหาข้อมูลเมตาโปรไฟล์ที่อัปเดต (ชื่อและรูปภาพ) เสมอ (ทุกครั้ง) diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml index de8a9f6b..a12b006f 100644 --- a/app/src/main/res/values-tr/strings.xml +++ b/app/src/main/res/values-tr/strings.xml @@ -645,7 +645,7 @@ Servis ayarları Servisi durdur Önyüklemede servisi başlat - Etkinleştirildiğinde Amber, cihaz başladıktan sonra arka plan servisini otomatik olarak başlatır; böylece uzak oturum açma ve NIP-46 istekleri çalışmaya devam eder. + Etkinleştirildiğinde Amber, cihaz başladıktan veya uygulama güncellendikten sonra arka plan servisini otomatik olarak başlatır; böylece uzak oturum açma ve NIP-46 istekleri çalışmaya devam eder. Profil getirme aralığı Amber\'ın güncellenmiş profil meta verilerini (ad ve resim) röleler üzerinden ne sıklıkla kontrol ettiği Her zaman (her seferinde) diff --git a/app/src/main/res/values-vi-rVN/strings.xml b/app/src/main/res/values-vi-rVN/strings.xml index b3186df1..839f714f 100644 --- a/app/src/main/res/values-vi-rVN/strings.xml +++ b/app/src/main/res/values-vi-rVN/strings.xml @@ -625,7 +625,7 @@ Cài đặt dịch vụ Dừng dịch vụ Khởi động dịch vụ khi bật máy - Khi được bật, Amber sẽ tự động khởi động dịch vụ nền sau khi thiết bị khởi động để đăng nhập từ xa và các yêu cầu NIP-46 tiếp tục hoạt động. + Khi được bật, Amber sẽ tự động khởi động dịch vụ nền sau khi thiết bị khởi động hoặc sau khi ứng dụng được cập nhật để đăng nhập từ xa và các yêu cầu NIP-46 tiếp tục hoạt động. Khoảng thời gian lấy hồ sơ Tần suất Amber kiểm tra relay để tìm siêu dữ liệu hồ sơ đã cập nhật (tên và ảnh) Luôn luôn (mỗi lần) diff --git a/app/src/main/res/values-zh/strings.xml b/app/src/main/res/values-zh/strings.xml index b37529bd..d397d61c 100644 --- a/app/src/main/res/values-zh/strings.xml +++ b/app/src/main/res/values-zh/strings.xml @@ -630,7 +630,7 @@ 服务设置 停止服务 开启时启动服务 - 启用后,Amber将在设备启动后自动启动后台服务,可以使远程登录和 NIP-46 请求继续保持运行。 + 启用后,Amber将在设备启动后或应用更新后自动启动后台服务,可以使远程登录和 NIP-46 请求继续保持运行。 个人资料获取间隔 Amber 检查中继以获取更新的个人资料元数据(名称和图片)的频率 总是(每次) diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index eeb53367..c60ff14d 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -678,7 +678,7 @@ Service settings Stop service Start service on boot - When enabled, Amber will start its background service automatically after the device boots so remote login and NIP-46 requests keep working. + When enabled, Amber will start its background service automatically after the device boots or after an app update so remote login and NIP-46 requests keep working. Profile fetch interval How often Amber checks relays for updated profile metadata (name and picture) Always (every time) diff --git a/app/src/test/java/com/greenart7c3/nostrsigner/service/BootReceiverTest.kt b/app/src/test/java/com/greenart7c3/nostrsigner/service/BootReceiverTest.kt new file mode 100644 index 00000000..1949ff22 --- /dev/null +++ b/app/src/test/java/com/greenart7c3/nostrsigner/service/BootReceiverTest.kt @@ -0,0 +1,75 @@ +package com.greenart7c3.nostrsigner.service + +import android.content.Context +import android.content.Intent +import com.greenart7c3.nostrsigner.Amber +import com.greenart7c3.nostrsigner.AmberLog +import com.greenart7c3.nostrsigner.BuildFlavorChecker +import com.greenart7c3.nostrsigner.LocalPreferences +import io.mockk.every +import io.mockk.mockk +import io.mockk.mockkObject +import io.mockk.unmockkAll +import io.mockk.verify +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.ExperimentalCoroutinesApi +import kotlinx.coroutines.test.StandardTestDispatcher +import kotlinx.coroutines.test.advanceUntilIdle +import kotlinx.coroutines.test.runTest +import org.junit.After +import org.junit.Before +import org.junit.Test + +@OptIn(ExperimentalCoroutinesApi::class) +class BootReceiverTest { + private lateinit var amber: Amber + + @Before + fun setUp() { + amber = mockk(relaxed = true) + installAmberInstance(amber) + mockkObject(AmberLog) + every { AmberLog.d(any(), any()) } returns Unit + mockkObject(BuildFlavorChecker) + every { BuildFlavorChecker.isOfflineFlavor() } returns false + mockkObject(LocalPreferences) + } + + @After + fun tearDown() { + unmockkAll() + } + + private fun receive(action: String, startServiceOnBoot: Boolean) = runTest { + every { LocalPreferences.getStartServiceOnBoot(any()) } returns startServiceOnBoot + val intent = mockk() + every { intent.action } returns action + val scope = CoroutineScope(StandardTestDispatcher(testScheduler)) + BootReceiver(scope).onReceive(mockk(), intent) + advanceUntilIdle() + } + + @Test + fun `package replaced with toggle off does not start service`() { + receive(Intent.ACTION_MY_PACKAGE_REPLACED, startServiceOnBoot = false) + verify(exactly = 0) { amber.startService() } + } + + @Test + fun `package replaced with toggle on starts service`() { + receive(Intent.ACTION_MY_PACKAGE_REPLACED, startServiceOnBoot = true) + verify(exactly = 1) { amber.startService() } + } + + @Test + fun `boot completed with toggle off does not start service`() { + receive(Intent.ACTION_BOOT_COMPLETED, startServiceOnBoot = false) + verify(exactly = 0) { amber.startService() } + } + + @Test + fun `boot completed with toggle on starts service`() { + receive(Intent.ACTION_BOOT_COMPLETED, startServiceOnBoot = true) + verify(exactly = 1) { amber.startService() } + } +}