Apply task edit controls in specific order

pull/384/head
Alex Baker 10 years ago
parent 1efee9fc2e
commit fd0d1150a0

@ -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;

@ -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<TaskEditControlFragment> getFragments() {
List<TaskEditControlFragment> 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<TaskEditControlFragment> fragments = getFragments();
List<TaskEditControlFragment> 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() {

@ -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<String, Integer> controlSetFragments = new HashMap<>();
private NavigationDrawerFragment navigationDrawer;
private ArrayList<String> 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<TaskEditControlFragment> taskEditControlFragments = new ArrayList<>();
List<TaskEditControlFragment> 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<TaskEditControlFragment> 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()) {

@ -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<String, Integer> 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<TaskEditControlFragment> createNewFragments(boolean isNewTask, Task task) {
List<TaskEditControlFragment> taskEditControlFragments = new ArrayList<>();
List<String> 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<TaskEditControlFragment> getFragments() {
List<TaskEditControlFragment> 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");
}
}
}

@ -220,7 +220,6 @@
<string name="TEA_ctrl_title_pref">TEA_ctrl_title_pref</string> <!-- Deprecated -->
<string name="TEA_ctrl_when_pref">TEA_ctrl_when_pref</string>
<string name="TEA_ctrl_repeat_pref">TEA_ctrl_repeat_pref</string>
<string name="TEA_ctrl_more_pref">TEA_ctrl_more_pref</string>
<string name="TEA_ctrl_importance_pref">TEA_ctrl_importance_pref</string>
<string name="TEA_ctrl_lists_pref">TEA_ctrl_lists_pref</string>
<string name="TEA_ctrl_notes_pref">TEA_ctrl_notes_pref</string>
@ -229,7 +228,6 @@
<string name="TEA_ctrl_hide_section_pref">TEA_ctrl_hide_section_pref</string>
<string name="TEA_ctrl_reminders_pref">TEA_ctrl_reminders_pref</string>
<string name="TEA_ctrl_timer_pref">TEA_ctrl_timer_pref</string>
<string name="TEA_ctrl_share_pref">TEA_ctrl_share_pref</string>
<string name="TEA_ctrl_gcal">TEA_ctrl_gcal</string>
<string name="sync_gtasks">sync_gtasks</string>
<string name="p_rmd_notif_actions_enabled">p_rmd_notif_actions_enabled</string>

Loading…
Cancel
Save