Merge of default-calendar branch in launchpad from Sami Salonen. (lp:~ssalonen/astrid/default-calendar)

pull/14/head
Tim Su 14 years ago
parent 6ee437ede1
commit f1b9d9e42c

@ -23,15 +23,15 @@
android:label="@string/read_tasks_permission"
android:description="@string/read_tasks_permission"/>
<uses-permission android:name="com.timsu.astrid.permission.READ_TASKS"/>
<uses-sdk android:minSdkVersion="3"
android:targetSdkVersion="4" />
<supports-screens />
<application android:icon="@drawable/icon" android:label="@string/app_name" android:debuggable="false">
<!-- ======================== Activities ========================= -->
<!-- Activity that displays the task list -->
<activity android:name=".activities.TaskList">
<intent-filter>
@ -39,11 +39,11 @@
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<!-- Activity that redirects to a task list, invoked by notifications -->
<activity android:name=".activities.TaskListNotify"
android:launchMode="singleTop" />
<!-- Activity that creates or edits tasks -->
<activity android:name=".activities.TaskEdit"
android:icon="@drawable/icon_add"
@ -58,7 +58,7 @@
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="vnd.android.cursor.item/task" />
</intent-filter>
</activity>
<!-- Activity that views tags -->
@ -68,13 +68,13 @@
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
<!-- Activity that lets users log in to sync providers -->
<activity android:name=".activities.SyncLoginActivity"/>
<!-- Activity that lets users edit app preferences -->
<activity android:name=".activities.EditPreferences"/>
<!-- Activity that lets users edit synchronization preferences -->
<activity android:name=".activities.SyncPreferences"/>
@ -90,15 +90,15 @@
</activity>
<!-- ======================== Receivers ========================= -->
<receiver android:name=".utilities.Notifications" />
<receiver android:name=".utilities.LocaleReceiver">
<intent-filter>
<action android:name="com.timsu.astrid.action.LOCALE_ALERT" />
</intent-filter>
</receiver>
<receiver android:name=".utilities.StartupReceiver">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
@ -116,14 +116,14 @@
<!-- ======================== Services ========================== -->
<service android:name=".appwidget.AstridAppWidgetProvider$UpdateService"></service>
<service android:name=".sync.SynchronizationService" />
<service android:name=".utilities.BackupService"/>
<!-- ======================== Providers ========================== -->
<provider
android:name=".provider.TasksProvider"
android:authorities="com.timsu.astrid.tasksprovider"
@ -131,7 +131,7 @@
android:grantUriPermissions="true"
android:readPermission="com.timsu.astrid.permission.READ_TASKS"
/>
</application>
</manifest>
</application>
</manifest>

@ -1,23 +1,23 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
ASTRID: Android's Simple Task Recording Dashboard
Copyright (c) 2009 Tim Su
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
for more details.
You should have received a copy of the GNU General Public License along
with this program; if not, write to the Free Software Foundation, Inc.,
59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-->
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
@ -30,28 +30,31 @@
<string name="p_notif_quietStart">notif_qstart</string>
<string name="p_notif_quietEnd">notif_qend</string>
<string name="p_notif_defaultRemind">notif_default_reminder</string>
<string name="p_notif_annoy">notif_annoy</string>
<string name="p_notif_vibrate">notif_vibrate</string>
<string name="p_notification_ringtone">notification_ringtone</string>
<string name="p_notif_icon">notif_theme</string>
<string name="p_colorize">colorize</string>
<string name="p_fontSize">font_size</string>
<string name="p_nagging">nagging</string>
<string name="p_deadlineTime">deadline_time</string>
<string name="p_backup">backup</string>
<string name="prefs_titleVisible">titleVisible</string>
<string name="prefs_defaultCalendar">default_calendar_id</string>
<string name="prefs_defaultCalendar_default">1</string>
<string name="prefs_titleVisible">titleVisible</string>
<string name="prefs_titleVisible_default">true</string>
<string name="prefs_deadlineVisible">deadlineVisible</string>
<string name="prefs_deadlineVisible_default">true</string>

@ -59,17 +59,17 @@
<item quantity="one">1 Tag</item>
<item quantity="other">%d Tags</item>
</plurals>
<!-- Time Constants -->
<!-- used for long due dates. c.f. Java's SimpleDateFormat -->
<string name="dateFormatter">MMM d</string>
<string name="dateFormatter">MMM d</string>
<!-- used for alarms -->
<string name="alarmDateFormatter">M/dd HH:mm</string>
<!-- vertical labels are used in dialog boxes -->
<string name="daysVertical">D\na\ny\ns</string>
<string name="daysVertical">D\na\ny\ns</string>
<string name="hoursVertical">H\no\nu\nr\ns</string>
<plurals name="Ndays">
<!-- plurals: days -->
<item quantity="one">1 Day</item>
@ -110,10 +110,10 @@
<item quantity="one">1 Sec</item>
<item quantity="other">%d Sec</item>
</plurals>
<!-- indicates time in past. %s is replaced by time unit i.e. 1 minute -->
<string name="ago_string">%s Ago</string>
<!-- TaskList -->
<skip />
<!-- title bar -->
@ -123,9 +123,9 @@
<string name="taskList_hiddenSuffix"> hidden</string>
<string name="addtask_label">New Task</string>
<string name="missing_tag">Could Not Find Requested Tag!</string>
<!-- text displayed in task list item -->
<!-- prefix to show that a task is hidden -->
<string name="taskList_hiddenPrefix">H</string>
<!-- i.e. Due in 4 days -->
@ -143,7 +143,7 @@
<string name="taskList_elapsedTimePrefix">Spent:</string>
<!-- time interval to set frequency to remind user -->
<string name="taskList_periodicReminderPrefix">Poke Every</string>
<!-- time interval to set repeated tasks-->
<string name="taskList_repeatPrefix">Repeats Every</string>
<!-- displayed when repeat is on remote server-->
@ -151,15 +151,15 @@
<string name="taskList_alarmPrefix">Next Alarm:</string>
<string name="taskList_tagsPrefix">Tags:</string>
<string name="taskList_notesPrefix">Notes:</string>
<!-- i.e. Created: <create date> -->
<string name="taskList_createdPrefix">Created:</string>
<!-- i.e. Deleted: <delete date> -->
<string name="taskList_deleted">Deleted</string>
<string name="quick_add_hint">Add New Task</string>
<!-- menu items -->
<string name="taskList_menu_insert">New Task</string>
<string name="taskList_menu_tags">Tags</string>
@ -180,7 +180,7 @@
<string name="taskList_context_startTimer">Start Timer</string>
<string name="taskList_context_stopTimer">Stop Timer</string>
<string name="taskList_context_postpone">Postpone</string>
<!-- filter menu items -->
<string name="taskList_filter_title">Sort/Filters</string>
<string name="taskList_filter_hidden">Hidden/Blocked Tasks</string>
@ -190,7 +190,7 @@
<string name="taskList_sort_alpha">Sort By Name</string>
<string name="taskList_sort_duedate">Sort By Due Date</string>
<string name="taskList_sort_reverse">Sort Reverse</string>
<string name="taskList_nonag_reminder">Select an Action:</string>
<string name="taskList_postpone_count">Times You\'ve Postponed: %d</string>
<string name="taskList_postpone_dialog">Postpone for how long?</string>
@ -202,19 +202,19 @@
<string name="taskEdit_titleGeneric">Astrid: Editing Task</string>
<string name="taskEdit_titlePrefix">Astrid: Editing </string>
<string name="taskEdit_label">Astrid: New Task</string>
<!-- tabs -->
<string name="taskEdit_tab_basic">Basic</string>
<string name="taskEdit_tab_dates">Dates</string>
<string name="taskEdit_tab_alerts">Alerts</string>
<!-- labels -->
<string name="name_label">Summary</string>
<string name="name_hint">Task Name</string>
<string name="importance_label">How Important is it?</string>
<string name="tags_label">Tags:</string>
<string name="tag_hint">Tag Name</string>
<string name="estimatedDuration_label">How Long Will it Take?</string>
<string name="elapsedDuration_label">Time Already Spent on Task</string>
<string name="definiteDueDate_label">Absolute Deadline</string>
@ -227,7 +227,7 @@
<string name="blockingOn_label">Hide Until This Task is Done</string>
<string name="notes_label">Notes</string>
<string name="notes_hint">Enter Task Notes</string>
<string name="notification_label">Periodic Reminders</string>
<string name="notification_prefix">Every</string>
<string name="flags_label">Notify me...</string>
@ -237,7 +237,7 @@
<string name="flag_nonstop">Alarm Clock Mode</string>
<string name="alerts_label">Fixed Reminders</string>
<string name="add_alert">Add New Reminder</string>
<!-- dialog boxes -->
<string name="hour_minutes_dialog">Time (hours : minutes)</string>
<string name="notification_dialog">Remind Me Every</string>
@ -250,7 +250,7 @@ If you don\'t want to see the new task right after you complete the old one, you
\n
</string>
<string name="repeat_help_hide">Don't Show Help Anymore</string>
<!-- buttons -->
<string name="save_label">Save</string>
<string name="discard_label">Discard</string>
@ -259,17 +259,17 @@ If you don\'t want to see the new task right after you complete the old one, you
<string name="blank_button_title">Click to Set</string>
<string name="startTimer_label">Start Timer</string>
<string name="stopTimer_label">Stop Timer</string>
<string name="taskEdit_menu_save">Save</string>
<string name="taskEdit_onTaskSave_Due">Task Saved: due in %s</string>
<string name="taskEdit_onTaskSave_Overdue">Task Saved: due %s ago</string>
<string name="taskEdit_onTaskSave_notDue">Task Saved</string>
<!-- TaskView -->
<skip />
<string name="taskView_notifyTitle">Astrid says...</string>
<!-- Tag List -->
<skip />
<string name="tagList_titlePrefix">Astrid: Tag View: </string>
@ -282,12 +282,12 @@ If you don\'t want to see the new task right after you complete the old one, you
<string name="tagList_shortcut_created">Shortcut created on your home screen!</string>
<string name="tagList_shortcut_prefix">Tag:</string>
<string name="tagList_untagged">[untagged]</string>
<string name="tagList_menu_sortAlpha">Sort A-Z</string>
<string name="tagList_menu_sortSize">Sort by Size</string>
<!-- Synchronization -->
<!-- Synchronization -->
<skip />
<string name="sync_pref_group">Synchronization Services</string>
<string name="sync_pref_group_actions">Actions</string>
@ -305,7 +305,7 @@ If you don\'t want to see the new task right after you complete the old one, you
<string name="sync_bgwifi_desc">If set, auto-sync only happens when Wifi is active</string>
<string name="sync_error">Sync Error! Sorry for the inconvenience! Error:</string>
<string name="sync_upgrade_v99">
Astrid 2.7 now performs synchronization with RTM in the background. You will
Astrid 2.7 now performs synchronization with RTM in the background. You will
be directed to the preferences page to configure how often you want this to
occur (it is a minor drain on battery).
</string>
@ -324,23 +324,23 @@ occur (it is a minor drain on battery).
<string name="sync_result_updated">Updated: %d</string>
<string name="sync_result_deleted">Deleted: %d</string>
<string name="sync_result_merged">Merged: %d</string>
<string name="sync_progress_remote">Reading Remote Data</string>
<string name="sync_progress_rxlist">Reading List: %s</string>
<string name="sync_progress_repeating">Synchronizing Repeating Task</string>
<string name="sync_progress_localtx">Transmitting: %s</string>
<string name="sync_progress_localdel">Locally Deleted Tasks</string>
<string name="sync_progress_remotetx">Receiving: %s</string>
<string name="rtm_login_label">Please Log In to RTM...</string>
<string name="rtm_login_error">
Sorry, there was an error verifying your login. Please try again.
\n\n
Error Message:
Error Message:
</string>
<!-- Dialog Boxes -->
<!-- Dialog Boxes -->
<skip />
<string name="loading">Loading...</string>
<string name="updating">Updating List...</string>
@ -352,13 +352,13 @@ Error Message:
<string name="notify_snooze">Snooze...</string>
<string name="notify_no">Go Away!</string>
<string name="notify_snooze_title">Hours/minutes to snooze?</string>
<string name="delete_title">Delete</string>
<string name="delete_title">Delete</string>
<string name="delete_this_task_title">Delete this task?</string>
<string name="delete_this_tag_title">Remove this tag from all tasks?</string>
<string name="stop_timer_title">Stop the timer?</string>
<string name="quick_tips">
Some things you may not know about Astrid:\n
\n
@ -369,10 +369,10 @@ Some things you may not know about Astrid:\n
\n
Thanks for using Astrid!\n
</string>
<!-- %s => name of the application -->
<string name="task_killer_help">
It looks like you are using an app that can kill processes (%s)! If you can,
It looks like you are using an app that can kill processes (%s)! If you can,
add Astrid to the exclusion list so it doesn\'t get killed. Otherwise,
Astrid might not let you know when your tasks are due.\n
</string>
@ -397,64 +397,64 @@ Skipped %d tasks.\n
<string name="import_file_prompt">Select a File to Restore</string>
<!-- Locale Plugin -->
<skip />
<string name="locale_edit_alerts_title">Astrid Tag Alert</string>
<string name="locale_edit_intro">Astrid will send you a reminder
<string name="locale_edit_intro">Astrid will send you a reminder
when you have uncompleted tasks with the following criteria:</string>
<string name="locale_pick_tag">Tagged with:</string>
<!-- Notification -->
<!-- Notification -->
<skip />
<string name="notif_definiteDueDate">Absolute Deadline!</string>
<string name="notif_preferredDueDate">Goal Deadline!</string>
<string name="notif_timerStarted">Working on:</string>
<!-- $NUM is replaced with # of tasks + units, i.e. "1 task", $TAG is replaced with tag name -->
<string name="notif_tagNotification">You have $NUM tagged $TAG!</string>
<!-- Error Messages -->
<!-- Error Messages -->
<skip />
<string name="error_opening">Could not find this item: </string>
<string name="error_saving">Could not save:s</string>
<string name="error_sdcard">Cannot access folder: %s</string>
<string name="error_sdcard_general">Cannot access your SD card!</string>
<skip />
<string name="prefs_category_alerts">Notifications</string>
<string name="prefs_quietStart_title">Quiet Hours Start</string>
<string name="prefs_quietStart_desc">Start time to silence notifications for periodic reminders</string>
<string name="prefs_quietEnd_title">Quiet Hours End</string>
<string name="prefs_quietEnd_desc">End time to silence notifications</string>
<string name="prefs_defaultRemind_title">Default Reminders</string>
<string name="prefs_defaultRemind_desc">For new tasks, default reminder in days (i.e. 7). Blank to disable</string>
<string name="prefs_annoy_title">Persistent Mode</string>
<string name="prefs_annoy_desc">If checked, LED and notifications must be cleared one at a time</string>
<string name="prefs_notification_title">Notification Ringtone</string>
<string name="prefs_notification_desc">Choose a ringtone for Astrid\'s alerts</string>
<string name="prefs_notificon_title">Notification Icons</string>
<string name="prefs_notificon_desc">Choose Astrid\'s notification bar icon</string>
<string name="prefs_vibrate_title">Vibrate on Alert</string>
<string name="prefs_vibrate_desc">If checked, Astrid will vibrate when sounding an alarm</string>
<string name="prefs_category_appearance">Appearance</string>
<string name="prefs_colorize_title">Colorize Task List</string>
<string name="prefs_colorize_desc">Different colors for different priorities</string>
<string name="prefs_fontSize_title">Task List Size</string>
<string name="prefs_fontSize_desc">Font size on the main listing page</string>
<string name="prefs_category_other">Other</string>
<string name="prefs_nagging_title">Nag Messages</string>
<string name="prefs_nagging_desc">Show Astrid\'s comments when viewing reminders and postponing tasks?</string>
@ -462,22 +462,27 @@ Skipped %d tasks.\n
<string name="prefs_deadlineTime_desc"># of days from now to set new deadlines</string>
<string name="prefs_backup_title">Automatic Backups</string>
<!-- backup summary when there is no backup message -->
<string name="prefs_backup_desc">Perform daily backups to sdcard.</string>
<!-- backup failure message (%s -> error message) -->
<string name="prefs_backup_desc_failure">Last backup failed: %s</string>
<!-- backup failure error when error message is null -->
<string name="prefs_backup_desc_failure_null">Last backup failed, could not read SD card</string>
<!-- backup success message (%s -> date) -->
<string name="prefs_backup_desc_success">Latest backup was on %s</string>
<string name="prefs_defaultCalendar_title">Calendar</string>
<string name="prefs_defaultCalendar_desc">Calendar to store the events.</string>
<string name="prefs_defaultCalendar_astrid_default">Astrid default</string>
<string name="displayedFields_PrefScreen_Title">Displayed Fields</string>
<string name="displayedFields_PrefScreen_Desc">Select the fields to show in task list</string>
<string name="prefs_titleVisible_title">Task Title</string>
<string name="prefs_titleVisible_desc">Task description</string>
<string name="prefs_deadlineVisible_title">Dates</string>
@ -501,14 +506,14 @@ Skipped %d tasks.\n
<string name="marketplace_description">
Astrid is the highly-acclaimed open-source task list that is simple enough to not get in your way, powerful enough to help you get stuff done! Tags, reminders, RememberTheMilk sync, Locale plug-in &amp; more!
</string>
<!-- Automatically filled in by Launchpad: -->
<string name="about_translators">translator-credits</string>
<!-- Widget text when loading tasks -->
<string name="widget_loading">Loading...</string>
<!-- Permissions -->
<string name="read_tasks_permission">Read Astrid tasks</string>
</resources>

@ -1,117 +1,121 @@
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen
xmlns:android="http://schemas.android.com/apk/res/android">
<PreferenceScreen
xmlns:android="http://schemas.android.com/apk/res/android">
<PreferenceCategory
android:title="@string/prefs_category_alerts">
<ListPreference
android:key="@string/p_notif_quietStart"
android:entries="@array/EPr_quiet_hours_start"
android:entryValues="@array/EPr_quiet_hours_start_values"
android:title="@string/prefs_quietStart_title"
android:summary="@string/prefs_quietStart_desc" />
<ListPreference
android:key="@string/p_notif_quietEnd"
android:entries="@array/EPr_quiet_hours_end"
android:entryValues="@array/EPr_quiet_hours_end_values"
android:title="@string/prefs_quietEnd_title"
android:summary="@string/prefs_quietEnd_desc" />
<CheckBoxPreference
android:key="@string/p_notif_annoy"
android:title="@string/prefs_annoy_title"
android:summary="@string/prefs_annoy_desc" />
<CheckBoxPreference
android:key="@string/p_notif_vibrate"
android:title="@string/prefs_vibrate_title"
android:summary="@string/prefs_vibrate_desc" />
<EditTextPreference
android:key="@string/p_notif_defaultRemind"
android:title="@string/prefs_defaultRemind_title"
android:summary="@string/prefs_defaultRemind_desc" />
<RingtonePreference
android:key="@string/p_notification_ringtone"
android:title="@string/prefs_notification_title"
<ListPreference
android:key="@string/p_notif_quietStart"
android:entries="@array/EPr_quiet_hours_start"
android:entryValues="@array/EPr_quiet_hours_start_values"
android:title="@string/prefs_quietStart_title"
android:summary="@string/prefs_quietStart_desc" />
<ListPreference
android:key="@string/p_notif_quietEnd"
android:entries="@array/EPr_quiet_hours_end"
android:entryValues="@array/EPr_quiet_hours_end_values"
android:title="@string/prefs_quietEnd_title"
android:summary="@string/prefs_quietEnd_desc" />
<CheckBoxPreference
android:key="@string/p_notif_annoy"
android:title="@string/prefs_annoy_title"
android:summary="@string/prefs_annoy_desc" />
<CheckBoxPreference
android:key="@string/p_notif_vibrate"
android:title="@string/prefs_vibrate_title"
android:summary="@string/prefs_vibrate_desc" />
<EditTextPreference
android:key="@string/p_notif_defaultRemind"
android:title="@string/prefs_defaultRemind_title"
android:summary="@string/prefs_defaultRemind_desc" />
<RingtonePreference
android:key="@string/p_notification_ringtone"
android:title="@string/prefs_notification_title"
android:summary="@string/prefs_notification_desc"
android:ringtoneType="notification"
android:ringtoneType="notification"
android:showDefault="true"
android:showSilent="true" />
<ListPreference
android:key="@string/p_notif_icon"
android:entries="@array/notif_icon_entries"
android:entryValues="@array/notif_icon_values"
android:title="@string/prefs_notificon_title"
android:summary="@string/prefs_notificon_desc" />
<ListPreference
android:key="@string/p_notif_icon"
android:entries="@array/notif_icon_entries"
android:entryValues="@array/notif_icon_values"
android:title="@string/prefs_notificon_title"
android:summary="@string/prefs_notificon_desc" />
</PreferenceCategory>
<PreferenceCategory
android:title="@string/prefs_category_appearance">
<CheckBoxPreference
android:key="@string/p_colorize"
android:title="@string/prefs_colorize_title"
android:summary="@string/prefs_colorize_desc" />
<ListPreference
<CheckBoxPreference
android:key="@string/p_colorize"
android:title="@string/prefs_colorize_title"
android:summary="@string/prefs_colorize_desc" />
<ListPreference
android:key="@string/p_fontSize"
android:entries="@array/EPr_font_size"
android:entryValues="@array/EPr_font_size"
android:title="@string/prefs_fontSize_title"
android:entries="@array/EPr_font_size"
android:entryValues="@array/EPr_font_size"
android:title="@string/prefs_fontSize_title"
android:summary="@string/prefs_fontSize_desc" />
<PreferenceScreen
android:title="@string/displayedFields_PrefScreen_Title"
android:summary="@string/displayedFields_PrefScreen_Desc">
<CheckBoxPreference
<CheckBoxPreference
android:key="@string/prefs_deadlineVisible"
android:title="@string/prefs_deadlineVisible_title"
android:summary="@string/prefs_deadlineVisible_desc"
android:defaultValue="@string/prefs_deadlineVisible_default" />
<CheckBoxPreference
android:defaultValue="@string/prefs_deadlineVisible_default" />
<CheckBoxPreference
android:key="@string/prefs_tagsVisible"
android:title="@string/prefs_tagsVisible_title"
android:summary="@string/prefs_tagsVisible_desc"
android:defaultValue="@string/prefs_tagsVisible_default" />
<CheckBoxPreference
<CheckBoxPreference
android:key="@string/prefs_importanceVisible"
android:title="@string/prefs_importanceVisible_title"
android:summary="@string/prefs_importanceVisible_desc"
android:defaultValue="@string/prefs_importanceVisible_default" />
<CheckBoxPreference
android:defaultValue="@string/prefs_importanceVisible_default" />
<CheckBoxPreference
android:key="@string/prefs_timeVisible"
android:title="@string/prefs_timeVisible_title"
android:summary="@string/prefs_timeVisible_desc"
android:defaultValue="@string/prefs_timeVisible_default" />
<CheckBoxPreference
android:defaultValue="@string/prefs_timeVisible_default" />
<CheckBoxPreference
android:key="@string/prefs_reminderVisible"
android:title="@string/prefs_reminderVisible_title"
android:summary="@string/prefs_reminderVisible_desc"
android:defaultValue="@string/prefs_reminderVisible_default" />
<CheckBoxPreference
android:defaultValue="@string/prefs_reminderVisible_default" />
<CheckBoxPreference
android:key="@string/prefs_repeatVisible"
android:title="@string/prefs_repeatVisible_title"
android:summary="@string/prefs_repeatVisible_desc"
android:defaultValue="@string/prefs_repeatVisible_default" />
<CheckBoxPreference
android:defaultValue="@string/prefs_repeatVisible_default" />
<CheckBoxPreference
android:key="@string/prefs_notesVisible"
android:title="@string/prefs_notesVisible_title"
android:summary="@string/prefs_notesVisible_desc"
android:defaultValue="@string/prefs_notesVisible_default" />
</PreferenceScreen>
</PreferenceCategory>
<PreferenceCategory
android:title="@string/prefs_category_other">
<CheckBoxPreference
android:title="@string/prefs_category_other">
<CheckBoxPreference
android:key="@string/p_nagging"
android:title="@string/prefs_nagging_title"
android:summary="@string/prefs_nagging_desc"
android:defaultValue="true" />
<EditTextPreference
android:key="@string/p_deadlineTime"
android:title="@string/prefs_deadlineTime_title"
<EditTextPreference
android:key="@string/p_deadlineTime"
android:title="@string/prefs_deadlineTime_title"
android:summary="@string/prefs_deadlineTime_desc" />
<CheckBoxPreference
android:key="@string/p_backup"
android:title="@string/prefs_backup_title"
android:summary="@string/prefs_backup_desc"
android:defaultValue="true" />
<ListPreference
android:key="@string/prefs_defaultCalendar"
android:title="@string/prefs_defaultCalendar_title"
android:summary="@string/prefs_defaultCalendar_desc" />
</PreferenceCategory>
</PreferenceScreen>
</PreferenceScreen>

@ -20,11 +20,13 @@
package com.timsu.astrid.activities;
import android.os.Bundle;
import android.preference.ListPreference;
import android.preference.Preference;
import android.preference.PreferenceActivity;
import com.flurry.android.FlurryAgent;
import com.timsu.astrid.R;
import com.timsu.astrid.utilities.Calendars;
import com.timsu.astrid.utilities.Constants;
import com.timsu.astrid.utilities.Preferences;
@ -45,6 +47,9 @@ public class EditPreferences extends PreferenceActivity {
String backupSummary = Preferences.getBackupSummary(this);
if(backupSummary != null && backupPreference != null)
backupPreference.setSummary(backupSummary);
ListPreference defaultCalendarPreference = (ListPreference) findPreference(getString(R.string.prefs_defaultCalendar));
Calendars.initCalendarsPreference(this, defaultCalendarPreference);
}
@Override

@ -766,12 +766,13 @@ public class TaskEdit extends TaskModificationTabbedActivity<TaskModelForEdit> {
protected void onPause() {
// create calendar event
if(addToCalendar.isChecked() && model.getCalendarUri() == null) {
Uri uri = Uri.parse("content://calendar/events");
ContentResolver cr = getContentResolver();
ContentValues values = new ContentValues();
values.put("title", name.getText().toString());
values.put("calendar_id", 1);
values.put("calendar_id", Preferences.getDefaultCalendarIDSafe(this));
values.put("description", notes.getText().toString());
values.put("hasAlarm", 0);
values.put("transparency", 0);
@ -781,11 +782,13 @@ public class TaskEdit extends TaskModificationTabbedActivity<TaskModelForEdit> {
model.getDefiniteDueDate(), model.getEstimatedSeconds(),
values);
Uri result = cr.insert(uri, values);
if(result != null)
model.setCalendarUri(result.toString());
else
Log.e("astrid", "Error creating calendar event!");
Uri result = null;
try{
result = cr.insert(uri, values);
model.setCalendarUri(result.toString());
} catch (IllegalArgumentException e) {
Log.e("astrid", "Error creating calendar event!", e);
}
}
if(shouldSaveState)

@ -0,0 +1,179 @@
package com.timsu.astrid.utilities;
import android.content.ContentResolver;
import android.content.Context;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.content.res.Resources;
import android.database.Cursor;
import android.net.Uri;
import android.preference.ListPreference;
import android.preference.PreferenceManager;
import android.util.Log;
import com.timsu.astrid.R;
public class Calendars {
// Private SDK
private static final Uri CALENDAR_CONTENT_URI = Uri
.parse("content://calendar/calendars"); // Calendars.CONTENT_URI
private static final String ID_COLUMN_NAME = "_id";
private static final String DISPLAY_COLUMN_NAME = "displayName";
private static final String ACCES_LEVEL_COLUMN_NAME = "access_level";
private static final String[] CALENDARS_PROJECTION = new String[] {
ID_COLUMN_NAME, // Calendars._ID,
DISPLAY_COLUMN_NAME // Calendars.DISPLAY_NAME
};
// Only show calendars that the user can modify. Access level 500
// corresponds to Calendars.CONTRIBUTOR_ACCESS
private static final String CALENDARS_WHERE = ACCES_LEVEL_COLUMN_NAME + " >= 500";
private static final String CALENDARS_WHERE_ID = ACCES_LEVEL_COLUMN_NAME+" >= 500 AND" + ID_COLUMN_NAME +"=?";
private static final String CALENDARS_SORT = "displayName ASC";
/**
* Ensures that the default calendar preference is pointing to
* user-modifiable calendar that exists. If the calendar does not exist
* anymore, the preference is reset to default value.
*
* @param context
* Context
*/
public static void ensureValidDefaultCalendarPreference(Context context) {
SharedPreferences prefs = PreferenceManager
.getDefaultSharedPreferences(context);
Resources r = context.getResources();
Editor editor = prefs.edit();
// We default the 'defaultCalendar' setting when it is undefined
// or when the calendar does not exist anymore
if (!prefs.contains(r.getString(R.string.prefs_defaultCalendar))
|| !Calendars.isCalendarPresent(context, prefs.getString(r
.getString(R.string.prefs_defaultCalendar), null))) {
editor.putString(r.getString(R.string.prefs_defaultCalendar), r
.getString(R.string.prefs_defaultCalendar_default));
editor.commit();
}
}
/**
* Appends all user-modifiable calendars to listPreference. Always includes
* entry called "Astrid default" with calendar id of
* prefs_defaultCalendar_default.
*
* @param context
* context
* @param listPreference
* preference to init
*/
public static void initCalendarsPreference(Context context,
ListPreference listPreference) {
ContentResolver cr = context.getContentResolver();
Resources r = context.getResources();
Cursor c = cr.query(CALENDAR_CONTENT_URI, CALENDARS_PROJECTION,
CALENDARS_WHERE, null, CALENDARS_SORT);
// Fetch the current setting. Invalid calendar id will
// be changed to default value.
String currentSetting = String.valueOf(Preferences
.getDefaultCalendarIDSafe(context));
int currentSettingIndex = -1;
if (c == null) {
// Something went wrong when querying calendars
// Let's keep the "Astrid default" only.
listPreference
.setEntries(new String[] { r
.getString(R.string.prefs_defaultCalendar_astrid_default) });
listPreference.setEntryValues(new String[] { r
.getString(R.string.prefs_defaultCalendar_default) });
listPreference.setValueIndex(0);
listPreference.setEnabled(true);
return;
}
int calendarCount = c.getCount();
String[] entries = new String[calendarCount];
String[] entryValues = new String[calendarCount];
// Iterate calendars one by one, and fill up the list preference
try {
int row = 0;
int idColumn = c.getColumnIndex(ID_COLUMN_NAME);
int nameColumn = c.getColumnIndex(DISPLAY_COLUMN_NAME);
while (c.moveToNext()) {
String id = c.getString(idColumn);
String name = c.getString(nameColumn);
entries[row] = name;
entryValues[row] = id;
// We found currently selected calendar
if (currentSetting.equals(id)) {
currentSettingIndex = row;
}
row++;
}
if (currentSettingIndex == -1) {
// Should not happen!
// Let's keep the "Astrid default" only.
Log.d("astrid", "initCalendarsPreference: Unknown calendar.");
listPreference
.setEntries(new String[] { r
.getString(R.string.prefs_defaultCalendar_astrid_default) });
listPreference.setEntryValues(new String[] { r
.getString(R.string.prefs_defaultCalendar_default) });
listPreference.setValueIndex(0);
listPreference.setEnabled(true);
}
listPreference.setEntries(entries);
listPreference.setEntryValues(entryValues);
listPreference.setValueIndex(currentSettingIndex);
listPreference.setEnabled(true);
} finally {
c.deactivate();
}
}
/**
* Checks whether user-modifiable calendar is present with a given id.
*
* @param context
* Context
* @param id
* Calendar ID to search for
* @return true, if user-modifiable calendar with the given id exists; false
* otherwise.
*/
private static boolean isCalendarPresent(Context context, String id) {
if (id == null)
return false;
ContentResolver cr = context.getContentResolver();
Cursor c = null;
try {
c = cr.query(CALENDAR_CONTENT_URI, CALENDARS_PROJECTION,
CALENDARS_WHERE_ID, new String[] { id }, CALENDARS_SORT);
} finally {
if (c != null) {
c.deactivate();
}
}
return (c != null) && (c.getCount() != 0);
}
}

@ -68,6 +68,8 @@ public class Preferences {
editor.putString(P_BACKUP_ERROR, null);
}
Calendars.ensureValidDefaultCalendarPreference(context);
setVisibilityPreferences(prefs, editor, r);
editor.commit();
@ -110,7 +112,7 @@ public class Preferences {
// --- system preferences
/** CurrentVersion: the currently installed version of Astrid */
/** CurrentVersion: the currently installed version of Astrid */
public static int getCurrentVersion(Context context) {
return getPrefs(context).getInt(P_CURRENT_VERSION, 0);
}
@ -444,6 +446,28 @@ public class Preferences {
editor.commit();
}
/** Get default calendar id. */
public static String getDefaultCalendarID(Context context) {
Resources r = context.getResources();
return getPrefs(context).getString(
r.getString(R.string.prefs_defaultCalendar),
r.getString(R.string.prefs_defaultCalendar_default));
}
/** Get default calendar id. Returns default value if the calendar does not exist anymore.*/
public static String getDefaultCalendarIDSafe(Context context) {
Calendars.ensureValidDefaultCalendarPreference(context);
return getDefaultCalendarID(context);
}
/** Set default calendar id */
public static void setDefaultCalendarID(Context context, String value) {
Resources r = context.getResources();
Editor editor = getPrefs(context).edit();
editor.putString(r.getString(R.string.prefs_defaultCalendar), value);
editor.commit();
}
// --- helper methods
/** Clear the given preference */

Loading…
Cancel
Save