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