package treehou.se.habit.ui.widgets.factories.switches;
import android.util.Log;
import android.util.TypedValue;
import android.view.View;
import android.widget.CompoundButton;
import android.widget.RadioButton;
import android.widget.RadioGroup;
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;
import treehou.se.habit.util.Util;
/**
* Widget with single button
*/
public class PickerWidgetHolder implements WidgetFactory.IWidgetHolder {
private static final String TAG = "PickerWidgetHolder";
private BaseWidgetFactory.BaseWidgetHolder baseHolder;
private WidgetFactory factory;
private RadioGroup rgpMapping;
public static PickerWidgetHolder create(WidgetFactory factory, OHWidget widget, OHWidget parent){
return new PickerWidgetHolder(widget, parent, factory);
}
private PickerWidgetHolder(final OHWidget widget, OHWidget parent, final WidgetFactory factory) {
this.factory = factory;
baseHolder = new BaseWidgetFactory.BaseWidgetHolder.Builder(factory)
.setWidget(widget)
.setShowLabel(true)
.setParent(parent)
.build();
View itemView = factory.getInflater().inflate(R.layout.item_widget_switch_mapping, null);
rgpMapping = (RadioGroup) itemView.findViewById(R.id.rgp_mapping);
baseHolder.getSubView().addView(itemView);
update(widget);
}
@Override
public void update(final OHWidget widget) {
Log.d(TAG, "update " + widget);
if (widget == null) {
return;
}
Realm realm = Realm.getDefaultInstance();
WidgetSettingsDB settings = WidgetSettingsDB.loadGlobal(realm);
float percentage = Util.toPercentage(settings.getTextSize());
realm.close();
//TODO do this smother
rgpMapping.removeAllViews();
for (final OHMapping mapping : widget.getMapping()) {
RadioButton rbtMap = (RadioButton) factory.getInflater().inflate(R.layout.radio_button, null);
rbtMap.setTextSize(TypedValue.COMPLEX_UNIT_PX, percentage*rbtMap.getTextSize());
rbtMap.setText(mapping.getLabel());
rbtMap.setId(rbtMap.hashCode());
if (widget.getItem().getState().equals(mapping.getCommand())) {
rbtMap.setChecked(true);
}
rbtMap.setOnCheckedChangeListener((buttonView, isChecked) -> {
if (isChecked) {
IServerHandler serverHandler = new Connector.ServerHandler(factory.getServer(), factory.getContext());
serverHandler.sendCommand(widget.getItem().getName(), mapping.getCommand());
}
});
rgpMapping.addView(rbtMap);
}
baseHolder.update(widget);
}
@Override
public View getView() {
return baseHolder.getView();
}
}