diff --git a/README.md b/README.md
index 3f30ca2..e09bd47 100644
--- a/README.md
+++ b/README.md
@@ -1,8 +1,11 @@
+
+[![Android Arsenal](https://img.shields.io/badge/Android%20Arsenal-easydatabinding-green.svg?style=true)](https://android-arsenal.com/details/1/4106)
+
# easydatabinding
This project goal is to create activity fragment and views, with less code to be more efficient on the view models
-# Version : 0.4.5
+# Version : 0.6.0
# Goal
I used DataBinding for a few weeks since Google allows us to use it.
diff --git a/annotation/.gitignore b/annotation/.gitignore
new file mode 100644
index 0000000..796b96d
--- /dev/null
+++ b/annotation/.gitignore
@@ -0,0 +1 @@
+/build
diff --git a/annotation/annotation.iml b/annotation/annotation.iml
new file mode 100644
index 0000000..65131f9
--- /dev/null
+++ b/annotation/annotation.iml
@@ -0,0 +1,32 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/annotation/build.gradle b/annotation/build.gradle
new file mode 100644
index 0000000..2a04e25
--- /dev/null
+++ b/annotation/build.gradle
@@ -0,0 +1,7 @@
+apply plugin: 'java'
+apply plugin: 'maven'
+
+// This is important for publishing, even if Android Studio claims it isn't
+// used. Android can't interpret Java 8 byte code.
+sourceCompatibility = JavaVersion.VERSION_1_7
+targetCompatibility = JavaVersion.VERSION_1_7
diff --git a/annotation/src/main/java/com/joxad/easydatabinding/DataBindable.java b/annotation/src/main/java/com/joxad/easydatabinding/DataBindable.java
new file mode 100644
index 0000000..71b10a0
--- /dev/null
+++ b/annotation/src/main/java/com/joxad/easydatabinding/DataBindable.java
@@ -0,0 +1,8 @@
+package com.joxad.easydatabinding;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Target;
+
+@Target(value = ElementType.TYPE)
+public @interface DataBindable {
+}
diff --git a/build.gradle b/build.gradle
index 2d3b9c8..2e9b4df 100644
--- a/build.gradle
+++ b/build.gradle
@@ -6,8 +6,8 @@ buildscript {
}
dependencies {
- classpath 'com.android.tools.build:gradle:2.1.0'
-
+ classpath 'com.android.tools.build:gradle:2.1.2'
+ classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'
classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.2'
classpath 'com.github.dcendents:android-maven-gradle-plugin:1.3'
}
diff --git a/compiler/.gitignore b/compiler/.gitignore
new file mode 100644
index 0000000..796b96d
--- /dev/null
+++ b/compiler/.gitignore
@@ -0,0 +1 @@
+/build
diff --git a/compiler/build.gradle b/compiler/build.gradle
new file mode 100644
index 0000000..6ece946
--- /dev/null
+++ b/compiler/build.gradle
@@ -0,0 +1,10 @@
+apply plugin: 'java'
+
+sourceCompatibility = JavaVersion.VERSION_1_7
+targetCompatibility = JavaVersion.VERSION_1_7
+
+dependencies {
+ compile project (':annotation')
+ compile 'com.google.auto.service:auto-service:1.0-rc2'
+ compile 'com.squareup:javapoet:1.0.0'
+}
\ No newline at end of file
diff --git a/compiler/compiler.iml b/compiler/compiler.iml
new file mode 100644
index 0000000..ae0fd9b
--- /dev/null
+++ b/compiler/compiler.iml
@@ -0,0 +1,37 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/compiler/src/main/java/com/joxad/easydatabinding/AnnotatedClass.java b/compiler/src/main/java/com/joxad/easydatabinding/AnnotatedClass.java
new file mode 100644
index 0000000..ea74f62
--- /dev/null
+++ b/compiler/src/main/java/com/joxad/easydatabinding/AnnotatedClass.java
@@ -0,0 +1,22 @@
+package com.joxad.easydatabinding;
+
+import java.util.List;
+
+import javax.lang.model.element.TypeElement;
+import javax.lang.model.type.TypeMirror;
+
+class AnnotatedClass {
+ public final String annotatedClassName;
+ public final List variableNames;
+ public final TypeElement typeElement;
+
+ public AnnotatedClass(TypeElement typeElement, List variableNames) {
+ this.annotatedClassName = typeElement.getSimpleName().toString();
+ this.variableNames = variableNames;
+ this.typeElement = typeElement;
+ }
+
+ public TypeMirror getType() {
+ return typeElement.asType();
+ }
+}
\ No newline at end of file
diff --git a/compiler/src/main/java/com/joxad/easydatabinding/ClassValidator.java b/compiler/src/main/java/com/joxad/easydatabinding/ClassValidator.java
new file mode 100644
index 0000000..13a3355
--- /dev/null
+++ b/compiler/src/main/java/com/joxad/easydatabinding/ClassValidator.java
@@ -0,0 +1,15 @@
+package com.joxad.easydatabinding;
+
+import javax.lang.model.element.TypeElement;
+
+import static javax.lang.model.element.Modifier.ABSTRACT;
+import static javax.lang.model.element.Modifier.PUBLIC;
+final class ClassValidator {
+ static boolean isPublic(TypeElement annotatedClass) {
+ return annotatedClass.getModifiers().contains(PUBLIC);
+ }
+
+ static boolean isAbstract(TypeElement annotatedClass) {
+ return annotatedClass.getModifiers().contains(ABSTRACT);
+ }
+}
\ No newline at end of file
diff --git a/compiler/src/main/java/com/joxad/easydatabinding/CodeGenerator.java b/compiler/src/main/java/com/joxad/easydatabinding/CodeGenerator.java
new file mode 100644
index 0000000..7f9a0e0
--- /dev/null
+++ b/compiler/src/main/java/com/joxad/easydatabinding/CodeGenerator.java
@@ -0,0 +1,47 @@
+package com.joxad.easydatabinding;
+
+import com.squareup.javapoet.MethodSpec;
+import com.squareup.javapoet.TypeSpec;
+
+import java.util.List;
+
+import static com.squareup.javapoet.ClassName.get;
+import static com.squareup.javapoet.MethodSpec.methodBuilder;
+import static com.squareup.javapoet.TypeSpec.classBuilder;
+import static javax.lang.model.element.Modifier.FINAL;
+import static javax.lang.model.element.Modifier.PUBLIC;
+import static javax.lang.model.element.Modifier.STATIC;
+
+final class CodeGenerator {
+
+ private static final String CLASS_NAME = "DataBindableUtil";
+
+ public static TypeSpec generateClass(List classes) {
+ TypeSpec.Builder builder = classBuilder(CLASS_NAME)
+ .addModifiers(PUBLIC, FINAL);
+ for (AnnotatedClass anno : classes) {
+ builder.addMethod(makeCreateStringMethod(anno));
+ }
+ return builder.build();
+ }
+
+ /**
+ * @return a createString() method that takes annotatedClass's type as an input.
+ */
+ private static MethodSpec makeCreateStringMethod(AnnotatedClass annotatedClass) {
+ StringBuilder builder = new StringBuilder();
+ builder.append(String.format("return \"%s{\" + ", annotatedClass.annotatedClassName));
+ for (String variableName : annotatedClass.variableNames) {
+ builder.append(String.format(" \"%s='\" + String.valueOf(instance.%s) + \"',\" + ",
+ variableName, variableName));
+ }
+ builder.append("\"}\"");
+ return methodBuilder("createString")
+ .addJavadoc("@return string suitable for {@param instance}'s toString()")
+ .addModifiers(PUBLIC, STATIC)
+ .addParameter(get(annotatedClass.getType()), "instance")
+ .addStatement(builder.toString())
+ .returns(String.class)
+ .build();
+ }
+}
\ No newline at end of file
diff --git a/compiler/src/main/java/com/joxad/easydatabinding/DataBindableProcessor.java b/compiler/src/main/java/com/joxad/easydatabinding/DataBindableProcessor.java
new file mode 100644
index 0000000..69840a2
--- /dev/null
+++ b/compiler/src/main/java/com/joxad/easydatabinding/DataBindableProcessor.java
@@ -0,0 +1,117 @@
+package com.joxad.easydatabinding;
+
+import com.google.auto.service.AutoService;
+import com.squareup.javapoet.JavaFile;
+import com.squareup.javapoet.TypeSpec;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Set;
+
+import javax.annotation.processing.*;
+import javax.annotation.processing.Messager;
+import javax.lang.model.SourceVersion;
+import javax.lang.model.element.Element;
+import javax.lang.model.element.TypeElement;
+import javax.lang.model.element.VariableElement;
+
+import static com.squareup.javapoet.JavaFile.builder;
+import static java.util.Collections.singleton;
+import static javax.lang.model.SourceVersion.latestSupported;
+import static javax.tools.Diagnostic.Kind.*;
+
+
+@AutoService(Processor.class)
+public class DataBindableProcessor extends AbstractProcessor {
+
+ private static final String ANNOTATION = "@" + DataBindable.class.getSimpleName();
+
+ private Messager messager;
+
+ @Override
+ public synchronized void init(ProcessingEnvironment processingEnv) {
+ super.init(processingEnv);
+ messager = processingEnv.getMessager();
+ }
+
+ @Override
+ public Set getSupportedAnnotationTypes() {
+ return singleton(DataBindableProcessor.class.getCanonicalName());
+ }
+
+ @Override
+ public SourceVersion getSupportedSourceVersion() {
+ return latestSupported();
+ }
+
+ @Override
+ public boolean process(Set extends TypeElement> annotations, RoundEnvironment roundEnv) {
+ ArrayList annotatedClasses = new ArrayList<>();
+ for (Element annotatedElement : roundEnv.getElementsAnnotatedWith(DataBindable.class)) {
+ // Our annotation is defined with @Target(value=TYPE). Therefore, we can assume that
+ // this annotatedElement is a TypeElement.
+ TypeElement annotatedClass = (TypeElement) annotatedElement;
+ if (!isValidClass(annotatedClass)) {
+ return true;
+ }
+ try {
+ annotatedClasses.add(buildAnnotatedClass(annotatedClass));
+ } catch (NoPackageNameException | IOException e) {
+ String message = String.format("Couldn't process class %s: %s", annotatedClass,
+ e.getMessage());
+ messager.printMessage(ERROR, message, annotatedElement);
+ }
+ }
+ try {
+ generate(annotatedClasses);
+ } catch (NoPackageNameException | IOException e) {
+ messager.printMessage(ERROR, "Couldn't generate class");
+ }
+ return true;
+ }
+
+ private boolean isValidClass(TypeElement annotatedClass) {
+
+ if (!ClassValidator.isPublic(annotatedClass)) {
+ String message = String.format("Classes annotated with %s must be public.",
+ ANNOTATION);
+ messager.printMessage(ERROR, message, annotatedClass);
+ return false;
+ }
+
+ if (ClassValidator.isAbstract(annotatedClass)) {
+ String message = String.format("Classes annotated with %s must not be abstract.",
+ ANNOTATION);
+ messager.printMessage(ERROR, message, annotatedClass);
+ return false;
+ }
+
+ return true;
+ }
+
+ private com.joxad.easydatabinding.AnnotatedClass buildAnnotatedClass(TypeElement annotatedClass)
+ throws NoPackageNameException, IOException {
+ ArrayList variableNames = new ArrayList<>();
+ for (Element element : annotatedClass.getEnclosedElements()) {
+ if (!(element instanceof VariableElement)) {
+ continue;
+ }
+ VariableElement variableElement = (VariableElement) element;
+ variableNames.add(variableElement.getSimpleName().toString());
+ }
+ return new com.joxad.easydatabinding.AnnotatedClass(annotatedClass, variableNames);
+ }
+
+ private void generate(List annos) throws NoPackageNameException, IOException {
+ if (annos.size() == 0) {
+ return;
+ }
+ String packageName = Utils.getPackageName(processingEnv.getElementUtils(),
+ annos.get(0).typeElement);
+ TypeSpec generatedClass = com.joxad.easydatabinding.CodeGenerator.generateClass(annos);
+
+ JavaFile javaFile = builder(packageName, generatedClass).build();
+ javaFile.writeTo(processingEnv.getFiler());
+ }
+}
diff --git a/compiler/src/main/java/com/joxad/easydatabinding/NoPackageNameException.java b/compiler/src/main/java/com/joxad/easydatabinding/NoPackageNameException.java
new file mode 100644
index 0000000..99188c5
--- /dev/null
+++ b/compiler/src/main/java/com/joxad/easydatabinding/NoPackageNameException.java
@@ -0,0 +1,10 @@
+package com.joxad.easydatabinding;
+
+import javax.lang.model.element.TypeElement;
+
+class NoPackageNameException extends Exception {
+
+ public NoPackageNameException(TypeElement typeElement) {
+ super("The package of " + typeElement.getSimpleName() + " has no name");
+ }
+}
\ No newline at end of file
diff --git a/compiler/src/main/java/com/joxad/easydatabinding/Utils.java b/compiler/src/main/java/com/joxad/easydatabinding/Utils.java
new file mode 100644
index 0000000..a2bc897
--- /dev/null
+++ b/compiler/src/main/java/com/joxad/easydatabinding/Utils.java
@@ -0,0 +1,21 @@
+package com.joxad.easydatabinding;
+
+import javax.lang.model.element.PackageElement;
+import javax.lang.model.element.TypeElement;
+import javax.lang.model.util.Elements;
+
+final class Utils {
+
+ private Utils() {
+ // no instances
+ }
+
+ static String getPackageName(Elements elementUtils, TypeElement type)
+ throws NoPackageNameException {
+ PackageElement pkg = elementUtils.getPackageOf(type);
+ if (pkg.isUnnamed()) {
+ throw new NoPackageNameException(type);
+ }
+ return pkg.getQualifiedName().toString();
+ }
+}
\ No newline at end of file
diff --git a/gradle.properties b/gradle.properties
index f894c80..9d5c6b6 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -12,12 +12,12 @@
# Default value: -Xmx10248m -XX:MaxPermSize=256m
# org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
-# When configured, Gradle will run in incubating parallel mode.
+# When configured, Gradle will run incubating parallel mode.
# This option should only be used with decoupled projects. More details, visit
# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
# org.gradle.parallel=true
-VERSION_NAME=0.4.5
+VERSION_NAME=0.6.0
POM_GROUP=com.joxad.easydatabinding
POM_NAME=easydatabinding
diff --git a/lib/build.gradle b/lib/build.gradle
index 1c2f2cc..3b9d4b1 100644
--- a/lib/build.gradle
+++ b/lib/build.gradle
@@ -25,6 +25,5 @@ dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
testCompile 'junit:junit:4.12'
compile libs.appCompat
- provided libs.lombok
}
apply from: '../gradle/tasks/bintray_upload.gradle'
diff --git a/lib/lib.iml b/lib/lib.iml
index 19dbd15..93a84e5 100644
--- a/lib/lib.iml
+++ b/lib/lib.iml
@@ -1,6 +1,138 @@
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ generateDebugSources
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/lib/src/main/java/com/joxad/easydatabinding/activity/ActivityBase.java b/lib/src/main/java/com/joxad/easydatabinding/activity/ActivityBase.java
index 73d2f77..fd4f29d 100644
--- a/lib/src/main/java/com/joxad/easydatabinding/activity/ActivityBase.java
+++ b/lib/src/main/java/com/joxad/easydatabinding/activity/ActivityBase.java
@@ -8,8 +8,7 @@
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
-
-import lombok.Getter;
+import android.view.MenuItem;
/**
* {@link ActivityBase} will allow you to generate a basic activity that put your view model {@link B} and its {@link VM}
@@ -19,12 +18,12 @@ public abstract class ActivityBase extends DialogFragment {
+
+ /***
+ * FragmentBinding used in this view
+ */
+
+ protected B binding;
+ /***
+ * The view model that will be used to handle this fragment
+ */
+
+ protected VM vm;
+
+ @Nullable
+ @Override
+ public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
+ binding = DataBindingUtil.inflate(inflater, layoutResources(), container, false);
+ vm = baseFragmentVM(binding);
+ binding.setVariable(data(), vm);
+ return binding.getRoot();
+ }
+
+
+ @Override
+ public void onResume() {
+ super.onResume();
+ vm.onResume();
+ }
+
+ @Override
+ public void onPause() {
+ super.onPause();
+ vm.onPause();
+ }
+
+
+ /***
+ * Handle the permission and give it to the activity
+ *
+ * @param requestCode
+ * @param permissions
+ * @param grantResults
+ */
+ @Override
+ public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
+ super.onRequestPermissionsResult(requestCode, permissions, grantResults);
+ if (vm instanceof IPermission)
+ ((IPermission) vm).onRequestPermissionsResult(requestCode, permissions, grantResults);
+ }
+
+ /***
+ * Handle the activity result if you need to use it inside the vm of the fragment
+ *
+ * @param requestCode
+ * @param resultCode
+ * @param data
+ */
+ @Override
+ public void onActivityResult(int requestCode, int resultCode, Intent data) {
+ super.onActivityResult(requestCode, resultCode, data);
+ if (vm instanceof IResult)
+ ((IResult) vm).onActivityResult(requestCode, resultCode, data);
+ }
+
+ /**
+ * The int value found in the {@link com.joxad.easydatabinding.BR} class generated by DataBinding
+ *
+ * @return
+ */
+ public abstract int data();
+
+ /***
+ * @return your layout resources
+ */
+ @LayoutRes
+ public abstract int layoutResources();
+
+ /***
+ * @param binding
+ * @return the {@link VM} you want to use in this activity
+ */
+ public abstract VM baseFragmentVM(B binding);
+}
diff --git a/lib/src/main/java/com/joxad/easydatabinding/fragment/DialogFragmentBaseVM.java b/lib/src/main/java/com/joxad/easydatabinding/fragment/DialogFragmentBaseVM.java
new file mode 100644
index 0000000..d252c64
--- /dev/null
+++ b/lib/src/main/java/com/joxad/easydatabinding/fragment/DialogFragmentBaseVM.java
@@ -0,0 +1,48 @@
+package com.joxad.easydatabinding.fragment;
+
+import android.databinding.BaseObservable;
+import android.databinding.ViewDataBinding;
+
+import com.joxad.easydatabinding.base.IVM;
+
+
+/**
+ * Created by josh on 13/04/16.
+ */
+public abstract class DialogFragmentBaseVM extends BaseObservable implements IVM {
+
+ /***
+ * {@link F} is the fragment that use the current VM
+ */
+ protected F fragment;
+ /**
+ * {@link B} will be used to find the views inside the fragment
+ */
+ protected B binding;
+
+ /***
+ * @param
+ * @param binding
+ */
+ public DialogFragmentBaseVM(F fragment, B binding) {
+ this.fragment = fragment;
+ this.binding = binding;
+ init();
+ }
+
+ /***
+ * LifeCycle of the Fragment
+ */
+ protected void onResume() {
+
+ }
+
+ /***
+ * LifeCycle of the fragment
+ */
+ protected void onPause() {
+
+ }
+
+ public abstract void init();
+}
\ No newline at end of file
diff --git a/lib/src/main/java/com/joxad/easydatabinding/fragment/FragmentBase.java b/lib/src/main/java/com/joxad/easydatabinding/fragment/FragmentBase.java
index d7b9768..c34c0f1 100644
--- a/lib/src/main/java/com/joxad/easydatabinding/fragment/FragmentBase.java
+++ b/lib/src/main/java/com/joxad/easydatabinding/fragment/FragmentBase.java
@@ -15,8 +15,6 @@
import com.joxad.easydatabinding.activity.IPermission;
import com.joxad.easydatabinding.activity.IResult;
-import lombok.Getter;
-
/**
* Created by josh on 13/04/16.
*/
@@ -25,12 +23,12 @@ public abstract class FragmentBase
- #3F51B5
- #303F9F
- #FF4081
+ #3F51B5
+ #303F9F
+ #FF4081
diff --git a/lib/src/main/res/values/strings.xml b/lib/src/main/res/values/strings.xml
index e512455..1a05954 100644
--- a/lib/src/main/res/values/strings.xml
+++ b/lib/src/main/res/values/strings.xml
@@ -1,3 +1,3 @@
- Easydatabinding
+ Easydatabinding
diff --git a/lib/src/main/res/values/styles.xml b/lib/src/main/res/values/styles.xml
index 5885930..42743bc 100644
--- a/lib/src/main/res/values/styles.xml
+++ b/lib/src/main/res/values/styles.xml
@@ -1,11 +1,11 @@
-
diff --git a/sample/build.gradle b/sample/build.gradle
index 968de8c..dfc63e5 100644
--- a/sample/build.gradle
+++ b/sample/build.gradle
@@ -1,4 +1,5 @@
apply plugin: 'com.android.application'
+apply plugin: 'com.neenbedankt.android-apt'
android {
compileSdkVersion 23
@@ -22,9 +23,14 @@ android {
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
- testCompile 'junit:junit:4.12'
compile project(':lib')
+ compile project(':annotation')
+
+
+ apt project(':compiler')
compile libs.recyclerViewDataBinding
compile libs.recyclerViewAdapter
+
}
+
diff --git a/sample/sample.iml b/sample/sample.iml
index 19dbd15..944669a 100644
--- a/sample/sample.iml
+++ b/sample/sample.iml
@@ -1,6 +1,134 @@
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ generateDebugSources
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/sample/src/main/AndroidManifest.xml b/sample/src/main/AndroidManifest.xml
index 3349a54..c50b682 100644
--- a/sample/src/main/AndroidManifest.xml
+++ b/sample/src/main/AndroidManifest.xml
@@ -4,7 +4,18 @@
+ android:supportsRtl="true"
+ android:theme="@style/EasyTheme">
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/sample/src/main/java/joxad/easydatabinding/sample/ActivityMain.java b/sample/src/main/java/joxad/easydatabinding/sample/ActivityMain.java
index ed06d8a..0ce5a29 100644
--- a/sample/src/main/java/joxad/easydatabinding/sample/ActivityMain.java
+++ b/sample/src/main/java/joxad/easydatabinding/sample/ActivityMain.java
@@ -1,6 +1,7 @@
package joxad.easydatabinding.sample;
import android.os.Bundle;
+import android.support.annotation.Nullable;
import com.joxad.easydatabinding.activity.ActivityBase;
@@ -27,4 +28,6 @@ public int layoutResources() {
public ActivityMainVM baseActivityVM(ActivityMainBinding binding, Bundle savedInstanceState) {
return new ActivityMainVM(this, binding);
}
+
+
}
diff --git a/sample/src/main/java/joxad/easydatabinding/sample/User.java b/sample/src/main/java/joxad/easydatabinding/sample/User.java
index 2e21cf1..767b667 100644
--- a/sample/src/main/java/joxad/easydatabinding/sample/User.java
+++ b/sample/src/main/java/joxad/easydatabinding/sample/User.java
@@ -1,8 +1,11 @@
package joxad.easydatabinding.sample;
+import com.joxad.easydatabinding.DataBindable;
+
/**
* Created by josh on 13/04/16.
*/
+@DataBindable
public class User {
public String name;
@@ -10,4 +13,9 @@ public class User {
public User(String s) {
name = s;
}
+
+ @Override
+ public String toString() {
+ return "";//DataBindableUtil.createString(this);
+ }
}
diff --git a/sample/src/main/java/joxad/easydatabinding/sample/annotations/Test.java b/sample/src/main/java/joxad/easydatabinding/sample/annotations/Test.java
deleted file mode 100644
index 0e4dc69..0000000
--- a/sample/src/main/java/joxad/easydatabinding/sample/annotations/Test.java
+++ /dev/null
@@ -1,15 +0,0 @@
-package joxad.easydatabinding.sample.annotations;
-
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-
-@Retention(RetentionPolicy.RUNTIME)
-@Target(ElementType.METHOD) //can use in method only.
-public @interface Test {
-
- //should ignore this test?
- public boolean enabled() default true;
-
-}
\ No newline at end of file
diff --git a/sample/src/main/java/joxad/easydatabinding/sample/annotations/TestExample.java b/sample/src/main/java/joxad/easydatabinding/sample/annotations/TestExample.java
deleted file mode 100644
index e6ad9c1..0000000
--- a/sample/src/main/java/joxad/easydatabinding/sample/annotations/TestExample.java
+++ /dev/null
@@ -1,30 +0,0 @@
-package joxad.easydatabinding.sample.annotations;
-
-
-@TesterInfo(
- priority = TesterInfo.Priority.HIGH,
- createdBy = "mkyong.com",
- tags = {"sales","test" }
-)
-public class TestExample {
-
- @Test
- void testA() {
- if (true)
- throw new RuntimeException("This test always failed");
- }
-
- @Test(enabled = false)
- void testB() {
- if (false)
- throw new RuntimeException("This test always passed");
- }
-
- @Test(enabled = true)
- void testC() {
- if (10 > 1) {
- // do nothing, this test always passed.
- }
- }
-
-}
diff --git a/sample/src/main/java/joxad/easydatabinding/sample/annotations/TesterInfo.java b/sample/src/main/java/joxad/easydatabinding/sample/annotations/TesterInfo.java
deleted file mode 100644
index 54da6d2..0000000
--- a/sample/src/main/java/joxad/easydatabinding/sample/annotations/TesterInfo.java
+++ /dev/null
@@ -1,24 +0,0 @@
-package joxad.easydatabinding.sample.annotations;
-
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-
-@Retention(RetentionPolicy.RUNTIME)
-@Target(ElementType.TYPE) //on class level
-public @interface TesterInfo {
-
- public enum Priority {
- LOW, MEDIUM, HIGH
- }
-
- Priority priority() default Priority.MEDIUM;
-
- String[] tags() default "";
-
- String createdBy() default "Mkyong";
-
- String lastModified() default "03/01/2014";
-
-}
\ No newline at end of file
diff --git a/sample/src/main/res/values/strings.xml b/sample/src/main/res/values/strings.xml
index 1ad8c29..a136c02 100644
--- a/sample/src/main/res/values/strings.xml
+++ b/sample/src/main/res/values/strings.xml
@@ -1,3 +1,3 @@
- Sample
+ Sample
diff --git a/sample/src/main/res/values/styles.xml b/sample/src/main/res/values/styles.xml
index 5885930..42743bc 100644
--- a/sample/src/main/res/values/styles.xml
+++ b/sample/src/main/res/values/styles.xml
@@ -1,11 +1,11 @@
-
diff --git a/sample/src/test/java/joxad/easydatabinding/sample/ExampleUnitTest.java b/sample/src/test/java/joxad/easydatabinding/sample/ExampleUnitTest.java
deleted file mode 100644
index 3dfbfcf..0000000
--- a/sample/src/test/java/joxad/easydatabinding/sample/ExampleUnitTest.java
+++ /dev/null
@@ -1,15 +0,0 @@
-package joxad.easydatabinding.sample;
-
-import org.junit.Test;
-
-import static org.junit.Assert.*;
-
-/**
- * To work on unit tests, switch the Test Artifact in the Build Variants view.
- */
-public class ExampleUnitTest {
- @Test
- public void addition_isCorrect() throws Exception {
- assertEquals(4, 2 + 2);
- }
-}
\ No newline at end of file
diff --git a/settings.gradle b/settings.gradle
index 47470a4..7c69d03 100644
--- a/settings.gradle
+++ b/settings.gradle
@@ -1 +1 @@
-include ':lib', ':sample'
+include ':annotation', ':compiler', ':sample',':lib'