Working with new sample application
50
app-sample/build.gradle
Normal file
@ -0,0 +1,50 @@
|
|||||||
|
apply plugin: 'com.android.application'
|
||||||
|
|
||||||
|
android {
|
||||||
|
|
||||||
|
compileSdkVersion config['compile-sdk']
|
||||||
|
buildToolsVersion config['build-tools']
|
||||||
|
|
||||||
|
defaultConfig {
|
||||||
|
applicationId 'io.noties.markwon.app'
|
||||||
|
minSdkVersion 23
|
||||||
|
targetSdkVersion config['target-sdk']
|
||||||
|
versionCode 1
|
||||||
|
versionName version
|
||||||
|
|
||||||
|
resConfig 'en'
|
||||||
|
|
||||||
|
javaCompileOptions {
|
||||||
|
annotationProcessorOptions {
|
||||||
|
arguments = [
|
||||||
|
// cannot cast GString...
|
||||||
|
// cannot use `-`
|
||||||
|
'markwon.samples.file': "\"${projectDir}/samples.json\"".toString()
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
dexOptions {
|
||||||
|
preDexLibraries true
|
||||||
|
javaMaxHeapSize '5g'
|
||||||
|
}
|
||||||
|
|
||||||
|
compileOptions {
|
||||||
|
targetCompatibility JavaVersion.VERSION_1_8
|
||||||
|
sourceCompatibility JavaVersion.VERSION_1_8
|
||||||
|
}
|
||||||
|
|
||||||
|
sourceSets {
|
||||||
|
main {
|
||||||
|
java.srcDirs += '../sample-utils/annotations'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
dependencies {
|
||||||
|
implementation 'io.noties:debug:5.1.0'
|
||||||
|
annotationProcessor project(':sample-utils:processor')
|
||||||
|
}
|
24
app-sample/src/main/AndroidManifest.xml
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
|
package="io.noties.markwon.app">
|
||||||
|
|
||||||
|
<application
|
||||||
|
android:name=".App"
|
||||||
|
android:allowBackup="true"
|
||||||
|
android:icon="@mipmap/ic_launcher"
|
||||||
|
android:label="@string/app_name"
|
||||||
|
android:roundIcon="@mipmap/ic_launcher"
|
||||||
|
android:supportsRtl="true"
|
||||||
|
android:theme="@style/AppTheme"
|
||||||
|
tools:ignore="AllowBackup,GoogleAppIndexingWarning">
|
||||||
|
|
||||||
|
<activity android:name=".MainActivity">
|
||||||
|
<intent-filter>
|
||||||
|
<action android:name="android.intent.action.MAIN" />
|
||||||
|
<category android:name="android.intent.category.LAUNCHER" />
|
||||||
|
</intent-filter>
|
||||||
|
</activity>
|
||||||
|
</application>
|
||||||
|
|
||||||
|
</manifest>
|
16
app-sample/src/main/java/io/noties/markwon/app/App.java
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
package io.noties.markwon.app;
|
||||||
|
|
||||||
|
import android.app.Application;
|
||||||
|
|
||||||
|
import io.noties.debug.AndroidLogDebugOutput;
|
||||||
|
import io.noties.debug.Debug;
|
||||||
|
|
||||||
|
public class App extends Application {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onCreate() {
|
||||||
|
super.onCreate();
|
||||||
|
|
||||||
|
Debug.init(new AndroidLogDebugOutput(true));
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,16 @@
|
|||||||
|
package io.noties.markwon.app;
|
||||||
|
|
||||||
|
import android.app.Activity;
|
||||||
|
import android.os.Bundle;
|
||||||
|
|
||||||
|
import androidx.annotation.Nullable;
|
||||||
|
|
||||||
|
public class MainActivity extends Activity {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onCreate(@Nullable Bundle savedInstanceState) {
|
||||||
|
super.onCreate(savedInstanceState);
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
15
app-sample/src/main/java/io/noties/markwon/app/Test.java
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
package io.noties.markwon.app;
|
||||||
|
|
||||||
|
import io.noties.markwon.sample.annotations.MarkwonArtifact;
|
||||||
|
import io.noties.markwon.sample.annotations.MarkwonSample;
|
||||||
|
|
||||||
|
@MarkwonSample(
|
||||||
|
id = "202006163161416",
|
||||||
|
title = "The first sample title",
|
||||||
|
description = "This is description",
|
||||||
|
artifacts = {MarkwonArtifact.CORE, MarkwonArtifact.EDITOR},
|
||||||
|
tags = "none"
|
||||||
|
)
|
||||||
|
public class Test {
|
||||||
|
|
||||||
|
}
|
24
app-sample/src/main/res/drawable/ic_launcher_background.xml
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:width="108dp"
|
||||||
|
android:height="108dp"
|
||||||
|
android:viewportWidth="512"
|
||||||
|
android:viewportHeight="512">
|
||||||
|
<path
|
||||||
|
android:pathData="M0,0h512v256h-512z"
|
||||||
|
android:strokeAlpha="0.94117647"
|
||||||
|
android:strokeWidth="0.40000001"
|
||||||
|
android:fillColor="#d7d7d7"
|
||||||
|
android:strokeColor="#00000000"
|
||||||
|
android:fillType="nonZero"
|
||||||
|
android:fillAlpha="1"
|
||||||
|
android:strokeLineCap="butt"/>
|
||||||
|
<path
|
||||||
|
android:pathData="M0,256h512v256h-512z"
|
||||||
|
android:strokeAlpha="0.94117647"
|
||||||
|
android:strokeWidth="0.40000001"
|
||||||
|
android:fillColor="#eeeeee"
|
||||||
|
android:strokeColor="#00000000"
|
||||||
|
android:fillType="nonZero"
|
||||||
|
android:fillAlpha="1"
|
||||||
|
android:strokeLineCap="butt"/>
|
||||||
|
</vector>
|
@ -0,0 +1,5 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
|
<background android:drawable="@drawable/ic_launcher_background"/>
|
||||||
|
<foreground android:drawable="@mipmap/ic_launcher_foreground"/>
|
||||||
|
</adaptive-icon>
|
@ -0,0 +1,5 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
|
<background android:drawable="@drawable/ic_launcher_background"/>
|
||||||
|
<foreground android:drawable="@mipmap/ic_launcher_foreground"/>
|
||||||
|
</adaptive-icon>
|
BIN
app-sample/src/main/res/mipmap-hdpi/ic_launcher.png
Normal file
After Width: | Height: | Size: 4.5 KiB |
BIN
app-sample/src/main/res/mipmap-hdpi/ic_launcher_foreground.png
Normal file
After Width: | Height: | Size: 3.6 KiB |
BIN
app-sample/src/main/res/mipmap-mdpi/ic_launcher.png
Normal file
After Width: | Height: | Size: 2.7 KiB |
BIN
app-sample/src/main/res/mipmap-mdpi/ic_launcher_foreground.png
Normal file
After Width: | Height: | Size: 2.0 KiB |
BIN
app-sample/src/main/res/mipmap-xhdpi/ic_launcher.png
Normal file
After Width: | Height: | Size: 6.2 KiB |
BIN
app-sample/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png
Normal file
After Width: | Height: | Size: 4.7 KiB |
BIN
app-sample/src/main/res/mipmap-xxhdpi/ic_launcher.png
Normal file
After Width: | Height: | Size: 10 KiB |
BIN
app-sample/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png
Normal file
After Width: | Height: | Size: 9.1 KiB |
BIN
app-sample/src/main/res/mipmap-xxxhdpi/ic_launcher.png
Normal file
After Width: | Height: | Size: 14 KiB |
After Width: | Height: | Size: 11 KiB |
4
app-sample/src/main/res/values/colors.xml
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<resources>
|
||||||
|
<color name="accent">#5CB85C</color>
|
||||||
|
</resources>
|
4
app-sample/src/main/res/values/strings.xml
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<resources>
|
||||||
|
<string name="app_name">Markwon</string>
|
||||||
|
</resources>
|
8
app-sample/src/main/res/values/styles.xml
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<resources>
|
||||||
|
<style name="AppThemeBase" parent="android:Theme.Material.Light.NoActionBar">
|
||||||
|
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<style name="AppTheme" parent="AppThemeBase" />
|
||||||
|
</resources>
|
@ -0,0 +1,21 @@
|
|||||||
|
package io.noties.markwon.sample.annotations;
|
||||||
|
|
||||||
|
public enum MarkwonArtifact {
|
||||||
|
CORE,
|
||||||
|
EDITOR,
|
||||||
|
EXT_LATEX,
|
||||||
|
EXT_STRIKETHROUGH,
|
||||||
|
EXT_TABLES,
|
||||||
|
EXT_TASKLIST,
|
||||||
|
HTML,
|
||||||
|
IMAGE,
|
||||||
|
IMAGE_COIL,
|
||||||
|
IMAGE_GLIDE,
|
||||||
|
IMAGE_PICASSO,
|
||||||
|
INLINE_PARSER,
|
||||||
|
LINKIFY,
|
||||||
|
RECYCLER,
|
||||||
|
RECYCLER_TABLE,
|
||||||
|
SIMPLE_EXT,
|
||||||
|
SYNTAX_HIGHLIGHT
|
||||||
|
}
|
@ -0,0 +1,30 @@
|
|||||||
|
package io.noties.markwon.sample.annotations;
|
||||||
|
|
||||||
|
import java.lang.annotation.ElementType;
|
||||||
|
import java.lang.annotation.Retention;
|
||||||
|
import java.lang.annotation.RetentionPolicy;
|
||||||
|
import java.lang.annotation.Target;
|
||||||
|
|
||||||
|
@Retention(RetentionPolicy.SOURCE)
|
||||||
|
@Target(ElementType.TYPE)
|
||||||
|
public @interface MarkwonSample {
|
||||||
|
/**
|
||||||
|
* Actual format is not important, but this key must be set in order to persist sample.
|
||||||
|
* This key should not change during lifetime of sample
|
||||||
|
* <p>
|
||||||
|
* {@code id} date in `YYYYMMDDHHmmss` format (UTC),
|
||||||
|
* a simple live template can be used:
|
||||||
|
* {@code
|
||||||
|
* groovyScript("new Date().format('YYYYMMDDHHmmss', TimeZone.getTimeZone('UTC'))")
|
||||||
|
* }
|
||||||
|
*/
|
||||||
|
String id();
|
||||||
|
|
||||||
|
String title();
|
||||||
|
|
||||||
|
String description();
|
||||||
|
|
||||||
|
MarkwonArtifact[] artifacts();
|
||||||
|
|
||||||
|
String[] tags();
|
||||||
|
}
|
12
sample-utils/processor/build.gradle
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
apply plugin: 'java-library'
|
||||||
|
|
||||||
|
sourceCompatibility = JavaVersion.VERSION_1_8
|
||||||
|
targetCompatibility = JavaVersion.VERSION_1_8
|
||||||
|
|
||||||
|
sourceSets {
|
||||||
|
main.java.srcDirs += '../annotations'
|
||||||
|
}
|
||||||
|
|
||||||
|
dependencies {
|
||||||
|
implementation deps['x-annotations']
|
||||||
|
}
|
@ -0,0 +1,65 @@
|
|||||||
|
package io.noties.markwon.sample.processor;
|
||||||
|
|
||||||
|
import androidx.annotation.NonNull;
|
||||||
|
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
|
import javax.annotation.processing.AbstractProcessor;
|
||||||
|
import javax.annotation.processing.Messager;
|
||||||
|
import javax.annotation.processing.ProcessingEnvironment;
|
||||||
|
import javax.annotation.processing.RoundEnvironment;
|
||||||
|
import javax.lang.model.SourceVersion;
|
||||||
|
import javax.lang.model.element.Element;
|
||||||
|
import javax.lang.model.element.TypeElement;
|
||||||
|
import javax.tools.Diagnostic;
|
||||||
|
|
||||||
|
import io.noties.markwon.sample.annotations.MarkwonSample;
|
||||||
|
|
||||||
|
public class MarkwonSampleProcessor extends AbstractProcessor {
|
||||||
|
|
||||||
|
private static final String KEY_SAMPLES_FILE = "markwon.samples.file";
|
||||||
|
|
||||||
|
private Messager messager;
|
||||||
|
private String samplesFilePath;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Set<String> getSupportedOptions() {
|
||||||
|
return Collections.singleton(KEY_SAMPLES_FILE);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public SourceVersion getSupportedSourceVersion() {
|
||||||
|
return SourceVersion.latest();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Set<String> getSupportedAnnotationTypes() {
|
||||||
|
return Collections.singleton(MarkwonSample.class.getName());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public synchronized void init(ProcessingEnvironment processingEnvironment) {
|
||||||
|
super.init(processingEnvironment);
|
||||||
|
|
||||||
|
messager = processingEnvironment.getMessager();
|
||||||
|
samplesFilePath = processingEnvironment.getOptions().get(KEY_SAMPLES_FILE);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean process(Set<? extends TypeElement> set, RoundEnvironment roundEnvironment) {
|
||||||
|
if (!roundEnvironment.processingOver()) {
|
||||||
|
final Set<? extends Element> elements = roundEnvironment.getElementsAnnotatedWith(MarkwonSample.class);
|
||||||
|
if (elements != null) {
|
||||||
|
for (Element element : elements) {
|
||||||
|
process(element);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void process(@NonNull Element element) {
|
||||||
|
messager.printMessage(Diagnostic.Kind.WARNING, samplesFilePath, element);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1 @@
|
|||||||
|
io.noties.markwon.sample.processor.MarkwonSampleProcessor
|
@ -18,3 +18,6 @@ include ':app', ':sample',
|
|||||||
':markwon-simple-ext',
|
':markwon-simple-ext',
|
||||||
':markwon-syntax-highlight',
|
':markwon-syntax-highlight',
|
||||||
':markwon-test-span'
|
':markwon-test-span'
|
||||||
|
|
||||||
|
include ':app-sample'
|
||||||
|
include ':sample-utils:processor'
|
||||||
|