Skip to content

Commit

Permalink
DI setup
Browse files Browse the repository at this point in the history
  • Loading branch information
Surya committed Feb 11, 2019
1 parent 59e08c5 commit 5f27122
Show file tree
Hide file tree
Showing 25 changed files with 798 additions and 58 deletions.
Binary file modified .idea/caches/build_file_checksums.ser
Binary file not shown.
20 changes: 6 additions & 14 deletions app/build.gradle
Expand Up @@ -9,7 +9,7 @@ android {
versionCode 1
versionName "1.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
buildConfigField("String", "BASE_URL", "\"https://services.leher.ai/\"")
buildConfigField("String", "BASE_URL", "\"https://androidwave.com/api/\"")
buildConfigField("String", "API_KEY", "\"REPLACE YOUR API_KEY\"")
}
buildTypes {
Expand All @@ -26,16 +26,12 @@ android {

dependencies {
implementation fileTree(include: ['*.jar'], dir: 'libs')
implementation 'androidx.appcompat:appcompat:1.0.0-beta01'
implementation 'androidx.constraintlayout:constraintlayout:1.1.2'
implementation 'com.google.android.material:material:1.0.0-beta01'
implementation 'androidx.appcompat:appcompat:1.1.0-alpha02'
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
implementation 'com.google.android.material:material:1.1.0-alpha03'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'androidx.test:runner:1.1.0-alpha4'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.0-alpha4'

// code generator for view
// implementation "com.jakewharton:butterknife:$rootProject.butterKnifeVersion"
//annotationProcessor "com.jakewharton:butterknife-compiler:$rootProject.butterKnifeVersion"
androidTestImplementation 'androidx.test:runner:1.1.2-alpha01'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.2-alpha01'

// reactive
implementation "io.reactivex.rxjava2:rxjava:$rootProject.rxjava2Version"
Expand All @@ -48,10 +44,6 @@ dependencies {
implementation "com.google.android.material:material:$rootProject.supportLibraryVersion"
implementation "androidx.constraintlayout:constraintlayout:$rootProject.constraintLayoutVersion"

// code generator for view
// implementation "com.jakewharton:butterknife:$rootProject.butterKnifeVersion"
// annotationProcessor "com.jakewharton:butterknife-compiler:$rootProject.butterKnifeVersion"

// dependency injection
implementation "com.google.dagger:dagger:$rootProject.dagger2Version"
annotationProcessor "com.google.dagger:dagger-compiler:$rootProject.dagger2Version"
Expand Down
7 changes: 2 additions & 5 deletions app/src/main/AndroidManifest.xml
Expand Up @@ -3,10 +3,7 @@
xmlns:tools="http://schemas.android.com/tools"
package="com.androidwave.cleancode">

<!-- 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=".root.WaveApp"
Expand All @@ -19,7 +16,7 @@
tools:ignore="GoogleAppIndexingWarning">
<activity
android:name=".ui.main.MainActivity"
android:label="@string/title_activity_login" />
android:label="@string/title_home" />
<activity
android:name=".ui.login.LoginActivity"
android:label="@string/app_name"
Expand Down
Expand Up @@ -5,6 +5,7 @@
import com.androidwave.cleancode.data.db.AppDatabase;
import com.androidwave.cleancode.data.db.model.User;
import com.androidwave.cleancode.data.network.RestApiHelper;
import com.androidwave.cleancode.data.network.pojo.FeedItem;
import com.androidwave.cleancode.data.network.pojo.LoginRequest;
import com.androidwave.cleancode.data.network.pojo.UserProfile;
import com.androidwave.cleancode.data.network.pojo.WrapperResponse;
Expand Down Expand Up @@ -104,6 +105,11 @@ public Single<WrapperResponse<UserProfile>> doLoginApiCall(LoginRequest request)
return mApiHelper.doLoginApiCall(request);
}

@Override
public Single<WrapperResponse<List<FeedItem>>> getFeedList() {
return mApiHelper.getFeedList();
}

@Override
public int getUserLoggedInMode() {
return mPreferencesHelper.getUserLoggedInMode();
Expand Down
@@ -1,9 +1,17 @@
package com.androidwave.cleancode.data.network;

import com.androidwave.cleancode.data.network.pojo.FeedItem;
import com.androidwave.cleancode.data.network.pojo.LoginRequest;
import com.androidwave.cleancode.data.network.pojo.UserProfile;
import com.androidwave.cleancode.data.network.pojo.WrapperResponse;

import java.util.List;

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

/**
* Created on : Jan 19, 2019
Expand All @@ -14,6 +22,10 @@ public interface NetworkService {
/**
* @return Observable feed response
*/
@GET("facts.json")
Observable<WrapperResponse<String>> getFeedResponse();
@GET("feed.json")
Single<WrapperResponse<List<FeedItem>>> getFeedList();


@POST("login")
Single<WrapperResponse<UserProfile>> doLoginApiCall(@Body LoginRequest mRequest);
}
@@ -1,12 +1,17 @@
package com.androidwave.cleancode.data.network;

import com.androidwave.cleancode.data.network.pojo.FeedItem;
import com.androidwave.cleancode.data.network.pojo.LoginRequest;
import com.androidwave.cleancode.data.network.pojo.UserProfile;
import com.androidwave.cleancode.data.network.pojo.WrapperResponse;

import java.util.List;

import io.reactivex.Single;

public interface RestApiHelper {

Single<WrapperResponse<UserProfile>> doLoginApiCall(LoginRequest request);

Single<WrapperResponse<List<FeedItem>>> getFeedList();
}
@@ -1,9 +1,12 @@
package com.androidwave.cleancode.data.network;

import com.androidwave.cleancode.data.network.pojo.FeedItem;
import com.androidwave.cleancode.data.network.pojo.LoginRequest;
import com.androidwave.cleancode.data.network.pojo.UserProfile;
import com.androidwave.cleancode.data.network.pojo.WrapperResponse;

import java.util.List;

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

Expand All @@ -21,6 +24,11 @@ public RestApiManager(NetworkService apiService) {

@Override
public Single<WrapperResponse<UserProfile>> doLoginApiCall(LoginRequest request) {
return null;
return mService.doLoginApiCall(request);
}

@Override
public Single<WrapperResponse<List<FeedItem>>> getFeedList() {
return mService.getFeedList();
}
}
@@ -0,0 +1,71 @@

package com.androidwave.cleancode.data.network.pojo;


import com.google.gson.annotations.SerializedName;

@SuppressWarnings("unused")
public class FeedItem {

@SerializedName("author")
private String mAuthor;
@SerializedName("description")
private String mDescription;
@SerializedName("link")
private String mLink;
@SerializedName("pubDate")
private String mPubDate;
@SerializedName("thumbnail")
private String mThumbnail;
@SerializedName("title")
private String mTitle;

public String getAuthor() {
return mAuthor;
}

public void setAuthor(String author) {
mAuthor = author;
}

public String getDescription() {
return mDescription;
}

public void setDescription(String description) {
mDescription = description;
}

public String getLink() {
return mLink;
}

public void setLink(String link) {
mLink = link;
}

public String getPubDate() {
return mPubDate;
}

public void setPubDate(String pubDate) {
mPubDate = pubDate;
}

public String getThumbnail() {
return mThumbnail;
}

public void setThumbnail(String thumbnail) {
mThumbnail = thumbnail;
}

public String getTitle() {
return mTitle;
}

public void setTitle(String title) {
mTitle = title;
}

}
Expand Up @@ -4,6 +4,7 @@
import com.androidwave.cleancode.di.PerActivity;
import com.androidwave.cleancode.di.module.ActivityModule;
import com.androidwave.cleancode.ui.login.LoginActivity;
import com.androidwave.cleancode.ui.main.MainActivity;

import dagger.Component;

Expand All @@ -18,4 +19,6 @@ public interface ActivityComponent {


void inject(LoginActivity loginActivity);

void inject(MainActivity mainActivity);
}
Expand Up @@ -7,9 +7,15 @@
import com.androidwave.cleancode.ui.login.LoginMvpPresenter;
import com.androidwave.cleancode.ui.login.LoginMvpView;
import com.androidwave.cleancode.ui.login.LoginPresenter;
import com.androidwave.cleancode.ui.main.MainMvpPresenter;
import com.androidwave.cleancode.ui.main.MainMvpView;
import com.androidwave.cleancode.ui.main.MainPresenter;
import com.androidwave.cleancode.ui.main.RssAdapter;
import com.androidwave.cleancode.utils.rx.AppSchedulerProvider;
import com.androidwave.cleancode.utils.rx.SchedulerProvider;

import java.util.ArrayList;

import androidx.appcompat.app.AppCompatActivity;
import dagger.Module;
import dagger.Provides;
Expand Down Expand Up @@ -54,8 +60,20 @@ SchedulerProvider provideSchedulerProvider() {

@Provides
@PerActivity
LoginMvpPresenter<LoginMvpView> provideLoginPresenter(
LoginPresenter<LoginMvpView> presenter) {
LoginMvpPresenter<LoginMvpView> provideLoginPresenter(LoginPresenter<LoginMvpView> presenter) {
return presenter;
}


@Provides
@PerActivity
MainMvpPresenter<MainMvpView> provideMainPresenter(MainPresenter<MainMvpView> presenter) {
return presenter;
}


@Provides
RssAdapter provideRssAdapter() {
return new RssAdapter(new ArrayList<>());
}
}
@@ -0,0 +1,29 @@
package com.androidwave.cleancode.ui.base;

import android.view.View;

import androidx.recyclerview.widget.RecyclerView;

/**
* Created on : Feb 11, 2019
* Author : AndroidWave
*/
public abstract class BaseViewHolder extends RecyclerView.ViewHolder {

private int mCurrentPosition;

public BaseViewHolder(View itemView) {
super(itemView);
}

protected abstract void clear();

public void onBind(int position) {
mCurrentPosition = position;
clear();
}

public int getCurrentPosition() {
return mCurrentPosition;
}
}
Expand Up @@ -2,19 +2,35 @@

import android.content.Context;
import android.content.Intent;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;

import com.androidwave.cleancode.R;
import com.androidwave.cleancode.data.network.pojo.FeedItem;
import com.androidwave.cleancode.ui.base.BaseActivity;
import com.google.android.material.floatingactionbutton.FloatingActionButton;
import com.google.android.material.snackbar.Snackbar;
import com.androidwave.cleancode.utils.DividerItemDecoration;

import androidx.appcompat.widget.Toolbar;
import java.util.List;

public class MainActivity extends BaseActivity {
import javax.inject.Inject;

import androidx.core.content.ContextCompat;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;

public class MainActivity extends BaseActivity implements MainMvpView, RssAdapter.Callback {

RecyclerView mRecyclerView;

@Inject
MainMvpPresenter<MainMvpView> mPresenter;

@Inject
RssAdapter mRssAdapter;

LinearLayoutManager mLayoutManager;

public static Intent getStartIntent(Context context) {
Intent intent = new Intent(context, MainActivity.class);
Expand All @@ -25,12 +41,21 @@ public static Intent getStartIntent(Context context) {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
getActivityComponent().inject(this);
mPresenter.onAttach(MainActivity.this);
setUp();

}

@Override
protected void setUp() {

mRecyclerView = findViewById(R.id.recyclerViewFeed);
mLayoutManager = new LinearLayoutManager(this);
mLayoutManager.setOrientation(RecyclerView.VERTICAL);
Drawable dividerDrawable = ContextCompat.getDrawable(this, R.drawable.divider_drawable);
mRecyclerView.addItemDecoration(new DividerItemDecoration(dividerDrawable));
mRecyclerView.setLayoutManager(mLayoutManager);
mPresenter.onViewPrepared();
}

@Override
Expand All @@ -54,4 +79,15 @@ public boolean onOptionsItemSelected(MenuItem item) {

return super.onOptionsItemSelected(item);
}

@Override
public void updateFeed(List<FeedItem> feedItemList) {
mRecyclerView.setAdapter(mRssAdapter);
mRssAdapter.addItems(feedItemList);
}

@Override
public void onEmptyViewRetryClick() {
mPresenter.onViewPrepared();
}
}

0 comments on commit 5f27122

Please sign in to comment.