From 2e3d422509322f70330eb4db93a1555a84ee6b61 Mon Sep 17 00:00:00 2001 From: Alex Baker Date: Wed, 18 May 2016 16:37:28 -0500 Subject: [PATCH] Set default google task list --- .../injection/DialogFragmentComponent.java | 8 +++ .../injection/DialogFragmentComponent.java | 8 +++ .../astrid/gtasks/GtasksPreferences.java | 34 ++++++++- .../gtasks/sync/GtasksSyncV2Provider.java | 3 + .../GoogleTaskListSelectionDialog.java | 70 +++++++++++++++++++ .../injection/DialogFragmentComponent.java | 12 ++++ src/googleplay/res/values/keys.xml | 1 + .../com/todoroo/astrid/gtasks/GtasksList.java | 7 ++ .../activities/CalendarSelectionDialog.java | 2 +- ....java => BaseDialogFragmentComponent.java} | 12 ++-- src/main/res/xml/preferences_gtasks.xml | 5 ++ 11 files changed, 152 insertions(+), 10 deletions(-) create mode 100644 src/amazon/java/org/tasks/injection/DialogFragmentComponent.java create mode 100644 src/generic/java/org/tasks/injection/DialogFragmentComponent.java create mode 100644 src/googleplay/java/org/tasks/activities/GoogleTaskListSelectionDialog.java create mode 100644 src/googleplay/java/org/tasks/injection/DialogFragmentComponent.java rename src/main/java/org/tasks/injection/{DialogFragmentComponent.java => BaseDialogFragmentComponent.java} (88%) diff --git a/src/amazon/java/org/tasks/injection/DialogFragmentComponent.java b/src/amazon/java/org/tasks/injection/DialogFragmentComponent.java new file mode 100644 index 000000000..cd797cb1d --- /dev/null +++ b/src/amazon/java/org/tasks/injection/DialogFragmentComponent.java @@ -0,0 +1,8 @@ +package org.tasks.injection; + +import dagger.Subcomponent; + +@Subcomponent(modules = DialogFragmentModule.class) +public interface DialogFragmentComponent extends BaseDialogFragmentComponent { + +} diff --git a/src/generic/java/org/tasks/injection/DialogFragmentComponent.java b/src/generic/java/org/tasks/injection/DialogFragmentComponent.java new file mode 100644 index 000000000..cd797cb1d --- /dev/null +++ b/src/generic/java/org/tasks/injection/DialogFragmentComponent.java @@ -0,0 +1,8 @@ +package org.tasks.injection; + +import dagger.Subcomponent; + +@Subcomponent(modules = DialogFragmentModule.class) +public interface DialogFragmentComponent extends BaseDialogFragmentComponent { + +} diff --git a/src/googleplay/java/com/todoroo/astrid/gtasks/GtasksPreferences.java b/src/googleplay/java/com/todoroo/astrid/gtasks/GtasksPreferences.java index f2fc39046..fce71ad2a 100644 --- a/src/googleplay/java/com/todoroo/astrid/gtasks/GtasksPreferences.java +++ b/src/googleplay/java/com/todoroo/astrid/gtasks/GtasksPreferences.java @@ -5,6 +5,7 @@ */ package com.todoroo.astrid.gtasks; +import android.app.FragmentManager; import android.content.Intent; import android.content.pm.PackageManager; import android.os.Bundle; @@ -16,6 +17,7 @@ import com.todoroo.astrid.gtasks.auth.GtasksLoginActivity; import org.tasks.R; import org.tasks.activities.ClearGtaskDataActivity; +import org.tasks.activities.GoogleTaskListSelectionDialog; import org.tasks.injection.ActivityComponent; import org.tasks.injection.InjectingPreferenceActivity; import org.tasks.preferences.ActivityPermissionRequestor; @@ -24,7 +26,9 @@ import org.tasks.scheduling.BackgroundScheduler; import javax.inject.Inject; -public class GtasksPreferences extends InjectingPreferenceActivity { +public class GtasksPreferences extends InjectingPreferenceActivity implements GoogleTaskListSelectionDialog.GoogleTaskListSelectionHandler { + + private static final String FRAG_TAG_GOOGLE_TASK_LIST_SELECTION = "frag_tag_google_task_list_selection"; private static final int REQUEST_LOGIN = 0; private static final int REQUEST_LOGOUT = 1; @@ -32,6 +36,7 @@ public class GtasksPreferences extends InjectingPreferenceActivity { @Inject GtasksPreferenceService gtasksPreferenceService; @Inject BackgroundScheduler backgroundScheduler; @Inject ActivityPermissionRequestor permissionRequestor; + @Inject GtasksListService gtasksListService; @Override public void onCreate(Bundle savedInstanceState) { @@ -67,6 +72,19 @@ public class GtasksPreferences extends InjectingPreferenceActivity { return true; } }); + getPref(R.string.p_gtasks_default_list).setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() { + @Override + public boolean onPreferenceClick(Preference preference) { + FragmentManager fragmentManager = getFragmentManager(); + GoogleTaskListSelectionDialog dialog = (GoogleTaskListSelectionDialog) fragmentManager.findFragmentByTag(FRAG_TAG_GOOGLE_TASK_LIST_SELECTION); + if (dialog == null) { + dialog = new GoogleTaskListSelectionDialog(); + dialog.show(fragmentManager, FRAG_TAG_GOOGLE_TASK_LIST_SELECTION); + } + return false; + } + }); + updateDefaultGoogleTaskList(); } private void requestLogin() { @@ -107,4 +125,18 @@ public class GtasksPreferences extends InjectingPreferenceActivity { public void inject(ActivityComponent component) { component.inject(this); } + + @Override + public void selectedList(GtasksList list) { + String listId = list.getRemoteId(); + gtasksPreferenceService.setDefaultList(listId); + updateDefaultGoogleTaskList(); + } + + private void updateDefaultGoogleTaskList() { + GtasksList list = gtasksListService.getList(gtasksPreferenceService.getDefaultList()); + if (list != null) { + getPref(R.string.p_gtasks_default_list).setSummary(list.getName()); + } + } } diff --git a/src/googleplay/java/com/todoroo/astrid/gtasks/sync/GtasksSyncV2Provider.java b/src/googleplay/java/com/todoroo/astrid/gtasks/sync/GtasksSyncV2Provider.java index a585a5ea6..f022e85f3 100644 --- a/src/googleplay/java/com/todoroo/astrid/gtasks/sync/GtasksSyncV2Provider.java +++ b/src/googleplay/java/com/todoroo/astrid/gtasks/sync/GtasksSyncV2Provider.java @@ -139,6 +139,9 @@ public class GtasksSyncV2Provider { nextPageToken = remoteLists.getNextPageToken(); } while (nextPageToken != null); gtasksListService.updateLists(gtaskLists); + if (gtasksListService.getList(gtasksPreferenceService.getDefaultList()) == null) { + gtasksPreferenceService.setDefaultList(null); + } } catch (IOException e) { handler.handleException(e); } diff --git a/src/googleplay/java/org/tasks/activities/GoogleTaskListSelectionDialog.java b/src/googleplay/java/org/tasks/activities/GoogleTaskListSelectionDialog.java new file mode 100644 index 000000000..4d5c61521 --- /dev/null +++ b/src/googleplay/java/org/tasks/activities/GoogleTaskListSelectionDialog.java @@ -0,0 +1,70 @@ +package org.tasks.activities; + +import android.app.Activity; +import android.app.Dialog; +import android.content.DialogInterface; +import android.os.Bundle; + +import com.google.common.base.Function; +import com.todoroo.astrid.gtasks.GtasksList; +import com.todoroo.astrid.gtasks.GtasksListService; + +import org.tasks.dialogs.DialogBuilder; +import org.tasks.injection.DialogFragmentComponent; +import org.tasks.injection.InjectingDialogFragment; + +import java.util.List; + +import javax.inject.Inject; + +import static com.google.common.collect.Lists.transform; + +public class GoogleTaskListSelectionDialog extends InjectingDialogFragment { + + public interface GoogleTaskListSelectionHandler { + void selectedList(GtasksList list); + } + + @Inject DialogBuilder dialogBuilder; + @Inject GtasksListService gtasksListService; + + private GoogleTaskListSelectionHandler handler; + + @Override + public Dialog onCreateDialog(Bundle savedInstanceState) { + final List lists = gtasksListService.getLists(); + List listNames = transform(lists, new Function() { + @Override + public String apply(GtasksList gtasksList) { + return gtasksList.getName(); + } + }); + return dialogBuilder.newDialog() + .setItems(listNames.toArray(new String[listNames.size()]), new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + handler.selectedList(lists.get(which)); + dialog.dismiss(); + } + }) + .setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + } + }) + .show(); + } + + @Override + public void onAttach(Activity activity) { + super.onAttach(activity); + + handler = (GoogleTaskListSelectionHandler) activity; + } + + @Override + protected void inject(DialogFragmentComponent component) { + component.inject(this); + } +} diff --git a/src/googleplay/java/org/tasks/injection/DialogFragmentComponent.java b/src/googleplay/java/org/tasks/injection/DialogFragmentComponent.java new file mode 100644 index 000000000..e806aa149 --- /dev/null +++ b/src/googleplay/java/org/tasks/injection/DialogFragmentComponent.java @@ -0,0 +1,12 @@ +package org.tasks.injection; + +import org.tasks.activities.GoogleTaskListSelectionDialog; + +import dagger.Subcomponent; + +@Subcomponent(modules = DialogFragmentModule.class) +public interface DialogFragmentComponent extends BaseDialogFragmentComponent { + + void inject(GoogleTaskListSelectionDialog googleTaskListSelectionDialog); + +} diff --git a/src/googleplay/res/values/keys.xml b/src/googleplay/res/values/keys.xml index 1c1ea9acf..6578f0322 100644 --- a/src/googleplay/res/values/keys.xml +++ b/src/googleplay/res/values/keys.xml @@ -7,4 +7,5 @@ themes dashclock_filter If you purchased the stand-alone Tasker plugin please send your Google Play Store transaction ID to support@tasks.org and you will receive a promo code for this in-app purchase. You can find the transaction ID in your Google Play Store order confirmation e-mail or by visiting wallet.google.com + default_gtasks_list \ No newline at end of file diff --git a/src/main/java/com/todoroo/astrid/gtasks/GtasksList.java b/src/main/java/com/todoroo/astrid/gtasks/GtasksList.java index bebcb9729..6ee381d45 100644 --- a/src/main/java/com/todoroo/astrid/gtasks/GtasksList.java +++ b/src/main/java/com/todoroo/astrid/gtasks/GtasksList.java @@ -95,4 +95,11 @@ public class GtasksList { public int hashCode() { return storeObject != null ? storeObject.hashCode() : 0; } + + @Override + public String toString() { + return "GtasksList{" + + "storeObject=" + storeObject + + '}'; + } } diff --git a/src/main/java/org/tasks/activities/CalendarSelectionDialog.java b/src/main/java/org/tasks/activities/CalendarSelectionDialog.java index c72e8643c..51a36bcfa 100644 --- a/src/main/java/org/tasks/activities/CalendarSelectionDialog.java +++ b/src/main/java/org/tasks/activities/CalendarSelectionDialog.java @@ -46,7 +46,7 @@ public class CalendarSelectionDialog extends InjectingDialogFragment { @NonNull @Override public Dialog onCreateDialog(Bundle savedInstanceState) { - final List calendars = calendarProvider.getCalendars(); + final List calendars = calendarProvider. getCalendars(); List calendarNames = transform(calendars, new Function() { @Override public String apply(AndroidCalendar androidCalendar) { diff --git a/src/main/java/org/tasks/injection/DialogFragmentComponent.java b/src/main/java/org/tasks/injection/BaseDialogFragmentComponent.java similarity index 88% rename from src/main/java/org/tasks/injection/DialogFragmentComponent.java rename to src/main/java/org/tasks/injection/BaseDialogFragmentComponent.java index 644fc2fcc..8664aa10b 100644 --- a/src/main/java/org/tasks/injection/DialogFragmentComponent.java +++ b/src/main/java/org/tasks/injection/BaseDialogFragmentComponent.java @@ -1,20 +1,16 @@ package org.tasks.injection; -import org.tasks.dialogs.SortDialog; -import org.tasks.dialogs.ThemePickerDialog; -import org.tasks.widget.WidgetConfigDialog; - import org.tasks.activities.CalendarSelectionDialog; import org.tasks.dialogs.AccountSelectionDialog; import org.tasks.dialogs.AddAttachmentDialog; +import org.tasks.dialogs.SortDialog; +import org.tasks.dialogs.ThemePickerDialog; import org.tasks.reminders.MissedCallDialog; import org.tasks.reminders.NotificationDialog; import org.tasks.reminders.SnoozeDialog; +import org.tasks.widget.WidgetConfigDialog; -import dagger.Subcomponent; - -@Subcomponent(modules = DialogFragmentModule.class) -public interface DialogFragmentComponent { +public interface BaseDialogFragmentComponent { void inject(NotificationDialog notificationDialog); void inject(MissedCallDialog missedCallDialog); diff --git a/src/main/res/xml/preferences_gtasks.xml b/src/main/res/xml/preferences_gtasks.xml index 7f7c89847..420f12a50 100644 --- a/src/main/res/xml/preferences_gtasks.xml +++ b/src/main/res/xml/preferences_gtasks.xml @@ -13,6 +13,11 @@ android:key="@string/sync_gtasks" android:title="@string/enabled" /> + +