From c768e5d8185de295325da9fc9bbf44805747097d Mon Sep 17 00:00:00 2001 From: Sam Bosley Date: Wed, 5 Sep 2012 13:50:14 -0700 Subject: [PATCH] Control set dialogs now persist across device rotation --- .../astrid/alarms/AlarmControlSet.java | 1 - .../astrid/activity/TaskEditFragment.java | 19 +++++++++++++++++++ .../todoroo/astrid/ui/PopupControlSet.java | 4 ++++ 3 files changed, 23 insertions(+), 1 deletion(-) diff --git a/astrid/plugin-src/com/todoroo/astrid/alarms/AlarmControlSet.java b/astrid/plugin-src/com/todoroo/astrid/alarms/AlarmControlSet.java index 5be507082..0433f72e0 100644 --- a/astrid/plugin-src/com/todoroo/astrid/alarms/AlarmControlSet.java +++ b/astrid/plugin-src/com/todoroo/astrid/alarms/AlarmControlSet.java @@ -40,7 +40,6 @@ public final class AlarmControlSet extends TaskEditControlSet { private DateAndTimeDialog pickerDialog; public AlarmControlSet(Activity activity, int layout) { - //View v = LayoutInflater.from(activity).inflate(R.layout.alarm_control, parent, true); super(activity, layout); } diff --git a/astrid/src/com/todoroo/astrid/activity/TaskEditFragment.java b/astrid/src/com/todoroo/astrid/activity/TaskEditFragment.java index 2b711d79a..238b53928 100755 --- a/astrid/src/com/todoroo/astrid/activity/TaskEditFragment.java +++ b/astrid/src/com/todoroo/astrid/activity/TaskEditFragment.java @@ -98,6 +98,7 @@ import com.todoroo.astrid.ui.HideUntilControlSet; import com.todoroo.astrid.ui.ImportanceControlSet; import com.todoroo.astrid.ui.NestableScrollView; import com.todoroo.astrid.ui.NestableViewPager; +import com.todoroo.astrid.ui.PopupControlSet; import com.todoroo.astrid.ui.ReminderControlSet; import com.todoroo.astrid.ui.TaskEditMoreControls; import com.todoroo.astrid.ui.WebServicesView; @@ -132,6 +133,8 @@ ViewPager.OnPageChangeListener, EditNoteActivity.UpdatesChangedListener { */ public static final String TOKEN_VALUES = "v"; //$NON-NLS-1$ + public static final String TOKEN_OPEN_CONTROL = "open_control"; //$NON-NLS-1$ + /** * Task in progress (during orientation change) */ @@ -602,6 +605,8 @@ ViewPager.OnPageChangeListener, EditNoteActivity.UpdatesChangedListener { moreSectionHasControls = false; + Class openControl = (Class) getActivity().getIntent().getSerializableExtra(TOKEN_OPEN_CONTROL); + for (int i = 0; i < itemOrder.length; i++) { String item = itemOrder[i]; if (item.equals(hideAlwaysTrigger)) { @@ -622,6 +627,7 @@ ViewPager.OnPageChangeListener, EditNoteActivity.UpdatesChangedListener { else if (curr != null) controlSet = (LinearLayout) curr.getDisplayView(); + if (controlSet != null) { if ((i + 1 >= itemOrder.length || itemOrder[i + 1].equals(moreSectionTrigger))) { removeTeaSeparator(controlSet); @@ -630,9 +636,15 @@ ViewPager.OnPageChangeListener, EditNoteActivity.UpdatesChangedListener { if (section == moreControls) moreSectionHasControls = true; } + + if (curr != null && curr.getClass().equals(openControl) && curr instanceof PopupControlSet) { + ((PopupControlSet) curr).getDisplayView().performClick(); + } } } + getActivity().getIntent().removeExtra(TOKEN_OPEN_CONTROL); + // Load task data in background new TaskEditBackgroundLoader().start(); } @@ -832,6 +844,13 @@ ViewPager.OnPageChangeListener, EditNoteActivity.UpdatesChangedListener { StringBuilder toast = new StringBuilder(); synchronized (controls) { for (TaskEditControlSet controlSet : controls) { + if (controlSet instanceof PopupControlSet) { // Save open control set + PopupControlSet popup = (PopupControlSet) controlSet; + Dialog d = popup.getDialog(); + if (d != null && d.isShowing()) { + getActivity().getIntent().putExtra(TOKEN_OPEN_CONTROL, popup.getClass()); + } + } String toastText = controlSet.writeToModel(model); if (toastText != null) toast.append('\n').append(toastText); diff --git a/astrid/src/com/todoroo/astrid/ui/PopupControlSet.java b/astrid/src/com/todoroo/astrid/ui/PopupControlSet.java index 1ed73d83b..2e5a2c4e8 100644 --- a/astrid/src/com/todoroo/astrid/ui/PopupControlSet.java +++ b/astrid/src/com/todoroo/astrid/ui/PopupControlSet.java @@ -144,6 +144,10 @@ public abstract class PopupControlSet extends TaskEditControlSet { refreshDisplayView(); } + public Dialog getDialog() { + return dialog; + } + @Override public String writeToModel(Task task) { if (initialized && dialog != null)