Skip to content

Commit

Permalink
Implement presentation module skeleton and login view
Browse files Browse the repository at this point in the history
  • Loading branch information
jordifierro committed Mar 7, 2016
1 parent f7a7951 commit a6839af
Show file tree
Hide file tree
Showing 46 changed files with 674 additions and 30 deletions.
4 changes: 2 additions & 2 deletions .idea/gradle.xml

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

2 changes: 1 addition & 1 deletion .idea/misc.xml

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

2 changes: 1 addition & 1 deletion .idea/modules.xml

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

13 changes: 0 additions & 13 deletions app/src/main/AndroidManifest.xml

This file was deleted.

3 changes: 0 additions & 3 deletions app/src/main/res/values/strings.xml

This file was deleted.

2 changes: 1 addition & 1 deletion data/build.gradle
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
apply plugin: 'com.android.library'
apply plugin: 'android-apt'
apply plugin: 'com.neenbedankt.android-apt'

android {
compileSdkVersion 23
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.jordifierro.androidbase.data.net;

import com.jordifierro.androidbase.data.net.wrapper.UserWrapper;
import com.jordifierro.androidbase.domain.entity.NoteEntity;
import com.jordifierro.androidbase.domain.entity.UserEntity;

Expand All @@ -17,7 +18,7 @@

public interface RestApi {

String URL_BASE = "127.0.0.1:3000";
String URL_BASE = "http://localhost:3000";

@POST("/users")
Observable<Response<UserEntity>> createUser(@Body UserEntity user);
Expand All @@ -26,7 +27,7 @@ public interface RestApi {
Observable<Response<Void>> deleteUser(@Header("Authorization") String token);

@POST("/users/login")
Observable<Response<UserEntity>> doLogin(@Body UserEntity user);
Observable<Response<UserEntity>> doLogin(@Body UserWrapper user);

@DELETE("/users/logout")
Observable<Response<Void>> doLogout(@Header("Authorization") String token);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
package com.jordifierro.androidbase.data.net.error;
package com.jordifierro.androidbase.data.net.wrapper;

import com.jordifierro.androidbase.data.net.error.ResponseErrorEntity;

public class ResponseErrorWrapper {

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package com.jordifierro.androidbase.data.net.wrapper;

import com.jordifierro.androidbase.domain.entity.UserEntity;

public class UserWrapper {

private UserEntity user;

public UserWrapper(UserEntity user) {
this.user = user;
}

public UserEntity getUser() {
return user;
}

public void setUser(UserEntity user) {
this.user = user;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@

import com.google.gson.Gson;
import com.jordifierro.androidbase.data.net.error.ResponseErrorEntity;
import com.jordifierro.androidbase.data.net.error.ResponseErrorWrapper;
import com.jordifierro.androidbase.data.net.error.RestApiErrorException;
import com.jordifierro.androidbase.data.net.wrapper.ResponseErrorWrapper;

import java.io.IOException;

Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.jordifierro.androidbase.data.repository;

import com.jordifierro.androidbase.data.net.RestApi;
import com.jordifierro.androidbase.data.net.wrapper.UserWrapper;
import com.jordifierro.androidbase.domain.entity.UserEntity;
import com.jordifierro.androidbase.domain.repository.UserRepository;

Expand Down Expand Up @@ -45,7 +46,7 @@ public Void call(Response<Void> voidResponse) {

@Override
public Observable<UserEntity> loginUser(UserEntity user) {
return this.restApi.doLogin(user)
return this.restApi.doLogin(new UserWrapper(user))
.map(new Func1<Response<UserEntity>, UserEntity>() {
@Override
public UserEntity call(Response<UserEntity> userEntityResponse) {
Expand Down
File renamed without changes.
17 changes: 15 additions & 2 deletions app/build.gradle → presentation/build.gradle
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
apply plugin: 'com.android.application'
apply plugin: 'com.neenbedankt.android-apt'

android {
compileSdkVersion 23
Expand All @@ -20,7 +21,19 @@ android {
}

dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
testCompile 'junit:junit:4.12'
compile project(':domain')
compile project(':data')

apt 'com.google.dagger:dagger-compiler:2.0.2'

compile 'com.android.support:appcompat-v7:23.2.0'
compile 'com.android.support:design:23.2.0'
compile 'com.android.support:support-v4:23.2.0'
compile 'com.jakewharton:butterknife:7.0.1'
compile 'com.google.dagger:dagger:2.0.2'
compile 'javax.annotation:jsr250-api:1.0'
compile 'io.reactivex:rxjava:1.1.1'
compile 'io.reactivex:rxandroid:1.1.0'

testCompile 'junit:junit:4.12'
}
File renamed without changes.
25 changes: 25 additions & 0 deletions presentation/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.jordifierro.androidbase.presentation">

<uses-permission android:name="android.permission.INTERNET" />

<application
android:name=".BaseApplication"
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity
android:name=".view.activity.LoginActivity"
android:label="@string/title_activity_login"
android:theme="@style/AppTheme.NoActionBar">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>

</manifest>
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
package com.jordifierro.androidbase.presentation;

import android.app.Application;

import com.jordifierro.androidbase.presentation.dependency.component.ApplicationComponent;
import com.jordifierro.androidbase.presentation.dependency.component.DaggerApplicationComponent;
import com.jordifierro.androidbase.presentation.dependency.module.ApplicationModule;

public class BaseApplication extends Application {

private ApplicationComponent applicationComponent;

@Override
public void onCreate() {
super.onCreate();
this.initializeInjectors();
}

private void initializeInjectors() {
this.applicationComponent = DaggerApplicationComponent.builder()
.applicationModule(new ApplicationModule(this))
.build();
}

public ApplicationComponent getApplicationComponent() {
return this.applicationComponent;
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package com.jordifierro.androidbase.presentation.dependency.component;

import com.jordifierro.androidbase.presentation.dependency.module.ApplicationModule;
import com.jordifierro.androidbase.presentation.dependency.module.DataModule;
import com.jordifierro.androidbase.presentation.dependency.module.UserModule;
import com.jordifierro.androidbase.presentation.view.fragment.LoginFragment;

import javax.inject.Singleton;

import dagger.Component;

@Singleton
@Component(modules = { ApplicationModule.class, DataModule.class, UserModule.class })
public interface ApplicationComponent {

void inject(LoginFragment loginFragment);

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
package com.jordifierro.androidbase.presentation.dependency.module;

import android.content.Context;
import android.content.SharedPreferences;

import com.jordifierro.androidbase.domain.executor.PostExecutionThread;
import com.jordifierro.androidbase.domain.executor.ThreadExecutor;
import com.jordifierro.androidbase.presentation.BaseApplication;
import com.jordifierro.androidbase.presentation.executor.JobExecutor;
import com.jordifierro.androidbase.presentation.executor.UIThread;

import javax.inject.Singleton;

import dagger.Module;
import dagger.Provides;

@Module
public class ApplicationModule {

private static final String SHARED_PACKAGE = "base_shared_preferences";

private final BaseApplication baseApplication;

public ApplicationModule(BaseApplication baseApplication) {
this.baseApplication = baseApplication;
}

@Provides
@Singleton
Context provideApplicationContext() {
return this.baseApplication;
}

@Provides
@Singleton
SharedPreferences provideSharedPreferences(Context context) {
return context.getSharedPreferences(SHARED_PACKAGE, Context.MODE_PRIVATE);
}

@Provides
@Singleton
ThreadExecutor provideThreadExecutor(JobExecutor jobExecutor) {
return jobExecutor;
}

@Provides
@Singleton
PostExecutionThread providePostExecutionThread(UIThread uiThread) {
return uiThread;
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
package com.jordifierro.androidbase.presentation.dependency.module;

import android.content.SharedPreferences;

import com.google.gson.FieldNamingPolicy;
import com.google.gson.GsonBuilder;
import com.jordifierro.androidbase.data.net.RestApi;
import com.jordifierro.androidbase.data.repository.NoteDataRepository;
import com.jordifierro.androidbase.data.repository.SessionDataRepository;
import com.jordifierro.androidbase.data.repository.UserDataRepository;
import com.jordifierro.androidbase.domain.repository.NoteRepository;
import com.jordifierro.androidbase.domain.repository.SessionRepository;
import com.jordifierro.androidbase.domain.repository.UserRepository;

import javax.inject.Singleton;

import dagger.Module;
import dagger.Provides;
import retrofit2.Retrofit;
import retrofit2.adapter.rxjava.RxJavaCallAdapterFactory;
import retrofit2.converter.gson.GsonConverterFactory;

@Module
public class DataModule {

@Provides
@Singleton
SessionRepository provideSessionRepository(SharedPreferences sharedPreferences) {
return new SessionDataRepository(sharedPreferences);
}

@Provides
@Singleton
RestApi provideRestApi() {
return new Retrofit.Builder()
.baseUrl(RestApi.URL_BASE)
.addConverterFactory(GsonConverterFactory.create(new GsonBuilder()
.setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES)
.create()))
.addCallAdapterFactory(RxJavaCallAdapterFactory.create())
.build()
.create(RestApi.class);
}

@Provides
@Singleton
UserRepository provideUserRepository(RestApi restApi) {
return new UserDataRepository(restApi);
}

@Provides
@Singleton
NoteRepository provideNoteRepository(RestApi restApi) {
return new NoteDataRepository(restApi);
}

}
Loading

0 comments on commit a6839af

Please sign in to comment.