package treehou.se.habit.ui.widgets.factories.switches; import android.util.Log; import android.util.TypedValue; import android.view.View; import android.widget.Switch; import io.realm.Realm; 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.connector.Constants; import treehou.se.habit.core.db.settings.WidgetSettingsDB; import treehou.se.habit.ui.widgets.WidgetFactory; import treehou.se.habit.ui.widgets.factories.BaseWidgetFactory; import treehou.se.habit.util.Util; /** * Widget with switch */ public class SwitchWidgetHolder implements WidgetFactory.IWidgetHolder { private static final String TAG = "SwitchWidgetHolder"; private BaseWidgetFactory.BaseWidgetHolder baseHolder; private Switch swtSwitch; public static SwitchWidgetHolder create(WidgetFactory factory, OHWidget widget, OHWidget parent){ return new SwitchWidgetHolder(widget, parent, factory); } private SwitchWidgetHolder(final OHWidget widget, OHWidget parent, final WidgetFactory factory) { Realm realm = Realm.getDefaultInstance(); WidgetSettingsDB settings = WidgetSettingsDB.loadGlobal(realm); baseHolder = new BaseWidgetFactory.BaseWidgetHolder.Builder(factory) .setWidget(widget) .setFlat(true) .setShowLabel(true) .setParent(parent) .build(); float percentage = Util.toPercentage(settings.getTextSize()); realm.close(); Log.d(TAG, "Switch state " + widget.getItem().getState() + " : " + widget.getItem().getName()); View itemView = factory.getInflater().inflate(R.layout.item_widget_switch, null); swtSwitch = (Switch) itemView.findViewById(R.id.swt_switch); swtSwitch.setTextSize(TypedValue.COMPLEX_UNIT_PX, percentage * swtSwitch.getTextSize()); IServerHandler serverHandler = new Connector.ServerHandler(factory.getServer(), factory.getContext()); getView().setOnClickListener(v -> { boolean newState = !(swtSwitch.isChecked()); Log.d(TAG, widget.getLabel() + " " + newState); if (widget.getItem() != null && !widget.getItem().getStateDescription().isReadOnly()) { swtSwitch.setChecked(newState); serverHandler.sendCommand(widget.getItem().getName(), newState ? Constants.COMMAND_ON : Constants.COMMAND_OFF); } }); baseHolder.getSubView().addView(itemView); update(widget); } @Override public void update(final OHWidget widget) { Log.d(TAG, "update " + widget); if (widget == null || widget.getItem() == null) { return; } boolean isOn = widget.getItem().getState().equals(Constants.COMMAND_ON); swtSwitch.setEnabled(widget.getItem().getStateDescription() == null || !widget.getItem().getStateDescription().isReadOnly()); swtSwitch.setChecked(isOn); baseHolder.update(widget); } @Override public View getView() { return baseHolder.getView(); } }