From a49cf71f54e8c1eb12ad2389ec3a48344b01937c Mon Sep 17 00:00:00 2001 From: Sylvain Berfini Date: Mon, 6 Jul 2015 15:43:44 +0200 Subject: [PATCH] Kill service when task manager kills UI and restart it when receiving push notification --- res/raw-sw600dp/linphonerc_default | 1 + res/raw/linphonerc_default | 1 + res/values/non_localizable_custom.xml | 2 +- src/org/linphone/LinphoneService.java | 12 ++++++++++++ src/org/linphone/gcm/GCMService.java | 7 ++++++- 5 files changed, 21 insertions(+), 2 deletions(-) diff --git a/res/raw-sw600dp/linphonerc_default b/res/raw-sw600dp/linphonerc_default index ec26f80bb..8ee2fbaba 100644 --- a/res/raw-sw600dp/linphonerc_default +++ b/res/raw-sw600dp/linphonerc_default @@ -14,6 +14,7 @@ size=vga [app] sharing_server=https://www.linphone.org:444/lft.php tunnel=disabled +push_notification=1 [tunnel] host= diff --git a/res/raw/linphonerc_default b/res/raw/linphonerc_default index f1e2c9ff2..27dcac0ab 100644 --- a/res/raw/linphonerc_default +++ b/res/raw/linphonerc_default @@ -14,6 +14,7 @@ size=qvga [app] sharing_server=https://www.linphone.org:444/lft.php tunnel=disabled +push_notification=1 [tunnel] host= diff --git a/res/values/non_localizable_custom.xml b/res/values/non_localizable_custom.xml index 4e144a698..18ac3ec9c 100644 --- a/res/values/non_localizable_custom.xml +++ b/res/values/non_localizable_custom.xml @@ -73,7 +73,6 @@ false true false - false false @@ -91,5 +90,6 @@ linphone-android-photo-%s.jpg true + true diff --git a/src/org/linphone/LinphoneService.java b/src/org/linphone/LinphoneService.java index 18b0b48a2..2b5ec9c7b 100644 --- a/src/org/linphone/LinphoneService.java +++ b/src/org/linphone/LinphoneService.java @@ -35,6 +35,7 @@ import org.linphone.core.LinphoneProxyConfig; import org.linphone.mediastream.Log; import org.linphone.mediastream.Version; +import android.annotation.TargetApi; import android.app.Activity; import android.app.AlarmManager; import android.app.Notification; @@ -553,6 +554,17 @@ public final class LinphoneService extends Service { public IBinder onBind(Intent intent) { return null; } + + @TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH) + @Override + public void onTaskRemoved(Intent rootIntent) { + if (getResources().getBoolean(R.bool.kill_service_with_task_manager)) { + Log.d("Task removed, stop service"); + LinphoneManager.getLc().setNetworkReachable(false); + stopSelf(); + } + super.onTaskRemoved(rootIntent); + } @Override public synchronized void onDestroy() { diff --git a/src/org/linphone/gcm/GCMService.java b/src/org/linphone/gcm/GCMService.java index 1018fb569..59906ef77 100644 --- a/src/org/linphone/gcm/GCMService.java +++ b/src/org/linphone/gcm/GCMService.java @@ -18,8 +18,11 @@ along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ +import static android.content.Intent.ACTION_MAIN; + import org.linphone.LinphoneManager; import org.linphone.LinphonePreferences; +import org.linphone.LinphoneService; import org.linphone.R; import org.linphone.UIThreadDispatcher; import org.linphone.mediastream.Log; @@ -47,7 +50,9 @@ public class GCMService extends GCMBaseIntentService { @Override protected void onMessage(Context context, Intent intent) { Log.d("Push notification received"); - if (LinphoneManager.isInstanciated() && LinphoneManager.getLc().getCallsNb() == 0) { + if (!LinphoneService.isReady()) { + startService(new Intent(ACTION_MAIN).setClass(this, LinphoneService.class)); + } else if (LinphoneManager.isInstanciated() && LinphoneManager.getLc().getCallsNb() == 0) { UIThreadDispatcher.dispatch(new Runnable(){ @Override public void run() {