diff options
| author | Bananeweizen <bananeweizen@gmx.de> | 2013-12-19 16:36:34 +0100 |
|---|---|---|
| committer | Bananeweizen <bananeweizen@gmx.de> | 2013-12-19 16:36:34 +0100 |
| commit | d017aa9a3b7fc53f4801096d8ba87021f4e7e056 (patch) | |
| tree | 991da53cad139655cdbac76b4bcd244891e8b3d5 | |
| parent | 82661d89ea3159000ae42fbbc0d45d663776dbee (diff) | |
| download | cgeo-d017aa9a3b7fc53f4801096d8ba87021f4e7e056.zip cgeo-d017aa9a3b7fc53f4801096d8ba87021f4e7e056.tar.gz cgeo-d017aa9a3b7fc53f4801096d8ba87021f4e7e056.tar.bz2 | |
refactoring: simplify confirmation dialogs, remove duplicate code
18 files changed, 362 insertions, 216 deletions
diff --git a/main/src/cgeo/geocaching/CacheDetailActivity.java b/main/src/cgeo/geocaching/CacheDetailActivity.java index a51729c..079562e 100644 --- a/main/src/cgeo/geocaching/CacheDetailActivity.java +++ b/main/src/cgeo/geocaching/CacheDetailActivity.java @@ -35,6 +35,7 @@ import cgeo.geocaching.ui.IndexOutOfBoundsAvoidingTextView; import cgeo.geocaching.ui.LoggingUI; import cgeo.geocaching.ui.OwnerActionsClickListener; import cgeo.geocaching.ui.WeakReferenceHandler; +import cgeo.geocaching.ui.dialog.Dialogs; import cgeo.geocaching.ui.logs.CacheLogsViewCreator; import cgeo.geocaching.utils.CancellableHandler; import cgeo.geocaching.utils.ClipboardUtils; @@ -1615,18 +1616,8 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc } private void warnPersonalNoteNeedsStoring() { - final AlertDialog.Builder builder = new AlertDialog.Builder(CacheDetailActivity.this); - builder.setTitle(R.string.cache_personal_note_unstored); - builder.setMessage(R.string.cache_personal_note_store); - builder.setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() { - - @Override - public void onClick(DialogInterface dialog, int which) { - // do nothing - } - }); - - builder.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() { + Dialogs.confirm(CacheDetailActivity.this, R.string.cache_personal_note_unstored, R.string.cache_personal_note_store, + new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { @@ -1635,36 +1626,19 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc } }); - final AlertDialog dialog = builder.create(); - dialog.setOwnerActivity(CacheDetailActivity.this); - dialog.show(); } private void warnPersonalNoteExceedsLimit() { - final AlertDialog.Builder builder = new AlertDialog.Builder(CacheDetailActivity.this); - builder.setTitle(R.string.cache_personal_note_limit); - String lang = getString(R.string.cache_personal_note_truncation, GCConstants.PERSONAL_NOTE_MAX_CHARS); - builder.setMessage(lang); - builder.setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() { - - @Override - public void onClick(DialogInterface dialog, int which) { - // do nothing - } - }); + Dialogs.confirm(CacheDetailActivity.this, R.string.cache_personal_note_limit, getString(R.string.cache_personal_note_truncation, GCConstants.PERSONAL_NOTE_MAX_CHARS), + new DialogInterface.OnClickListener() { - builder.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() { - - @Override - public void onClick(DialogInterface dialog, int which) { - dialog.dismiss(); - uploadPersonalNote(); - } + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + uploadPersonalNote(); + } - }); - final AlertDialog dialog = builder.create(); - dialog.setOwnerActivity(CacheDetailActivity.this); - dialog.show(); + }); } } diff --git a/main/src/cgeo/geocaching/CacheListActivity.java b/main/src/cgeo/geocaching/CacheListActivity.java index 575c0ba..c5c79ed 100644 --- a/main/src/cgeo/geocaching/CacheListActivity.java +++ b/main/src/cgeo/geocaching/CacheListActivity.java @@ -39,6 +39,7 @@ import cgeo.geocaching.sorting.ComparatorUserInterface; import cgeo.geocaching.ui.CacheListAdapter; import cgeo.geocaching.ui.LoggingUI; import cgeo.geocaching.ui.WeakReferenceHandler; +import cgeo.geocaching.ui.dialog.Dialogs; import cgeo.geocaching.utils.AsyncTaskWithProgress; import cgeo.geocaching.utils.DateUtils; import cgeo.geocaching.utils.GeoDirHandler; @@ -1027,27 +1028,15 @@ public class CacheListActivity extends AbstractListActivity implements FilteredA } public void removeFromHistoryCheck() { - final AlertDialog.Builder dialog = new AlertDialog.Builder(this); - dialog.setCancelable(true); - dialog.setTitle(res.getString(R.string.caches_removing_from_history)); - dialog.setMessage((adapter != null && adapter.getCheckedCount() > 0) ? res.getString(R.string.cache_remove_from_history) - : res.getString(R.string.cache_clear_history)); - dialog.setPositiveButton(getString(android.R.string.yes), new DialogInterface.OnClickListener() { + int message = (adapter != null && adapter.getCheckedCount() > 0) ? R.string.cache_remove_from_history + : R.string.cache_clear_history; + Dialogs.confirmYesNo(this, R.string.caches_removing_from_history, message, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int id) { removeFromHistory(); dialog.cancel(); } }); - dialog.setNegativeButton(getString(android.R.string.no), new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int id) { - dialog.cancel(); - } - }); - - final AlertDialog alert = dialog.create(); - alert.show(); } public void removeFromHistory() { @@ -1072,16 +1061,8 @@ public class CacheListActivity extends AbstractListActivity implements FilteredA } public void dropStored(final boolean removeListAfterwards) { - final AlertDialog.Builder dialog = new AlertDialog.Builder(this); - dialog.setCancelable(true); - dialog.setTitle(res.getString(R.string.caches_drop_stored)); - - if (adapter.getCheckedCount() > 0) { - dialog.setMessage(res.getString(R.string.caches_drop_selected_ask)); - } else { - dialog.setMessage(res.getString(R.string.caches_drop_all_ask)); - } - dialog.setPositiveButton(getString(android.R.string.yes), new DialogInterface.OnClickListener() { + int message = (adapter.getCheckedCount() > 0) ? R.string.caches_drop_selected_ask : R.string.caches_drop_all_ask; + Dialogs.confirmYesNo(this, R.string.caches_drop_stored, message, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int id) { @@ -1089,16 +1070,6 @@ public class CacheListActivity extends AbstractListActivity implements FilteredA dialog.cancel(); } }); - dialog.setNegativeButton(getString(android.R.string.no), new DialogInterface.OnClickListener() { - - @Override - public void onClick(DialogInterface dialog, int id) { - dialog.cancel(); - } - }); - - final AlertDialog alert = dialog.create(); - alert.show(); } public void dropSelected(boolean removeListAfterwards) { @@ -1407,24 +1378,12 @@ public class CacheListActivity extends AbstractListActivity implements FilteredA } // ask him, if there are caches on the list - final AlertDialog.Builder alert = new AlertDialog.Builder(this); - - alert.setTitle(R.string.list_dialog_remove_title); - alert.setMessage(R.string.list_dialog_remove_description); - alert.setPositiveButton(R.string.list_dialog_remove, new DialogInterface.OnClickListener() { + Dialogs.confirm(this, R.string.list_dialog_remove_title, R.string.list_dialog_remove_description, R.string.list_dialog_remove, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int whichButton) { removeListInternal(); } }); - alert.setNegativeButton(res.getString(R.string.list_dialog_cancel), new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int whichButton) { - dialog.dismiss(); - } - }); - - alert.show(); } /** diff --git a/main/src/cgeo/geocaching/CacheMenuHandler.java b/main/src/cgeo/geocaching/CacheMenuHandler.java index 887f6cf..84a08f5 100644 --- a/main/src/cgeo/geocaching/CacheMenuHandler.java +++ b/main/src/cgeo/geocaching/CacheMenuHandler.java @@ -5,12 +5,12 @@ import cgeo.geocaching.apps.cache.navi.NavigationAppFactory; import cgeo.geocaching.geopoint.GeopointFormatter; import cgeo.geocaching.network.Parameters; import cgeo.geocaching.ui.AbstractUIFactory; +import cgeo.geocaching.ui.dialog.Dialogs; import cgeo.geocaching.utils.ProcessUtils; import org.apache.commons.lang3.StringUtils; import android.app.Activity; -import android.app.AlertDialog; import android.content.DialogInterface; import android.content.Intent; import android.net.Uri; @@ -101,28 +101,17 @@ public class CacheMenuHandler extends AbstractUIFactory { Uri.parse(ICalendar.URI_SCHEME + "://" + ICalendar.URI_HOST + "?" + params.toString()))); } else { // Inform user the calendar add-on is not installed and let them get it from Google Play - new AlertDialog.Builder(activity) - .setTitle(res.getString(R.string.addon_missing_title)) - .setMessage(new StringBuilder(res.getString(R.string.helper_calendar_missing)) - .append(' ') - .append(res.getString(R.string.addon_download_prompt)) - .toString()) - .setPositiveButton(activity.getString(android.R.string.yes), new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int id) { - final Intent intent = new Intent(Intent.ACTION_VIEW); - intent.setData(Uri.parse(ICalendar.CALENDAR_ADDON_URI)); - activity.startActivity(intent); - } - }) - .setNegativeButton(activity.getString(android.R.string.no), new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int id) { - dialog.cancel(); - } - }) - .create() - .show(); + Dialogs.confirmYesNo(activity, R.string.addon_missing_title, new StringBuilder(res.getString(R.string.helper_calendar_missing)) + .append(' ') + .append(res.getString(R.string.addon_download_prompt)) + .toString(), new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int id) { + final Intent intent = new Intent(Intent.ACTION_VIEW); + intent.setData(Uri.parse(ICalendar.CALENDAR_ADDON_URI)); + activity.startActivity(intent); + } + }); } } diff --git a/main/src/cgeo/geocaching/CgeoApplication.java b/main/src/cgeo/geocaching/CgeoApplication.java index 0af8117..3d2f758 100644 --- a/main/src/cgeo/geocaching/CgeoApplication.java +++ b/main/src/cgeo/geocaching/CgeoApplication.java @@ -1,7 +1,7 @@ package cgeo.geocaching; -import cgeo.geocaching.activity.ActivityMixin; import cgeo.geocaching.network.StatusUpdater; +import cgeo.geocaching.ui.dialog.Dialogs; import cgeo.geocaching.utils.IObserver; import cgeo.geocaching.utils.Log; @@ -75,7 +75,7 @@ public class CgeoApplication extends Application { dialog.dismiss(); boolean success = atomic.get(); String message = success ? res.getString(R.string.init_dbmove_success) : res.getString(R.string.init_dbmove_failed); - ActivityMixin.helpDialog(fromActivity, res.getString(R.string.init_dbmove_dbmove), message); + Dialogs.message(fromActivity, R.string.init_dbmove_dbmove, message); } }); } diff --git a/main/src/cgeo/geocaching/EditWaypointActivity.java b/main/src/cgeo/geocaching/EditWaypointActivity.java index c31ad40..6d0f822 100644 --- a/main/src/cgeo/geocaching/EditWaypointActivity.java +++ b/main/src/cgeo/geocaching/EditWaypointActivity.java @@ -12,6 +12,7 @@ import cgeo.geocaching.geopoint.Geopoint; import cgeo.geocaching.geopoint.GeopointFormatter; import cgeo.geocaching.settings.Settings; import cgeo.geocaching.ui.dialog.CoordinatesInputDialog; +import cgeo.geocaching.ui.dialog.Dialogs; import cgeo.geocaching.utils.GeoDirHandler; import cgeo.geocaching.utils.Log; import cgeo.geocaching.utils.TextUtils; @@ -331,7 +332,7 @@ public class EditWaypointActivity extends AbstractActivity { if (StringUtils.isBlank(bearingText) && StringUtils.isBlank(distanceText) && StringUtils.isBlank(latText) && StringUtils.isBlank(lonText)) { - helpDialog(res.getString(R.string.err_point_no_position_given_title), res.getString(R.string.err_point_no_position_given)); + Dialogs.message(EditWaypointActivity.this, R.string.err_point_no_position_given_title, R.string.err_point_no_position_given); return; } @@ -359,7 +360,7 @@ public class EditWaypointActivity extends AbstractActivity { try { bearing = Double.parseDouble(bearingText); } catch (NumberFormatException e) { - helpDialog(res.getString(R.string.err_point_bear_and_dist_title), res.getString(R.string.err_point_bear_and_dist)); + Dialogs.message(EditWaypointActivity.this, R.string.err_point_bear_and_dist_title, R.string.err_point_bear_and_dist); return; } diff --git a/main/src/cgeo/geocaching/MainActivity.java b/main/src/cgeo/geocaching/MainActivity.java index 4233d1f..4010888 100644 --- a/main/src/cgeo/geocaching/MainActivity.java +++ b/main/src/cgeo/geocaching/MainActivity.java @@ -15,6 +15,7 @@ import cgeo.geocaching.maps.CGeoMap; import cgeo.geocaching.settings.Settings; import cgeo.geocaching.settings.SettingsActivity; import cgeo.geocaching.ui.Formatter; +import cgeo.geocaching.ui.dialog.Dialogs; import cgeo.geocaching.utils.DatabaseBackupUtils; import cgeo.geocaching.utils.GeoDirHandler; import cgeo.geocaching.utils.Log; @@ -330,11 +331,7 @@ public class MainActivity extends AbstractActivity { if (query == null) { query = ""; } - new AlertDialog.Builder(this) - .setMessage(res.getString(R.string.unknown_scan) + "\n\n" + query) - .setPositiveButton(getString(android.R.string.ok), null) - .create() - .show(); + Dialogs.message(this, res.getString(R.string.unknown_scan) + "\n\n" + query); } } } diff --git a/main/src/cgeo/geocaching/NavigateAnyPointActivity.java b/main/src/cgeo/geocaching/NavigateAnyPointActivity.java index c68c979..f24e86e 100644 --- a/main/src/cgeo/geocaching/NavigateAnyPointActivity.java +++ b/main/src/cgeo/geocaching/NavigateAnyPointActivity.java @@ -13,6 +13,7 @@ import cgeo.geocaching.settings.Settings; import cgeo.geocaching.ui.AbstractViewHolder; import cgeo.geocaching.ui.Formatter; import cgeo.geocaching.ui.dialog.CoordinatesInputDialog; +import cgeo.geocaching.ui.dialog.Dialogs; import cgeo.geocaching.utils.GeoDirHandler; import cgeo.geocaching.utils.Log; @@ -518,7 +519,7 @@ public class NavigateAnyPointActivity extends AbstractActivity { try { bearing = Double.parseDouble(bearingText); } catch (NumberFormatException e) { - helpDialog(res.getString(R.string.err_point_bear_and_dist_title), res.getString(R.string.err_point_bear_and_dist)); + Dialogs.message(this, R.string.err_point_bear_and_dist_title, R.string.err_point_bear_and_dist); return null; } diff --git a/main/src/cgeo/geocaching/SearchActivity.java b/main/src/cgeo/geocaching/SearchActivity.java index 334d99a..9952e18 100644 --- a/main/src/cgeo/geocaching/SearchActivity.java +++ b/main/src/cgeo/geocaching/SearchActivity.java @@ -12,6 +12,7 @@ import cgeo.geocaching.geopoint.Geopoint; import cgeo.geocaching.geopoint.GeopointFormatter; import cgeo.geocaching.settings.Settings; import cgeo.geocaching.ui.dialog.CoordinatesInputDialog; +import cgeo.geocaching.ui.dialog.Dialogs; import cgeo.geocaching.utils.EditUtils; import org.apache.commons.lang3.StringUtils; @@ -276,7 +277,7 @@ public class SearchActivity extends AbstractActivity { final String keyText = StringUtils.trim(keywordEditText.getText().toString()); if (StringUtils.isBlank(keyText)) { - helpDialog(res.getString(R.string.warn_search_help_title), res.getString(R.string.warn_search_help_keyword)); + Dialogs.message(this, R.string.warn_search_help_title, R.string.warn_search_help_keyword); return; } @@ -287,7 +288,7 @@ public class SearchActivity extends AbstractActivity { final String addText = StringUtils.trim(addressEditText.getText().toString()); if (StringUtils.isBlank(addText)) { - helpDialog(res.getString(R.string.warn_search_help_title), res.getString(R.string.warn_search_help_address)); + Dialogs.message(this, R.string.warn_search_help_title, R.string.warn_search_help_address); return; } @@ -300,7 +301,7 @@ public class SearchActivity extends AbstractActivity { final String usernameText = StringUtils.trim(userNameEditText.getText().toString()); if (StringUtils.isBlank(usernameText)) { - helpDialog(res.getString(R.string.warn_search_help_title), res.getString(R.string.warn_search_help_user)); + Dialogs.message(this, R.string.warn_search_help_title, R.string.warn_search_help_user); return; } @@ -315,7 +316,7 @@ public class SearchActivity extends AbstractActivity { final String usernameText = StringUtils.trimToEmpty(userName); if (StringUtils.isBlank(usernameText)) { - helpDialog(res.getString(R.string.warn_search_help_title), res.getString(R.string.warn_search_help_user)); + Dialogs.message(this, R.string.warn_search_help_title, R.string.warn_search_help_user); return; } @@ -326,7 +327,7 @@ public class SearchActivity extends AbstractActivity { final String geocodeText = StringUtils.trim(geocodeEditText.getText().toString()); if (StringUtils.isBlank(geocodeText) || geocodeText.equalsIgnoreCase("GC")) { - helpDialog(res.getString(R.string.warn_search_help_title), res.getString(R.string.warn_search_help_gccode)); + Dialogs.message(this, R.string.warn_search_help_title, R.string.warn_search_help_gccode); return; } @@ -337,7 +338,7 @@ public class SearchActivity extends AbstractActivity { final String trackableText = StringUtils.trim(trackableEditText.getText().toString()); if (StringUtils.isBlank(trackableText) || trackableText.equalsIgnoreCase("TB")) { - helpDialog(res.getString(R.string.warn_search_help_title), res.getString(R.string.warn_search_help_tb)); + Dialogs.message(this, R.string.warn_search_help_title, R.string.warn_search_help_tb); return; } diff --git a/main/src/cgeo/geocaching/activity/AbstractActivity.java b/main/src/cgeo/geocaching/activity/AbstractActivity.java index 1f44536..df21a8c 100644 --- a/main/src/cgeo/geocaching/activity/AbstractActivity.java +++ b/main/src/cgeo/geocaching/activity/AbstractActivity.java @@ -9,7 +9,6 @@ import cgeo.geocaching.settings.Settings; import android.content.Context; import android.content.res.Resources; -import android.graphics.drawable.Drawable; import android.os.Bundle; import android.support.v4.app.FragmentActivity; import android.view.View; @@ -58,15 +57,6 @@ public abstract class AbstractActivity extends FragmentActivity implements IAbst } @Override - public final void helpDialog(final String title, final String message) { - ActivityMixin.helpDialog(this, title, message); - } - - protected final void helpDialog(final String title, final String message, final Drawable icon) { - ActivityMixin.helpDialog(this, title, message, icon); - } - - @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); initializeCommonFields(); diff --git a/main/src/cgeo/geocaching/activity/AbstractListActivity.java b/main/src/cgeo/geocaching/activity/AbstractListActivity.java index d2bc0b4..a5d5c14 100644 --- a/main/src/cgeo/geocaching/activity/AbstractListActivity.java +++ b/main/src/cgeo/geocaching/activity/AbstractListActivity.java @@ -3,7 +3,6 @@ package cgeo.geocaching.activity; import cgeo.geocaching.CgeoApplication; import android.content.res.Resources; -import android.graphics.drawable.Drawable; import android.os.Bundle; import android.support.v4.app.FragmentListActivity; import android.view.View; @@ -48,15 +47,6 @@ public abstract class AbstractListActivity extends FragmentListActivity implemen } @Override - public final void helpDialog(final String title, final String message) { - ActivityMixin.helpDialog(this, title, message, null); - } - - public final void helpDialog(final String title, final String message, final Drawable icon) { - ActivityMixin.helpDialog(this, title, message, icon); - } - - @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); initializeCommonFields(); diff --git a/main/src/cgeo/geocaching/activity/ActivityMixin.java b/main/src/cgeo/geocaching/activity/ActivityMixin.java index 9b1e433..c1a2678 100644 --- a/main/src/cgeo/geocaching/activity/ActivityMixin.java +++ b/main/src/cgeo/geocaching/activity/ActivityMixin.java @@ -8,10 +8,7 @@ import cgeo.geocaching.settings.Settings; import org.apache.commons.lang3.StringUtils; import android.app.Activity; -import android.app.AlertDialog; -import android.content.DialogInterface; import android.content.Intent; -import android.graphics.drawable.Drawable; import android.os.Build; import android.view.Gravity; import android.view.View; @@ -94,30 +91,6 @@ public final class ActivityMixin { } } - public static void helpDialog(final Activity activity, final String title, final String message, final Drawable icon) { - if (StringUtils.isBlank(message)) { - return; - } - - AlertDialog.Builder dialog = new AlertDialog.Builder(activity).setTitle(title).setMessage(message).setCancelable(true); - dialog.setNeutralButton(android.R.string.ok, new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int id) { - dialog.cancel(); - } - }); - if (icon != null) { - dialog.setIcon(icon); - } - - AlertDialog alert = dialog.create(); - alert.show(); - } - - public static void helpDialog(Activity activity, String title, String message) { - helpDialog(activity, title, message, null); - } - public static void keepScreenOn(final Activity abstractActivity, boolean keepScreenOn) { if (keepScreenOn) { abstractActivity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); @@ -130,7 +103,7 @@ public final class ActivityMixin { /** * insert text into the EditText at the current cursor position - * + * * @param editText * @param insertText * @param moveCursor diff --git a/main/src/cgeo/geocaching/activity/IAbstractActivity.java b/main/src/cgeo/geocaching/activity/IAbstractActivity.java index 61c218b..7ca2322 100644 --- a/main/src/cgeo/geocaching/activity/IAbstractActivity.java +++ b/main/src/cgeo/geocaching/activity/IAbstractActivity.java @@ -10,7 +10,5 @@ public interface IAbstractActivity { public void showShortToast(String text); - public void helpDialog(String title, String message); - public void invalidateOptionsMenuCompatible(); } diff --git a/main/src/cgeo/geocaching/files/GPXImporter.java b/main/src/cgeo/geocaching/files/GPXImporter.java index bf0aa72..07ef285 100644 --- a/main/src/cgeo/geocaching/files/GPXImporter.java +++ b/main/src/cgeo/geocaching/files/GPXImporter.java @@ -1,14 +1,15 @@ package cgeo.geocaching.files; +import cgeo.geocaching.DataStore; import cgeo.geocaching.Geocache; import cgeo.geocaching.R; import cgeo.geocaching.SearchResult; import cgeo.geocaching.StaticMapsProvider; -import cgeo.geocaching.DataStore; import cgeo.geocaching.activity.ActivityMixin; import cgeo.geocaching.activity.Progress; import cgeo.geocaching.enumerations.LoadFlags; import cgeo.geocaching.settings.Settings; +import cgeo.geocaching.ui.dialog.Dialogs; import cgeo.geocaching.utils.CancellableHandler; import cgeo.geocaching.utils.Log; @@ -417,19 +418,19 @@ public class GPXImporter { progressHandler.cancel(); final StringBuilder bufferSkipped = new StringBuilder(20); bufferSkipped.append(res.getString(R.string.gpx_import_static_maps_skipped)).append(", ").append(msg.arg1).append(' ').append(res.getString(R.string.gpx_import_caches_imported)); - ActivityMixin.helpDialog(fromActivity, res.getString(R.string.gpx_import_title_caches_imported), bufferSkipped.toString()); + Dialogs.message(fromActivity, R.string.gpx_import_title_caches_imported, bufferSkipped.toString()); importFinished(); break; case IMPORT_STEP_FINISHED: progress.dismiss(); - ActivityMixin.helpDialog(fromActivity, res.getString(R.string.gpx_import_title_caches_imported), msg.arg1 + " " + res.getString(R.string.gpx_import_caches_imported)); + Dialogs.message(fromActivity, R.string.gpx_import_title_caches_imported, msg.arg1 + " " + res.getString(R.string.gpx_import_caches_imported)); importFinished(); break; case IMPORT_STEP_FINISHED_WITH_ERROR: progress.dismiss(); - ActivityMixin.helpDialog(fromActivity, res.getString(R.string.gpx_import_title_caches_import_failed), res.getString(msg.arg1) + "\n\n" + msg.obj); + Dialogs.message(fromActivity, R.string.gpx_import_title_caches_import_failed, res.getString(msg.arg1) + "\n\n" + msg.obj); importFinished(); break; diff --git a/main/src/cgeo/geocaching/settings/AbstractCheckCredentialsPreference.java b/main/src/cgeo/geocaching/settings/AbstractCheckCredentialsPreference.java index 69f6188..d3aae5c 100644 --- a/main/src/cgeo/geocaching/settings/AbstractCheckCredentialsPreference.java +++ b/main/src/cgeo/geocaching/settings/AbstractCheckCredentialsPreference.java @@ -4,6 +4,7 @@ import cgeo.geocaching.R; import cgeo.geocaching.activity.ActivityMixin; import cgeo.geocaching.enumerations.StatusCode; import cgeo.geocaching.network.Cookies; +import cgeo.geocaching.ui.dialog.Dialogs; import cgeo.geocaching.utils.Log; import org.apache.commons.lang3.StringUtils; @@ -60,13 +61,9 @@ public abstract class AbstractCheckCredentialsPreference extends Preference { } if (msg.obj == null || (msg.obj instanceof Drawable)) { - ActivityMixin.helpDialog(activity, - res.getString(R.string.init_login_popup), - res.getString(R.string.init_login_popup_ok), - (Drawable) msg.obj); + Dialogs.message(activity, R.string.init_login_popup, R.string.init_login_popup_ok, (Drawable) msg.obj); } else { - ActivityMixin.helpDialog(activity, - res.getString(R.string.init_login_popup), + Dialogs.message(activity, R.string.init_login_popup, res.getString(R.string.init_login_popup_failed_reason) + " " + ((StatusCode) msg.obj).getErrorString(res) diff --git a/main/src/cgeo/geocaching/settings/RegisterSend2CgeoPreference.java b/main/src/cgeo/geocaching/settings/RegisterSend2CgeoPreference.java index fbf08fa..094b8f5 100644 --- a/main/src/cgeo/geocaching/settings/RegisterSend2CgeoPreference.java +++ b/main/src/cgeo/geocaching/settings/RegisterSend2CgeoPreference.java @@ -4,6 +4,7 @@ import cgeo.geocaching.R; import cgeo.geocaching.activity.ActivityMixin; import cgeo.geocaching.network.Network; import cgeo.geocaching.network.Parameters; +import cgeo.geocaching.ui.dialog.Dialogs; import cgeo.geocaching.utils.Log; import ch.boye.httpclientandroidlib.HttpResponse; @@ -45,14 +46,11 @@ public class RegisterSend2CgeoPreference extends Preference { } if (msg.what > 0) { - ActivityMixin.helpDialog(activity, - activity.getString(R.string.init_sendToCgeo), + Dialogs.message(activity, R.string.init_sendToCgeo, activity.getString(R.string.init_sendToCgeo_register_ok) .replace("####", String.valueOf(msg.what))); } else { - ActivityMixin.helpDialog(activity, - activity.getString(R.string.init_sendToCgeo), - activity.getString(R.string.init_sendToCgeo_register_fail)); + Dialogs.message(activity, R.string.init_sendToCgeo, R.string.init_sendToCgeo_register_fail); } } catch (Exception e) { ActivityMixin.showToast(activity, R.string.init_sendToCgeo_register_fail); diff --git a/main/src/cgeo/geocaching/ui/GPXListAdapter.java b/main/src/cgeo/geocaching/ui/GPXListAdapter.java index 988bb81..ae18ab4 100644 --- a/main/src/cgeo/geocaching/ui/GPXListAdapter.java +++ b/main/src/cgeo/geocaching/ui/GPXListAdapter.java @@ -5,11 +5,11 @@ import butterknife.InjectView; import cgeo.geocaching.GpxFileListActivity; import cgeo.geocaching.R; import cgeo.geocaching.files.GPXImporter; +import cgeo.geocaching.ui.dialog.Dialogs; import cgeo.geocaching.utils.FileUtils; import cgeo.geocaching.utils.Log; import android.app.Activity; -import android.app.AlertDialog; import android.content.DialogInterface; import android.view.LayoutInflater; import android.view.View; @@ -74,25 +74,13 @@ public class GPXListAdapter extends ArrayAdapter<File> { @Override public boolean onLongClick(View v) { - AlertDialog.Builder builder = new AlertDialog.Builder(activity); - builder.setTitle(R.string.gpx_import_delete_title) - .setMessage(activity.getString(R.string.gpx_import_delete_message, file.getName())) - .setCancelable(false) - .setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int id) { - FileUtils.deleteIgnoringFailure(file); - GPXListAdapter.this.remove(file); - } - }) - .setNegativeButton(android.R.string.no, new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int id) { - dialog.cancel(); - } - }); - AlertDialog alert = builder.create(); - alert.show(); + Dialogs.confirmYesNo(activity, R.string.gpx_import_delete_title, activity.getString(R.string.gpx_import_delete_message, file.getName()), new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int id) { + FileUtils.deleteIgnoringFailure(file); + GPXListAdapter.this.remove(file); + } + }); return true; } }); diff --git a/main/src/cgeo/geocaching/ui/dialog/Dialogs.java b/main/src/cgeo/geocaching/ui/dialog/Dialogs.java new file mode 100644 index 0000000..6064c41 --- /dev/null +++ b/main/src/cgeo/geocaching/ui/dialog/Dialogs.java @@ -0,0 +1,291 @@ +package cgeo.geocaching.ui.dialog; + +import cgeo.geocaching.CgeoApplication; + +import org.eclipse.jdt.annotation.Nullable; + +import android.app.Activity; +import android.app.AlertDialog; +import android.app.AlertDialog.Builder; +import android.content.DialogInterface.OnClickListener; +import android.graphics.drawable.Drawable; + +/** + * Wrapper for {@link AlertDialog}. If you want to show a simple text, use one of the + * {@link #message(Activity, String, String, Drawable)} variants. If you want the user to confirm using Okay/Cancel or + * Yes/No, select one of the {@link #confirm(Activity, String, String, String, OnClickListener)} or + * {@link #confirmYesNo(Activity, String, String, OnClickListener)} variants. + * + */ +public final class Dialogs { + private Dialogs() { + // utility class + } + + /** + * Confirm using two buttons "yourText" and "Cancel", where "Cancel" just closes the dialog. + * + * @param context + * activity hosting the dialog + * @param title + * dialog title + * @param msg + * dialog message + * @param positiveButton + * text of the positive button (which would typically be the OK button) + * @param okayListener + * listener of the positive button + */ + public static AlertDialog.Builder confirm(final Activity context, final String title, final String msg, final String positiveButton, final OnClickListener okayListener) { + AlertDialog.Builder builder = new AlertDialog.Builder(context); + AlertDialog dialog = builder.setTitle(title) + .setCancelable(true) + .setMessage(msg) + .setPositiveButton(positiveButton, okayListener) + .setNegativeButton(android.R.string.cancel, null) + .create(); + dialog.setOwnerActivity(context); + dialog.show(); + return builder; + } + + /** + * Confirm using two buttons "yourText" and "Cancel", where "Cancel" just closes the dialog. + * + * @param context + * activity hosting the dialog + * @param title + * dialog title + * @param msg + * dialog message + * @param positiveButton + * text of the positive button (which would typically be the OK button) + * @param okayListener + * listener of the positive button + */ + public static AlertDialog.Builder confirm(final Activity context, final int title, final int msg, final int positiveButton, final OnClickListener okayListener) { + return confirm(context, getString(title), getString(msg), getString(positiveButton), okayListener); + } + + /** + * Confirm using two buttons "Yes" and "No", where "No" just closes the dialog. + * + * @param context + * activity hosting the dialog + * @param title + * dialog title + * @param msg + * dialog message + * @param yesListener + * listener of the positive button + */ + public static AlertDialog.Builder confirmYesNo(final Activity context, final String title, final String msg, final OnClickListener yesListener) { + AlertDialog.Builder builder = new AlertDialog.Builder(context); + AlertDialog dialog = builder.setTitle(title) + .setCancelable(true) + .setMessage(msg) + .setPositiveButton(android.R.string.yes, yesListener) + .setNegativeButton(android.R.string.no, null) + .create(); + dialog.setOwnerActivity(context); + dialog.show(); + return builder; + } + + /** + * Confirm using two buttons "Yes" and "No", where "No" just closes the dialog. + * + * @param context + * activity hosting the dialog + * @param title + * dialog title + * @param msg + * dialog message + * @param yesListener + * listener of the positive button + */ + public static AlertDialog.Builder confirmYesNo(final Activity context, final String title, final int msg, final OnClickListener yesListener) { + return confirmYesNo(context, title, getString(msg), yesListener); + } + + /** + * Confirm using two buttons "Yes" and "No", where "No" just closes the dialog. + * + * @param context + * activity hosting the dialog + * @param title + * dialog title + * @param msg + * dialog message + * @param yesListener + * listener of the positive button + */ + public static AlertDialog.Builder confirmYesNo(final Activity context, final int title, final String msg, final OnClickListener yesListener) { + return confirmYesNo(context, getString(title), msg, yesListener); + } + + /** + * Confirm using two buttons "Yes" and "No", where "No" just closes the dialog. + * + * @param context + * activity hosting the dialog + * @param title + * dialog title + * @param msg + * dialog message + * @param yesListener + * listener of the positive button + */ + public static AlertDialog.Builder confirmYesNo(final Activity context, final int title, final int msg, final OnClickListener yesListener) { + return confirmYesNo(context, getString(title), getString(msg), yesListener); + } + + /** + * Confirm using two buttons "OK" and "Cancel", where "Cancel" just closes the dialog. + * + * @param context + * activity hosting the dialog + * @param title + * dialog title + * @param msg + * dialog message + * @param okayListener + * listener of the positive button + */ + public static AlertDialog.Builder confirm(final Activity context, final String title, final String msg, final OnClickListener okayListener) { + return confirm(context, title, msg, getString(android.R.string.ok), okayListener); + } + + /** + * Confirm using two buttons "OK" and "Cancel", where "Cancel" just closes the dialog. + * + * @param context + * activity hosting the dialog + * @param title + * dialog title + * @param msg + * dialog message + * @param okayListener + * listener of the positive button + */ + public static AlertDialog.Builder confirm(final Activity context, final int title, final String msg, final OnClickListener okayListener) { + return confirm(context, getString(title), msg, okayListener); + } + + /** + * Confirm using two buttons "OK" and "Cancel", where "Cancel" just closes the dialog. + * + * @param context + * activity hosting the dialog + * @param title + * dialog title + * @param msg + * dialog message + * @param okayListener + * listener of the positive button + */ + public static AlertDialog.Builder confirm(final Activity context, final int title, final int msg, final OnClickListener okayListener) { + return confirm(context, getString(title), getString(msg), okayListener); + } + + private static String getString(int resourceId) { + return CgeoApplication.getInstance().getString(resourceId); + } + + /** + * Show a message dialog with a single "OK" button. + * + * @param context + * activity owning the dialog + * @param message + * message dialog content + */ + public static void message(final Activity context, final String message) { + message(context, null, message); + } + + /** + * Show a message dialog with a single "OK" button. + * + * @param context + * activity owning the dialog + * @param title + * message dialog title + * @param message + * message dialog content + */ + public static void message(final Activity context, final @Nullable String title, final String message) { + message(context, title, message, null); + } + + /** + * Show a message dialog with a single "OK" button and an icon. + * + * @param context + * activity owning the dialog + * @param title + * message dialog title + * @param message + * message dialog content + * @param icon + * message dialog title icon + */ + public static void message(final Activity context, final @Nullable String title, final String message, final @Nullable Drawable icon) { + Builder builder = new AlertDialog.Builder(context) + .setMessage(message) + .setCancelable(true) + .setPositiveButton(getString(android.R.string.ok), null); + if (title != null) { + builder.setTitle(title); + } + if (icon != null) { + builder.setIcon(icon); + } + builder.create().show(); + } + + /** + * Show a message dialog with a single "OK" button and an icon. + * + * @param context + * activity owning the dialog + * @param title + * message dialog title + * @param message + * message dialog content + */ + public static void message(final Activity context, final int title, final String message) { + message(context, getString(title), message); + } + + /** + * Show a message dialog with a single "OK" button and an icon. + * + * @param context + * activity owning the dialog + * @param title + * message dialog title + * @param message + * message dialog content + */ + public static void message(final Activity context, final int title, final int message) { + message(context, getString(title), getString(message)); + } + + /** + * Show a message dialog with a single "OK" button and an icon. + * + * @param context + * activity owning the dialog + * @param title + * message dialog title + * @param message + * message dialog content + * @param icon + * message dialog title icon + */ + public static void message(final Activity context, final int title, final int message, final @Nullable Drawable icon) { + message(context, getString(title), getString(message), icon); + } + +} diff --git a/main/src/cgeo/geocaching/utils/DatabaseBackupUtils.java b/main/src/cgeo/geocaching/utils/DatabaseBackupUtils.java index b291a8a..4ce2e0c 100644 --- a/main/src/cgeo/geocaching/utils/DatabaseBackupUtils.java +++ b/main/src/cgeo/geocaching/utils/DatabaseBackupUtils.java @@ -3,8 +3,8 @@ package cgeo.geocaching.utils; import cgeo.geocaching.DataStore; import cgeo.geocaching.MainActivity; import cgeo.geocaching.R; -import cgeo.geocaching.activity.ActivityMixin; import cgeo.geocaching.ui.Formatter; +import cgeo.geocaching.ui.dialog.Dialogs; import org.apache.commons.lang3.StringUtils; @@ -42,7 +42,7 @@ public class DatabaseBackupUtils { dialog.dismiss(); boolean restored = restoreSuccessful.get(); String message = restored ? res.getString(R.string.init_restore_success) : res.getString(R.string.init_restore_failed); - ActivityMixin.helpDialog(activity, res.getString(R.string.init_backup_restore), message); + Dialogs.message(activity, R.string.init_backup_restore, message); if (activity instanceof MainActivity) { ((MainActivity) activity).updateCacheCounter(); } @@ -57,9 +57,7 @@ public class DatabaseBackupUtils { // avoid overwriting an existing backup with an empty database // (can happen directly after reinstalling the app) if (DataStore.getAllCachesCount() == 0) { - ActivityMixin.helpDialog(activity, - context.getString(R.string.init_backup), - context.getString(R.string.init_backup_unnecessary)); + Dialogs.message(activity, R.string.init_backup, R.string.init_backup_unnecessary); return false; } @@ -74,8 +72,8 @@ public class DatabaseBackupUtils { @Override public void run() { dialog.dismiss(); - ActivityMixin.helpDialog(activity, - context.getString(R.string.init_backup_backup), + Dialogs.message(activity, + R.string.init_backup_backup, backupFileName != null ? context.getString(R.string.init_backup_success) + "\n" + backupFileName |
