Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Gradle update #66

Open
wants to merge 28 commits into
base: development
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
28 commits
Select commit Hold shift + click to select a range
ff6c0d5
Correct Kotlin spell
amitshekhariitbhu Apr 6, 2018
65fbe8f
BaseViewModel holds hard reference to Navigators which can lead to le…
legalimpurity May 19, 2018
432ffbc
Merge pull request #23 from legalimpurity/master
amitshekhariitbhu May 22, 2018
2c2371a
Update build platform
AL4AL Dec 17, 2018
560a7c5
Merge pull request #41 from professorSajjad/master
amitshekhariitbhu Dec 17, 2018
efd8fa4
Allow cleartext communication with mocky.io
vy8 Jan 8, 2019
f16a4bd
Merge pull request #42 from vytautasm/master
amitshekhariitbhu Jan 8, 2019
67658e7
Replace constraint layout with linear layout in about fragment
salmanseifian Feb 2, 2019
386ca35
Merge pull request #45 from seifian/feat/constraint-layout-as-about-p…
amitshekhariitbhu Feb 2, 2019
5225659
Add view model factory class
jyotid Feb 22, 2019
50326ec
Remove unwanted imports
jyotid Feb 22, 2019
acc8288
Merge pull request #48 from MindorksOpenSource/common_ViewModelFactory
amitshekhariitbhu Feb 22, 2019
ae41276
Add constructor injection for VMFactory
jyotid Feb 22, 2019
dfb5a89
Merge pull request #49 from MindorksOpenSource/common_ViewModelFactory
amitshekhariitbhu Feb 23, 2019
d3bb9c6
Prevent LiveData exposure to UI. Binding Livedata to recyclerview
Vignesh150493 Mar 1, 2019
186c446
Merge pull request #50 from Vignesh150493/master
amitshekhariitbhu Mar 1, 2019
b7c91c9
Moving mapping of open source response to background. More minor code…
Vignesh150493 Mar 2, 2019
1ec0678
Merge pull request #51 from Vignesh150493/master
amitshekhariitbhu Mar 2, 2019
b0b8b0d
AndroidX :smile:
Vignesh150493 Mar 5, 2019
371fe0a
Merge pull request #52 from Vignesh150493/master
amitshekhariitbhu Mar 6, 2019
86606f0
Make ViewModelProviderFactory class Singleton
jyotid Mar 8, 2019
116237f
Remove unwanted VM injection from OpenSourceFragment Module and BlogF…
jyotid Mar 11, 2019
142cf02
Remove unwanted factory injection
jyotid Mar 11, 2019
a013227
Merge pull request #55 from MindorksOpenSource/remove_unwanted_vminje…
amitshekhariitbhu Mar 11, 2019
cbd8d60
Merge pull request #56 from MindorksOpenSource/singleton_factory
amitshekhariitbhu Mar 11, 2019
bac04f3
Supporting RxJava for Room
Subuday Aug 7, 2019
595acd0
Merge pull request #64 from Subuday/master
amitshekhariitbhu Aug 7, 2019
3054c29
Gradle version Updated -> in Gradle 5.x setDestination(Object file) h…
mudassarwurfel Sep 23, 2019
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ This repository contains a detailed sample app that implements MVVM architecture
7. [Android Tinder Swipe View Example](https://blog.mindorks.com/android-tinder-swipe-view-example-3eca9b0d4794#.u7i7jbbvy)
8. [Debugging Android Databases And Shared Preferences In The Easiest Way](https://blog.mindorks.com/debugging-android-databases-and-shared-preferences-in-the-easiest-way-e5f705dfc06b#.pxw0hvnws)

### Looking for Kotin MVP Architecture - [Check here](https://github.com/MindorksOpenSource/android-kotlin-mvp-architecture)
### Looking for Kotlin MVP Architecture - [Check here](https://github.com/MindorksOpenSource/android-kotlin-mvp-architecture)

### Looking for MVP Architecture - [Check here](https://github.com/MindorksOpenSource/android-mvp-architecture)

Expand Down
28 changes: 14 additions & 14 deletions app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ android {
targetSdkVersion rootProject.ext.targetSdkVersion
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
vectorDrawables.useSupportLibrary = true
}
buildTypes {
Expand Down Expand Up @@ -54,19 +54,20 @@ dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])

// android support libraries
implementation "com.android.support:appcompat-v7:$rootProject.supportLibraryVersion"
implementation "com.android.support:recyclerview-v7:$rootProject.supportLibraryVersion"
implementation "com.android.support:cardview-v7:$rootProject.supportLibraryVersion"
implementation "com.android.support:design:$rootProject.supportLibraryVersion"
implementation "com.android.support:support-vector-drawable:$rootProject.supportLibraryVersion"
implementation "com.android.support:animated-vector-drawable:$rootProject.supportLibraryVersion"
implementation "androidx.appcompat:appcompat:$rootProject.supportLibraryVersion"
implementation "androidx.recyclerview:recyclerview:$rootProject.recyclerViewVersion"
implementation "androidx.cardview:cardview:$rootProject.cardViewVersion"
implementation "com.google.android.material:material:$rootProject.materialVersion"
implementation "androidx.vectordrawable:vectordrawable:$rootProject.vectorDrawableVersion"
implementation "androidx.vectordrawable:vectordrawable-animated:$rootProject.animatedVectorDrawableVersion"
implementation "androidx.constraintlayout:constraintlayout:$rootProject.constraintLayoutVersion"

// network
implementation "com.amitshekhar.android:rx2-android-networking:$rootProject.rx2FastAndroidNetworking"

// database
implementation "android.arch.persistence.room:rxjava2:$rootProject.roomDatabase"
annotationProcessor "android.arch.persistence.room:compiler:$rootProject.roomDatabase"
implementation "androidx.room:room-rxjava2:$rootProject.roomDatabaseVersion"
annotationProcessor "androidx.room:room-compiler:$rootProject.roomDatabaseVersion"

// font
implementation "uk.co.chrisjenx:calligraphy:$rootProject.calligraphyVersion"
Expand Down Expand Up @@ -102,17 +103,16 @@ dependencies {
testAnnotationProcessor "com.google.dagger:dagger-compiler:$rootProject.dagger2Version"

// UI Testing
androidTestImplementation "com.android.support.test.espresso:espresso-core:$rootProject.espressoVersion"
androidTestImplementation "com.android.support.test.espresso:espresso-intents:$rootProject.espressoVersion"
androidTestImplementation "androidx.test.espresso:espresso-core:$rootProject.espressoVersion"
androidTestImplementation "androidx.test.espresso:espresso-intents:$rootProject.espressoVersion"
androidTestImplementation "org.mockito:mockito-core:$rootProject.mockitoVersion"
androidTestAnnotationProcessor "com.google.dagger:dagger-compiler:$rootProject.dagger2Version"

// view model
implementation "android.arch.lifecycle:extensions:$rootProject.lifecycle"
annotationProcessor "android.arch.lifecycle:compiler:$rootProject.lifecycle"
implementation "androidx.lifecycle:lifecycle-extensions:$rootProject.lifecycleVersion"
annotationProcessor "androidx.lifecycle:lifecycle-compiler:$rootProject.lifecycleVersion"
}

configurations.all {
resolutionStrategy.force "com.android.support:support-annotations:$supportLibraryVersion"
resolutionStrategy.force 'com.google.code.findbugs:jsr305:1.3.9'
}
Original file line number Diff line number Diff line change
Expand Up @@ -16,21 +16,19 @@

package com.mindorks.framework.mvvm.ui.login;

import android.support.test.rule.ActivityTestRule;
import android.support.test.runner.AndroidJUnit4;

import static androidx.test.espresso.Espresso.onView;
import static androidx.test.espresso.assertion.ViewAssertions.matches;
import static androidx.test.espresso.matcher.ViewMatchers.isDisplayed;
import static androidx.test.espresso.matcher.ViewMatchers.withId;
import static androidx.test.espresso.matcher.ViewMatchers.withText;

import androidx.test.rule.ActivityTestRule;
import androidx.test.ext.junit.runners.AndroidJUnit4;
import com.mindorks.framework.mvvm.R;

import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;

import static android.support.test.espresso.Espresso.onView;
import static android.support.test.espresso.assertion.ViewAssertions.matches;
import static android.support.test.espresso.matcher.ViewMatchers.isDisplayed;
import static android.support.test.espresso.matcher.ViewMatchers.withId;
import static android.support.test.espresso.matcher.ViewMatchers.withText;

/**
* Created by amitshekhar on 11/07/17.
*/
Expand Down
7 changes: 3 additions & 4 deletions app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:networkSecurityConfig="@xml/network_security_config"
android:theme="@style/AppTheme">

<activity android:name=".ui.splash.SplashActivity">
Expand All @@ -39,8 +40,7 @@

<activity
android:name=".ui.login.LoginActivity"
android:launchMode="singleTop"
android:screenOrientation="portrait" />
android:launchMode="singleTop" />

<activity
android:name=".ui.main.MainActivity"
Expand All @@ -49,8 +49,7 @@
<activity
android:name="com.mindorks.framework.mvvm.ui.feed.FeedActivity"
android:launchMode="singleTop"
android:parentActivityName=".ui.main.MainActivity"
android:screenOrientation="portrait">
android:parentActivityName=".ui.main.MainActivity">

<!-- Parent activity meta-data to support 4.0 and lower -->
<meta-data
Expand Down
5 changes: 1 addition & 4 deletions app/src/main/java/com/mindorks/framework/mvvm/MvvmApp.java
Original file line number Diff line number Diff line change
Expand Up @@ -18,16 +18,13 @@

import android.app.Activity;
import android.app.Application;

import com.androidnetworking.AndroidNetworking;
import com.androidnetworking.interceptors.HttpLoggingInterceptor;
import com.mindorks.framework.mvvm.di.component.DaggerAppComponent;
import com.mindorks.framework.mvvm.utils.AppLogger;

import javax.inject.Inject;

import dagger.android.DispatchingAndroidInjector;
import dagger.android.HasActivityInjector;
import javax.inject.Inject;
import uk.co.chrisjenx.calligraphy.CalligraphyConfig;

/**
Expand Down
Original file line number Diff line number Diff line change
@@ -1,27 +1,68 @@
package com.mindorks.framework.mvvm;

import android.arch.lifecycle.ViewModel;
import android.arch.lifecycle.ViewModelProvider;
import androidx.lifecycle.ViewModel;
import androidx.lifecycle.ViewModelProvider;
import com.mindorks.framework.mvvm.data.DataManager;
import com.mindorks.framework.mvvm.ui.about.AboutViewModel;
import com.mindorks.framework.mvvm.ui.feed.FeedViewModel;
import com.mindorks.framework.mvvm.ui.feed.blogs.BlogViewModel;
import com.mindorks.framework.mvvm.ui.feed.opensource.OpenSourceViewModel;
import com.mindorks.framework.mvvm.ui.login.LoginViewModel;
import com.mindorks.framework.mvvm.ui.main.MainViewModel;
import com.mindorks.framework.mvvm.ui.main.rating.RateUsViewModel;
import com.mindorks.framework.mvvm.ui.splash.SplashViewModel;
import com.mindorks.framework.mvvm.utils.rx.SchedulerProvider;
import javax.inject.Inject;
import javax.inject.Singleton;

/**
* Created by RV on 19/07/17.
* <p>
* A provider factory that persists ViewModels {@link ViewModel}.
* Used if the view model has a parameterized constructor.
* Created by jyotidubey on 22/02/19.
*/
public class ViewModelProviderFactory<V> implements ViewModelProvider.Factory {
@Singleton
public class ViewModelProviderFactory extends ViewModelProvider.NewInstanceFactory {

private V viewModel;
private final DataManager dataManager;
private final SchedulerProvider schedulerProvider;

@Inject
public ViewModelProviderFactory(DataManager dataManager,
SchedulerProvider schedulerProvider) {
this.dataManager = dataManager;
this.schedulerProvider = schedulerProvider;
}

public ViewModelProviderFactory(V viewModel) {
this.viewModel = viewModel;
}

@Override
public <T extends ViewModel> T create(Class<T> modelClass) {
if (modelClass.isAssignableFrom(viewModel.getClass())) {
return (T) viewModel;
}
throw new IllegalArgumentException("Unknown class name");
@Override
public <T extends ViewModel> T create(Class<T> modelClass) {
if (modelClass.isAssignableFrom(AboutViewModel.class)) {
//noinspection unchecked
return (T) new AboutViewModel(dataManager,schedulerProvider);
} else if (modelClass.isAssignableFrom(FeedViewModel.class)) {
//noinspection unchecked
return (T) new FeedViewModel(dataManager,schedulerProvider);
} else if (modelClass.isAssignableFrom(LoginViewModel.class)) {
//noinspection unchecked
return (T) new LoginViewModel(dataManager,schedulerProvider);
} else if (modelClass.isAssignableFrom(MainViewModel.class)) {
//noinspection unchecked
return (T) new MainViewModel(dataManager,schedulerProvider);
}
else if (modelClass.isAssignableFrom(BlogViewModel.class)) {
//noinspection unchecked
return (T) new BlogViewModel(dataManager,schedulerProvider);
}
else if (modelClass.isAssignableFrom(RateUsViewModel.class)) {
//noinspection unchecked
return (T) new RateUsViewModel(dataManager,schedulerProvider);
}
else if (modelClass.isAssignableFrom(OpenSourceViewModel.class)) {
//noinspection unchecked
return (T) new OpenSourceViewModel(dataManager,schedulerProvider);
}
else if (modelClass.isAssignableFrom(SplashViewModel.class)) {
//noinspection unchecked
return (T) new SplashViewModel(dataManager,schedulerProvider);
}
}
throw new IllegalArgumentException("Unknown ViewModel class: " + modelClass.getName());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
package com.mindorks.framework.mvvm.data;

import android.content.Context;
import android.util.Log;

import com.google.gson.Gson;
import com.google.gson.internal.$Gson$Types;
Expand All @@ -36,22 +37,21 @@
import com.mindorks.framework.mvvm.data.remote.ApiHelper;
import com.mindorks.framework.mvvm.utils.AppConstants;
import com.mindorks.framework.mvvm.utils.CommonUtils;

import io.reactivex.Observable;
import io.reactivex.Single;
import java.lang.reflect.Type;
import java.util.List;

import javax.inject.Inject;
import javax.inject.Singleton;

import io.reactivex.Observable;
import io.reactivex.Single;

/**
* Created by amitshekhar on 07/07/17.
*/
@Singleton
public class AppDataManager implements DataManager {

private static final String TAG = "AppDataManager";

private final ApiHelper mApiHelper;

private final Context mContext;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,10 +20,8 @@
import com.mindorks.framework.mvvm.data.local.prefs.PreferencesHelper;
import com.mindorks.framework.mvvm.data.model.others.QuestionCardData;
import com.mindorks.framework.mvvm.data.remote.ApiHelper;

import java.util.List;

import io.reactivex.Observable;
import java.util.List;

/**
* Created by amitshekhar on 07/07/17.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,9 +16,8 @@

package com.mindorks.framework.mvvm.data.local.db;

import android.arch.persistence.room.Database;
import android.arch.persistence.room.RoomDatabase;

import androidx.room.Database;
import androidx.room.RoomDatabase;
import com.mindorks.framework.mvvm.data.local.db.dao.OptionDao;
import com.mindorks.framework.mvvm.data.local.db.dao.QuestionDao;
import com.mindorks.framework.mvvm.data.local.db.dao.UserDao;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,15 +19,12 @@
import com.mindorks.framework.mvvm.data.model.db.Option;
import com.mindorks.framework.mvvm.data.model.db.Question;
import com.mindorks.framework.mvvm.data.model.db.User;

import io.reactivex.Observable;
import java.util.List;
import java.util.concurrent.Callable;

import javax.inject.Inject;
import javax.inject.Singleton;

import io.reactivex.Observable;

/**
* Created by amitshekhar on 07/07/17.
*/
Expand All @@ -44,12 +41,8 @@ public AppDbHelper(AppDatabase appDatabase) {

@Override
public Observable<List<Question>> getAllQuestions() {
return Observable.fromCallable(new Callable<List<Question>>() {
@Override
public List<Question> call() throws Exception {
return mAppDatabase.questionDao().loadAll();
}
});
return mAppDatabase.questionDao().loadAll()
.toObservable();
}

@Override
Expand All @@ -64,12 +57,8 @@ public List<User> call() throws Exception {

@Override
public Observable<List<Option>> getOptionsForQuestionId(final Long questionId) {
return Observable.fromCallable(new Callable<List<Option>>() {
@Override
public List<Option> call() throws Exception {
return mAppDatabase.optionDao().loadAllByQuestionId(questionId);
}
});
return mAppDatabase.optionDao().loadAllByQuestionId(questionId)
.toObservable();
}

@Override
Expand All @@ -85,22 +74,15 @@ public Boolean call() throws Exception {

@Override
public Observable<Boolean> isOptionEmpty() {
return Observable.fromCallable(new Callable<Boolean>() {
@Override
public Boolean call() throws Exception {
return mAppDatabase.optionDao().loadAll().isEmpty();
}
});
return mAppDatabase.optionDao().loadAll()
.flatMapObservable(options -> Observable.just(options.isEmpty()));
}

@Override
public Observable<Boolean> isQuestionEmpty() {
return Observable.fromCallable(new Callable<Boolean>() {
@Override
public Boolean call() throws Exception {
return mAppDatabase.questionDao().loadAll().isEmpty();
}
});
return mAppDatabase.questionDao().loadAll()
.flatMapObservable(questions -> Observable.just(questions.isEmpty()));

}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,10 +19,8 @@
import com.mindorks.framework.mvvm.data.model.db.Option;
import com.mindorks.framework.mvvm.data.model.db.Question;
import com.mindorks.framework.mvvm.data.model.db.User;

import java.util.List;

import io.reactivex.Observable;
import java.util.List;

/**
* Created by amitshekhar on 07/07/17.
Expand Down
Loading