Merge from upstream/master

pull/14/head
Sam Bosley 14 years ago
commit 9d237bf81f

@ -3,7 +3,6 @@
*/
package com.todoroo.astrid.actfm;
import android.app.PendingIntent;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
@ -38,11 +37,8 @@ public class ActFmSyncActionExposer extends BroadcastReceiver {
if(!actFmPreferenceService.isLoggedIn())
return;
Intent syncIntent = new Intent(null, null,
context, ActFmBackgroundService.class);
PendingIntent pendingIntent = PendingIntent.getService(context, 0, syncIntent, PendingIntent.FLAG_UPDATE_CURRENT);
SyncAction syncAction = new SyncAction(context.getString(R.string.actfm_APr_header),
pendingIntent);
null);
Intent broadcastIntent = new Intent(AstridApiConstants.BROADCAST_SEND_SYNC_ACTIONS);
broadcastIntent.putExtra(AstridApiConstants.EXTRAS_ADDON, ActFmPreferenceService.IDENTIFIER);

@ -69,6 +69,7 @@ public class TagSettingsActivity extends FragmentActivity {
private EditText tagName;
private EditText tagDescription;
private CheckBox isSilent;
private Bitmap setBitmap;
boolean isNewTag = false;
@ -202,21 +203,44 @@ public class TagSettingsActivity extends FragmentActivity {
else
Toast.makeText(this, R.string.tag_list_saved, Toast.LENGTH_LONG).show();
tagDataService.save(tagData);
InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(tagName.getWindowToken(), 0);
if (isNewTag) {
Intent intent = new Intent(this, TagViewWrapperActivity.class);
intent.putExtra(TagViewActivity.EXTRA_TAG_NAME, newName);
intent.putExtra(TagViewActivity.TOKEN_FILTER, TagFilterExposer.filterFromTagData(this, tagData));
super.finish();
startActivity(intent);
AndroidUtilities.callOverridePendingTransition(this, R.anim.slide_left_in, R.anim.slide_left_out);
return;
}
Flags.set(Flags.ACTFM_SUPPRESS_SYNC);
tagDataService.save(tagData);
final String name = newName;
final Runnable loadTag = new Runnable() {
@Override
public void run() {
Intent intent = new Intent(TagSettingsActivity.this, TagViewActivity.class);
intent.putExtra(TagViewActivity.EXTRA_TAG_NAME, name);
intent.putExtra(TagViewActivity.TOKEN_FILTER,
TagFilterExposer.filterFromTagData(TagSettingsActivity.this, tagData));
finish();
startActivity(intent);
}
};
if(actFmPreferenceService.isLoggedIn()) {
new Thread(new Runnable() {
@Override
public void run() {
actFmSyncService.pushTagDataOnSave(tagData, tagData.getMergedValues());
if(setBitmap != null && tagData.getValue(TagData.REMOTE_ID) > 0)
uploadTagPicture(setBitmap);
runOnUiThread(loadTag);
}
}).start();
} else {
loadTag.run();
}
return;
} else {
tagDataService.save(tagData);
}
refreshSettingsPage();
finish();
@ -318,7 +342,9 @@ public class TagSettingsActivity extends FragmentActivity {
@Override
public void handleCameraResult(Bitmap bitmap) {
picture.setImageBitmap(bitmap);
uploadTagPicture(bitmap);
setBitmap = bitmap;
if(tagData.getValue(TagData.REMOTE_ID) > 0)
uploadTagPicture(bitmap);
}
};
if (ActFmCameraModule.activityResult(this, requestCode, resultCode, data, callback)) {

@ -8,8 +8,10 @@ import java.util.concurrent.atomic.AtomicInteger;
import org.json.JSONException;
import com.timsu.astrid.R;
import com.todoroo.andlib.data.TodorooCursor;
import com.todoroo.andlib.service.Autowired;
import com.todoroo.andlib.service.ContextManager;
import com.todoroo.andlib.service.DependencyInjectionService;
import com.todoroo.andlib.service.ExceptionService;
import com.todoroo.andlib.sql.Criterion;
@ -29,7 +31,7 @@ import com.todoroo.astrid.tags.TagService;
* Exposes sync action
*
*/
public class ActFmSyncV2Provider implements SyncV2Provider {
public class ActFmSyncV2Provider extends SyncV2Provider {
@Autowired ActFmPreferenceService actFmPreferenceService;
@ -47,6 +49,11 @@ public class ActFmSyncV2Provider implements SyncV2Provider {
DependencyInjectionService.getInstance().inject(this);
}
@Override
public String getName() {
return ContextManager.getString(R.string.actfm_APr_header);
}
@Override
public boolean isActive() {
return actFmPreferenceService.isLoggedIn();

@ -5,10 +5,10 @@
<!-- ================================================== general terms == -->
<!-- People Editing Activity -->
<string name="EPE_action">Udostęp</string>
<string name="EPE_action">Udostępnij</string>
<!-- task sharing dialog: assigned hint -->
<string name="actfm_person_hint">Contact or Email</string>
<string name="actfm_person_hint">Kontakt lub e-mail</string>
<!-- task sharing dialog: shared with hint -->
<string name="actfm_person_or_tag_hint">Kontakt lub lista udostępionych</string>
@ -17,7 +17,7 @@
<string name="actfm_toast_success">Zapisano na serwerze</string>
<!-- toast on transmit error (%s => error) -->
<string name="actfm_toast_error">Save Failed: %s</string>
<string name="actfm_toast_error">Błąd zapisu: %s</string>
<!-- can't rename or delete shared tag message -->
<string name="actfm_tag_operation_disabled">Niestety, ale ta operacja nie jest jeszcze obsługiwana przez udostepnione tagi.</string>
@ -26,10 +26,10 @@
<string name="actfm_picture_camera">Zrób zdjęcie</string>
<!-- menu item to select from gallery -->
<string name="actfm_picture_gallery">Wynierz z galerii</string>
<string name="actfm_picture_gallery">Wybierz z galerii</string>
<!-- menu item to clear picture selection -->
<string name="actfm_picture_clear">Clear Picture</string>
<string name="actfm_picture_clear">Usuń obrazek</string>
<!-- filter list activity: refresh tags -->
<string name="actfm_FLA_menu_refresh">Odśwież listy</string>
@ -56,7 +56,7 @@
<string name="actfm_TVA_filtered_by_assign">%s\'s tasks. Tap for all.</string>
<!-- Tag View: list is private, no members -->
<string name="actfm_TVA_no_members_alert">Private: tap to share this list</string>
<string name="actfm_TVA_no_members_alert">Prywatna: puknij by udostępnić</string>
<!-- Tag View Menu: refresh -->
<string name="actfm_TVA_menu_refresh">Odśwież</string>
@ -91,13 +91,13 @@
<string name="actfm_EPA_save">Zapisz i udostępnij</string>
<!-- task sharing dialog: assigned label -->
<string name="actfm_EPA_assign_label">Who</string>
<string name="actfm_EPA_assign_label">Kto</string>
<!-- task sharing dialog: assigned to me -->
<string name="actfm_EPA_assign_me">Ja</string>
<!-- task sharing dialog: anyone -->
<string name="actfm_EPA_unassigned">Anyone</string>
<string name="actfm_EPA_unassigned">Ktokolwiek</string>
<!-- task sharing dialog: custom email assignment -->
<string name="actfm_EPA_assign_custom">Inny...</string>
@ -106,7 +106,7 @@
<string name="actfm_EPA_share_with">Dodaj współpracowników:</string>
<!-- task sharing dialog: shared with label -->
<string name="actfm_EPA_collaborators_header">Share with Friends</string>
<string name="actfm_EPA_collaborators_header">Udostępnij znajomym</string>
<!-- task sharing dialog: collaborator list name (%s => name of list) -->
<string name="actfm_EPA_list">Lista: %s</string>
@ -118,7 +118,7 @@
<string name="actfm_EPA_message_text">Widomość zaproszenia:</string>
<!-- task sharing dialog: message body -->
<string name="actfm_EPA_message_body">Pomoc mi to zrobić!</string>
<string name="actfm_EPA_message_body">Pomóż mi to zrobić!</string>
<!-- task sharing dialog: message hint -->
<string name="actfm_EPA_tag_label">Utwórz tag udostępnienia?</string>
@ -153,13 +153,13 @@
<string name="actfm_ALA_body">Astrid.com umożliwia dostęp do zadań online, udostępniania i przekazywania innym.</string>
<!-- share login: Sharing Login FB Prompt -->
<string name="actfm_ALA_fb_login">Login with Facebook</string>
<string name="actfm_ALA_fb_login">Zaloguj przez Facebook</string>
<!-- share login: Sharing Login GG Prompt -->
<string name="actfm_ALA_gg_login">Login with Google</string>
<string name="actfm_ALA_gg_login">Zaloguj przez Google</string>
<!-- share login: Sharing Footer Password Label -->
<string name="actfm_ALA_pw_login">Don\'t use Google or Facebook?</string>
<string name="actfm_ALA_pw_login">Nie używasz Google ani Facebooka?</string>
<!-- share login: Sharing Password Link -->
<string name="actfm_ALA_pw_link">Zarejestruj się tutaj</string>
@ -186,28 +186,28 @@
<string name="actfm_ALA_signup_title">Utwórz nowe konto</string>
<!-- share login: Login Title -->
<string name="actfm_ALA_login_title">Zalogój sie do Astrid.com</string>
<string name="actfm_ALA_login_title">Zaloguj sie do Astrid.com</string>
<!-- share login: OAUTH Login Prompt -->
<string name="actfm_OLA_prompt">Proszę połączyć się z Google:</string>
<!-- share login: Sharing notice -->
<string name="actfm_ALA_notice">Astrid nie wysyła wiadomości email bez zezwolenia.</string>
<string name="actfm_ALA_notice">Astrid nie wysyła wiadomości e-mail bez zezwolenia.</string>
<!-- ================================================ Synchronization == -->
<!-- Preferences Title: Act.fm -->
<string name="actfm_APr_header">Astrid.com (Beta!)</string>
<string name="actfm_https_title">Use HTTPS</string>
<string name="actfm_https_enabled">HTTPS enabled (slower)</string>
<string name="actfm_https_disabled">HTTPS disabled (faster)</string>
<string name="actfm_https_title">Użycie HTTPS</string>
<string name="actfm_https_enabled">HTTPS włączone (wolniej)</string>
<string name="actfm_https_disabled">HTTPS wyłączone (szybciej)</string>
<!-- title for notification tray after synchronizing -->
<string name="actfm_notification_title">Synchronizuj</string>
<!-- text for notification when comments are received -->
<string name="actfm_notification_comments">Nowe komentarze otrzymano / kliknij po więcej informacji</string>
<string name="actfm_notification_comments">Otrzymano nowe komentarze / kliknij po więcej informacji</string>
@ -244,9 +244,9 @@
<string name="backup_BPr_group_status">Stan</string>
<!-- Backup Status: last backup was a success (%s -> last date). Keep it short! -->
<string name="backup_status_success">Latest backup:\n%s</string>
<string name="backup_status_success">Ostatnia kopia zapasowa:\n%s</string>
<!-- Backup Status: last error failed. Keep it short! -->
<string name="backup_status_failed">Ostatnie niepowodzenie kopii zapasowej</string>
<string name="backup_status_failed">Błąd zapisu ostatniej kopii</string>
<!-- Backup Status: error subtitle -->
<string name="backup_status_failed_subtitle">(dotknij, aby zobaczyć błąd)</string>
<!-- Backup Status: never backed up -->
@ -375,11 +375,11 @@
<string name="DLG_loading">Ładowanie...</string>
<!-- Dialog - dismiss -->
<string name="DLG_dismiss">Dismiss</string>
<string name="DLG_dismiss">Porzuć</string>
<string name="DLG_ok">OK</string>
<string name="DLG_cancel">Cancel</string>
<string name="DLG_cancel">Anuluj</string>
<!-- =============================================================== UI == -->
@ -394,7 +394,7 @@
<!-- =================================================== Welcome screen == -->
<!-- Label for DateButtons with no value -->
<string name="welcome_show_eula">Accept EULA to get started!</string>
<string name="welcome_show_eula">Zaakceptuj EULA by rozpocząć!</string>
<!-- ============================================================= notes -->
@ -406,7 +406,7 @@
<string name="ENE_label_comments">Komentarze</string>
<!-- EditNoteActivity - no comments -->
<string name="ENA_no_comments">Nic do pokazania</string>
<string name="ENA_no_comments">Brak komentarzy</string>
<!-- EditNoteActivity - refresh comments -->
<string name="ENA_refresh_comments">Odśwież komentarze</string>
@ -429,7 +429,7 @@
<string name="TLA_menu_settings">Ustawienia</string>
<!-- Menu: Support -->
<string name="TLA_menu_support">Support</string>
<string name="TLA_menu_support">Wsparcie</string>
<!-- Search Label-->
<string name="TLA_search_label">Przeszukaj tą listę</string>
@ -438,7 +438,7 @@
<string name="TLA_custom">Własny filtr</string>
<!-- Quick Add Edit Box Hint-->
<string name="TLA_quick_add_hint">Add a task</string>
<string name="TLA_quick_add_hint">Dodaj zadanie</string>
<!-- Quick Add Edit Box Hint for assigning -->
<string name="TLA_quick_add_hint_assign">Tap to assign %s a task</string>
@ -447,15 +447,15 @@
<string name="TLA_notification_volume_low">Powiadomienia są wyciszone. Nie będziesz w stanie usłyszeć Astrid!</string>
<!-- Notifications disabled warning -->
<string name="TLA_notification_disabled">Astrid reminders are disabled! You will not receive any reminders</string>
<string name="TLA_notification_disabled">Powiadomienia są wyłączone! Nie otrzymasz żadnych powiadomień</string>
<string-array name="TLA_filters">
<item>Active</item>
<item>Aktywne</item>
<item>Dzisiaj</item>
<item>Soon</item>
<item>Late</item>
<item>Wkrótce</item>
<item>Spóźnione</item>
<item>Gotowe</item>
<item>Hidden</item>
<item>Ukryte</item>
</string-array>
<!-- ====================================================== TaskAdapter == -->
@ -485,7 +485,7 @@
<string name="TAd_contextDeleteTask">Usuń zadanie</string>
<!-- Context Item: undelete task -->
<string name="TAd_contextUndeleteTask">Przywrócone zadanie</string>
<string name="TAd_contextUndeleteTask">Przywróć zadanie</string>
<!-- Context Item: purge task -->
<string name="TAd_contextPurgeTask">Usuń zadanie na trwałe</string>
@ -564,7 +564,7 @@
<string name="FLA_toast_onCreateShortcut">Utworzono skrót: %s</string>
<!-- Menu: new filter -->
<string name="FLA_new_filter">New Filter</string>
<string name="FLA_new_filter">Nowy filtr</string>
<!-- ================================================= TaskEditActivity == -->
@ -578,7 +578,7 @@
<string name="TEA_tab_basic">Podstawowe</string>
<!-- Second Tab - extra details -->
<string name="TEA_tab_share">Udostęp</string>
<string name="TEA_tab_share">Udostępnij</string>
<!-- Second Tab - extra details -->
<string name="TEA_tab_alarms">Alarmy</string>
@ -590,7 +590,7 @@
<string name="TEA_title_label">Tytuł</string>
<!-- Task when label (note the <u> tags - be sure to leave those in when localizing! -->
<string name="TEA_when_header_label"><u>When</u></string>
<string name="TEA_when_header_label"><u>Kiedy</u></string>
<!-- Task title hint (displayed when edit box is empty) -->
<string name="TEA_title_hint">Podsumowanie zadania</string>
@ -608,7 +608,7 @@
<string name="TEA_urgency_none">Brak</string>
<!-- Task hide until label -->
<string name="TEA_hideUntil_label">Show Task</string>
<string name="TEA_hideUntil_label">Pokaż zadanie</string>
<!-- Task editing data being loaded label -->
<string-array name="TEA_loading"><item>Ładowanie...</item></string-array>
@ -658,28 +658,28 @@
<item>Przyszły miesiąc</item>
</string-array>
<string name="TEA_no_time">No time</string>
<string name="TEA_no_time">Bez godziny</string>
<string-array name="TEA_hideUntil">
<!-- hideUntil: labels for edit page. -->
<item>Zawsze</item>
<item>At due date</item>
<item>Dzień przez wymaganiem</item>
<item>Tydzień przed wymaganiem</item>
<item>W terminie</item>
<item>Dzień przed terminem</item>
<item>Tydzień przed terminem</item>
<item>Konkretny dzień/godzina</item>
</string-array>
<!-- Task edit control set descriptors -->
<string name="TEA_control_title">Task Title</string>
<string name="TEA_control_who">Who</string>
<string name="TEA_control_when">When</string>
<string name="TEA_control_more_section">More Section</string>
<string name="TEA_control_title">Tytuł zadania</string>
<string name="TEA_control_who">Kto</string>
<string name="TEA_control_when">Kiedy</string>
<string name="TEA_control_more_section">Sekcja "Więcej"</string>
<string name="TEA_control_importance">Skala ważności</string>
<string name="TEA_control_lists">Listy</string>
<string name="TEA_control_notes">Notatki</string>
<string name="TEA_control_reminders">Reminders</string>
<string name="TEA_control_timer">Timer Controls</string>
<string name="TEA_control_share">Share With Friends</string>
<string name="TEA_control_reminders">Przypomnienia</string>
<string name="TEA_control_timer">Kontrola czasu</string>
<string name="TEA_control_share">Udostępnij</string>
<string-array name="TEA_control_sets">
@ -695,7 +695,7 @@
<item>@string/TEA_control_share</item>
</string-array>
<string name="hide_until_prompt">Show in my list</string>
<string name="hide_until_prompt">Pokaż na mojej liście</string>
<!-- Add Ons tab when no add-ons found -->
<string name="TEA_addons_text">Szukasz więcej funkcji?</string>
@ -707,9 +707,9 @@
<string name="TEA_more">Więcej</string>
<!-- When controls dialog -->
<string name="TEA_when_dialog_title">When is this due?</string>
<string name="TEA_when_dialog_title">Na kiedy ma być zrobione?</string>
<string name="TEA_date_and_time">Date/Time</string>
<string name="TEA_date_and_time">Data/Godzina</string>
<!-- ============================================= IntroductionActivity == -->
<!-- Introduction Window title -->
@ -739,7 +739,7 @@
<!-- Preference Window Title -->
<string name="EPr_title">Astrid: Właściwości</string>
<string name="EPr_deactivated">deactivated</string>
<string name="EPr_deactivated">nieaktywne</string>
<!-- Preference Category: Appearance Title -->
<string name="EPr_appearance_header">Wygląd</string>
@ -752,9 +752,9 @@
<!-- Preference: Task List Show Notes -->
<string name="EPr_showNotes_title">Pokaż notatki w zadaniu</string>
<!-- Preference: Beast mode (auto-expand edit page) -->
<string name="EPr_beastMode_title">Beast Mode</string>
<string name="EPr_beastMode_desc">Customize the layout of the Task Edit Page</string>
<string name="EPr_beastMode_reset">Reset to defaults</string>
<string name="EPr_beastMode_title">Tryb "Beast"</string>
<string name="EPr_beastMode_desc">Dostosuj układ strony edycji zadania</string>
<string name="EPr_beastMode_reset">Powrót domyślne</string>
<!-- Preference: Task List Show Notes Description (disabled) -->
<string name="EPr_showNotes_desc_disabled">Notatki będą wyświetlane na pasku szybkiego działania</string>
@ -762,7 +762,7 @@
<string name="EPr_showNotes_desc_enabled">Notatki będą zawsze wyświetlane</string>
<!-- Preference: Theme -->
<string name="EPr_theme_title">Color Theme</string>
<string name="EPr_theme_title">Kolorystyka</string>
<!-- Preference: Theme Description (%s => value) -->
<string name="EPr_theme_desc">Aktualnie: %s</string>
<!-- Preference: Theme Description (android 1.6) -->
@ -777,10 +777,10 @@
<string-array name="EPr_themes">
<!-- theme_settings: labels for Theme preference menu -->
<item>Day</item>
<item>Night</item>
<item>Transparent (White Text)</item>
<item>Transparent (Black Text)</item>
<item>Dzień</item>
<item>Noc</item>
<item>Przezroczysty (biały tekst)</item>
<item>Przezroczysty (czarny tekst)</item>
</string-array>
<!-- ========================================== Task Management Settings == -->
@ -796,15 +796,15 @@
<string name="EPr_manage_purge_deleted_status">Oczyszczone %d zadań!</string>
<string name="EPr_manage_purge_deleted_summary">Uwaga! Oczyszczone zadania nie mogą być odzyskane bez pliku kopii zapasowej!</string>
<string name="EPr_manage_delete_completed_gcal">Delete Calendar Events for Completed Tasks</string>
<string name="EPr_manage_delete_completed_gcal_message">Do you really want to delete all your events for completed tasks?</string>
<string name="EPr_manage_delete_completed_gcal">Usuń wydarzenia kalendarza dla zakończonych zadań</string>
<string name="EPr_manage_delete_completed_gcal_message">Na pewno chcesz usunąć wszystkie wydarzenia dla zakończonych zadań?</string>
<string name="EPr_manage_delete_completed_gcal_summary"/>
<string name="EPr_manage_delete_completed_gcal_status">Deleted %d calendar events!</string>
<string name="EPr_manage_delete_completed_gcal_status">Usunięto %d wydarzeń kalendarza!</string>
<string name="EPr_manage_delete_all_gcal">Delete All Calendar Events for Tasks</string>
<string name="EPr_manage_delete_all_gcal_message">Do you really want to delete all your events for tasks?</string>
<string name="EPr_manage_delete_all_gcal">Usuń wszystkie zdarzenia kalendarza dla zadań</string>
<string name="EPr_manage_delete_all_gcal_message">Na pewno chcesz usunąć wszystkie wydarzenia dla zadań?</string>
<string name="EPr_manage_delete_all_gcal_summary"/>
<string name="EPr_manage_delete_all_gcal_status">Deleted %d calendar events!</string>
<string name="EPr_manage_delete_all_gcal_status">Usunięto %d wydarzeń kalendarza!</string>
<!-- ==================================================== AddOnActivity == -->
@ -846,7 +846,7 @@
<string name="p_about">O Astrid</string>
<!-- About text (%s => current version)-->
<string name="p_about_text">Bieżąca wersja: %s\n\n Astrid is open-source and proudly maintained by Todoroo, Inc.</string>
<string name="p_about_text">Bieżąca wersja: %s\n\n Astrid ma otwarte źródła i jest zarządzana z dumą przez Todoroo, Inc.</string>
<!-- Title of "Help" option in settings -->
<string name="p_help">Pomoc</string>
@ -893,14 +893,14 @@
<string name="EPr_default_reminders_desc">Aktualnie: %s</string>
<!-- Preference: Default Add To Calendar Title -->
<string name="EPr_default_addtocalendar_title">Default Add To Calendar</string>
<string name="EPr_default_addtocalendar_title">Domyślnie dodawaj do kalendarza</string>
<!-- Preference: Default Add To Calendar Setting Description (disabled) -->
<string name="EPr_default_addtocalendar_desc_disabled">New tasks will not create an event in the Google Calendar</string>
<string name="EPr_default_addtocalendar_desc_disabled">Nowe zadania nie utworzą wydarzeń w Kalendarzu Google</string>
<!-- Preference: Default Add To Calendar Setting Description (%s => setting) -->
<string name="EPr_default_addtocalendar_desc">New tasks will be in the calendar: \"%s\"</string>
<string name="EPr_default_addtocalendar_desc">Nowe zadania będą w kalendarzu: \"%s\"</string>
<!-- Reminder Mode Preference: Default Reminders Duration -->
<string name="EPr_default_reminders_mode_title">Default Ring/Vibrate type</string>
<string name="EPr_default_reminders_mode_title">Domyślny dzwonek/wibracja</string>
<!-- Preference: Default Reminders Description (%s => setting) -->
<string name="EPr_default_reminders_mode_desc">Aktualnie: %s</string>
@ -924,17 +924,17 @@
<string-array name="EPr_default_hideUntil">
<!-- hideUntil: labels for "Task Defaults" preference item. -->
<item>Nie ukrywaj</item>
<item>Zadanie jest wymagane</item>
<item>Dzień przez wymaganiem</item>
<item>Tydzień przed wymaganiem</item>
<item>Do terminu zadania</item>
<item>Do dnia przed terminem</item>
<item>Do tygodnia przed terminem</item>
</string-array>
<string-array name="EPr_default_reminders">
<!-- reminders: labels for "Task Defaults" preference item. -->
<item>Brak przypomnień dla terminu nieprzekraczalnego</item>
<item>W dniu terminu nieprzekraczalnego</item>
<item>Brak przypomnień</item>
<item>W dniu terminu</item>
<item>Gdy zaległe</item>
<item>W nieprzekraczalnym terminie lub gdy zaległe</item>
<item>W terminie lub gdy zaległe</item>
</string-array>
<string-array name="EPr_default_addtocalendar">
@ -963,7 +963,7 @@
<string name="BFE_Custom">Własny filtr...</string>
<!-- Saved Filters Header -->
<string name="BFE_Saved">Filters</string>
<string name="BFE_Saved">Filtry</string>
<!-- Saved Filters Context Menu: delete -->
<string name="BFE_Saved_delete">Usuń filtr</string>
@ -1062,19 +1062,19 @@
<string name="gcal_TEA_calendar_label">Integracja z kalendarzem:</string>
<!-- Label for adding task to calendar -->
<string name="gcal_TEA_addToCalendar_label">Add to Calendar</string>
<string name="gcal_TEA_addToCalendar_label">Dodaj do kalendarza</string>
<!-- Label when calendar event already exists -->
<string name="gcal_TEA_showCalendar_label">Otwórz zdarzenie kalendarza</string>
<string name="gcal_TEA_showCalendar_label">Otwórz wydarzenie kalendarza</string>
<!-- Toast when unable to open calendar event -->
<string name="gcal_TEA_calendar_error">Błąd podczas otwierania zdarzenia!</string>
<string name="gcal_TEA_calendar_error">Błąd podczas otwierania wydarzenia!</string>
<!-- Toast when calendar event updated because task changed -->
<string name="gcal_TEA_calendar_updated">Zdarzenie kalendarza również uaktualnione!</string>
<string name="gcal_TEA_calendar_updated">Wydarzenie kalendarza również uaktualnione!</string>
<!-- No calendar label (don't add option) -->
<string name="gcal_TEA_nocal">Don\'t add</string>
<string name="gcal_TEA_nocal">Nie dodawaj</string>
<!-- ======================================================== Calendars == -->
@ -1102,7 +1102,7 @@
<string name="gtasks_FEx_title">Zadania Google: %s</string>
<!-- dialog prompt for creating a new gtasks list -->
<string name="gtasks_FEx_creating_list">Creating list...</string>
<string name="gtasks_FEx_creating_list">Tworzenie listy...</string>
<!-- dialog prompt for creating a new gtasks list -->
<string name="gtasks_FEx_create_list_dialog">Nowa nazwa listy:</string>
@ -1121,10 +1121,10 @@
<string name="CFC_gtasks_list_name">Na liście GTasks...</string>
<!-- Message while clearing completed tasks -->
<string name="gtasks_GTA_clearing">Clearing completed tasks...</string>
<string name="gtasks_GTA_clearing">Czyszczenie zakończonych zadań...</string>
<!-- Label for clear completed menu item -->
<string name="gtasks_GTA_clear_completed">Clear Completed</string>
<string name="gtasks_GTA_clear_completed">Wyczyść zakończone</string>
<!-- ============================================ GtasksLoginActivity == -->
@ -1168,9 +1168,9 @@
<!-- GTasks Preferences Title -->
<string name="gtasks_GPr_header">Google Tasks (Beta!)</string>
<string name="gtasks_GPr_sync_on_save">Synch przy Zapisie</string>
<string name="gtasks_GPr_sync_on_save">Synch. przy Zapisie</string>
<string name="gtasks_GPr_sync_on_save_summary">Synch poszczególne zadania, ponieważ są one zapisane</string>
<string name="gtasks_GPr_sync_on_save_summary">Synch. poszczególne zadania, gdy są one zapisane</string>
<!-- ================================================ Synchronization == -->
@ -1178,16 +1178,16 @@
<string name="gtasks_notification_title">Astrid: Zadania Google</string>
<!-- Error Message when we receive a HTTP 503 error -->
<string name="gtasks_error_backend">Google\'s Task API is in beta and has encountered an error. The service may be down, please try again later.</string>
<string name="gtasks_error_backend">API Zadań Google jest w fazie beta i napotkano błąd. Serwis może być niedostępny, spróbuj ponownie później.</string>
<!-- Error for account not found -->
<string name="gtasks_error_accountNotFound">Account %s not found--please log out and log back in from the Google Tasks settings.</string>
<string name="gtasks_error_accountNotFound">Nie znaleziono konta %s --proszę wyloguj się i zaloguj ponownie w ustawieniach Google Zadań.</string>
<!-- Error when ping after refreshing token fails -->
<string name="gtasks_error_authRefresh">Unable to authenticate with Google Tasks. Please check your account password or try again later.</string>
<string name="gtasks_error_authRefresh">Uwierzytelnienie w Google Zadania nieudane. Proszę, sprawdź poprawność swego hasła lub spróbuj ponownie później.</string>
<!-- Error when account manager returns no auth token or throws exception -->
<string name="gtasks_error_accountManager">Error in your phone\'s account manager. Please log out and log back in from the Google Tasks settings.</string>
<string name="gtasks_error_accountManager">Błąd w menadżerze kont Twojego telefonu. Proszę, wyloguj się i zaloguj ponownie w ustawieniach Google Zadań.</string>
@ -1223,7 +1223,7 @@
</string>
<!-- Task 3 Summary -->
<string name="intro_task_3_summary">Ustaw synch z Astrid.com</string>
<string name="intro_task_3_summary">Ustaw synch. z Astrid.com</string>
<!-- Task 3 Note -->
<string name="intro_task_3_note">
@ -1237,39 +1237,39 @@
<!-- help bubbles -->
<!-- Shown the first time a user sees the task list activity -->
<string name="help_popover_add_task">Add a task here</string>
<string name="help_popover_add_task">Dodaj zadanie tutaj</string>
<!-- Shown the first time a user adds a task to a list -->
<string name="help_popover_tap_task">Tap task to edit and share</string>
<string name="help_popover_tap_task">Puknij zadanie by je edytować i udostępnić</string>
<!-- Shown the first time a user sees the list activity -->
<string name="help_popover_list_settings">Tap to edit or share this list</string>
<string name="help_popover_list_settings">Puknij ustawienia listy by udostępnić całą listę</string>
<!-- Shown the first time a user sees the list settings tab -->
<string name="help_popover_collaborators">Collaborators can help you build your list or finish tasks</string>
<string name="help_popover_collaborators">Współpracownicy mogą Ci pomóc stworzyć listę lub wykonać zadania</string>
<!-- Login activity -->
<string name="welcome_login_title">Witaj w Astrid!</string>
<string name="welcome_login_intro"/>
<string name="welcome_login_tos_base">By using Astrid you agree to the</string>
<string name="welcome_login_tos_base">Używając Astrid zgadzasz się na</string>
<string name="welcome_login_tos_link">\"Terms of Service\"</string>
<string name="welcome_login_tos_link">\"Warunki korzystania z usług\"</string>
<string name="welcome_login_pw">Login with Username/Password</string>
<string name="welcome_login_pw">Zaloguj za pomocą loginu/hasła</string>
<string name="welcome_login_later">Login Later</string>
<string name="welcome_login_later">Zaloguj później</string>
<string name="welcome_login_confirm_later_title">Why not sign in?</string>
<string name="welcome_login_confirm_later_title">Czemu by się nie zalogować?</string>
<string name="welcome_login_confirm_later_ok">I\'ll do it!</string>
<string name="welcome_login_confirm_later_ok">Zrobię to!</string>
<string name="welcome_login_confirm_later_cancel">No thanks</string>
<string name="welcome_login_confirm_later_cancel">Nie, dzięki</string>
<string name="welcome_login_confirm_later_dialog">Sign in to get the most out of Astrid!
For free, you get online backup, full synchronization with Astrid.com, the
ability to add tasks via email, and you can even share task lists with friends!</string>
<string name="welcome_login_confirm_later_dialog">Zaloguj się by wyciągnąć z Astrid jeszcze więcej!
Za darmo otrzymasz kopię zapasową online, pełną synchronizację z Astrid.com,
możliwość dodawania zadań przez e-mail i będziesz mógł dzielić się swoimi listami zadań ze znajomymi!</string>
@ -1389,7 +1389,7 @@
<!-- ================================================= Login Activity == -->
<!-- Activity Title: Opencrx Login -->
<string name="opencrx_PLA_title">Zalogój do OpenCRX</string>
<string name="opencrx_PLA_title">Zaloguj do OpenCRX</string>
<!-- Instructions: Opencrx login -->
<string name="opencrx_PLA_body">Zaloguj się na konto OpenCRX</string>
@ -1617,7 +1617,7 @@
<!-- =============================================== task edit activity == -->
<!-- Task Edit: Reminder group label -->
<string name="TEA_reminders_group_label">Reminders</string>
<string name="TEA_reminders_group_label">Przypomnienia</string>
<!-- Task Edit: Reminder header label -->
<string name="TEA_reminder_label">Przypomnij mi:</string>
@ -1673,11 +1673,11 @@
<string name="rmd_EPr_alerts_header">Ustawienia przypomnienia</string>
<!-- Reminder Preference: Reminders Enabled Title -->
<string name="rmd_EPr_enabled_title">Reminders Enabled?</string>
<string name="rmd_EPr_enabled_title">Przypomnienia włączone?</string>
<!-- Reminder Preference Reminders Enabled Description (true) -->
<string name="rmd_EPr_enabled_desc_true">Astrid reminders are enabled (this is normal)</string>
<string name="rmd_EPr_enabled_desc_true">Przypomnienia Astrid są włączone (to normalne)</string>
<!-- Reminder Preference Reminders Enabled Description (false) -->
<string name="rmd_EPr_enabled_desc_false">Astrid reminders will never appear on your phone</string>
<string name="rmd_EPr_enabled_desc_false">Przypomnienia Astrid nigdy nie pojawią się na Twoim telefonie</string>
<!-- Reminder Preference: Quiet Hours Start Title -->
<string name="rmd_EPr_quiet_hours_start_title">Początek czasu wyciszenia</string>
@ -1732,7 +1732,7 @@
<string name="rmd_EPr_vibrate_desc_false">Astrid nie będzie powiadamiał wibracjami podczas wysyłania powiadomienia</string>
<!-- Reminder Preference: Nagging Title -->
<string name="rmd_EPr_nagging_title">Astrid Zachęta</string>
<string name="rmd_EPr_nagging_title">Zachęta Astrid</string>
<!-- Reminder Preference: Nagging Description (true) -->
<string name="rmd_EPr_nagging_desc_true">Astrid pojawi się podczas przypomnienia</string>
<!-- Reminder Preference: Nagging Description (false) -->
@ -1961,9 +1961,9 @@
<!-- hint when opening repeat interval -->
<string name="repeat_interval_prompt">Odstęp powtarzania</string>
<string name="repeat_never">Never</string>
<string name="repeat_never">Nigdy</string>
<string name="repeat_dont">Don\'t repeat</string>
<string name="repeat_dont">Nie powtarzaj</string>
<string-array name="repeat_interval">
<!-- repeat interval (days,weeks,months,hours,minutes,years) -->
@ -2112,7 +2112,7 @@
<string name="tag_FEx_untagged">Not in any List</string>
<!-- clarifying title for people who have Google and Astrid lists -->
<string name="tag_FEx_untagged_w_astrid">Not in an Astrid List</string>
<string name="tag_FEx_untagged_w_astrid">Poza listą Astrid</string>
<!-- %s => tag name -->
<string name="tag_FEx_name">Lista: %s</string>

@ -328,6 +328,7 @@
<string name="p_showed_collaborators_help">showed_collaborators_help</string>
<string name="p_showed_when_shortcut">showed_when_shortcut</string>
<string name="p_showed_when_row">showed_when_row</string>
<string name="p_tutorial">tutorial</string>
<!-- ============================================================ OTHER == -->

@ -3,6 +3,8 @@
<string name="welcome_show_eula">Accept EULA to get started!</string>
<string name="welcome_setting">Show Tutorial</string>
<string name="welcome_title_1">Welcome to Astrid!</string>
<string name="welcome_title_2">Make lists</string>
<string name="welcome_title_3">Share lists</string>
@ -11,6 +13,8 @@
<string name="welcome_title_6">Discover</string>
<string name="welcome_title_7">Connect now\nto get started!</string>
<string name="welcome_title_7_return">That\'s it!</string>
<string name="welcome_body_1">The perfect personal\nto-do list that works great\nwith friends</string>
<string name="welcome_body_2">Perfect for any list:\nto read, to watch, to buy,\nto visit, to do!</string>
<string name="welcome_body_3">Share lists\nwith friends, housemates,\nor your sweetheart!</string>
@ -19,4 +23,6 @@
<string name="welcome_body_6">Additional features,\nproductivity tips, and\nsuggestions from friends</string>
<string name="welcome_body_7">Login</string>
<string name="welcome_body_7_return">Tap Astrid to return.</string>
</resources>

@ -3,8 +3,9 @@
xmlns:android="http://schemas.android.com/apk/res/android"
android:title="@string/EPr_title">
<PreferenceScreen android:title="" android:key="@string/p_about" />
<PreferenceScreen android:title="" android:key="@string/p_help"/>
<PreferenceScreen android:title="@string/p_about" android:key="@string/p_about" />
<PreferenceScreen android:title="@string/welcome_setting" android:key="@string/p_tutorial"/>
<PreferenceScreen android:title="@string/p_help" android:key="@string/p_help"/>
<PreferenceCategory
android:title="@string/EPr_appearance_header">
<com.todoroo.astrid.ui.MultilineListPreference

@ -38,6 +38,7 @@ import com.todoroo.andlib.utility.AndroidUtilities;
import com.todoroo.andlib.utility.DialogUtilities;
import com.todoroo.andlib.utility.Preferences;
import com.todoroo.andlib.utility.TodorooPreferenceActivity;
import com.todoroo.astrid.actfm.ActFmLoginActivity;
import com.todoroo.astrid.api.AstridApiConstants;
import com.todoroo.astrid.dao.Database;
import com.todoroo.astrid.data.Task;
@ -52,6 +53,7 @@ import com.todoroo.astrid.utility.Constants;
import com.todoroo.astrid.utility.Flags;
import com.todoroo.astrid.voice.VoiceInputAssistant;
import com.todoroo.astrid.voice.VoiceOutputService;
import com.todoroo.astrid.welcome.tutorial.WelcomeWalkthrough;
/**
* Displays the preference screen for users to edit their preferences
@ -61,10 +63,8 @@ import com.todoroo.astrid.voice.VoiceOutputService;
*/
public class EditPreferences extends TodorooPreferenceActivity {
private static final int ABOUT_PREFERENCE = 0; // see preferences.xml for order of prefs
private static final int HELP_PREFERENCE = 1;
private static final int APPEARANCE_PREFERENCE = 2;
private static final int POWER_PACK_PREFERENCE = 3;
private static final int APPEARANCE_PREFERENCE = 3;
private static final int POWER_PACK_PREFERENCE = 4;
public static final int RESULT_CODE_THEME_CHANGED = 1;
@ -101,9 +101,9 @@ public class EditPreferences extends TodorooPreferenceActivity {
screen.getPreference(POWER_PACK_PREFERENCE).setEnabled(addOnService.hasPowerPack());
final Resources r = getResources();
// About pref
Preference preference = screen.getPreference(ABOUT_PREFERENCE);
preference.setTitle(r.getString(R.string.p_about));
// first-order preferences
Preference preference = screen.findPreference(getString(R.string.p_about));
preference.setOnPreferenceClickListener(new OnPreferenceClickListener() {
public boolean onPreferenceClick(Preference p) {
showAbout();
@ -111,9 +111,20 @@ public class EditPreferences extends TodorooPreferenceActivity {
}
});
Preference helpPref = screen.getPreference(HELP_PREFERENCE);
helpPref.setTitle(r.getString(R.string.p_help));
helpPref.setOnPreferenceClickListener(new OnPreferenceClickListener() {
preference = screen.findPreference(getString(R.string.p_tutorial));
preference.setOnPreferenceClickListener(new OnPreferenceClickListener() {
@Override
public boolean onPreferenceClick(Preference p) {
Intent showWelcomeLogin = new Intent(EditPreferences.this, WelcomeWalkthrough.class);
showWelcomeLogin.putExtra(ActFmLoginActivity.SHOW_TOAST, false);
showWelcomeLogin.putExtra(WelcomeWalkthrough.TOKEN_MANUAL_SHOW, true);
startActivity(showWelcomeLogin);
return true;
}
});
preference = screen.findPreference(getString(R.string.p_help));
preference.setOnPreferenceClickListener(new OnPreferenceClickListener() {
@Override
public boolean onPreferenceClick(Preference p) {
showHelp();

@ -3,28 +3,11 @@
*/
package com.todoroo.astrid.activity;
import java.io.IOException;
import java.util.ArrayList;
import java.util.LinkedHashSet;
import java.util.List;
import org.json.JSONException;
import org.weloveastrid.rmilk.MilkPreferences;
import org.weloveastrid.rmilk.MilkUtilities;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.Notification;
import android.app.PendingIntent;
import android.app.PendingIntent.CanceledException;
import android.app.ProgressDialog;
import android.app.SearchManager;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Rect;
@ -45,7 +28,6 @@ import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.view.inputmethod.EditorInfo;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ExpandableListView;
@ -60,30 +42,19 @@ import com.timsu.astrid.R;
import com.todoroo.andlib.service.Autowired;
import com.todoroo.andlib.service.DependencyInjectionService;
import com.todoroo.andlib.service.ExceptionService;
import com.todoroo.andlib.service.NotificationManager;
import com.todoroo.andlib.sql.Functions;
import com.todoroo.andlib.sql.QueryTemplate;
import com.todoroo.andlib.utility.AndroidUtilities;
import com.todoroo.andlib.utility.DateUtilities;
import com.todoroo.andlib.utility.DialogUtilities;
import com.todoroo.andlib.utility.Preferences;
import com.todoroo.astrid.actfm.ActFmPreferences;
import com.todoroo.astrid.actfm.sync.ActFmPreferenceService;
import com.todoroo.astrid.actfm.sync.ActFmSyncService;
import com.todoroo.astrid.activity.TaskListActivity.IntentWithLabel;
import com.todoroo.astrid.adapter.FilterAdapter;
import com.todoroo.astrid.api.AstridApiConstants;
import com.todoroo.astrid.api.Filter;
import com.todoroo.astrid.api.FilterCategory;
import com.todoroo.astrid.api.FilterListItem;
import com.todoroo.astrid.api.SyncAction;
import com.todoroo.astrid.core.CustomFilterActivity;
import com.todoroo.astrid.data.Task;
import com.todoroo.astrid.helper.MetadataHelper;
import com.todoroo.astrid.service.StartupService;
import com.todoroo.astrid.service.StatisticsService;
import com.todoroo.astrid.tags.TagsPlugin;
import com.todoroo.astrid.utility.Constants;
/**
* Activity that displays a user's task lists and allows users
@ -119,11 +90,7 @@ public class FilterListActivity extends ExpandableListFragment {
// --- instance variables
@Autowired ExceptionService exceptionService;
@Autowired ActFmPreferenceService actFmPreferenceService;
@Autowired ActFmSyncService actFmSyncService;
protected SyncActionReceiver syncActionReceiver = new SyncActionReceiver();
private final LinkedHashSet<SyncAction> syncActions = new LinkedHashSet<SyncAction>();
protected FilterAdapter adapter = null;
private boolean mDualFragments;
@ -239,8 +206,6 @@ public class FilterListActivity extends ExpandableListFragment {
startActivity(intent);
} else {
setUpList();
if (actFmPreferenceService.isLoggedIn())
onRefreshRequested(false);
}
}
@ -296,8 +261,6 @@ public class FilterListActivity extends ExpandableListFragment {
adapter.registerRecevier();
// also load sync actions
getActivity().registerReceiver(syncActionReceiver, new android.content.IntentFilter(AstridApiConstants.BROADCAST_SEND_SYNC_ACTIONS));
syncActions.clear();
Intent broadcastIntent = new Intent(AstridApiConstants.BROADCAST_REQUEST_SYNC_ACTIONS);
getActivity().sendOrderedBroadcast(broadcastIntent, AstridApiConstants.PERMISSION_READ);
}
@ -308,7 +271,6 @@ public class FilterListActivity extends ExpandableListFragment {
super.onPause();
if(adapter != null)
adapter.unregisterRecevier();
getActivity().unregisterReceiver(syncActionReceiver);
}
/* ======================================================================
@ -436,11 +398,6 @@ public class FilterListActivity extends ExpandableListFragment {
public boolean onOptionsItemSelected(final MenuItem item) {
// handle my own menus
switch (item.getItemId()) {
case MENU_REFRESH_ID: {
performSyncAction();
//onRefreshRequested(true);
return true;
}
case MENU_SEARCH_ID: {
getActivity().onSearchRequested();
return true;
@ -464,7 +421,6 @@ public class FilterListActivity extends ExpandableListFragment {
}
case CONTEXT_MENU_SHORTCUT: {
ExpandableListContextMenuInfo info = (ExpandableListContextMenuInfo)item.getMenuInfo();
final Intent shortcutIntent = item.getIntent();
FilterListItem filter = ((FilterAdapter.ViewHolder)info.targetView.getTag()).item;
if(filter instanceof Filter)
@ -490,80 +446,6 @@ public class FilterListActivity extends ExpandableListFragment {
return false;
}
/**
* Refresh user tags
*/
private void onRefreshRequested(final boolean manual) {
if (!manual) {
long lastFetchDate = Preferences.getLong(LAST_TAG_REFRESH_KEY, 0);
if(DateUtilities.now() < lastFetchDate + 300000L) {
return;
}
}
final ProgressDialog progressDialog;
final NotificationManager nm = new NotificationManager.AndroidNotificationManager(getActivity());
final Notification notification = new Notification(android.R.drawable.stat_notify_sync, null, System.currentTimeMillis());
final int notificationId = updateNotification(getActivity(), notification);
notification.flags |= Notification.FLAG_ONGOING_EVENT;
if (manual) {
progressDialog = DialogUtilities.progressDialog(getActivity(), getString(R.string.DLG_please_wait));
} else {
progressDialog = null;
nm.notify(notificationId, notification);
}
new Thread(new Runnable() {
@SuppressWarnings("nls")
@Override
public void run() {
try {
Preferences.setLong(LAST_TAG_REFRESH_KEY, DateUtilities.now());
actFmSyncService.fetchTags(0);
Activity activity = getActivity();
if (activity != null) {
getActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
adapter.clear();
adapter.getLists();
}
});
}
} catch (IOException e) {
if (manual)
exceptionService.displayAndReportError(getActivity(), "refresh-tags-io", e);
else
exceptionService.reportError("refresh-tags-io", e);
} catch (JSONException e) {
if (manual)
exceptionService.displayAndReportError(getActivity(), "refresh-tags-json", e);
else
exceptionService.reportError("refresh-tags-io", e);
} finally {
if (manual)
DialogUtilities.dismissDialog(getActivity(), progressDialog);
else
nm.cancel(notificationId);
}
}
}).start();
}
private int updateNotification(Context context, Notification notification) {
String notificationTitle = context.getString(R.string.actfm_notification_title);
Intent intent = new Intent(context, ActFmPreferences.class);
PendingIntent notificationIntent = PendingIntent.getActivity(context, 0,
intent, 0);
notification.setLatestEventInfo(context,
notificationTitle, context.getString(R.string.SyP_progress),
notificationIntent);
return Constants.NOTIFICATION_SYNC;
}
private void showCreateShortcutDialog(final Intent shortcutIntent,
final Filter filter) {
FrameLayout frameLayout = new FrameLayout(getActivity());
@ -617,126 +499,4 @@ public class FilterListActivity extends ExpandableListFragment {
super.onActivityResult(requestCode, resultCode, data);
}
/**
* Receiver which receives sync provider intents
*
* @author Tim Su <tim@todoroo.com>
*
*/
protected class SyncActionReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if(intent == null || !AstridApiConstants.BROADCAST_SEND_SYNC_ACTIONS.equals(intent.getAction()))
return;
try {
Bundle extras = intent.getExtras();
SyncAction syncAction = extras.getParcelable(AstridApiConstants.EXTRAS_RESPONSE);
syncActions.add(syncAction);
} catch (Exception e) {
exceptionService.reportError("receive-sync-action-" + //$NON-NLS-1$
intent.getStringExtra(AstridApiConstants.EXTRAS_ADDON), e);
}
}
}
private void performSyncAction() {
if (syncActions.size() == 0) {
String desiredCategory = getString(R.string.SyP_label);
// Get a list of all sync plugins and bring user to the prefs pane
// for one of them
Intent queryIntent = new Intent(AstridApiConstants.ACTION_SETTINGS);
PackageManager pm = getActivity().getPackageManager();
List<ResolveInfo> resolveInfoList = pm.queryIntentActivities(
queryIntent, PackageManager.GET_META_DATA);
int length = resolveInfoList.size();
ArrayList<Intent> syncIntents = new ArrayList<Intent>();
// Loop through a list of all packages (including plugins, addons)
// that have a settings action: filter to sync actions
for (int i = 0; i < length; i++) {
ResolveInfo resolveInfo = resolveInfoList.get(i);
Intent intent = new Intent(AstridApiConstants.ACTION_SETTINGS);
intent.setClassName(resolveInfo.activityInfo.packageName,
resolveInfo.activityInfo.name);
String category = MetadataHelper.resolveActivityCategoryName(resolveInfo, pm);
if(MilkPreferences.class.getName().equals(resolveInfo.activityInfo.name) &&
!MilkUtilities.INSTANCE.isLoggedIn())
continue;
if (category.equals(desiredCategory)) {
syncIntents.add(new IntentWithLabel(intent,
resolveInfo.activityInfo.loadLabel(pm).toString()));
}
}
final Intent[] actions = syncIntents.toArray(new Intent[syncIntents.size()]);
DialogInterface.OnClickListener listener = new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface click, int which) {
startActivity(actions[which]);
}
};
showSyncOptionMenu(actions, listener);
}
else if(syncActions.size() == 1) {
SyncAction syncAction = syncActions.iterator().next();
try {
if (actFmPreferenceService.isLoggedIn())
onRefreshRequested(true);
else {
syncAction.intent.send();
Toast.makeText(getActivity(), R.string.SyP_progress_toast,
Toast.LENGTH_LONG).show();
}
} catch (CanceledException e) {
//
}
} else {
// We have >1 sync actions, pop up a dialogue so the user can
// select just one of them (only sync one at a time)
final SyncAction[] actions = syncActions.toArray(new SyncAction[syncActions.size()]);
DialogInterface.OnClickListener listener = new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface click, int which) {
try {
SyncAction action = actions[which];
if (action.label.contains("Astrid"))
onRefreshRequested(true);
else {
action.intent.send();
Toast.makeText(getActivity(), R.string.SyP_progress_toast,
Toast.LENGTH_LONG).show();
}
} catch (CanceledException e) {
//
}
}
};
showSyncOptionMenu(actions, listener);
}
}
/**
* Show menu of sync options. This is shown when you're not logged into any services, or logged into
* more than one.
* @param <TYPE>
* @param items
* @param listener
*/
private <TYPE> void showSyncOptionMenu(TYPE[] items, DialogInterface.OnClickListener listener) {
ArrayAdapter<TYPE> syncAdapter = new ArrayAdapter<TYPE>(getActivity(),
android.R.layout.simple_spinner_dropdown_item, items);
// show a menu of available options
new AlertDialog.Builder(getActivity())
.setTitle(R.string.SyP_label)
.setAdapter(syncAdapter, listener)
.show().setOwnerActivity(getActivity());
}
}

@ -26,6 +26,7 @@ import android.content.SharedPreferences.Editor;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import android.database.Cursor;
import android.graphics.PixelFormat;
import android.net.Uri;
import android.os.Bundle;
import android.support.v4.app.Fragment;
@ -44,6 +45,7 @@ import android.view.View.OnClickListener;
import android.view.View.OnKeyListener;
import android.view.View.OnLongClickListener;
import android.view.ViewGroup;
import android.view.WindowManager;
import android.view.inputmethod.EditorInfo;
import android.view.inputmethod.InputMethodManager;
import android.widget.AbsListView;
@ -106,6 +108,8 @@ import com.todoroo.astrid.service.StartupService;
import com.todoroo.astrid.service.StatisticsConstants;
import com.todoroo.astrid.service.StatisticsService;
import com.todoroo.astrid.service.SyncV2Service;
import com.todoroo.astrid.service.SyncV2Service.SyncResultCallback;
import com.todoroo.astrid.service.SyncV2Service.SyncV2Provider;
import com.todoroo.astrid.service.TagDataService;
import com.todoroo.astrid.service.TaskService;
import com.todoroo.astrid.service.UpgradeService;
@ -206,6 +210,8 @@ public class TaskListActivity extends ListFragment implements OnScrollListener,
private boolean isFilter;
private final TaskListContextMenuExtensionLoader contextMenuExtensionLoader = new TaskListContextMenuExtensionLoader();
private SyncResultCallback syncResultCallback;
private VoiceInputAssistant voiceInputAssistant;
// --- fragment handling variables
@ -554,6 +560,18 @@ public class TaskListActivity extends ListFragment implements OnScrollListener,
SharedPreferences publicPrefs = AstridPreferences.getPublicPrefs(getActivity());
sortFlags = publicPrefs.getInt(SortHelper.PREF_SORT_FLAGS, 0);
sortSort = publicPrefs.getInt(SortHelper.PREF_SORT_SORT, 0);
// dithering
getActivity().getWindow().setFormat(PixelFormat.RGBA_8888);
getActivity().getWindow().addFlags(WindowManager.LayoutParams.FLAG_DITHER);
syncResultCallback = new ProgressBarSyncResultCallback(getActivity(),
R.id.progressBar, new Runnable() {
@Override
public void run() {
ContextManager.getContext().sendBroadcast(new Intent(AstridApiConstants.BROADCAST_EVENT_REFRESH));
}
});
}
// Subclasses can override these to customize extras in quickadd intent
@ -1182,18 +1200,15 @@ public class TaskListActivity extends ListFragment implements OnScrollListener,
}
protected void performSyncServiceV2Sync(boolean manual) {
syncService.synchronizeActiveTasks(manual, new ProgressBarSyncResultCallback(getActivity(),
R.id.progressBar, new Runnable() {
@Override
public void run() {
ContextManager.getContext().sendBroadcast(new Intent(AstridApiConstants.BROADCAST_EVENT_REFRESH));
}
}));
syncService.synchronizeActiveTasks(manual, syncResultCallback);
Preferences.setLong(PREF_LAST_AUTO_SYNC, DateUtilities.now());
}
protected void performSyncAction() {
if (syncActions.size() == 0 && !syncService.isActive()) {
List<SyncV2Provider> activeV2Providers = syncService.activeProviders();
int activeSyncs = syncActions.size() + activeV2Providers.size();
if (activeSyncs == 0) {
String desiredCategory = getString(R.string.SyP_label);
// Get a list of all sync plugins and bring user to the prefs pane
@ -1233,21 +1248,35 @@ public class TaskListActivity extends ListFragment implements OnScrollListener,
};
showSyncOptionMenu(actions, listener);
}
else {
performSyncServiceV2Sync(true);
if(syncActions.size() > 0) {
for(SyncAction syncAction : syncActions) {
try {
syncAction.intent.send();
} catch (CanceledException e) {
//
} else {
// We have sync actions, pop up a dialogue so the user can
// select just one of them (only sync one at a time)
final Object[] actions = new Object[activeSyncs];
int i;
for(i = 0; i < activeV2Providers.size(); i++)
actions[i] = activeV2Providers.get(i);
for(SyncAction syncAction : syncActions)
actions[i++] = syncAction;
DialogInterface.OnClickListener listener = new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface click, int which) {
if(actions[which] instanceof SyncAction) {
try {
((SyncAction)actions[which]).intent.send();
Toast.makeText(getActivity(), R.string.SyP_progress_toast,
Toast.LENGTH_LONG).show();
} catch (CanceledException e) {
//
}
} else {
((SyncV2Provider)actions[which]).synchronizeActiveTasks(true, syncResultCallback);
}
}
Toast.makeText(getActivity(), R.string.SyP_progress_toast,
Toast.LENGTH_LONG).show();
}
};
showSyncOptionMenu(actions, listener);
}
}
@ -1259,6 +1288,11 @@ public class TaskListActivity extends ListFragment implements OnScrollListener,
* @param listener
*/
private <TYPE> void showSyncOptionMenu(TYPE[] items, DialogInterface.OnClickListener listener) {
if(items.length == 1) {
listener.onClick(null, 0);
return;
}
ArrayAdapter<TYPE> adapter = new ArrayAdapter<TYPE>(getActivity(),
android.R.layout.simple_spinner_dropdown_item, items);

@ -16,7 +16,6 @@ import android.content.DialogInterface.OnClickListener;
import android.content.Intent;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.res.Resources;
import android.media.AudioManager;
import android.util.Log;
import android.widget.Toast;
@ -37,7 +36,6 @@ import com.todoroo.astrid.backup.BackupConstants;
import com.todoroo.astrid.backup.BackupService;
import com.todoroo.astrid.backup.TasksXmlImporter;
import com.todoroo.astrid.dao.Database;
import com.todoroo.astrid.data.Task;
import com.todoroo.astrid.gtasks.GtasksPreferenceService;
import com.todoroo.astrid.gtasks.sync.GtasksSyncOnSaveService;
import com.todoroo.astrid.opencrx.OpencrxCoreUtils;
@ -139,9 +137,9 @@ public class StartupService {
int defaultTheme = abChooser.getChoiceForOption(ABOptions.AB_THEME_KEY);
if (defaultTheme == 0)
Preferences.setString(R.string.p_theme, "white");
Preferences.setString(R.string.p_theme, "white"); //$NON-NLS-1$
else
Preferences.setString(R.string.p_theme, "black");
Preferences.setString(R.string.p_theme, "black"); //$NON-NLS-1$
} else {
abChooser.setChoiceForOption(ABOptions.AB_THEME_KEY, 0);
Preferences.setLong(AstridPreferences.P_FIRST_LAUNCH, 0);
@ -170,10 +168,6 @@ public class StartupService {
}
AstridPreferences.setCurrentVersion(version);
}
//Startup tasks
// if(latestSetVersion == 0) {
// onFirstTime();
// }
upgradeService.performSecondaryUpgrade(context);
@ -224,49 +218,7 @@ public class StartupService {
hasStartedUp = true;
}
/**
* Create tasks for first time users
*/
private void onFirstTime() {
final Resources r = ContextManager.getResources();
try {
new Thread(new Runnable() {
@Override
public void run() {
database.openForWriting();
if(taskService.countTasks() > 0)
return;
for(int i = 0; i < INTRO_TASKS.length; i += 3)
addIntroTask(r, INTRO_TASKS[i], INTRO_TASKS[i + 1], INTRO_TASKS[i + 2]);
Preferences.setBoolean(AstridPreferences.P_FIRST_ACTION, true);
Preferences.setBoolean(AstridPreferences.P_FIRST_LIST, true);
}
}).start();
} catch (Exception e) {
exceptionService.reportError("on-first-time", e); //$NON-NLS-1$
}
}
private static final int[] INTRO_TASKS = new int[] {
R.string.intro_task_2_summary,
R.string.intro_task_2_note,
Task.URGENCY_DAY_AFTER,
R.string.intro_task_3_summary,
R.string.intro_task_3_note,
Task.URGENCY_NONE,
};
public static final int INTRO_TASK_SIZE = INTRO_TASKS.length / 3;
private void addIntroTask(Resources r, int summary, int note, int dueSetting) {
Task task = new Task();
task.setValue(Task.TITLE, r.getString(summary));
task.setValue(Task.NOTES, r.getString(note));
long dueDate = Task.createDueDate(dueSetting, 0);
task.setValue(Task.DUE_DATE, dueDate);
taskService.save(task);
}
public static final int INTRO_TASK_SIZE = 0;
/**
* If database exists, no tasks but metadata, and a backup file exists, restore it

@ -1,5 +1,9 @@
package com.todoroo.astrid.service;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import com.todoroo.astrid.actfm.sync.ActFmSyncV2Provider;
/**
@ -35,10 +39,36 @@ public class SyncV2Service {
public void finished();
}
public interface SyncV2Provider {
public boolean isActive();
public void synchronizeActiveTasks(boolean manual, SyncResultCallback callback);
public void synchronizeList(Object list, boolean manual, SyncResultCallback callback);
abstract public static class SyncV2Provider {
/**
* @return sync provider name (displayed in sync menu)
*/
abstract public String getName();
/**
* @return true if this provider is logged in
*/
abstract public boolean isActive();
/**
* Synchronize all of user's active tasks
* @param manual whether manually triggered
* @param callback callback object
*/
abstract public void synchronizeActiveTasks(boolean manual, SyncResultCallback callback);
/**
* Synchronize a single list
* @param list object representing list (TaskListActivity-dependent)
* @param manual whether was manually triggered
* @param callback callback object
*/
abstract public void synchronizeList(Object list, boolean manual, SyncResultCallback callback);
@Override
public String toString() {
return getName();
}
}
/*
@ -51,16 +81,17 @@ public class SyncV2Service {
};
/**
* Determine if synchronization is available
* Returns active sync providers
*
* @param callback
*/
public boolean isActive() {
public List<SyncV2Provider> activeProviders() {
ArrayList<SyncV2Provider> actives = new ArrayList<SyncV2Provider>();
for(SyncV2Provider provider : providers) {
if(provider.isActive())
return true;
actives.add(provider);
}
return false;
return Collections.unmodifiableList(actives);
}
/**

@ -14,6 +14,7 @@ import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.pm.PackageManager.NameNotFoundException;
import android.text.TextUtils;
import android.view.WindowManager.BadTokenException;
import com.timsu.astrid.R;
import com.todoroo.andlib.data.Property.StringProperty;
@ -92,8 +93,20 @@ public class UpdateMessageService {
activity.runOnUiThread(new Runnable() {
@Override
public void run() {
DialogUtilities.htmlDialog(activity,
html, R.string.UpS_updates_title);
try {
DialogUtilities.htmlDialog(activity,
html, R.string.UpS_updates_title);
} catch (BadTokenException bt) {
try {
Activity current = (Activity) ContextManager.getContext();
DialogUtilities.htmlDialog(current,
html, R.string.UpS_updates_title);
} catch (ClassCastException c) {
// Oh well, context wasn't an activity
} catch (BadTokenException bt2) {
// Oh well, activity isn't running
}
}
}
});
}

@ -175,17 +175,11 @@ public final class UpgradeService {
StringBuilder changeLog = new StringBuilder();
if (from >= V3_9_2 && from < V3_9_2_2) {
newVersionString(changeLog, "3.9.2.2", new String[] {
"Reduced APK size",
"Fixed bugs with Google Task sync",
});
}
if (from < V3_9_2) {
newVersionString(changeLog, "3.9.2 (01/13/12)", new String[] {
"Made selecting dates and times easier:",
"New tutorial walkthrough for new users",
"Stomped on a few bugs",
newVersionString(changeLog, "3.9.2.2 (1/19/12)", new String[] {
"Astrid now recognizes words like 'tomorrow', 'monday', '!!!' and '2 pm' to set date and importance",
"New tutorial walkthrough for new users. Access it from the settings menu!",
"Reduced APK size",
"Minor UI tweaks, bug fixes",
"Feedback welcomed!"
});
}
@ -193,7 +187,7 @@ public final class UpgradeService {
if (from >= V3_9_1 && from < V3_9_1_1) {
newVersionString(changeLog, "3.9.1.1 (01/06/12)", new String[] {
"Fixed a few bugs:",
" Crash when selecting certain lists",
" Crash when selecting certain lists",
" Some lists not displayed",
" Wrong text color when assigning tasks in Night theme"
});

@ -29,19 +29,28 @@ public class TitleParser {
priorityHelper(task);
}
private static void listHelper(Task task, ArrayList<String> tags) {
public static String trimParenthesis(String pattern){
if (pattern.charAt(0) == '#' || pattern.charAt(0) == '@') {
pattern = pattern.substring(1);
}
if ('(' == pattern.charAt(0)) {
return pattern.substring(1, pattern.length()-2);
}
return pattern;
}
public static void listHelper(Task task, ArrayList<String> tags) {
String inputText = task.getValue(Task.TITLE);
Pattern tagPattern = Pattern.compile("(\\s|^)#([^\\s]+)");
Pattern contextPattern = Pattern.compile("(\\s|^)(@[^\\s]+)");
Pattern tagPattern = Pattern.compile("(\\s|^)#(\\(.*\\)|[^\\s]+)");
Pattern contextPattern = Pattern.compile("(\\s|^)@(\\(.*\\)|[^\\s]+)");
while(true) {
Matcher m = tagPattern.matcher(inputText);
if(m.find()) {
tags.add(m.group(2));
tags.add(TitleParser.trimParenthesis(m.group(2)));
} else {
m = contextPattern.matcher(inputText);
if(m.find()) {
tags.add(m.group(2));
tags.add(TitleParser.trimParenthesis(m.group(2)));
}else{
break;
}

@ -13,6 +13,9 @@ import android.widget.ImageView;
import android.widget.TextView;
import com.timsu.astrid.R;
import com.todoroo.andlib.service.Autowired;
import com.todoroo.andlib.service.DependencyInjectionService;
import com.todoroo.astrid.actfm.sync.ActFmPreferenceService;
import com.viewpagerindicator.TitleProvider;
public class ViewPagerAdapter extends PagerAdapter implements TitleProvider
@ -60,10 +63,20 @@ public class ViewPagerAdapter extends PagerAdapter implements TitleProvider
};
private final Context context;
public WelcomeWalkthrough parent;
@Autowired ActFmPreferenceService actFmPreferenceService;
public ViewPagerAdapter( Context context )
public ViewPagerAdapter( Context context, boolean manual)
{
this.context = context;
DependencyInjectionService.getInstance().inject(this);
if(manual) {
layouts[layouts.length - 1] = R.layout.welcome_walkthrough_page;
title[title.length - 1] = R.string.welcome_title_7_return;
images[images.length - 1] = R.drawable.welcome_walkthrough_1;
body[body.length - 1] = R.string.welcome_body_7_return;
}
}
@ -81,14 +94,15 @@ public class ViewPagerAdapter extends PagerAdapter implements TitleProvider
View pageView = inflater.inflate(layouts[position], null, true);
pageView.setLayoutParams( new ViewGroup.LayoutParams(WindowManager.LayoutParams.MATCH_PARENT, WindowManager.LayoutParams.MATCH_PARENT));
if (position != getCount()-1){
ImageView imageView = (ImageView) pageView.findViewById(R.id.welcome_walkthrough_image);
imageView.setImageResource(images[position]);
if (pageView.findViewById(R.id.welcome_walkthrough_image) != null) {
ImageView imageView = (ImageView) pageView.findViewById(R.id.welcome_walkthrough_image);
imageView.setImageResource(images[position]);
TextView titleView = (TextView) pageView.findViewById(R.id.welcome_walkthrough_title);
titleView.setText(title[position]);
TextView titleView = (TextView) pageView.findViewById(R.id.welcome_walkthrough_title);
titleView.setText(title[position]);
TextView bodyView = (TextView) pageView.findViewById(R.id.welcome_walkthrough_body);
bodyView.setText(body[position]);
TextView bodyView = (TextView) pageView.findViewById(R.id.welcome_walkthrough_body);
bodyView.setText(body[position]);
}
((ViewPager)pager).addView( pageView, 0 );

@ -31,12 +31,14 @@ public class WelcomeWalkthrough extends ActFmLoginActivity {
public static final String KEY_SHOWED_WELCOME_LOGIN = "key_showed_welcome_login"; //$NON-NLS-1$
public static final String TOKEN_MANUAL_SHOW = "manual"; //$NON-NLS-1$
@Override
protected void onCreate(Bundle savedInstanceState) {
requestWindowFeature(Window.FEATURE_NO_TITLE);
super.onCreate(savedInstanceState);
mAdapter = new ViewPagerAdapter(this);
mAdapter = new ViewPagerAdapter(this, getIntent().hasExtra(TOKEN_MANUAL_SHOW));
mAdapter.parent = this;
mPager = (ViewPager)findViewById(R.id.pager);
@ -44,6 +46,7 @@ public class WelcomeWalkthrough extends ActFmLoginActivity {
mIndicator = (CirclePageIndicator)findViewById(R.id.indicator);
mIndicator.setViewPager(mPager);
}
@Override
protected int getContentViewResource() {
@ -68,10 +71,22 @@ public class WelcomeWalkthrough extends ActFmLoginActivity {
protected void initializeUI() {
if(mAdapter == null)
return;
if(currentPage == mAdapter.getCount()-1){
super.initializeUI();
setupTermsOfService();
setupLoginLater();
if(currentPage == mAdapter.getCount()-1) {
if(findViewById(R.id.fb_login) != null) {
super.initializeUI();
setupTermsOfService();
setupLoginLater();
} else {
OnClickListener done = new OnClickListener() {
@Override
public void onClick(View arg0) {
finish();
}
};
currentView.findViewById(R.id.welcome_walkthrough_title).setOnClickListener(done);
currentView.findViewById(R.id.welcome_walkthrough_image).setOnClickListener(done);
}
}
}
@ -106,12 +121,6 @@ public class WelcomeWalkthrough extends ActFmLoginActivity {
Button pwLogin = (Button) findViewById(R.id.pw_login);
pwLogin.setOnClickListener(signUpListener);
}
/*
protected void setupWalkthroughLogin() {
Button loginButton = (Button)currentView.findViewById(R.id.walkthrough_login);
loginButton.setOnClickListener(showWalkthroughLoginListener);
}*/
protected void setupLoginLater() {
TextView loginLater = (TextView)currentView.findViewById(R.id.login_later);

@ -1,6 +1,7 @@
package com.todoroo.andlib.utility;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
@ -10,6 +11,7 @@ import com.timsu.astrid.R;
import com.todoroo.astrid.data.Task;
import com.todoroo.astrid.service.TaskService;
import com.todoroo.astrid.test.DatabaseTestCase;
import com.todoroo.astrid.utility.TitleParser;
public class TitleParserTest extends DatabaseTestCase {
@ -504,6 +506,48 @@ public class TitleParserTest extends DatabaseTestCase {
//----------------Repeats end----------------//
//----------------Tags begin----------------//
/** tests all words using priority 0 */
public void testTagsPound() throws Exception {
String[] acceptedStrings = {
"#tag",
"#a",
"#(a cool tag)",
"#(cool)"
};
TaskService taskService = new TaskService();
Task task = new Task();
for (String acceptedString:acceptedStrings){
task = new Task();
task.setValue(Task.TITLE, "Jog " + acceptedString); //test at end of task. should set importance.
ArrayList<String> tags = new ArrayList<String>();
TitleParser.listHelper(task, tags);
assertTrue("test pound at failed for string: " + acceptedString + " for tags: " + tags.toString(),tags.contains(TitleParser.trimParenthesis(acceptedString)));
}
}
/** tests all words using priority 0 */
public void testTagsAt() throws Exception {
String[] acceptedStrings = {
"@tag",
"@a",
"@(a cool tag)",
"@(cool)"
};
TaskService taskService = new TaskService();
Task task = new Task();
for (String acceptedString:acceptedStrings){
task = new Task();
task.setValue(Task.TITLE, "Jog " + acceptedString); //test at end of task. should set importance.
ArrayList<String> tags = new ArrayList<String>();
TitleParser.listHelper(task, tags);
assertTrue("testTagsAt failed for string: " + acceptedString+ " for tags: " + tags.toString(),tags.contains(TitleParser.trimParenthesis(acceptedString)));
}
}
//----------------Priority end----------------//
}

Loading…
Cancel
Save