├── app
├── .gitignore
├── src
│ └── main
│ │ ├── res
│ │ ├── mipmap-hdpi
│ │ │ └── ic_launcher.png
│ │ ├── mipmap-mdpi
│ │ │ └── ic_launcher.png
│ │ ├── mipmap-xhdpi
│ │ │ └── ic_launcher.png
│ │ ├── mipmap-xxhdpi
│ │ │ └── ic_launcher.png
│ │ ├── mipmap-xxxhdpi
│ │ │ └── ic_launcher.png
│ │ ├── values
│ │ │ ├── strings.xml
│ │ │ ├── colors.xml
│ │ │ ├── dimens.xml
│ │ │ └── styles.xml
│ │ ├── values-w820dp
│ │ │ └── dimens.xml
│ │ ├── drawable
│ │ │ └── ic_delete.xml
│ │ └── layout
│ │ │ ├── activity_main.xml
│ │ │ └── item_footballer.xml
│ │ ├── java
│ │ └── com
│ │ │ └── zuluft
│ │ │ └── giodz
│ │ │ └── autorendereradaptersample
│ │ │ ├── models
│ │ │ └── FootballerModel.java
│ │ │ ├── simpleSample
│ │ │ ├── renderers
│ │ │ │ └── FootballerRenderer.java
│ │ │ └── SimpleSampleActivity.java
│ │ │ └── sortedAutoAdapterSample
│ │ │ ├── renderers
│ │ │ └── FootballerOrderableRenderer.java
│ │ │ └── SortedAutoAdapterSampleActivity.java
│ │ └── AndroidManifest.xml
├── proguard-rules.pro
└── build.gradle
├── autoAdapter
├── .gitignore
├── src
│ └── main
│ │ ├── res
│ │ └── values
│ │ │ └── strings.xml
│ │ ├── java
│ │ └── com
│ │ │ └── zuluft
│ │ │ └── autoadapter
│ │ │ ├── renderables
│ │ │ ├── IRenderer.java
│ │ │ ├── Renderer.java
│ │ │ ├── OrderableRenderer.java
│ │ │ └── AutoViewHolder.java
│ │ │ ├── listeners
│ │ │ ├── ViewHolderCreationListener.java
│ │ │ └── ItemInfo.java
│ │ │ ├── factories
│ │ │ └── AutoViewHolderFactory.java
│ │ │ ├── structures
│ │ │ ├── IAdapter.java
│ │ │ ├── ISortedAdapter.java
│ │ │ └── SortedAdapterDataStructure.java
│ │ │ ├── AutoAdapter.java
│ │ │ ├── SortedAutoAdapter.java
│ │ │ └── BaseAutoAdapter.java
│ │ └── AndroidManifest.xml
├── proguard-rules.pro
└── build.gradle
├── processor
├── .gitignore
├── src
│ └── main
│ │ ├── resources
│ │ └── META-INF
│ │ │ └── services
│ │ │ └── javax.annotation.processing.Processor
│ │ └── java
│ │ └── com
│ │ └── zuluft
│ │ └── autoAdapterAnnotationsProcessor
│ │ ├── ViewInfo.java
│ │ ├── ViewHolderInfo.java
│ │ ├── ClassNameHelper.java
│ │ └── Processor.java
└── build.gradle
├── autoAdapterAnnotations
├── .gitignore
├── build.gradle
└── src
│ └── main
│ └── java
│ └── com
│ └── zuluft
│ └── autoadapterannotations
│ ├── ViewField.java
│ └── Render.java
├── gradle.properties
├── settings.gradle
├── gradle
└── wrapper
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── .gitignore
├── .idea
├── vcs.xml
├── runConfigurations.xml
├── modules.xml
├── gradle.xml
└── misc.xml
├── gradlew.bat
├── gradlew
├── LICENSE
└── README.md
/app/.gitignore:
--------------------------------------------------------------------------------
1 | /build
2 |
--------------------------------------------------------------------------------
/autoAdapter/.gitignore:
--------------------------------------------------------------------------------
1 | /build
2 |
--------------------------------------------------------------------------------
/processor/.gitignore:
--------------------------------------------------------------------------------
1 | /build
2 |
--------------------------------------------------------------------------------
/autoAdapterAnnotations/.gitignore:
--------------------------------------------------------------------------------
1 | /build
2 |
--------------------------------------------------------------------------------
/gradle.properties:
--------------------------------------------------------------------------------
1 | org.gradle.jvmargs=-Xmx1536m
2 |
--------------------------------------------------------------------------------
/settings.gradle:
--------------------------------------------------------------------------------
1 | include ':app', ':autoAdapter', ':autoAdapterAnnotations', ':processor'
2 |
--------------------------------------------------------------------------------
/gradle/wrapper/gradle-wrapper.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Zuluft/AutoAdapter/HEAD/gradle/wrapper/gradle-wrapper.jar
--------------------------------------------------------------------------------
/autoAdapter/src/main/res/values/strings.xml:
--------------------------------------------------------------------------------
1 |
2 | AutoRendererAdapter
3 |
4 |
--------------------------------------------------------------------------------
/processor/src/main/resources/META-INF/services/javax.annotation.processing.Processor:
--------------------------------------------------------------------------------
1 | com.zuluft.autoAdapterAnnotationsProcessor.Processor
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-hdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Zuluft/AutoAdapter/HEAD/app/src/main/res/mipmap-hdpi/ic_launcher.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-mdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Zuluft/AutoAdapter/HEAD/app/src/main/res/mipmap-mdpi/ic_launcher.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Zuluft/AutoAdapter/HEAD/app/src/main/res/mipmap-xhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Zuluft/AutoAdapter/HEAD/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Zuluft/AutoAdapter/HEAD/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | *.iml
2 | .gradle
3 | /local.properties
4 | /.idea/workspace.xml
5 | /.idea/libraries
6 | .DS_Store
7 | /build
8 | /captures
9 | .externalNativeBuild
10 |
--------------------------------------------------------------------------------
/.idea/vcs.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/values/strings.xml:
--------------------------------------------------------------------------------
1 |
2 | AutoRendererAdapterSample
3 |
4 | Number: %1$d
5 |
6 |
--------------------------------------------------------------------------------
/autoAdapter/src/main/java/com/zuluft/autoadapter/renderables/IRenderer.java:
--------------------------------------------------------------------------------
1 | package com.zuluft.autoadapter.renderables;
2 |
3 | public interface IRenderer {
4 |
5 | void apply(T viewHolder);
6 |
7 | }
8 |
--------------------------------------------------------------------------------
/autoAdapterAnnotations/build.gradle:
--------------------------------------------------------------------------------
1 | apply plugin: 'java-library'
2 | apply plugin: 'com.github.dcendents.android-maven'
3 |
4 | group='com.github.Zuluft'
5 |
6 | dependencies {
7 | implementation fileTree(dir: 'libs', include: ['*.jar'])
8 | }
9 |
--------------------------------------------------------------------------------
/autoAdapter/src/main/java/com/zuluft/autoadapter/renderables/Renderer.java:
--------------------------------------------------------------------------------
1 | package com.zuluft.autoadapter.renderables;
2 |
3 | @SuppressWarnings("unused")
4 | public abstract class Renderer implements IRenderer {
5 |
6 | }
7 |
--------------------------------------------------------------------------------
/app/src/main/res/values/colors.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | #3F51B5
4 | #303F9F
5 | #FF4081
6 |
7 |
--------------------------------------------------------------------------------
/app/src/main/res/values/dimens.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | 16dp
4 | 16dp
5 |
6 |
--------------------------------------------------------------------------------
/gradle/wrapper/gradle-wrapper.properties:
--------------------------------------------------------------------------------
1 | #Wed Jul 18 15:43:11 GET 2018
2 | distributionBase=GRADLE_USER_HOME
3 | distributionPath=wrapper/dists
4 | zipStoreBase=GRADLE_USER_HOME
5 | zipStorePath=wrapper/dists
6 | distributionUrl=https\://services.gradle.org/distributions/gradle-4.6-all.zip
7 |
--------------------------------------------------------------------------------
/autoAdapterAnnotations/src/main/java/com/zuluft/autoadapterannotations/ViewField.java:
--------------------------------------------------------------------------------
1 | package com.zuluft.autoadapterannotations;
2 |
3 |
4 | /**
5 | * Created by giodz on 9/20/2017.
6 | */
7 |
8 | public @interface ViewField {
9 | int id();
10 |
11 | String name();
12 |
13 | Class> type();
14 | }
15 |
--------------------------------------------------------------------------------
/autoAdapter/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
3 |
4 |
6 |
7 |
8 |
9 |
10 |
--------------------------------------------------------------------------------
/processor/build.gradle:
--------------------------------------------------------------------------------
1 | apply plugin: 'java-library'
2 | apply plugin: 'com.github.dcendents.android-maven'
3 |
4 | group='com.github.Zuluft'
5 |
6 | dependencies {
7 | implementation fileTree(dir: 'libs', include: ['*.jar'])
8 | compile project(":autoAdapterAnnotations")
9 | compile 'com.squareup:javapoet:1.9.0'
10 | }
11 |
--------------------------------------------------------------------------------
/autoAdapter/src/main/java/com/zuluft/autoadapter/listeners/ViewHolderCreationListener.java:
--------------------------------------------------------------------------------
1 | package com.zuluft.autoadapter.listeners;
2 |
3 | import android.support.annotation.NonNull;
4 |
5 | import com.zuluft.autoadapter.renderables.AutoViewHolder;
6 |
7 | public interface ViewHolderCreationListener {
8 |
9 | void onViewHolderCreated(@NonNull AutoViewHolder autoViewHolder);
10 | }
11 |
--------------------------------------------------------------------------------
/app/src/main/res/values-w820dp/dimens.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 | 64dp
6 |
7 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_delete.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/values/styles.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/activity_main.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
10 |
11 |
--------------------------------------------------------------------------------
/autoAdapterAnnotations/src/main/java/com/zuluft/autoadapterannotations/Render.java:
--------------------------------------------------------------------------------
1 | package com.zuluft.autoadapterannotations;
2 |
3 | import java.lang.annotation.ElementType;
4 | import java.lang.annotation.Retention;
5 | import java.lang.annotation.RetentionPolicy;
6 | import java.lang.annotation.Target;
7 |
8 | @Target(ElementType.TYPE)
9 | @Retention(RetentionPolicy.SOURCE)
10 | public @interface Render {
11 | int layout();
12 |
13 | ViewField[] views() default {};
14 | }
15 |
--------------------------------------------------------------------------------
/.idea/runConfigurations.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
11 |
12 |
--------------------------------------------------------------------------------
/processor/src/main/java/com/zuluft/autoAdapterAnnotationsProcessor/ViewInfo.java:
--------------------------------------------------------------------------------
1 | package com.zuluft.autoAdapterAnnotationsProcessor;
2 |
3 | import javax.lang.model.element.TypeElement;
4 |
5 |
6 | @SuppressWarnings("WeakerAccess")
7 | public class ViewInfo {
8 | public final int id;
9 | public final String name;
10 | public final TypeElement canonicalName;
11 |
12 |
13 | public ViewInfo(final int id,
14 | final String name,
15 | final TypeElement canonicalName) {
16 | this.id = id;
17 | this.name = name;
18 | this.canonicalName = canonicalName;
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/autoAdapter/src/main/java/com/zuluft/autoadapter/listeners/ItemInfo.java:
--------------------------------------------------------------------------------
1 | package com.zuluft.autoadapter.listeners;
2 |
3 |
4 | import com.zuluft.autoadapter.renderables.IRenderer;
5 | import com.zuluft.autoadapter.renderables.AutoViewHolder;
6 |
7 |
8 | @SuppressWarnings("WeakerAccess")
9 | public final class ItemInfo {
10 | public final int position;
11 | public final T renderer;
12 | public final V viewHolder;
13 |
14 | public ItemInfo(int position, T renderer, V viewHolder) {
15 | this.position = position;
16 | this.renderer = renderer;
17 | this.viewHolder = viewHolder;
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/app/proguard-rules.pro:
--------------------------------------------------------------------------------
1 | # Add project specific ProGuard rules here.
2 | # By default, the flags in this file are appended to flags specified
3 | # in C:\Users\giodz\AppData\Local\Android\Sdk/tools/proguard/proguard-android.txt
4 | # You can edit the include path and order by changing the proguardFiles
5 | # directive in build.gradle.
6 | #
7 | # For more details, see
8 | # http://developer.android.com/guide/developing/tools/proguard.html
9 |
10 | # Add any project specific keep options here:
11 |
12 | # If your project uses WebView with JS, uncomment the following
13 | # and specify the fully qualified class name to the JavaScript interface
14 | # class:
15 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview {
16 | # public *;
17 | #}
18 |
--------------------------------------------------------------------------------
/autoAdapter/proguard-rules.pro:
--------------------------------------------------------------------------------
1 | # Add project specific ProGuard rules here.
2 | # By default, the flags in this file are appended to flags specified
3 | # in C:\Users\giodz\AppData\Local\Android\Sdk/tools/proguard/proguard-android.txt
4 | # You can edit the include path and order by changing the proguardFiles
5 | # directive in build.gradle.
6 | #
7 | # For more details, see
8 | # http://developer.android.com/guide/developing/tools/proguard.html
9 |
10 | # Add any project specific keep options here:
11 |
12 | # If your project uses WebView with JS, uncomment the following
13 | # and specify the fully qualified class name to the JavaScript interface
14 | # class:
15 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview {
16 | # public *;
17 | #}
18 |
--------------------------------------------------------------------------------
/autoAdapter/src/main/java/com/zuluft/autoadapter/factories/AutoViewHolderFactory.java:
--------------------------------------------------------------------------------
1 | package com.zuluft.autoadapter.factories;
2 |
3 | import android.view.LayoutInflater;
4 | import android.view.View;
5 | import android.view.ViewGroup;
6 |
7 | import com.zuluft.autoadapter.renderables.AutoViewHolder;
8 | import com.zuluft.autoadapter.renderables.IRenderer;
9 |
10 |
11 | public abstract class AutoViewHolderFactory {
12 |
13 | public abstract int getLayoutId(IRenderer renderer);
14 |
15 | public abstract AutoViewHolder createViewHolder(ViewGroup parent, int layoutId);
16 |
17 | protected final View createView(ViewGroup parent, int layoutId) {
18 | return LayoutInflater.from(parent.getContext())
19 | .inflate(layoutId, parent, false);
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/app/src/main/java/com/zuluft/giodz/autorendereradaptersample/models/FootballerModel.java:
--------------------------------------------------------------------------------
1 | package com.zuluft.giodz.autorendereradaptersample.models;
2 |
3 |
4 | public final class FootballerModel {
5 | private final String name;
6 | private final int number;
7 | private final String club;
8 |
9 | public FootballerModel(final String name,
10 | final int number,
11 | final String club) {
12 | this.name = name;
13 | this.number = number;
14 | this.club = club;
15 | }
16 |
17 | public String getName() {
18 | return name;
19 | }
20 |
21 | public int getNumber() {
22 | return number;
23 | }
24 |
25 | public String getClub() {
26 | return club;
27 | }
28 | }
29 |
--------------------------------------------------------------------------------
/autoAdapter/src/main/java/com/zuluft/autoadapter/structures/IAdapter.java:
--------------------------------------------------------------------------------
1 | package com.zuluft.autoadapter.structures;
2 |
3 |
4 | import android.support.annotation.NonNull;
5 | import com.zuluft.autoadapter.renderables.IRenderer;
6 |
7 | import java.util.List;
8 |
9 | @SuppressWarnings({"unchecked", "unused"})
10 | public interface IAdapter {
11 |
12 |
13 | void add(@NonNull T item);
14 |
15 | void addAll(@NonNull T... items);
16 |
17 | void addAll(@NonNull List extends T> items);
18 |
19 | void remove(int position);
20 |
21 | void remove(@NonNull T item);
22 |
23 | void removeAll();
24 |
25 | void update(int position, @NonNull T newItem);
26 |
27 | int indexOf(@NonNull T item);
28 |
29 | T getItem(int position);
30 |
31 |
32 | }
33 |
--------------------------------------------------------------------------------
/.idea/modules.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/autoAdapter/src/main/java/com/zuluft/autoadapter/structures/ISortedAdapter.java:
--------------------------------------------------------------------------------
1 | package com.zuluft.autoadapter.structures;
2 |
3 | import android.support.annotation.NonNull;
4 |
5 | import com.zuluft.autoadapter.renderables.OrderableRenderer;
6 |
7 | import java.util.List;
8 |
9 | @SuppressWarnings("unused")
10 | public interface ISortedAdapter {
11 |
12 | int compare(@NonNull OrderableRenderer item1,
13 | @NonNull OrderableRenderer item2);
14 |
15 | boolean areContentsTheSame(@NonNull OrderableRenderer item1,
16 | @NonNull OrderableRenderer item2);
17 |
18 | boolean areItemsTheSame(@NonNull OrderableRenderer item1,
19 | @NonNull OrderableRenderer item2);
20 |
21 | void beginUpdate();
22 |
23 | void commitUpdate();
24 |
25 | void updateAll(List list);
26 |
27 | }
28 |
--------------------------------------------------------------------------------
/processor/src/main/java/com/zuluft/autoAdapterAnnotationsProcessor/ViewHolderInfo.java:
--------------------------------------------------------------------------------
1 | package com.zuluft.autoAdapterAnnotationsProcessor;
2 |
3 | import com.zuluft.autoadapterannotations.ViewField;
4 |
5 | @SuppressWarnings("WeakerAccess")
6 | public class ViewHolderInfo {
7 | public final String name;
8 | public final ViewInfo[] viewInfos;
9 |
10 | public ViewHolderInfo(final String name,
11 | final ViewField[] viewFields) {
12 | this.name = name;
13 | viewInfos = new ViewInfo[viewFields.length];
14 | for (int i = 0; i < viewInfos.length; i++) {
15 | ViewField viewField = viewFields[i];
16 | ViewInfo viewInfo = new ViewInfo(viewField.id(), viewField.name(),
17 | ClassNameHelper.getViewClassInfo(viewField));
18 | viewInfos[i] = viewInfo;
19 | }
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/.idea/gradle.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
--------------------------------------------------------------------------------
/autoAdapter/build.gradle:
--------------------------------------------------------------------------------
1 | apply plugin: 'com.android.library'
2 | apply plugin: 'com.github.dcendents.android-maven'
3 |
4 | group = 'com.github.Zuluft'
5 |
6 | android {
7 | compileSdkVersion 28
8 | buildToolsVersion '28.0.3'
9 |
10 | defaultConfig {
11 | minSdkVersion 14
12 | targetSdkVersion 28
13 | versionCode 1
14 | versionName "1.0"
15 | }
16 |
17 | buildTypes {
18 | release {
19 | minifyEnabled false
20 | proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
21 | }
22 | }
23 | }
24 |
25 | dependencies {
26 | implementation fileTree(dir: 'libs', include: ['*.jar'])
27 | implementation 'com.android.support:recyclerview-v7:28.0.0'
28 | //rx2
29 | api 'io.reactivex.rxjava2:rxandroid:2.0.2'
30 | api 'io.reactivex.rxjava2:rxjava:2.1.9'
31 | //rx2 bindings
32 | api 'com.jakewharton.rxbinding2:rxbinding:2.0.0'
33 | }
--------------------------------------------------------------------------------
/processor/src/main/java/com/zuluft/autoAdapterAnnotationsProcessor/ClassNameHelper.java:
--------------------------------------------------------------------------------
1 | package com.zuluft.autoAdapterAnnotationsProcessor;
2 |
3 |
4 | import com.zuluft.autoadapterannotations.ViewField;
5 |
6 | import javax.lang.model.element.TypeElement;
7 | import javax.lang.model.type.DeclaredType;
8 | import javax.lang.model.type.MirroredTypeException;
9 |
10 | @SuppressWarnings({"WeakerAccess", "unused"})
11 | public final class ClassNameHelper {
12 |
13 | public static TypeElement getViewClassInfo(final ViewField viewField) {
14 | TypeElement typeElement = null;
15 | try {
16 | Class> type = viewField.type();
17 | String simpleName = type.getSimpleName();
18 | String canonicalName = type.getCanonicalName();
19 | } catch (MirroredTypeException mte) {
20 | DeclaredType classTypeMirror = (DeclaredType) mte.getTypeMirror();
21 | typeElement = (TypeElement) classTypeMirror.asElement();
22 |
23 | }
24 | return typeElement;
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/app/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
11 |
14 |
15 |
16 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
--------------------------------------------------------------------------------
/app/build.gradle:
--------------------------------------------------------------------------------
1 | apply plugin: 'com.android.application'
2 |
3 |
4 | android {
5 | compileSdkVersion 28
6 | buildToolsVersion '28.0.3'
7 | defaultConfig {
8 | applicationId "com.example.giodz.autorendereradaptersample"
9 | minSdkVersion 14
10 | targetSdkVersion 28
11 | versionCode 1
12 | versionName "1.0"
13 | }
14 | buildTypes {
15 | release {
16 | minifyEnabled false
17 | proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
18 | }
19 | }
20 |
21 | compileOptions {
22 | sourceCompatibility JavaVersion.VERSION_1_8
23 | targetCompatibility JavaVersion.VERSION_1_8
24 | }
25 |
26 | }
27 |
28 | dependencies {
29 | implementation fileTree(include: ['*.jar'], dir: 'libs')
30 | implementation 'com.android.support:appcompat-v7:28.0.0'
31 | implementation 'com.android.support:recyclerview-v7:28.0.0'
32 | implementation 'com.annimon:stream:1.2.1'
33 | implementation project(':autoAdapterAnnotations')
34 | implementation project(':autoAdapter')
35 | annotationProcessor project(':processor')
36 | }
37 |
--------------------------------------------------------------------------------
/autoAdapter/src/main/java/com/zuluft/autoadapter/renderables/OrderableRenderer.java:
--------------------------------------------------------------------------------
1 | package com.zuluft.autoadapter.renderables;
2 |
3 | import android.support.annotation.NonNull;
4 |
5 | @SuppressWarnings("WeakerAccess")
6 | public abstract class OrderableRenderer
7 | implements
8 | IRenderer {
9 |
10 | public final int compareOrderIds(@NonNull OrderableRenderer item) {
11 | int result = Integer.valueOf(getOrderId()).compareTo(item.getOrderId());
12 | if (result == 0) {
13 | return compareTo(item);
14 | }
15 | return result;
16 | }
17 |
18 | public final boolean hasSameOrderIds(@NonNull OrderableRenderer item) {
19 | int result = Integer.valueOf(getOrderId()).compareTo(item.getOrderId());
20 | return result == 0 && areItemsTheSame(item);
21 | }
22 |
23 | public abstract int compareTo(@NonNull OrderableRenderer item);
24 |
25 | public abstract boolean areContentsTheSame(@NonNull OrderableRenderer item);
26 |
27 | public abstract boolean areItemsTheSame(@NonNull OrderableRenderer item);
28 |
29 | public int getOrderId() {
30 | return -1;
31 | }
32 | }
33 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/item_footballer.xml:
--------------------------------------------------------------------------------
1 |
2 |
10 |
11 |
18 |
19 |
28 |
29 |
38 |
39 |
47 |
48 |
--------------------------------------------------------------------------------
/app/src/main/java/com/zuluft/giodz/autorendereradaptersample/simpleSample/renderers/FootballerRenderer.java:
--------------------------------------------------------------------------------
1 | package com.zuluft.giodz.autorendereradaptersample.simpleSample.renderers;
2 |
3 |
4 | import android.content.Context;
5 | import android.widget.TextView;
6 |
7 | import com.zuluft.autoadapter.renderables.Renderer;
8 | import com.zuluft.autoadapterannotations.Render;
9 | import com.zuluft.autoadapterannotations.ViewField;
10 | import com.zuluft.generated.FootballerRendererViewHolder;
11 | import com.zuluft.giodz.autorendereradaptersample.R;
12 | import com.zuluft.giodz.autorendereradaptersample.models.FootballerModel;
13 |
14 | @Render(layout = R.layout.item_footballer,
15 | views = {
16 | @ViewField(
17 | id = R.id.tvName,
18 | name = "tvName",
19 | type = TextView.class
20 | ),
21 | @ViewField(
22 | id = R.id.tvNumber,
23 | name = "tvNumber",
24 | type = TextView.class
25 | ),
26 | @ViewField(
27 | id = R.id.tvClub,
28 | name = "tvClub",
29 | type = TextView.class
30 | )
31 | })
32 | public class FootballerRenderer
33 | extends
34 | Renderer {
35 |
36 | public final FootballerModel footballerModel;
37 |
38 | public FootballerRenderer(final FootballerModel footballerModel) {
39 | this.footballerModel = footballerModel;
40 | }
41 |
42 | @Override
43 | public void apply(final FootballerRendererViewHolder vh) {
44 | final Context context = vh.getContext();
45 | vh.tvName.setText(footballerModel.getName());
46 | vh.tvClub.setText(footballerModel.getClub());
47 | vh.tvNumber.setText(context.getString(R.string.footballer_number_template,
48 | footballerModel.getNumber()));
49 | }
50 | }
51 |
--------------------------------------------------------------------------------
/.idea/misc.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
--------------------------------------------------------------------------------
/autoAdapter/src/main/java/com/zuluft/autoadapter/AutoAdapter.java:
--------------------------------------------------------------------------------
1 | package com.zuluft.autoadapter;
2 |
3 | import android.support.annotation.NonNull;
4 | import com.zuluft.autoadapter.factories.AutoViewHolderFactory;
5 | import com.zuluft.autoadapter.renderables.IRenderer;
6 |
7 | import java.util.ArrayList;
8 | import java.util.Arrays;
9 | import java.util.List;
10 |
11 | public class AutoAdapter
12 | extends
13 | BaseAutoAdapter {
14 |
15 | private final List mRenderers = new ArrayList<>();
16 |
17 | public AutoAdapter(final @NonNull AutoViewHolderFactory autoViewHolderFactory) {
18 | super(autoViewHolderFactory);
19 | }
20 |
21 | @Override
22 | public int getItemCount() {
23 | return mRenderers.size();
24 | }
25 |
26 | @Override
27 | public void add(@NonNull final IRenderer item) {
28 | mRenderers.add(item);
29 | }
30 |
31 | @Override
32 | public void addAll(@NonNull final IRenderer[] items) {
33 | mRenderers.addAll(Arrays.asList(items));
34 | }
35 |
36 | @Override
37 | public void addAll(@NonNull final List extends IRenderer> items) {
38 | mRenderers.addAll(items);
39 | }
40 |
41 | @Override
42 | public void remove(final int position) {
43 | mRenderers.remove(position);
44 | }
45 |
46 | @Override
47 | public void remove(@NonNull final IRenderer item) {
48 | mRenderers.remove(item);
49 | }
50 |
51 | @Override
52 | public void removeAll() {
53 | mRenderers.clear();
54 | }
55 |
56 | @Override
57 | public void update(final int position, @NonNull final IRenderer newItem) {
58 | mRenderers.remove(position);
59 | mRenderers.add(position, newItem);
60 | }
61 |
62 | @Override
63 | public int indexOf(@NonNull IRenderer item) {
64 | return mRenderers.indexOf(item);
65 | }
66 |
67 | @Override
68 | public IRenderer getItem(final int position) {
69 | return mRenderers.get(position);
70 | }
71 | }
72 |
--------------------------------------------------------------------------------
/autoAdapter/src/main/java/com/zuluft/autoadapter/renderables/AutoViewHolder.java:
--------------------------------------------------------------------------------
1 | package com.zuluft.autoadapter.renderables;
2 |
3 | import android.content.Context;
4 | import android.support.annotation.IdRes;
5 | import android.support.v7.widget.RecyclerView;
6 | import android.view.View;
7 |
8 | import com.jakewharton.rxbinding2.view.RxView;
9 |
10 | import io.reactivex.Observable;
11 | import io.reactivex.functions.Function;
12 |
13 |
14 | @SuppressWarnings({"unused", "WeakerAccess"})
15 | public class AutoViewHolder extends RecyclerView.ViewHolder {
16 |
17 |
18 | public AutoViewHolder(View itemView) {
19 | super(itemView);
20 |
21 | }
22 |
23 | public Observable getViewHolderOnClickObservable() {
24 | return RxView.clicks(itemView).map(new Function