package org.commcare.activities.components; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.location.LocationManager; import android.view.View; import org.commcare.activities.FormEntryActivity; import org.commcare.dalvik.R; import org.commcare.google.services.analytics.GoogleAnalyticsFields; import org.commcare.google.services.analytics.GoogleAnalyticsUtils; import org.commcare.utils.ChangeLocaleUtil; import org.commcare.utils.GeoUtils; import org.commcare.utils.StringUtils; import org.commcare.views.ViewUtil; import org.commcare.views.dialogs.DialogChoiceItem; import org.commcare.views.dialogs.PaneledChoiceDialog; import org.commcare.views.dialogs.StandardAlertDialog; import org.commcare.views.widgets.QuestionWidget; import org.javarosa.core.services.locale.Localization; import java.util.Set; public class FormEntryDialogs { /** * Create a dialog with options to save and exit, save, or quit without saving */ public static void createQuitDialog(final FormEntryActivity activity, boolean isIncompleteEnabled) { final PaneledChoiceDialog dialog = new PaneledChoiceDialog(activity, StringUtils.getStringRobust(activity, R.string.quit_form_title)); View.OnClickListener stayInFormListener = new View.OnClickListener() { @Override public void onClick(View v) { GoogleAnalyticsUtils.reportFormExit(GoogleAnalyticsFields.LABEL_BACK_TO_FORM); activity.dismissAlertDialog(); } }; DialogChoiceItem stayInFormItem = new DialogChoiceItem( StringUtils.getStringRobust(activity, R.string.do_not_exit), R.drawable.ic_blue_forward, stayInFormListener); View.OnClickListener exitFormListener = new View.OnClickListener() { @Override public void onClick(View v) { activity.dismissAlertDialog(); GoogleAnalyticsUtils.reportFormExit(GoogleAnalyticsFields.LABEL_EXIT_NO_SAVE); ViewUtil.hideVirtualKeyboard(activity); activity.discardChangesAndExit(); } }; DialogChoiceItem quitFormItem = new DialogChoiceItem( StringUtils.getStringRobust(activity, R.string.do_not_save), R.drawable.icon_exit_form, exitFormListener); DialogChoiceItem[] items; if (isIncompleteEnabled) { View.OnClickListener saveIncompleteListener = new View.OnClickListener() { @Override public void onClick(View v) { GoogleAnalyticsUtils.reportFormExit(GoogleAnalyticsFields.LABEL_SAVE_AND_EXIT); activity.saveFormToDisk(FormEntryConstants.EXIT); activity.dismissAlertDialog(); } }; DialogChoiceItem saveIncompleteItem = new DialogChoiceItem( StringUtils.getStringRobust(activity, R.string.keep_changes), R.drawable.ic_incomplete_orange, saveIncompleteListener); items = new DialogChoiceItem[]{stayInFormItem, quitFormItem, saveIncompleteItem}; } else { items = new DialogChoiceItem[]{stayInFormItem, quitFormItem}; } dialog.setChoiceItems(items); activity.showAlertDialog(dialog); } /** * Creates and displays a dialog allowing the user to set the language for the form. */ public static void createLanguageDialog(final FormEntryActivity activity) { final PaneledChoiceDialog dialog = new PaneledChoiceDialog(activity, Localization.get("home.menu.locale.select")); final String[] languageCodes = FormEntryActivity.mFormController.getLanguages(); final String[] localizedLanguages = ChangeLocaleUtil.translateLocales(languageCodes); DialogChoiceItem[] choiceItems = new DialogChoiceItem[languageCodes.length]; for (int i = 0; i < languageCodes.length; i++) { final int index = i; View.OnClickListener listener = new View.OnClickListener() { @Override public void onClick(View v) { activity.setFormLanguage(languageCodes, index); } }; choiceItems[i] = new DialogChoiceItem(localizedLanguages[i], -1, listener); } dialog.setChoiceItems(choiceItems); activity.showAlertDialog(dialog); } /** * Confirm clear answer dialog */ public static void createClearDialog(final FormEntryActivity activity, final QuestionWidget qw) { String title = StringUtils.getStringRobust(activity, R.string.clear_answer_ask); String question = qw.getPrompt().getLongText(); if (question == null) { question = ""; } else if (question.length() > 50) { question = question.substring(0, 50) + "..."; } String msg = StringUtils.getStringSpannableRobust(activity, R.string.clearanswer_confirm, question).toString(); StandardAlertDialog d = new StandardAlertDialog(activity, title, msg); d.setIcon(android.R.drawable.ic_dialog_info); DialogInterface.OnClickListener quitListener = new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int i) { switch (i) { case DialogInterface.BUTTON_POSITIVE: activity.clearAnswer(qw); activity.saveAnswersForCurrentScreen(FormEntryConstants.DO_NOT_EVALUATE_CONSTRAINTS); break; case DialogInterface.BUTTON_NEGATIVE: break; } activity.dismissAlertDialog(); } }; d.setPositiveButton(StringUtils.getStringSpannableRobust(activity, R.string.discard_answer), quitListener); d.setNegativeButton(StringUtils.getStringSpannableRobust(activity, R.string.clear_answer_no), quitListener); activity.showAlertDialog(d); } public static void handleNoGpsBroadcast(final FormEntryActivity activity) { LocationManager manager = (LocationManager)activity.getSystemService(Context.LOCATION_SERVICE); Set<String> providers = GeoUtils.evaluateProviders(manager); if (providers.isEmpty()) { DialogInterface.OnClickListener onChangeListener = new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int i) { if (i == DialogInterface.BUTTON_POSITIVE) { Intent intent = new Intent(android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS); activity.startActivity(intent); } activity.dismissAlertDialog(); } }; GeoUtils.showNoGpsDialog(activity, onChangeListener); } } }