/* * Copyright (C) 2009 University of Washington * * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except * in compliance with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software distributed under the License * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express * or implied. See the License for the specific language governing permissions and limitations under * the License. */ package org.odk.collect.android.widgets; import org.javarosa.core.model.data.IAnswerData; import org.javarosa.core.model.data.StringData; import org.javarosa.form.api.FormEntryPrompt; import org.odk.collect.android.R; import org.odk.collect.android.utilities.StringUtils; import android.content.Context; import android.util.TypedValue; import android.view.Gravity; import android.view.View; import android.view.inputmethod.InputMethodManager; import android.widget.CheckBox; import android.widget.LinearLayout; import android.widget.TextView; /** * Widget that allows user to scan barcodes and add them to the form. * * @author Yaw Anokwa (yanokwa@gmail.com) */ public class TriggerWidget extends QuestionWidget { private CheckBox mTriggerButton; private TextView mStringAnswer; private boolean mInteractive = true; private static String mOK = "OK"; private FormEntryPrompt mPrompt; public FormEntryPrompt getPrompt() { return mPrompt; } public TriggerWidget(Context context, FormEntryPrompt prompt, boolean interactive) { super(context, prompt); if(prompt.getAppearanceHint() != null && prompt.getAppearanceHint().startsWith("floating-")) { this.setVisibility(View.GONE); } mPrompt = prompt; mInteractive = interactive; int padding = (int)Math.floor(context.getResources().getDimension(R.dimen.select_padding)); this.setOrientation(LinearLayout.VERTICAL); mTriggerButton = new CheckBox(getContext()); mTriggerButton.setText(StringUtils.getStringRobust(getContext(), R.string.trigger)); mTriggerButton.setTextSize(TypedValue.COMPLEX_UNIT_DIP, mAnswerFontsize); // mActionButton.setPadding(20, 20, 20, 20); mTriggerButton.setEnabled(!prompt.isReadOnly()); mTriggerButton.setPadding(mTriggerButton.getPaddingLeft(), padding, mTriggerButton.getPaddingRight(), padding); mTriggerButton.setOnClickListener(new View.OnClickListener() { /* * (non-Javadoc) * @see android.view.View.OnClickListener#onClick(android.view.View) */ @Override public void onClick(View v) { if (mTriggerButton.isChecked()) { mStringAnswer.setText(mOK); } else { mStringAnswer.setText(null); } TriggerWidget.this.widgetEntryChanged(); } }); mStringAnswer = new TextView(getContext()); mStringAnswer.setTextSize(TypedValue.COMPLEX_UNIT_DIP, mAnswerFontsize); mStringAnswer.setGravity(Gravity.CENTER); String s = prompt.getAnswerText(); if (s != null) { if (s.equals(mOK)) { mTriggerButton.setChecked(true); } else { mTriggerButton.setChecked(false); } mStringAnswer.setText(s); } if(mInteractive) { // finish complex layout this.addView(mTriggerButton); // this.addView(mStringAnswer); } } /* * (non-Javadoc) * @see org.odk.collect.android.widgets.QuestionWidget#clearAnswer() */ @Override public void clearAnswer() { mStringAnswer.setText(null); mTriggerButton.setChecked(false); } /* * (non-Javadoc) * @see org.odk.collect.android.widgets.QuestionWidget#getAnswer() */ @Override public IAnswerData getAnswer() { if(!mInteractive) { return new StringData(mOK); } String s = mStringAnswer.getText().toString(); if (s == null || s.equals("")) { return null; } else { return new StringData(s); } } /* * (non-Javadoc) * @see org.odk.collect.android.widgets.QuestionWidget#setFocus(android.content.Context) */ @Override public void setFocus(Context context) { // Hide the soft keyboard if it's showing. InputMethodManager inputManager = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE); inputManager.hideSoftInputFromWindow(this.getWindowToken(), 0); } /* * (non-Javadoc) * @see org.odk.collect.android.widgets.QuestionWidget#setOnLongClickListener(android.view.View.OnLongClickListener) */ @Override public void setOnLongClickListener(OnLongClickListener l) { mTriggerButton.setOnLongClickListener(l); mStringAnswer.setOnLongClickListener(l); } /* * (non-Javadoc) * @see org.odk.collect.android.widgets.QuestionWidget#cancelLongPress() */ @Override public void cancelLongPress() { super.cancelLongPress(); mTriggerButton.cancelLongPress(); mStringAnswer.cancelLongPress(); } }