Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c8f1581a authored by stefan-niedermann's avatar stefan-niedermann
Browse files

#363 Context based formatting

parent a734da49
Loading
Loading
Loading
Loading
+20 −18
Original line number Diff line number Diff line
@@ -3,7 +3,6 @@ package it.niedermann.owncloud.notes.android.fragment;
import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
import androidx.annotation.Nullable;
import android.text.Editable;
import android.text.TextWatcher;
import android.util.Log;
@@ -18,12 +17,14 @@ import com.yydcdut.markdown.syntax.edit.EditFactory;
import com.yydcdut.rxmarkdown.RxMDEditText;
import com.yydcdut.rxmarkdown.RxMarkdown;

import androidx.annotation.Nullable;
import butterknife.BindView;
import butterknife.ButterKnife;
import it.niedermann.owncloud.notes.R;
import it.niedermann.owncloud.notes.model.CloudNote;
import it.niedermann.owncloud.notes.util.ICallback;
import it.niedermann.owncloud.notes.util.MarkDownUtil;
import it.niedermann.owncloud.notes.util.StyleCallback;
import rx.Subscriber;

public class NoteEditFragment extends BaseNoteFragment {
@@ -137,6 +138,7 @@ public class NoteEditFragment extends BaseNoteFragment {
                    editContent.setText(charSequence, TextView.BufferType.SPANNABLE);
                }
            });
        editContent.setCustomSelectionActionModeCallback(new StyleCallback(this.editContent));
    }

    @Override
+1 −5
Original line number Diff line number Diff line
package it.niedermann.owncloud.notes.android.fragment;

import android.os.Bundle;
import androidx.annotation.Nullable;
import androidx.core.content.res.ResourcesCompat;
import androidx.core.content.res.TypedArrayUtils;
import androidx.core.text.TextUtilsCompat;

import android.text.method.LinkMovementMethod;
import android.util.Log;
import android.view.LayoutInflater;
@@ -18,6 +13,7 @@ import com.yydcdut.markdown.syntax.text.TextFactory;
import com.yydcdut.rxmarkdown.RxMDTextView;
import com.yydcdut.rxmarkdown.RxMarkdown;

import androidx.annotation.Nullable;
import butterknife.BindView;
import butterknife.ButterKnife;
import it.niedermann.owncloud.notes.R;
+68 −0
Original line number Diff line number Diff line
package it.niedermann.owncloud.notes.util;

import android.graphics.Typeface;
import android.text.SpannableStringBuilder;
import android.text.style.StyleSpan;
import android.view.ActionMode;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.widget.TextView;

import it.niedermann.owncloud.notes.R;

public class StyleCallback implements ActionMode.Callback {

    private TextView textView;

    public StyleCallback(TextView textView) {
        this.textView = textView;
    }

    @Override
    public boolean onCreateActionMode(ActionMode mode, Menu menu) {
        MenuInflater inflater = mode.getMenuInflater();
        inflater.inflate(R.menu.style, menu);
        menu.removeItem(android.R.id.selectAll);
        return true;
    }

    @Override
    public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
        return false;
    }

    @Override
    public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
        int start = textView.getSelectionStart();
        int end = textView.getSelectionEnd();
        SpannableStringBuilder ssb = new SpannableStringBuilder(textView.getText());
        final String markdown;

        switch(item.getItemId()) {
            case R.id.bold:
                markdown = "**";
                ssb.insert(end, markdown);
                ssb.insert(start, markdown);
                textView.getText().charAt(start);
                textView.getText().charAt(start + 1);
                end += markdown.length() * 2;
                ssb.setSpan(new StyleSpan(Typeface.BOLD), start, end, 1);
                textView.setText(ssb);
            break;
            case R.id.italic:
                markdown = "*";
                ssb.insert(end, markdown);
                ssb.insert(start, markdown);
                end += markdown.length() * 2;
                ssb.setSpan(new StyleSpan(Typeface.ITALIC), start, end, 1);
                textView.setText(ssb);
        }
        return false;
    }

    @Override
    public void onDestroyActionMode(ActionMode mode) {

    }
}
+5 −0
Original line number Diff line number Diff line
<vector android:autoMirrored="true" android:height="24dp"
    android:tint="#666666" android:viewportHeight="24.0"
    android:viewportWidth="24.0" android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
    <path android:fillColor="#FF000000" android:pathData="M15.6,10.79c0.97,-0.67 1.65,-1.77 1.65,-2.79 0,-2.26 -1.75,-4 -4,-4L7,4v14h7.04c2.09,0 3.71,-1.7 3.71,-3.79 0,-1.52 -0.86,-2.82 -2.15,-3.42zM10,6.5h3c0.83,0 1.5,0.67 1.5,1.5s-0.67,1.5 -1.5,1.5h-3v-3zM13.5,15.5L10,15.5v-3h3.5c0.83,0 1.5,0.67 1.5,1.5s-0.67,1.5 -1.5,1.5z"/>
</vector>
+5 −0
Original line number Diff line number Diff line
<vector android:autoMirrored="true" android:height="24dp"
    android:tint="#666666" android:viewportHeight="24.0"
    android:viewportWidth="24.0" android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
    <path android:fillColor="#FF000000" android:pathData="M10,4v3h2.21l-3.42,8H6v3h8v-3h-2.21l3.42,-8H18V4z"/>
</vector>
Loading