diff --git a/app/build.gradle b/app/build.gradle index bc2bca96..7e6606e9 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -36,4 +36,6 @@ dependencies { compile 'com.google.dagger:dagger:2.10' annotationProcessor 'com.google.dagger:dagger-compiler:2.10' + + implementation "com.android.support:appcompat-v7:27.0.2" } diff --git a/app/src/main/java/ru/noties/markwon/MarkdownRenderer.java b/app/src/main/java/ru/noties/markwon/MarkdownRenderer.java index f276dfe2..3e037b49 100644 --- a/app/src/main/java/ru/noties/markwon/MarkdownRenderer.java +++ b/app/src/main/java/ru/noties/markwon/MarkdownRenderer.java @@ -1,11 +1,15 @@ package ru.noties.markwon; import android.content.Context; +import android.graphics.Color; +import android.graphics.Typeface; import android.net.Uri; import android.os.Handler; import android.os.SystemClock; +import android.support.annotation.FontRes; import android.support.annotation.NonNull; import android.support.annotation.Nullable; +import android.support.v4.content.res.ResourcesCompat; import java.util.concurrent.ExecutorService; import java.util.concurrent.Future; @@ -14,13 +18,14 @@ import javax.inject.Inject; import ru.noties.debug.Debug; import ru.noties.markwon.spans.AsyncDrawable; +import ru.noties.markwon.spans.SpannableTheme; +import ru.noties.markwon.spans.heading.HeadingConfig; +import ru.noties.markwon.spans.heading.HeadingTypeConfig; @ActivityScope public class MarkdownRenderer { - interface MarkdownReadyListener { - void onMarkdownReady(CharSequence markdown); - } + private final Context context; @Inject AsyncDrawable.Loader loader; @@ -34,14 +39,15 @@ public class MarkdownRenderer { private Future task; @Inject - MarkdownRenderer() { + MarkdownRenderer(Context context) { + this.context = context; } public void render( - @NonNull final Context context, - @Nullable final Uri uri, - @NonNull final String markdown, - @NonNull final MarkdownReadyListener listener) { + @NonNull final Context context, + @Nullable final Uri uri, + @NonNull final String markdown, + @NonNull final MarkdownReadyListener listener) { cancel(); task = service.submit(new Runnable() { @Override @@ -55,9 +61,10 @@ public class MarkdownRenderer { } final SpannableConfiguration configuration = SpannableConfiguration.builder(context) - .asyncDrawableLoader(loader) - .urlProcessor(urlProcessor) - .build(); + .theme(getSpannableTheme()) + .asyncDrawableLoader(loader) + .urlProcessor(urlProcessor) + .build(); final long start = SystemClock.uptimeMillis(); @@ -92,4 +99,25 @@ public class MarkdownRenderer { private boolean isCancelled() { return task == null || task.isCancelled(); } + + private HeadingConfig getHeadingConfig() { + final HeadingTypeConfig h1 = new HeadingTypeConfig(-1, Color.RED, getTypeface(R.font.opensans_semibold)); + final HeadingTypeConfig h2 = new HeadingTypeConfig(-1, Color.BLUE, getTypeface(R.font.opensans_regular)); + + return new HeadingConfig(h1, h2); + } + + private SpannableTheme getSpannableTheme() { + return SpannableTheme.builderWithDefaults(context) + .headingConfig(getHeadingConfig(), context.getResources().getDisplayMetrics().density) + .build(); + } + + private Typeface getTypeface(@FontRes int font){ + return ResourcesCompat.getFont(context, font); + } + + interface MarkdownReadyListener { + void onMarkdownReady(CharSequence markdown); + } } diff --git a/app/src/main/res/font/app_font.xml b/app/src/main/res/font/app_font.xml new file mode 100644 index 00000000..ddf98b6b --- /dev/null +++ b/app/src/main/res/font/app_font.xml @@ -0,0 +1,25 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/font/opensans_regular.ttf b/app/src/main/res/font/opensans_regular.ttf new file mode 100755 index 00000000..db433349 Binary files /dev/null and b/app/src/main/res/font/opensans_regular.ttf differ diff --git a/app/src/main/res/font/opensans_semibold.ttf b/app/src/main/res/font/opensans_semibold.ttf new file mode 100644 index 00000000..1a7679e3 Binary files /dev/null and b/app/src/main/res/font/opensans_semibold.ttf differ