PushMessageReceiver.java

 1package eu.siacs.conversations.services;
 2
 3import android.content.Intent;
 4import android.support.v4.content.ContextCompat;
 5import android.util.Log;
 6
 7import com.google.firebase.messaging.FirebaseMessagingService;
 8import com.google.firebase.messaging.RemoteMessage;
 9
10import java.util.Map;
11
12import eu.siacs.conversations.Config;
13import eu.siacs.conversations.utils.Compatibility;
14
15public class PushMessageReceiver extends FirebaseMessagingService {
16
17	@Override
18	public void onMessageReceived(RemoteMessage message) {
19		if (!EventReceiver.hasEnabledAccounts(this)) {
20			Log.d(Config.LOGTAG,"PushMessageReceiver ignored message because no accounts are enabled");
21			return;
22		}
23		final Map<String, String> data = message.getData();
24		final Intent intent = new Intent(this, XmppConnectionService.class);
25		intent.setAction(XmppConnectionService.ACTION_FCM_MESSAGE_RECEIVED);
26		intent.putExtra("account", data.get("account"));
27		try {
28			if (Compatibility.runsAndTargetsTwentySix(this)) {
29				intent.putExtra(EventReceiver.EXTRA_NEEDS_FOREGROUND_SERVICE, true);
30				ContextCompat.startForegroundService(this, intent);
31			} else {
32				startService(intent);
33			}
34		} catch (IllegalStateException e) {
35			Log.e(Config.LOGTAG,"PushMessageReceiver is not allowed to start service after receiving message");
36		}
37	}
38
39	@Override
40	public void onNewToken(String token) {
41		if (!EventReceiver.hasEnabledAccounts(this)) {
42			Log.d(Config.LOGTAG,"PushMessageReceiver ignored new token because no accounts are enabled");
43			return;
44		}
45		final Intent intent = new Intent(this, XmppConnectionService.class);
46		intent.setAction(XmppConnectionService.ACTION_FCM_TOKEN_REFRESH);
47		try {
48			if (Compatibility.runsAndTargetsTwentySix(this)) {
49				intent.putExtra(EventReceiver.EXTRA_NEEDS_FOREGROUND_SERVICE, true);
50				ContextCompat.startForegroundService(this, intent);
51			} else {
52				startService(intent);
53			}
54		} catch (IllegalStateException e) {
55			Log.e(Config.LOGTAG,"PushMessageReceiver is not allowed to start service after receiving new token");
56		}
57	}
58
59}