Fot filters working, with icons even. sweet action.
@ -1,192 +1,203 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
package="com.timsu.astrid"
|
package="com.timsu.astrid"
|
||||||
android:versionName="2.14.4" android:versionCode="135">
|
android:versionName="2.14.4" android:versionCode="135">
|
||||||
|
|
||||||
<!-- ============================ Metadata ============================ -->
|
<!-- ================================================== Used Permissions = -->
|
||||||
|
|
||||||
<uses-permission android:name="android.permission.VIBRATE"/>
|
<!-- for notifications -->
|
||||||
<uses-permission android:name="android.permission.INTERNET"/>
|
<uses-permission android:name="android.permission.VIBRATE"/>
|
||||||
<uses-permission android:name="android.permission.WRITE_CALENDAR" />
|
<!-- for synchronization -->
|
||||||
<uses-permission android:name="android.permission.READ_CALENDAR" />
|
<uses-permission android:name="android.permission.INTERNET"/>
|
||||||
<uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT" />
|
<!-- for google calendar integration -->
|
||||||
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
|
<uses-permission android:name="android.permission.WRITE_CALENDAR" />
|
||||||
|
<uses-permission android:name="android.permission.READ_CALENDAR" />
|
||||||
<!-- For Flurry analytics -->
|
<!-- for creating shortcuts -->
|
||||||
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
|
<uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT" />
|
||||||
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
|
<!-- for backup -->
|
||||||
|
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
|
||||||
<!-- For Tasks provider -->
|
<!-- for analytics -->
|
||||||
<permission android:name="com.timsu.astrid.permission.READ_TASKS"
|
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
|
||||||
android:permissionGroup="android.permission-group.MESSAGES"
|
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
|
||||||
android:protectionLevel="normal"
|
|
||||||
android:label="@string/read_tasks_permission"
|
<!-- ============================================== Exported Permissions = -->
|
||||||
android:description="@string/read_tasks_permission"/>
|
|
||||||
<uses-permission android:name="com.timsu.astrid.permission.READ_TASKS"/>
|
<!-- for tasks provider -->
|
||||||
|
<permission android:name="com.timsu.astrid.permission.READ_TASKS"
|
||||||
<uses-sdk android:minSdkVersion="3"
|
android:permissionGroup="android.permission-group.MESSAGES"
|
||||||
android:targetSdkVersion="4" />
|
android:protectionLevel="normal"
|
||||||
<supports-screens />
|
android:label="@string/read_tasks_permission"
|
||||||
|
android:description="@string/read_tasks_permission"/>
|
||||||
<application android:icon="@drawable/icon" android:label="@string/app_name" android:debuggable="false">
|
<uses-permission android:name="com.timsu.astrid.permission.READ_TASKS"/>
|
||||||
|
|
||||||
<!-- ========================= Activities ========================== -->
|
<!-- for reading data from plugins or astrid -->
|
||||||
|
<permission android:name="com.todoroo.astrid.READ"
|
||||||
<!-- primary activity: agenda -->
|
android:description="@string/read_permission_desc"
|
||||||
<activity android:name="com.todoroo.astrid.activity.HomeActivity">
|
android:protectionLevel="normal"
|
||||||
<intent-filter>
|
android:label="@string/read_permission_label" />
|
||||||
<action android:name="android.intent.action.MAIN" />
|
<uses-permission android:name="com.todoroo.astrid.READ" />
|
||||||
<category android:name="android.intent.category.LAUNCHER" />
|
|
||||||
</intent-filter>
|
<!-- for writing data to plugins or astrid -->
|
||||||
</activity>
|
<permission android:name="com.todoroo.astrid.WRITE"
|
||||||
|
android:description="@string/write_permission_desc"
|
||||||
<activity android:name="com.todoroo.astrid.activity.TaskListActivity"
|
android:protectionLevel="normal"
|
||||||
android:theme="@style/Theme">
|
android:label="@string/write_permission_label" />
|
||||||
<intent-filter>
|
<uses-permission android:name="com.todoroo.astrid.WRITE" />
|
||||||
<action android:name="android.intent.action.VIEW" />
|
|
||||||
<category android:name="android.intent.category.DEFAULT" />
|
<!-- ========================================================== Metadata = -->
|
||||||
</intent-filter>
|
|
||||||
</activity>
|
<uses-sdk android:minSdkVersion="3"
|
||||||
|
android:targetSdkVersion="4" />
|
||||||
<activity android:name="com.todoroo.astrid.activity.FilterListActivity"
|
<supports-screens />
|
||||||
android:theme="@style/Theme">
|
|
||||||
<intent-filter>
|
<application android:icon="@drawable/icon" android:label="@string/app_name">
|
||||||
<action android:name="android.intent.action.SEARCH" />
|
|
||||||
<category android:name="android.intent.category.DEFAULT" />
|
<!-- ====================================================== Activities = -->
|
||||||
</intent-filter>
|
|
||||||
<meta-data android:name="android.app.searchable"
|
<!-- Activity that redirects to the appropriate home -->
|
||||||
android:resource="@xml/filter_list_searchable" />
|
<activity android:name="com.todoroo.astrid.activity.HomeActivity">
|
||||||
</activity>
|
<intent-filter>
|
||||||
|
<action android:name="android.intent.action.MAIN" />
|
||||||
<!-- ======================== Activities ========================= -->
|
<category android:name="android.intent.category.LAUNCHER" />
|
||||||
|
</intent-filter>
|
||||||
<!-- Activity that displays the task list -->
|
</activity>
|
||||||
<activity android:name=".activities.TaskList">
|
<!-- Activity that displays task list -->
|
||||||
<intent-filter>
|
<activity android:name="com.todoroo.astrid.activity.TaskListActivity"
|
||||||
<action android:name="android.intent.action.MAIN" />
|
android:theme="@style/Theme">
|
||||||
<category android:name="android.intent.category.LAUNCHER" />
|
<intent-filter>
|
||||||
</intent-filter>
|
<action android:name="android.intent.action.VIEW" />
|
||||||
</activity>
|
<category android:name="android.intent.category.DEFAULT" />
|
||||||
|
</intent-filter>
|
||||||
<!-- Activity that redirects to a task list, invoked by notifications -->
|
</activity>
|
||||||
<activity android:name=".activities.TaskListNotify"
|
<!-- Activity that displays filter list -->
|
||||||
android:launchMode="singleTop" />
|
<activity android:name="com.todoroo.astrid.activity.FilterListActivity"
|
||||||
|
android:theme="@style/Theme">
|
||||||
<!-- Activity that creates or edits tasks -->
|
<intent-filter>
|
||||||
<activity android:name=".activities.TaskEdit"
|
<action android:name="android.intent.action.SEARCH" />
|
||||||
android:icon="@drawable/icon_add"
|
<category android:name="android.intent.category.DEFAULT" />
|
||||||
android:label="@string/taskEdit_label">
|
</intent-filter>
|
||||||
<intent-filter>
|
<meta-data android:name="android.app.searchable"
|
||||||
<action android:name="android.intent.action.MAIN" />
|
android:resource="@xml/filter_list_searchable" />
|
||||||
<category android:name="android.intent.category.DEFAULT" />
|
</activity>
|
||||||
</intent-filter>
|
<!-- Activity that redirects to a task list, invoked by notifications -->
|
||||||
|
<activity android:name=".activities.TaskListNotify"
|
||||||
<intent-filter>
|
android:launchMode="singleTop" />
|
||||||
<action android:name="android.intent.action.VIEW" />
|
<!-- Activity that creates or edits tasks -->
|
||||||
<category android:name="android.intent.category.DEFAULT" />
|
<activity android:name=".activities.TaskEdit"
|
||||||
<data android:mimeType="vnd.android.cursor.item/task" />
|
android:icon="@drawable/icon_add"
|
||||||
</intent-filter>
|
android:label="@string/taskEdit_label">
|
||||||
|
<intent-filter>
|
||||||
</activity>
|
<action android:name="android.intent.action.MAIN" />
|
||||||
|
<category android:name="android.intent.category.DEFAULT" />
|
||||||
<!-- Activity that views tags -->
|
</intent-filter>
|
||||||
<activity android:name=".activities.TagView">
|
<intent-filter>
|
||||||
<intent-filter>
|
<action android:name="android.intent.action.VIEW" />
|
||||||
<action android:name="android.intent.action.VIEW" />
|
<category android:name="android.intent.category.DEFAULT" />
|
||||||
<category android:name="android.intent.category.DEFAULT" />
|
<data android:mimeType="vnd.android.cursor.item/task" />
|
||||||
</intent-filter>
|
</intent-filter>
|
||||||
</activity>
|
</activity>
|
||||||
|
<!-- Activity that lets users log in to sync providers -->
|
||||||
<!-- Activity that lets users log in to sync providers -->
|
<activity android:name=".activities.SyncLoginActivity"/>
|
||||||
<activity android:name=".activities.SyncLoginActivity"/>
|
<!-- Activity that lets users edit app preferences -->
|
||||||
|
<activity android:name=".activities.EditPreferences"/>
|
||||||
<!-- Activity that lets users edit app preferences -->
|
<!-- Activity that lets users edit synchronization preferences -->
|
||||||
<activity android:name=".activities.EditPreferences"/>
|
<activity android:name=".activities.SyncPreferences"/>
|
||||||
|
<!-- Activity that Locale displays to edit tag notification settings -->
|
||||||
<!-- Activity that lets users edit synchronization preferences -->
|
<activity android:name=".activities.LocaleEditAlerts"
|
||||||
<activity android:name=".activities.SyncPreferences"/>
|
android:label="@string/locale_edit_alerts_title"
|
||||||
|
android:icon="@drawable/icon_32"
|
||||||
<!-- activity that Locale displays to edit tag notification settings -->
|
android:exported="true" >
|
||||||
<activity
|
<intent-filter>
|
||||||
android:name=".activities.LocaleEditAlerts"
|
<action android:name="com.twofortyfouram.locale.intent.action.EDIT_SETTING" />
|
||||||
android:label="@string/locale_edit_alerts_title"
|
</intent-filter>
|
||||||
android:icon="@drawable/icon_32"
|
</activity>
|
||||||
android:exported="true" >
|
|
||||||
<intent-filter>
|
<!-- ======================================================= Receivers = -->
|
||||||
<action android:name="com.twofortyfouram.locale.intent.action.EDIT_SETTING" />
|
|
||||||
</intent-filter>
|
<receiver android:name=".utilities.Notifications" />
|
||||||
</activity>
|
|
||||||
|
<receiver android:name=".utilities.LocaleReceiver">
|
||||||
<!-- ======================== Receivers ========================= -->
|
<intent-filter>
|
||||||
|
<action android:name="com.timsu.astrid.action.LOCALE_ALERT" />
|
||||||
<receiver android:name=".utilities.Notifications" />
|
</intent-filter>
|
||||||
|
</receiver>
|
||||||
<receiver android:name=".utilities.LocaleReceiver">
|
|
||||||
<intent-filter>
|
<receiver android:name=".utilities.StartupReceiver">
|
||||||
<action android:name="com.timsu.astrid.action.LOCALE_ALERT" />
|
<intent-filter>
|
||||||
</intent-filter>
|
<action android:name="android.intent.action.BOOT_COMPLETED" />
|
||||||
</receiver>
|
<category android:name="android.intent.category.DEFAULT" />
|
||||||
|
</intent-filter>
|
||||||
<receiver android:name=".utilities.StartupReceiver">
|
</receiver>
|
||||||
<intent-filter>
|
|
||||||
<action android:name="android.intent.action.BOOT_COMPLETED" />
|
<receiver android:name=".appwidget.AstridAppWidgetProvider" >
|
||||||
<category android:name="android.intent.category.DEFAULT" />
|
<intent-filter>
|
||||||
</intent-filter>
|
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
|
||||||
</receiver>
|
</intent-filter>
|
||||||
|
<meta-data android:name="android.appwidget.provider"
|
||||||
<receiver android:name=".appwidget.AstridAppWidgetProvider" >
|
android:resource="@xml/widget_provider_info" />
|
||||||
<intent-filter>
|
</receiver>
|
||||||
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
|
|
||||||
</intent-filter>
|
<!-- ======================================================== Services = -->
|
||||||
<meta-data android:name="android.appwidget.provider"
|
|
||||||
android:resource="@xml/widget_provider_info" />
|
<service android:name=".appwidget.AstridAppWidgetProvider$UpdateService"></service>
|
||||||
</receiver>
|
<service android:name=".sync.SynchronizationService" />
|
||||||
|
<service android:name=".utilities.BackupService"/>
|
||||||
|
|
||||||
<!-- ======================== Services ========================== -->
|
<!-- ======================================================= Providers = -->
|
||||||
|
|
||||||
<service android:name=".appwidget.AstridAppWidgetProvider$UpdateService"></service>
|
<provider android:name=".provider.TasksProvider"
|
||||||
|
android:authorities="com.timsu.astrid.tasksprovider"
|
||||||
<service android:name=".sync.SynchronizationService" />
|
android:multiprocess="true"
|
||||||
<service android:name=".utilities.BackupService"/>
|
android:grantUriPermissions="true"
|
||||||
|
android:readPermission="com.timsu.astrid.permission.READ_TASKS"/>
|
||||||
<!-- ======================== Providers ========================== -->
|
|
||||||
|
<!-- ========================================================= Plugins = -->
|
||||||
<provider
|
|
||||||
android:name=".provider.TasksProvider"
|
<receiver android:name="com.todoroo.astrid.filters.CorePlugin">
|
||||||
android:authorities="com.timsu.astrid.tasksprovider"
|
<intent-filter>
|
||||||
android:multiprocess="true"
|
<action android:name="com.todoroo.astrid.REQUEST_PLUGINS" />
|
||||||
android:grantUriPermissions="true"
|
<category android:name="android.intent.category.DEFAULT" />
|
||||||
android:readPermission="com.timsu.astrid.permission.READ_TASKS"
|
</intent-filter>
|
||||||
/>
|
</receiver>
|
||||||
|
<receiver android:name="com.todoroo.astrid.filters.CoreFilterExposer">
|
||||||
<!-- ====================== Internal Plug-ins ======================= -->
|
<intent-filter>
|
||||||
|
<action android:name="com.todoroo.astrid.REQUEST_FILTERS" />
|
||||||
<!-- ====================== Filters ======================= -->
|
<category android:name="android.intent.category.DEFAULT" />
|
||||||
|
</intent-filter>
|
||||||
<receiver android:name="com.todoroo.astrid.filters.FilterExposer">
|
</receiver>
|
||||||
<intent-filter>
|
|
||||||
<action android:name="com.todoroo.astrid.REQUEST_FILTERS" />
|
<receiver android:name="com.todoroo.astrid.filters.ExtendedPlugin">
|
||||||
<category android:name="android.intent.category.DEFAULT" />
|
<intent-filter>
|
||||||
</intent-filter>
|
<action android:name="com.todoroo.astrid.REQUEST_PLUGINS" />
|
||||||
</receiver>
|
<category android:name="android.intent.category.DEFAULT" />
|
||||||
|
</intent-filter>
|
||||||
<!-- ====================== Tags ======================= -->
|
</receiver>
|
||||||
|
<receiver android:name="com.todoroo.astrid.filters.ExtendedFilterExposer">
|
||||||
<receiver android:name="com.todoroo.astrid.tags.FilterExposer">
|
<intent-filter>
|
||||||
<intent-filter>
|
<action android:name="com.todoroo.astrid.REQUEST_FILTERS" />
|
||||||
<action android:name="com.todoroo.astrid.REQUEST_FILTERS" />
|
<category android:name="android.intent.category.DEFAULT" />
|
||||||
<category android:name="android.intent.category.DEFAULT" />
|
</intent-filter>
|
||||||
</intent-filter>
|
</receiver>
|
||||||
</receiver>
|
|
||||||
|
<receiver android:name="com.todoroo.astrid.tags.TagsPlugin">
|
||||||
<receiver android:name=".tags.DetailExposer">
|
<intent-filter>
|
||||||
<intent-filter>
|
<action android:name="com.todoroo.astrid.REQUEST_PLUGINS" />
|
||||||
<action android:name="com.todoroo.astrid.REQUEST_DETAILS" />
|
<category android:name="android.intent.category.DEFAULT" />
|
||||||
<category android:name="android.intent.category.DEFAULT" />
|
</intent-filter>
|
||||||
</intent-filter>
|
</receiver>
|
||||||
</receiver>
|
<receiver android:name="com.todoroo.astrid.tags.FilterExposer">
|
||||||
|
<intent-filter>
|
||||||
</application>
|
<action android:name="com.todoroo.astrid.REQUEST_FILTERS" />
|
||||||
|
<category android:name="android.intent.category.DEFAULT" />
|
||||||
|
</intent-filter>
|
||||||
|
</receiver>
|
||||||
|
<receiver android:name="com.todoroo.astrid.tags.DetailExposer">
|
||||||
|
<intent-filter>
|
||||||
|
<action android:name="com.todoroo.astrid.REQUEST_DETAILS" />
|
||||||
|
<category android:name="android.intent.category.DEFAULT" />
|
||||||
|
</intent-filter>
|
||||||
|
</receiver>
|
||||||
|
|
||||||
|
</application>
|
||||||
|
|
||||||
</manifest>
|
</manifest>
|
||||||
|
@ -0,0 +1,50 @@
|
|||||||
|
/**
|
||||||
|
* See the file "LICENSE" for the full license governing this code.
|
||||||
|
*/
|
||||||
|
package com.todoroo.astrid.tags;
|
||||||
|
|
||||||
|
import android.content.BroadcastReceiver;
|
||||||
|
import android.content.Context;
|
||||||
|
import android.content.Intent;
|
||||||
|
|
||||||
|
import com.timsu.astrid.R;
|
||||||
|
import com.todoroo.astrid.api.AstridApiConstants;
|
||||||
|
import com.todoroo.astrid.api.TaskDetail;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Exposes {@link TaskDetail} for tags, i.e. "Tags: frogs, animals"
|
||||||
|
*
|
||||||
|
* @author Tim Su <tim@todoroo.com>
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public class DetailExposer extends BroadcastReceiver {
|
||||||
|
|
||||||
|
private static TagService tagService = null;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onReceive(Context context, Intent intent) {
|
||||||
|
// get tags associated with this task
|
||||||
|
long taskId = intent.getLongExtra(AstridApiConstants.EXTRAS_TASK_ID, -1);
|
||||||
|
if(taskId == -1)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if(tagService == null)
|
||||||
|
tagService = new TagService(context);
|
||||||
|
String tagList = tagService.getTagsAsString(taskId);
|
||||||
|
|
||||||
|
if(tagList.length() == 0)
|
||||||
|
return;
|
||||||
|
|
||||||
|
TaskDetail taskDetail = new TaskDetail(TagsPlugin.IDENTIFIER,
|
||||||
|
context.getString(R.string.tag_TLA_detail, tagList));
|
||||||
|
|
||||||
|
// transmit
|
||||||
|
TaskDetail[] details = new TaskDetail[1];
|
||||||
|
details[0] = taskDetail;
|
||||||
|
Intent broadcastIntent = new Intent(AstridApiConstants.BROADCAST_SEND_DETAILS);
|
||||||
|
broadcastIntent.putExtra(AstridApiConstants.EXTRAS_ITEMS, details);
|
||||||
|
broadcastIntent.putExtra(AstridApiConstants.EXTRAS_TASK_ID, taskId);
|
||||||
|
context.sendBroadcast(broadcastIntent, AstridApiConstants.PERMISSION_READ);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,24 @@
|
|||||||
|
package com.todoroo.astrid.tags;
|
||||||
|
|
||||||
|
import android.content.BroadcastReceiver;
|
||||||
|
import android.content.Context;
|
||||||
|
import android.content.Intent;
|
||||||
|
|
||||||
|
import com.todoroo.astrid.api.AstridApiConstants;
|
||||||
|
import com.todoroo.astrid.api.Plugin;
|
||||||
|
|
||||||
|
public class TagsPlugin extends BroadcastReceiver {
|
||||||
|
|
||||||
|
static final String IDENTIFIER = "tags";
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onReceive(Context context, Intent intent) {
|
||||||
|
Plugin plugin = new Plugin(IDENTIFIER, "Tags", "Todoroo",
|
||||||
|
"Provides tagging support for tasks.");
|
||||||
|
|
||||||
|
Intent broadcastIntent = new Intent(AstridApiConstants.BROADCAST_SEND_PLUGINS);
|
||||||
|
broadcastIntent.putExtra(AstridApiConstants.EXTRAS_PLUGIN, plugin);
|
||||||
|
context.sendBroadcast(broadcastIntent, AstridApiConstants.PERMISSION_READ);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
After Width: | Height: | Size: 390 B |
After Width: | Height: | Size: 567 B |
After Width: | Height: | Size: 655 B |
After Width: | Height: | Size: 853 B |
After Width: | Height: | Size: 806 B |
After Width: | Height: | Size: 378 B |
After Width: | Height: | Size: 586 B |
After Width: | Height: | Size: 599 B |
After Width: | Height: | Size: 701 B |