package org.openhab.habclient.rule; import android.app.Activity; import android.content.DialogInterface; import android.os.Bundle; import android.widget.Toast; import org.openhab.domain.IOpenHABWidgetProvider; import org.openhab.domain.IUnitEntityDataTypeProvider; import org.openhab.domain.model.OpenHABWidget; import org.openhab.domain.rule.IEntityDataType; import org.openhab.domain.rule.IRuleOperationBuildListener; import org.openhab.domain.util.StringHandler; import org.openhab.habclient.HABApplication; import org.openhab.habclient.dagger.DaggerUnitOperandSelectionComponent; import org.openhab.habclient.dagger.UnitOperandSelectionComponent; import org.openhab.habclient.util.StringSelectionDialogFragment; import java.util.List; import javax.inject.Inject; /** * Created by Tony Alpskog in 2014. */ public class UnitOperandSelectionDialogFragment extends StringSelectionDialogFragment<String> { private static final String ARG_POSITION = "position"; private int mOperandIndex; private IRuleOperationBuildListener mListener; @Inject IOpenHABWidgetProvider mWidgetProvider; @Inject IUnitEntityDataTypeProvider mUnitEntityDataTypeProvider; public static UnitOperandSelectionDialogFragment newInstance(List<String> source, String dialogTitle, int position, boolean showNextButton) { final UnitOperandSelectionDialogFragment fragment = new UnitOperandSelectionDialogFragment(); final Bundle args = new Bundle(); args.putString(ARG_DIALOG_TITLE, dialogTitle); args.putBoolean(ARG_SHOW_NEXT_BUTTON, showNextButton); args.putInt(ARG_POSITION, position); fragment.setArguments(args); fragment.setSourceList(source); return fragment; } @Override public void onAttach(Activity activity) { super.onAttach(activity); } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); UnitOperandSelectionComponent component = DaggerUnitOperandSelectionComponent.builder() .appComponent(((HABApplication) getActivity().getApplication()).appComponent()) .build(); component.inject(this); Bundle args = getArguments(); if(args == null) return; mOperandIndex = args.getInt(ARG_POSITION); mListener = ((RuleEditActivity)getActivity()).getRuleOperationBuildListener(); } @Override public void onClick(DialogInterface dialog, int which) { if (mListener != null) { switch (which) { case DialogInterface.BUTTON_POSITIVE: case DialogInterface.BUTTON_NEUTRAL: if(StringHandler.isNullOrEmpty(mSelectedItem.toString())) { Toast.makeText(getActivity(), "No selection", Toast.LENGTH_SHORT).show(); break; } final OpenHABWidget widget = mWidgetProvider.getWidgetByItemName(mSelectedItem.toString()); final IEntityDataType entityDataType = mUnitEntityDataTypeProvider.getUnitEntityDataType(widget); final IRuleOperationBuildListener.RuleOperationDialogButtonInterface buttonInterface = which == DialogInterface.BUTTON_POSITIVE ? IRuleOperationBuildListener.RuleOperationDialogButtonInterface.NEXT : IRuleOperationBuildListener.RuleOperationDialogButtonInterface.DONE; mListener.onOperationBuildResult(IRuleOperationBuildListener.RuleOperationSelectionInterface.UNIT, buttonInterface, entityDataType, mOperandIndex, null); break; default: mListener.onOperationBuildResult(IRuleOperationBuildListener.RuleOperationSelectionInterface.UNIT , IRuleOperationBuildListener.RuleOperationDialogButtonInterface.CANCEL , null, 0, null); break; } } else throw new IllegalArgumentException("listener is null"); } }