From 30b55e3628ed2450002f04db2df52e2c78aa03bc Mon Sep 17 00:00:00 2001 From: Sam Bosley Date: Thu, 9 Feb 2012 11:45:48 -0800 Subject: [PATCH 1/7] Made list background white with dark text in black theme --- astrid/res/drawable/list_arrow_down_white.png | Bin 0 -> 1641 bytes astrid/res/drawable/list_arrow_up_white.png | Bin 0 -> 1636 bytes astrid/res/drawable/list_popover_bg_white.9.png | Bin 0 -> 159 bytes astrid/res/layout-land/filter_list_activity.xml | 2 +- .../task_list_wrapper_activity_3pane.xml | 4 ++-- astrid/res/layout/filter_list_activity.xml | 2 +- astrid/res/layout/filter_list_activity_3pane.xml | 2 +- astrid/res/layout/list_dropdown_popover.xml | 5 ++--- .../layout/task_list_wrapper_activity_3pane.xml | 4 ++-- astrid/res/values/attrs.xml | 3 +++ astrid/res/values/colors.xml | 3 ++- astrid/res/values/styles.xml | 8 +++++++- 12 files changed, 21 insertions(+), 12 deletions(-) create mode 100644 astrid/res/drawable/list_arrow_down_white.png create mode 100644 astrid/res/drawable/list_arrow_up_white.png create mode 100644 astrid/res/drawable/list_popover_bg_white.9.png diff --git a/astrid/res/drawable/list_arrow_down_white.png b/astrid/res/drawable/list_arrow_down_white.png new file mode 100644 index 0000000000000000000000000000000000000000..101e65b8dbda66dcf6ba789376248a67b3da9dd7 GIT binary patch literal 1641 zcmeAS@N?(olHy`uVBq!ia0vp^>Od^Q!3HGxd{xXC7??j~Iy(n=Iy)-_6y>L7=A<$( zXiV%4y_!O8b!EW5jI&eJcH|aSp0iukHYa0i>ecQy;${~d%^w7$4+-t3)H{3^@`c<|Rnt=U%DU7@^r@OGNI1;%&MIO9qtS{9?L7Nr3j%|g znSG`NTnU;Y(YZX4FZFHZ(}u%^M`rM@xjxg>E%W?C!FMe(vrB|q-yDCgpgGAoWkyef z&pnm=iHB9XF9{YET;3+reLm^#%`czrOfG0YmTf+>bDmqg$onZ4<+UTUWr+V}2S3*8EEBCLwz4Gf7u6L_fZta-(%XVwq z{!owPytD}yZS348w2Plsh&!BGQ*)uCQ&xu5PSDvzFiyUg=P$d9lefj|6y#Ql&=c{r&c@`vXRr5fd!p1D^aKTrPrrnxHm zs*&&RxL|{&JzJuyJWqM)d#v|3dSd<+U0%=ROLAA<+_TwUv8O_pZO(zcSFe8CXtBO2 zirJ4}&fmdas=VX* zHlMlwW^iTnh^{YIm|V-i36CGAeV+d`t@yF` zm;G!7C;x~?G89%E(KzG)ECM(SJR*x37`TN&n2}-D90>*n#=Ojsh>{3jAFJg2T)o7U z{G?R9irfOAY6b?I3M(KpH?<^Dp&~aYuh^=>Rtc=a3djZt>nkaMm6T-LDnNc-DA*LGq*(>IxIwi8dA3R!B_#z``ugSN<$C4Ddih1^`i7R4mih)p z`bI{&Koz>hm3bwJ6}oxF$`C_f=D4I5Cl_TFlw{`TDS*sPOv*1Uu~kw6Sp)|Vccvu6 z?I|cN$^qMwlB}PalbV~FS5mBRsAs4THyo(fCMDUbxHKs%HMs=rZn$w^4>%>J>mv!< z=wqt3(FeH*$%PQ_gGGVlFz@#s7|<+Naf0uQSpYk~j& zy@3s)6-g-qpRVsvcRx}6nx|;XwR4|>83ePp9pQ3Wb3uMns@pF9Gy0n(Z4R6M&`^+aMt@9QqOq(oHeSU>^pHRn--FJ($C$7j=cUdOd^Q!3HGxd{xXC7??j~Iy(n=Iy)-_6y>L7=A<$( zXiV%4y_!O8b!EW5jI&eJcH|aSp0iukHYa0i>ecQy;${~d%^w7$4+-t3)H{3^@`c<|Rnt=U%DU7@^r@OGNI1;%&MIO9qtS{9?L7Nr3j%|g znSG`NTnU;Y(YZX4FZFHZ(}u%^M`rM@xjxg>E%W?C!FMe(vrB|q-yDCgpgGAoWkyef z&pnm=iHB9XF9{YET;3+reLm^#%`czrOfG0YmTf+>bDmqg$onZ4<+UTUWr+V}2S3*8EEBCLwz4Gf7u6L_fZta-(%XVwq z{!owPytD}yZS348w2Plsh&!BGQ*)uCQ&xu5PSDvzFiyUg=P$d9lefj|6y#Ql&=c{r&c@`vXRr5fd!p1D^aKTrPrrnxHm zs*&&RxL|{&JzJuyJWqM)d#v|3dSd<+U0%=ROLAA<+_TwUv8O_pZO(zcSFe8CXtBO2 zirJ4}&fmdas=VX* zHlMlwW^iTnh^{YIm|V-i36CGAeV+d`t@yF` zm;G!7C;x~?G89%E(KzG)ECM(SJR*x37`TN&n2}-D90>*n#=Ojsh>{3jAFJg2T)o7U z{G?R9irfOAY6b?I3M(KpH?<^Dp&~aYuh^=>Rtc=a3djZt>nkaMm6T-LDnNc-DA*LGq*(>IxIwi8dA3R!B_#z``ugSN<$C4Ddih1^`i7R4mih)p z`bI{&Koz>hm3bwJ6}oxF$`C_f=D4I5Cl_TFlw{`TDS*sPOv*1Uu~kw6Sp)|Vccvu6 z?I|cN$^qMwlB}PalbV~FS5mBRsAs4THyo(fCMDUbxHKs%HMs=rZn$w^4>%>J>mv!< z=wqt3(FeH*$%PQ_gGGV*-2dU6=YPWTKi9QqOqP55T;^&{ Q_5q~@Pgg&ebxsLQ0HnXp5&!@I literal 0 HcmV?d00001 diff --git a/astrid/res/drawable/list_popover_bg_white.9.png b/astrid/res/drawable/list_popover_bg_white.9.png new file mode 100644 index 0000000000000000000000000000000000000000..77b1abce97a33b2706558134978eb3f728252014 GIT binary patch literal 159 zcmeAS@N?(olHy`uVBq!ia0vp^Iv~u!1|;QLq8Ncxnx~6nNX4zUH#hP&81S$h=$V~) z^N?HvYeSPu3gZ)x^p{V+b-mxW_3OGtk^08fE;8rswV!SM%DJxR@1k_xRmtvdwhfIq mKs`ggdG%X!op&a8@4Zu6J>l)U=Ldi`GI+ZBxvX diff --git a/astrid/res/layout-land/task_list_wrapper_activity_3pane.xml b/astrid/res/layout-land/task_list_wrapper_activity_3pane.xml index d2a237e16..007509d14 100644 --- a/astrid/res/layout-land/task_list_wrapper_activity_3pane.xml +++ b/astrid/res/layout-land/task_list_wrapper_activity_3pane.xml @@ -17,7 +17,7 @@ + android:background="?attr/asSeparatorBackground"/> + android:background="?attr/asSeparatorBackground"/> diff --git a/astrid/res/layout/filter_list_activity_3pane.xml b/astrid/res/layout/filter_list_activity_3pane.xml index b829db833..e4f1b27e2 100644 --- a/astrid/res/layout/filter_list_activity_3pane.xml +++ b/astrid/res/layout/filter_list_activity_3pane.xml @@ -3,7 +3,7 @@ + android:background="?attr/asListTabletBg"> + android:src="?attr/asListArrowUp" /> + android:layout_below="@android:id/list" /> diff --git a/astrid/res/layout/task_list_wrapper_activity_3pane.xml b/astrid/res/layout/task_list_wrapper_activity_3pane.xml index 44ad9bb5a..47037dc87 100644 --- a/astrid/res/layout/task_list_wrapper_activity_3pane.xml +++ b/astrid/res/layout/task_list_wrapper_activity_3pane.xml @@ -17,7 +17,7 @@ + android:background="?attr/asSeparatorBackground"/> + android:background="?attr/asSeparatorBackground"/> + + + diff --git a/astrid/res/values/colors.xml b/astrid/res/values/colors.xml index c3c5a0bc0..af6115998 100644 --- a/astrid/res/values/colors.xml +++ b/astrid/res/values/colors.xml @@ -30,7 +30,8 @@ #d90000 #1f78b4 #292929 - #101010 + #eee6e6e6 + #cccccc #262626 diff --git a/astrid/res/values/styles.xml b/astrid/res/values/styles.xml index 6fee98e2f..b2c7a6973 100644 --- a/astrid/res/values/styles.xml +++ b/astrid/res/values/styles.xml @@ -31,6 +31,9 @@ #000000 @drawable/taskedit_arrow_up_white @drawable/icn_edit_repeats_blue + @drawable/list_popover_bg_white + @drawable/list_arrow_up_white + @color/tablet_list_bg_white @drawable/header_blue @@ -74,6 +77,9 @@ @drawable/taskedit_arrow_up_white @drawable/icn_edit_repeats_red #ffffff + @drawable/list_popover_bg + @color/tablet_list_bg + @drawable/list_arrow_up @drawable/header_red @@ -337,7 +343,7 @@ + + diff --git a/astrid/src/com/todoroo/astrid/adapter/FilterAdapter.java b/astrid/src/com/todoroo/astrid/adapter/FilterAdapter.java index 2e651bd69..a8522e57c 100644 --- a/astrid/src/com/todoroo/astrid/adapter/FilterAdapter.java +++ b/astrid/src/com/todoroo/astrid/adapter/FilterAdapter.java @@ -39,6 +39,7 @@ import com.timsu.astrid.R; import com.todoroo.andlib.service.Autowired; import com.todoroo.andlib.service.ContextManager; import com.todoroo.andlib.service.DependencyInjectionService; +import com.todoroo.astrid.activity.AstridActivity; import com.todoroo.astrid.activity.FilterListFragment; import com.todoroo.astrid.api.AstridApiConstants; import com.todoroo.astrid.api.AstridFilterExposer; @@ -116,6 +117,9 @@ public class FilterAdapter extends ArrayAdapter { this.skipIntentFilters = skipIntentFilters; this.selectable = selectable; + if (((AstridActivity) activity).getFragmentLayout() != AstridActivity.LAYOUT_SINGLE) + filterStyle = R.style.TextAppearance_FLA_Filter_Tablet; + inflater = (LayoutInflater) activity.getSystemService( Context.LAYOUT_INFLATER_SERVICE); From 2bf26ee51e08b3cb643b033e3f814cc45dd69127 Mon Sep 17 00:00:00 2001 From: Sam Bosley Date: Thu, 9 Feb 2012 14:03:16 -0800 Subject: [PATCH 4/7] All the when control sets working in quickadd --- .../astrid/actfm/EditPeopleControlSet.java | 24 ++-- .../astrid/repeats/RepeatControlSet.java | 4 + .../layout/control_set_default_display.xml | 2 +- astrid/res/layout/task_list_activity.xml | 121 +++++++++++------- .../astrid/activity/TaskEditFragment.java | 2 +- .../astrid/activity/TaskListFragment.java | 63 +++++++++ .../todoroo/astrid/ui/DateAndTimeDialog.java | 4 +- .../todoroo/astrid/ui/DateAndTimePicker.java | 8 +- .../todoroo/astrid/ui/DeadlineControlSet.java | 21 ++- .../astrid/ui/HideUntilControlSet.java | 2 +- 10 files changed, 182 insertions(+), 69 deletions(-) diff --git a/astrid/plugin-src/com/todoroo/astrid/actfm/EditPeopleControlSet.java b/astrid/plugin-src/com/todoroo/astrid/actfm/EditPeopleControlSet.java index 4643209fc..7c09fe57b 100644 --- a/astrid/plugin-src/com/todoroo/astrid/actfm/EditPeopleControlSet.java +++ b/astrid/plugin-src/com/todoroo/astrid/actfm/EditPeopleControlSet.java @@ -153,8 +153,12 @@ public class EditPeopleControlSet extends PopupControlSet { @Override public void readFromTask(Task sourceTask) { - task = sourceTask; - setUpData(); + setTask(sourceTask); + setUpData(task); + } + + public void setTask(Task task) { + this.task = task; } public View getSharedWithRow() { @@ -166,7 +170,7 @@ public class EditPeopleControlSet extends PopupControlSet { } @SuppressWarnings("nls") - private void setUpData() { + public void setUpData(final Task task) { try { JSONObject sharedWith; if(task.getValue(Task.SHARED_WITH).length() > 0) @@ -220,7 +224,7 @@ public class EditPeopleControlSet extends PopupControlSet { if(collaborators.size() > 0) buildCollaborators(collaborators); - buildAssignedToSpinner(sharedPeople); + buildAssignedToSpinner(task, sharedPeople); } catch (JSONException e) { exceptionService.reportError("json-reading-data", e); } finally { @@ -284,13 +288,13 @@ public class EditPeopleControlSet extends PopupControlSet { } @SuppressWarnings("nls") - private void buildAssignedToSpinner(ArrayList sharedPeople) throws JSONException { + private void buildAssignedToSpinner(Task model, ArrayList sharedPeople) throws JSONException { HashSet userIds = new HashSet(); HashSet emails = new HashSet(); HashMap names = new HashMap(); - if(task.getValue(Task.USER_ID) > 0) { - JSONObject user = new JSONObject(task.getValue(Task.USER)); + if(model.getValue(Task.USER_ID) > 0) { + JSONObject user = new JSONObject(model.getValue(Task.USER)); sharedPeople.add(0, user); } @@ -298,8 +302,8 @@ public class EditPeopleControlSet extends PopupControlSet { myself.put("id", Task.USER_ID_SELF); sharedPeople.add(0, myself); - boolean hasTags = task.getTransitory("tags") != null && - ((HashSet)task.getTransitory("tags")).size() > 0; + boolean hasTags = model.getTransitory("tags") != null && + ((HashSet)model.getTransitory("tags")).size() > 0; if (actFmPreferenceService.isLoggedIn() && hasTags) { JSONObject unassigned = new JSONObject(); unassigned.put("id", Task.USER_ID_UNASSIGNED); @@ -347,7 +351,7 @@ public class EditPeopleControlSet extends PopupControlSet { names.put(name, atu); } - String assignedStr = task.getValue(Task.USER); + String assignedStr = model.getValue(Task.USER); int assignedIndex = 0; if (!TextUtils.isEmpty(assignedStr)) { JSONObject assigned = new JSONObject(assignedStr); diff --git a/astrid/plugin-src/com/todoroo/astrid/repeats/RepeatControlSet.java b/astrid/plugin-src/com/todoroo/astrid/repeats/RepeatControlSet.java index be96498e1..3229a7b3f 100644 --- a/astrid/plugin-src/com/todoroo/astrid/repeats/RepeatControlSet.java +++ b/astrid/plugin-src/com/todoroo/astrid/repeats/RepeatControlSet.java @@ -324,6 +324,10 @@ public class RepeatControlSet extends PopupControlSet { return null; } + public boolean isRecurrenceSet() { + return doRepeat; + } + @Override protected void refreshDisplayView() { TextView repeatDisplay = (TextView) getDisplayView().findViewById(R.id.display_row_edit); diff --git a/astrid/res/layout/control_set_default_display.xml b/astrid/res/layout/control_set_default_display.xml index cbf0bdc70..bc1782fb9 100644 --- a/astrid/res/layout/control_set_default_display.xml +++ b/astrid/res/layout/control_set_default_display.xml @@ -17,7 +17,7 @@ android:id="@+id/display_row_title" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_marginRight="15dip" + android:layout_marginRight="10dip" style="@style/TextAppearance.GEN_EditLabel" /> - - - - - - + + + + + + + + - - - + + + + + + + + + + + + diff --git a/astrid/src/com/todoroo/astrid/activity/TaskEditFragment.java b/astrid/src/com/todoroo/astrid/activity/TaskEditFragment.java index 9d1a59368..98413b00a 100755 --- a/astrid/src/com/todoroo/astrid/activity/TaskEditFragment.java +++ b/astrid/src/com/todoroo/astrid/activity/TaskEditFragment.java @@ -150,7 +150,7 @@ public final class TaskEditFragment extends Fragment implements // --- request codes - private static final int REQUEST_LOG_IN = 0; + public static final int REQUEST_LOG_IN = 0; private static final int REQUEST_VOICE_RECOG = 1; // --- menu codes diff --git a/astrid/src/com/todoroo/astrid/activity/TaskListFragment.java b/astrid/src/com/todoroo/astrid/activity/TaskListFragment.java index a3e0eb2c6..7d9e40d07 100644 --- a/astrid/src/com/todoroo/astrid/activity/TaskListFragment.java +++ b/astrid/src/com/todoroo/astrid/activity/TaskListFragment.java @@ -46,6 +46,7 @@ import android.view.View.OnClickListener; import android.view.View.OnKeyListener; import android.view.View.OnLongClickListener; import android.view.ViewGroup; +import android.view.ViewGroup.LayoutParams; import android.view.WindowManager; import android.view.inputmethod.EditorInfo; import android.view.inputmethod.InputMethodManager; @@ -55,6 +56,7 @@ import android.widget.AdapterView.AdapterContextMenuInfo; import android.widget.ArrayAdapter; import android.widget.EditText; import android.widget.ImageButton; +import android.widget.LinearLayout; import android.widget.ListView; import android.widget.TextView; import android.widget.TextView.OnEditorActionListener; @@ -76,6 +78,7 @@ import com.todoroo.andlib.utility.Preferences; import com.todoroo.andlib.widget.GestureService; import com.todoroo.andlib.widget.GestureService.GestureInterface; import com.todoroo.astrid.actfm.ActFmLoginActivity; +import com.todoroo.astrid.actfm.EditPeopleControlSet; import com.todoroo.astrid.actfm.TagUpdatesActivity; import com.todoroo.astrid.actfm.TagViewFragment; import com.todoroo.astrid.activity.SortSelectionActivity.OnSortSelectedListener; @@ -96,12 +99,14 @@ import com.todoroo.astrid.dao.TaskDao.TaskCriteria; import com.todoroo.astrid.data.Metadata; import com.todoroo.astrid.data.TagData; import com.todoroo.astrid.data.Task; +import com.todoroo.astrid.gcal.GCalControlSet; import com.todoroo.astrid.gcal.GCalHelper; import com.todoroo.astrid.helper.MetadataHelper; import com.todoroo.astrid.helper.ProgressBarSyncResultCallback; import com.todoroo.astrid.helper.TaskListContextMenuExtensionLoader; import com.todoroo.astrid.helper.TaskListContextMenuExtensionLoader.ContextMenuItem; import com.todoroo.astrid.reminders.ReminderDebugContextActions; +import com.todoroo.astrid.repeats.RepeatControlSet; import com.todoroo.astrid.service.AddOnService; import com.todoroo.astrid.service.AstridDependencyInjector; import com.todoroo.astrid.service.MetadataService; @@ -115,6 +120,7 @@ import com.todoroo.astrid.service.UpgradeService; import com.todoroo.astrid.sync.SyncResultCallback; import com.todoroo.astrid.sync.SyncV2Provider; import com.todoroo.astrid.ui.DateChangedAlerts; +import com.todoroo.astrid.ui.DeadlineControlSet; import com.todoroo.astrid.utility.AstridPreferences; import com.todoroo.astrid.utility.Constants; import com.todoroo.astrid.utility.Flags; @@ -229,6 +235,11 @@ public class TaskListFragment extends ListFragment implements OnScrollListener, protected OnTaskListItemClickedListener mListener; private boolean mDualFragments = false; + private DeadlineControlSet deadlineControl; + private RepeatControlSet repeatControl; + private GCalControlSet gcalControl; + private EditPeopleControlSet peopleControl; + /* * ====================================================================== * ======================================================= initialization @@ -503,6 +514,8 @@ public class TaskListFragment extends ListFragment implements OnScrollListener, } }); + setUpQuickAddControlSets(); + // set listener for pressing enter in quick-add box quickAddBox = (EditText) getView().findViewById(R.id.quickAddText); quickAddBox.setOnEditorActionListener(new OnEditorActionListener() { @@ -595,6 +608,44 @@ public class TaskListFragment extends ListFragment implements OnScrollListener, getView().findViewById(R.id.progressBar).setVisibility(View.GONE); } + private void setUpQuickAddControlSets() { + + repeatControl = new RepeatControlSet(getActivity(), + R.layout.control_set_repeat, + R.layout.control_set_repeat_display, R.string.repeat_enabled); + + gcalControl = new GCalControlSet(getActivity(), + R.layout.control_set_gcal, R.layout.control_set_gcal_display, + R.string.gcal_TEA_addToCalendar_label); + + deadlineControl = new DeadlineControlSet( + getActivity(), R.layout.control_set_deadline, + R.layout.control_set_default_display, + repeatControl.getDisplayView(), gcalControl.getDisplayView()); + deadlineControl.setUseNewlineForDisplaySeparator(true); + + peopleControl = new EditPeopleControlSet(getActivity(), + R.layout.control_set_assigned, + R.layout.control_set_default_display, + R.string.actfm_EPA_assign_label, TaskEditFragment.REQUEST_LOG_IN); + + resetControlSets(); + + LayoutParams lp = new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT, 1.0f); + LinearLayout container = (LinearLayout) getView().findViewById(R.id.taskListQuickaddControls); + container.addView(peopleControl.getDisplayView(), 0, lp); + container.addView(deadlineControl.getDisplayView(), 2, lp); + } + + private void resetControlSets() { + Task empty = new Task(); + repeatControl.readFromTask(empty); + gcalControl.readFromTask(empty); + deadlineControl.readFromTask(empty); + peopleControl.setUpData(empty); + peopleControl.setTask(null); + } + // Subclasses can override these to customize extras in quickadd intent protected Intent getOnClickQuickAddIntent(Task t) { Intent intent = new Intent(getActivity(), TaskEditActivity.class); @@ -1079,6 +1130,18 @@ public class TaskListFragment extends ListFragment implements OnScrollListener, Task task = createWithValues(filter.valuesForNewTasks, title, taskService, metadataService); + //TODO: fix assigned + if (repeatControl.isRecurrenceSet()) + repeatControl.writeToModel(task); + if (deadlineControl.isDeadlineSet()) + deadlineControl.writeToModel(task); + gcalControl.writeToModel(task); + //peopleControl.setTask(task); + //peopleControl.saveSharingSettings(""); + taskService.save(task); + + resetControlSets(); + boolean gcalCreateEventEnabled = Preferences.getStringValue(R.string.gcal_p_default) != null && !Preferences.getStringValue(R.string.gcal_p_default).equals( "-1"); diff --git a/astrid/src/com/todoroo/astrid/ui/DateAndTimeDialog.java b/astrid/src/com/todoroo/astrid/ui/DateAndTimeDialog.java index e97994ea8..119751b55 100644 --- a/astrid/src/com/todoroo/astrid/ui/DateAndTimeDialog.java +++ b/astrid/src/com/todoroo/astrid/ui/DateAndTimeDialog.java @@ -93,10 +93,10 @@ public class DateAndTimeDialog extends Dialog { } public String getDisplayString(Context context) { - return dateAndTimePicker.getDisplayString(context); + return dateAndTimePicker.getDisplayString(context, false); } public String getDisplayString(Context context, long forDate) { - return DateAndTimePicker.getDisplayString(context, forDate); + return DateAndTimePicker.getDisplayString(context, forDate, false); } } diff --git a/astrid/src/com/todoroo/astrid/ui/DateAndTimePicker.java b/astrid/src/com/todoroo/astrid/ui/DateAndTimePicker.java index 071b55e40..0750bf375 100644 --- a/astrid/src/com/todoroo/astrid/ui/DateAndTimePicker.java +++ b/astrid/src/com/todoroo/astrid/ui/DateAndTimePicker.java @@ -223,18 +223,18 @@ public class DateAndTimePicker extends LinearLayout { this.listener = listener; } - public String getDisplayString(Context context) { + public String getDisplayString(Context context, boolean useNewline) { long dueDate = constructDueDate(); - return getDisplayString(context, dueDate); + return getDisplayString(context, dueDate, useNewline); } - public static String getDisplayString(Context context, long forDate) { + public static String getDisplayString(Context context, long forDate, boolean useNewline) { StringBuilder displayString = new StringBuilder(); Date d = new Date(forDate); if (d.getTime() > 0) { displayString.append(DateUtilities.getDateString(context, d)); if (Task.hasDueTime(forDate)) { - displayString.append(", "); //$NON-NLS-1$ + displayString.append(useNewline ? "\n" : ", "); //$NON-NLS-1$ //$NON-NLS-2$ displayString.append(DateUtilities.getTimeString(context, d)); } } diff --git a/astrid/src/com/todoroo/astrid/ui/DeadlineControlSet.java b/astrid/src/com/todoroo/astrid/ui/DeadlineControlSet.java index 1ca043f89..35f0540e0 100644 --- a/astrid/src/com/todoroo/astrid/ui/DeadlineControlSet.java +++ b/astrid/src/com/todoroo/astrid/ui/DeadlineControlSet.java @@ -15,6 +15,7 @@ import com.todoroo.astrid.data.Task; public class DeadlineControlSet extends PopupControlSet { + private boolean useNewline = false; private final DateAndTimePicker dateAndTimePicker; public DeadlineControlSet(Activity activity, int viewLayout, int displayViewLayout, View...extraViews) { @@ -43,14 +44,14 @@ public class DeadlineControlSet extends PopupControlSet { @Override protected void refreshDisplayView() { TextView dateDisplay = (TextView) getDisplayView().findViewById(R.id.display_row_edit); - String toDisplay = dateAndTimePicker.getDisplayString(activity); + String toDisplay = dateAndTimePicker.getDisplayString(activity, useNewline); dateDisplay.setText(toDisplay); } @Override public void readFromTask(Task task) { long dueDate = task.getValue(Task.DUE_DATE); - dateAndTimePicker.initializeWithDate(dueDate); + initializeWithDate(dueDate); refreshDisplayView(); } @@ -60,4 +61,20 @@ public class DeadlineControlSet extends PopupControlSet { task.setValue(Task.DUE_DATE, dueDate); return null; } + + public void initializeWithDate(long dueDate) { + dateAndTimePicker.initializeWithDate(dueDate); + } + + public boolean isDeadlineSet() { + return dateAndTimePicker.constructDueDate() != 0; + } + + /** + * Set whether date and time should be separated by a newline or a comma + * in the display view + */ + public void setUseNewlineForDisplaySeparator(boolean useNewline) { + this.useNewline = useNewline; + } } diff --git a/astrid/src/com/todoroo/astrid/ui/HideUntilControlSet.java b/astrid/src/com/todoroo/astrid/ui/HideUntilControlSet.java index 9abaefc6c..b846db507 100644 --- a/astrid/src/com/todoroo/astrid/ui/HideUntilControlSet.java +++ b/astrid/src/com/todoroo/astrid/ui/HideUntilControlSet.java @@ -249,7 +249,7 @@ public class HideUntilControlSet extends PopupControlSet implements OnItemSelect task.setValue(Task.HIDE_UNTIL, value); if (value != 0) - return activity.getString(R.string.TEA_hideUntil_message, DateAndTimePicker.getDisplayString(activity, value)); + return activity.getString(R.string.TEA_hideUntil_message, DateAndTimePicker.getDisplayString(activity, value, false)); return null; } From c08e008be663a03817aa5bc5ad620e35bc273e63 Mon Sep 17 00:00:00 2001 From: Sam Bosley Date: Thu, 9 Feb 2012 14:53:08 -0800 Subject: [PATCH 5/7] Fix quick add assignment when not logged in --- .../astrid/actfm/EditPeopleControlSet.java | 36 +++++++++++++++---- .../astrid/activity/TaskEditFragment.java | 2 +- .../astrid/activity/TaskListFragment.java | 35 +++++++++++++++--- 3 files changed, 62 insertions(+), 11 deletions(-) diff --git a/astrid/plugin-src/com/todoroo/astrid/actfm/EditPeopleControlSet.java b/astrid/plugin-src/com/todoroo/astrid/actfm/EditPeopleControlSet.java index 7c09fe57b..e6dce1980 100644 --- a/astrid/plugin-src/com/todoroo/astrid/actfm/EditPeopleControlSet.java +++ b/astrid/plugin-src/com/todoroo/astrid/actfm/EditPeopleControlSet.java @@ -16,6 +16,7 @@ import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.graphics.Color; +import android.support.v4.app.Fragment; import android.text.TextUtils; import android.util.DisplayMetrics; import android.view.LayoutInflater; @@ -76,6 +77,8 @@ public class EditPeopleControlSet extends PopupControlSet { @Autowired TagDataService tagDataService; + private final Fragment fragment; + private final PeopleContainer sharedWithContainer; private final CheckBox cbFacebook; @@ -108,10 +111,11 @@ public class EditPeopleControlSet extends PopupControlSet { // --- UI initialization - public EditPeopleControlSet(Activity activity, int viewLayout, int displayViewLayout, int title, int loginRequestCode) { + public EditPeopleControlSet(Activity activity, Fragment fragment, int viewLayout, int displayViewLayout, int title, int loginRequestCode) { super(activity, viewLayout, displayViewLayout, title); DependencyInjectionService.getInstance().inject(this); this.loginRequestCode = loginRequestCode; + this.fragment = fragment; displayText.setText(activity.getString(R.string.TEA_control_who)); sharedWithRow = LayoutInflater.from(activity).inflate(R.layout.control_set_default_display, null); @@ -413,8 +417,9 @@ public class EditPeopleControlSet extends PopupControlSet { } } - private void assignToMe() { - assignedClear.performClick(); + public void assignToMe() { + assignedList.performItemClick(assignedList.getChildAt(0), 0, 0); + refreshDisplayView(); } private void setUpListeners() { @@ -546,7 +551,7 @@ public class EditPeopleControlSet extends PopupControlSet { DialogInterface.OnClickListener okListener = new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface d, int which) { - activity.startActivityForResult(new Intent(activity, ActFmLoginActivity.class), + fragment.startActivityForResult(new Intent(activity, ActFmLoginActivity.class), loginRequestCode); } }; @@ -592,10 +597,9 @@ public class EditPeopleControlSet extends PopupControlSet { } private void makePrivateTask() { - assignToMe(); sharedWithContainer.removeAllViews(); sharedWithContainer.addPerson(""); //$NON-NLS-1$ - refreshDisplayView(); + assignToMe(); } private void showSaveToast(String saveToast) { @@ -704,6 +708,26 @@ public class EditPeopleControlSet extends PopupControlSet { return assignedToMe; } + /** + * Check if task will be assigned to current user when save setting is called + */ + public boolean willBeAssignedToMe() { + JSONObject userJson = null; + if(!TextUtils.isEmpty(assignedCustom.getText())) { + userJson = PeopleContainer.createUserJson(assignedCustom); + } else { + AssignedToUser item = (AssignedToUser) assignedList.getAdapter().getItem(assignedList.getCheckedItemPosition()); + if (item != null) + userJson = item.user; + } + + if(userJson == null || userJson.optLong("id", Task.USER_ID_EMAIL) == Task.USER_ID_SELF) { //$NON-NLS-1$ + return true; + } + + return false; + } + public String getAssignedToString() { return assignedDisplay.getText().toString(); } diff --git a/astrid/src/com/todoroo/astrid/activity/TaskEditFragment.java b/astrid/src/com/todoroo/astrid/activity/TaskEditFragment.java index 98413b00a..dbbe3b5e0 100755 --- a/astrid/src/com/todoroo/astrid/activity/TaskEditFragment.java +++ b/astrid/src/com/todoroo/astrid/activity/TaskEditFragment.java @@ -505,7 +505,7 @@ public final class TaskEditFragment extends Fragment implements // EditPeopleControlSet relies on the "tags" transitory created by the // TagsControlSet, so we put the tags control before the people control - controls.add(peopleControlSet = new EditPeopleControlSet(getActivity(), + controls.add(peopleControlSet = new EditPeopleControlSet(getActivity(), this, R.layout.control_set_assigned, R.layout.control_set_default_display, R.string.actfm_EPA_assign_label, REQUEST_LOG_IN)); diff --git a/astrid/src/com/todoroo/astrid/activity/TaskListFragment.java b/astrid/src/com/todoroo/astrid/activity/TaskListFragment.java index 7d9e40d07..0d55e2281 100644 --- a/astrid/src/com/todoroo/astrid/activity/TaskListFragment.java +++ b/astrid/src/com/todoroo/astrid/activity/TaskListFragment.java @@ -74,6 +74,7 @@ import com.todoroo.andlib.sql.Functions; import com.todoroo.andlib.sql.QueryTemplate; import com.todoroo.andlib.utility.AndroidUtilities; import com.todoroo.andlib.utility.DateUtilities; +import com.todoroo.andlib.utility.DialogUtilities; import com.todoroo.andlib.utility.Preferences; import com.todoroo.andlib.widget.GestureService; import com.todoroo.andlib.widget.GestureService.GestureInterface; @@ -81,6 +82,7 @@ import com.todoroo.astrid.actfm.ActFmLoginActivity; import com.todoroo.astrid.actfm.EditPeopleControlSet; import com.todoroo.astrid.actfm.TagUpdatesActivity; import com.todoroo.astrid.actfm.TagViewFragment; +import com.todoroo.astrid.actfm.sync.ActFmPreferenceService; import com.todoroo.astrid.activity.SortSelectionActivity.OnSortSelectedListener; import com.todoroo.astrid.adapter.TaskAdapter; import com.todoroo.astrid.adapter.TaskAdapter.OnCompletedTaskListener; @@ -205,6 +207,9 @@ public class TaskListFragment extends ListFragment implements OnScrollListener, @Autowired TagDataService tagDataService; + @Autowired + ActFmPreferenceService actFmPreferenceService; + private final TaskContextActionExposer[] contextItemExposers = new TaskContextActionExposer[] { new ReminderDebugContextActions.MakeNotification(), new ReminderDebugContextActions.WhenReminder(), }; @@ -624,7 +629,7 @@ public class TaskListFragment extends ListFragment implements OnScrollListener, repeatControl.getDisplayView(), gcalControl.getDisplayView()); deadlineControl.setUseNewlineForDisplaySeparator(true); - peopleControl = new EditPeopleControlSet(getActivity(), + peopleControl = new EditPeopleControlSet(getActivity(), this, R.layout.control_set_assigned, R.layout.control_set_default_display, R.string.actfm_EPA_assign_label, TaskEditFragment.REQUEST_LOG_IN); @@ -643,6 +648,7 @@ public class TaskListFragment extends ListFragment implements OnScrollListener, gcalControl.readFromTask(empty); deadlineControl.readFromTask(empty); peopleControl.setUpData(empty); + peopleControl.assignToMe(); peopleControl.setTask(null); } @@ -1127,17 +1133,38 @@ public class TaskListFragment extends ListFragment implements OnScrollListener, try { if (title != null) title = title.trim(); + if (!peopleControl.willBeAssignedToMe() && !actFmPreferenceService.isLoggedIn()) { + DialogInterface.OnClickListener okListener = new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface d, int which) { + startActivity(new Intent(getActivity(), ActFmLoginActivity.class)); + } + }; + + DialogInterface.OnClickListener cancelListener = new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface d, int which) { + // Reset people control + peopleControl.assignToMe(); + } + }; + DialogUtilities.okCancelCustomDialog(getActivity(), getActivity().getString(R.string.actfm_EPA_login_button), + getActivity().getString(R.string.actfm_EPA_login_to_share), R.string.actfm_EPA_login_button, + R.string.actfm_EPA_dont_share_button, android.R.drawable.ic_dialog_alert, + okListener, cancelListener); + return null; + } + Task task = createWithValues(filter.valuesForNewTasks, title, taskService, metadataService); - //TODO: fix assigned if (repeatControl.isRecurrenceSet()) repeatControl.writeToModel(task); if (deadlineControl.isDeadlineSet()) deadlineControl.writeToModel(task); gcalControl.writeToModel(task); - //peopleControl.setTask(task); - //peopleControl.saveSharingSettings(""); + peopleControl.setTask(task); + peopleControl.saveSharingSettings(null); taskService.save(task); resetControlSets(); From 207f33685fffa733a0abb34a863a69dc1eb74c45 Mon Sep 17 00:00:00 2001 From: Sam Bosley Date: Thu, 9 Feb 2012 15:50:22 -0800 Subject: [PATCH 6/7] Fixed a bug in people control set --- .../com/todoroo/astrid/actfm/EditPeopleControlSet.java | 6 ++++-- astrid/src/com/todoroo/astrid/activity/AstridActivity.java | 1 + 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/astrid/plugin-src/com/todoroo/astrid/actfm/EditPeopleControlSet.java b/astrid/plugin-src/com/todoroo/astrid/actfm/EditPeopleControlSet.java index e6dce1980..ebbac546c 100644 --- a/astrid/plugin-src/com/todoroo/astrid/actfm/EditPeopleControlSet.java +++ b/astrid/plugin-src/com/todoroo/astrid/actfm/EditPeopleControlSet.java @@ -418,8 +418,10 @@ public class EditPeopleControlSet extends PopupControlSet { } public void assignToMe() { - assignedList.performItemClick(assignedList.getChildAt(0), 0, 0); - refreshDisplayView(); + if (assignedList != null && assignedList.getChildAt(0) != null) { + assignedList.performItemClick(assignedList.getChildAt(0), 0, 0); + refreshDisplayView(); + } } private void setUpListeners() { diff --git a/astrid/src/com/todoroo/astrid/activity/AstridActivity.java b/astrid/src/com/todoroo/astrid/activity/AstridActivity.java index 3a3d9ae6c..3d3e50409 100644 --- a/astrid/src/com/todoroo/astrid/activity/AstridActivity.java +++ b/astrid/src/com/todoroo/astrid/activity/AstridActivity.java @@ -213,6 +213,7 @@ public class AstridActivity extends FragmentActivity }); } catch (Exception e) { // Don't worry about it + e.printStackTrace(); } } From 69d2f648003fb7b1602ff89c13a753954631199f Mon Sep 17 00:00:00 2001 From: Sam Bosley Date: Thu, 9 Feb 2012 16:42:08 -0800 Subject: [PATCH 7/7] Show and hide quick add controls with quick add focus --- astrid/res/layout/task_list_activity.xml | 38 ++++++++++++------- .../astrid/activity/TaskListFragment.java | 27 +++++++++++-- 2 files changed, 49 insertions(+), 16 deletions(-) diff --git a/astrid/res/layout/task_list_activity.xml b/astrid/res/layout/task_list_activity.xml index aa2d1df0d..a10f9e049 100644 --- a/astrid/res/layout/task_list_activity.xml +++ b/astrid/res/layout/task_list_activity.xml @@ -4,6 +4,9 @@ android:id="@+id/taskListParent" android:layout_width="fill_parent" android:layout_height="fill_parent" + android:focusable="true" + android:focusableInTouchMode="true" + android:descendantFocusability="beforeDescendants" style="@style/Content" android:orientation="vertical"> @@ -26,24 +29,33 @@ android:orientation="vertical" style="@style/Content"> - - + android:layout_height="wrap_content" + android:orientation="vertical" + android:visibility="gone"> - - + android:layout_width="fill_parent" + android:layout_height="1px" + android:background="?attr/asSeparatorBackground"/> + + + + + + + syncActions = new LinkedHashSet(); private boolean isFilter; @@ -519,6 +524,16 @@ public class TaskListFragment extends ListFragment implements OnScrollListener, } }); + getListView().setOnTouchListener(new OnTouchListener() { + @Override + public boolean onTouch(View v, MotionEvent event) { + quickAddBox.clearFocus(); + return false; + } + }); + + quickAddControls = (LinearLayout) getView().findViewById(R.id.taskListQuickaddControls); + quickAddControlsContainer = getView().findViewById(R.id.taskListQuickaddControlsContainer); setUpQuickAddControlSets(); // set listener for pressing enter in quick-add box @@ -539,6 +554,13 @@ public class TaskListFragment extends ListFragment implements OnScrollListener, } }); + quickAddBox.setOnFocusChangeListener(new OnFocusChangeListener() { + @Override + public void onFocusChange(View v, boolean hasFocus) { + quickAddControlsContainer.setVisibility(hasFocus ? View.VISIBLE : View.GONE); + } + }); + quickAddButton = ((ImageButton) getView().findViewById( R.id.quickAddButton)); @@ -637,9 +659,8 @@ public class TaskListFragment extends ListFragment implements OnScrollListener, resetControlSets(); LayoutParams lp = new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT, 1.0f); - LinearLayout container = (LinearLayout) getView().findViewById(R.id.taskListQuickaddControls); - container.addView(peopleControl.getDisplayView(), 0, lp); - container.addView(deadlineControl.getDisplayView(), 2, lp); + quickAddControls.addView(peopleControl.getDisplayView(), 0, lp); + quickAddControls.addView(deadlineControl.getDisplayView(), 2, lp); } private void resetControlSets() {