add maintanence intent to renewe instance id

Daniel Gultsch created

Change summary

src/main/java/eu/siacs/conversations/services/EventReceiver.java            |  3 
src/playstore/AndroidManifest.xml                                           |  9 
src/playstore/java/eu/siacs/conversations/services/MaintenanceReceiver.java | 41 
3 files changed, 51 insertions(+), 2 deletions(-)

Detailed changes

src/main/java/eu/siacs/conversations/services/EventReceiver.java 🔗

@@ -9,8 +9,7 @@ import eu.siacs.conversations.persistance.DatabaseBackend;
 public class EventReceiver extends BroadcastReceiver {
 	@Override
 	public void onReceive(Context context, Intent intent) {
-		Intent mIntentForService = new Intent(context,
-				XmppConnectionService.class);
+		Intent mIntentForService = new Intent(context, XmppConnectionService.class);
 		if (intent.getAction() != null) {
 			mIntentForService.setAction(intent.getAction());
 		} else {

src/playstore/AndroidManifest.xml 🔗

@@ -18,6 +18,15 @@
                 <category android:name="com.example.gcm" />
             </intent-filter>
         </receiver>
+
+        <receiver android:name=".services.MaintenanceReceiver"
+                  android:exported="true"
+                  android:permission="android.permission.CHANGE_CONFIGURATION">
+            <intent-filter>
+                <action android:name="eu.siacs.conversations.RENEW_INSTANCE_ID"/>
+            </intent-filter>
+        </receiver>
+
         <service
             android:name=".services.PushMessageReceiver"
             android:exported="false" >

src/playstore/java/eu/siacs/conversations/services/MaintenanceReceiver.java 🔗

@@ -0,0 +1,41 @@
+package eu.siacs.conversations.services;
+
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.util.Log;
+
+import com.google.android.gms.iid.InstanceID;
+
+import java.io.IOException;
+
+import eu.siacs.conversations.Config;
+
+public class MaintenanceReceiver extends BroadcastReceiver {
+	@Override
+	public void onReceive(Context context, Intent intent) {
+		Log.d(Config.LOGTAG,"received intent in maintenance receiver");
+		if ("eu.siacs.conversations.RENEW_INSTANCE_ID".equals(intent.getAction())) {
+			renewInstanceToken(context);
+
+		}
+	}
+
+	private void renewInstanceToken(final Context context) {
+		new Thread(new Runnable() {
+			@Override
+			public void run() {
+				InstanceID instanceID = InstanceID.getInstance(context);
+				try {
+					instanceID.deleteInstanceID();
+					Intent intent = new Intent(context, XmppConnectionService.class);
+					intent.setAction(XmppConnectionService.ACTION_GCM_TOKEN_REFRESH);
+					context.startService(intent);
+				} catch (IOException e) {
+					Log.d(Config.LOGTAG,"unable to renew instance token",e);
+				}
+			}
+		}).start();
+
+	}
+}