diff --git a/play-services-core/src/main/java/org/microg/gms/gcm/McsService.java b/play-services-core/src/main/java/org/microg/gms/gcm/McsService.java
index c1d0b021..08192d0b 100644
--- a/play-services-core/src/main/java/org/microg/gms/gcm/McsService.java
+++ b/play-services-core/src/main/java/org/microg/gms/gcm/McsService.java
@@ -27,6 +27,7 @@ import android.os.IBinder;
import android.os.Looper;
import android.os.PowerManager;
import android.os.SystemClock;
+import android.preference.PreferenceManager;
import android.support.v4.content.WakefulBroadcastReceiver;
import android.util.Log;
@@ -75,7 +76,8 @@ public class McsService extends Service implements Handler.Callback {
public static final String SERVICE_HOST = "mtalk.google.com";
public static final int SERVICE_PORT = 5228;
- public static final int HEARTBEAT_MS = 60000;
+ private static final String PREF_GCM_HEARTBEAT = "gcm_heartbeat_interval";
+ public int heartbeatMs = 60000;
private static Socket sslSocket;
private static McsInputStream inputStream;
@@ -114,6 +116,7 @@ public class McsService extends Service implements Handler.Callback {
@Override
public void onCreate() {
super.onCreate();
+ updateHeartbeatMs();
heartbeatIntent = PendingIntent.getService(this, 0, new Intent(ACTION_HEARTBEAT, null, this, McsService.class), 0);
alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
powerManager = (PowerManager) getSystemService(POWER_SERVICE);
@@ -125,6 +128,10 @@ public class McsService extends Service implements Handler.Callback {
}
}
+ private void updateHeartbeatMs() {
+ heartbeatMs = Integer.parseInt(PreferenceManager.getDefaultSharedPreferences(this).getString(PREF_GCM_HEARTBEAT, "60")) * 1000;
+ }
+
@Override
public IBinder onBind(Intent intent) {
return null;
@@ -156,6 +163,7 @@ public class McsService extends Service implements Handler.Callback {
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
+ updateHeartbeatMs();
synchronized (McsService.class) {
if (rootHandler != null) {
wakeLock.acquire(5000);
@@ -188,7 +196,7 @@ public class McsService extends Service implements Handler.Callback {
inputStream.start();
outputStream.start();
- alarmManager.setInexactRepeating(AlarmManager.ELAPSED_REALTIME, SystemClock.elapsedRealtime(), HEARTBEAT_MS, heartbeatIntent);
+ alarmManager.setInexactRepeating(AlarmManager.ELAPSED_REALTIME, SystemClock.elapsedRealtime(), heartbeatMs, heartbeatIntent);
} catch (Exception e) {
Log.w(TAG, "Exception while connecting!", e);
rootHandler.sendMessage(rootHandler.obtainMessage(MSG_TEARDOWN, e));
@@ -377,9 +385,9 @@ public class McsService extends Service implements Handler.Callback {
sslSocket.close();
} catch (Exception ignored) {
}
-
+
scheduleReconnect(this);
-
+
alarmManager.cancel(heartbeatIntent);
if (wakeLock != null) {
wakeLock.release();
diff --git a/play-services-core/src/main/res/values/strings.xml b/play-services-core/src/main/res/values/strings.xml
index f45d2761..01bed68b 100644
--- a/play-services-core/src/main/res/values/strings.xml
+++ b/play-services-core/src/main/res/values/strings.xml
@@ -59,6 +59,10 @@ This can take a couple of minutes."
Enable Google Cloud Messaging
Google Cloud Messaging is a push notification provider used by many applications. To use it you must enable device checkin.
+ gcm_heartbeat_interval
+ Cloud Messaging heartbeat interval
+ The interval in seconds for the system to heartbeat the Google servers. Increasing this number will reduce battery consumption, but might cause delays on push messages.
+
Components
Location service
diff --git a/play-services-core/src/main/res/xml/gms_preferences.xml b/play-services-core/src/main/res/xml/gms_preferences.xml
index f92d8116..53b650f1 100644
--- a/play-services-core/src/main/res/xml/gms_preferences.xml
+++ b/play-services-core/src/main/res/xml/gms_preferences.xml
@@ -27,6 +27,12 @@
android:key="@string/pref_gcm_enable_mcs"
android:summary="@string/pref_gcm_enable_mcs_summary"
android:title="@string/pref_gcm_enable_mcs_title" />
+