EventReceiver.java

 1package eu.siacs.conversations.services;
 2
 3import android.content.BroadcastReceiver;
 4import android.content.Context;
 5import android.content.Intent;
 6import android.preference.PreferenceManager;
 7import android.support.v4.content.ContextCompat;
 8import android.util.Log;
 9
10import eu.siacs.conversations.Config;
11import eu.siacs.conversations.utils.Compatibility;
12
13public class EventReceiver extends BroadcastReceiver {
14
15    public static final String SETTING_ENABLED_ACCOUNTS = "enabled_accounts";
16    public static final String EXTRA_NEEDS_FOREGROUND_SERVICE = "needs_foreground_service";
17
18    @Override
19    public void onReceive(final Context context, final Intent originalIntent) {
20        final Intent intentForService = new Intent(context, XmppConnectionService.class);
21        if (originalIntent.getAction() != null) {
22            intentForService.setAction(originalIntent.getAction());
23        } else {
24            intentForService.setAction("other");
25        }
26        final String action = originalIntent.getAction();
27        if (action.equals("ui") || hasEnabledAccounts(context)) {
28            try {
29                if (Compatibility.runsAndTargetsTwentySix(context)) {
30                    intentForService.putExtra(EXTRA_NEEDS_FOREGROUND_SERVICE, true);
31                    ContextCompat.startForegroundService(context, intentForService);
32                } else {
33                    context.startService(intentForService);
34                }
35            } catch (RuntimeException e) {
36                Log.d(Config.LOGTAG, "EventReceiver was unable to start service");
37            }
38        } else {
39            Log.d(Config.LOGTAG, "EventReceiver ignored action " + intentForService.getAction());
40        }
41    }
42
43    public static boolean hasEnabledAccounts(final Context context) {
44        return PreferenceManager.getDefaultSharedPreferences(context).getBoolean(SETTING_ENABLED_ACCOUNTS, true);
45    }
46
47}