package org.commcare.views.widgets;
import android.content.Context;
import android.content.Intent;
import android.text.Editable;
import android.text.TextWatcher;
import android.util.TypedValue;
import android.view.Gravity;
import org.commcare.android.javarosa.IntentCallout;
import org.commcare.logic.PendingCalloutInterface;
import org.javarosa.core.model.data.IAnswerData;
import org.javarosa.form.api.FormEntryPrompt;
/**
* Widget that allows user to scan barcodes and add them to the form.
*/
public class BarcodeWidget extends IntentWidget implements TextWatcher {
private boolean hasTextChanged;
public BarcodeWidget(Context context, FormEntryPrompt prompt, Intent i, IntentCallout ic,
PendingCalloutInterface pendingCalloutInterface) {
super(context, prompt, i, ic, pendingCalloutInterface,
"intent.barcode.get", "intent.barcode.update", "barcode.reader.missing",
ic.getAppearance() != null && ic.getAppearance().contains("editable"));
}
@Override
public void setupTextView() {
if (isEditable) {
mStringAnswer.addTextChangedListener(this);
mStringAnswer.setTextSize(TypedValue.COMPLEX_UNIT_DIP, mAnswerFontSize);
mStringAnswer.setGravity(Gravity.CENTER);
String s = mPrompt.getAnswerText();
if (s != null) {
mStringAnswer.setText(s);
}
addView(mStringAnswer);
} else {
super.setupTextView();
}
}
@Override
public IAnswerData getAnswer() {
if (isEditable && hasTextChanged) {
storeTextAnswerToForm();
}
return mPrompt.getAnswerValue();
}
private void storeTextAnswerToForm() {
hasTextChanged = false;
String textFieldAnswer = mStringAnswer.getText().toString();
ic.processBarcodeResponse(mPrompt.getIndex().getReference(), textFieldAnswer);
}
@Override
protected void loadCurrentAnswerToIntent() {
// zero out super class implementation
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void afterTextChanged(Editable s) {
hasTextChanged = true;
}
}