package de.westnordost.streetcomplete.quests.housenumber;
import android.content.Context;
import android.content.DialogInterface;
import android.os.Bundle;
import android.text.InputType;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.animation.AnimationUtils;
import android.view.inputmethod.InputMethodManager;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import de.westnordost.streetcomplete.R;
import de.westnordost.streetcomplete.quests.AbstractQuestFormAnswerFragment;
import de.westnordost.streetcomplete.view.dialogs.AlertDialogBuilder;
public class AddHousenumberForm extends AbstractQuestFormAnswerFragment
{
public static final String HOUSENUMBER = "housenumber";
private EditText input;
@Override public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState)
{
View view = super.onCreateView(inflater, container, savedInstanceState);
setTitle(R.string.quest_address_title);
View contentView = setContentView(R.layout.quest_housenumber);
input = (EditText) contentView.findViewById(R.id.input);
input.setInputType(InputType.TYPE_CLASS_NUMBER);
final Button toggleKeyboardButton = (Button) contentView.findViewById(R.id.toggleKeyboard);
toggleKeyboardButton.setVisibility(View.INVISIBLE);
toggleKeyboardButton.setText("abc");
input.setOnClickListener(new View.OnClickListener()
{
@Override public void onClick(View v)
{
if(toggleKeyboardButton.getVisibility() != View.VISIBLE)
{
toggleKeyboardButton.startAnimation(
AnimationUtils.loadAnimation(getActivity(), R.anim.fade_in_from_bottom));
}
toggleKeyboardButton.setVisibility(View.VISIBLE);
}
});
toggleKeyboardButton.setOnClickListener(new View.OnClickListener()
{
@Override public void onClick(View v)
{
if((input.getInputType() & InputType.TYPE_CLASS_NUMBER) != 0)
{
input.setInputType(InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS);
toggleKeyboardButton.setText("123");
}
else
{
input.setInputType(InputType.TYPE_CLASS_NUMBER);
toggleKeyboardButton.setText("abc");
}
InputMethodManager imm = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
imm.showSoftInput(input, InputMethodManager.SHOW_IMPLICIT);
}
});
return view;
}
@Override protected void onClickOk()
{
if(!hasChanges())
{
Toast.makeText(getActivity(), R.string.no_changes, Toast.LENGTH_SHORT).show();
return;
}
// i.e. 9999/a, 9/a, 99/9, 99a
String regexNum = "\\p{N}{1,4}((/[\\p{N}\\p{L}])|(/?\\p{L}))?";
// i.e. 95-98 etc.
String completeRegex = "^" + regexNum + "(-" + regexNum + ")?";
if(!getHousenumber().matches(completeRegex))
{
confirmUnusualHousenumber();
}
else
{
applyHousenumberAnswer();
}
}
@Override public boolean hasChanges()
{
return !getHousenumber().isEmpty();
}
private void applyHousenumberAnswer()
{
Bundle answer = new Bundle();
answer.putString(HOUSENUMBER, getHousenumber());
applyFormAnswer(answer);
}
private String getHousenumber()
{
return input.getText().toString().trim();
}
private void confirmUnusualHousenumber()
{
DialogInterface.OnClickListener onYes = new DialogInterface.OnClickListener()
{
@Override
public void onClick(DialogInterface dialog, int which)
{
applyHousenumberAnswer();
}
};
DialogInterface.OnClickListener onNo = new DialogInterface.OnClickListener()
{
@Override
public void onClick(DialogInterface dialog, int which)
{
// nothing, just go back
}
};
new AlertDialogBuilder(getActivity())
.setTitle(R.string.quest_generic_confirmation_title)
.setMessage(R.string.quest_address_unusualHousenumber_confirmation_description)
.setPositiveButton(R.string.quest_generic_confirmation_yes, onYes)
.setNegativeButton(R.string.quest_generic_confirmation_no, onNo)
.show();
}
}