diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index c87e9f8..bb72880 100755
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -4,6 +4,7 @@
data, OnItemClickListener l
mContext = context;
}
-
@Override
public TodosVH onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_todos, null);
diff --git a/app/src/main/java/com/blink22/android/mvpandroid/apiInterfaces/TodosService.java b/app/src/main/java/com/blink22/android/mvpandroid/apiinterfaces/TodosService.java
old mode 100755
new mode 100644
similarity index 91%
rename from app/src/main/java/com/blink22/android/mvpandroid/apiInterfaces/TodosService.java
rename to app/src/main/java/com/blink22/android/mvpandroid/apiinterfaces/TodosService.java
index 88d18b9..f2ec1aa
--- a/app/src/main/java/com/blink22/android/mvpandroid/apiInterfaces/TodosService.java
+++ b/app/src/main/java/com/blink22/android/mvpandroid/apiinterfaces/TodosService.java
@@ -1,10 +1,9 @@
-package com.blink22.android.mvpandroid.apiInterfaces;
+package com.blink22.android.mvpandroid.apiinterfaces;
import com.blink22.android.mvpandroid.models.Todo;
import java.util.ArrayList;
-
import io.reactivex.Observable;
import retrofit2.http.Body;
import retrofit2.http.GET;
diff --git a/app/src/main/java/com/blink22/android/mvpandroid/di/AppModule.java b/app/src/main/java/com/blink22/android/mvpandroid/di/AppModule.java
new file mode 100644
index 0000000..f8bd99c
--- /dev/null
+++ b/app/src/main/java/com/blink22/android/mvpandroid/di/AppModule.java
@@ -0,0 +1,27 @@
+package com.blink22.android.mvpandroid.di;
+
+import android.app.Application;
+
+import javax.inject.Singleton;
+
+import dagger.Module;
+import dagger.Provides;
+
+/**
+ * Created by ahmedghazy on 7/29/18.
+ */
+
+@Module
+public class AppModule {
+ Application mApplication;
+
+ public AppModule(Application application) {
+ mApplication = application;
+ }
+
+ @Provides
+ @Singleton
+ public Application providesApplication() {
+ return mApplication;
+ }
+}
diff --git a/app/src/main/java/com/blink22/android/mvpandroid/di/NetworkComponent.java b/app/src/main/java/com/blink22/android/mvpandroid/di/NetworkComponent.java
new file mode 100644
index 0000000..42e5e28
--- /dev/null
+++ b/app/src/main/java/com/blink22/android/mvpandroid/di/NetworkComponent.java
@@ -0,0 +1,21 @@
+package com.blink22.android.mvpandroid.di;
+
+import com.blink22.android.mvpandroid.newTodo.NewTodoActivity;
+import com.blink22.android.mvpandroid.newTodo.NewTodoFragment;
+import com.blink22.android.mvpandroid.todos.TodosActivity;
+import com.blink22.android.mvpandroid.todos.TodosFragment;
+
+import javax.inject.Singleton;
+
+import dagger.Component;
+
+/**
+ * Created by ahmedghazy on 7/29/18.
+ */
+
+@Singleton
+@Component(modules={AppModule.class, NetworkModule.class})
+public interface NetworkComponent {
+ void inject(TodosFragment todosFragment);
+ void inject(NewTodoFragment newTodoFragment);
+}
diff --git a/app/src/main/java/com/blink22/android/mvpandroid/di/NetworkModule.java b/app/src/main/java/com/blink22/android/mvpandroid/di/NetworkModule.java
new file mode 100644
index 0000000..9596d74
--- /dev/null
+++ b/app/src/main/java/com/blink22/android/mvpandroid/di/NetworkModule.java
@@ -0,0 +1,91 @@
+package com.blink22.android.mvpandroid.di;
+
+import android.app.Application;
+
+import com.blink22.android.mvpandroid.BuildConfig;
+import com.blink22.android.mvpandroid.apiinterfaces.TodosService;
+import com.blink22.android.mvpandroid.network.TodosSubscriber;
+import com.google.gson.Gson;
+
+import java.io.File;
+
+import javax.inject.Named;
+import javax.inject.Singleton;
+
+import dagger.Module;
+import dagger.Provides;
+import okhttp3.Cache;
+import okhttp3.OkHttpClient;
+import retrofit2.CallAdapter;
+import retrofit2.Retrofit;
+import retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory;
+import retrofit2.converter.gson.GsonConverterFactory;
+
+/**
+ * Created by ahmedghazy on 7/29/18.
+ */
+
+@Module
+public class NetworkModule {
+ @Provides
+ @Named("api_url")
+ String provideApiLink() {
+ return BuildConfig.BASE_URL;
+ }
+
+ @Provides
+ @Singleton
+ Cache provideOkHttpCache(Application application) {
+ int cacheSize = 5 * 1024 * 1024;
+ Cache cache = new Cache(application.getCacheDir(), cacheSize);
+ return cache;
+ }
+
+ @Provides
+ @Singleton
+ @Named("cached")
+ OkHttpClient provideOkHttpClient(Cache cache) {
+ OkHttpClient okHttpClient = new OkHttpClient.Builder().cache(cache).build();
+ return okHttpClient;
+ }
+
+ @Provides
+ @Singleton
+ @Named("non_cached")
+ OkHttpClient provideOkHttpClientNonCached() {
+ OkHttpClient okHttpClient = new OkHttpClient();
+ return okHttpClient;
+ }
+
+ @Provides
+ @Singleton
+ @Named("rxjava2_call_adapter")
+ CallAdapter.Factory provideCallAdapterFactory() {
+ return RxJava2CallAdapterFactory.create();
+ }
+
+ @Provides
+ @Singleton
+ Retrofit provideRetrofit(@Named("cached") OkHttpClient okHttpClient,
+ @Named("rxjava2_call_adapter") CallAdapter.Factory rxJava2CallAdapterFactory,
+ @Named("api_url") String url) {
+ return new Retrofit.Builder()
+ .addConverterFactory(GsonConverterFactory.create())
+ .addCallAdapterFactory(rxJava2CallAdapterFactory)
+ .baseUrl(url)
+ .client(okHttpClient)
+ .build();
+ }
+
+ @Provides
+ @Singleton
+ TodosService provideTodosService(Retrofit retrofit) {
+ return retrofit.create(TodosService.class);
+ }
+
+ @Provides
+ @Singleton
+ TodosSubscriber provideTodosSubscriber(TodosService todosService) {
+ return new TodosSubscriber(todosService);
+ }
+}
diff --git a/app/src/main/java/com/blink22/android/mvpandroid/models/NavigationItemEnum.java b/app/src/main/java/com/blink22/android/mvpandroid/models/NavigationItemEnum.java
index f0fa0dc..ace0794 100755
--- a/app/src/main/java/com/blink22/android/mvpandroid/models/NavigationItemEnum.java
+++ b/app/src/main/java/com/blink22/android/mvpandroid/models/NavigationItemEnum.java
@@ -12,7 +12,6 @@ public enum NavigationItemEnum {
HOME(R.string.list_todos, android.R.drawable.ic_dialog_info, TodosActivity.class, 0),
ADD_NEW_NOTE(R.string.add_new_todo, android.R.drawable.ic_input_add, NewTodoActivity.class, 1);
-
private int labelResourceId;
private int iconResourceId;
private Class classToLaunch;
@@ -41,5 +40,3 @@ public int getId() {
return id;
}
}
-
-
diff --git a/app/src/main/java/com/blink22/android/mvpandroid/models/Todo.java b/app/src/main/java/com/blink22/android/mvpandroid/models/Todo.java
index 5f8d315..401773f 100755
--- a/app/src/main/java/com/blink22/android/mvpandroid/models/Todo.java
+++ b/app/src/main/java/com/blink22/android/mvpandroid/models/Todo.java
@@ -10,7 +10,6 @@
public class Todo{
-
@SerializedName("id")
private int id;
diff --git a/app/src/main/java/com/blink22/android/mvpandroid/network/NetworkManager.java b/app/src/main/java/com/blink22/android/mvpandroid/network/NetworkManager.java
index 3cb5c01..8f4aac0 100755
--- a/app/src/main/java/com/blink22/android/mvpandroid/network/NetworkManager.java
+++ b/app/src/main/java/com/blink22/android/mvpandroid/network/NetworkManager.java
@@ -1,7 +1,7 @@
package com.blink22.android.mvpandroid.network;
import com.blink22.android.mvpandroid.BuildConfig;
-import com.blink22.android.mvpandroid.apiInterfaces.TodosService;
+import com.blink22.android.mvpandroid.apiinterfaces.TodosService;
import java.io.IOException;
@@ -39,8 +39,6 @@ public static NetworkManager getInstance() {
public TodosService getTodosService() {
if (mTodosService == null) {
-
-
mTodosService = new Retrofit
.Builder()
.baseUrl(BuildConfig.BASE_URL)
@@ -50,7 +48,6 @@ public TodosService getTodosService() {
.build()
.create(TodosService.class);
}
-
return mTodosService;
}
}
diff --git a/app/src/main/java/com/blink22/android/mvpandroid/network/TodosSubscriber.java b/app/src/main/java/com/blink22/android/mvpandroid/network/TodosSubscriber.java
index 8cbf63d..d90da3e 100755
--- a/app/src/main/java/com/blink22/android/mvpandroid/network/TodosSubscriber.java
+++ b/app/src/main/java/com/blink22/android/mvpandroid/network/TodosSubscriber.java
@@ -1,9 +1,8 @@
package com.blink22.android.mvpandroid.network;
-import com.blink22.android.mvpandroid.apiInterfaces.TodosService;
+import com.blink22.android.mvpandroid.apiinterfaces.TodosService;
import com.blink22.android.mvpandroid.models.Todo;
-
import java.util.ArrayList;
import io.reactivex.Observable;
diff --git a/app/src/main/java/com/blink22/android/mvpandroid/newTodo/NewTodoActivity.java b/app/src/main/java/com/blink22/android/mvpandroid/newTodo/NewTodoActivity.java
index 1b29630..4f357d9 100755
--- a/app/src/main/java/com/blink22/android/mvpandroid/newTodo/NewTodoActivity.java
+++ b/app/src/main/java/com/blink22/android/mvpandroid/newTodo/NewTodoActivity.java
@@ -2,7 +2,7 @@
import android.support.v4.app.Fragment;
-import com.blink22.android.mvpandroid.activities.BaseActivity;
+import com.blink22.android.mvpandroid.BaseActivity;
/**
* Created by ahmedghazy on 7/26/18.
diff --git a/app/src/main/java/com/blink22/android/mvpandroid/newTodo/NewTodoFragment.java b/app/src/main/java/com/blink22/android/mvpandroid/newTodo/NewTodoFragment.java
index 8ed3caa..99c6e56 100755
--- a/app/src/main/java/com/blink22/android/mvpandroid/newTodo/NewTodoFragment.java
+++ b/app/src/main/java/com/blink22/android/mvpandroid/newTodo/NewTodoFragment.java
@@ -11,10 +11,13 @@
import android.widget.Button;
import android.widget.TextView;
+import com.blink22.android.mvpandroid.BaseApp;
import com.blink22.android.mvpandroid.R;
import com.blink22.android.mvpandroid.network.NetworkManager;
import com.blink22.android.mvpandroid.network.TodosSubscriber;
+import javax.inject.Inject;
+
import butterknife.BindView;
import butterknife.ButterKnife;
@@ -33,6 +36,7 @@ public class NewTodoFragment extends Fragment implements NewTodoContract.View {
@BindView(R.id.new_todo_submit)
Button mSubmit;
NewTodoContract.Presenter mPresenter;
+ @Inject TodosSubscriber mTodosSubscriber;
public static NewTodoFragment newInstance() {
@@ -46,7 +50,10 @@ public static NewTodoFragment newInstance() {
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
- setPresenter(NewTodoPresenter.getInstance(new TodosSubscriber(NetworkManager.getInstance().getTodosService()), this));
+
+ ((BaseApp) getActivity().getApplication()).getNetworkComponent().inject(this);
+
+ setPresenter(NewTodoPresenter.getInstance(mTodosSubscriber, this));
getLifecycle().addObserver(mPresenter);
}
diff --git a/app/src/main/java/com/blink22/android/mvpandroid/todos/TodosActivity.java b/app/src/main/java/com/blink22/android/mvpandroid/todos/TodosActivity.java
index a1711b1..a7da693 100755
--- a/app/src/main/java/com/blink22/android/mvpandroid/todos/TodosActivity.java
+++ b/app/src/main/java/com/blink22/android/mvpandroid/todos/TodosActivity.java
@@ -11,7 +11,8 @@
import android.widget.ProgressBar;
import android.widget.Toast;
-import com.blink22.android.mvpandroid.activities.BaseActivity;
+import com.blink22.android.mvpandroid.BaseApp;
+import com.blink22.android.mvpandroid.BaseActivity;
import com.blink22.android.mvpandroid.adapters.TodosAdapter;
import com.blink22.android.mvpandroid.models.Todo;
@@ -34,4 +35,9 @@ public class TodosActivity extends BaseActivity{
protected Fragment createFragment() {
return TodosFragment.newInstance();
}
+
+ @Override
+ public void onCreate(@Nullable Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ }
}
diff --git a/app/src/main/java/com/blink22/android/mvpandroid/todos/TodosFragment.java b/app/src/main/java/com/blink22/android/mvpandroid/todos/TodosFragment.java
index 8140f43..7cc1832 100755
--- a/app/src/main/java/com/blink22/android/mvpandroid/todos/TodosFragment.java
+++ b/app/src/main/java/com/blink22/android/mvpandroid/todos/TodosFragment.java
@@ -14,7 +14,8 @@
import android.widget.ProgressBar;
import android.widget.Toast;
-import com.blink22.android.mvpandroid.activities.BaseActivity;
+import com.blink22.android.mvpandroid.BaseApp;
+import com.blink22.android.mvpandroid.BaseActivity;
import com.blink22.android.mvpandroid.adapters.TodosAdapter;
import com.blink22.android.mvpandroid.models.Todo;
@@ -24,6 +25,8 @@
import com.blink22.android.mvpandroid.network.NetworkManager;
import com.blink22.android.mvpandroid.network.TodosSubscriber;
+import javax.inject.Inject;
+
import butterknife.BindView;
import butterknife.ButterKnife;
@@ -32,6 +35,10 @@
*/
public class TodosFragment extends Fragment implements TodosContract.View {
+ @BindView(R.id.todos_list) RecyclerView mTodos;
+ @BindView(R.id.todos_progress) ProgressBar mProgressBar;
+ TodosContract.Presenter mTodosPresenter;
+ @Inject TodosSubscriber mTodosSubscriber;
public static TodosFragment newInstance() {
@@ -44,14 +51,13 @@ public static TodosFragment newInstance() {
private static final String TAG = TodosActivity.class.getSimpleName();
- @BindView(R.id.todos_list) RecyclerView mTodos;
- @BindView(R.id.todos_progress) ProgressBar mProgressBar;
- TodosContract.Presenter mTodosPresenter;
-
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
- setPresenter(TodosPresenter.getInstance(new TodosSubscriber(NetworkManager.getInstance().getTodosService()), this));
+
+ ((BaseApp) getActivity().getApplication()).getNetworkComponent().inject(this);
+
+ setPresenter(TodosPresenter.getInstance(mTodosSubscriber, this));
getLifecycle().addObserver(mTodosPresenter);
}
diff --git a/app/src/main/java/com/blink22/android/mvpandroid/todos/TodosPresenter.java b/app/src/main/java/com/blink22/android/mvpandroid/todos/TodosPresenter.java
index 1749963..49e4b2e 100755
--- a/app/src/main/java/com/blink22/android/mvpandroid/todos/TodosPresenter.java
+++ b/app/src/main/java/com/blink22/android/mvpandroid/todos/TodosPresenter.java
@@ -7,13 +7,10 @@
import com.blink22.android.mvpandroid.models.Todo;
import com.blink22.android.mvpandroid.network.TodosSubscriber;
-import java.lang.reflect.Array;
import java.util.ArrayList;
import io.reactivex.disposables.CompositeDisposable;
import io.reactivex.observers.DisposableObserver;
-import rx.Subscription;
-import rx.subscriptions.CompositeSubscription;
/**
* Created by ahmedghazy on 7/25/18.
@@ -54,8 +51,6 @@ public void getTodos() {
mView.showWait();
-
-
DisposableObserver> disposableObserver = mTodosSubscriber.getTodos(new TodosSubscriber.Callback>() {
@Override
public void onSuccess(ArrayList todos) {
diff --git a/db.json b/db.json
index e175372..d2a0ca5 100644
--- a/db.json
+++ b/db.json
@@ -2,7 +2,7 @@
"todos": [
{
"details": "Go to the market to buy carrots",
- "done": false,
+ "done": true,
"id": 1,
"title": "Buy grocery"
},
@@ -149,6 +149,12 @@
"done": true,
"id": 25,
"title": "dsa Title"
+ },
+ {
+ "details": "Ghazy Description",
+ "done": false,
+ "id": 26,
+ "title": "Title Ghazy"
}
]
}
\ No newline at end of file