diff --git a/android/AndroidManifest.xml b/android/AndroidManifest.xml index f5b97f6..9508227 100644 --- a/android/AndroidManifest.xml +++ b/android/AndroidManifest.xml @@ -79,6 +79,17 @@ + + + + + + + diff --git a/android/src/com/google/android/apps/chrometophone/DeviceRegistrar.java b/android/src/com/google/android/apps/chrometophone/DeviceRegistrar.java index 6dbc227..b351075 100644 --- a/android/src/com/google/android/apps/chrometophone/DeviceRegistrar.java +++ b/android/src/com/google/android/apps/chrometophone/DeviceRegistrar.java @@ -150,4 +150,22 @@ public class DeviceRegistrar { Configuration config = context.getResources().getConfiguration(); return (config.screenLayout & xlargeBit) == xlargeBit; } + + /** + * Update the device to use GCM instead of C2DM. + */ + static boolean updateC2DM(Context context) { + SharedPreferences prefs = Prefs.get(context); + String c2dmRegId = prefs.getString("deviceRegistrationID", null); + // The old versions of the app that used C2DM stored the registration id in the default + // preferences; the new version stores it in the GCM library. + if (c2dmRegId != null) { + Log.i(TAG, "Updating from C2DM to GCM"); + DeviceRegistrar.unregisterWithServer(context, c2dmRegId, "ac2dm"); + GCMRegistrar.register(context, DeviceRegistrar.SENDER_ID); + return true; + } else { + return false; + } + } } diff --git a/android/src/com/google/android/apps/chrometophone/HistoryActivity.java b/android/src/com/google/android/apps/chrometophone/HistoryActivity.java index 3bbe824..ebe058e 100644 --- a/android/src/com/google/android/apps/chrometophone/HistoryActivity.java +++ b/android/src/com/google/android/apps/chrometophone/HistoryActivity.java @@ -44,14 +44,8 @@ public class HistoryActivity extends Activity implements OnChildClickListener { public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - SharedPreferences prefs = Prefs.get(this); - String c2dmRegId = prefs.getString("deviceRegistrationID", null); - if (c2dmRegId != null) { - // this is an update from the version that uses C2DM: must - // unregister and register again using GCM - DeviceRegistrar.unregisterWithServer(this, c2dmRegId, "ac2dm"); - GCMRegistrar.register(this, DeviceRegistrar.SENDER_ID); - } else { + boolean isGcmUpdate = DeviceRegistrar.updateC2DM(this); + if (!isGcmUpdate) { // Run the setup first if necessary String gcmRegId = GCMRegistrar.getRegistrationId(this); if (gcmRegId.equals("")) { diff --git a/android/src/com/google/android/apps/chrometophone/Updater.java b/android/src/com/google/android/apps/chrometophone/Updater.java new file mode 100644 index 0000000..2e0490b --- /dev/null +++ b/android/src/com/google/android/apps/chrometophone/Updater.java @@ -0,0 +1,22 @@ +package com.google.android.apps.chrometophone; + +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; +import android.util.Log; + +/** + * Receiver called when the application is updated (Android 3.1+), it will check + * if the previous version used C2DM and, if so, update to GCM. + */ +public class Updater extends BroadcastReceiver { + + private static final String TAG = "Updater"; + + @Override + public void onReceive(Context context, Intent intent) { + Log.d(TAG, "onReceive(" + intent + ")"); + DeviceRegistrar.updateC2DM(context); + } + +}