From ab4c80dca57659051a9929fd61e1c02f7aa34fca Mon Sep 17 00:00:00 2001 From: Dimitry Ivanov Date: Wed, 5 Jun 2019 00:35:39 +0300 Subject: [PATCH] Update dependencies --- .../main/java/io/noties/markwon/app/App.java | 4 +- .../io/noties/markwon/app/MainActivity.java | 2 +- .../io/noties/markwon/app/MarkdownLoader.java | 2 +- .../noties/markwon/app/MarkdownRenderer.java | 2 +- build.gradle | 4 +- .../noties/markwon/sample/MainActivity.java | 35 ++++--- .../java/io/noties/markwon/sample/Sample.java | 30 ++++++ .../io/noties/markwon/sample/SampleItem.java | 91 ++++++++++++++----- .../noties/markwon/sample/SampleItemView.java | 75 --------------- .../sample/recycler/RecyclerActivity.java | 4 +- .../markwon/sample/MainActivityTest.java | 2 +- 11 files changed, 127 insertions(+), 124 deletions(-) create mode 100644 sample/src/main/java/io/noties/markwon/sample/Sample.java delete mode 100644 sample/src/main/java/io/noties/markwon/sample/SampleItemView.java diff --git a/app/src/main/java/io/noties/markwon/app/App.java b/app/src/main/java/io/noties/markwon/app/App.java index ce64314a..0b8bced2 100644 --- a/app/src/main/java/io/noties/markwon/app/App.java +++ b/app/src/main/java/io/noties/markwon/app/App.java @@ -4,8 +4,8 @@ import android.app.Application; import android.content.Context; import android.support.annotation.NonNull; -import ru.noties.debug.AndroidLogDebugOutput; -import ru.noties.debug.Debug; +import io.noties.debug.AndroidLogDebugOutput; +import io.noties.debug.Debug; public class App extends Application { diff --git a/app/src/main/java/io/noties/markwon/app/MainActivity.java b/app/src/main/java/io/noties/markwon/app/MainActivity.java index 85594e59..4aa34b47 100644 --- a/app/src/main/java/io/noties/markwon/app/MainActivity.java +++ b/app/src/main/java/io/noties/markwon/app/MainActivity.java @@ -13,7 +13,7 @@ import android.widget.TextView; import javax.inject.Inject; import io.noties.markwon.Markwon; -import ru.noties.debug.Debug; +import io.noties.debug.Debug; public class MainActivity extends Activity { diff --git a/app/src/main/java/io/noties/markwon/app/MarkdownLoader.java b/app/src/main/java/io/noties/markwon/app/MarkdownLoader.java index b08d8d25..05aaa5fc 100644 --- a/app/src/main/java/io/noties/markwon/app/MarkdownLoader.java +++ b/app/src/main/java/io/noties/markwon/app/MarkdownLoader.java @@ -24,7 +24,7 @@ import okhttp3.OkHttpClient; import okhttp3.Request; import okhttp3.Response; import okhttp3.ResponseBody; -import ru.noties.debug.Debug; +import io.noties.debug.Debug; @ActivityScope public class MarkdownLoader { diff --git a/app/src/main/java/io/noties/markwon/app/MarkdownRenderer.java b/app/src/main/java/io/noties/markwon/app/MarkdownRenderer.java index a924cedd..667ef6a4 100644 --- a/app/src/main/java/io/noties/markwon/app/MarkdownRenderer.java +++ b/app/src/main/java/io/noties/markwon/app/MarkdownRenderer.java @@ -33,7 +33,7 @@ import io.noties.markwon.syntax.Prism4jThemeDefault; import io.noties.markwon.syntax.SyntaxHighlightPlugin; import io.noties.markwon.urlprocessor.UrlProcessor; import io.noties.markwon.urlprocessor.UrlProcessorRelativeToAbsolute; -import ru.noties.debug.Debug; +import io.noties.debug.Debug; import ru.noties.prism4j.Prism4j; @ActivityScope diff --git a/build.gradle b/build.gradle index f34a6c05..17105439 100644 --- a/build.gradle +++ b/build.gradle @@ -69,8 +69,8 @@ ext { 'jlatexmath-android' : 'ru.noties:jlatexmath-android:0.1.0', 'okhttp' : 'com.squareup.okhttp3:okhttp:3.9.0', 'prism4j' : 'ru.noties:prism4j:1.1.0', - 'debug' : 'ru.noties:debug:3.0.0@jar', - 'adapt' : 'ru.noties:adapt:1.1.0', + 'debug' : 'io.noties:debug:5.0.0@jar', + 'adapt' : 'io.noties:adapt:2.0.0', 'dagger' : "com.google.dagger:dagger:$daggerVersion", 'picasso' : 'com.squareup.picasso:picasso:2.71828', 'glide' : 'com.github.bumptech.glide:glide:4.9.0' diff --git a/sample/src/main/java/io/noties/markwon/sample/MainActivity.java b/sample/src/main/java/io/noties/markwon/sample/MainActivity.java index 9348f6bf..4d9bee65 100644 --- a/sample/src/main/java/io/noties/markwon/sample/MainActivity.java +++ b/sample/src/main/java/io/noties/markwon/sample/MainActivity.java @@ -8,20 +8,20 @@ import android.support.annotation.NonNull; import android.support.annotation.VisibleForTesting; import android.support.v7.widget.LinearLayoutManager; 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.sample.basicplugins.BasicPluginsActivity; import io.noties.markwon.sample.core.CoreActivity; import io.noties.markwon.sample.customextension.CustomExtensionActivity; import io.noties.markwon.sample.latex.LatexActivity; 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 { @@ -38,21 +38,20 @@ public class MainActivity extends Activity { // here we are creating as core markwon (no additional plugins are registered) final Markwon markwon = Markwon.create(this); - final Adapt adapt = Adapt.builder(SampleItem.class) - .include(SampleItem.class, new SampleItemView(markwon), new OnClickViewProcessor() { - @Override - public void onClick(@NonNull SampleItem item, @NonNull View view) { - showSample(item); - } - }) - .build(); - adapt.setItems(Arrays.asList(SampleItem.values())); + final Adapt adapt = Adapt.create(); + + final List items = new ArrayList<>(); + final SampleItem.OnClickListener onClickListener = this::showSample; + for (Sample sample : Sample.values()) { + items.add(new SampleItem(sample, markwon, onClickListener)); + } + adapt.setItems(items); final RecyclerView recyclerView = findViewById(R.id.recycler_view); recyclerView.setLayoutManager(new LinearLayoutManager(this)); recyclerView.setHasFixedSize(true); recyclerView.addItemDecoration(createSampleItemDecoration()); - recyclerView.setAdapter(adapt.recyclerViewAdapter()); + recyclerView.setAdapter(adapt); } @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)); } @VisibleForTesting - static Intent sampleItemIntent(@NonNull Context context, @NonNull SampleItem item) { + static Intent sampleItemIntent(@NonNull Context context, @NonNull Sample item) { final Class activity; diff --git a/sample/src/main/java/io/noties/markwon/sample/Sample.java b/sample/src/main/java/io/noties/markwon/sample/Sample.java new file mode 100644 index 00000000..8e20c80d --- /dev/null +++ b/sample/src/main/java/io/noties/markwon/sample/Sample.java @@ -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; + } +} diff --git a/sample/src/main/java/io/noties/markwon/sample/SampleItem.java b/sample/src/main/java/io/noties/markwon/sample/SampleItem.java index 0c7f8b86..57266e49 100644 --- a/sample/src/main/java/io/noties/markwon/sample/SampleItem.java +++ b/sample/src/main/java/io/noties/markwon/sample/SampleItem.java @@ -1,30 +1,79 @@ 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) - CORE(R.string.sample_core), +class SampleItem extends Item { - 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; - - SampleItem(@StringRes int textResId) { - this.textResId = textResId; + interface OnClickListener { + void onClick(@NonNull Sample sample); } - @StringRes - public int textResId() { - return textResId; + private final Sample sample; + + 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); + } } } diff --git a/sample/src/main/java/io/noties/markwon/sample/SampleItemView.java b/sample/src/main/java/io/noties/markwon/sample/SampleItemView.java deleted file mode 100644 index fa2a202e..00000000 --- a/sample/src/main/java/io/noties/markwon/sample/SampleItemView.java +++ /dev/null @@ -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 { - - private final Markwon markwon; - - // instance specific factory - private final Spannable.Factory factory; - - // instance specific cache - private final EnumMap 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); - } - } -} diff --git a/sample/src/main/java/io/noties/markwon/sample/recycler/RecyclerActivity.java b/sample/src/main/java/io/noties/markwon/sample/recycler/RecyclerActivity.java index 2c4f5b4d..077bf967 100644 --- a/sample/src/main/java/io/noties/markwon/sample/recycler/RecyclerActivity.java +++ b/sample/src/main/java/io/noties/markwon/sample/recycler/RecyclerActivity.java @@ -32,8 +32,8 @@ import io.noties.markwon.recycler.table.TableEntryPlugin; import io.noties.markwon.sample.R; import io.noties.markwon.urlprocessor.UrlProcessor; import io.noties.markwon.urlprocessor.UrlProcessorRelativeToAbsolute; -import ru.noties.debug.AndroidLogDebugOutput; -import ru.noties.debug.Debug; +import io.noties.debug.AndroidLogDebugOutput; +import io.noties.debug.Debug; public class RecyclerActivity extends Activity { diff --git a/sample/src/test/java/io/noties/markwon/sample/MainActivityTest.java b/sample/src/test/java/io/noties/markwon/sample/MainActivityTest.java index f5f197e9..15694be2 100644 --- a/sample/src/test/java/io/noties/markwon/sample/MainActivityTest.java +++ b/sample/src/test/java/io/noties/markwon/sample/MainActivityTest.java @@ -17,7 +17,7 @@ public class MainActivityTest { @Test public void all_sample_items_have_activity_associated() { 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 assertNotNull(MainActivity.sampleItemIntent(context, item)); }