Skip to content

Commit

Permalink
Rework sort todo tasks (initally from #449)
Browse files Browse the repository at this point in the history
  • Loading branch information
gsantner committed Dec 9, 2018
1 parent b6c05d8 commit 47721f6
Show file tree
Hide file tree
Showing 6 changed files with 113 additions and 103 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,6 @@
import net.gsantner.markor.util.AppSettings;
import net.gsantner.opoc.format.todotxt.SttCommander;
import net.gsantner.opoc.format.todotxt.SttTask;
import net.gsantner.opoc.format.todotxt.extension.SttTaskComparator;
import net.gsantner.opoc.format.todotxt.extension.SttTaskWithParserInfo;
import net.gsantner.opoc.util.Callback;
import net.gsantner.opoc.util.FileUtils;
Expand Down Expand Up @@ -233,22 +232,22 @@ public void onClick(View view) {
return;
}
case "sort_todo": {
SearchOrCustomTextDialogCreator.showSttSortDialogue(_activity, (callbackPayload) -> {
ArrayList<SttTaskWithParserInfo> tasks = new ArrayList<>();
for (String task : origText.split("\n")) tasks.add(sttcmd.parseTask(task));
SttTaskComparator comparator = new SttTaskComparator();
String[] split = callbackPayload.split(", ");
comparator.setSortBy(split[0]);
comparator.setAscending(split[1].endsWith("ascending"));

Collections.sort(tasks, comparator);

ArrayList<String> tasksStrings = new ArrayList<>();
for (SttTaskWithParserInfo task : tasks) {
tasksStrings.add(task.getTaskLine());
SearchOrCustomTextDialogCreator.showSttSortDialogue(_activity, (orderBy, descending) -> new Thread() {
@Override
public void run() {
super.run();
ArrayList<SttTaskWithParserInfo> tasks = new ArrayList<>();
for (String task : origText.split("\n")) {
tasks.add(sttcmd.parseTask(task));
}
Collections.sort(tasks, new SttCommander.SttTaskSimpleComparator(orderBy, descending));
ArrayList<String> tasksStrings = new ArrayList<>();
for (SttTaskWithParserInfo task : tasks) {
tasksStrings.add(task.getTaskLine());
}
setEditorTextAsync(TextUtils.join("\n", tasksStrings));
}
_hlEditor.setText(TextUtils.join("\n", tasksStrings));
});
}.start());
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -111,20 +111,37 @@ public static void showSttArchiveDialog(Activity activity, Callback.a1<String> c
SearchOrCustomTextDialog.showMultiChoiceDialogWithSearchFilterUI(activity, dopt);
}

public static void showSttSortDialogue(Activity activity, Callback.a1<String> callback) {
public static void showSttSortDialogue(Activity activity, final Callback.a2<String, Boolean> callback) {
SearchOrCustomTextDialog.DialogOptions dopt = new SearchOrCustomTextDialog.DialogOptions();
baseConf(activity, dopt);
dopt.callback = callback;
List<String> availableData = new ArrayList<>();
availableData.add(activity.getString(R.string.priority_descending));
availableData.add(activity.getString(R.string.priority_ascending));
availableData.add(activity.getString(R.string.context_descending));
availableData.add(activity.getString(R.string.context_ascending));
availableData.add(activity.getString(R.string.project_descending));
availableData.add(activity.getString(R.string.project_ascending));

AppSettings appSettings = new AppSettings(activity.getApplicationContext());
String ocontext = activity.getString(appSettings.isTodoTxtAlternativeNaming() ? R.string.category : R.string.context);
String oproject = activity.getString(appSettings.isTodoTxtAlternativeNaming() ? R.string.tag : R.string.project);
String oprio = activity.getString(R.string.priority);
String oasc = " (" + activity.getString(R.string.ascending) + ")";
String odesc = " (" + activity.getString(R.string.descending) + ")";
String optLastSelected = "showSttSortDialogue.last_selected";

dopt.callback = arg1 -> {
appSettings.setString(optLastSelected, arg1);
String[] values = arg1.replace(ocontext, "context").replace(oproject, "project").replace(oprio, "priority").split(" ");
callback.callback(values[0], values[1].contains(odesc.replace(" ", "")));
};

availableData.add(oprio + oasc);
availableData.add(oprio + odesc);
availableData.add(oproject + oasc);
availableData.add(oproject + odesc);
availableData.add(ocontext + oasc);
availableData.add(ocontext + odesc);

dopt.data = availableData;
dopt.highlightData = Collections.singletonList(appSettings.getString(optLastSelected, ocontext + odesc));

dopt.titleText = R.string.sort;
dopt.messageText = activity.getString(R.string.sort_sorts_by_selection);
dopt.messageText = activity.getString(R.string.sort_tasks_by_selected_order);
dopt.searchHintText = R.string.serach_or_custom;
dopt.isSearchEnabled = false;
SearchOrCustomTextDialog.showMultiChoiceDialogWithSearchFilterUI(activity, dopt);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -133,4 +133,11 @@ public TextModuleActions setContext(Context context) {
_context = context;
return this;
}

/**
* Callable from background thread!
*/
public void setEditorTextAsync(final String text) {
_activity.runOnUiThread(() -> _hlEditor.setText(text));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
Expand Down Expand Up @@ -351,4 +352,65 @@ private static String parseOneValueOrDefault(String text, Pattern pattern, Strin
private static boolean isPatternFindable(String text, Pattern pattern) {
return pattern.matcher(text).find();
}

public static class SttTaskSimpleComparator implements Comparator<SttTask> {
private String _orderBy;
private boolean _descending;

public SttTaskSimpleComparator(String orderBy, Boolean descending) {
_orderBy = orderBy;
_descending = descending;
}

@Override
public int compare(SttTask x, SttTask y) {
int difference;
switch (_orderBy) {
case "priority": {
difference = compare(x.getPriority(), y.getPriority());
break;
}
case "context": {
difference = compare(x.getContexts(), y.getContexts());
break;
}
case "project": {
difference = compare(x.getProjects(), y.getProjects());
break;
}
default: {
return 0;
}
}
if (_descending) {
difference = -1 * difference;
}
return difference;
}

private int compare(Character x, Character y) {
return x.compareTo(y);/*
if (Character.toLowerCase(y) < Character.toLowerCase(x)) {
return 1;
}
if (Character.toLowerCase(y) == Character.toLowerCase(x)) {
return 0;
}
return -1;*/
}

private int compare(List<String> x, List<String> y) {
if (x.isEmpty() & y.isEmpty()) {
return 0;
}
if (x.isEmpty()) {
return 1;
}
if (y.isEmpty()) {
return -1;
}
return x.get(0).compareTo(y.get(0));

}
}
}

This file was deleted.

10 changes: 3 additions & 7 deletions app/src/main/res/values/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -172,7 +172,7 @@ work. If not, see <https://creativecommons.org/publicdomain/zero/1.0/>.
<string name="space_between_lines_in_percent">Space between lines in percent</string>
<string name="line_spacing">Line Spacing</string>
<string name="archive_does_move_done_tasks">Move done tasks to specified file in same folder</string>
<string name="sort_sorts_by_selection">Sort your todo tasks by the selected order</string>
<string name="sort_tasks_by_selected_order">Sort tasks by selected order</string>
<string name="special_key">Special Key</string>
<string name="key_page_up">Page Up (Page Up)</string>
<string name="key_page_down">Page Down (Page Down)</string>
Expand Down Expand Up @@ -221,12 +221,8 @@ work. If not, see <https://creativecommons.org/publicdomain/zero/1.0/>.
<string name="project_team">Project Team</string>
<string name="contributors_public_add_yourself_description">Show contributor info. Provide it to be shown here on an opt-in basis after contributing</string>

<string name="priority_descending">priority, descending</string>
<string name="priority_ascending">priority, ascending</string>
<string name="context_descending">context, descending</string>
<string name="context_ascending">context, ascending</string>
<string name="project_descending">project, descending</string>
<string name="project_ascending">project, ascending</string>
<string name="descending">descending</string>
<string name="ascending">ascending</string>

<string name="disable_spelling_underline">Disable spelling underline</string>
<string name="spellcheck_keyboard_suggestion_stay_red_underline_vanishes">Keyboard suggestions stay, red underline vanishes</string>
Expand Down

0 comments on commit 47721f6

Please sign in to comment.