Skip to content

Commit

Permalink
Merge branch 'master' into libraries_update
Browse files Browse the repository at this point in the history
  • Loading branch information
guanglinn authored Dec 13, 2024
2 parents 89716a1 + 0e94057 commit 5d7b413
Show file tree
Hide file tree
Showing 11 changed files with 131 additions and 74 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -286,7 +286,7 @@ public void onPause() {
_appSettings.setDocumentPreviewState(_document.path, _isPreviewVisible);
_appSettings.setLastEditPosition(_document.path, TextViewUtils.getSelection(_hlEditor)[0]);

if(_document.path.equals(_appSettings.getTodoFile().getAbsolutePath())){
if (_document.path.equals(_appSettings.getTodoFile().getAbsolutePath())) {
TodoWidgetProvider.updateTodoWidgets();
}
super.onPause();
Expand Down Expand Up @@ -862,7 +862,12 @@ private boolean isDisplayedAtMainActivity() {
}

public void updateViewModeText() {
_format.getConverter().convertMarkupShowInWebView(_document, getTextString(), getActivity(), _webView, _nextConvertToPrintMode, _hlEditor.isLineNumbersEnabled());
// Don't let text to view mode crash app
try {
_format.getConverter().convertMarkupShowInWebView(_document, getTextString(), getActivity(), _webView, _nextConvertToPrintMode, _hlEditor.isLineNumbersEnabled());
} catch (OutOfMemoryError e) {
_format.getConverter().convertMarkupShowInWebView(_document, "updateViewModeText getTextString(): OutOfMemory " + e, getActivity(), _webView, _nextConvertToPrintMode, _hlEditor.isLineNumbersEnabled());
}
}

public void setViewModeVisibility(final boolean show) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
import android.os.Build;
import android.os.Bundle;
import android.text.TextUtils;
import android.util.Log;
import android.util.Pair;
import android.util.Patterns;
import android.util.TypedValue;
Expand Down Expand Up @@ -433,7 +434,9 @@ public void onFsViewerConfig(GsFileBrowserOptions.Options dopt) {

@Override
public void onFsViewerSelected(final String request, final File sel, final Integer lineNumber) {
if (sel.isDirectory()) {
if (sel == null) {
Log.e(getClass().getName(), "onFsViewerSelected: selected file is null");
} else if (sel.isDirectory()) {
NewFileDialog.newInstance(sel, false, f -> {
if (f.isFile()) {
appendToExistingDocumentAndClose(f, true);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -251,11 +251,6 @@ private List<String> loadActionPreference(final String suffix) {
public List<String> getActionOrder() {
final Set<String> order = new LinkedHashSet<>(loadActionPreference(ORDER_SUFFIX));

// Handle the case where order was stored without suffix. i.e. before this release.
if (order.isEmpty()) {
order.addAll(loadActionPreference(""));
}

final Set<String> defined = new LinkedHashSet<>(getActiveActionKeys());
final Set<String> disabled = new LinkedHashSet<>(getDisabledActions());

Expand Down Expand Up @@ -302,7 +297,7 @@ public void recreateActionButtons(final ViewGroup barLayout, final ActionItem.Di
@SuppressLint("ClickableViewAccessibility")
private void setupRepeat(final View btn) {
// Velocity and acceleration parameters
final int INITIAL_DELAY = 400, DELTA_DELAY = 50, MIN_DELAY = 100;
final int INITIAL_DELAY = 300, DELTA_DELAY = 100, MIN_DELAY = 100;
final Handler handler = new Handler();

final Runnable repeater = new Runnable() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -162,6 +162,12 @@ private AlertDialog makeDialog(final File basedir, final boolean allowCreateDir,
templateAdapter.addAll(GsCollectionUtils.map(templates, p -> p.first));
templateSpinner.setAdapter(templateAdapter);

templateSpinner.setOnItemSelectedListener(new GsAndroidSpinnerOnItemSelectedAdapter(pos -> {
final String template = templateAdapter.getItem(pos);
final String fmt = appSettings.getTemplateTitleFormat(template);
formatEdit.setText(fmt);
}));

// Setup type / format spinner and action
// -----------------------------------------------------------------------------------------
final ArrayAdapter<String> typeAdapter = new ArrayAdapter<>(activity, android.R.layout.simple_spinner_dropdown_item);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,11 @@
import android.text.Layout;
import android.text.TextWatcher;
import android.util.AttributeSet;
import android.view.ActionMode;
import android.util.Log;
import android.view.KeyEvent;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewTreeObserver;
import android.view.accessibility.AccessibilityEvent;
Expand All @@ -30,6 +33,7 @@
import androidx.appcompat.widget.AppCompatEditText;

import net.gsantner.markor.ApplicationObject;
import net.gsantner.markor.R;
import net.gsantner.markor.activity.MainActivity;
import net.gsantner.markor.model.AppSettings;
import net.gsantner.opoc.format.GsTextUtils;
Expand Down Expand Up @@ -114,12 +118,19 @@ public void afterTextChanged(final Editable s) {

// Fix for Android 12 perf issues - https://github.com/gsantner/markor/discussions/1794
setEmojiCompatEnabled(false);

// Custom options
setupCustomOptions();
}

@Override
public boolean onPreDraw() {
_lineNumbersDrawer.setTextSize(getTextSize());
return super.onPreDraw();
try {
return super.onPreDraw();
} catch (OutOfMemoryError ignored) {
return false; // return false to cancel current drawing pass/round
}
}

@Override
Expand Down Expand Up @@ -518,6 +529,11 @@ public void withAutoFormatDisabled(final GsCallback.a0 callback) {
// Utility functions for interaction
// ---------------------------------------------------------------------------------------------

public void selectLines() {
final int[] sel = TextViewUtils.getLineSelection(this);
setSelection(sel[0], sel[1]);
}

public void simulateKeyPress(int keyEvent_KEYCODE_SOMETHING) {
dispatchKeyEvent(new KeyEvent(0, 0, KeyEvent.ACTION_DOWN, keyEvent_KEYCODE_SOMETHING, 0));
dispatchKeyEvent(new KeyEvent(0, 0, KeyEvent.ACTION_UP, keyEvent_KEYCODE_SOMETHING, 0));
Expand Down Expand Up @@ -738,4 +754,37 @@ public void reset() {
_maxNumberDigits = 0;
}
}

private void setupCustomOptions() {
setCustomSelectionActionModeCallback(new ActionMode.Callback() {
@Override
public boolean onCreateActionMode(ActionMode mode, Menu menu) {
// Add custom items programmatically
menu.add(0, R.string.option_select_lines, 0, "☰");
return true;
}

@Override
public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
// Modify menu items here if necessary
return true;
}

@Override
public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
switch (item.getItemId()) {
case R.string.option_select_lines:
HighlightingEditor.this.selectLines();
return true;
default:
return false;
}
}

@Override
public void onDestroyActionMode(ActionMode mode) {
// Cleanup if needed
}
});
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -62,9 +62,9 @@
* Spans are further divided into two categories: dynamic and static.
* - Dynamic spans are updated as one scrolls, as described above
* - Static spans are applied once and never updated. These are typically used for
* spans which affect the text layout.
* - For example, a span which makes text bigger.
* - Updating these dynamically would make the text jump around as one scrolls
* spans which affect the text layout.
* - For example, a span which makes text bigger.
* - Updating these dynamically would make the text jump around as one scrolls
* <p>
* Fixup:
* - As the user types we shift all spans to accomodate the changed text.
Expand All @@ -75,19 +75,19 @@
* - Derived classes should override generateSpans() to generate all spans
* - New spans are added by calling addSpanGroup()
* - The HighlightingEditor will trigger the generation of spans when the text changes.
* - This is debounced so that changes are batched
* - Span generation is done on a background thread
* - This is debounced so that changes are batched
* - Span generation is done on a background thread
* <p>
* Other performance tips:
* - Performance is heavily dependent on the number of spans applied to the text.
* - Combine related spans into a single span if possible
* - HighlightSpan is a helper class which can be used to create a span with multiple attributes
* - For example, a span which makes text bold and italic
* - HighlightSpan is a helper class which can be used to create a span with multiple attributes
* - For example, a span which makes text bold and italic
* - Absolutely minimize the number of spans implementing `UpdateLayout`
* - These spans trigger a text layout update when changed in any way
* - Instead consider using a span implementing `StaticSpan`
* - If StaticSpans are present, the text is reflowed after applying them
* - This happens once, and not for each span, which is much more efficient
* - These spans trigger a text layout update when changed in any way
* - Instead consider using a span implementing `StaticSpan`
* - If StaticSpans are present, the text is reflowed after applying them
* - This happens once, and not for each span, which is much more efficient
*/
public abstract class SyntaxHighlighterBase {

Expand Down Expand Up @@ -230,7 +230,7 @@ public SyntaxHighlighterBase clearStatic() {
boolean hasStatic = false;
for (int i = _groups.size() - 1; i >= 0; i--) {
final SpanGroup group = _groups.get(i);
if (group.isStatic) {
if (group != null && group.isStatic) {
hasStatic = true;
_spannable.removeSpan(group.span);
}
Expand Down Expand Up @@ -348,7 +348,7 @@ public SyntaxHighlighterBase applyDynamic(final int[] range) {
for (int i = 0; i < _groups.size(); i++) {
final SpanGroup group = _groups.get(i);

if (group.isStatic) {
if (group == null || group.isStatic) {
continue;
}

Expand All @@ -368,7 +368,6 @@ public SyntaxHighlighterBase applyDynamic(final int[] range) {
}



public SyntaxHighlighterBase applyStatic() {
if (_spannable != null && !_staticApplied) {
applyFixup();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -173,7 +173,6 @@ public void onViewCreated(final View root, final @Nullable Bundle savedInstanceS

_filesystemViewerAdapter = new GsFileBrowserListAdapter(_dopt, activity);
_recyclerList.setAdapter(_filesystemViewerAdapter);
_filesystemViewerAdapter.getFilter().filter("");
onFsViewerDoUiUpdate(_filesystemViewerAdapter);

// Setup callbacks
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -124,7 +124,6 @@ public void onViewCreated(@NonNull View root, @Nullable Bundle savedInstanceStat

_filesystemViewerAdapter = new GsFileBrowserListAdapter(_dopt, context);
_recyclerList.setAdapter(_filesystemViewerAdapter);
_filesystemViewerAdapter.getFilter().filter("");
onFsViewerDoUiUpdate(_filesystemViewerAdapter);

_swipe.setOnRefreshListener(() -> {
Expand Down
Loading

0 comments on commit 5d7b413

Please sign in to comment.