mirror of
https://github.com/greenart7c3/Amber.git
synced 2026-09-14 00:35:08 +00:00
Respect start service on boot setting after app updates
This commit is contained in:
@@ -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()
|
||||
|
||||
@@ -646,7 +646,7 @@
|
||||
<string name="service_settings">Diensteinstellungen</string>
|
||||
<string name="stop_service">Dienst stoppen</string>
|
||||
<string name="start_service_on_boot">Dienst beim Start ausführen</string>
|
||||
<string name="start_service_on_boot_description">Wenn aktiviert, startet Amber seinen Hintergrunddienst automatisch nach dem Gerätestart, damit Remote-Anmeldungen und NIP-46-Anfragen weiterhin funktionieren.</string>
|
||||
<string name="start_service_on_boot_description">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.</string>
|
||||
<string name="profile_fetch_interval">Profilabruf-Intervall</string>
|
||||
<string name="profile_fetch_interval_description">Wie oft Amber die Relays auf aktualisierte Profilmetadaten (Name und Bild) prüft</string>
|
||||
<string name="profile_fetch_interval_always">Immer (jedes Mal)</string>
|
||||
|
||||
@@ -649,7 +649,7 @@
|
||||
<string name="service_settings">Configuración del servicio</string>
|
||||
<string name="stop_service">Detener servicio</string>
|
||||
<string name="start_service_on_boot">Iniciar servicio al arrancar</string>
|
||||
<string name="start_service_on_boot_description">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.</string>
|
||||
<string name="start_service_on_boot_description">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.</string>
|
||||
<string name="profile_fetch_interval">Intervalo de obtención de perfil</string>
|
||||
<string name="profile_fetch_interval_description">Con qué frecuencia Amber consulta los relés en busca de metadatos de perfil actualizados (nombre e imagen)</string>
|
||||
<string name="profile_fetch_interval_always">Siempre (cada vez)</string>
|
||||
|
||||
@@ -646,7 +646,7 @@
|
||||
<string name="service_settings">Paramètres du service</string>
|
||||
<string name="stop_service">Arrêter le service</string>
|
||||
<string name="start_service_on_boot">Démarrer le service au démarrage</string>
|
||||
<string name="start_service_on_boot_description">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.</string>
|
||||
<string name="start_service_on_boot_description">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.</string>
|
||||
<string name="profile_fetch_interval">Intervalle de récupération du profil</string>
|
||||
<string name="profile_fetch_interval_description">À quelle fréquence Amber vérifie les relais pour des métadonnées de profil mises à jour (nom et image)</string>
|
||||
<string name="profile_fetch_interval_always">Toujours (à chaque fois)</string>
|
||||
|
||||
@@ -649,7 +649,7 @@
|
||||
<string name="service_settings">Pengaturan layanan</string>
|
||||
<string name="stop_service">Hentikan layanan</string>
|
||||
<string name="start_service_on_boot">Mulai layanan saat boot</string>
|
||||
<string name="start_service_on_boot_description">Jika diaktifkan, Amber akan memulai layanan latar belakangnya secara otomatis setelah perangkat boot sehingga login jarak jauh dan permintaan NIP-46 tetap berfungsi.</string>
|
||||
<string name="start_service_on_boot_description">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.</string>
|
||||
<string name="profile_fetch_interval">Interval pengambilan profil</string>
|
||||
<string name="profile_fetch_interval_description">Seberapa sering Amber memeriksa relay untuk metadata profil yang diperbarui (nama dan gambar)</string>
|
||||
<string name="profile_fetch_interval_always">Selalu (setiap saat)</string>
|
||||
|
||||
@@ -649,7 +649,7 @@
|
||||
<string name="service_settings">Impostazioni servizio</string>
|
||||
<string name="stop_service">Ferma servizio</string>
|
||||
<string name="start_service_on_boot">Avvia servizio all\'avvio</string>
|
||||
<string name="start_service_on_boot_description">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.</string>
|
||||
<string name="start_service_on_boot_description">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.</string>
|
||||
<string name="profile_fetch_interval">Intervallo di recupero del profilo</string>
|
||||
<string name="profile_fetch_interval_description">Con quale frequenza Amber controlla i relay per i metadati del profilo aggiornati (nome e immagine)</string>
|
||||
<string name="profile_fetch_interval_always">Sempre (ogni volta)</string>
|
||||
|
||||
@@ -625,7 +625,7 @@
|
||||
<string name="service_settings">サービス設定</string>
|
||||
<string name="stop_service">サービスを停止</string>
|
||||
<string name="start_service_on_boot">起動時にサービスを開始</string>
|
||||
<string name="start_service_on_boot_description">有効にすると、デバイス起動後に Amber がバックグラウンドサービスを自動的に開始し、リモートログインと NIP-46 リクエストが継続して機能します。</string>
|
||||
<string name="start_service_on_boot_description">有効にすると、デバイス起動後やアプリ更新後に Amber がバックグラウンドサービスを自動的に開始し、リモートログインと NIP-46 リクエストが継続して機能します。</string>
|
||||
<string name="profile_fetch_interval">プロフィール取得間隔</string>
|
||||
<string name="profile_fetch_interval_description">Amberが更新されたプロフィールメタデータ(名前と画像)をリレーで確認する頻度</string>
|
||||
<string name="profile_fetch_interval_always">常に(毎回)</string>
|
||||
|
||||
@@ -649,7 +649,7 @@
|
||||
<string name="service_settings">서비스 설정</string>
|
||||
<string name="stop_service">서비스 중지</string>
|
||||
<string name="start_service_on_boot">부팅 시 서비스 시작</string>
|
||||
<string name="start_service_on_boot_description">활성화하면 기기 부팅 후 Amber가 백그라운드 서비스를 자동으로 시작하여 원격 로그인 및 NIP-46 요청이 계속 작동합니다.</string>
|
||||
<string name="start_service_on_boot_description">활성화하면 기기 부팅 후 또는 앱 업데이트 후 Amber가 백그라운드 서비스를 자동으로 시작하여 원격 로그인 및 NIP-46 요청이 계속 작동합니다.</string>
|
||||
<string name="profile_fetch_interval">프로필 가져오기 간격</string>
|
||||
<string name="profile_fetch_interval_description">Amber가 업데이트된 프로필 메타데이터(이름 및 사진)를 릴레이에서 확인하는 빈도</string>
|
||||
<string name="profile_fetch_interval_always">항상(매번)</string>
|
||||
|
||||
@@ -644,7 +644,7 @@
|
||||
<string name="service_settings">Configurações do serviço</string>
|
||||
<string name="stop_service">Parar serviço</string>
|
||||
<string name="start_service_on_boot">Iniciar serviço na inicialização</string>
|
||||
<string name="start_service_on_boot_description">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.</string>
|
||||
<string name="start_service_on_boot_description">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.</string>
|
||||
<string name="profile_fetch_interval">Intervalo de busca de perfil</string>
|
||||
<string name="profile_fetch_interval_description">Com que frequência o Amber verifica os relays em busca de metadados de perfil atualizados (nome e foto)</string>
|
||||
<string name="profile_fetch_interval_always">Sempre (todas as vezes)</string>
|
||||
|
||||
@@ -649,7 +649,7 @@
|
||||
<string name="service_settings">Настройки службы</string>
|
||||
<string name="stop_service">Остановить службу</string>
|
||||
<string name="start_service_on_boot">Запускать службу при загрузке</string>
|
||||
<string name="start_service_on_boot_description">При включении Amber будет автоматически запускать фоновую службу после загрузки устройства, чтобы удалённый вход и запросы NIP-46 продолжали работать.</string>
|
||||
<string name="start_service_on_boot_description">При включении Amber будет автоматически запускать фоновую службу после загрузки устройства или после обновления приложения, чтобы удалённый вход и запросы NIP-46 продолжали работать.</string>
|
||||
<string name="profile_fetch_interval">Интервал получения профиля</string>
|
||||
<string name="profile_fetch_interval_description">Как часто Amber проверяет реле на наличие обновлённых метаданных профиля (имя и изображение)</string>
|
||||
<string name="profile_fetch_interval_always">Всегда (каждый раз)</string>
|
||||
|
||||
@@ -625,7 +625,7 @@
|
||||
<string name="service_settings">การตั้งค่าบริการ</string>
|
||||
<string name="stop_service">หยุดบริการ</string>
|
||||
<string name="start_service_on_boot">เริ่มบริการเมื่อเปิดเครื่อง</string>
|
||||
<string name="start_service_on_boot_description">เมื่อเปิดใช้งาน Amber จะเริ่มบริการพื้นหลังโดยอัตโนมัติหลังจากอุปกรณ์เปิดเครื่อง เพื่อให้การล็อกอินระยะไกลและคำขอ NIP-46 ยังคงทำงานได้</string>
|
||||
<string name="start_service_on_boot_description">เมื่อเปิดใช้งาน Amber จะเริ่มบริการพื้นหลังโดยอัตโนมัติหลังจากอุปกรณ์เปิดเครื่องหรือหลังแอปอัปเดต เพื่อให้การล็อกอินระยะไกลและคำขอ NIP-46 ยังคงทำงานได้</string>
|
||||
<string name="profile_fetch_interval">ช่วงเวลาดึงข้อมูลโปรไฟล์</string>
|
||||
<string name="profile_fetch_interval_description">ความถี่ที่ Amber ตรวจสอบรีเลย์เพื่อหาข้อมูลเมตาโปรไฟล์ที่อัปเดต (ชื่อและรูปภาพ)</string>
|
||||
<string name="profile_fetch_interval_always">เสมอ (ทุกครั้ง)</string>
|
||||
|
||||
@@ -645,7 +645,7 @@
|
||||
<string name="service_settings">Servis ayarları</string>
|
||||
<string name="stop_service">Servisi durdur</string>
|
||||
<string name="start_service_on_boot">Önyüklemede servisi başlat</string>
|
||||
<string name="start_service_on_boot_description">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.</string>
|
||||
<string name="start_service_on_boot_description">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.</string>
|
||||
<string name="profile_fetch_interval">Profil getirme aralığı</string>
|
||||
<string name="profile_fetch_interval_description">Amber\'ın güncellenmiş profil meta verilerini (ad ve resim) röleler üzerinden ne sıklıkla kontrol ettiği</string>
|
||||
<string name="profile_fetch_interval_always">Her zaman (her seferinde)</string>
|
||||
|
||||
@@ -625,7 +625,7 @@
|
||||
<string name="service_settings">Cài đặt dịch vụ</string>
|
||||
<string name="stop_service">Dừng dịch vụ</string>
|
||||
<string name="start_service_on_boot">Khởi động dịch vụ khi bật máy</string>
|
||||
<string name="start_service_on_boot_description">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.</string>
|
||||
<string name="start_service_on_boot_description">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.</string>
|
||||
<string name="profile_fetch_interval">Khoảng thời gian lấy hồ sơ</string>
|
||||
<string name="profile_fetch_interval_description">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)</string>
|
||||
<string name="profile_fetch_interval_always">Luôn luôn (mỗi lần)</string>
|
||||
|
||||
@@ -630,7 +630,7 @@
|
||||
<string name="service_settings">服务设置</string>
|
||||
<string name="stop_service">停止服务</string>
|
||||
<string name="start_service_on_boot">开启时启动服务</string>
|
||||
<string name="start_service_on_boot_description">启用后,Amber将在设备启动后自动启动后台服务,可以使远程登录和 NIP-46 请求继续保持运行。</string>
|
||||
<string name="start_service_on_boot_description">启用后,Amber将在设备启动后或应用更新后自动启动后台服务,可以使远程登录和 NIP-46 请求继续保持运行。</string>
|
||||
<string name="profile_fetch_interval">个人资料获取间隔</string>
|
||||
<string name="profile_fetch_interval_description">Amber 检查中继以获取更新的个人资料元数据(名称和图片)的频率</string>
|
||||
<string name="profile_fetch_interval_always">总是(每次)</string>
|
||||
|
||||
@@ -678,7 +678,7 @@
|
||||
<string name="service_settings">Service settings</string>
|
||||
<string name="stop_service">Stop service</string>
|
||||
<string name="start_service_on_boot">Start service on boot</string>
|
||||
<string name="start_service_on_boot_description">When enabled, Amber will start its background service automatically after the device boots so remote login and NIP-46 requests keep working.</string>
|
||||
<string name="start_service_on_boot_description">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.</string>
|
||||
<string name="profile_fetch_interval">Profile fetch interval</string>
|
||||
<string name="profile_fetch_interval_description">How often Amber checks relays for updated profile metadata (name and picture)</string>
|
||||
<string name="profile_fetch_interval_always">Always (every time)</string>
|
||||
|
||||
@@ -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<String>()) } 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<Intent>()
|
||||
every { intent.action } returns action
|
||||
val scope = CoroutineScope(StandardTestDispatcher(testScheduler))
|
||||
BootReceiver(scope).onReceive(mockk<Context>(), 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() }
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user