Reformat code and optimize imports

Alex Baker 13 years ago
parent dcaf91837b
commit 1e9c3328cf

@ -5,10 +5,10 @@
** See the file "LICENSE" for the full license governing this code.
-->
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.todoroo.astrid.api"
android:versionCode="1"
android:versionName="1.0">
package="com.todoroo.astrid.api"
android:versionCode="1"
android:versionName="1.0">
<uses-sdk android:minSdkVersion="3" />
<uses-sdk android:minSdkVersion="3"/>
</manifest>

@ -16,46 +16,49 @@
<!-- Layout for a visually child-like Preference in a PreferenceActivity. -->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/status"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:minHeight="?android:attr/listPreferredItemHeight"
android:gravity="center_vertical"
android:paddingRight="?android:attr/scrollbarSize">
android:id="@+id/status"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:minHeight="?android:attr/listPreferredItemHeight"
android:gravity="center_vertical"
android:paddingRight="?android:attr/scrollbarSize">
<RelativeLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="20dip"
android:layout_marginRight="6dip"
android:layout_marginTop="6dip"
android:layout_marginBottom="6dip"
android:layout_weight="1">
<TextView android:id="@+android:id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:singleLine="false"
android:textAppearance="?android:attr/textAppearanceLarge"
android:ellipsize="none"
android:fadingEdge="horizontal" />
<TextView android:id="@+android:id/summary"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@android:id/title"
android:layout_alignLeft="@android:id/title"
android:textAppearance="?android:attr/textAppearanceSmall"
android:maxLines="2"
android:textColor="?android:attr/textColorSecondary" />
android:layout_marginLeft="20dip"
android:layout_marginRight="6dip"
android:layout_marginTop="6dip"
android:layout_marginBottom="6dip"
android:layout_weight="1">
<TextView
android:id="@+android:id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:singleLine="false"
android:textAppearance="?android:attr/textAppearanceLarge"
android:ellipsize="none"
android:fadingEdge="horizontal"/>
<TextView
android:id="@+android:id/summary"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@android:id/title"
android:layout_alignLeft="@android:id/title"
android:textAppearance="?android:attr/textAppearanceSmall"
android:maxLines="2"
android:textColor="?android:attr/textColorSecondary"/>
</RelativeLayout>
<!-- Preference should place its actual preference widget here. -->
<LinearLayout android:id="@+android:id/widget_frame"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:gravity="center_vertical"
android:orientation="vertical" />
<LinearLayout
android:id="@+android:id/widget_frame"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:gravity="center_vertical"
android:orientation="vertical"/>
</LinearLayout>

@ -1,101 +1,108 @@
<?xml version='1.0' encoding='utf-8'?>
<resources>
<plurals name="DUt_years">
<item quantity="one">1 any</item>
<item quantity="other">%d anys</item>
</plurals>
<plurals name="DUt_months">
<item quantity="one">1 mes</item>
<item quantity="other">%d mesos</item>
</plurals>
<plurals name="DUt_weeks">
<item quantity="one">1 setmana</item>
<item quantity="other">%d setmanes</item>
</plurals>
<plurals name="DUt_days">
<item quantity="one">1 dia</item>
<item quantity="other">%d dies</item>
</plurals>
<plurals name="DUt_weekdays">
<item quantity="one">1 Weekday</item>
<item quantity="other">%d Weekdays</item>
</plurals>
<plurals name="DUt_hours">
<item quantity="one">1 hora</item>
<item quantity="other">%d Hores</item>
</plurals>
<plurals name="DUt_minutes">
<item quantity="one">1 minut</item>
<item quantity="other">%d Minuts</item>
</plurals>
<plurals name="DUt_seconds">
<item quantity="one">1 segon</item>
<item quantity="other">%d Segons</item>
</plurals>
<plurals name="DUt_hoursShort">
<item quantity="one">1 Hr</item>
<item quantity="other">%d Hrs</item>
</plurals>
<plurals name="DUt_minutesShort">
<item quantity="one">1 Min</item>
<item quantity="other">%d Min</item>
</plurals>
<plurals name="DUt_secondsShort">
<item quantity="one">1 Seg</item>
<item quantity="other">%d Seg</item>
</plurals>
<plurals name="Ntasks">
<item quantity="one">1 tasca</item>
<item quantity="other">%d tasques</item>
</plurals>
<plurals name="Npeople">
<item quantity="one">1 person</item>
<item quantity="other">%d people</item>
</plurals>
<string name="today">Avui</string>
<string name="tomorrow">Demà</string>
<string name="yesterday">Ahir</string>
<string name="DLG_confirm_title">Confirmar?</string>
<string name="DLG_question_title">Pregunta:</string>
<string name="DLG_information_title">Informació</string>
<string name="DLG_error_title">S\'ha produït un error</string>
<string name="DLG_save">Desar</string>
<string name="DLG_yes"></string>
<string name="DLG_no">No</string>
<string name="DLG_close">Tancar</string>
<string name="DLG_done">Fet</string>
<string name="DLG_error">¡Ui, sembla que hi ha hagut un problema! Això es el que ha passat:\n\n%s</string>
<string name="DLG_error_generic">¡Ui, sembla que hi ha hagut un problema!</string>
<string name="DLG_wait">Si us plau, espera...</string>
<string name="SyP_progress">Sincronitzant les seves tasques...</string>
<string name="SyP_progress_toast">S\'està sincronitzant...</string>
<string name="SyP_ioerror">Error de conexió! Verifiqui la conexió d\'internet.</string>
<string name="sync_SPr_group_status">Estat</string>
<string name="sync_status_ongoing">Sincronització en curs...</string>
<string name="sync_status_success">Última sincronització:\n%s</string>
<string name="sync_status_failed">Fallida el: %s</string>
<string name="sync_status_failed_subtitle">Última sincronització correcte: %s</string>
<string name="sync_status_never">Mai sincronitzat!</string>
<string name="sync_SPr_group_options">Opcions</string>
<string name="sync_SPr_interval_title">Sincronitzar en segon pla</string>
<string name="sync_SPr_interval_desc_disabled">Desactivada la sincronització en segon pla</string>
<string name="sync_SPr_interval_desc">Actualment configurat en: %s</string>
<string name="sync_SPr_bgwifi_desc_enabled">La sincronització en segon pla només funciona amb el Wifi activat.</string>
<string name="sync_SPr_bgwifi_desc_disabled">Sempre es produirà la sincronització en segon pla</string>
<string name="sync_SPr_group_actions">Accions</string>
<string name="sync_SPr_forget">Surt</string>
<string name="sync_SPr_forget_description">Esborra tota la informació de sincronització</string>
<string name="sync_forget_confirm">Tancar sessió / esborra la informació de sincronització?</string>
<string-array name="sync_SPr_interval_entries">
<item>desactivat</item>
<item>cada quince minuts</item>
<item>cada trenta minuts</item>
<item>cada hora</item>
<item>cada tres hores</item>
<item>cada sis hores</item>
<item>cada dotze hores</item>
<item>diàriament</item>
<item>cada tres dies</item>
<item>setmanalment</item>
</string-array>
<plurals name="DUt_years">
<item quantity="one">1 any</item>
<item quantity="other">%d anys</item>
</plurals>
<plurals name="DUt_months">
<item quantity="one">1 mes</item>
<item quantity="other">%d mesos</item>
</plurals>
<plurals name="DUt_weeks">
<item quantity="one">1 setmana</item>
<item quantity="other">%d setmanes</item>
</plurals>
<plurals name="DUt_days">
<item quantity="one">1 dia</item>
<item quantity="other">%d dies</item>
</plurals>
<plurals name="DUt_weekdays">
<item quantity="one">1 Weekday</item>
<item quantity="other">%d Weekdays</item>
</plurals>
<plurals name="DUt_hours">
<item quantity="one">1 hora</item>
<item quantity="other">%d Hores</item>
</plurals>
<plurals name="DUt_minutes">
<item quantity="one">1 minut</item>
<item quantity="other">%d Minuts</item>
</plurals>
<plurals name="DUt_seconds">
<item quantity="one">1 segon</item>
<item quantity="other">%d Segons</item>
</plurals>
<plurals name="DUt_hoursShort">
<item quantity="one">1 Hr</item>
<item quantity="other">%d Hrs</item>
</plurals>
<plurals name="DUt_minutesShort">
<item quantity="one">1 Min</item>
<item quantity="other">%d Min</item>
</plurals>
<plurals name="DUt_secondsShort">
<item quantity="one">1 Seg</item>
<item quantity="other">%d Seg</item>
</plurals>
<plurals name="Ntasks">
<item quantity="one">1 tasca</item>
<item quantity="other">%d tasques</item>
</plurals>
<plurals name="Npeople">
<item quantity="one">1 person</item>
<item quantity="other">%d people</item>
</plurals>
<string name="today">Avui</string>
<string name="tomorrow">Demà</string>
<string name="yesterday">Ahir</string>
<string name="DLG_confirm_title">Confirmar?</string>
<string name="DLG_question_title">Pregunta:</string>
<string name="DLG_information_title">Informació</string>
<string name="DLG_error_title">S\'ha produït un error</string>
<string name="DLG_save">Desar</string>
<string name="DLG_yes"></string>
<string name="DLG_no">No</string>
<string name="DLG_close">Tancar</string>
<string name="DLG_done">Fet</string>
<string name="DLG_error">¡Ui, sembla que hi ha hagut un problema! Això es el que ha
passat:\n\n%s
</string>
<string name="DLG_error_generic">¡Ui, sembla que hi ha hagut un problema!</string>
<string name="DLG_wait">Si us plau, espera...</string>
<string name="SyP_progress">Sincronitzant les seves tasques...</string>
<string name="SyP_progress_toast">S\'està sincronitzant...</string>
<string name="SyP_ioerror">Error de conexió! Verifiqui la conexió d\'internet.</string>
<string name="sync_SPr_group_status">Estat</string>
<string name="sync_status_ongoing">Sincronització en curs...</string>
<string name="sync_status_success">Última sincronització:\n%s</string>
<string name="sync_status_failed">Fallida el: %s</string>
<string name="sync_status_failed_subtitle">Última sincronització correcte: %s</string>
<string name="sync_status_never">Mai sincronitzat!</string>
<string name="sync_SPr_group_options">Opcions</string>
<string name="sync_SPr_interval_title">Sincronitzar en segon pla</string>
<string name="sync_SPr_interval_desc_disabled">Desactivada la sincronització en segon pla
</string>
<string name="sync_SPr_interval_desc">Actualment configurat en: %s</string>
<string name="sync_SPr_bgwifi_desc_enabled">La sincronització en segon pla només funciona amb el
Wifi activat.
</string>
<string name="sync_SPr_bgwifi_desc_disabled">Sempre es produirà la sincronització en segon pla
</string>
<string name="sync_SPr_group_actions">Accions</string>
<string name="sync_SPr_forget">Surt</string>
<string name="sync_SPr_forget_description">Esborra tota la informació de sincronització</string>
<string name="sync_forget_confirm">Tancar sessió / esborra la informació de sincronització?
</string>
<string-array name="sync_SPr_interval_entries">
<item>desactivat</item>
<item>cada quince minuts</item>
<item>cada trenta minuts</item>
<item>cada hora</item>
<item>cada tres hores</item>
<item>cada sis hores</item>
<item>cada dotze hores</item>
<item>diàriament</item>
<item>cada tres dies</item>
<item>setmanalment</item>
</string-array>
</resources>

@ -1,116 +1,121 @@
<?xml version='1.0' encoding='utf-8'?>
<resources>
<plurals name="DUt_years">
<item quantity="one">1 rok</item>
<item quantity="other">%d Roky</item>
</plurals>
<plurals name="DUt_months">
<item quantity="one">1 měsíc</item>
<item quantity="other">%d Měsíce</item>
</plurals>
<plurals name="DUt_weeks">
<item quantity="one">1 týden</item>
<item quantity="other">%d Týdny</item>
</plurals>
<plurals name="DUt_days">
<item quantity="one">1 den</item>
<item quantity="other">%d Dnů</item>
</plurals>
<plurals name="DUt_weekdays">
<item quantity="one">1 pracovní den</item>
<item quantity="other">%d pracovních dnů</item>
</plurals>
<plurals name="DUt_hours">
<item quantity="one">1 hodina</item>
<item quantity="other">%d hodin</item>
</plurals>
<plurals name="DUt_minutes">
<item quantity="one">1 minuta</item>
<item quantity="other">%d minut</item>
</plurals>
<plurals name="DUt_seconds">
<item quantity="one">1 vteřina</item>
<item quantity="other">%d vteřin</item>
</plurals>
<plurals name="DUt_hoursShort">
<item quantity="one">1 hod.</item>
<item quantity="other">%d hod.</item>
</plurals>
<plurals name="DUt_minutesShort">
<item quantity="one">1 min.</item>
<item quantity="other">%d min.</item>
</plurals>
<plurals name="DUt_secondsShort">
<item quantity="one">1 s</item>
<item quantity="other">%d s</item>
</plurals>
<plurals name="Ntasks">
<item quantity="one">1 úkol</item>
<item quantity="other">%d úkolů</item>
</plurals>
<plurals name="Npeople">
<item quantity="one">1 osoba</item>
<item quantity="other">%d lidí</item>
</plurals>
<string name="today">Dnes</string>
<string name="tomorrow">Zítra</string>
<string name="yesterday">Včera</string>
<string name="tmrw">Zítra</string>
<string name="yest">Včera</string>
<string name="DLG_confirm_title">Potvrdit?</string>
<string name="DLG_question_title">Otázka:</string>
<string name="DLG_information_title">Informace</string>
<string name="DLG_error_title">Chyba!</string>
<string name="DLG_save">Uložit</string>
<string name="DLG_yes">Ano</string>
<string name="DLG_no">Ne</string>
<string name="DLG_close">Zavřít</string>
<string name="DLG_done">Hotovo</string>
<string name="DLG_error">Jejda, vypadá to, že se vyskytla chyba! Tady je co se stalo:\n\n%s</string>
<string name="DLG_error_generic">Jejda, vypadá to, že se vyskytla chyba!</string>
<string name="DLG_wait">Čekejte prosím...</string>
<string name="SyP_progress">Probíhá synchronizace Vašich úkolů...</string>
<string name="SyP_progress_toast">Sychronizuji...</string>
<string name="SyP_label">Synchronizace</string>
<string name="SyP_summary">Astrid.com, Google Tasks, uložená data, lokální záloha</string>
<string name="SyP_ioerror">Chyba připojení! Zkontrolujte vaše internetové připojení.</string>
<string name="sync_SPr_group_status">Stav</string>
<string name="sync_SPr_status_subtitle">Stav: %s</string>
<string name="sync_status_loggedout">Nepřihlášen</string>
<string name="sync_status_ongoing">Probíhá synchronizace...</string>
<string name="sync_status_success">Poslední synchronizace:\n%s</string>
<string name="sync_status_failed">Selhalo: %s</string>
<string name="sync_status_errors">Sync w/ chyby: %s</string>
<string name="sync_status_failed_subtitle">Poslední úspěšná synchronizace: %s</string>
<string name="sync_status_never">Nikdo nesynchronizováno!</string>
<string name="sync_SPr_group_options">Nastavení</string>
<string name="sync_SPr_interval_title">Synchronizace na pozadí</string>
<string name="sync_SPr_interval_desc_disabled">Synchronizace na pozadí je zakázána</string>
<string name="sync_SPr_interval_desc">Současně nastaveno na: %s</string>
<string name="sync_SPr_bgwifi_title">Nastavení jen pro Wifi</string>
<string name="sync_SPr_bgwifi_desc_enabled">Synchronizovat na pozadí se bude pouze při zapnuté Wifi</string>
<string name="sync_SPr_bgwifi_desc_disabled">Synchronizovat na pozadí se bude vždy</string>
<string name="sync_SPr_group_actions">Akce</string>
<string name="sync_SPr_sync">Synchronizovat nyní</string>
<string name="sync_SPr_sync_log_in">Přihlásit se &amp; Synchronizovat!</string>
<string name="sync_SPr_logged_in_prefix">Přihlášen jako:</string>
<string name="sync_SPr_last_error">Stavové hlášení</string>
<string name="sync_SPr_last_error_subtitle">Klepnutím odešlete zprávu týmu Astrid</string>
<string name="sync_SPr_send_report">Odeslat zprávu</string>
<string name="sync_SPr_forget">Odhlásit se</string>
<string name="sync_SPr_forget_description">Smazat všechny synchronizační data</string>
<string name="sync_forget_confirm">Odhlásit se / vymazat synchronizační data?</string>
<string name="sync_error_offline">Během posledního pokusu o synchronizaci se službou %s nastal problém s připojením k síti. Zkuste to prosím později.</string>
<string-array name="sync_SPr_interval_entries">
<item>zakázat</item>
<item>každých patnáct minut</item>
<item>každých třicet minut</item>
<item>každou hodinu</item>
<item>každé tři hodiny</item>
<item>každých šest hodin</item>
<item>každých dvanáct hodin</item>
<item>každý den</item>
<item>každé tři dny</item>
<item>každý týden</item>
</string-array>
<plurals name="DUt_years">
<item quantity="one">1 rok</item>
<item quantity="other">%d Roky</item>
</plurals>
<plurals name="DUt_months">
<item quantity="one">1 měsíc</item>
<item quantity="other">%d Měsíce</item>
</plurals>
<plurals name="DUt_weeks">
<item quantity="one">1 týden</item>
<item quantity="other">%d Týdny</item>
</plurals>
<plurals name="DUt_days">
<item quantity="one">1 den</item>
<item quantity="other">%d Dnů</item>
</plurals>
<plurals name="DUt_weekdays">
<item quantity="one">1 pracovní den</item>
<item quantity="other">%d pracovních dnů</item>
</plurals>
<plurals name="DUt_hours">
<item quantity="one">1 hodina</item>
<item quantity="other">%d hodin</item>
</plurals>
<plurals name="DUt_minutes">
<item quantity="one">1 minuta</item>
<item quantity="other">%d minut</item>
</plurals>
<plurals name="DUt_seconds">
<item quantity="one">1 vteřina</item>
<item quantity="other">%d vteřin</item>
</plurals>
<plurals name="DUt_hoursShort">
<item quantity="one">1 hod.</item>
<item quantity="other">%d hod.</item>
</plurals>
<plurals name="DUt_minutesShort">
<item quantity="one">1 min.</item>
<item quantity="other">%d min.</item>
</plurals>
<plurals name="DUt_secondsShort">
<item quantity="one">1 s</item>
<item quantity="other">%d s</item>
</plurals>
<plurals name="Ntasks">
<item quantity="one">1 úkol</item>
<item quantity="other">%d úkolů</item>
</plurals>
<plurals name="Npeople">
<item quantity="one">1 osoba</item>
<item quantity="other">%d lidí</item>
</plurals>
<string name="today">Dnes</string>
<string name="tomorrow">Zítra</string>
<string name="yesterday">Včera</string>
<string name="tmrw">Zítra</string>
<string name="yest">Včera</string>
<string name="DLG_confirm_title">Potvrdit?</string>
<string name="DLG_question_title">Otázka:</string>
<string name="DLG_information_title">Informace</string>
<string name="DLG_error_title">Chyba!</string>
<string name="DLG_save">Uložit</string>
<string name="DLG_yes">Ano</string>
<string name="DLG_no">Ne</string>
<string name="DLG_close">Zavřít</string>
<string name="DLG_done">Hotovo</string>
<string name="DLG_error">Jejda, vypadá to, že se vyskytla chyba! Tady je co se stalo:\n\n%s
</string>
<string name="DLG_error_generic">Jejda, vypadá to, že se vyskytla chyba!</string>
<string name="DLG_wait">Čekejte prosím...</string>
<string name="SyP_progress">Probíhá synchronizace Vašich úkolů...</string>
<string name="SyP_progress_toast">Sychronizuji...</string>
<string name="SyP_label">Synchronizace</string>
<string name="SyP_summary">Astrid.com, Google Tasks, uložená data, lokální záloha</string>
<string name="SyP_ioerror">Chyba připojení! Zkontrolujte vaše internetové připojení.</string>
<string name="sync_SPr_group_status">Stav</string>
<string name="sync_SPr_status_subtitle">Stav: %s</string>
<string name="sync_status_loggedout">Nepřihlášen</string>
<string name="sync_status_ongoing">Probíhá synchronizace...</string>
<string name="sync_status_success">Poslední synchronizace:\n%s</string>
<string name="sync_status_failed">Selhalo: %s</string>
<string name="sync_status_errors">Sync w/ chyby: %s</string>
<string name="sync_status_failed_subtitle">Poslední úspěšná synchronizace: %s</string>
<string name="sync_status_never">Nikdo nesynchronizováno!</string>
<string name="sync_SPr_group_options">Nastavení</string>
<string name="sync_SPr_interval_title">Synchronizace na pozadí</string>
<string name="sync_SPr_interval_desc_disabled">Synchronizace na pozadí je zakázána</string>
<string name="sync_SPr_interval_desc">Současně nastaveno na: %s</string>
<string name="sync_SPr_bgwifi_title">Nastavení jen pro Wifi</string>
<string name="sync_SPr_bgwifi_desc_enabled">Synchronizovat na pozadí se bude pouze při zapnuté
Wifi
</string>
<string name="sync_SPr_bgwifi_desc_disabled">Synchronizovat na pozadí se bude vždy</string>
<string name="sync_SPr_group_actions">Akce</string>
<string name="sync_SPr_sync">Synchronizovat nyní</string>
<string name="sync_SPr_sync_log_in">Přihlásit se &amp; Synchronizovat!</string>
<string name="sync_SPr_logged_in_prefix">Přihlášen jako:</string>
<string name="sync_SPr_last_error">Stavové hlášení</string>
<string name="sync_SPr_last_error_subtitle">Klepnutím odešlete zprávu týmu Astrid</string>
<string name="sync_SPr_send_report">Odeslat zprávu</string>
<string name="sync_SPr_forget">Odhlásit se</string>
<string name="sync_SPr_forget_description">Smazat všechny synchronizační data</string>
<string name="sync_forget_confirm">Odhlásit se / vymazat synchronizační data?</string>
<string name="sync_error_offline">Během posledního pokusu o synchronizaci se službou %s nastal
problém s připojením k síti. Zkuste to prosím později.
</string>
<string-array name="sync_SPr_interval_entries">
<item>zakázat</item>
<item>každých patnáct minut</item>
<item>každých třicet minut</item>
<item>každou hodinu</item>
<item>každé tři hodiny</item>
<item>každých šest hodin</item>
<item>každých dvanáct hodin</item>
<item>každý den</item>
<item>každé tři dny</item>
<item>každý týden</item>
</string-array>
</resources>

@ -1,89 +1,91 @@
<?xml version='1.0' encoding='utf-8'?>
<resources>
<plurals name="DUt_years">
<item quantity="one">1 år</item>
<item quantity="other">%d År</item>
</plurals>
<plurals name="DUt_months">
<item quantity="one">1 måned</item>
<item quantity="other">%d måneder</item>
</plurals>
<plurals name="DUt_weeks">
<item quantity="one">1 uge</item>
<item quantity="other">%d uger</item>
</plurals>
<plurals name="DUt_days">
<item quantity="one">1 dag</item>
<item quantity="other">%d dage</item>
</plurals>
<plurals name="DUt_weekdays">
<item quantity="one">1 Weekday</item>
<item quantity="other">%d Weekdays</item>
</plurals>
<plurals name="DUt_hours">
<item quantity="one">1 time</item>
<item quantity="other">%d timer</item>
</plurals>
<plurals name="DUt_minutes">
<item quantity="one">1 minut</item>
<item quantity="other">%d minutter</item>
</plurals>
<plurals name="DUt_seconds">
<item quantity="one">1 sekund</item>
<item quantity="other">%d sekunder</item>
</plurals>
<plurals name="DUt_hoursShort">
<item quantity="one">1 time</item>
<item quantity="other">%d timer</item>
</plurals>
<plurals name="DUt_minutesShort">
<item quantity="one">1 min.</item>
<item quantity="other">%d min.</item>
</plurals>
<plurals name="DUt_secondsShort">
<item quantity="one">1 sek.</item>
<item quantity="other">%d sek.</item>
</plurals>
<plurals name="Ntasks">
<item quantity="one">1 opgave</item>
<item quantity="other">%d opgaver</item>
</plurals>
<plurals name="Npeople">
<item quantity="one">1 person</item>
<item quantity="other">%d people</item>
</plurals>
<string name="today">I dag</string>
<string name="tomorrow">I morgen</string>
<string name="yesterday">I går</string>
<string name="DLG_confirm_title">Bekræft?</string>
<string name="DLG_question_title">Spørsmål:</string>
<string name="DLG_save">Gem</string>
<string name="DLG_yes">Ja</string>
<string name="DLG_no">Nej</string>
<string name="DLG_close">Luk</string>
<string name="DLG_done">Færdig</string>
<string name="DLG_wait">Vent venligst...</string>
<string name="SyP_progress_toast">Synkroniserer...</string>
<string name="SyP_label">Synkronisering</string>
<string name="SyP_ioerror">Forbindelsesfejl! Tjek din internetforbindelse.</string>
<string name="sync_SPr_group_options">Indstillinger</string>
<string name="sync_SPr_interval_title">Baggrunds Synk</string>
<string name="sync_SPr_interval_desc_disabled">Baggrunds synkronisering er slået fra</string>
<string name="sync_SPr_bgwifi_desc_enabled">Baggrunds synkronisering sker kun ved Wifi</string>
<string name="sync_SPr_bgwifi_desc_disabled">Baggrunds synkronisering sker uanset forbindelsestype</string>
<string name="sync_SPr_group_actions">Handlinger</string>
<string name="sync_SPr_forget">Log af</string>
<string name="sync_SPr_forget_description">Sletter al synkroniserings data</string>
<string-array name="sync_SPr_interval_entries">
<item>disable</item>
<item>every fifteen minutes</item>
<item>every thirty minutes</item>
<item>hver time</item>
<item>hver 3. time</item>
<item>hver 6. time</item>
<item>hver 12. time</item>
<item>hver dag</item>
<item>hver 3. dag</item>
<item>hver uge</item>
</string-array>
<plurals name="DUt_years">
<item quantity="one">1 år</item>
<item quantity="other">%d År</item>
</plurals>
<plurals name="DUt_months">
<item quantity="one">1 måned</item>
<item quantity="other">%d måneder</item>
</plurals>
<plurals name="DUt_weeks">
<item quantity="one">1 uge</item>
<item quantity="other">%d uger</item>
</plurals>
<plurals name="DUt_days">
<item quantity="one">1 dag</item>
<item quantity="other">%d dage</item>
</plurals>
<plurals name="DUt_weekdays">
<item quantity="one">1 Weekday</item>
<item quantity="other">%d Weekdays</item>
</plurals>
<plurals name="DUt_hours">
<item quantity="one">1 time</item>
<item quantity="other">%d timer</item>
</plurals>
<plurals name="DUt_minutes">
<item quantity="one">1 minut</item>
<item quantity="other">%d minutter</item>
</plurals>
<plurals name="DUt_seconds">
<item quantity="one">1 sekund</item>
<item quantity="other">%d sekunder</item>
</plurals>
<plurals name="DUt_hoursShort">
<item quantity="one">1 time</item>
<item quantity="other">%d timer</item>
</plurals>
<plurals name="DUt_minutesShort">
<item quantity="one">1 min.</item>
<item quantity="other">%d min.</item>
</plurals>
<plurals name="DUt_secondsShort">
<item quantity="one">1 sek.</item>
<item quantity="other">%d sek.</item>
</plurals>
<plurals name="Ntasks">
<item quantity="one">1 opgave</item>
<item quantity="other">%d opgaver</item>
</plurals>
<plurals name="Npeople">
<item quantity="one">1 person</item>
<item quantity="other">%d people</item>
</plurals>
<string name="today">I dag</string>
<string name="tomorrow">I morgen</string>
<string name="yesterday">I går</string>
<string name="DLG_confirm_title">Bekræft?</string>
<string name="DLG_question_title">Spørsmål:</string>
<string name="DLG_save">Gem</string>
<string name="DLG_yes">Ja</string>
<string name="DLG_no">Nej</string>
<string name="DLG_close">Luk</string>
<string name="DLG_done">Færdig</string>
<string name="DLG_wait">Vent venligst...</string>
<string name="SyP_progress_toast">Synkroniserer...</string>
<string name="SyP_label">Synkronisering</string>
<string name="SyP_ioerror">Forbindelsesfejl! Tjek din internetforbindelse.</string>
<string name="sync_SPr_group_options">Indstillinger</string>
<string name="sync_SPr_interval_title">Baggrunds Synk</string>
<string name="sync_SPr_interval_desc_disabled">Baggrunds synkronisering er slået fra</string>
<string name="sync_SPr_bgwifi_desc_enabled">Baggrunds synkronisering sker kun ved Wifi</string>
<string name="sync_SPr_bgwifi_desc_disabled">Baggrunds synkronisering sker uanset
forbindelsestype
</string>
<string name="sync_SPr_group_actions">Handlinger</string>
<string name="sync_SPr_forget">Log af</string>
<string name="sync_SPr_forget_description">Sletter al synkroniserings data</string>
<string-array name="sync_SPr_interval_entries">
<item>disable</item>
<item>every fifteen minutes</item>
<item>every thirty minutes</item>
<item>hver time</item>
<item>hver 3. time</item>
<item>hver 6. time</item>
<item>hver 12. time</item>
<item>hver dag</item>
<item>hver 3. dag</item>
<item>hver uge</item>
</string-array>
</resources>

@ -4,243 +4,252 @@
**
** See the file "LICENSE" for the full license governing this code.
-->
<resources xmlns:android="http://schemas.android.com/apk/res/android">
<!-- ==================================================== Generic Units == -->
<plurals name="DUt_years">
<!-- plurals: years -->
<item quantity="one">1 Jahr</item>
<!-- plurals: years -->
<item quantity="other">%d Jahre</item>
</plurals>
<plurals name="DUt_months">
<!-- plurals: months -->
<item quantity="one">1 Monat</item>
<!-- plurals: months -->
<item quantity="other">%d Monate</item>
</plurals>
<plurals name="DUt_weeks">
<!-- plurals: days -->
<item quantity="one">Eine Woche</item>
<!-- plurals: days -->
<item quantity="other">%d Wochen</item>
</plurals>
<plurals name="DUt_days">
<!-- plurals: days -->
<item quantity="one">Ein Tag</item>
<!-- plurals: days -->
<item quantity="other">%d Tage</item>
</plurals>
<plurals name="DUt_weekdays">
<!-- plurals: days -->
<item quantity="one">Ein Wochentag</item>
<!-- plurals: days -->
<item quantity="other">%d Wochentage</item>
</plurals>
<plurals name="DUt_hours">
<!-- plurals: hours -->
<item quantity="one">Eine Stunde</item>
<!-- plurals: hours -->
<item quantity="other">%d Stunden</item>
</plurals>
<plurals name="DUt_minutes">
<!-- plurals: minutes -->
<item quantity="one">Eine Minute</item>
<!-- plurals: minutes -->
<item quantity="other">%d Minuten</item>
</plurals>
<plurals name="DUt_seconds">
<!-- plurals: seconds -->
<item quantity="one">Eine Sekunde</item>
<!-- plurals: seconds -->
<item quantity="other">%d Sekunden</item>
</plurals>
<plurals name="DUt_hoursShort">
<!-- plurals: hours (abbreviated) -->
<item quantity="one">1 Std</item>
<!-- plurals: hours (abbreviated) -->
<item quantity="other">%d Std</item>
</plurals>
<plurals name="DUt_minutesShort">
<!-- plurals: minutes (abbreviated) -->
<item quantity="one">1 Min</item>
<!-- plurals: minutes (abbreviated) -->
<item quantity="other">%d min</item>
</plurals>
<plurals name="DUt_secondsShort">
<!-- plurals: seconds (abbreviated) -->
<item quantity="one">1 Sek</item>
<!-- plurals: seconds (abbreviated) -->
<item quantity="other">%d Sek</item>
</plurals>
<plurals name="Ntasks">
<!-- plurals: tasks -->
<item quantity="one">1 Aufgabe</item>
<!-- plurals: tasks -->
<item quantity="other">%d Aufgaben</item>
</plurals>
<plurals name="Npeople">
<!-- plurals: people -->
<item quantity="one">Eine Person</item>
<!-- plurals: people -->
<item quantity="other">%d Personen</item>
</plurals>
<!-- slide 10a, 12c: today -->
<string name="today">Heute</string>
<!-- tomorrow -->
<string name="tomorrow">Morgen</string>
<!-- yesterday -->
<string name="yesterday">Gestern</string>
<!-- slide 12c: tomorrow, abbreviated -->
<string name="tmrw">Morg.</string>
<!-- slide 12c: yesterday, abbreviated -->
<string name="yest">Gest.</string>
<!-- ================================================== Generic Dialogs == -->
<!-- confirmation dialog title -->
<string name="DLG_confirm_title">Bestätigen?</string>
<!-- question dialog title -->
<string name="DLG_question_title">Frage:</string>
<!-- information dialog title -->
<string name="DLG_information_title">Informationen</string>
<!-- error dialog title -->
<string name="DLG_error_title">Fehler!</string>
<!-- general dialog save-->
<string name="DLG_save">Speichern</string>
<!-- general dialog yes-->
<string name="DLG_yes">Ja</string>
<!-- general dialog no-->
<string name="DLG_no">Nein</string>
<!-- general dialog close-->
<string name="DLG_close">Schließen</string>
<!-- general dialog done -->
<string name="DLG_done">Erledigt</string>
<!-- error dialog (%s => error message)-->
<string name="DLG_error">Ups, sieht aus, als ob ein Fehler aufgetreten ist! Folgendes ist passiert:\n\n%s</string>
<!-- error dialog (no message indicated)-->
<string name="DLG_error_generic">Ups, sieht aus, als ob ein Fehler aufgetreten ist!</string>
<!-- Progress dialog shown when doing something slow -->
<string name="DLG_wait">Bitte warten...</string>
<!-- ====================================================== SyncProvider == -->
<!-- Sync Notification: message when sync service active -->
<string name="SyP_progress">Synchronisiere deine Aufgaben</string>
<!-- Sync Notification: toast when sync activated from activity -->
<string name="SyP_progress_toast">Synchronisiere…</string>
<!-- Sync Label: used in menu to denote synchronization -->
<string name="SyP_label">Synchronisation</string>
<!-- Sync Label: used in menu to denote synchronization -->
<string name="Sync_now_label">Jetzt synchronisieren</string>
<!-- Sync label subtitle -->
<string name="SyP_summary">Astrid.com, Google Tasks, gespeicherte Daten, lokale Backups</string>
<!-- Error msg when io exception -->
<string name="SyP_ioerror">Verbindungsfehler! Überprüfen Sie Ihre Internetverbindung.</string>
<!-- ================================================== SyncPreferences == -->
<!-- Status Group Label -->
<string name="sync_SPr_group_status">Status</string>
<!-- Sync status subtitle, %s-> status message -->
<string name="sync_SPr_status_subtitle">Status: %s</string>
<!-- Sync Status: log in -->
<string name="sync_status_loggedout">Nicht angemeldet</string>
<!-- Status: ongoing -->
<string name="sync_status_ongoing">Synchronisierung läuft...</string>
<!-- Sync Status: success status (%s -> last sync date). Keep it short!-->
<string name="sync_status_success">Letzte Synchronisierung:\n%s</string>
<!-- Sync Status: failure status (%s -> last attempted sync date) -->
<string name="sync_status_failed">Fehlgeschlagen am: %s</string>
<!-- Sync Status: error status (%s -> last sync date) -->
<string name="sync_status_errors">Synchronisation m. Fehler: %s</string>
<!-- Sync Status: error subtitle (%s -> last successful sync date) -->
<string name="sync_status_failed_subtitle">Letzte erfolgreiche Synchronisierung: %s</string>
<!-- Sync Status: never sync\'d -->
<string name="sync_status_never">Noch nie synchronisiert!</string>
<!-- Options Group Label -->
<string name="sync_SPr_group_options">Einstellungen</string>
<!-- Preference: Synchronization Interval Title -->
<string name="sync_SPr_interval_title">Hintergrund-Synchronisierung</string>
<!-- Preference: Synchronization Interval Description (when disabled) -->
<string name="sync_SPr_interval_desc_disabled">Hintergrund-Synchronisierung ist deaktiviert</string>
<!-- Preference: Synchronization Interval Description (%s => setting) -->
<string name="sync_SPr_interval_desc">Gesetzt auf: %s</string>
<!-- Preference: Background Wifi Title -->
<string name="sync_SPr_bgwifi_title">WLAN-Einstellungen</string>
<!-- Preference: Background Wifi Description (enabled) -->
<string name="sync_SPr_bgwifi_desc_enabled">Hintergrund-Synchronisierung nur bei WLAN-Verbindung</string>
<!-- Preference: Background Wifi Description (disabled) -->
<string name="sync_SPr_bgwifi_desc_disabled">Hintergrund-Synchronisierung findet immer statt</string>
<!-- Actions Group Label -->
<string name="sync_SPr_group_actions">Aktionen</string>
<!-- Synchronize Now Button -->
<string name="sync_SPr_sync">Jetzt synchronisieren</string>
<!-- Synchronize Now Button if not logged in-->
<string name="sync_SPr_sync_log_in">Einloggen &amp; synchronisieren!</string>
<!-- Sync: Prefix string before logged in identifier -->
<string name="sync_SPr_logged_in_prefix">Angemeldet als:</string>
<!-- Sync: Last error -->
<string name="sync_SPr_last_error">Statusbericht</string>
<!-- Sync: last error click for more -->
<string name="sync_SPr_last_error_subtitle">Klicke um einen Bericht ans Astrid-Team zu senden</string>
<!-- Sync: send error report button -->
<string name="sync_SPr_send_report">Bericht senden</string>
<!-- Sync: Clear Data Title -->
<string name="sync_SPr_forget">Abmelden</string>
<!-- Sync: Clear Data Description -->
<string name="sync_SPr_forget_description">Alle Synchronisationsdaten löschen</string>
<!-- confirmation dialog for sync log out -->
<string name="sync_forget_confirm">Ausloggen/synchronisierte Daten löschen?</string>
<!-- Sync error: network connectivity problems. %s-> name of sync service-->
<string name="sync_error_offline">Es gab ein Problem mit der Netzwerkverbindung während der letzten Synchronisation mit %s. Versuche es bitte später noch einmal.</string>
<string-array name="sync_SPr_interval_entries">
<!-- sync_SPr_interval_entries: Synchronization Intervals -->
<item>deaktivieren</item>
<item>alle 15 Minuten</item>
<item>alle 30 Minuten</item>
<item>stündlich</item>
<item>alle 3 Stunden</item>
<item>alle 6 Stunden</item>
<item>alle 12 Stunden</item>
<item>täglich</item>
<item>jeden dritten Tag</item>
<item>wöchentlich</item>
</string-array>
<resources>
<!-- ==================================================== Generic Units == -->
<plurals name="DUt_years">
<!-- plurals: years -->
<item quantity="one">1 Jahr</item>
<!-- plurals: years -->
<item quantity="other">%d Jahre</item>
</plurals>
<plurals name="DUt_months">
<!-- plurals: months -->
<item quantity="one">1 Monat</item>
<!-- plurals: months -->
<item quantity="other">%d Monate</item>
</plurals>
<plurals name="DUt_weeks">
<!-- plurals: days -->
<item quantity="one">Eine Woche</item>
<!-- plurals: days -->
<item quantity="other">%d Wochen</item>
</plurals>
<plurals name="DUt_days">
<!-- plurals: days -->
<item quantity="one">Ein Tag</item>
<!-- plurals: days -->
<item quantity="other">%d Tage</item>
</plurals>
<plurals name="DUt_weekdays">
<!-- plurals: days -->
<item quantity="one">Ein Wochentag</item>
<!-- plurals: days -->
<item quantity="other">%d Wochentage</item>
</plurals>
<plurals name="DUt_hours">
<!-- plurals: hours -->
<item quantity="one">Eine Stunde</item>
<!-- plurals: hours -->
<item quantity="other">%d Stunden</item>
</plurals>
<plurals name="DUt_minutes">
<!-- plurals: minutes -->
<item quantity="one">Eine Minute</item>
<!-- plurals: minutes -->
<item quantity="other">%d Minuten</item>
</plurals>
<plurals name="DUt_seconds">
<!-- plurals: seconds -->
<item quantity="one">Eine Sekunde</item>
<!-- plurals: seconds -->
<item quantity="other">%d Sekunden</item>
</plurals>
<plurals name="DUt_hoursShort">
<!-- plurals: hours (abbreviated) -->
<item quantity="one">1 Std</item>
<!-- plurals: hours (abbreviated) -->
<item quantity="other">%d Std</item>
</plurals>
<plurals name="DUt_minutesShort">
<!-- plurals: minutes (abbreviated) -->
<item quantity="one">1 Min</item>
<!-- plurals: minutes (abbreviated) -->
<item quantity="other">%d min</item>
</plurals>
<plurals name="DUt_secondsShort">
<!-- plurals: seconds (abbreviated) -->
<item quantity="one">1 Sek</item>
<!-- plurals: seconds (abbreviated) -->
<item quantity="other">%d Sek</item>
</plurals>
<plurals name="Ntasks">
<!-- plurals: tasks -->
<item quantity="one">1 Aufgabe</item>
<!-- plurals: tasks -->
<item quantity="other">%d Aufgaben</item>
</plurals>
<plurals name="Npeople">
<!-- plurals: people -->
<item quantity="one">Eine Person</item>
<!-- plurals: people -->
<item quantity="other">%d Personen</item>
</plurals>
<!-- slide 10a, 12c: today -->
<string name="today">Heute</string>
<!-- tomorrow -->
<string name="tomorrow">Morgen</string>
<!-- yesterday -->
<string name="yesterday">Gestern</string>
<!-- slide 12c: tomorrow, abbreviated -->
<string name="tmrw">Morg.</string>
<!-- slide 12c: yesterday, abbreviated -->
<string name="yest">Gest.</string>
<!-- ================================================== Generic Dialogs == -->
<!-- confirmation dialog title -->
<string name="DLG_confirm_title">Bestätigen?</string>
<!-- question dialog title -->
<string name="DLG_question_title">Frage:</string>
<!-- information dialog title -->
<string name="DLG_information_title">Informationen</string>
<!-- error dialog title -->
<string name="DLG_error_title">Fehler!</string>
<!-- general dialog save-->
<string name="DLG_save">Speichern</string>
<!-- general dialog yes-->
<string name="DLG_yes">Ja</string>
<!-- general dialog no-->
<string name="DLG_no">Nein</string>
<!-- general dialog close-->
<string name="DLG_close">Schließen</string>
<!-- general dialog done -->
<string name="DLG_done">Erledigt</string>
<!-- error dialog (%s => error message)-->
<string name="DLG_error">Ups, sieht aus, als ob ein Fehler aufgetreten ist! Folgendes ist
passiert:\n\n%s
</string>
<!-- error dialog (no message indicated)-->
<string name="DLG_error_generic">Ups, sieht aus, als ob ein Fehler aufgetreten ist!</string>
<!-- Progress dialog shown when doing something slow -->
<string name="DLG_wait">Bitte warten...</string>
<!-- ====================================================== SyncProvider == -->
<!-- Sync Notification: message when sync service active -->
<string name="SyP_progress">Synchronisiere deine Aufgaben</string>
<!-- Sync Notification: toast when sync activated from activity -->
<string name="SyP_progress_toast">Synchronisiere…</string>
<!-- Sync Label: used in menu to denote synchronization -->
<string name="SyP_label">Synchronisation</string>
<!-- Sync Label: used in menu to denote synchronization -->
<string name="Sync_now_label">Jetzt synchronisieren</string>
<!-- Sync label subtitle -->
<string name="SyP_summary">Astrid.com, Google Tasks, gespeicherte Daten, lokale Backups</string>
<!-- Error msg when io exception -->
<string name="SyP_ioerror">Verbindungsfehler! Überprüfen Sie Ihre Internetverbindung.</string>
<!-- ================================================== SyncPreferences == -->
<!-- Status Group Label -->
<string name="sync_SPr_group_status">Status</string>
<!-- Sync status subtitle, %s-> status message -->
<string name="sync_SPr_status_subtitle">Status: %s</string>
<!-- Sync Status: log in -->
<string name="sync_status_loggedout">Nicht angemeldet</string>
<!-- Status: ongoing -->
<string name="sync_status_ongoing">Synchronisierung läuft...</string>
<!-- Sync Status: success status (%s -> last sync date). Keep it short!-->
<string name="sync_status_success">Letzte Synchronisierung:\n%s</string>
<!-- Sync Status: failure status (%s -> last attempted sync date) -->
<string name="sync_status_failed">Fehlgeschlagen am: %s</string>
<!-- Sync Status: error status (%s -> last sync date) -->
<string name="sync_status_errors">Synchronisation m. Fehler: %s</string>
<!-- Sync Status: error subtitle (%s -> last successful sync date) -->
<string name="sync_status_failed_subtitle">Letzte erfolgreiche Synchronisierung: %s</string>
<!-- Sync Status: never sync\'d -->
<string name="sync_status_never">Noch nie synchronisiert!</string>
<!-- Options Group Label -->
<string name="sync_SPr_group_options">Einstellungen</string>
<!-- Preference: Synchronization Interval Title -->
<string name="sync_SPr_interval_title">Hintergrund-Synchronisierung</string>
<!-- Preference: Synchronization Interval Description (when disabled) -->
<string name="sync_SPr_interval_desc_disabled">Hintergrund-Synchronisierung ist deaktiviert
</string>
<!-- Preference: Synchronization Interval Description (%s => setting) -->
<string name="sync_SPr_interval_desc">Gesetzt auf: %s</string>
<!-- Preference: Background Wifi Title -->
<string name="sync_SPr_bgwifi_title">WLAN-Einstellungen</string>
<!-- Preference: Background Wifi Description (enabled) -->
<string name="sync_SPr_bgwifi_desc_enabled">Hintergrund-Synchronisierung nur bei
WLAN-Verbindung
</string>
<!-- Preference: Background Wifi Description (disabled) -->
<string name="sync_SPr_bgwifi_desc_disabled">Hintergrund-Synchronisierung findet immer statt
</string>
<!-- Actions Group Label -->
<string name="sync_SPr_group_actions">Aktionen</string>
<!-- Synchronize Now Button -->
<string name="sync_SPr_sync">Jetzt synchronisieren</string>
<!-- Synchronize Now Button if not logged in-->
<string name="sync_SPr_sync_log_in">Einloggen &amp; synchronisieren!</string>
<!-- Sync: Prefix string before logged in identifier -->
<string name="sync_SPr_logged_in_prefix">Angemeldet als:</string>
<!-- Sync: Last error -->
<string name="sync_SPr_last_error">Statusbericht</string>
<!-- Sync: last error click for more -->
<string name="sync_SPr_last_error_subtitle">Klicke um einen Bericht ans Astrid-Team zu senden
</string>
<!-- Sync: send error report button -->
<string name="sync_SPr_send_report">Bericht senden</string>
<!-- Sync: Clear Data Title -->
<string name="sync_SPr_forget">Abmelden</string>
<!-- Sync: Clear Data Description -->
<string name="sync_SPr_forget_description">Alle Synchronisationsdaten löschen</string>
<!-- confirmation dialog for sync log out -->
<string name="sync_forget_confirm">Ausloggen/synchronisierte Daten löschen?</string>
<!-- Sync error: network connectivity problems. %s-> name of sync service-->
<string name="sync_error_offline">Es gab ein Problem mit der Netzwerkverbindung während der
letzten Synchronisation mit %s. Versuche es bitte später noch einmal.
</string>
<string-array name="sync_SPr_interval_entries">
<!-- sync_SPr_interval_entries: Synchronization Intervals -->
<item>deaktivieren</item>
<item>alle 15 Minuten</item>
<item>alle 30 Minuten</item>
<item>stündlich</item>
<item>alle 3 Stunden</item>
<item>alle 6 Stunden</item>
<item>alle 12 Stunden</item>
<item>täglich</item>
<item>jeden dritten Tag</item>
<item>wöchentlich</item>
</string-array>
</resources>

@ -4,243 +4,253 @@
**
** See the file "LICENSE" for the full license governing this code.
-->
<resources xmlns:android="http://schemas.android.com/apk/res/android">
<!-- ==================================================== Generic Units == -->
<plurals name="DUt_years">
<!-- plurals: years -->
<item quantity="one">1 año</item>
<!-- plurals: years -->
<item quantity="other">%d años</item>
</plurals>
<plurals name="DUt_months">
<!-- plurals: months -->
<item quantity="one">1 mes</item>
<!-- plurals: months -->
<item quantity="other">%d meses</item>
</plurals>
<plurals name="DUt_weeks">
<!-- plurals: days -->
<item quantity="one">1 semana</item>
<!-- plurals: days -->
<item quantity="other">%d semanas</item>
</plurals>
<plurals name="DUt_days">
<!-- plurals: days -->
<item quantity="one">Un día</item>
<!-- plurals: days -->
<item quantity="other">%d días</item>
</plurals>
<plurals name="DUt_weekdays">
<!-- plurals: days -->
<item quantity="one">1 día laborable</item>
<!-- plurals: days -->
<item quantity="other">%d días laborables</item>
</plurals>
<plurals name="DUt_hours">
<!-- plurals: hours -->
<item quantity="one">1 hora</item>
<!-- plurals: hours -->
<item quantity="other">%d horas</item>
</plurals>
<plurals name="DUt_minutes">
<!-- plurals: minutes -->
<item quantity="one">1 minuto</item>
<!-- plurals: minutes -->
<item quantity="other">%d minutos</item>
</plurals>
<plurals name="DUt_seconds">
<!-- plurals: seconds -->
<item quantity="one">1 segundo</item>
<!-- plurals: seconds -->
<item quantity="other">%d segundos</item>
</plurals>
<plurals name="DUt_hoursShort">
<!-- plurals: hours (abbreviated) -->
<item quantity="one">1 hr</item>
<!-- plurals: hours (abbreviated) -->
<item quantity="other">%d hrs</item>
</plurals>
<plurals name="DUt_minutesShort">
<!-- plurals: minutes (abbreviated) -->
<item quantity="one">1 min</item>
<!-- plurals: minutes (abbreviated) -->
<item quantity="other">%d min</item>
</plurals>
<plurals name="DUt_secondsShort">
<!-- plurals: seconds (abbreviated) -->
<item quantity="one">1 seg</item>
<!-- plurals: seconds (abbreviated) -->
<item quantity="other">%d seg</item>
</plurals>
<plurals name="Ntasks">
<!-- plurals: tasks -->
<item quantity="one">1 tarea</item>
<!-- plurals: tasks -->
<item quantity="other">%d tareas</item>
</plurals>
<plurals name="Npeople">
<!-- plurals: people -->
<item quantity="one">1 persona</item>
<!-- plurals: people -->
<item quantity="other">%d personas</item>
</plurals>
<!-- slide 10a, 12c: today -->
<string name="today">Hoy</string>
<!-- tomorrow -->
<string name="tomorrow">Mañana</string>
<!-- yesterday -->
<string name="yesterday">Ayer</string>
<!-- slide 12c: tomorrow, abbreviated -->
<string name="tmrw">Mañana</string>
<!-- slide 12c: yesterday, abbreviated -->
<string name="yest">Ayer</string>
<!-- ================================================== Generic Dialogs == -->
<!-- confirmation dialog title -->
<string name="DLG_confirm_title">¿Confirmar?</string>
<!-- question dialog title -->
<string name="DLG_question_title">Pregunta:</string>
<!-- information dialog title -->
<string name="DLG_information_title">Información</string>
<!-- error dialog title -->
<string name="DLG_error_title">¡Error!</string>
<!-- general dialog save-->
<string name="DLG_save">Guardar</string>
<!-- general dialog yes-->
<string name="DLG_yes"></string>
<!-- general dialog no-->
<string name="DLG_no">No</string>
<!-- general dialog close-->
<string name="DLG_close">Cerrar</string>
<!-- general dialog done -->
<string name="DLG_done">Terminado</string>
<!-- error dialog (%s => error message)-->
<string name="DLG_error">¡Uy, parece que ocurró un error! Esto es lo que pasó:\n\n%s</string>
<!-- error dialog (no message indicated)-->
<string name="DLG_error_generic">¡Uy, parece que ocurrió un error!</string>
<!-- Progress dialog shown when doing something slow -->
<string name="DLG_wait">Espere un momento...</string>
<!-- ====================================================== SyncProvider == -->
<!-- Sync Notification: message when sync service active -->
<string name="SyP_progress">Sincronizando sus tareas...</string>
<!-- Sync Notification: toast when sync activated from activity -->
<string name="SyP_progress_toast">Sincronizando...</string>
<!-- Sync Label: used in menu to denote synchronization -->
<string name="SyP_label">Sincronización &amp; copia de seguridad</string>
<!-- Sync Label: used in menu to denote synchronization -->
<string name="Sync_now_label">Sincronizar ahora</string>
<!-- Sync label subtitle -->
<string name="SyP_summary">Astrid.com, Google Tasks, información guardada, copia de seguridad local</string>
<!-- Error msg when io exception -->
<string name="SyP_ioerror">¡Error de conexión! Verifique su conexión a internet.</string>
<!-- ================================================== SyncPreferences == -->
<!-- Status Group Label -->
<string name="sync_SPr_group_status">Estado</string>
<!-- Sync status subtitle, %s-> status message -->
<string name="sync_SPr_status_subtitle">Estado: %s</string>
<!-- Sync Status: log in -->
<string name="sync_status_loggedout">Sesión no iniciada</string>
<!-- Status: ongoing -->
<string name="sync_status_ongoing">Sincronización en marcha</string>
<!-- Sync Status: success status (%s -> last sync date). Keep it short!-->
<string name="sync_status_success">Ultima sincronización:\n%s</string>
<!-- Sync Status: failure status (%s -> last attempted sync date) -->
<string name="sync_status_failed">Falló en: %s</string>
<!-- Sync Status: error status (%s -> last sync date) -->
<string name="sync_status_errors">Sincronización c/ errores: %s</string>
<!-- Sync Status: error subtitle (%s -> last successful sync date) -->
<string name="sync_status_failed_subtitle">Última sincronización correcta: %s</string>
<!-- Sync Status: never sync\'d -->
<string name="sync_status_never">¡Nunca sincronizado!</string>
<!-- Options Group Label -->
<string name="sync_SPr_group_options">Opciones</string>
<!-- Preference: Synchronization Interval Title -->
<string name="sync_SPr_interval_title">Sincronización en segundo plano</string>
<!-- Preference: Synchronization Interval Description (when disabled) -->
<string name="sync_SPr_interval_desc_disabled">Sincronización en segundo plano deshabilitada</string>
<!-- Preference: Synchronization Interval Description (%s => setting) -->
<string name="sync_SPr_interval_desc">Actualmente configurado a: %s</string>
<!-- Preference: Background Wifi Title -->
<string name="sync_SPr_bgwifi_title">Configuración solo wifi</string>
<!-- Preference: Background Wifi Description (enabled) -->
<string name="sync_SPr_bgwifi_desc_enabled">La sincronización en segundo plano sólo funciona con el Wifi activado</string>
<!-- Preference: Background Wifi Description (disabled) -->
<string name="sync_SPr_bgwifi_desc_disabled">La sincronización en segundo plano siempre funcionará</string>
<!-- Actions Group Label -->
<string name="sync_SPr_group_actions">Acciones</string>
<!-- Synchronize Now Button -->
<string name="sync_SPr_sync">Sincronizar ahora</string>
<!-- Synchronize Now Button if not logged in-->
<string name="sync_SPr_sync_log_in">Iniciar sesión &amp; sincronizar!</string>
<!-- Sync: Prefix string before logged in identifier -->
<string name="sync_SPr_logged_in_prefix">Sesión iniciada como:</string>
<!-- Sync: Last error -->
<string name="sync_SPr_last_error">Reporte de estado</string>
<!-- Sync: last error click for more -->
<string name="sync_SPr_last_error_subtitle">Click para enviar un reporte al equipo de Astrid</string>
<!-- Sync: send error report button -->
<string name="sync_SPr_send_report">Enviar reporte</string>
<!-- Sync: Clear Data Title -->
<string name="sync_SPr_forget">Cerrar sesión</string>
<!-- Sync: Clear Data Description -->
<string name="sync_SPr_forget_description">Limpia todos los datos de la sincronización</string>
<!-- confirmation dialog for sync log out -->
<string name="sync_forget_confirm">Cerrar sesión/Limpiar datos de sincronización?</string>
<!-- Sync error: network connectivity problems. %s-> name of sync service-->
<string name="sync_error_offline">Ha ocurrido un problema conectando a la red durante la última sincronización con %s. Por favor inténtelo nuevamente después.</string>
<string-array name="sync_SPr_interval_entries">
<!-- sync_SPr_interval_entries: Synchronization Intervals -->
<item>deshabilitar</item>
<item>cada quince minutos</item>
<item>cada treinta minutos</item>
<item>cada hora</item>
<item>cada tres horas</item>
<item>cada seis horas</item>
<item>cada doce horas</item>
<item>cada día</item>
<item>cada tres días</item>
<item>cada semana</item>
</string-array>
<resources>
<!-- ==================================================== Generic Units == -->
<plurals name="DUt_years">
<!-- plurals: years -->
<item quantity="one">1 año</item>
<!-- plurals: years -->
<item quantity="other">%d años</item>
</plurals>
<plurals name="DUt_months">
<!-- plurals: months -->
<item quantity="one">1 mes</item>
<!-- plurals: months -->
<item quantity="other">%d meses</item>
</plurals>
<plurals name="DUt_weeks">
<!-- plurals: days -->
<item quantity="one">1 semana</item>
<!-- plurals: days -->
<item quantity="other">%d semanas</item>
</plurals>
<plurals name="DUt_days">
<!-- plurals: days -->
<item quantity="one">Un día</item>
<!-- plurals: days -->
<item quantity="other">%d días</item>
</plurals>
<plurals name="DUt_weekdays">
<!-- plurals: days -->
<item quantity="one">1 día laborable</item>
<!-- plurals: days -->
<item quantity="other">%d días laborables</item>
</plurals>
<plurals name="DUt_hours">
<!-- plurals: hours -->
<item quantity="one">1 hora</item>
<!-- plurals: hours -->
<item quantity="other">%d horas</item>
</plurals>
<plurals name="DUt_minutes">
<!-- plurals: minutes -->
<item quantity="one">1 minuto</item>
<!-- plurals: minutes -->
<item quantity="other">%d minutos</item>
</plurals>
<plurals name="DUt_seconds">
<!-- plurals: seconds -->
<item quantity="one">1 segundo</item>
<!-- plurals: seconds -->
<item quantity="other">%d segundos</item>
</plurals>
<plurals name="DUt_hoursShort">
<!-- plurals: hours (abbreviated) -->
<item quantity="one">1 hr</item>
<!-- plurals: hours (abbreviated) -->
<item quantity="other">%d hrs</item>
</plurals>
<plurals name="DUt_minutesShort">
<!-- plurals: minutes (abbreviated) -->
<item quantity="one">1 min</item>
<!-- plurals: minutes (abbreviated) -->
<item quantity="other">%d min</item>
</plurals>
<plurals name="DUt_secondsShort">
<!-- plurals: seconds (abbreviated) -->
<item quantity="one">1 seg</item>
<!-- plurals: seconds (abbreviated) -->
<item quantity="other">%d seg</item>
</plurals>
<plurals name="Ntasks">
<!-- plurals: tasks -->
<item quantity="one">1 tarea</item>
<!-- plurals: tasks -->
<item quantity="other">%d tareas</item>
</plurals>
<plurals name="Npeople">
<!-- plurals: people -->
<item quantity="one">1 persona</item>
<!-- plurals: people -->
<item quantity="other">%d personas</item>
</plurals>
<!-- slide 10a, 12c: today -->
<string name="today">Hoy</string>
<!-- tomorrow -->
<string name="tomorrow">Mañana</string>
<!-- yesterday -->
<string name="yesterday">Ayer</string>
<!-- slide 12c: tomorrow, abbreviated -->
<string name="tmrw">Mañana</string>
<!-- slide 12c: yesterday, abbreviated -->
<string name="yest">Ayer</string>
<!-- ================================================== Generic Dialogs == -->
<!-- confirmation dialog title -->
<string name="DLG_confirm_title">¿Confirmar?</string>
<!-- question dialog title -->
<string name="DLG_question_title">Pregunta:</string>
<!-- information dialog title -->
<string name="DLG_information_title">Información</string>
<!-- error dialog title -->
<string name="DLG_error_title">¡Error!</string>
<!-- general dialog save-->
<string name="DLG_save">Guardar</string>
<!-- general dialog yes-->
<string name="DLG_yes"></string>
<!-- general dialog no-->
<string name="DLG_no">No</string>
<!-- general dialog close-->
<string name="DLG_close">Cerrar</string>
<!-- general dialog done -->
<string name="DLG_done">Terminado</string>
<!-- error dialog (%s => error message)-->
<string name="DLG_error">¡Uy, parece que ocurró un error! Esto es lo que pasó:\n\n%s</string>
<!-- error dialog (no message indicated)-->
<string name="DLG_error_generic">¡Uy, parece que ocurrió un error!</string>
<!-- Progress dialog shown when doing something slow -->
<string name="DLG_wait">Espere un momento...</string>
<!-- ====================================================== SyncProvider == -->
<!-- Sync Notification: message when sync service active -->
<string name="SyP_progress">Sincronizando sus tareas...</string>
<!-- Sync Notification: toast when sync activated from activity -->
<string name="SyP_progress_toast">Sincronizando...</string>
<!-- Sync Label: used in menu to denote synchronization -->
<string name="SyP_label">Sincronización &amp; copia de seguridad</string>
<!-- Sync Label: used in menu to denote synchronization -->
<string name="Sync_now_label">Sincronizar ahora</string>
<!-- Sync label subtitle -->
<string name="SyP_summary">Astrid.com, Google Tasks, información guardada, copia de seguridad
local
</string>
<!-- Error msg when io exception -->
<string name="SyP_ioerror">¡Error de conexión! Verifique su conexión a internet.</string>
<!-- ================================================== SyncPreferences == -->
<!-- Status Group Label -->
<string name="sync_SPr_group_status">Estado</string>
<!-- Sync status subtitle, %s-> status message -->
<string name="sync_SPr_status_subtitle">Estado: %s</string>
<!-- Sync Status: log in -->
<string name="sync_status_loggedout">Sesión no iniciada</string>
<!-- Status: ongoing -->
<string name="sync_status_ongoing">Sincronización en marcha</string>
<!-- Sync Status: success status (%s -> last sync date). Keep it short!-->
<string name="sync_status_success">Ultima sincronización:\n%s</string>
<!-- Sync Status: failure status (%s -> last attempted sync date) -->
<string name="sync_status_failed">Falló en: %s</string>
<!-- Sync Status: error status (%s -> last sync date) -->
<string name="sync_status_errors">Sincronización c/ errores: %s</string>
<!-- Sync Status: error subtitle (%s -> last successful sync date) -->
<string name="sync_status_failed_subtitle">Última sincronización correcta: %s</string>
<!-- Sync Status: never sync\'d -->
<string name="sync_status_never">¡Nunca sincronizado!</string>
<!-- Options Group Label -->
<string name="sync_SPr_group_options">Opciones</string>
<!-- Preference: Synchronization Interval Title -->
<string name="sync_SPr_interval_title">Sincronización en segundo plano</string>
<!-- Preference: Synchronization Interval Description (when disabled) -->
<string name="sync_SPr_interval_desc_disabled">Sincronización en segundo plano deshabilitada
</string>
<!-- Preference: Synchronization Interval Description (%s => setting) -->
<string name="sync_SPr_interval_desc">Actualmente configurado a: %s</string>
<!-- Preference: Background Wifi Title -->
<string name="sync_SPr_bgwifi_title">Configuración solo wifi</string>
<!-- Preference: Background Wifi Description (enabled) -->
<string name="sync_SPr_bgwifi_desc_enabled">La sincronización en segundo plano sólo funciona con
el Wifi activado
</string>
<!-- Preference: Background Wifi Description (disabled) -->
<string name="sync_SPr_bgwifi_desc_disabled">La sincronización en segundo plano siempre
funcionará
</string>
<!-- Actions Group Label -->
<string name="sync_SPr_group_actions">Acciones</string>
<!-- Synchronize Now Button -->
<string name="sync_SPr_sync">Sincronizar ahora</string>
<!-- Synchronize Now Button if not logged in-->
<string name="sync_SPr_sync_log_in">Iniciar sesión &amp; sincronizar!</string>
<!-- Sync: Prefix string before logged in identifier -->
<string name="sync_SPr_logged_in_prefix">Sesión iniciada como:</string>
<!-- Sync: Last error -->
<string name="sync_SPr_last_error">Reporte de estado</string>
<!-- Sync: last error click for more -->
<string name="sync_SPr_last_error_subtitle">Click para enviar un reporte al equipo de Astrid
</string>
<!-- Sync: send error report button -->
<string name="sync_SPr_send_report">Enviar reporte</string>
<!-- Sync: Clear Data Title -->
<string name="sync_SPr_forget">Cerrar sesión</string>
<!-- Sync: Clear Data Description -->
<string name="sync_SPr_forget_description">Limpia todos los datos de la sincronización</string>
<!-- confirmation dialog for sync log out -->
<string name="sync_forget_confirm">Cerrar sesión/Limpiar datos de sincronización?</string>
<!-- Sync error: network connectivity problems. %s-> name of sync service-->
<string name="sync_error_offline">Ha ocurrido un problema conectando a la red durante la última
sincronización con %s. Por favor inténtelo nuevamente después.
</string>
<string-array name="sync_SPr_interval_entries">
<!-- sync_SPr_interval_entries: Synchronization Intervals -->
<item>deshabilitar</item>
<item>cada quince minutos</item>
<item>cada treinta minutos</item>
<item>cada hora</item>
<item>cada tres horas</item>
<item>cada seis horas</item>
<item>cada doce horas</item>
<item>cada día</item>
<item>cada tres días</item>
<item>cada semana</item>
</string-array>
</resources>

@ -4,243 +4,255 @@
**
** See the file "LICENSE" for the full license governing this code.
-->
<resources xmlns:android="http://schemas.android.com/apk/res/android">
<!-- ==================================================== Generic Units == -->
<plurals name="DUt_years">
<!-- plurals: years -->
<item quantity="one">1 an</item>
<!-- plurals: years -->
<item quantity="other">%d ans</item>
</plurals>
<plurals name="DUt_months">
<!-- plurals: months -->
<item quantity="one">1 mois</item>
<!-- plurals: months -->
<item quantity="other">%d mois</item>
</plurals>
<plurals name="DUt_weeks">
<!-- plurals: days -->
<item quantity="one">1 semaine</item>
<!-- plurals: days -->
<item quantity="other">%d semaines</item>
</plurals>
<plurals name="DUt_days">
<!-- plurals: days -->
<item quantity="one">1 jour</item>
<!-- plurals: days -->
<item quantity="other">%d jours</item>
</plurals>
<plurals name="DUt_weekdays">
<!-- plurals: days -->
<item quantity="one">1 jour de la semaine</item>
<!-- plurals: days -->
<item quantity="other">%d jours de la semaine</item>
</plurals>
<plurals name="DUt_hours">
<!-- plurals: hours -->
<item quantity="one">1 heure</item>
<!-- plurals: hours -->
<item quantity="other">%d heures</item>
</plurals>
<plurals name="DUt_minutes">
<!-- plurals: minutes -->
<item quantity="one">1 minute</item>
<!-- plurals: minutes -->
<item quantity="other">%d minutes</item>
</plurals>
<plurals name="DUt_seconds">
<!-- plurals: seconds -->
<item quantity="one">1 seconde</item>
<!-- plurals: seconds -->
<item quantity="other">%d secondes</item>
</plurals>
<plurals name="DUt_hoursShort">
<!-- plurals: hours (abbreviated) -->
<item quantity="one">1 h</item>
<!-- plurals: hours (abbreviated) -->
<item quantity="other">%d h</item>
</plurals>
<plurals name="DUt_minutesShort">
<!-- plurals: minutes (abbreviated) -->
<item quantity="one">1 min</item>
<!-- plurals: minutes (abbreviated) -->
<item quantity="other">%d min</item>
</plurals>
<plurals name="DUt_secondsShort">
<!-- plurals: seconds (abbreviated) -->
<item quantity="one">1 s</item>
<!-- plurals: seconds (abbreviated) -->
<item quantity="other">%d s</item>
</plurals>
<plurals name="Ntasks">
<!-- plurals: tasks -->
<item quantity="one">1 tâche</item>
<!-- plurals: tasks -->
<item quantity="other">%d tâches</item>
</plurals>
<plurals name="Npeople">
<!-- plurals: people -->
<item quantity="one">1 personne</item>
<!-- plurals: people -->
<item quantity="other">%d personnes</item>
</plurals>
<!-- slide 10a, 12c: today -->
<string name="today">Aujourd\'hui</string>
<!-- tomorrow -->
<string name="tomorrow">Demain</string>
<!-- yesterday -->
<string name="yesterday">Hier</string>
<!-- slide 12c: tomorrow, abbreviated -->
<string name="tmrw">Demain</string>
<!-- slide 12c: yesterday, abbreviated -->
<string name="yest">Hier</string>
<!-- ================================================== Generic Dialogs == -->
<!-- confirmation dialog title -->
<string name="DLG_confirm_title">Confirmer ?</string>
<!-- question dialog title -->
<string name="DLG_question_title">Question :</string>
<!-- information dialog title -->
<string name="DLG_information_title">Information</string>
<!-- error dialog title -->
<string name="DLG_error_title">Erreur !</string>
<!-- general dialog save-->
<string name="DLG_save">Enregistrer</string>
<!-- general dialog yes-->
<string name="DLG_yes">Oui</string>
<!-- general dialog no-->
<string name="DLG_no">Non</string>
<!-- general dialog close-->
<string name="DLG_close">Fermer</string>
<!-- general dialog done -->
<string name="DLG_done">Fnalizado</string>
<!-- error dialog (%s => error message)-->
<string name="DLG_error">Oups, une erreur est survenue ! Voici ce qu\'il s\'est passé :\n\n%s</string>
<!-- error dialog (no message indicated)-->
<string name="DLG_error_generic">Oups, une erreur est survenue !</string>
<!-- Progress dialog shown when doing something slow -->
<string name="DLG_wait">Veuillez patienter...</string>
<!-- ====================================================== SyncProvider == -->
<!-- Sync Notification: message when sync service active -->
<string name="SyP_progress">Synchronisation de vos tâches...</string>
<!-- Sync Notification: toast when sync activated from activity -->
<string name="SyP_progress_toast">Synchronisation...</string>
<!-- Sync Label: used in menu to denote synchronization -->
<string name="SyP_label">Synchronisation</string>
<!-- Sync Label: used in menu to denote synchronization -->
<string name="Sync_now_label">Sync now</string>
<!-- Sync label subtitle -->
<string name="SyP_summary">Astrid.com, Tâches Google, données enregistrées, sauvegarde locale</string>
<!-- Error msg when io exception -->
<string name="SyP_ioerror">Erreur de connexion ! Veuillez vérifier votre connexion Internet.</string>
<!-- ================================================== SyncPreferences == -->
<!-- Status Group Label -->
<string name="sync_SPr_group_status">Statut</string>
<!-- Sync status subtitle, %s-> status message -->
<string name="sync_SPr_status_subtitle">État : %s</string>
<!-- Sync Status: log in -->
<string name="sync_status_loggedout">Non connecté</string>
<!-- Status: ongoing -->
<string name="sync_status_ongoing">Synchronisation en cours...</string>
<!-- Sync Status: success status (%s -> last sync date). Keep it short!-->
<string name="sync_status_success">Dernière synchro. :\n%s</string>
<!-- Sync Status: failure status (%s -> last attempted sync date) -->
<string name="sync_status_failed">Échec sur : %s</string>
<!-- Sync Status: error status (%s -> last sync date) -->
<string name="sync_status_errors">Synchro avec Erreurs: %s</string>
<!-- Sync Status: error subtitle (%s -> last successful sync date) -->
<string name="sync_status_failed_subtitle">Dernière synchro. réussie : %s</string>
<!-- Sync Status: never sync\'d -->
<string name="sync_status_never">Jamais synchronisé !</string>
<!-- Options Group Label -->
<string name="sync_SPr_group_options">Options</string>
<!-- Preference: Synchronization Interval Title -->
<string name="sync_SPr_interval_title">Synchro. en arrière-plan</string>
<!-- Preference: Synchronization Interval Description (when disabled) -->
<string name="sync_SPr_interval_desc_disabled">Synchronisation en arrière-plan désactivée</string>
<!-- Preference: Synchronization Interval Description (%s => setting) -->
<string name="sync_SPr_interval_desc">Actuellement configuré sur : %s</string>
<!-- Preference: Background Wifi Title -->
<string name="sync_SPr_bgwifi_title">Paramètre Wifi seul</string>
<!-- Preference: Background Wifi Description (enabled) -->
<string name="sync_SPr_bgwifi_desc_enabled">La synchronisation en arrière-plan ne s\'effectue uniquement sous Wifi</string>
<!-- Preference: Background Wifi Description (disabled) -->
<string name="sync_SPr_bgwifi_desc_disabled">La synchronisation en arrière-plan s\'effectuera toujours</string>
<!-- Actions Group Label -->
<string name="sync_SPr_group_actions">Actions</string>
<!-- Synchronize Now Button -->
<string name="sync_SPr_sync">Synchroniser maintenant</string>
<!-- Synchronize Now Button if not logged in-->
<string name="sync_SPr_sync_log_in">Se connecter et synchroniser !</string>
<!-- Sync: Prefix string before logged in identifier -->
<string name="sync_SPr_logged_in_prefix">Connecté en tant que :</string>
<!-- Sync: Last error -->
<string name="sync_SPr_last_error">Rapport d\'état</string>
<!-- Sync: last error click for more -->
<string name="sync_SPr_last_error_subtitle">Cliquez pour envoyer un rapport à l\'équipe Astrid</string>
<!-- Sync: send error report button -->
<string name="sync_SPr_send_report">Envoyer le rapport</string>
<!-- Sync: Clear Data Title -->
<string name="sync_SPr_forget">Se déconnecter</string>
<!-- Sync: Clear Data Description -->
<string name="sync_SPr_forget_description">Purger toutes les données de synchronisation</string>
<!-- confirmation dialog for sync log out -->
<string name="sync_forget_confirm">Se déconnecter/purger les données de synchronisation ?</string>
<!-- Sync error: network connectivity problems. %s-> name of sync service-->
<string name="sync_error_offline">Un problème de connexion réseau est survenu lors de la dernière synchronisation avec %s. Merci de réessayer plus tard.</string>
<string-array name="sync_SPr_interval_entries">
<!-- sync_SPr_interval_entries: Synchronization Intervals -->
<item>désactiver</item>
<item>toutes les quinze minutes</item>
<item>toutes les trente minutes</item>
<item>toutes les heures</item>
<item>toutes les trois heures</item>
<item>toutes les six heures</item>
<item>toutes les douze heures</item>
<item>tous les jours</item>
<item>tous les trois jours</item>
<item>toutes les semaines</item>
</string-array>
<resources>
<!-- ==================================================== Generic Units == -->
<plurals name="DUt_years">
<!-- plurals: years -->
<item quantity="one">1 an</item>
<!-- plurals: years -->
<item quantity="other">%d ans</item>
</plurals>
<plurals name="DUt_months">
<!-- plurals: months -->
<item quantity="one">1 mois</item>
<!-- plurals: months -->
<item quantity="other">%d mois</item>
</plurals>
<plurals name="DUt_weeks">
<!-- plurals: days -->
<item quantity="one">1 semaine</item>
<!-- plurals: days -->
<item quantity="other">%d semaines</item>
</plurals>
<plurals name="DUt_days">
<!-- plurals: days -->
<item quantity="one">1 jour</item>
<!-- plurals: days -->
<item quantity="other">%d jours</item>
</plurals>
<plurals name="DUt_weekdays">
<!-- plurals: days -->
<item quantity="one">1 jour de la semaine</item>
<!-- plurals: days -->
<item quantity="other">%d jours de la semaine</item>
</plurals>
<plurals name="DUt_hours">
<!-- plurals: hours -->
<item quantity="one">1 heure</item>
<!-- plurals: hours -->
<item quantity="other">%d heures</item>
</plurals>
<plurals name="DUt_minutes">
<!-- plurals: minutes -->
<item quantity="one">1 minute</item>
<!-- plurals: minutes -->
<item quantity="other">%d minutes</item>
</plurals>
<plurals name="DUt_seconds">
<!-- plurals: seconds -->
<item quantity="one">1 seconde</item>
<!-- plurals: seconds -->
<item quantity="other">%d secondes</item>
</plurals>
<plurals name="DUt_hoursShort">
<!-- plurals: hours (abbreviated) -->
<item quantity="one">1 h</item>
<!-- plurals: hours (abbreviated) -->
<item quantity="other">%d h</item>
</plurals>
<plurals name="DUt_minutesShort">
<!-- plurals: minutes (abbreviated) -->
<item quantity="one">1 min</item>
<!-- plurals: minutes (abbreviated) -->
<item quantity="other">%d min</item>
</plurals>
<plurals name="DUt_secondsShort">
<!-- plurals: seconds (abbreviated) -->
<item quantity="one">1 s</item>
<!-- plurals: seconds (abbreviated) -->
<item quantity="other">%d s</item>
</plurals>
<plurals name="Ntasks">
<!-- plurals: tasks -->
<item quantity="one">1 tâche</item>
<!-- plurals: tasks -->
<item quantity="other">%d tâches</item>
</plurals>
<plurals name="Npeople">
<!-- plurals: people -->
<item quantity="one">1 personne</item>
<!-- plurals: people -->
<item quantity="other">%d personnes</item>
</plurals>
<!-- slide 10a, 12c: today -->
<string name="today">Aujourd\'hui</string>
<!-- tomorrow -->
<string name="tomorrow">Demain</string>
<!-- yesterday -->
<string name="yesterday">Hier</string>
<!-- slide 12c: tomorrow, abbreviated -->
<string name="tmrw">Demain</string>
<!-- slide 12c: yesterday, abbreviated -->
<string name="yest">Hier</string>
<!-- ================================================== Generic Dialogs == -->
<!-- confirmation dialog title -->
<string name="DLG_confirm_title">Confirmer ?</string>
<!-- question dialog title -->
<string name="DLG_question_title">Question :</string>
<!-- information dialog title -->
<string name="DLG_information_title">Information</string>
<!-- error dialog title -->
<string name="DLG_error_title">Erreur !</string>
<!-- general dialog save-->
<string name="DLG_save">Enregistrer</string>
<!-- general dialog yes-->
<string name="DLG_yes">Oui</string>
<!-- general dialog no-->
<string name="DLG_no">Non</string>
<!-- general dialog close-->
<string name="DLG_close">Fermer</string>
<!-- general dialog done -->
<string name="DLG_done">Fnalizado</string>
<!-- error dialog (%s => error message)-->
<string name="DLG_error">Oups, une erreur est survenue ! Voici ce qu\'il s\'est passé :\n\n%s
</string>
<!-- error dialog (no message indicated)-->
<string name="DLG_error_generic">Oups, une erreur est survenue !</string>
<!-- Progress dialog shown when doing something slow -->
<string name="DLG_wait">Veuillez patienter...</string>
<!-- ====================================================== SyncProvider == -->
<!-- Sync Notification: message when sync service active -->
<string name="SyP_progress">Synchronisation de vos tâches...</string>
<!-- Sync Notification: toast when sync activated from activity -->
<string name="SyP_progress_toast">Synchronisation...</string>
<!-- Sync Label: used in menu to denote synchronization -->
<string name="SyP_label">Synchronisation</string>
<!-- Sync Label: used in menu to denote synchronization -->
<string name="Sync_now_label">Sync now</string>
<!-- Sync label subtitle -->
<string name="SyP_summary">Astrid.com, Tâches Google, données enregistrées, sauvegarde locale
</string>
<!-- Error msg when io exception -->
<string name="SyP_ioerror">Erreur de connexion ! Veuillez vérifier votre connexion Internet.
</string>
<!-- ================================================== SyncPreferences == -->
<!-- Status Group Label -->
<string name="sync_SPr_group_status">Statut</string>
<!-- Sync status subtitle, %s-> status message -->
<string name="sync_SPr_status_subtitle">État : %s</string>
<!-- Sync Status: log in -->
<string name="sync_status_loggedout">Non connecté</string>
<!-- Status: ongoing -->
<string name="sync_status_ongoing">Synchronisation en cours...</string>
<!-- Sync Status: success status (%s -> last sync date). Keep it short!-->
<string name="sync_status_success">Dernière synchro. :\n%s</string>
<!-- Sync Status: failure status (%s -> last attempted sync date) -->
<string name="sync_status_failed">Échec sur : %s</string>
<!-- Sync Status: error status (%s -> last sync date) -->
<string name="sync_status_errors">Synchro avec Erreurs: %s</string>
<!-- Sync Status: error subtitle (%s -> last successful sync date) -->
<string name="sync_status_failed_subtitle">Dernière synchro. réussie : %s</string>
<!-- Sync Status: never sync\'d -->
<string name="sync_status_never">Jamais synchronisé !</string>
<!-- Options Group Label -->
<string name="sync_SPr_group_options">Options</string>
<!-- Preference: Synchronization Interval Title -->
<string name="sync_SPr_interval_title">Synchro. en arrière-plan</string>
<!-- Preference: Synchronization Interval Description (when disabled) -->
<string name="sync_SPr_interval_desc_disabled">Synchronisation en arrière-plan désactivée
</string>
<!-- Preference: Synchronization Interval Description (%s => setting) -->
<string name="sync_SPr_interval_desc">Actuellement configuré sur : %s</string>
<!-- Preference: Background Wifi Title -->
<string name="sync_SPr_bgwifi_title">Paramètre Wifi seul</string>
<!-- Preference: Background Wifi Description (enabled) -->
<string name="sync_SPr_bgwifi_desc_enabled">La synchronisation en arrière-plan ne s\'effectue
uniquement sous Wifi
</string>
<!-- Preference: Background Wifi Description (disabled) -->
<string name="sync_SPr_bgwifi_desc_disabled">La synchronisation en arrière-plan s\'effectuera
toujours
</string>
<!-- Actions Group Label -->
<string name="sync_SPr_group_actions">Actions</string>
<!-- Synchronize Now Button -->
<string name="sync_SPr_sync">Synchroniser maintenant</string>
<!-- Synchronize Now Button if not logged in-->
<string name="sync_SPr_sync_log_in">Se connecter et synchroniser !</string>
<!-- Sync: Prefix string before logged in identifier -->
<string name="sync_SPr_logged_in_prefix">Connecté en tant que :</string>
<!-- Sync: Last error -->
<string name="sync_SPr_last_error">Rapport d\'état</string>
<!-- Sync: last error click for more -->
<string name="sync_SPr_last_error_subtitle">Cliquez pour envoyer un rapport à l\'équipe Astrid
</string>
<!-- Sync: send error report button -->
<string name="sync_SPr_send_report">Envoyer le rapport</string>
<!-- Sync: Clear Data Title -->
<string name="sync_SPr_forget">Se déconnecter</string>
<!-- Sync: Clear Data Description -->
<string name="sync_SPr_forget_description">Purger toutes les données de synchronisation</string>
<!-- confirmation dialog for sync log out -->
<string name="sync_forget_confirm">Se déconnecter/purger les données de synchronisation ?
</string>
<!-- Sync error: network connectivity problems. %s-> name of sync service-->
<string name="sync_error_offline">Un problème de connexion réseau est survenu lors de la
dernière synchronisation avec %s. Merci de réessayer plus tard.
</string>
<string-array name="sync_SPr_interval_entries">
<!-- sync_SPr_interval_entries: Synchronization Intervals -->
<item>désactiver</item>
<item>toutes les quinze minutes</item>
<item>toutes les trente minutes</item>
<item>toutes les heures</item>
<item>toutes les trois heures</item>
<item>toutes les six heures</item>
<item>toutes les douze heures</item>
<item>tous les jours</item>
<item>tous les trois jours</item>
<item>toutes les semaines</item>
</string-array>
</resources>

@ -4,243 +4,254 @@
**
** See the file "LICENSE" for the full license governing this code.
-->
<resources xmlns:android="http://schemas.android.com/apk/res/android">
<!-- ==================================================== Generic Units == -->
<plurals name="DUt_years">
<!-- plurals: years -->
<item quantity="one">1 Anno</item>
<!-- plurals: years -->
<item quantity="other">%d Anni</item>
</plurals>
<plurals name="DUt_months">
<!-- plurals: months -->
<item quantity="one">1 Mese</item>
<!-- plurals: months -->
<item quantity="other">%d mesi</item>
</plurals>
<plurals name="DUt_weeks">
<!-- plurals: days -->
<item quantity="one">1 Settimana</item>
<!-- plurals: days -->
<item quantity="other">%d settimane</item>
</plurals>
<plurals name="DUt_days">
<!-- plurals: days -->
<item quantity="one">1 Giorno</item>
<!-- plurals: days -->
<item quantity="other">%d Giorni</item>
</plurals>
<plurals name="DUt_weekdays">
<!-- plurals: days -->
<item quantity="one">1 giorno della settimana</item>
<!-- plurals: days -->
<item quantity="other">%d giorni della settimana</item>
</plurals>
<plurals name="DUt_hours">
<!-- plurals: hours -->
<item quantity="one">1 ora</item>
<!-- plurals: hours -->
<item quantity="other">%d ore</item>
</plurals>
<plurals name="DUt_minutes">
<!-- plurals: minutes -->
<item quantity="one">1 minuto</item>
<!-- plurals: minutes -->
<item quantity="other">%d minuti</item>
</plurals>
<plurals name="DUt_seconds">
<!-- plurals: seconds -->
<item quantity="one">1 secondo</item>
<!-- plurals: seconds -->
<item quantity="other">%d secondi</item>
</plurals>
<plurals name="DUt_hoursShort">
<!-- plurals: hours (abbreviated) -->
<item quantity="one">1 ora</item>
<!-- plurals: hours (abbreviated) -->
<item quantity="other">%d ore</item>
</plurals>
<plurals name="DUt_minutesShort">
<!-- plurals: minutes (abbreviated) -->
<item quantity="one">1 min</item>
<!-- plurals: minutes (abbreviated) -->
<item quantity="other">%d min</item>
</plurals>
<plurals name="DUt_secondsShort">
<!-- plurals: seconds (abbreviated) -->
<item quantity="one">1 sec</item>
<!-- plurals: seconds (abbreviated) -->
<item quantity="other">%d sec</item>
</plurals>
<plurals name="Ntasks">
<!-- plurals: tasks -->
<item quantity="one">1 attività</item>
<!-- plurals: tasks -->
<item quantity="other">%d attività</item>
</plurals>
<plurals name="Npeople">
<!-- plurals: people -->
<item quantity="one">1 persona</item>
<!-- plurals: people -->
<item quantity="other">%d persone</item>
</plurals>
<!-- slide 10a, 12c: today -->
<string name="today">Oggi</string>
<!-- tomorrow -->
<string name="tomorrow">Domani</string>
<!-- yesterday -->
<string name="yesterday">Ieri</string>
<!-- slide 12c: tomorrow, abbreviated -->
<string name="tmrw">Domani</string>
<!-- slide 12c: yesterday, abbreviated -->
<string name="yest">Ieri</string>
<!-- ================================================== Generic Dialogs == -->
<!-- confirmation dialog title -->
<string name="DLG_confirm_title">Confermi?</string>
<!-- question dialog title -->
<string name="DLG_question_title">Domanda:</string>
<!-- information dialog title -->
<string name="DLG_information_title">Informazione</string>
<!-- error dialog title -->
<string name="DLG_error_title">Errore!</string>
<!-- general dialog save-->
<string name="DLG_save">Salva</string>
<!-- general dialog yes-->
<string name="DLG_yes"></string>
<!-- general dialog no-->
<string name="DLG_no">No</string>
<!-- general dialog close-->
<string name="DLG_close">Chiudi</string>
<!-- general dialog done -->
<string name="DLG_done">Completata</string>
<!-- error dialog (%s => error message)-->
<string name="DLG_error">Oops, sembra che ci sia stato un errore! E\' successo questo:\n\n%s</string>
<!-- error dialog (no message indicated)-->
<string name="DLG_error_generic">Oops, sembra che ci sia stato un errore!</string>
<!-- Progress dialog shown when doing something slow -->
<string name="DLG_wait">Attendi...</string>
<!-- ====================================================== SyncProvider == -->
<!-- Sync Notification: message when sync service active -->
<string name="SyP_progress">Sincronizzando le tue attività...</string>
<!-- Sync Notification: toast when sync activated from activity -->
<string name="SyP_progress_toast">Sincronizzando...</string>
<!-- Sync Label: used in menu to denote synchronization -->
<string name="SyP_label">Sincronizza &amp; archivia</string>
<!-- Sync Label: used in menu to denote synchronization -->
<string name="Sync_now_label">Sync now</string>
<!-- Sync label subtitle -->
<string name="SyP_summary">Astrid.com, Attività Google, dati salvati, backup locale </string>
<!-- Error msg when io exception -->
<string name="SyP_ioerror">Errore di Connessione! Controlla la tua connessione Internet.</string>
<!-- ================================================== SyncPreferences == -->
<!-- Status Group Label -->
<string name="sync_SPr_group_status">Stato</string>
<!-- Sync status subtitle, %s-> status message -->
<string name="sync_SPr_status_subtitle">Stato: %s</string>
<!-- Sync Status: log in -->
<string name="sync_status_loggedout">Non connesso</string>
<!-- Status: ongoing -->
<string name="sync_status_ongoing">Sincronizzazione in corso...</string>
<!-- Sync Status: success status (%s -> last sync date). Keep it short!-->
<string name="sync_status_success">Ultima Sincronizzazione:\n%s</string>
<!-- Sync Status: failure status (%s -> last attempted sync date) -->
<string name="sync_status_failed">Fallita Su: %s</string>
<!-- Sync Status: error status (%s -> last sync date) -->
<string name="sync_status_errors">Sincronizza con gli errori: %s</string>
<!-- Sync Status: error subtitle (%s -> last successful sync date) -->
<string name="sync_status_failed_subtitle">Ultima sincronizzazione eseguita con successo in data: %s</string>
<!-- Sync Status: never sync\'d -->
<string name="sync_status_never">Mai sincronizzato!</string>
<!-- Options Group Label -->
<string name="sync_SPr_group_options">Preferenze</string>
<!-- Preference: Synchronization Interval Title -->
<string name="sync_SPr_interval_title">Sincronizzazione eseguita in background</string>
<!-- Preference: Synchronization Interval Description (when disabled) -->
<string name="sync_SPr_interval_desc_disabled">La sincronizzazione in background è disattivata</string>
<!-- Preference: Synchronization Interval Description (%s => setting) -->
<string name="sync_SPr_interval_desc">Attualmente impostata su: %s</string>
<!-- Preference: Background Wifi Title -->
<string name="sync_SPr_bgwifi_title">Unica Impostazione Wifi</string>
<!-- Preference: Background Wifi Description (enabled) -->
<string name="sync_SPr_bgwifi_desc_enabled">La sincronizzazione in background avviene solo con rete Wifi attiva</string>
<!-- Preference: Background Wifi Description (disabled) -->
<string name="sync_SPr_bgwifi_desc_disabled">La sincronizzazione in background avviene sempre</string>
<!-- Actions Group Label -->
<string name="sync_SPr_group_actions">Azioni</string>
<!-- Synchronize Now Button -->
<string name="sync_SPr_sync">Sincronizza ora</string>
<!-- Synchronize Now Button if not logged in-->
<string name="sync_SPr_sync_log_in">Esegui l\'accesso &amp; Sincronizza!</string>
<!-- Sync: Prefix string before logged in identifier -->
<string name="sync_SPr_logged_in_prefix">Accesso come:</string>
<!-- Sync: Last error -->
<string name="sync_SPr_last_error">Status report</string>
<!-- Sync: last error click for more -->
<string name="sync_SPr_last_error_subtitle">"Clicca per inviare un rapporto al team Astrid"</string>
<!-- Sync: send error report button -->
<string name="sync_SPr_send_report">Invia rapporto</string>
<!-- Sync: Clear Data Title -->
<string name="sync_SPr_forget">Esci</string>
<!-- Sync: Clear Data Description -->
<string name="sync_SPr_forget_description">Cancella tutti i dati di sincronizzazione</string>
<!-- confirmation dialog for sync log out -->
<string name="sync_forget_confirm">Esci / cancella i file di sincronizzazione?</string>
<!-- Sync error: network connectivity problems. %s-> name of sync service-->
<string name="sync_error_offline">Problema di connessione alla rete durante l\'ultima sincronizzazione con %s. Riprova dopo.</string>
<string-array name="sync_SPr_interval_entries">
<!-- sync_SPr_interval_entries: Synchronization Intervals -->
<item>disabilita</item>
<item>ogni quindici minuti</item>
<item>ogni trenta minuti</item>
<item>ogni ora</item>
<item>ogni tre ore</item>
<item>ogni sei ore</item>
<item>ogni dodici ore</item>
<item>ogni giorno</item>
<item>ogni tre giorni</item>
<item>Ogni settimana</item>
</string-array>
<resources>
<!-- ==================================================== Generic Units == -->
<plurals name="DUt_years">
<!-- plurals: years -->
<item quantity="one">1 Anno</item>
<!-- plurals: years -->
<item quantity="other">%d Anni</item>
</plurals>
<plurals name="DUt_months">
<!-- plurals: months -->
<item quantity="one">1 Mese</item>
<!-- plurals: months -->
<item quantity="other">%d mesi</item>
</plurals>
<plurals name="DUt_weeks">
<!-- plurals: days -->
<item quantity="one">1 Settimana</item>
<!-- plurals: days -->
<item quantity="other">%d settimane</item>
</plurals>
<plurals name="DUt_days">
<!-- plurals: days -->
<item quantity="one">1 Giorno</item>
<!-- plurals: days -->
<item quantity="other">%d Giorni</item>
</plurals>
<plurals name="DUt_weekdays">
<!-- plurals: days -->
<item quantity="one">1 giorno della settimana</item>
<!-- plurals: days -->
<item quantity="other">%d giorni della settimana</item>
</plurals>
<plurals name="DUt_hours">
<!-- plurals: hours -->
<item quantity="one">1 ora</item>
<!-- plurals: hours -->
<item quantity="other">%d ore</item>
</plurals>
<plurals name="DUt_minutes">
<!-- plurals: minutes -->
<item quantity="one">1 minuto</item>
<!-- plurals: minutes -->
<item quantity="other">%d minuti</item>
</plurals>
<plurals name="DUt_seconds">
<!-- plurals: seconds -->
<item quantity="one">1 secondo</item>
<!-- plurals: seconds -->
<item quantity="other">%d secondi</item>
</plurals>
<plurals name="DUt_hoursShort">
<!-- plurals: hours (abbreviated) -->
<item quantity="one">1 ora</item>
<!-- plurals: hours (abbreviated) -->
<item quantity="other">%d ore</item>
</plurals>
<plurals name="DUt_minutesShort">
<!-- plurals: minutes (abbreviated) -->
<item quantity="one">1 min</item>
<!-- plurals: minutes (abbreviated) -->
<item quantity="other">%d min</item>
</plurals>
<plurals name="DUt_secondsShort">
<!-- plurals: seconds (abbreviated) -->
<item quantity="one">1 sec</item>
<!-- plurals: seconds (abbreviated) -->
<item quantity="other">%d sec</item>
</plurals>
<plurals name="Ntasks">
<!-- plurals: tasks -->
<item quantity="one">1 attività</item>
<!-- plurals: tasks -->
<item quantity="other">%d attività</item>
</plurals>
<plurals name="Npeople">
<!-- plurals: people -->
<item quantity="one">1 persona</item>
<!-- plurals: people -->
<item quantity="other">%d persone</item>
</plurals>
<!-- slide 10a, 12c: today -->
<string name="today">Oggi</string>
<!-- tomorrow -->
<string name="tomorrow">Domani</string>
<!-- yesterday -->
<string name="yesterday">Ieri</string>
<!-- slide 12c: tomorrow, abbreviated -->
<string name="tmrw">Domani</string>
<!-- slide 12c: yesterday, abbreviated -->
<string name="yest">Ieri</string>
<!-- ================================================== Generic Dialogs == -->
<!-- confirmation dialog title -->
<string name="DLG_confirm_title">Confermi?</string>
<!-- question dialog title -->
<string name="DLG_question_title">Domanda:</string>
<!-- information dialog title -->
<string name="DLG_information_title">Informazione</string>
<!-- error dialog title -->
<string name="DLG_error_title">Errore!</string>
<!-- general dialog save-->
<string name="DLG_save">Salva</string>
<!-- general dialog yes-->
<string name="DLG_yes"></string>
<!-- general dialog no-->
<string name="DLG_no">No</string>
<!-- general dialog close-->
<string name="DLG_close">Chiudi</string>
<!-- general dialog done -->
<string name="DLG_done">Completata</string>
<!-- error dialog (%s => error message)-->
<string name="DLG_error">Oops, sembra che ci sia stato un errore! E\' successo questo:\n\n%s
</string>
<!-- error dialog (no message indicated)-->
<string name="DLG_error_generic">Oops, sembra che ci sia stato un errore!</string>
<!-- Progress dialog shown when doing something slow -->
<string name="DLG_wait">Attendi...</string>
<!-- ====================================================== SyncProvider == -->
<!-- Sync Notification: message when sync service active -->
<string name="SyP_progress">Sincronizzando le tue attività...</string>
<!-- Sync Notification: toast when sync activated from activity -->
<string name="SyP_progress_toast">Sincronizzando...</string>
<!-- Sync Label: used in menu to denote synchronization -->
<string name="SyP_label">Sincronizza &amp; archivia</string>
<!-- Sync Label: used in menu to denote synchronization -->
<string name="Sync_now_label">Sync now</string>
<!-- Sync label subtitle -->
<string name="SyP_summary">Astrid.com, Attività Google, dati salvati, backup locale</string>
<!-- Error msg when io exception -->
<string name="SyP_ioerror">Errore di Connessione! Controlla la tua connessione Internet.
</string>
<!-- ================================================== SyncPreferences == -->
<!-- Status Group Label -->
<string name="sync_SPr_group_status">Stato</string>
<!-- Sync status subtitle, %s-> status message -->
<string name="sync_SPr_status_subtitle">Stato: %s</string>
<!-- Sync Status: log in -->
<string name="sync_status_loggedout">Non connesso</string>
<!-- Status: ongoing -->
<string name="sync_status_ongoing">Sincronizzazione in corso...</string>
<!-- Sync Status: success status (%s -> last sync date). Keep it short!-->
<string name="sync_status_success">Ultima Sincronizzazione:\n%s</string>
<!-- Sync Status: failure status (%s -> last attempted sync date) -->
<string name="sync_status_failed">Fallita Su: %s</string>
<!-- Sync Status: error status (%s -> last sync date) -->
<string name="sync_status_errors">Sincronizza con gli errori: %s</string>
<!-- Sync Status: error subtitle (%s -> last successful sync date) -->
<string name="sync_status_failed_subtitle">Ultima sincronizzazione eseguita con successo in
data: %s
</string>
<!-- Sync Status: never sync\'d -->
<string name="sync_status_never">Mai sincronizzato!</string>
<!-- Options Group Label -->
<string name="sync_SPr_group_options">Preferenze</string>
<!-- Preference: Synchronization Interval Title -->
<string name="sync_SPr_interval_title">Sincronizzazione eseguita in background</string>
<!-- Preference: Synchronization Interval Description (when disabled) -->
<string name="sync_SPr_interval_desc_disabled">La sincronizzazione in background è disattivata
</string>
<!-- Preference: Synchronization Interval Description (%s => setting) -->
<string name="sync_SPr_interval_desc">Attualmente impostata su: %s</string>
<!-- Preference: Background Wifi Title -->
<string name="sync_SPr_bgwifi_title">Unica Impostazione Wifi</string>
<!-- Preference: Background Wifi Description (enabled) -->
<string name="sync_SPr_bgwifi_desc_enabled">La sincronizzazione in background avviene solo con
rete Wifi attiva
</string>
<!-- Preference: Background Wifi Description (disabled) -->
<string name="sync_SPr_bgwifi_desc_disabled">La sincronizzazione in background avviene sempre
</string>
<!-- Actions Group Label -->
<string name="sync_SPr_group_actions">Azioni</string>
<!-- Synchronize Now Button -->
<string name="sync_SPr_sync">Sincronizza ora</string>
<!-- Synchronize Now Button if not logged in-->
<string name="sync_SPr_sync_log_in">Esegui l\'accesso &amp; Sincronizza!</string>
<!-- Sync: Prefix string before logged in identifier -->
<string name="sync_SPr_logged_in_prefix">Accesso come:</string>
<!-- Sync: Last error -->
<string name="sync_SPr_last_error">Status report</string>
<!-- Sync: last error click for more -->
<string name="sync_SPr_last_error_subtitle">"Clicca per inviare un rapporto al team Astrid"
</string>
<!-- Sync: send error report button -->
<string name="sync_SPr_send_report">Invia rapporto</string>
<!-- Sync: Clear Data Title -->
<string name="sync_SPr_forget">Esci</string>
<!-- Sync: Clear Data Description -->
<string name="sync_SPr_forget_description">Cancella tutti i dati di sincronizzazione</string>
<!-- confirmation dialog for sync log out -->
<string name="sync_forget_confirm">Esci / cancella i file di sincronizzazione?</string>
<!-- Sync error: network connectivity problems. %s-> name of sync service-->
<string name="sync_error_offline">Problema di connessione alla rete durante l\'ultima
sincronizzazione con %s. Riprova dopo.
</string>
<string-array name="sync_SPr_interval_entries">
<!-- sync_SPr_interval_entries: Synchronization Intervals -->
<item>disabilita</item>
<item>ogni quindici minuti</item>
<item>ogni trenta minuti</item>
<item>ogni ora</item>
<item>ogni tre ore</item>
<item>ogni sei ore</item>
<item>ogni dodici ore</item>
<item>ogni giorno</item>
<item>ogni tre giorni</item>
<item>Ogni settimana</item>
</string-array>
</resources>

@ -4,243 +4,245 @@
**
** See the file "LICENSE" for the full license governing this code.
-->
<resources xmlns:android="http://schemas.android.com/apk/res/android">
<!-- ==================================================== Generic Units == -->
<plurals name="DUt_years">
<!-- plurals: years -->
<item quantity="one">שנה</item>
<!-- plurals: years -->
<item quantity="other">%d שנים</item>
</plurals>
<plurals name="DUt_months">
<!-- plurals: months -->
<item quantity="one">חודש</item>
<!-- plurals: months -->
<item quantity="other">%d חודשים</item>
</plurals>
<plurals name="DUt_weeks">
<!-- plurals: days -->
<item quantity="one">שבוע אחד</item>
<!-- plurals: days -->
<item quantity="other">%d שבועות</item>
</plurals>
<plurals name="DUt_days">
<!-- plurals: days -->
<item quantity="one">יום אחד</item>
<!-- plurals: days -->
<item quantity="other">%d ימים</item>
</plurals>
<plurals name="DUt_weekdays">
<!-- plurals: days -->
<item quantity="one">יום עבודה אחד</item>
<!-- plurals: days -->
<item quantity="other">%d ימי עבודה</item>
</plurals>
<plurals name="DUt_hours">
<!-- plurals: hours -->
<item quantity="one">שעה אחת</item>
<!-- plurals: hours -->
<item quantity="other">%d שעות</item>
</plurals>
<plurals name="DUt_minutes">
<!-- plurals: minutes -->
<item quantity="one">דקה אחת</item>
<!-- plurals: minutes -->
<item quantity="other">%d דקות</item>
</plurals>
<plurals name="DUt_seconds">
<!-- plurals: seconds -->
<item quantity="one">שנייה אחת</item>
<!-- plurals: seconds -->
<item quantity="other">%d שניות</item>
</plurals>
<plurals name="DUt_hoursShort">
<!-- plurals: hours (abbreviated) -->
<item quantity="one">שעה</item>
<!-- plurals: hours (abbreviated) -->
<item quantity="other">%d שע\'</item>
</plurals>
<plurals name="DUt_minutesShort">
<!-- plurals: minutes (abbreviated) -->
<item quantity="one">דקה</item>
<!-- plurals: minutes (abbreviated) -->
<item quantity="other">%d דק׳</item>
</plurals>
<plurals name="DUt_secondsShort">
<!-- plurals: seconds (abbreviated) -->
<item quantity="one">שנייה</item>
<!-- plurals: seconds (abbreviated) -->
<item quantity="other">%d שנ\'</item>
</plurals>
<plurals name="Ntasks">
<!-- plurals: tasks -->
<item quantity="one">משימה אחת</item>
<!-- plurals: tasks -->
<item quantity="other">%d משימות</item>
</plurals>
<plurals name="Npeople">
<!-- plurals: people -->
<item quantity="one">שותף אחד</item>
<!-- plurals: people -->
<item quantity="other">%d שותפים</item>
</plurals>
<!-- slide 10a, 12c: today -->
<string name="today">היום</string>
<!-- tomorrow -->
<string name="tomorrow">מחר</string>
<!-- yesterday -->
<string name="yesterday">אתמול</string>
<!-- slide 12c: tomorrow, abbreviated -->
<string name="tmrw">מחר</string>
<!-- slide 12c: yesterday, abbreviated -->
<string name="yest">אתמול</string>
<!-- ================================================== Generic Dialogs == -->
<!-- confirmation dialog title -->
<string name="DLG_confirm_title">האם לאשר?</string>
<!-- question dialog title -->
<string name="DLG_question_title">שאלה:</string>
<!-- information dialog title -->
<string name="DLG_information_title">פרטים</string>
<!-- error dialog title -->
<string name="DLG_error_title">שגיאה!</string>
<!-- general dialog save-->
<string name="DLG_save">שמור</string>
<!-- general dialog yes-->
<string name="DLG_yes">כן</string>
<!-- general dialog no-->
<string name="DLG_no">לא</string>
<!-- general dialog close-->
<string name="DLG_close">סגור</string>
<!-- general dialog done -->
<string name="DLG_done">בוצע</string>
<!-- error dialog (%s => error message)-->
<string name="DLG_error">אוּפְּס, נראה שארעה שגיאה! הנה מה שקה:\n\n%s</string>
<!-- error dialog (no message indicated)-->
<string name="DLG_error_generic">אוּפְּס, נראה שארעה שגיאה!</string>
<!-- Progress dialog shown when doing something slow -->
<string name="DLG_wait">אנא המתן...</string>
<!-- ====================================================== SyncProvider == -->
<!-- Sync Notification: message when sync service active -->
<string name="SyP_progress">מסנכרן את המשימות שלך...</string>
<!-- Sync Notification: toast when sync activated from activity -->
<string name="SyP_progress_toast">מסנכרנת...</string>
<!-- Sync Label: used in menu to denote synchronization -->
<string name="SyP_label">סינכרון וגיבוי</string>
<!-- Sync Label: used in menu to denote synchronization -->
<string name="Sync_now_label">סנכרני כעת</string>
<!-- Sync label subtitle -->
<string name="SyP_summary">אתר אסטריד, ״משימות גוגל״, מידע שמור, גיבוי מקומי</string>
<!-- Error msg when io exception -->
<string name="SyP_ioerror">שגיאה בחיבור! בדוק את חיבור הַמִּרְשֶׁתֶת שלך</string>
<!-- ================================================== SyncPreferences == -->
<!-- Status Group Label -->
<string name="sync_SPr_group_status">מצב</string>
<!-- Sync status subtitle, %s-> status message -->
<string name="sync_SPr_status_subtitle">מצב: %s</string>
<!-- Sync Status: log in -->
<string name="sync_status_loggedout">לא מחובר</string>
<!-- Status: ongoing -->
<string name="sync_status_ongoing">הסינכרון מתבצע</string>
<!-- Sync Status: success status (%s -> last sync date). Keep it short!-->
<string name="sync_status_success">סנכרון אחרון:\n%s</string>
<!-- Sync Status: failure status (%s -> last attempted sync date) -->
<string name="sync_status_failed">נכשל ב: %s</string>
<!-- Sync Status: error status (%s -> last sync date) -->
<string name="sync_status_errors">סנכרון עם שגיאות: %s</string>
<!-- Sync Status: error subtitle (%s -> last successful sync date) -->
<string name="sync_status_failed_subtitle">סנכרון מוצלח אחרון: %s</string>
<!-- Sync Status: never sync\'d -->
<string name="sync_status_never">לעולם לא סונכרן!</string>
<!-- Options Group Label -->
<string name="sync_SPr_group_options">אפשרויות</string>
<!-- Preference: Synchronization Interval Title -->
<string name="sync_SPr_interval_title">סנכרון ברקע</string>
<!-- Preference: Synchronization Interval Description (when disabled) -->
<string name="sync_SPr_interval_desc_disabled">סנכרון ברקע אינו מופעל</string>
<!-- Preference: Synchronization Interval Description (%s => setting) -->
<string name="sync_SPr_interval_desc">כרגע מוגדר ל: %s</string>
<!-- Preference: Background Wifi Title -->
<string name="sync_SPr_bgwifi_title">הגדרת WiFi בלבד</string>
<!-- Preference: Background Wifi Description (enabled) -->
<string name="sync_SPr_bgwifi_desc_enabled">סנכרון רקע מתרחש רק כאשר על WiFi</string>
<!-- Preference: Background Wifi Description (disabled) -->
<string name="sync_SPr_bgwifi_desc_disabled">סנכרון רקע יתבצע תמיד</string>
<!-- Actions Group Label -->
<string name="sync_SPr_group_actions">פעולות</string>
<!-- Synchronize Now Button -->
<string name="sync_SPr_sync">מסנכרן כעת</string>
<!-- Synchronize Now Button if not logged in-->
<string name="sync_SPr_sync_log_in"> התחבר וסנכרן!</string>
<!-- Sync: Prefix string before logged in identifier -->
<string name="sync_SPr_logged_in_prefix">מחובר לחשבון בתור:</string>
<!-- Sync: Last error -->
<string name="sync_SPr_last_error">דו"ח מצב</string>
<!-- Sync: last error click for more -->
<string name="sync_SPr_last_error_subtitle">הקלק כדי לשלוח דוח לצוות של אסטריד</string>
<!-- Sync: send error report button -->
<string name="sync_SPr_send_report">שלח דו"ח</string>
<!-- Sync: Clear Data Title -->
<string name="sync_SPr_forget">התנתק</string>
<!-- Sync: Clear Data Description -->
<string name="sync_SPr_forget_description">מסיר את כל נתוני הסנכרון</string>
<!-- confirmation dialog for sync log out -->
<string name="sync_forget_confirm">צא מהחשבון \\ הסר נתוני סנכרון?</string>
<!-- Sync error: network connectivity problems. %s-> name of sync service-->
<string name="sync_error_offline">נתקלתי בבעית חיבור לרשת בזמן הסינכרון האחרון עם %s. אנא נסה מאוחר יותר.</string>
<string-array name="sync_SPr_interval_entries">
<!-- sync_SPr_interval_entries: Synchronization Intervals -->
<item>מִנְעִי</item>
<item>כל רבע שעה</item>
<item>כל חצי שעה</item>
<item>כל שעה</item>
<item>כל שלוש שעות</item>
<item>כל שש שעות</item>
<item>כל שתים עשרה שעות</item>
<item>כל יום</item>
<item>כל שלושה ימים</item>
<item>כל שבוע</item>
</string-array>
<resources>
<!-- ==================================================== Generic Units == -->
<plurals name="DUt_years">
<!-- plurals: years -->
<item quantity="one">שנה</item>
<!-- plurals: years -->
<item quantity="other">%d שנים</item>
</plurals>
<plurals name="DUt_months">
<!-- plurals: months -->
<item quantity="one">חודש</item>
<!-- plurals: months -->
<item quantity="other">%d חודשים</item>
</plurals>
<plurals name="DUt_weeks">
<!-- plurals: days -->
<item quantity="one">שבוע אחד</item>
<!-- plurals: days -->
<item quantity="other">%d שבועות</item>
</plurals>
<plurals name="DUt_days">
<!-- plurals: days -->
<item quantity="one">יום אחד</item>
<!-- plurals: days -->
<item quantity="other">%d ימים</item>
</plurals>
<plurals name="DUt_weekdays">
<!-- plurals: days -->
<item quantity="one">יום עבודה אחד</item>
<!-- plurals: days -->
<item quantity="other">%d ימי עבודה</item>
</plurals>
<plurals name="DUt_hours">
<!-- plurals: hours -->
<item quantity="one">שעה אחת</item>
<!-- plurals: hours -->
<item quantity="other">%d שעות</item>
</plurals>
<plurals name="DUt_minutes">
<!-- plurals: minutes -->
<item quantity="one">דקה אחת</item>
<!-- plurals: minutes -->
<item quantity="other">%d דקות</item>
</plurals>
<plurals name="DUt_seconds">
<!-- plurals: seconds -->
<item quantity="one">שנייה אחת</item>
<!-- plurals: seconds -->
<item quantity="other">%d שניות</item>
</plurals>
<plurals name="DUt_hoursShort">
<!-- plurals: hours (abbreviated) -->
<item quantity="one">שעה</item>
<!-- plurals: hours (abbreviated) -->
<item quantity="other">%d שע\'</item>
</plurals>
<plurals name="DUt_minutesShort">
<!-- plurals: minutes (abbreviated) -->
<item quantity="one">דקה</item>
<!-- plurals: minutes (abbreviated) -->
<item quantity="other">%d דק׳</item>
</plurals>
<plurals name="DUt_secondsShort">
<!-- plurals: seconds (abbreviated) -->
<item quantity="one">שנייה</item>
<!-- plurals: seconds (abbreviated) -->
<item quantity="other">%d שנ\'</item>
</plurals>
<plurals name="Ntasks">
<!-- plurals: tasks -->
<item quantity="one">משימה אחת</item>
<!-- plurals: tasks -->
<item quantity="other">%d משימות</item>
</plurals>
<plurals name="Npeople">
<!-- plurals: people -->
<item quantity="one">שותף אחד</item>
<!-- plurals: people -->
<item quantity="other">%d שותפים</item>
</plurals>
<!-- slide 10a, 12c: today -->
<string name="today">היום</string>
<!-- tomorrow -->
<string name="tomorrow">מחר</string>
<!-- yesterday -->
<string name="yesterday">אתמול</string>
<!-- slide 12c: tomorrow, abbreviated -->
<string name="tmrw">מחר</string>
<!-- slide 12c: yesterday, abbreviated -->
<string name="yest">אתמול</string>
<!-- ================================================== Generic Dialogs == -->
<!-- confirmation dialog title -->
<string name="DLG_confirm_title">האם לאשר?</string>
<!-- question dialog title -->
<string name="DLG_question_title">שאלה:</string>
<!-- information dialog title -->
<string name="DLG_information_title">פרטים</string>
<!-- error dialog title -->
<string name="DLG_error_title">שגיאה!</string>
<!-- general dialog save-->
<string name="DLG_save">שמור</string>
<!-- general dialog yes-->
<string name="DLG_yes">כן</string>
<!-- general dialog no-->
<string name="DLG_no">לא</string>
<!-- general dialog close-->
<string name="DLG_close">סגור</string>
<!-- general dialog done -->
<string name="DLG_done">בוצע</string>
<!-- error dialog (%s => error message)-->
<string name="DLG_error">אוּפְּס, נראה שארעה שגיאה! הנה מה שקה:\n\n%s</string>
<!-- error dialog (no message indicated)-->
<string name="DLG_error_generic">אוּפְּס, נראה שארעה שגיאה!</string>
<!-- Progress dialog shown when doing something slow -->
<string name="DLG_wait">אנא המתן...</string>
<!-- ====================================================== SyncProvider == -->
<!-- Sync Notification: message when sync service active -->
<string name="SyP_progress">מסנכרן את המשימות שלך...</string>
<!-- Sync Notification: toast when sync activated from activity -->
<string name="SyP_progress_toast">מסנכרנת...</string>
<!-- Sync Label: used in menu to denote synchronization -->
<string name="SyP_label">סינכרון וגיבוי</string>
<!-- Sync Label: used in menu to denote synchronization -->
<string name="Sync_now_label">סנכרני כעת</string>
<!-- Sync label subtitle -->
<string name="SyP_summary">אתר אסטריד, ״משימות גוגל״, מידע שמור, גיבוי מקומי</string>
<!-- Error msg when io exception -->
<string name="SyP_ioerror">שגיאה בחיבור! בדוק את חיבור הַמִּרְשֶׁתֶת שלך</string>
<!-- ================================================== SyncPreferences == -->
<!-- Status Group Label -->
<string name="sync_SPr_group_status">מצב</string>
<!-- Sync status subtitle, %s-> status message -->
<string name="sync_SPr_status_subtitle">מצב: %s</string>
<!-- Sync Status: log in -->
<string name="sync_status_loggedout">לא מחובר</string>
<!-- Status: ongoing -->
<string name="sync_status_ongoing">הסינכרון מתבצע</string>
<!-- Sync Status: success status (%s -> last sync date). Keep it short!-->
<string name="sync_status_success">סנכרון אחרון:\n%s</string>
<!-- Sync Status: failure status (%s -> last attempted sync date) -->
<string name="sync_status_failed">נכשל ב: %s</string>
<!-- Sync Status: error status (%s -> last sync date) -->
<string name="sync_status_errors">סנכרון עם שגיאות: %s</string>
<!-- Sync Status: error subtitle (%s -> last successful sync date) -->
<string name="sync_status_failed_subtitle">סנכרון מוצלח אחרון: %s</string>
<!-- Sync Status: never sync\'d -->
<string name="sync_status_never">לעולם לא סונכרן!</string>
<!-- Options Group Label -->
<string name="sync_SPr_group_options">אפשרויות</string>
<!-- Preference: Synchronization Interval Title -->
<string name="sync_SPr_interval_title">סנכרון ברקע</string>
<!-- Preference: Synchronization Interval Description (when disabled) -->
<string name="sync_SPr_interval_desc_disabled">סנכרון ברקע אינו מופעל</string>
<!-- Preference: Synchronization Interval Description (%s => setting) -->
<string name="sync_SPr_interval_desc">כרגע מוגדר ל: %s</string>
<!-- Preference: Background Wifi Title -->
<string name="sync_SPr_bgwifi_title">הגדרת WiFi בלבד</string>
<!-- Preference: Background Wifi Description (enabled) -->
<string name="sync_SPr_bgwifi_desc_enabled">סנכרון רקע מתרחש רק כאשר על WiFi</string>
<!-- Preference: Background Wifi Description (disabled) -->
<string name="sync_SPr_bgwifi_desc_disabled">סנכרון רקע יתבצע תמיד</string>
<!-- Actions Group Label -->
<string name="sync_SPr_group_actions">פעולות</string>
<!-- Synchronize Now Button -->
<string name="sync_SPr_sync">מסנכרן כעת</string>
<!-- Synchronize Now Button if not logged in-->
<string name="sync_SPr_sync_log_in">התחבר וסנכרן!</string>
<!-- Sync: Prefix string before logged in identifier -->
<string name="sync_SPr_logged_in_prefix">מחובר לחשבון בתור:</string>
<!-- Sync: Last error -->
<string name="sync_SPr_last_error">דו"ח מצב</string>
<!-- Sync: last error click for more -->
<string name="sync_SPr_last_error_subtitle">הקלק כדי לשלוח דוח לצוות של אסטריד</string>
<!-- Sync: send error report button -->
<string name="sync_SPr_send_report">שלח דו"ח</string>
<!-- Sync: Clear Data Title -->
<string name="sync_SPr_forget">התנתק</string>
<!-- Sync: Clear Data Description -->
<string name="sync_SPr_forget_description">מסיר את כל נתוני הסנכרון</string>
<!-- confirmation dialog for sync log out -->
<string name="sync_forget_confirm">צא מהחשבון \\ הסר נתוני סנכרון?</string>
<!-- Sync error: network connectivity problems. %s-> name of sync service-->
<string name="sync_error_offline">נתקלתי בבעית חיבור לרשת בזמן הסינכרון האחרון עם %s. אנא נסה
מאוחר יותר.
</string>
<string-array name="sync_SPr_interval_entries">
<!-- sync_SPr_interval_entries: Synchronization Intervals -->
<item>מִנְעִי</item>
<item>כל רבע שעה</item>
<item>כל חצי שעה</item>
<item>כל שעה</item>
<item>כל שלוש שעות</item>
<item>כל שש שעות</item>
<item>כל שתים עשרה שעות</item>
<item>כל יום</item>
<item>כל שלושה ימים</item>
<item>כל שבוע</item>
</string-array>
</resources>

@ -4,244 +4,247 @@
**
** See the file "LICENSE" for the full license governing this code.
-->
<resources xmlns:android="http://schemas.android.com/apk/res/android">
<!-- ==================================================== Generic Units == -->
<plurals name="DUt_years">
<!-- plurals: years -->
<item quantity="one">1年</item>
<!-- plurals: years -->
<item quantity="other">%d 年</item>
</plurals>
<plurals name="DUt_months">
<!-- plurals: months -->
<item quantity="one">1か月</item>
<!-- plurals: months -->
<item quantity="other">%d か月</item>
</plurals>
<plurals name="DUt_weeks">
<!-- plurals: days -->
<item quantity="one">1週間</item>
<!-- plurals: days -->
<item quantity="other">%d 週間</item>
</plurals>
<plurals name="DUt_days">
<!-- plurals: days -->
<item quantity="one">1 日</item>
<!-- plurals: days -->
<item quantity="other">%d 日</item>
</plurals>
<plurals name="DUt_weekdays">
<!-- plurals: days -->
<item quantity="one">1 Weekday</item>
<!-- plurals: days -->
<item quantity="other">%d Weekdays</item>
</plurals>
<plurals name="DUt_hours">
<!-- plurals: hours -->
<item quantity="one">1 時間</item>
<!-- plurals: hours -->
<item quantity="other">%d 時間</item>
</plurals>
<plurals name="DUt_minutes">
<!-- plurals: minutes -->
<item quantity="one">1 分</item>
<!-- plurals: minutes -->
<item quantity="other">%d 分</item>
</plurals>
<plurals name="DUt_seconds">
<!-- plurals: seconds -->
<item quantity="one">1 秒</item>
<!-- plurals: seconds -->
<item quantity="other">%d 秒</item>
</plurals>
<plurals name="DUt_hoursShort">
<!-- plurals: hours (abbreviated) -->
<item quantity="one">1 時間</item>
<!-- plurals: hours (abbreviated) -->
<item quantity="other">%d 時間</item>
</plurals>
<plurals name="DUt_minutesShort">
<!-- plurals: minutes (abbreviated) -->
<item quantity="one">1 分</item>
<!-- plurals: minutes (abbreviated) -->
<item quantity="other">%d 分</item>
</plurals>
<plurals name="DUt_secondsShort">
<!-- plurals: seconds (abbreviated) -->
<item quantity="one">1 秒</item>
<!-- plurals: seconds (abbreviated) -->
<item quantity="other">%d 秒</item>
</plurals>
<plurals name="Ntasks">
<!-- plurals: tasks -->
<item quantity="one">タスク 1 件</item>
<!-- plurals: tasks -->
<item quantity="other">タスク %d 件</item>
</plurals>
<plurals name="Npeople">
<!-- plurals: people -->
<item quantity="one">1人</item>
<!-- plurals: people -->
<item quantity="other">%d人</item>
</plurals>
<!-- slide 10a, 12c: today -->
<string name="today">Today</string>
<!-- tomorrow -->
<string name="tomorrow">Tomorrow</string>
<!-- yesterday -->
<string name="yesterday">昨日</string>
<!-- slide 12c: tomorrow, abbreviated -->
<string name="tmrw">明日</string>
<!-- slide 12c: yesterday, abbreviated -->
<string name="yest">昨日</string>
<!-- ================================================== Generic Dialogs == -->
<!-- confirmation dialog title -->
<string name="DLG_confirm_title">確認</string>
<!-- question dialog title -->
<string name="DLG_question_title">確認</string>
<!-- information dialog title -->
<string name="DLG_information_title">インフォメーション</string>
<!-- error dialog title -->
<string name="DLG_error_title">エラー</string>
<!-- general dialog save-->
<string name="DLG_save">保存</string>
<!-- general dialog yes-->
<string name="DLG_yes">はい</string>
<!-- general dialog no-->
<string name="DLG_no">いいえ</string>
<!-- general dialog close-->
<string name="DLG_close">閉じる</string>
<!-- general dialog done -->
<string name="DLG_done">完了</string>
<!-- error dialog (%s => error message)-->
<string name="DLG_error">Oops, looks like an error occurred! Here\'s what happened:\n\n%s</string>
<!-- error dialog (no message indicated)-->
<string name="DLG_error_generic">Oops, looks like an error occurred!</string>
<!-- Progress dialog shown when doing something slow -->
<string name="DLG_wait">お待ちください</string>
<!-- ====================================================== SyncProvider == -->
<!-- Sync Notification: message when sync service active -->
<string name="SyP_progress">タスクの同期中...</string>
<!-- Sync Notification: toast when sync activated from activity -->
<string name="SyP_progress_toast">同期中...</string>
<!-- Sync Label: used in menu to denote synchronization -->
<string name="SyP_label">同期</string>
<!-- Sync Label: used in menu to denote synchronization -->
<string name="Sync_now_label">Sync now</string>
<!-- Sync label subtitle -->
<string name="SyP_summary">Astrid.com, Google Tasks, saved data, local backup</string>
<!-- Error msg when io exception -->
<string name="SyP_ioerror">接続エラー!インターネットに接続できるか確認してください。</string>
<!-- ================================================== SyncPreferences == -->
<!-- Status Group Label -->
<string name="sync_SPr_group_status">状況</string>
<!-- Sync status subtitle, %s-> status message -->
<string name="sync_SPr_status_subtitle">Status: %s</string>
<!-- Sync Status: log in -->
<string name="sync_status_loggedout">Not logged in</string>
<!-- Status: ongoing -->
<string name="sync_status_ongoing">同期中</string>
<!-- Sync Status: success status (%s -> last sync date). Keep it short!-->
<string name="sync_status_success">前回の同期:\n%s</string>
<!-- Sync Status: failure status (%s -> last attempted sync date) -->
<string name="sync_status_failed">失敗: %s</string>
<!-- Sync Status: error status (%s -> last sync date) -->
<string name="sync_status_errors">Sync w/ errors: %s</string>
<!-- Sync Status: error subtitle (%s -> last successful sync date) -->
<string name="sync_status_failed_subtitle">最後の同期: %s</string>
<!-- Sync Status: never sync\'d -->
<string name="sync_status_never">同期していません</string>
<!-- Options Group Label -->
<string name="sync_SPr_group_options">オプション</string>
<!-- Preference: Synchronization Interval Title -->
<string name="sync_SPr_interval_title">バックグラウンド同期</string>
<!-- Preference: Synchronization Interval Description (when disabled) -->
<string name="sync_SPr_interval_desc_disabled">バックグラウンド同期は無効になっています</string>
<!-- Preference: Synchronization Interval Description (%s => setting) -->
<string name="sync_SPr_interval_desc">現在の設定: %s</string>
<!-- Preference: Background Wifi Title -->
<string name="sync_SPr_bgwifi_title">Wi-Fi のみ</string>
<!-- Preference: Background Wifi Description (enabled) -->
<string name="sync_SPr_bgwifi_desc_enabled">Wi-Fi が有効なときだけバックグラウンドで同期する</string>
<!-- Preference: Background Wifi Description (disabled) -->
<string name="sync_SPr_bgwifi_desc_disabled">Background synchronization will always occur</string>
<!-- Actions Group Label -->
<string name="sync_SPr_group_actions">アクション</string>
<!-- Synchronize Now Button -->
<string name="sync_SPr_sync">Synchronize now</string>
<!-- Synchronize Now Button if not logged in-->
<string name="sync_SPr_sync_log_in">ログインと同期</string>
<!-- Sync: Prefix string before logged in identifier -->
<string name="sync_SPr_logged_in_prefix">ログインアカウント:</string>
<!-- Sync: Last error -->
<string name="sync_SPr_last_error">Status report</string>
<!-- Sync: last error click for more -->
<string name="sync_SPr_last_error_subtitle">Click to send a report to the Astrid team</string>
<!-- Sync: send error report button -->
<string name="sync_SPr_send_report">Send report</string>
<!-- Sync: Clear Data Title -->
<string name="sync_SPr_forget">ログアウト</string>
<!-- Sync: Clear Data Description -->
<string name="sync_SPr_forget_description">すべての同期データを消去します</string>
<!-- confirmation dialog for sync log out -->
<string name="sync_forget_confirm">ログアウトと同期データを消去しますか?</string>
<!-- Sync error: network connectivity problems. %s-> name of sync service-->
<string name="sync_error_offline">There was a problem connecting to the network
during the last sync with %s. Please try again later.</string>
<string-array name="sync_SPr_interval_entries">
<!-- sync_SPr_interval_entries: Synchronization Intervals -->
<item>無効</item>
<item>15分毎</item>
<item>30分毎</item>
<item>1時間毎</item>
<item>3時間毎</item>
<item>6時間毎</item>
<item>12時間毎</item>
<item>毎日</item>
<item>3日に一度</item>
<item>毎週</item>
</string-array>
<resources>
<!-- ==================================================== Generic Units == -->
<plurals name="DUt_years">
<!-- plurals: years -->
<item quantity="one">1年</item>
<!-- plurals: years -->
<item quantity="other">%d 年</item>
</plurals>
<plurals name="DUt_months">
<!-- plurals: months -->
<item quantity="one">1か月</item>
<!-- plurals: months -->
<item quantity="other">%d か月</item>
</plurals>
<plurals name="DUt_weeks">
<!-- plurals: days -->
<item quantity="one">1週間</item>
<!-- plurals: days -->
<item quantity="other">%d 週間</item>
</plurals>
<plurals name="DUt_days">
<!-- plurals: days -->
<item quantity="one">1 日</item>
<!-- plurals: days -->
<item quantity="other">%d 日</item>
</plurals>
<plurals name="DUt_weekdays">
<!-- plurals: days -->
<item quantity="one">1 Weekday</item>
<!-- plurals: days -->
<item quantity="other">%d Weekdays</item>
</plurals>
<plurals name="DUt_hours">
<!-- plurals: hours -->
<item quantity="one">1 時間</item>
<!-- plurals: hours -->
<item quantity="other">%d 時間</item>
</plurals>
<plurals name="DUt_minutes">
<!-- plurals: minutes -->
<item quantity="one">1 分</item>
<!-- plurals: minutes -->
<item quantity="other">%d 分</item>
</plurals>
<plurals name="DUt_seconds">
<!-- plurals: seconds -->
<item quantity="one">1 秒</item>
<!-- plurals: seconds -->
<item quantity="other">%d 秒</item>
</plurals>
<plurals name="DUt_hoursShort">
<!-- plurals: hours (abbreviated) -->
<item quantity="one">1 時間</item>
<!-- plurals: hours (abbreviated) -->
<item quantity="other">%d 時間</item>
</plurals>
<plurals name="DUt_minutesShort">
<!-- plurals: minutes (abbreviated) -->
<item quantity="one">1 分</item>
<!-- plurals: minutes (abbreviated) -->
<item quantity="other">%d 分</item>
</plurals>
<plurals name="DUt_secondsShort">
<!-- plurals: seconds (abbreviated) -->
<item quantity="one">1 秒</item>
<!-- plurals: seconds (abbreviated) -->
<item quantity="other">%d 秒</item>
</plurals>
<plurals name="Ntasks">
<!-- plurals: tasks -->
<item quantity="one">タスク 1 件</item>
<!-- plurals: tasks -->
<item quantity="other">タスク %d 件</item>
</plurals>
<plurals name="Npeople">
<!-- plurals: people -->
<item quantity="one">1人</item>
<!-- plurals: people -->
<item quantity="other">%d人</item>
</plurals>
<!-- slide 10a, 12c: today -->
<string name="today">Today</string>
<!-- tomorrow -->
<string name="tomorrow">Tomorrow</string>
<!-- yesterday -->
<string name="yesterday">昨日</string>
<!-- slide 12c: tomorrow, abbreviated -->
<string name="tmrw">明日</string>
<!-- slide 12c: yesterday, abbreviated -->
<string name="yest">昨日</string>
<!-- ================================================== Generic Dialogs == -->
<!-- confirmation dialog title -->
<string name="DLG_confirm_title">確認</string>
<!-- question dialog title -->
<string name="DLG_question_title">確認</string>
<!-- information dialog title -->
<string name="DLG_information_title">インフォメーション</string>
<!-- error dialog title -->
<string name="DLG_error_title">エラー</string>
<!-- general dialog save-->
<string name="DLG_save">保存</string>
<!-- general dialog yes-->
<string name="DLG_yes">はい</string>
<!-- general dialog no-->
<string name="DLG_no">いいえ</string>
<!-- general dialog close-->
<string name="DLG_close">閉じる</string>
<!-- general dialog done -->
<string name="DLG_done">完了</string>
<!-- error dialog (%s => error message)-->
<string name="DLG_error">Oops, looks like an error occurred! Here\'s what happened:\n\n%s
</string>
<!-- error dialog (no message indicated)-->
<string name="DLG_error_generic">Oops, looks like an error occurred!</string>
<!-- Progress dialog shown when doing something slow -->
<string name="DLG_wait">お待ちください</string>
<!-- ====================================================== SyncProvider == -->
<!-- Sync Notification: message when sync service active -->
<string name="SyP_progress">タスクの同期中...</string>
<!-- Sync Notification: toast when sync activated from activity -->
<string name="SyP_progress_toast">同期中...</string>
<!-- Sync Label: used in menu to denote synchronization -->
<string name="SyP_label">同期</string>
<!-- Sync Label: used in menu to denote synchronization -->
<string name="Sync_now_label">Sync now</string>
<!-- Sync label subtitle -->
<string name="SyP_summary">Astrid.com, Google Tasks, saved data, local backup</string>
<!-- Error msg when io exception -->
<string name="SyP_ioerror">接続エラー!インターネットに接続できるか確認してください。</string>
<!-- ================================================== SyncPreferences == -->
<!-- Status Group Label -->
<string name="sync_SPr_group_status">状況</string>
<!-- Sync status subtitle, %s-> status message -->
<string name="sync_SPr_status_subtitle">Status: %s</string>
<!-- Sync Status: log in -->
<string name="sync_status_loggedout">Not logged in</string>
<!-- Status: ongoing -->
<string name="sync_status_ongoing">同期中</string>
<!-- Sync Status: success status (%s -> last sync date). Keep it short!-->
<string name="sync_status_success">前回の同期:\n%s</string>
<!-- Sync Status: failure status (%s -> last attempted sync date) -->
<string name="sync_status_failed">失敗: %s</string>
<!-- Sync Status: error status (%s -> last sync date) -->
<string name="sync_status_errors">Sync w/ errors: %s</string>
<!-- Sync Status: error subtitle (%s -> last successful sync date) -->
<string name="sync_status_failed_subtitle">最後の同期: %s</string>
<!-- Sync Status: never sync\'d -->
<string name="sync_status_never">同期していません</string>
<!-- Options Group Label -->
<string name="sync_SPr_group_options">オプション</string>
<!-- Preference: Synchronization Interval Title -->
<string name="sync_SPr_interval_title">バックグラウンド同期</string>
<!-- Preference: Synchronization Interval Description (when disabled) -->
<string name="sync_SPr_interval_desc_disabled">バックグラウンド同期は無効になっています</string>
<!-- Preference: Synchronization Interval Description (%s => setting) -->
<string name="sync_SPr_interval_desc">現在の設定: %s</string>
<!-- Preference: Background Wifi Title -->
<string name="sync_SPr_bgwifi_title">Wi-Fi のみ</string>
<!-- Preference: Background Wifi Description (enabled) -->
<string name="sync_SPr_bgwifi_desc_enabled">Wi-Fi が有効なときだけバックグラウンドで同期する</string>
<!-- Preference: Background Wifi Description (disabled) -->
<string name="sync_SPr_bgwifi_desc_disabled">Background synchronization will always occur
</string>
<!-- Actions Group Label -->
<string name="sync_SPr_group_actions">アクション</string>
<!-- Synchronize Now Button -->
<string name="sync_SPr_sync">Synchronize now</string>
<!-- Synchronize Now Button if not logged in-->
<string name="sync_SPr_sync_log_in">ログインと同期</string>
<!-- Sync: Prefix string before logged in identifier -->
<string name="sync_SPr_logged_in_prefix">ログインアカウント:</string>
<!-- Sync: Last error -->
<string name="sync_SPr_last_error">Status report</string>
<!-- Sync: last error click for more -->
<string name="sync_SPr_last_error_subtitle">Click to send a report to the Astrid team</string>
<!-- Sync: send error report button -->
<string name="sync_SPr_send_report">Send report</string>
<!-- Sync: Clear Data Title -->
<string name="sync_SPr_forget">ログアウト</string>
<!-- Sync: Clear Data Description -->
<string name="sync_SPr_forget_description">すべての同期データを消去します</string>
<!-- confirmation dialog for sync log out -->
<string name="sync_forget_confirm">ログアウトと同期データを消去しますか?</string>
<!-- Sync error: network connectivity problems. %s-> name of sync service-->
<string name="sync_error_offline">There was a problem connecting to the network
during the last sync with %s. Please try again later.
</string>
<string-array name="sync_SPr_interval_entries">
<!-- sync_SPr_interval_entries: Synchronization Intervals -->
<item>無効</item>
<item>15分毎</item>
<item>30分毎</item>
<item>1時間毎</item>
<item>3時間毎</item>
<item>6時間毎</item>
<item>12時間毎</item>
<item>毎日</item>
<item>3日に一度</item>
<item>毎週</item>
</string-array>
</resources>

@ -4,243 +4,243 @@
**
** See the file "LICENSE" for the full license governing this code.
-->
<resources xmlns:android="http://schemas.android.com/apk/res/android">
<!-- ==================================================== Generic Units == -->
<plurals name="DUt_years">
<!-- plurals: years -->
<item quantity="one">1년</item>
<!-- plurals: years -->
<item quantity="other">%d년</item>
</plurals>
<plurals name="DUt_months">
<!-- plurals: months -->
<item quantity="one">1개월</item>
<!-- plurals: months -->
<item quantity="other">%d개월</item>
</plurals>
<plurals name="DUt_weeks">
<!-- plurals: days -->
<item quantity="one">1주</item>
<!-- plurals: days -->
<item quantity="other">%d주</item>
</plurals>
<plurals name="DUt_days">
<!-- plurals: days -->
<item quantity="one">1일</item>
<!-- plurals: days -->
<item quantity="other">%d일</item>
</plurals>
<plurals name="DUt_weekdays">
<!-- plurals: days -->
<item quantity="one">주중 1일</item>
<!-- plurals: days -->
<item quantity="other">주중 %d일</item>
</plurals>
<plurals name="DUt_hours">
<!-- plurals: hours -->
<item quantity="one">1시간</item>
<!-- plurals: hours -->
<item quantity="other">%d시간</item>
</plurals>
<plurals name="DUt_minutes">
<!-- plurals: minutes -->
<item quantity="one">1분</item>
<!-- plurals: minutes -->
<item quantity="other">%d분</item>
</plurals>
<plurals name="DUt_seconds">
<!-- plurals: seconds -->
<item quantity="one">1초</item>
<!-- plurals: seconds -->
<item quantity="other">%d초</item>
</plurals>
<plurals name="DUt_hoursShort">
<!-- plurals: hours (abbreviated) -->
<item quantity="one">1시간</item>
<!-- plurals: hours (abbreviated) -->
<item quantity="other">%d시간</item>
</plurals>
<plurals name="DUt_minutesShort">
<!-- plurals: minutes (abbreviated) -->
<item quantity="one">1분</item>
<!-- plurals: minutes (abbreviated) -->
<item quantity="other">%d분</item>
</plurals>
<plurals name="DUt_secondsShort">
<!-- plurals: seconds (abbreviated) -->
<item quantity="one">1초</item>
<!-- plurals: seconds (abbreviated) -->
<item quantity="other">%d초</item>
</plurals>
<plurals name="Ntasks">
<!-- plurals: tasks -->
<item quantity="one">1 일정</item>
<!-- plurals: tasks -->
<item quantity="other">%d 일정</item>
</plurals>
<plurals name="Npeople">
<!-- plurals: people -->
<item quantity="one">1 사람</item>
<!-- plurals: people -->
<item quantity="other">%d 사람</item>
</plurals>
<!-- slide 10a, 12c: today -->
<string name="today">오늘</string>
<!-- tomorrow -->
<string name="tomorrow">내일</string>
<!-- yesterday -->
<string name="yesterday">어제</string>
<!-- slide 12c: tomorrow, abbreviated -->
<string name="tmrw">내일</string>
<!-- slide 12c: yesterday, abbreviated -->
<string name="yest">어제</string>
<!-- ================================================== Generic Dialogs == -->
<!-- confirmation dialog title -->
<string name="DLG_confirm_title">확인?</string>
<!-- question dialog title -->
<string name="DLG_question_title">질문:</string>
<!-- information dialog title -->
<string name="DLG_information_title">정보</string>
<!-- error dialog title -->
<string name="DLG_error_title">에러!</string>
<!-- general dialog save-->
<string name="DLG_save">저장</string>
<!-- general dialog yes-->
<string name="DLG_yes"></string>
<!-- general dialog no-->
<string name="DLG_no">아니요</string>
<!-- general dialog close-->
<string name="DLG_close">닫기</string>
<!-- general dialog done -->
<string name="DLG_done">마침</string>
<!-- error dialog (%s => error message)-->
<string name="DLG_error">에러가 발생한 것 같습니다! 발생한 에러는 다음과 같습니다:\n\n%s</string>
<!-- error dialog (no message indicated)-->
<string name="DLG_error_generic">에러가 발생한 것 같습니다!</string>
<!-- Progress dialog shown when doing something slow -->
<string name="DLG_wait">잠시 기다리세요...</string>
<!-- ====================================================== SyncProvider == -->
<!-- Sync Notification: message when sync service active -->
<string name="SyP_progress">일정을 동기화 중입니다...</string>
<!-- Sync Notification: toast when sync activated from activity -->
<string name="SyP_progress_toast">동기화하는 중...</string>
<!-- Sync Label: used in menu to denote synchronization -->
<string name="SyP_label">동기화 &amp; 백업</string>
<!-- Sync Label: used in menu to denote synchronization -->
<string name="Sync_now_label">지금 동기화하기</string>
<!-- Sync label subtitle -->
<string name="SyP_summary">Astrid.com, 구글 일정, 저장한 자료, 로컬 백업</string>
<!-- Error msg when io exception -->
<string name="SyP_ioerror">연결 오류! 인터넷 연결을 확인하세요.</string>
<!-- ================================================== SyncPreferences == -->
<!-- Status Group Label -->
<string name="sync_SPr_group_status">상태</string>
<!-- Sync status subtitle, %s-> status message -->
<string name="sync_SPr_status_subtitle">상태: %s</string>
<!-- Sync Status: log in -->
<string name="sync_status_loggedout">로그인 안 됨</string>
<!-- Status: ongoing -->
<string name="sync_status_ongoing">동기화 진행 중...</string>
<!-- Sync Status: success status (%s -> last sync date). Keep it short!-->
<string name="sync_status_success">마지막 동기화: \n%s</string>
<!-- Sync Status: failure status (%s -> last attempted sync date) -->
<string name="sync_status_failed">실패: %s</string>
<!-- Sync Status: error status (%s -> last sync date) -->
<string name="sync_status_errors">동기화 중 에러: %s</string>
<!-- Sync Status: error subtitle (%s -> last successful sync date) -->
<string name="sync_status_failed_subtitle">마지막 동기화 성공시간: %s</string>
<!-- Sync Status: never sync\'d -->
<string name="sync_status_never">동기화 한 적이 없습니다!</string>
<!-- Options Group Label -->
<string name="sync_SPr_group_options">설정</string>
<!-- Preference: Synchronization Interval Title -->
<string name="sync_SPr_interval_title">백그라운드 동기화</string>
<!-- Preference: Synchronization Interval Description (when disabled) -->
<string name="sync_SPr_interval_desc_disabled">백그라운드 동기화를 사용하지 않습니다.</string>
<!-- Preference: Synchronization Interval Description (%s => setting) -->
<string name="sync_SPr_interval_desc">현재 설정: %s</string>
<!-- Preference: Background Wifi Title -->
<string name="sync_SPr_bgwifi_title">WiFi 설정</string>
<!-- Preference: Background Wifi Description (enabled) -->
<string name="sync_SPr_bgwifi_desc_enabled">백그라운드 동기화는 WiFi 지역에서만 작동합니다.</string>
<!-- Preference: Background Wifi Description (disabled) -->
<string name="sync_SPr_bgwifi_desc_disabled">백그라운드 동기화는 항상 작동합니다.</string>
<!-- Actions Group Label -->
<string name="sync_SPr_group_actions">동작</string>
<!-- Synchronize Now Button -->
<string name="sync_SPr_sync">지금 동기화하기</string>
<!-- Synchronize Now Button if not logged in-->
<string name="sync_SPr_sync_log_in">로그인 &amp; 동기화!</string>
<!-- Sync: Prefix string before logged in identifier -->
<string name="sync_SPr_logged_in_prefix">로그인하기:</string>
<!-- Sync: Last error -->
<string name="sync_SPr_last_error">상태 보고</string>
<!-- Sync: last error click for more -->
<string name="sync_SPr_last_error_subtitle">아스트리드 팀에게 보고서를 보내려면 클릭하세요</string>
<!-- Sync: send error report button -->
<string name="sync_SPr_send_report">보고서 보내기</string>
<!-- Sync: Clear Data Title -->
<string name="sync_SPr_forget">로그아웃</string>
<!-- Sync: Clear Data Description -->
<string name="sync_SPr_forget_description">모든 동기화 자료 삭제</string>
<!-- confirmation dialog for sync log out -->
<string name="sync_forget_confirm">로그아웃 / 모든 동기화 데이터 삭제?</string>
<!-- Sync error: network connectivity problems. %s-> name of sync service-->
<string name="sync_error_offline">%s 과 마지막 동기화 중에 네트워크 연결 문제가 있었습니다.나중에 다시 시도해 주세요.</string>
<string-array name="sync_SPr_interval_entries">
<!-- sync_SPr_interval_entries: Synchronization Intervals -->
<item>사용안함</item>
<item>15분마다</item>
<item>30분마다</item>
<item>매시간</item>
<item>3시간마다</item>
<item>6시간마다</item>
<item>12시간마다</item>
<item>매일</item>
<item>3일마다</item>
<item>일주일마다</item>
</string-array>
<resources>
<!-- ==================================================== Generic Units == -->
<plurals name="DUt_years">
<!-- plurals: years -->
<item quantity="one">1년</item>
<!-- plurals: years -->
<item quantity="other">%d년</item>
</plurals>
<plurals name="DUt_months">
<!-- plurals: months -->
<item quantity="one">1개월</item>
<!-- plurals: months -->
<item quantity="other">%d개월</item>
</plurals>
<plurals name="DUt_weeks">
<!-- plurals: days -->
<item quantity="one">1주</item>
<!-- plurals: days -->
<item quantity="other">%d주</item>
</plurals>
<plurals name="DUt_days">
<!-- plurals: days -->
<item quantity="one">1일</item>
<!-- plurals: days -->
<item quantity="other">%d일</item>
</plurals>
<plurals name="DUt_weekdays">
<!-- plurals: days -->
<item quantity="one">주중 1일</item>
<!-- plurals: days -->
<item quantity="other">주중 %d일</item>
</plurals>
<plurals name="DUt_hours">
<!-- plurals: hours -->
<item quantity="one">1시간</item>
<!-- plurals: hours -->
<item quantity="other">%d시간</item>
</plurals>
<plurals name="DUt_minutes">
<!-- plurals: minutes -->
<item quantity="one">1분</item>
<!-- plurals: minutes -->
<item quantity="other">%d분</item>
</plurals>
<plurals name="DUt_seconds">
<!-- plurals: seconds -->
<item quantity="one">1초</item>
<!-- plurals: seconds -->
<item quantity="other">%d초</item>
</plurals>
<plurals name="DUt_hoursShort">
<!-- plurals: hours (abbreviated) -->
<item quantity="one">1시간</item>
<!-- plurals: hours (abbreviated) -->
<item quantity="other">%d시간</item>
</plurals>
<plurals name="DUt_minutesShort">
<!-- plurals: minutes (abbreviated) -->
<item quantity="one">1분</item>
<!-- plurals: minutes (abbreviated) -->
<item quantity="other">%d분</item>
</plurals>
<plurals name="DUt_secondsShort">
<!-- plurals: seconds (abbreviated) -->
<item quantity="one">1초</item>
<!-- plurals: seconds (abbreviated) -->
<item quantity="other">%d초</item>
</plurals>
<plurals name="Ntasks">
<!-- plurals: tasks -->
<item quantity="one">1 일정</item>
<!-- plurals: tasks -->
<item quantity="other">%d 일정</item>
</plurals>
<plurals name="Npeople">
<!-- plurals: people -->
<item quantity="one">1 사람</item>
<!-- plurals: people -->
<item quantity="other">%d 사람</item>
</plurals>
<!-- slide 10a, 12c: today -->
<string name="today">오늘</string>
<!-- tomorrow -->
<string name="tomorrow">내일</string>
<!-- yesterday -->
<string name="yesterday">어제</string>
<!-- slide 12c: tomorrow, abbreviated -->
<string name="tmrw">내일</string>
<!-- slide 12c: yesterday, abbreviated -->
<string name="yest">어제</string>
<!-- ================================================== Generic Dialogs == -->
<!-- confirmation dialog title -->
<string name="DLG_confirm_title">확인?</string>
<!-- question dialog title -->
<string name="DLG_question_title">질문:</string>
<!-- information dialog title -->
<string name="DLG_information_title">정보</string>
<!-- error dialog title -->
<string name="DLG_error_title">에러!</string>
<!-- general dialog save-->
<string name="DLG_save">저장</string>
<!-- general dialog yes-->
<string name="DLG_yes"></string>
<!-- general dialog no-->
<string name="DLG_no">아니요</string>
<!-- general dialog close-->
<string name="DLG_close">닫기</string>
<!-- general dialog done -->
<string name="DLG_done">마침</string>
<!-- error dialog (%s => error message)-->
<string name="DLG_error">에러가 발생한 것 같습니다! 발생한 에러는 다음과 같습니다:\n\n%s</string>
<!-- error dialog (no message indicated)-->
<string name="DLG_error_generic">에러가 발생한 것 같습니다!</string>
<!-- Progress dialog shown when doing something slow -->
<string name="DLG_wait">잠시 기다리세요...</string>
<!-- ====================================================== SyncProvider == -->
<!-- Sync Notification: message when sync service active -->
<string name="SyP_progress">일정을 동기화 중입니다...</string>
<!-- Sync Notification: toast when sync activated from activity -->
<string name="SyP_progress_toast">동기화하는 중...</string>
<!-- Sync Label: used in menu to denote synchronization -->
<string name="SyP_label">동기화 &amp; 백업</string>
<!-- Sync Label: used in menu to denote synchronization -->
<string name="Sync_now_label">지금 동기화하기</string>
<!-- Sync label subtitle -->
<string name="SyP_summary">Astrid.com, 구글 일정, 저장한 자료, 로컬 백업</string>
<!-- Error msg when io exception -->
<string name="SyP_ioerror">연결 오류! 인터넷 연결을 확인하세요.</string>
<!-- ================================================== SyncPreferences == -->
<!-- Status Group Label -->
<string name="sync_SPr_group_status">상태</string>
<!-- Sync status subtitle, %s-> status message -->
<string name="sync_SPr_status_subtitle">상태: %s</string>
<!-- Sync Status: log in -->
<string name="sync_status_loggedout">로그인 안 됨</string>
<!-- Status: ongoing -->
<string name="sync_status_ongoing">동기화 진행 중...</string>
<!-- Sync Status: success status (%s -> last sync date). Keep it short!-->
<string name="sync_status_success">마지막 동기화: \n%s</string>
<!-- Sync Status: failure status (%s -> last attempted sync date) -->
<string name="sync_status_failed">실패: %s</string>
<!-- Sync Status: error status (%s -> last sync date) -->
<string name="sync_status_errors">동기화 중 에러: %s</string>
<!-- Sync Status: error subtitle (%s -> last successful sync date) -->
<string name="sync_status_failed_subtitle">마지막 동기화 성공시간: %s</string>
<!-- Sync Status: never sync\'d -->
<string name="sync_status_never">동기화 한 적이 없습니다!</string>
<!-- Options Group Label -->
<string name="sync_SPr_group_options">설정</string>
<!-- Preference: Synchronization Interval Title -->
<string name="sync_SPr_interval_title">백그라운드 동기화</string>
<!-- Preference: Synchronization Interval Description (when disabled) -->
<string name="sync_SPr_interval_desc_disabled">백그라운드 동기화를 사용하지 않습니다.</string>
<!-- Preference: Synchronization Interval Description (%s => setting) -->
<string name="sync_SPr_interval_desc">현재 설정: %s</string>
<!-- Preference: Background Wifi Title -->
<string name="sync_SPr_bgwifi_title">WiFi 설정</string>
<!-- Preference: Background Wifi Description (enabled) -->
<string name="sync_SPr_bgwifi_desc_enabled">백그라운드 동기화는 WiFi 지역에서만 작동합니다.</string>
<!-- Preference: Background Wifi Description (disabled) -->
<string name="sync_SPr_bgwifi_desc_disabled">백그라운드 동기화는 항상 작동합니다.</string>
<!-- Actions Group Label -->
<string name="sync_SPr_group_actions">동작</string>
<!-- Synchronize Now Button -->
<string name="sync_SPr_sync">지금 동기화하기</string>
<!-- Synchronize Now Button if not logged in-->
<string name="sync_SPr_sync_log_in">로그인 &amp; 동기화!</string>
<!-- Sync: Prefix string before logged in identifier -->
<string name="sync_SPr_logged_in_prefix">로그인하기:</string>
<!-- Sync: Last error -->
<string name="sync_SPr_last_error">상태 보고</string>
<!-- Sync: last error click for more -->
<string name="sync_SPr_last_error_subtitle">아스트리드 팀에게 보고서를 보내려면 클릭하세요</string>
<!-- Sync: send error report button -->
<string name="sync_SPr_send_report">보고서 보내기</string>
<!-- Sync: Clear Data Title -->
<string name="sync_SPr_forget">로그아웃</string>
<!-- Sync: Clear Data Description -->
<string name="sync_SPr_forget_description">모든 동기화 자료 삭제</string>
<!-- confirmation dialog for sync log out -->
<string name="sync_forget_confirm">로그아웃 / 모든 동기화 데이터 삭제?</string>
<!-- Sync error: network connectivity problems. %s-> name of sync service-->
<string name="sync_error_offline">%s 과 마지막 동기화 중에 네트워크 연결 문제가 있었습니다.나중에 다시 시도해 주세요.</string>
<string-array name="sync_SPr_interval_entries">
<!-- sync_SPr_interval_entries: Synchronization Intervals -->
<item>사용안함</item>
<item>15분마다</item>
<item>30분마다</item>
<item>매시간</item>
<item>3시간마다</item>
<item>6시간마다</item>
<item>12시간마다</item>
<item>매일</item>
<item>3일마다</item>
<item>일주일마다</item>
</string-array>
</resources>

@ -1,102 +1,104 @@
<?xml version='1.0' encoding='utf-8'?>
<resources>
<plurals name="DUt_years">
<item quantity="one">1 år</item>
<item quantity="other">%d år</item>
</plurals>
<plurals name="DUt_months">
<item quantity="one">1 måned</item>
<item quantity="other">%d måneder</item>
</plurals>
<plurals name="DUt_weeks">
<item quantity="one">1 uke</item>
<item quantity="other">%d uker</item>
</plurals>
<plurals name="DUt_days">
<item quantity="one">1 dag</item>
<item quantity="other">%d dager</item>
</plurals>
<plurals name="DUt_weekdays">
<item quantity="one">1 ukesdag</item>
<item quantity="other">%d Weekdays</item>
</plurals>
<plurals name="DUt_hours">
<item quantity="one">1 time</item>
<item quantity="other">%d timer</item>
</plurals>
<plurals name="DUt_minutes">
<item quantity="one">1 minutt</item>
<item quantity="other">%d minutter</item>
</plurals>
<plurals name="DUt_seconds">
<item quantity="one">1 sekund</item>
<item quantity="other">%d sekunder</item>
</plurals>
<plurals name="DUt_hoursShort">
<item quantity="one">1 t</item>
<item quantity="other">%d t</item>
</plurals>
<plurals name="DUt_minutesShort">
<item quantity="one">1 min</item>
<item quantity="other">%d min</item>
</plurals>
<plurals name="DUt_secondsShort">
<item quantity="one">1 s</item>
<item quantity="other">%d s</item>
</plurals>
<plurals name="Ntasks">
<item quantity="one">1 oppgave</item>
<item quantity="other">%d oppgaver</item>
</plurals>
<plurals name="Npeople">
<item quantity="one">1 person</item>
<item quantity="other">%d people</item>
</plurals>
<string name="today">I dag</string>
<string name="tomorrow">I morgen</string>
<string name="yesterday">I går</string>
<string name="DLG_confirm_title">Bekreft?</string>
<string name="DLG_question_title">Spørsmål:</string>
<string name="DLG_information_title">Informasjon</string>
<string name="DLG_error_title">Feil!</string>
<string name="DLG_save">Lagre</string>
<string name="DLG_yes">Ja</string>
<string name="DLG_no">Nei</string>
<string name="DLG_close">Lukk</string>
<string name="DLG_done">Utført</string>
<string name="DLG_error">Oi, det oppstod en feil! Dette skjedde:\n\n%s</string>
<string name="DLG_error_generic">Oi, det oppstod en feil!</string>
<string name="DLG_wait">Vennligst vent...</string>
<string name="SyP_progress">Synkroniserer oppgavene dine...</string>
<string name="SyP_progress_toast">Synkroniserer...</string>
<string name="SyP_ioerror">Tilkoblingsfeil! Kontroller tilkoblingen til Internett</string>
<string name="sync_status_ongoing">Synkronisering pågår...</string>
<string name="sync_status_success">Siste synkronisering:\n%s</string>
<string name="sync_status_failed">Mislykket: %s</string>
<string name="sync_status_failed_subtitle">Siste vellykkede synkronisering: %s</string>
<string name="sync_status_never">Aldri synkronisert!</string>
<string name="sync_SPr_group_options">Alternativer</string>
<string name="sync_SPr_interval_title">Bakgrunnssynkronisering</string>
<string name="sync_SPr_interval_desc_disabled">Bakgrunnssynkronisering er deaktivert</string>
<string name="sync_SPr_interval_desc">Aktuell innstilling: %s</string>
<string name="sync_SPr_bgwifi_title">Bare Wifi Innstilling</string>
<string name="sync_SPr_bgwifi_desc_enabled">Bakgrunnssynkronisering skjer kun med Wifi-tilkobling</string>
<string name="sync_SPr_bgwifi_desc_disabled">Bakgrunnssynkronisering skjer alltid</string>
<string name="sync_SPr_group_actions">Handlinger</string>
<string name="sync_SPr_sync_log_in">Logg inn &amp; Synkroniser!</string>
<string name="sync_SPr_forget">Logg ut</string>
<string name="sync_SPr_forget_description">Sletter all synkroniseringsdata</string>
<string name="sync_forget_confirm">Logg ut / slett synkroniseringsdata?</string>
<string-array name="sync_SPr_interval_entries">
<item>deaktiver</item>
<item>hvert kvarter</item>
<item>hver halvtime</item>
<item>hver time</item>
<item>hver tredje time</item>
<item>hver sjette time</item>
<item>hver tolvte time</item>
<item>daglig</item>
<item>hver tredje dag</item>
<item>hver uke</item>
</string-array>
<plurals name="DUt_years">
<item quantity="one">1 år</item>
<item quantity="other">%d år</item>
</plurals>
<plurals name="DUt_months">
<item quantity="one">1 måned</item>
<item quantity="other">%d måneder</item>
</plurals>
<plurals name="DUt_weeks">
<item quantity="one">1 uke</item>
<item quantity="other">%d uker</item>
</plurals>
<plurals name="DUt_days">
<item quantity="one">1 dag</item>
<item quantity="other">%d dager</item>
</plurals>
<plurals name="DUt_weekdays">
<item quantity="one">1 ukesdag</item>
<item quantity="other">%d Weekdays</item>
</plurals>
<plurals name="DUt_hours">
<item quantity="one">1 time</item>
<item quantity="other">%d timer</item>
</plurals>
<plurals name="DUt_minutes">
<item quantity="one">1 minutt</item>
<item quantity="other">%d minutter</item>
</plurals>
<plurals name="DUt_seconds">
<item quantity="one">1 sekund</item>
<item quantity="other">%d sekunder</item>
</plurals>
<plurals name="DUt_hoursShort">
<item quantity="one">1 t</item>
<item quantity="other">%d t</item>
</plurals>
<plurals name="DUt_minutesShort">
<item quantity="one">1 min</item>
<item quantity="other">%d min</item>
</plurals>
<plurals name="DUt_secondsShort">
<item quantity="one">1 s</item>
<item quantity="other">%d s</item>
</plurals>
<plurals name="Ntasks">
<item quantity="one">1 oppgave</item>
<item quantity="other">%d oppgaver</item>
</plurals>
<plurals name="Npeople">
<item quantity="one">1 person</item>
<item quantity="other">%d people</item>
</plurals>
<string name="today">I dag</string>
<string name="tomorrow">I morgen</string>
<string name="yesterday">I går</string>
<string name="DLG_confirm_title">Bekreft?</string>
<string name="DLG_question_title">Spørsmål:</string>
<string name="DLG_information_title">Informasjon</string>
<string name="DLG_error_title">Feil!</string>
<string name="DLG_save">Lagre</string>
<string name="DLG_yes">Ja</string>
<string name="DLG_no">Nei</string>
<string name="DLG_close">Lukk</string>
<string name="DLG_done">Utført</string>
<string name="DLG_error">Oi, det oppstod en feil! Dette skjedde:\n\n%s</string>
<string name="DLG_error_generic">Oi, det oppstod en feil!</string>
<string name="DLG_wait">Vennligst vent...</string>
<string name="SyP_progress">Synkroniserer oppgavene dine...</string>
<string name="SyP_progress_toast">Synkroniserer...</string>
<string name="SyP_ioerror">Tilkoblingsfeil! Kontroller tilkoblingen til Internett</string>
<string name="sync_status_ongoing">Synkronisering pågår...</string>
<string name="sync_status_success">Siste synkronisering:\n%s</string>
<string name="sync_status_failed">Mislykket: %s</string>
<string name="sync_status_failed_subtitle">Siste vellykkede synkronisering: %s</string>
<string name="sync_status_never">Aldri synkronisert!</string>
<string name="sync_SPr_group_options">Alternativer</string>
<string name="sync_SPr_interval_title">Bakgrunnssynkronisering</string>
<string name="sync_SPr_interval_desc_disabled">Bakgrunnssynkronisering er deaktivert</string>
<string name="sync_SPr_interval_desc">Aktuell innstilling: %s</string>
<string name="sync_SPr_bgwifi_title">Bare Wifi Innstilling</string>
<string name="sync_SPr_bgwifi_desc_enabled">Bakgrunnssynkronisering skjer kun med
Wifi-tilkobling
</string>
<string name="sync_SPr_bgwifi_desc_disabled">Bakgrunnssynkronisering skjer alltid</string>
<string name="sync_SPr_group_actions">Handlinger</string>
<string name="sync_SPr_sync_log_in">Logg inn &amp; Synkroniser!</string>
<string name="sync_SPr_forget">Logg ut</string>
<string name="sync_SPr_forget_description">Sletter all synkroniseringsdata</string>
<string name="sync_forget_confirm">Logg ut / slett synkroniseringsdata?</string>
<string-array name="sync_SPr_interval_entries">
<item>deaktiver</item>
<item>hvert kvarter</item>
<item>hver halvtime</item>
<item>hver time</item>
<item>hver tredje time</item>
<item>hver sjette time</item>
<item>hver tolvte time</item>
<item>daglig</item>
<item>hver tredje dag</item>
<item>hver uke</item>
</string-array>
</resources>

@ -4,243 +4,248 @@
**
** See the file "LICENSE" for the full license governing this code.
-->
<resources xmlns:android="http://schemas.android.com/apk/res/android">
<!-- ==================================================== Generic Units == -->
<plurals name="DUt_years">
<!-- plurals: years -->
<item quantity="one">1 jaar</item>
<!-- plurals: years -->
<item quantity="other">%d jaren</item>
</plurals>
<plurals name="DUt_months">
<!-- plurals: months -->
<item quantity="one">1 maand</item>
<!-- plurals: months -->
<item quantity="other">%d maanden</item>
</plurals>
<plurals name="DUt_weeks">
<!-- plurals: days -->
<item quantity="one">1 week</item>
<!-- plurals: days -->
<item quantity="other">%d weken</item>
</plurals>
<plurals name="DUt_days">
<!-- plurals: days -->
<item quantity="one">1 dag</item>
<!-- plurals: days -->
<item quantity="other">%d dagen</item>
</plurals>
<plurals name="DUt_weekdays">
<!-- plurals: days -->
<item quantity="one">1 weekdag</item>
<!-- plurals: days -->
<item quantity="other">%d weekdagen</item>
</plurals>
<plurals name="DUt_hours">
<!-- plurals: hours -->
<item quantity="one">1 uur</item>
<!-- plurals: hours -->
<item quantity="other">%d uren</item>
</plurals>
<plurals name="DUt_minutes">
<!-- plurals: minutes -->
<item quantity="one">1 minuut</item>
<!-- plurals: minutes -->
<item quantity="other">%d minuten</item>
</plurals>
<plurals name="DUt_seconds">
<!-- plurals: seconds -->
<item quantity="one">1 seconde</item>
<!-- plurals: seconds -->
<item quantity="other">%d seconden</item>
</plurals>
<plurals name="DUt_hoursShort">
<!-- plurals: hours (abbreviated) -->
<item quantity="one">1 u.</item>
<!-- plurals: hours (abbreviated) -->
<item quantity="other">%d u.</item>
</plurals>
<plurals name="DUt_minutesShort">
<!-- plurals: minutes (abbreviated) -->
<item quantity="one">1 m.</item>
<!-- plurals: minutes (abbreviated) -->
<item quantity="other">%d m.</item>
</plurals>
<plurals name="DUt_secondsShort">
<!-- plurals: seconds (abbreviated) -->
<item quantity="one">1 s.</item>
<!-- plurals: seconds (abbreviated) -->
<item quantity="other">%d s.</item>
</plurals>
<plurals name="Ntasks">
<!-- plurals: tasks -->
<item quantity="one">1 taak</item>
<!-- plurals: tasks -->
<item quantity="other">%d taken</item>
</plurals>
<plurals name="Npeople">
<!-- plurals: people -->
<item quantity="one">1 persoon</item>
<!-- plurals: people -->
<item quantity="other">%d personen</item>
</plurals>
<!-- slide 10a, 12c: today -->
<string name="today">Vandaag</string>
<!-- tomorrow -->
<string name="tomorrow">Morgen</string>
<!-- yesterday -->
<string name="yesterday">Gisteren</string>
<!-- slide 12c: tomorrow, abbreviated -->
<string name="tmrw">mrgn</string>
<!-- slide 12c: yesterday, abbreviated -->
<string name="yest">gisteren</string>
<!-- ================================================== Generic Dialogs == -->
<!-- confirmation dialog title -->
<string name="DLG_confirm_title">OK?</string>
<!-- question dialog title -->
<string name="DLG_question_title">Vraag:</string>
<!-- information dialog title -->
<string name="DLG_information_title">Informatie</string>
<!-- error dialog title -->
<string name="DLG_error_title">Fout!</string>
<!-- general dialog save-->
<string name="DLG_save">Opslaan</string>
<!-- general dialog yes-->
<string name="DLG_yes">Ja</string>
<!-- general dialog no-->
<string name="DLG_no">Nee</string>
<!-- general dialog close-->
<string name="DLG_close">Sluit</string>
<!-- general dialog done -->
<string name="DLG_done">Gedaan</string>
<!-- error dialog (%s => error message)-->
<string name="DLG_error">Er is een fout opgetreden:\n\n%s</string>
<!-- error dialog (no message indicated)-->
<string name="DLG_error_generic">Er is een fout opgetreden!</string>
<!-- Progress dialog shown when doing something slow -->
<string name="DLG_wait">Even geduld a.u.b.</string>
<!-- ====================================================== SyncProvider == -->
<!-- Sync Notification: message when sync service active -->
<string name="SyP_progress">Taken synchroniseren...</string>
<!-- Sync Notification: toast when sync activated from activity -->
<string name="SyP_progress_toast">Synchroniseren…</string>
<!-- Sync Label: used in menu to denote synchronization -->
<string name="SyP_label">Synchronisatie</string>
<!-- Sync Label: used in menu to denote synchronization -->
<string name="Sync_now_label">Nu synchroniseren</string>
<!-- Sync label subtitle -->
<string name="SyP_summary">Astrid.com, Google Taken, opgeslagen data, lokale back-up</string>
<!-- Error msg when io exception -->
<string name="SyP_ioerror">Verbindingsfout! Controleer de internetverbinding</string>
<!-- ================================================== SyncPreferences == -->
<!-- Status Group Label -->
<string name="sync_SPr_group_status">Status</string>
<!-- Sync status subtitle, %s-> status message -->
<string name="sync_SPr_status_subtitle">Status: %s</string>
<!-- Sync Status: log in -->
<string name="sync_status_loggedout">Niet aangemeld</string>
<!-- Status: ongoing -->
<string name="sync_status_ongoing">Synchronisatie bezig...</string>
<!-- Sync Status: success status (%s -> last sync date). Keep it short!-->
<string name="sync_status_success">Vorige:\n%s</string>
<!-- Sync Status: failure status (%s -> last attempted sync date) -->
<string name="sync_status_failed">Mislukt op: %s</string>
<!-- Sync Status: error status (%s -> last sync date) -->
<string name="sync_status_errors">Gesync. met fouten: %s</string>
<!-- Sync Status: error subtitle (%s -> last successful sync date) -->
<string name="sync_status_failed_subtitle">Gelukt op: %s</string>
<!-- Sync Status: never sync\'d -->
<string name="sync_status_never">Nooit gesynct!</string>
<!-- Options Group Label -->
<string name="sync_SPr_group_options">Opties</string>
<!-- Preference: Synchronization Interval Title -->
<string name="sync_SPr_interval_title">Achtergrond synchronisatie</string>
<!-- Preference: Synchronization Interval Description (when disabled) -->
<string name="sync_SPr_interval_desc_disabled">Achtergrond synchronisatie uitgeschakeld</string>
<!-- Preference: Synchronization Interval Description (%s => setting) -->
<string name="sync_SPr_interval_desc">Huidige instelling: %s</string>
<!-- Preference: Background Wifi Title -->
<string name="sync_SPr_bgwifi_title">Alleen via WiFi</string>
<!-- Preference: Background Wifi Description (enabled) -->
<string name="sync_SPr_bgwifi_desc_enabled">Achtergrond synchronisatie alleen met WiFi aan</string>
<!-- Preference: Background Wifi Description (disabled) -->
<string name="sync_SPr_bgwifi_desc_disabled">Achtergrond synchronisatie altijd aan</string>
<!-- Actions Group Label -->
<string name="sync_SPr_group_actions">Acties</string>
<!-- Synchronize Now Button -->
<string name="sync_SPr_sync">Nu synchroniseren</string>
<!-- Synchronize Now Button if not logged in-->
<string name="sync_SPr_sync_log_in">Aanmelden &amp; Sync.</string>
<!-- Sync: Prefix string before logged in identifier -->
<string name="sync_SPr_logged_in_prefix">Aangemeld als:</string>
<!-- Sync: Last error -->
<string name="sync_SPr_last_error">Statusrapport</string>
<!-- Sync: last error click for more -->
<string name="sync_SPr_last_error_subtitle">Klik om een rapport naar het Astrid team te versturen</string>
<!-- Sync: send error report button -->
<string name="sync_SPr_send_report">Rapport verzenden</string>
<!-- Sync: Clear Data Title -->
<string name="sync_SPr_forget">Afmelden</string>
<!-- Sync: Clear Data Description -->
<string name="sync_SPr_forget_description">Alle synchronisatie gegevens verwijderen</string>
<!-- confirmation dialog for sync log out -->
<string name="sync_forget_confirm">Afmelden / synchronisatie gegevens verwijderen?</string>
<!-- Sync error: network connectivity problems. %s-> name of sync service-->
<string name="sync_error_offline">Er was een probleem met de netwerkverbinding tijdens de laatste synchronisatie met %s. Probeer het a.u.b. later nog eens.</string>
<string-array name="sync_SPr_interval_entries">
<!-- sync_SPr_interval_entries: Synchronization Intervals -->
<item>uitschakelen</item>
<item>elke 15 min.</item>
<item>elke 30 min.</item>
<item>elk uur</item>
<item>elke 3 uur</item>
<item>elke 6 uur</item>
<item>elke 12 uur</item>
<item>elke dag</item>
<item>elke 3 dagen</item>
<item>elke week</item>
</string-array>
<resources>
<!-- ==================================================== Generic Units == -->
<plurals name="DUt_years">
<!-- plurals: years -->
<item quantity="one">1 jaar</item>
<!-- plurals: years -->
<item quantity="other">%d jaren</item>
</plurals>
<plurals name="DUt_months">
<!-- plurals: months -->
<item quantity="one">1 maand</item>
<!-- plurals: months -->
<item quantity="other">%d maanden</item>
</plurals>
<plurals name="DUt_weeks">
<!-- plurals: days -->
<item quantity="one">1 week</item>
<!-- plurals: days -->
<item quantity="other">%d weken</item>
</plurals>
<plurals name="DUt_days">
<!-- plurals: days -->
<item quantity="one">1 dag</item>
<!-- plurals: days -->
<item quantity="other">%d dagen</item>
</plurals>
<plurals name="DUt_weekdays">
<!-- plurals: days -->
<item quantity="one">1 weekdag</item>
<!-- plurals: days -->
<item quantity="other">%d weekdagen</item>
</plurals>
<plurals name="DUt_hours">
<!-- plurals: hours -->
<item quantity="one">1 uur</item>
<!-- plurals: hours -->
<item quantity="other">%d uren</item>
</plurals>
<plurals name="DUt_minutes">
<!-- plurals: minutes -->
<item quantity="one">1 minuut</item>
<!-- plurals: minutes -->
<item quantity="other">%d minuten</item>
</plurals>
<plurals name="DUt_seconds">
<!-- plurals: seconds -->
<item quantity="one">1 seconde</item>
<!-- plurals: seconds -->
<item quantity="other">%d seconden</item>
</plurals>
<plurals name="DUt_hoursShort">
<!-- plurals: hours (abbreviated) -->
<item quantity="one">1 u.</item>
<!-- plurals: hours (abbreviated) -->
<item quantity="other">%d u.</item>
</plurals>
<plurals name="DUt_minutesShort">
<!-- plurals: minutes (abbreviated) -->
<item quantity="one">1 m.</item>
<!-- plurals: minutes (abbreviated) -->
<item quantity="other">%d m.</item>
</plurals>
<plurals name="DUt_secondsShort">
<!-- plurals: seconds (abbreviated) -->
<item quantity="one">1 s.</item>
<!-- plurals: seconds (abbreviated) -->
<item quantity="other">%d s.</item>
</plurals>
<plurals name="Ntasks">
<!-- plurals: tasks -->
<item quantity="one">1 taak</item>
<!-- plurals: tasks -->
<item quantity="other">%d taken</item>
</plurals>
<plurals name="Npeople">
<!-- plurals: people -->
<item quantity="one">1 persoon</item>
<!-- plurals: people -->
<item quantity="other">%d personen</item>
</plurals>
<!-- slide 10a, 12c: today -->
<string name="today">Vandaag</string>
<!-- tomorrow -->
<string name="tomorrow">Morgen</string>
<!-- yesterday -->
<string name="yesterday">Gisteren</string>
<!-- slide 12c: tomorrow, abbreviated -->
<string name="tmrw">mrgn</string>
<!-- slide 12c: yesterday, abbreviated -->
<string name="yest">gisteren</string>
<!-- ================================================== Generic Dialogs == -->
<!-- confirmation dialog title -->
<string name="DLG_confirm_title">OK?</string>
<!-- question dialog title -->
<string name="DLG_question_title">Vraag:</string>
<!-- information dialog title -->
<string name="DLG_information_title">Informatie</string>
<!-- error dialog title -->
<string name="DLG_error_title">Fout!</string>
<!-- general dialog save-->
<string name="DLG_save">Opslaan</string>
<!-- general dialog yes-->
<string name="DLG_yes">Ja</string>
<!-- general dialog no-->
<string name="DLG_no">Nee</string>
<!-- general dialog close-->
<string name="DLG_close">Sluit</string>
<!-- general dialog done -->
<string name="DLG_done">Gedaan</string>
<!-- error dialog (%s => error message)-->
<string name="DLG_error">Er is een fout opgetreden:\n\n%s</string>
<!-- error dialog (no message indicated)-->
<string name="DLG_error_generic">Er is een fout opgetreden!</string>
<!-- Progress dialog shown when doing something slow -->
<string name="DLG_wait">Even geduld a.u.b.</string>
<!-- ====================================================== SyncProvider == -->
<!-- Sync Notification: message when sync service active -->
<string name="SyP_progress">Taken synchroniseren...</string>
<!-- Sync Notification: toast when sync activated from activity -->
<string name="SyP_progress_toast">Synchroniseren…</string>
<!-- Sync Label: used in menu to denote synchronization -->
<string name="SyP_label">Synchronisatie</string>
<!-- Sync Label: used in menu to denote synchronization -->
<string name="Sync_now_label">Nu synchroniseren</string>
<!-- Sync label subtitle -->
<string name="SyP_summary">Astrid.com, Google Taken, opgeslagen data, lokale back-up</string>
<!-- Error msg when io exception -->
<string name="SyP_ioerror">Verbindingsfout! Controleer de internetverbinding</string>
<!-- ================================================== SyncPreferences == -->
<!-- Status Group Label -->
<string name="sync_SPr_group_status">Status</string>
<!-- Sync status subtitle, %s-> status message -->
<string name="sync_SPr_status_subtitle">Status: %s</string>
<!-- Sync Status: log in -->
<string name="sync_status_loggedout">Niet aangemeld</string>
<!-- Status: ongoing -->
<string name="sync_status_ongoing">Synchronisatie bezig...</string>
<!-- Sync Status: success status (%s -> last sync date). Keep it short!-->
<string name="sync_status_success">Vorige:\n%s</string>
<!-- Sync Status: failure status (%s -> last attempted sync date) -->
<string name="sync_status_failed">Mislukt op: %s</string>
<!-- Sync Status: error status (%s -> last sync date) -->
<string name="sync_status_errors">Gesync. met fouten: %s</string>
<!-- Sync Status: error subtitle (%s -> last successful sync date) -->
<string name="sync_status_failed_subtitle">Gelukt op: %s</string>
<!-- Sync Status: never sync\'d -->
<string name="sync_status_never">Nooit gesynct!</string>
<!-- Options Group Label -->
<string name="sync_SPr_group_options">Opties</string>
<!-- Preference: Synchronization Interval Title -->
<string name="sync_SPr_interval_title">Achtergrond synchronisatie</string>
<!-- Preference: Synchronization Interval Description (when disabled) -->
<string name="sync_SPr_interval_desc_disabled">Achtergrond synchronisatie uitgeschakeld</string>
<!-- Preference: Synchronization Interval Description (%s => setting) -->
<string name="sync_SPr_interval_desc">Huidige instelling: %s</string>
<!-- Preference: Background Wifi Title -->
<string name="sync_SPr_bgwifi_title">Alleen via WiFi</string>
<!-- Preference: Background Wifi Description (enabled) -->
<string name="sync_SPr_bgwifi_desc_enabled">Achtergrond synchronisatie alleen met WiFi aan
</string>
<!-- Preference: Background Wifi Description (disabled) -->
<string name="sync_SPr_bgwifi_desc_disabled">Achtergrond synchronisatie altijd aan</string>
<!-- Actions Group Label -->
<string name="sync_SPr_group_actions">Acties</string>
<!-- Synchronize Now Button -->
<string name="sync_SPr_sync">Nu synchroniseren</string>
<!-- Synchronize Now Button if not logged in-->
<string name="sync_SPr_sync_log_in">Aanmelden &amp; Sync.</string>
<!-- Sync: Prefix string before logged in identifier -->
<string name="sync_SPr_logged_in_prefix">Aangemeld als:</string>
<!-- Sync: Last error -->
<string name="sync_SPr_last_error">Statusrapport</string>
<!-- Sync: last error click for more -->
<string name="sync_SPr_last_error_subtitle">Klik om een rapport naar het Astrid team te
versturen
</string>
<!-- Sync: send error report button -->
<string name="sync_SPr_send_report">Rapport verzenden</string>
<!-- Sync: Clear Data Title -->
<string name="sync_SPr_forget">Afmelden</string>
<!-- Sync: Clear Data Description -->
<string name="sync_SPr_forget_description">Alle synchronisatie gegevens verwijderen</string>
<!-- confirmation dialog for sync log out -->
<string name="sync_forget_confirm">Afmelden / synchronisatie gegevens verwijderen?</string>
<!-- Sync error: network connectivity problems. %s-> name of sync service-->
<string name="sync_error_offline">Er was een probleem met de netwerkverbinding tijdens de
laatste synchronisatie met %s. Probeer het a.u.b. later nog eens.
</string>
<string-array name="sync_SPr_interval_entries">
<!-- sync_SPr_interval_entries: Synchronization Intervals -->
<item>uitschakelen</item>
<item>elke 15 min.</item>
<item>elke 30 min.</item>
<item>elk uur</item>
<item>elke 3 uur</item>
<item>elke 6 uur</item>
<item>elke 12 uur</item>
<item>elke dag</item>
<item>elke 3 dagen</item>
<item>elke week</item>
</string-array>
</resources>

@ -4,243 +4,250 @@
**
** See the file "LICENSE" for the full license governing this code.
-->
<resources xmlns:android="http://schemas.android.com/apk/res/android">
<!-- ==================================================== Generic Units == -->
<plurals name="DUt_years">
<!-- plurals: years -->
<item quantity="one">1 rok</item>
<!-- plurals: years -->
<item quantity="other">%d lat</item>
</plurals>
<plurals name="DUt_months">
<!-- plurals: months -->
<item quantity="one">1 miesiąc</item>
<!-- plurals: months -->
<item quantity="other">%d miesięcy</item>
</plurals>
<plurals name="DUt_weeks">
<!-- plurals: days -->
<item quantity="one">1 tydzień</item>
<!-- plurals: days -->
<item quantity="other">%d tygodni</item>
</plurals>
<plurals name="DUt_days">
<!-- plurals: days -->
<item quantity="one">1 dzień</item>
<!-- plurals: days -->
<item quantity="other">%d dni</item>
</plurals>
<plurals name="DUt_weekdays">
<!-- plurals: days -->
<item quantity="one">1 dzień roboczy</item>
<!-- plurals: days -->
<item quantity="other">%d dni roboczych</item>
</plurals>
<plurals name="DUt_hours">
<!-- plurals: hours -->
<item quantity="one">1 godzina</item>
<!-- plurals: hours -->
<item quantity="other">%d godzin</item>
</plurals>
<plurals name="DUt_minutes">
<!-- plurals: minutes -->
<item quantity="one">1 minuta</item>
<!-- plurals: minutes -->
<item quantity="other">%d minut</item>
</plurals>
<plurals name="DUt_seconds">
<!-- plurals: seconds -->
<item quantity="one">1 sekunda</item>
<!-- plurals: seconds -->
<item quantity="other">%d sekund</item>
</plurals>
<plurals name="DUt_hoursShort">
<!-- plurals: hours (abbreviated) -->
<item quantity="one">1 godz.</item>
<!-- plurals: hours (abbreviated) -->
<item quantity="other">%d godz.</item>
</plurals>
<plurals name="DUt_minutesShort">
<!-- plurals: minutes (abbreviated) -->
<item quantity="one">1 min.</item>
<!-- plurals: minutes (abbreviated) -->
<item quantity="other">%d min.</item>
</plurals>
<plurals name="DUt_secondsShort">
<!-- plurals: seconds (abbreviated) -->
<item quantity="one">1 sek.</item>
<!-- plurals: seconds (abbreviated) -->
<item quantity="other">%d sek.</item>
</plurals>
<plurals name="Ntasks">
<!-- plurals: tasks -->
<item quantity="one">1 zadanie</item>
<!-- plurals: tasks -->
<item quantity="other">%d zadań</item>
</plurals>
<plurals name="Npeople">
<!-- plurals: people -->
<item quantity="one">1 osoba</item>
<!-- plurals: people -->
<item quantity="other">%d osób</item>
</plurals>
<!-- slide 10a, 12c: today -->
<string name="today">Dzisiaj</string>
<!-- tomorrow -->
<string name="tomorrow">Jutro</string>
<!-- yesterday -->
<string name="yesterday">Wczoraj</string>
<!-- slide 12c: tomorrow, abbreviated -->
<string name="tmrw">jtr</string>
<!-- slide 12c: yesterday, abbreviated -->
<string name="yest">wcz</string>
<!-- ================================================== Generic Dialogs == -->
<!-- confirmation dialog title -->
<string name="DLG_confirm_title">Potwierdzić?</string>
<!-- question dialog title -->
<string name="DLG_question_title">Pytanie:</string>
<!-- information dialog title -->
<string name="DLG_information_title">Informacja</string>
<!-- error dialog title -->
<string name="DLG_error_title">Błąd!</string>
<!-- general dialog save-->
<string name="DLG_save">Zapisz</string>
<!-- general dialog yes-->
<string name="DLG_yes">Tak</string>
<!-- general dialog no-->
<string name="DLG_no">Nie</string>
<!-- general dialog close-->
<string name="DLG_close">Zamknij</string>
<!-- general dialog done -->
<string name="DLG_done">Ukończone</string>
<!-- error dialog (%s => error message)-->
<string name="DLG_error">Ups! Wygląda na to, że wystąpił jakiś błąd! Oto, co się stało:\n\n%s</string>
<!-- error dialog (no message indicated)-->
<string name="DLG_error_generic">Ups! Wygląda na to, że wystąpił jakiś błąd!</string>
<!-- Progress dialog shown when doing something slow -->
<string name="DLG_wait">Proszę czekać...</string>
<!-- ====================================================== SyncProvider == -->
<!-- Sync Notification: message when sync service active -->
<string name="SyP_progress">Synchronizowanie Twoich zadań...</string>
<!-- Sync Notification: toast when sync activated from activity -->
<string name="SyP_progress_toast">Synchronizacja...</string>
<!-- Sync Label: used in menu to denote synchronization -->
<string name="SyP_label">Synchronizacja</string>
<!-- Sync Label: used in menu to denote synchronization -->
<string name="Sync_now_label">Zsynchronizuj</string>
<!-- Sync label subtitle -->
<string name="SyP_summary">Astrid.com, Zadania Google, zapisane dane, lokalna kopia zapasowa</string>
<!-- Error msg when io exception -->
<string name="SyP_ioerror">Błąd połączenia! Sprawdź swoje połączenie z Internetem!</string>
<!-- ================================================== SyncPreferences == -->
<!-- Status Group Label -->
<string name="sync_SPr_group_status">Stan</string>
<!-- Sync status subtitle, %s-> status message -->
<string name="sync_SPr_status_subtitle">Status: %s</string>
<!-- Sync Status: log in -->
<string name="sync_status_loggedout">Niezalogowany</string>
<!-- Status: ongoing -->
<string name="sync_status_ongoing">Synchronizacja trwa...</string>
<!-- Sync Status: success status (%s -> last sync date). Keep it short!-->
<string name="sync_status_success">Ostatnia synchronizacja:\n%s</string>
<!-- Sync Status: failure status (%s -> last attempted sync date) -->
<string name="sync_status_failed">Nieudana: %s</string>
<!-- Sync Status: error status (%s -> last sync date) -->
<string name="sync_status_errors">Synch w/ Błędy: %s</string>
<!-- Sync Status: error subtitle (%s -> last successful sync date) -->
<string name="sync_status_failed_subtitle">Ostatnia udana synchronizacja: %s</string>
<!-- Sync Status: never sync\'d -->
<string name="sync_status_never">Nigdy nie synchronizowano!</string>
<!-- Options Group Label -->
<string name="sync_SPr_group_options">Opcje</string>
<!-- Preference: Synchronization Interval Title -->
<string name="sync_SPr_interval_title">Synchronizacja w tle</string>
<!-- Preference: Synchronization Interval Description (when disabled) -->
<string name="sync_SPr_interval_desc_disabled">Synchronizacja w tle wyłączona</string>
<!-- Preference: Synchronization Interval Description (%s => setting) -->
<string name="sync_SPr_interval_desc">Aktualnie ustawione na: %s</string>
<!-- Preference: Background Wifi Title -->
<string name="sync_SPr_bgwifi_title">Tylko połączenie Wi-Fi</string>
<!-- Preference: Background Wifi Description (enabled) -->
<string name="sync_SPr_bgwifi_desc_enabled">Synchronizacja w tle przebiega tylko poprzez Wi-Fi</string>
<!-- Preference: Background Wifi Description (disabled) -->
<string name="sync_SPr_bgwifi_desc_disabled">Synchronizowanie w tle zawsze, niezależnie od rodzaju połączenia</string>
<!-- Actions Group Label -->
<string name="sync_SPr_group_actions">Działania</string>
<!-- Synchronize Now Button -->
<string name="sync_SPr_sync">Synchronizuj teraz</string>
<!-- Synchronize Now Button if not logged in-->
<string name="sync_SPr_sync_log_in">Zaloguj &amp; Synchronizuj!</string>
<!-- Sync: Prefix string before logged in identifier -->
<string name="sync_SPr_logged_in_prefix">Zalogowany jako:</string>
<!-- Sync: Last error -->
<string name="sync_SPr_last_error">Raport statusu</string>
<!-- Sync: last error click for more -->
<string name="sync_SPr_last_error_subtitle">Kliknij by wysłać raport do zespłu Astrid</string>
<!-- Sync: send error report button -->
<string name="sync_SPr_send_report">Wyślij raport</string>
<!-- Sync: Clear Data Title -->
<string name="sync_SPr_forget">Wyloguj</string>
<!-- Sync: Clear Data Description -->
<string name="sync_SPr_forget_description">Czyści wszystkie dane synchronizacji</string>
<!-- confirmation dialog for sync log out -->
<string name="sync_forget_confirm">Wyloguj / wyczyść dane synchronizacji?</string>
<!-- Sync error: network connectivity problems. %s-> name of sync service-->
<string name="sync_error_offline">Wystąpił problem łączenia się z siecią w trakcie ostatniej synchronizacji z %s. Spróbuj później.</string>
<string-array name="sync_SPr_interval_entries">
<!-- sync_SPr_interval_entries: Synchronization Intervals -->
<item>Wyłączone</item>
<item>co 15 minut</item>
<item>co 30 minut</item>
<item>co godzinę</item>
<item>co 3 godziny</item>
<item>co 6 godzin</item>
<item>co 12 godzin</item>
<item>raz dziennie</item>
<item>co 3 dni</item>
<item>co tydzień</item>
</string-array>
<resources>
<!-- ==================================================== Generic Units == -->
<plurals name="DUt_years">
<!-- plurals: years -->
<item quantity="one">1 rok</item>
<!-- plurals: years -->
<item quantity="other">%d lat</item>
</plurals>
<plurals name="DUt_months">
<!-- plurals: months -->
<item quantity="one">1 miesiąc</item>
<!-- plurals: months -->
<item quantity="other">%d miesięcy</item>
</plurals>
<plurals name="DUt_weeks">
<!-- plurals: days -->
<item quantity="one">1 tydzień</item>
<!-- plurals: days -->
<item quantity="other">%d tygodni</item>
</plurals>
<plurals name="DUt_days">
<!-- plurals: days -->
<item quantity="one">1 dzień</item>
<!-- plurals: days -->
<item quantity="other">%d dni</item>
</plurals>
<plurals name="DUt_weekdays">
<!-- plurals: days -->
<item quantity="one">1 dzień roboczy</item>
<!-- plurals: days -->
<item quantity="other">%d dni roboczych</item>
</plurals>
<plurals name="DUt_hours">
<!-- plurals: hours -->
<item quantity="one">1 godzina</item>
<!-- plurals: hours -->
<item quantity="other">%d godzin</item>
</plurals>
<plurals name="DUt_minutes">
<!-- plurals: minutes -->
<item quantity="one">1 minuta</item>
<!-- plurals: minutes -->
<item quantity="other">%d minut</item>
</plurals>
<plurals name="DUt_seconds">
<!-- plurals: seconds -->
<item quantity="one">1 sekunda</item>
<!-- plurals: seconds -->
<item quantity="other">%d sekund</item>
</plurals>
<plurals name="DUt_hoursShort">
<!-- plurals: hours (abbreviated) -->
<item quantity="one">1 godz.</item>
<!-- plurals: hours (abbreviated) -->
<item quantity="other">%d godz.</item>
</plurals>
<plurals name="DUt_minutesShort">
<!-- plurals: minutes (abbreviated) -->
<item quantity="one">1 min.</item>
<!-- plurals: minutes (abbreviated) -->
<item quantity="other">%d min.</item>
</plurals>
<plurals name="DUt_secondsShort">
<!-- plurals: seconds (abbreviated) -->
<item quantity="one">1 sek.</item>
<!-- plurals: seconds (abbreviated) -->
<item quantity="other">%d sek.</item>
</plurals>
<plurals name="Ntasks">
<!-- plurals: tasks -->
<item quantity="one">1 zadanie</item>
<!-- plurals: tasks -->
<item quantity="other">%d zadań</item>
</plurals>
<plurals name="Npeople">
<!-- plurals: people -->
<item quantity="one">1 osoba</item>
<!-- plurals: people -->
<item quantity="other">%d osób</item>
</plurals>
<!-- slide 10a, 12c: today -->
<string name="today">Dzisiaj</string>
<!-- tomorrow -->
<string name="tomorrow">Jutro</string>
<!-- yesterday -->
<string name="yesterday">Wczoraj</string>
<!-- slide 12c: tomorrow, abbreviated -->
<string name="tmrw">jtr</string>
<!-- slide 12c: yesterday, abbreviated -->
<string name="yest">wcz</string>
<!-- ================================================== Generic Dialogs == -->
<!-- confirmation dialog title -->
<string name="DLG_confirm_title">Potwierdzić?</string>
<!-- question dialog title -->
<string name="DLG_question_title">Pytanie:</string>
<!-- information dialog title -->
<string name="DLG_information_title">Informacja</string>
<!-- error dialog title -->
<string name="DLG_error_title">Błąd!</string>
<!-- general dialog save-->
<string name="DLG_save">Zapisz</string>
<!-- general dialog yes-->
<string name="DLG_yes">Tak</string>
<!-- general dialog no-->
<string name="DLG_no">Nie</string>
<!-- general dialog close-->
<string name="DLG_close">Zamknij</string>
<!-- general dialog done -->
<string name="DLG_done">Ukończone</string>
<!-- error dialog (%s => error message)-->
<string name="DLG_error">Ups! Wygląda na to, że wystąpił jakiś błąd! Oto, co się stało:\n\n%s
</string>
<!-- error dialog (no message indicated)-->
<string name="DLG_error_generic">Ups! Wygląda na to, że wystąpił jakiś błąd!</string>
<!-- Progress dialog shown when doing something slow -->
<string name="DLG_wait">Proszę czekać...</string>
<!-- ====================================================== SyncProvider == -->
<!-- Sync Notification: message when sync service active -->
<string name="SyP_progress">Synchronizowanie Twoich zadań...</string>
<!-- Sync Notification: toast when sync activated from activity -->
<string name="SyP_progress_toast">Synchronizacja...</string>
<!-- Sync Label: used in menu to denote synchronization -->
<string name="SyP_label">Synchronizacja</string>
<!-- Sync Label: used in menu to denote synchronization -->
<string name="Sync_now_label">Zsynchronizuj</string>
<!-- Sync label subtitle -->
<string name="SyP_summary">Astrid.com, Zadania Google, zapisane dane, lokalna kopia zapasowa
</string>
<!-- Error msg when io exception -->
<string name="SyP_ioerror">Błąd połączenia! Sprawdź swoje połączenie z Internetem!</string>
<!-- ================================================== SyncPreferences == -->
<!-- Status Group Label -->
<string name="sync_SPr_group_status">Stan</string>
<!-- Sync status subtitle, %s-> status message -->
<string name="sync_SPr_status_subtitle">Status: %s</string>
<!-- Sync Status: log in -->
<string name="sync_status_loggedout">Niezalogowany</string>
<!-- Status: ongoing -->
<string name="sync_status_ongoing">Synchronizacja trwa...</string>
<!-- Sync Status: success status (%s -> last sync date). Keep it short!-->
<string name="sync_status_success">Ostatnia synchronizacja:\n%s</string>
<!-- Sync Status: failure status (%s -> last attempted sync date) -->
<string name="sync_status_failed">Nieudana: %s</string>
<!-- Sync Status: error status (%s -> last sync date) -->
<string name="sync_status_errors">Synch w/ Błędy: %s</string>
<!-- Sync Status: error subtitle (%s -> last successful sync date) -->
<string name="sync_status_failed_subtitle">Ostatnia udana synchronizacja: %s</string>
<!-- Sync Status: never sync\'d -->
<string name="sync_status_never">Nigdy nie synchronizowano!</string>
<!-- Options Group Label -->
<string name="sync_SPr_group_options">Opcje</string>
<!-- Preference: Synchronization Interval Title -->
<string name="sync_SPr_interval_title">Synchronizacja w tle</string>
<!-- Preference: Synchronization Interval Description (when disabled) -->
<string name="sync_SPr_interval_desc_disabled">Synchronizacja w tle wyłączona</string>
<!-- Preference: Synchronization Interval Description (%s => setting) -->
<string name="sync_SPr_interval_desc">Aktualnie ustawione na: %s</string>
<!-- Preference: Background Wifi Title -->
<string name="sync_SPr_bgwifi_title">Tylko połączenie Wi-Fi</string>
<!-- Preference: Background Wifi Description (enabled) -->
<string name="sync_SPr_bgwifi_desc_enabled">Synchronizacja w tle przebiega tylko poprzez Wi-Fi
</string>
<!-- Preference: Background Wifi Description (disabled) -->
<string name="sync_SPr_bgwifi_desc_disabled">Synchronizowanie w tle zawsze, niezależnie od
rodzaju połączenia
</string>
<!-- Actions Group Label -->
<string name="sync_SPr_group_actions">Działania</string>
<!-- Synchronize Now Button -->
<string name="sync_SPr_sync">Synchronizuj teraz</string>
<!-- Synchronize Now Button if not logged in-->
<string name="sync_SPr_sync_log_in">Zaloguj &amp; Synchronizuj!</string>
<!-- Sync: Prefix string before logged in identifier -->
<string name="sync_SPr_logged_in_prefix">Zalogowany jako:</string>
<!-- Sync: Last error -->
<string name="sync_SPr_last_error">Raport statusu</string>
<!-- Sync: last error click for more -->
<string name="sync_SPr_last_error_subtitle">Kliknij by wysłać raport do zespłu Astrid</string>
<!-- Sync: send error report button -->
<string name="sync_SPr_send_report">Wyślij raport</string>
<!-- Sync: Clear Data Title -->
<string name="sync_SPr_forget">Wyloguj</string>
<!-- Sync: Clear Data Description -->
<string name="sync_SPr_forget_description">Czyści wszystkie dane synchronizacji</string>
<!-- confirmation dialog for sync log out -->
<string name="sync_forget_confirm">Wyloguj / wyczyść dane synchronizacji?</string>
<!-- Sync error: network connectivity problems. %s-> name of sync service-->
<string name="sync_error_offline">Wystąpił problem łączenia się z siecią w trakcie ostatniej
synchronizacji z %s. Spróbuj później.
</string>
<string-array name="sync_SPr_interval_entries">
<!-- sync_SPr_interval_entries: Synchronization Intervals -->
<item>Wyłączone</item>
<item>co 15 minut</item>
<item>co 30 minut</item>
<item>co godzinę</item>
<item>co 3 godziny</item>
<item>co 6 godzin</item>
<item>co 12 godzin</item>
<item>raz dziennie</item>
<item>co 3 dni</item>
<item>co tydzień</item>
</string-array>
</resources>

@ -4,243 +4,253 @@
**
** See the file "LICENSE" for the full license governing this code.
-->
<resources xmlns:android="http://schemas.android.com/apk/res/android">
<!-- ==================================================== Generic Units == -->
<plurals name="DUt_years">
<!-- plurals: years -->
<item quantity="one">1 ano</item>
<!-- plurals: years -->
<item quantity="other">%d anos</item>
</plurals>
<plurals name="DUt_months">
<!-- plurals: months -->
<item quantity="one">1 mês</item>
<!-- plurals: months -->
<item quantity="other">%d meses</item>
</plurals>
<plurals name="DUt_weeks">
<!-- plurals: days -->
<item quantity="one">1 semana</item>
<!-- plurals: days -->
<item quantity="other">%d semanas</item>
</plurals>
<plurals name="DUt_days">
<!-- plurals: days -->
<item quantity="one">1 dia</item>
<!-- plurals: days -->
<item quantity="other">%d dias</item>
</plurals>
<plurals name="DUt_weekdays">
<!-- plurals: days -->
<item quantity="one">1 dia útil</item>
<!-- plurals: days -->
<item quantity="other">%d dias úteis</item>
</plurals>
<plurals name="DUt_hours">
<!-- plurals: hours -->
<item quantity="one">1 hora</item>
<!-- plurals: hours -->
<item quantity="other">%d horas</item>
</plurals>
<plurals name="DUt_minutes">
<!-- plurals: minutes -->
<item quantity="one">1 minuto</item>
<!-- plurals: minutes -->
<item quantity="other">%d minutos</item>
</plurals>
<plurals name="DUt_seconds">
<!-- plurals: seconds -->
<item quantity="one">1 segundo</item>
<!-- plurals: seconds -->
<item quantity="other">%d segundos</item>
</plurals>
<plurals name="DUt_hoursShort">
<!-- plurals: hours (abbreviated) -->
<item quantity="one">1 h</item>
<!-- plurals: hours (abbreviated) -->
<item quantity="other">%d h</item>
</plurals>
<plurals name="DUt_minutesShort">
<!-- plurals: minutes (abbreviated) -->
<item quantity="one">1 min</item>
<!-- plurals: minutes (abbreviated) -->
<item quantity="other">%d min</item>
</plurals>
<plurals name="DUt_secondsShort">
<!-- plurals: seconds (abbreviated) -->
<item quantity="one">1 s</item>
<!-- plurals: seconds (abbreviated) -->
<item quantity="other">%d s</item>
</plurals>
<plurals name="Ntasks">
<!-- plurals: tasks -->
<item quantity="one">1 tarefa</item>
<!-- plurals: tasks -->
<item quantity="other">%d tarefas</item>
</plurals>
<plurals name="Npeople">
<!-- plurals: people -->
<item quantity="one">1 pessoa</item>
<!-- plurals: people -->
<item quantity="other">%d pessoas</item>
</plurals>
<!-- slide 10a, 12c: today -->
<string name="today">Hoje</string>
<!-- tomorrow -->
<string name="tomorrow">Amanhã</string>
<!-- yesterday -->
<string name="yesterday">Ontem</string>
<!-- slide 12c: tomorrow, abbreviated -->
<string name="tmrw">amanhã</string>
<!-- slide 12c: yesterday, abbreviated -->
<string name="yest">ontem</string>
<!-- ================================================== Generic Dialogs == -->
<!-- confirmation dialog title -->
<string name="DLG_confirm_title">Confirmar?</string>
<!-- question dialog title -->
<string name="DLG_question_title">Pergunta:</string>
<!-- information dialog title -->
<string name="DLG_information_title">Informações</string>
<!-- error dialog title -->
<string name="DLG_error_title">Erro!</string>
<!-- general dialog save-->
<string name="DLG_save">Salvar</string>
<!-- general dialog yes-->
<string name="DLG_yes">Sim</string>
<!-- general dialog no-->
<string name="DLG_no">Não</string>
<!-- general dialog close-->
<string name="DLG_close">Fechar</string>
<!-- general dialog done -->
<string name="DLG_done">Feito</string>
<!-- error dialog (%s => error message)-->
<string name="DLG_error">Opa, parece que ocorreu um erro! Aqui está o que aconteceu:\n\n%s</string>
<!-- error dialog (no message indicated)-->
<string name="DLG_error_generic">Opa, parece que ocorreu um erro!</string>
<!-- Progress dialog shown when doing something slow -->
<string name="DLG_wait">Por favor, aguarde...</string>
<!-- ====================================================== SyncProvider == -->
<!-- Sync Notification: message when sync service active -->
<string name="SyP_progress">Sincronizando suas tarefas...</string>
<!-- Sync Notification: toast when sync activated from activity -->
<string name="SyP_progress_toast">Sincronizando...</string>
<!-- Sync Label: used in menu to denote synchronization -->
<string name="SyP_label">Sincronização</string>
<!-- Sync Label: used in menu to denote synchronization -->
<string name="Sync_now_label">Sync now</string>
<!-- Sync label subtitle -->
<string name="SyP_summary">Astrid.com, Google Tasks, dados salvos, backup local</string>
<!-- Error msg when io exception -->
<string name="SyP_ioerror">Erro na Conexão! Verifique sua conexão com a internet.</string>
<!-- ================================================== SyncPreferences == -->
<!-- Status Group Label -->
<string name="sync_SPr_group_status">Estado</string>
<!-- Sync status subtitle, %s-> status message -->
<string name="sync_SPr_status_subtitle">Status: %s</string>
<!-- Sync Status: log in -->
<string name="sync_status_loggedout">Não Registrado</string>
<!-- Status: ongoing -->
<string name="sync_status_ongoing">Sincronizando...</string>
<!-- Sync Status: success status (%s -> last sync date). Keep it short!-->
<string name="sync_status_success">Última sincronização:\n%s</string>
<!-- Sync Status: failure status (%s -> last attempted sync date) -->
<string name="sync_status_failed">Falhou em: %s</string>
<!-- Sync Status: error status (%s -> last sync date) -->
<string name="sync_status_errors">Sicronizou com erros: %s</string>
<!-- Sync Status: error subtitle (%s -> last successful sync date) -->
<string name="sync_status_failed_subtitle">Última sincronização com sucesso: %s</string>
<!-- Sync Status: never sync\'d -->
<string name="sync_status_never">Nunca sincronizado!</string>
<!-- Options Group Label -->
<string name="sync_SPr_group_options">Opções</string>
<!-- Preference: Synchronization Interval Title -->
<string name="sync_SPr_interval_title">Sincronização em segundo plano</string>
<!-- Preference: Synchronization Interval Description (when disabled) -->
<string name="sync_SPr_interval_desc_disabled">O serviço de sincronização em segundo plano está desativado</string>
<!-- Preference: Synchronization Interval Description (%s => setting) -->
<string name="sync_SPr_interval_desc">Atualmente definido para: %s</string>
<!-- Preference: Background Wifi Title -->
<string name="sync_SPr_bgwifi_title">Configuração Somente Wifi</string>
<!-- Preference: Background Wifi Description (enabled) -->
<string name="sync_SPr_bgwifi_desc_enabled">Sincronização em segundo plano só ocorre se conectado ao Wifi</string>
<!-- Preference: Background Wifi Description (disabled) -->
<string name="sync_SPr_bgwifi_desc_disabled">Sincronização em segundo plano sempre ocorre</string>
<!-- Actions Group Label -->
<string name="sync_SPr_group_actions">Ações</string>
<!-- Synchronize Now Button -->
<string name="sync_SPr_sync">Sincronizar agora</string>
<!-- Synchronize Now Button if not logged in-->
<string name="sync_SPr_sync_log_in">Conectar e sincronizar!</string>
<!-- Sync: Prefix string before logged in identifier -->
<string name="sync_SPr_logged_in_prefix">Conectado como:</string>
<!-- Sync: Last error -->
<string name="sync_SPr_last_error">Relatório de status</string>
<!-- Sync: last error click for more -->
<string name="sync_SPr_last_error_subtitle">Clique para enviar um relatório para a equipe do Astrid</string>
<!-- Sync: send error report button -->
<string name="sync_SPr_send_report">Enviar relatório</string>
<!-- Sync: Clear Data Title -->
<string name="sync_SPr_forget">Desconectar</string>
<!-- Sync: Clear Data Description -->
<string name="sync_SPr_forget_description">Limpar todos os dados de sincronização</string>
<!-- confirmation dialog for sync log out -->
<string name="sync_forget_confirm">Desconectar / limpar dados de sincronização?</string>
<!-- Sync error: network connectivity problems. %s-> name of sync service-->
<string name="sync_error_offline">Houve um problema na conexão durante a última sincronia com %s. Por favor tente novamente mais tarde.</string>
<string-array name="sync_SPr_interval_entries">
<!-- sync_SPr_interval_entries: Synchronization Intervals -->
<item>desabilitar</item>
<item>a cada quinze minutos</item>
<item>a cada trinta minutos</item>
<item>a cada hora</item>
<item>a cada três horas</item>
<item>a cada seis horas</item>
<item>a cada doze horas</item>
<item>diariamente</item>
<item>a cada três dias</item>
<item>semanalmente</item>
</string-array>
<resources>
<!-- ==================================================== Generic Units == -->
<plurals name="DUt_years">
<!-- plurals: years -->
<item quantity="one">1 ano</item>
<!-- plurals: years -->
<item quantity="other">%d anos</item>
</plurals>
<plurals name="DUt_months">
<!-- plurals: months -->
<item quantity="one">1 mês</item>
<!-- plurals: months -->
<item quantity="other">%d meses</item>
</plurals>
<plurals name="DUt_weeks">
<!-- plurals: days -->
<item quantity="one">1 semana</item>
<!-- plurals: days -->
<item quantity="other">%d semanas</item>
</plurals>
<plurals name="DUt_days">
<!-- plurals: days -->
<item quantity="one">1 dia</item>
<!-- plurals: days -->
<item quantity="other">%d dias</item>
</plurals>
<plurals name="DUt_weekdays">
<!-- plurals: days -->
<item quantity="one">1 dia útil</item>
<!-- plurals: days -->
<item quantity="other">%d dias úteis</item>
</plurals>
<plurals name="DUt_hours">
<!-- plurals: hours -->
<item quantity="one">1 hora</item>
<!-- plurals: hours -->
<item quantity="other">%d horas</item>
</plurals>
<plurals name="DUt_minutes">
<!-- plurals: minutes -->
<item quantity="one">1 minuto</item>
<!-- plurals: minutes -->
<item quantity="other">%d minutos</item>
</plurals>
<plurals name="DUt_seconds">
<!-- plurals: seconds -->
<item quantity="one">1 segundo</item>
<!-- plurals: seconds -->
<item quantity="other">%d segundos</item>
</plurals>
<plurals name="DUt_hoursShort">
<!-- plurals: hours (abbreviated) -->
<item quantity="one">1 h</item>
<!-- plurals: hours (abbreviated) -->
<item quantity="other">%d h</item>
</plurals>
<plurals name="DUt_minutesShort">
<!-- plurals: minutes (abbreviated) -->
<item quantity="one">1 min</item>
<!-- plurals: minutes (abbreviated) -->
<item quantity="other">%d min</item>
</plurals>
<plurals name="DUt_secondsShort">
<!-- plurals: seconds (abbreviated) -->
<item quantity="one">1 s</item>
<!-- plurals: seconds (abbreviated) -->
<item quantity="other">%d s</item>
</plurals>
<plurals name="Ntasks">
<!-- plurals: tasks -->
<item quantity="one">1 tarefa</item>
<!-- plurals: tasks -->
<item quantity="other">%d tarefas</item>
</plurals>
<plurals name="Npeople">
<!-- plurals: people -->
<item quantity="one">1 pessoa</item>
<!-- plurals: people -->
<item quantity="other">%d pessoas</item>
</plurals>
<!-- slide 10a, 12c: today -->
<string name="today">Hoje</string>
<!-- tomorrow -->
<string name="tomorrow">Amanhã</string>
<!-- yesterday -->
<string name="yesterday">Ontem</string>
<!-- slide 12c: tomorrow, abbreviated -->
<string name="tmrw">amanhã</string>
<!-- slide 12c: yesterday, abbreviated -->
<string name="yest">ontem</string>
<!-- ================================================== Generic Dialogs == -->
<!-- confirmation dialog title -->
<string name="DLG_confirm_title">Confirmar?</string>
<!-- question dialog title -->
<string name="DLG_question_title">Pergunta:</string>
<!-- information dialog title -->
<string name="DLG_information_title">Informações</string>
<!-- error dialog title -->
<string name="DLG_error_title">Erro!</string>
<!-- general dialog save-->
<string name="DLG_save">Salvar</string>
<!-- general dialog yes-->
<string name="DLG_yes">Sim</string>
<!-- general dialog no-->
<string name="DLG_no">Não</string>
<!-- general dialog close-->
<string name="DLG_close">Fechar</string>
<!-- general dialog done -->
<string name="DLG_done">Feito</string>
<!-- error dialog (%s => error message)-->
<string name="DLG_error">Opa, parece que ocorreu um erro! Aqui está o que aconteceu:\n\n%s
</string>
<!-- error dialog (no message indicated)-->
<string name="DLG_error_generic">Opa, parece que ocorreu um erro!</string>
<!-- Progress dialog shown when doing something slow -->
<string name="DLG_wait">Por favor, aguarde...</string>
<!-- ====================================================== SyncProvider == -->
<!-- Sync Notification: message when sync service active -->
<string name="SyP_progress">Sincronizando suas tarefas...</string>
<!-- Sync Notification: toast when sync activated from activity -->
<string name="SyP_progress_toast">Sincronizando...</string>
<!-- Sync Label: used in menu to denote synchronization -->
<string name="SyP_label">Sincronização</string>
<!-- Sync Label: used in menu to denote synchronization -->
<string name="Sync_now_label">Sync now</string>
<!-- Sync label subtitle -->
<string name="SyP_summary">Astrid.com, Google Tasks, dados salvos, backup local</string>
<!-- Error msg when io exception -->
<string name="SyP_ioerror">Erro na Conexão! Verifique sua conexão com a internet.</string>
<!-- ================================================== SyncPreferences == -->
<!-- Status Group Label -->
<string name="sync_SPr_group_status">Estado</string>
<!-- Sync status subtitle, %s-> status message -->
<string name="sync_SPr_status_subtitle">Status: %s</string>
<!-- Sync Status: log in -->
<string name="sync_status_loggedout">Não Registrado</string>
<!-- Status: ongoing -->
<string name="sync_status_ongoing">Sincronizando...</string>
<!-- Sync Status: success status (%s -> last sync date). Keep it short!-->
<string name="sync_status_success">Última sincronização:\n%s</string>
<!-- Sync Status: failure status (%s -> last attempted sync date) -->
<string name="sync_status_failed">Falhou em: %s</string>
<!-- Sync Status: error status (%s -> last sync date) -->
<string name="sync_status_errors">Sicronizou com erros: %s</string>
<!-- Sync Status: error subtitle (%s -> last successful sync date) -->
<string name="sync_status_failed_subtitle">Última sincronização com sucesso: %s</string>
<!-- Sync Status: never sync\'d -->
<string name="sync_status_never">Nunca sincronizado!</string>
<!-- Options Group Label -->
<string name="sync_SPr_group_options">Opções</string>
<!-- Preference: Synchronization Interval Title -->
<string name="sync_SPr_interval_title">Sincronização em segundo plano</string>
<!-- Preference: Synchronization Interval Description (when disabled) -->
<string name="sync_SPr_interval_desc_disabled">O serviço de sincronização em segundo plano está
desativado
</string>
<!-- Preference: Synchronization Interval Description (%s => setting) -->
<string name="sync_SPr_interval_desc">Atualmente definido para: %s</string>
<!-- Preference: Background Wifi Title -->
<string name="sync_SPr_bgwifi_title">Configuração Somente Wifi</string>
<!-- Preference: Background Wifi Description (enabled) -->
<string name="sync_SPr_bgwifi_desc_enabled">Sincronização em segundo plano só ocorre se
conectado ao Wifi
</string>
<!-- Preference: Background Wifi Description (disabled) -->
<string name="sync_SPr_bgwifi_desc_disabled">Sincronização em segundo plano sempre ocorre
</string>
<!-- Actions Group Label -->
<string name="sync_SPr_group_actions">Ações</string>
<!-- Synchronize Now Button -->
<string name="sync_SPr_sync">Sincronizar agora</string>
<!-- Synchronize Now Button if not logged in-->
<string name="sync_SPr_sync_log_in">Conectar e sincronizar!</string>
<!-- Sync: Prefix string before logged in identifier -->
<string name="sync_SPr_logged_in_prefix">Conectado como:</string>
<!-- Sync: Last error -->
<string name="sync_SPr_last_error">Relatório de status</string>
<!-- Sync: last error click for more -->
<string name="sync_SPr_last_error_subtitle">Clique para enviar um relatório para a equipe do
Astrid
</string>
<!-- Sync: send error report button -->
<string name="sync_SPr_send_report">Enviar relatório</string>
<!-- Sync: Clear Data Title -->
<string name="sync_SPr_forget">Desconectar</string>
<!-- Sync: Clear Data Description -->
<string name="sync_SPr_forget_description">Limpar todos os dados de sincronização</string>
<!-- confirmation dialog for sync log out -->
<string name="sync_forget_confirm">Desconectar / limpar dados de sincronização?</string>
<!-- Sync error: network connectivity problems. %s-> name of sync service-->
<string name="sync_error_offline">Houve um problema na conexão durante a última sincronia com
%s. Por favor tente novamente mais tarde.
</string>
<string-array name="sync_SPr_interval_entries">
<!-- sync_SPr_interval_entries: Synchronization Intervals -->
<item>desabilitar</item>
<item>a cada quinze minutos</item>
<item>a cada trinta minutos</item>
<item>a cada hora</item>
<item>a cada três horas</item>
<item>a cada seis horas</item>
<item>a cada doze horas</item>
<item>diariamente</item>
<item>a cada três dias</item>
<item>semanalmente</item>
</string-array>
</resources>

@ -1,85 +1,85 @@
<?xml version='1.0' encoding='utf-8'?>
<resources>
<plurals name="DUt_years">
<item quantity="one">1 Ano</item>
<item quantity="other">%d Anos</item>
</plurals>
<plurals name="DUt_months">
<item quantity="one">1 Mês</item>
<item quantity="other">%d Meses</item>
</plurals>
<plurals name="DUt_weeks">
<item quantity="one">1 Semana</item>
<item quantity="other">%d Semanas</item>
</plurals>
<plurals name="DUt_days">
<item quantity="one">1 Dia</item>
<item quantity="other">%d Dias</item>
</plurals>
<plurals name="DUt_weekdays">
<item quantity="one">1 Weekday</item>
<item quantity="other">%d Weekdays</item>
</plurals>
<plurals name="DUt_hours">
<item quantity="one">1 Hora</item>
<item quantity="other">%d Horas</item>
</plurals>
<plurals name="DUt_minutes">
<item quantity="one">1 Minuto</item>
<item quantity="other">%d Minutos</item>
</plurals>
<plurals name="DUt_seconds">
<item quantity="one">1 Segundo</item>
<item quantity="other">%d Segundos</item>
</plurals>
<plurals name="DUt_hoursShort">
<item quantity="one">1 h</item>
<item quantity="other">%d h</item>
</plurals>
<plurals name="DUt_minutesShort">
<item quantity="one">1 min</item>
<item quantity="other">%d min</item>
</plurals>
<plurals name="DUt_secondsShort">
<item quantity="one">1 s</item>
<item quantity="other">%d s</item>
</plurals>
<plurals name="Ntasks">
<item quantity="one">1 tarefa</item>
<item quantity="other">%d tarefas</item>
</plurals>
<plurals name="Npeople">
<item quantity="one">1 person</item>
<item quantity="other">%d people</item>
</plurals>
<string name="today">Hoje</string>
<string name="tomorrow">Amanhã</string>
<string name="yesterday">Ontem</string>
<string name="DLG_confirm_title">Confirma?</string>
<string name="DLG_question_title">Pergunta:</string>
<string name="DLG_information_title">Informação</string>
<string name="DLG_save">Guardar</string>
<string name="DLG_yes">Sim</string>
<string name="DLG_no">Não</string>
<string name="DLG_close">Fechar</string>
<string name="DLG_done">Concluído</string>
<string name="DLG_wait">Por favor aguarde...</string>
<string name="SyP_progress_toast">A Sincronizar...</string>
<string name="SyP_label">Sincronização</string>
<string name="sync_SPr_group_status">Estado</string>
<string name="sync_SPr_group_options">Opções</string>
<string name="sync_SPr_group_actions">Acções</string>
<string name="sync_SPr_forget">Terminar sessão</string>
<string-array name="sync_SPr_interval_entries">
<item>desactivar</item>
<item>every fifteen minutes</item>
<item>every thirty minutes</item>
<item>every hour</item>
<item>every three hours</item>
<item>every six hours</item>
<item>every twelve hours</item>
<item>every day</item>
<item>every three days</item>
<item>every week</item>
</string-array>
<plurals name="DUt_years">
<item quantity="one">1 Ano</item>
<item quantity="other">%d Anos</item>
</plurals>
<plurals name="DUt_months">
<item quantity="one">1 Mês</item>
<item quantity="other">%d Meses</item>
</plurals>
<plurals name="DUt_weeks">
<item quantity="one">1 Semana</item>
<item quantity="other">%d Semanas</item>
</plurals>
<plurals name="DUt_days">
<item quantity="one">1 Dia</item>
<item quantity="other">%d Dias</item>
</plurals>
<plurals name="DUt_weekdays">
<item quantity="one">1 Weekday</item>
<item quantity="other">%d Weekdays</item>
</plurals>
<plurals name="DUt_hours">
<item quantity="one">1 Hora</item>
<item quantity="other">%d Horas</item>
</plurals>
<plurals name="DUt_minutes">
<item quantity="one">1 Minuto</item>
<item quantity="other">%d Minutos</item>
</plurals>
<plurals name="DUt_seconds">
<item quantity="one">1 Segundo</item>
<item quantity="other">%d Segundos</item>
</plurals>
<plurals name="DUt_hoursShort">
<item quantity="one">1 h</item>
<item quantity="other">%d h</item>
</plurals>
<plurals name="DUt_minutesShort">
<item quantity="one">1 min</item>
<item quantity="other">%d min</item>
</plurals>
<plurals name="DUt_secondsShort">
<item quantity="one">1 s</item>
<item quantity="other">%d s</item>
</plurals>
<plurals name="Ntasks">
<item quantity="one">1 tarefa</item>
<item quantity="other">%d tarefas</item>
</plurals>
<plurals name="Npeople">
<item quantity="one">1 person</item>
<item quantity="other">%d people</item>
</plurals>
<string name="today">Hoje</string>
<string name="tomorrow">Amanhã</string>
<string name="yesterday">Ontem</string>
<string name="DLG_confirm_title">Confirma?</string>
<string name="DLG_question_title">Pergunta:</string>
<string name="DLG_information_title">Informação</string>
<string name="DLG_save">Guardar</string>
<string name="DLG_yes">Sim</string>
<string name="DLG_no">Não</string>
<string name="DLG_close">Fechar</string>
<string name="DLG_done">Concluído</string>
<string name="DLG_wait">Por favor aguarde...</string>
<string name="SyP_progress_toast">A Sincronizar...</string>
<string name="SyP_label">Sincronização</string>
<string name="sync_SPr_group_status">Estado</string>
<string name="sync_SPr_group_options">Opções</string>
<string name="sync_SPr_group_actions">Acções</string>
<string name="sync_SPr_forget">Terminar sessão</string>
<string-array name="sync_SPr_interval_entries">
<item>desactivar</item>
<item>every fifteen minutes</item>
<item>every thirty minutes</item>
<item>every hour</item>
<item>every three hours</item>
<item>every six hours</item>
<item>every twelve hours</item>
<item>every day</item>
<item>every three days</item>
<item>every week</item>
</string-array>
</resources>

@ -4,243 +4,249 @@
**
** See the file "LICENSE" for the full license governing this code.
-->
<resources xmlns:android="http://schemas.android.com/apk/res/android">
<!-- ==================================================== Generic Units == -->
<plurals name="DUt_years">
<!-- plurals: years -->
<item quantity="one">1 год</item>
<!-- plurals: years -->
<item quantity="other">%d года/лет</item>
</plurals>
<plurals name="DUt_months">
<!-- plurals: months -->
<item quantity="one">1 месяц</item>
<!-- plurals: months -->
<item quantity="other">%d месяца/месяцев</item>
</plurals>
<plurals name="DUt_weeks">
<!-- plurals: days -->
<item quantity="one">1 неделя</item>
<!-- plurals: days -->
<item quantity="other">%d недели/недель</item>
</plurals>
<plurals name="DUt_days">
<!-- plurals: days -->
<item quantity="one">1 день</item>
<!-- plurals: days -->
<item quantity="other">%d дня/дней</item>
</plurals>
<plurals name="DUt_weekdays">
<!-- plurals: days -->
<item quantity="one">1 рабочий день</item>
<!-- plurals: days -->
<item quantity="other">%d рабочих дня</item>
</plurals>
<plurals name="DUt_hours">
<!-- plurals: hours -->
<item quantity="one">1 час</item>
<!-- plurals: hours -->
<item quantity="other">%d часа/часов</item>
</plurals>
<plurals name="DUt_minutes">
<!-- plurals: minutes -->
<item quantity="one">1 минута</item>
<!-- plurals: minutes -->
<item quantity="other">%d минуты/минут</item>
</plurals>
<plurals name="DUt_seconds">
<!-- plurals: seconds -->
<item quantity="one">1 секунда</item>
<!-- plurals: seconds -->
<item quantity="other">%d секунды/секунд</item>
</plurals>
<plurals name="DUt_hoursShort">
<!-- plurals: hours (abbreviated) -->
<item quantity="one">1 час</item>
<!-- plurals: hours (abbreviated) -->
<item quantity="other">%d ч</item>
</plurals>
<plurals name="DUt_minutesShort">
<!-- plurals: minutes (abbreviated) -->
<item quantity="one">1 мин</item>
<!-- plurals: minutes (abbreviated) -->
<item quantity="other">%d мин</item>
</plurals>
<plurals name="DUt_secondsShort">
<!-- plurals: seconds (abbreviated) -->
<item quantity="one">1 с</item>
<!-- plurals: seconds (abbreviated) -->
<item quantity="other">%d с</item>
</plurals>
<plurals name="Ntasks">
<!-- plurals: tasks -->
<item quantity="one">1 задача</item>
<!-- plurals: tasks -->
<item quantity="other">%d задач(а/и)</item>
</plurals>
<plurals name="Npeople">
<!-- plurals: people -->
<item quantity="one">1 человек</item>
<!-- plurals: people -->
<item quantity="other">%d человек</item>
</plurals>
<!-- slide 10a, 12c: today -->
<string name="today">Сегодня</string>
<!-- tomorrow -->
<string name="tomorrow">Завтра</string>
<!-- yesterday -->
<string name="yesterday">Вчера</string>
<!-- slide 12c: tomorrow, abbreviated -->
<string name="tmrw">Завт</string>
<!-- slide 12c: yesterday, abbreviated -->
<string name="yest">Сег</string>
<!-- ================================================== Generic Dialogs == -->
<!-- confirmation dialog title -->
<string name="DLG_confirm_title">Подтвердить?</string>
<!-- question dialog title -->
<string name="DLG_question_title">Вопрос:</string>
<!-- information dialog title -->
<string name="DLG_information_title">Информация</string>
<!-- error dialog title -->
<string name="DLG_error_title">Ошибка!</string>
<!-- general dialog save-->
<string name="DLG_save">Готово</string>
<!-- general dialog yes-->
<string name="DLG_yes">Да</string>
<!-- general dialog no-->
<string name="DLG_no">Нет</string>
<!-- general dialog close-->
<string name="DLG_close">Закрыть</string>
<!-- general dialog done -->
<string name="DLG_done">Готово</string>
<!-- error dialog (%s => error message)-->
<string name="DLG_error">Ой, похоже произошла ошибка! Подробности ниже:\n\n%s</string>
<!-- error dialog (no message indicated)-->
<string name="DLG_error_generic">Ой, похоже произошла ошибка!</string>
<!-- Progress dialog shown when doing something slow -->
<string name="DLG_wait">Пожалуйста, подождите…</string>
<!-- ====================================================== SyncProvider == -->
<!-- Sync Notification: message when sync service active -->
<string name="SyP_progress">Синхронизация задач…</string>
<!-- Sync Notification: toast when sync activated from activity -->
<string name="SyP_progress_toast">Синхронизация…</string>
<!-- Sync Label: used in menu to denote synchronization -->
<string name="SyP_label">Синхронизация</string>
<!-- Sync Label: used in menu to denote synchronization -->
<string name="Sync_now_label">Синхронизировать</string>
<!-- Sync label subtitle -->
<string name="SyP_summary">Astrid.com, Задачи Google, сохраненные данные, локальная резервная копия</string>
<!-- Error msg when io exception -->
<string name="SyP_ioerror">Ошибка соединения! Проверьте подключение к интернету.</string>
<!-- ================================================== SyncPreferences == -->
<!-- Status Group Label -->
<string name="sync_SPr_group_status">Состояние</string>
<!-- Sync status subtitle, %s-> status message -->
<string name="sync_SPr_status_subtitle">Состояние: %s</string>
<!-- Sync Status: log in -->
<string name="sync_status_loggedout">Вход не выполнен</string>
<!-- Status: ongoing -->
<string name="sync_status_ongoing">Процесс синхронизации…</string>
<!-- Sync Status: success status (%s -> last sync date). Keep it short!-->
<string name="sync_status_success">Последняя синхронизация\n%s</string>
<!-- Sync Status: failure status (%s -> last attempted sync date) -->
<string name="sync_status_failed">Ошибка: %s</string>
<!-- Sync Status: error status (%s -> last sync date) -->
<string name="sync_status_errors">Синхронизировано с ошибками: %s</string>
<!-- Sync Status: error subtitle (%s -> last successful sync date) -->
<string name="sync_status_failed_subtitle">Последняя успешная синхронизация: %s</string>
<!-- Sync Status: never sync\'d -->
<string name="sync_status_never">Синхронизаций не выполнялось!</string>
<!-- Options Group Label -->
<string name="sync_SPr_group_options">Параметры</string>
<!-- Preference: Synchronization Interval Title -->
<string name="sync_SPr_interval_title">Фоновая синхронизация</string>
<!-- Preference: Synchronization Interval Description (when disabled) -->
<string name="sync_SPr_interval_desc_disabled">Фоновая синхронизация отключена</string>
<!-- Preference: Synchronization Interval Description (%s => setting) -->
<string name="sync_SPr_interval_desc">Сейчас установлено: %s</string>
<!-- Preference: Background Wifi Title -->
<string name="sync_SPr_bgwifi_title">Только через Wifi</string>
<!-- Preference: Background Wifi Description (enabled) -->
<string name="sync_SPr_bgwifi_desc_enabled">Фоновая синхронизация происходит только через Wifi</string>
<!-- Preference: Background Wifi Description (disabled) -->
<string name="sync_SPr_bgwifi_desc_disabled">Фоновая синхронизация происходит всегда</string>
<!-- Actions Group Label -->
<string name="sync_SPr_group_actions">Действия</string>
<!-- Synchronize Now Button -->
<string name="sync_SPr_sync">Синхронизировать</string>
<!-- Synchronize Now Button if not logged in-->
<string name="sync_SPr_sync_log_in">Войти и синхронизировать!</string>
<!-- Sync: Prefix string before logged in identifier -->
<string name="sync_SPr_logged_in_prefix">Вы вошли в систему как:</string>
<!-- Sync: Last error -->
<string name="sync_SPr_last_error">Отчёт о состоянии</string>
<!-- Sync: last error click for more -->
<string name="sync_SPr_last_error_subtitle">Нажмите, чтобы отправить отчет команде Astrid</string>
<!-- Sync: send error report button -->
<string name="sync_SPr_send_report">Отправить отчет</string>
<!-- Sync: Clear Data Title -->
<string name="sync_SPr_forget">Выйти</string>
<!-- Sync: Clear Data Description -->
<string name="sync_SPr_forget_description">Очищает все данные синхронизации</string>
<!-- confirmation dialog for sync log out -->
<string name="sync_forget_confirm">Выйти / очистить данные синхронизации?</string>
<!-- Sync error: network connectivity problems. %s-> name of sync service-->
<string name="sync_error_offline">В процессе последней синхронизации с %s возникли проблемы подключения к сети. Пожалуйста, повторите попытку позже.</string>
<string-array name="sync_SPr_interval_entries">
<!-- sync_SPr_interval_entries: Synchronization Intervals -->
<item>отключить</item>
<item>каждые 15 минут</item>
<item>каждые 30 минут</item>
<item>каждый час</item>
<item>каждые 3 часа</item>
<item>каждые 6 часов</item>
<item>каждые 12 часов</item>
<item>каждый день</item>
<item>каждые 3 дня</item>
<item>каждую неделю</item>
</string-array>
<resources>
<!-- ==================================================== Generic Units == -->
<plurals name="DUt_years">
<!-- plurals: years -->
<item quantity="one">1 год</item>
<!-- plurals: years -->
<item quantity="other">%d года/лет</item>
</plurals>
<plurals name="DUt_months">
<!-- plurals: months -->
<item quantity="one">1 месяц</item>
<!-- plurals: months -->
<item quantity="other">%d месяца/месяцев</item>
</plurals>
<plurals name="DUt_weeks">
<!-- plurals: days -->
<item quantity="one">1 неделя</item>
<!-- plurals: days -->
<item quantity="other">%d недели/недель</item>
</plurals>
<plurals name="DUt_days">
<!-- plurals: days -->
<item quantity="one">1 день</item>
<!-- plurals: days -->
<item quantity="other">%d дня/дней</item>
</plurals>
<plurals name="DUt_weekdays">
<!-- plurals: days -->
<item quantity="one">1 рабочий день</item>
<!-- plurals: days -->
<item quantity="other">%d рабочих дня</item>
</plurals>
<plurals name="DUt_hours">
<!-- plurals: hours -->
<item quantity="one">1 час</item>
<!-- plurals: hours -->
<item quantity="other">%d часа/часов</item>
</plurals>
<plurals name="DUt_minutes">
<!-- plurals: minutes -->
<item quantity="one">1 минута</item>
<!-- plurals: minutes -->
<item quantity="other">%d минуты/минут</item>
</plurals>
<plurals name="DUt_seconds">
<!-- plurals: seconds -->
<item quantity="one">1 секунда</item>
<!-- plurals: seconds -->
<item quantity="other">%d секунды/секунд</item>
</plurals>
<plurals name="DUt_hoursShort">
<!-- plurals: hours (abbreviated) -->
<item quantity="one">1 час</item>
<!-- plurals: hours (abbreviated) -->
<item quantity="other">%d ч</item>
</plurals>
<plurals name="DUt_minutesShort">
<!-- plurals: minutes (abbreviated) -->
<item quantity="one">1 мин</item>
<!-- plurals: minutes (abbreviated) -->
<item quantity="other">%d мин</item>
</plurals>
<plurals name="DUt_secondsShort">
<!-- plurals: seconds (abbreviated) -->
<item quantity="one">1 с</item>
<!-- plurals: seconds (abbreviated) -->
<item quantity="other">%d с</item>
</plurals>
<plurals name="Ntasks">
<!-- plurals: tasks -->
<item quantity="one">1 задача</item>
<!-- plurals: tasks -->
<item quantity="other">%d задач(а/и)</item>
</plurals>
<plurals name="Npeople">
<!-- plurals: people -->
<item quantity="one">1 человек</item>
<!-- plurals: people -->
<item quantity="other">%d человек</item>
</plurals>
<!-- slide 10a, 12c: today -->
<string name="today">Сегодня</string>
<!-- tomorrow -->
<string name="tomorrow">Завтра</string>
<!-- yesterday -->
<string name="yesterday">Вчера</string>
<!-- slide 12c: tomorrow, abbreviated -->
<string name="tmrw">Завт</string>
<!-- slide 12c: yesterday, abbreviated -->
<string name="yest">Сег</string>
<!-- ================================================== Generic Dialogs == -->
<!-- confirmation dialog title -->
<string name="DLG_confirm_title">Подтвердить?</string>
<!-- question dialog title -->
<string name="DLG_question_title">Вопрос:</string>
<!-- information dialog title -->
<string name="DLG_information_title">Информация</string>
<!-- error dialog title -->
<string name="DLG_error_title">Ошибка!</string>
<!-- general dialog save-->
<string name="DLG_save">Готово</string>
<!-- general dialog yes-->
<string name="DLG_yes">Да</string>
<!-- general dialog no-->
<string name="DLG_no">Нет</string>
<!-- general dialog close-->
<string name="DLG_close">Закрыть</string>
<!-- general dialog done -->
<string name="DLG_done">Готово</string>
<!-- error dialog (%s => error message)-->
<string name="DLG_error">Ой, похоже произошла ошибка! Подробности ниже:\n\n%s</string>
<!-- error dialog (no message indicated)-->
<string name="DLG_error_generic">Ой, похоже произошла ошибка!</string>
<!-- Progress dialog shown when doing something slow -->
<string name="DLG_wait">Пожалуйста, подождите…</string>
<!-- ====================================================== SyncProvider == -->
<!-- Sync Notification: message when sync service active -->
<string name="SyP_progress">Синхронизация задач…</string>
<!-- Sync Notification: toast when sync activated from activity -->
<string name="SyP_progress_toast">Синхронизация…</string>
<!-- Sync Label: used in menu to denote synchronization -->
<string name="SyP_label">Синхронизация</string>
<!-- Sync Label: used in menu to denote synchronization -->
<string name="Sync_now_label">Синхронизировать</string>
<!-- Sync label subtitle -->
<string name="SyP_summary">Astrid.com, Задачи Google, сохраненные данные, локальная резервная
копия
</string>
<!-- Error msg when io exception -->
<string name="SyP_ioerror">Ошибка соединения! Проверьте подключение к интернету.</string>
<!-- ================================================== SyncPreferences == -->
<!-- Status Group Label -->
<string name="sync_SPr_group_status">Состояние</string>
<!-- Sync status subtitle, %s-> status message -->
<string name="sync_SPr_status_subtitle">Состояние: %s</string>
<!-- Sync Status: log in -->
<string name="sync_status_loggedout">Вход не выполнен</string>
<!-- Status: ongoing -->
<string name="sync_status_ongoing">Процесс синхронизации…</string>
<!-- Sync Status: success status (%s -> last sync date). Keep it short!-->
<string name="sync_status_success">Последняя синхронизация\n%s</string>
<!-- Sync Status: failure status (%s -> last attempted sync date) -->
<string name="sync_status_failed">Ошибка: %s</string>
<!-- Sync Status: error status (%s -> last sync date) -->
<string name="sync_status_errors">Синхронизировано с ошибками: %s</string>
<!-- Sync Status: error subtitle (%s -> last successful sync date) -->
<string name="sync_status_failed_subtitle">Последняя успешная синхронизация: %s</string>
<!-- Sync Status: never sync\'d -->
<string name="sync_status_never">Синхронизаций не выполнялось!</string>
<!-- Options Group Label -->
<string name="sync_SPr_group_options">Параметры</string>
<!-- Preference: Synchronization Interval Title -->
<string name="sync_SPr_interval_title">Фоновая синхронизация</string>
<!-- Preference: Synchronization Interval Description (when disabled) -->
<string name="sync_SPr_interval_desc_disabled">Фоновая синхронизация отключена</string>
<!-- Preference: Synchronization Interval Description (%s => setting) -->
<string name="sync_SPr_interval_desc">Сейчас установлено: %s</string>
<!-- Preference: Background Wifi Title -->
<string name="sync_SPr_bgwifi_title">Только через Wifi</string>
<!-- Preference: Background Wifi Description (enabled) -->
<string name="sync_SPr_bgwifi_desc_enabled">Фоновая синхронизация происходит только через Wifi
</string>
<!-- Preference: Background Wifi Description (disabled) -->
<string name="sync_SPr_bgwifi_desc_disabled">Фоновая синхронизация происходит всегда</string>
<!-- Actions Group Label -->
<string name="sync_SPr_group_actions">Действия</string>
<!-- Synchronize Now Button -->
<string name="sync_SPr_sync">Синхронизировать</string>
<!-- Synchronize Now Button if not logged in-->
<string name="sync_SPr_sync_log_in">Войти и синхронизировать!</string>
<!-- Sync: Prefix string before logged in identifier -->
<string name="sync_SPr_logged_in_prefix">Вы вошли в систему как:</string>
<!-- Sync: Last error -->
<string name="sync_SPr_last_error">Отчёт о состоянии</string>
<!-- Sync: last error click for more -->
<string name="sync_SPr_last_error_subtitle">Нажмите, чтобы отправить отчет команде Astrid
</string>
<!-- Sync: send error report button -->
<string name="sync_SPr_send_report">Отправить отчет</string>
<!-- Sync: Clear Data Title -->
<string name="sync_SPr_forget">Выйти</string>
<!-- Sync: Clear Data Description -->
<string name="sync_SPr_forget_description">Очищает все данные синхронизации</string>
<!-- confirmation dialog for sync log out -->
<string name="sync_forget_confirm">Выйти / очистить данные синхронизации?</string>
<!-- Sync error: network connectivity problems. %s-> name of sync service-->
<string name="sync_error_offline">В процессе последней синхронизации с %s возникли проблемы
подключения к сети. Пожалуйста, повторите попытку позже.
</string>
<string-array name="sync_SPr_interval_entries">
<!-- sync_SPr_interval_entries: Synchronization Intervals -->
<item>отключить</item>
<item>каждые 15 минут</item>
<item>каждые 30 минут</item>
<item>каждый час</item>
<item>каждые 3 часа</item>
<item>каждые 6 часов</item>
<item>каждые 12 часов</item>
<item>каждый день</item>
<item>каждые 3 дня</item>
<item>каждую неделю</item>
</string-array>
</resources>

@ -4,244 +4,250 @@
**
** See the file "LICENSE" for the full license governing this code.
-->
<resources xmlns:android="http://schemas.android.com/apk/res/android">
<!-- ==================================================== Generic Units == -->
<plurals name="DUt_years">
<!-- plurals: years -->
<item quantity="one">1 år</item>
<!-- plurals: years -->
<item quantity="other">%d år</item>
</plurals>
<plurals name="DUt_months">
<!-- plurals: months -->
<item quantity="one">1 månad</item>
<!-- plurals: months -->
<item quantity="other">%d månader</item>
</plurals>
<plurals name="DUt_weeks">
<!-- plurals: days -->
<item quantity="one">1 vecka</item>
<!-- plurals: days -->
<item quantity="other">%d veckor</item>
</plurals>
<plurals name="DUt_days">
<!-- plurals: days -->
<item quantity="one">1 dag</item>
<!-- plurals: days -->
<item quantity="other">%d dagar</item>
</plurals>
<plurals name="DUt_weekdays">
<!-- plurals: days -->
<item quantity="one">1 Veckodag</item>
<!-- plurals: days -->
<item quantity="other">%d Veckodagar</item>
</plurals>
<plurals name="DUt_hours">
<!-- plurals: hours -->
<item quantity="one">1 timme</item>
<!-- plurals: hours -->
<item quantity="other">%d timmar</item>
</plurals>
<plurals name="DUt_minutes">
<!-- plurals: minutes -->
<item quantity="one">1 minut</item>
<!-- plurals: minutes -->
<item quantity="other">%d minuter</item>
</plurals>
<plurals name="DUt_seconds">
<!-- plurals: seconds -->
<item quantity="one">1 sekund</item>
<!-- plurals: seconds -->
<item quantity="other">%d sekunder</item>
</plurals>
<plurals name="DUt_hoursShort">
<!-- plurals: hours (abbreviated) -->
<item quantity="one">1 tim</item>
<!-- plurals: hours (abbreviated) -->
<item quantity="other">%d tim</item>
</plurals>
<plurals name="DUt_minutesShort">
<!-- plurals: minutes (abbreviated) -->
<item quantity="one">1 min</item>
<!-- plurals: minutes (abbreviated) -->
<item quantity="other">%d min</item>
</plurals>
<plurals name="DUt_secondsShort">
<!-- plurals: seconds (abbreviated) -->
<item quantity="one">1 sek</item>
<!-- plurals: seconds (abbreviated) -->
<item quantity="other">%d sek</item>
</plurals>
<plurals name="Ntasks">
<!-- plurals: tasks -->
<item quantity="one">1 uppgift</item>
<!-- plurals: tasks -->
<item quantity="other">%d uppgifter</item>
</plurals>
<plurals name="Npeople">
<!-- plurals: people -->
<item quantity="one">1 person</item>
<!-- plurals: people -->
<item quantity="other">%d personer</item>
</plurals>
<!-- slide 10a, 12c: today -->
<string name="today">Today</string>
<!-- tomorrow -->
<string name="tomorrow">Tomorrow</string>
<!-- yesterday -->
<string name="yesterday">Igår</string>
<!-- slide 12c: tomorrow, abbreviated -->
<string name="tmrw">imorn</string>
<!-- slide 12c: yesterday, abbreviated -->
<string name="yest">Igår</string>
<!-- ================================================== Generic Dialogs == -->
<!-- confirmation dialog title -->
<string name="DLG_confirm_title">Bekräfta?</string>
<!-- question dialog title -->
<string name="DLG_question_title">Fråga:</string>
<!-- information dialog title -->
<string name="DLG_information_title">Information</string>
<!-- error dialog title -->
<string name="DLG_error_title">Fel!</string>
<!-- general dialog save-->
<string name="DLG_save">Spara</string>
<!-- general dialog yes-->
<string name="DLG_yes">Ja</string>
<!-- general dialog no-->
<string name="DLG_no">Nej</string>
<!-- general dialog close-->
<string name="DLG_close">Stäng</string>
<!-- general dialog done -->
<string name="DLG_done">Klar</string>
<!-- error dialog (%s => error message)-->
<string name="DLG_error">Oj, det uppstod ett fel! Detta hände:\n\n%s</string>
<!-- error dialog (no message indicated)-->
<string name="DLG_error_generic">Oj, det uppstod ett fel!</string>
<!-- Progress dialog shown when doing something slow -->
<string name="DLG_wait">Var god vänta...</string>
<!-- ====================================================== SyncProvider == -->
<!-- Sync Notification: message when sync service active -->
<string name="SyP_progress">Synkroniserar dina uppgifter...</string>
<!-- Sync Notification: toast when sync activated from activity -->
<string name="SyP_progress_toast">Synkroniserar...</string>
<!-- Sync Label: used in menu to denote synchronization -->
<string name="SyP_label">Synkronisering</string>
<!-- Sync Label: used in menu to denote synchronization -->
<string name="Sync_now_label">Sync now</string>
<!-- Sync label subtitle -->
<string name="SyP_summary">Astrid.com, Google Aktiviteter, sparad data, lokal backup</string>
<!-- Error msg when io exception -->
<string name="SyP_ioerror">Tillkopplingsfel! Kontrollera din tillkoppling till internet.</string>
<!-- ================================================== SyncPreferences == -->
<!-- Status Group Label -->
<string name="sync_SPr_group_status">Status</string>
<!-- Sync status subtitle, %s-> status message -->
<string name="sync_SPr_status_subtitle">Status: %s</string>
<!-- Sync Status: log in -->
<string name="sync_status_loggedout">Ej inloggad</string>
<!-- Status: ongoing -->
<string name="sync_status_ongoing">Synkronisering pågår...</string>
<!-- Sync Status: success status (%s -> last sync date). Keep it short!-->
<string name="sync_status_success">Synkroniserades senast:\n%s</string>
<!-- Sync Status: failure status (%s -> last attempted sync date) -->
<string name="sync_status_failed">Misslyckades: %s</string>
<!-- Sync Status: error status (%s -> last sync date) -->
<string name="sync_status_errors">Synkade med fel: %s</string>
<!-- Sync Status: error subtitle (%s -> last successful sync date) -->
<string name="sync_status_failed_subtitle">Synkronisering lyckades senast: %s</string>
<!-- Sync Status: never sync\'d -->
<string name="sync_status_never">Aldrig synkroniserad!</string>
<!-- Options Group Label -->
<string name="sync_SPr_group_options">Alternativ</string>
<!-- Preference: Synchronization Interval Title -->
<string name="sync_SPr_interval_title">Bakgrundssynkronisering</string>
<!-- Preference: Synchronization Interval Description (when disabled) -->
<string name="sync_SPr_interval_desc_disabled">Bakgrundssynkronisering är inaktiverad</string>
<!-- Preference: Synchronization Interval Description (%s => setting) -->
<string name="sync_SPr_interval_desc">Aktuell inställning: %s</string>
<!-- Preference: Background Wifi Title -->
<string name="sync_SPr_bgwifi_title">Endast Wi-Fi Inställning</string>
<!-- Preference: Background Wifi Description (enabled) -->
<string name="sync_SPr_bgwifi_desc_enabled">Bakgrundssynkronisering sker endast när du är ansluten till Wi-Fi</string>
<!-- Preference: Background Wifi Description (disabled) -->
<string name="sync_SPr_bgwifi_desc_disabled">Bakgrundssynkronisering sker alltid</string>
<!-- Actions Group Label -->
<string name="sync_SPr_group_actions">Åtgärder</string>
<!-- Synchronize Now Button -->
<string name="sync_SPr_sync">Synkronisera nu</string>
<!-- Synchronize Now Button if not logged in-->
<string name="sync_SPr_sync_log_in">Logga in &amp; synkronisera!</string>
<!-- Sync: Prefix string before logged in identifier -->
<string name="sync_SPr_logged_in_prefix">Inloggad som:</string>
<!-- Sync: Last error -->
<string name="sync_SPr_last_error">Status rapport</string>
<!-- Sync: last error click for more -->
<string name="sync_SPr_last_error_subtitle">Klicka för att skicka en rapport till Astrid-teamet</string>
<!-- Sync: send error report button -->
<string name="sync_SPr_send_report">Skicka rapport</string>
<!-- Sync: Clear Data Title -->
<string name="sync_SPr_forget">Logga ut</string>
<!-- Sync: Clear Data Description -->
<string name="sync_SPr_forget_description">Rensar alla synkroniseringsdata</string>
<!-- confirmation dialog for sync log out -->
<string name="sync_forget_confirm">Logga ut / rensa synkroniseringsdata?</string>
<!-- Sync error: network connectivity problems. %s-> name of sync service-->
<string name="sync_error_offline">Ett nätverksproblem uppstod
vid senaste synkroniseringen med %s. Vänligen försök igen.</string>
<string-array name="sync_SPr_interval_entries">
<!-- sync_SPr_interval_entries: Synchronization Intervals -->
<item>inaktivera</item>
<item>varje kvartstimme</item>
<item>varje halvtimme</item>
<item>varje timme</item>
<item>var tredje timme</item>
<item>var sjätte timme</item>
<item>var tolfte timme</item>
<item>varje dag</item>
<item>var tredje dag</item>
<item>varje vecka</item>
</string-array>
<resources>
<!-- ==================================================== Generic Units == -->
<plurals name="DUt_years">
<!-- plurals: years -->
<item quantity="one">1 år</item>
<!-- plurals: years -->
<item quantity="other">%d år</item>
</plurals>
<plurals name="DUt_months">
<!-- plurals: months -->
<item quantity="one">1 månad</item>
<!-- plurals: months -->
<item quantity="other">%d månader</item>
</plurals>
<plurals name="DUt_weeks">
<!-- plurals: days -->
<item quantity="one">1 vecka</item>
<!-- plurals: days -->
<item quantity="other">%d veckor</item>
</plurals>
<plurals name="DUt_days">
<!-- plurals: days -->
<item quantity="one">1 dag</item>
<!-- plurals: days -->
<item quantity="other">%d dagar</item>
</plurals>
<plurals name="DUt_weekdays">
<!-- plurals: days -->
<item quantity="one">1 Veckodag</item>
<!-- plurals: days -->
<item quantity="other">%d Veckodagar</item>
</plurals>
<plurals name="DUt_hours">
<!-- plurals: hours -->
<item quantity="one">1 timme</item>
<!-- plurals: hours -->
<item quantity="other">%d timmar</item>
</plurals>
<plurals name="DUt_minutes">
<!-- plurals: minutes -->
<item quantity="one">1 minut</item>
<!-- plurals: minutes -->
<item quantity="other">%d minuter</item>
</plurals>
<plurals name="DUt_seconds">
<!-- plurals: seconds -->
<item quantity="one">1 sekund</item>
<!-- plurals: seconds -->
<item quantity="other">%d sekunder</item>
</plurals>
<plurals name="DUt_hoursShort">
<!-- plurals: hours (abbreviated) -->
<item quantity="one">1 tim</item>
<!-- plurals: hours (abbreviated) -->
<item quantity="other">%d tim</item>
</plurals>
<plurals name="DUt_minutesShort">
<!-- plurals: minutes (abbreviated) -->
<item quantity="one">1 min</item>
<!-- plurals: minutes (abbreviated) -->
<item quantity="other">%d min</item>
</plurals>
<plurals name="DUt_secondsShort">
<!-- plurals: seconds (abbreviated) -->
<item quantity="one">1 sek</item>
<!-- plurals: seconds (abbreviated) -->
<item quantity="other">%d sek</item>
</plurals>
<plurals name="Ntasks">
<!-- plurals: tasks -->
<item quantity="one">1 uppgift</item>
<!-- plurals: tasks -->
<item quantity="other">%d uppgifter</item>
</plurals>
<plurals name="Npeople">
<!-- plurals: people -->
<item quantity="one">1 person</item>
<!-- plurals: people -->
<item quantity="other">%d personer</item>
</plurals>
<!-- slide 10a, 12c: today -->
<string name="today">Today</string>
<!-- tomorrow -->
<string name="tomorrow">Tomorrow</string>
<!-- yesterday -->
<string name="yesterday">Igår</string>
<!-- slide 12c: tomorrow, abbreviated -->
<string name="tmrw">imorn</string>
<!-- slide 12c: yesterday, abbreviated -->
<string name="yest">Igår</string>
<!-- ================================================== Generic Dialogs == -->
<!-- confirmation dialog title -->
<string name="DLG_confirm_title">Bekräfta?</string>
<!-- question dialog title -->
<string name="DLG_question_title">Fråga:</string>
<!-- information dialog title -->
<string name="DLG_information_title">Information</string>
<!-- error dialog title -->
<string name="DLG_error_title">Fel!</string>
<!-- general dialog save-->
<string name="DLG_save">Spara</string>
<!-- general dialog yes-->
<string name="DLG_yes">Ja</string>
<!-- general dialog no-->
<string name="DLG_no">Nej</string>
<!-- general dialog close-->
<string name="DLG_close">Stäng</string>
<!-- general dialog done -->
<string name="DLG_done">Klar</string>
<!-- error dialog (%s => error message)-->
<string name="DLG_error">Oj, det uppstod ett fel! Detta hände:\n\n%s</string>
<!-- error dialog (no message indicated)-->
<string name="DLG_error_generic">Oj, det uppstod ett fel!</string>
<!-- Progress dialog shown when doing something slow -->
<string name="DLG_wait">Var god vänta...</string>
<!-- ====================================================== SyncProvider == -->
<!-- Sync Notification: message when sync service active -->
<string name="SyP_progress">Synkroniserar dina uppgifter...</string>
<!-- Sync Notification: toast when sync activated from activity -->
<string name="SyP_progress_toast">Synkroniserar...</string>
<!-- Sync Label: used in menu to denote synchronization -->
<string name="SyP_label">Synkronisering</string>
<!-- Sync Label: used in menu to denote synchronization -->
<string name="Sync_now_label">Sync now</string>
<!-- Sync label subtitle -->
<string name="SyP_summary">Astrid.com, Google Aktiviteter, sparad data, lokal backup</string>
<!-- Error msg when io exception -->
<string name="SyP_ioerror">Tillkopplingsfel! Kontrollera din tillkoppling till internet.
</string>
<!-- ================================================== SyncPreferences == -->
<!-- Status Group Label -->
<string name="sync_SPr_group_status">Status</string>
<!-- Sync status subtitle, %s-> status message -->
<string name="sync_SPr_status_subtitle">Status: %s</string>
<!-- Sync Status: log in -->
<string name="sync_status_loggedout">Ej inloggad</string>
<!-- Status: ongoing -->
<string name="sync_status_ongoing">Synkronisering pågår...</string>
<!-- Sync Status: success status (%s -> last sync date). Keep it short!-->
<string name="sync_status_success">Synkroniserades senast:\n%s</string>
<!-- Sync Status: failure status (%s -> last attempted sync date) -->
<string name="sync_status_failed">Misslyckades: %s</string>
<!-- Sync Status: error status (%s -> last sync date) -->
<string name="sync_status_errors">Synkade med fel: %s</string>
<!-- Sync Status: error subtitle (%s -> last successful sync date) -->
<string name="sync_status_failed_subtitle">Synkronisering lyckades senast: %s</string>
<!-- Sync Status: never sync\'d -->
<string name="sync_status_never">Aldrig synkroniserad!</string>
<!-- Options Group Label -->
<string name="sync_SPr_group_options">Alternativ</string>
<!-- Preference: Synchronization Interval Title -->
<string name="sync_SPr_interval_title">Bakgrundssynkronisering</string>
<!-- Preference: Synchronization Interval Description (when disabled) -->
<string name="sync_SPr_interval_desc_disabled">Bakgrundssynkronisering är inaktiverad</string>
<!-- Preference: Synchronization Interval Description (%s => setting) -->
<string name="sync_SPr_interval_desc">Aktuell inställning: %s</string>
<!-- Preference: Background Wifi Title -->
<string name="sync_SPr_bgwifi_title">Endast Wi-Fi Inställning</string>
<!-- Preference: Background Wifi Description (enabled) -->
<string name="sync_SPr_bgwifi_desc_enabled">Bakgrundssynkronisering sker endast när du är
ansluten till Wi-Fi
</string>
<!-- Preference: Background Wifi Description (disabled) -->
<string name="sync_SPr_bgwifi_desc_disabled">Bakgrundssynkronisering sker alltid</string>
<!-- Actions Group Label -->
<string name="sync_SPr_group_actions">Åtgärder</string>
<!-- Synchronize Now Button -->
<string name="sync_SPr_sync">Synkronisera nu</string>
<!-- Synchronize Now Button if not logged in-->
<string name="sync_SPr_sync_log_in">Logga in &amp; synkronisera!</string>
<!-- Sync: Prefix string before logged in identifier -->
<string name="sync_SPr_logged_in_prefix">Inloggad som:</string>
<!-- Sync: Last error -->
<string name="sync_SPr_last_error">Status rapport</string>
<!-- Sync: last error click for more -->
<string name="sync_SPr_last_error_subtitle">Klicka för att skicka en rapport till
Astrid-teamet
</string>
<!-- Sync: send error report button -->
<string name="sync_SPr_send_report">Skicka rapport</string>
<!-- Sync: Clear Data Title -->
<string name="sync_SPr_forget">Logga ut</string>
<!-- Sync: Clear Data Description -->
<string name="sync_SPr_forget_description">Rensar alla synkroniseringsdata</string>
<!-- confirmation dialog for sync log out -->
<string name="sync_forget_confirm">Logga ut / rensa synkroniseringsdata?</string>
<!-- Sync error: network connectivity problems. %s-> name of sync service-->
<string name="sync_error_offline">Ett nätverksproblem uppstod
vid senaste synkroniseringen med %s. Vänligen försök igen.
</string>
<string-array name="sync_SPr_interval_entries">
<!-- sync_SPr_interval_entries: Synchronization Intervals -->
<item>inaktivera</item>
<item>varje kvartstimme</item>
<item>varje halvtimme</item>
<item>varje timme</item>
<item>var tredje timme</item>
<item>var sjätte timme</item>
<item>var tolfte timme</item>
<item>varje dag</item>
<item>var tredje dag</item>
<item>varje vecka</item>
</string-array>
</resources>

@ -1,77 +1,77 @@
<?xml version='1.0' encoding='utf-8'?>
<resources>
<plurals name="DUt_years">
<item quantity="one">1 Year</item>
<item quantity="other">%d Years</item>
</plurals>
<plurals name="DUt_months">
<item quantity="one">1 Month</item>
<item quantity="other">%d Months</item>
</plurals>
<plurals name="DUt_weeks">
<item quantity="one">1 Week</item>
<item quantity="other">%d Weeks</item>
</plurals>
<plurals name="DUt_days">
<item quantity="one">1 วัน</item>
<item quantity="other">%d วัน</item>
</plurals>
<plurals name="DUt_weekdays">
<item quantity="one">1 Weekday</item>
<item quantity="other">%d Weekdays</item>
</plurals>
<plurals name="DUt_hours">
<item quantity="one">1 ชั่วโมง</item>
<item quantity="other">%d ชั่วโมง</item>
</plurals>
<plurals name="DUt_minutes">
<item quantity="one">1 นาที</item>
<item quantity="other">%d นาที</item>
</plurals>
<plurals name="DUt_seconds">
<item quantity="one">1 วินาที</item>
<item quantity="other">%d วินาที</item>
</plurals>
<plurals name="DUt_hoursShort">
<item quantity="one">1 ช.ม.</item>
<item quantity="other">%d ช.ม.</item>
</plurals>
<plurals name="DUt_minutesShort">
<item quantity="one">1 นาที</item>
<item quantity="other">%d นาที</item>
</plurals>
<plurals name="DUt_secondsShort">
<item quantity="one">1 วิ.</item>
<item quantity="other">%d วิ.</item>
</plurals>
<plurals name="Ntasks">
<item quantity="one">1 task</item>
<item quantity="other">%d tasks</item>
</plurals>
<plurals name="Npeople">
<item quantity="one">1 person</item>
<item quantity="other">%d people</item>
</plurals>
<string name="today">วันนี้</string>
<string name="tomorrow">พรุ่งนี้</string>
<string name="yesterday">เมื่อวาน</string>
<string name="DLG_information_title">ข้อมูล</string>
<string name="DLG_save">บันทึก</string>
<string name="DLG_done">เสร็จแล้ว</string>
<string name="SyP_ioerror">ข้อผิดพลาดในการเชื่อมต่อ! ตรวจดูการเชื่อมต่ออินเตอร์เน็ท</string>
<string name="sync_SPr_group_status">สถานะ</string>
<string name="sync_SPr_group_options">ตัวเลือก</string>
<string name="sync_SPr_group_actions">การดำเนินการ</string>
<string-array name="sync_SPr_interval_entries">
<item>disable</item>
<item>every fifteen minutes</item>
<item>every thirty minutes</item>
<item>every hour</item>
<item>every three hours</item>
<item>every six hours</item>
<item>every twelve hours</item>
<item>every day</item>
<item>every three days</item>
<item>every week</item>
</string-array>
<plurals name="DUt_years">
<item quantity="one">1 Year</item>
<item quantity="other">%d Years</item>
</plurals>
<plurals name="DUt_months">
<item quantity="one">1 Month</item>
<item quantity="other">%d Months</item>
</plurals>
<plurals name="DUt_weeks">
<item quantity="one">1 Week</item>
<item quantity="other">%d Weeks</item>
</plurals>
<plurals name="DUt_days">
<item quantity="one">1 วัน</item>
<item quantity="other">%d วัน</item>
</plurals>
<plurals name="DUt_weekdays">
<item quantity="one">1 Weekday</item>
<item quantity="other">%d Weekdays</item>
</plurals>
<plurals name="DUt_hours">
<item quantity="one">1 ชั่วโมง</item>
<item quantity="other">%d ชั่วโมง</item>
</plurals>
<plurals name="DUt_minutes">
<item quantity="one">1 นาที</item>
<item quantity="other">%d นาที</item>
</plurals>
<plurals name="DUt_seconds">
<item quantity="one">1 วินาที</item>
<item quantity="other">%d วินาที</item>
</plurals>
<plurals name="DUt_hoursShort">
<item quantity="one">1 ช.ม.</item>
<item quantity="other">%d ช.ม.</item>
</plurals>
<plurals name="DUt_minutesShort">
<item quantity="one">1 นาที</item>
<item quantity="other">%d นาที</item>
</plurals>
<plurals name="DUt_secondsShort">
<item quantity="one">1 วิ.</item>
<item quantity="other">%d วิ.</item>
</plurals>
<plurals name="Ntasks">
<item quantity="one">1 task</item>
<item quantity="other">%d tasks</item>
</plurals>
<plurals name="Npeople">
<item quantity="one">1 person</item>
<item quantity="other">%d people</item>
</plurals>
<string name="today">วันนี้</string>
<string name="tomorrow">พรุ่งนี้</string>
<string name="yesterday">เมื่อวาน</string>
<string name="DLG_information_title">ข้อมูล</string>
<string name="DLG_save">บันทึก</string>
<string name="DLG_done">เสร็จแล้ว</string>
<string name="SyP_ioerror">ข้อผิดพลาดในการเชื่อมต่อ! ตรวจดูการเชื่อมต่ออินเตอร์เน็ท</string>
<string name="sync_SPr_group_status">สถานะ</string>
<string name="sync_SPr_group_options">ตัวเลือก</string>
<string name="sync_SPr_group_actions">การดำเนินการ</string>
<string-array name="sync_SPr_interval_entries">
<item>disable</item>
<item>every fifteen minutes</item>
<item>every thirty minutes</item>
<item>every hour</item>
<item>every three hours</item>
<item>every six hours</item>
<item>every twelve hours</item>
<item>every day</item>
<item>every three days</item>
<item>every week</item>
</string-array>
</resources>

@ -4,243 +4,245 @@
**
** See the file "LICENSE" for the full license governing this code.
-->
<resources xmlns:android="http://schemas.android.com/apk/res/android">
<!-- ==================================================== Generic Units == -->
<plurals name="DUt_years">
<!-- plurals: years -->
<item quantity="one">1 Yıl</item>
<!-- plurals: years -->
<item quantity="other">%d Yıl</item>
</plurals>
<plurals name="DUt_months">
<!-- plurals: months -->
<item quantity="one">1 Ay</item>
<!-- plurals: months -->
<item quantity="other">%d Ay</item>
</plurals>
<plurals name="DUt_weeks">
<!-- plurals: days -->
<item quantity="one">1 Hafta</item>
<!-- plurals: days -->
<item quantity="other">%d hafta</item>
</plurals>
<plurals name="DUt_days">
<!-- plurals: days -->
<item quantity="one">1 Gün</item>
<!-- plurals: days -->
<item quantity="other">%d gün</item>
</plurals>
<plurals name="DUt_weekdays">
<!-- plurals: days -->
<item quantity="one">1 haftaiçi gün</item>
<!-- plurals: days -->
<item quantity="other">%d haftaiçi günü</item>
</plurals>
<plurals name="DUt_hours">
<!-- plurals: hours -->
<item quantity="one">1 Saat</item>
<!-- plurals: hours -->
<item quantity="other">%d saat</item>
</plurals>
<plurals name="DUt_minutes">
<!-- plurals: minutes -->
<item quantity="one">1 Dakika</item>
<!-- plurals: minutes -->
<item quantity="other">%d dakika</item>
</plurals>
<plurals name="DUt_seconds">
<!-- plurals: seconds -->
<item quantity="one">1 Saniye</item>
<!-- plurals: seconds -->
<item quantity="other">%d saniye</item>
</plurals>
<plurals name="DUt_hoursShort">
<!-- plurals: hours (abbreviated) -->
<item quantity="one">1 saat</item>
<!-- plurals: hours (abbreviated) -->
<item quantity="other">%d saat</item>
</plurals>
<plurals name="DUt_minutesShort">
<!-- plurals: minutes (abbreviated) -->
<item quantity="one">1 dakika</item>
<!-- plurals: minutes (abbreviated) -->
<item quantity="other">%d dakika</item>
</plurals>
<plurals name="DUt_secondsShort">
<!-- plurals: seconds (abbreviated) -->
<item quantity="one">1 saniye</item>
<!-- plurals: seconds (abbreviated) -->
<item quantity="other">%d saniye</item>
</plurals>
<plurals name="Ntasks">
<!-- plurals: tasks -->
<item quantity="one">1 görev</item>
<!-- plurals: tasks -->
<item quantity="other">%d görev</item>
</plurals>
<plurals name="Npeople">
<!-- plurals: people -->
<item quantity="one">1 kişi</item>
<!-- plurals: people -->
<item quantity="other">%d kişi</item>
</plurals>
<!-- slide 10a, 12c: today -->
<string name="today">Bugün</string>
<!-- tomorrow -->
<string name="tomorrow">Yarın</string>
<!-- yesterday -->
<string name="yesterday">Dün</string>
<!-- slide 12c: tomorrow, abbreviated -->
<string name="tmrw">Yarın</string>
<!-- slide 12c: yesterday, abbreviated -->
<string name="yest">Dün</string>
<!-- ================================================== Generic Dialogs == -->
<!-- confirmation dialog title -->
<string name="DLG_confirm_title">Onayla?</string>
<!-- question dialog title -->
<string name="DLG_question_title">Soru:</string>
<!-- information dialog title -->
<string name="DLG_information_title">Bilgi</string>
<!-- error dialog title -->
<string name="DLG_error_title">Hata!</string>
<!-- general dialog save-->
<string name="DLG_save">Kaydet</string>
<!-- general dialog yes-->
<string name="DLG_yes">Evet</string>
<!-- general dialog no-->
<string name="DLG_no">Hayır</string>
<!-- general dialog close-->
<string name="DLG_close">Kapat</string>
<!-- general dialog done -->
<string name="DLG_done">Yapıldı</string>
<!-- error dialog (%s => error message)-->
<string name="DLG_error">Oops, bir sorun meydana geldi! Olan şu:\n\n%s</string>
<!-- error dialog (no message indicated)-->
<string name="DLG_error_generic">Oops, bir sorun meydana geldi!</string>
<!-- Progress dialog shown when doing something slow -->
<string name="DLG_wait">Lütfen bekleyin...</string>
<!-- ====================================================== SyncProvider == -->
<!-- Sync Notification: message when sync service active -->
<string name="SyP_progress">Görevleriniz eşleniyor...</string>
<!-- Sync Notification: toast when sync activated from activity -->
<string name="SyP_progress_toast">Eşleniyor...</string>
<!-- Sync Label: used in menu to denote synchronization -->
<string name="SyP_label">Sync &amp; backup</string>
<!-- Sync Label: used in menu to denote synchronization -->
<string name="Sync_now_label">Sync now</string>
<!-- Sync label subtitle -->
<string name="SyP_summary">Astrid.com, Google Tasks, saved data, local backup</string>
<!-- Error msg when io exception -->
<string name="SyP_ioerror">Bağlantı Hatası! Internet bağlantınızı denetleyin.</string>
<!-- ================================================== SyncPreferences == -->
<!-- Status Group Label -->
<string name="sync_SPr_group_status">Durum</string>
<!-- Sync status subtitle, %s-> status message -->
<string name="sync_SPr_status_subtitle">Durum: %s</string>
<!-- Sync Status: log in -->
<string name="sync_status_loggedout">Oturum açılmadı</string>
<!-- Status: ongoing -->
<string name="sync_status_ongoing">Senkronizasyon devam ediyor...</string>
<!-- Sync Status: success status (%s -> last sync date). Keep it short!-->
<string name="sync_status_success">Son Senk.\n%s</string>
<!-- Sync Status: failure status (%s -> last attempted sync date) -->
<string name="sync_status_failed">Başarısız: %s</string>
<!-- Sync Status: error status (%s -> last sync date) -->
<string name="sync_status_errors">Hatalı Senkron: %s</string>
<!-- Sync Status: error subtitle (%s -> last successful sync date) -->
<string name="sync_status_failed_subtitle">Son Başarılı Eşleme: %s</string>
<!-- Sync Status: never sync\'d -->
<string name="sync_status_never">Hiç Eşleme Yapılmamış!</string>
<!-- Options Group Label -->
<string name="sync_SPr_group_options">Seçenekler</string>
<!-- Preference: Synchronization Interval Title -->
<string name="sync_SPr_interval_title">Arkaplanda senkronizasyon</string>
<!-- Preference: Synchronization Interval Description (when disabled) -->
<string name="sync_SPr_interval_desc_disabled">Arkaplanda senkronizasyon devre dışı</string>
<!-- Preference: Synchronization Interval Description (%s => setting) -->
<string name="sync_SPr_interval_desc">Mevcut ayar: %s</string>
<!-- Preference: Background Wifi Title -->
<string name="sync_SPr_bgwifi_title">Sadece Wifi Ayarı</string>
<!-- Preference: Background Wifi Description (enabled) -->
<string name="sync_SPr_bgwifi_desc_enabled">Sadece Wifi ile arkaplan senkronu</string>
<!-- Preference: Background Wifi Description (disabled) -->
<string name="sync_SPr_bgwifi_desc_disabled">Arkaplan senkronu her zaman etkin</string>
<!-- Actions Group Label -->
<string name="sync_SPr_group_actions">Eylemler</string>
<!-- Synchronize Now Button -->
<string name="sync_SPr_sync">Şimdi Eşle</string>
<!-- Synchronize Now Button if not logged in-->
<string name="sync_SPr_sync_log_in">Giriş Yapı &amp; Senktronize et!</string>
<!-- Sync: Prefix string before logged in identifier -->
<string name="sync_SPr_logged_in_prefix">Giriş yapılan hesap:</string>
<!-- Sync: Last error -->
<string name="sync_SPr_last_error">Durum Raporu</string>
<!-- Sync: last error click for more -->
<string name="sync_SPr_last_error_subtitle">Astrid takımına bildirmek için tıklayın</string>
<!-- Sync: send error report button -->
<string name="sync_SPr_send_report">Rapor Gönder</string>
<!-- Sync: Clear Data Title -->
<string name="sync_SPr_forget">Çıkış Yap</string>
<!-- Sync: Clear Data Description -->
<string name="sync_SPr_forget_description">Bütün eşleme verilerini temizle</string>
<!-- confirmation dialog for sync log out -->
<string name="sync_forget_confirm">Çıkış Yap / Senkron verisini sil?</string>
<!-- Sync error: network connectivity problems. %s-> name of sync service-->
<string name="sync_error_offline">%s ile son eşleme yapılırken bir ağ bağlantı sorunu oluştu. Lütfen daha sonra yeniden deneyin.</string>
<string-array name="sync_SPr_interval_entries">
<!-- sync_SPr_interval_entries: Synchronization Intervals -->
<item>devre dışı bırak</item>
<item>her 15 dakika</item>
<item>her 30 dakika</item>
<item>her saat</item>
<item>her 3 saat</item>
<item>her 6 saat</item>
<item>her 12 saat</item>
<item>hergün</item>
<item>her 3 gün</item>
<item>her hafta</item>
</string-array>
<resources>
<!-- ==================================================== Generic Units == -->
<plurals name="DUt_years">
<!-- plurals: years -->
<item quantity="one">1 Yıl</item>
<!-- plurals: years -->
<item quantity="other">%d Yıl</item>
</plurals>
<plurals name="DUt_months">
<!-- plurals: months -->
<item quantity="one">1 Ay</item>
<!-- plurals: months -->
<item quantity="other">%d Ay</item>
</plurals>
<plurals name="DUt_weeks">
<!-- plurals: days -->
<item quantity="one">1 Hafta</item>
<!-- plurals: days -->
<item quantity="other">%d hafta</item>
</plurals>
<plurals name="DUt_days">
<!-- plurals: days -->
<item quantity="one">1 Gün</item>
<!-- plurals: days -->
<item quantity="other">%d gün</item>
</plurals>
<plurals name="DUt_weekdays">
<!-- plurals: days -->
<item quantity="one">1 haftaiçi gün</item>
<!-- plurals: days -->
<item quantity="other">%d haftaiçi günü</item>
</plurals>
<plurals name="DUt_hours">
<!-- plurals: hours -->
<item quantity="one">1 Saat</item>
<!-- plurals: hours -->
<item quantity="other">%d saat</item>
</plurals>
<plurals name="DUt_minutes">
<!-- plurals: minutes -->
<item quantity="one">1 Dakika</item>
<!-- plurals: minutes -->
<item quantity="other">%d dakika</item>
</plurals>
<plurals name="DUt_seconds">
<!-- plurals: seconds -->
<item quantity="one">1 Saniye</item>
<!-- plurals: seconds -->
<item quantity="other">%d saniye</item>
</plurals>
<plurals name="DUt_hoursShort">
<!-- plurals: hours (abbreviated) -->
<item quantity="one">1 saat</item>
<!-- plurals: hours (abbreviated) -->
<item quantity="other">%d saat</item>
</plurals>
<plurals name="DUt_minutesShort">
<!-- plurals: minutes (abbreviated) -->
<item quantity="one">1 dakika</item>
<!-- plurals: minutes (abbreviated) -->
<item quantity="other">%d dakika</item>
</plurals>
<plurals name="DUt_secondsShort">
<!-- plurals: seconds (abbreviated) -->
<item quantity="one">1 saniye</item>
<!-- plurals: seconds (abbreviated) -->
<item quantity="other">%d saniye</item>
</plurals>
<plurals name="Ntasks">
<!-- plurals: tasks -->
<item quantity="one">1 görev</item>
<!-- plurals: tasks -->
<item quantity="other">%d görev</item>
</plurals>
<plurals name="Npeople">
<!-- plurals: people -->
<item quantity="one">1 kişi</item>
<!-- plurals: people -->
<item quantity="other">%d kişi</item>
</plurals>
<!-- slide 10a, 12c: today -->
<string name="today">Bugün</string>
<!-- tomorrow -->
<string name="tomorrow">Yarın</string>
<!-- yesterday -->
<string name="yesterday">Dün</string>
<!-- slide 12c: tomorrow, abbreviated -->
<string name="tmrw">Yarın</string>
<!-- slide 12c: yesterday, abbreviated -->
<string name="yest">Dün</string>
<!-- ================================================== Generic Dialogs == -->
<!-- confirmation dialog title -->
<string name="DLG_confirm_title">Onayla?</string>
<!-- question dialog title -->
<string name="DLG_question_title">Soru:</string>
<!-- information dialog title -->
<string name="DLG_information_title">Bilgi</string>
<!-- error dialog title -->
<string name="DLG_error_title">Hata!</string>
<!-- general dialog save-->
<string name="DLG_save">Kaydet</string>
<!-- general dialog yes-->
<string name="DLG_yes">Evet</string>
<!-- general dialog no-->
<string name="DLG_no">Hayır</string>
<!-- general dialog close-->
<string name="DLG_close">Kapat</string>
<!-- general dialog done -->
<string name="DLG_done">Yapıldı</string>
<!-- error dialog (%s => error message)-->
<string name="DLG_error">Oops, bir sorun meydana geldi! Olan şu:\n\n%s</string>
<!-- error dialog (no message indicated)-->
<string name="DLG_error_generic">Oops, bir sorun meydana geldi!</string>
<!-- Progress dialog shown when doing something slow -->
<string name="DLG_wait">Lütfen bekleyin...</string>
<!-- ====================================================== SyncProvider == -->
<!-- Sync Notification: message when sync service active -->
<string name="SyP_progress">Görevleriniz eşleniyor...</string>
<!-- Sync Notification: toast when sync activated from activity -->
<string name="SyP_progress_toast">Eşleniyor...</string>
<!-- Sync Label: used in menu to denote synchronization -->
<string name="SyP_label">Sync &amp; backup</string>
<!-- Sync Label: used in menu to denote synchronization -->
<string name="Sync_now_label">Sync now</string>
<!-- Sync label subtitle -->
<string name="SyP_summary">Astrid.com, Google Tasks, saved data, local backup</string>
<!-- Error msg when io exception -->
<string name="SyP_ioerror">Bağlantı Hatası! Internet bağlantınızı denetleyin.</string>
<!-- ================================================== SyncPreferences == -->
<!-- Status Group Label -->
<string name="sync_SPr_group_status">Durum</string>
<!-- Sync status subtitle, %s-> status message -->
<string name="sync_SPr_status_subtitle">Durum: %s</string>
<!-- Sync Status: log in -->
<string name="sync_status_loggedout">Oturum açılmadı</string>
<!-- Status: ongoing -->
<string name="sync_status_ongoing">Senkronizasyon devam ediyor...</string>
<!-- Sync Status: success status (%s -> last sync date). Keep it short!-->
<string name="sync_status_success">Son Senk.\n%s</string>
<!-- Sync Status: failure status (%s -> last attempted sync date) -->
<string name="sync_status_failed">Başarısız: %s</string>
<!-- Sync Status: error status (%s -> last sync date) -->
<string name="sync_status_errors">Hatalı Senkron: %s</string>
<!-- Sync Status: error subtitle (%s -> last successful sync date) -->
<string name="sync_status_failed_subtitle">Son Başarılı Eşleme: %s</string>
<!-- Sync Status: never sync\'d -->
<string name="sync_status_never">Hiç Eşleme Yapılmamış!</string>
<!-- Options Group Label -->
<string name="sync_SPr_group_options">Seçenekler</string>
<!-- Preference: Synchronization Interval Title -->
<string name="sync_SPr_interval_title">Arkaplanda senkronizasyon</string>
<!-- Preference: Synchronization Interval Description (when disabled) -->
<string name="sync_SPr_interval_desc_disabled">Arkaplanda senkronizasyon devre dışı</string>
<!-- Preference: Synchronization Interval Description (%s => setting) -->
<string name="sync_SPr_interval_desc">Mevcut ayar: %s</string>
<!-- Preference: Background Wifi Title -->
<string name="sync_SPr_bgwifi_title">Sadece Wifi Ayarı</string>
<!-- Preference: Background Wifi Description (enabled) -->
<string name="sync_SPr_bgwifi_desc_enabled">Sadece Wifi ile arkaplan senkronu</string>
<!-- Preference: Background Wifi Description (disabled) -->
<string name="sync_SPr_bgwifi_desc_disabled">Arkaplan senkronu her zaman etkin</string>
<!-- Actions Group Label -->
<string name="sync_SPr_group_actions">Eylemler</string>
<!-- Synchronize Now Button -->
<string name="sync_SPr_sync">Şimdi Eşle</string>
<!-- Synchronize Now Button if not logged in-->
<string name="sync_SPr_sync_log_in">Giriş Yapı &amp; Senktronize et!</string>
<!-- Sync: Prefix string before logged in identifier -->
<string name="sync_SPr_logged_in_prefix">Giriş yapılan hesap:</string>
<!-- Sync: Last error -->
<string name="sync_SPr_last_error">Durum Raporu</string>
<!-- Sync: last error click for more -->
<string name="sync_SPr_last_error_subtitle">Astrid takımına bildirmek için tıklayın</string>
<!-- Sync: send error report button -->
<string name="sync_SPr_send_report">Rapor Gönder</string>
<!-- Sync: Clear Data Title -->
<string name="sync_SPr_forget">Çıkış Yap</string>
<!-- Sync: Clear Data Description -->
<string name="sync_SPr_forget_description">Bütün eşleme verilerini temizle</string>
<!-- confirmation dialog for sync log out -->
<string name="sync_forget_confirm">Çıkış Yap / Senkron verisini sil?</string>
<!-- Sync error: network connectivity problems. %s-> name of sync service-->
<string name="sync_error_offline">%s ile son eşleme yapılırken bir ağ bağlantı sorunu oluştu.
Lütfen daha sonra yeniden deneyin.
</string>
<string-array name="sync_SPr_interval_entries">
<!-- sync_SPr_interval_entries: Synchronization Intervals -->
<item>devre dışı bırak</item>
<item>her 15 dakika</item>
<item>her 30 dakika</item>
<item>her saat</item>
<item>her 3 saat</item>
<item>her 6 saat</item>
<item>her 12 saat</item>
<item>hergün</item>
<item>her 3 gün</item>
<item>her hafta</item>
</string-array>
</resources>

@ -4,243 +4,243 @@
**
** See the file "LICENSE" for the full license governing this code.
-->
<resources xmlns:android="http://schemas.android.com/apk/res/android">
<!-- ==================================================== Generic Units == -->
<plurals name="DUt_years">
<!-- plurals: years -->
<item quantity="one">1 年</item>
<!-- plurals: years -->
<item quantity="other">%d 年</item>
</plurals>
<plurals name="DUt_months">
<!-- plurals: months -->
<item quantity="one">1 个月</item>
<!-- plurals: months -->
<item quantity="other">%d 个月</item>
</plurals>
<plurals name="DUt_weeks">
<!-- plurals: days -->
<item quantity="one">1 周</item>
<!-- plurals: days -->
<item quantity="other">%d 周</item>
</plurals>
<plurals name="DUt_days">
<!-- plurals: days -->
<item quantity="one">1 天</item>
<!-- plurals: days -->
<item quantity="other">%d 天</item>
</plurals>
<plurals name="DUt_weekdays">
<!-- plurals: days -->
<item quantity="one">1 个任务天</item>
<!-- plurals: days -->
<item quantity="other">%d 个任务天</item>
</plurals>
<plurals name="DUt_hours">
<!-- plurals: hours -->
<item quantity="one">1 小时</item>
<!-- plurals: hours -->
<item quantity="other">%d 小时</item>
</plurals>
<plurals name="DUt_minutes">
<!-- plurals: minutes -->
<item quantity="one">1 分钟</item>
<!-- plurals: minutes -->
<item quantity="other">%d 分钟</item>
</plurals>
<plurals name="DUt_seconds">
<!-- plurals: seconds -->
<item quantity="one">1 秒</item>
<!-- plurals: seconds -->
<item quantity="other">%d 秒</item>
</plurals>
<plurals name="DUt_hoursShort">
<!-- plurals: hours (abbreviated) -->
<item quantity="one">1 小时</item>
<!-- plurals: hours (abbreviated) -->
<item quantity="other">%d 小时</item>
</plurals>
<plurals name="DUt_minutesShort">
<!-- plurals: minutes (abbreviated) -->
<item quantity="one">1 分钟</item>
<!-- plurals: minutes (abbreviated) -->
<item quantity="other">%d 分钟</item>
</plurals>
<plurals name="DUt_secondsShort">
<!-- plurals: seconds (abbreviated) -->
<item quantity="one">1 秒</item>
<!-- plurals: seconds (abbreviated) -->
<item quantity="other">%d 秒</item>
</plurals>
<plurals name="Ntasks">
<!-- plurals: tasks -->
<item quantity="one">1 个任务</item>
<!-- plurals: tasks -->
<item quantity="other">%d 个任务</item>
</plurals>
<plurals name="Npeople">
<!-- plurals: people -->
<item quantity="one">一个人</item>
<!-- plurals: people -->
<item quantity="other">%d 个人</item>
</plurals>
<!-- slide 10a, 12c: today -->
<string name="today">今天</string>
<!-- tomorrow -->
<string name="tomorrow">明天</string>
<!-- yesterday -->
<string name="yesterday">昨天</string>
<!-- slide 12c: tomorrow, abbreviated -->
<string name="tmrw">明天</string>
<!-- slide 12c: yesterday, abbreviated -->
<string name="yest">昨天</string>
<!-- ================================================== Generic Dialogs == -->
<!-- confirmation dialog title -->
<string name="DLG_confirm_title">确认?</string>
<!-- question dialog title -->
<string name="DLG_question_title">问题:</string>
<!-- information dialog title -->
<string name="DLG_information_title">信息</string>
<!-- error dialog title -->
<string name="DLG_error_title">错误!</string>
<!-- general dialog save-->
<string name="DLG_save">保存</string>
<!-- general dialog yes-->
<string name="DLG_yes">确定</string>
<!-- general dialog no-->
<string name="DLG_no">取消</string>
<!-- general dialog close-->
<string name="DLG_close">关闭</string>
<!-- general dialog done -->
<string name="DLG_done">完成</string>
<!-- error dialog (%s => error message)-->
<string name="DLG_error">糟糕,发生错误!状况是:\n\n%s</string>
<!-- error dialog (no message indicated)-->
<string name="DLG_error_generic">糟糕,发生错误!</string>
<!-- Progress dialog shown when doing something slow -->
<string name="DLG_wait">请稍候...</string>
<!-- ====================================================== SyncProvider == -->
<!-- Sync Notification: message when sync service active -->
<string name="SyP_progress">任务同步中...</string>
<!-- Sync Notification: toast when sync activated from activity -->
<string name="SyP_progress_toast">正在同步中...</string>
<!-- Sync Label: used in menu to denote synchronization -->
<string name="SyP_label">同步和备份</string>
<!-- Sync Label: used in menu to denote synchronization -->
<string name="Sync_now_label">Sync now</string>
<!-- Sync label subtitle -->
<string name="SyP_summary">Astrid.com谷歌任务已存数据本地备份</string>
<!-- Error msg when io exception -->
<string name="SyP_ioerror">连接错误!请检查您的因特网连接。</string>
<!-- ================================================== SyncPreferences == -->
<!-- Status Group Label -->
<string name="sync_SPr_group_status">状态</string>
<!-- Sync status subtitle, %s-> status message -->
<string name="sync_SPr_status_subtitle">状态:%s</string>
<!-- Sync Status: log in -->
<string name="sync_status_loggedout">未登陆</string>
<!-- Status: ongoing -->
<string name="sync_status_ongoing">同步中...</string>
<!-- Sync Status: success status (%s -> last sync date). Keep it short!-->
<string name="sync_status_success">上次同步:\n%s</string>
<!-- Sync Status: failure status (%s -> last attempted sync date) -->
<string name="sync_status_failed">失败:%s</string>
<!-- Sync Status: error status (%s -> last sync date) -->
<string name="sync_status_errors">同步 w/ 错误: %s 上次同步日期</string>
<!-- Sync Status: error subtitle (%s -> last successful sync date) -->
<string name="sync_status_failed_subtitle">上次成功同步:%s</string>
<!-- Sync Status: never sync\'d -->
<string name="sync_status_never">未同步过!</string>
<!-- Options Group Label -->
<string name="sync_SPr_group_options">选项</string>
<!-- Preference: Synchronization Interval Title -->
<string name="sync_SPr_interval_title">后台同步</string>
<!-- Preference: Synchronization Interval Description (when disabled) -->
<string name="sync_SPr_interval_desc_disabled">后台同步已关闭</string>
<!-- Preference: Synchronization Interval Description (%s => setting) -->
<string name="sync_SPr_interval_desc">目前同步间隔:%s</string>
<!-- Preference: Background Wifi Title -->
<string name="sync_SPr_bgwifi_title">Wifi 才可使用的设置</string>
<!-- Preference: Background Wifi Description (enabled) -->
<string name="sync_SPr_bgwifi_desc_enabled">使用 Wifi 才启动后台同步</string>
<!-- Preference: Background Wifi Description (disabled) -->
<string name="sync_SPr_bgwifi_desc_disabled">总是使用后台同步</string>
<!-- Actions Group Label -->
<string name="sync_SPr_group_actions">动作</string>
<!-- Synchronize Now Button -->
<string name="sync_SPr_sync">现在同步</string>
<!-- Synchronize Now Button if not logged in-->
<string name="sync_SPr_sync_log_in">登陆并同步!</string>
<!-- Sync: Prefix string before logged in identifier -->
<string name="sync_SPr_logged_in_prefix">已经登录为:</string>
<!-- Sync: Last error -->
<string name="sync_SPr_last_error">状态报告</string>
<!-- Sync: last error click for more -->
<string name="sync_SPr_last_error_subtitle">点击给 Astrid 团队发送报告</string>
<!-- Sync: send error report button -->
<string name="sync_SPr_send_report">发送报告</string>
<!-- Sync: Clear Data Title -->
<string name="sync_SPr_forget">登出</string>
<!-- Sync: Clear Data Description -->
<string name="sync_SPr_forget_description">清除所有同步资料</string>
<!-- confirmation dialog for sync log out -->
<string name="sync_forget_confirm">登出/清除同步资料?</string>
<!-- Sync error: network connectivity problems. %s-> name of sync service-->
<string name="sync_error_offline">在最近与 %s 同步时网络连接发生问题。请重试。</string>
<string-array name="sync_SPr_interval_entries">
<!-- sync_SPr_interval_entries: Synchronization Intervals -->
<item>停用</item>
<item>每15分钟</item>
<item>每30分钟</item>
<item>每小时</item>
<item>每3小时</item>
<item>每6小时</item>
<item>每12小时</item>
<item>每天</item>
<item>每3天</item>
<item>每周</item>
</string-array>
<resources>
<!-- ==================================================== Generic Units == -->
<plurals name="DUt_years">
<!-- plurals: years -->
<item quantity="one">1 年</item>
<!-- plurals: years -->
<item quantity="other">%d 年</item>
</plurals>
<plurals name="DUt_months">
<!-- plurals: months -->
<item quantity="one">1 个月</item>
<!-- plurals: months -->
<item quantity="other">%d 个月</item>
</plurals>
<plurals name="DUt_weeks">
<!-- plurals: days -->
<item quantity="one">1 周</item>
<!-- plurals: days -->
<item quantity="other">%d 周</item>
</plurals>
<plurals name="DUt_days">
<!-- plurals: days -->
<item quantity="one">1 天</item>
<!-- plurals: days -->
<item quantity="other">%d 天</item>
</plurals>
<plurals name="DUt_weekdays">
<!-- plurals: days -->
<item quantity="one">1 个任务天</item>
<!-- plurals: days -->
<item quantity="other">%d 个任务天</item>
</plurals>
<plurals name="DUt_hours">
<!-- plurals: hours -->
<item quantity="one">1 小时</item>
<!-- plurals: hours -->
<item quantity="other">%d 小时</item>
</plurals>
<plurals name="DUt_minutes">
<!-- plurals: minutes -->
<item quantity="one">1 分钟</item>
<!-- plurals: minutes -->
<item quantity="other">%d 分钟</item>
</plurals>
<plurals name="DUt_seconds">
<!-- plurals: seconds -->
<item quantity="one">1 秒</item>
<!-- plurals: seconds -->
<item quantity="other">%d 秒</item>
</plurals>
<plurals name="DUt_hoursShort">
<!-- plurals: hours (abbreviated) -->
<item quantity="one">1 小时</item>
<!-- plurals: hours (abbreviated) -->
<item quantity="other">%d 小时</item>
</plurals>
<plurals name="DUt_minutesShort">
<!-- plurals: minutes (abbreviated) -->
<item quantity="one">1 分钟</item>
<!-- plurals: minutes (abbreviated) -->
<item quantity="other">%d 分钟</item>
</plurals>
<plurals name="DUt_secondsShort">
<!-- plurals: seconds (abbreviated) -->
<item quantity="one">1 秒</item>
<!-- plurals: seconds (abbreviated) -->
<item quantity="other">%d 秒</item>
</plurals>
<plurals name="Ntasks">
<!-- plurals: tasks -->
<item quantity="one">1 个任务</item>
<!-- plurals: tasks -->
<item quantity="other">%d 个任务</item>
</plurals>
<plurals name="Npeople">
<!-- plurals: people -->
<item quantity="one">一个人</item>
<!-- plurals: people -->
<item quantity="other">%d 个人</item>
</plurals>
<!-- slide 10a, 12c: today -->
<string name="today">今天</string>
<!-- tomorrow -->
<string name="tomorrow">明天</string>
<!-- yesterday -->
<string name="yesterday">昨天</string>
<!-- slide 12c: tomorrow, abbreviated -->
<string name="tmrw">明天</string>
<!-- slide 12c: yesterday, abbreviated -->
<string name="yest">昨天</string>
<!-- ================================================== Generic Dialogs == -->
<!-- confirmation dialog title -->
<string name="DLG_confirm_title">确认?</string>
<!-- question dialog title -->
<string name="DLG_question_title">问题:</string>
<!-- information dialog title -->
<string name="DLG_information_title">信息</string>
<!-- error dialog title -->
<string name="DLG_error_title">错误!</string>
<!-- general dialog save-->
<string name="DLG_save">保存</string>
<!-- general dialog yes-->
<string name="DLG_yes">确定</string>
<!-- general dialog no-->
<string name="DLG_no">取消</string>
<!-- general dialog close-->
<string name="DLG_close">关闭</string>
<!-- general dialog done -->
<string name="DLG_done">完成</string>
<!-- error dialog (%s => error message)-->
<string name="DLG_error">糟糕,发生错误!状况是:\n\n%s</string>
<!-- error dialog (no message indicated)-->
<string name="DLG_error_generic">糟糕,发生错误!</string>
<!-- Progress dialog shown when doing something slow -->
<string name="DLG_wait">请稍候...</string>
<!-- ====================================================== SyncProvider == -->
<!-- Sync Notification: message when sync service active -->
<string name="SyP_progress">任务同步中...</string>
<!-- Sync Notification: toast when sync activated from activity -->
<string name="SyP_progress_toast">正在同步中...</string>
<!-- Sync Label: used in menu to denote synchronization -->
<string name="SyP_label">同步和备份</string>
<!-- Sync Label: used in menu to denote synchronization -->
<string name="Sync_now_label">Sync now</string>
<!-- Sync label subtitle -->
<string name="SyP_summary">Astrid.com谷歌任务已存数据本地备份</string>
<!-- Error msg when io exception -->
<string name="SyP_ioerror">连接错误!请检查您的因特网连接。</string>
<!-- ================================================== SyncPreferences == -->
<!-- Status Group Label -->
<string name="sync_SPr_group_status">状态</string>
<!-- Sync status subtitle, %s-> status message -->
<string name="sync_SPr_status_subtitle">状态:%s</string>
<!-- Sync Status: log in -->
<string name="sync_status_loggedout">未登陆</string>
<!-- Status: ongoing -->
<string name="sync_status_ongoing">同步中...</string>
<!-- Sync Status: success status (%s -> last sync date). Keep it short!-->
<string name="sync_status_success">上次同步:\n%s</string>
<!-- Sync Status: failure status (%s -> last attempted sync date) -->
<string name="sync_status_failed">失败:%s</string>
<!-- Sync Status: error status (%s -> last sync date) -->
<string name="sync_status_errors">同步 w/ 错误: %s 上次同步日期</string>
<!-- Sync Status: error subtitle (%s -> last successful sync date) -->
<string name="sync_status_failed_subtitle">上次成功同步:%s</string>
<!-- Sync Status: never sync\'d -->
<string name="sync_status_never">未同步过!</string>
<!-- Options Group Label -->
<string name="sync_SPr_group_options">选项</string>
<!-- Preference: Synchronization Interval Title -->
<string name="sync_SPr_interval_title">后台同步</string>
<!-- Preference: Synchronization Interval Description (when disabled) -->
<string name="sync_SPr_interval_desc_disabled">后台同步已关闭</string>
<!-- Preference: Synchronization Interval Description (%s => setting) -->
<string name="sync_SPr_interval_desc">目前同步间隔:%s</string>
<!-- Preference: Background Wifi Title -->
<string name="sync_SPr_bgwifi_title">Wifi 才可使用的设置</string>
<!-- Preference: Background Wifi Description (enabled) -->
<string name="sync_SPr_bgwifi_desc_enabled">使用 Wifi 才启动后台同步</string>
<!-- Preference: Background Wifi Description (disabled) -->
<string name="sync_SPr_bgwifi_desc_disabled">总是使用后台同步</string>
<!-- Actions Group Label -->
<string name="sync_SPr_group_actions">动作</string>
<!-- Synchronize Now Button -->
<string name="sync_SPr_sync">现在同步</string>
<!-- Synchronize Now Button if not logged in-->
<string name="sync_SPr_sync_log_in">登陆并同步!</string>
<!-- Sync: Prefix string before logged in identifier -->
<string name="sync_SPr_logged_in_prefix">已经登录为:</string>
<!-- Sync: Last error -->
<string name="sync_SPr_last_error">状态报告</string>
<!-- Sync: last error click for more -->
<string name="sync_SPr_last_error_subtitle">点击给 Astrid 团队发送报告</string>
<!-- Sync: send error report button -->
<string name="sync_SPr_send_report">发送报告</string>
<!-- Sync: Clear Data Title -->
<string name="sync_SPr_forget">登出</string>
<!-- Sync: Clear Data Description -->
<string name="sync_SPr_forget_description">清除所有同步资料</string>
<!-- confirmation dialog for sync log out -->
<string name="sync_forget_confirm">登出/清除同步资料?</string>
<!-- Sync error: network connectivity problems. %s-> name of sync service-->
<string name="sync_error_offline">在最近与 %s 同步时网络连接发生问题。请重试。</string>
<string-array name="sync_SPr_interval_entries">
<!-- sync_SPr_interval_entries: Synchronization Intervals -->
<item>停用</item>
<item>每15分钟</item>
<item>每30分钟</item>
<item>每小时</item>
<item>每3小时</item>
<item>每6小时</item>
<item>每12小时</item>
<item>每天</item>
<item>每3天</item>
<item>每周</item>
</string-array>
</resources>

@ -4,243 +4,243 @@
**
** See the file "LICENSE" for the full license governing this code.
-->
<resources xmlns:android="http://schemas.android.com/apk/res/android">
<!-- ==================================================== Generic Units == -->
<plurals name="DUt_years">
<!-- plurals: years -->
<item quantity="one">1 年</item>
<!-- plurals: years -->
<item quantity="other">%d 年</item>
</plurals>
<plurals name="DUt_months">
<!-- plurals: months -->
<item quantity="one">1 個月</item>
<!-- plurals: months -->
<item quantity="other">%d 個月</item>
</plurals>
<plurals name="DUt_weeks">
<!-- plurals: days -->
<item quantity="one">1 週</item>
<!-- plurals: days -->
<item quantity="other">%d 週</item>
</plurals>
<plurals name="DUt_days">
<!-- plurals: days -->
<item quantity="one">1 天</item>
<!-- plurals: days -->
<item quantity="other">%d 天</item>
</plurals>
<plurals name="DUt_weekdays">
<!-- plurals: days -->
<item quantity="one">1 個工作天</item>
<!-- plurals: days -->
<item quantity="other">%d 個工作天</item>
</plurals>
<plurals name="DUt_hours">
<!-- plurals: hours -->
<item quantity="one">1 小時</item>
<!-- plurals: hours -->
<item quantity="other">%d 小時</item>
</plurals>
<plurals name="DUt_minutes">
<!-- plurals: minutes -->
<item quantity="one">1 分鐘</item>
<!-- plurals: minutes -->
<item quantity="other">%d 分鐘</item>
</plurals>
<plurals name="DUt_seconds">
<!-- plurals: seconds -->
<item quantity="one">1 秒</item>
<!-- plurals: seconds -->
<item quantity="other">%d 秒</item>
</plurals>
<plurals name="DUt_hoursShort">
<!-- plurals: hours (abbreviated) -->
<item quantity="one">1 小時</item>
<!-- plurals: hours (abbreviated) -->
<item quantity="other">%d 小時</item>
</plurals>
<plurals name="DUt_minutesShort">
<!-- plurals: minutes (abbreviated) -->
<item quantity="one">1 分鐘</item>
<!-- plurals: minutes (abbreviated) -->
<item quantity="other">%d 分鐘</item>
</plurals>
<plurals name="DUt_secondsShort">
<!-- plurals: seconds (abbreviated) -->
<item quantity="one">1 秒</item>
<!-- plurals: seconds (abbreviated) -->
<item quantity="other">%d 秒</item>
</plurals>
<plurals name="Ntasks">
<!-- plurals: tasks -->
<item quantity="one">1 個工作</item>
<!-- plurals: tasks -->
<item quantity="other">%d 個工作</item>
</plurals>
<plurals name="Npeople">
<!-- plurals: people -->
<item quantity="one">一個人</item>
<!-- plurals: people -->
<item quantity="other">%d個人</item>
</plurals>
<!-- slide 10a, 12c: today -->
<string name="today">今天</string>
<!-- tomorrow -->
<string name="tomorrow">明天</string>
<!-- yesterday -->
<string name="yesterday">昨天</string>
<!-- slide 12c: tomorrow, abbreviated -->
<string name="tmrw">明天</string>
<!-- slide 12c: yesterday, abbreviated -->
<string name="yest">昨天</string>
<!-- ================================================== Generic Dialogs == -->
<!-- confirmation dialog title -->
<string name="DLG_confirm_title">確認?</string>
<!-- question dialog title -->
<string name="DLG_question_title">問題:</string>
<!-- information dialog title -->
<string name="DLG_information_title">資訊</string>
<!-- error dialog title -->
<string name="DLG_error_title">錯誤!</string>
<!-- general dialog save-->
<string name="DLG_save">儲存</string>
<!-- general dialog yes-->
<string name="DLG_yes">確定</string>
<!-- general dialog no-->
<string name="DLG_no">取消</string>
<!-- general dialog close-->
<string name="DLG_close">關閉</string>
<!-- general dialog done -->
<string name="DLG_done">完成</string>
<!-- error dialog (%s => error message)-->
<string name="DLG_error">糟糕,發生錯誤!狀況是:\n\n%s</string>
<!-- error dialog (no message indicated)-->
<string name="DLG_error_generic">糟糕,發生錯誤!</string>
<!-- Progress dialog shown when doing something slow -->
<string name="DLG_wait">請稍候...</string>
<!-- ====================================================== SyncProvider == -->
<!-- Sync Notification: message when sync service active -->
<string name="SyP_progress">工作同步中...</string>
<!-- Sync Notification: toast when sync activated from activity -->
<string name="SyP_progress_toast">正在同步中...</string>
<!-- Sync Label: used in menu to denote synchronization -->
<string name="SyP_label">同步和備份</string>
<!-- Sync Label: used in menu to denote synchronization -->
<string name="Sync_now_label">Sync now</string>
<!-- Sync label subtitle -->
<string name="SyP_summary">Astrid.com谷歌任務已存數據本地備份</string>
<!-- Error msg when io exception -->
<string name="SyP_ioerror">連結錯誤! 檢查您的網際網路連線.</string>
<!-- ================================================== SyncPreferences == -->
<!-- Status Group Label -->
<string name="sync_SPr_group_status">狀態</string>
<!-- Sync status subtitle, %s-> status message -->
<string name="sync_SPr_status_subtitle">狀態:%s</string>
<!-- Sync Status: log in -->
<string name="sync_status_loggedout">未登陸</string>
<!-- Status: ongoing -->
<string name="sync_status_ongoing">同步中...</string>
<!-- Sync Status: success status (%s -> last sync date). Keep it short!-->
<string name="sync_status_success">上次同步:\n%s</string>
<!-- Sync Status: failure status (%s -> last attempted sync date) -->
<string name="sync_status_failed">失敗:%s</string>
<!-- Sync Status: error status (%s -> last sync date) -->
<string name="sync_status_errors">同步w/ 錯誤: %s 上次同步日期</string>
<!-- Sync Status: error subtitle (%s -> last successful sync date) -->
<string name="sync_status_failed_subtitle">上次成功同步:%s</string>
<!-- Sync Status: never sync\'d -->
<string name="sync_status_never">未同步過!</string>
<!-- Options Group Label -->
<string name="sync_SPr_group_options">選項</string>
<!-- Preference: Synchronization Interval Title -->
<string name="sync_SPr_interval_title">後台同步</string>
<!-- Preference: Synchronization Interval Description (when disabled) -->
<string name="sync_SPr_interval_desc_disabled">後台同步已關閉</string>
<!-- Preference: Synchronization Interval Description (%s => setting) -->
<string name="sync_SPr_interval_desc">目前同步間隔:%s</string>
<!-- Preference: Background Wifi Title -->
<string name="sync_SPr_bgwifi_title">Wifi 才可使用的設置</string>
<!-- Preference: Background Wifi Description (enabled) -->
<string name="sync_SPr_bgwifi_desc_enabled">使用 Wifi 才啟動後台同步</string>
<!-- Preference: Background Wifi Description (disabled) -->
<string name="sync_SPr_bgwifi_desc_disabled">總是使用後台同步</string>
<!-- Actions Group Label -->
<string name="sync_SPr_group_actions">動作</string>
<!-- Synchronize Now Button -->
<string name="sync_SPr_sync">現在同步</string>
<!-- Synchronize Now Button if not logged in-->
<string name="sync_SPr_sync_log_in">登陸並同步!</string>
<!-- Sync: Prefix string before logged in identifier -->
<string name="sync_SPr_logged_in_prefix">已經登錄為:</string>
<!-- Sync: Last error -->
<string name="sync_SPr_last_error">狀態報告</string>
<!-- Sync: last error click for more -->
<string name="sync_SPr_last_error_subtitle">點擊給 Astrid 團隊發送報告</string>
<!-- Sync: send error report button -->
<string name="sync_SPr_send_report">發送報告</string>
<!-- Sync: Clear Data Title -->
<string name="sync_SPr_forget">登出</string>
<!-- Sync: Clear Data Description -->
<string name="sync_SPr_forget_description">清除所有同步資料</string>
<!-- confirmation dialog for sync log out -->
<string name="sync_forget_confirm">登出/清除同步資料?</string>
<!-- Sync error: network connectivity problems. %s-> name of sync service-->
<string name="sync_error_offline">在最近與%s 同步時網絡連接發生問題。請重試。</string>
<string-array name="sync_SPr_interval_entries">
<!-- sync_SPr_interval_entries: Synchronization Intervals -->
<item>停用</item>
<item>每15分鐘</item>
<item>每30分鐘</item>
<item>每小時</item>
<item>每3小時</item>
<item>每6小時</item>
<item>每12小時</item>
<item>每天</item>
<item>每3天</item>
<item>每週</item>
</string-array>
<resources>
<!-- ==================================================== Generic Units == -->
<plurals name="DUt_years">
<!-- plurals: years -->
<item quantity="one">1 年</item>
<!-- plurals: years -->
<item quantity="other">%d 年</item>
</plurals>
<plurals name="DUt_months">
<!-- plurals: months -->
<item quantity="one">1 個月</item>
<!-- plurals: months -->
<item quantity="other">%d 個月</item>
</plurals>
<plurals name="DUt_weeks">
<!-- plurals: days -->
<item quantity="one">1 週</item>
<!-- plurals: days -->
<item quantity="other">%d 週</item>
</plurals>
<plurals name="DUt_days">
<!-- plurals: days -->
<item quantity="one">1 天</item>
<!-- plurals: days -->
<item quantity="other">%d 天</item>
</plurals>
<plurals name="DUt_weekdays">
<!-- plurals: days -->
<item quantity="one">1 個工作天</item>
<!-- plurals: days -->
<item quantity="other">%d 個工作天</item>
</plurals>
<plurals name="DUt_hours">
<!-- plurals: hours -->
<item quantity="one">1 小時</item>
<!-- plurals: hours -->
<item quantity="other">%d 小時</item>
</plurals>
<plurals name="DUt_minutes">
<!-- plurals: minutes -->
<item quantity="one">1 分鐘</item>
<!-- plurals: minutes -->
<item quantity="other">%d 分鐘</item>
</plurals>
<plurals name="DUt_seconds">
<!-- plurals: seconds -->
<item quantity="one">1 秒</item>
<!-- plurals: seconds -->
<item quantity="other">%d 秒</item>
</plurals>
<plurals name="DUt_hoursShort">
<!-- plurals: hours (abbreviated) -->
<item quantity="one">1 小時</item>
<!-- plurals: hours (abbreviated) -->
<item quantity="other">%d 小時</item>
</plurals>
<plurals name="DUt_minutesShort">
<!-- plurals: minutes (abbreviated) -->
<item quantity="one">1 分鐘</item>
<!-- plurals: minutes (abbreviated) -->
<item quantity="other">%d 分鐘</item>
</plurals>
<plurals name="DUt_secondsShort">
<!-- plurals: seconds (abbreviated) -->
<item quantity="one">1 秒</item>
<!-- plurals: seconds (abbreviated) -->
<item quantity="other">%d 秒</item>
</plurals>
<plurals name="Ntasks">
<!-- plurals: tasks -->
<item quantity="one">1 個工作</item>
<!-- plurals: tasks -->
<item quantity="other">%d 個工作</item>
</plurals>
<plurals name="Npeople">
<!-- plurals: people -->
<item quantity="one">一個人</item>
<!-- plurals: people -->
<item quantity="other">%d個人</item>
</plurals>
<!-- slide 10a, 12c: today -->
<string name="today">今天</string>
<!-- tomorrow -->
<string name="tomorrow">明天</string>
<!-- yesterday -->
<string name="yesterday">昨天</string>
<!-- slide 12c: tomorrow, abbreviated -->
<string name="tmrw">明天</string>
<!-- slide 12c: yesterday, abbreviated -->
<string name="yest">昨天</string>
<!-- ================================================== Generic Dialogs == -->
<!-- confirmation dialog title -->
<string name="DLG_confirm_title">確認?</string>
<!-- question dialog title -->
<string name="DLG_question_title">問題:</string>
<!-- information dialog title -->
<string name="DLG_information_title">資訊</string>
<!-- error dialog title -->
<string name="DLG_error_title">錯誤!</string>
<!-- general dialog save-->
<string name="DLG_save">儲存</string>
<!-- general dialog yes-->
<string name="DLG_yes">確定</string>
<!-- general dialog no-->
<string name="DLG_no">取消</string>
<!-- general dialog close-->
<string name="DLG_close">關閉</string>
<!-- general dialog done -->
<string name="DLG_done">完成</string>
<!-- error dialog (%s => error message)-->
<string name="DLG_error">糟糕,發生錯誤!狀況是:\n\n%s</string>
<!-- error dialog (no message indicated)-->
<string name="DLG_error_generic">糟糕,發生錯誤!</string>
<!-- Progress dialog shown when doing something slow -->
<string name="DLG_wait">請稍候...</string>
<!-- ====================================================== SyncProvider == -->
<!-- Sync Notification: message when sync service active -->
<string name="SyP_progress">工作同步中...</string>
<!-- Sync Notification: toast when sync activated from activity -->
<string name="SyP_progress_toast">正在同步中...</string>
<!-- Sync Label: used in menu to denote synchronization -->
<string name="SyP_label">同步和備份</string>
<!-- Sync Label: used in menu to denote synchronization -->
<string name="Sync_now_label">Sync now</string>
<!-- Sync label subtitle -->
<string name="SyP_summary">Astrid.com谷歌任務已存數據本地備份</string>
<!-- Error msg when io exception -->
<string name="SyP_ioerror">連結錯誤! 檢查您的網際網路連線.</string>
<!-- ================================================== SyncPreferences == -->
<!-- Status Group Label -->
<string name="sync_SPr_group_status">狀態</string>
<!-- Sync status subtitle, %s-> status message -->
<string name="sync_SPr_status_subtitle">狀態:%s</string>
<!-- Sync Status: log in -->
<string name="sync_status_loggedout">未登陸</string>
<!-- Status: ongoing -->
<string name="sync_status_ongoing">同步中...</string>
<!-- Sync Status: success status (%s -> last sync date). Keep it short!-->
<string name="sync_status_success">上次同步:\n%s</string>
<!-- Sync Status: failure status (%s -> last attempted sync date) -->
<string name="sync_status_failed">失敗:%s</string>
<!-- Sync Status: error status (%s -> last sync date) -->
<string name="sync_status_errors">同步w/ 錯誤: %s 上次同步日期</string>
<!-- Sync Status: error subtitle (%s -> last successful sync date) -->
<string name="sync_status_failed_subtitle">上次成功同步:%s</string>
<!-- Sync Status: never sync\'d -->
<string name="sync_status_never">未同步過!</string>
<!-- Options Group Label -->
<string name="sync_SPr_group_options">選項</string>
<!-- Preference: Synchronization Interval Title -->
<string name="sync_SPr_interval_title">後台同步</string>
<!-- Preference: Synchronization Interval Description (when disabled) -->
<string name="sync_SPr_interval_desc_disabled">後台同步已關閉</string>
<!-- Preference: Synchronization Interval Description (%s => setting) -->
<string name="sync_SPr_interval_desc">目前同步間隔:%s</string>
<!-- Preference: Background Wifi Title -->
<string name="sync_SPr_bgwifi_title">Wifi 才可使用的設置</string>
<!-- Preference: Background Wifi Description (enabled) -->
<string name="sync_SPr_bgwifi_desc_enabled">使用 Wifi 才啟動後台同步</string>
<!-- Preference: Background Wifi Description (disabled) -->
<string name="sync_SPr_bgwifi_desc_disabled">總是使用後台同步</string>
<!-- Actions Group Label -->
<string name="sync_SPr_group_actions">動作</string>
<!-- Synchronize Now Button -->
<string name="sync_SPr_sync">現在同步</string>
<!-- Synchronize Now Button if not logged in-->
<string name="sync_SPr_sync_log_in">登陸並同步!</string>
<!-- Sync: Prefix string before logged in identifier -->
<string name="sync_SPr_logged_in_prefix">已經登錄為:</string>
<!-- Sync: Last error -->
<string name="sync_SPr_last_error">狀態報告</string>
<!-- Sync: last error click for more -->
<string name="sync_SPr_last_error_subtitle">點擊給 Astrid 團隊發送報告</string>
<!-- Sync: send error report button -->
<string name="sync_SPr_send_report">發送報告</string>
<!-- Sync: Clear Data Title -->
<string name="sync_SPr_forget">登出</string>
<!-- Sync: Clear Data Description -->
<string name="sync_SPr_forget_description">清除所有同步資料</string>
<!-- confirmation dialog for sync log out -->
<string name="sync_forget_confirm">登出/清除同步資料?</string>
<!-- Sync error: network connectivity problems. %s-> name of sync service-->
<string name="sync_error_offline">在最近與%s 同步時網絡連接發生問題。請重試。</string>
<string-array name="sync_SPr_interval_entries">
<!-- sync_SPr_interval_entries: Synchronization Intervals -->
<item>停用</item>
<item>每15分鐘</item>
<item>每30分鐘</item>
<item>每小時</item>
<item>每3小時</item>
<item>每6小時</item>
<item>每12小時</item>
<item>每天</item>
<item>每3天</item>
<item>每週</item>
</string-array>
</resources>

@ -4,14 +4,14 @@
**
** See the file "LICENSE" for the full license governing this code.
-->
<resources xmlns:android="http://schemas.android.com/apk/res/android">
<resources>
<color name="importance_1">#ffff5555</color>
<color name="importance_2">#fffea400</color>
<color name="importance_3">#ff33a5e8</color>
<color name="importance_4">#ff808080</color>
<color name="importance_5">#ff505050</color>
<color name="importance_4">#ff808080</color>
<color name="importance_5">#ff505050</color>
<color name="importance_6">#ff202020</color>
</resources>

@ -3,10 +3,10 @@
This file contains preference keys and preference list values.
These should not be translated
-->
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<!-- ============================================================ SYNC == -->
<resources>
<!-- ============================================================ SYNC == -->
<string-array name="sync_SPr_interval_values">
<!-- sync_SPr_interval_values: interval in seconds for sync entries (do not edit) -->
<item>0</item>
@ -20,8 +20,8 @@
<item>259200</item>
<item>604800</item>
</string-array>
<!-- Preference Key (do not translate) -->
<!-- Preference Key (do not translate) -->
<string name="sync_SPr_status_key">sync_status</string>
<!-- Preference Key (do not translate) -->
<string name="sync_SPr_bgwifi_key">sync_bgwifi</string>
@ -33,5 +33,5 @@
<string name="sync_SPr_key_options">sync_options</string>
<!-- Preference Key (do not translate) -->
<string name="sync_SPr_key_last_error">sync_last_error</string>
</resources>

@ -4,244 +4,249 @@
**
** See the file "LICENSE" for the full license governing this code.
-->
<resources xmlns:android="http://schemas.android.com/apk/res/android">
<!-- ==================================================== Generic Units == -->
<plurals name="DUt_years">
<!-- plurals: years -->
<item quantity="one">1 Year</item>
<!-- plurals: years -->
<item quantity="other">%d Years</item>
</plurals>
<plurals name="DUt_months">
<!-- plurals: months -->
<item quantity="one">1 Month</item>
<!-- plurals: months -->
<item quantity="other">%d Months</item>
</plurals>
<plurals name="DUt_weeks">
<!-- plurals: days -->
<item quantity="one">1 Week</item>
<!-- plurals: days -->
<item quantity="other">%d Weeks</item>
</plurals>
<plurals name="DUt_days">
<!-- plurals: days -->
<item quantity="one">1 Day</item>
<!-- plurals: days -->
<item quantity="other">%d Days</item>
</plurals>
<plurals name="DUt_weekdays">
<!-- plurals: days -->
<item quantity="one">1 Weekday</item>
<!-- plurals: days -->
<item quantity="other">%d Weekdays</item>
</plurals>
<plurals name="DUt_hours">
<!-- plurals: hours -->
<item quantity="one">1 Hour</item>
<!-- plurals: hours -->
<item quantity="other">%d Hours</item>
</plurals>
<plurals name="DUt_minutes">
<!-- plurals: minutes -->
<item quantity="one">1 Minute</item>
<!-- plurals: minutes -->
<item quantity="other">%d Minutes</item>
</plurals>
<plurals name="DUt_seconds">
<!-- plurals: seconds -->
<item quantity="one">1 Second</item>
<!-- plurals: seconds -->
<item quantity="other">%d Seconds</item>
</plurals>
<plurals name="DUt_hoursShort">
<!-- plurals: hours (abbreviated) -->
<item quantity="one">1 Hr</item>
<!-- plurals: hours (abbreviated) -->
<item quantity="other">%d Hrs</item>
</plurals>
<plurals name="DUt_minutesShort">
<!-- plurals: minutes (abbreviated) -->
<item quantity="one">1 Min</item>
<!-- plurals: minutes (abbreviated) -->
<item quantity="other">%d Min</item>
</plurals>
<plurals name="DUt_secondsShort">
<!-- plurals: seconds (abbreviated) -->
<item quantity="one">1 Sec</item>
<!-- plurals: seconds (abbreviated) -->
<item quantity="other">%d Sec</item>
</plurals>
<plurals name="Ntasks">
<!-- plurals: tasks -->
<item quantity="one">1 task</item>
<!-- plurals: tasks -->
<item quantity="other">%d tasks</item>
</plurals>
<plurals name="Npeople">
<!-- plurals: people -->
<item quantity="one">1 person</item>
<!-- plurals: people -->
<item quantity="other">%d people</item>
</plurals>
<!-- slide 10a, 12c: today -->
<string name="today">Today</string>
<!-- tomorrow -->
<string name="tomorrow">Tomorrow</string>
<!-- yesterday -->
<string name="yesterday">Yesterday</string>
<!-- slide 12c: tomorrow, abbreviated -->
<string name="tmrw">Tmrw</string>
<!-- slide 12c: yesterday, abbreviated -->
<string name="yest">Yest</string>
<!-- ================================================== Generic Dialogs == -->
<!-- confirmation dialog title -->
<string name="DLG_confirm_title">Confirm?</string>
<!-- question dialog title -->
<string name="DLG_question_title">Question:</string>
<!-- information dialog title -->
<string name="DLG_information_title">Information</string>
<!-- error dialog title -->
<string name="DLG_error_title">Error!</string>
<!-- general dialog save-->
<string name="DLG_save">Save</string>
<!-- general dialog yes-->
<string name="DLG_yes">Yes</string>
<!-- general dialog no-->
<string name="DLG_no">No</string>
<!-- general dialog close-->
<string name="DLG_close">Close</string>
<!-- general dialog done -->
<string name="DLG_done">Done</string>
<!-- error dialog (%s => error message)-->
<string name="DLG_error">Oops, looks like an error occurred! Here\'s what happened:\n\n%s</string>
<!-- error dialog (no message indicated)-->
<string name="DLG_error_generic">Oops, looks like an error occurred!</string>
<!-- Progress dialog shown when doing something slow -->
<string name="DLG_wait">Please wait...</string>
<!-- ====================================================== SyncProvider == -->
<!-- Sync Notification: message when sync service active -->
<string name="SyP_progress">Synchronizing your tasks...</string>
<!-- Sync Notification: toast when sync activated from activity -->
<string name="SyP_progress_toast">Synchronizing...</string>
<!-- Sync Label: used in menu to denote synchronization -->
<string name="SyP_label">Sync &amp; backup</string>
<!-- Sync Label: used in menu to denote synchronization -->
<string name="Sync_now_label">Sync now</string>
<!-- Sync label subtitle -->
<string name="SyP_summary">Astrid.com, Google Tasks, saved data, local backup</string>
<!-- Error msg when io exception -->
<string name="SyP_ioerror">Connection Error! Check your Internet connection.</string>
<!-- ================================================== SyncPreferences == -->
<!-- Status Group Label -->
<string name="sync_SPr_group_status">Status</string>
<!-- Sync status subtitle, %s-> status message -->
<string name="sync_SPr_status_subtitle">Status: %s</string>
<!-- Sync Status: log in -->
<string name="sync_status_loggedout">Not logged in</string>
<!-- Status: ongoing -->
<string name="sync_status_ongoing">Sync ongoing...</string>
<!-- Sync Status: success status (%s -> last sync date). Keep it short!-->
<string name="sync_status_success">Last sync:\n%s</string>
<!-- Sync Status: failure status (%s -> last attempted sync date) -->
<string name="sync_status_failed">Failed on: %s</string>
<!-- Sync Status: error status (%s -> last sync date) -->
<string name="sync_status_errors">Sync w/ errors: %s</string>
<!-- Sync Status: error subtitle (%s -> last successful sync date) -->
<string name="sync_status_failed_subtitle">Last successful sync: %s</string>
<!-- Sync Status: never sync'd -->
<string name="sync_status_never">Never synchronized!</string>
<!-- Options Group Label -->
<string name="sync_SPr_group_options">Options</string>
<!-- Preference: Synchronization Interval Title -->
<string name="sync_SPr_interval_title">Background sync</string>
<!-- Preference: Synchronization Interval Description (when disabled) -->
<string name="sync_SPr_interval_desc_disabled">Background synchronization is disabled</string>
<!-- Preference: Synchronization Interval Description (%s => setting) -->
<string name="sync_SPr_interval_desc">Currently set to: %s</string>
<!-- Preference: Background Wifi Title -->
<string name="sync_SPr_bgwifi_title">Wifi only setting</string>
<!-- Preference: Background Wifi Description (enabled) -->
<string name="sync_SPr_bgwifi_desc_enabled">Background synchronization only happens when on Wifi</string>
<!-- Preference: Background Wifi Description (disabled) -->
<string name="sync_SPr_bgwifi_desc_disabled">Background synchronization will always occur</string>
<!-- Actions Group Label -->
<string name="sync_SPr_group_actions">Actions</string>
<!-- Synchronize Now Button -->
<string name="sync_SPr_sync">Synchronize now</string>
<!-- Synchronize Now Button if not logged in-->
<string name="sync_SPr_sync_log_in">Log in &amp; synchronize!</string>
<!-- Sync: Prefix string before logged in identifier -->
<string name="sync_SPr_logged_in_prefix">Logged in as:</string>
<!-- Sync: Last error -->
<string name="sync_SPr_last_error">Status report</string>
<!-- Sync: last error click for more -->
<string name="sync_SPr_last_error_subtitle">Click to send a report to the Astrid team</string>
<!-- Sync: send error report button -->
<string name="sync_SPr_send_report">Send report</string>
<!-- Sync: Clear Data Title -->
<string name="sync_SPr_forget">Log out</string>
<!-- Sync: Clear Data Description -->
<string name="sync_SPr_forget_description">Clears all synchronization data</string>
<!-- confirmation dialog for sync log out -->
<string name="sync_forget_confirm">Log out/clear synchronization data?</string>
<!-- Sync error: network connectivity problems. %s-> name of sync service-->
<string name="sync_error_offline">There was a problem connecting to the network
during the last sync with %s. Please try again later.</string>
<string-array name="sync_SPr_interval_entries">
<!-- sync_SPr_interval_entries: Synchronization Intervals -->
<item>disable</item>
<item>every fifteen minutes</item>
<item>every thirty minutes</item>
<item>every hour</item>
<item>every three hours</item>
<item>every six hours</item>
<item>every twelve hours</item>
<item>every day</item>
<item>every three days</item>
<item>every week</item>
</string-array>
<resources>
<!-- ==================================================== Generic Units == -->
<plurals name="DUt_years">
<!-- plurals: years -->
<item quantity="one">1 Year</item>
<!-- plurals: years -->
<item quantity="other">%d Years</item>
</plurals>
<plurals name="DUt_months">
<!-- plurals: months -->
<item quantity="one">1 Month</item>
<!-- plurals: months -->
<item quantity="other">%d Months</item>
</plurals>
<plurals name="DUt_weeks">
<!-- plurals: days -->
<item quantity="one">1 Week</item>
<!-- plurals: days -->
<item quantity="other">%d Weeks</item>
</plurals>
<plurals name="DUt_days">
<!-- plurals: days -->
<item quantity="one">1 Day</item>
<!-- plurals: days -->
<item quantity="other">%d Days</item>
</plurals>
<plurals name="DUt_weekdays">
<!-- plurals: days -->
<item quantity="one">1 Weekday</item>
<!-- plurals: days -->
<item quantity="other">%d Weekdays</item>
</plurals>
<plurals name="DUt_hours">
<!-- plurals: hours -->
<item quantity="one">1 Hour</item>
<!-- plurals: hours -->
<item quantity="other">%d Hours</item>
</plurals>
<plurals name="DUt_minutes">
<!-- plurals: minutes -->
<item quantity="one">1 Minute</item>
<!-- plurals: minutes -->
<item quantity="other">%d Minutes</item>
</plurals>
<plurals name="DUt_seconds">
<!-- plurals: seconds -->
<item quantity="one">1 Second</item>
<!-- plurals: seconds -->
<item quantity="other">%d Seconds</item>
</plurals>
<plurals name="DUt_hoursShort">
<!-- plurals: hours (abbreviated) -->
<item quantity="one">1 Hr</item>
<!-- plurals: hours (abbreviated) -->
<item quantity="other">%d Hrs</item>
</plurals>
<plurals name="DUt_minutesShort">
<!-- plurals: minutes (abbreviated) -->
<item quantity="one">1 Min</item>
<!-- plurals: minutes (abbreviated) -->
<item quantity="other">%d Min</item>
</plurals>
<plurals name="DUt_secondsShort">
<!-- plurals: seconds (abbreviated) -->
<item quantity="one">1 Sec</item>
<!-- plurals: seconds (abbreviated) -->
<item quantity="other">%d Sec</item>
</plurals>
<plurals name="Ntasks">
<!-- plurals: tasks -->
<item quantity="one">1 task</item>
<!-- plurals: tasks -->
<item quantity="other">%d tasks</item>
</plurals>
<plurals name="Npeople">
<!-- plurals: people -->
<item quantity="one">1 person</item>
<!-- plurals: people -->
<item quantity="other">%d people</item>
</plurals>
<!-- slide 10a, 12c: today -->
<string name="today">Today</string>
<!-- tomorrow -->
<string name="tomorrow">Tomorrow</string>
<!-- yesterday -->
<string name="yesterday">Yesterday</string>
<!-- slide 12c: tomorrow, abbreviated -->
<string name="tmrw">Tmrw</string>
<!-- slide 12c: yesterday, abbreviated -->
<string name="yest">Yest</string>
<!-- ================================================== Generic Dialogs == -->
<!-- confirmation dialog title -->
<string name="DLG_confirm_title">Confirm?</string>
<!-- question dialog title -->
<string name="DLG_question_title">Question:</string>
<!-- information dialog title -->
<string name="DLG_information_title">Information</string>
<!-- error dialog title -->
<string name="DLG_error_title">Error!</string>
<!-- general dialog save-->
<string name="DLG_save">Save</string>
<!-- general dialog yes-->
<string name="DLG_yes">Yes</string>
<!-- general dialog no-->
<string name="DLG_no">No</string>
<!-- general dialog close-->
<string name="DLG_close">Close</string>
<!-- general dialog done -->
<string name="DLG_done">Done</string>
<!-- error dialog (%s => error message)-->
<string name="DLG_error">Oops, looks like an error occurred! Here\'s what happened:\n\n%s
</string>
<!-- error dialog (no message indicated)-->
<string name="DLG_error_generic">Oops, looks like an error occurred!</string>
<!-- Progress dialog shown when doing something slow -->
<string name="DLG_wait">Please wait...</string>
<!-- ====================================================== SyncProvider == -->
<!-- Sync Notification: message when sync service active -->
<string name="SyP_progress">Synchronizing your tasks...</string>
<!-- Sync Notification: toast when sync activated from activity -->
<string name="SyP_progress_toast">Synchronizing...</string>
<!-- Sync Label: used in menu to denote synchronization -->
<string name="SyP_label">Sync &amp; backup</string>
<!-- Sync Label: used in menu to denote synchronization -->
<string name="Sync_now_label">Sync now</string>
<!-- Sync label subtitle -->
<string name="SyP_summary">Astrid.com, Google Tasks, saved data, local backup</string>
<!-- Error msg when io exception -->
<string name="SyP_ioerror">Connection Error! Check your Internet connection.</string>
<!-- ================================================== SyncPreferences == -->
<!-- Status Group Label -->
<string name="sync_SPr_group_status">Status</string>
<!-- Sync status subtitle, %s-> status message -->
<string name="sync_SPr_status_subtitle">Status: %s</string>
<!-- Sync Status: log in -->
<string name="sync_status_loggedout">Not logged in</string>
<!-- Status: ongoing -->
<string name="sync_status_ongoing">Sync ongoing...</string>
<!-- Sync Status: success status (%s -> last sync date). Keep it short!-->
<string name="sync_status_success">Last sync:\n%s</string>
<!-- Sync Status: failure status (%s -> last attempted sync date) -->
<string name="sync_status_failed">Failed on: %s</string>
<!-- Sync Status: error status (%s -> last sync date) -->
<string name="sync_status_errors">Sync w/ errors: %s</string>
<!-- Sync Status: error subtitle (%s -> last successful sync date) -->
<string name="sync_status_failed_subtitle">Last successful sync: %s</string>
<!-- Sync Status: never sync'd -->
<string name="sync_status_never">Never synchronized!</string>
<!-- Options Group Label -->
<string name="sync_SPr_group_options">Options</string>
<!-- Preference: Synchronization Interval Title -->
<string name="sync_SPr_interval_title">Background sync</string>
<!-- Preference: Synchronization Interval Description (when disabled) -->
<string name="sync_SPr_interval_desc_disabled">Background synchronization is disabled</string>
<!-- Preference: Synchronization Interval Description (%s => setting) -->
<string name="sync_SPr_interval_desc">Currently set to: %s</string>
<!-- Preference: Background Wifi Title -->
<string name="sync_SPr_bgwifi_title">Wifi only setting</string>
<!-- Preference: Background Wifi Description (enabled) -->
<string name="sync_SPr_bgwifi_desc_enabled">Background synchronization only happens when on
Wifi
</string>
<!-- Preference: Background Wifi Description (disabled) -->
<string name="sync_SPr_bgwifi_desc_disabled">Background synchronization will always occur
</string>
<!-- Actions Group Label -->
<string name="sync_SPr_group_actions">Actions</string>
<!-- Synchronize Now Button -->
<string name="sync_SPr_sync">Synchronize now</string>
<!-- Synchronize Now Button if not logged in-->
<string name="sync_SPr_sync_log_in">Log in &amp; synchronize!</string>
<!-- Sync: Prefix string before logged in identifier -->
<string name="sync_SPr_logged_in_prefix">Logged in as:</string>
<!-- Sync: Last error -->
<string name="sync_SPr_last_error">Status report</string>
<!-- Sync: last error click for more -->
<string name="sync_SPr_last_error_subtitle">Click to send a report to the Astrid team</string>
<!-- Sync: send error report button -->
<string name="sync_SPr_send_report">Send report</string>
<!-- Sync: Clear Data Title -->
<string name="sync_SPr_forget">Log out</string>
<!-- Sync: Clear Data Description -->
<string name="sync_SPr_forget_description">Clears all synchronization data</string>
<!-- confirmation dialog for sync log out -->
<string name="sync_forget_confirm">Log out/clear synchronization data?</string>
<!-- Sync error: network connectivity problems. %s-> name of sync service-->
<string name="sync_error_offline">There was a problem connecting to the network
during the last sync with %s. Please try again later.
</string>
<string-array name="sync_SPr_interval_entries">
<!-- sync_SPr_interval_entries: Synchronization Intervals -->
<item>disable</item>
<item>every fifteen minutes</item>
<item>every thirty minutes</item>
<item>every hour</item>
<item>every three hours</item>
<item>every six hours</item>
<item>every twelve hours</item>
<item>every day</item>
<item>every three days</item>
<item>every week</item>
</string-array>
</resources>

@ -5,9 +5,6 @@
*/
package com.todoroo.andlib.data;
import java.lang.reflect.Field;
import java.util.ArrayList;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
@ -24,25 +21,27 @@ import com.todoroo.andlib.service.DependencyInjectionService;
import com.todoroo.andlib.service.ExceptionService;
import com.todoroo.andlib.utility.AndroidUtilities;
import java.lang.reflect.Field;
import java.util.ArrayList;
/**
* AbstractDatabase is a database abstraction which wraps a SQLite database.
* <p>
* <p/>
* Users of this class are in charge of the database's lifecycle - ensuring that
* the database is open when needed and closed when usage is finished. Within an
* activity, this is typically accomplished through the onResume and onPause
* methods, though if the database is not needed for the activity's entire
* lifecycle, it can be closed earlier.
* <p>
* <p/>
* Direct querying is not recommended for type safety reasons. Instead, use one
* of the service classes to issue the request and return a {@link TodorooCursor}.
*
* @author Tim Su <tim@todoroo.com>
*
*/
@SuppressWarnings("nls")
abstract public class AbstractDatabase {
// --- abstract methods
// --- abstract methods
/**
* @return database name
@ -67,6 +66,7 @@ abstract public class AbstractDatabase {
/**
* Upgrades an open database from one version to the next
*
* @param oldVersion
* @param newVersion
* @return true if upgrade was handled, false otherwise
@ -105,12 +105,12 @@ abstract public class AbstractDatabase {
}
protected void onDatabaseUpdated() {
for(DatabaseUpdateListener listener : listeners) {
for (DatabaseUpdateListener listener : listeners) {
listener.onDatabaseUpdated();
}
}
// --- internal implementation
// --- internal implementation
@Autowired
private ExceptionService exceptionService;
@ -121,12 +121,13 @@ abstract public class AbstractDatabase {
/**
* Return the name of the table containing these models
*
* @param modelType
* @return
*/
public final Table getTable(Class<? extends AbstractModel> modelType) {
for(Table table : getTables()) {
if(table.modelClass.equals(modelType))
for (Table table : getTables()) {
if (table.modelClass.equals(modelType))
return table;
}
throw new UnsupportedOperationException("Unknown model class " + modelType); //$NON-NLS-1$
@ -149,8 +150,8 @@ abstract public class AbstractDatabase {
}
protected synchronized final void initializeHelper() {
if(helper == null) {
if(ContextManager.getContext() == null)
if (helper == null) {
if (ContextManager.getContext() == null)
throw new NullPointerException("Null context creating database helper");
helper = new DatabaseHelper(ContextManager.getContext(),
getName(), null, getVersion());
@ -164,7 +165,7 @@ abstract public class AbstractDatabase {
public synchronized final void openForWriting() {
initializeHelper();
if(database != null && !database.isReadOnly() && database.isOpen())
if (database != null && !database.isReadOnly() && database.isOpen())
return;
try {
@ -192,7 +193,7 @@ abstract public class AbstractDatabase {
*/
public synchronized final void openForReading() {
initializeHelper();
if(database != null && database.isOpen())
if (database != null && database.isOpen())
return;
database = helper.getReadableDatabase();
}
@ -201,7 +202,7 @@ abstract public class AbstractDatabase {
* Close the database if it has been opened previously
*/
public synchronized final void close() {
if(database != null) {
if (database != null) {
database.close();
}
database = null;
@ -220,7 +221,7 @@ abstract public class AbstractDatabase {
* @return sql database. opens database if not yet open
*/
public synchronized final SQLiteDatabase getDatabase() {
if(database == null) {
if (database == null) {
AndroidUtilities.sleepDeep(300L);
openForWriting();
}
@ -273,7 +274,7 @@ abstract public class AbstractDatabase {
/*
* @see android.database.sqlite.SQLiteDatabase#update(String table, ContentValues values, String whereClause, String[] whereArgs)
*/
public synchronized int update(String table, ContentValues values, String whereClause, String[] whereArgs) {
public synchronized int update(String table, ContentValues values, String whereClause, String[] whereArgs) {
int result = getDatabase().update(table, values, whereClause, whereArgs);
onDatabaseUpdated();
return result;
@ -287,7 +288,7 @@ abstract public class AbstractDatabase {
private class DatabaseHelper extends SQLiteOpenHelper {
public DatabaseHelper(Context context, String name,
CursorFactory factory, int version) {
CursorFactory factory, int version) {
super(context, name, factory, version);
}
@ -300,11 +301,11 @@ abstract public class AbstractDatabase {
SqlConstructorVisitor sqlVisitor = new SqlConstructorVisitor();
// create tables
for(Table table : getTables()) {
for (Table table : getTables()) {
sql.append("CREATE TABLE IF NOT EXISTS ").append(table.name).append('(').
append(AbstractModel.ID_PROPERTY).append(" INTEGER PRIMARY KEY AUTOINCREMENT");
for(Property<?> property : table.getProperties()) {
if(AbstractModel.ID_PROPERTY.name.equals(property.name))
append(AbstractModel.ID_PROPERTY).append(" INTEGER PRIMARY KEY AUTOINCREMENT");
for (Property<?> property : table.getProperties()) {
if (AbstractModel.ID_PROPERTY.name.equals(property.name))
continue;
sql.append(',').append(property.accept(sqlVisitor, null));
}
@ -328,7 +329,7 @@ abstract public class AbstractDatabase {
database = db;
try {
if(!AbstractDatabase.this.onUpgrade(oldVersion, newVersion)) {
if (!AbstractDatabase.this.onUpgrade(oldVersion, newVersion)) {
// We don't know how to handle this case because someone forgot to
// implement the upgrade. We can't drop tables, we can only
// throw a nasty exception at this time
@ -347,7 +348,6 @@ abstract public class AbstractDatabase {
* Visitor that returns SQL constructor for this property
*
* @author Tim Su <tim@todoroo.com>
*
*/
public static class SqlConstructorVisitor implements PropertyVisitor<String, Void> {

@ -5,15 +5,6 @@
*/
package com.todoroo.andlib.data;
import java.lang.reflect.Array;
import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map.Entry;
import java.util.Set;
import android.content.ContentValues;
import android.os.Parcel;
import android.os.Parcelable;
@ -24,15 +15,23 @@ import com.todoroo.andlib.data.Property.LongProperty;
import com.todoroo.andlib.data.Property.PropertyVisitor;
import com.todoroo.andlib.utility.AndroidUtilities;
import java.lang.reflect.Array;
import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map.Entry;
import java.util.Set;
/**
* <code>AbstractModel</code> represents a row in a database.
* <p>
* <p/>
* A single database can be represented by multiple <code>AbstractModel</code>s
* corresponding to different queries that return a different set of columns.
* Each model exposes a set of properties that it contains.
*
* @author Tim Su <tim@todoroo.com>
*
*/
public abstract class AbstractModel implements Parcelable, Cloneable {
@ -42,21 +41,31 @@ public abstract class AbstractModel implements Parcelable, Cloneable {
// --- constants
/** id property common to all models */
/**
* id property common to all models
*/
protected static final String ID_PROPERTY_NAME = "_id"; //$NON-NLS-1$
/** id field common to all models */
/**
* id field common to all models
*/
public static final LongProperty ID_PROPERTY = new LongProperty(null, ID_PROPERTY_NAME);
/** sentinel for objects without an id */
/**
* sentinel for objects without an id
*/
public static final long NO_ID = 0;
/** prefix for transitories retained in content values */
/**
* prefix for transitories retained in content values
*/
public static final String RETAIN_TRANSITORY_PREFIX = "retain-trans-"; //$NON-NLS-1$
// --- abstract methods
/** Get the default values for this object */
/**
* Get the default values for this object
*/
abstract public ContentValues getDefaultValues();
// --- data store variables and management
@ -68,35 +77,47 @@ public abstract class AbstractModel implements Parcelable, Cloneable {
* the database (values), then defaults (getDefaultValues)
*/
/** User set values */
/**
* User set values
*/
protected ContentValues setValues = null;
/** Values from database */
/**
* Values from database
*/
protected ContentValues values = null;
/** Transitory Metadata (not saved in database) */
/**
* Transitory Metadata (not saved in database)
*/
protected HashMap<String, Object> transitoryData = null;
/** Get database-read values for this object */
/**
* Get database-read values for this object
*/
public ContentValues getDatabaseValues() {
return values;
}
/** Get the user-set values for this object */
/**
* Get the user-set values for this object
*/
public ContentValues getSetValues() {
return setValues;
}
/** Get a list of all field/value pairs merged across data sources */
/**
* Get a list of all field/value pairs merged across data sources
*/
public ContentValues getMergedValues() {
ContentValues mergedValues = new ContentValues();
ContentValues defaultValues = getDefaultValues();
if(defaultValues != null)
if (defaultValues != null)
mergedValues.putAll(defaultValues);
if(values != null)
if (values != null)
mergedValues.putAll(values);
if(setValues != null)
if (setValues != null)
mergedValues.putAll(setValues);
return mergedValues;
@ -115,9 +136,9 @@ public abstract class AbstractModel implements Parcelable, Cloneable {
* saved - future saves will not need to write all the data as before.
*/
public void markSaved() {
if(values == null)
if (values == null)
values = setValues;
else if(setValues != null)
else if (setValues != null)
values.putAll(setValues);
setValues = null;
}
@ -128,10 +149,10 @@ public abstract class AbstractModel implements Parcelable, Cloneable {
*/
@Override
public boolean equals(Object other) {
if(other == null || other.getClass() != getClass())
if (other == null || other.getClass() != getClass())
return false;
return getMergedValues().equals(((AbstractModel)other).getMergedValues());
return getMergedValues().equals(((AbstractModel) other).getMergedValues());
}
@Override
@ -144,10 +165,10 @@ public abstract class AbstractModel implements Parcelable, Cloneable {
public String toString() {
StringBuilder builder = new StringBuilder();
builder.append(getClass().getSimpleName()).append("\n")
.append("set values:\n")
.append(setValues).append("\n")
.append("values:\n")
.append(values).append("\n");
.append("set values:\n")
.append(setValues).append("\n")
.append("values:\n")
.append(values).append("\n");
return builder.toString();
}
@ -159,14 +180,16 @@ public abstract class AbstractModel implements Parcelable, Cloneable {
} catch (CloneNotSupportedException e) {
throw new RuntimeException(e);
}
if(setValues != null)
if (setValues != null)
clone.setValues = new ContentValues(setValues);
if(values != null)
if (values != null)
clone.values = new ContentValues(values);
return clone;
}
/** Check if this model has values that have been changed */
/**
* Check if this model has values that have been changed
*/
public boolean isModified() {
return setValues.size() > 0;
}
@ -198,29 +221,29 @@ public abstract class AbstractModel implements Parcelable, Cloneable {
*/
public synchronized <TYPE> TYPE getValue(Property<TYPE> property) {
Object value;
if(setValues != null && setValues.containsKey(property.getColumnName()))
if (setValues != null && setValues.containsKey(property.getColumnName()))
value = setValues.get(property.getColumnName());
else if(values != null && values.containsKey(property.getColumnName()))
else if (values != null && values.containsKey(property.getColumnName()))
value = values.get(property.getColumnName());
else if(getDefaultValues().containsKey(property.getColumnName()))
else if (getDefaultValues().containsKey(property.getColumnName()))
value = getDefaultValues().get(property.getColumnName());
else
throw new UnsupportedOperationException(
"Model Error: Did not read property " + property.name); //$NON-NLS-1$
"Model Error: Did not read property " + property.name); //$NON-NLS-1$
// resolve properties that were retrieved with a different type than accessed
try {
if(value instanceof String && property instanceof LongProperty)
return (TYPE) Long.valueOf((String)value);
else if(value instanceof String && property instanceof IntegerProperty)
return (TYPE) Integer.valueOf((String)value);
else if(value instanceof String && property instanceof DoubleProperty)
return (TYPE) Double.valueOf((String)value);
else if(value instanceof Integer && property instanceof LongProperty)
return (TYPE) Long.valueOf(((Number)value).longValue());
if (value instanceof String && property instanceof LongProperty)
return (TYPE) Long.valueOf((String) value);
else if (value instanceof String && property instanceof IntegerProperty)
return (TYPE) Integer.valueOf((String) value);
else if (value instanceof String && property instanceof DoubleProperty)
return (TYPE) Double.valueOf((String) value);
else if (value instanceof Integer && property instanceof LongProperty)
return (TYPE) Long.valueOf(((Number) value).longValue());
return (TYPE) value;
} catch (NumberFormatException e) {
return (TYPE) getDefaultValues().get(property.name);
@ -235,9 +258,9 @@ public abstract class AbstractModel implements Parcelable, Cloneable {
abstract public long getId();
protected long getIdHelper(LongProperty id) {
if(setValues != null && setValues.containsKey(id.name))
if (setValues != null && setValues.containsKey(id.name))
return setValues.getAsLong(id.name);
else if(values != null && values.containsKey(id.name))
else if (values != null && values.containsKey(id.name))
return values.getAsLong(id.name);
else
return NO_ID;
@ -247,7 +270,7 @@ public abstract class AbstractModel implements Parcelable, Cloneable {
if (setValues == null)
setValues = new ContentValues();
if(id == NO_ID)
if (id == NO_ID)
clearValue(ID_PROPERTY);
else
setValues.put(ID_PROPERTY_NAME, id);
@ -265,9 +288,9 @@ public abstract class AbstractModel implements Parcelable, Cloneable {
* @return true if setValues or values contains this property
*/
public boolean containsValue(Property<?> property) {
if(setValues != null && setValues.containsKey(property.getColumnName()))
if (setValues != null && setValues.containsKey(property.getColumnName()))
return true;
if(values != null && values.containsKey(property.getColumnName()))
if (values != null && values.containsKey(property.getColumnName()))
return true;
return false;
}
@ -275,12 +298,12 @@ public abstract class AbstractModel implements Parcelable, Cloneable {
/**
* @param property
* @return true if setValues or values contains this property, and the value
* stored is not null
* stored is not null
*/
public boolean containsNonNullValue(Property<?> property) {
if(setValues != null && setValues.containsKey(property.getColumnName()))
if (setValues != null && setValues.containsKey(property.getColumnName()))
return setValues.get(property.getColumnName()) != null;
if(values != null && values.containsKey(property.getColumnName()))
if (values != null && values.containsKey(property.getColumnName()))
return values.get(property.getColumnName()) != null;
return false;
}
@ -294,12 +317,12 @@ public abstract class AbstractModel implements Parcelable, Cloneable {
protected synchronized <TYPE> boolean shouldSaveValue(
Property<TYPE> property, TYPE newValue) {
// we've already decided to save it, so overwrite old value
// we've already decided to save it, so overwrite old value
if (setValues.containsKey(property.getColumnName()))
return true;
return true;
// values contains this key, we should check it out
if(values != null && values.containsKey(property.getColumnName())) {
if (values != null && values.containsKey(property.getColumnName())) {
TYPE value = getValue(property);
if (value == null) {
if (newValue == null)
@ -316,7 +339,7 @@ public abstract class AbstractModel implements Parcelable, Cloneable {
* Sets the given property. Make sure this model has this property!
*/
public synchronized <TYPE> void setValue(Property<TYPE> property,
TYPE value) {
TYPE value) {
if (setValues == null)
setValues = new ContentValues();
if (!shouldSaveValue(property, value))
@ -350,23 +373,25 @@ public abstract class AbstractModel implements Parcelable, Cloneable {
/**
* Clear the key for the given property
*
* @param property
*/
public synchronized void clearValue(Property<?> property) {
if(setValues != null && setValues.containsKey(property.getColumnName()))
if (setValues != null && setValues.containsKey(property.getColumnName()))
setValues.remove(property.getColumnName());
if(values != null && values.containsKey(property.getColumnName()))
if (values != null && values.containsKey(property.getColumnName()))
values.remove(property.getColumnName());
}
/**
* Sets the state of the given flag on the given property
*
* @param property
* @param flag
* @param value
*/
public void setFlag(IntegerProperty property, int flag, boolean value) {
if(value)
if (value)
setValue(property, getValue(property) | flag);
else
setValue(property, getValue(property) & ~flag);
@ -374,8 +399,9 @@ public abstract class AbstractModel implements Parcelable, Cloneable {
/**
* Returns the set state of the given flag on the given property
*
* @param property the property to get the set state of the flag
* @param flag the flag-descriptor (e.g. <code>Task.FLAG_REPEAT_AFTER_COMPLETION</code>)
* @param flag the flag-descriptor (e.g. <code>Task.FLAG_REPEAT_AFTER_COMPLETION</code>)
* @return true if the flag is set
*/
public boolean getFlag(IntegerProperty property, int flag) {
@ -386,13 +412,13 @@ public abstract class AbstractModel implements Parcelable, Cloneable {
// --- setting and retrieving flags
public synchronized void putTransitory(String key, Object value) {
if(transitoryData == null)
if (transitoryData == null)
transitoryData = new HashMap<String, Object>();
transitoryData.put(key, value);
}
public Object getTransitory(String key) {
if(transitoryData == null)
if (transitoryData == null)
return null;
return transitoryData.get(key);
}
@ -427,18 +453,18 @@ public abstract class AbstractModel implements Parcelable, Cloneable {
*/
protected static Property<?>[] generateProperties(Class<? extends AbstractModel> cls) {
ArrayList<Property<?>> properties = new ArrayList<Property<?>>();
if(cls.getSuperclass() != AbstractModel.class)
if (cls.getSuperclass() != AbstractModel.class)
properties.addAll(Arrays.asList(generateProperties(
(Class<? extends AbstractModel>) cls.getSuperclass())));
(Class<? extends AbstractModel>) cls.getSuperclass())));
// a property is public, static & extends Property
for(Field field : cls.getFields()) {
if((field.getModifiers() & Modifier.STATIC) == 0)
for (Field field : cls.getFields()) {
if ((field.getModifiers() & Modifier.STATIC) == 0)
continue;
if(!Property.class.isAssignableFrom(field.getType()))
if (!Property.class.isAssignableFrom(field.getType()))
continue;
try {
if(((Property<?>) field.get(null)).table == null)
if (((Property<?>) field.get(null)).table == null)
continue;
properties.add((Property<?>) field.get(null));
} catch (IllegalArgumentException e) {
@ -455,7 +481,6 @@ public abstract class AbstractModel implements Parcelable, Cloneable {
* Visitor that saves a value into a content values store
*
* @author Tim Su <tim@todoroo.com>
*
*/
public static class ContentValuesSavingVisitor implements PropertyVisitor<Void, Object> {
@ -467,7 +492,7 @@ public abstract class AbstractModel implements Parcelable, Cloneable {
// we don't allow null values, as they indicate unset properties
// when the database was written
if(value != null)
if (value != null)
property.accept(this, value);
}
@ -516,9 +541,9 @@ public abstract class AbstractModel implements Parcelable, Cloneable {
*/
abstract protected Parcelable.Creator<? extends AbstractModel> getCreator();
/**
* Parcelable creator helper
*/
/**
* Parcelable creator helper
*/
protected static final class ModelCreator<TYPE extends AbstractModel>
implements Parcelable.Creator<TYPE> {
@ -551,7 +576,11 @@ public abstract class AbstractModel implements Parcelable, Cloneable {
*/
public TYPE[] newArray(int size) {
return (TYPE[]) Array.newInstance(cls, size);
};
};
}
;
}
;
}

@ -5,10 +5,6 @@
*/
package com.todoroo.andlib.data;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.util.Set;
import android.content.ContentResolver;
import android.content.ContentValues;
import android.content.Context;
@ -22,23 +18,32 @@ import com.todoroo.andlib.sql.Criterion;
import com.todoroo.andlib.sql.Query;
import com.todoroo.andlib.utility.AndroidUtilities;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.util.Set;
/**
* DAO for reading and writing values from an Android ContentResolver
*
* @author Tim Su <tim@todoroo.com>
*
* @param <TYPE> model type
* @author Tim Su <tim@todoroo.com>
*/
public class ContentResolverDao<TYPE extends AbstractModel> {
/** class of model */
/**
* class of model
*/
private final Class<TYPE> modelClass;
/** base content uri */
/**
* base content uri
*/
private final Uri baseUri;
/** content resolver */
/**
* content resolver
*/
private final ContentResolver cr;
@Autowired
@ -47,7 +52,7 @@ public class ContentResolverDao<TYPE extends AbstractModel> {
public ContentResolverDao(Class<TYPE> modelClass, Context context, Uri baseUri) {
DependencyInjectionService.getInstance().inject(this);
this.modelClass = modelClass;
if(debug == null)
if (debug == null)
debug = false;
this.baseUri = baseUri;
@ -56,6 +61,7 @@ public class ContentResolverDao<TYPE extends AbstractModel> {
/**
* Returns a URI for a single id
*
* @param id
* @return
*/
@ -65,6 +71,7 @@ public class ContentResolverDao<TYPE extends AbstractModel> {
/**
* Delete specific item from the given table
*
* @param id
* @return number of rows affected
*/
@ -74,6 +81,7 @@ public class ContentResolverDao<TYPE extends AbstractModel> {
/**
* Delete by criteria
*
* @param where
* @return number of rows affected
*/
@ -83,11 +91,12 @@ public class ContentResolverDao<TYPE extends AbstractModel> {
/**
* Query content provider
*
* @param query
* @return
*/
public TodorooCursor<TYPE> query(Query query) {
if(debug)
if (debug)
Log.i("SQL-" + modelClass.getSimpleName(), query.toString()); //$NON-NLS-1$
Cursor cursor = query.queryContentResolver(cr, baseUri);
return new TodorooCursor<TYPE>(cursor, query.getFields());
@ -95,15 +104,16 @@ public class ContentResolverDao<TYPE extends AbstractModel> {
/**
* Create new or save existing model
*
* @param model
* @return true if data was written to the db, false otherwise
*/
public boolean save(TYPE model) {
writeTransitoriesToModelContentValues(model);
if(model.isSaved()) {
if(model.getSetValues() == null)
if (model.isSaved()) {
if (model.getSetValues() == null)
return false;
if(cr.update(uriWithId(model.getId()), model.getSetValues(), null, null) != 0)
if (cr.update(uriWithId(model.getId()), model.getSetValues(), null, null) != 0)
return true;
}
Uri uri = cr.insert(baseUri, model.getMergedValues());
@ -130,12 +140,9 @@ public class ContentResolverDao<TYPE extends AbstractModel> {
* Returns object corresponding to the given identifier
*
* @param database
* @param table
* name of table
* @param properties
* properties to read
* @param id
* id of item
* @param table name of table
* @param properties properties to read
* @param id id of item
* @return null if no item found
*/
public TYPE fetch(long id, Property<?>... properties) {

@ -5,14 +5,6 @@
*/
package com.todoroo.andlib.data;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.util.ArrayList;
import java.util.Map.Entry;
import java.util.Set;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicInteger;
import android.content.ContentValues;
import android.database.Cursor;
import android.database.sqlite.SQLiteTransactionListener;
@ -26,6 +18,13 @@ import com.todoroo.andlib.utility.DateUtilities;
import com.todoroo.astrid.data.OutstandingEntry;
import com.todoroo.astrid.data.SyncFlags;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.util.ArrayList;
import java.util.Map.Entry;
import java.util.Set;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicInteger;
/**
@ -34,7 +33,6 @@ import com.todoroo.astrid.data.SyncFlags;
* of {@link ContentResolverDao} instead.
*
* @author Tim Su <tim@todoroo.com>
*
*/
public class DatabaseDao<TYPE extends AbstractModel> {
@ -54,7 +52,7 @@ public class DatabaseDao<TYPE extends AbstractModel> {
public DatabaseDao(Class<TYPE> modelClass) {
DependencyInjectionService.getInstance().inject(this);
this.modelClass = modelClass;
if(debug == null)
if (debug == null)
debug = false;
}
@ -63,7 +61,9 @@ public class DatabaseDao<TYPE extends AbstractModel> {
setDatabase(database);
}
/** Gets table associated with this DAO */
/**
* Gets table associated with this DAO
*/
public Table getTable() {
return table;
}
@ -79,7 +79,7 @@ public class DatabaseDao<TYPE extends AbstractModel> {
* @param database
*/
public void setDatabase(AbstractDatabase database) {
if(database == this.database)
if (database == this.database)
return;
this.database = database;
table = database.getTable(modelClass);
@ -93,7 +93,7 @@ public class DatabaseDao<TYPE extends AbstractModel> {
}
private final ArrayList<ModelUpdateListener<TYPE>> listeners =
new ArrayList<ModelUpdateListener<TYPE>>();
new ArrayList<ModelUpdateListener<TYPE>>();
public void addListener(ModelUpdateListener<TYPE> listener) {
listeners.add(listener);
@ -101,7 +101,7 @@ public class DatabaseDao<TYPE extends AbstractModel> {
protected void onModelUpdated(TYPE model, boolean outstandingEntries) {
TYPE modelCopy = (TYPE) model.clone();
for(ModelUpdateListener<TYPE> listener : listeners) {
for (ModelUpdateListener<TYPE> listener : listeners) {
listener.onModelUpdated(modelCopy, outstandingEntries);
}
}
@ -116,7 +116,7 @@ public class DatabaseDao<TYPE extends AbstractModel> {
*/
public TodorooCursor<TYPE> query(Query query) {
query.from(table);
if(debug)
if (debug)
Log.i("SQL-" + modelClass.getSimpleName(), query.toString()); //$NON-NLS-1$
Cursor cursor = database.rawQuery(query.toString(), null);
return new TodorooCursor<TYPE>(cursor, query.getFields());
@ -132,7 +132,7 @@ public class DatabaseDao<TYPE extends AbstractModel> {
*/
public TodorooCursor<TYPE> rawQuery(String selection, String[] selectionArgs, Property<?>... properties) {
String[] fields = new String[properties.length];
for(int i = 0; i < properties.length; i++)
for (int i = 0; i < properties.length; i++)
fields[i] = properties[i].name;
return new TodorooCursor<TYPE>(database.getDatabase().query(table.name,
fields, selection, selectionArgs, null, null, null),
@ -143,12 +143,9 @@ public class DatabaseDao<TYPE extends AbstractModel> {
* Returns object corresponding to the given identifier
*
* @param database
* @param table
* name of table
* @param properties
* properties to read
* @param id
* id of item
* @param table name of table
* @param properties properties to read
* @param id id of item
* @return null if no item found
*/
public TYPE fetch(long id, Property<?>... properties) {
@ -193,6 +190,7 @@ public class DatabaseDao<TYPE extends AbstractModel> {
/**
* Delete all matching a clause
*
* @param where predicate for deletion
* @return # of deleted items
*/
@ -203,14 +201,15 @@ public class DatabaseDao<TYPE extends AbstractModel> {
/**
* Update all matching a clause to have the values set on template object.
* <p>
* <p/>
* Example (updates "joe" => "bob" in metadata value1):
* {code}
* Metadata item = new Metadata();
* item.setValue(Metadata.VALUE1, "bob");
* update(item, Metadata.VALUE1.eq("joe"));
* {code}
* @param where sql criteria
*
* @param where sql criteria
* @param template set fields on this object in order to set them in the db.
* @return # of updated items
*/
@ -241,8 +240,10 @@ public class DatabaseDao<TYPE extends AbstractModel> {
Log.e(ERROR_TAG, "Error updating rows", new Throwable()); //$NON-NLS-1$
result.set(0);
}
@Override
public void onCommit() {/**/}
@Override
public void onBegin() {/**/}
});
@ -299,7 +300,7 @@ public class DatabaseDao<TYPE extends AbstractModel> {
boolean recordOutstanding = shouldRecordOutstanding(item);
final AtomicBoolean result = new AtomicBoolean(false);
synchronized(database) {
synchronized (database) {
if (recordOutstanding) { // begin transaction
database.getDatabase().beginTransactionWithListener(new SQLiteTransactionListener() {
@Override
@ -307,8 +308,10 @@ public class DatabaseDao<TYPE extends AbstractModel> {
Log.e(ERROR_TAG, "Error inserting or updating rows", new Throwable()); //$NON-NLS-1$
result.set(false);
}
@Override
public void onCommit() {/**/}
@Override
public void onBegin() {/**/}
});
@ -316,7 +319,7 @@ public class DatabaseDao<TYPE extends AbstractModel> {
int numOutstanding = 0;
try {
result.set(op.makeChange());
if(result.get()) {
if (result.get()) {
if (recordOutstanding && ((numOutstanding = createOutstandingEntries(item.getId(), values)) != -1)) // Create entries for setValues in outstanding table
database.getDatabase().setTransactionSuccessful();
}
@ -336,10 +339,8 @@ public class DatabaseDao<TYPE extends AbstractModel> {
* Creates the given item.
*
* @param database
* @param table
* table name
* @param item
* item model
* @param table table name
* @param item item model
* @return returns true on success.
*/
public boolean createNew(final TYPE item) {
@ -363,15 +364,13 @@ public class DatabaseDao<TYPE extends AbstractModel> {
* Saves the given item. Will not create a new item!
*
* @param database
* @param table
* table name
* @param item
* item model
* @param table table name
* @param item item model
* @return returns true on success.
*/
public boolean saveExisting(final TYPE item) {
final ContentValues values = item.getSetValues();
if(values == null || values.size() == 0) // nothing changed
if (values == null || values.size() == 0) // nothing changed
return true;
DatabaseChangeOp update = new DatabaseChangeOp() {
@Override
@ -412,6 +411,7 @@ public class DatabaseDao<TYPE extends AbstractModel> {
* Returns true if an entry in the outstanding table should be recorded for this
* column. Subclasses can override to return false for insignificant columns
* (e.g. Task.DETAILS, last modified, etc.)
*
* @param columnName
* @return
*/
@ -426,12 +426,9 @@ public class DatabaseDao<TYPE extends AbstractModel> {
* Returns cursor to object corresponding to the given identifier
*
* @param database
* @param table
* name of table
* @param properties
* properties to read
* @param id
* id of item
* @param table name of table
* @param properties properties to read
* @param id id of item
* @return
*/
protected TodorooCursor<TYPE> fetchItem(long id, Property<?>... properties) {

@ -5,10 +5,6 @@
*/
package com.todoroo.andlib.data;
import static com.todoroo.andlib.sql.SqlConstants.COMMA;
import static com.todoroo.andlib.sql.SqlConstants.LEFT_PARENTHESIS;
import static com.todoroo.andlib.sql.SqlConstants.RIGHT_PARENTHESIS;
import static com.todoroo.andlib.sql.SqlConstants.SPACE;
import android.text.TextUtils;
import com.todoroo.andlib.sql.Criterion;
@ -16,40 +12,59 @@ import com.todoroo.andlib.sql.Field;
import com.todoroo.andlib.sql.Operator;
import com.todoroo.andlib.sql.UnaryCriterion;
import static com.todoroo.andlib.sql.SqlConstants.COMMA;
import static com.todoroo.andlib.sql.SqlConstants.LEFT_PARENTHESIS;
import static com.todoroo.andlib.sql.SqlConstants.RIGHT_PARENTHESIS;
import static com.todoroo.andlib.sql.SqlConstants.SPACE;
/**
* Property represents a typed column in a database.
*
* <p/>
* Within a given database row, the parameter may not exist, in which case the
* value is null, it may be of an incorrect type, in which case an exception is
* thrown, or the correct type, in which case the value is returned.
*
* @param <TYPE> a database supported type, such as String or Integer
* @author Tim Su <tim@todoroo.com>
*
* @param <TYPE>
* a database supported type, such as String or Integer
*/
@SuppressWarnings("nls")
public abstract class Property<TYPE> extends Field implements Cloneable {
// --- implementation
/** The database table name this property */
/**
* The database table name this property
*/
public final Table table;
/** The database column name for this property */
/**
* The database column name for this property
*/
public final String name;
/** Can this field be null? */
/**
* Can this field be null?
*/
public static final int PROP_FLAG_NULLABLE = 1 << 0;
/** Is this field a date? */
/**
* Is this field a date?
*/
public static final int PROP_FLAG_DATE = 1 << 1;
/** Is this field a user id? */
/**
* Is this field a user id?
*/
public static final int PROP_FLAG_USER_ID = 1 << 2;
/** Is this field a boolean? */
/**
* Is this field a boolean?
*/
public static final int PROP_FLAG_BOOLEAN = 1 << 3;
/** Is this field a serialized JSON object? */
/**
* Is this field a serialized JSON object?
*/
public static final int PROP_FLAG_JSON = 1 << 4;
/** Is this field for pictures? (usually as a json object containing "path" key or urls) */
/**
* Is this field for pictures? (usually as a json object containing "path" key or urls)
*/
public static final int PROP_FLAG_PICTURE = 1 << 5;
public int flags = 0;
@ -109,7 +124,7 @@ public abstract class Property<TYPE> extends Field implements Cloneable {
try {
Property<TYPE> newInstance = this.getClass().getConstructor(Table.class, String.class).newInstance(aliasedTable, this.name);
if(!TextUtils.isEmpty(columnAlias))
if (!TextUtils.isEmpty(columnAlias))
return (Property<TYPE>) newInstance.as(columnAlias);
return newInstance;
} catch (Exception e) {
@ -123,7 +138,6 @@ public abstract class Property<TYPE> extends Field implements Cloneable {
* Visitor interface for property classes
*
* @author Tim Su <tim@todoroo.com>
*
*/
public interface PropertyVisitor<RETURN, PARAMETER> {
public RETURN visitInteger(Property<Integer> property, PARAMETER data);
@ -141,7 +155,6 @@ public abstract class Property<TYPE> extends Field implements Cloneable {
* Integer property type. See {@link Property}
*
* @author Tim Su <tim@todoroo.com>
*
*/
public static class IntegerProperty extends Property<Integer> {
@ -178,7 +191,6 @@ public abstract class Property<TYPE> extends Field implements Cloneable {
* String property type. See {@link Property}
*
* @author Tim Su <tim@todoroo.com>
*
*/
public static class StringProperty extends Property<String> {
@ -230,7 +242,6 @@ public abstract class Property<TYPE> extends Field implements Cloneable {
* Double property type. See {@link Property}
*
* @author Tim Su <tim@todoroo.com>
*
*/
public static class DoubleProperty extends Property<Double> {
@ -263,7 +274,6 @@ public abstract class Property<TYPE> extends Field implements Cloneable {
* Long property type. See {@link Property}
*
* @author Tim Su <tim@todoroo.com>
*
*/
public static class LongProperty extends Property<Long> {
@ -308,7 +318,9 @@ public abstract class Property<TYPE> extends Field implements Cloneable {
// --- pseudo-properties
/** Runs a SQL function and returns the result as a string */
/**
* Runs a SQL function and returns the result as a string
*/
public static class StringFunctionProperty extends StringProperty {
public StringFunctionProperty(String function, String columnName) {
super(null, columnName, function);
@ -316,7 +328,9 @@ public abstract class Property<TYPE> extends Field implements Cloneable {
}
}
/** Runs a SQL function and returns the result as a string */
/**
* Runs a SQL function and returns the result as a string
*/
public static class IntegerFunctionProperty extends IntegerProperty {
public IntegerFunctionProperty(String function, String columnName) {
super(null, columnName, function);
@ -324,7 +338,9 @@ public abstract class Property<TYPE> extends Field implements Cloneable {
}
}
/** Counting in aggregated tables. Returns the result of COUNT(1) */
/**
* Counting in aggregated tables. Returns the result of COUNT(1)
*/
public static final class CountProperty extends IntegerFunctionProperty {
public CountProperty() {
super("COUNT(1)", "count");

@ -13,7 +13,6 @@ import com.todoroo.andlib.sql.SqlTable;
* clone the table when it returns.
*
* @author Tim Su <tim@todoroo.com>
*
*/
public final class Table extends SqlTable {
public final String name;
@ -32,12 +31,13 @@ public final class Table extends SqlTable {
/**
* Reads a list of properties from model class by reflection
*
* @return property array
*/
@SuppressWarnings("nls")
public Property<?>[] getProperties() {
try {
return (Property<?>[])modelClass.getField("PROPERTIES").get(null);
return (Property<?>[]) modelClass.getField("PROPERTIES").get(null);
} catch (IllegalArgumentException e) {
throw new RuntimeException(e);
} catch (SecurityException e) {
@ -61,25 +61,26 @@ public final class Table extends SqlTable {
/**
* Create a field object based on the given property
*
* @param property
* @return
*/
@SuppressWarnings("nls")
public Field field(Property<?> property) {
if(alias != null)
if (alias != null)
return Field.field(alias + "." + property.name);
return Field.field(name + "." + property.name);
}
@Override
public String toString() {
if(hasAlias())
if (hasAlias())
return expression + " AS " + alias; //$NON-NLS-1$
return expression;
}
public String name() {
if(hasAlias())
if (hasAlias())
return alias;
return name;
}

@ -5,35 +5,42 @@
*/
package com.todoroo.andlib.data;
import java.util.WeakHashMap;
import android.database.Cursor;
import android.database.CursorWrapper;
import com.todoroo.andlib.data.Property.PropertyVisitor;
import java.util.WeakHashMap;
/**
* AstridCursor wraps a cursor and allows users to query for individual
* {@link Property} types or read an entire {@link AbstractModel} from
* a database row.
*
* @author Tim Su <tim@todoroo.com>
*
* @param <TYPE> a model type that is returned by this cursor
* @author Tim Su <tim@todoroo.com>
*/
public class TodorooCursor<TYPE extends AbstractModel> extends CursorWrapper {
/** Properties read by this cursor */
/**
* Properties read by this cursor
*/
private final Property<?>[] properties;
/** Weakly cache field name to column id references for this cursor.
* Because it's a weak hash map, entire keys can be discarded by GC */
/**
* Weakly cache field name to column id references for this cursor.
* Because it's a weak hash map, entire keys can be discarded by GC
*/
private final WeakHashMap<String, Integer> columnIndexCache;
/** Property reading visitor */
/**
* Property reading visitor
*/
private static final CursorReadingVisitor reader = new CursorReadingVisitor();
/** Wrapped cursor */
/**
* Wrapped cursor
*/
private final Cursor cursor;
/**
@ -55,11 +62,11 @@ public class TodorooCursor<TYPE extends AbstractModel> extends CursorWrapper {
* Get the value for the given property on the underlying {@link Cursor}
*
* @param <PROPERTY_TYPE> type to return
* @param property to retrieve
* @param property to retrieve
* @return
*/
public <PROPERTY_TYPE> PROPERTY_TYPE get(Property<PROPERTY_TYPE> property) {
return (PROPERTY_TYPE)property.accept(reader, this);
return (PROPERTY_TYPE) property.accept(reader, this);
}
/**
@ -71,6 +78,7 @@ public class TodorooCursor<TYPE extends AbstractModel> extends CursorWrapper {
/**
* Gets entire property list
*
* @return
*/
public Property<?>[] getProperties() {
@ -82,7 +90,7 @@ public class TodorooCursor<TYPE extends AbstractModel> extends CursorWrapper {
*/
public synchronized int getColumnIndexFromCache(String field) {
Integer index = columnIndexCache.get(field);
if(index == null) {
if (index == null) {
index = getColumnIndexOrThrow(field);
columnIndexCache.put(field, index);
}
@ -94,37 +102,36 @@ public class TodorooCursor<TYPE extends AbstractModel> extends CursorWrapper {
* Visitor that reads the given property from a cursor
*
* @author Tim Su <tim@todoroo.com>
*
*/
public static class CursorReadingVisitor implements PropertyVisitor<Object, TodorooCursor<?>> {
public Object visitDouble(Property<Double> property,
TodorooCursor<?> cursor) {
TodorooCursor<?> cursor) {
int column = columnIndex(property, cursor);
if(property.checkFlag(Property.PROP_FLAG_NULLABLE) && cursor.isNull(column))
if (property.checkFlag(Property.PROP_FLAG_NULLABLE) && cursor.isNull(column))
return null;
return cursor.getDouble(column);
}
public Object visitInteger(Property<Integer> property,
TodorooCursor<?> cursor) {
TodorooCursor<?> cursor) {
int column = columnIndex(property, cursor);
if(property.checkFlag(Property.PROP_FLAG_NULLABLE) && cursor.isNull(column))
if (property.checkFlag(Property.PROP_FLAG_NULLABLE) && cursor.isNull(column))
return null;
return cursor.getInt(column);
}
public Object visitLong(Property<Long> property, TodorooCursor<?> cursor) {
int column = columnIndex(property, cursor);
if(property.checkFlag(Property.PROP_FLAG_NULLABLE) && cursor.isNull(column))
if (property.checkFlag(Property.PROP_FLAG_NULLABLE) && cursor.isNull(column))
return null;
return cursor.getLong(column);
}
public Object visitString(Property<String> property,
TodorooCursor<?> cursor) {
TodorooCursor<?> cursor) {
int column = columnIndex(property, cursor);
if(property.checkFlag(Property.PROP_FLAG_NULLABLE) && cursor.isNull(column))
if (property.checkFlag(Property.PROP_FLAG_NULLABLE) && cursor.isNull(column))
return null;
return cursor.getString(column);
}

@ -5,19 +5,18 @@
*/
package com.todoroo.andlib.service;
import com.todoroo.andlib.service.ExceptionService.ErrorReporter;
import java.lang.ref.WeakReference;
import java.lang.reflect.Field;
import java.util.HashMap;
import com.todoroo.andlib.service.ExceptionService.ErrorReporter;
/**
* A Dependency Injector knows how to inject certain dependencies based
* on the field that is passed in. You will need to write your own initialization
* code to insert this dependency injector into the DI chain.
*
* @author Tim Su <tim@todoroo.com>
*
*/
abstract public class AbstractDependencyInjector {
@ -48,29 +47,27 @@ abstract public class AbstractDependencyInjector {
* Cache of classes that were instantiated by the injector
*/
protected final HashMap<Class<?>, WeakReference<Object>> createdObjects =
new HashMap<Class<?>, WeakReference<Object>>();
new HashMap<Class<?>, WeakReference<Object>>();
/**
* Gets the injected object for this field. If implementing class does not
* know how to handle this dependency, it should return null
*
* @param object
* object to perform dependency injection on
* @param field
* field tagged with {link Autowired} annotation
* @param object object to perform dependency injection on
* @param field field tagged with {link Autowired} annotation
* @return object to assign to this field, or null
*/
public Object getInjection(Object object, Field field) {
if(injectables.containsKey(field.getName())) {
if (injectables.containsKey(field.getName())) {
Object injection = injectables.get(field.getName());
// if it's a class, instantiate the class
if(injection instanceof Class<?>) {
if(createdObjects.containsKey(injection) &&
if (injection instanceof Class<?>) {
if (createdObjects.containsKey(injection) &&
createdObjects.get(injection).get() != null) {
injection = createdObjects.get(injection).get();
} else {
Class<?> cls = (Class<?>)injection;
Class<?> cls = (Class<?>) injection;
try {
injection = cls.newInstance();
} catch (IllegalAccessException e) {

@ -11,11 +11,10 @@ import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
* Autowired is an annotation that tells the dependency injector to
* Autowired is an annotation that tells the dependency injector to
* set up the class as appropriate.
*
* @author Tim Su <tim@todoroo.com>
*
* @author Tim Su <tim@todoroo.com>
*/
@Target({ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)

@ -12,8 +12,8 @@ import android.content.res.Resources;
/**
* Singleton class to manage current application context
* b
* @author Tim Su <tim@todoroo.com>
*
* @author Tim Su <tim@todoroo.com>
*/
public final class ContextManager {
@ -28,9 +28,9 @@ public final class ContextManager {
* @param context
*/
public static void setContext(Context context) {
if(context == null || context.getApplicationContext() == null)
if (context == null || context.getApplicationContext() == null)
return;
if(ContextManager.context != null && !(context instanceof Activity))
if (ContextManager.context != null && !(context instanceof Activity))
return;
ContextManager.context = context;
}
@ -45,7 +45,7 @@ public final class ContextManager {
/**
* Convenience method to read a string from the resources
*
* @param resId resource
* @param resId resource
* @param parameters % arguments
* @return resource string
*/

@ -5,25 +5,23 @@
*/
package com.todoroo.andlib.service;
import java.lang.reflect.Field;
import java.util.LinkedList;
import com.todoroo.andlib.service.ExceptionService.AndroidLogReporter;
import com.todoroo.andlib.service.ExceptionService.ErrorReporter;
import java.lang.reflect.Field;
import java.util.LinkedList;
/**
* Simple Dependency Injection Service for Android.
* <p>
* <p/>
* Add dependency injectors to the injector chain, then invoke this method
* against classes you wish to perform dependency injection for.
* <p>
* <p/>
* All errors encountered are handled as warnings, so if dependency injection
* seems to be failing, check the logs for more information.
*
* @author Tim Su <tim@todoroo.com>
*
*/
public class DependencyInjectionService {
@ -35,8 +33,7 @@ public class DependencyInjectionService {
/**
* Perform dependency injection in the caller object
*
* @param caller
* object to perform DI on
* @param caller object to perform DI on
*/
@SuppressWarnings("nls")
public void inject(Object caller) {
@ -45,13 +42,13 @@ public class DependencyInjectionService {
// dependency injection to set them as appropriate
Class<?> cls = caller.getClass();
while(cls != null) {
while (cls != null) {
String packageName = cls.getPackage().getName();
if(!isQualifiedPackage(packageName))
if (!isQualifiedPackage(packageName))
break;
for(Field field : cls.getDeclaredFields()) {
if(field.getAnnotation(Autowired.class) != null) {
for (Field field : cls.getDeclaredFields()) {
if (field.getAnnotation(Autowired.class) != null) {
field.setAccessible(true);
try {
handleField(caller, field);
@ -60,7 +57,7 @@ public class DependencyInjectionService {
field.getName(), field.getType()), e);
} catch (IllegalArgumentException e) {
throw new RuntimeException(String.format("Unable to set field '%s' of type '%s'",
field.getName(), field.getType()), e);
field.getName(), field.getType()), e);
} catch (IllegalAccessException e) {
throw new RuntimeException(String.format("Unable to set field '%s' of type '%s'",
field.getName(), field.getType()), e);
@ -74,11 +71,11 @@ public class DependencyInjectionService {
@SuppressWarnings("nls")
private boolean isQualifiedPackage(String packageName) {
if(packageName.startsWith("com.todoroo"))
if (packageName.startsWith("com.todoroo"))
return true;
if(packageName.startsWith("com.timsu"))
if (packageName.startsWith("com.timsu"))
return true;
if(packageName.startsWith("org.weloveastrid"))
if (packageName.startsWith("org.weloveastrid"))
return true;
return false;
}
@ -87,17 +84,15 @@ public class DependencyInjectionService {
* This method returns the appropriate dependency object based on the type
* that this autowired field accepts
*
* @param caller
* calling object
* @param field
* field to inject
* @param caller calling object
* @param field field to inject
*/
@SuppressWarnings("nls")
private synchronized void handleField(Object caller, Field field)
throws IllegalStateException, IllegalArgumentException,
IllegalAccessException {
if(field.getType().isPrimitive())
if (field.getType().isPrimitive())
throw new IllegalStateException(String.format(
"Tried to dependency-inject primative field '%s' of type '%s'",
field.getName(), field.getType()));
@ -117,7 +112,7 @@ public class DependencyInjectionService {
throw new IllegalStateException(
String.format("No dependency injector found for autowired " +
"field '%s' in class '%s'. Injectors: %s",
"field '%s' in class '%s'. Injectors: %s",
field.getName(), caller.getClass().getName(),
injectors));
}
@ -130,7 +125,7 @@ public class DependencyInjectionService {
protected void addInjectables() {
injectables.put("debug", false);
injectables.put("exceptionService", ExceptionService.class);
injectables.put("errorReporters", new ErrorReporter[] {
injectables.put("errorReporters", new ErrorReporter[]{
new AndroidLogReporter(),
});
}
@ -147,16 +142,18 @@ public class DependencyInjectionService {
/**
* Gets the singleton instance of the dependency injection service.
*
* @return
*/
public synchronized static DependencyInjectionService getInstance() {
if(instance == null)
if (instance == null)
instance = new DependencyInjectionService();
return instance;
}
/**
* Removes the supplied injector
*
* @return
*/
public synchronized void removeInjector(AbstractDependencyInjector injector) {
@ -165,6 +162,7 @@ public class DependencyInjectionService {
/**
* Adds a Dependency Injector to the front of the list
*
* @param injectors
*/
public synchronized void addInjector(AbstractDependencyInjector injector) {

@ -5,8 +5,6 @@
*/
package com.todoroo.andlib.service;
import java.lang.Thread.UncaughtExceptionHandler;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
@ -16,11 +14,12 @@ import android.util.Log;
import com.todoroo.astrid.api.R;
import java.lang.Thread.UncaughtExceptionHandler;
/**
* Exception handling utility class - reports and logs errors
*
* @author Tim Su <tim@todoroo.com>
*
*/
public class ExceptionService {
@ -29,8 +28,8 @@ public class ExceptionService {
public ExceptionService() {
DependencyInjectionService.getInstance().inject(this);
if(errorReporters == null) {
errorReporters = new ErrorReporter[] {
if (errorReporters == null) {
errorReporters = new ErrorReporter[]{
new AndroidLogReporter()
};
}
@ -39,14 +38,14 @@ public class ExceptionService {
/**
* Report the error via registered error handlers
*
* @param name Internal error name. Not displayed to user
* @param name Internal error name. Not displayed to user
* @param error Exception encountered. Message will be displayed to user
*/
public void reportError(String name, Throwable error) {
if(errorReporters == null)
if (errorReporters == null)
return;
for(ErrorReporter reporter : errorReporters) {
for (ErrorReporter reporter : errorReporters) {
try {
reporter.handleError(name, error);
} catch (Exception e) {
@ -59,28 +58,28 @@ public class ExceptionService {
* Display error dialog if context is activity and report error
*
* @param context Application Context
* @param name Internal error name. Not displayed to user
* @param error Exception encountered. Message will be displayed to user
* @param name Internal error name. Not displayed to user
* @param error Exception encountered. Message will be displayed to user
*/
public void displayAndReportError(final Context context, String name, Throwable error) {
if(context instanceof Activity) {
if (context instanceof Activity) {
final String messageToDisplay;
// pretty up the message when displaying to user
if(error == null)
if (error == null)
messageToDisplay = context.getString(R.string.DLG_error_generic);
else
messageToDisplay = context.getString(R.string.DLG_error, error);
((Activity)context).runOnUiThread(new Runnable() {
((Activity) context).runOnUiThread(new Runnable() {
public void run() {
try {
new AlertDialog.Builder(context)
.setTitle(R.string.DLG_error_title)
.setMessage(messageToDisplay)
.setIcon(android.R.drawable.ic_dialog_alert)
.setPositiveButton(android.R.string.ok, null)
.show();
.setTitle(R.string.DLG_error_title)
.setMessage(messageToDisplay)
.setIcon(android.R.drawable.ic_dialog_alert)
.setPositiveButton(android.R.string.ok, null)
.show();
} catch (Exception e) {
// suppress errors during dialog creation
}
@ -95,7 +94,6 @@ public class ExceptionService {
* Error reporter interface
*
* @author Tim Su <tim@todoroo.com>
*
*/
public interface ErrorReporter {
public void handleError(String name, Throwable error);
@ -105,7 +103,6 @@ public class ExceptionService {
* AndroidLogReporter reports errors to LogCat
*
* @author Tim Su <tim@todoroo.com>
*
*/
public static class AndroidLogReporter implements ErrorReporter {
@ -117,21 +114,21 @@ public class ExceptionService {
*/
public void handleError(String name, Throwable error) {
String tag = null;
if(ContextManager.getContext() != null) {
if (ContextManager.getContext() != null) {
PackageManager pm = ContextManager.getContext().getPackageManager();
try {
String appName = pm.getApplicationInfo(ContextManager.getContext().
getPackageName(), 0).loadLabel(pm).toString();
tag = appName + "-" + name; //$NON-NLS-1$
tag = appName + "-" + name; //$NON-NLS-1$
} catch (NameNotFoundException e) {
// give up
}
}
if(tag == null)
if (tag == null)
tag = "unknown-" + name; //$NON-NLS-1$
if(error == null)
if (error == null)
Log.e(tag, "Exception: " + name); //$NON-NLS-1$
else
Log.e(tag, error.toString(), error);
@ -143,7 +140,6 @@ public class ExceptionService {
* report errors
*
* @author Tim Su <tim@todoroo.com>
*
*/
public static class TodorooUncaughtExceptionHandler implements UncaughtExceptionHandler {
private final UncaughtExceptionHandler defaultUEH;
@ -157,7 +153,7 @@ public class ExceptionService {
}
public void uncaughtException(Thread thread, Throwable ex) {
if(exceptionService != null)
if (exceptionService != null)
exceptionService.reportError("uncaught", ex); //$NON-NLS-1$
defaultUEH.uncaughtException(thread, ex);
}

@ -5,10 +5,9 @@
*/
package com.todoroo.andlib.service;
import java.io.IOException;
import java.io.InputStream;
import java.lang.ref.WeakReference;
import java.util.zip.GZIPInputStream;
import android.util.Log;
import com.todoroo.andlib.utility.AndroidUtilities;
import org.apache.http.Header;
import org.apache.http.HeaderElement;
@ -37,15 +36,15 @@ import org.apache.http.params.HttpParams;
import org.apache.http.params.HttpProtocolParams;
import org.apache.http.protocol.HttpContext;
import android.util.Log;
import com.todoroo.andlib.utility.AndroidUtilities;
import java.io.IOException;
import java.io.InputStream;
import java.lang.ref.WeakReference;
import java.util.zip.GZIPInputStream;
/**
* RestClient allows Android to consume web requests.
*
* @author Tim Su <tim@todoroo.com>
*
*/
public class HttpRestClient implements RestClient {
@ -108,7 +107,7 @@ public class HttpRestClient implements RestClient {
final HttpRequest request,
final HttpContext context) throws HttpException, IOException {
if (!request.containsHeader("Accept-Encoding"))
request.addHeader("Accept-Encoding", "gzip");
request.addHeader("Accept-Encoding", "gzip");
}
});
@ -141,7 +140,7 @@ public class HttpRestClient implements RestClient {
@Override
public InputStream getContent()
throws IOException, IllegalStateException {
throws IOException, IllegalStateException {
// the wrapped entity's getContent() decides about repeatability
InputStream wrappedin = wrappedEntity.getContent();
@ -159,7 +158,7 @@ public class HttpRestClient implements RestClient {
private String processHttpResponse(HttpResponse response) throws IOException {
int statusCode = response.getStatusLine().getStatusCode();
if(statusCode >= HTTP_UNAVAILABLE_START && statusCode <= HTTP_UNAVAILABLE_END) {
if (statusCode >= HTTP_UNAVAILABLE_START && statusCode <= HTTP_UNAVAILABLE_END) {
throw new HttpUnavailableException();
}
@ -175,7 +174,7 @@ public class HttpRestClient implements RestClient {
}
}
if(statusCode != HTTP_OK) {
if (statusCode != HTTP_OK) {
System.out.println(body);
throw new HttpErrorException(response.getStatusLine().getStatusCode(),
response.getStatusLine().getReasonPhrase());
@ -192,7 +191,7 @@ public class HttpRestClient implements RestClient {
* @throws IOException
*/
public synchronized String get(String url) throws IOException {
if(debug)
if (debug)
Log.d("http-rest-client-get", url); //$NON-NLS-1$
try {
@ -213,18 +212,17 @@ public class HttpRestClient implements RestClient {
* Issue an HTTP POST for the given URL, return the response
*
* @param url
* @param data
* url-encoded data
* @param data url-encoded data
* @throws IOException
*/
public synchronized String post(String url, HttpEntity data, Header... headers) throws IOException {
if(debug)
if (debug)
Log.d("http-rest-client-post", url + " | " + data); //$NON-NLS-1$ //$NON-NLS-2$
try {
HttpPost httpPost = new HttpPost(url);
httpPost.setEntity(data);
for(Header header : headers)
for (Header header : headers)
httpPost.addHeader(header);
HttpResponse response = getClient().execute(httpPost);

@ -11,7 +11,6 @@ import java.io.IOException;
* Exception displayed when a 500 error is received on an HTTP invocation
*
* @author Tim Su <tim@todoroo.com>
*
*/
public class HttpUnavailableException extends IOException {

@ -12,7 +12,6 @@ import android.content.Context;
* Notification Manager stub
*
* @author Tim Su <tim@todoroo.com>
*
*/
public interface NotificationManager {
@ -27,13 +26,13 @@ public interface NotificationManager {
* Android's notification manager
*
* @author Tim Su <tim@todoroo.com>
*
*/
public static class AndroidNotificationManager implements NotificationManager {
private final android.app.NotificationManager nm;
public AndroidNotificationManager(Context context) {
nm = (android.app.NotificationManager)
context.getSystemService(Context.NOTIFICATION_SERVICE);
context.getSystemService(Context.NOTIFICATION_SERVICE);
}
public void cancel(int id) {

@ -5,18 +5,18 @@
*/
package com.todoroo.andlib.service;
import java.io.IOException;
import org.apache.http.Header;
import org.apache.http.HttpEntity;
import java.io.IOException;
/**
* RestClient stub invokes the HTML requests as desired
*
* @author Tim Su <tim@todoroo.com>
*
*/
public interface RestClient {
public String get(String url) throws IOException;
public String post(String url, HttpEntity data, Header... headers) throws IOException;
}

@ -12,7 +12,7 @@ public abstract class DBObject<T extends DBObject<?>> implements Cloneable {
protected String alias;
protected final String expression;
protected DBObject(String expression){
protected DBObject(String expression) {
this.expression = expression;
}
@ -38,7 +38,8 @@ public abstract class DBObject<T extends DBObject<?>> implements Cloneable {
DBObject<?> dbObject = (DBObject<?>) o;
if (alias != null ? !alias.equals(dbObject.alias) : dbObject.alias != null) return false;
if (expression != null ? !expression.equals(dbObject.expression) : dbObject.expression != null) return false;
if (expression != null ? !expression.equals(dbObject.expression) : dbObject.expression != null)
return false;
return true;
}
@ -64,7 +65,7 @@ public abstract class DBObject<T extends DBObject<?>> implements Cloneable {
sb.append(SPACE).append(AS).append(SPACE).append(alias);
} else {
int pos = expression.indexOf('.');
if(pos > 0)
if (pos > 0)
sb.append(SPACE).append(AS).append(SPACE).append(expression.substring(pos + 1));
}
return sb.toString();

@ -23,14 +23,14 @@ public class Field extends DBObject<Field> {
}
public Criterion eq(Object value) {
if(value == null)
if (value == null)
return UnaryCriterion.isNull(this);
return UnaryCriterion.eq(this, value);
}
/**
* Adds the criterion that the field must be equal to the given string, ignoring case.
*
* <p/>
* Thanks to a sqlite bug, this will only work for ASCII values.
*
* @param value string which field must equal
@ -38,14 +38,14 @@ public class Field extends DBObject<Field> {
*/
@SuppressWarnings("nls")
public Criterion eqCaseInsensitive(String value) {
if(value == null)
if (value == null)
return UnaryCriterion.isNull(this);
String escaped = value.replace("\\", "\\\\").replace("%", "\\%").replace("_", "\\_");
return UnaryCriterion.like(this, escaped, "\\");
}
public Criterion neq(Object value) {
if(value == null)
if (value == null)
return UnaryCriterion.isNotNull(this);
return UnaryCriterion.neq(this, value);
}

@ -10,15 +10,13 @@ import com.todoroo.andlib.data.Property.LongProperty;
import com.todoroo.andlib.data.Property.StringProperty;
@SuppressWarnings("nls")
public final class Functions {
public static String caseStatement(Criterion when, Object ifTrue, Object ifFalse) {
return new StringBuilder("(CASE WHEN ").
append(when.toString()).append(" THEN ").append(value(ifTrue)).
append(" ELSE ").append(value(ifFalse)).append(" END)").toString();
append(when.toString()).append(" THEN ").append(value(ifTrue)).
append(" ELSE ").append(value(ifFalse)).append(" END)").toString();
}
private static String value(Object value) {

@ -5,11 +5,11 @@
*/
package com.todoroo.andlib.sql;
import static com.todoroo.andlib.sql.SqlConstants.SPACE;
import java.util.HashMap;
import java.util.Map;
import static com.todoroo.andlib.sql.SqlConstants.SPACE;
@SuppressWarnings("nls")
public final class Operator {
@ -47,7 +47,7 @@ public final class Operator {
}
public Operator getContrary() {
if(!contraryRegistry.containsKey(this)){
if (!contraryRegistry.containsKey(this)) {
Operator opposite = new Operator(not.toString() + SPACE + this.toString());
contraryRegistry.put(this, opposite);
contraryRegistry.put(opposite, this);

@ -5,11 +5,11 @@
*/
package com.todoroo.andlib.sql;
import static com.todoroo.andlib.sql.SqlConstants.SPACE;
import java.util.ArrayList;
import java.util.List;
import static com.todoroo.andlib.sql.SqlConstants.SPACE;
public class Order {
private final Object expression;
private final List<Order> secondaryExpressions;
@ -45,8 +45,8 @@ public class Order {
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append(expression.toString())
.append(SPACE)
.append(orderType.toString());
.append(SPACE)
.append(orderType.toString());
for (Order secondary : secondaryExpressions) {
sb.append(", ").append(secondary.toString()); //$NON-NLS-1$
@ -56,7 +56,7 @@ public class Order {
}
public Order reverse() {
if(orderType == OrderType.ASC)
if (orderType == OrderType.ASC)
return new Order(expression, OrderType.DESC);
else
return new Order(expression, OrderType.ASC);

@ -5,6 +5,17 @@
*/
package com.todoroo.andlib.sql;
import android.content.ContentResolver;
import android.database.Cursor;
import android.net.Uri;
import com.todoroo.andlib.data.Property;
import com.todoroo.astrid.api.AstridApiConstants;
import java.util.ArrayList;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import static com.todoroo.andlib.sql.SqlConstants.ALL;
import static com.todoroo.andlib.sql.SqlConstants.COMMA;
import static com.todoroo.andlib.sql.SqlConstants.DISTINCT;
@ -21,17 +32,6 @@ import static com.todoroo.andlib.sql.SqlConstants.WHERE;
import static com.todoroo.andlib.sql.SqlTable.table;
import static java.util.Arrays.asList;
import java.util.ArrayList;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import android.content.ContentResolver;
import android.database.Cursor;
import android.net.Uri;
import com.todoroo.andlib.data.Property;
import com.todoroo.astrid.api.AstridApiConstants;
public final class Query {
private SqlTable table;
@ -117,14 +117,14 @@ public final class Query {
visitFromClause(sql);
visitJoinClause(sql);
if(queryTemplate == null) {
if (queryTemplate == null) {
visitWhereClause(sql);
visitGroupByClause(sql);
visitUnionClause(sql);
visitOrderByClause(sql);
visitLimitClause(sql);
} else {
if(groupBies.size() > 0 || orders.size() > 0 ||
if (groupBies.size() > 0 || orders.size() > 0 ||
havings.size() > 0)
throw new IllegalStateException("Can't have extras AND query template"); //$NON-NLS-1$
sql.append(queryTemplate);
@ -198,7 +198,7 @@ public final class Query {
private void visitSelectClause(StringBuilder sql) {
sql.append(SELECT).append(SPACE);
if(distinct)
if (distinct)
sql.append(DISTINCT).append(SPACE);
if (fields.isEmpty()) {
sql.append(ALL).append(SPACE);
@ -211,7 +211,7 @@ public final class Query {
}
private void visitLimitClause(StringBuilder sql) {
if(limits > -1)
if (limits > -1)
sql.append(LIMIT).append(SPACE).append(limits).append(SPACE);
}
@ -226,6 +226,7 @@ public final class Query {
/**
* Gets a list of fields returned by this query
*
* @return
*/
public Property<?>[] getFields() {
@ -234,6 +235,7 @@ public final class Query {
/**
* Add the SQL query template (comes after the "from")
*
* @param template
* @return query
*/
@ -244,6 +246,7 @@ public final class Query {
/**
* Parse out properties and run query
*
* @param cr
* @param baseUri
* @return
@ -251,24 +254,24 @@ public final class Query {
public Cursor queryContentResolver(ContentResolver cr, Uri baseUri) {
Uri uri = baseUri;
if(joins.size() != 0)
if (joins.size() != 0)
throw new UnsupportedOperationException("can't perform join in content resolver query"); //$NON-NLS-1$
String[] projection = new String[fields.size()];
for(int i = 0; i < projection.length; i++)
for (int i = 0; i < projection.length; i++)
projection[i] = fields.get(i).toString();
StringBuilder groupByClause = new StringBuilder();
StringBuilder selectionClause = new StringBuilder();
StringBuilder orderClause = new StringBuilder();
if(queryTemplate != null) {
if (queryTemplate != null) {
QueryTemplateHelper.queryForContentResolver(queryTemplate,
selectionClause, orderClause, groupByClause);
} else {
if(groupBies.size() > 0) {
if (groupBies.size() > 0) {
for (Field groupBy : groupBies)
groupByClause.append(SPACE).append(groupBy).append(COMMA);
if(groupByClause.length() > 0)
if (groupByClause.length() > 0)
groupByClause.deleteCharAt(groupByClause.length() - 1);
}
@ -277,39 +280,43 @@ public final class Query {
for (Order order : orders)
orderClause.append(SPACE).append(order).append(COMMA);
if(orderClause.length() > 0)
if (orderClause.length() > 0)
orderClause.deleteCharAt(orderClause.length() - 1);
}
if(groupByClause.length() > 0)
if (groupByClause.length() > 0)
uri = Uri.withAppendedPath(baseUri, AstridApiConstants.GROUP_BY_URI +
groupByClause.toString().trim());
return cr.query(uri, projection, selectionClause.toString(), null,
orderClause.toString());
}
/** query template helper */
/**
* query template helper
*/
public static class QueryTemplateHelper {
/** build a content resolver query */
/**
* build a content resolver query
*/
@SuppressWarnings("nls")
public static void queryForContentResolver(String queryTemplate,
StringBuilder selectionClause, StringBuilder orderClause,
StringBuilder groupByClause) {
StringBuilder selectionClause, StringBuilder orderClause,
StringBuilder groupByClause) {
Pattern where = Pattern.compile("WHERE (.*?)(LIMIT|HAVING|GROUP|ORDER|\\Z)");
Matcher whereMatcher = where.matcher(queryTemplate);
if(whereMatcher.find())
if (whereMatcher.find())
selectionClause.append(whereMatcher.group(1).trim());
Pattern group = Pattern.compile("GROUP BY (.*?)(LIMIT|HAVING|ORDER|\\Z)");
Matcher groupMatcher = group.matcher(queryTemplate);
if(groupMatcher.find())
if (groupMatcher.find())
groupByClause.append(groupMatcher.group(1).trim());
Pattern order = Pattern.compile("ORDER BY (.*?)(LIMIT|HAVING|\\Z)");
Matcher orderMatcher = order.matcher(queryTemplate);
if(orderMatcher.find())
if (orderMatcher.find())
orderClause.append(orderMatcher.group(1).trim());
}

@ -5,6 +5,8 @@
*/
package com.todoroo.andlib.sql;
import java.util.ArrayList;
import static com.todoroo.andlib.sql.SqlConstants.COMMA;
import static com.todoroo.andlib.sql.SqlConstants.GROUP_BY;
import static com.todoroo.andlib.sql.SqlConstants.LIMIT;
@ -13,14 +15,11 @@ import static com.todoroo.andlib.sql.SqlConstants.SPACE;
import static com.todoroo.andlib.sql.SqlConstants.WHERE;
import static java.util.Arrays.asList;
import java.util.ArrayList;
/**
* Query Template returns a bunch of criteria that allows a query to be
* constructed
*
* @author Tim Su <tim@todoroo.com>
*
*/
public final class QueryTemplate {
@ -58,7 +57,7 @@ public final class QueryTemplate {
visitWhereClause(sql);
visitGroupByClause(sql);
visitOrderByClause(sql);
if(limit != null)
if (limit != null)
sql.append(LIMIT).append(SPACE).append(limit);
return sql.toString();
}

@ -20,6 +20,6 @@ public class SqlTable extends DBObject<SqlTable> {
if (hasAlias()) {
return alias + "." + fieldName;
}
return expression+"."+fieldName;
return expression + "." + fieldName;
}
}

@ -38,9 +38,9 @@ public class UnaryCriterion extends Criterion {
@SuppressWarnings("nls")
protected void afterPopulateOperator(StringBuilder sb) {
if(value == null)
if (value == null)
return;
else if(value instanceof String)
else if (value instanceof String)
sb.append("'").append(sanitize((String) value)).append("'");
else
sb.append(value);
@ -48,6 +48,7 @@ public class UnaryCriterion extends Criterion {
/**
* Sanitize the given input for SQL
*
* @param input
* @return
*/
@ -109,6 +110,7 @@ public class UnaryCriterion extends Criterion {
protected void populateOperator(StringBuilder sb) {
sb.append(SPACE).append(operator).append(SPACE);
}
@SuppressWarnings("nls")
@Override
protected void afterPopulateOperator(StringBuilder sb) {

@ -5,34 +5,6 @@
*/
package com.todoroo.andlib.utility;
import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.lang.reflect.Array;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.math.BigInteger;
import java.net.URL;
import java.net.URLConnection;
import java.security.MessageDigest;
import java.util.Arrays;
import java.util.Comparator;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.ContentValues;
@ -60,11 +32,38 @@ import android.widget.TextView;
import com.todoroo.andlib.service.ExceptionService;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.lang.reflect.Array;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.math.BigInteger;
import java.net.URL;
import java.net.URLConnection;
import java.security.MessageDigest;
import java.util.Arrays;
import java.util.Comparator;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
/**
* Android Utility Classes
*
* @author Tim Su <tim@todoroo.com>
*
*/
public class AndroidUtilities {
@ -73,7 +72,9 @@ public class AndroidUtilities {
// --- utility methods
/** Suppress virtual keyboard until user's first tap */
/**
* Suppress virtual keyboard until user's first tap
*/
public static void suppressVirtualKeyboard(final TextView editor) {
final int inputType = editor.getInputType();
editor.setInputType(InputType.TYPE_NULL);
@ -91,7 +92,7 @@ public class AndroidUtilities {
*/
public static boolean isConnected(Context context) {
ConnectivityManager manager = (ConnectivityManager)
context.getSystemService(Context.CONNECTIVITY_SERVICE);
context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo info = manager.getActiveNetworkInfo();
if (info == null)
return false;
@ -100,7 +101,9 @@ public class AndroidUtilities {
return true;
}
/** Fetch the image specified by the given url */
/**
* Fetch the image specified by the given url
*/
public static Bitmap fetchImage(URL url) throws IOException {
InputStream is = null;
try {
@ -115,20 +118,23 @@ public class AndroidUtilities {
bis.close();
}
} finally {
if(is != null)
if (is != null)
is.close();
}
}
/** Read a bitmap from the specified file, scaling if necessary
* Returns null if scaling failed after several tries */
private static final int[] SAMPLE_SIZES = { 1, 2, 4, 6, 8, 10 };
/**
* Read a bitmap from the specified file, scaling if necessary
* Returns null if scaling failed after several tries
*/
private static final int[] SAMPLE_SIZES = {1, 2, 4, 6, 8, 10};
private static final int MAX_DIM = 1024;
public static Bitmap readScaledBitmap(String file) {
Bitmap bitmap = null;
int tries = 0;
BitmapFactory.Options opts = new BitmapFactory.Options();
while((bitmap == null || (bitmap.getWidth() > MAX_DIM || bitmap.getHeight() > MAX_DIM)) && tries < SAMPLE_SIZES.length) {
while ((bitmap == null || (bitmap.getWidth() > MAX_DIM || bitmap.getHeight() > MAX_DIM)) && tries < SAMPLE_SIZES.length) {
opts.inSampleSize = SAMPLE_SIZES[tries];
try {
bitmap = BitmapFactory.decodeFile(file, opts);
@ -151,8 +157,8 @@ public class AndroidUtilities {
*/
public static void startExternalIntent(Context context, Intent intent, int request) {
try {
if(request > -1 && context instanceof Activity)
((Activity)context).startActivityForResult(intent, request);
if (request > -1 && context instanceof Activity)
((Activity) context).startActivityForResult(intent, request);
else
context.startActivity(intent);
} catch (Exception e) {
@ -182,6 +188,7 @@ public class AndroidUtilities {
/**
* Put an arbitrary object into a {@link ContentValues}
*
* @param target
* @param key
* @param value
@ -210,6 +217,7 @@ public class AndroidUtilities {
/**
* Put an arbitrary object into a {@link ContentValues}
*
* @param target
* @param key
* @param value
@ -244,7 +252,7 @@ public class AndroidUtilities {
public static String[][] contentValuesToStringArrays(ContentValues source) {
String[][] result = new String[2][source.size()];
int i = 0;
for(Entry<String, Object> entry : source.valueSet()) {
for (Entry<String, Object> entry : source.valueSet()) {
result[0][i] = entry.getKey();
result[1][i++] = entry.getValue().toString();
}
@ -253,19 +261,21 @@ public class AndroidUtilities {
/**
* Return index of value in array
*
* @param array array to search
* @param value value to look for
* @return
*/
public static <TYPE> int indexOf(TYPE[] array, TYPE value) {
for(int i = 0; i < array.length; i++)
if(array[i].equals(value))
for (int i = 0; i < array.length; i++)
if (array[i].equals(value))
return i;
return -1;
}
/**
* Return index of value in integer array
*
* @param array array to search
* @param value value to look for
* @return
@ -282,24 +292,26 @@ public class AndroidUtilities {
*/
public static String contentValuesToSerializedString(ContentValues source) {
StringBuilder result = new StringBuilder();
for(Entry<String, Object> entry : source.valueSet()) {
for (Entry<String, Object> entry : source.valueSet()) {
addSerialized(result, entry.getKey(), entry.getValue());
}
return result.toString();
}
/** add serialized helper */
/**
* add serialized helper
*/
private static void addSerialized(StringBuilder result,
String key, Object value) {
String key, Object value) {
result.append(key.replace(SERIALIZATION_SEPARATOR, SEPARATOR_ESCAPE)).append(
SERIALIZATION_SEPARATOR);
if(value instanceof Integer)
if (value instanceof Integer)
result.append('i').append(value);
else if(value instanceof Double)
else if (value instanceof Double)
result.append('d').append(value);
else if(value instanceof Long)
else if (value instanceof Long)
result.append('l').append(value);
else if(value instanceof String)
else if (value instanceof String)
result.append('s').append(value.toString().replace(SERIALIZATION_SEPARATOR, SEPARATOR_ESCAPE));
else if (value instanceof Boolean)
result.append('b').append(value);
@ -316,7 +328,7 @@ public class AndroidUtilities {
if (source == null)
return null;
for(String key : source.keySet()) {
for (String key : source.keySet()) {
addSerialized(result, key, source.get(key));
}
return result.toString();
@ -324,32 +336,33 @@ public class AndroidUtilities {
/**
* Turn ContentValues into a string
*
* @param string
* @return
*/
public static ContentValues contentValuesFromSerializedString(String string) {
if(string == null)
if (string == null)
return new ContentValues();
ContentValues result = new ContentValues();
fromSerialized(string, result, new SerializedPut<ContentValues>() {
public void put(ContentValues object, String key, char type, String value) throws NumberFormatException {
switch(type) {
case 'i':
object.put(key, Integer.parseInt(value));
break;
case 'd':
object.put(key, Double.parseDouble(value));
break;
case 'l':
object.put(key, Long.parseLong(value));
break;
case 's':
object.put(key, value.replace(SEPARATOR_ESCAPE, SERIALIZATION_SEPARATOR));
break;
case 'b':
object.put(key, Boolean.parseBoolean(value));
break;
switch (type) {
case 'i':
object.put(key, Integer.parseInt(value));
break;
case 'd':
object.put(key, Double.parseDouble(value));
break;
case 'l':
object.put(key, Long.parseLong(value));
break;
case 's':
object.put(key, value.replace(SEPARATOR_ESCAPE, SERIALIZATION_SEPARATOR));
break;
case 'b':
object.put(key, Boolean.parseBoolean(value));
break;
}
}
});
@ -358,32 +371,33 @@ public class AndroidUtilities {
/**
* Turn {@link android.os.Bundle} into a string
*
* @param string
* @return
*/
public static Bundle bundleFromSerializedString(String string) {
if(string == null)
if (string == null)
return new Bundle();
Bundle result = new Bundle();
fromSerialized(string, result, new SerializedPut<Bundle>() {
public void put(Bundle object, String key, char type, String value) throws NumberFormatException {
switch(type) {
case 'i':
object.putInt(key, Integer.parseInt(value));
break;
case 'd':
object.putDouble(key, Double.parseDouble(value));
break;
case 'l':
object.putLong(key, Long.parseLong(value));
break;
case 's':
object.putString(key, value.replace(SEPARATOR_ESCAPE, SERIALIZATION_SEPARATOR));
break;
case 'b':
object.putBoolean(key, Boolean.parseBoolean(value));
break;
switch (type) {
case 'i':
object.putInt(key, Integer.parseInt(value));
break;
case 'd':
object.putDouble(key, Double.parseDouble(value));
break;
case 'l':
object.putLong(key, Long.parseLong(value));
break;
case 's':
object.putString(key, value.replace(SEPARATOR_ESCAPE, SERIALIZATION_SEPARATOR));
break;
case 'b':
object.putBoolean(key, Boolean.parseBoolean(value));
break;
}
}
});
@ -397,12 +411,12 @@ public class AndroidUtilities {
@SuppressWarnings("nls")
private static <T> void fromSerialized(String string, T object, SerializedPut<T> putter) {
String[] pairs = string.split("\\" + SERIALIZATION_SEPARATOR); //$NON-NLS-1$
for(int i = 0; i < pairs.length; i += 2) {
for (int i = 0; i < pairs.length; i += 2) {
try {
String key = pairs[i].replaceAll(SEPARATOR_ESCAPE, SERIALIZATION_SEPARATOR);
String value = pairs[i+1].substring(1);
String value = pairs[i + 1].substring(1);
try {
putter.put(object, key, pairs[i+1].charAt(0), value);
putter.put(object, key, pairs[i + 1].charAt(0), value);
} catch (NumberFormatException e) {
// failed parse to number
putter.put(object, key, 's', value);
@ -414,31 +428,30 @@ public class AndroidUtilities {
}
/**
* Turn ContentValues into a string
*
* @param string
* @return
*/
@SuppressWarnings("nls")
public static ContentValues contentValuesFromString(String string) {
if(string == null)
if (string == null)
return null;
String[] pairs = string.split("=");
ContentValues result = new ContentValues();
String key = null;
for(int i = 0; i < pairs.length; i++) {
for (int i = 0; i < pairs.length; i++) {
String newKey = null;
int lastSpace = pairs[i].lastIndexOf(' ');
if(lastSpace != -1) {
if (lastSpace != -1) {
newKey = pairs[i].substring(lastSpace + 1);
pairs[i] = pairs[i].substring(0, lastSpace);
} else {
newKey = pairs[i];
newKey = pairs[i];
}
if(key != null)
if (key != null)
result.put(key.trim(), pairs[i].trim());
key = newKey;
}
@ -447,14 +460,15 @@ public class AndroidUtilities {
/**
* Returns true if a and b or null or a.equals(b)
*
* @param a
* @param b
* @return
*/
public static boolean equals(Object a, Object b) {
if(a == null && b == null)
if (a == null && b == null)
return true;
if(a == null)
if (a == null)
return false;
return a.equals(b);
}
@ -481,6 +495,7 @@ public class AndroidUtilities {
/**
* Copy stream from source to destination
*
* @param source
* @param dest
* @throws IOException
@ -507,20 +522,21 @@ public class AndroidUtilities {
/**
* Find a child view of a certain type
*
* @param view
* @param type
* @return first view (by DFS) if found, or null if none
*/
public static <TYPE> TYPE findViewByType(View view, Class<TYPE> type) {
if(view == null)
if (view == null)
return null;
if(type.isInstance(view))
if (type.isInstance(view))
return (TYPE) view;
if(view instanceof ViewGroup) {
if (view instanceof ViewGroup) {
ViewGroup group = (ViewGroup) view;
for(int i = 0; i < group.getChildCount(); i++) {
for (int i = 0; i < group.getChildCount(); i++) {
TYPE v = findViewByType(group.getChildAt(i), type);
if(v != null)
if (v != null)
return v;
}
}
@ -536,13 +552,14 @@ public class AndroidUtilities {
/**
* Copy databases to a given folder. Useful for debugging
*
* @param folder
*/
public static void copyDatabases(Context context, String folder) {
File folderFile = new File(folder);
if(!folderFile.exists())
if (!folderFile.exists())
folderFile.mkdir();
for(String db : context.databaseList()) {
for (String db : context.databaseList()) {
File dbFile = context.getDatabasePath(db);
try {
copyFile(dbFile, new File(folderFile.getAbsolutePath() +
@ -555,6 +572,7 @@ public class AndroidUtilities {
/**
* Sort files by date so the newest file is on top
*
* @param files
*/
public static void sortFilesByDateDesc(File[] files) {
@ -567,13 +585,14 @@ public class AndroidUtilities {
/**
* Search for the given value in the map, returning key if found
*
* @param map
* @param value
* @return null if not found, otherwise key
*/
public static <KEY, VALUE> KEY findKeyInMap(Map<KEY, VALUE> map, VALUE value){
for (Entry<KEY, VALUE> entry: map.entrySet()) {
if(entry.getValue().equals(value))
public static <KEY, VALUE> KEY findKeyInMap(Map<KEY, VALUE> map, VALUE value) {
for (Entry<KEY, VALUE> entry : map.entrySet()) {
if (entry.getValue().equals(value))
return entry.getKey();
}
return null;
@ -597,30 +616,31 @@ public class AndroidUtilities {
* If you want to set a transition, please use this method rather than <code>callApiMethod</code> to ensure
* you really pass an Activity-instance.
*
* @param activity the activity-instance for which to set the finish-transition
* @param activity the activity-instance for which to set the finish-transition
* @param enterAnim the incoming-transition of the next activity
* @param exitAnim the outgoing-transition of this activity
* @param exitAnim the outgoing-transition of this activity
*/
public static void callOverridePendingTransition(Activity activity, int enterAnim, int exitAnim) {
callApiMethod(5,
activity,
"overridePendingTransition", //$NON-NLS-1$
new Class<?>[] { Integer.TYPE, Integer.TYPE },
new Class<?>[]{Integer.TYPE, Integer.TYPE},
enterAnim, exitAnim);
}
/**
* Call a method via reflection if API level is at least minSdk
* @param minSdk minimum sdk number (i.e. 8)
* @param receiver object to call method on
*
* @param minSdk minimum sdk number (i.e. 8)
* @param receiver object to call method on
* @param methodName method name to call
* @param params method parameter types
* @param args arguments
* @param params method parameter types
* @param args arguments
* @return method return value, or null if nothing was called or exception
*/
public static Object callApiMethod(int minSdk, Object receiver,
String methodName, Class<?>[] params, Object... args) {
if(getSdkVersion() < minSdk)
String methodName, Class<?>[] params, Object... args) {
if (getSdkVersion() < minSdk)
return null;
return AndroidUtilities.callMethod(receiver.getClass(),
@ -629,17 +649,18 @@ public class AndroidUtilities {
/**
* Call a static method via reflection if API level is at least minSdk
* @param minSdk minimum sdk number (i.e. 8)
* @param className fully qualified class to call method on
*
* @param minSdk minimum sdk number (i.e. 8)
* @param className fully qualified class to call method on
* @param methodName method name to call
* @param params method parameter types
* @param args arguments
* @param params method parameter types
* @param args arguments
* @return method return value, or null if nothing was called or exception
*/
@SuppressWarnings("nls")
public static Object callApiStaticMethod(int minSdk, String className,
String methodName, Class<?>[] params, Object... args) {
if(getSdkVersion() < minSdk)
String methodName, Class<?>[] params, Object... args) {
if (getSdkVersion() < minSdk)
return null;
try {
@ -653,16 +674,17 @@ public class AndroidUtilities {
/**
* Call a method via reflection
* @param class class to call method on
* @param receiver object to call method on (can be null)
*
* @param class class to call method on
* @param receiver object to call method on (can be null)
* @param methodName method name to call
* @param params method parameter types
* @param args arguments
* @param params method parameter types
* @param args arguments
* @return method return value, or null if nothing was called or exception
*/
@SuppressWarnings("nls")
public static Object callMethod(Class<?> cls, Object receiver,
String methodName, Class<?>[] params, Object... args) {
String methodName, Class<?>[] params, Object... args) {
try {
Method method = cls.getMethod(methodName, params);
Object result = method.invoke(receiver, args);
@ -685,6 +707,7 @@ public class AndroidUtilities {
/**
* From Android MyTracks project (http://mytracks.googlecode.com/).
* Licensed under the Apache Public License v2
*
* @param activity
* @param id
* @return
@ -738,6 +761,7 @@ public class AndroidUtilities {
/**
* Performs an md5 hash on the input string
*
* @param input
* @return
*/
@ -747,9 +771,9 @@ public class AndroidUtilities {
byte[] bytesOfMessage = input.getBytes("UTF-8");
MessageDigest md = MessageDigest.getInstance("MD5");
byte[] digest = md.digest(bytesOfMessage);
BigInteger bigInt = new BigInteger(1,digest);
BigInteger bigInt = new BigInteger(1, digest);
String hashtext = bigInt.toString(16);
while(hashtext.length() < 32 ){
while (hashtext.length() < 32) {
hashtext = "0" + hashtext;
}
return hashtext;
@ -760,6 +784,7 @@ public class AndroidUtilities {
/**
* Create an intent to a remote activity
*
* @param appPackage
* @param activityClass
* @return
@ -772,6 +797,7 @@ public class AndroidUtilities {
/**
* Gets application signature
*
* @return application signature, or null if an error was encountered
*/
public static String getSignature(Context context, String packageName) {
@ -786,6 +812,7 @@ public class AndroidUtilities {
/**
* Join items to a list
*
* @param <TYPE>
* @param list
* @param newList
@ -804,11 +831,11 @@ public class AndroidUtilities {
T[] newList = (T[]) Array.newInstance(type, length);
if (list != null) {
for(int i = 0; i < list.length; i++)
for (int i = 0; i < list.length; i++)
newList[i] = list[i];
}
if (newItems != null) {
for(int i = 0; i < newItems.length; i++)
for (int i = 0; i < newItems.length; i++)
newList[originalListLength + i] = newItems[i];
}
return newList;
@ -819,9 +846,9 @@ public class AndroidUtilities {
private static ExceptionService exceptionService = null;
private static ExceptionService getExceptionService() {
if(exceptionService == null)
synchronized(AndroidUtilities.class) {
if(exceptionService == null)
if (exceptionService == null)
synchronized (AndroidUtilities.class) {
if (exceptionService == null)
exceptionService = new ExceptionService();
}
return exceptionService;
@ -829,16 +856,17 @@ public class AndroidUtilities {
/**
* Concatenate additional stuff to the end of the array
*
* @param params
* @param additional
* @return
*/
public static <TYPE> TYPE[] concat(TYPE[] dest, TYPE[] source, TYPE... additional) {
int i = 0;
for(; i < Math.min(dest.length, source.length); i++)
for (; i < Math.min(dest.length, source.length); i++)
dest[i] = source[i];
int base = i;
for(; i < dest.length; i++)
for (; i < dest.length; i++)
dest[i] = additional[i - base];
return dest;
}
@ -847,6 +875,7 @@ public class AndroidUtilities {
* Returns a map where the keys are the values of the map argument
* and the values are the corresponding keys. Use at your own
* risk if your map is not 1-to-1!
*
* @param map
* @return
*/
@ -862,6 +891,7 @@ public class AndroidUtilities {
/**
* Capitalize the first character
*
* @param string
* @return
*/
@ -871,11 +901,12 @@ public class AndroidUtilities {
/**
* Dismiss the keyboard if it is displayed by any of the listed views
*
* @param context
* @param views - a list of views that might potentially be displaying the keyboard
* @param views - a list of views that might potentially be displaying the keyboard
*/
public static void hideSoftInputForViews(Context context, View...views) {
InputMethodManager imm = (InputMethodManager)context.getSystemService(Context.INPUT_METHOD_SERVICE);
public static void hideSoftInputForViews(Context context, View... views) {
InputMethodManager imm = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE);
for (View v : views) {
imm.hideSoftInputFromWindow(v.getWindowToken(), 0);
}
@ -883,6 +914,7 @@ public class AndroidUtilities {
/**
* Returns true if the screen is large or xtra large
*
* @param context
* @return
*/
@ -914,6 +946,7 @@ public class AndroidUtilities {
/**
* Wraps a call to Activity.unregisterReceiver in a try/catch block to prevent
* exceptions being thrown if receiver was never registered with that activity
*
* @param activity
* @param receiver
*/
@ -965,6 +998,7 @@ public class AndroidUtilities {
/**
* Returns the final word characters after the last '.'
*
* @param file
* @return
*/

@ -5,6 +5,12 @@
*/
package com.todoroo.andlib.utility;
import android.content.Context;
import android.text.format.DateFormat;
import android.text.format.DateUtils;
import com.todoroo.astrid.api.R;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Arrays;
@ -12,12 +18,6 @@ import java.util.Calendar;
import java.util.Date;
import java.util.Locale;
import android.content.Context;
import android.text.format.DateFormat;
import android.text.format.DateUtils;
import com.todoroo.astrid.api.R;
public class DateUtilities {
@ -25,16 +25,20 @@ public class DateUtilities {
* ============================================================ long time
* ====================================================================== */
/** Convert unixtime into date */
/**
* Convert unixtime into date
*/
public static final Date unixtimeToDate(long millis) {
if(millis == 0)
if (millis == 0)
return null;
return new Date(millis);
}
/** Convert date into unixtime */
/**
* Convert date into unixtime
*/
public static final long dateToUnixtime(Date date) {
if(date == null)
if (date == null)
return 0;
return date.getTime();
}
@ -43,7 +47,7 @@ public class DateUtilities {
* Add the specified amount of months to the given time.<br/>
* The day of month will stay the same.<br/>
*
* @param time the base-time (in milliseconds) to which the amount of months is added
* @param time the base-time (in milliseconds) to which the amount of months is added
* @param interval the amount of months to be added
* @return the calculated time in milliseconds
*/
@ -54,28 +58,40 @@ public class DateUtilities {
return c.getTimeInMillis();
}
/** Returns unixtime for current time */
/**
* Returns unixtime for current time
*/
public static final long now() {
return System.currentTimeMillis();
}
/** Returns unixtime one month from now */
/**
* Returns unixtime one month from now
*/
public static final long oneMonthFromNow() {
Date date = new Date();
date.setMonth(date.getMonth() + 1);
return date.getTime();
}
/** Represents a single hour */
/**
* Represents a single hour
*/
public static final long ONE_HOUR = 3600000L;
/** Represents a single day */
/**
* Represents a single day
*/
public static final long ONE_DAY = 24 * ONE_HOUR;
/** Represents a single week */
/**
* Represents a single week
*/
public static final long ONE_WEEK = 7 * ONE_DAY;
/** Represents a single minute */
/**
* Represents a single minute
*/
public static final long ONE_MINUTE = 60000L;
/* ======================================================================
@ -85,7 +101,7 @@ public class DateUtilities {
static Boolean is24HourOverride = null;
public static boolean is24HourFormat(Context context) {
if(is24HourOverride != null)
if (is24HourOverride != null)
return is24HourOverride;
return DateFormat.is24HourFormat(context);
@ -93,7 +109,7 @@ public class DateUtilities {
/**
* @param context android context
* @param date time to format
* @param date time to format
* @return time, with hours and minutes
*/
@SuppressWarnings("nls")
@ -101,10 +117,9 @@ public class DateUtilities {
String value;
if (is24HourFormat(context)) {
value = "H:mm";
} else if (date.getMinutes() == 0 && excludeZeroMinutes){
} else if (date.getMinutes() == 0 && excludeZeroMinutes) {
value = "h a";
}
else {
} else {
value = "h:mm a";
}
return new SimpleDateFormat(value).format(date);
@ -122,7 +137,7 @@ public class DateUtilities {
/**
* @param context android context
* @param date date to format
* @param date date to format
* @return date, with month, day, and year
*/
@SuppressWarnings("nls")
@ -134,20 +149,21 @@ public class DateUtilities {
// united states, you are special
Locale locale = Locale.getDefault();
if (arrayBinaryContains(locale.getLanguage(), "ja", "ko", "zh")
|| arrayBinaryContains(locale.getCountry(), "BZ", "CA", "KE", "MN" ,"US"))
|| arrayBinaryContains(locale.getCountry(), "BZ", "CA", "KE", "MN", "US"))
value = "'#' d'$'";
else
value = "d'$' '#'";
if (includeYear)
value += ", yyyy";
if (arrayBinaryContains(locale.getLanguage(), "ja", "zh")){
if (arrayBinaryContains(locale.getLanguage(), "ja", "zh")) {
standardDate = new SimpleDateFormat(value).format(date).replace("#", month).replace("$", "\u65E5"); //$NON-NLS-1$
}else if ("ko".equals(Locale.getDefault().getLanguage())){
} else if ("ko".equals(Locale.getDefault().getLanguage())) {
standardDate = new SimpleDateFormat(value).format(date).replace("#", month).replace("$", "\uC77C"); //$NON-NLS-1$
}else{
} else {
standardDate = new SimpleDateFormat(value).format(date).replace("#", month).replace("$", "");
}
return standardDate;}
return standardDate;
}
public static String getDateString(Context context, Date date) {
return getDateString(context, date, true);
@ -155,7 +171,7 @@ public class DateUtilities {
/**
* @param context android context
* @param date date to format
* @param date date to format
* @return date, with month, day, and year
*/
@SuppressWarnings("nls")
@ -166,12 +182,12 @@ public class DateUtilities {
Locale locale = Locale.getDefault();
// united states, you are special
if (arrayBinaryContains(locale.getLanguage(), "ja", "ko", "zh")
|| arrayBinaryContains(locale.getCountry(), "BZ", "CA", "KE", "MN" ,"US"))
|| arrayBinaryContains(locale.getCountry(), "BZ", "CA", "KE", "MN", "US"))
value = "'#' d";
else
value = "d '#'";
if (date.getYear() != (new Date()).getYear()) {
if (date.getYear() != (new Date()).getYear()) {
value = value + "\nyyyy";
}
if (arrayBinaryContains(locale.getLanguage(), "ja", "zh")) //$NON-NLS-1$
@ -231,16 +247,16 @@ public class DateUtilities {
long today = clearTime(new Date());
long input = clearTime(new Date(date));
if(today == input)
if (today == input)
return context.getString(R.string.today).toLowerCase();
if(today + ONE_DAY == input)
if (today + ONE_DAY == input)
return context.getString(abbreviated ? R.string.tmrw : R.string.tomorrow).toLowerCase();
if(today == input + ONE_DAY)
if (today == input + ONE_DAY)
return context.getString(abbreviated ? R.string.yest : R.string.yesterday).toLowerCase();
if(today + DateUtilities.ONE_WEEK >= input &&
if (today + DateUtilities.ONE_WEEK >= input &&
today - DateUtilities.ONE_WEEK <= input)
return abbreviated ? DateUtilities.getWeekdayShort(new Date(date)) : DateUtilities.getWeekday(new Date(date));
@ -270,6 +286,7 @@ public class DateUtilities {
}
private static final Calendar calendar = Calendar.getInstance();
public static long getStartOfDay(long time) {
calendar.setTimeInMillis(time);
calendar.set(Calendar.HOUR, 0);

@ -27,21 +27,21 @@ public class DialogUtilities {
* @param okListener
*/
public static void viewDialog(final Activity activity, final String text,
final View view, final DialogInterface.OnClickListener okListener,
final DialogInterface.OnClickListener cancelListener) {
if(activity.isFinishing())
final View view, final DialogInterface.OnClickListener okListener,
final DialogInterface.OnClickListener cancelListener) {
if (activity.isFinishing())
return;
tryOnUiThread(activity, new Runnable() {
public void run() {
new AlertDialog.Builder(activity)
.setTitle(R.string.DLG_question_title)
.setMessage(text)
.setView(view)
.setIcon(android.R.drawable.ic_dialog_alert)
.setPositiveButton(android.R.string.ok, okListener)
.setNegativeButton(android.R.string.cancel, cancelListener)
.show().setOwnerActivity(activity);
.setTitle(R.string.DLG_question_title)
.setMessage(text)
.setView(view)
.setIcon(android.R.drawable.ic_dialog_alert)
.setPositiveButton(android.R.string.ok, okListener)
.setNegativeButton(android.R.string.cancel, cancelListener)
.show().setOwnerActivity(activity);
}
});
}
@ -60,11 +60,11 @@ public class DialogUtilities {
webView.setBackgroundColor(0);
new AlertDialog.Builder(context)
.setTitle(title)
.setView(webView)
.setIcon(android.R.drawable.ic_dialog_info)
.setPositiveButton(android.R.string.ok, null)
.show();
.setTitle(title)
.setView(webView)
.setIcon(android.R.drawable.ic_dialog_info)
.setPositiveButton(android.R.string.ok, null)
.show();
}
/**
@ -75,18 +75,18 @@ public class DialogUtilities {
* @param okListener
*/
public static void okDialog(final Activity activity, final String text,
final DialogInterface.OnClickListener okListener) {
if(activity.isFinishing())
final DialogInterface.OnClickListener okListener) {
if (activity.isFinishing())
return;
tryOnUiThread(activity, new Runnable() {
public void run() {
new AlertDialog.Builder(activity)
.setTitle(R.string.DLG_information_title)
.setMessage(text)
.setIcon(android.R.drawable.ic_dialog_alert)
.setPositiveButton(android.R.string.ok, okListener)
.show().setOwnerActivity(activity);
.setTitle(R.string.DLG_information_title)
.setMessage(text)
.setIcon(android.R.drawable.ic_dialog_alert)
.setPositiveButton(android.R.string.ok, okListener)
.show().setOwnerActivity(activity);
}
});
}
@ -99,19 +99,19 @@ public class DialogUtilities {
* @param okListener
*/
public static void okDialog(final Activity activity, final String title,
final int icon, final CharSequence text,
final DialogInterface.OnClickListener okListener) {
if(activity.isFinishing())
final int icon, final CharSequence text,
final DialogInterface.OnClickListener okListener) {
if (activity.isFinishing())
return;
tryOnUiThread(activity, new Runnable() {
public void run() {
new AlertDialog.Builder(activity)
.setTitle(title)
.setMessage(text)
.setIcon(icon)
.setPositiveButton(android.R.string.ok, okListener)
.show().setOwnerActivity(activity);
.setTitle(title)
.setMessage(text)
.setIcon(icon)
.setPositiveButton(android.R.string.ok, okListener)
.show().setOwnerActivity(activity);
}
});
}
@ -126,8 +126,8 @@ public class DialogUtilities {
* @param cancelListener
*/
public static void okCancelDialog(final Activity activity, final String title,
final String text, final DialogInterface.OnClickListener okListener,
final DialogInterface.OnClickListener cancelListener) {
final String text, final DialogInterface.OnClickListener okListener,
final DialogInterface.OnClickListener cancelListener) {
okCancelCustomDialog(activity, title, text, android.R.string.ok, android.R.string.cancel, android.R.drawable.ic_dialog_alert, okListener, cancelListener);
}
@ -141,40 +141,42 @@ public class DialogUtilities {
* @param cancelListener
*/
public static void okCancelDialog(final Activity activity, final String text,
final DialogInterface.OnClickListener okListener,
final DialogInterface.OnClickListener cancelListener) {
final DialogInterface.OnClickListener okListener,
final DialogInterface.OnClickListener cancelListener) {
okCancelCustomDialog(activity, activity.getString(R.string.DLG_confirm_title), text, android.R.string.ok, android.R.string.cancel, android.R.drawable.ic_dialog_alert, okListener, cancelListener);
}
/**
* Displays a dialog box with custom titled OK and cancel button titles
*/
* Displays a dialog box with custom titled OK and cancel button titles
*/
public static void okCancelCustomDialog(final Activity activity, final String title, final String text,
final int okTitleId, final int cancelTitleId,
final int icon,
final DialogInterface.OnClickListener okListener,
final DialogInterface.OnClickListener cancelListener) {
if(activity.isFinishing())
final int okTitleId, final int cancelTitleId,
final int icon,
final DialogInterface.OnClickListener okListener,
final DialogInterface.OnClickListener cancelListener) {
if (activity.isFinishing())
return;
tryOnUiThread(activity, new Runnable() {
public void run() {
new AlertDialog.Builder(activity)
.setTitle(R.string.DLG_confirm_title)
.setMessage(text)
.setTitle(title)
.setIcon(icon)
.setPositiveButton(okTitleId, okListener)
.setNegativeButton(cancelTitleId, cancelListener)
.show().setOwnerActivity(activity);
.setTitle(R.string.DLG_confirm_title)
.setMessage(text)
.setTitle(title)
.setIcon(icon)
.setPositiveButton(okTitleId, okListener)
.setNegativeButton(cancelTitleId, cancelListener)
.show().setOwnerActivity(activity);
}
});
}
/** Run runnable with progress dialog */
/**
* Run runnable with progress dialog
*/
public static ProgressDialog runWithProgressDialog(final Activity activity, final Runnable runnable) {
final ProgressDialog progressdiag = progressDialog(activity, activity.getString(R.string.DLG_wait));
new Thread(new Runnable() {
@ -196,6 +198,7 @@ public class DialogUtilities {
/**
* Displays a progress dialog. Must be run on the UI thread
*
* @param context
* @param text
* @return
@ -217,7 +220,7 @@ public class DialogUtilities {
* @param dialog
*/
public static void dismissDialog(Activity activity, final Dialog dialog) {
if(dialog == null)
if (dialog == null)
return;
tryOnUiThread(activity, new Runnable() {
public void run() {

@ -8,10 +8,9 @@ package com.todoroo.andlib.utility;
/**
* Pair utility class
*
* @author Tim Su <tim@todoroo.com>
*
* @param <L>
* @param <R>
* @author Tim Su <tim@todoroo.com>
*/
public class Pair<L, R> {

@ -17,7 +17,6 @@ import com.todoroo.andlib.service.ContextManager;
* Helper class for reading and writing SharedPreferences
*
* @author Tim Su <tim@todoroo.com>
*
*/
public class Preferences {
@ -33,12 +32,13 @@ public class Preferences {
*/
public static void setIfUnset(SharedPreferences prefs, Editor editor, Resources r, int keyResource, int value) {
String key = r.getString(keyResource);
if(!prefs.contains(key))
if (!prefs.contains(key))
editor.putString(key, Integer.toString(value));
}
/**
* Helper to write to editor if key specified is null
*
* @param prefs
* @param editor
* @param r
@ -47,12 +47,13 @@ public class Preferences {
*/
public static void setIfUnset(SharedPreferences prefs, Editor editor, Resources r, int keyResource, boolean value) {
String key = r.getString(keyResource);
if(!prefs.contains(key) || !(prefs.getAll().get(key) instanceof Boolean))
if (!prefs.contains(key) || !(prefs.getAll().get(key) instanceof Boolean))
editor.putBoolean(key, value);
}
/**
* Helper to write to editor if key specified is null
*
* @param prefs
* @param editor
* @param r
@ -61,7 +62,7 @@ public class Preferences {
*/
public static void setIfUnset(SharedPreferences prefs, Editor editor, Resources r, int keyResource, String value) {
String key = r.getString(keyResource);
if(!prefs.contains(key) || !(prefs.getAll().get(key) instanceof String))
if (!prefs.contains(key) || !(prefs.getAll().get(key) instanceof String))
editor.putString(key, value);
}
@ -71,9 +72,11 @@ public class Preferences {
private static SharedPreferences preferences = null;
/** Get preferences object from the context */
/**
* Get preferences object from the context
*/
public static SharedPreferences getPrefs(Context context) {
if(preferences != null)
if (preferences != null)
return preferences;
context = context.getApplicationContext();
@ -91,7 +94,9 @@ public class Preferences {
return preferences;
}
/** @return true if given preference is set */
/**
* @return true if given preference is set
*/
public static boolean isSet(String key) {
Context context = ContextManager.getContext();
return getPrefs(context).contains(key);
@ -99,7 +104,8 @@ public class Preferences {
// --- preference fetching (string)
/** Gets an string value from a string preference. Returns null
/**
* Gets an string value from a string preference. Returns null
* if the value is not set
*
* @param context
@ -111,7 +117,8 @@ public class Preferences {
return getPrefs(context).getString(key, null);
}
/** Gets an string value from a string preference. Returns null
/**
* Gets an string value from a string preference. Returns null
* if the value is not set
*
* @param context
@ -123,7 +130,8 @@ public class Preferences {
return getPrefs(context).getString(context.getResources().getString(keyResource), null);
}
/** Gets an integer value from a string preference. Returns null
/**
* Gets an integer value from a string preference. Returns null
* if the value is not set or not an integer.
*
* @param keyResource resource from string.xml
@ -133,7 +141,7 @@ public class Preferences {
Context context = ContextManager.getContext();
Resources r = context.getResources();
String value = getPrefs(context).getString(r.getString(keyResource), null);
if(value == null)
if (value == null)
return defaultValue;
try {
@ -143,7 +151,8 @@ public class Preferences {
}
}
/** Gets an float value from a string preference. Returns null
/**
* Gets an float value from a string preference. Returns null
* if the value is not set or not an flat.
*
* @param keyResource resource from string.xml
@ -191,7 +200,8 @@ public class Preferences {
// --- preference fetching (boolean)
/** Gets a boolean preference (e.g. a CheckBoxPreference setting)
/**
* Gets a boolean preference (e.g. a CheckBoxPreference setting)
*
* @param key
* @param defValue
@ -206,7 +216,8 @@ public class Preferences {
}
}
/** Gets a boolean preference (e.g. a CheckBoxPreference setting)
/**
* Gets a boolean preference (e.g. a CheckBoxPreference setting)
*
* @param keyResource
* @param defValue
@ -218,6 +229,7 @@ public class Preferences {
/**
* Sets boolean preference
*
* @param key
* @param value
*/
@ -227,6 +239,7 @@ public class Preferences {
/**
* Sets boolean preference
*
* @param key
* @param value
*/
@ -239,7 +252,8 @@ public class Preferences {
// --- preference fetching (int)
/** Gets a int preference
/**
* Gets a int preference
*
* @param key
* @param defValue
@ -252,6 +266,7 @@ public class Preferences {
/**
* Sets int preference
*
* @param key
* @param value
*/
@ -264,7 +279,8 @@ public class Preferences {
// --- preference fetching (long)
/** Gets a long preference
/**
* Gets a long preference
*
* @param key
* @param defValue
@ -277,6 +293,7 @@ public class Preferences {
/**
* Sets long preference
*
* @param key
* @param value
*/
@ -289,6 +306,7 @@ public class Preferences {
/**
* Clears a preference
*
* @param key
*/
public static void clear(String key) {

@ -29,7 +29,6 @@ import com.todoroo.andlib.service.ContextManager;
* updatePreferences to update the summary with preference values.
*
* @author Tim Su <tim@todoroo.com>
*
*/
abstract public class TodorooPreferenceActivity extends PreferenceActivity {
@ -39,8 +38,9 @@ abstract public class TodorooPreferenceActivity extends PreferenceActivity {
/**
* Update preferences for the given preference
*
* @param preference
* @param value setting. may be null.
* @param value setting. may be null.
*/
public abstract void updatePreferences(Preference preference, Object value);
@ -60,21 +60,21 @@ abstract public class TodorooPreferenceActivity extends PreferenceActivity {
}
protected void initializePreference(Preference preference) {
if(preference instanceof PreferenceGroup) {
PreferenceGroup group = (PreferenceGroup)preference;
for(int i = 0; i < group.getPreferenceCount(); i++) {
if (preference instanceof PreferenceGroup) {
PreferenceGroup group = (PreferenceGroup) preference;
for (int i = 0; i < group.getPreferenceCount(); i++) {
initializePreference(group.getPreference(i));
}
updatePreferences(group, null);
} else {
Object value = null;
if(preference instanceof ListPreference)
value = ((ListPreference)preference).getValue();
else if(preference instanceof CheckBoxPreference)
value = ((CheckBoxPreference)preference).isChecked();
else if(preference instanceof EditTextPreference)
value = ((EditTextPreference)preference).getText();
else if(preference instanceof RingtonePreference)
if (preference instanceof ListPreference)
value = ((ListPreference) preference).getValue();
else if (preference instanceof CheckBoxPreference)
value = ((CheckBoxPreference) preference).isChecked();
else if (preference instanceof EditTextPreference)
value = ((EditTextPreference) preference).getText();
else if (preference instanceof RingtonePreference)
value = getPreferenceManager().getSharedPreferences().getString(preference.getKey(), null);
updatePreferences(preference, value);
@ -93,7 +93,7 @@ abstract public class TodorooPreferenceActivity extends PreferenceActivity {
@Override
public void onWindowFocusChanged(boolean hasFocus) {
super.onWindowFocusChanged(hasFocus);
if(hasFocus) {
if (hasFocus) {
initializePreference(getPreferenceScreen());
}
}

@ -13,7 +13,6 @@ import android.os.Parcelable;
* which affect all other extension points that share the same identifier.
*
* @author Tim Su <tim@todoroo.com>
*
*/
public class Addon implements Parcelable {
@ -89,7 +88,9 @@ public class Addon implements Parcelable {
*/
public Addon[] newArray(int size) {
return new Addon[size];
};
}
;
};
}

@ -70,7 +70,7 @@ public class AstridApiConstants {
/**
* Extras name for old task due date
*/
public static final String EXTRAS_OLD_DUE_DATE= "oldDueDate";
public static final String EXTRAS_OLD_DUE_DATE = "oldDueDate";
/**
* Extras name for new task due date
@ -144,7 +144,7 @@ public class AstridApiConstants {
/**
* Action name for broadcast intent requesting details for a task.
* Extended details are displayed when a user presses on a task.
*
* <p/>
* <li> EXTRAS_TASK_ID id of the task
* <li> EXTRAS_EXTENDED whether request is for standard or extended details
*/

@ -15,13 +15,12 @@ import android.os.Parcelable;
* together criteria
*
* @author Tim Su <tim@todoroo.com>
*
*/
abstract public class CustomFilterCriterion implements Parcelable {
/**
* Criteria Identifier. This identifier allows saved filters to be reloaded.
* <p>
* <p/>
* e.g "duedate"
*/
public String identifier;
@ -29,7 +28,7 @@ abstract public class CustomFilterCriterion implements Parcelable {
/**
* Criteria Title. If the title contains ?, this is replaced by the entry
* label string selected.
* <p>
* <p/>
* e.g "Due: ?"
*/
public String text;
@ -37,7 +36,7 @@ abstract public class CustomFilterCriterion implements Parcelable {
/**
* Criterion SQL. This query should return task id's. If this contains
* ?, it will be replaced by the entry value
* <p>
* <p/>
* Examples:
* <ul>
* <li><code>SELECT _id FROM tasks WHERE dueDate <= ?</code>
@ -86,8 +85,8 @@ abstract public class CustomFilterCriterion implements Parcelable {
identifier = source.readString();
text = source.readString();
sql = source.readString();
valuesForNewTasks = (ContentValues)source.readParcelable(ContentValues.class.getClassLoader());
icon = (Bitmap)source.readParcelable(Bitmap.class.getClassLoader());
valuesForNewTasks = (ContentValues) source.readParcelable(ContentValues.class.getClassLoader());
icon = (Bitmap) source.readParcelable(Bitmap.class.getClassLoader());
name = source.readString();
}
}

@ -15,20 +15,21 @@ import com.todoroo.andlib.sql.QueryTemplate;
/**
* A <code>FilterListFilter</code> allows users to display tasks that have
* something in common.
* <p>
* <p/>
* A plug-in can expose new <code>FilterListFilter</code>s to the system by
* responding to the <code>com.todoroo.astrid.GET_FILTERS</code> broadcast
* intent.
*
* @author Tim Su <tim@todoroo.com>
*
*/
public class Filter extends FilterListItem {
// --- constants
/** Constant for valuesForNewTasks to indicate the value should be replaced
* with the current time as long */
/**
* Constant for valuesForNewTasks to indicate the value should be replaced
* with the current time as long
*/
public static final long VALUE_NOW = Long.MIN_VALUE + 1;
// --- instance variables
@ -36,7 +37,7 @@ public class Filter extends FilterListItem {
/**
* Expanded title of this filter. This is displayed at the top
* of the screen when user is viewing this filter.
* <p>
* <p/>
* e.g "Tasks With Notes"
*/
public String title;
@ -46,14 +47,14 @@ public class Filter extends FilterListItem {
* statement after "<code>SELECT fields FROM table %s</code>". It is
* recommended that you use a {@link QueryTemplate} to construct your
* query.
* <p>
* <p/>
* Examples:
* <ul>
* <li><code>"WHERE completionDate = 0"</code>
* <li><code>"INNER JOIN " +
* Constants.TABLE_METADATA + " ON metadata.task = tasks.id WHERE
* metadata.namespace = " + NAMESPACE + " AND metadata.key = 'a' AND
* metadata.value = 'b' GROUP BY tasks.id ORDER BY tasks.title"</code>
* Constants.TABLE_METADATA + " ON metadata.task = tasks.id WHERE
* metadata.namespace = " + NAMESPACE + " AND metadata.key = 'a' AND
* metadata.value = 'b' GROUP BY tasks.id ORDER BY tasks.title"</code>
* </ul>
*/
protected String sqlQuery;
@ -74,36 +75,30 @@ public class Filter extends FilterListItem {
/**
* Utility constructor for creating a Filter object
* @param listingTitle
* Title of this item as displayed on the lists page, e.g. Inbox
* @param title
* Expanded title of this filter when user is viewing this
* filter, e.g. Inbox (20 tasks)
* @param sqlQuery
* SQL query for this list (see {@link #sqlQuery} for examples).
* @param valuesForNewTasks
* see {@link #sqlForNewTasks}
*
* @param listingTitle Title of this item as displayed on the lists page, e.g. Inbox
* @param title Expanded title of this filter when user is viewing this
* filter, e.g. Inbox (20 tasks)
* @param sqlQuery SQL query for this list (see {@link #sqlQuery} for examples).
* @param valuesForNewTasks see {@link #sqlForNewTasks}
*/
public Filter(String listingTitle, String title,
QueryTemplate sqlQuery, ContentValues valuesForNewTasks) {
QueryTemplate sqlQuery, ContentValues valuesForNewTasks) {
this(listingTitle, title, sqlQuery == null ? null : sqlQuery.toString(),
valuesForNewTasks);
}
/**
* Utility constructor for creating a Filter object
* @param listingTitle
* Title of this item as displayed on the lists page, e.g. Inbox
* @param title
* Expanded title of this filter when user is viewing this
* filter, e.g. Inbox (20 tasks)
* @param sqlQuery
* SQL query for this list (see {@link #sqlQuery} for examples).
* @param valuesForNewTasks
* see {@link #sqlForNewTasks}
*
* @param listingTitle Title of this item as displayed on the lists page, e.g. Inbox
* @param title Expanded title of this filter when user is viewing this
* filter, e.g. Inbox (20 tasks)
* @param sqlQuery SQL query for this list (see {@link #sqlQuery} for examples).
* @param valuesForNewTasks see {@link #sqlForNewTasks}
*/
public Filter(String listingTitle, String title,
String sqlQuery, ContentValues valuesForNewTasks) {
String sqlQuery, ContentValues valuesForNewTasks) {
this.listingTitle = listingTitle;
this.title = title;
this.sqlQuery = sqlQuery;
@ -128,8 +123,7 @@ public class Filter extends FilterListItem {
/**
* Utility constructor
*
* @param plugin
* {@link Addon} identifier that encompasses object
* @param plugin {@link Addon} identifier that encompasses object
*/
protected Filter() {
// do nothing

@ -13,7 +13,6 @@ import android.os.Parcelable;
* a user to show/hide all of its children.
*
* @author Tim Su <tim@todoroo.com>
*
*/
public class FilterCategory extends FilterListItem {
@ -24,10 +23,9 @@ public class FilterCategory extends FilterListItem {
/**
* Constructor for creating a new FilterCategory
* @param listingTitle
* Title of this item as displayed on the lists page, e.g. Inbox
* @param children
* filters belonging to this category
*
* @param listingTitle Title of this item as displayed on the lists page, e.g. Inbox
* @param children filters belonging to this category
*/
public FilterCategory(String listingTitle, Filter[] children) {
this.listingTitle = listingTitle;
@ -37,8 +35,7 @@ public class FilterCategory extends FilterListItem {
/**
* Constructor for creating a new FilterCategory
*
* @param plugin
* {@link Addon} identifier that encompasses object
* @param plugin {@link Addon} identifier that encompasses object
*/
protected FilterCategory() {
//
@ -77,8 +74,8 @@ public class FilterCategory extends FilterListItem {
Parcelable[] parcelableChildren = source.readParcelableArray(
FilterCategory.class.getClassLoader());
item.children = new Filter[parcelableChildren.length];
for(int i = 0; i < item.children.length; i++) {
if(parcelableChildren[i] instanceof FilterListItem)
for (int i = 0; i < item.children.length; i++) {
if (parcelableChildren[i] instanceof FilterListItem)
item.children[i] = (Filter) parcelableChildren[i];
else
item.children[i] = null;

@ -13,7 +13,6 @@ import android.os.Parcelable;
* A <code>FilterCategoryWithNewButton</code> has a button for new filter creation
*
* @author Tim Su <tim@todoroo.com>
*
*/
public class FilterCategoryWithNewButton extends FilterCategory {
@ -29,10 +28,9 @@ public class FilterCategoryWithNewButton extends FilterCategory {
/**
* Constructor for creating a new FilterCategory
* @param listingTitle
* Title of this item as displayed on the lists page, e.g. Inbox
* @param children
* filters belonging to this category
*
* @param listingTitle Title of this item as displayed on the lists page, e.g. Inbox
* @param children filters belonging to this category
*/
public FilterCategoryWithNewButton(String listingTitle, Filter[] children) {
this.listingTitle = listingTitle;
@ -42,8 +40,7 @@ public class FilterCategoryWithNewButton extends FilterCategory {
/**
* Constructor for creating a new FilterCategory
*
* @param plugin
* {@link Addon} identifier that encompasses object
* @param plugin {@link Addon} identifier that encompasses object
*/
protected FilterCategoryWithNewButton() {
//
@ -85,8 +82,8 @@ public class FilterCategoryWithNewButton extends FilterCategory {
Parcelable[] parcelableChildren = source.readParcelableArray(
FilterCategoryWithNewButton.class.getClassLoader());
item.children = new Filter[parcelableChildren.length];
for(int i = 0; i < item.children.length; i++) {
if(parcelableChildren[i] instanceof FilterListItem)
for (int i = 0; i < item.children.length; i++) {
if (parcelableChildren[i] instanceof FilterListItem)
item.children[i] = (Filter) parcelableChildren[i];
else
item.children[i] = null;

@ -12,12 +12,12 @@ import android.os.Parcelable;
* Section Header for Filter List
*
* @author Tim Su <tim@todoroo.com>
*
*/
public class FilterListHeader extends FilterListItem {
/**
* Constructor for creating a new FilterListHeader
*
* @param listingTitle
* @param listingIconResource
* @param priority
@ -29,8 +29,7 @@ public class FilterListHeader extends FilterListItem {
/**
* Constructor for creating a new FilterListHeader
*
* @param plugin
* {@link Addon} identifier that encompasses object
* @param plugin {@link Addon} identifier that encompasses object
*/
protected FilterListHeader() {
//

@ -14,7 +14,6 @@ import android.os.Parcelable;
* Represents an item displayed by Astrid's FilterListActivity
*
* @author Tim Su <tim@todoroo.com>
*
*/
abstract public class FilterListItem implements Parcelable {

@ -33,12 +33,12 @@ public class FilterWithCustomIntent extends Filter {
}
public FilterWithCustomIntent(String listingTitle, String title,
QueryTemplate sqlQuery, ContentValues valuesForNewTasks) {
QueryTemplate sqlQuery, ContentValues valuesForNewTasks) {
super(listingTitle, title, sqlQuery, valuesForNewTasks);
}
public FilterWithCustomIntent(String listingTitle, String title,
String sqlQuery, ContentValues valuesForNewTasks) {
String sqlQuery, ContentValues valuesForNewTasks) {
super(listingTitle, title, sqlQuery, valuesForNewTasks);
}
@ -46,7 +46,7 @@ public class FilterWithCustomIntent extends Filter {
Intent intent = new Intent();
intent.putExtra("filter", this); //$NON-NLS-1$
intent.setComponent(new ComponentName(AstridApiConstants.ASTRID_PACKAGE, "com.todoroo.astrid.activity.TaskListActivity")); //$NON-NLS-1$
if(customExtras != null)
if (customExtras != null)
intent.putExtras(customExtras);
return intent;

@ -29,12 +29,12 @@ public class FilterWithUpdate extends FilterWithCustomIntent {
}
public FilterWithUpdate(String listingTitle, String title,
QueryTemplate sqlQuery, ContentValues valuesForNewTasks) {
QueryTemplate sqlQuery, ContentValues valuesForNewTasks) {
super(listingTitle, title, sqlQuery, valuesForNewTasks);
}
public FilterWithUpdate(String listingTitle, String title,
String sqlQuery, ContentValues valuesForNewTasks) {
String sqlQuery, ContentValues valuesForNewTasks) {
super(listingTitle, title, sqlQuery, valuesForNewTasks);
}

@ -14,7 +14,6 @@ import android.os.Parcelable;
* Special filter that launches a PendingIntent when accessed.
*
* @author Tim Su <tim@todoroo.com>
*
*/
public final class IntentFilter extends FilterListItem implements Parcelable {
@ -26,10 +25,8 @@ public final class IntentFilter extends FilterListItem implements Parcelable {
/**
* Constructor for creating a new IntentFilter
*
* @param listingTitle
* Title of this item as displayed on the lists page, e.g. Inbox
* @param intent
* intent to load
* @param listingTitle Title of this item as displayed on the lists page, e.g. Inbox
* @param intent intent to load
*/
public IntentFilter(String listingTitle, PendingIntent intent) {
this.listingTitle = listingTitle;

@ -15,7 +15,6 @@ import android.os.Parcelable;
* together criteria
*
* @author Tim Su <tim@todoroo.com>
*
*/
public class MultipleSelectCriterion extends CustomFilterCriterion implements Parcelable {
@ -42,8 +41,8 @@ public class MultipleSelectCriterion extends CustomFilterCriterion implements Pa
* @param name
*/
public MultipleSelectCriterion(String identifier, String title, String sql,
ContentValues valuesForNewTasks, String[] entryTitles,
String[] entryValues, Bitmap icon, String name) {
ContentValues valuesForNewTasks, String[] entryTitles,
String[] entryValues, Bitmap icon, String name) {
this.identifier = identifier;
this.text = title;
this.sql = sql;

@ -5,71 +5,98 @@
*/
package com.todoroo.astrid.api;
import java.util.Date;
import com.todoroo.andlib.utility.DateUtilities;
import java.util.Date;
/**
* PermaSql allows for creating SQL statements that can be saved and used
* later without dates getting stale. It also allows these values to be
* used in
*
* @author Tim Su <tim@todoroo.com>
*
*/
public final class PermaSql {
// --- placeholder strings
/** value to be replaced with the current time as long */
/**
* value to be replaced with the current time as long
*/
public static final String VALUE_NOW = "NOW()"; //$NON-NLS-1$
/** value to be replaced by end of day as long */
/**
* value to be replaced by end of day as long
*/
public static final String VALUE_EOD = "EOD()"; //$NON-NLS-1$
/** value to be replaced by noon today as long */
/**
* value to be replaced by noon today as long
*/
public static final String VALUE_NOON = "NOON()"; //$NON-NLS-1$
/** value to be replaced by end of day yesterday as long */
/**
* value to be replaced by end of day yesterday as long
*/
public static final String VALUE_EOD_YESTERDAY = "EODY()"; //$NON-NLS-1$
/** value to be replaced by noon yesterday as long */
/**
* value to be replaced by noon yesterday as long
*/
public static final String VALUE_NOON_YESTERDAY = "NOONY()"; //$NON-NLS-1$
/** value to be replaced by end of day tomorrow as long */
/**
* value to be replaced by end of day tomorrow as long
*/
public static final String VALUE_EOD_TOMORROW = "EODT()"; //$NON-NLS-1$
/** value to be replaced by noon tomorrow as long */
/**
* value to be replaced by noon tomorrow as long
*/
public static final String VALUE_NOON_TOMORROW = "NOONT()"; //$NON-NLS-1$
/** value to be replaced by end of day day after tomorrow as long */
/**
* value to be replaced by end of day day after tomorrow as long
*/
public static final String VALUE_EOD_DAY_AFTER = "EODTT()"; //$NON-NLS-1$
/** value to be replaced by noon day after tomorrow as long */
/**
* value to be replaced by noon day after tomorrow as long
*/
public static final String VALUE_NOON_DAY_AFTER = "NOONTT()"; //$NON-NLS-1$
/** value to be replaced by end of day next week as long */
/**
* value to be replaced by end of day next week as long
*/
public static final String VALUE_EOD_NEXT_WEEK = "EODW()"; //$NON-NLS-1$
/** value to be replaced by noon next week as long */
/**
* value to be replaced by noon next week as long
*/
public static final String VALUE_NOON_NEXT_WEEK = "NOONW()"; //$NON-NLS-1$
/** value to be replaced by approximate end of day next month as long */
/**
* value to be replaced by approximate end of day next month as long
*/
public static final String VALUE_EOD_NEXT_MONTH = "EODM()"; //$NON-NLS-1$
/** value to be replaced by approximate noon next month as long */
/**
* value to be replaced by approximate noon next month as long
*/
public static final String VALUE_NOON_NEXT_MONTH = "NOONM()"; //$NON-NLS-1$
/** Replace placeholder strings with actual */
/**
* Replace placeholder strings with actual
*/
public static String replacePlaceholders(String value) {
if(value.contains(VALUE_NOW))
if (value.contains(VALUE_NOW))
value = value.replace(VALUE_NOW, Long.toString(DateUtilities.now()));
if(value.contains(VALUE_EOD) || value.contains(VALUE_EOD_DAY_AFTER) ||
if (value.contains(VALUE_EOD) || value.contains(VALUE_EOD_DAY_AFTER) ||
value.contains(VALUE_EOD_NEXT_WEEK) || value.contains(VALUE_EOD_TOMORROW) ||
value.contains(VALUE_EOD_YESTERDAY) || value.contains(VALUE_EOD_NEXT_MONTH)) {
value = replaceEodValues(value);
}
if(value.contains(VALUE_NOON) || value.contains(VALUE_NOON_DAY_AFTER) ||
if (value.contains(VALUE_NOON) || value.contains(VALUE_NOON_DAY_AFTER) ||
value.contains(VALUE_NOON_NEXT_WEEK) || value.contains(VALUE_NOON_TOMORROW) ||
value.contains(VALUE_NOON_YESTERDAY) || value.contains(VALUE_NOON_NEXT_MONTH)) {
value = replaceNoonValues(value);

@ -13,7 +13,6 @@ import android.os.Parcelable;
* Represents an intent that can be called to perform synchronization
*
* @author Tim Su <tim@todoroo.com>
*
*/
public class SyncAction implements Parcelable {
@ -30,10 +29,8 @@ public class SyncAction implements Parcelable {
/**
* Create an EditOperation object
*
* @param label
* label to display
* @param intent
* intent to invoke
* @param label label to display
* @param intent intent to invoke
*/
public SyncAction(String label, PendingIntent intent) {
super();
@ -61,7 +58,7 @@ public class SyncAction implements Parcelable {
*/
@Override
public boolean equals(Object o) {
if(!(o instanceof SyncAction))
if (!(o instanceof SyncAction))
return false;
SyncAction other = (SyncAction) o;
return label.equals(other.label) && intent.getTargetPackage().equals(other.intent.getTargetPackage());
@ -92,7 +89,7 @@ public class SyncAction implements Parcelable {
* {@inheritDoc}
*/
public SyncAction createFromParcel(Parcel source) {
return new SyncAction(source.readString(), (PendingIntent)source.readParcelable(
return new SyncAction(source.readString(), (PendingIntent) source.readParcelable(
PendingIntent.class.getClassLoader()));
}
@ -101,7 +98,9 @@ public class SyncAction implements Parcelable {
*/
public SyncAction[] newArray(int size) {
return new SyncAction[size];
};
}
;
};
}

@ -12,7 +12,6 @@ import android.graphics.drawable.BitmapDrawable;
* Represents an intent that can be called on a task
*
* @author Tim Su <tim@todoroo.com>
*
*/
public class TaskAction {
@ -39,10 +38,8 @@ public class TaskAction {
/**
* Create an EditOperation object
*
* @param text
* label to display
* @param intent
* intent to invoke. {@link #EXTRAS_TASK_ID} will be passed
* @param text label to display
* @param intent intent to invoke. {@link #EXTRAS_TASK_ID} will be passed
*/
public TaskAction(String text, PendingIntent intent, BitmapDrawable icon) {
super();

@ -14,7 +14,6 @@ import android.widget.RemoteViews.RemoteView;
* Represents a line of text displayed in the Task List
*
* @author Tim Su <tim@todoroo.com>
*
*/
public final class TaskDecoration implements Parcelable {
@ -45,10 +44,9 @@ public final class TaskDecoration implements Parcelable {
/**
* Creates a TaskDetail object
* @param text
* text to display
* @param color
* color to use for text. Use <code>0</code> for default color
*
* @param text text to display
* @param color color to use for text. Use <code>0</code> for default color
*/
public TaskDecoration(RemoteViews decoration, int position, int color) {
this.decoration = decoration;
@ -82,7 +80,7 @@ public final class TaskDecoration implements Parcelable {
* {@inheritDoc}
*/
public TaskDecoration createFromParcel(Parcel source) {
return new TaskDecoration((RemoteViews)source.readParcelable(
return new TaskDecoration((RemoteViews) source.readParcelable(
RemoteViews.class.getClassLoader()),
source.readInt(), source.readInt());
}
@ -92,7 +90,9 @@ public final class TaskDecoration implements Parcelable {
*/
public TaskDecoration[] newArray(int size) {
return new TaskDecoration[size];
};
}
;
};
}

@ -15,7 +15,6 @@ import android.os.Parcelable;
* together criteria
*
* @author Tim Su <tim@todoroo.com>
*
*/
public class TextInputCriterion extends CustomFilterCriterion implements Parcelable {
@ -43,8 +42,8 @@ public class TextInputCriterion extends CustomFilterCriterion implements Parcela
* @param name
*/
public TextInputCriterion(String identifier, String title, String sql,
ContentValues valuesForNewTasks, String prompt, String hint,
Bitmap icon, String name) {
ContentValues valuesForNewTasks, String prompt, String hint,
Bitmap icon, String name) {
this.identifier = identifier;
this.text = title;
this.sql = sql;

@ -14,15 +14,13 @@ import com.todoroo.astrid.api.FilterListItem;
* Special filter that triggers the search functionality when accessed.
*
* @author Tim Su <tim@todoroo.com>
*
*/
public class SearchFilter extends FilterListItem {
/**
* Constructor for creating a new SearchFilter
*
* @param listingTitle
* Title of this item as displayed on the lists page, e.g. Inbox
* @param listingTitle Title of this item as displayed on the lists page, e.g. Inbox
*/
public SearchFilter(String listingTitle) {
this.listingTitle = listingTitle;

@ -16,7 +16,6 @@ import com.todoroo.astrid.data.TaskApiDao.TaskCriteria;
* Helpers for sorting a list of tasks
*
* @author Tim Su <tim@todoroo.com>
*
*/
public class SortHelper {
@ -32,14 +31,19 @@ public class SortHelper {
public static final int SORT_IMPORTANCE = 3;
public static final int SORT_MODIFIED = 4;
/** preference key for sort flags. stored in public prefs */
/**
* preference key for sort flags. stored in public prefs
*/
public static final String PREF_SORT_FLAGS = "sort_flags"; //$NON-NLS-1$
/** preference key for sort sort. stored in public prefs */
/**
* preference key for sort sort. stored in public prefs
*/
public static final String PREF_SORT_SORT = "sort_sort"; //$NON-NLS-1$
/**
* Takes a SQL query, and if there isn't already an order, creates an order.
*
* @param originalSql
* @param flags
* @param sort
@ -48,24 +52,24 @@ public class SortHelper {
@SuppressWarnings("nls")
public static String adjustQueryForFlagsAndSort(String originalSql, int flags, int sort) {
// sort
if(originalSql == null)
if (originalSql == null)
originalSql = "";
if(!originalSql.toUpperCase().contains("ORDER BY")) {
if (!originalSql.toUpperCase().contains("ORDER BY")) {
Order order = orderForSortType(sort);
if((flags & FLAG_REVERSE_SORT) > 0)
if ((flags & FLAG_REVERSE_SORT) > 0)
order = order.reverse();
originalSql += " ORDER BY " + order;
}
// flags
if((flags & FLAG_SHOW_COMPLETED) > 0)
if ((flags & FLAG_SHOW_COMPLETED) > 0)
originalSql = originalSql.replace(Task.COMPLETION_DATE.eq(0).toString(),
Criterion.all.toString());
if((flags & FLAG_SHOW_HIDDEN) > 0)
if ((flags & FLAG_SHOW_HIDDEN) > 0)
originalSql = originalSql.replace(TaskCriteria.isVisible().toString(),
Criterion.all.toString());
if((flags & FLAG_SHOW_DELETED) > 0)
if ((flags & FLAG_SHOW_DELETED) > 0)
originalSql = originalSql.replace(Task.DELETION_DATE.eq(0).toString(),
Criterion.all.toString());
@ -78,7 +82,7 @@ public class SortHelper {
public static int setManualSort(int flags, boolean status) {
flags = (flags & ~FLAG_DRAG_DROP);
if(status)
if (status)
flags |= FLAG_DRAG_DROP;
return flags;
}
@ -86,26 +90,26 @@ public class SortHelper {
@SuppressWarnings("nls")
public static Order orderForSortType(int sortType) {
Order order;
switch(sortType) {
case SORT_ALPHA:
order = Order.asc(Functions.upper(Task.TITLE));
break;
case SORT_DUE:
order = Order.asc(Functions.caseStatement(Task.DUE_DATE.eq(0),
Functions.now() + "*2", adjustedDueDateFunction()) + "+" + Task.IMPORTANCE +
"+3*" + Task.COMPLETION_DATE);
break;
case SORT_IMPORTANCE:
order = Order.asc(Task.IMPORTANCE + "*" + (2*DateUtilities.now()) + //$NON-NLS-1$
"+" + Functions.caseStatement(Task.DUE_DATE.eq(0), //$NON-NLS-1$
2 * DateUtilities.now(),
Task.DUE_DATE) + "+8*" + Task.COMPLETION_DATE);
break;
case SORT_MODIFIED:
order = Order.desc(Task.MODIFICATION_DATE);
break;
default:
order = defaultTaskOrder();
switch (sortType) {
case SORT_ALPHA:
order = Order.asc(Functions.upper(Task.TITLE));
break;
case SORT_DUE:
order = Order.asc(Functions.caseStatement(Task.DUE_DATE.eq(0),
Functions.now() + "*2", adjustedDueDateFunction()) + "+" + Task.IMPORTANCE +
"+3*" + Task.COMPLETION_DATE);
break;
case SORT_IMPORTANCE:
order = Order.asc(Task.IMPORTANCE + "*" + (2 * DateUtilities.now()) + //$NON-NLS-1$
"+" + Functions.caseStatement(Task.DUE_DATE.eq(0), //$NON-NLS-1$
2 * DateUtilities.now(),
Task.DUE_DATE) + "+8*" + Task.COMPLETION_DATE);
break;
case SORT_MODIFIED:
order = Order.desc(Task.MODIFICATION_DATE);
break;
default:
order = defaultTaskOrder();
}
if (sortType != SORT_ALPHA)
order.addSecondaryExpression(Order.asc(Task.TITLE));
@ -115,6 +119,7 @@ public class SortHelper {
/**
* Returns SQL task ordering that is astrid's default algorithm
*
* @return
*/
@SuppressWarnings("nls")

@ -14,61 +14,89 @@ import com.todoroo.astrid.api.AstridApiConstants;
@SuppressWarnings("nls")
public class History extends AbstractModel {
/** table for this model */
/**
* table for this model
*/
public static final Table TABLE = new Table("history", History.class);
/** content uri for this model */
/**
* content uri for this model
*/
public static final Uri CONTENT_URI = Uri.parse("content://" + AstridApiConstants.API_PACKAGE + "/" +
TABLE.name);
// --- properties
/** ID */
/**
* ID
*/
public static final LongProperty ID = new LongProperty(
TABLE, ID_PROPERTY_NAME);
/** Remote ID */
/**
* Remote ID
*/
public static final StringProperty UUID = new StringProperty(
TABLE, RemoteModel.UUID_PROPERTY_NAME);
/** Created at */
/**
* Created at
*/
public static final LongProperty CREATED_AT = new LongProperty(
TABLE, "created_at", Property.PROP_FLAG_DATE);
/** User id */
/**
* User id
*/
public static final StringProperty USER_UUID = new StringProperty(
TABLE, "user_id", Property.PROP_FLAG_USER_ID);
/** Column name */
/**
* Column name
*/
public static final StringProperty COLUMN = new StringProperty(
TABLE, "columnString");
/** Old value */
/**
* Old value
*/
public static final StringProperty OLD_VALUE = new StringProperty(
TABLE, "old_value", Property.PROP_FLAG_NULLABLE);
/** New value */
/**
* New value
*/
public static final StringProperty NEW_VALUE = new StringProperty(
TABLE, "new_value", Property.PROP_FLAG_NULLABLE);
/** Table identifier */
/**
* Table identifier
*/
public static final StringProperty TABLE_ID = new StringProperty(
TABLE, "table_id");
/** Target identifier */
/**
* Target identifier
*/
public static final StringProperty TARGET_ID = new StringProperty(
TABLE, "target_id");
/** Task name and id (JSONArray) */
/**
* Task name and id (JSONArray)
*/
public static final StringProperty TASK = new StringProperty(
TABLE, "task");
/** Associated tag id */
/**
* Associated tag id
*/
public static final StringProperty TAG_ID = new StringProperty(
TABLE, "tag_id");
/** Default values container */
/**
* Default values container
*/
private static final ContentValues defaultValues = new ContentValues();
@Override
@ -104,7 +132,9 @@ public class History extends AbstractModel {
super.readPropertiesFromCursor(cursor);
}
/** List of all properties for this model */
/**
* List of all properties for this model
*/
public static final Property<?>[] PROPERTIES = generateProperties(History.class);
private static final Creator<History> CREATOR = new ModelCreator<History>(History.class);

@ -21,54 +21,75 @@ import com.todoroo.astrid.api.AstridApiConstants;
* Data Model which represents a piece of metadata associated with a task
*
* @author Tim Su <tim@todoroo.com>
*
*/
@SuppressWarnings("nls")
public class Metadata extends AbstractModel {
// --- table
/** table for this model */
/**
* table for this model
*/
public static final Table TABLE = new Table("metadata", Metadata.class);
/** changes to metadata (specifically tags) are recorded in the task outstanding table */
/**
* changes to metadata (specifically tags) are recorded in the task outstanding table
*/
public static final Class<? extends OutstandingEntry<Task>> OUTSTANDING_MODEL = TaskOutstanding.class;
/** content uri for this model */
/**
* content uri for this model
*/
public static final Uri CONTENT_URI = Uri.parse("content://" + AstridApiConstants.API_PACKAGE + "/" +
TABLE.name);
// --- properties
/** ID */
/**
* ID
*/
public static final LongProperty ID = new LongProperty(
TABLE, ID_PROPERTY_NAME);
/** Associated Task */
/**
* Associated Task
*/
public static final LongProperty TASK = new LongProperty(
TABLE, "task");
/** Metadata Key */
/**
* Metadata Key
*/
public static final StringProperty KEY = new StringProperty(
TABLE, "key");
/** Metadata Text Value Column 1 */
/**
* Metadata Text Value Column 1
*/
public static final StringProperty VALUE1 = new StringProperty(
TABLE, "value");
/** Metadata Text Value Column 2 */
/**
* Metadata Text Value Column 2
*/
public static final StringProperty VALUE2 = new StringProperty(
TABLE, "value2");
/** Metadata Text Value Column 3 */
/**
* Metadata Text Value Column 3
*/
public static final StringProperty VALUE3 = new StringProperty(
TABLE, "value3");
/** Metadata Text Value Column 4 */
/**
* Metadata Text Value Column 4
*/
public static final StringProperty VALUE4 = new StringProperty(
TABLE, "value4");
/** Metadata Text Value Column 5 */
/**
* Metadata Text Value Column 5
*/
public static final StringProperty VALUE5 = new StringProperty(
TABLE, "value5");
@ -78,20 +99,28 @@ public class Metadata extends AbstractModel {
public static final StringProperty VALUE7 = new StringProperty(
TABLE, "value7");
/** Unixtime Metadata was created */
/**
* Unixtime Metadata was created
*/
public static final LongProperty CREATION_DATE = new LongProperty(
TABLE, "created");
/** Unixtime metadata was deleted/tombstoned */
/**
* Unixtime metadata was deleted/tombstoned
*/
public static final LongProperty DELETION_DATE = new LongProperty(
TABLE, "deleted");
/** List of all properties for this model */
/**
* List of all properties for this model
*/
public static final Property<?>[] PROPERTIES = generateProperties(Metadata.class);
// --- defaults
/** Default values container */
/**
* Default values container
*/
private static final ContentValues defaultValues = new ContentValues();
static {
@ -121,7 +150,9 @@ public class Metadata extends AbstractModel {
@Override
public long getId() {
return getIdHelper(ID);
};
}
;
// --- parcelable helpers

@ -16,7 +16,6 @@ import com.todoroo.andlib.sql.Criterion;
* note. It operates in a one-to-many relation with tasks.
*
* @author Tim Su <tim@todoroo.com>
*
*/
public class MetadataApiDao extends ContentResolverDao<Metadata> {
@ -29,17 +28,23 @@ public class MetadataApiDao extends ContentResolverDao<Metadata> {
*/
public static class MetadataCriteria {
/** Returns all metadata associated with a given task */
/**
* Returns all metadata associated with a given task
*/
public static Criterion byTask(long taskId) {
return Metadata.TASK.eq(taskId);
}
/** Returns all metadata associated with a given key */
/**
* Returns all metadata associated with a given key
*/
public static Criterion withKey(String key) {
return Metadata.KEY.eq(key);
}
/** Returns all metadata associated with a given key */
/**
* Returns all metadata associated with a given key
*/
public static Criterion byTaskAndwithKey(long taskId, String key) {
return Criterion.and(withKey(key), byTask(taskId));
}

@ -5,15 +5,6 @@
*/
package com.todoroo.astrid.data;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Date;
import org.json.JSONException;
import org.json.JSONObject;
import android.content.ContentValues;
import android.content.Context;
import android.graphics.Bitmap;
@ -26,39 +17,66 @@ import com.todoroo.andlib.data.Property.StringProperty;
import com.todoroo.andlib.data.TodorooCursor;
import com.todoroo.andlib.utility.DateUtilities;
import org.json.JSONException;
import org.json.JSONObject;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Date;
/**
* A model that is synchronized to a remote server and has a remote id
*
* @author Tim Su <tim@todoroo.com>
*
*/
abstract public class RemoteModel extends AbstractModel {
/** remote id property common to all remote models */
/**
* remote id property common to all remote models
*/
public static final String UUID_PROPERTY_NAME = "remoteId"; //$NON-NLS-1$
/** remote id property */
/**
* remote id property
*/
public static final StringProperty UUID_PROPERTY = new StringProperty(null, UUID_PROPERTY_NAME);
/** user id property common to all remote models */
/**
* user id property common to all remote models
*/
protected static final String USER_ID_PROPERTY_NAME = "userId"; //$NON-NLS-1$
/** user id property */
/**
* user id property
*/
public static final StringProperty USER_ID_PROPERTY = new StringProperty(null, USER_ID_PROPERTY_NAME);
/** user json property common to all remote models */
/**
* user json property common to all remote models
*/
protected static final String USER_JSON_PROPERTY_NAME = "user"; //$NON-NLS-1$
/** user json property */
@Deprecated public static final StringProperty USER_JSON_PROPERTY = new StringProperty(null, USER_JSON_PROPERTY_NAME);
/**
* user json property
*/
@Deprecated
public static final StringProperty USER_JSON_PROPERTY = new StringProperty(null, USER_JSON_PROPERTY_NAME);
/** pushed at date property name */
/**
* pushed at date property name
*/
public static final String PUSHED_AT_PROPERTY_NAME = "pushedAt"; //$NON-NLS-1$
/** pushed at date property name */
/**
* pushed at date property name
*/
public static final LongProperty PUSHED_AT_PROPERTY = new LongProperty(null, PUSHED_AT_PROPERTY_NAME);
/** constant value for no uuid */
/**
* constant value for no uuid
*/
public static final String NO_UUID = "0"; //$NON-NLS-1$
public static final boolean isValidUuid(String uuid) {
@ -78,9 +96,9 @@ abstract public class RemoteModel extends AbstractModel {
abstract public String getUuid();
protected String getUuidHelper(StringProperty uuid) {
if(setValues != null && setValues.containsKey(uuid.name))
if (setValues != null && setValues.containsKey(uuid.name))
return setValues.getAsString(uuid.name);
else if(values != null && values.containsKey(uuid.name))
else if (values != null && values.containsKey(uuid.name))
return values.getAsString(uuid.name);
else
return NO_UUID;
@ -90,7 +108,7 @@ abstract public class RemoteModel extends AbstractModel {
if (setValues == null)
setValues = new ContentValues();
if(NO_UUID.equals(uuid))
if (NO_UUID.equals(uuid))
clearValue(UUID_PROPERTY);
else
setValues.put(UUID_PROPERTY_NAME, uuid);

@ -21,60 +21,83 @@ import com.todoroo.astrid.api.AstridApiConstants;
* Data Model which represents a piece of data unrelated to a task
*
* @author Tim Su <tim@todoroo.com>
*
*/
@SuppressWarnings("nls")
public class StoreObject extends AbstractModel {
// --- table
/** table for this model */
/**
* table for this model
*/
public static final Table TABLE = new Table("store", StoreObject.class);
/** content uri for this model */
/**
* content uri for this model
*/
public static final Uri CONTENT_URI = Uri.parse("content://" + AstridApiConstants.API_PACKAGE + "/" +
TABLE.name);
// --- properties
/** ID */
/**
* ID
*/
public static final LongProperty ID = new LongProperty(
TABLE, ID_PROPERTY_NAME);
/** Store Type Key */
/**
* Store Type Key
*/
public static final StringProperty TYPE = new StringProperty(
TABLE, "type");
/** Store Item Key */
public static final StringProperty ITEM= new StringProperty(
/**
* Store Item Key
*/
public static final StringProperty ITEM = new StringProperty(
TABLE, "item");
/** Store Value Column 1 */
/**
* Store Value Column 1
*/
public static final StringProperty VALUE1 = new StringProperty(
TABLE, "value");
/** Store Value Column 2 */
/**
* Store Value Column 2
*/
public static final StringProperty VALUE2 = new StringProperty(
TABLE, "value2");
/** Store Value Column 3 */
/**
* Store Value Column 3
*/
public static final StringProperty VALUE3 = new StringProperty(
TABLE, "value3");
/** Store Value Column 4 */
/**
* Store Value Column 4
*/
public static final StringProperty VALUE4 = new StringProperty(
TABLE, "value4");
/** Store Value Column 5 */
/**
* Store Value Column 5
*/
public static final StringProperty VALUE5 = new StringProperty(
TABLE, "value5");
/** List of all properties for this model */
/**
* List of all properties for this model
*/
public static final Property<?>[] PROPERTIES = generateProperties(StoreObject.class);
// --- defaults
/** Default values container */
/**
* Default values container
*/
private static final ContentValues defaultValues = new ContentValues();
@Override
@ -100,7 +123,9 @@ public class StoreObject extends AbstractModel {
@Override
public long getId() {
return getIdHelper(ID);
};
}
;
// --- parcelable helpers

@ -15,7 +15,6 @@ import com.todoroo.andlib.sql.Criterion;
* StoreObject is an arbitrary piece of data stored inside of Astrid.
*
* @author Tim Su <tim@todoroo.com>
*
*/
public class StoreObjectApiDao extends ContentResolverDao<StoreObject> {
@ -30,12 +29,16 @@ public class StoreObjectApiDao extends ContentResolverDao<StoreObject> {
*/
public static class StoreObjectCriteria {
/** Returns all store objects with given type */
/**
* Returns all store objects with given type
*/
public static Criterion byType(String type) {
return StoreObject.TYPE.eq(type);
}
/** Returns store object with type and key */
/**
* Returns store object with type and key
*/
public static Criterion byTypeAndItem(String type, String item) {
return Criterion.and(byType(type), StoreObject.ITEM.eq(item));
}

@ -22,156 +22,229 @@ import com.todoroo.astrid.api.AstridApiConstants;
* Data Model which represents a collaboration space for users / tasks.
*
* @author Tim Su <tim@todoroo.com>
*
*/
@SuppressWarnings("nls")
public final class TagData extends RemoteModel {
// --- table and uri
/** table for this model */
/**
* table for this model
*/
public static final Table TABLE = new Table("tagdata", TagData.class);
/** model class for entries in the outstanding table */
/**
* model class for entries in the outstanding table
*/
public static final Class<? extends OutstandingEntry<TagData>> OUTSTANDING_MODEL = TagOutstanding.class;
/** content uri for this model */
/**
* content uri for this model
*/
public static final Uri CONTENT_URI = Uri.parse("content://" + AstridApiConstants.API_PACKAGE + "/" +
TABLE.name);
// --- properties
/** ID */
/**
* ID
*/
public static final LongProperty ID = new LongProperty(
TABLE, ID_PROPERTY_NAME);
/** User id */
/**
* User id
*/
public static final StringProperty USER_ID = new StringProperty(
TABLE, USER_ID_PROPERTY_NAME, Property.PROP_FLAG_USER_ID);
/** User Object (JSON) */
@Deprecated public static final StringProperty USER = new StringProperty(
/**
* User Object (JSON)
*/
@Deprecated
public static final StringProperty USER = new StringProperty(
TABLE, USER_JSON_PROPERTY_NAME);
/** Remote goal id */
/**
* Remote goal id
*/
public static final StringProperty UUID = new StringProperty(
TABLE, UUID_PROPERTY_NAME);
/** Name of Tag */
/**
* Name of Tag
*/
public static final StringProperty NAME = new StringProperty(
TABLE, "name");
/** Project picture */
/**
* Project picture
*/
public static final StringProperty PICTURE = new StringProperty(
TABLE, "picture", Property.PROP_FLAG_JSON | Property.PROP_FLAG_PICTURE);
/** Tag team array (JSON) */
@Deprecated public static final StringProperty MEMBERS = new StringProperty(
/**
* Tag team array (JSON)
*/
@Deprecated
public static final StringProperty MEMBERS = new StringProperty(
TABLE, "members");
/** Tag member count */
/**
* Tag member count
*/
public static final IntegerProperty MEMBER_COUNT = new IntegerProperty(
TABLE, "memberCount");
/** Flags */
/**
* Flags
*/
public static final IntegerProperty FLAGS = new IntegerProperty(
TABLE, "flags");
/** Unixtime Project was created */
/**
* Unixtime Project was created
*/
public static final LongProperty CREATION_DATE = new LongProperty(
TABLE, "created", Property.PROP_FLAG_DATE);
/** Unixtime Project was last touched */
/**
* Unixtime Project was last touched
*/
public static final LongProperty MODIFICATION_DATE = new LongProperty(
TABLE, "modified", Property.PROP_FLAG_DATE);
/** Unixtime Project was completed. 0 means active */
/**
* Unixtime Project was completed. 0 means active
*/
public static final LongProperty COMPLETION_DATE = new LongProperty(
TABLE, "completed", Property.PROP_FLAG_DATE);
/** Unixtime Project was deleted. 0 means not deleted */
/**
* Unixtime Project was deleted. 0 means not deleted
*/
public static final LongProperty DELETION_DATE = new LongProperty(
TABLE, "deleted", Property.PROP_FLAG_DATE);
/** Project picture thumbnail */
/**
* Project picture thumbnail
*/
public static final StringProperty THUMB = new StringProperty(
TABLE, "thumb");
/** Project last activity date */
/**
* Project last activity date
*/
public static final LongProperty LAST_ACTIVITY_DATE = new LongProperty(
TABLE, "lastActivityDate", Property.PROP_FLAG_DATE);
/** Whether user is part of Tag team */
/**
* Whether user is part of Tag team
*/
public static final IntegerProperty IS_TEAM = new IntegerProperty(
TABLE, "isTeam");
/** Whether Tag has unread activity */
/**
* Whether Tag has unread activity
*/
public static final IntegerProperty IS_UNREAD = new IntegerProperty(
TABLE, "isUnread");
/** Whether tag is a folder */
/**
* Whether tag is a folder
*/
public static final IntegerProperty IS_FOLDER = new IntegerProperty(
TABLE, "isFolder", Property.PROP_FLAG_BOOLEAN);
/** Task count */
/**
* Task count
*/
public static final IntegerProperty TASK_COUNT = new IntegerProperty(
TABLE, "taskCount");
/** Tag Desription */
/**
* Tag Desription
*/
public static final StringProperty TAG_DESCRIPTION = new StringProperty(
TABLE, "tagDescription");
/** Pushed at date */
/**
* Pushed at date
*/
public static final LongProperty PUSHED_AT = new LongProperty(
TABLE, PUSHED_AT_PROPERTY_NAME, Property.PROP_FLAG_DATE);
/** Tasks pushed at date */
/**
* Tasks pushed at date
*/
public static final LongProperty TASKS_PUSHED_AT = new LongProperty(
TABLE, "tasks_pushed_at", Property.PROP_FLAG_DATE);
/** Metadata pushed at date */
/**
* Metadata pushed at date
*/
public static final LongProperty METADATA_PUSHED_AT = new LongProperty(
TABLE, "metadata_pushed_at", Property.PROP_FLAG_DATE);
/** User activities pushed at date */
/**
* User activities pushed at date
*/
public static final LongProperty USER_ACTIVITIES_PUSHED_AT = new LongProperty(
TABLE, "activities_pushed_at", Property.PROP_FLAG_DATE);
/** Tag ordering */
/**
* Tag ordering
*/
@Deprecated
public static final StringProperty TAG_ORDERING = new StringProperty(
TABLE, "tagOrdering");
/** History fetch date */
/**
* History fetch date
*/
public static final LongProperty HISTORY_FETCH_DATE = new LongProperty(
TABLE, "historyFetch");
/** History has more*/
/**
* History has more
*/
public static final IntegerProperty HISTORY_HAS_MORE = new IntegerProperty(
TABLE, "historyHasMore");
/** Last autosync */
/**
* Last autosync
*/
public static final LongProperty LAST_AUTOSYNC = new LongProperty(
TABLE, "lastAutosync");
/** List of all properties for this model */
/**
* List of all properties for this model
*/
public static final Property<?>[] PROPERTIES = generateProperties(TagData.class);
// --- flags
/** whether user should not be notified of tag activity */
/**
* whether user should not be notified of tag activity
*/
public static final int FLAG_SILENT = 1 << 1;
/** whether tag is emergent */
/**
* whether tag is emergent
*/
@Deprecated
public static final int FLAG_EMERGENT = 1 << 2;
/** whether tag represents a featured list */
/**
* whether tag represents a featured list
*/
public static final int FLAG_FEATURED = 1 << 3;
// --- defaults
/** Default values container */
/**
* Default values container
*/
private static final ContentValues defaultValues = new ContentValues();
static {
@ -244,15 +317,19 @@ public final class TagData extends RemoteModel {
// --- data access methods
/** Checks whether task is done. Requires COMPLETION_DATE */
/**
* Checks whether task is done. Requires COMPLETION_DATE
*/
public boolean isCompleted() {
return getValue(COMPLETION_DATE) > 0;
}
/** Checks whether task is deleted. Will return false if DELETION_DATE not read */
/**
* Checks whether task is deleted. Will return false if DELETION_DATE not read
*/
public boolean isDeleted() {
// assume false if we didn't load deletion date
if(!containsValue(DELETION_DATE))
if (!containsValue(DELETION_DATE))
return false;
else
return getValue(DELETION_DATE) > 0;

@ -16,56 +16,82 @@ public class TagMetadata extends AbstractModel {
public static final Table TABLE = new Table("tag_metadata", TagMetadata.class);
/** changes to metadata (specifically members) are recorded in the tag outstanding table */
/**
* changes to metadata (specifically members) are recorded in the tag outstanding table
*/
public static final Class<? extends OutstandingEntry<TagData>> OUTSTANDING_MODEL = TagOutstanding.class;
/** content uri for this model */
/**
* content uri for this model
*/
public static final Uri CONTENT_URI = Uri.parse("content://" + AstridApiConstants.API_PACKAGE + "/" +
TABLE.name);
// --- properties
/** ID */
/**
* ID
*/
public static final LongProperty ID = new LongProperty(
TABLE, ID_PROPERTY_NAME);
/** Tag local id */
/**
* Tag local id
*/
public static final LongProperty TAG_ID = new LongProperty(
TABLE, "tag_id");
/** Tag uuid */
/**
* Tag uuid
*/
public static final StringProperty TAG_UUID = new StringProperty(
TABLE, "tag_uuid");
/** Metadata Key */
/**
* Metadata Key
*/
public static final StringProperty KEY = new StringProperty(
TABLE, "key");
/** Metadata Text Value Column 1 */
/**
* Metadata Text Value Column 1
*/
public static final StringProperty VALUE1 = new StringProperty(
TABLE, "value");
/** Metadata Text Value Column 2 */
/**
* Metadata Text Value Column 2
*/
public static final StringProperty VALUE2 = new StringProperty(
TABLE, "value2");
/** Metadata Text Value Column 3 */
/**
* Metadata Text Value Column 3
*/
public static final StringProperty VALUE3 = new StringProperty(
TABLE, "value3");
/** Unixtime Metadata was created */
/**
* Unixtime Metadata was created
*/
public static final LongProperty CREATION_DATE = new LongProperty(
TABLE, "created");
/** Unixtime metadata was deleted/tombstoned */
/**
* Unixtime metadata was deleted/tombstoned
*/
public static final LongProperty DELETION_DATE = new LongProperty(
TABLE, "deleted");
/** List of all properties for this model */
/**
* List of all properties for this model
*/
public static final Property<?>[] PROPERTIES = generateProperties(TagMetadata.class);
/** Default values container */
/**
* Default values container
*/
private static final ContentValues defaultValues = new ContentValues();
static {

@ -11,12 +11,16 @@ import com.todoroo.andlib.data.Table;
@SuppressWarnings("nls")
public class TagOutstanding extends OutstandingEntry<TagData> {
/** table for this model */
/**
* table for this model
*/
public static final Table TABLE = new Table("tags_outstanding", TagOutstanding.class);
// --- properties
/** ID */
/**
* ID
*/
public static final LongProperty ID = new LongProperty(
TABLE, ID_PROPERTY_NAME);
@ -40,7 +44,9 @@ public class TagOutstanding extends OutstandingEntry<TagData> {
defaultValues.put(VALUE_STRING.name, "");
}
/** List of all properties for this model */
/**
* List of all properties for this model
*/
public static final Property<?>[] PROPERTIES = generateProperties(TagOutstanding.class);
@Override

@ -6,8 +6,6 @@
package com.todoroo.astrid.data;
import java.util.Date;
import android.content.ContentValues;
import android.content.res.Resources;
import android.net.Uri;
@ -23,72 +21,101 @@ import com.todoroo.andlib.utility.DateUtilities;
import com.todoroo.astrid.api.AstridApiConstants;
import com.todoroo.astrid.api.R;
import java.util.Date;
/**
* Data Model which represents a task users need to accomplish.
*
* @author Tim Su <tim@todoroo.com>
*
*/
@SuppressWarnings("nls")
public final class Task extends RemoteModel {
// --- table and uri
/** table for this model */
/**
* table for this model
*/
public static final Table TABLE = new Table("tasks", Task.class);
/** model class for entries in the outstanding table */
/**
* model class for entries in the outstanding table
*/
public static final Class<? extends OutstandingEntry<Task>> OUTSTANDING_MODEL = TaskOutstanding.class;
/** content uri for this model */
/**
* content uri for this model
*/
public static final Uri CONTENT_URI = Uri.parse("content://" + AstridApiConstants.API_PACKAGE + "/" +
TABLE.name);
// --- properties
/** ID */
/**
* ID
*/
public static final LongProperty ID = new LongProperty(
TABLE, ID_PROPERTY_NAME);
/** Name of Task */
/**
* Name of Task
*/
public static final StringProperty TITLE = new StringProperty(
TABLE, "title");
/** Importance of Task (see importance flags) */
/**
* Importance of Task (see importance flags)
*/
public static final IntegerProperty IMPORTANCE = new IntegerProperty(
TABLE, "importance");
/** Unixtime Task is due, 0 if not set */
/**
* Unixtime Task is due, 0 if not set
*/
public static final LongProperty DUE_DATE = new LongProperty(
TABLE, "dueDate", Property.PROP_FLAG_DATE);
/** Unixtime Task should be hidden until, 0 if not set */
/**
* Unixtime Task should be hidden until, 0 if not set
*/
public static final LongProperty HIDE_UNTIL = new LongProperty(
TABLE, "hideUntil", Property.PROP_FLAG_DATE);
/** Unixtime Task was created */
/**
* Unixtime Task was created
*/
public static final LongProperty CREATION_DATE = new LongProperty(
TABLE, "created", Property.PROP_FLAG_DATE);
/** Unixtime Task was last touched */
/**
* Unixtime Task was last touched
*/
public static final LongProperty MODIFICATION_DATE = new LongProperty(
TABLE, "modified", Property.PROP_FLAG_DATE);
/** Unixtime Task was completed. 0 means active */
/**
* Unixtime Task was completed. 0 means active
*/
public static final LongProperty COMPLETION_DATE = new LongProperty(
TABLE, "completed", Property.PROP_FLAG_DATE);
/** Unixtime Task was deleted. 0 means not deleted */
/**
* Unixtime Task was deleted. 0 means not deleted
*/
public static final LongProperty DELETION_DATE = new LongProperty(
TABLE, "deleted", Property.PROP_FLAG_DATE);
/** Cached Details Column - built from add-on detail exposers. A null
/**
* Cached Details Column - built from add-on detail exposers. A null
* value means there is no value in the cache and it needs to be
* refreshed */
* refreshed
*/
public static final StringProperty DETAILS = new StringProperty(
TABLE, "details");
/** Date details were last updated */
/**
* Date details were last updated
*/
public static final LongProperty DETAILS_DATE = new LongProperty(
TABLE, "detailsDate", Property.PROP_FLAG_DATE);
@ -119,24 +146,34 @@ public final class Task extends RemoteModel {
public static final IntegerProperty POSTPONE_COUNT = new IntegerProperty(
TABLE, "postponeCount");
/** Flags for when to send reminders */
/**
* Flags for when to send reminders
*/
public static final IntegerProperty REMINDER_FLAGS = new IntegerProperty(
TABLE, "notificationFlags");
/** Reminder period, in milliseconds. 0 means disabled */
/**
* Reminder period, in milliseconds. 0 means disabled
*/
public static final LongProperty REMINDER_PERIOD = new LongProperty(
TABLE, "notifications", Property.PROP_FLAG_DATE);
/** Unixtime the last reminder was triggered */
/**
* Unixtime the last reminder was triggered
*/
public static final LongProperty REMINDER_LAST = new LongProperty(
TABLE, "lastNotified", Property.PROP_FLAG_DATE);
/** What kind of reminder the last reminder was: private task,
* social with no faces, social with faces */
/**
* What kind of reminder the last reminder was: private task,
* social with no faces, social with faces
*/
public static final StringProperty SOCIAL_REMINDER = new StringProperty(
TABLE, "socialReminder");
/** Unixtime snooze is set (0 -> no snooze) */
/**
* Unixtime snooze is set (0 -> no snooze)
*/
public static final LongProperty REMINDER_SNOOZE = new LongProperty(
TABLE, "snoozeTime", Property.PROP_FLAG_DATE);
@ -154,73 +191,113 @@ public final class Task extends RemoteModel {
// --- for astrid.com
/** Remote id */
/**
* Remote id
*/
public static final StringProperty UUID = new StringProperty(
TABLE, UUID_PROPERTY_NAME, Property.PROP_FLAG_NULLABLE);
/** Assigned user id */
/**
* Assigned user id
*/
public static final StringProperty USER_ID = new StringProperty(
TABLE, USER_ID_PROPERTY_NAME, Property.PROP_FLAG_USER_ID);
/** User Object (JSON) */
@Deprecated public static final StringProperty USER = new StringProperty(
/**
* User Object (JSON)
*/
@Deprecated
public static final StringProperty USER = new StringProperty(
TABLE, USER_JSON_PROPERTY_NAME);
/** Creator user id */
/**
* Creator user id
*/
public static final StringProperty CREATOR_ID = new StringProperty(
TABLE, "creatorId", Property.PROP_FLAG_USER_ID);
/** Last Sync date */
/**
* Last Sync date
*/
@Deprecated
public static final LongProperty LAST_SYNC = new LongProperty(
TABLE, "lastSync", Property.PROP_FLAG_DATE);
/** Pushed at date */
/**
* Pushed at date
*/
public static final LongProperty PUSHED_AT = new LongProperty(
TABLE, PUSHED_AT_PROPERTY_NAME, Property.PROP_FLAG_DATE);
/** Attachments pushed at date */
/**
* Attachments pushed at date
*/
public static final LongProperty ATTACHMENTS_PUSHED_AT = new LongProperty(
TABLE, "attachments_pushed_at", Property.PROP_FLAG_DATE);
/** User activities pushed at date */
/**
* User activities pushed at date
*/
public static final LongProperty USER_ACTIVITIES_PUSHED_AT = new LongProperty(
TABLE, "activities_pushed_at", Property.PROP_FLAG_DATE);
/** History fetch time */
/**
* History fetch time
*/
public static final LongProperty HISTORY_FETCH_DATE = new LongProperty(
TABLE, "historyFetch");
/** History has more*/
/**
* History has more
*/
public static final IntegerProperty HISTORY_HAS_MORE = new IntegerProperty(
TABLE, "historyHasMore");
/** List of all properties for this model */
/**
* List of all properties for this model
*/
public static final Property<?>[] PROPERTIES = generateProperties(Task.class);
// --- flags
/** whether repeat occurs relative to completion date instead of due date */
@Deprecated public static final int FLAG_REPEAT_AFTER_COMPLETION = 1 << 1;
/**
* whether repeat occurs relative to completion date instead of due date
*/
@Deprecated
public static final int FLAG_REPEAT_AFTER_COMPLETION = 1 << 1;
/** whether task is read-only */
@Deprecated public static final int FLAG_IS_READONLY = 1 << 2;
/**
* whether task is read-only
*/
@Deprecated
public static final int FLAG_IS_READONLY = 1 << 2;
/** whether a task is public */
@Deprecated public static final int FLAG_PUBLIC = 1 << 3;
/**
* whether a task is public
*/
@Deprecated
public static final int FLAG_PUBLIC = 1 << 3;
// --- user id special values
/** user id = doesn't exist/ignore it. For filtering in tags */
/**
* user id = doesn't exist/ignore it. For filtering in tags
*/
public static final String USER_ID_IGNORE = "-3";
/** user id = read user email value */
/**
* user id = read user email value
*/
public static final String USER_ID_EMAIL = "-2";
/** user id = unassigned */
/**
* user id = unassigned
*/
public static final String USER_ID_UNASSIGNED = "-1";
/** user id = myself */
/**
* user id = myself
*/
public static final String USER_ID_SELF = "0";
public static boolean isRealUserId(String userId) {
@ -240,16 +317,24 @@ public final class Task extends RemoteModel {
// --- notification flags
/** whether to send a reminder at deadline */
/**
* whether to send a reminder at deadline
*/
public static final int NOTIFY_AT_DEADLINE = 1 << 1;
/** whether to send reminders while task is overdue */
/**
* whether to send reminders while task is overdue
*/
public static final int NOTIFY_AFTER_DEADLINE = 1 << 2;
/** reminder mode non-stop */
/**
* reminder mode non-stop
*/
public static final int NOTIFY_MODE_NONSTOP = 1 << 3;
/** reminder mode five times (exclusive with non-stop) */
/**
* reminder mode five times (exclusive with non-stop)
*/
public static final int NOTIFY_MODE_FIVE = 1 << 4;
// --- importance settings (note: importance > 3 are supported via plugin)
@ -270,7 +355,7 @@ public final class Task extends RemoteModel {
* @return colors that correspond to importance values
*/
public static int[] getImportanceColors(Resources r) {
return new int[] {
return new int[]{
r.getColor(R.color.importance_1),
r.getColor(R.color.importance_2),
r.getColor(R.color.importance_3),
@ -285,7 +370,9 @@ public final class Task extends RemoteModel {
// --- defaults
/** Default values container */
/**
* Default values container
*/
private static final ContentValues defaultValues = new ContentValues();
static {
@ -310,7 +397,7 @@ public final class Task extends RemoteModel {
defaultValues.put(NOTES.name, "");
defaultValues.put(FLAGS.name, 0);
defaultValues.put(TIMER_START.name, 0);
defaultValues.put(DETAILS.name, (String)null);
defaultValues.put(DETAILS.name, (String) null);
defaultValues.put(DETAILS_DATE.name, 0);
defaultValues.put(IS_PUBLIC.name, 0);
defaultValues.put(IS_READONLY.name, 0);
@ -370,33 +457,43 @@ public final class Task extends RemoteModel {
// --- data access methods
/** Checks whether task is done. Requires COMPLETION_DATE */
/**
* Checks whether task is done. Requires COMPLETION_DATE
*/
public boolean isCompleted() {
return getValue(COMPLETION_DATE) > 0;
}
/** Checks whether task is deleted. Will return false if DELETION_DATE not read */
/**
* Checks whether task is deleted. Will return false if DELETION_DATE not read
*/
public boolean isDeleted() {
// assume false if we didn't load deletion date
if(!containsValue(DELETION_DATE))
if (!containsValue(DELETION_DATE))
return false;
else
return getValue(DELETION_DATE) > 0;
}
/** Checks whether task is hidden. Requires HIDDEN_UNTIL */
/**
* Checks whether task is hidden. Requires HIDDEN_UNTIL
*/
public boolean isHidden() {
return getValue(HIDE_UNTIL) > DateUtilities.now();
}
/** Checks whether task is done. Requires DUE_DATE */
/**
* Checks whether task is done. Requires DUE_DATE
*/
public boolean hasDueDate() {
return getValue(DUE_DATE) > 0;
}
// --- due and hide until date management
/** urgency array index -> significance */
/**
* urgency array index -> significance
*/
public static final int URGENCY_NONE = 0;
public static final int URGENCY_TODAY = 1;
public static final int URGENCY_TOMORROW = 2;
@ -407,7 +504,9 @@ public final class Task extends RemoteModel {
public static final int URGENCY_SPECIFIC_DAY = 7;
public static final int URGENCY_SPECIFIC_DAY_TIME = 8;
/** hide until array index -> significance */
/**
* hide until array index -> significance
*/
public static final int HIDE_UNTIL_NONE = 0;
public static final int HIDE_UNTIL_DUE = 1;
public static final int HIDE_UNTIL_DAY_BEFORE = 2;
@ -420,49 +519,47 @@ public final class Task extends RemoteModel {
* Creates due date for this task. If this due date has no time associated,
* we move it to the last millisecond of the day.
*
* @param setting
* one of the URGENCY_* constants
* @param customDate
* if specific day or day & time is set, this value
* @param setting one of the URGENCY_* constants
* @param customDate if specific day or day & time is set, this value
*/
public static long createDueDate(int setting, long customDate) {
long date;
switch(setting) {
case URGENCY_NONE:
date = 0;
break;
case URGENCY_TODAY:
date = DateUtilities.now();
break;
case URGENCY_TOMORROW:
date = DateUtilities.now() + DateUtilities.ONE_DAY;
break;
case URGENCY_DAY_AFTER:
date = DateUtilities.now() + 2 * DateUtilities.ONE_DAY;
break;
case URGENCY_NEXT_WEEK:
date = DateUtilities.now() + DateUtilities.ONE_WEEK;
break;
case URGENCY_IN_TWO_WEEKS:
date = DateUtilities.now() + 2 * DateUtilities.ONE_WEEK;
break;
case URGENCY_NEXT_MONTH:
date = DateUtilities.oneMonthFromNow();
break;
case URGENCY_SPECIFIC_DAY:
case URGENCY_SPECIFIC_DAY_TIME:
date = customDate;
break;
default:
throw new IllegalArgumentException("Unknown setting " + setting);
switch (setting) {
case URGENCY_NONE:
date = 0;
break;
case URGENCY_TODAY:
date = DateUtilities.now();
break;
case URGENCY_TOMORROW:
date = DateUtilities.now() + DateUtilities.ONE_DAY;
break;
case URGENCY_DAY_AFTER:
date = DateUtilities.now() + 2 * DateUtilities.ONE_DAY;
break;
case URGENCY_NEXT_WEEK:
date = DateUtilities.now() + DateUtilities.ONE_WEEK;
break;
case URGENCY_IN_TWO_WEEKS:
date = DateUtilities.now() + 2 * DateUtilities.ONE_WEEK;
break;
case URGENCY_NEXT_MONTH:
date = DateUtilities.oneMonthFromNow();
break;
case URGENCY_SPECIFIC_DAY:
case URGENCY_SPECIFIC_DAY_TIME:
date = customDate;
break;
default:
throw new IllegalArgumentException("Unknown setting " + setting);
}
if(date <= 0)
if (date <= 0)
return date;
Date dueDate = new Date(date / 1000L * 1000L); // get rid of millis
if(setting != URGENCY_SPECIFIC_DAY_TIME) {
if (setting != URGENCY_SPECIFIC_DAY_TIME) {
dueDate.setHours(12);
dueDate.setMinutes(0);
dueDate.setSeconds(0); // Seconds == 0 means no due time
@ -475,41 +572,39 @@ public final class Task extends RemoteModel {
/**
* Create hide until for this task.
*
* @param setting
* one of the HIDE_UNTIL_* constants
* @param customDate
* if specific day is set, this value
* @param setting one of the HIDE_UNTIL_* constants
* @param customDate if specific day is set, this value
* @return
*/
public long createHideUntil(int setting, long customDate) {
long date;
switch(setting) {
case HIDE_UNTIL_NONE:
return 0;
case HIDE_UNTIL_DUE:
case HIDE_UNTIL_DUE_TIME:
date = getValue(DUE_DATE);
break;
case HIDE_UNTIL_DAY_BEFORE:
date = getValue(DUE_DATE) - DateUtilities.ONE_DAY;
break;
case HIDE_UNTIL_WEEK_BEFORE:
date = getValue(DUE_DATE) - DateUtilities.ONE_WEEK;
break;
case HIDE_UNTIL_SPECIFIC_DAY:
case HIDE_UNTIL_SPECIFIC_DAY_TIME:
date = customDate;
break;
default:
throw new IllegalArgumentException("Unknown setting " + setting);
switch (setting) {
case HIDE_UNTIL_NONE:
return 0;
case HIDE_UNTIL_DUE:
case HIDE_UNTIL_DUE_TIME:
date = getValue(DUE_DATE);
break;
case HIDE_UNTIL_DAY_BEFORE:
date = getValue(DUE_DATE) - DateUtilities.ONE_DAY;
break;
case HIDE_UNTIL_WEEK_BEFORE:
date = getValue(DUE_DATE) - DateUtilities.ONE_WEEK;
break;
case HIDE_UNTIL_SPECIFIC_DAY:
case HIDE_UNTIL_SPECIFIC_DAY_TIME:
date = customDate;
break;
default:
throw new IllegalArgumentException("Unknown setting " + setting);
}
if(date <= 0)
if (date <= 0)
return date;
Date hideUntil = new Date(date / 1000L * 1000L); // get rid of millis
if(setting != HIDE_UNTIL_SPECIFIC_DAY_TIME && setting != HIDE_UNTIL_DUE_TIME) {
if (setting != HIDE_UNTIL_SPECIFIC_DAY_TIME && setting != HIDE_UNTIL_DUE_TIME) {
hideUntil.setHours(0);
hideUntil.setMinutes(0);
hideUntil.setSeconds(0);
@ -523,7 +618,7 @@ public final class Task extends RemoteModel {
* Checks whether this due date has a due time or only a date
*/
public boolean hasDueTime() {
if(!hasDueDate())
if (!hasDueDate())
return false;
return hasDueTime(getValue(Task.DUE_DATE));
}
@ -545,7 +640,7 @@ public final class Task extends RemoteModel {
}
public String sanitizedRecurrence() {
return getValue(Task.RECURRENCE).replaceAll("BYDAY=;","").replaceAll(";?FROM=[^;]*", ""); //$NON-NLS-1$//$NON-NLS-2$
return getValue(Task.RECURRENCE).replaceAll("BYDAY=;", "").replaceAll(";?FROM=[^;]*", ""); //$NON-NLS-1$//$NON-NLS-2$
}
/**

@ -22,7 +22,6 @@ import com.todoroo.astrid.api.PermaSql;
* want to use the {@link MetadataApiDao} object.
*
* @author Tim Su <tim@todoroo.com>
*
*/
public class TaskApiDao extends ContentResolverDao<Task> {
@ -35,66 +34,90 @@ public class TaskApiDao extends ContentResolverDao<Task> {
*/
public static class TaskCriteria {
/** @return tasks by id */
/**
* @return tasks by id
*/
public static Criterion byId(long id) {
return Task.ID.eq(id);
}
/** @return tasks that were deleted */
/**
* @return tasks that were deleted
*/
public static Criterion isDeleted() {
return Task.DELETION_DATE.neq(0);
}
/** @return tasks that were not deleted */
/**
* @return tasks that were not deleted
*/
public static Criterion notDeleted() {
return Task.DELETION_DATE.eq(0);
}
/** @return tasks that have not yet been completed or deleted */
/**
* @return tasks that have not yet been completed or deleted
*/
public static Criterion activeAndVisible() {
return Criterion.and(Task.COMPLETION_DATE.eq(0),
Task.DELETION_DATE.eq(0),
Task.HIDE_UNTIL.lt(Functions.now()));
}
/** @return tasks that have not yet been completed or deleted */
/**
* @return tasks that have not yet been completed or deleted
*/
public static Criterion isActive() {
return Criterion.and(Task.COMPLETION_DATE.eq(0),
Task.DELETION_DATE.eq(0));
}
/** @return tasks that are not hidden at current time */
/**
* @return tasks that are not hidden at current time
*/
public static Criterion isVisible() {
return Task.HIDE_UNTIL.lt(Functions.now());
}
/** @return tasks that have a due date */
/**
* @return tasks that have a due date
*/
public static Criterion hasDeadlines() {
return Task.DUE_DATE.neq(0);
}
/** @return tasks that are due before a certain unixtime */
/**
* @return tasks that are due before a certain unixtime
*/
public static Criterion dueBeforeNow() {
return Criterion.and(Task.DUE_DATE.gt(0), Task.DUE_DATE.lt(Functions.now()));
}
/** @return tasks that are due after a certain unixtime */
/**
* @return tasks that are due after a certain unixtime
*/
public static Criterion dueAfterNow() {
return Task.DUE_DATE.gt(Functions.now());
}
/** @return tasks completed before a given unixtime */
/**
* @return tasks completed before a given unixtime
*/
public static Criterion completed() {
return Criterion.and(Task.COMPLETION_DATE.gt(0), Task.COMPLETION_DATE.lt(Functions.now()));
}
/** @return tasks that have a blank or null title */
/**
* @return tasks that have a blank or null title
*/
@SuppressWarnings("nls")
public static Criterion hasNoTitle() {
return Criterion.or(Task.TITLE.isNull(), Task.TITLE.eq(""));
}
/** @return tasks that have not yet been completed or deleted */
/**
* @return tasks that have not yet been completed or deleted
*/
public static Criterion activeVisibleMine() {
return Criterion.and(Task.COMPLETION_DATE.eq(0),
Task.DELETION_DATE.eq(0),
@ -103,16 +126,19 @@ public class TaskApiDao extends ContentResolverDao<Task> {
Task.USER_ID.eq(0));
}
/** Check if a given task belongs to someone else & is read-only */
/**
* Check if a given task belongs to someone else & is read-only
*/
public static Criterion ownedByMe() {
return Criterion.and(Task.IS_READONLY.eq(0),
Task.USER_ID.eq(0));
return Criterion.and(Task.IS_READONLY.eq(0),
Task.USER_ID.eq(0));
}
}
/**
* Count tasks matching criterion
*
* @param criterion
* @return # of tasks matching
*/
@ -127,6 +153,7 @@ public class TaskApiDao extends ContentResolverDao<Task> {
/**
* Count tasks matching query tepmlate
*
* @param queryTemplate
* @return # of tasks matching
*/
@ -157,24 +184,26 @@ public class TaskApiDao extends ContentResolverDao<Task> {
return false;
}
/** @return true if task change shouldn't be broadcast */
/**
* @return true if task change shouldn't be broadcast
*/
public static boolean insignificantChange(ContentValues values) {
if(values == null || values.size() == 0)
if (values == null || values.size() == 0)
return true;
if(values.containsKey(Task.DETAILS_DATE.name) &&
if (values.containsKey(Task.DETAILS_DATE.name) &&
values.size() <= 3)
return true;
if(values.containsKey(Task.REMINDER_LAST.name) &&
if (values.containsKey(Task.REMINDER_LAST.name) &&
values.size() <= 2)
return true;
if(values.containsKey(Task.REMINDER_SNOOZE.name) &&
if (values.containsKey(Task.REMINDER_SNOOZE.name) &&
values.size() <= 2)
return true;
if(values.containsKey(Task.TIMER_START.name) &&
if (values.containsKey(Task.TIMER_START.name) &&
values.size() <= 2)
return true;

@ -23,79 +23,112 @@ import com.todoroo.astrid.api.AstridApiConstants;
* Data Model which represents a user.
*
* @author Tim Su <tim@todoroo.com>
*
*/
@SuppressWarnings("nls")
public final class TaskAttachment extends RemoteModel {
// --- table and uri
/** table for this model */
/**
* table for this model
*/
public static final Table TABLE = new Table("task_attachments", TaskAttachment.class);
/** model class for entries in the outstanding table */
/**
* model class for entries in the outstanding table
*/
public static final Class<? extends OutstandingEntry<TaskAttachment>> OUTSTANDING_MODEL = TaskAttachmentOutstanding.class;
/** content uri for this model */
/**
* content uri for this model
*/
public static final Uri CONTENT_URI = Uri.parse("content://" + AstridApiConstants.API_PACKAGE + "/" +
TABLE.name);
// --- properties
/** ID */
/**
* ID
*/
public static final LongProperty ID = new LongProperty(
TABLE, ID_PROPERTY_NAME);
/** Remote id */
/**
* Remote id
*/
public static final StringProperty UUID = new StringProperty(
TABLE, UUID_PROPERTY_NAME);
/** Pushed at date */
/**
* Pushed at date
*/
public static final LongProperty PUSHED_AT = new LongProperty(
TABLE, PUSHED_AT_PROPERTY_NAME);
/** Creator user id */
/**
* Creator user id
*/
public static final StringProperty USER_UUID = new StringProperty(
TABLE, "user_id");
/** Task uuid */
/**
* Task uuid
*/
public static final StringProperty TASK_UUID = new StringProperty(
TABLE, "task_id");
/** File name */
/**
* File name
*/
public static final StringProperty NAME = new StringProperty(
TABLE, "name");
/** File url (for downloading) */
/**
* File url (for downloading)
*/
public static final StringProperty URL = new StringProperty(
TABLE, "url");
/** File path (on local storage) */
/**
* File path (on local storage)
*/
public static final StringProperty FILE_PATH = new StringProperty(
TABLE, "path");
/** File size (in bytes) */
/**
* File size (in bytes)
*/
public static final IntegerProperty SIZE = new IntegerProperty(
TABLE, "size");
/** File mimetype */
/**
* File mimetype
*/
public static final StringProperty CONTENT_TYPE = new StringProperty(
TABLE, "content_type");
/** Attachment creation date */
/**
* Attachment creation date
*/
public static final LongProperty CREATED_AT = new LongProperty(
TABLE, "created_at", Property.PROP_FLAG_DATE);
/** Attachment deletion date */
/**
* Attachment deletion date
*/
public static final LongProperty DELETED_AT = new LongProperty(
TABLE, "deleted_at", Property.PROP_FLAG_DATE);
/** List of all properties for this model */
/**
* List of all properties for this model
*/
public static final Property<?>[] PROPERTIES = generateProperties(TaskAttachment.class);
// --- defaults
/** Default values container */
/**
* Default values container
*/
private static final ContentValues defaultValues = new ContentValues();
static {
@ -118,13 +151,19 @@ public final class TaskAttachment extends RemoteModel {
}
// -- Constants
/** default directory for files on external storage */
/**
* default directory for files on external storage
*/
public static final String FILES_DIRECTORY_DEFAULT = "attachments"; //$NON-NLS-1$
/** preference key for some other download directory */
/**
* preference key for some other download directory
*/
public static final String FILES_DIRECTORY_PREF = "custom_files_dir"; //$NON-NLS-1$
/** Constants for file types */
/**
* Constants for file types
*/
public static final String FILE_TYPE_AUDIO = "audio/"; //$NON-NLS-1$
public static final String FILE_TYPE_IMAGE = "image/"; //$NON-NLS-1$
public static final String FILE_TYPE_PDF = "application/pdf"; //$NON-NLS-1$
@ -137,9 +176,9 @@ public final class TaskAttachment extends RemoteModel {
public static final String FILE_TYPE_XLSX = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"; //$NON-NLS-1$
public static final String[] MS_FILETYPES = {
FILE_TYPE_DOC, FILE_TYPE_DOCX,
FILE_TYPE_XLS, FILE_TYPE_XLSX,
FILE_TYPE_PPT, FILE_TYPE_PPTX,
FILE_TYPE_DOC, FILE_TYPE_DOCX,
FILE_TYPE_XLS, FILE_TYPE_XLSX,
FILE_TYPE_PPT, FILE_TYPE_PPTX,
};
public static final String FILE_TYPE_OTHER = "application/octet-stream"; //$NON-NLS-1$

@ -11,12 +11,16 @@ import com.todoroo.andlib.data.Table;
@SuppressWarnings("nls")
public class TaskAttachmentOutstanding extends OutstandingEntry<TaskAttachment> {
/** table for this model */
/**
* table for this model
*/
public static final Table TABLE = new Table("task_attachment_outstanding", TaskAttachmentOutstanding.class);
// --- properties
/** ID */
/**
* ID
*/
public static final LongProperty ID = new LongProperty(
TABLE, ID_PROPERTY_NAME);
@ -40,7 +44,9 @@ public class TaskAttachmentOutstanding extends OutstandingEntry<TaskAttachment>
defaultValues.put(VALUE_STRING.name, "");
}
/** List of all properties for this model */
/**
* List of all properties for this model
*/
public static final Property<?>[] PROPERTIES = generateProperties(TaskAttachmentOutstanding.class);
@Override

@ -23,68 +23,94 @@ import com.todoroo.astrid.api.AstridApiConstants;
* Data Model which represents a user.
*
* @author Tim Su <tim@todoroo.com>
*
*/
@SuppressWarnings("nls")
public final class TaskListMetadata extends RemoteModel {
// --- table and uri
/** table for this model */
/**
* table for this model
*/
public static final Table TABLE = new Table("task_list_metadata", TaskListMetadata.class);
/** model class for entries in the outstanding table */
/**
* model class for entries in the outstanding table
*/
public static final Class<? extends OutstandingEntry<TaskListMetadata>> OUTSTANDING_MODEL = TaskListMetadataOutstanding.class;
/** content uri for this model */
/**
* content uri for this model
*/
public static final Uri CONTENT_URI = Uri.parse("content://" + AstridApiConstants.API_PACKAGE + "/" +
TABLE.name);
// --- properties
/** ID */
/**
* ID
*/
public static final LongProperty ID = new LongProperty(
TABLE, ID_PROPERTY_NAME);
/** Remote id */
/**
* Remote id
*/
public static final StringProperty UUID = new StringProperty(
TABLE, UUID_PROPERTY_NAME);
/** Pushed at date */
/**
* Pushed at date
*/
public static final LongProperty PUSHED_AT = new LongProperty(
TABLE, PUSHED_AT_PROPERTY_NAME);
/** Tag UUID */
/**
* Tag UUID
*/
public static final StringProperty TAG_UUID = new StringProperty(
TABLE, "tag_uuid");
/** Filter id (one of below) */
/**
* Filter id (one of below)
*/
public static final StringProperty FILTER = new StringProperty(
TABLE, "filter");
/** Tree of task ids (serialized to json array) */
/**
* Tree of task ids (serialized to json array)
*/
public static final StringProperty TASK_IDS = new StringProperty(
TABLE, "task_ids", Property.PROP_FLAG_JSON);
/** Sort setting (one of below) */
/**
* Sort setting (one of below)
*/
public static final StringProperty SORT = new StringProperty(
TABLE, "sort");
/** Settings hash */
/**
* Settings hash
*/
public static final StringProperty SETTINGS = new StringProperty(
TABLE, "settings", Property.PROP_FLAG_JSON);
/** Array of child tags (for folders) */
/**
* Array of child tags (for folders)
*/
public static final StringProperty CHILD_TAG_IDS = new StringProperty(
TABLE, "child_tags", Property.PROP_FLAG_JSON);
/** If the folder is collapsed */
/**
* If the folder is collapsed
*/
public static final IntegerProperty IS_COLLAPSED = new IntegerProperty(
TABLE, "is_collapsed");
/** List of all properties for this model */
/**
* List of all properties for this model
*/
public static final Property<?>[] PROPERTIES = generateProperties(TaskListMetadata.class);
public static final String FILTER_ID_ALL = "all";
@ -102,7 +128,9 @@ public final class TaskListMetadata extends RemoteModel {
// --- defaults
/** Default values container */
/**
* Default values container
*/
private static final ContentValues defaultValues = new ContentValues();
static {

@ -11,12 +11,16 @@ import com.todoroo.andlib.data.Table;
@SuppressWarnings("nls")
public class TaskListMetadataOutstanding extends OutstandingEntry<TaskListMetadata> {
/** table for this model */
/**
* table for this model
*/
public static final Table TABLE = new Table("task_list_metadata_outstanding", TaskListMetadataOutstanding.class);
// --- properties
/** ID */
/**
* ID
*/
public static final LongProperty ID = new LongProperty(
TABLE, ID_PROPERTY_NAME);
@ -40,7 +44,9 @@ public class TaskListMetadataOutstanding extends OutstandingEntry<TaskListMetada
defaultValues.put(VALUE_STRING.name, "");
}
/** List of all properties for this model */
/**
* List of all properties for this model
*/
public static final Property<?>[] PROPERTIES = generateProperties(TaskListMetadataOutstanding.class);
@Override

@ -11,12 +11,16 @@ import com.todoroo.andlib.data.Table;
@SuppressWarnings("nls")
public class TaskOutstanding extends OutstandingEntry<Task> {
/** table for this model */
/**
* table for this model
*/
public static final Table TABLE = new Table("tasks_outstanding", TaskOutstanding.class);
// --- properties
/** ID */
/**
* ID
*/
public static final LongProperty ID = new LongProperty(
TABLE, ID_PROPERTY_NAME);
@ -40,7 +44,9 @@ public class TaskOutstanding extends OutstandingEntry<Task> {
defaultValues.put(VALUE_STRING.name, "");
}
/** List of all properties for this model */
/**
* List of all properties for this model
*/
public static final Property<?>[] PROPERTIES = generateProperties(TaskOutstanding.class);
@Override

@ -17,12 +17,10 @@ import com.todoroo.andlib.data.TodorooCursor;
import com.todoroo.astrid.api.AstridApiConstants;
/**
* Data Model which represents an update (e.g. a comment or data update event)
*
* @author Tim Su <tim@todoroo.com>
*
*/
@SuppressWarnings("nls")
@Deprecated
@ -30,80 +28,118 @@ public class Update extends RemoteModel {
// --- table
/** table for this model */
/**
* table for this model
*/
public static final Table TABLE = new Table("updates", Update.class);
/** content uri for this model */
/**
* content uri for this model
*/
public static final Uri CONTENT_URI = Uri.parse("content://" + AstridApiConstants.API_PACKAGE + "/" +
TABLE.name);
// --- properties
/** ID */
/**
* ID
*/
public static final LongProperty ID = new LongProperty(
TABLE, ID_PROPERTY_NAME);
/** Remote ID */
/**
* Remote ID
*/
public static final LongProperty REMOTE_ID = new LongProperty(
TABLE, UUID_PROPERTY_NAME);
/** Associated Task remote-id (if any) */
/**
* Associated Task remote-id (if any)
*/
public static final LongProperty TASK = new LongProperty(
TABLE, "task");
/** Associated Task local-id (if any) */
/**
* Associated Task local-id (if any)
*/
public static final LongProperty TASK_LOCAL = new LongProperty(
TABLE, "taskLocal");
/** Associated Tag remote-ids (comma separated list with leading and trailing commas) */
/**
* Associated Tag remote-ids (comma separated list with leading and trailing commas)
*/
public static final StringProperty TAGS = new StringProperty(
TABLE, "tag");
/** Associated Tag local-ids (comma separated list with leading and trailing commas) */
/**
* Associated Tag local-ids (comma separated list with leading and trailing commas)
*/
public static final StringProperty TAGS_LOCAL = new StringProperty(
TABLE, "tagsLocal");
/** From user id */
/**
* From user id
*/
public static final LongProperty USER_ID = new LongProperty(
TABLE, USER_ID_PROPERTY_NAME);
/** From User Object (JSON) */
/**
* From User Object (JSON)
*/
public static final StringProperty USER = new StringProperty(
TABLE, USER_JSON_PROPERTY_NAME);
/** Other user id */
/**
* Other user id
*/
public static final LongProperty OTHER_USER_ID = new LongProperty(
TABLE, "other_user_id");
/** Other User Object (JSON) */
/**
* Other User Object (JSON)
*/
public static final StringProperty OTHER_USER = new StringProperty(
TABLE, "other_user");
/** Action text */
/**
* Action text
*/
public static final StringProperty ACTION = new StringProperty(
TABLE, "action");
/** Action code */
/**
* Action code
*/
public static final StringProperty ACTION_CODE = new StringProperty(
TABLE, "actionCode");
/** Message */
/**
* Message
*/
public static final StringProperty MESSAGE = new StringProperty(
TABLE, "message");
/** Target Object Name */
/**
* Target Object Name
*/
public static final StringProperty TARGET_NAME = new StringProperty(
TABLE, "targetName");
/** From User Object (JSON) */
/**
* From User Object (JSON)
*/
public static final StringProperty PICTURE = new StringProperty(
TABLE, "picture");
/** Unixtime Metadata was created */
/**
* Unixtime Metadata was created
*/
public static final LongProperty CREATION_DATE = new LongProperty(
TABLE, "created");
/** List of all properties for this model */
/**
* List of all properties for this model
*/
public static final Property<?>[] PROPERTIES = generateProperties(Update.class);
// --- constants
@ -112,7 +148,9 @@ public class Update extends RemoteModel {
// --- defaults
/** Default values container */
/**
* Default values container
*/
private static final ContentValues defaultValues = new ContentValues();
@Override
@ -155,7 +193,9 @@ public class Update extends RemoteModel {
@Override
public long getId() {
return getIdHelper(ID);
};
}
;
@Override
public String getUuid() {

@ -22,77 +22,110 @@ import com.todoroo.astrid.api.AstridApiConstants;
* Data Model which represents a user.
*
* @author Tim Su <tim@todoroo.com>
*
*/
@SuppressWarnings("nls")
public final class User extends RemoteModel {
// --- table and uri
/** table for this model */
/**
* table for this model
*/
public static final Table TABLE = new Table("users", User.class);
/** content uri for this model */
/**
* content uri for this model
*/
public static final Uri CONTENT_URI = Uri.parse("content://" + AstridApiConstants.API_PACKAGE + "/" +
TABLE.name);
// --- properties
/** ID */
/**
* ID
*/
public static final LongProperty ID = new LongProperty(
TABLE, ID_PROPERTY_NAME);
/** User Name */
/**
* User Name
*/
public static final StringProperty NAME = new StringProperty(
TABLE, "name");
/** User first name */
/**
* User first name
*/
public static final StringProperty FIRST_NAME = new StringProperty(
TABLE, "first_name");
/** User last name */
/**
* User last name
*/
public static final StringProperty LAST_NAME = new StringProperty(
TABLE, "last_name");
/** User Email */
@Deprecated public static final StringProperty EMAIL = new StringProperty(
/**
* User Email
*/
@Deprecated
public static final StringProperty EMAIL = new StringProperty(
TABLE, "email");
/** User picture */
/**
* User picture
*/
public static final StringProperty PICTURE = new StringProperty(
TABLE, "picture", Property.PROP_FLAG_JSON);
/** Remote id */
/**
* Remote id
*/
public static final StringProperty UUID = new StringProperty(
TABLE, UUID_PROPERTY_NAME);
/** Pushed at date */
/**
* Pushed at date
*/
public static final LongProperty PUSHED_AT = new LongProperty(
TABLE, PUSHED_AT_PROPERTY_NAME);
/** Pushed at date */
/**
* Pushed at date
*/
public static final LongProperty TASKS_PUSHED_AT = new LongProperty(
TABLE, "tasks_pushed_at");
/** Friendship status. One of the STATUS constants below */
/**
* Friendship status. One of the STATUS constants below
*/
public static final StringProperty STATUS = new StringProperty(
TABLE, "status");
/** Last autosync */
/**
* Last autosync
*/
public static final LongProperty LAST_AUTOSYNC = new LongProperty(
TABLE, "lastAutosync");
/** Friendship tatus that needs to be reported to the server.
* One of the PENDING constants below */
@Deprecated public static final StringProperty PENDING_STATUS = new StringProperty(
/**
* Friendship tatus that needs to be reported to the server.
* One of the PENDING constants below
*/
@Deprecated
public static final StringProperty PENDING_STATUS = new StringProperty(
TABLE, "pendingStatus");
/** List of all properties for this model */
/**
* List of all properties for this model
*/
public static final Property<?>[] PROPERTIES = generateProperties(User.class);
// --- defaults
/** Default values container */
/**
* Default values container
*/
private static final ContentValues defaultValues = new ContentValues();
static {

@ -14,61 +14,89 @@ import com.todoroo.astrid.api.AstridApiConstants;
@SuppressWarnings("nls")
public class UserActivity extends RemoteModel {
// --- table
// --- table
/** table for this model */
/**
* table for this model
*/
public static final Table TABLE = new Table("userActivity", UserActivity.class);
/** model class for entries in the outstanding table */
/**
* model class for entries in the outstanding table
*/
public static final Class<? extends OutstandingEntry<UserActivity>> OUTSTANDING_MODEL = UserActivityOutstanding.class;
/** content uri for this model */
/**
* content uri for this model
*/
public static final Uri CONTENT_URI = Uri.parse("content://" + AstridApiConstants.API_PACKAGE + "/" +
TABLE.name);
// --- properties
/** ID */
/**
* ID
*/
public static final LongProperty ID = new LongProperty(
TABLE, ID_PROPERTY_NAME);
/** Remote ID */
/**
* Remote ID
*/
public static final StringProperty UUID = new StringProperty(
TABLE, UUID_PROPERTY_NAME);
/** Pushed at */
/**
* Pushed at
*/
public static final LongProperty PUSHED_AT = new LongProperty(
TABLE, PUSHED_AT_PROPERTY_NAME, Property.PROP_FLAG_DATE);
/** User ID (activity initiator) */
/**
* User ID (activity initiator)
*/
public static final StringProperty USER_UUID = new StringProperty(
TABLE, "user_uuid", Property.PROP_FLAG_USER_ID);
/** Action */
/**
* Action
*/
public static final StringProperty ACTION = new StringProperty(
TABLE, "action");
/** Message */
/**
* Message
*/
public static final StringProperty MESSAGE = new StringProperty(
TABLE, "message");
/** Picture */
/**
* Picture
*/
public static final StringProperty PICTURE = new StringProperty(
TABLE, "picture", Property.PROP_FLAG_JSON | Property.PROP_FLAG_PICTURE);
/** Target id */
/**
* Target id
*/
public static final StringProperty TARGET_ID = new StringProperty(
TABLE, "target_id");
/** Target name */
/**
* Target name
*/
public static final StringProperty TARGET_NAME = new StringProperty(
TABLE, "target_name");
/** Created at */
/**
* Created at
*/
public static final LongProperty CREATED_AT = new LongProperty(
TABLE, "created_at", Property.PROP_FLAG_DATE);
/** Deleted at */
/**
* Deleted at
*/
public static final LongProperty DELETED_AT = new LongProperty(
TABLE, "deleted_at", Property.PROP_FLAG_DATE);
@ -99,7 +127,9 @@ public class UserActivity extends RemoteModel {
return getUuidHelper(UUID);
}
/** Default values container */
/**
* Default values container
*/
private static final ContentValues defaultValues = new ContentValues();
@Override
@ -119,7 +149,9 @@ public class UserActivity extends RemoteModel {
defaultValues.put(DELETED_AT.name, 0L);
}
/** List of all properties for this model */
/**
* List of all properties for this model
*/
public static final Property<?>[] PROPERTIES = generateProperties(UserActivity.class);
@Override

@ -11,12 +11,16 @@ import com.todoroo.andlib.data.Table;
@SuppressWarnings("nls")
public class UserActivityOutstanding extends OutstandingEntry<UserActivity> {
/** table for this model */
/**
* table for this model
*/
public static final Table TABLE = new Table("user_activity_outstanding", UserActivityOutstanding.class);
// --- properties
/** ID */
/**
* ID
*/
public static final LongProperty ID = new LongProperty(
TABLE, ID_PROPERTY_NAME);
@ -40,7 +44,9 @@ public class UserActivityOutstanding extends OutstandingEntry<UserActivity> {
defaultValues.put(VALUE_STRING.name, "");
}
/** List of all properties for this model */
/**
* List of all properties for this model
*/
public static final Property<?>[] PROPERTIES = generateProperties(UserActivityOutstanding.class);
@Override

@ -15,21 +15,31 @@ import com.todoroo.astrid.api.AstridApiConstants;
@SuppressWarnings("nls")
public class WaitingOnMe extends RemoteModel {
/** table for this model */
/**
* table for this model
*/
public static final Table TABLE = new Table("waitingOnMe", WaitingOnMe.class);
/** model class for entries in the outstanding table */
/**
* model class for entries in the outstanding table
*/
public static final Class<? extends OutstandingEntry<WaitingOnMe>> OUTSTANDING_MODEL = WaitingOnMeOutstanding.class;
/** content uri for this model */
/**
* content uri for this model
*/
public static final Uri CONTENT_URI = Uri.parse("content://" + AstridApiConstants.API_PACKAGE + "/" +
TABLE.name);
/** ID */
/**
* ID
*/
public static final LongProperty ID = new LongProperty(
TABLE, ID_PROPERTY_NAME);
/** Remote ID */
/**
* Remote ID
*/
public static final StringProperty UUID = new StringProperty(
TABLE, RemoteModel.UUID_PROPERTY_NAME);

@ -11,12 +11,16 @@ import com.todoroo.andlib.data.Table;
@SuppressWarnings("nls")
public class WaitingOnMeOutstanding extends OutstandingEntry<WaitingOnMe> {
/** table for this model */
/**
* table for this model
*/
public static final Table TABLE = new Table("waiting_on_me_outstanding", WaitingOnMeOutstanding.class);
// --- properties
/** ID */
/**
* ID
*/
public static final LongProperty ID = new LongProperty(
TABLE, ID_PROPERTY_NAME);
@ -40,7 +44,9 @@ public class WaitingOnMeOutstanding extends OutstandingEntry<WaitingOnMe> {
defaultValues.put(VALUE_STRING.name, "");
}
/** List of all properties for this model */
/**
* List of all properties for this model
*/
public static final Property<?>[] PROPERTIES = generateProperties(WaitingOnMeOutstanding.class);
@Override

@ -5,8 +5,6 @@
*/
package com.todoroo.astrid.sync;
import java.util.concurrent.atomic.AtomicBoolean;
import android.app.AlarmManager;
import android.app.PendingIntent;
import android.app.Service;
@ -22,23 +20,27 @@ import com.todoroo.andlib.service.ExceptionService;
import com.todoroo.andlib.utility.DateUtilities;
import com.todoroo.andlib.utility.Preferences;
import java.util.concurrent.atomic.AtomicBoolean;
/**
* Performs synchronization service logic in background service to avoid
* ANR (application not responding) messages.
* <p>
* <p/>
* Starting this service
* schedules a repeating alarm which handles
* schedules a repeating alarm which handles
* synchronization with your serv
*
* @author Tim Su
*
*/
abstract public class SyncBackgroundService extends Service {
/** Minimum time before an auto-sync */
private static final long AUTO_SYNC_MIN_OFFSET = 5*60*1000L;
/**
* Minimum time before an auto-sync
*/
private static final long AUTO_SYNC_MIN_OFFSET = 5 * 60 * 1000L;
@Autowired private ExceptionService exceptionService;
@Autowired
private ExceptionService exceptionService;
// --- abstract methods
@ -54,11 +56,13 @@ abstract public class SyncBackgroundService extends Service {
private final AtomicBoolean started = new AtomicBoolean(false);
/** Receive the alarm - start the synchronize service! */
/**
* Receive the alarm - start the synchronize service!
*/
@Override
public void onStart(Intent intent, int startId) {
try {
if(intent != null && !started.getAndSet(true)) {
if (intent != null && !started.getAndSet(true)) {
startSynchronization(this);
}
} catch (Exception e) {
@ -66,14 +70,16 @@ abstract public class SyncBackgroundService extends Service {
}
}
/** Start the actual synchronization */
/**
* Start the actual synchronization
*/
private void startSynchronization(Context context) {
if(context == null || context.getResources() == null)
if (context == null || context.getResources() == null)
return;
ContextManager.setContext(context);
if(!getSyncUtilities().isLoggedIn())
if (!getSyncUtilities().isLoggedIn())
return;
getSyncProvider().synchronize(context);
@ -99,16 +105,16 @@ abstract public class SyncBackgroundService extends Service {
try {
syncFrequencySeconds = Preferences.getIntegerFromString(
getSyncUtilities().getSyncIntervalKey(), -1);
} catch(ClassCastException e) {
} catch (ClassCastException e) {
Preferences.setStringFromInteger(getSyncUtilities().getSyncIntervalKey(), 0);
}
Context context = ContextManager.getContext();
if(syncFrequencySeconds <= 0) {
unscheduleService(context);
return;
}
if (syncFrequencySeconds <= 0) {
unscheduleService(context);
return;
}
// figure out synchronization frequency
// figure out synchronization frequency
long interval = 1000L * syncFrequencySeconds;
long offset = computeNextSyncOffset(interval);
@ -120,7 +126,7 @@ abstract public class SyncBackgroundService extends Service {
createAlarmIntent(context), PendingIntent.FLAG_UPDATE_CURRENT);
Log.i("Astrid", "Autosync set for " + offset / 1000 //$NON-NLS-1$ //$NON-NLS-2$
+ " seconds repeating every " + syncFrequencySeconds); //$NON-NLS-1$
+ " seconds repeating every " + syncFrequencySeconds); //$NON-NLS-1$
// cancel all existing
am.cancel(pendingIntent);
@ -135,13 +141,15 @@ abstract public class SyncBackgroundService extends Service {
* Removes repeating alarm for auto-synchronization
*/
private void unscheduleService(Context context) {
AlarmManager am = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
AlarmManager am = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
PendingIntent pendingIntent = PendingIntent.getService(context, getSyncUtilities().getSyncIntervalKey(),
createAlarmIntent(context), PendingIntent.FLAG_UPDATE_CURRENT);
am.cancel(pendingIntent);
}
/** Create the alarm intent */
/**
* Create the alarm intent
*/
private Intent createAlarmIntent(Context context) {
Intent intent = new Intent(context, getClass());
return intent;
@ -154,7 +162,7 @@ abstract public class SyncBackgroundService extends Service {
long lastSyncDate = getSyncUtilities().getLastSyncDate();
// if user never synchronized, give them a full offset period before bg sync
if(lastSyncDate != 0)
if (lastSyncDate != 0)
return Math.max(0, lastSyncDate + interval - DateUtilities.now());
else
return interval;

@ -5,19 +5,18 @@
*/
package com.todoroo.astrid.sync;
import java.util.ArrayList;
import com.todoroo.andlib.utility.AndroidUtilities;
import com.todoroo.astrid.data.Metadata;
import com.todoroo.astrid.data.Task;
import java.util.ArrayList;
/**
* Container class for transmitting tasks and including local and remote
* metadata. Synchronization Providers can subclass this class if desired.
*
* @see SyncProvider
* @author Tim Su <tim@todoroo.com>
*
* @see SyncProvider
*/
public class SyncContainer {
public Task task;
@ -25,12 +24,13 @@ public class SyncContainer {
/**
* Check if the metadata contains anything with the given key
*
* @param key
* @return first match. or null
*/
public Metadata findMetadata(String key) {
for(Metadata item : metadata) {
if(AndroidUtilities.equals(key, item.getValue(Metadata.KEY)))
for (Metadata item : metadata) {
if (AndroidUtilities.equals(key, item.getValue(Metadata.KEY)))
return item;
}
return null;

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save