diff --git a/sample-custom-extension/build.gradle b/sample-custom-extension/build.gradle index dc6139d7..baa37484 100644 --- a/sample-custom-extension/build.gradle +++ b/sample-custom-extension/build.gradle @@ -6,8 +6,11 @@ android { buildToolsVersion BUILD_TOOLS defaultConfig { - applicationId "noties.ru.markwon_samplecustomextension" - minSdkVersion MIN_SDK + + applicationId "ru.noties.markwon.sample.extension" + + // using 21 as minimum only to be able to vector assets + minSdkVersion 21 targetSdkVersion TARGET_SDK versionCode 1 versionName version diff --git a/sample-custom-extension/src/main/AndroidManifest.xml b/sample-custom-extension/src/main/AndroidManifest.xml index dadcdf93..1553a0a6 100644 --- a/sample-custom-extension/src/main/AndroidManifest.xml +++ b/sample-custom-extension/src/main/AndroidManifest.xml @@ -1,6 +1,6 @@ + package="ru.noties.markwon.sample.extension"> + - diff --git a/sample-custom-extension/src/main/java/noties/ru/markwon_samplecustomextension/IconProcessor.java b/sample-custom-extension/src/main/java/noties/ru/markwon_samplecustomextension/IconProcessor.java deleted file mode 100644 index 7ad68527..00000000 --- a/sample-custom-extension/src/main/java/noties/ru/markwon_samplecustomextension/IconProcessor.java +++ /dev/null @@ -1,86 +0,0 @@ -package noties.ru.markwon_samplecustomextension; - -import android.text.TextUtils; - -import org.commonmark.node.Node; -import org.commonmark.node.Text; -import org.commonmark.parser.delimiter.DelimiterProcessor; -import org.commonmark.parser.delimiter.DelimiterRun; - -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -public class IconProcessor implements DelimiterProcessor { - - private static final Pattern PATTERN = Pattern.compile("material-icon-(\\w+)-(\\w+)-(\\w+)"); - - @Override - public char getOpeningCharacter() { - return IconNode.DELIMITER; - } - - @Override - public char getClosingCharacter() { - return IconNode.DELIMITER; - } - - @Override - public int getMinLength() { - return 1; - } - - @Override - public int getDelimiterUse(DelimiterRun opener, DelimiterRun closer) { - return opener.length() >= 1 && closer.length() >= 1 ? 1 : 0; - } - - @Override - public void process(Text opener, Text closer, int delimiterUse) { - - final IconGroupNode iconGroupNode = new IconGroupNode(); - - final Node next = opener.getNext(); - - boolean handled = false; - - // process only if we have exactly one Text node - if (next instanceof Text && next.getNext() == closer) { - - final String text = ((Text) next).getLiteral(); - - if (!TextUtils.isEmpty(text)) { - - // attempt to match - final Matcher matcher = PATTERN.matcher(text); - if (matcher.matches()) { - final IconNode iconNode = new IconNode( - matcher.group(1), - matcher.group(2), - matcher.group(3) - ); - iconGroupNode.appendChild(iconNode); - next.unlink(); - handled = true; - } - } - } - - if (!handled) { - - // restore delimiters if we didn't match - - iconGroupNode.appendChild(new Text(IconNode.DELIMITER_STRING)); - - Node node; - for (Node tmp = opener.getNext(); tmp != null && tmp != closer; tmp = node) { - node = tmp.getNext(); - // append a child anyway - iconGroupNode.appendChild(tmp); - } - - iconGroupNode.appendChild(new Text(IconNode.DELIMITER_STRING)); - } - - opener.insertBefore(iconGroupNode); - } -} diff --git a/sample-custom-extension/src/main/java/noties/ru/markwon_samplecustomextension/IconSpanProvider.java b/sample-custom-extension/src/main/java/noties/ru/markwon_samplecustomextension/IconSpanProvider.java deleted file mode 100644 index 9f8d517e..00000000 --- a/sample-custom-extension/src/main/java/noties/ru/markwon_samplecustomextension/IconSpanProvider.java +++ /dev/null @@ -1,9 +0,0 @@ -package noties.ru.markwon_samplecustomextension; - -import android.support.annotation.NonNull; - -public interface IconSpanProvider { - - @NonNull - IconSpan provide(@NonNull String name, @NonNull String color, @NonNull String size); -} diff --git a/sample-custom-extension/src/main/java/noties/ru/markwon_samplecustomextension/IconSpanProviderImpl.java b/sample-custom-extension/src/main/java/noties/ru/markwon_samplecustomextension/IconSpanProviderImpl.java deleted file mode 100644 index 8f674a78..00000000 --- a/sample-custom-extension/src/main/java/noties/ru/markwon_samplecustomextension/IconSpanProviderImpl.java +++ /dev/null @@ -1,51 +0,0 @@ -package noties.ru.markwon_samplecustomextension; - -import android.content.Context; -import android.content.res.Resources; -import android.graphics.drawable.Drawable; -import android.os.Build; -import android.support.annotation.DrawableRes; -import android.support.annotation.NonNull; - -public class IconSpanProviderImpl implements IconSpanProvider { - - private static final boolean IS_L = Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP; - - private final Context context; - private final Resources resources; - private final int fallBack; - - public IconSpanProviderImpl(@NonNull Context context, @DrawableRes int fallBack) { - this.context = context; - this.resources = context.getResources(); - this.fallBack = fallBack; - } - - @NonNull - @Override - public IconSpan provide(@NonNull String name, @NonNull String color, @NonNull String size) { - final String resName = materialIconName(name, color, size); - int resId = resources.getIdentifier(resName, "drawable", context.getPackageName()); - if (resId == 0) { - resId = fallBack; - } - return new IconSpan(getDrawable(resId), IconSpan.ALIGN_CENTER); - } - - @NonNull - private static String materialIconName(@NonNull String name, @NonNull String color, @NonNull String size) { - return "ic_" + name + "_" + color + "_" + size + "dp"; - } - - @NonNull - private Drawable getDrawable(int resId) { - final Drawable drawable; - if (IS_L) { - drawable = context.getDrawable(resId); - } else { - drawable = resources.getDrawable(resId); - } - //noinspection ConstantConditions - return drawable; - } -} diff --git a/sample-custom-extension/src/main/java/noties/ru/markwon_samplecustomextension/IconUtils.java b/sample-custom-extension/src/main/java/noties/ru/markwon_samplecustomextension/IconUtils.java deleted file mode 100644 index 03cef1c1..00000000 --- a/sample-custom-extension/src/main/java/noties/ru/markwon_samplecustomextension/IconUtils.java +++ /dev/null @@ -1,46 +0,0 @@ -package noties.ru.markwon_samplecustomextension; - -import android.support.annotation.NonNull; - -public abstract class IconUtils { - - private static final String TO_FIND = "@material-icon-"; - - public static void prepare(@NonNull StringBuilder builder) { - - int start = builder.indexOf(TO_FIND); - int end; - - while (start > -1) { - end = iconDefinitionEnd(start + TO_FIND.length(), builder); - builder.insert(end, '@'); - start = builder.indexOf(TO_FIND, end); - } - } - - private static int iconDefinitionEnd(int index, @NonNull StringBuilder builder) { - - // all spaces, new lines, non-words or digits, - - char c; - - int end = -1; - for (int i = index; i < builder.length(); i++) { - c = builder.charAt(i); - if (Character.isWhitespace(c) - || !(Character.isLetterOrDigit(c) || c == '-' || c == '_')) { - end = i; - break; - } - } - - if (end == -1) { - end = builder.length(); - } - - return end; - } - - private IconUtils() { - } -} diff --git a/sample-custom-extension/src/main/java/noties/ru/markwon_samplecustomextension/MainActivity.java b/sample-custom-extension/src/main/java/noties/ru/markwon_samplecustomextension/MainActivity.java deleted file mode 100644 index 07bca60e..00000000 --- a/sample-custom-extension/src/main/java/noties/ru/markwon_samplecustomextension/MainActivity.java +++ /dev/null @@ -1,44 +0,0 @@ -package noties.ru.markwon_samplecustomextension; - -import android.app.Activity; -import android.os.Bundle; -import android.widget.TextView; - -import org.commonmark.ext.gfm.strikethrough.StrikethroughExtension; -import org.commonmark.ext.gfm.tables.TablesExtension; -import org.commonmark.node.Node; -import org.commonmark.parser.Parser; - -import java.util.Arrays; - -import ru.noties.markwon.SpannableBuilder; -import ru.noties.markwon.SpannableConfiguration; -import ru.noties.markwon.tasklist.TaskListExtension; - -public class MainActivity extends Activity { - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(0); - - final TextView textView = findViewById(0); - - final Parser parser = new Parser.Builder() - // we will register all known to Markwon extensions - .extensions(Arrays.asList( - StrikethroughExtension.create(), - TablesExtension.create(), - TaskListExtension.create() - )) - // this is the handler for custom icons - .customDelimiterProcessor(new IconProcessor()) - .build(); - - final Node node = parser.parse("# Hello icons! @material-icon-home-black-24@\n\n Your account @material-icon-account_balance-white-26@ is 0.00003"); - final SpannableBuilder builder = new SpannableBuilder(); - final IconVisitor visitor = new IconVisitor(SpannableConfiguration.create(this), builder, new IconSpanProviderImpl(this, R.drawable.ic_home_black_24dp)); - node.accept(visitor); - textView.setText(builder.text()); - } -} diff --git a/sample-custom-extension/src/main/java/noties/ru/markwon_samplecustomextension/IconGroupNode.java b/sample-custom-extension/src/main/java/ru/noties/markwon/sample/extension/IconGroupNode.java similarity index 54% rename from sample-custom-extension/src/main/java/noties/ru/markwon_samplecustomextension/IconGroupNode.java rename to sample-custom-extension/src/main/java/ru/noties/markwon/sample/extension/IconGroupNode.java index 9438569c..193b33b8 100644 --- a/sample-custom-extension/src/main/java/noties/ru/markwon_samplecustomextension/IconGroupNode.java +++ b/sample-custom-extension/src/main/java/ru/noties/markwon/sample/extension/IconGroupNode.java @@ -1,7 +1,8 @@ -package noties.ru.markwon_samplecustomextension; +package ru.noties.markwon.sample.extension; import org.commonmark.node.CustomNode; +@SuppressWarnings("WeakerAccess") public class IconGroupNode extends CustomNode { } diff --git a/sample-custom-extension/src/main/java/noties/ru/markwon_samplecustomextension/IconNode.java b/sample-custom-extension/src/main/java/ru/noties/markwon/sample/extension/IconNode.java similarity index 93% rename from sample-custom-extension/src/main/java/noties/ru/markwon_samplecustomextension/IconNode.java rename to sample-custom-extension/src/main/java/ru/noties/markwon/sample/extension/IconNode.java index f7190883..3d40ec2f 100644 --- a/sample-custom-extension/src/main/java/noties/ru/markwon_samplecustomextension/IconNode.java +++ b/sample-custom-extension/src/main/java/ru/noties/markwon/sample/extension/IconNode.java @@ -1,13 +1,13 @@ -package noties.ru.markwon_samplecustomextension; +package ru.noties.markwon.sample.extension; import android.support.annotation.NonNull; import org.commonmark.node.CustomNode; import org.commonmark.node.Delimited; +@SuppressWarnings("WeakerAccess") public class IconNode extends CustomNode implements Delimited { - public static final char DELIMITER = '@'; public static final String DELIMITER_STRING = "" + DELIMITER; diff --git a/sample-custom-extension/src/main/java/ru/noties/markwon/sample/extension/IconProcessor.java b/sample-custom-extension/src/main/java/ru/noties/markwon/sample/extension/IconProcessor.java new file mode 100644 index 00000000..500726e0 --- /dev/null +++ b/sample-custom-extension/src/main/java/ru/noties/markwon/sample/extension/IconProcessor.java @@ -0,0 +1,160 @@ +package ru.noties.markwon.sample.extension; + +import android.support.annotation.NonNull; +import android.text.TextUtils; + +import org.commonmark.node.Node; +import org.commonmark.node.Text; +import org.commonmark.parser.delimiter.DelimiterProcessor; +import org.commonmark.parser.delimiter.DelimiterRun; + +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +@SuppressWarnings("WeakerAccess") +public class IconProcessor implements DelimiterProcessor { + + @NonNull + public static IconProcessor create() { + return new IconProcessor(); + } + + // ic-home-black-24 + private static final Pattern PATTERN = Pattern.compile("ic-(\\w+)-(\\w+)-(\\d+)"); + + private static final String TO_FIND = IconNode.DELIMITER_STRING + "ic-"; + + /** + * Should be used when input string does not wrap icon definition with `@` from both ends. + * So, `@ic-home-white-24` would become `@ic-home-white-24@`. This way parsing is easier + * and more predictable (cannot specify multiple ending delimiters, as we would require them: + * space, newline, end of a document, and a lot of more) + * + * @param input to process + * @return processed string + * @see #prepare(StringBuilder) + */ + @NonNull + public static String prepare(@NonNull String input) { + final StringBuilder builder = new StringBuilder(input); + prepare(builder); + return builder.toString(); + } + + public static void prepare(@NonNull StringBuilder builder) { + + int start = builder.indexOf(TO_FIND); + int end; + + while (start > -1) { + + end = iconDefinitionEnd(start + TO_FIND.length(), builder); + + // if we match our pattern, append `@` else ignore + if (iconDefinitionValid(builder.subSequence(start + 1, end))) { + builder.insert(end, '@'); + } + + // move to next + start = builder.indexOf(TO_FIND, end); + } + } + + @Override + public char getOpeningCharacter() { + return IconNode.DELIMITER; + } + + @Override + public char getClosingCharacter() { + return IconNode.DELIMITER; + } + + @Override + public int getMinLength() { + return 1; + } + + @Override + public int getDelimiterUse(DelimiterRun opener, DelimiterRun closer) { + return opener.length() >= 1 && closer.length() >= 1 ? 1 : 0; + } + + @Override + public void process(Text opener, Text closer, int delimiterUse) { + + final IconGroupNode iconGroupNode = new IconGroupNode(); + + final Node next = opener.getNext(); + + boolean handled = false; + + // process only if we have exactly one Text node + if (next instanceof Text && next.getNext() == closer) { + + final String text = ((Text) next).getLiteral(); + + if (!TextUtils.isEmpty(text)) { + + // attempt to match + final Matcher matcher = PATTERN.matcher(text); + if (matcher.matches()) { + final IconNode iconNode = new IconNode( + matcher.group(1), + matcher.group(2), + matcher.group(3) + ); + iconGroupNode.appendChild(iconNode); + next.unlink(); + handled = true; + } + } + } + + if (!handled) { + + // restore delimiters if we didn't match + + iconGroupNode.appendChild(new Text(IconNode.DELIMITER_STRING)); + + Node node; + for (Node tmp = opener.getNext(); tmp != null && tmp != closer; tmp = node) { + node = tmp.getNext(); + // append a child anyway + iconGroupNode.appendChild(tmp); + } + + iconGroupNode.appendChild(new Text(IconNode.DELIMITER_STRING)); + } + + opener.insertBefore(iconGroupNode); + } + + private static int iconDefinitionEnd(int index, @NonNull StringBuilder builder) { + + // all spaces, new lines, non-words or digits, + + char c; + + int end = -1; + for (int i = index; i < builder.length(); i++) { + c = builder.charAt(i); + if (Character.isWhitespace(c) + || !(Character.isLetterOrDigit(c) || c == '-' || c == '_')) { + end = i; + break; + } + } + + if (end == -1) { + end = builder.length(); + } + + return end; + } + + private static boolean iconDefinitionValid(@NonNull CharSequence cs) { + final Matcher matcher = PATTERN.matcher(cs); + return matcher.matches(); + } +} diff --git a/sample-custom-extension/src/main/java/noties/ru/markwon_samplecustomextension/IconSpan.java b/sample-custom-extension/src/main/java/ru/noties/markwon/sample/extension/IconSpan.java similarity index 95% rename from sample-custom-extension/src/main/java/noties/ru/markwon_samplecustomextension/IconSpan.java rename to sample-custom-extension/src/main/java/ru/noties/markwon/sample/extension/IconSpan.java index bc197492..690ba5b2 100644 --- a/sample-custom-extension/src/main/java/noties/ru/markwon_samplecustomextension/IconSpan.java +++ b/sample-custom-extension/src/main/java/ru/noties/markwon/sample/extension/IconSpan.java @@ -1,4 +1,4 @@ -package noties.ru.markwon_samplecustomextension; +package ru.noties.markwon.sample.extension; import android.graphics.Canvas; import android.graphics.Paint; @@ -12,10 +12,11 @@ import android.text.style.ReplacementSpan; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; +@SuppressWarnings("WeakerAccess") public class IconSpan extends ReplacementSpan { @IntDef({ALIGN_BOTTOM, ALIGN_BASELINE, ALIGN_CENTER}) - @Retention(RetentionPolicy.SOURCE) + @Retention(RetentionPolicy.CLASS) @interface Alignment { } diff --git a/sample-custom-extension/src/main/java/ru/noties/markwon/sample/extension/IconSpanProvider.java b/sample-custom-extension/src/main/java/ru/noties/markwon/sample/extension/IconSpanProvider.java new file mode 100644 index 00000000..cd6e3bf3 --- /dev/null +++ b/sample-custom-extension/src/main/java/ru/noties/markwon/sample/extension/IconSpanProvider.java @@ -0,0 +1,67 @@ +package ru.noties.markwon.sample.extension; + +import android.content.Context; +import android.content.res.Resources; +import android.graphics.drawable.Drawable; +import android.os.Build; +import android.support.annotation.DrawableRes; +import android.support.annotation.NonNull; + +@SuppressWarnings("WeakerAccess") +public abstract class IconSpanProvider { + + @SuppressWarnings("SameParameterValue") + @NonNull + public static IconSpanProvider create(@NonNull Context context, @DrawableRes int fallBack) { + return new Impl(context, fallBack); + } + + + @NonNull + public abstract IconSpan provide(@NonNull String name, @NonNull String color, @NonNull String size); + + + private static class Impl extends IconSpanProvider { + + private static final boolean IS_L = Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP; + + private final Context context; + private final Resources resources; + private final int fallBack; + + Impl(@NonNull Context context, @DrawableRes int fallBack) { + this.context = context; + this.resources = context.getResources(); + this.fallBack = fallBack; + } + + @NonNull + @Override + public IconSpan provide(@NonNull String name, @NonNull String color, @NonNull String size) { + final String resName = iconName(name, color, size); + int resId = resources.getIdentifier(resName, "drawable", context.getPackageName()); + if (resId == 0) { + resId = fallBack; + } + return new IconSpan(getDrawable(resId), IconSpan.ALIGN_CENTER); + } + + + @NonNull + private static String iconName(@NonNull String name, @NonNull String color, @NonNull String size) { + return "ic_" + name + "_" + color + "_" + size + "dp"; + } + + @NonNull + private Drawable getDrawable(int resId) { + final Drawable drawable; + if (IS_L) { + drawable = context.getDrawable(resId); + } else { + drawable = resources.getDrawable(resId); + } + //noinspection ConstantConditions + return drawable; + } + } +} diff --git a/sample-custom-extension/src/main/java/noties/ru/markwon_samplecustomextension/IconVisitor.java b/sample-custom-extension/src/main/java/ru/noties/markwon/sample/extension/IconVisitor.java similarity index 95% rename from sample-custom-extension/src/main/java/noties/ru/markwon_samplecustomextension/IconVisitor.java rename to sample-custom-extension/src/main/java/ru/noties/markwon/sample/extension/IconVisitor.java index ca047451..5ab65fed 100644 --- a/sample-custom-extension/src/main/java/noties/ru/markwon_samplecustomextension/IconVisitor.java +++ b/sample-custom-extension/src/main/java/ru/noties/markwon/sample/extension/IconVisitor.java @@ -1,4 +1,4 @@ -package noties.ru.markwon_samplecustomextension; +package ru.noties.markwon.sample.extension; import android.support.annotation.NonNull; import android.text.TextUtils; @@ -9,6 +9,7 @@ import ru.noties.markwon.SpannableBuilder; import ru.noties.markwon.SpannableConfiguration; import ru.noties.markwon.renderer.SpannableMarkdownVisitor; +@SuppressWarnings("WeakerAccess") public class IconVisitor extends SpannableMarkdownVisitor { private final SpannableBuilder builder; diff --git a/sample-custom-extension/src/main/java/ru/noties/markwon/sample/extension/MainActivity.java b/sample-custom-extension/src/main/java/ru/noties/markwon/sample/extension/MainActivity.java new file mode 100644 index 00000000..a81f8eb0 --- /dev/null +++ b/sample-custom-extension/src/main/java/ru/noties/markwon/sample/extension/MainActivity.java @@ -0,0 +1,66 @@ +package ru.noties.markwon.sample.extension; + +import android.app.Activity; +import android.os.Bundle; +import android.widget.TextView; + +import org.commonmark.ext.gfm.strikethrough.StrikethroughExtension; +import org.commonmark.ext.gfm.tables.TablesExtension; +import org.commonmark.node.Node; +import org.commonmark.parser.Parser; + +import java.util.Arrays; + +import ru.noties.markwon.SpannableBuilder; +import ru.noties.markwon.SpannableConfiguration; +import ru.noties.markwon.tasklist.TaskListExtension; + +public class MainActivity extends Activity { + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + setContentView(R.layout.activity_main); + + final TextView textView = findViewById(R.id.text_view); + + // obtain an instance of parser + final Parser parser = new Parser.Builder() + // we will register all known to Markwon extensions + .extensions(Arrays.asList( + StrikethroughExtension.create(), + TablesExtension.create(), + TaskListExtension.create() + )) + // this is the handler for custom icons + .customDelimiterProcessor(IconProcessor.create()) + .build(); + + // we process input to wrap icon definitions with `@` on both ends + // if your input already does it, there is not need for `IconProcessor.prepare()` call. + final String markdown = IconProcessor.prepare(getString(R.string.input)); + + final Node node = parser.parse(markdown); + + final SpannableBuilder builder = new SpannableBuilder(); + + // please note that here I am passing `0` as fallback it means that if markdown references + // unknown icon, it will try to load fallback one and will fail with ResourceNotFound. It's + // better to provide a valid fallback option + final IconSpanProvider spanProvider = IconSpanProvider.create(this, 0); + + // create an instance of visitor to process parsed markdown + final IconVisitor visitor = new IconVisitor( + SpannableConfiguration.create(this), + builder, + spanProvider + ); + + // trigger visit + node.accept(visitor); + + // apply + textView.setText(builder.text()); + } +} diff --git a/sample-custom-extension/src/main/res/drawable-hdpi/ic_3d_rotation_white_24dp.png b/sample-custom-extension/src/main/res/drawable-hdpi/ic_3d_rotation_white_24dp.png deleted file mode 100644 index a243e01c..00000000 Binary files a/sample-custom-extension/src/main/res/drawable-hdpi/ic_3d_rotation_white_24dp.png and /dev/null differ diff --git a/sample-custom-extension/src/main/res/drawable-hdpi/ic_account_balance_white_26dp.png b/sample-custom-extension/src/main/res/drawable-hdpi/ic_account_balance_white_26dp.png deleted file mode 100644 index dc5dfb78..00000000 Binary files a/sample-custom-extension/src/main/res/drawable-hdpi/ic_account_balance_white_26dp.png and /dev/null differ diff --git a/sample-custom-extension/src/main/res/drawable-hdpi/ic_home_black_24dp.png b/sample-custom-extension/src/main/res/drawable-hdpi/ic_home_black_24dp.png deleted file mode 100644 index e5a7bfc6..00000000 Binary files a/sample-custom-extension/src/main/res/drawable-hdpi/ic_home_black_24dp.png and /dev/null differ diff --git a/sample-custom-extension/src/main/res/drawable-mdpi/ic_3d_rotation_white_24dp.png b/sample-custom-extension/src/main/res/drawable-mdpi/ic_3d_rotation_white_24dp.png deleted file mode 100644 index 9ebba4c0..00000000 Binary files a/sample-custom-extension/src/main/res/drawable-mdpi/ic_3d_rotation_white_24dp.png and /dev/null differ diff --git a/sample-custom-extension/src/main/res/drawable-mdpi/ic_account_balance_white_26dp.png b/sample-custom-extension/src/main/res/drawable-mdpi/ic_account_balance_white_26dp.png deleted file mode 100644 index e685049a..00000000 Binary files a/sample-custom-extension/src/main/res/drawable-mdpi/ic_account_balance_white_26dp.png and /dev/null differ diff --git a/sample-custom-extension/src/main/res/drawable-mdpi/ic_home_black_24dp.png b/sample-custom-extension/src/main/res/drawable-mdpi/ic_home_black_24dp.png deleted file mode 100644 index b77359f4..00000000 Binary files a/sample-custom-extension/src/main/res/drawable-mdpi/ic_home_black_24dp.png and /dev/null differ diff --git a/sample-custom-extension/src/main/res/drawable-xhdpi/ic_3d_rotation_white_24dp.png b/sample-custom-extension/src/main/res/drawable-xhdpi/ic_3d_rotation_white_24dp.png deleted file mode 100644 index aa366a14..00000000 Binary files a/sample-custom-extension/src/main/res/drawable-xhdpi/ic_3d_rotation_white_24dp.png and /dev/null differ diff --git a/sample-custom-extension/src/main/res/drawable-xhdpi/ic_account_balance_white_26dp.png b/sample-custom-extension/src/main/res/drawable-xhdpi/ic_account_balance_white_26dp.png deleted file mode 100644 index eb565ec0..00000000 Binary files a/sample-custom-extension/src/main/res/drawable-xhdpi/ic_account_balance_white_26dp.png and /dev/null differ diff --git a/sample-custom-extension/src/main/res/drawable-xhdpi/ic_home_black_24dp.png b/sample-custom-extension/src/main/res/drawable-xhdpi/ic_home_black_24dp.png deleted file mode 100644 index 587efd5a..00000000 Binary files a/sample-custom-extension/src/main/res/drawable-xhdpi/ic_home_black_24dp.png and /dev/null differ diff --git a/sample-custom-extension/src/main/res/drawable-xxhdpi/ic_3d_rotation_white_24dp.png b/sample-custom-extension/src/main/res/drawable-xxhdpi/ic_3d_rotation_white_24dp.png deleted file mode 100644 index 07cf86a4..00000000 Binary files a/sample-custom-extension/src/main/res/drawable-xxhdpi/ic_3d_rotation_white_24dp.png and /dev/null differ diff --git a/sample-custom-extension/src/main/res/drawable-xxhdpi/ic_account_balance_white_26dp.png b/sample-custom-extension/src/main/res/drawable-xxhdpi/ic_account_balance_white_26dp.png deleted file mode 100644 index a3931f6d..00000000 Binary files a/sample-custom-extension/src/main/res/drawable-xxhdpi/ic_account_balance_white_26dp.png and /dev/null differ diff --git a/sample-custom-extension/src/main/res/drawable-xxhdpi/ic_home_black_24dp.png b/sample-custom-extension/src/main/res/drawable-xxhdpi/ic_home_black_24dp.png deleted file mode 100644 index b38dc4f3..00000000 Binary files a/sample-custom-extension/src/main/res/drawable-xxhdpi/ic_home_black_24dp.png and /dev/null differ diff --git a/sample-custom-extension/src/main/res/drawable-xxxhdpi/ic_3d_rotation_white_24dp.png b/sample-custom-extension/src/main/res/drawable-xxxhdpi/ic_3d_rotation_white_24dp.png deleted file mode 100644 index aea49c26..00000000 Binary files a/sample-custom-extension/src/main/res/drawable-xxxhdpi/ic_3d_rotation_white_24dp.png and /dev/null differ diff --git a/sample-custom-extension/src/main/res/drawable-xxxhdpi/ic_account_balance_white_26dp.png b/sample-custom-extension/src/main/res/drawable-xxxhdpi/ic_account_balance_white_26dp.png deleted file mode 100644 index 31a06f71..00000000 Binary files a/sample-custom-extension/src/main/res/drawable-xxxhdpi/ic_account_balance_white_26dp.png and /dev/null differ diff --git a/sample-custom-extension/src/main/res/drawable-xxxhdpi/ic_home_black_24dp.png b/sample-custom-extension/src/main/res/drawable-xxxhdpi/ic_home_black_24dp.png deleted file mode 100644 index 2f5dc1ce..00000000 Binary files a/sample-custom-extension/src/main/res/drawable-xxxhdpi/ic_home_black_24dp.png and /dev/null differ diff --git a/sample-custom-extension/src/main/res/drawable/ic_android_black_24dp.xml b/sample-custom-extension/src/main/res/drawable/ic_android_black_24dp.xml new file mode 100644 index 00000000..401cbf63 --- /dev/null +++ b/sample-custom-extension/src/main/res/drawable/ic_android_black_24dp.xml @@ -0,0 +1,9 @@ + + + diff --git a/sample-custom-extension/src/main/res/drawable/ic_home_black_36dp.xml b/sample-custom-extension/src/main/res/drawable/ic_home_black_36dp.xml new file mode 100644 index 00000000..c3b7e150 --- /dev/null +++ b/sample-custom-extension/src/main/res/drawable/ic_home_black_36dp.xml @@ -0,0 +1,4 @@ + + + diff --git a/sample-custom-extension/src/main/res/drawable/ic_memory_black_48dp.xml b/sample-custom-extension/src/main/res/drawable/ic_memory_black_48dp.xml new file mode 100644 index 00000000..88ac2954 --- /dev/null +++ b/sample-custom-extension/src/main/res/drawable/ic_memory_black_48dp.xml @@ -0,0 +1,4 @@ + + + diff --git a/sample-custom-extension/src/main/res/drawable/ic_sentiment_satisfied_red_64dp.xml b/sample-custom-extension/src/main/res/drawable/ic_sentiment_satisfied_red_64dp.xml new file mode 100644 index 00000000..f9c60705 --- /dev/null +++ b/sample-custom-extension/src/main/res/drawable/ic_sentiment_satisfied_red_64dp.xml @@ -0,0 +1,6 @@ + + + + + diff --git a/sample-custom-extension/src/main/res/layout/activity_main.xml b/sample-custom-extension/src/main/res/layout/activity_main.xml new file mode 100644 index 00000000..439dac71 --- /dev/null +++ b/sample-custom-extension/src/main/res/layout/activity_main.xml @@ -0,0 +1,16 @@ + + + + + + \ No newline at end of file diff --git a/sample-custom-extension/src/main/res/values/colors.xml b/sample-custom-extension/src/main/res/values/colors.xml deleted file mode 100644 index 3ab3e9cb..00000000 --- a/sample-custom-extension/src/main/res/values/colors.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - #3F51B5 - #303F9F - #FF4081 - diff --git a/sample-custom-extension/src/main/res/values/strings.xml b/sample-custom-extension/src/main/res/values/strings.xml index 229056d3..7dc177e7 100644 --- a/sample-custom-extension/src/main/res/values/strings.xml +++ b/sample-custom-extension/src/main/res/values/strings.xml @@ -1,3 +1,13 @@ + Markwon-SampleCustomExtension + + + + diff --git a/sample-custom-extension/src/main/res/values/styles.xml b/sample-custom-extension/src/main/res/values/styles.xml index 9785e0c9..49c8cb25 100644 --- a/sample-custom-extension/src/main/res/values/styles.xml +++ b/sample-custom-extension/src/main/res/values/styles.xml @@ -1,8 +1,5 @@ - - +