Skip to content

Commit

Permalink
Todo sorting, by @goldmanm (#449)
Browse files Browse the repository at this point in the history
* Add dialogue for sorting todo.txt files

This commit adds a dialogue used to sort todo.txt files by
context, project, or priority.

* Add Comparator for sorting SttTasks

This commit creates a class implementing Comparator so that
SttTasks can be sorted with default Java sorting methods.

* Add sorting algorithm for todo.txt files

This commit adds a case which implements sorting of tasks
in todo.txt files.

* Add button for sorting todo.txt files

This commit adds a button to the toolbar which brings
up the prompt to sort todo.txt files.

* Reformatted to android-studio standard

This commit used the reformat-text option on android-studio
to improve code formatting.

* added contributor
  • Loading branch information
goldmanm authored and gsantner committed Dec 9, 2018
1 parent 0a25a58 commit b6c05d8
Show file tree
Hide file tree
Showing 11 changed files with 131 additions and 19 deletions.
3 changes: 2 additions & 1 deletion CONTRIBUTORS.md
Original file line number Diff line number Diff line change
Expand Up @@ -34,4 +34,5 @@ Where:
* **[Ankush S Shetkar](https://www.linkedin.com/in/livelycoder/)**<br/>~° Added Chrome custom tabs for urls
* **[Lars Pontoppidan](https://github.com/larpon)**<br/>~° Danish translation
* **[Amaya Lim](https://github.com/nightrainlily)**<br/>~° Improve project description
* **[Jawkwon Im](https://github.com/jakeoneijk)**<br/>~° Add keep screen on
* **[Jawkwon Im](https://github.com/jakeoneijk)**<br/>~° Add keep screen on
* **[Mark Goldman](https://github.com/goldmanm)**<br/>~° Added sorting for todo.txt, improved wiki
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.app.FragmentManager;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.ActionBar;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,6 @@
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AppCompatActivity;
import android.util.TypedValue;
import android.view.Gravity;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,6 @@
import com.pixplicity.generate.Rate;

import net.gsantner.markor.R;
import net.gsantner.markor.ui.FileInfoDialog;
import net.gsantner.markor.ui.NewFileDialog;
import net.gsantner.markor.ui.SearchOrCustomTextDialogCreator;
import net.gsantner.markor.util.ActivityUtils;
Expand All @@ -57,7 +56,6 @@
import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.OnClick;
import butterknife.OnLongClick;
import butterknife.OnPageChange;
import other.writeily.activity.WrFilesystemListFragment;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -298,26 +298,21 @@ public void onFsDialogConfig(FilesystemDialogData.Options opt) {
}, fragManager, getActivity());
}
return true;
}

else if (eq(preference, R.string.pref_key__editor_basic_color_scheme_markor)) {
} else if (eq(preference, R.string.pref_key__editor_basic_color_scheme_markor)) {
_as.setEditorBasicColor(true, R.color.white, R.color.dark_grey);
_as.setEditorBasicColor(false, R.color.dark_grey, R.color.light__background);
}
else if (eq(preference, R.string.pref_key__editor_basic_color_scheme_blackorwhite)) {
} else if (eq(preference, R.string.pref_key__editor_basic_color_scheme_blackorwhite)) {
_as.setEditorBasicColor(true, R.color.white, R.color.black);
_as.setEditorBasicColor(false, R.color.black, R.color.white);
}
else if (eq(preference, R.string.pref_key__editor_basic_color_scheme_solarized)) {
} else if (eq(preference, R.string.pref_key__editor_basic_color_scheme_solarized)) {
_as.setEditorBasicColor(true, R.color.solarized_fg, R.color.solarized_bg_dark);
_as.setEditorBasicColor(false, R.color.solarized_fg, R.color.solarized_bg_light);
}
else if (eq(preference, R.string.pref_key__editor_basic_color_scheme_gruvbox)) {
} else if (eq(preference, R.string.pref_key__editor_basic_color_scheme_gruvbox)) {
_as.setEditorBasicColor(true, R.color.gruvbox_fg_dark, R.color.gruvbox_bg_dark);
_as.setEditorBasicColor(false, R.color.gruvbox_fg_light, R.color.gruvbox_bg_light);
}

if (preference.getKey().startsWith("pref_key__editor_basic_color_scheme")){
if (preference.getKey().startsWith("pref_key__editor_basic_color_scheme")) {
_as.setRecreateMainRequired(true);
restartActivity();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,12 +23,14 @@
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;

import java.io.File;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

//TODO
Expand Down Expand Up @@ -68,6 +70,7 @@ public void appendTextModuleActionsToBar(ViewGroup barLayout) {
//{R.drawable.ic_add_white_24dp, 5},
{R.drawable.ic_archive_black_24dp, 7},
{R.drawable.ic_date_range_black_24dp, 8},
{R.drawable.ic_sort_by_alpha_black_24dp, 9},
};
private static final String[] STT_INSERT_ACTIONS = {
"toggle_done",
Expand All @@ -80,6 +83,7 @@ public void appendTextModuleActionsToBar(ViewGroup barLayout) {
//"add_task",
"archive_done_tasks",
"insert_date",
"sort_todo",
CommonTextModuleActions.ACTION_COLOR_PICKER,
};

Expand Down Expand Up @@ -228,6 +232,24 @@ 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());
}
_hlEditor.setText(TextUtils.join("\n", tasksStrings));
});
}
}

CommonTextModuleActions commonTextModuleActions = new CommonTextModuleActions(_activity, _document, _hlEditor);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -111,6 +111,25 @@ public static void showSttArchiveDialog(Activity activity, Callback.a1<String> c
SearchOrCustomTextDialog.showMultiChoiceDialogWithSearchFilterUI(activity, dopt);
}

public static void showSttSortDialogue(Activity activity, Callback.a1<String> 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));
dopt.data = availableData;
dopt.titleText = R.string.sort;
dopt.messageText = activity.getString(R.string.sort_sorts_by_selection);
dopt.searchHintText = R.string.serach_or_custom;
dopt.isSearchEnabled = false;
SearchOrCustomTextDialog.showMultiChoiceDialogWithSearchFilterUI(activity, dopt);
}

public static void showSttContextDialog(Activity activity, List<String> availableData, List<String> highlightedData, Callback.a1<String> callback) {
SearchOrCustomTextDialog.DialogOptions dopt = new SearchOrCustomTextDialog.DialogOptions();
sortUniqNonEmpty(availableData, "home", "shop");
Expand Down
6 changes: 3 additions & 3 deletions app/src/main/java/net/gsantner/markor/util/DocumentIO.java
Original file line number Diff line number Diff line change
Expand Up @@ -104,13 +104,13 @@ public static synchronized Document loadDocument(Context context, Bundle argumen
document.setFormat(TextFormat.FORMAT_PLAIN);
} else {
String oldTitle = document.getTitle();
if(oldTitle.contains(".")){
if (oldTitle.contains(".")) {
int lastIndexOfDot = oldTitle.lastIndexOf(".");

//divide oldTitle to document title and file extension
document.setFileExtension(oldTitle.substring(lastIndexOfDot));
document.setTitle(oldTitle.substring(0,lastIndexOfDot));
}else{
document.setTitle(oldTitle.substring(0, lastIndexOfDot));
} else {
document.setFileExtension("");
document.setTitle(oldTitle);
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
package net.gsantner.opoc.format.todotxt.extension;


import net.gsantner.opoc.format.todotxt.SttTask;

import java.util.Comparator;
import java.util.List;

public class SttTaskComparator implements Comparator<SttTask> {
protected String sortBy;
protected boolean isAscending;

public SttTaskComparator() {
}

public String getSortBy() {
return sortBy;
}

public void setSortBy(String value) {
sortBy = value;
}

public boolean getAscending() {
return isAscending;
}

public void setAscending(boolean value) {
isAscending = value;
}

@Override
public int compare(SttTask x, SttTask y) {
int difference = 0;
switch (sortBy) {
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 (getAscending()) difference = -1 * difference;
return difference;
}

private int compare(char x, char 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));

}
}
Original file line number Diff line number Diff line change
Expand Up @@ -166,7 +166,7 @@ public int rcolor(@ColorRes int resColorId) {

public String[] rstrs(int... keyResourceIds) {
String[] ret = new String[keyResourceIds.length];
for (int i=0; i < keyResourceIds.length; i++){
for (int i = 0; i < keyResourceIds.length; i++) {
ret[i] = rstr(keyResourceIds[i]);
}
return ret;
Expand Down
8 changes: 8 additions & 0 deletions app/src/main/res/values/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -172,6 +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="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 @@ -220,6 +221,13 @@ 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="disable_spelling_underline">Disable spelling underline</string>
<string name="spellcheck_keyboard_suggestion_stay_red_underline_vanishes">Keyboard suggestions stay, red underline vanishes</string>
<string name="location">Location</string>
Expand Down

0 comments on commit b6c05d8

Please sign in to comment.