package org.openhab.habdroid.ui.widget; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.widget.RadioGroup; import org.openhab.habclient.HABApplication; import org.openhab.habdroid.R; import org.openhab.domain.model.OpenHABWidget; import org.openhab.domain.model.OpenHABWidgetMapping; import org.openhab.habdroid.ui.OpenHABWidgetArrayAdapter; import java.util.Iterator; /** * Created by Tony Alpskog in 2014. */ public class OpenHABSelectionSwitchWidget extends OpenHABWidgetBase { public OpenHABSelectionSwitchWidget(IHABWidgetCommunication habWidgetCommunication, OpenHABWidgetArrayAdapter.ViewData viewData) { super(habWidgetCommunication, viewData); } @Override public View getWidget() { mViewData.splitString = mViewData.openHABWidget.getLabel().split("\\[|\\]"); if (mViewData.labelTextView != null) mViewData.labelTextView.setText(mViewData.splitString[0]); if (mViewData.splitString.length > 1 && mViewData.valueTextView != null) { // We have some value mViewData.valueTextView.setText(mViewData.splitString[1]); } else { // This is needed to clean up cached TextViews mViewData.valueTextView.setText(""); } RadioGroup sectionSwitchRadioGroup = (RadioGroup)mViewData.widgetView.findViewById(R.id.sectionswitchradiogroup); // As we create buttons in this radio in runtime, we need to remove all // exiting buttons first sectionSwitchRadioGroup.removeAllViews(); sectionSwitchRadioGroup.setTag(mViewData.openHABWidget); Iterator<OpenHABWidgetMapping> sectionMappingIterator = mViewData.openHABWidget.getMappings().iterator(); while (sectionMappingIterator.hasNext()) { OpenHABWidgetMapping widgetMapping = sectionMappingIterator.next(); SegmentedControlButton segmentedControlButton = (SegmentedControlButton) LayoutInflater.from(sectionSwitchRadioGroup.getContext()).inflate( R.layout.openhabwidgetlist_sectionswitchitem_button, sectionSwitchRadioGroup, false); segmentedControlButton.setText(widgetMapping.getLabel()); segmentedControlButton.setTag(widgetMapping.getCommand()); if (mViewData.openHABWidget.getItem() != null && widgetMapping.getCommand() != null) { if (widgetMapping.getCommand().equals(mViewData.openHABWidget.getItem().getState())) { segmentedControlButton.setChecked(true); } else { segmentedControlButton.setChecked(false); } } else { segmentedControlButton.setChecked(false); } segmentedControlButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Log.i(HABApplication.getLogTag(), "Button clicked"); RadioGroup group = (RadioGroup)view.getParent(); if (group.getTag() != null) { OpenHABWidget radioWidget = (OpenHABWidget)group.getTag(); SegmentedControlButton selectedButton = (SegmentedControlButton)view; if (selectedButton.getTag() != null) { mHABWidgetCommunication.sendItemCommand(radioWidget.getItem(), (String) selectedButton.getTag()); } } } }); sectionSwitchRadioGroup.addView(segmentedControlButton); } sectionSwitchRadioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() { public void onCheckedChanged(RadioGroup group, int checkedId) { OpenHABWidget radioWidget = (OpenHABWidget) group.getTag(); SegmentedControlButton selectedButton = (SegmentedControlButton) group.findViewById(checkedId); if (selectedButton != null) { Log.d(HABApplication.getLogTag(), "Selected " + selectedButton.getText()); Log.d(HABApplication.getLogTag(), "Command = " + (String) selectedButton.getTag()); // radioWidget.getItem().sendCommand((String)selectedButton.getTag()); mHABWidgetCommunication.sendItemCommand(radioWidget.getItem(), (String) selectedButton.getTag()); } } }); return mViewData.widgetView; } }