From b0a1efcdcde3a289067e5de1ad6e69a0b58adf33 Mon Sep 17 00:00:00 2001 From: Sam Bosley Date: Fri, 6 Apr 2012 17:25:35 -0700 Subject: [PATCH] Introduced a new hook so that subclasses of popup control set can decide for themselves if the ok button should always dismiss the dialog (for data validation purposes) --- .../astrid/repeats/RepeatControlSet.java | 8 +++---- .../taskrabbit/TaskRabbitNameControlSet.java | 4 ++-- .../astrid/ui/EditNotesControlSet.java | 4 ++-- .../todoroo/astrid/ui/PopupControlSet.java | 23 +++++++++++++------ 4 files changed, 24 insertions(+), 15 deletions(-) diff --git a/astrid/plugin-src/com/todoroo/astrid/repeats/RepeatControlSet.java b/astrid/plugin-src/com/todoroo/astrid/repeats/RepeatControlSet.java index c1ffacc9c..4b714bdfd 100644 --- a/astrid/plugin-src/com/todoroo/astrid/repeats/RepeatControlSet.java +++ b/astrid/plugin-src/com/todoroo/astrid/repeats/RepeatControlSet.java @@ -389,17 +389,17 @@ public class RepeatControlSet extends PopupControlSet { } @Override - protected Dialog buildDialog(String title, final DialogInterface.OnClickListener okListener, final DialogInterface.OnCancelListener cancelListener) { + protected Dialog buildDialog(String title, final PopupDialogClickListener okListener, final DialogInterface.OnCancelListener cancelListener) { - DialogInterface.OnClickListener doRepeatButton = new DialogInterface.OnClickListener() { + PopupDialogClickListener doRepeatButton = new PopupDialogClickListener() { @Override - public void onClick(DialogInterface d, int which) { + public boolean onClick(DialogInterface d, int which) { doRepeat = true; - okListener.onClick(d, which); for (RepeatChangedListener l : listeners) { l.repeatChanged(doRepeat); } + return okListener.onClick(d, which); } }; final Dialog d = super.buildDialog(title, doRepeatButton, cancelListener); diff --git a/astrid/plugin-src/com/todoroo/astrid/taskrabbit/TaskRabbitNameControlSet.java b/astrid/plugin-src/com/todoroo/astrid/taskrabbit/TaskRabbitNameControlSet.java index d1720247d..37ecedf47 100644 --- a/astrid/plugin-src/com/todoroo/astrid/taskrabbit/TaskRabbitNameControlSet.java +++ b/astrid/plugin-src/com/todoroo/astrid/taskrabbit/TaskRabbitNameControlSet.java @@ -176,10 +176,10 @@ public class TaskRabbitNameControlSet extends PopupControlSet implements TaskRab } @Override - protected void onOkClick() { - super.onOkClick(); + protected boolean onOkClick() { InputMethodManager imm = (InputMethodManager)activity.getSystemService(Context.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(editText.getWindowToken(), 0); + return super.onOkClick(); } @Override diff --git a/astrid/src/com/todoroo/astrid/ui/EditNotesControlSet.java b/astrid/src/com/todoroo/astrid/ui/EditNotesControlSet.java index 74198ed32..dc6d5e1ec 100644 --- a/astrid/src/com/todoroo/astrid/ui/EditNotesControlSet.java +++ b/astrid/src/com/todoroo/astrid/ui/EditNotesControlSet.java @@ -81,10 +81,10 @@ public class EditNotesControlSet extends PopupControlSet { } @Override - protected void onOkClick() { - super.onOkClick(); + protected boolean onOkClick() { InputMethodManager imm = (InputMethodManager)activity.getSystemService(Context.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(editText.getWindowToken(), 0); + return super.onOkClick(); } @Override diff --git a/astrid/src/com/todoroo/astrid/ui/PopupControlSet.java b/astrid/src/com/todoroo/astrid/ui/PopupControlSet.java index d3816a8d0..18ef64955 100644 --- a/astrid/src/com/todoroo/astrid/ui/PopupControlSet.java +++ b/astrid/src/com/todoroo/astrid/ui/PopupControlSet.java @@ -27,10 +27,14 @@ public abstract class PopupControlSet extends TaskEditControlSet { protected final TextView displayText; private final String titleString; - final DialogInterface.OnClickListener okListener = new DialogInterface.OnClickListener() { + public interface PopupDialogClickListener { + public boolean onClick(DialogInterface d, int which); + } + + final PopupDialogClickListener okListener = new PopupDialogClickListener() { @Override - public void onClick(DialogInterface d, int which) { - onOkClick(); + public boolean onClick(DialogInterface d, int which) { + return onOkClick(); } }; @@ -66,7 +70,7 @@ public abstract class PopupControlSet extends TaskEditControlSet { return displayView; } - protected Dialog buildDialog(String title, final DialogInterface.OnClickListener okClickListener, DialogInterface.OnCancelListener cancelClickListener) { + protected Dialog buildDialog(String title, final PopupDialogClickListener okClickListener, DialogInterface.OnCancelListener cancelClickListener) { int theme = ThemeService.getEditDialogTheme(); dialog = new Dialog(activity, theme); if (title.length() == 0) @@ -82,8 +86,8 @@ public abstract class PopupControlSet extends TaskEditControlSet { dismiss.setOnClickListener(new OnClickListener() { @Override public void onClick(View view) { - okClickListener.onClick(dialog, 0); - DialogUtilities.dismissDialog(activity, dialog); + if (okClickListener.onClick(dialog, 0)) + DialogUtilities.dismissDialog(activity, dialog); } }); } @@ -122,8 +126,13 @@ public abstract class PopupControlSet extends TaskEditControlSet { // Subclasses can override } - protected void onOkClick() { + /** + * @return true if the dialog should be dismissed as the result of + * the click. Default is true. + */ + protected boolean onOkClick() { refreshDisplayView(); + return true; } protected void onCancelClick() {