Skip to content
Open
Show file tree
Hide file tree
Changes from 19 commits
Commits
Show all changes
98 commits
Select commit Hold shift + click to select a range
63e1bad
add support for normal text find and replace
guanglinn Apr 7, 2025
f8afc54
improve find in selection
guanglinn Apr 9, 2025
f6edfe6
jump nearby occurrence after finding
guanglinn Apr 9, 2025
f3b77fa
fix automatically scroll to the top after finding
guanglinn Apr 9, 2025
15f9aed
clear results after closing
guanglinn Apr 9, 2025
1863367
scroll text view if occurrence is not visible
guanglinn Apr 9, 2025
b485182
add temporary test code
guanglinn Apr 10, 2025
708a803
fix occurrence highlight failure affected by input filter
guanglinn Apr 10, 2025
30c0ea7
improve first time visible position setting
guanglinn Apr 11, 2025
d30103a
fix link continuously be smaller while searching
guanglinn Apr 11, 2025
e9dee6d
improve search fragment colors
guanglinn Apr 11, 2025
f9255cd
improve next & previous actions
guanglinn Apr 11, 2025
db1a142
minor improvements
guanglinn Apr 11, 2025
241f34f
minor improvements for line numbers
guanglinn Apr 12, 2025
508abc0
Merge branch 'master' into search_improvement
guanglinn Apr 15, 2025
e6d6185
improve foreground color of icons for dark theme
guanglinn Apr 15, 2025
b00ef28
add delay to find on search text changed
guanglinn Apr 17, 2025
ebbab81
Merge branch 'master' into search_improvement
gsantner May 9, 2025
6671283
Merge branch 'master' into search_improvement
gsantner May 29, 2025
b1dbb28
Merge branch 'master' into search_improvement
gsantner Jun 12, 2025
fda4f77
Merge branch 'master' into search_improvement
gsantner Jun 13, 2025
ac588c7
Merge branch 'master' into search_improvement
gsantner Jul 11, 2025
d1211b1
Merge branch 'master' into search_improvement
guanglinn Sep 20, 2025
1f5e29d
revert default font size to 16
guanglinn Sep 20, 2025
e44e836
tweaks for showSelection method
guanglinn Sep 20, 2025
ebe0463
revert changes for createSmallBlueLinkSpans method
guanglinn Sep 20, 2025
29de41c
use Markor's highlight API for search and replace
guanglinn Sep 21, 2025
52db389
Merge branch 'master' into search_improvement
guanglinn Sep 21, 2025
950a004
Merge branch 'search_improvement' of https://github.com/guanglinn/mar…
guanglinn Sep 21, 2025
30d504c
revert some code
guanglinn Sep 21, 2025
a0caac3
Merge branch 'master' into search_improvement
gsantner Oct 23, 2025
563ba00
Merge branch 'master' into search_improvement
guanglinn Oct 23, 2025
6a4af8a
Merge branch 'master' into search_improvement
guanglinn Nov 20, 2025
71b0791
Merge branch 'master' into search_improvement
guanglinn Dec 28, 2025
99c447c
.
guanglinn Dec 28, 2025
7c7a3e5
Merge branch 'master' into search_improvement
gsantner Jan 8, 2026
bb5d609
Merge branch 'master' into search_improvement
guanglinn Jan 8, 2026
ea63e91
Tweaks
guanglinn Jan 8, 2026
a6dae48
Merge branch 'master' into search_improvement
guanglinn Jan 19, 2026
2815967
Improve display of TextSearchFragment in Activity
guanglinn Jan 26, 2026
bfeafc9
Add an option to switch to line based search dialog
guanglinn Jan 26, 2026
9d0e3bc
Rename Occurrence to Match
guanglinn Jan 26, 2026
325dbfc
Minor improvements
guanglinn Jan 26, 2026
c782233
Tweaks
guanglinn Jan 26, 2026
b8bca23
Improve match highlight
guanglinn Jan 27, 2026
ecca6ed
Minor improvements
guanglinn Jan 27, 2026
4248f7d
More efficient replaceAll method
guanglinn Jan 27, 2026
798ee55
Improve highlightMatches method
guanglinn Jan 27, 2026
9919754
Minor improvements
guanglinn Jan 27, 2026
40de53b
Tweak
guanglinn Jan 27, 2026
0e13a8c
Add clear text buttons
guanglinn Jan 28, 2026
7a44144
Add dark mode support
guanglinn Jan 28, 2026
b733c4d
Tweak
guanglinn Jan 28, 2026
6ad41f3
Tweak search match color
guanglinn Jan 28, 2026
64d02e6
Tweak button checked color
guanglinn Jan 28, 2026
7e03688
Show search&replace dialog with current search text
guanglinn Jan 28, 2026
7e8ad48
Set hint to search instead of find
guanglinn Jan 28, 2026
84ca16d
Improve match jump
guanglinn Jan 28, 2026
cc4166a
Tweak option text
guanglinn Jan 28, 2026
2c6f4b3
Minor improvements
guanglinn Jan 28, 2026
8460349
Tweaks
guanglinn Jan 28, 2026
516966e
Make debounced search
guanglinn Jan 28, 2026
dcea8c8
More efficient HeadlineDialog
guanglinn Jan 30, 2026
bb64c34
Clean up code
guanglinn Jan 30, 2026
37aef2b
Improve more efficient HeadlineDialog
guanglinn Jan 30, 2026
0169753
Minor improvements
guanglinn Jan 30, 2026
4ddb1a9
reformat code
gsantner Jan 31, 2026
aa655db
Merge branch 'master' into search_improvement
guanglinn Feb 1, 2026
57b78a8
Fix conflicts
guanglinn Feb 1, 2026
710c95b
Support typing Enter to find next occurrence
guanglinn Feb 1, 2026
128b526
Tweak text
guanglinn Feb 1, 2026
a9ec17b
Handle PatternSyntaxException
guanglinn Feb 2, 2026
e63d4f1
Improve the way of determining active match index
guanglinn Feb 2, 2026
73ae318
Fix Toolbar subtitleTextColor
guanglinn Feb 2, 2026
1c9f717
Support typing new line
guanglinn Feb 2, 2026
72c3057
Minor improvements
guanglinn Feb 2, 2026
4e21555
Handle screen rotation for TextSearchFragment
guanglinn Feb 2, 2026
c59bfe5
Tweak layout margins for TextSearchFragment
guanglinn Feb 2, 2026
55356b6
Support setting selection when jumping to the match
guanglinn Feb 3, 2026
1df31f3
Minor improvements
guanglinn Feb 3, 2026
811008e
arrow updown
gsantner Feb 5, 2026
02cafb9
regex
gsantner Feb 5, 2026
deb016c
matchcase
gsantner Feb 5, 2026
e891c8d
word
gsantner Feb 5, 2026
0e7e626
filter
gsantner Feb 5, 2026
9178f0e
clos
gsantner Feb 5, 2026
f3ab70e
arrows
gsantner Feb 5, 2026
73fe25a
revert word change, keep existing translations
gsantner Feb 5, 2026
1b1e389
revert unrelated change
gsantner Feb 5, 2026
3d86794
remove commented text
gsantner Feb 5, 2026
bd48a60
.
gsantner Feb 5, 2026
0a15e64
Fix known issues
guanglinn Feb 6, 2026
aaa1cf6
Adjust icon tint for dark mode
guanglinn Feb 6, 2026
775c4ea
Minor improvements
guanglinn Feb 6, 2026
da8ee22
Improve SearchView UI in view-mode
guanglinn Feb 6, 2026
3f05327
Tweaks
guanglinn Feb 6, 2026
5a99069
Minor improvements for CSS_INLINE_CODE
guanglinn Feb 7, 2026
a29d6e0
Minor improvements for left padding of line numbers in view-mode
guanglinn Feb 7, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 7 additions & 8 deletions app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
<?xml version="1.0" encoding="utf-8"?><!--
<?xml version="1.0" encoding="utf-8"?>
<!--
/*#######################################################
*
* Maintained 2017-2025 by Gregor Santner <gsantner AT mailbox DOT org>
Expand All @@ -11,13 +12,11 @@

<!-- Do NOT run auto format on this file -->
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
tools:targetApi="jelly_bean">
xmlns:tools="http://schemas.android.com/tools">

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.INSTALL_SHORTCUT" />
<uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT" />
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />

Expand All @@ -41,6 +40,7 @@
android:name=".ApplicationObject"
android:allowBackup="true"
android:appCategory="productivity"
android:dataExtractionRules="@xml/full_backup_rules"
android:fullBackupContent="@xml/full_backup_rules"
android:icon="@drawable/ic_launcher"
android:isGame="false"
Expand Down Expand Up @@ -187,7 +187,6 @@
<activity
android:name=".activity.DocumentActivity"
android:exported="true"
android:label="@string/app_name"
android:launchMode="standard"
android:maxRecents="5"
android:theme="@style/AppTheme.Unified.StartupFlash"
Expand Down Expand Up @@ -1094,10 +1093,10 @@

<activity-alias
android:name="AliasDocumentProcessText"
android:label="@string/app_name"
android:enabled="false"
android:exported="true"
android:targetActivity=".activity.DocumentActivity"
android:enabled="false">
android:label="@string/app_name"
android:targetActivity=".activity.DocumentActivity">

<intent-filter>
<category android:name="android.intent.category.DEFAULT" />
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -154,7 +154,7 @@ public void onViewCreated(@NonNull View view, Bundle savedInstanceState) {
return;
}

_lineNumbersView.setup(_hlEditor);
_lineNumbersView.setEditText(_hlEditor);
_lineNumbersView.setLineNumbersEnabled(_appSettings.getDocumentLineNumbersEnabled(_document.path));

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP && _appSettings.getSetWebViewFulldrawing()) {
Expand Down Expand Up @@ -266,19 +266,24 @@ public void onViewCreated(@NonNull View view, Bundle savedInstanceState) {

@Override
protected void onFragmentFirstTimeVisible() {
_hlEditor.recomputeHighlighting(); // Run before setting scroll position
int line = -1;
int startPosition = _appSettings.getLastEditPosition(_document.path, 0);

final Bundle args = getArguments();
int startPos = _appSettings.getLastEditPosition(_document.path, _hlEditor.length());
if (args != null && args.containsKey(Document.EXTRA_FILE_LINE_NUMBER)) {
final int lno = args.getInt(Document.EXTRA_FILE_LINE_NUMBER);
if (lno >= 0) {
startPos = TextViewUtils.getIndexFromLineOffset(_hlEditor.getText(), lno, 0);
} else {
startPos = _hlEditor.length();
if (args != null) {
if (args.containsKey(Document.EXTRA_FILE_LINE_NUMBER)) {
line = args.getInt(Document.EXTRA_FILE_LINE_NUMBER);
}
}

_hlEditor.recomputeHighlighting(); // Run before setting scroll position
TextViewUtils.setSelectionAndShow(_hlEditor, startPos);
if (line > -1) {
TextViewUtils.getIndexFromLineOffset(_hlEditor.getText(), line, 0);
TextViewUtils.setSelectionAndShow(_hlEditor, startPosition);
} else {
final int scrollY = _appSettings.getLastEditScrollY(_document.path, 0);
_verticalScrollView.setScrollY(scrollY);
}

_hlEditor.post(() -> _hlEditor.animate().alpha(1).setDuration(500).start());
}
Expand All @@ -300,7 +305,7 @@ public void onPause() {
_appSettings.addRecentFile(_document.file);
_appSettings.setDocumentPreviewState(_document.path, _isPreviewVisible);
_appSettings.setLastEditPosition(_document.path, TextViewUtils.getSelection(_hlEditor)[0]);

_appSettings.setLastEditScrollY(_document.path, _verticalScrollView.getScrollY());
if (_document.path.equals(_appSettings.getTodoFile().getAbsolutePath())) {
TodoWidgetProvider.updateTodoWidgets();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -406,6 +406,9 @@ private void restoreDefaultToolbar() {

public void onViewPagerPageSelected(final int pos) {
_bottomNav.getMenu().getItem(pos).setChecked(true);
// Close search dialog fragment
View view = findViewById(R.id.closeImageButton);
if (view != null) view.callOnClick();

if (pos == tabIdToPos(R.id.nav_notebook)) {
_fab.show();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,13 +33,15 @@
import androidx.annotation.Nullable;
import androidx.annotation.StringRes;
import androidx.appcompat.widget.TooltipCompat;
import androidx.fragment.app.FragmentActivity;

import net.gsantner.markor.ApplicationObject;
import net.gsantner.markor.R;
import net.gsantner.markor.activity.DocumentActivity;
import net.gsantner.markor.frontend.AttachLinkOrFileDialog;
import net.gsantner.markor.frontend.DatetimeFormatDialog;
import net.gsantner.markor.frontend.MarkorDialogFactory;
import net.gsantner.markor.frontend.search.SearchDialogFragment;
import net.gsantner.markor.frontend.textview.HighlightingEditor;
import net.gsantner.markor.frontend.textview.TextViewUtils;
import net.gsantner.markor.model.AppSettings;
Expand Down Expand Up @@ -103,9 +105,12 @@ public boolean onActionLongClick(final @StringRes int action) {
return runCommonLongPressAction(action);
}

private SearchDialogFragment _searchDialogFragment;

// Override to implement custom search action
public boolean onSearch() {
MarkorDialogFactory.showSearchDialog(_activity, _hlEditor);
// MarkorDialogFactory.showSearchDialog(_activity, _hlEditor);
_searchDialogFragment.show();
return true;
}

Expand Down Expand Up @@ -582,6 +587,7 @@ public ActionButtonBase setUiReferences(@Nullable final Activity activity, @Null
_hlEditor = hlEditor;
_webView = webview;
_cu = new MarkorContextUtils(_activity);
_searchDialogFragment = SearchDialogFragment.newInstance(R.id.topReplacementLayout, (FragmentActivity) _activity, _hlEditor);
return this;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ public class MarkdownSyntaxHighlighter extends SyntaxHighlighterBase {
private static final int MD_COLOR_LINK = 0xff1ea3fe;
private static final int MD_COLOR_LIST = 0xffdaa521;
private static final int MD_COLOR_QUOTE = 0xff88b04c;
private static final int MD_COLOR_CODEBLOCK = 0x2bafafaf;
private static final int MD_COLOR_CODEBLOCK = 0x60afafaf;

public MarkdownSyntaxHighlighter(AppSettings as) {
super(as);
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
package net.gsantner.markor.frontend.search;

public class Occurrence {
public static final int BACKGROUND_COLOR = 0x90FF0000;
public static final int SPECIAL_BACKGROUND_COLOR = 0x90FFA500;
private BackgroundColorSpan backgroundColorSpan;

private int startIndex;
private int endIndex;

public BackgroundColorSpan createBackgroundColorSpan() {
this.backgroundColorSpan = new BackgroundColorSpan(BACKGROUND_COLOR);
return this.backgroundColorSpan;
}

public BackgroundColorSpan createSpecialBackgroundColorSpan() {
this.backgroundColorSpan = new BackgroundColorSpan(SPECIAL_BACKGROUND_COLOR);
return this.backgroundColorSpan;
}

public BackgroundColorSpan getBackgroundColorSpan() {
return this.backgroundColorSpan;
}

public static class BackgroundColorSpan extends android.text.style.BackgroundColorSpan {
public BackgroundColorSpan(int color) {
super(color);
}
}

public int getStartIndex() {
return startIndex;
}

public int getEndIndex() {
return endIndex;
}

public int getLength() {
return this.endIndex - this.startIndex;
}

public void setStartIndex(int startIndex) {
this.startIndex = startIndex;
}

public void setEndIndex(int endIndex) {
this.endIndex = endIndex;
}

public void offsetStartIndex(int offset) {
this.startIndex += offset;
}

public void offsetEndIndex(int offset) {
this.endIndex += offset;
}
}
Loading