From f46a92938aa4e9eec657a4dea547fd9ce1a7b7b4 Mon Sep 17 00:00:00 2001 From: Tim Su Date: Tue, 1 Feb 2011 18:16:23 -0800 Subject: [PATCH] Sharing initial commit --- astrid/AndroidManifest.xml | 16 ++++- astrid/astrid.launch | 2 - .../todoroo/astrid/core/PluginServices.java | 23 ++++++ .../astrid/sharing/SharingActionExposer.java | 68 ++++++++++++++++++ .../astrid/sharing/SharingDetailExposer.java | 53 ++++++++++++++ .../todoroo/astrid/sharing/SharingFields.java | 39 ++++++++++ astrid/res/drawable/silk_world.png | Bin 0 -> 923 bytes astrid/res/drawable/tango_share.png | Bin 0 -> 1225 bytes astrid/res/values/strings-sharing.xml | 11 +++ 9 files changed, 209 insertions(+), 3 deletions(-) create mode 100644 astrid/plugin-src/com/todoroo/astrid/sharing/SharingActionExposer.java create mode 100644 astrid/plugin-src/com/todoroo/astrid/sharing/SharingDetailExposer.java create mode 100644 astrid/plugin-src/com/todoroo/astrid/sharing/SharingFields.java create mode 100644 astrid/res/drawable/silk_world.png create mode 100644 astrid/res/drawable/tango_share.png create mode 100644 astrid/res/values/strings-sharing.xml diff --git a/astrid/AndroidManifest.xml b/astrid/AndroidManifest.xml index e5f971e0e..d561cefea 100644 --- a/astrid/AndroidManifest.xml +++ b/astrid/AndroidManifest.xml @@ -375,7 +375,21 @@ - + + + + + + + + + + + + + + + diff --git a/astrid/astrid.launch b/astrid/astrid.launch index 3083390d0..5266e7ffb 100644 --- a/astrid/astrid.launch +++ b/astrid/astrid.launch @@ -16,11 +16,9 @@ - - diff --git a/astrid/plugin-src/com/todoroo/astrid/core/PluginServices.java b/astrid/plugin-src/com/todoroo/astrid/core/PluginServices.java index b120128e6..790f7ffed 100644 --- a/astrid/plugin-src/com/todoroo/astrid/core/PluginServices.java +++ b/astrid/plugin-src/com/todoroo/astrid/core/PluginServices.java @@ -1,10 +1,14 @@ package com.todoroo.astrid.core; +import com.todoroo.andlib.data.TodorooCursor; import com.todoroo.andlib.service.Autowired; import com.todoroo.andlib.service.DependencyInjectionService; import com.todoroo.andlib.service.ExceptionService; +import com.todoroo.andlib.sql.Query; import com.todoroo.astrid.dao.Database; +import com.todoroo.astrid.dao.MetadataDao.MetadataCriteria; import com.todoroo.astrid.dao.StoreObjectDao; +import com.todoroo.astrid.data.Metadata; import com.todoroo.astrid.service.AddOnService; import com.todoroo.astrid.service.AstridDependencyInjector; import com.todoroo.astrid.service.MetadataService; @@ -73,4 +77,23 @@ public final class PluginServices { public static StoreObjectDao getStoreObjectDao() { return getInstance().storeObjectDao; } + + // -- helpers + + /** + * Find the corresponding metadata for this task + */ + public static Metadata getMetadataByTaskAndWithKey(long taskId, String metadataKey) { + TodorooCursor cursor = PluginServices.getMetadataService().query(Query.select( + Metadata.PROPERTIES).where(MetadataCriteria.byTaskAndwithKey(taskId, metadataKey))); + try { + if(cursor.getCount() > 0) + return new Metadata(cursor); + else + return null; + } finally { + cursor.close(); + } + + } } diff --git a/astrid/plugin-src/com/todoroo/astrid/sharing/SharingActionExposer.java b/astrid/plugin-src/com/todoroo/astrid/sharing/SharingActionExposer.java new file mode 100644 index 000000000..982d77167 --- /dev/null +++ b/astrid/plugin-src/com/todoroo/astrid/sharing/SharingActionExposer.java @@ -0,0 +1,68 @@ +/** + * See the file "LICENSE" for the full license governing this code. + */ +package com.todoroo.astrid.sharing; + +import android.app.PendingIntent; +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; +import android.graphics.Bitmap; +import android.graphics.drawable.BitmapDrawable; +import android.graphics.drawable.Drawable; +import android.text.TextUtils; + +import com.timsu.astrid.R; +import com.todoroo.andlib.service.ContextManager; +import com.todoroo.astrid.api.AstridApiConstants; +import com.todoroo.astrid.api.TaskAction; +import com.todoroo.astrid.api.TaskDecoration; +import com.todoroo.astrid.core.PluginServices; +import com.todoroo.astrid.data.Task; + +/** + * Exposes {@link TaskDecoration} for timers + * + * @author Tim Su + * + */ +public class SharingActionExposer extends BroadcastReceiver { + + static final String EXTRA_TASK = "task"; //$NON-NLS-1$ + + @Override + public void onReceive(Context context, Intent intent) { + ContextManager.setContext(context); + long taskId = intent.getLongExtra(AstridApiConstants.EXTRAS_TASK_ID, -1); + if(taskId == -1) + return; + + Task task = PluginServices.getTaskService().fetchById(taskId, Task.ID, Task.TITLE, Task.NOTES); + if(!task.containsNonNullValue(Task.NOTES) || TextUtils.isEmpty(task.getValue(Task.NOTES))) + return; + + if(AstridApiConstants.BROADCAST_REQUEST_ACTIONS.equals(intent.getAction())) { + sendAction(context, taskId); + } else { + // + } + } + + private void sendAction(Context context, long taskId) { + final String label = context.getString(R.string.sharing_action); + final Drawable drawable = context.getResources().getDrawable(R.drawable.tango_share); + + Bitmap icon = ((BitmapDrawable)drawable).getBitmap(); + Intent newIntent = new Intent(context, getClass()); + newIntent.putExtra(AstridApiConstants.EXTRAS_TASK_ID, taskId); + TaskAction action = new TaskAction(label, + PendingIntent.getBroadcast(context, (int)taskId, newIntent, 0), icon); + + // transmit + Intent broadcastIntent = new Intent(AstridApiConstants.BROADCAST_SEND_ACTIONS); + broadcastIntent.putExtra(AstridApiConstants.EXTRAS_RESPONSE, action); + broadcastIntent.putExtra(AstridApiConstants.EXTRAS_TASK_ID, taskId); + context.sendBroadcast(broadcastIntent, AstridApiConstants.PERMISSION_READ); + } + +} diff --git a/astrid/plugin-src/com/todoroo/astrid/sharing/SharingDetailExposer.java b/astrid/plugin-src/com/todoroo/astrid/sharing/SharingDetailExposer.java new file mode 100644 index 000000000..be4f6fb7c --- /dev/null +++ b/astrid/plugin-src/com/todoroo/astrid/sharing/SharingDetailExposer.java @@ -0,0 +1,53 @@ +/** + * See the file "LICENSE" for the full license governing this code. + */ +package com.todoroo.astrid.sharing; + + +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; + +import com.todoroo.astrid.api.AstridApiConstants; +import com.todoroo.astrid.core.PluginServices; +import com.todoroo.astrid.data.Metadata; + +/** + * Exposes Task Detail for notes + * + * @author Tim Su + * + */ +public class SharingDetailExposer extends BroadcastReceiver { + + @Override + public void onReceive(Context context, Intent intent) { + long taskId = intent.getLongExtra(AstridApiConstants.EXTRAS_TASK_ID, -1); + if(taskId == -1) + return; + + boolean extended = intent.getBooleanExtra(AstridApiConstants.EXTRAS_EXTENDED, false); + String taskDetail = getTaskDetails(taskId, extended); + if(taskDetail == null) + return; + + // transmit + Intent broadcastIntent = new Intent(AstridApiConstants.BROADCAST_SEND_DETAILS); + broadcastIntent.putExtra(AstridApiConstants.EXTRAS_RESPONSE, taskDetail); + broadcastIntent.putExtra(AstridApiConstants.EXTRAS_EXTENDED, extended); + broadcastIntent.putExtra(AstridApiConstants.EXTRAS_TASK_ID, taskId); + context.sendBroadcast(broadcastIntent, AstridApiConstants.PERMISSION_READ); + } + + public String getTaskDetails(long id, boolean extended) { + Metadata metadata = PluginServices.getMetadataByTaskAndWithKey(id, SharingFields.METADATA_KEY); + if(metadata == null || extended) + return null; + + if(metadata.getValue(SharingFields.PRIVACY) == SharingFields.PRIVACY_PUBLIC) + return " Public"; //$NON-NLS-1$ + + return null; + } + +} diff --git a/astrid/plugin-src/com/todoroo/astrid/sharing/SharingFields.java b/astrid/plugin-src/com/todoroo/astrid/sharing/SharingFields.java new file mode 100644 index 000000000..4b7d0972d --- /dev/null +++ b/astrid/plugin-src/com/todoroo/astrid/sharing/SharingFields.java @@ -0,0 +1,39 @@ +package com.todoroo.astrid.sharing; + +import com.todoroo.andlib.data.Property.IntegerProperty; +import com.todoroo.andlib.data.Property.StringProperty; +import com.todoroo.astrid.data.Metadata; + +/** + * Metadata entry for a task alarm + * + * @author Tim Su + * + */ +public class SharingFields { + + /** metadata key */ + public static final String METADATA_KEY = "sharing"; //$NON-NLS-1$ + + /** online url */ + public static final StringProperty URL = Metadata.VALUE1; + + /** sharing privacy */ + public static final IntegerProperty PRIVACY = new IntegerProperty(Metadata.TABLE, + Metadata.VALUE2.name); + + // --- constants + + /** this task is shared publicly */ + public static final int PRIVACY_PUBLIC = 2; + + /** this task is shared with a limited group */ + public static final int PRIVACY_LIMITED = 2; + + /** this task is private */ + public static final int PRIVACY_PRIVATE = 1; + + /** this alarm repeats itself until turned off */ + public static final int TYPE_REPEATING = 2; + +} diff --git a/astrid/res/drawable/silk_world.png b/astrid/res/drawable/silk_world.png new file mode 100644 index 0000000000000000000000000000000000000000..68f21d30116710e48a8bf462cb32441e51fad5f6 GIT binary patch literal 923 zcmV;M17!S(P)A9)b<7tX~vT z$e)FfZ+`X4_uKyq#wJHC;J3lH{lhQkUc~Wid;*pnjhM12xe-bPByd^xuQ9zgeM^Mm z*tc)|P}LtTnHXr@Gkmmbkg^O2bqyhO>LP|qjIwW2@Di+4EuKm~&tOO2!N3o{128Hl z9v%fgerM0C#)7P|PMvxr*!Gf?eGA8f{OT6fS`9l>LQCg)p=~c$Zr|AT_0+_?F*JJk zlapOT2Q(wWx-LMq(TxXxLn+U;!LV)MhNp~ommdh+fo8T*&g-yQbbG&ze&=>tC(Ar=&^1xlA;Jc(6 zcCi_xs8k}-S&#ONOHm%e@#nGC7F++8C~r29Or!_{(QGQEG)+O^J1BCPmgM4JAzC8I z`jS9bO>|}Jq_#$IRzp0d34>)&3L%7MN)eTv!0B!^nn}f4z2*vFE@jv3dn zG>H)u>FR7_d2JcsjvfZ$vkP~xik@T^(_N)nx=tqJV+tQjQ`owJ83bf`zX6Ear*=Mhzn5QUuXE|v zR33Qyi8G!0{H2r##d#6R6YmYbZz4NTssT;cXiGb6lxO+k@{ba@2D~*hKDY6N;Bkh> xhhCRLejsJkAIT{5sICHcfU`5>bKmUb{{y)0nR3PMMxX!y002ovPDHLkV1nl+t-}BS literal 0 HcmV?d00001 diff --git a/astrid/res/drawable/tango_share.png b/astrid/res/drawable/tango_share.png new file mode 100644 index 0000000000000000000000000000000000000000..c55434e97c2ac4b7075665386e7337e2b0481bd3 GIT binary patch literal 1225 zcmV;)1UCDLP)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2ipPy z0uLpt{J}v000c=%L_t(I%dM1KY!p=($A5F#+1+-RmUb<)K)LmzwG`N-CV(Urk}4Mk z3@;i?h@vLGX+ktU7@`shCO()DP-A$27}WS61W`;wjOl~Wpe)L@Vq02imtNRwcXsBS zY-*k&pLJCR1V^Q7K?fC2MtZruq>0X^EL?Kp(PmGt)ZvSP)`2Udp%UXX|})q8;r ztCwJhI+3{~>13L7r#@#}$7aIIqTWjZ0-WpVVR_T?e*taVo~1a`k3KKTSYF{yj$@}r zG43T`)e9G=3^bwHJ%G(e#wC=HZ?#q+~6ifuHerxUo-lPE`!n;NBk z!wv!qo5>{N+#J4#p=(8`RtB%|`&hc53d7JDj;9zLP0oM^sfJvhX~)1x4$+uPGG|dU zscafwO>+s9lDQyp_tPubyuKNLqbDzM;)g2*aQDuxT@`m7&Ye%w*6d@X0s7QvXnhpx?w;-nQh@s@4obyUXIGEtvB)62c;Q zJ<7<~B+U&v?wm%>3^jX7H8fJ$JV*C!W%n~H3HnVUb1Qgh`zn%|95)6hXPlRJrU4kf z87JAdj{4W$;&*2yCw|eHI`u_a8WgIax;SP|q?f5O=MCMyO!~sJtbXG~zWn(%dczZJ z-PFLL!!1xv89ZF+XV3d*PzrjEJkOO|Gw@qRq3P%v0n0!y*14y6NnIV;WHl4{FiJ_3aFM{Flh=qm z*M{XYm>c$^)cs;pW%Xg12KA8;p`b+~o5uuR`0aY-vBGhXIzWj+Ppz1|L#8Uine&4L zER%;9*WyZ5uvdvy0BWiNv^3TduC%y1Ffn84V)%A-zLL*x*@jf$jEvw!=99GrkJbf< zPi4`y*_MXJ`YLj^%jiTJppfTTV8?dt5B;aV-CO8lMKwSw7{GL;_h8%~Vjxt5Cd94V n@%qP2-5?k+afM{w+zS04y1r5r%inGn00000NkvXXu0mjfK8{4Z literal 0 HcmV?d00001 diff --git a/astrid/res/values/strings-sharing.xml b/astrid/res/values/strings-sharing.xml new file mode 100644 index 000000000..690c48725 --- /dev/null +++ b/astrid/res/values/strings-sharing.xml @@ -0,0 +1,11 @@ + + + + + + + + Share + + +