diff --git a/src/main/AndroidManifest.xml b/src/main/AndroidManifest.xml index 8d364bb4b..da1e87bd1 100644 --- a/src/main/AndroidManifest.xml +++ b/src/main/AndroidManifest.xml @@ -345,6 +345,10 @@ android:theme="@android:style/Theme" android:screenOrientation="portrait"/> + + diff --git a/src/main/java/com/todoroo/astrid/gtasks/GtasksPreferenceService.java b/src/main/java/com/todoroo/astrid/gtasks/GtasksPreferenceService.java index 171176371..6abc47aae 100644 --- a/src/main/java/com/todoroo/astrid/gtasks/GtasksPreferenceService.java +++ b/src/main/java/com/todoroo/astrid/gtasks/GtasksPreferenceService.java @@ -7,7 +7,6 @@ package com.todoroo.astrid.gtasks; import com.todoroo.andlib.utility.DateUtilities; -import org.tasks.R; import org.tasks.preferences.Preferences; import javax.inject.Inject; @@ -38,10 +37,6 @@ public class GtasksPreferenceService { return IDENTIFIER; } - public int getSyncIntervalKey() { - return R.string.gtasks_GPr_interval_key; - } - public String getDefaultList() { return preferences.getStringValue(PREF_DEFAULT_LIST); } diff --git a/src/main/java/com/todoroo/astrid/gtasks/GtasksPreferences.java b/src/main/java/com/todoroo/astrid/gtasks/GtasksPreferences.java index 615a78c61..c35b11a1c 100644 --- a/src/main/java/com/todoroo/astrid/gtasks/GtasksPreferences.java +++ b/src/main/java/com/todoroo/astrid/gtasks/GtasksPreferences.java @@ -5,20 +5,15 @@ */ package com.todoroo.astrid.gtasks; -import android.app.AlertDialog; -import android.content.DialogInterface; import android.content.Intent; -import android.content.res.Resources; import android.graphics.Color; import android.os.Bundle; import android.preference.Preference; -import android.preference.PreferenceCategory; import android.view.View; import android.view.ViewGroup; import com.todoroo.andlib.utility.AndroidUtilities; import com.todoroo.andlib.utility.DateUtilities; -import com.todoroo.andlib.utility.DialogUtilities; import com.todoroo.astrid.gtasks.auth.GtasksLoginActivity; import com.todoroo.astrid.gtasks.sync.GtasksSyncV2Provider; import com.todoroo.astrid.utility.TodorooPreferenceActivity; @@ -26,31 +21,16 @@ import com.todoroo.astrid.utility.TodorooPreferenceActivity; import org.tasks.R; import org.tasks.scheduling.BackgroundScheduler; -import java.util.HashMap; -import java.util.Set; - import javax.inject.Inject; import static org.tasks.date.DateTimeUtils.newDate; -/** - * Displays synchronization preferences and an action panel so users can - * initiate actions from the menu. - * - * @author Tim Su - * - */ public class GtasksPreferences extends TodorooPreferenceActivity { @Inject GtasksPreferenceService gtasksPreferenceService; @Inject GtasksSyncV2Provider gtasksSyncV2Provider; @Inject BackgroundScheduler backgroundScheduler; - @Override - public int getPreferenceResource() { - return R.xml.preferences_gtasks; - } - private void startSync() { if (!gtasksPreferenceService.isLoggedIn()) { startLogin(); @@ -82,10 +62,6 @@ public class GtasksPreferences extends TodorooPreferenceActivity { startActivityForResult(intent, REQUEST_LOGIN); } - public void logOut() { - gtasksSyncV2Provider.signOut(); - } - @Override protected void onPause() { super.onPause(); @@ -103,6 +79,9 @@ public class GtasksPreferences extends TodorooPreferenceActivity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); + + addPreferencesFromResource(R.xml.preferences_gtasks); + getListView().setOnHierarchyChangeListener(new ViewGroup.OnHierarchyChangeListener() { @Override @@ -112,7 +91,7 @@ public class GtasksPreferences extends TodorooPreferenceActivity { @Override public void onChildViewAdded(View parent, View child) { - View view = findViewById(org.tasks.R.id.status); + View view = findViewById(R.id.status); if(view != null) { view.setBackgroundColor(statusColor); } @@ -122,176 +101,77 @@ public class GtasksPreferences extends TodorooPreferenceActivity { @Override public void updatePreferences(Preference preference, Object value) { - final Resources r = getResources(); - // interval - if (r.getString(gtasksPreferenceService.getSyncIntervalKey()).equals( - preference.getKey())) { - int index = AndroidUtilities.indexOf( - r.getStringArray(org.tasks.R.array.sync_SPr_interval_values), - value); - if (index <= 0) { - preference.setSummary(org.tasks.R.string.sync_SPr_interval_desc_disabled); - } else { - preference.setSummary(r.getString( - org.tasks.R.string.sync_SPr_interval_desc, - r.getStringArray(org.tasks.R.array.sync_SPr_interval_entries)[index])); - } + if (getString(R.string.gtasks_GPr_interval_key).equals(preference.getKey())) { + updateSyncInterval(preference, value); + } else if (getString(R.string.sync_SPr_status_key).equals(preference.getKey())) { + updateStatus(preference); } + } - // status - else if (r.getString(org.tasks.R.string.sync_SPr_status_key).equals(preference.getKey())) { - boolean loggedIn = gtasksPreferenceService.isLoggedIn(); - String status; - //String subtitle = ""; //$NON-NLS-1$ - - // ! logged in - display message, click -> sync - if(!loggedIn) { - status = r.getString(org.tasks.R.string.sync_status_loggedout); - statusColor = Color.rgb(19, 132, 165); - } - // sync is occurring - else if(gtasksPreferenceService.isOngoing()) { - status = r.getString(org.tasks.R.string.sync_status_ongoing); - statusColor = Color.rgb(0, 0, 100); - } - // last sync had errors - else if(gtasksPreferenceService.getLastError() != null || gtasksPreferenceService.getLastAttemptedSyncDate() != 0) { - // last sync was failure - if(gtasksPreferenceService.getLastAttemptedSyncDate() != 0) { - status = r.getString(org.tasks.R.string.sync_status_failed, - DateUtilities.getDateStringWithTime(GtasksPreferences.this, - newDate(gtasksPreferenceService.getLastAttemptedSyncDate()))); - statusColor = Color.rgb(100, 0, 0); - } else { - long lastSyncDate = gtasksPreferenceService.getLastSyncDate(); - String dateString = lastSyncDate > 0 ? - DateUtilities.getDateStringWithTime(GtasksPreferences.this, - newDate(lastSyncDate)) : ""; //$NON-NLS-1$ - status = r.getString(org.tasks.R.string.sync_status_errors, dateString); - statusColor = Color.rgb(100, 100, 0); - } - } - else if(gtasksPreferenceService.getLastSyncDate() > 0) { - status = r.getString(org.tasks.R.string.sync_status_success, - DateUtilities.getDateStringWithTime(GtasksPreferences.this, - newDate(gtasksPreferenceService.getLastSyncDate()))); - statusColor = Color.rgb(0, 100, 0); - } else { - status = r.getString(org.tasks.R.string.sync_status_never); - statusColor = Color.rgb(0, 0, 100); - } - preference.setTitle(org.tasks.R.string.sync_SPr_sync); - preference.setSummary(r.getString(org.tasks.R.string.sync_SPr_status_subtitle, status)); - - preference.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() { - @Override - public boolean onPreferenceClick(Preference p) { - startSync(); - return true; - } - }); - - View view = findViewById(org.tasks.R.id.status); - if(view != null) { - view.setBackgroundColor(statusColor); - } + private void updateSyncInterval(Preference preference, Object value) { + int index = AndroidUtilities.indexOf(getResources().getStringArray(R.array.sync_SPr_interval_values), value); + if (index == -1) { + index = 0; } - else if (r.getString(org.tasks.R.string.sync_SPr_key_last_error).equals(preference.getKey())) { - if (gtasksPreferenceService.getLastError() != null) { - // Display error - final String service = getTitle().toString(); - final String lastErrorFull = gtasksPreferenceService.getLastError(); - final String lastErrorDisplay = adjustErrorForDisplay(r, lastErrorFull, service); - preference.setTitle(org.tasks.R.string.sync_SPr_last_error); - preference.setSummary(org.tasks.R.string.sync_SPr_last_error_subtitle); + preference.setSummary(getResources().getStringArray(R.array.sync_SPr_interval_entries)[index]); + } - preference.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() { - @Override - public boolean onPreferenceClick(Preference pref) { - // Show last error - new AlertDialog.Builder(GtasksPreferences.this) - .setTitle(org.tasks.R.string.sync_SPr_last_error) - .setMessage(lastErrorDisplay) - .setPositiveButton(org.tasks.R.string.sync_SPr_send_report, new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - Intent emailIntent = new Intent(Intent.ACTION_SEND); - emailIntent.setType("plain/text") - .putExtra(Intent.EXTRA_EMAIL, new String[] { "baker.alex@gmail.com"} ) - .putExtra(Intent.EXTRA_SUBJECT, service + " Sync Error") - .putExtra(Intent.EXTRA_TEXT, lastErrorFull); - startActivity(Intent.createChooser(emailIntent, r.getString(org.tasks.R.string.sync_SPr_send_report))); - } - }) - .setNegativeButton(org.tasks.R.string.DLG_close, null) - .create().show(); - return true; - } - }); + private void updateStatus(Preference preference) { + boolean loggedIn = gtasksPreferenceService.isLoggedIn(); + String status; + //String subtitle = ""; //$NON-NLS-1$ - } else { - PreferenceCategory statusCategory = (PreferenceCategory) findPreference(r.getString(org.tasks.R.string.sync_SPr_group_status)); - statusCategory.removePreference(findPreference(r.getString(org.tasks.R.string.sync_SPr_key_last_error))); - } + // ! logged in - display message, click -> sync + if(!loggedIn) { + status = getString(R.string.sync_status_loggedout); + statusColor = Color.rgb(19, 132, 165); } - // log out button - else if (r.getString(org.tasks.R.string.sync_SPr_forget_key).equals(preference.getKey())) { - boolean loggedIn = gtasksPreferenceService.isLoggedIn(); - preference.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() { - @Override - public boolean onPreferenceClick(Preference p) { - DialogUtilities.okCancelDialog(GtasksPreferences.this, - r.getString(org.tasks.R.string.sync_forget_confirm), new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, - int which) { - logOut(); - finish(); - } - }, null - ); - return true; - } - }); - if(!loggedIn) { - PreferenceCategory category = (PreferenceCategory) findPreference(r.getString(org.tasks.R.string.sync_SPr_key_options)); - category.removePreference(preference); + // sync is occurring + else if(gtasksPreferenceService.isOngoing()) { + status = getString(R.string.sync_status_ongoing); + statusColor = Color.rgb(0, 0, 100); + } + // last sync had errors + else if(gtasksPreferenceService.getLastError() != null || gtasksPreferenceService.getLastAttemptedSyncDate() != 0) { + // last sync was failure + if(gtasksPreferenceService.getLastAttemptedSyncDate() != 0) { + status = getString(R.string.sync_status_failed, + DateUtilities.getDateStringWithTime(GtasksPreferences.this, + newDate(gtasksPreferenceService.getLastAttemptedSyncDate()))); + statusColor = Color.rgb(100, 0, 0); + } else { + long lastSyncDate = gtasksPreferenceService.getLastSyncDate(); + String dateString = lastSyncDate > 0 ? + DateUtilities.getDateStringWithTime(GtasksPreferences.this, + newDate(lastSyncDate)) : ""; //$NON-NLS-1$ + status = getString(R.string.sync_status_errors, dateString); + statusColor = Color.rgb(100, 100, 0); } - } - } - - /** - * We can define exception strings in this map that we want to replace with more user-friendly - * messages. As we discover new exception types, we can expand the map. - * - * NOTE: All resources are currently required to have a single string format argument - * for inserting the service name into the error message - */ - private static HashMap exceptionsToDisplayMessages; - - private static HashMap getExceptionMap() { - if (exceptionsToDisplayMessages == null) { - exceptionsToDisplayMessages = new HashMap<>(); - exceptionsToDisplayMessages.put("java.net.ConnectionException", org.tasks.R.string.sync_error_offline); - exceptionsToDisplayMessages.put("java.net.UnknownHostException", org.tasks.R.string.sync_error_offline); + else if(gtasksPreferenceService.getLastSyncDate() > 0) { + status = getString(R.string.sync_status_success, + DateUtilities.getDateStringWithTime(GtasksPreferences.this, + newDate(gtasksPreferenceService.getLastSyncDate()))); + statusColor = Color.rgb(0, 100, 0); + } else { + status = getString(R.string.sync_status_never); + statusColor = Color.rgb(0, 0, 100); } - return exceptionsToDisplayMessages; - } + preference.setTitle(R.string.sync_SPr_sync); + preference.setSummary(getString(R.string.sync_SPr_status_subtitle, status)); - private static String adjustErrorForDisplay(Resources r, String lastError, String service) { - Set exceptions = getExceptionMap().keySet(); - Integer resource = null; - for (String key : exceptions) { - if (lastError.contains(key)) { - resource = getExceptionMap().get(key); - break; + preference.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() { + @Override + public boolean onPreferenceClick(Preference p) { + startSync(); + return true; } + }); + + View view = findViewById(R.id.status); + if(view != null) { + view.setBackgroundColor(statusColor); } - if (resource == null) { - return lastError; - } - return r.getString(resource, service); } } diff --git a/src/main/java/com/todoroo/astrid/utility/TodorooPreferenceActivity.java b/src/main/java/com/todoroo/astrid/utility/TodorooPreferenceActivity.java index 284f36430..038d709f0 100644 --- a/src/main/java/com/todoroo/astrid/utility/TodorooPreferenceActivity.java +++ b/src/main/java/com/todoroo/astrid/utility/TodorooPreferenceActivity.java @@ -12,7 +12,6 @@ package com.todoroo.astrid.utility; import android.content.SharedPreferences; -import android.os.Bundle; import android.preference.CheckBoxPreference; import android.preference.ListPreference; import android.preference.Preference; @@ -33,10 +32,6 @@ import javax.inject.Inject; */ abstract public class TodorooPreferenceActivity extends InjectingPreferenceActivity { - // --- abstract methods - - public abstract int getPreferenceResource(); - /** * Update preferences for the given preference * @param value setting. may be null. @@ -47,13 +42,6 @@ abstract public class TodorooPreferenceActivity extends InjectingPreferenceActiv @Inject Preferences preferences; - @Override - public void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - - addPreferencesFromResource(getPreferenceResource()); - } - @Override public SharedPreferences getSharedPreferences(String name, int mode) { return preferences.getPrefs(); diff --git a/src/main/java/org/tasks/activities/ClearGtaskDataActivity.java b/src/main/java/org/tasks/activities/ClearGtaskDataActivity.java new file mode 100644 index 000000000..2a1c6eb48 --- /dev/null +++ b/src/main/java/org/tasks/activities/ClearGtaskDataActivity.java @@ -0,0 +1,37 @@ +package org.tasks.activities; + +import android.content.DialogInterface; +import android.os.Bundle; + +import com.todoroo.andlib.utility.DialogUtilities; +import com.todoroo.astrid.gtasks.sync.GtasksSyncV2Provider; + +import org.tasks.R; +import org.tasks.injection.InjectingActivity; + +import javax.inject.Inject; + +public class ClearGtaskDataActivity extends InjectingActivity { + + @Inject GtasksSyncV2Provider gtasksSyncV2Provider; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + DialogUtilities.okCancelDialog(ClearGtaskDataActivity.this, + getString(R.string.sync_forget_confirm), new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + gtasksSyncV2Provider.signOut(); + finish(); + } + }, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + finish(); + } + } + ); + } +} diff --git a/src/main/java/org/tasks/injection/ActivityModule.java b/src/main/java/org/tasks/injection/ActivityModule.java index f8267e149..e0f1ffa0e 100644 --- a/src/main/java/org/tasks/injection/ActivityModule.java +++ b/src/main/java/org/tasks/injection/ActivityModule.java @@ -25,6 +25,7 @@ import com.todoroo.astrid.tags.RenameTagActivity; import com.todoroo.astrid.widget.WidgetConfigActivity; import org.tasks.activities.ClearAllDataActivity; +import org.tasks.activities.ClearGtaskDataActivity; import org.tasks.activities.DeleteAllCalendarEventsActivity; import org.tasks.activities.DeleteCompletedActivity; import org.tasks.activities.DeleteCompletedEventsActivity; @@ -72,7 +73,8 @@ import dagger.Provides; PurgeDeletedActivity.class, DeleteCompletedActivity.class, DeleteCompletedEventsActivity.class, - DeleteAllCalendarEventsActivity.class + DeleteAllCalendarEventsActivity.class, + ClearGtaskDataActivity.class }) public class ActivityModule { diff --git a/src/main/res/values/keys.xml b/src/main/res/values/keys.xml index afed4c5d7..67a59e404 100644 --- a/src/main/res/values/keys.xml +++ b/src/main/res/values/keys.xml @@ -203,13 +203,7 @@ sync_status - - sync_forget - - sync_options - - sync_last_error - + gtasks_sync_freq diff --git a/src/main/res/values/strings.xml b/src/main/res/values/strings.xml index c16c64dc6..b7071edb9 100644 --- a/src/main/res/values/strings.xml +++ b/src/main/res/values/strings.xml @@ -44,9 +44,6 @@ Information - - Close - Oops, looks like an error occurred! Here\'s what happened:\n\n%s @@ -55,9 +52,6 @@ - - Status - Status: %s @@ -73,27 +67,12 @@ Never synchronized! - - Options - Background sync - - Background synchronization is disabled - - Currently set to: %s Synchronize now - - Status report - - - Click to send a report to the Tasks team - - Send report - Log out @@ -102,9 +81,6 @@ Log out/clear synchronization data? - - There was a problem connecting to the network - during the last sync with %s. Please try again later. Hide due dates Hide checkboxes Hide header diff --git a/src/main/res/xml/preferences_gtasks.xml b/src/main/res/xml/preferences_gtasks.xml index a0b360db9..f412d3be3 100644 --- a/src/main/res/xml/preferences_gtasks.xml +++ b/src/main/res/xml/preferences_gtasks.xml @@ -1,44 +1,29 @@ - - - - - - - - - - - - - - - - - - - - + + + + + + + + + +