Update dependencies

This commit is contained in:
Dimitry Ivanov 2019-06-05 00:35:39 +03:00
parent 13536302cc
commit ab4c80dca5
11 changed files with 127 additions and 124 deletions

View File

@ -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 {

View File

@ -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 {

View File

@ -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 {

View File

@ -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

View File

@ -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'

View File

@ -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));
} }
}) adapt.setItems(items);
.build();
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;

View 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;
}
}

View File

@ -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);
}
} }
} }

View File

@ -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);
}
}
}

View File

@ -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 {

View File

@ -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));
} }