package org.openhab.habdroid.ui.widget; import android.util.Log; import android.view.View; import org.openhab.habclient.HABApplication; import org.openhab.habdroid.ui.OpenHABWidgetArrayAdapter; import org.openhab.habdroid.ui.TouchRepeatListener; /** * Created by Tony Alpskog in 2014. */ public class SetpointRepeatClickListener implements TouchRepeatListener.OnRepeatClickListener { private Float currentUnsentValue; private boolean mIsMinusButton; private OpenHABWidgetArrayAdapter.ViewData mViewData; private IHABWidgetCommunication mHABWidgetCommunication; public SetpointRepeatClickListener(OpenHABWidgetArrayAdapter.ViewData viewData, boolean isMinusButton, IHABWidgetCommunication habWidgetCommunication) { mViewData = viewData; mIsMinusButton = isMinusButton; mHABWidgetCommunication = habWidgetCommunication; } @Override public boolean onRepeat(View v, TouchRepeatListener.RepeatClickEvent event) { switch (event) { case InitialClick: doButtonAction(true); break; case RepeatClick: doButtonAction(false); break; case Done: //Send value mHABWidgetCommunication.sendItemCommand(mViewData.openHABWidget.getItem(), String.valueOf(currentUnsentValue)); currentUnsentValue = null; break; } return false; } private void doButtonAction(boolean isInitialAction) { if(currentUnsentValue == null) currentUnsentValue = Float.valueOf(mViewData.openHABWidget.getItem().getState()).floatValue(); float nextValue = calculateValue(currentUnsentValue, mViewData.openHABWidget.getStep(), mViewData.openHABWidget.getMinValue(), mViewData.openHABWidget.getMaxValue()); Log.d(HABApplication.getLogTag(), String.format("[TouchRepeat] currentUnsentValue(%f) != nextValue(%f)", currentUnsentValue, nextValue)); if (currentUnsentValue != nextValue && mViewData.valueTextView != null) { if (mViewData.splitString.length > 1) { // If value is not empty, edit TextView currentUnsentValue = nextValue; Log.d(HABApplication.getLogTag(), String.format("[TouchRepeat] (%s) New value before %s text update = %f", (mIsMinusButton? "-" : "+"), (isInitialAction? "INITIAL" : "REPEAT"), currentUnsentValue)); mViewData.valueTextView.setText(mViewData.valueTextView.getText().toString().replaceFirst("\\d*\\.?,?\\d*", currentUnsentValue.toString())); } } } private float calculateValue(float current, float step, float min, float max) { current = mIsMinusButton? current - step : current + step; if (current < min) current = min; else if (current > max) current = max; return current; } }