package treehou.se.habit.ui.control;
import android.app.IntentService;
import android.content.Intent;
import android.content.Context;
import android.util.Log;
import io.realm.Realm;
import se.treehou.ng.ohcommunicator.connector.models.OHItem;
import se.treehou.ng.ohcommunicator.connector.models.OHServer;
import se.treehou.ng.ohcommunicator.services.Connector;
import se.treehou.ng.ohcommunicator.services.IServerHandler;
import treehou.se.habit.connector.Communicator;
import treehou.se.habit.core.db.model.ItemDB;
/**
* An {@link IntentService} subclass for handling asynchronous task requests in
* a service on a separate handler thread.
* <p/>
* TODO: Customize class - update intent actions, extra parameters and static
* helper methods.
*/
public class CommandService extends IntentService {
private static final String TAG = "CommandService";
private static final String ARG_ITEM = "ARG_ITEM";
private static final String ACTION_COMMAND = "ACTION_COMMAND";
private static final String ARG_COMMAND = "ARG_COMMAND";
private static final String ACTION_INC_DEC = "ACTION_INC_DEC";
private static final String ARG_MAX = "ARG_MAX";
private static final String ARG_MIN = "ARG_MIN";
private static final String ARG_VALUE = "ARG_VALUE";
public static void startActionCommand(Context context, String command, OHItem item) {
Intent intent = new Intent(context, CommandService.class);
intent.setAction(ACTION_COMMAND);
intent.putExtra(ARG_COMMAND, command);
intent.putExtra(ARG_ITEM, item.getId());
context.startService(intent);
}
public static Intent getActionCommand(Context context, String command, long itemId) {
Intent intent = new Intent(context, CommandService.class);
intent.setAction(ACTION_COMMAND);
intent.putExtra(ARG_COMMAND, command);
intent.putExtra(ARG_ITEM, itemId);
return intent;
}
public static Intent getActionIncDec(Context context, int min, int max, int value, long itemId) {
Intent intent = new Intent(context, CommandService.class);
intent.setAction(ACTION_INC_DEC);
intent.putExtra(ARG_MIN, min);
intent.putExtra(ARG_MAX, max);
intent.putExtra(ARG_VALUE, value);
intent.putExtra(ARG_ITEM, itemId);
return intent;
}
public CommandService() {
super("CommandService");
}
@Override
protected void onHandleIntent(Intent intent) {
Log.d(TAG, "onHandleIntent");
Realm realm = Realm.getDefaultInstance();
if (intent != null) {
final long itemId = intent.getLongExtra(ARG_ITEM,-1);
final String action = intent.getAction();
if (ACTION_COMMAND.equals(action) && itemId > 0) {
final String command = intent.getStringExtra(ARG_COMMAND);
ItemDB item = ItemDB.load(realm, itemId);
handleActionCommand(command, item.toGeneric());
}else if (ACTION_INC_DEC.equals(action) && itemId > 0) {
final int min = intent.getIntExtra(ARG_MIN,0);
final int max = intent.getIntExtra(ARG_MAX,0);
final int value = intent.getIntExtra(ARG_VALUE,0);
ItemDB item = ItemDB.load(realm, itemId);
Communicator communicator = Communicator.instance(this);
OHServer server = item.getServer().toGeneric();
communicator.incDec(server, item.getName(), value, min, max);
}
}
realm.close();
}
private void handleActionCommand(String command, OHItem item) {
OHServer server = item.getServer();
IServerHandler serverHandler = new Connector.ServerHandler(server, this);
serverHandler.sendCommand(item.getName(), command);
}
}