Update dependencies
This commit is contained in:
parent
13536302cc
commit
ab4c80dca5
@ -4,8 +4,8 @@ import android.app.Application;
|
|||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.support.annotation.NonNull;
|
import android.support.annotation.NonNull;
|
||||||
|
|
||||||
import ru.noties.debug.AndroidLogDebugOutput;
|
import io.noties.debug.AndroidLogDebugOutput;
|
||||||
import ru.noties.debug.Debug;
|
import io.noties.debug.Debug;
|
||||||
|
|
||||||
public class App extends Application {
|
public class App extends Application {
|
||||||
|
|
||||||
|
@ -13,7 +13,7 @@ import android.widget.TextView;
|
|||||||
import javax.inject.Inject;
|
import javax.inject.Inject;
|
||||||
|
|
||||||
import io.noties.markwon.Markwon;
|
import io.noties.markwon.Markwon;
|
||||||
import ru.noties.debug.Debug;
|
import io.noties.debug.Debug;
|
||||||
|
|
||||||
public class MainActivity extends Activity {
|
public class MainActivity extends Activity {
|
||||||
|
|
||||||
|
@ -24,7 +24,7 @@ import okhttp3.OkHttpClient;
|
|||||||
import okhttp3.Request;
|
import okhttp3.Request;
|
||||||
import okhttp3.Response;
|
import okhttp3.Response;
|
||||||
import okhttp3.ResponseBody;
|
import okhttp3.ResponseBody;
|
||||||
import ru.noties.debug.Debug;
|
import io.noties.debug.Debug;
|
||||||
|
|
||||||
@ActivityScope
|
@ActivityScope
|
||||||
public class MarkdownLoader {
|
public class MarkdownLoader {
|
||||||
|
@ -33,7 +33,7 @@ import io.noties.markwon.syntax.Prism4jThemeDefault;
|
|||||||
import io.noties.markwon.syntax.SyntaxHighlightPlugin;
|
import io.noties.markwon.syntax.SyntaxHighlightPlugin;
|
||||||
import io.noties.markwon.urlprocessor.UrlProcessor;
|
import io.noties.markwon.urlprocessor.UrlProcessor;
|
||||||
import io.noties.markwon.urlprocessor.UrlProcessorRelativeToAbsolute;
|
import io.noties.markwon.urlprocessor.UrlProcessorRelativeToAbsolute;
|
||||||
import ru.noties.debug.Debug;
|
import io.noties.debug.Debug;
|
||||||
import ru.noties.prism4j.Prism4j;
|
import ru.noties.prism4j.Prism4j;
|
||||||
|
|
||||||
@ActivityScope
|
@ActivityScope
|
||||||
|
@ -69,8 +69,8 @@ ext {
|
|||||||
'jlatexmath-android' : 'ru.noties:jlatexmath-android:0.1.0',
|
'jlatexmath-android' : 'ru.noties:jlatexmath-android:0.1.0',
|
||||||
'okhttp' : 'com.squareup.okhttp3:okhttp:3.9.0',
|
'okhttp' : 'com.squareup.okhttp3:okhttp:3.9.0',
|
||||||
'prism4j' : 'ru.noties:prism4j:1.1.0',
|
'prism4j' : 'ru.noties:prism4j:1.1.0',
|
||||||
'debug' : 'ru.noties:debug:3.0.0@jar',
|
'debug' : 'io.noties:debug:5.0.0@jar',
|
||||||
'adapt' : 'ru.noties:adapt:1.1.0',
|
'adapt' : 'io.noties:adapt:2.0.0',
|
||||||
'dagger' : "com.google.dagger:dagger:$daggerVersion",
|
'dagger' : "com.google.dagger:dagger:$daggerVersion",
|
||||||
'picasso' : 'com.squareup.picasso:picasso:2.71828',
|
'picasso' : 'com.squareup.picasso:picasso:2.71828',
|
||||||
'glide' : 'com.github.bumptech.glide:glide:4.9.0'
|
'glide' : 'com.github.bumptech.glide:glide:4.9.0'
|
||||||
|
@ -8,20 +8,20 @@ import android.support.annotation.NonNull;
|
|||||||
import android.support.annotation.VisibleForTesting;
|
import android.support.annotation.VisibleForTesting;
|
||||||
import android.support.v7.widget.LinearLayoutManager;
|
import android.support.v7.widget.LinearLayoutManager;
|
||||||
import android.support.v7.widget.RecyclerView;
|
import android.support.v7.widget.RecyclerView;
|
||||||
import android.view.View;
|
|
||||||
|
|
||||||
import java.util.Arrays;
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import io.noties.adapt.Adapt;
|
||||||
|
import io.noties.adapt.Item;
|
||||||
|
import io.noties.debug.AndroidLogDebugOutput;
|
||||||
|
import io.noties.debug.Debug;
|
||||||
import io.noties.markwon.Markwon;
|
import io.noties.markwon.Markwon;
|
||||||
import io.noties.markwon.sample.basicplugins.BasicPluginsActivity;
|
import io.noties.markwon.sample.basicplugins.BasicPluginsActivity;
|
||||||
import io.noties.markwon.sample.core.CoreActivity;
|
import io.noties.markwon.sample.core.CoreActivity;
|
||||||
import io.noties.markwon.sample.customextension.CustomExtensionActivity;
|
import io.noties.markwon.sample.customextension.CustomExtensionActivity;
|
||||||
import io.noties.markwon.sample.latex.LatexActivity;
|
import io.noties.markwon.sample.latex.LatexActivity;
|
||||||
import io.noties.markwon.sample.recycler.RecyclerActivity;
|
import io.noties.markwon.sample.recycler.RecyclerActivity;
|
||||||
import ru.noties.adapt.Adapt;
|
|
||||||
import ru.noties.adapt.OnClickViewProcessor;
|
|
||||||
import ru.noties.debug.AndroidLogDebugOutput;
|
|
||||||
import ru.noties.debug.Debug;
|
|
||||||
|
|
||||||
public class MainActivity extends Activity {
|
public class MainActivity extends Activity {
|
||||||
|
|
||||||
@ -38,21 +38,20 @@ public class MainActivity extends Activity {
|
|||||||
// here we are creating as core markwon (no additional plugins are registered)
|
// here we are creating as core markwon (no additional plugins are registered)
|
||||||
final Markwon markwon = Markwon.create(this);
|
final Markwon markwon = Markwon.create(this);
|
||||||
|
|
||||||
final Adapt<SampleItem> adapt = Adapt.builder(SampleItem.class)
|
final Adapt adapt = Adapt.create();
|
||||||
.include(SampleItem.class, new SampleItemView(markwon), new OnClickViewProcessor<SampleItem>() {
|
|
||||||
@Override
|
final List<Item> items = new ArrayList<>();
|
||||||
public void onClick(@NonNull SampleItem item, @NonNull View view) {
|
final SampleItem.OnClickListener onClickListener = this::showSample;
|
||||||
showSample(item);
|
for (Sample sample : Sample.values()) {
|
||||||
}
|
items.add(new SampleItem(sample, markwon, onClickListener));
|
||||||
})
|
}
|
||||||
.build();
|
adapt.setItems(items);
|
||||||
adapt.setItems(Arrays.asList(SampleItem.values()));
|
|
||||||
|
|
||||||
final RecyclerView recyclerView = findViewById(R.id.recycler_view);
|
final RecyclerView recyclerView = findViewById(R.id.recycler_view);
|
||||||
recyclerView.setLayoutManager(new LinearLayoutManager(this));
|
recyclerView.setLayoutManager(new LinearLayoutManager(this));
|
||||||
recyclerView.setHasFixedSize(true);
|
recyclerView.setHasFixedSize(true);
|
||||||
recyclerView.addItemDecoration(createSampleItemDecoration());
|
recyclerView.addItemDecoration(createSampleItemDecoration());
|
||||||
recyclerView.setAdapter(adapt.recyclerViewAdapter());
|
recyclerView.setAdapter(adapt);
|
||||||
}
|
}
|
||||||
|
|
||||||
@NonNull
|
@NonNull
|
||||||
@ -66,12 +65,12 @@ public class MainActivity extends Activity {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void showSample(@NonNull SampleItem item) {
|
private void showSample(@NonNull Sample item) {
|
||||||
startActivity(sampleItemIntent(this, item));
|
startActivity(sampleItemIntent(this, item));
|
||||||
}
|
}
|
||||||
|
|
||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
static Intent sampleItemIntent(@NonNull Context context, @NonNull SampleItem item) {
|
static Intent sampleItemIntent(@NonNull Context context, @NonNull Sample item) {
|
||||||
|
|
||||||
final Class<? extends Activity> activity;
|
final Class<? extends Activity> activity;
|
||||||
|
|
||||||
|
30
sample/src/main/java/io/noties/markwon/sample/Sample.java
Normal file
30
sample/src/main/java/io/noties/markwon/sample/Sample.java
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
package io.noties.markwon.sample;
|
||||||
|
|
||||||
|
import android.support.annotation.StringRes;
|
||||||
|
|
||||||
|
public enum Sample {
|
||||||
|
|
||||||
|
// all usages of markwon without plugins (parse, render, setMarkwon, etc)
|
||||||
|
CORE(R.string.sample_core),
|
||||||
|
|
||||||
|
BASIC_PLUGINS(R.string.sample_basic_plugins),
|
||||||
|
|
||||||
|
LATEX(R.string.sample_latex),
|
||||||
|
|
||||||
|
CUSTOM_EXTENSION(R.string.sample_custom_extension),
|
||||||
|
|
||||||
|
RECYCLER(R.string.sample_recycler),
|
||||||
|
|
||||||
|
;
|
||||||
|
|
||||||
|
private final int textResId;
|
||||||
|
|
||||||
|
Sample(@StringRes int textResId) {
|
||||||
|
this.textResId = textResId;
|
||||||
|
}
|
||||||
|
|
||||||
|
@StringRes
|
||||||
|
public int textResId() {
|
||||||
|
return textResId;
|
||||||
|
}
|
||||||
|
}
|
@ -1,30 +1,79 @@
|
|||||||
package io.noties.markwon.sample;
|
package io.noties.markwon.sample;
|
||||||
|
|
||||||
import android.support.annotation.StringRes;
|
import android.support.annotation.NonNull;
|
||||||
|
import android.text.Spanned;
|
||||||
|
import android.view.LayoutInflater;
|
||||||
|
import android.view.View;
|
||||||
|
import android.view.ViewGroup;
|
||||||
|
import android.widget.TextView;
|
||||||
|
|
||||||
public enum SampleItem {
|
import io.noties.adapt.Item;
|
||||||
|
import io.noties.markwon.Markwon;
|
||||||
|
import io.noties.markwon.utils.NoCopySpannableFactory;
|
||||||
|
|
||||||
// all usages of markwon without plugins (parse, render, setMarkwon, etc)
|
class SampleItem extends Item<SampleItem.SampleHolder> {
|
||||||
CORE(R.string.sample_core),
|
|
||||||
|
|
||||||
BASIC_PLUGINS(R.string.sample_basic_plugins),
|
interface OnClickListener {
|
||||||
|
void onClick(@NonNull Sample sample);
|
||||||
LATEX(R.string.sample_latex),
|
|
||||||
|
|
||||||
CUSTOM_EXTENSION(R.string.sample_custom_extension),
|
|
||||||
|
|
||||||
RECYCLER(R.string.sample_recycler),
|
|
||||||
|
|
||||||
;
|
|
||||||
|
|
||||||
private final int textResId;
|
|
||||||
|
|
||||||
SampleItem(@StringRes int textResId) {
|
|
||||||
this.textResId = textResId;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@StringRes
|
private final Sample sample;
|
||||||
public int textResId() {
|
|
||||||
return textResId;
|
private final Markwon markwon;
|
||||||
|
|
||||||
|
private final OnClickListener onClickListener;
|
||||||
|
|
||||||
|
// instance specific cache
|
||||||
|
private Spanned cache;
|
||||||
|
|
||||||
|
SampleItem(@NonNull Sample sample, @NonNull Markwon markwon, @NonNull OnClickListener onClickListener) {
|
||||||
|
super(sample.ordinal());
|
||||||
|
this.sample = sample;
|
||||||
|
this.markwon = markwon;
|
||||||
|
this.onClickListener = onClickListener;
|
||||||
|
}
|
||||||
|
|
||||||
|
@NonNull
|
||||||
|
@Override
|
||||||
|
public SampleHolder createHolder(@NonNull LayoutInflater inflater, @NonNull ViewGroup parent) {
|
||||||
|
|
||||||
|
final SampleHolder holder = new SampleHolder(inflater.inflate(
|
||||||
|
R.layout.adapt_sample_item,
|
||||||
|
parent,
|
||||||
|
false));
|
||||||
|
|
||||||
|
// set Spannable.Factory so when TextView will receive a new content
|
||||||
|
// it won't create new Spannable and copy all the spans but instead
|
||||||
|
// re-use existing Spannable thus improving performance
|
||||||
|
holder.textView.setSpannableFactory(NoCopySpannableFactory.getInstance());
|
||||||
|
|
||||||
|
return holder;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void render(@NonNull SampleHolder holder) {
|
||||||
|
|
||||||
|
// retrieve an item from cache or create new one
|
||||||
|
// simple lazy loading pattern (cache on first call then re-use)
|
||||||
|
Spanned spanned = this.cache;
|
||||||
|
if (spanned == null) {
|
||||||
|
spanned = cache = markwon.toMarkdown(
|
||||||
|
holder.textView.getResources().getString(sample.textResId()));
|
||||||
|
}
|
||||||
|
|
||||||
|
holder.textView.setText(spanned);
|
||||||
|
|
||||||
|
holder.itemView.setOnClickListener(v -> onClickListener.onClick(sample));
|
||||||
|
}
|
||||||
|
|
||||||
|
static class SampleHolder extends Item.Holder {
|
||||||
|
|
||||||
|
final TextView textView;
|
||||||
|
|
||||||
|
SampleHolder(@NonNull View view) {
|
||||||
|
super(view);
|
||||||
|
|
||||||
|
this.textView = requireView(R.id.text);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,75 +0,0 @@
|
|||||||
package io.noties.markwon.sample;
|
|
||||||
|
|
||||||
import android.support.annotation.NonNull;
|
|
||||||
import android.text.Spannable;
|
|
||||||
import android.text.Spanned;
|
|
||||||
import android.view.LayoutInflater;
|
|
||||||
import android.view.View;
|
|
||||||
import android.view.ViewGroup;
|
|
||||||
import android.widget.TextView;
|
|
||||||
|
|
||||||
import java.util.EnumMap;
|
|
||||||
|
|
||||||
import io.noties.markwon.Markwon;
|
|
||||||
import io.noties.markwon.utils.NoCopySpannableFactory;
|
|
||||||
import ru.noties.adapt.Holder;
|
|
||||||
import ru.noties.adapt.ItemView;
|
|
||||||
|
|
||||||
class SampleItemView extends ItemView<SampleItem, SampleItemView.SampleHolder> {
|
|
||||||
|
|
||||||
private final Markwon markwon;
|
|
||||||
|
|
||||||
// instance specific factory
|
|
||||||
private final Spannable.Factory factory;
|
|
||||||
|
|
||||||
// instance specific cache
|
|
||||||
private final EnumMap<SampleItem, Spanned> cache;
|
|
||||||
|
|
||||||
SampleItemView(@NonNull Markwon markwon) {
|
|
||||||
this.markwon = markwon;
|
|
||||||
this.factory = NoCopySpannableFactory.getInstance();
|
|
||||||
this.cache = new EnumMap<>(SampleItem.class);
|
|
||||||
}
|
|
||||||
|
|
||||||
@NonNull
|
|
||||||
@Override
|
|
||||||
public SampleHolder createHolder(@NonNull LayoutInflater inflater, @NonNull ViewGroup parent) {
|
|
||||||
|
|
||||||
final SampleHolder holder = new SampleHolder(inflater.inflate(
|
|
||||||
R.layout.adapt_sample_item,
|
|
||||||
parent,
|
|
||||||
false));
|
|
||||||
|
|
||||||
// set Spannable.Factory so when TextView will receive a new content
|
|
||||||
// it won't create new Spannable and copy all the spans but instead
|
|
||||||
// re-use existing Spannable thus improving performance
|
|
||||||
holder.textView.setSpannableFactory(factory);
|
|
||||||
|
|
||||||
return holder;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void bindHolder(@NonNull SampleHolder holder, @NonNull SampleItem item) {
|
|
||||||
|
|
||||||
// retrieve an item from cache or create new one
|
|
||||||
// simple lazy loading pattern (cache on first call then re-use)
|
|
||||||
Spanned spanned = cache.get(item);
|
|
||||||
if (spanned == null) {
|
|
||||||
spanned = markwon.toMarkdown(context(holder).getString(item.textResId()));
|
|
||||||
cache.put(item, spanned);
|
|
||||||
}
|
|
||||||
|
|
||||||
holder.textView.setText(spanned);
|
|
||||||
}
|
|
||||||
|
|
||||||
static class SampleHolder extends Holder {
|
|
||||||
|
|
||||||
final TextView textView;
|
|
||||||
|
|
||||||
SampleHolder(@NonNull View view) {
|
|
||||||
super(view);
|
|
||||||
|
|
||||||
this.textView = requireView(R.id.text);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -32,8 +32,8 @@ import io.noties.markwon.recycler.table.TableEntryPlugin;
|
|||||||
import io.noties.markwon.sample.R;
|
import io.noties.markwon.sample.R;
|
||||||
import io.noties.markwon.urlprocessor.UrlProcessor;
|
import io.noties.markwon.urlprocessor.UrlProcessor;
|
||||||
import io.noties.markwon.urlprocessor.UrlProcessorRelativeToAbsolute;
|
import io.noties.markwon.urlprocessor.UrlProcessorRelativeToAbsolute;
|
||||||
import ru.noties.debug.AndroidLogDebugOutput;
|
import io.noties.debug.AndroidLogDebugOutput;
|
||||||
import ru.noties.debug.Debug;
|
import io.noties.debug.Debug;
|
||||||
|
|
||||||
public class RecyclerActivity extends Activity {
|
public class RecyclerActivity extends Activity {
|
||||||
|
|
||||||
|
@ -17,7 +17,7 @@ public class MainActivityTest {
|
|||||||
@Test
|
@Test
|
||||||
public void all_sample_items_have_activity_associated() {
|
public void all_sample_items_have_activity_associated() {
|
||||||
final Context context = RuntimeEnvironment.application;
|
final Context context = RuntimeEnvironment.application;
|
||||||
for (SampleItem item : SampleItem.values()) {
|
for (Sample item : Sample.values()) {
|
||||||
// we assert as not null, but in case of an error this method should throw
|
// we assert as not null, but in case of an error this method should throw
|
||||||
assertNotNull(MainActivity.sampleItemIntent(context, item));
|
assertNotNull(MainActivity.sampleItemIntent(context, item));
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user