├── .gitignore
├── app
├── .gitignore
├── build.gradle
├── proguard-rules.pro
└── src
│ └── main
│ ├── AndroidManifest.xml
│ ├── java
│ └── me
│ │ └── saket
│ │ └── rxdiffutils
│ │ ├── App.java
│ │ ├── Intents.java
│ │ ├── MainActivity.java
│ │ ├── MinistryOfMagic.java
│ │ ├── RxDiffUtil.java
│ │ ├── SimpleDiffUtilCallbacks.java
│ │ ├── Wizard.java
│ │ ├── WizardDiffCallbacks.java
│ │ └── WizardsAdapter.java
│ └── res
│ ├── drawable-v24
│ └── ic_launcher_foreground.xml
│ ├── drawable
│ └── ic_launcher_background.xml
│ ├── layout
│ ├── activity_main.xml
│ └── list_item_wizard.xml
│ ├── mipmap-anydpi-v26
│ ├── ic_launcher.xml
│ └── ic_launcher_round.xml
│ ├── mipmap-hdpi
│ ├── ic_launcher.png
│ └── ic_launcher_round.png
│ ├── mipmap-mdpi
│ ├── ic_launcher.png
│ └── ic_launcher_round.png
│ ├── mipmap-xhdpi
│ ├── ic_launcher.png
│ └── ic_launcher_round.png
│ ├── mipmap-xxhdpi
│ ├── ic_launcher.png
│ └── ic_launcher_round.png
│ ├── mipmap-xxxhdpi
│ ├── ic_launcher.png
│ └── ic_launcher_round.png
│ └── values
│ ├── colors.xml
│ ├── colors_material.xml
│ ├── strings.xml
│ └── styles.xml
├── build.gradle
├── gradle.properties
├── gradle
└── wrapper
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── gradlew
├── gradlew.bat
└── settings.gradle
/.gitignore:
--------------------------------------------------------------------------------
1 | # Built application files
2 | *.apk
3 | *.ap_
4 |
5 | # Files for the Dalvik VM
6 | *.dex
7 |
8 | # Java class files
9 | *.class
10 |
11 | # Generated files
12 | bin/
13 | gen/
14 | out/
15 | build/
16 |
17 | # Gradle files
18 | .gradle/
19 | build/
20 |
21 | # Local configuration file (sdk path, etc)
22 | local.properties
23 |
24 | # Proguard folder generated by Eclipse
25 | proguard/
26 |
27 | # Log Files
28 | *.log
29 |
30 | # Android Studio stuff
31 | .idea/
32 | .navigation/
33 | captures/
34 | *.iml
35 |
36 | ### Android Patch ###
37 | gen-external-apklibs
38 |
39 | # OS specific ignores
40 | .DS_Store
41 | *~
42 | *.swp
43 |
--------------------------------------------------------------------------------
/app/.gitignore:
--------------------------------------------------------------------------------
1 | /build
2 |
--------------------------------------------------------------------------------
/app/build.gradle:
--------------------------------------------------------------------------------
1 | apply plugin: 'com.android.application'
2 |
3 | ext.versions = [
4 | minSdk : 24,
5 | compileSdk : 26,
6 | androidTools : '26.0.2',
7 | supportLib : '27.0.2',
8 | autoValue : '1.4',
9 | autoValueMoshi: '0.4.3',
10 | retrofit : '2.2.0',
11 | rxBindings : '2.0.0',
12 | dagger : '2.10',
13 | butterKnife : '8.8.1',
14 | timber : '4.6.0',
15 | ]
16 |
17 | android {
18 | compileSdkVersion versions.compileSdk
19 |
20 | defaultConfig {
21 | applicationId "me.saket.rxdiffutils"
22 | minSdkVersion versions.minSdk
23 | targetSdkVersion versions.compileSdk
24 | versionCode 1
25 | versionName "1.0"
26 | }
27 |
28 | buildTypes {
29 | release {
30 | minifyEnabled false
31 | proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
32 | }
33 | }
34 |
35 | compileOptions {
36 | targetCompatibility 1.8
37 | sourceCompatibility 1.8
38 | }
39 | }
40 |
41 | dependencies {
42 | implementation "com.android.support:appcompat-v7:$versions.supportLib"
43 | implementation "com.android.support:recyclerview-v7:$versions.supportLib"
44 | annotationProcessor "com.google.auto.value:auto-value:$versions.autoValue"
45 | provided "com.jakewharton.auto.value:auto-value-annotations:$versions.autoValue"
46 | implementation "com.jakewharton.timber:timber:$versions.timber"
47 | implementation "com.jakewharton:butterknife:$versions.butterKnife"
48 | annotationProcessor "com.jakewharton:butterknife-compiler:$versions.butterKnife"
49 | implementation 'io.reactivex.rxjava2:rxjava:2.1.7'
50 | implementation 'io.reactivex.rxjava2:rxandroid:2.0.1'
51 | implementation "com.jakewharton.rxbinding2:rxbinding:$versions.rxBindings"
52 | implementation "com.jakewharton.rxrelay2:rxrelay:2.0.0"
53 | implementation "com.mikepenz:itemanimators:1.0.1@aar"
54 | }
55 |
--------------------------------------------------------------------------------
/app/proguard-rules.pro:
--------------------------------------------------------------------------------
1 | # Add project specific ProGuard rules here.
2 | # You can control the set of applied configuration files using the
3 | # proguardFiles setting in build.gradle.
4 | #
5 | # For more details, see
6 | # http://developer.android.com/guide/developing/tools/proguard.html
7 |
8 | # If your project uses WebView with JS, uncomment the following
9 | # and specify the fully qualified class name to the JavaScript interface
10 | # class:
11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview {
12 | # public *;
13 | #}
14 |
15 | # Uncomment this to preserve the line number information for
16 | # debugging stack traces.
17 | #-keepattributes SourceFile,LineNumberTable
18 |
19 | # If you keep the line number information, uncomment this to
20 | # hide the original source file name.
21 | #-renamesourcefileattribute SourceFile
22 |
--------------------------------------------------------------------------------
/app/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
6 |
7 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
--------------------------------------------------------------------------------
/app/src/main/java/me/saket/rxdiffutils/App.java:
--------------------------------------------------------------------------------
1 | package me.saket.rxdiffutils;
2 |
3 | import android.app.Application;
4 | import timber.log.Timber;
5 | import timber.log.Timber.DebugTree;
6 |
7 | public class App extends Application {
8 |
9 | @Override
10 | public void onCreate() {
11 | super.onCreate();
12 | Timber.plant(new DebugTree());
13 | }
14 | }
15 |
--------------------------------------------------------------------------------
/app/src/main/java/me/saket/rxdiffutils/Intents.java:
--------------------------------------------------------------------------------
1 | package me.saket.rxdiffutils;
2 |
3 | import android.content.Intent;
4 | import android.net.Uri;
5 |
6 | public class Intents {
7 |
8 | public static Intent forGoogleSearch(String query) {
9 | return new Intent(Intent.ACTION_VIEW).setData(Uri.parse("https://www.google.com/search?q=" + query));
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/app/src/main/java/me/saket/rxdiffutils/MainActivity.java:
--------------------------------------------------------------------------------
1 | package me.saket.rxdiffutils;
2 |
3 | import static io.reactivex.android.schedulers.AndroidSchedulers.mainThread;
4 | import static io.reactivex.schedulers.Schedulers.io;
5 |
6 | import android.os.Bundle;
7 | import android.support.v7.app.AppCompatActivity;
8 | import android.support.v7.widget.LinearLayoutManager;
9 | import android.support.v7.widget.RecyclerView;
10 | import android.widget.EditText;
11 |
12 | import com.jakewharton.rxbinding2.internal.Notification;
13 | import com.jakewharton.rxbinding2.widget.RxTextView;
14 | import com.jakewharton.rxrelay2.PublishRelay;
15 | import com.jakewharton.rxrelay2.Relay;
16 | import com.mikepenz.itemanimators.SlideDownAlphaAnimator;
17 |
18 | import java.util.List;
19 |
20 | import butterknife.BindView;
21 | import butterknife.ButterKnife;
22 | import io.reactivex.Observable;
23 |
24 | public class MainActivity extends AppCompatActivity {
25 |
26 | @BindView(R.id.searchquery) EditText searchQueryField;
27 | @BindView(R.id.recyclerview) RecyclerView recyclerView;
28 |
29 | private final Relay