From bb4d46265971c8a4b17719a30241b611efd645b1 Mon Sep 17 00:00:00 2001 From: nomizodiac Date: Tue, 26 Jan 2016 17:05:08 +0500 Subject: [PATCH] Initial commit --- .gitignore | 7 + .idea/.name | 1 + .idea/compiler.xml | 22 +++ .idea/copyright/profiles_settings.xml | 3 + .idea/dictionaries/NomBhatti.xml | 3 + .idea/encodings.xml | 6 + .idea/gradle.xml | 18 ++ .idea/misc.xml | 46 +++++ .idea/modules.xml | 9 + .idea/runConfigurations.xml | 12 ++ .idea/vcs.xml | 6 + RxAndroidDemo.iml | 19 ++ app/.gitignore | 1 + app/app.iml | 124 +++++++++++++ app/build.gradle | 38 ++++ app/proguard-rules.pro | 17 ++ .../rxandroiddemo/ApplicationTest.java | 13 ++ app/src/main/AndroidManifest.xml | 24 +++ .../rxandroiddemo/activity/MainActivity.java | 75 ++++++++ .../rxandroiddemo/adapter/CardAdapter.java | 66 +++++++ .../approquo/rxandroiddemo/model/Data.java | 17 ++ .../approquo/rxandroiddemo/model/Github.java | 19 ++ .../rxandroiddemo/service/GithubService.java | 13 ++ .../rxandroiddemo/service/ServiceFactory.java | 26 +++ app/src/main/res/layout/activity_main.xml | 58 +++++++ app/src/main/res/layout/recycler_view.xml | 63 +++++++ app/src/main/res/menu/menu_main.xml | 6 + app/src/main/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 3418 bytes app/src/main/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 2206 bytes app/src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 4842 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 7718 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 10486 bytes app/src/main/res/values-v21/styles.xml | 8 + app/src/main/res/values-w820dp/dimens.xml | 6 + app/src/main/res/values/colors.xml | 6 + app/src/main/res/values/dimens.xml | 6 + app/src/main/res/values/strings.xml | 4 + app/src/main/res/values/styles.xml | 17 ++ .../rxandroiddemo/ExampleUnitTest.java | 15 ++ build.gradle | 23 +++ gradle.properties | 18 ++ gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 49896 bytes gradle/wrapper/gradle-wrapper.properties | 6 + gradlew | 164 ++++++++++++++++++ gradlew.bat | 90 ++++++++++ settings.gradle | 1 + 46 files changed, 1076 insertions(+) create mode 100644 .gitignore create mode 100644 .idea/.name create mode 100644 .idea/compiler.xml create mode 100644 .idea/copyright/profiles_settings.xml create mode 100644 .idea/dictionaries/NomBhatti.xml create mode 100644 .idea/encodings.xml create mode 100644 .idea/gradle.xml create mode 100644 .idea/misc.xml create mode 100644 .idea/modules.xml create mode 100644 .idea/runConfigurations.xml create mode 100644 .idea/vcs.xml create mode 100644 RxAndroidDemo.iml create mode 100644 app/.gitignore create mode 100644 app/app.iml create mode 100644 app/build.gradle create mode 100644 app/proguard-rules.pro create mode 100644 app/src/androidTest/java/com/approquo/rxandroiddemo/ApplicationTest.java create mode 100644 app/src/main/AndroidManifest.xml create mode 100644 app/src/main/java/com/approquo/rxandroiddemo/activity/MainActivity.java create mode 100644 app/src/main/java/com/approquo/rxandroiddemo/adapter/CardAdapter.java create mode 100644 app/src/main/java/com/approquo/rxandroiddemo/model/Data.java create mode 100644 app/src/main/java/com/approquo/rxandroiddemo/model/Github.java create mode 100644 app/src/main/java/com/approquo/rxandroiddemo/service/GithubService.java create mode 100644 app/src/main/java/com/approquo/rxandroiddemo/service/ServiceFactory.java create mode 100644 app/src/main/res/layout/activity_main.xml create mode 100644 app/src/main/res/layout/recycler_view.xml create mode 100644 app/src/main/res/menu/menu_main.xml create mode 100644 app/src/main/res/mipmap-hdpi/ic_launcher.png create mode 100644 app/src/main/res/mipmap-mdpi/ic_launcher.png create mode 100644 app/src/main/res/mipmap-xhdpi/ic_launcher.png create mode 100644 app/src/main/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 app/src/main/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 app/src/main/res/values-v21/styles.xml create mode 100644 app/src/main/res/values-w820dp/dimens.xml create mode 100644 app/src/main/res/values/colors.xml create mode 100644 app/src/main/res/values/dimens.xml create mode 100644 app/src/main/res/values/strings.xml create mode 100644 app/src/main/res/values/styles.xml create mode 100644 app/src/test/java/com/approquo/rxandroiddemo/ExampleUnitTest.java create mode 100644 build.gradle create mode 100644 gradle.properties create mode 100644 gradle/wrapper/gradle-wrapper.jar create mode 100644 gradle/wrapper/gradle-wrapper.properties create mode 100644 gradlew create mode 100644 gradlew.bat create mode 100644 settings.gradle diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..9c4de58 --- /dev/null +++ b/.gitignore @@ -0,0 +1,7 @@ +.gradle +/local.properties +/.idea/workspace.xml +/.idea/libraries +.DS_Store +/build +/captures diff --git a/.idea/.name b/.idea/.name new file mode 100644 index 0000000..1dba3c0 --- /dev/null +++ b/.idea/.name @@ -0,0 +1 @@ +RxAndroidDemo \ No newline at end of file diff --git a/.idea/compiler.xml b/.idea/compiler.xml new file mode 100644 index 0000000..96cc43e --- /dev/null +++ b/.idea/compiler.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/copyright/profiles_settings.xml b/.idea/copyright/profiles_settings.xml new file mode 100644 index 0000000..e7bedf3 --- /dev/null +++ b/.idea/copyright/profiles_settings.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/.idea/dictionaries/NomBhatti.xml b/.idea/dictionaries/NomBhatti.xml new file mode 100644 index 0000000..e21b243 --- /dev/null +++ b/.idea/dictionaries/NomBhatti.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/.idea/encodings.xml b/.idea/encodings.xml new file mode 100644 index 0000000..97626ba --- /dev/null +++ b/.idea/encodings.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.idea/gradle.xml b/.idea/gradle.xml new file mode 100644 index 0000000..8d2df47 --- /dev/null +++ b/.idea/gradle.xml @@ -0,0 +1,18 @@ + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..5d19981 --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..cffc8fc --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/.idea/runConfigurations.xml b/.idea/runConfigurations.xml new file mode 100644 index 0000000..7f68460 --- /dev/null +++ b/.idea/runConfigurations.xml @@ -0,0 +1,12 @@ + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..6564d52 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/RxAndroidDemo.iml b/RxAndroidDemo.iml new file mode 100644 index 0000000..3be4c15 --- /dev/null +++ b/RxAndroidDemo.iml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/.gitignore b/app/.gitignore new file mode 100644 index 0000000..796b96d --- /dev/null +++ b/app/.gitignore @@ -0,0 +1 @@ +/build diff --git a/app/app.iml b/app/app.iml new file mode 100644 index 0000000..b9df53d --- /dev/null +++ b/app/app.iml @@ -0,0 +1,124 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle new file mode 100644 index 0000000..3a7752d --- /dev/null +++ b/app/build.gradle @@ -0,0 +1,38 @@ +apply plugin: 'com.android.application' + +android { + compileSdkVersion 23 + buildToolsVersion "23.0.2" + + defaultConfig { + applicationId "com.approquo.rxandroiddemo" + minSdkVersion 15 + targetSdkVersion 23 + versionCode 1 + versionName "1.0" + } + buildTypes { + release { + minifyEnabled false + proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' + } + } + dataBinding { + enabled = true + } +} + +dependencies { + compile fileTree(dir: 'libs', include: ['*.jar']) + testCompile 'junit:junit:4.12' + compile 'com.android.support:appcompat-v7:23.1.1' + compile 'com.android.support:design:23.1.1' + + compile 'com.android.support:cardview-v7:23.1.1' + compile 'com.android.support:recyclerview-v7:23.1.1' + compile 'io.reactivex:rxandroid:1.1.0' + compile 'io.reactivex:rxjava:1.1.0' + compile 'com.squareup.retrofit:retrofit:2.0.0-beta2' + compile 'com.squareup.retrofit:converter-gson:2.0.0-beta2' + compile 'com.squareup.retrofit:adapter-rxjava:2.0.0-beta2' +} diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro new file mode 100644 index 0000000..764d5ef --- /dev/null +++ b/app/proguard-rules.pro @@ -0,0 +1,17 @@ +# Add project specific ProGuard rules here. +# By default, the flags in this file are appended to flags specified +# in C:\Users\NomBhatti\AppData\Local\Android\sdk/tools/proguard/proguard-android.txt +# You can edit the include path and order by changing the proguardFiles +# directive in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# Add any project specific keep options here: + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} diff --git a/app/src/androidTest/java/com/approquo/rxandroiddemo/ApplicationTest.java b/app/src/androidTest/java/com/approquo/rxandroiddemo/ApplicationTest.java new file mode 100644 index 0000000..df6ea66 --- /dev/null +++ b/app/src/androidTest/java/com/approquo/rxandroiddemo/ApplicationTest.java @@ -0,0 +1,13 @@ +package com.approquo.rxandroiddemo; + +import android.app.Application; +import android.test.ApplicationTestCase; + +/** + * Testing Fundamentals + */ +public class ApplicationTest extends ApplicationTestCase { + public ApplicationTest() { + super(Application.class); + } +} \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml new file mode 100644 index 0000000..7d3a623 --- /dev/null +++ b/app/src/main/AndroidManifest.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + diff --git a/app/src/main/java/com/approquo/rxandroiddemo/activity/MainActivity.java b/app/src/main/java/com/approquo/rxandroiddemo/activity/MainActivity.java new file mode 100644 index 0000000..93b4c0a --- /dev/null +++ b/app/src/main/java/com/approquo/rxandroiddemo/activity/MainActivity.java @@ -0,0 +1,75 @@ +package com.approquo.rxandroiddemo.activity; + +import android.app.Activity; +import android.databinding.DataBindingUtil; +import android.os.Bundle; +import android.support.v7.widget.LinearLayoutManager; +import android.support.v7.widget.RecyclerView; +import android.util.Log; +import android.view.View; +import com.approquo.rxandroiddemo.model.Data; +import com.approquo.rxandroiddemo.R; +import com.approquo.rxandroiddemo.adapter.CardAdapter; +import com.approquo.rxandroiddemo.databinding.ActivityMainBinding; +import com.approquo.rxandroiddemo.model.Github; +import com.approquo.rxandroiddemo.service.GithubService; +import com.approquo.rxandroiddemo.service.ServiceFactory; + +import rx.Subscriber; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + + +public class MainActivity extends Activity { + + CardAdapter mCardAdapter; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + ActivityMainBinding binding = DataBindingUtil.setContentView(this, R.layout.activity_main); + OnClickHandlers onClickHandlers = new OnClickHandlers(); + binding.setHandlers(onClickHandlers); + RecyclerView mRecyclerView = (RecyclerView) findViewById(R.id.recycler_view); + mRecyclerView.setHasFixedSize(true); + mRecyclerView.setLayoutManager(new LinearLayoutManager(this)); + mCardAdapter = new CardAdapter(); + mRecyclerView.setAdapter(mCardAdapter); + } + + + public class OnClickHandlers + { + public void onClickClear(View view) { + mCardAdapter.clear(); + } + + public void onClickFetch(View view) + { + GithubService service = ServiceFactory.createRetrofitService(GithubService.class, GithubService.SERVICE_ENDPOINT); + for(String login : Data.githubList) + { + service.getUser(login) + .subscribeOn(Schedulers.newThread()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(new Subscriber() { + @Override + public final void onCompleted() { + // do nothing + } + + @Override + public final void onError(Throwable e) { + Log.e("GithubDemo", e.getMessage()); + } + + @Override + public final void onNext(Github response) { + mCardAdapter.addData(response); + } + }); + } + } + } +} diff --git a/app/src/main/java/com/approquo/rxandroiddemo/adapter/CardAdapter.java b/app/src/main/java/com/approquo/rxandroiddemo/adapter/CardAdapter.java new file mode 100644 index 0000000..03e1231 --- /dev/null +++ b/app/src/main/java/com/approquo/rxandroiddemo/adapter/CardAdapter.java @@ -0,0 +1,66 @@ +package com.approquo.rxandroiddemo.adapter; + +import android.databinding.DataBindingUtil; +import android.databinding.ViewDataBinding; +import android.support.v7.widget.RecyclerView; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import com.approquo.rxandroiddemo.BR; +import com.approquo.rxandroiddemo.R; +import com.approquo.rxandroiddemo.model.Github; +import java.util.ArrayList; +import java.util.List; + +public class CardAdapter extends RecyclerView.Adapter { + + List mItems; + + public CardAdapter() { + super(); + mItems = new ArrayList<>(); + } + + public void addData(Github github) { + mItems.add(github); + notifyDataSetChanged(); + } + + public void clear() { + mItems.clear(); + notifyDataSetChanged(); + } + + @Override + public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) { + View v = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.recycler_view, viewGroup, false); + ViewHolder viewHolder = new ViewHolder(v); + return viewHolder; + } + + @Override + public void onBindViewHolder(ViewHolder viewHolder, int i) { + Github github = mItems.get(i); + viewHolder.getBinding().setVariable(BR.gitHub, github); + viewHolder.getBinding().executePendingBindings(); + } + + @Override + public int getItemCount() { + return mItems.size(); + } + + class ViewHolder extends RecyclerView.ViewHolder { + + private ViewDataBinding binding; + + public ViewHolder(View itemView) { + super(itemView); + binding = DataBindingUtil.bind(itemView); + } + + public ViewDataBinding getBinding() { + return binding; + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/approquo/rxandroiddemo/model/Data.java b/app/src/main/java/com/approquo/rxandroiddemo/model/Data.java new file mode 100644 index 0000000..d25f347 --- /dev/null +++ b/app/src/main/java/com/approquo/rxandroiddemo/model/Data.java @@ -0,0 +1,17 @@ +package com.approquo.rxandroiddemo.model; + +import java.util.ArrayList; +import java.util.List; + +public class Data { + public static List githubList = new ArrayList() {{ + add("linkedin"); + add("tumblr"); + add("square"); + add("google"); + add("stripe"); + add("angular"); + add("facebook"); + add("rails"); + }}; +} diff --git a/app/src/main/java/com/approquo/rxandroiddemo/model/Github.java b/app/src/main/java/com/approquo/rxandroiddemo/model/Github.java new file mode 100644 index 0000000..2518889 --- /dev/null +++ b/app/src/main/java/com/approquo/rxandroiddemo/model/Github.java @@ -0,0 +1,19 @@ +package com.approquo.rxandroiddemo.model; + +public class Github { + private String login; + private String blog; + private int public_repos; + + public String getLogin() { + return login; + } + + public String getBlog() { + return blog; + } + + public int getPublicRepos() { + return public_repos; + } +} diff --git a/app/src/main/java/com/approquo/rxandroiddemo/service/GithubService.java b/app/src/main/java/com/approquo/rxandroiddemo/service/GithubService.java new file mode 100644 index 0000000..5073634 --- /dev/null +++ b/app/src/main/java/com/approquo/rxandroiddemo/service/GithubService.java @@ -0,0 +1,13 @@ +package com.approquo.rxandroiddemo.service; + +import com.approquo.rxandroiddemo.model.Github; +import retrofit.http.GET; +import retrofit.http.Path; +import rx.Observable; + +public interface GithubService { + String SERVICE_ENDPOINT = "https://api.github.com"; + + @GET("/users/{login}") + Observable getUser(@Path("login") String login); +} diff --git a/app/src/main/java/com/approquo/rxandroiddemo/service/ServiceFactory.java b/app/src/main/java/com/approquo/rxandroiddemo/service/ServiceFactory.java new file mode 100644 index 0000000..2e27079 --- /dev/null +++ b/app/src/main/java/com/approquo/rxandroiddemo/service/ServiceFactory.java @@ -0,0 +1,26 @@ +package com.approquo.rxandroiddemo.service; + + +import retrofit.GsonConverterFactory; +import retrofit.Retrofit; +import retrofit.RxJavaCallAdapterFactory; + +public class ServiceFactory { + + /** + * Creates a retrofit service from an arbitrary class (clazz) + * @param clazz Java interface of the retrofit service + * @param endPoint REST endpoint url + * @return retrofit service with defined endpoint + */ + public static T createRetrofitService(final Class clazz, final String endPoint) { + + Retrofit retrofit = new Retrofit.Builder() + .baseUrl(endPoint) + .addCallAdapterFactory(RxJavaCallAdapterFactory.create()) + .addConverterFactory(GsonConverterFactory.create()) + .build(); + T service = retrofit.create(clazz); + return service; + } +} diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml new file mode 100644 index 0000000..29e424a --- /dev/null +++ b/app/src/main/res/layout/activity_main.xml @@ -0,0 +1,58 @@ + + + + + + + + + + + +