package treehou.se.habit.ui.control.builders;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.graphics.PorterDuff;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.ImageButton;
import android.widget.RemoteViews;
import butterknife.BindView;
import butterknife.ButterKnife;
import io.realm.Realm;
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.R;
import treehou.se.habit.core.db.model.ItemDB;
import treehou.se.habit.core.db.model.controller.ButtonCellDB;
import treehou.se.habit.core.db.model.controller.CellDB;
import treehou.se.habit.core.db.model.controller.ControllerDB;
import treehou.se.habit.ui.control.CommandService;
import treehou.se.habit.ui.util.ViewHelper;
import treehou.se.habit.util.Util;
import treehou.se.habit.ui.control.CellFactory;
import treehou.se.habit.ui.control.ControllerUtil;
public class ButtonCellBuilder implements CellFactory.CellBuilder {
private static final String TAG = "ButtonCellBuilder";
@BindView(R.id.img_icon_button) ImageButton imgIcon;
public View build(final Context context, ControllerDB controller, final CellDB cell){
LayoutInflater inflater = LayoutInflater.from(context);
View cellView = inflater.inflate(R.layout.cell_button, null);
ButterKnife.bind(this, cellView);
Log.d(TAG, "Build: Button");
Realm realm = Realm.getDefaultInstance();
final ButtonCellDB buttonCell = ButtonCellDB.getCell(realm, cell);
int[] pallete = ControllerUtil.generateColor(controller, cell);
cellView.setBackgroundColor(pallete[ControllerUtil.INDEX_BUTTON]);
imgIcon.getBackground().setColorFilter(pallete[ControllerUtil.INDEX_BUTTON], PorterDuff.Mode.MULTIPLY);
Log.d(TAG, "Build: Button icon " + buttonCell.getIcon());
imgIcon.setImageDrawable(Util.getIconDrawable(context, buttonCell.getIcon()));
imgIcon.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
ItemDB item = buttonCell.getItem();
if (item != null) {
OHServer server = item.getServer().toGeneric();
IServerHandler serverHandler = new Connector.ServerHandler(server, context);
serverHandler.sendCommand(item.getName(), buttonCell.getCommand());
}
}
});
realm.close();
return cellView;
}
@Override
public RemoteViews buildRemote(final Context context, ControllerDB controller, CellDB cell) {
Realm realm = Realm.getDefaultInstance();
final ButtonCellDB buttonCell = ButtonCellDB.getCell(realm, cell);
RemoteViews cellView = new RemoteViews(context.getPackageName(), R.layout.cell_button);
int[] pallete = ControllerUtil.generateColor(controller, cell);
ViewHelper.colorRemoteDrawable(cellView, R.id.img_icon_button, pallete[ControllerUtil.INDEX_BUTTON]);
cellView.setImageViewBitmap(R.id.img_icon_button, Util.getIconBitmap(context, buttonCell.getIcon()));
Intent intent = CommandService.getActionCommand(context, buttonCell.getCommand(), buttonCell.getItem().getId());
//TODO give intent unique id
PendingIntent pendingIntent = PendingIntent.getService(context, (int) (Math.random() * Integer.MAX_VALUE), intent, PendingIntent.FLAG_CANCEL_CURRENT);
cellView.setOnClickPendingIntent(R.id.img_icon_button, pendingIntent);
realm.close();
return cellView;
}
}