Skip to content

Commit

Permalink
Add Repository Pattern: Room, LiveData, ViewModel, MainActivity
Browse files Browse the repository at this point in the history
  • Loading branch information
devansh ramen authored and devansh ramen committed Dec 17, 2017
1 parent 5218d3e commit dff0e4d
Show file tree
Hide file tree
Showing 21 changed files with 291 additions and 137 deletions.
2 changes: 0 additions & 2 deletions .idea/modules.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

19 changes: 15 additions & 4 deletions app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,10 @@ android {
}
}

configurations.all {
resolutionStrategy.force 'com.google.code.findbugs:jsr305:1.3.9'
}

dataBinding {
enabled = true
}
Expand All @@ -40,7 +44,6 @@ dependencies {
})


compile 'com.squareup.retrofit2:retrofit:2.3.0'
compile 'com.android.support:appcompat-v7:26.+'
compile 'com.android.support:design:26.+'
compile 'android.arch.lifecycle:runtime:1.0.3'
Expand All @@ -56,9 +59,17 @@ dependencies {
androidTestCompile "android.arch.persistence.room:testing:1.0.0"
compile "android.arch.persistence.room:rxjava2:1.0.0"

compile 'io.reactivex:rxjava:1.1.6'
compile 'io.reactivex:rxandroid:1.2.1'
compile 'com.squareup.retrofit2:adapter-rxjava:2.3.0'
compile 'io.reactivex.rxjava2:rxjava:2.0.2'
compile 'io.reactivex.rxjava2:rxandroid:2.0.1'

compile 'com.squareup.retrofit2:retrofit:2.3.0'
compile 'com.squareup.retrofit2:adapter-rxjava2:2.3.0'
compile 'com.squareup.retrofit2:converter-gson:2.3.0'

compile 'com.google.code.gson:gson:2.8.0'

compile 'com.google.dagger:dagger:2.11'
compile 'com.google.dagger:dagger-android:2.11'
annotationProcessor 'com.google.dagger:dagger-android-processor:2.11'
annotationProcessor 'com.google.dagger:dagger-compiler:2.11'
}
9 changes: 3 additions & 6 deletions app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -2,29 +2,26 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.devanshramen.loginapplication">

<!-- To auto-complete the email text field in the login form with the user's emails -->
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="android.permission.READ_PROFILE" />
<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="android.permission.INTERNET" />

<application
android:name=".MApplication"
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity
android:name=".ui.login.LoginActivity"
android:name=".ui.LoginActivity"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".ui.main.MainActivity"></activity>
<activity android:name=".ui.MainActivity"></activity>
</application>

</manifest>
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package com.devanshramen.loginapplication;

import android.app.Application;
import android.content.Context;

/**
* Created by devanshramen on 16/12/2017.
*/

public class MApplication extends Application {

public static Context context;

@Override
public void onCreate() {
super.onCreate();

context = getApplicationContext();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
package com.devanshramen.loginapplication.db;

import android.arch.lifecycle.LiveData;
import android.util.Log;

import com.devanshramen.loginapplication.MApplication;
import com.devanshramen.loginapplication.db.local.AppDatabase;
import com.devanshramen.loginapplication.db.local.UserDao;
import com.devanshramen.loginapplication.model.LoginRequest;
import com.devanshramen.loginapplication.model.LoginResponse;
import com.devanshramen.loginapplication.model.LoginResponse.User;
import com.devanshramen.loginapplication.utils.RxUtils;

import java.util.concurrent.Executor;
import java.util.concurrent.Executors;

import static com.devanshramen.loginapplication.utils.NetworkUtils.getAPIService;

/**
* Created by devanshramen on 11/19/17.
*/

public class UserRepository {
UserDao userDao;
Executor executor;


public UserRepository() {
this.userDao = AppDatabase.getAppDatabase(MApplication.context).userDao();

executor = Executors.newSingleThreadExecutor();
}

public void clearUserCached() {
executor.execute(() -> {
userDao.deleteAll();
});
}

public void loginUser(String email, String password) {

getAPIService().login(new LoginRequest(email, password))
.compose(RxUtils.applySchedulers())
.subscribe(
(LoginResponse response) -> {

new Thread( () -> {
userDao.delete(response.getUser());
userDao.insert(response.getUser());
}
).start();

Log.d(this.getClass().toString(), "response" + response.getUser().getFirstName());
},
(Throwable e) -> {
e.printStackTrace();
}
);


}


public LiveData<User> getUser() {
return userDao.getUser();
}
}

Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
package com.devanshramen.loginapplication.repository.local;
package com.devanshramen.loginapplication.db.local;

import android.arch.persistence.room.Database;
import android.arch.persistence.room.Room;
import android.arch.persistence.room.RoomDatabase;
import android.content.Context;

import com.devanshramen.loginapplication.repository.model.LoginResponse;
import com.devanshramen.loginapplication.model.LoginResponse;

/**
* Created by devanshramen on 13/12/2017.
Expand All @@ -24,7 +24,7 @@ public static AppDatabase getAppDatabase(Context context) {
Room.databaseBuilder(context.getApplicationContext(), AppDatabase.class, "user-database")
// allow queries on the main thread.
// Don't do this on a real app! See PersistenceBasicSample for an example.
.allowMainThreadQueries()
//.allowMainThreadQueries()
.build();
}
return INSTANCE;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,27 +1,31 @@
package com.devanshramen.loginapplication.repository.local;
package com.devanshramen.loginapplication.db.local;

import android.arch.lifecycle.LiveData;
import android.arch.persistence.room.Dao;
import android.arch.persistence.room.Delete;
import android.arch.persistence.room.Insert;
import android.arch.persistence.room.OnConflictStrategy;
import android.arch.persistence.room.Query;

import com.devanshramen.loginapplication.repository.model.LoginResponse.User;

import java.util.List;
import com.devanshramen.loginapplication.model.LoginResponse.User;

/**
* Created by devanshramen on 11/19/17.
*/

@Dao
public interface UserDao {
//todo

@Query("SELECT * FROM user LIMIT 1")
LiveData<User> getUser();

@Insert
(onConflict = OnConflictStrategy.REPLACE)
void insert(User user);

@Delete
void delete(User user);

@Query("DELETE FROM user")
void deleteAll();
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package com.devanshramen.loginapplication.db.remote;


import com.devanshramen.loginapplication.model.LoginRequest;
import com.devanshramen.loginapplication.model.LoginResponse;

import io.reactivex.Observable;
import retrofit2.http.Body;
import retrofit2.http.POST;

/**
* Created by devanshramen on 11/19/17.
*/

public interface APIService {

String BASE_URL = "http://demo6183250.mockable.io/"; // mocked login service

@POST("login") // mocked login service
Observable<LoginResponse> login(@Body LoginRequest request);
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.devanshramen.loginapplication.repository.model;
package com.devanshramen.loginapplication.model;

/**
* Created by devanshramen on 12/11/2017.
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.devanshramen.loginapplication.repository.model;
package com.devanshramen.loginapplication.model;

import android.arch.persistence.room.Entity;
import android.arch.persistence.room.PrimaryKey;
Expand Down Expand Up @@ -31,7 +31,7 @@ public void setUser(User user) {


@Entity
public class User {
public static class User {

@PrimaryKey
private Integer id;
Expand Down

This file was deleted.

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,16 +1,18 @@
package com.devanshramen.loginapplication.ui.login;
package com.devanshramen.loginapplication.ui;

import android.arch.lifecycle.LifecycleActivity;
import android.arch.lifecycle.ViewModelProviders;
import android.content.Intent;
import android.databinding.DataBindingUtil;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.widget.Toast;

import com.devanshramen.loginapplication.R;
import com.devanshramen.loginapplication.databinding.ActivityLoginBinding;
import com.devanshramen.loginapplication.ui.main.MainActivity;
import com.devanshramen.loginapplication.viewmodel.LoginViewModel;

/**
* A login screen that offers login via email/password.
Expand All @@ -34,17 +36,21 @@ protected void onCreate(Bundle savedInstanceState) {


// The observer updates the UI when Login Response is successful
mViewModel.getLoginResponse().observe(this, loginResponse -> {
mViewModel.getUser().observe(this, userResponse -> {

if (loginResponse.isSuccess()) {
Log.d("LoginActivity", "value user was updated");

if (userResponse != null) {
Log.d("UserRepository", "login response: " + userResponse.getLastName());
Toast.makeText(LoginActivity.this, "Login success", Toast.LENGTH_SHORT).show();

Intent intent = new Intent(this, MainActivity.class);
startActivity(intent);
finish();
//finish();

} else {
Toast.makeText(LoginActivity.this, "Login failed", Toast.LENGTH_SHORT).show();

Log.d("LoginActivity", "value user is null");
}
});

Expand All @@ -56,5 +62,6 @@ protected void onCreate(Bundle savedInstanceState) {
});
}


}

Loading

0 comments on commit dff0e4d

Please sign in to comment.