From 8c84688108916d5962a59cf2710149e9b505c679 Mon Sep 17 00:00:00 2001 From: Elad Keyshawn Date: Thu, 6 Apr 2017 00:29:59 +0200 Subject: [PATCH] basic mvp for old (bookmarks) --- app/src/main/AndroidManifest.xml | 2 +- .../kiwixmobile/KiwixMobileActivity.java | 1 + .../bookmarksView/BasePresenter.java | 40 +++ .../BookmarksActivity.java | 269 ++++++++++-------- .../bookmarksView/BookmarksPresenter.java | 56 ++++ .../bookmarksView/BookmarksViewCallback.java | 14 + .../kiwixmobile/bookmarksView/Presenter.java | 11 + .../bookmarksView/ViewCallback.java | 7 + .../di/components/ApplicationComponent.java | 3 + 9 files changed, 282 insertions(+), 121 deletions(-) create mode 100644 app/src/main/java/org/kiwix/kiwixmobile/bookmarksView/BasePresenter.java rename app/src/main/java/org/kiwix/kiwixmobile/{ => bookmarksView}/BookmarksActivity.java (50%) create mode 100644 app/src/main/java/org/kiwix/kiwixmobile/bookmarksView/BookmarksPresenter.java create mode 100644 app/src/main/java/org/kiwix/kiwixmobile/bookmarksView/BookmarksViewCallback.java create mode 100644 app/src/main/java/org/kiwix/kiwixmobile/bookmarksView/Presenter.java create mode 100644 app/src/main/java/org/kiwix/kiwixmobile/bookmarksView/ViewCallback.java diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 61c61480a..3dbaf5411 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -146,7 +146,7 @@ - + implements Presenter { + + private T mMvpView; + @Override + public void attachView(T mvpView) { + this.mMvpView = mvpView; + } + + @Override + public void detachView() { + mMvpView = null; + } + + public boolean isViewAttached() { + return mMvpView != null; + } + + public T getMvpView() { + return mMvpView; + } + + + + public void checkViewAttached() { + if (!isViewAttached()) throw new MvpViewNotAttachedException(); + } + + public static class MvpViewNotAttachedException extends RuntimeException { + public MvpViewNotAttachedException() { + super("Please call Presenter.attachView(MvpView) before" + + " requesting data to the Presenter"); + } + } +} diff --git a/app/src/main/java/org/kiwix/kiwixmobile/BookmarksActivity.java b/app/src/main/java/org/kiwix/kiwixmobile/bookmarksView/BookmarksActivity.java similarity index 50% rename from app/src/main/java/org/kiwix/kiwixmobile/BookmarksActivity.java rename to app/src/main/java/org/kiwix/kiwixmobile/bookmarksView/BookmarksActivity.java index 8e80d6296..394d5333d 100644 --- a/app/src/main/java/org/kiwix/kiwixmobile/BookmarksActivity.java +++ b/app/src/main/java/org/kiwix/kiwixmobile/bookmarksView/BookmarksActivity.java @@ -18,16 +18,17 @@ */ -package org.kiwix.kiwixmobile; +package org.kiwix.kiwixmobile.bookmarksView; +import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; import android.os.Bundle; import android.preference.PreferenceManager; import android.provider.Settings; +import android.support.annotation.NonNull; import android.support.design.widget.CoordinatorLayout; import android.support.design.widget.Snackbar; -import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.Toolbar; import android.util.SparseBooleanArray; import android.view.ActionMode; @@ -42,29 +43,31 @@ import android.widget.AdapterView; import android.widget.ArrayAdapter; import android.widget.LinearLayout; import android.widget.ListView; -import android.widget.RelativeLayout; -import android.widget.TextView; -import org.kiwix.kiwixmobile.database.BookmarksDao; -import org.kiwix.kiwixmobile.database.KiwixDatabase; -import org.kiwix.kiwixmobile.utils.DimenUtils; +import org.kiwix.kiwixmobile.BaseActivity; +import org.kiwix.kiwixmobile.KiwixMobileActivity; +import org.kiwix.kiwixmobile.R; +import org.kiwix.kiwixmobile.di.components.ApplicationComponent; import java.util.ArrayList; +import java.util.List; -public class BookmarksActivity extends AppCompatActivity - implements AdapterView.OnItemClickListener { +import javax.inject.Inject; + +import butterknife.BindView; +import butterknife.ButterKnife; + +public class BookmarksActivity extends BaseActivity + implements AdapterView.OnItemClickListener, BookmarksViewCallback { - private SparseBooleanArray sparseBooleanArray; private ArrayList bookmarks; private ArrayList bookmarkUrls; - private ArrayList tempContents; - private ListView bookmarksList; - private ArrayAdapter adapter; - private ArrayList selected; - private int numOfSelected; - private CoordinatorLayout snackbarLayout; - private LinearLayout noBookmarksLayout; - private BookmarksDao bookmarksDao; + @BindView(R.id.bookmarks_list) ListView bookmarksList; + private BookmarksArrayAdapter adapter; + @BindView(R.id.bookmarks_activity_layout) CoordinatorLayout snackbarLayout; + @BindView(R.id.bookmarks_none_linlayout) LinearLayout noBookmarksLayout; + @Inject BookmarksPresenter presenter; + private ActionModeListener actionModeListener; @Override protected void onCreate(Bundle savedInstanceState) { @@ -74,84 +77,29 @@ public class BookmarksActivity extends AppCompatActivity } super.onCreate(savedInstanceState); setContentView(R.layout.activity_bookmarks); + ButterKnife.bind(this); + setUpToolbar(); - snackbarLayout = (CoordinatorLayout) findViewById(R.id.bookmarks_activity_layout); - selected = new ArrayList<>(); - bookmarksList = (ListView) findViewById(R.id.bookmarks_list); - noBookmarksLayout = (LinearLayout) findViewById(R.id.bookmarks_none_linlayout); + bookmarks = new ArrayList<>(); + bookmarkUrls = new ArrayList<>(); - bookmarksDao = new BookmarksDao(KiwixDatabase.getInstance(this)); - bookmarks = bookmarksDao.getBookmarkTitles(ZimContentProvider.getId(), ZimContentProvider.getName()); - bookmarkUrls = bookmarksDao.getBookmarks(ZimContentProvider.getId(), ZimContentProvider.getName()); - - adapter = new ArrayAdapter(getApplicationContext(), R.layout.bookmarks_row, R.id.bookmark_title, bookmarks) { - @Override - public View getView(int position, View convertView, ViewGroup parent) { - if(convertView == null){ - LayoutInflater inflater = getLayoutInflater(); - convertView = inflater.inflate(R.layout.bookmarks_row, null); - } - return super.getView(position, convertView, parent); - } - }; + actionModeListener = new ActionModeListener(); + adapter = new BookmarksArrayAdapter(getApplicationContext(), R.layout.bookmarks_row, R.id.bookmark_title, bookmarks); bookmarksList.setAdapter(adapter); - setNoBookmarksState(); - bookmarksList.setChoiceMode(AbsListView.CHOICE_MODE_MULTIPLE_MODAL); - bookmarksList.setMultiChoiceModeListener(new AbsListView.MultiChoiceModeListener() { - @Override - public void onItemCheckedStateChanged(ActionMode mode, int position, long id, - boolean checked) { - if (checked) { - selected.add(bookmarks.get(position)); - numOfSelected++; - mode.setTitle(Integer.toString(numOfSelected)); - } else if (selected.contains(bookmarks.get(position))) { - selected.remove(bookmarks.get(position)); - numOfSelected--; - if (numOfSelected == 0) { - mode.finish(); - } else { - mode.setTitle(Integer.toString(numOfSelected)); - } - } - } - - @Override - public boolean onCreateActionMode(ActionMode mode, Menu menu) { - MenuInflater inflater = mode.getMenuInflater(); - inflater.inflate(R.menu.menu_bookmarks, menu); - numOfSelected = 0; - return true; - } - - @Override - public boolean onPrepareActionMode(ActionMode mode, Menu menu) { - return false; - } - - @Override - public boolean onActionItemClicked(ActionMode mode, MenuItem item) { - - switch (item.getItemId()) { - case R.id.menu_bookmarks_delete: - deleteSelectedItems(); - popDeleteBookmarksSnackbar(); - mode.finish(); - return true; - default: - return false; - } - } - - @Override - public void onDestroyActionMode(ActionMode mode) { - - } - }); + bookmarksList.setMultiChoiceModeListener(actionModeListener); bookmarksList.setOnItemClickListener(this); + + presenter.attachView(this); + presenter.loadBookmarks(this); } + @Override + protected void setupDagger(ApplicationComponent appComponent) { + appComponent.inject(this); + } + + private void setNoBookmarksState() { if (bookmarksList.getCount() == 0) { noBookmarksLayout.setVisibility(View.VISIBLE); @@ -160,31 +108,9 @@ public class BookmarksActivity extends AppCompatActivity } } - private void popDeleteBookmarksSnackbar() { - Snackbar bookmarkDeleteSnackbar = - Snackbar.make(snackbarLayout, numOfSelected + " " + getString(R.string.deleted_message), Snackbar.LENGTH_LONG); -// .setAction(ShortcutUtils.stringsGetter(R.string.undo, this), v -> { -// restoreBookmarks(); -// setNoBookmarksState(); -// Toast.makeText(getApplicationContext(), ShortcutUtils.stringsGetter(R.string.bookmarks_restored, getBaseContext()), Toast.LENGTH_SHORT) -// .show(); -// }); - - bookmarkDeleteSnackbar.setActionTextColor(getResources().getColor(R.color.white)); - bookmarkDeleteSnackbar.show(); - } - - /*private void restoreBookmarks() { - bookmarksDao.resetBookmarksToPrevious(tempContents); - bookmarks = bookmarksDao.getBookmarks(); - adapter.notifyDataSetChanged(); - setNoBookmarksState(); - refreshBookmarksList(); - }*/ private void deleteSelectedItems() { - sparseBooleanArray = bookmarksList.getCheckedItemPositions(); - tempContents = new ArrayList<>(bookmarks); + SparseBooleanArray sparseBooleanArray = bookmarksList.getCheckedItemPositions(); for (int i = sparseBooleanArray.size() - 1; i >= 0; i--) { deleteBookmark(bookmarkUrls.get(sparseBooleanArray.keyAt(i))); bookmarks.remove(sparseBooleanArray.keyAt(i)); @@ -195,15 +121,9 @@ public class BookmarksActivity extends AppCompatActivity } private void deleteBookmark(String article) { - bookmarksDao.deleteBookmark(article, ZimContentProvider.getId(), ZimContentProvider.getName()); + presenter.deleteBookmark(article); } - /*private void refreshBookmarksList() { - bookmarks.clear(); - bookmarks = bookmarksDao.getBookmarks(); - adapter.notifyDataSetChanged(); - setNoBookmarksState(); - }*/ private void setUpToolbar() { Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); @@ -243,9 +163,118 @@ public class BookmarksActivity extends AppCompatActivity startActivity(startIntent); } else { // we have a parent activity waiting... - setResult(RESULT_OK,startIntent ); + setResult(RESULT_OK, startIntent); finish(); } } + @Override + public void showBookmarks(ArrayList bookmarks, ArrayList bookmarkUrls) { + this.bookmarks.clear(); + this.bookmarkUrls.clear(); + this.bookmarks.addAll(bookmarks); + this.bookmarkUrls.addAll(bookmarkUrls); + adapter.notifyDataSetChanged(); + setNoBookmarksState(); + } + + + @Override + public void updateAdapter() { + adapter.notifyDataSetChanged(); + setNoBookmarksState(); + } + + @Override + public void popDeleteBookmarksSnackbar() { + Snackbar bookmarkDeleteSnackbar = + Snackbar.make(snackbarLayout, actionModeListener.getNumOfSelected() + " " + getString(R.string.deleted_message), Snackbar.LENGTH_LONG); + + + bookmarkDeleteSnackbar.setActionTextColor(getResources().getColor(R.color.white)); + bookmarkDeleteSnackbar.show(); + } + + + class ActionModeListener implements AbsListView.MultiChoiceModeListener { + private ArrayList selected = new ArrayList<>(); + private int numOfSelected = 0; + + public ActionModeListener() { + + } + + public int getNumOfSelected() { + return numOfSelected; + } + + @Override + public void onItemCheckedStateChanged(ActionMode mode, int position, long id, + boolean checked) { + if (checked) { + selected.add(bookmarks.get(position)); + numOfSelected++; + mode.setTitle(Integer.toString(numOfSelected)); + } else if (selected.contains(bookmarks.get(position))) { + selected.remove(bookmarks.get(position)); + numOfSelected--; + if (numOfSelected == 0) { + mode.finish(); + } else { + mode.setTitle(Integer.toString(numOfSelected)); + } + } + } + + @Override + public boolean onCreateActionMode(ActionMode mode, Menu menu) { + MenuInflater inflater = mode.getMenuInflater(); + inflater.inflate(R.menu.menu_bookmarks, menu); + numOfSelected = 0; + return true; + } + + @Override + public boolean onPrepareActionMode(ActionMode mode, Menu menu) { + return false; + } + + @Override + public boolean onActionItemClicked(ActionMode mode, MenuItem item) { + + switch (item.getItemId()) { + case R.id.menu_bookmarks_delete: + deleteSelectedItems(); + popDeleteBookmarksSnackbar(); + mode.finish(); + return true; + default: + return false; + } + } + + @Override + public void onDestroyActionMode(ActionMode mode) { + + } + } + + + class BookmarksArrayAdapter extends ArrayAdapter { + + public BookmarksArrayAdapter(Context context, int resource, int textViewResourceId, List objects) { + super(context, resource, textViewResourceId, objects); + } + + @NonNull + @Override + public View getView(int position, View convertView, ViewGroup parent) { + if(convertView == null){ + LayoutInflater inflater = getLayoutInflater(); + convertView = inflater.inflate(R.layout.bookmarks_row, null); + } + return super.getView(position, convertView, parent); + } + } + } diff --git a/app/src/main/java/org/kiwix/kiwixmobile/bookmarksView/BookmarksPresenter.java b/app/src/main/java/org/kiwix/kiwixmobile/bookmarksView/BookmarksPresenter.java new file mode 100644 index 000000000..7617194f0 --- /dev/null +++ b/app/src/main/java/org/kiwix/kiwixmobile/bookmarksView/BookmarksPresenter.java @@ -0,0 +1,56 @@ +package org.kiwix.kiwixmobile.bookmarksView; + +import android.content.Context; + +import org.kiwix.kiwixmobile.ZimContentProvider; +import org.kiwix.kiwixmobile.database.BookmarksDao; +import org.kiwix.kiwixmobile.database.KiwixDatabase; + +import java.util.ArrayList; + +import javax.inject.Inject; + +/** + * Created by EladKeyshawn on 05/04/2017. + */ + +public class BookmarksPresenter extends BasePresenter { + + + private BookmarksDao bookmarksDao; + private ArrayList bookmarks; + private ArrayList bookmarkUrls; + + @Inject + public BookmarksPresenter() { + } + + public void loadBookmarks(Context context) { + bookmarksDao = new BookmarksDao(KiwixDatabase.getInstance(context)); + bookmarks = bookmarksDao.getBookmarkTitles(ZimContentProvider.getId(), ZimContentProvider.getName()); + bookmarkUrls = bookmarksDao.getBookmarks(ZimContentProvider.getId(), ZimContentProvider.getName()); + getMvpView().showBookmarks(bookmarks,bookmarkUrls); + } + + + public void deleteBookmark(String article) { + bookmarksDao.deleteBookmark(article, ZimContentProvider.getId(), ZimContentProvider.getName()); + } + + + + @Override + public void attachView(BookmarksViewCallback mvpView) { + super.attachView(mvpView); + } + + @Override + public void detachView() { + super.detachView(); + } + + + + + +} diff --git a/app/src/main/java/org/kiwix/kiwixmobile/bookmarksView/BookmarksViewCallback.java b/app/src/main/java/org/kiwix/kiwixmobile/bookmarksView/BookmarksViewCallback.java new file mode 100644 index 000000000..7a3db855f --- /dev/null +++ b/app/src/main/java/org/kiwix/kiwixmobile/bookmarksView/BookmarksViewCallback.java @@ -0,0 +1,14 @@ +package org.kiwix.kiwixmobile.bookmarksView; + +import java.util.ArrayList; + +/** + * Created by EladKeyshawn on 05/04/2017. + */ + +public interface BookmarksViewCallback extends ViewCallback{ + void showBookmarks(ArrayList bookmarks, ArrayList bookmarkUrls); + void updateAdapter(); + + void popDeleteBookmarksSnackbar(); +} diff --git a/app/src/main/java/org/kiwix/kiwixmobile/bookmarksView/Presenter.java b/app/src/main/java/org/kiwix/kiwixmobile/bookmarksView/Presenter.java new file mode 100644 index 000000000..d539f139b --- /dev/null +++ b/app/src/main/java/org/kiwix/kiwixmobile/bookmarksView/Presenter.java @@ -0,0 +1,11 @@ +package org.kiwix.kiwixmobile.bookmarksView; + +/** + * Created by EladKeyshawn on 05/04/2017. + */ +public interface Presenter { + + void attachView(V mvpView); + + void detachView(); +} diff --git a/app/src/main/java/org/kiwix/kiwixmobile/bookmarksView/ViewCallback.java b/app/src/main/java/org/kiwix/kiwixmobile/bookmarksView/ViewCallback.java new file mode 100644 index 000000000..ac9b8672d --- /dev/null +++ b/app/src/main/java/org/kiwix/kiwixmobile/bookmarksView/ViewCallback.java @@ -0,0 +1,7 @@ +package org.kiwix.kiwixmobile.bookmarksView; + +/** + * Created by EladKeyshawn on 05/04/2017. + */ +public interface ViewCallback { +} diff --git a/app/src/main/java/org/kiwix/kiwixmobile/di/components/ApplicationComponent.java b/app/src/main/java/org/kiwix/kiwixmobile/di/components/ApplicationComponent.java index 02452b6ce..471f3478b 100644 --- a/app/src/main/java/org/kiwix/kiwixmobile/di/components/ApplicationComponent.java +++ b/app/src/main/java/org/kiwix/kiwixmobile/di/components/ApplicationComponent.java @@ -4,6 +4,7 @@ import dagger.Component; import javax.inject.Singleton; import org.kiwix.kiwixmobile.KiwixMobileActivity; import org.kiwix.kiwixmobile.LibraryFragment; +import org.kiwix.kiwixmobile.bookmarksView.BookmarksActivity; import org.kiwix.kiwixmobile.di.modules.ApplicationModule; import org.kiwix.kiwixmobile.di.modules.NetworkModule; import org.kiwix.kiwixmobile.downloader.DownloadService; @@ -19,4 +20,6 @@ public interface ApplicationComponent { void inject(DownloadService service); void inject(LibraryFragment libraryFragment); + + void inject(BookmarksActivity bookmarksActivity); }