package de.westnordost.streetcomplete.quests.road_name; import android.content.DialogInterface; import android.os.Bundle; import android.support.v7.app.AlertDialog; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import java.util.ArrayList; import java.util.List; import de.westnordost.streetcomplete.R; import de.westnordost.streetcomplete.quests.AbstractQuestFormAnswerFragment; import de.westnordost.streetcomplete.view.dialogs.AlertDialogBuilder; public class AddRoadNameForm extends AbstractQuestFormAnswerFragment { public static final String NO_NAME = "no_name"; public static final String NAME = "name"; public static final String NO_PROPER_ROAD = "no_proper_road"; public static final int IS_SERVICE = 1, IS_LINK = 2, IS_TRACK = 3; private AutoCorrectAbbreviationsEditText nameInput; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = super.onCreateView(inflater, container, savedInstanceState); setTitle(R.string.quest_streetName_title); View contentView = setContentView(R.layout.quest_roadname); nameInput = (AutoCorrectAbbreviationsEditText) contentView.findViewById(R.id.nameInput); return view; } @Override protected void onClickOk() { if(!validate()) return; applyNameAnswer(); } @Override protected List<Integer> getOtherAnswerResourceIds() { List<Integer> answers = super.getOtherAnswerResourceIds(); answers.add(R.string.quest_name_answer_noName); answers.add(R.string.quest_streetName_answer_noProperStreet); return answers; } @Override protected boolean onClickOtherAnswer(int itemResourceId) { if(super.onClickOtherAnswer(itemResourceId)) return true; if(itemResourceId == R.string.quest_name_answer_noName) { confirmNoStreetName(); return true; } else if (itemResourceId == R.string.quest_streetName_answer_noProperStreet) { selectNoProperStreetWhatThen(); } return false; } private void applyNameAnswer() { Bundle data = new Bundle(); String name = nameInput.getText().toString().trim(); data.putString(NAME, name); applyFormAnswer(data); } private boolean validate() { String name = nameInput.getText().toString().trim(); if(name.isEmpty()) { nameInput.setError(getResources().getString(R.string.quest_generic_error_field_empty)); return false; } if(name.contains(".") || nameInput.containsAbbreviations()) { confirmPossibleAbbreviation(); return false; } return true; } private void confirmPossibleAbbreviation() { DialogInterface.OnClickListener onYes = new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { applyNameAnswer(); } }; 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_streetName_nameWithAbbreviations_confirmation_title) .setMessage(R.string.quest_streetName_nameWithAbbreviations_confirmation_description) .setPositiveButton(R.string.quest_streetName_nameWithAbbreviations_confirmation_positive, onYes) .setNegativeButton(R.string.quest_generic_confirmation_no, onNo) .show(); } private void confirmNoStreetName() { DialogInterface.OnClickListener onYes = new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { Bundle data = new Bundle(); data.putBoolean(NO_NAME, true); applyImmediateAnswer(data); } }; 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_name_answer_noName_confirmation_title) .setMessage(R.string.quest_streetName_answer_noName_confirmation_description) .setPositiveButton(R.string.quest_name_noName_confirmation_positive, onYes) .setNegativeButton(R.string.quest_generic_confirmation_no, onNo) .show(); } private void selectNoProperStreetWhatThen() { final String linkRoad = getResources().getString(R.string.quest_streetName_answer_noProperStreet_link), serviceRoad = getResources().getString(R.string.quest_streetName_answer_noProperStreet_service), trackRoad = getResources().getString(R.string.quest_streetName_answer_noProperStreet_track), leaveNote = getResources().getString(R.string.quest_streetName_answer_noProperStreet_leaveNote); String highwayValue = getOsmElement().getTags().get("highway"); boolean mayBeLink = highwayValue.matches("primary|secondary|tertiary"); final List<String> answers = new ArrayList<>(3); if(mayBeLink) answers.add(linkRoad); answers.add(serviceRoad); answers.add(trackRoad); answers.add(leaveNote); DialogInterface.OnClickListener onSelect = new DialogInterface.OnClickListener() { Integer selection = null; @Override public void onClick(DialogInterface dialog, int which) { if (which >= 0) { selection = which; ((AlertDialog)dialog).getButton(DialogInterface.BUTTON_POSITIVE).setEnabled(true); } else if (which == DialogInterface.BUTTON_POSITIVE) { if(selection == null || selection < 0 || selection >= answers.size()) return; onAnswer(); } } private void onAnswer() { String answer = answers.get(selection); if(answer.equals(leaveNote)) { onClickCantSay(); } else { Bundle data = new Bundle(); int type = 0; if(answer.equals(linkRoad)) type = IS_LINK; if(answer.equals(serviceRoad)) type = IS_SERVICE; if(answer.equals(trackRoad)) type = IS_TRACK; data.putInt(NO_PROPER_ROAD, type); applyImmediateAnswer(data); } } }; AlertDialog dlg = new AlertDialogBuilder(getActivity()) .setSingleChoiceItems(answers.toArray(new String[0]), -1, onSelect) .setTitle(R.string.quest_streetName_answer_noProperStreet_question) .setPositiveButton(android.R.string.ok, onSelect) .setNegativeButton(android.R.string.cancel, null) .show(); dlg.getButton(DialogInterface.BUTTON_POSITIVE).setEnabled(false); } @Override public boolean hasChanges() { return !nameInput.getText().toString().trim().isEmpty(); } }