Markwon/app/src/main/java/ru/noties/markwon/MainActivity.java
2017-05-11 22:02:44 +03:00

115 lines
4.2 KiB
Java

package ru.noties.markwon;
import android.app.Activity;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.os.SystemClock;
import android.text.SpannableStringBuilder;
import android.text.Spanned;
import android.text.method.LinkMovementMethod;
import android.widget.TextView;
import org.commonmark.ext.gfm.strikethrough.StrikethroughExtension;
import org.commonmark.node.Node;
import org.commonmark.parser.Parser;
import java.io.IOException;
import java.io.InputStream;
import java.util.Arrays;
import java.util.Scanner;
import ru.noties.debug.AndroidLogDebugOutput;
import ru.noties.debug.Debug;
import ru.noties.markwon.renderer.*;
import ru.noties.markwon.spans.DrawableSpan;
import ru.noties.markwon.spans.DrawableSpanUtils;
public class MainActivity extends Activity {
static {
Debug.init(new AndroidLogDebugOutput(true));
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final TextView textView = (TextView) findViewById(R.id.activity_main);
// final Drawable drawable = getDrawable(R.mipmap.ic_launcher);
//// drawable.setBounds(0, 0, 16, 16);
// final SpannableStringBuilder builder = new SpannableStringBuilder();
// for (int i = 0; i < 10; i++) {
// builder.append("text here and icon: \u00a0");
// //noinspection WrongConstant
// builder.setSpan(new DrawableSpan(drawable, i % 3), builder.length() - 1, builder.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
// builder.append('\n');
// }
// textView.setText(builder);
//
// if (true) {
// return;
// }
new Thread(new Runnable() {
@Override
public void run() {
InputStream stream = null;
Scanner scanner = null;
String md = null;
try {
stream = getAssets().open("test.md");
scanner = new Scanner(stream).useDelimiter("\\A");
if (scanner.hasNext()) {
md = scanner.next();
}
} catch (Throwable t) {
Debug.e(t);
} finally {
if (stream != null) {
try { stream.close(); } catch (IOException e) {}
}
if (scanner != null) {
scanner.close();
}
}
if (md != null) {
final long start = SystemClock.uptimeMillis();
final Parser parser = new Parser.Builder()
.extensions(Arrays.asList(StrikethroughExtension.create()))
.build();
final Node node = parser.parse(md);
final CharSequence text = new ru.noties.markwon.renderer.SpannableRenderer().render(
SpannableConfiguration.create(MainActivity.this),
node
);
// final CharSequence text = new SpannableRenderer()._render(node/*, new Runnable() {
// @Override
// public void run() {
// textView.setText(textView.getText());
// final Drawable drawable = null;
// drawable.setCallback(textView);
// }
// }*/);
final long end = SystemClock.uptimeMillis();
Debug.i("Rendered: %d ms, length: %d", end - start, text.length());
// Debug.i(text);
textView.post(new Runnable() {
@Override
public void run() {
// NB! LinkMovementMethod forces frequent updates...
textView.setMovementMethod(LinkMovementMethod.getInstance());
textView.setText(text);
DrawableSpanUtils.scheduleDrawables(textView);
}
});
}
}
}).start();
}
}