package treehou.se.habit.ui.widgets.factories; import android.util.Log; import android.view.View; import android.widget.SeekBar; import io.realm.Realm; import se.treehou.ng.ohcommunicator.connector.models.OHLinkedPage; 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; public class SliderWidgetFactory implements IWidgetFactory { private static final String TAG = "SliderWidgetFactory"; @Override public WidgetFactory.IWidgetHolder build(final WidgetFactory widgetFactory, OHLinkedPage page, final OHWidget widget, final OHWidget parent) { return new SliderWidgetHolder(widget, parent, widgetFactory); } public static class SliderWidgetHolder implements WidgetFactory.IWidgetHolder { private View itemView; private SeekBar skbDim; private BaseWidgetFactory.BaseWidgetHolder baseHolder; private WidgetFactory factory; public SliderWidgetHolder(OHWidget widget, OHWidget parent, WidgetFactory factory) { this.factory = factory; Realm realm = Realm.getDefaultInstance(); WidgetSettingsDB settings = WidgetSettingsDB.loadGlobal(realm); boolean flat = settings.isCompressedSlider(); realm.close(); itemView = factory.getInflater().inflate(R.layout.item_widget_slider, null); skbDim = (SeekBar) itemView.findViewById(R.id.skb_dim); baseHolder = new BaseWidgetFactory.BaseWidgetHolder.Builder(factory) .setWidget(widget) .setParent(parent) .setFlat(flat) .build(); baseHolder.getSubView().addView(itemView); update(widget); } @Override public View getView() { return baseHolder.getView(); } @Override public void update(final OHWidget widget) { if (widget == null) { return; } skbDim.setOnSeekBarChangeListener(null); try { if(widget.getItem() != null) { float progress = Float.valueOf(widget.getItem().getState()); skbDim.setProgress((int) progress); } }catch (Exception e){ Log.e(TAG, "Failed to update progress", e); } skbDim.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { @Override public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {} @Override public void onStartTrackingTouch(SeekBar seekBar) {} @Override public void onStopTrackingTouch(SeekBar seekBar) { if(widget.getItem() != null) { try { IServerHandler serverHandler = new Connector.ServerHandler(factory.getServer(), factory.getContext()); serverHandler.sendCommand(widget.getItem().getName(), String.valueOf(skbDim.getProgress())); } catch (Exception e) {} } } }); baseHolder.update(widget); } /** * Returns the holders slider view. * * @return sliders. */ public SeekBar getSeekbarView() { return skbDim; } } }