diff --git a/src/main/java/com/todoroo/astrid/activity/BeastModePreferences.java b/src/main/java/com/todoroo/astrid/activity/BeastModePreferences.java index a5d0da58b..b4c90e294 100644 --- a/src/main/java/com/todoroo/astrid/activity/BeastModePreferences.java +++ b/src/main/java/com/todoroo/astrid/activity/BeastModePreferences.java @@ -183,12 +183,7 @@ public class BeastModePreferences extends InjectingAppCompatActivity { itemsArray = order.split(BEAST_MODE_PREF_ITEM_SEPARATOR); } - for (String s : itemsArray) { - if (!s.equals(context.getString(R.string.TEA_ctrl_share_pref)) && - !s.equals(context.getString(R.string.TEA_ctrl_more_pref))) { - list.add(s); - } - } + Collections.addAll(list, itemsArray); if (order == null) { return list; diff --git a/src/main/java/com/todoroo/astrid/activity/TaskEditFragment.java b/src/main/java/com/todoroo/astrid/activity/TaskEditFragment.java index 8134f8158..9db26d531 100755 --- a/src/main/java/com/todoroo/astrid/activity/TaskEditFragment.java +++ b/src/main/java/com/todoroo/astrid/activity/TaskEditFragment.java @@ -47,6 +47,7 @@ import com.todoroo.astrid.utility.Flags; import org.tasks.R; import org.tasks.activities.CameraActivity; import org.tasks.dialogs.DialogBuilder; +import org.tasks.fragments.TaskEditControlSetFragmentManager; import org.tasks.injection.ForActivity; import org.tasks.injection.InjectingFragment; import org.tasks.notifications.NotificationManager; @@ -54,7 +55,6 @@ import org.tasks.preferences.ActivityPreferences; import org.tasks.ui.MenuColorizer; import org.tasks.ui.TaskEditControlFragment; -import java.util.ArrayList; import java.util.List; import javax.inject.Inject; @@ -119,6 +119,7 @@ public final class TaskEditFragment extends InjectingFragment implements EditNot @Inject ActFmCameraModule actFmCameraModule; @Inject DialogBuilder dialogBuilder; @Inject @ForActivity Context context; + @Inject TaskEditControlSetFragmentManager taskEditControlSetFragmentManager; // --- UI components @@ -130,20 +131,6 @@ public final class TaskEditFragment extends InjectingFragment implements EditNot @Bind(R.id.commentField) EditText commentField; @Bind(R.id.toolbar) Toolbar toolbar; - public static final int[] rowIds = new int[] { - R.id.row_1, - R.id.row_2, - R.id.row_3, - R.id.row_4, - R.id.row_5, - R.id.row_6, - R.id.row_7, - R.id.row_8, - R.id.row_9, - R.id.row_10, - R.id.row_11, - }; - // --- other instance variables /** true if editing started with a new task */ @@ -340,21 +327,10 @@ public final class TaskEditFragment extends InjectingFragment implements EditNot * ====================================================================== */ - public List getFragments() { - List fragments = new ArrayList<>(); - for (int fragmentId : rowIds) { - TaskEditControlFragment fragment = (TaskEditControlFragment) getFragmentManager().findFragmentById(fragmentId); - if (fragment == null) { - break; - } - fragments.add(fragment); - } - return fragments; - } /** Save task model from values in UI components */ public void save() { - List fragments = getFragments(); + List fragments = taskEditControlSetFragmentManager.getFragments(); if (hasChanges(fragments)) { for (TaskEditControlFragment fragment : fragments) { fragment.apply(model); @@ -422,7 +398,7 @@ public final class TaskEditFragment extends InjectingFragment implements EditNot } public void discardButtonClick() { - if (hasChanges(getFragments())) { + if (hasChanges(taskEditControlSetFragmentManager.getFragments())) { dialogBuilder.newMessageDialog(R.string.discard_confirmation) .setPositiveButton(R.string.keep_editing, null) .setNegativeButton(R.string.discard, new DialogInterface.OnClickListener() { diff --git a/src/main/java/com/todoroo/astrid/activity/TaskListActivity.java b/src/main/java/com/todoroo/astrid/activity/TaskListActivity.java index 991ffdfa4..c61311107 100644 --- a/src/main/java/com/todoroo/astrid/activity/TaskListActivity.java +++ b/src/main/java/com/todoroo/astrid/activity/TaskListActivity.java @@ -25,35 +25,25 @@ import com.todoroo.astrid.api.FilterWithCustomIntent; import com.todoroo.astrid.api.PermaSql; import com.todoroo.astrid.core.BuiltInFilterExposer; import com.todoroo.astrid.data.Task; -import com.todoroo.astrid.files.FilesControlSet; import com.todoroo.astrid.repeats.RepeatControlSet; import com.todoroo.astrid.service.StartupService; import com.todoroo.astrid.service.TaskService; import com.todoroo.astrid.service.UpgradeActivity; import com.todoroo.astrid.subtasks.SubtasksHelper; -import com.todoroo.astrid.tags.TagsControlSet; import com.todoroo.astrid.timers.TimerControlSet; -import com.todoroo.astrid.ui.EditTitleControlSet; -import com.todoroo.astrid.ui.HideUntilControlSet; -import com.todoroo.astrid.ui.ReminderControlSet; import org.tasks.R; +import org.tasks.fragments.TaskEditControlSetFragmentManager; import org.tasks.injection.InjectingAppCompatActivity; import org.tasks.intents.TaskIntents; import org.tasks.preferences.ActivityPreferences; import org.tasks.receivers.RepeatConfirmationReceiver; -import org.tasks.ui.CalendarControlSet; -import org.tasks.ui.DeadlineControlSet; -import org.tasks.ui.DescriptionControlSet; import org.tasks.ui.EmptyTaskEditFragment; import org.tasks.ui.NavigationDrawerFragment; import org.tasks.ui.PriorityControlSet; import org.tasks.ui.TaskEditControlFragment; -import java.util.ArrayList; -import java.util.HashMap; import java.util.List; -import java.util.Map; import javax.inject.Inject; @@ -74,13 +64,12 @@ public class TaskListActivity extends InjectingAppCompatActivity implements @Inject StartupService startupService; @Inject SubtasksHelper subtasksHelper; @Inject TaskService taskService; + @Inject TaskEditControlSetFragmentManager taskEditControlSetFragmentManager; public static final int REQUEST_UPGRADE = 505; private final RepeatConfirmationReceiver repeatConfirmationReceiver = new RepeatConfirmationReceiver(this); - private final Map controlSetFragments = new HashMap<>(); private NavigationDrawerFragment navigationDrawer; - private ArrayList controlOrder; /** For indicating the new list screen should be launched at fragment setup time */ public static final String TOKEN_CREATE_NEW_LIST = "createNewList"; //$NON-NLS-1$ @@ -104,21 +93,6 @@ public class TaskListActivity extends InjectingAppCompatActivity implements DrawerLayout drawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout); navigationDrawer.setUp(drawerLayout); - registerFragment(EditTitleControlSet.TAG); - registerFragment(DeadlineControlSet.TAG); - registerFragment(CalendarControlSet.TAG); - registerFragment(PriorityControlSet.TAG); - registerFragment(DescriptionControlSet.TAG); - registerFragment(HideUntilControlSet.TAG); - registerFragment(ReminderControlSet.TAG); - registerFragment(FilesControlSet.TAG); - registerFragment(TimerControlSet.TAG); - registerFragment(TagsControlSet.TAG); - registerFragment(RepeatControlSet.TAG); - - controlOrder = BeastModePreferences.constructOrderedControlList(preferences, this); - controlOrder.add(0, getString(EditTitleControlSet.TAG)); - handleIntent(); } @@ -135,13 +109,13 @@ public class TaskListActivity extends InjectingAppCompatActivity implements Intent intent = getIntent(); TaskEditFragment taskEditFragment = getTaskEditFragment(); - List taskEditControlFragments = new ArrayList<>(); + List taskEditControlFragments = null; if (taskEditFragment != null) { if (intent.hasExtra(OPEN_FILTER) || intent.hasExtra(OPEN_TASK)) { taskEditFragment.save(); taskEditFragment = null; } else { - taskEditControlFragments.addAll(taskEditFragment.getFragments()); + taskEditControlFragments = taskEditControlSetFragmentManager.getFragments(); } } @@ -193,7 +167,7 @@ public class TaskListActivity extends InjectingAppCompatActivity implements for (int i = 0 ; i < taskEditControlFragments.size() ; i++) { TaskEditControlFragment taskEditControlFragment = taskEditControlFragments.get(i); String tag = getString(taskEditControlFragment.controlId()); - fragmentTransaction.replace(TaskEditFragment.rowIds[i], taskEditControlFragment, tag); + fragmentTransaction.replace(TaskEditControlSetFragmentManager.TASK_EDIT_CONTROL_FRAGMENT_ROWS[i], taskEditControlFragment, tag); } fragmentTransaction.addToBackStack(null); fragmentTransaction.commit(); @@ -306,27 +280,10 @@ public class TaskListActivity extends InjectingAppCompatActivity implements return; } boolean isNewTask = task.getTitle().length() == 0; - - String hideAlwaysTrigger = getString(R.string.TEA_ctrl_hide_section_pref); - - taskEditFragment = newTaskEditFragment(isNewTask, task); - List taskEditControlFragments = new ArrayList<>(); - for (int i = 0 ; i < controlOrder.size() ; i++) { - String item = controlOrder.get(i); - if (item.equals(hideAlwaysTrigger)) { - break; - } - Integer resId = controlSetFragments.get(item); - if (resId == null) { - Timber.e("Unknown task edit control %s", item); - continue; - } - - TaskEditControlFragment fragment = createFragment(resId); - fragment.initialize(isNewTask, task); - taskEditControlFragments.add(fragment); - } - loadTaskEditFragment(false, taskEditFragment, taskEditControlFragments); + loadTaskEditFragment( + false, + newTaskEditFragment(isNewTask, task), + taskEditControlSetFragmentManager.createNewFragments(isNewTask, task)); } @Override @@ -335,39 +292,6 @@ public class TaskListActivity extends InjectingAppCompatActivity implements navigationDrawer.openDrawer(); } - private void registerFragment(int resId) { - controlSetFragments.put(getString(resId), resId); - } - - private TaskEditControlFragment createFragment(int fragmentId) { - switch (fragmentId) { - case R.string.TEA_ctrl_title_pref: - return new EditTitleControlSet(); - case R.string.TEA_ctrl_when_pref: - return new DeadlineControlSet(); - case R.string.TEA_ctrl_importance_pref: - return new PriorityControlSet(); - case R.string.TEA_ctrl_notes_pref: - return new DescriptionControlSet(); - case R.string.TEA_ctrl_gcal: - return new CalendarControlSet(); - case R.string.TEA_ctrl_hide_until_pref: - return new HideUntilControlSet(); - case R.string.TEA_ctrl_reminders_pref: - return new ReminderControlSet(); - case R.string.TEA_ctrl_files_pref: - return new FilesControlSet(); - case R.string.TEA_ctrl_timer_pref: - return new TimerControlSet(); - case R.string.TEA_ctrl_lists_pref: - return new TagsControlSet(); - case R.string.TEA_ctrl_repeat_pref: - return new RepeatControlSet(); - default: - throw new RuntimeException("Unsupported fragment"); - } - } - @Override public void onBackPressed() { if (navigationDrawer.isDrawerOpen()) { diff --git a/src/main/java/org/tasks/fragments/TaskEditControlSetFragmentManager.java b/src/main/java/org/tasks/fragments/TaskEditControlSetFragmentManager.java new file mode 100644 index 000000000..ca5b90bd6 --- /dev/null +++ b/src/main/java/org/tasks/fragments/TaskEditControlSetFragmentManager.java @@ -0,0 +1,153 @@ +package org.tasks.fragments; + +import android.app.Activity; +import android.app.FragmentManager; + +import com.todoroo.astrid.activity.BeastModePreferences; +import com.todoroo.astrid.data.Task; +import com.todoroo.astrid.files.FilesControlSet; +import com.todoroo.astrid.repeats.RepeatControlSet; +import com.todoroo.astrid.tags.TagsControlSet; +import com.todoroo.astrid.timers.TimerControlSet; +import com.todoroo.astrid.ui.EditTitleControlSet; +import com.todoroo.astrid.ui.HideUntilControlSet; +import com.todoroo.astrid.ui.ReminderControlSet; + +import org.tasks.BuildConfig; +import org.tasks.R; +import org.tasks.preferences.Preferences; +import org.tasks.ui.CalendarControlSet; +import org.tasks.ui.DeadlineControlSet; +import org.tasks.ui.DescriptionControlSet; +import org.tasks.ui.PriorityControlSet; +import org.tasks.ui.TaskEditControlFragment; + +import java.util.ArrayList; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; + +import javax.inject.Inject; +import javax.inject.Singleton; + +import timber.log.Timber; + +@Singleton +public class TaskEditControlSetFragmentManager { + + public static final int[] TASK_EDIT_CONTROL_FRAGMENT_ROWS = new int[] { + R.id.row_1, + R.id.row_2, + R.id.row_3, + R.id.row_4, + R.id.row_5, + R.id.row_6, + R.id.row_7, + R.id.row_8, + R.id.row_9, + R.id.row_10, + R.id.row_11, + }; + + private static final int[] TASK_EDIT_CONTROL_SET_FRAGMENTS = new int[] { + EditTitleControlSet.TAG, + DeadlineControlSet.TAG, + CalendarControlSet.TAG, + PriorityControlSet.TAG, + DescriptionControlSet.TAG, + HideUntilControlSet.TAG, + ReminderControlSet.TAG, + FilesControlSet.TAG, + TimerControlSet.TAG, + TagsControlSet.TAG, + RepeatControlSet.TAG + }; + + static { + if (BuildConfig.DEBUG && TASK_EDIT_CONTROL_FRAGMENT_ROWS.length != TASK_EDIT_CONTROL_SET_FRAGMENTS.length) { + throw new AssertionError(); + } + } + + private final Map controlSetFragments = new LinkedHashMap<>(); + private final Activity activity; + private final Preferences preferences; + private final String hideAlwaysTrigger; + private final FragmentManager fragmentManager; + + @Inject + public TaskEditControlSetFragmentManager(Activity activity, Preferences preferences) { + this.activity = activity; + this.preferences = preferences; + + fragmentManager = activity.getFragmentManager(); + hideAlwaysTrigger = activity.getString(R.string.TEA_ctrl_hide_section_pref); + + for (int resId : TASK_EDIT_CONTROL_SET_FRAGMENTS) { + controlSetFragments.put(activity.getString(resId), resId); + } + } + + public List createNewFragments(boolean isNewTask, Task task) { + List taskEditControlFragments = new ArrayList<>(); + List controlOrder = BeastModePreferences.constructOrderedControlList(preferences, activity); + controlOrder.add(0, activity.getString(EditTitleControlSet.TAG)); + + for (int i = 0; i < controlOrder.size(); i++) { + String item = controlOrder.get(i); + if (item.equals(hideAlwaysTrigger)) { + break; + } + Integer resId = controlSetFragments.get(item); + if (resId == null) { + Timber.e("Unknown task edit control %s", item); + continue; + } + + TaskEditControlFragment fragment = createFragment(resId); + fragment.initialize(isNewTask, task); + taskEditControlFragments.add(fragment); + } + return taskEditControlFragments; + } + + public List getFragments() { + List fragments = new ArrayList<>(); + for (String tag : controlSetFragments.keySet()) { + TaskEditControlFragment fragment = (TaskEditControlFragment) fragmentManager.findFragmentByTag(tag); + if (fragment != null) { + fragments.add(fragment); + } + } + return fragments; + } + + private TaskEditControlFragment createFragment(int fragmentId) { + switch (fragmentId) { + case EditTitleControlSet.TAG: + return new EditTitleControlSet(); + case DeadlineControlSet.TAG: + return new DeadlineControlSet(); + case PriorityControlSet.TAG: + return new PriorityControlSet(); + case DescriptionControlSet.TAG: + return new DescriptionControlSet(); + case CalendarControlSet.TAG: + return new CalendarControlSet(); + case HideUntilControlSet.TAG: + return new HideUntilControlSet(); + case ReminderControlSet.TAG: + return new ReminderControlSet(); + case FilesControlSet.TAG: + return new FilesControlSet(); + case TimerControlSet.TAG: + return new TimerControlSet(); + case TagsControlSet.TAG: + return new TagsControlSet(); + case RepeatControlSet.TAG: + return new RepeatControlSet(); + default: + throw new RuntimeException("Unsupported fragment"); + } + } +} diff --git a/src/main/res/values/keys.xml b/src/main/res/values/keys.xml index 55841e0a5..fadbac322 100644 --- a/src/main/res/values/keys.xml +++ b/src/main/res/values/keys.xml @@ -220,7 +220,6 @@ TEA_ctrl_title_pref TEA_ctrl_when_pref TEA_ctrl_repeat_pref - TEA_ctrl_more_pref TEA_ctrl_importance_pref TEA_ctrl_lists_pref TEA_ctrl_notes_pref @@ -229,7 +228,6 @@ TEA_ctrl_hide_section_pref TEA_ctrl_reminders_pref TEA_ctrl_timer_pref - TEA_ctrl_share_pref TEA_ctrl_gcal sync_gtasks p_rmd_notif_actions_enabled