in.ceeq.services.CommandService.java Source code

Java tutorial

Introduction

Here is the source code for in.ceeq.services.CommandService.java

Source

/**
 * 
 * @author Rachit Mishra
 * @licence The MIT License (MIT) Copyright (c) <2013> <Rachit Mishra> 
 *
 */

package in.ceeq.services;

import in.ceeq.R;
import in.ceeq.commons.Utils;
import in.ceeq.home.HomeActivity;
import in.ceeq.receivers.CloudMessagesReceiver;
import in.ceeq.receivers.MobileMessagesReceiver;
import in.ceeq.services.LocationService.RequestType;
import android.app.IntentService;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.NotificationCompat;

import com.google.android.gms.gcm.GoogleCloudMessaging;

public class CommandService extends IntentService {

    public CommandService() {
        super("ServiceCommander");
        Utils.d("Service commander started...");
    }

    public static final int NOTIFICATION_ID = 1;
    public static final String ACTION = "action";
    public static final String SENDER_ADDRESS = "senderAddress";
    public static final int NONE = 0;
    public static final int SIREN_ON = 1;
    public static final int SIREN_OFF = 2;
    public static final int RINGER_ON = 3;
    public static final int BACKUP = 4;
    public static final int WIPE = 5;
    public static final int LOCK = 6;
    public static final int SEND_CALLS_DETAILS_MESSAGE = 7;
    public static final int ENABLE_TRACKER = 8;
    public static final int SEND_CURRENT_DETAILS_MESSAGE = 9;
    public static final int SEND_PIN_FAIL_MESSAGE = 10;
    public static final int GET_LOCATION_FOR_MESSAGE = 11;
    public static final int GET_LOCATION_FOR_BLIP = 12;
    public static final int GET_LOCATION_FOR_PROTECT = 13;
    public static final int SEND_SIM_CHANGE_MESSAGE = 14;
    public static final int SEND_PROTECT_MESSAGE = 15;
    public static final int SEND_CURRENT_LOCATION_MESSAGE = 16;
    public static final int SEND_NEW_LOCATION_MESSAGE = 17;
    public static final int SEND_BLIP_TO_SERVER = 18;
    public static final int SEND_LOCATION_TO_SERVER = 19;
    public static final int GET_LOCATION_FOR_CURRENT_DETAILS_MESSAGE = 20;
    public static final int RINGER_OFF = 21;

    private NotificationManager mNotificationManager;
    private int commandType;
    private GoogleCloudMessaging gcm;

    @Override
    protected void onHandleIntent(Intent intent) {
        Utils.d("Received command...");
        Bundle extras = intent.getExtras();
        gcm = GoogleCloudMessaging.getInstance(this);
        String messageType = gcm.getMessageType(intent);
        String senderAddress = extras.getString(SENDER_ADDRESS);
        commandType = extras.getInt(ACTION);
        Utils.d("Command Type... " + commandType);

        switch (commandType) {
        case SIREN_ON:
            startSiren();
            break;
        case SIREN_OFF:
            stopRinger();
            break;
        case RINGER_ON:
            startRinger();
            break;
        case RINGER_OFF:
            stopRinger();
            break;
        case BACKUP:
            backup();
            break;
        case ENABLE_TRACKER:
            Intent tracker = new Intent(this, TrackerService.class);
            startService(tracker);
            break;
        case WIPE:
            Utils.completeWipe(this);
            break;
        case LOCK:
            break;
        case GET_LOCATION_FOR_PROTECT:
            Intent getProtect = new Intent(this, LocationService.class);
            getProtect.putExtra(ACTION, RequestType.PROTECT);
            startService(getProtect);
            break;
        case GET_LOCATION_FOR_MESSAGE:
            Intent getLocation = new Intent(this, LocationService.class);
            getLocation.putExtra(ACTION, RequestType.MESSAGE).putExtra(SENDER_ADDRESS, senderAddress);
            startService(getLocation);
            break;
        case GET_LOCATION_FOR_CURRENT_DETAILS_MESSAGE:
            Intent getNowLocation = new Intent(this, LocationService.class);
            getNowLocation.putExtra(ACTION, RequestType.NOW).putExtra(SENDER_ADDRESS, senderAddress);
            startService(getNowLocation);
            break;
        case GET_LOCATION_FOR_BLIP:
            Intent getBlip = new Intent(this, LocationService.class);
            getBlip.putExtra(ACTION, RequestType.BLIP);
            startService(getBlip);
            break;
        case SEND_BLIP_TO_SERVER:

            break;
        case SEND_LOCATION_TO_SERVER:
            break;
        case SEND_CALLS_DETAILS_MESSAGE:
            Utils.sendMessage(this, senderAddress, Utils.CALLS_M);
            break;
        case SEND_CURRENT_DETAILS_MESSAGE:
            Utils.sendMessage(this, senderAddress, Utils.NOW_M);
            break;
        case SEND_CURRENT_LOCATION_MESSAGE:
            Utils.sendMessage(this, senderAddress, Utils.LOCATION_M);
            break;
        case SEND_NEW_LOCATION_MESSAGE:
            Utils.sendMessage(this, senderAddress, Utils.NEW_LOCATION_M);
            break;
        case SEND_PROTECT_MESSAGE:
            Utils.sendMessage(this, Utils.getStringPrefs(this, Utils.EMERGENCY_CONTACT_NUMBER), Utils.PROTECT_ME_M);
        case SEND_SIM_CHANGE_MESSAGE:
            Utils.sendMessage(this, Utils.getStringPrefs(this, Utils.EMERGENCY_CONTACT_NUMBER), Utils.SIM_CHANGE_M);
            Utils.lock(this);
            break;
        case SEND_PIN_FAIL_MESSAGE:
            Utils.sendMessage(this, senderAddress, Utils.FAIL_M);
            break;
        default:
            break;
        }

        if (!extras.isEmpty()) {
            if (GoogleCloudMessaging.MESSAGE_TYPE_SEND_ERROR.equals(messageType)) {
                sendNotification("Send error: " + extras.toString());
            } else if (GoogleCloudMessaging.MESSAGE_TYPE_DELETED.equals(messageType)) {
                sendNotification("Deleted messages on server: " + extras.toString());
            } else if (GoogleCloudMessaging.MESSAGE_TYPE_MESSAGE.equals(messageType)) {
            }
        }

        CloudMessagesReceiver.completeWakefulIntent(intent);
        MobileMessagesReceiver.completeWakefulIntent(intent);

    }

    private void startSiren() {
        Intent startSiren = new Intent(this, RingerService.class);
        startSiren.setAction(RingerService.SIREN_START_ACTION);
        startService(startSiren);
    }

    private void startRinger() {
        Intent startSiren = new Intent(this, RingerService.class);
        startSiren.setAction(RingerService.RINGER_START_ACTION);
        startService(startSiren);
    }

    private void stopRinger() {
        Intent stopSiren = new Intent(this, RingerService.class);
        stopSiren.setAction(RingerService.STOP_ACTION);
        stopService(stopSiren);
    }

    private void backup() {
        Intent startBackup = new Intent(this, BackupService.class);
        startBackup.setAction(BackupService.ACTION_BACKUP);
        startBackup.putExtra(BackupService.ACTION_DATA, BackupService.ACTION_DATA_ALL);
        startService(startBackup);
    }

    private void sendNotification(String msg) {
        mNotificationManager = (NotificationManager) this.getSystemService(Context.NOTIFICATION_SERVICE);

        PendingIntent contentIntent = PendingIntent.getActivity(this, 0, new Intent(this, HomeActivity.class), 0);

        NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this)
                .setSmallIcon(R.drawable.ic_launcher).setContentTitle("GCM Notification")
                .setStyle(new NotificationCompat.BigTextStyle().bigText(msg)).setContentText(msg);

        mBuilder.setContentIntent(contentIntent);
        mNotificationManager.notify(NOTIFICATION_ID, mBuilder.build());
    }
}