From 0dd83be779bbb04ea8746fb34bc5e43e8f7fdb7f Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Adrien=20B=C3=A9raud?= <adrien.beraud@savoirfairelinux.com>
Date: Fri, 1 Dec 2023 11:16:57 -0500
Subject: [PATCH] JamiJobService: use EXTRA_TIMEOUT to manage service timeout

Change-Id: Iaf6504c2aab085c9f6ed5d7fd631b8276ee3ffc3
---
 .../java/cx/ring/service/JamiJobService.kt    | 11 ++++------
 .../main/java/cx/ring/service/SyncService.kt  | 22 ++++++++++++-------
 2 files changed, 18 insertions(+), 15 deletions(-)

diff --git a/jami-android/app/src/main/java/cx/ring/service/JamiJobService.kt b/jami-android/app/src/main/java/cx/ring/service/JamiJobService.kt
index d55978dc6..0ee1b1eb5 100644
--- a/jami-android/app/src/main/java/cx/ring/service/JamiJobService.kt
+++ b/jami-android/app/src/main/java/cx/ring/service/JamiJobService.kt
@@ -32,19 +32,16 @@ class JamiJobService : JobService() {
         try {
             try {
                 ContextCompat.startForegroundService(this, Intent(SyncService.ACTION_START)
+                    .putExtra(SyncService.EXTRA_TIMEOUT, JOB_DURATION)
                     .setClass(this, SyncService::class.java))
             } catch (e: IllegalStateException) {
                 Log.e(TAG, "Error starting service", e)
             }
+            JamiApplication.instance?.startDaemon(this)
             Handler().postDelayed({
                 Log.w(TAG, "jobFinished() $params")
-                try {
-                    startService(Intent(SyncService.ACTION_STOP).setClass(this, SyncService::class.java))
-                } catch (ignored: IllegalStateException) {
-                }
                 jobFinished(params, false)
-            }, JOB_DURATION)
-            JamiApplication.instance?.startDaemon(this)
+            }, JOB_DURATION + 500)
         } catch (e: Exception) {
             Log.e(TAG, "onStartJob failed", e)
         }
@@ -67,7 +64,7 @@ class JamiJobService : JobService() {
         private val TAG = JamiJobService::class.java.name
         const val JOB_INTERVAL = 12 * DateUtils.HOUR_IN_MILLIS
         const val JOB_FLEX = 60 * DateUtils.MINUTE_IN_MILLIS
-        const val JOB_DURATION = 10 * DateUtils.SECOND_IN_MILLIS
+        const val JOB_DURATION = 7 * DateUtils.SECOND_IN_MILLIS
         const val JOB_ID = 3905
     }
 }
\ No newline at end of file
diff --git a/jami-android/app/src/main/java/cx/ring/service/SyncService.kt b/jami-android/app/src/main/java/cx/ring/service/SyncService.kt
index 810128c9d..a6d815590 100644
--- a/jami-android/app/src/main/java/cx/ring/service/SyncService.kt
+++ b/jami-android/app/src/main/java/cx/ring/service/SyncService.kt
@@ -50,9 +50,11 @@ class SyncService : Service() {
             if (notification == null) {
                 val deleteIntent = Intent(ACTION_STOP)
                     .setClass(applicationContext, SyncService::class.java)
+
                 val contentIntent = Intent(Intent.ACTION_VIEW)
                     .setClass(applicationContext, HomeActivity::class.java)
                     .setFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
+
                 notification = NotificationCompat.Builder(this, NotificationServiceImpl.NOTIF_CHANNEL_SYNC)
                     .setContentTitle(getString(R.string.notif_sync_title))
                     .setPriority(NotificationCompat.PRIORITY_DEFAULT)
@@ -77,21 +79,25 @@ class SyncService : Service() {
             val timeout = intent.getLongExtra(EXTRA_TIMEOUT, -1)
             if (timeout > 0) {
                 Handler().postDelayed({
-                    try {
-                        startService(Intent(ACTION_STOP).setClass(applicationContext, SyncService::class.java))
-                    } catch (ignored: IllegalStateException) {
-                    }
+                    stop()
                 }, timeout)
             }
         } else if (ACTION_STOP == action) {
-            serviceUsers--
-            if (serviceUsers == 0) {
+            stop()
+        }
+        return START_NOT_STICKY
+    }
+
+    private fun stop() {
+        serviceUsers--
+        if (serviceUsers == 0) {
+            try {
                 stopForeground(true)
                 stopSelf()
-                notification = null
+            } catch (ignored: IllegalStateException) {
             }
+            notification = null
         }
-        return START_NOT_STICKY
     }
 
     override fun onBind(intent: Intent): IBinder? = null
-- 
GitLab