package treehou.se.habit.ui.widgets.factories.switches; import android.graphics.PorterDuff; import android.util.Log; import android.view.View; import android.widget.Button; import io.realm.Realm; import se.treehou.ng.ohcommunicator.connector.models.OHMapping; import se.treehou.ng.ohcommunicator.connector.models.OHWidget; 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.settings.WidgetSettingsDB; import treehou.se.habit.ui.widgets.WidgetFactory; import treehou.se.habit.ui.widgets.factories.BaseWidgetFactory; /** * Widget with single button */ public class SingleButtonWidgetHolder implements WidgetFactory.IWidgetHolder { private static final String TAG = "SingleButtonBuilder"; private BaseWidgetFactory.BaseWidgetHolder baseHolder; private WidgetFactory factory; private Button btnSingle; public static SingleButtonWidgetHolder create(WidgetFactory factory, OHWidget widget, OHWidget parent){ return new SingleButtonWidgetHolder(widget, parent, factory); } private SingleButtonWidgetHolder(final OHWidget widget, OHWidget parent, final WidgetFactory factory) { this.factory = factory; Realm realm = Realm.getDefaultInstance(); WidgetSettingsDB settings = WidgetSettingsDB.loadGlobal(realm); baseHolder = new BaseWidgetFactory.BaseWidgetHolder.Builder(factory) .setWidget(widget) .setFlat(settings.isCompressedSingleButton()) .setShowLabel(true) .setParent(parent) .build(); realm.close(); View itemView = factory.getInflater().inflate(R.layout.item_widget_switch_mapping_single, null); btnSingle = (Button) itemView.findViewById(R.id.btnSingle); if(widget.getMapping().size() == 1){ OHMapping mapping = widget.getMapping().get(0); if(widget.getItem() != null && mapping.getCommand().equals(widget.getItem().getState())) { btnSingle.getBackground().setColorFilter(factory.getContext().getResources().getColor(R.color.colorAccent), PorterDuff.Mode.SRC_ATOP); } else { btnSingle.getBackground().clearColorFilter(); } } baseHolder.getSubView().addView(itemView); update(widget); } @Override public void update(final OHWidget widget) { Log.d(TAG, "update " + widget); if (widget == null) { return; } final OHMapping mapSingle = widget.getMapping().get(0); btnSingle.setText(mapSingle.getLabel()); IServerHandler serverHandler = new Connector.ServerHandler(factory.getServer(), factory.getContext()); btnSingle.setOnClickListener(v -> serverHandler.sendCommand(widget.getItem().getName(), mapSingle.getCommand())); baseHolder.update(widget); } @Override public View getView() { return baseHolder.getView(); } }