From 3e49e0f0145cd528e5b8a2d6f7fbcefd1a57c921 Mon Sep 17 00:00:00 2001 From: Sylvain Berfini Date: Mon, 17 Mar 2025 11:04:06 +0100 Subject: [PATCH] Adding back auto start setting --- .../java/org/linphone/core/CoreContext.kt | 26 +++++++++++++---- .../java/org/linphone/core/CorePreferences.kt | 7 +++++ .../settings/viewmodel/SettingsViewModel.kt | 12 ++++++++ .../org/linphone/utils/ActivityMonitor.kt | 6 ++++ .../res/layout/settings_advanced_fragment.xml | 29 ++++++++++++++++++- app/src/main/res/values-fr/strings.xml | 1 + app/src/main/res/values/strings.xml | 1 + 7 files changed, 76 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/org/linphone/core/CoreContext.kt b/app/src/main/java/org/linphone/core/CoreContext.kt index 70254af20..4d39e2b3f 100644 --- a/app/src/main/java/org/linphone/core/CoreContext.kt +++ b/app/src/main/java/org/linphone/core/CoreContext.kt @@ -123,6 +123,8 @@ class CoreContext MutableLiveData>>() } + private var keepAliveServiceStarted = false + @SuppressLint("HandlerLeak") private lateinit var coreThread: Handler @@ -548,15 +550,19 @@ class CoreContext Log.i("$TAG No configuration migration required") } - if (corePreferences.keepServiceAlive) { - Log.i("$TAG Starting keep alive service") - startKeepAliveService() - } - contactsManager.onCoreStarted(core) telecomManager.onCoreStarted(core) notificationsManager.onCoreStarted(core, oldVersion < 600000) // Re-create channels when migrating from a non 6.0 version Log.i("$TAG Started contacts, telecom & notifications managers") + + if (corePreferences.keepServiceAlive) { + if (activityMonitor.isInForeground() || corePreferences.autoStart) { + Log.i("$TAG Keep alive service is enabled and either app is in foreground or auto start is enabled, starting it") + startKeepAliveService() + } else { + Log.w("$TAG Keep alive service is enabled but auto start isn't and app is not in foreground, not starting it") + } + } } @WorkerThread @@ -644,6 +650,10 @@ class CoreContext Log.i("$TAG App is in foreground, PUBLISHING presence as Online") core.consolidatedPresence = ConsolidatedPresence.Online } + + if (corePreferences.keepServiceAlive && !keepAliveServiceStarted) { + startKeepAliveService() + } } } @@ -855,6 +865,10 @@ class CoreContext @WorkerThread fun startKeepAliveService() { + if (keepAliveServiceStarted) { + Log.w("$TAG Keep alive service already started, skipping") + } + val serviceIntent = Intent(Intent.ACTION_MAIN).setClass( context, CoreKeepAliveThirdPartyAccountsService::class.java @@ -862,6 +876,7 @@ class CoreContext Log.i("$TAG Starting Keep alive for third party accounts Service") try { context.startService(serviceIntent) + keepAliveServiceStarted = true } catch (e: Exception) { Log.e("$TAG Failed to start keep alive service: $e") } @@ -877,6 +892,7 @@ class CoreContext "$TAG Stopping Keep alive for third party accounts Service" ) context.stopService(serviceIntent) + keepAliveServiceStarted = false } @WorkerThread diff --git a/app/src/main/java/org/linphone/core/CorePreferences.kt b/app/src/main/java/org/linphone/core/CorePreferences.kt index 353129377..e3657c420 100644 --- a/app/src/main/java/org/linphone/core/CorePreferences.kt +++ b/app/src/main/java/org/linphone/core/CorePreferences.kt @@ -67,6 +67,13 @@ class CorePreferences config.setInt("app", "config_version", value) } + @get:WorkerThread @set:WorkerThread + var autoStart: Boolean + get() = config.getBool("app", "auto_start", true) + set(value) { + config.setBool("app", "auto_start", value) + } + @get:WorkerThread @set:WorkerThread var checkForUpdateServerUrl: String get() = config.getString("misc", "version_check_url_root", "").orEmpty() diff --git a/app/src/main/java/org/linphone/ui/main/settings/viewmodel/SettingsViewModel.kt b/app/src/main/java/org/linphone/ui/main/settings/viewmodel/SettingsViewModel.kt index 62a36d08b..f764468f3 100644 --- a/app/src/main/java/org/linphone/ui/main/settings/viewmodel/SettingsViewModel.kt +++ b/app/src/main/java/org/linphone/ui/main/settings/viewmodel/SettingsViewModel.kt @@ -179,6 +179,7 @@ class SettingsViewModel ) // Advanced settings + val startAtBoot = MutableLiveData() val keepAliveThirdPartyAccountsService = MutableLiveData() val deviceName = MutableLiveData() @@ -302,6 +303,7 @@ class SettingsViewModel setupTunnel() } + startAtBoot.postValue(corePreferences.autoStart) keepAliveThirdPartyAccountsService.postValue(corePreferences.keepServiceAlive) deviceName.postValue(corePreferences.deviceName) @@ -637,6 +639,16 @@ class SettingsViewModel } } + @UiThread + fun toggleStartAtBoot() { + val newValue = startAtBoot.value == false + + coreContext.postOnCoreThread { + corePreferences.autoStart = newValue + startAtBoot.postValue(newValue) + } + } + @UiThread fun toggleKeepAliveThirdPartyAccountService() { val newValue = keepAliveThirdPartyAccountsService.value == false diff --git a/app/src/main/java/org/linphone/utils/ActivityMonitor.kt b/app/src/main/java/org/linphone/utils/ActivityMonitor.kt index d0ecc5ac6..d7bb424f9 100644 --- a/app/src/main/java/org/linphone/utils/ActivityMonitor.kt +++ b/app/src/main/java/org/linphone/utils/ActivityMonitor.kt @@ -22,6 +22,7 @@ package org.linphone.utils import android.app.Activity import android.app.Application.ActivityLifecycleCallbacks import android.os.Bundle +import androidx.annotation.AnyThread import androidx.annotation.UiThread import org.linphone.LinphoneApplication.Companion.coreContext import org.linphone.core.tools.Log @@ -79,6 +80,11 @@ class ActivityMonitor : ActivityLifecycleCallbacks { activities.remove(activity) } + @AnyThread + fun isInForeground(): Boolean { + return mActive + } + private fun startInactivityChecker() { if (mLastChecker != null) mLastChecker!!.cancel() AndroidDispatcher.dispatchOnUIThreadAfter( diff --git a/app/src/main/res/layout/settings_advanced_fragment.xml b/app/src/main/res/layout/settings_advanced_fragment.xml index db969b571..2e73f3555 100644 --- a/app/src/main/res/layout/settings_advanced_fragment.xml +++ b/app/src/main/res/layout/settings_advanced_fragment.xml @@ -60,6 +60,33 @@ android:layout_width="match_parent" android:layout_height="wrap_content"> + + + + + app:layout_constraintTop_toBottomOf="@id/start_at_boot_switch"/> Auto Paramètres avancés + Démarrer au lancement du téléphone Garder l\'app en vie via un Service Nom de l\'appareil Caractères alpha-numériques uniquement diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index a4087876d..2032893ac 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -298,6 +298,7 @@ Auto Advanced settings + Start when device boots Keep app alive using Service Device ID Alpha-numerical characters only