From 78b5bb31c20b9ca750e9c251f85527c2929d7aa8 Mon Sep 17 00:00:00 2001 From: Sam Bosley Date: Thu, 22 Dec 2011 11:04:28 -0700 Subject: [PATCH 01/21] Fixed a bug where the save toast wouldn't show correctly for shared tasks --- .../com/todoroo/astrid/actfm/EditPeopleControlSet.java | 9 ++++++--- astrid/res/layout/filter_list_activity.xml | 2 +- astrid/res/values/strings-core.xml | 5 ++++- 3 files changed, 11 insertions(+), 5 deletions(-) diff --git a/astrid/plugin-src/com/todoroo/astrid/actfm/EditPeopleControlSet.java b/astrid/plugin-src/com/todoroo/astrid/actfm/EditPeopleControlSet.java index 7b65d37e8..646d7a64f 100644 --- a/astrid/plugin-src/com/todoroo/astrid/actfm/EditPeopleControlSet.java +++ b/astrid/plugin-src/com/todoroo/astrid/actfm/EditPeopleControlSet.java @@ -661,17 +661,20 @@ public class EditPeopleControlSet extends PopupControlSet { task.setValue(Task.DETAILS_DATE, 0L); readTagData(result.getJSONArray("tags")); - JSONObject assignee = result.getJSONObject("assignee"); + JSONObject assignee = result.getJSONObject("user"); JsonHelper.readUser(assignee, task, Task.USER_ID, Task.USER); Flags.set(Flags.ACTFM_SUPPRESS_SYNC); taskService.save(task); String assignedName = assignee.optString("name"); + if (TextUtils.isEmpty(assignedName)) { + assignedName = assignee.optString("email"); + } long id = assignee.optLong("id", -2); - if (!(id == -2 || id == ActFmPreferenceService.userId() || assignedName == null)) { + if (!(id == -2 || id == ActFmPreferenceService.userId() || TextUtils.isEmpty(assignedName))) { saveToast += "\n" + - activity.getString(R.string.actfm_EPA_assigned_toast, assignedName); + activity.getString(R.string.actfm_EPA_assigned_toast, assignedName, assignedName); } int count = result.optInt("shared", 0); diff --git a/astrid/res/layout/filter_list_activity.xml b/astrid/res/layout/filter_list_activity.xml index d5afd764a..b12228225 100644 --- a/astrid/res/layout/filter_list_activity.xml +++ b/astrid/res/layout/filter_list_activity.xml @@ -60,7 +60,7 @@ android:layout_height="fill_parent" android:background="@drawable/footer_editbutton" android:gravity="center" - android:text="@string/FLA_new_filter" + android:text="@string/FLA_new_list" android:textStyle="bold" style="@style/TextAppearance.TEA_action"/> diff --git a/astrid/res/values/strings-core.xml b/astrid/res/values/strings-core.xml index 00756185f..d5eb68215 100644 --- a/astrid/res/values/strings-core.xml +++ b/astrid/res/values/strings-core.xml @@ -246,7 +246,10 @@ Created Shortcut: %s - New List + New Filter + + + New List From e23aee3b9be8452346e8bcecb06c344a61c14ec6 Mon Sep 17 00:00:00 2001 From: Sam Bosley Date: Thu, 22 Dec 2011 11:21:20 -0700 Subject: [PATCH 02/21] Tweaked the sequence of help popovers so the lists button help won't show right away --- .../src/com/todoroo/astrid/activity/TaskListActivity.java | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/astrid/src/com/todoroo/astrid/activity/TaskListActivity.java b/astrid/src/com/todoroo/astrid/activity/TaskListActivity.java index eaac861a4..6e94bb0c1 100644 --- a/astrid/src/com/todoroo/astrid/activity/TaskListActivity.java +++ b/astrid/src/com/todoroo/astrid/activity/TaskListActivity.java @@ -591,6 +591,10 @@ public class TaskListActivity extends ListActivity implements OnScrollListener, if (!Preferences.getBoolean(R.string.p_showed_add_task_help, false)) { HelpInfoPopover.showPopover(TaskListActivity.this, quickAddBox, R.string.help_popover_add_task, null); Preferences.setBoolean(R.string.p_showed_add_task_help, true); + } else if (Preferences.isSet(getString(R.string.p_showed_lists_help)) && + !Preferences.getBoolean(R.string.p_showed_lists_help, false)) { + HelpInfoPopover.showPopover(TaskListActivity.this, findViewById(R.id.back), R.string.help_popover_lists, null); + Preferences.setBoolean(R.string.p_showed_lists_help, true); } if (filter.title != null && filter.title.equals(getString(R.string.BFE_Active))) { @@ -896,7 +900,9 @@ public class TaskListActivity extends ListActivity implements OnScrollListener, OnDismissListener onDismiss = new OnDismissListener() { @Override public void onDismiss() { - if (!Preferences.getBoolean(R.string.p_showed_lists_help, false)) { + if (!Preferences.isSet(getString(R.string.p_showed_lists_help))) { + Preferences.setBoolean(R.string.p_showed_lists_help, false); + } else if (!Preferences.getBoolean(R.string.p_showed_lists_help, false)) { Preferences.setBoolean(R.string.p_showed_lists_help, true); HelpInfoPopover.showPopover(TaskListActivity.this, findViewById(R.id.back), R.string.help_popover_lists, null); } From 316d99830613bc4db69c0a4dcb92dc4074f82012 Mon Sep 17 00:00:00 2001 From: Sam Bosley Date: Thu, 22 Dec 2011 12:31:42 -0700 Subject: [PATCH 03/21] Fixed a bug with sharing when not logged in --- .../com/todoroo/astrid/actfm/EditPeopleControlSet.java | 5 ++++- .../src/com/todoroo/astrid/activity/TaskListActivity.java | 8 +++++--- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/astrid/plugin-src/com/todoroo/astrid/actfm/EditPeopleControlSet.java b/astrid/plugin-src/com/todoroo/astrid/actfm/EditPeopleControlSet.java index 646d7a64f..8cebb8f8c 100644 --- a/astrid/plugin-src/com/todoroo/astrid/actfm/EditPeopleControlSet.java +++ b/astrid/plugin-src/com/todoroo/astrid/actfm/EditPeopleControlSet.java @@ -786,8 +786,11 @@ public class EditPeopleControlSet extends PopupControlSet { /** Resume save * @param data */ public void onActivityResult(int requestCode, int resultCode, Intent data) { - if(requestCode == loginRequestCode && resultCode == Activity.RESULT_OK) + if(requestCode == loginRequestCode && resultCode == Activity.RESULT_OK) { + task.setValue(Task.USER_ID, -2L); + task.setValue(Task.USER, ""); saveSharingSettings(saveToast); + } else if (requestCode == loginRequestCode) makePrivateTask(); } diff --git a/astrid/src/com/todoroo/astrid/activity/TaskListActivity.java b/astrid/src/com/todoroo/astrid/activity/TaskListActivity.java index 6e94bb0c1..ca74a7a63 100644 --- a/astrid/src/com/todoroo/astrid/activity/TaskListActivity.java +++ b/astrid/src/com/todoroo/astrid/activity/TaskListActivity.java @@ -591,6 +591,8 @@ public class TaskListActivity extends ListActivity implements OnScrollListener, if (!Preferences.getBoolean(R.string.p_showed_add_task_help, false)) { HelpInfoPopover.showPopover(TaskListActivity.this, quickAddBox, R.string.help_popover_add_task, null); Preferences.setBoolean(R.string.p_showed_add_task_help, true); + } else if (!Preferences.getBoolean(R.string.p_showed_tap_task_help, false)) { + showTaskEditHelpPopover(); } else if (Preferences.isSet(getString(R.string.p_showed_lists_help)) && !Preferences.getBoolean(R.string.p_showed_lists_help, false)) { HelpInfoPopover.showPopover(TaskListActivity.this, findViewById(R.id.back), R.string.help_popover_lists, null); @@ -855,7 +857,7 @@ public class TaskListActivity extends ListActivity implements OnScrollListener, currentCursor.moveToPosition(i); if(currentCursor.get(Task.ID) == withCustomId) { getListView().setSelection(i); - showHelpPopover(); + showTaskEditHelpPopover(); return; } } @@ -882,13 +884,13 @@ public class TaskListActivity extends ListActivity implements OnScrollListener, currentCursor.moveToPosition(i); if(currentCursor.get(Task.ID) == withCustomId) { getListView().setSelection(i); - showHelpPopover(); + showTaskEditHelpPopover(); break; } } } - private void showHelpPopover() { + private void showTaskEditHelpPopover() { if (!Preferences.getBoolean(R.string.p_showed_tap_task_help, false)) { Preferences.setBoolean(R.string.p_showed_tap_task_help, true); InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); From 65c3d0a6eccafa158052e963399ae9d4e807a728 Mon Sep 17 00:00:00 2001 From: Sam Bosley Date: Thu, 22 Dec 2011 17:57:57 -0700 Subject: [PATCH 04/21] Fixed a bug that would cause a json exception (shouldn't have broken anything though) --- .../com/todoroo/astrid/actfm/EditPeopleControlSet.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/astrid/plugin-src/com/todoroo/astrid/actfm/EditPeopleControlSet.java b/astrid/plugin-src/com/todoroo/astrid/actfm/EditPeopleControlSet.java index 8cebb8f8c..36ada3f73 100644 --- a/astrid/plugin-src/com/todoroo/astrid/actfm/EditPeopleControlSet.java +++ b/astrid/plugin-src/com/todoroo/astrid/actfm/EditPeopleControlSet.java @@ -788,7 +788,7 @@ public class EditPeopleControlSet extends PopupControlSet { public void onActivityResult(int requestCode, int resultCode, Intent data) { if(requestCode == loginRequestCode && resultCode == Activity.RESULT_OK) { task.setValue(Task.USER_ID, -2L); - task.setValue(Task.USER, ""); + task.setValue(Task.USER, "{}"); saveSharingSettings(saveToast); } else if (requestCode == loginRequestCode) From e09ceca0c09c396c08ed6f9fb0633cec1e201fa1 Mon Sep 17 00:00:00 2001 From: Tim Su Date: Thu, 22 Dec 2011 16:59:59 -0800 Subject: [PATCH 05/21] Fix for wront local URL --- .../plugin-src/com/todoroo/astrid/actfm/sync/ActFmInvoker.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/astrid/plugin-src/com/todoroo/astrid/actfm/sync/ActFmInvoker.java b/astrid/plugin-src/com/todoroo/astrid/actfm/sync/ActFmInvoker.java index a65d964f2..096348df8 100644 --- a/astrid/plugin-src/com/todoroo/astrid/actfm/sync/ActFmInvoker.java +++ b/astrid/plugin-src/com/todoroo/astrid/actfm/sync/ActFmInvoker.java @@ -26,7 +26,7 @@ import com.todoroo.andlib.utility.Preferences; public class ActFmInvoker { /** NOTE: these values are development values & will not work on production */ - private static final String URL = "//10.0.0.2:3000/api/"; + private static final String URL = "//10.0.2.2:3000/api/"; private static final String APP_ID = "a4732a32859dbcd3e684331acd36432c"; private static final String APP_SECRET = "e389bfc82a0d932332f9a8bd8203735f"; From ab2b73e9006dd90b32c92d9a5066ba1402f4dc7d Mon Sep 17 00:00:00 2001 From: Tim Su Date: Thu, 22 Dec 2011 17:28:12 -0800 Subject: [PATCH 06/21] Fix bad pixels in the icon --- astrid/res/drawable/icon_32.png | Bin 1936 -> 3422 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/astrid/res/drawable/icon_32.png b/astrid/res/drawable/icon_32.png index d42923e7d066fdf9a68b30b15700c00840f26bb6..55bdbf70ee0babca612830e10342ecd4364f3ea1 100644 GIT binary patch literal 3422 zcmZ8j2{aUJ7amJtY?(3PqfGYYW9%^)!w`e9jGI(k{arK_6 zW@o=8$+?uBOWaqRh>x94NtMj@(a=QFxH>tW8^J9aklMEiQyaW*2VwjFJ`lvYkq1eONwu8ER;v3G=DFDtY4an?-)%Cg@-^Bu)Lk~1 z%Qm;zmsFo`Zdsi9-qbq5pk{I~H4&xq<1xsC*6q#Uq`B~nwWYd~sbk;IX22a8jM@GY z$*%5DTLU&TqqsCNFS#kI5f6@r?=IW1JT4+(UOY@7W5a8-$93g0vzNt8!(MstHMk$& zJX_PSHT5I!qx3{t3nc#e)1tSw%k{B~O*LSeXiNz1K~doJ>BhM`q5+1SU0*%&|x_9o$j2|;86F%bHj z7k8c*Le`g%_+9AV^-rGxLH`yCB>ki6P#-J|7X(vPR)PJ?e3+Sg3ha~4L0T=>Zt#bq!+4z>C zd<}R%&Cj&AwC;FDu_5(%{g4oPM{@J0uh7Ht-qxxr=mB{;?#rnpr(IR; zi(r7Zj8A-Dx4j#GWaWmE#I9HwA~_)>E#NuGwjefEY(~@1Y(D}uyEU{pf@rN{6ivXo zXI+vYgb>!0dpx(J=GV5_6Z4}wNusC<`N88n&O8HabR_6Won*ijm&H%U3j4UO#n|T2 zp=nSSk`xd6mD6!gmj6JG*(jUaOw@Q{%nE8y4f2L;YGB{^H6K~Ff(MUN@pS^V zh7ZRr7SL{mPVi|1rxC(+tGk{viC(H-Uw~fn@iVLxip8ICdAz=_mUsdxHYd3?a1_8yDHAxey9SF>FSC&%l z0==rPP-~V=wD7AnuFIa|{F(ZQA00h##ukM-;%;I>Z)S`q28SzlTwt?2FDT={6Icy8 zBAjM#$=W~{Rum`~zyb6mQk{yHX}xH8^=v&o;lqx@F6FD8e8%vzmX>>F6kS#f^efYW z^fN=Jf`^_rh6D9wpwZ2cb!egLCm|)zD!mFTq`WCh>__*mkg6j+OqBu-Prf6S=Yc_{ z&2!QX?ACLxB^EY=X7X3!@Vc9ZePJ#)oNhzUoB|pt$g``d5iASevcCj9d>~h7@{;KZ zcYXmcxpk7CFHzw859U|B{%kfM7c4cmU~wa_%v{7=EQ-t5ffX(-Q;2+X=VcXGqDu%+ z1;`I04VC6kwqU>y)Sel2c)rUOvsF#`oCEl^!r}Cp*eGvq*k&>ZR?4E-TM0TFy@+%G zQ{v6+igB!lRJ>=5;Yo6S5-U9X2j9?+@QFv|4=_t*a+Xr*ND8LSU=8hGR$7s}iA``d zs&c$bo0+JQCCc?8Y$-XXK*pg3Q*EK%Q7TNh?iKXw^*>>oNOF?Vu#j3qW@{iif>hP_ee-$osuC`!*RZhkyf< zdlyK$^I)W}?=|_bQ>2YiEp^P~-i4&s(!g`qz2KPlFLVSG1R+B5G?)9dC;F*tsd9g` zm{~2OM&rU)KlI>5ztvz3JzYd2_oT{uo5k~+vS2p-lOM6$sS9RGte?Aji%FTY>8Y6$ zt`;RtG_|t^nA~e_*vW4yyQ@DlN6*GUp5a9uH|sUIuJ%11%Vxtw6q~Nvjcx1tMXw^t z&`v|L>0$+oiz4rN)Gc#*u^$JK&*NEBQC!lVAJ19sXmC+4Lska*(VU)IN*Yd|J=_Se2(Ma+Sme%*ov_Tzi=TBuXb zqk^>+srX&JTW|79*C(RS42^MtFd-7J7vc$z)n_HeoQi?0E?=@eZVy}vyS~-}Vf`*po>q`_C+}O?!w}O1dvEP9jUhgk|Tx zG}@t+v&|FkT?#Mb>GG~vaAkZlvsgdDe&VvovzREUo0Ns*EQ=BwDbljmj3j?$6?WMN z#9MFtD5RL>Pr)sLfa7-Z+e^)+2b!Lx^y^#+QtKXuQy=C{X_U+2u}p*1sYsEwte)}y zg*1JDln^rRDQUV8pq34}&fQnctkBI97o{XqSr(%uXD<#Xmc%KgGNTM#TuU`sWSG1> z7FVZUU#TD3bXV@o-MJ}`UvKGJw}Ju+hrr~uS6AgY8om_xy^ytk%b)VBol^y2GULME zIF)>4;mc?=`Nw@B^Y6k%N-R@_irEyY2a&-NK$7r*oD8qcPm{aR`CLQSLps)9uXMBq z{F3(cA;x=`^bKispAAF$Ogdc$#!RQOEsQ9=THcq)A)-YGL&KLjFGrp}lCHRJf*kbr+`^;wEBF>Y zQ?p8^WCa`-XSxS)7Ln4+xuF)ZZ;v{*zvOJ}<&Zzt6e~Ih<_L5<$)f#zCyz{W&N@VrUw#+gFTU3;_}C^p!%VF0+DM-i}`gCU#eS ziKY1737zM5L}yl1nu{;YpXk!XX4fRNGH3$kE9&!a{AT=5q`!Fo?HdPPKd49J!?q=g z(bIlfe=i)h{$>*lZ3^Z~_=<`YpN`H*Is5K<`!5cVn_~gl7;OFfUxzlaGOjf8jQbCW Ce=9ox literal 1936 zcmd^=iC@wQ0>x2mW~AD6c55cH+1e?0XPrb-@<gZ&RejzT~n z(7^xzh1=ta|M?T}UZUtFgL|;eL6dUA)01+p#%EDM$i#FC^+Z5gd@>bBjZe(W9Hx4M zKwwa45FX8Dv(>GQ%kiY8?5y_oc1~DmS7#@UMjJfi^C&5m$z%pOIWNbN`W?NciP1|H z)oZe~Ic$(}OF2C~-Pztg;OK4CXl9}*f@r)(shSB0oJIq;i;KmVFD(*rjg%ClPRAqS zl(fp%)HE)KyHZu7Q7Cvkp8RzOKMHTs>11gMdWAxE^BTRb?gKuQb=G%BryF$kk;~;0 zsgwot6^s zdy`gUP;VQRTZ}N0Bq35N5>Fs8-JYl&iKL;vzVEExLI_qM5N-{zMx5Yl%`LL}2Bx!* zkW64geU>7_7l~o-feT|kD7GhZg%Y_)ikLuPhFlRtE(o*HXwvJMPH>aaD2gQxK;fp{ zU2!at=?oW<31*{V0P5ZE1ZP6wW}}Ji?KcENn09wYy-_BEVKE|17(*C#N9v}=%?5*3 ztDT#hGitU?`dty3XfPOzYL#JA!CMjxdmzUVXkHvS8tvbA1|g+J|28{6?jJfD65U=< zG>Q*X)&1B5LvBl?tq5RqYO2WVoP3BSiY4sI*PDZY%NUGawmL@$Q~c*;pC?*gM;E;5 z6p|wvF(I!2j7g{M%+6bS)5#j>?_)gI4)&?WCwADZxhsY8#s=xCjG0|vl&>*ee9Ftq zYaTzAclYX~vh@`S^t7X5Ro3qps+UQ7L!#*9gmC~TD!aGQ)%D@KA9CX;>sK?x-%yQu zgMM?X7m2OJ;&mFWmd_t6uWIqa%qCsZ34}t?@_g^FoDYkyz5T_pB+=b+Au0TwSAgn% zv37E@%>~ix1t|La6vJbyFPfyytt%@ls`+`z%1TpH6E7OCV$fNxz8})F=SJ9UFTd54 zm@&AYm`o4|MYDl{JM#6e+B%B6`@*Hm{IpbqNbswxZ(-pz!If|4r=|sbzL>+&>-A!> zSi|9(O(wJ1O#3wDQxM1kl!FTn->d)60)=Zow%^-@qX8%+K9@_;-M7NA-!)Nb^nqVG z?YrEzkE6;gpn3(LVaF|4Dp-OSz+YBq5~XH+@iPJ6<=<9}n>Ve})6;!wUDl7*{`o6N z`#l&Zwl&$Z5hQ$C(`G1SL7vuBJC3v4lPQ+A;DI1+wq1Dnp~TqIxtXShk>Q-ocuR{D z!&L`eEE$3%YT3nh1}cKF|33Wp_umEvFWbdvVW;+~zEFRC-Crt%EV1m-^N~!88{ORwu6ODjsXH0_%uRgjk33huj;davCP_wNt`8^69&KCg zfEm6g32QO`{DJoDCTEm2>R^p!9`TF}X@>oBW5y;{wr~}>`^RL&iw4W#tJiXLi);7j z0!3=<{@M~xujD`gK>1IICBLI!!kq2j(fhw7WXRNcQ&Uq}mAl9r3fj62#06*X{v>KJ zAaI{2esF*lan8#6LV#=kA=tdNEkY>^K9h0b!4=a|byZ4g>Tk!~u-hF!9s!WA?rwp< zjsHjG!|RZ9r)N$X6{MF4T}E-8T~9|07`T4-PCgv``IFnn{a;W!6il~=ftGe$=yNMR zKfMJ^h&yt6lsWhZn~Z94`0G> zB9DFIS(uMqsDC`mD6WN=%<=L3FHdH>eUXAH$Sc;(Ze~QNd;;GmR#}@1=U=f4yl9nw zDyKxH$<%Fh`ZBfPH8QJ2mw5{UcpNFAb=%ieK4q8FzKILvEsYC8l6ksAt^vU)P`PPU;5EIT|CVq#M$AxZ*&`^t)!$VOZIcmXLpn((3f9f z=xhH{c6WDwKhmh79^PcA8aswdOG=;~w< Date: Thu, 22 Dec 2011 17:32:58 -0800 Subject: [PATCH 07/21] Removed debugging println statements --- .../com/todoroo/astrid/actfm/TagSettingsActivity.java | 4 +--- .../plugin-src/com/todoroo/astrid/actfm/TagViewActivity.java | 2 -- .../com/todoroo/astrid/actfm/sync/ActFmInvoker.java | 1 - .../com/todoroo/astrid/actfm/sync/ActFmPreferenceService.java | 1 - .../com/todoroo/astrid/gtasks/sync/GtasksSyncProvider.java | 1 - .../astrid/producteev/sync/ProducteevSyncProvider.java | 1 - astrid/plugin-src/com/todoroo/astrid/timers/TimerPlugin.java | 1 - astrid/src/com/todoroo/astrid/ui/AstridTimePicker.java | 1 - 8 files changed, 1 insertion(+), 11 deletions(-) diff --git a/astrid/plugin-src/com/todoroo/astrid/actfm/TagSettingsActivity.java b/astrid/plugin-src/com/todoroo/astrid/actfm/TagSettingsActivity.java index 351ba19f4..b626df0f4 100644 --- a/astrid/plugin-src/com/todoroo/astrid/actfm/TagSettingsActivity.java +++ b/astrid/plugin-src/com/todoroo/astrid/actfm/TagSettingsActivity.java @@ -258,7 +258,6 @@ public class TagSettingsActivity extends Activity { } catch (JSONException e) { Log.e("tag-view-activity", "json error refresh owner", e); ownerLabel.setText(""); - System.err.println(tagData.getValue(TagData.USER)); } String peopleJson = tagData.getValue(TagData.MEMBERS); @@ -273,8 +272,7 @@ public class TagSettingsActivity extends Activity { JSONArray people = new JSONArray(peopleJson); tagMembers.fromJSONArray(people); } catch (JSONException e) { - System.err.println(peopleJson); - Log.e("tag-view-activity", "json error refresh members", e); + Log.e("tag-view-activity", "json error refresh members - " + peopleJson, e); } } diff --git a/astrid/plugin-src/com/todoroo/astrid/actfm/TagViewActivity.java b/astrid/plugin-src/com/todoroo/astrid/actfm/TagViewActivity.java index 586c6bce5..19d5a88f4 100644 --- a/astrid/plugin-src/com/todoroo/astrid/actfm/TagViewActivity.java +++ b/astrid/plugin-src/com/todoroo/astrid/actfm/TagViewActivity.java @@ -386,7 +386,6 @@ public class TagViewActivity extends TaskListActivity { } image.setOnClickListener(listenerForImage(memberToUse, id, memberName)); } catch (JSONException e) { - System.err.println("Unable to create listener"); e.printStackTrace(); } membersView.addView(image); @@ -410,7 +409,6 @@ public class TagViewActivity extends TaskListActivity { assignedCriterion = Task.USER_ID.eq(id); Criterion assigned = Criterion.and(TaskCriteria.activeAndVisible(), assignedCriterion); filter = TagFilterExposer.filterFromTag(TagViewActivity.this, new Tag(tagData), assigned); - System.err.println("Filter: " + filter.sqlQuery); TextView filterByAssigned = (TextView) findViewById(R.id.filter_assigned); filterByAssigned.setVisibility(View.VISIBLE); filterByAssigned.setText(getString(R.string.actfm_TVA_filtered_by_assign, displayName)); diff --git a/astrid/plugin-src/com/todoroo/astrid/actfm/sync/ActFmInvoker.java b/astrid/plugin-src/com/todoroo/astrid/actfm/sync/ActFmInvoker.java index 096348df8..e6814d1c8 100644 --- a/astrid/plugin-src/com/todoroo/astrid/actfm/sync/ActFmInvoker.java +++ b/astrid/plugin-src/com/todoroo/astrid/actfm/sync/ActFmInvoker.java @@ -211,7 +211,6 @@ public class ActFmInvoker { } sigBuilder.append(APP_SECRET); - System.err.println("SIG: " + sigBuilder); String signature = DigestUtils.md5Hex(sigBuilder.toString()); requestBuilder.append("sig").append('=').append(signature); return requestBuilder.toString(); diff --git a/astrid/plugin-src/com/todoroo/astrid/actfm/sync/ActFmPreferenceService.java b/astrid/plugin-src/com/todoroo/astrid/actfm/sync/ActFmPreferenceService.java index 3680a8c70..3be21794c 100644 --- a/astrid/plugin-src/com/todoroo/astrid/actfm/sync/ActFmPreferenceService.java +++ b/astrid/plugin-src/com/todoroo/astrid/actfm/sync/ActFmPreferenceService.java @@ -111,7 +111,6 @@ public class ActFmPreferenceService extends SyncProviderUtilities { user.put("email", Preferences.getStringValue(PREF_EMAIL)); user.put("picture", Preferences.getStringValue(PREF_PICTURE)); user.put("id", Preferences.getLong(PREF_USER_ID, 0)); - System.err.println(user); } catch (JSONException e) { throw new RuntimeException(e); } diff --git a/astrid/plugin-src/com/todoroo/astrid/gtasks/sync/GtasksSyncProvider.java b/astrid/plugin-src/com/todoroo/astrid/gtasks/sync/GtasksSyncProvider.java index 109d18671..c7bd2b3fd 100644 --- a/astrid/plugin-src/com/todoroo/astrid/gtasks/sync/GtasksSyncProvider.java +++ b/astrid/plugin-src/com/todoroo/astrid/gtasks/sync/GtasksSyncProvider.java @@ -216,7 +216,6 @@ public class GtasksSyncProvider extends SyncProvider { } catch (IOException e) { handleException("gtasks-sync", e, true); } finally { - System.err.println("Sent " + localCreated.getCount() + " new tasks"); localCreated.close(); } } diff --git a/astrid/plugin-src/com/todoroo/astrid/producteev/sync/ProducteevSyncProvider.java b/astrid/plugin-src/com/todoroo/astrid/producteev/sync/ProducteevSyncProvider.java index 397790796..6560c70d8 100644 --- a/astrid/plugin-src/com/todoroo/astrid/producteev/sync/ProducteevSyncProvider.java +++ b/astrid/plugin-src/com/todoroo/astrid/producteev/sync/ProducteevSyncProvider.java @@ -264,7 +264,6 @@ public class ProducteevSyncProvider extends SyncProvider Date: Thu, 22 Dec 2011 18:54:13 -0800 Subject: [PATCH 08/21] Fixed warnings in task edit activity --- .../astrid/activity/TaskEditActivity.java | 84 ++++++++++++------- 1 file changed, 53 insertions(+), 31 deletions(-) diff --git a/astrid/src/com/todoroo/astrid/activity/TaskEditActivity.java b/astrid/src/com/todoroo/astrid/activity/TaskEditActivity.java index 07c47365a..578716d05 100755 --- a/astrid/src/com/todoroo/astrid/activity/TaskEditActivity.java +++ b/astrid/src/com/todoroo/astrid/activity/TaskEditActivity.java @@ -51,8 +51,6 @@ import android.widget.Button; import android.widget.EditText; import android.widget.ImageButton; import android.widget.LinearLayout; -import android.widget.RemoteViews; -import android.widget.ScrollView; import android.widget.TextView; import android.widget.Toast; @@ -154,7 +152,7 @@ public final class TaskEditActivity extends Activity { public static final String TAB_MORE = "more"; //$NON-NLS-1$ - public static final String OVERRIDE_FINISH_ANIM = "finishAnim"; + public static final String OVERRIDE_FINISH_ANIM = "finishAnim"; //$NON-NLS-1$ // --- services @@ -207,7 +205,6 @@ public final class TaskEditActivity extends Activity { private VoiceInputAssistant voiceNoteAssistant; private EditText notesEditText; - private ScrollView scrollView; private Dialog whenDialog; @@ -250,10 +247,10 @@ public final class TaskEditActivity extends Activity { /** Initialize UI components */ private void setUpUIComponents() { setContentView(R.layout.task_edit_activity); - scrollView = (ScrollView) findViewById(R.id.edit_scroll); LinearLayout basicControls = (LinearLayout) findViewById(R.id.basic_controls); - LinearLayout whenDialogView = (LinearLayout) LayoutInflater.from(this).inflate(R.layout.task_edit_when_controls, null); + LinearLayout whenDialogView = (LinearLayout) LayoutInflater.from(this).inflate( + R.layout.task_edit_when_controls, null); LinearLayout whenControls = (LinearLayout) whenDialogView.findViewById(R.id.when_controls); LinearLayout whenHeader = (LinearLayout) findViewById(R.id.when_header); LinearLayout moreControls = (LinearLayout) findViewById(R.id.more_controls); @@ -263,52 +260,82 @@ public final class TaskEditActivity extends Activity { HashMap controlSetMap = new HashMap(); // populate control set - EditTitleControlSet editTitle = new EditTitleControlSet(this, R.layout.control_set_title, Task.TITLE, R.id.title); + EditTitleControlSet editTitle = new EditTitleControlSet(this, + R.layout.control_set_title, Task.TITLE, R.id.title); title = (EditText) editTitle.getView().findViewById(R.id.title); controls.add(editTitle); controlSetMap.put(getString(R.string.TEA_ctrl_title_pref), editTitle); - TimerActionControlSet timerAction = new TimerActionControlSet(this, editTitle.getView()); + TimerActionControlSet timerAction = new TimerActionControlSet(this, + editTitle.getView()); controls.add(timerAction); - controls.add(peopleControlSet = new EditPeopleControlSet(TaskEditActivity.this, R.layout.control_set_assigned, R.layout.control_set_assigned_display, R.string.actfm_EPA_assign_label, REQUEST_LOG_IN)); - controlSetMap.put(getString(R.string.TEA_ctrl_who_pref), peopleControlSet); - - DeadlineControlSet deadlineControl = new DeadlineControlSet(TaskEditActivity.this, R.layout.control_set_deadline, R.layout.control_set_deadline_display, whenHeader, R.id.aux_date, R.id.when_shortcut_container, R.id.when_label, R.id.when_image); + controls.add(peopleControlSet = new EditPeopleControlSet( + TaskEditActivity.this, R.layout.control_set_assigned, + R.layout.control_set_assigned_display, + R.string.actfm_EPA_assign_label, REQUEST_LOG_IN)); + controlSetMap.put(getString(R.string.TEA_ctrl_who_pref), + peopleControlSet); + + DeadlineControlSet deadlineControl = new DeadlineControlSet( + TaskEditActivity.this, R.layout.control_set_deadline, + R.layout.control_set_deadline_display, whenHeader, + R.id.aux_date, R.id.when_shortcut_container, R.id.when_label, + R.id.when_image); controls.add(deadlineControl); whenControls.addView(deadlineControl.getDisplayView()); - RepeatControlSet repeatControls = new RepeatControlSet(TaskEditActivity.this, R.layout.control_set_repeat, R.layout.control_set_repeat_display, R.string.repeat_enabled); + RepeatControlSet repeatControls = new RepeatControlSet( + TaskEditActivity.this, R.layout.control_set_repeat, + R.layout.control_set_repeat_display, R.string.repeat_enabled); controls.add(repeatControls); whenControls.addView(repeatControls.getDisplayView()); - GCalControlSet gcalControl = new GCalControlSet(TaskEditActivity.this, R.layout.control_set_gcal, R.layout.control_set_gcal_display, R.string.gcal_TEA_addToCalendar_label); + GCalControlSet gcalControl = new GCalControlSet(TaskEditActivity.this, + R.layout.control_set_gcal, R.layout.control_set_gcal_display, + R.string.gcal_TEA_addToCalendar_label); controls.add(gcalControl); whenControls.addView(gcalControl.getDisplayView()); - hideUntilControls = new HideUntilControlSet(TaskEditActivity.this, R.layout.control_set_hide, R.layout.control_set_hide_display, R.string.hide_until_prompt); + hideUntilControls = new HideUntilControlSet(TaskEditActivity.this, + R.layout.control_set_hide, R.layout.control_set_hide_display, + R.string.hide_until_prompt); controls.add(hideUntilControls); whenControls.addView(hideUntilControls.getDisplayView()); - ImportanceControlSet importanceControl = new ImportanceControlSet(TaskEditActivity.this, R.layout.control_set_importance); + ImportanceControlSet importanceControl = new ImportanceControlSet( + TaskEditActivity.this, R.layout.control_set_importance); controls.add(importanceControl); importanceControl.addListener(editTitle); - controlSetMap.put(getString(R.string.TEA_ctrl_importance_pref), importanceControl); + controlSetMap.put(getString(R.string.TEA_ctrl_importance_pref), + importanceControl); - tagsControlSet = new TagsControlSet(TaskEditActivity.this, R.layout.control_set_tags, R.layout.control_set_tags_display, R.string.TEA_tags_label); + tagsControlSet = new TagsControlSet(TaskEditActivity.this, + R.layout.control_set_tags, R.layout.control_set_tags_display, + R.string.TEA_tags_label); controls.add(tagsControlSet); - controlSetMap.put(getString(R.string.TEA_ctrl_lists_pref), tagsControlSet); + controlSetMap.put(getString(R.string.TEA_ctrl_lists_pref), + tagsControlSet); - notesControlSet = new EditNotesControlSet(TaskEditActivity.this, R.layout.control_set_notes, R.layout.control_set_notes_display); - notesEditText = (EditText) notesControlSet.getView().findViewById(R.id.notes); + notesControlSet = new EditNotesControlSet(TaskEditActivity.this, + R.layout.control_set_notes, R.layout.control_set_notes_display); + notesEditText = (EditText) notesControlSet.getView().findViewById( + R.id.notes); controls.add(notesControlSet); - controlSetMap.put(getString(R.string.TEA_ctrl_notes_pref), notesControlSet); + controlSetMap.put(getString(R.string.TEA_ctrl_notes_pref), + notesControlSet); - ReminderControlSet reminderControl = new ReminderControlSet(TaskEditActivity.this, R.layout.control_set_reminders, R.layout.control_set_reminders_display); + ReminderControlSet reminderControl = new ReminderControlSet( + TaskEditActivity.this, R.layout.control_set_reminders, + R.layout.control_set_reminders_display); controls.add(reminderControl); - controlSetMap.put(getString(R.string.TEA_ctrl_reminders_pref), reminderControl); + controlSetMap.put(getString(R.string.TEA_ctrl_reminders_pref), + reminderControl); - TimerControlSet timerControl = new TimerControlSet(TaskEditActivity.this, R.layout.control_set_timers, R.layout.control_set_timers_extras_display, R.string.TEA_timer_controls); + TimerControlSet timerControl = new TimerControlSet( + TaskEditActivity.this, R.layout.control_set_timers, + R.layout.control_set_timers_extras_display, + R.string.TEA_timer_controls); timerAction.setListener(timerControl); controls.add(timerControl); controlSetMap.put(getString(R.string.TEA_ctrl_timer_pref), timerControl); @@ -319,7 +346,6 @@ public final class TaskEditActivity extends Activity { controls.add(producteevControl); basicControls.addView(producteevControl.getDisplayView()); notesEditText.setHint(R.string.producteev_TEA_notes); - //((TextView) notesControlSet.getView().findViewById(R.id.notes_label)).setHint(R.string.producteev_TEA_notes); } } catch (Exception e) { Log.e("astrid-error", "loading-control-set", e); //$NON-NLS-1$ //$NON-NLS-2$ @@ -331,7 +357,6 @@ public final class TaskEditActivity extends Activity { controls.add(ocrxControl); basicControls.addView(ocrxControl.getDisplayView()); notesEditText.setHint(R.string.opencrx_TEA_notes); - //((TextView) notesControlSet.getView().findViewById(R.id.notes_label)).setHint(R.string.opencrx_TEA_notes); } } catch (Exception e) { Log.e("astrid-error", "loading-control-set", e); //$NON-NLS-1$ //$NON-NLS-2$ @@ -654,7 +679,7 @@ public final class TaskEditActivity extends Activity { // abandon editing and delete the newly created task if // no title was entered if (overrideFinishAnim) { - AndroidUtilities.callApiMethod(5, this, "overridePendingTransition", + AndroidUtilities.callApiMethod(5, this, "overridePendingTransition", //$NON-NLS-1$ new Class[] { Integer.TYPE, Integer.TYPE }, R.anim.slide_right_in, R.anim.slide_right_out); } @@ -678,9 +703,6 @@ public final class TaskEditActivity extends Activity { @Override public void onReceive(Context context, Intent intent) { try { - Bundle extras = intent.getExtras(); - RemoteViews view = extras.getParcelable(AstridApiConstants.EXTRAS_RESPONSE); - // add a separator View separator = new View(TaskEditActivity.this); separator.setPadding(5, 5, 5, 5); From 1403011f314832b3fea1ddb96f5a2381427f3cb1 Mon Sep 17 00:00:00 2001 From: Tim Su Date: Thu, 22 Dec 2011 18:53:11 -0800 Subject: [PATCH 09/21] Removed several unneeded task flags --- .../com/todoroo/astrid/sync/SyncProvider.java | 16 +++++++++++++++- .../astrid/actfm/sync/ActFmSyncProvider.java | 7 ------- .../repeats/RepeatTaskCompleteListener.java | 2 +- .../astrid/activity/TaskListActivity.java | 3 +-- astrid/src/com/todoroo/astrid/dao/TaskDao.java | 3 +-- .../src/com/todoroo/astrid/utility/Flags.java | 17 +---------------- 6 files changed, 19 insertions(+), 29 deletions(-) diff --git a/api/src/com/todoroo/astrid/sync/SyncProvider.java b/api/src/com/todoroo/astrid/sync/SyncProvider.java index 9affab4ee..789c096df 100644 --- a/api/src/com/todoroo/astrid/sync/SyncProvider.java +++ b/api/src/com/todoroo/astrid/sync/SyncProvider.java @@ -148,14 +148,28 @@ public abstract class SyncProvider { notification.flags |= Notification.FLAG_ONGOING_EVENT; } + /** + * Synchronize this providerwith sync toast + * @param context + */ public void synchronize(final Context context) { + synchronize(context, true); + } + + /** + * Synchronize this provider + * @param context + * @param showSyncToast should we toast to indicate synchronizing? + */ + public void synchronize(final Context context, final boolean showSyncToast) { // display toast if(context instanceof Activity) { if(getUtilities().isLoggedIn() && getUtilities().shouldShowToast()) { ((Activity) context).runOnUiThread(new Runnable() { @Override public void run() { - makeSyncToast(context); + if(showSyncToast) + makeSyncToast(context); } }); } diff --git a/astrid/plugin-src/com/todoroo/astrid/actfm/sync/ActFmSyncProvider.java b/astrid/plugin-src/com/todoroo/astrid/actfm/sync/ActFmSyncProvider.java index baf796872..f54a91b8c 100644 --- a/astrid/plugin-src/com/todoroo/astrid/actfm/sync/ActFmSyncProvider.java +++ b/astrid/plugin-src/com/todoroo/astrid/actfm/sync/ActFmSyncProvider.java @@ -44,7 +44,6 @@ import com.todoroo.astrid.service.StatisticsService; import com.todoroo.astrid.sync.SyncProvider; import com.todoroo.astrid.sync.SyncProviderUtilities; import com.todoroo.astrid.utility.Constants; -import com.todoroo.astrid.utility.Flags; @SuppressWarnings("nls") public class ActFmSyncProvider extends SyncProvider { @@ -124,12 +123,6 @@ public class ActFmSyncProvider extends SyncProvider { } } - protected void makeSyncToast(Context context) { - if (!Flags.checkAndClear(Flags.ACTFM_SUPPRESS_SYNC_TOAST)) { - super.makeSyncToast(context); - } - } - // ---------------------------------------------------------------------- // ----------------------------------------------------- synchronization! // ---------------------------------------------------------------------- diff --git a/astrid/plugin-src/com/todoroo/astrid/repeats/RepeatTaskCompleteListener.java b/astrid/plugin-src/com/todoroo/astrid/repeats/RepeatTaskCompleteListener.java index f66564518..2f9510cae 100644 --- a/astrid/plugin-src/com/todoroo/astrid/repeats/RepeatTaskCompleteListener.java +++ b/astrid/plugin-src/com/todoroo/astrid/repeats/RepeatTaskCompleteListener.java @@ -75,7 +75,7 @@ public class RepeatTaskCompleteListener extends BroadcastReceiver { task.setValue(Task.COMPLETION_DATE, 0L); task.setValue(Task.DUE_DATE, newDueDate); task.setValue(Task.HIDE_UNTIL, hideUntil); - Flags.set(Flags.ACTFM_REPEATED_TASK); + task.setModelFlag("repeat-complete"); //$NON-NLS-1$ PluginServices.getTaskService().save(task); return; } diff --git a/astrid/src/com/todoroo/astrid/activity/TaskListActivity.java b/astrid/src/com/todoroo/astrid/activity/TaskListActivity.java index ca74a7a63..6e47a2e73 100644 --- a/astrid/src/com/todoroo/astrid/activity/TaskListActivity.java +++ b/astrid/src/com/todoroo/astrid/activity/TaskListActivity.java @@ -498,8 +498,7 @@ public class TaskListActivity extends ListActivity implements OnScrollListener, @Override public void run() { Preferences.setLong(LAST_AUTOSYNC_ATTEMPT, DateUtilities.now()); - Flags.set(Flags.ACTFM_SUPPRESS_SYNC_TOAST); - new ActFmSyncProvider().synchronize(TaskListActivity.this); + new ActFmSyncProvider().synchronize(TaskListActivity.this, false); } }.start(); } diff --git a/astrid/src/com/todoroo/astrid/dao/TaskDao.java b/astrid/src/com/todoroo/astrid/dao/TaskDao.java index 76ac35c25..d5eef5647 100644 --- a/astrid/src/com/todoroo/astrid/dao/TaskDao.java +++ b/astrid/src/com/todoroo/astrid/dao/TaskDao.java @@ -24,7 +24,6 @@ import com.todoroo.astrid.reminders.ReminderService; import com.todoroo.astrid.service.StatisticsConstants; import com.todoroo.astrid.service.StatisticsService; import com.todoroo.astrid.utility.AstridPreferences; -import com.todoroo.astrid.utility.Flags; /** * Data Access layer for {@link Task}-related operations. @@ -286,7 +285,7 @@ public class TaskDao extends DatabaseDao { * Astrid. Order matters here! */ public static void afterSave(Task task, ContentValues values) { - if(values == null || Flags.checkAndClear(Flags.SUPPRESS_HOOKS)) + if(values == null) return; task.markSaved(); diff --git a/astrid/src/com/todoroo/astrid/utility/Flags.java b/astrid/src/com/todoroo/astrid/utility/Flags.java index 740b6187d..ca91f0786 100644 --- a/astrid/src/com/todoroo/astrid/utility/Flags.java +++ b/astrid/src/com/todoroo/astrid/utility/Flags.java @@ -26,25 +26,10 @@ public class Flags { */ public static final int ACTFM_SUPPRESS_SYNC = 1 << 3; - /** - * If set, indicates save hooks should be suppressed - */ - public static final int SUPPRESS_HOOKS = 1 << 4; - /** * If set, indicates to suppress the next gtasks sync attempt */ - public static final int GTASKS_SUPPRESS_SYNC = 1 << 5; - - /** - * If set, indicates next task was a completed repeating task - */ - public static final int ACTFM_REPEATED_TASK = 1 << 6; - - /** - * If set, indicates to suppress the toast when synchronizing (used for act.fm autosync) - */ - public static final int ACTFM_SUPPRESS_SYNC_TOAST = 1 << 7; + public static final int GTASKS_SUPPRESS_SYNC = 1 << 4; public static boolean checkAndClear(int flag) { boolean set = (state & flag) > 0; From d77e7da5b60c87990e4d9d121bfd2781f622a680 Mon Sep 17 00:00:00 2001 From: Tim Su Date: Thu, 22 Dec 2011 18:55:42 -0800 Subject: [PATCH 10/21] Re-write and fix user id --- .../todoroo/andlib/data/AbstractModel.java | 20 +++++++++++ api/src/com/todoroo/astrid/data/Task.java | 11 +++++++ .../astrid/actfm/EditPeopleControlSet.java | 33 ++++++++----------- .../astrid/actfm/sync/ActFmSyncService.java | 27 ++++++++++----- .../com/timsu/astrid/data/AbstractModel.java | 4 +-- .../astrid/activity/TaskEditActivity.java | 9 ++--- 6 files changed, 70 insertions(+), 34 deletions(-) diff --git a/api/src/com/todoroo/andlib/data/AbstractModel.java b/api/src/com/todoroo/andlib/data/AbstractModel.java index 650dabd62..1d41d88eb 100644 --- a/api/src/com/todoroo/andlib/data/AbstractModel.java +++ b/api/src/com/todoroo/andlib/data/AbstractModel.java @@ -10,6 +10,7 @@ import java.lang.reflect.Field; import java.lang.reflect.Modifier; import java.util.ArrayList; import java.util.Arrays; +import java.util.HashSet; import android.content.ContentValues; import android.os.Parcel; @@ -67,6 +68,9 @@ public abstract class AbstractModel implements Parcelable, Cloneable { /** Values from database */ protected ContentValues values = null; + /** Model Flags(not saved in database) */ + protected HashSet modelFlags = null; + /** Get database-read values for this object */ public ContentValues getDatabaseValues() { return values; @@ -160,6 +164,7 @@ public abstract class AbstractModel implements Parcelable, Cloneable { // clears user-set values setValues = null; + modelFlags = null; for (Property property : cursor.getProperties()) { try { @@ -345,6 +350,21 @@ public abstract class AbstractModel implements Parcelable, Cloneable { return (getValue(property) & flag) > 0; } + + // --- setting and retrieving flags + + public synchronized void setModelFlag(String flag) { + if(modelFlags == null) + modelFlags = new HashSet(); + modelFlags.add(flag); + } + + public boolean checkModelFlag(String flag) { + if(modelFlags == null) + return false; + return modelFlags.contains(flag); + } + // --- property management /** diff --git a/api/src/com/todoroo/astrid/data/Task.java b/api/src/com/todoroo/astrid/data/Task.java index 5fecd82ae..da79064ef 100644 --- a/api/src/com/todoroo/astrid/data/Task.java +++ b/api/src/com/todoroo/astrid/data/Task.java @@ -171,6 +171,17 @@ public final class Task extends RemoteModel { /** whether task is read-only */ public static final int FLAG_IS_READONLY = 1 << 2; + // --- user id special values + + /** user id = read user email value */ + public static final long USER_ID_EMAIL = -2L; + + /** user id = unassigned */ + public static final long USER_ID_UNASSIGNED = -1L; + + /** user id = myself */ + public static final long USER_ID_SELF = 0L; + // --- notification flags /** whether to send a reminder at deadline */ diff --git a/astrid/plugin-src/com/todoroo/astrid/actfm/EditPeopleControlSet.java b/astrid/plugin-src/com/todoroo/astrid/actfm/EditPeopleControlSet.java index 36ada3f73..6b29ad946 100644 --- a/astrid/plugin-src/com/todoroo/astrid/actfm/EditPeopleControlSet.java +++ b/astrid/plugin-src/com/todoroo/astrid/actfm/EditPeopleControlSet.java @@ -498,11 +498,11 @@ public class EditPeopleControlSet extends PopupControlSet { activity.getString(R.string.actfm_EPA_invalid_email, userJson.optString("email"))); } - if(userJson == null || userJson.optLong("id", -2) == 0) { - dirty = task.getValue(Task.USER_ID) == 0L ? dirty : true; - task.setValue(Task.USER_ID, 0L); + if(userJson == null || userJson.optLong("id", Task.USER_ID_EMAIL) == Task.USER_ID_SELF) { + dirty = task.getValue(Task.USER_ID) == Task.USER_ID_SELF ? dirty : true; + task.setValue(Task.USER_ID, Task.USER_ID_SELF); if(!TextUtils.isEmpty(task.getValue(Task.USER))) - task.setValue(Task.USER, "{}"); + task.setValue(Task.USER, ""); } else { String user = userJson.toString(); @@ -510,20 +510,20 @@ public class EditPeopleControlSet extends PopupControlSet { String taskUserEmail = ""; try { JSONObject taskUser = new JSONObject(task.getValue(Task.USER)); - taskUserId = taskUser.optLong("id", -2); + taskUserId = taskUser.optLong("id", Task.USER_ID_EMAIL); taskUserEmail = taskUser.optString("email"); } catch (JSONException e) { // sad times } - long userId = userJson.optLong("id", -2); + long userId = userJson.optLong("id", Task.USER_ID_EMAIL); String userEmail = userJson.optString("email"); - boolean match = (userId == taskUserId && userId != -2); + boolean match = (userId == taskUserId && userId != Task.USER_ID_EMAIL); match = match || (userEmail.equals(taskUserEmail) && !TextUtils.isEmpty(userEmail)); dirty = match ? dirty : true; - task.setValue(Task.USER_ID, userJson.optLong("id", -2)); + task.setValue(Task.USER_ID, userJson.optLong("id", Task.USER_ID_EMAIL)); task.setValue(Task.USER, user); } @@ -543,7 +543,7 @@ public class EditPeopleControlSet extends PopupControlSet { public void onClick(DialogInterface d, int which) { makePrivateTask(); AssignedToUser me = (AssignedToUser) assignedList.getAdapter().getItem(0); - task.setValue(Task.USER_ID, me.user.optLong("id", -2)); + task.setValue(Task.USER_ID, me.user.optLong("id", Task.USER_ID_EMAIL)); task.setValue(Task.USER, me.user.toString()); } }; @@ -557,14 +557,8 @@ public class EditPeopleControlSet extends PopupControlSet { if(!TextUtils.isEmpty(task.getValue(Task.SHARED_WITH)) || sharedWith.length() != 0) task.setValue(Task.SHARED_WITH, sharedWith.toString()); - if(dirty) - taskService.save(task); - - - if(dirty) - shareTask(sharedWith); - else - showSaveToast(); + task.setModelFlag("task-assigned"); + showSaveToast(); return true; } catch (JSONException e) { @@ -582,13 +576,12 @@ public class EditPeopleControlSet extends PopupControlSet { private void makePrivateTask() { assignToMe(); sharedWithContainer.removeAllViews(); - sharedWithContainer.addPerson(""); + sharedWithContainer.addPerson(""); //$NON-NLS-1$ refreshDisplayView(); } private void showSaveToast() { - int length = saveToast.indexOf('\n') > -1 ? Toast.LENGTH_LONG : Toast.LENGTH_SHORT; - Toast.makeText(activity, saveToast, length).show(); + Toast.makeText(activity, saveToast, Toast.LENGTH_LONG).show(); } private class ParseSharedException extends Exception { diff --git a/astrid/plugin-src/com/todoroo/astrid/actfm/sync/ActFmSyncService.java b/astrid/plugin-src/com/todoroo/astrid/actfm/sync/ActFmSyncService.java index fe6618a78..e8fcabe6d 100644 --- a/astrid/plugin-src/com/todoroo/astrid/actfm/sync/ActFmSyncService.java +++ b/astrid/plugin-src/com/todoroo/astrid/actfm/sync/ActFmSyncService.java @@ -319,7 +319,7 @@ public final class ActFmSyncService { if(values.containsKey(Task.DELETION_DATE.name)) { params.add("deleted_at"); params.add(task.getValue(Task.DELETION_DATE) / 1000L); } - if(Flags.checkAndClear(Flags.ACTFM_REPEATED_TASK)) { + if(task.checkModelFlag("repeat-complete")) { params.add("completed"); params.add(DateUtilities.now() / 1000L); } else if(values.containsKey(Task.COMPLETION_DATE.name)) { params.add("completed"); params.add(task.getValue(Task.COMPLETION_DATE) / 1000L); @@ -334,14 +334,25 @@ public final class ActFmSyncService { recurrence = recurrence + ";FROM=COMPLETION"; params.add("repeat"); params.add(recurrence); } - long userId = task.getValue(Task.USER_ID); - if(values.containsKey(Task.USER_ID.name) && userId >= 0 || userId == -1) { - params.add("user_id"); - if(task.getValue(Task.USER_ID) == 0) - params.add(ActFmPreferenceService.userId()); - else - params.add(task.getValue(Task.USER_ID)); + + if(values.containsKey(Task.USER_ID.name) && task.checkModelFlag("task-assigned")) { + if(task.getValue(Task.USER_ID) == Task.USER_ID_EMAIL) { + try { + JSONObject user = new JSONObject(task.getValue(Task.USER)); + params.add("user_email"); + params.add(user.get("email")); + } catch (JSONException e) { + Log.e("Error parsing user", task.getValue(Task.USER), e); + } + } else { + params.add("user_id"); + if(task.getValue(Task.USER_ID) == Task.USER_ID_SELF) + params.add(ActFmPreferenceService.userId()); + else + params.add(task.getValue(Task.USER_ID)); + } } + if(Flags.checkAndClear(Flags.TAGS_CHANGED) || newlyCreated) { TodorooCursor cursor = TagService.getInstance().getTags(task.getId()); try { diff --git a/astrid/src-legacy/com/timsu/astrid/data/AbstractModel.java b/astrid/src-legacy/com/timsu/astrid/data/AbstractModel.java index 40dc3d911..38aad297e 100644 --- a/astrid/src-legacy/com/timsu/astrid/data/AbstractModel.java +++ b/astrid/src-legacy/com/timsu/astrid/data/AbstractModel.java @@ -41,10 +41,10 @@ public abstract class AbstractModel { protected ContentValues setValues = new ContentValues(); /** Cached values from database */ - private final ContentValues values = new ContentValues(); + private final ContentValues values = new ContentValues(); /** Cursor into the database */ - private Cursor cursor = null; + private Cursor cursor = null; // --- constructors diff --git a/astrid/src/com/todoroo/astrid/activity/TaskEditActivity.java b/astrid/src/com/todoroo/astrid/activity/TaskEditActivity.java index 578716d05..ea9e61fd0 100755 --- a/astrid/src/com/todoroo/astrid/activity/TaskEditActivity.java +++ b/astrid/src/com/todoroo/astrid/activity/TaskEditActivity.java @@ -651,13 +651,14 @@ public final class TaskEditActivity extends Activity { } } - taskService.save(model); String processedToast = addDueTimeToToast(toast.toString()); - if(!onPause && peopleControlSet != null && !peopleControlSet.saveSharingSettings(processedToast)) - return; + boolean cancelFinish = !onPause && peopleControlSet != null && + !peopleControlSet.saveSharingSettings(processedToast); + + taskService.save(model); - if (!onPause) { // Saving during on pause could cause a double finish + if (!onPause && !cancelFinish) { shouldSaveState = false; finish(); } From 759b05053d2368961a5b8fdf9eb0bf356fdcf411 Mon Sep 17 00:00:00 2001 From: Tim Su Date: Thu, 22 Dec 2011 20:22:47 -0800 Subject: [PATCH 11/21] Killed dead code, fixed issues with user assignment --- .../todoroo/andlib/data/AbstractModel.java | 24 +-- .../com/timsu/astrid/C2DMReceiver.java | 2 +- .../astrid/actfm/EditPeopleControlSet.java | 148 +++--------------- .../astrid/actfm/sync/ActFmSyncService.java | 4 +- .../repeats/RepeatTaskCompleteListener.java | 2 +- .../todoroo/astrid/tags/TagsControlSet.java | 8 +- astrid/res/values/strings-actfm.xml | 2 +- 7 files changed, 48 insertions(+), 142 deletions(-) diff --git a/api/src/com/todoroo/andlib/data/AbstractModel.java b/api/src/com/todoroo/andlib/data/AbstractModel.java index 1d41d88eb..5cfe9056b 100644 --- a/api/src/com/todoroo/andlib/data/AbstractModel.java +++ b/api/src/com/todoroo/andlib/data/AbstractModel.java @@ -10,7 +10,7 @@ import java.lang.reflect.Field; import java.lang.reflect.Modifier; import java.util.ArrayList; import java.util.Arrays; -import java.util.HashSet; +import java.util.HashMap; import android.content.ContentValues; import android.os.Parcel; @@ -68,8 +68,8 @@ public abstract class AbstractModel implements Parcelable, Cloneable { /** Values from database */ protected ContentValues values = null; - /** Model Flags(not saved in database) */ - protected HashSet modelFlags = null; + /** Transitory Metadata (not saved in database) */ + protected HashMap transitoryData = null; /** Get database-read values for this object */ public ContentValues getDatabaseValues() { @@ -164,7 +164,7 @@ public abstract class AbstractModel implements Parcelable, Cloneable { // clears user-set values setValues = null; - modelFlags = null; + transitoryData = null; for (Property property : cursor.getProperties()) { try { @@ -353,16 +353,16 @@ public abstract class AbstractModel implements Parcelable, Cloneable { // --- setting and retrieving flags - public synchronized void setModelFlag(String flag) { - if(modelFlags == null) - modelFlags = new HashSet(); - modelFlags.add(flag); + public synchronized void putTransitory(String key, Object value) { + if(transitoryData == null) + transitoryData = new HashMap(); + transitoryData.put(key, value); } - public boolean checkModelFlag(String flag) { - if(modelFlags == null) - return false; - return modelFlags.contains(flag); + public Object getTransitory(String key) { + if(transitoryData == null) + return null; + return transitoryData.get(key); } // --- property management diff --git a/astrid/plugin-src/com/timsu/astrid/C2DMReceiver.java b/astrid/plugin-src/com/timsu/astrid/C2DMReceiver.java index 19529a549..c7deb8d5e 100644 --- a/astrid/plugin-src/com/timsu/astrid/C2DMReceiver.java +++ b/astrid/plugin-src/com/timsu/astrid/C2DMReceiver.java @@ -234,7 +234,7 @@ public class C2DMReceiver extends BroadcastReceiver { if(cursor.getCount() == 0) { task.setValue(Task.TITLE, intent.getStringExtra("title")); task.setValue(Task.REMOTE_ID, Long.parseLong(intent.getStringExtra("task_id"))); - task.setValue(Task.USER_ID, -1L); // set it to invalid number because we don't know whose it is + task.setValue(Task.USER_ID, Task.USER_ID_UNASSIGNED); Flags.set(Flags.ACTFM_SUPPRESS_SYNC); taskService.save(task); diff --git a/astrid/plugin-src/com/todoroo/astrid/actfm/EditPeopleControlSet.java b/astrid/plugin-src/com/todoroo/astrid/actfm/EditPeopleControlSet.java index 6b29ad946..6826fb765 100644 --- a/astrid/plugin-src/com/todoroo/astrid/actfm/EditPeopleControlSet.java +++ b/astrid/plugin-src/com/todoroo/astrid/actfm/EditPeopleControlSet.java @@ -2,7 +2,6 @@ package com.todoroo.astrid.actfm; import greendroid.widget.AsyncImageView; -import java.io.IOException; import java.util.ArrayList; import java.util.HashMap; import java.util.HashSet; @@ -13,7 +12,6 @@ import org.json.JSONObject; import android.app.Activity; import android.app.Dialog; -import android.app.ProgressDialog; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; @@ -40,23 +38,16 @@ import android.widget.Toast; import com.timsu.astrid.R; import com.todoroo.andlib.data.TodorooCursor; import com.todoroo.andlib.service.Autowired; -import com.todoroo.andlib.service.ContextManager; import com.todoroo.andlib.service.DependencyInjectionService; import com.todoroo.andlib.service.ExceptionService; import com.todoroo.andlib.utility.DialogUtilities; -import com.todoroo.astrid.actfm.sync.ActFmInvoker; import com.todoroo.astrid.actfm.sync.ActFmPreferenceService; import com.todoroo.astrid.actfm.sync.ActFmSyncService; -import com.todoroo.astrid.actfm.sync.ActFmSyncService.JsonHelper; -import com.todoroo.astrid.api.AstridApiConstants; -import com.todoroo.astrid.dao.MetadataDao.MetadataCriteria; import com.todoroo.astrid.data.Metadata; import com.todoroo.astrid.data.TagData; import com.todoroo.astrid.data.Task; import com.todoroo.astrid.service.AstridDependencyInjector; import com.todoroo.astrid.service.MetadataService; -import com.todoroo.astrid.service.StatisticsConstants; -import com.todoroo.astrid.service.StatisticsService; import com.todoroo.astrid.service.TagDataService; import com.todoroo.astrid.service.TaskService; import com.todoroo.astrid.service.ThemeService; @@ -64,7 +55,6 @@ import com.todoroo.astrid.tags.TagService; import com.todoroo.astrid.ui.PeopleContainer; import com.todoroo.astrid.ui.PeopleContainer.OnAddNewPersonListener; import com.todoroo.astrid.ui.PopupControlSet; -import com.todoroo.astrid.utility.Flags; public class EditPeopleControlSet extends PopupControlSet { @@ -302,12 +292,14 @@ public class EditPeopleControlSet extends PopupControlSet { } JSONObject myself = new JSONObject(); - myself.put("id", 0L); + myself.put("id", Task.USER_ID_SELF); sharedPeople.add(0, myself); - if (actFmPreferenceService.isLoggedIn()) { + boolean hasTags = task.getTransitory("tags") != null && + ((HashSet)task.getTransitory("tags")).size() > 0; + if (actFmPreferenceService.isLoggedIn() && hasTags) { JSONObject unassigned = new JSONObject(); - unassigned.put("id", -1L); + unassigned.put("id", Task.USER_ID_UNASSIGNED); sharedPeople.add(1, unassigned); } @@ -361,15 +353,15 @@ public class EditPeopleControlSet extends PopupControlSet { for (int i = 0; i < listValues.size(); i++) { JSONObject user = listValues.get(i).user; if (user != null) { - if (user.optLong("id") == assignedId || (user.optString("email").equals(assignedEmail) && !(TextUtils.isEmpty(assignedEmail)))) + if (user.optLong("id") == assignedId || + (user.optString("email").equals(assignedEmail) && + !(TextUtils.isEmpty(assignedEmail)))) assignedIndex = i; } } } final int selected = assignedIndex; -// final ArrayAdapter usersAdapter = new ArrayAdapter(activity, -// android.R.layout.simple_list_item_single_choice, listValues); final AssignedUserAdapter usersAdapter = new AssignedUserAdapter(activity, listValues); activity.runOnUiThread(new Runnable() { @@ -388,6 +380,7 @@ public class EditPeopleControlSet extends PopupControlSet { super(context, R.layout.assigned_adapter_row, people); } + @SuppressWarnings("nls") @Override public View getView(int position, View convertView, ViewGroup parent) { if(convertView == null) @@ -425,7 +418,7 @@ public class EditPeopleControlSet extends PopupControlSet { long id) { AssignedToUser user = (AssignedToUser) assignedList.getAdapter().getItem(position); assignedDisplay.setText(user.toString()); - assignedCustom.setText(""); + assignedCustom.setText(""); //$NON-NLS-1$ refreshDisplayView(); DialogUtilities.dismissDialog(activity, dialog); } @@ -435,7 +428,7 @@ public class EditPeopleControlSet extends PopupControlSet { assignedClear.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { - assignedCustom.setText(""); + assignedCustom.setText(""); //$NON-NLS-1$ assignedList.setItemChecked(0, true); } }); @@ -503,6 +496,9 @@ public class EditPeopleControlSet extends PopupControlSet { task.setValue(Task.USER_ID, Task.USER_ID_SELF); if(!TextUtils.isEmpty(task.getValue(Task.USER))) task.setValue(Task.USER, ""); + } else if(userJson.optLong("id") == Task.USER_ID_UNASSIGNED) { + dirty = task.getValue(Task.USER_ID) == Task.USER_ID_UNASSIGNED ? dirty : true; + task.setValue(Task.USER_ID, Task.USER_ID_UNASSIGNED); } else { String user = userJson.toString(); @@ -525,6 +521,13 @@ public class EditPeopleControlSet extends PopupControlSet { dirty = match ? dirty : true; task.setValue(Task.USER_ID, userJson.optLong("id", Task.USER_ID_EMAIL)); task.setValue(Task.USER, user); + + String assignedName = userJson.optString("name", userEmail); + + if(task.getTransitory("tags") == null || + ((HashSet)task.getTransitory("tags")).size() == 0) + saveToast = activity.getString(R.string.actfm_EPA_assigned_toast, assignedName, + assignedName); } JSONObject sharedWith = parseSharedWithAndTags(); @@ -549,7 +552,8 @@ public class EditPeopleControlSet extends PopupControlSet { }; DialogUtilities.okCancelCustomDialog(activity, activity.getString(R.string.actfm_EPA_login_button), activity.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); + R.string.actfm_EPA_dont_share_button, android.R.drawable.ic_dialog_alert, + okListener, cancelListener); return false; } @@ -557,7 +561,8 @@ public class EditPeopleControlSet extends PopupControlSet { if(!TextUtils.isEmpty(task.getValue(Task.SHARED_WITH)) || sharedWith.length() != 0) task.setValue(Task.SHARED_WITH, sharedWith.toString()); - task.setModelFlag("task-assigned"); + task.putTransitory("task-assigned", true); + showSaveToast(); return true; @@ -624,107 +629,6 @@ public class EditPeopleControlSet extends PopupControlSet { return sharedWith; } - @SuppressWarnings("nls") - private void shareTask(final JSONObject sharedWith) { - final JSONArray emails = sharedWith.optJSONArray("p"); - - final ProgressDialog pd = DialogUtilities.progressDialog(activity, - activity.getString(R.string.DLG_please_wait)); - new Thread() { - @Override - public void run() { - ActFmInvoker invoker = new ActFmInvoker(actFmPreferenceService.getToken()); - try { - if(task.getValue(Task.REMOTE_ID) == 0) { - actFmSyncService.pushTask(task.getId()); - task.setValue(Task.REMOTE_ID, taskService.fetchById(task.getId(), - Task.REMOTE_ID).getValue(Task.REMOTE_ID)); - } - if(task.getValue(Task.REMOTE_ID) == 0) { - DialogUtilities.okDialog(activity, "We had an error saving " + - "this task to Astrid.com. Could you let us know why this happened?", null); - return; - } - - Object[] args = buildSharingArgs(emails); - JSONObject result = invoker.invoke("task_share", args); - - sharedWith.remove("p"); - task.setValue(Task.SHARED_WITH, sharedWith.toString()); - task.setValue(Task.DETAILS_DATE, 0L); - - readTagData(result.getJSONArray("tags")); - JSONObject assignee = result.getJSONObject("user"); - JsonHelper.readUser(assignee, - task, Task.USER_ID, Task.USER); - Flags.set(Flags.ACTFM_SUPPRESS_SYNC); - taskService.save(task); - - String assignedName = assignee.optString("name"); - if (TextUtils.isEmpty(assignedName)) { - assignedName = assignee.optString("email"); - } - long id = assignee.optLong("id", -2); - if (!(id == -2 || id == ActFmPreferenceService.userId() || TextUtils.isEmpty(assignedName))) { - saveToast += "\n" + - activity.getString(R.string.actfm_EPA_assigned_toast, assignedName, assignedName); - } - - int count = result.optInt("shared", 0); - if(count > 0) { - saveToast += "\n" + - activity.getString(R.string.actfm_EPA_emailed_toast, - activity.getResources().getQuantityString(R.plurals.Npeople, count, count)); - StatisticsService.reportEvent(StatisticsConstants.ACTFM_TASK_SHARED); - } - - Intent broadcastIntent = new Intent(AstridApiConstants.BROADCAST_EVENT_REFRESH); - ContextManager.getContext().sendBroadcast(broadcastIntent, AstridApiConstants.PERMISSION_READ); - - DialogUtilities.dismissDialog(activity, pd); - activity.runOnUiThread(new Runnable() { - public void run() { - showSaveToast(); - activity.finish(); - } - }); - } catch (IOException e) { - DialogUtilities.okDialog(activity, - activity.getString(R.string.SyP_ioerror), - android.R.drawable.ic_dialog_alert, e.toString(), null); - } catch (JSONException e) { - DialogUtilities.okDialog(activity, - activity.getString(R.string.SyP_ioerror), - android.R.drawable.ic_dialog_alert, e.toString(), null); - } finally { - DialogUtilities.dismissDialog(activity, pd); - } - } - - }.start(); - } - - @SuppressWarnings("nls") - private void readTagData(JSONArray tags) throws JSONException { - ArrayList metadata = new ArrayList(); - for(int i = 0; i < tags.length(); i++) { - JSONObject tagObject = tags.getJSONObject(i); - TagData tagData = tagDataService.getTag(tagObject.getString("name"), TagData.ID); - if(tagData == null) - tagData = new TagData(); - ActFmSyncService.JsonHelper.tagFromJson(tagObject, tagData); - tagDataService.save(tagData); - - Metadata tagMeta = new Metadata(); - tagMeta.setValue(Metadata.KEY, TagService.KEY); - tagMeta.setValue(TagService.TAG, tagData.getValue(TagData.NAME)); - tagMeta.setValue(TagService.REMOTE_ID, tagData.getValue(TagData.REMOTE_ID)); - metadata.add(tagMeta); - } - - metadataService.synchronizeMetadata(task.getId(), metadata, MetadataCriteria.withKey(TagService.KEY)); - } - @SuppressWarnings("nls") protected Object[] buildSharingArgs(JSONArray emails) throws JSONException { ArrayList values = new ArrayList(); @@ -780,8 +684,6 @@ public class EditPeopleControlSet extends PopupControlSet { * @param data */ public void onActivityResult(int requestCode, int resultCode, Intent data) { if(requestCode == loginRequestCode && resultCode == Activity.RESULT_OK) { - task.setValue(Task.USER_ID, -2L); - task.setValue(Task.USER, "{}"); saveSharingSettings(saveToast); } else if (requestCode == loginRequestCode) diff --git a/astrid/plugin-src/com/todoroo/astrid/actfm/sync/ActFmSyncService.java b/astrid/plugin-src/com/todoroo/astrid/actfm/sync/ActFmSyncService.java index e8fcabe6d..30a6dcb35 100644 --- a/astrid/plugin-src/com/todoroo/astrid/actfm/sync/ActFmSyncService.java +++ b/astrid/plugin-src/com/todoroo/astrid/actfm/sync/ActFmSyncService.java @@ -319,7 +319,7 @@ public final class ActFmSyncService { if(values.containsKey(Task.DELETION_DATE.name)) { params.add("deleted_at"); params.add(task.getValue(Task.DELETION_DATE) / 1000L); } - if(task.checkModelFlag("repeat-complete")) { + if(task.getTransitory("repeat-complete") != null) { params.add("completed"); params.add(DateUtilities.now() / 1000L); } else if(values.containsKey(Task.COMPLETION_DATE.name)) { params.add("completed"); params.add(task.getValue(Task.COMPLETION_DATE) / 1000L); @@ -335,7 +335,7 @@ public final class ActFmSyncService { params.add("repeat"); params.add(recurrence); } - if(values.containsKey(Task.USER_ID.name) && task.checkModelFlag("task-assigned")) { + if(values.containsKey(Task.USER_ID.name) && task.getTransitory("task-assigned") != null) { if(task.getValue(Task.USER_ID) == Task.USER_ID_EMAIL) { try { JSONObject user = new JSONObject(task.getValue(Task.USER)); diff --git a/astrid/plugin-src/com/todoroo/astrid/repeats/RepeatTaskCompleteListener.java b/astrid/plugin-src/com/todoroo/astrid/repeats/RepeatTaskCompleteListener.java index 2f9510cae..d70696733 100644 --- a/astrid/plugin-src/com/todoroo/astrid/repeats/RepeatTaskCompleteListener.java +++ b/astrid/plugin-src/com/todoroo/astrid/repeats/RepeatTaskCompleteListener.java @@ -75,7 +75,7 @@ public class RepeatTaskCompleteListener extends BroadcastReceiver { task.setValue(Task.COMPLETION_DATE, 0L); task.setValue(Task.DUE_DATE, newDueDate); task.setValue(Task.HIDE_UNTIL, hideUntil); - task.setModelFlag("repeat-complete"); //$NON-NLS-1$ + task.putTransitory("repeat-complete", true); //$NON-NLS-1$ PluginServices.getTaskService().save(task); return; } diff --git a/astrid/plugin-src/com/todoroo/astrid/tags/TagsControlSet.java b/astrid/plugin-src/com/todoroo/astrid/tags/TagsControlSet.java index edbf0f0df..8c4774091 100644 --- a/astrid/plugin-src/com/todoroo/astrid/tags/TagsControlSet.java +++ b/astrid/plugin-src/com/todoroo/astrid/tags/TagsControlSet.java @@ -2,6 +2,7 @@ package com.todoroo.astrid.tags; import java.util.ArrayList; import java.util.HashMap; +import java.util.HashSet; import java.util.LinkedHashSet; import android.app.Activity; @@ -99,7 +100,7 @@ public final class TagsControlSet extends PopupControlSet { LinkedHashSet tags = getTagSet(); for (String tag : tags) { if (builder.length() != 0) - builder.append(", "); + builder.append(", "); //$NON-NLS-1$ builder.append(tag); } @@ -231,16 +232,19 @@ public final class TagsControlSet extends PopupControlSet { if(task.getId() != AbstractModel.NO_ID) { TodorooCursor cursor = tagService.getTags(task.getId()); + HashSet tags = new HashSet(cursor.getCount()); try { for(cursor.moveToFirst(); !cursor.isAfterLast(); cursor.moveToNext()) { String tag = cursor.get(TagService.TAG); setTagSelected(tag); + tags.add(tag); } } finally { cursor.close(); } + task.putTransitory("tags", tags); //$NON-NLS-1$ } - addTag("", false); + addTag("", false); //$NON-NLS-1$ refreshDisplayView(); populated = true; } diff --git a/astrid/res/values/strings-actfm.xml b/astrid/res/values/strings-actfm.xml index ecf234a10..c1af3f278 100644 --- a/astrid/res/values/strings-actfm.xml +++ b/astrid/res/values/strings-actfm.xml @@ -106,7 +106,7 @@ Share with: - Sent to %2$s (you can see on a new shared list between you and %2$s). + Sent to %1$s (you can see it in the list between you and %2$s). Share with Friends From 3225f841b3b23912e25fadc5bb47b28d030c385f Mon Sep 17 00:00:00 2001 From: Tim Su Date: Thu, 22 Dec 2011 21:00:55 -0800 Subject: [PATCH 12/21] Ant build output folder to antbuild/ --- .gitignore | 2 +- api/ant.properties | 2 ++ astrid/ant.properties | 2 +- facebook/facebook/ant.properties | 2 ++ greendroid/GreenDroid/ant.properties | 2 ++ 5 files changed, 8 insertions(+), 2 deletions(-) create mode 100644 api/ant.properties create mode 100644 facebook/facebook/ant.properties create mode 100644 greendroid/GreenDroid/ant.properties diff --git a/.gitignore b/.gitignore index f2a91fa88..e05264673 100644 --- a/.gitignore +++ b/.gitignore @@ -4,7 +4,7 @@ org.eclipse.ltk.core.refactoring.prefs gen local.properties -ecbuild +antbuild astrid/bin astrid/src-combined release diff --git a/api/ant.properties b/api/ant.properties new file mode 100644 index 000000000..bab71f6cc --- /dev/null +++ b/api/ant.properties @@ -0,0 +1,2 @@ +# output files and apk +out.dir=antbuild diff --git a/astrid/ant.properties b/astrid/ant.properties index d2d0a6783..f2bab94ce 100644 --- a/astrid/ant.properties +++ b/astrid/ant.properties @@ -1,7 +1,7 @@ # Astrid build properties # output files and apk -out.dir=bin +out.dir=antbuild # source directory must be underneath output directory # because we pull in from multiple source folders diff --git a/facebook/facebook/ant.properties b/facebook/facebook/ant.properties new file mode 100644 index 000000000..bab71f6cc --- /dev/null +++ b/facebook/facebook/ant.properties @@ -0,0 +1,2 @@ +# output files and apk +out.dir=antbuild diff --git a/greendroid/GreenDroid/ant.properties b/greendroid/GreenDroid/ant.properties new file mode 100644 index 000000000..bab71f6cc --- /dev/null +++ b/greendroid/GreenDroid/ant.properties @@ -0,0 +1,2 @@ +# output files and apk +out.dir=antbuild From d9e9d3fc48bc7cfd8a8c93d6d28fdcb5cbaccd8c Mon Sep 17 00:00:00 2001 From: Tim Su Date: Thu, 22 Dec 2011 21:05:54 -0800 Subject: [PATCH 13/21] On actfm login, make the text boxes the right input type --- .../com/todoroo/astrid/actfm/ActFmLoginActivity.java | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/astrid/plugin-src/com/todoroo/astrid/actfm/ActFmLoginActivity.java b/astrid/plugin-src/com/todoroo/astrid/actfm/ActFmLoginActivity.java index b810a5403..4baac9a35 100644 --- a/astrid/plugin-src/com/todoroo/astrid/actfm/ActFmLoginActivity.java +++ b/astrid/plugin-src/com/todoroo/astrid/actfm/ActFmLoginActivity.java @@ -40,6 +40,7 @@ import android.content.res.Configuration; import android.graphics.PixelFormat; import android.os.Build; import android.os.Bundle; +import android.text.InputType; import android.text.method.PasswordTransformationMethod; import android.view.View; import android.view.View.OnClickListener; @@ -224,6 +225,9 @@ public class ActFmLoginActivity extends Activity implements AuthListener { final EditText name = addEditField(body, R.string.actfm_ALA_name_label); + name.setInputType(InputType.TYPE_CLASS_TEXT | + InputType.TYPE_TEXT_VARIATION_PERSON_NAME | + InputType.TYPE_TEXT_FLAG_CAP_WORDS); final AtomicReference dialog = new AtomicReference(); final AtomicBoolean isNew = new AtomicBoolean(true); @@ -255,6 +259,8 @@ public class ActFmLoginActivity extends Activity implements AuthListener { final EditText email = addEditField(body, R.string.actfm_ALA_email_label); + email.setInputType(InputType.TYPE_CLASS_TEXT | + InputType.TYPE_TEXT_VARIATION_EMAIL_ADDRESS); getCredentials(new OnGetCredentials() { @Override public void getCredentials(String[] accounts) { @@ -265,6 +271,8 @@ public class ActFmLoginActivity extends Activity implements AuthListener { final EditText password = addEditField(body, R.string.actfm_ALA_password_label); + password.setInputType(InputType.TYPE_CLASS_TEXT | + InputType.TYPE_TEXT_VARIATION_PASSWORD); password.setTransformationMethod(new PasswordTransformationMethod()); password.setText(generateRandomPassword()); From 9c0da435c4c411db93304b204787b0bd15e8ca22 Mon Sep 17 00:00:00 2001 From: Tim Su Date: Thu, 22 Dec 2011 21:16:40 -0800 Subject: [PATCH 14/21] Adjust share toast so it doesn't show if you aren't logged in --- .../astrid/actfm/EditPeopleControlSet.java | 26 ++++++++++++------- 1 file changed, 17 insertions(+), 9 deletions(-) diff --git a/astrid/plugin-src/com/todoroo/astrid/actfm/EditPeopleControlSet.java b/astrid/plugin-src/com/todoroo/astrid/actfm/EditPeopleControlSet.java index 6826fb765..7e343c8ba 100644 --- a/astrid/plugin-src/com/todoroo/astrid/actfm/EditPeopleControlSet.java +++ b/astrid/plugin-src/com/todoroo/astrid/actfm/EditPeopleControlSet.java @@ -98,8 +98,6 @@ public class EditPeopleControlSet extends PopupControlSet { private final ArrayList listValues = new ArrayList(); - private String saveToast = null; - private final int loginRequestCode; static { @@ -470,8 +468,8 @@ public class EditPeopleControlSet extends PopupControlSet { if(task == null) return false; - saveToast = toast; boolean dirty = false; + String sharedToast = null; try { JSONObject userJson = null; TextView assignedView = null; @@ -525,9 +523,10 @@ public class EditPeopleControlSet extends PopupControlSet { String assignedName = userJson.optString("name", userEmail); if(task.getTransitory("tags") == null || - ((HashSet)task.getTransitory("tags")).size() == 0) - saveToast = activity.getString(R.string.actfm_EPA_assigned_toast, assignedName, + ((HashSet)task.getTransitory("tags")).size() == 0) { + sharedToast = activity.getString(R.string.actfm_EPA_assigned_toast, assignedName, assignedName); + } } JSONObject sharedWith = parseSharedWithAndTags(); @@ -554,6 +553,7 @@ public class EditPeopleControlSet extends PopupControlSet { activity.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); + showSaveToast(toast); return false; } @@ -563,7 +563,9 @@ public class EditPeopleControlSet extends PopupControlSet { task.putTransitory("task-assigned", true); - showSaveToast(); + if(sharedToast != null) + toast = (toast == null) ? toast + "\n" + sharedToast : sharedToast + "\n"; + showSaveToast(toast); return true; } catch (JSONException e) { @@ -585,8 +587,11 @@ public class EditPeopleControlSet extends PopupControlSet { refreshDisplayView(); } - private void showSaveToast() { - Toast.makeText(activity, saveToast, Toast.LENGTH_LONG).show(); + private void showSaveToast(String saveToast) { + if(saveToast == null) return; + int length = saveToast.contains("\n") ? //$NON-NLS-1$ + Toast.LENGTH_LONG : Toast.LENGTH_SHORT; + Toast.makeText(activity, saveToast, length).show(); } private class ParseSharedException extends Exception { @@ -684,7 +689,10 @@ public class EditPeopleControlSet extends PopupControlSet { * @param data */ public void onActivityResult(int requestCode, int resultCode, Intent data) { if(requestCode == loginRequestCode && resultCode == Activity.RESULT_OK) { - saveSharingSettings(saveToast); + // clear user values & reset them to trigger a save + task.clearValue(Task.USER_ID); + task.clearValue(Task.USER); + saveSharingSettings(null); } else if (requestCode == loginRequestCode) makePrivateTask(); From 1dd520c149264f3278f0c8a3058e8564d3b78728 Mon Sep 17 00:00:00 2001 From: Tim Su Date: Thu, 22 Dec 2011 21:27:12 -0800 Subject: [PATCH 15/21] Output a release build into antbuild so 'ant release install' works --- astrid/build.xml | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/astrid/build.xml b/astrid/build.xml index 6345cf673..1549c435e 100644 --- a/astrid/build.xml +++ b/astrid/build.xml @@ -212,11 +212,13 @@ - + - Final Release Package: ${out.final.package} + out.package="${out.final.file}" /> + + Final Release Package: ${out.release.file} From 3af25b9dc9ab7c693c5d395c95699ddc10891d8a Mon Sep 17 00:00:00 2001 From: Tim Su Date: Thu, 22 Dec 2011 21:31:12 -0800 Subject: [PATCH 16/21] typo in a comment! --- api/src/com/todoroo/astrid/sync/SyncProvider.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api/src/com/todoroo/astrid/sync/SyncProvider.java b/api/src/com/todoroo/astrid/sync/SyncProvider.java index 789c096df..cc898ddfd 100644 --- a/api/src/com/todoroo/astrid/sync/SyncProvider.java +++ b/api/src/com/todoroo/astrid/sync/SyncProvider.java @@ -149,7 +149,7 @@ public abstract class SyncProvider { } /** - * Synchronize this providerwith sync toast + * Synchronize this provider with sync toast * @param context */ public void synchronize(final Context context) { From 597375761ad7cce13d2f21e41775b43fbb663ad9 Mon Sep 17 00:00:00 2001 From: Tim Su Date: Thu, 22 Dec 2011 23:06:00 -0800 Subject: [PATCH 17/21] Force task to save even when a sync is going on when you edit --- .../com/todoroo/astrid/actfm/sync/ActFmSyncService.java | 2 +- astrid/src/com/todoroo/astrid/activity/TaskEditActivity.java | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/astrid/plugin-src/com/todoroo/astrid/actfm/sync/ActFmSyncService.java b/astrid/plugin-src/com/todoroo/astrid/actfm/sync/ActFmSyncService.java index 30a6dcb35..7f9e03e3d 100644 --- a/astrid/plugin-src/com/todoroo/astrid/actfm/sync/ActFmSyncService.java +++ b/astrid/plugin-src/com/todoroo/astrid/actfm/sync/ActFmSyncService.java @@ -118,7 +118,7 @@ public final class ActFmSyncService { public void onModelUpdated(final Task model) { if(Flags.checkAndClear(Flags.ACTFM_SUPPRESS_SYNC)) return; - if (actFmPreferenceService.isOngoing()) + if (actFmPreferenceService.isOngoing() && model.getTransitory("task-edit-save") == null) return; final ContentValues setValues = model.getSetValues(); if(setValues == null || !checkForToken() || setValues.containsKey(RemoteModel.REMOTE_ID_PROPERTY_NAME)) diff --git a/astrid/src/com/todoroo/astrid/activity/TaskEditActivity.java b/astrid/src/com/todoroo/astrid/activity/TaskEditActivity.java index ea9e61fd0..8e4a61bf1 100755 --- a/astrid/src/com/todoroo/astrid/activity/TaskEditActivity.java +++ b/astrid/src/com/todoroo/astrid/activity/TaskEditActivity.java @@ -656,6 +656,7 @@ public final class TaskEditActivity extends Activity { boolean cancelFinish = !onPause && peopleControlSet != null && !peopleControlSet.saveSharingSettings(processedToast); + model.putTransitory("task-edit-save", true); //$NON-NLS-1$ taskService.save(model); if (!onPause && !cancelFinish) { From 0d77643a8d2f7cf9e9d229f9e19a70dbd9cb4a71 Mon Sep 17 00:00:00 2001 From: Sam Bosley Date: Fri, 23 Dec 2011 00:17:39 -0700 Subject: [PATCH 18/21] Fixed a bug with null in a toast and double toasting --- .../com/todoroo/astrid/actfm/EditPeopleControlSet.java | 3 +-- 1 file changed, 1 insertion(+), 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 7e343c8ba..a16fb8d16 100644 --- a/astrid/plugin-src/com/todoroo/astrid/actfm/EditPeopleControlSet.java +++ b/astrid/plugin-src/com/todoroo/astrid/actfm/EditPeopleControlSet.java @@ -564,7 +564,7 @@ public class EditPeopleControlSet extends PopupControlSet { task.putTransitory("task-assigned", true); if(sharedToast != null) - toast = (toast == null) ? toast + "\n" + sharedToast : sharedToast + "\n"; + toast = (toast != null) ? toast + "\n" + sharedToast : sharedToast + "\n"; showSaveToast(toast); return true; @@ -692,7 +692,6 @@ public class EditPeopleControlSet extends PopupControlSet { // clear user values & reset them to trigger a save task.clearValue(Task.USER_ID); task.clearValue(Task.USER); - saveSharingSettings(null); } else if (requestCode == loginRequestCode) makePrivateTask(); From 4402461b600406506cee1d146a1e9b4bd8ffacc9 Mon Sep 17 00:00:00 2001 From: Sam Bosley Date: Fri, 23 Dec 2011 00:26:08 -0700 Subject: [PATCH 19/21] Fixed a bug with the sequence of welcome popovers --- .../astrid/activity/TaskEditActivity.java | 7 +++++ .../astrid/activity/TaskListActivity.java | 28 ++++++++++--------- 2 files changed, 22 insertions(+), 13 deletions(-) diff --git a/astrid/src/com/todoroo/astrid/activity/TaskEditActivity.java b/astrid/src/com/todoroo/astrid/activity/TaskEditActivity.java index 8e4a61bf1..d12a05558 100755 --- a/astrid/src/com/todoroo/astrid/activity/TaskEditActivity.java +++ b/astrid/src/com/todoroo/astrid/activity/TaskEditActivity.java @@ -226,6 +226,7 @@ public final class TaskEditActivity extends Activity { new StartupService().onStartupApplication(this); setUpUIComponents(); + adjustInfoPopovers(); overrideFinishAnim = getIntent().getBooleanExtra(OVERRIDE_FINISH_ANIM, true); @@ -891,6 +892,12 @@ public final class TaskEditActivity extends Activity { StatisticsService.sessionStop(this); } + private void adjustInfoPopovers() { + Preferences.setBoolean(R.string.p_showed_tap_task_help, true); + if (!Preferences.isSet(getString(R.string.p_showed_lists_help))) + Preferences.setBoolean(R.string.p_showed_lists_help, false); + } + /* ====================================================================== * ========================================== UI component helper classes * ====================================================================== */ diff --git a/astrid/src/com/todoroo/astrid/activity/TaskListActivity.java b/astrid/src/com/todoroo/astrid/activity/TaskListActivity.java index 6e47a2e73..ff36bf305 100644 --- a/astrid/src/com/todoroo/astrid/activity/TaskListActivity.java +++ b/astrid/src/com/todoroo/astrid/activity/TaskListActivity.java @@ -896,20 +896,22 @@ public class TaskListActivity extends ListActivity implements OnScrollListener, imm.hideSoftInputFromWindow(quickAddBox.getWindowToken(), 0); getListView().postDelayed(new Runnable() { public void run() { - final View view = getListView().getChildAt(getListView().getChildCount() - 1); - if (view != null) { - OnDismissListener onDismiss = new OnDismissListener() { - @Override - public void onDismiss() { - if (!Preferences.isSet(getString(R.string.p_showed_lists_help))) { - Preferences.setBoolean(R.string.p_showed_lists_help, false); - } else if (!Preferences.getBoolean(R.string.p_showed_lists_help, false)) { - Preferences.setBoolean(R.string.p_showed_lists_help, true); - HelpInfoPopover.showPopover(TaskListActivity.this, findViewById(R.id.back), R.string.help_popover_lists, null); + if (taskAdapter.getCount() > 0) { + final View view = getListView().getChildAt(getListView().getChildCount() - 1); + if (view != null) { + OnDismissListener onDismiss = new OnDismissListener() { + @Override + public void onDismiss() { + if (!Preferences.isSet(getString(R.string.p_showed_lists_help))) { + Preferences.setBoolean(R.string.p_showed_lists_help, false); + } else if (!Preferences.getBoolean(R.string.p_showed_lists_help, false)) { + Preferences.setBoolean(R.string.p_showed_lists_help, true); + HelpInfoPopover.showPopover(TaskListActivity.this, findViewById(R.id.back), R.string.help_popover_lists, null); + } } - } - }; - HelpInfoPopover.showPopover(TaskListActivity.this, view, R.string.help_popover_tap_task, onDismiss); + }; + HelpInfoPopover.showPopover(TaskListActivity.this, view, R.string.help_popover_tap_task, onDismiss); + } } } }, 1000L); From 012649ae7217378354e5b1257ad6626798d0ccae Mon Sep 17 00:00:00 2001 From: Tim Su Date: Fri, 23 Dec 2011 02:13:36 -0800 Subject: [PATCH 20/21] Fix unit tests --- tests/src/com/todoroo/astrid/repeats/NewRepeatTests.java | 2 +- tests/src/com/todoroo/astrid/repeats/RepeatTests.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/src/com/todoroo/astrid/repeats/NewRepeatTests.java b/tests/src/com/todoroo/astrid/repeats/NewRepeatTests.java index 6f9c57328..6c85358d3 100644 --- a/tests/src/com/todoroo/astrid/repeats/NewRepeatTests.java +++ b/tests/src/com/todoroo/astrid/repeats/NewRepeatTests.java @@ -42,7 +42,7 @@ public class NewRepeatTests extends DatabaseTestCase { } private void saveAndTriggerRepeatListener(Task task) { - Flags.set(Flags.SUPPRESS_HOOKS); + Flags.set(Flags.ACTFM_SUPPRESS_SYNC); if(task.isSaved()) taskDao.saveExisting(task); else diff --git a/tests/src/com/todoroo/astrid/repeats/RepeatTests.java b/tests/src/com/todoroo/astrid/repeats/RepeatTests.java index f90a4e818..64c5af98d 100644 --- a/tests/src/com/todoroo/astrid/repeats/RepeatTests.java +++ b/tests/src/com/todoroo/astrid/repeats/RepeatTests.java @@ -52,7 +52,7 @@ public class RepeatTests extends DatabaseTestCase { } private void saveAndTriggerRepeatListener(Task task) { - Flags.set(Flags.SUPPRESS_HOOKS); + Flags.set(Flags.ACTFM_SUPPRESS_SYNC); if(task.isSaved()) taskDao.saveExisting(task); else From c96bbac226bfdece5f4bf6651196e264839e23b0 Mon Sep 17 00:00:00 2001 From: Tim Su Date: Thu, 22 Dec 2011 23:43:03 -0800 Subject: [PATCH 21/21] Version bump now 3.9.1 --- astrid/AndroidManifest.xml | 2 +- astrid/src/com/todoroo/astrid/service/UpgradeService.java | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/astrid/AndroidManifest.xml b/astrid/AndroidManifest.xml index a7763aff0..0972d38ed 100644 --- a/astrid/AndroidManifest.xml +++ b/astrid/AndroidManifest.xml @@ -1,7 +1,7 @@ diff --git a/astrid/src/com/todoroo/astrid/service/UpgradeService.java b/astrid/src/com/todoroo/astrid/service/UpgradeService.java index 60da8a536..edaa8c973 100644 --- a/astrid/src/com/todoroo/astrid/service/UpgradeService.java +++ b/astrid/src/com/todoroo/astrid/service/UpgradeService.java @@ -39,7 +39,7 @@ import com.todoroo.astrid.utility.AstridPreferences; public final class UpgradeService { - public static final int V3_9_0_2 = 204; + public static final int V3_9_1 = 204; public static final int V3_9_0_1 = 203; public static final int V3_9 = 202; public static final int V3_8_5_1 = 201; @@ -161,12 +161,12 @@ public final class UpgradeService { Preferences.clear(AstridPreferences.P_UPGRADE_FROM); StringBuilder changeLog = new StringBuilder(); - if (from >= V3_9 && from < V3_9_0_2) { - newVersionString(changeLog, "3.9.0.2 (12/21/11)", new String[] { + if (from >= V3_9 && from < V3_9_1) { + newVersionString(changeLog, "3.9.1 (12/23/11)", new String[] { "UI enhancements, better scrolling performance, and themed task edit dialogs", "Clickable links in task notes", "Fixed fields that were getting hidden under the keyboard", - "Other small UI improvements and bug fixes" + "Minor UI improvements and bug fixes" }); }