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" /> +