diff --git a/build.gradle b/build.gradle index b9c137622..e047ec9b9 100644 --- a/build.gradle +++ b/build.gradle @@ -53,14 +53,7 @@ dependencies { compile 'eu.mhutti1.utils.storage:android-storage-devices:0.4.7' compile 'com.jakewharton:butterknife:8.0.1' apt 'com.jakewharton:butterknife-compiler:8.0.1' - - // fast adapter -// compile('com.mikepenz:fastadapter:2.1.6@aar') { - compile('com.mikepenz:fastadapter:1.6.0@aar') { - transitive = true - } - compile 'com.mikepenz:fastadapter-extensions:1.8.0@aar' - + compile files("$buildDir/native-libs/native-libs.jar") compile group: 'com.google.guava', name: 'guava', version: '19.0' diff --git a/res/drawable/bookmark_row_selector.xml b/res/drawable/bookmark_row_selector.xml index e8c3fe7ea..1d5c852b1 100644 --- a/res/drawable/bookmark_row_selector.xml +++ b/res/drawable/bookmark_row_selector.xml @@ -1,7 +1,7 @@ - - + + \ No newline at end of file diff --git a/res/layout/activity_bookmarks.xml b/res/layout/activity_bookmarks.xml index 7349f7cc8..275ae4138 100644 --- a/res/layout/activity_bookmarks.xml +++ b/res/layout/activity_bookmarks.xml @@ -6,6 +6,7 @@ android:id="@+id/bookmarks_activity_layout" android:layout_width="fill_parent" android:layout_height="fill_parent" + android:fitsSystemWindows="true" tools:context=".BookmarksActivity"> - + android:background="?attr/listBackground"/> + android:layout_height="wrap_content"> diff --git a/src/org/kiwix/kiwixmobile/BookmarkItem.java b/src/org/kiwix/kiwixmobile/BookmarkItem.java index c2a013f92..471f59021 100644 --- a/src/org/kiwix/kiwixmobile/BookmarkItem.java +++ b/src/org/kiwix/kiwixmobile/BookmarkItem.java @@ -1,58 +1,58 @@ -package org.kiwix.kiwixmobile; - -import android.support.v7.widget.RecyclerView; -import android.view.View; -import android.widget.TextView; - -import com.mikepenz.fastadapter.items.AbstractItem; - -import java.util.List; - -/** - * Created by EladKeyshawn on 03/02/2017. - */ - -public class BookmarkItem extends AbstractItem { - - private String title; - private String url; - public BookmarkItem(String title,String url) { - this.title = title; - this.url = url; - } - - - public String getTitle() { - return title; - } - - public String getUrl() { - return url; - } - - @Override - public int getType() { - return 0; - } - - @Override - public int getLayoutRes() { - return R.layout.bookmarks_row; - } - - @Override - public void bindView(ViewHolder holder) { - super.bindView(holder); - holder.titleTextView.setText(title); - } - - static class ViewHolder extends RecyclerView.ViewHolder { - - TextView titleTextView; - public ViewHolder(View view) { - super(view); - this.titleTextView = (TextView) view.findViewById(R.id.bookmark_title); - } - } - -} +//package org.kiwix.kiwixmobile; +// +//import android.support.v7.widget.RecyclerView; +//import android.view.View; +//import android.widget.TextView; +// +//import com.mikepenz.fastadapter.items.AbstractItem; +// +//import java.util.List; +// +///** +// * Created by EladKeyshawn on 03/02/2017. +// */ +// +//public class BookmarkItem extends AbstractItem { +// +// private String title; +// private String url; +// public BookmarkItem(String title,String url) { +// this.title = title; +// this.url = url; +// } +// +// +// public String getTitle() { +// return title; +// } +// +// public String getUrl() { +// return url; +// } +// +// @Override +// public int getType() { +// return 0; +// } +// +// @Override +// public int getLayoutRes() { +// return R.layout.bookmarks_row; +// } +// +// @Override +// public void bindView(ViewHolder holder) { +// super.bindView(holder); +// holder.titleTextView.setText(title); +// } +// +// static class ViewHolder extends RecyclerView.ViewHolder { +// +// TextView titleTextView; +// public ViewHolder(View view) { +// super(view); +// this.titleTextView = (TextView) view.findViewById(R.id.bookmark_title); +// } +// } +// +//} diff --git a/src/org/kiwix/kiwixmobile/BookmarksActivity.java b/src/org/kiwix/kiwixmobile/BookmarksActivity.java index fa6990aa6..129081969 100644 --- a/src/org/kiwix/kiwixmobile/BookmarksActivity.java +++ b/src/org/kiwix/kiwixmobile/BookmarksActivity.java @@ -28,19 +28,22 @@ import android.provider.Settings; import android.support.design.widget.CoordinatorLayout; import android.support.design.widget.Snackbar; import android.support.v7.app.AppCompatActivity; -import android.support.v7.view.ActionMode; -import android.support.v7.widget.LinearLayoutManager; -import android.support.v7.widget.RecyclerView; import android.support.v7.widget.Toolbar; +import android.util.SparseBooleanArray; +import android.view.ActionMode; +import android.view.LayoutInflater; import android.view.Menu; +import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; +import android.widget.AbsListView; +import android.widget.AdapterView; +import android.widget.ArrayAdapter; import android.widget.LinearLayout; - -import com.mikepenz.fastadapter.FastAdapter; -import com.mikepenz.fastadapter.adapters.ItemAdapter; -import com.mikepenz.fastadapter_extensions.ActionModeHelper; +import android.widget.ListView; +import android.widget.RelativeLayout; +import android.widget.TextView; import org.kiwix.kiwixmobile.database.BookmarksDao; import org.kiwix.kiwixmobile.database.KiwixDatabase; @@ -48,17 +51,20 @@ import org.kiwix.kiwixmobile.utils.DimenUtils; import java.util.ArrayList; -public class BookmarksActivity extends AppCompatActivity { - private ArrayList bookmarksTitles; +public class BookmarksActivity extends AppCompatActivity + implements AdapterView.OnItemClickListener { + + private SparseBooleanArray sparseBooleanArray; + private ArrayList bookmarks; private ArrayList bookmarkUrls; - private RecyclerView bookmarksRecyclerview; + private ArrayList tempContents; + private ListView bookmarksList; + private ArrayAdapter adapter; + private ArrayList selected; + private int numOfSelected; private CoordinatorLayout snackbarLayout; private LinearLayout noBookmarksLayout; private BookmarksDao bookmarksDao; - FastAdapter fastAdapter; - ItemAdapter bookmarkItemAdapter; - private ArrayList bookmarkItems; - private ActionModeHelper actionModeHelper; @Override protected void onCreate(Bundle savedInstanceState) { @@ -70,113 +76,121 @@ public class BookmarksActivity extends AppCompatActivity { setContentView(R.layout.activity_bookmarks); 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); - setUpFastAdapter(savedInstanceState); - } - - private void setUpFastAdapter(Bundle savedInstanceState) { - bookmarkItems = new ArrayList<>(); - bookmarkItemAdapter = new ItemAdapter<>(); - fastAdapter = new FastAdapter<>(); - fastAdapter.withSavedInstanceState(savedInstanceState); - - ActionBarCallBack actionBarCallBack = new ActionBarCallBack(); - actionModeHelper = new ActionModeHelper(fastAdapter, R.menu.menu_bookmarks, actionBarCallBack ); - - fastAdapter.withSelectable(true); - fastAdapter.withSelectOnLongClick(true); - fastAdapter.withMultiSelect(true); - fastAdapter.withSelectOnLongClick(true); - fastAdapter.withOnPreClickListener((v, adapter, item, position) -> { - Boolean res = actionModeHelper.onClick(item); - return res != null && !res; - }); - fastAdapter.withOnClickListener((v, adapter, item, position) -> { - if (actionModeHelper.getActionMode() == null) { - goToBookmark(position); - } else { - actionModeHelper.getActionMode().setTitle(Integer.toString(fastAdapter.getSelectedItems().size())); - } - return false; - }); - - fastAdapter.withOnPreLongClickListener((v, adapter12, item, position) -> { - ActionMode actionMode = actionModeHelper.onLongClick(BookmarksActivity.this, position); - if (actionMode!=null){ - actionModeHelper.getActionMode().setTitle(Integer.toString(fastAdapter.getSelectedItems().size())); - } - return actionMode != null; - }); - - - bookmarksRecyclerview = (RecyclerView) findViewById(R.id.bookmarks_list); - bookmarksRecyclerview.setLayoutManager(new LinearLayoutManager(this)); - - bookmarksDao = new BookmarksDao(KiwixDatabase.getInstance(this)); - bookmarksTitles = bookmarksDao.getBookmarkTitles(ZimContentProvider.getId(), ZimContentProvider.getName()); + bookmarks = bookmarksDao.getBookmarkTitles(ZimContentProvider.getId(), ZimContentProvider.getName()); bookmarkUrls = bookmarksDao.getBookmarks(ZimContentProvider.getId(), ZimContentProvider.getName()); - bookmarksRecyclerview.setAdapter(bookmarkItemAdapter.wrap(fastAdapter)); - addDataToBookmarkItems(); + 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); + } + }; + 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.setOnItemClickListener(this); } - private void goToBookmark(int position) { - Intent intent = new Intent(this, KiwixMobileActivity.class); - if (!bookmarkItems.get(position).getUrl().equals("null")) { - intent.putExtra("choseXURL", bookmarkItems.get(position).getUrl()); - } else { - intent.putExtra("choseXTitle", bookmarkItems.get(position).getTitle()); - } - intent.putExtra("bookmarkClicked", true); - int value = Settings.System.getInt(getContentResolver(), Settings.System.ALWAYS_FINISH_ACTIVITIES, 0); - if (value == 1) { - startActivity(intent); - finish(); - } else { - setResult(RESULT_OK, intent); - finish(); - } - } - - - private void addDataToBookmarkItems() { - for (int i = 0; i < bookmarksTitles.size(); i++) { - bookmarkItems.add(new BookmarkItem(bookmarksTitles.get(i), bookmarkUrls.get(i)).withSelectable(true)); - } - bookmarkItemAdapter.add(bookmarkItems); - bookmarkItemAdapter.notifyDataSetChanged(); - } - - private void setNoBookmarksState() { - if (fastAdapter.getItemCount() == 0) { + if (bookmarksList.getCount() == 0) { noBookmarksLayout.setVisibility(View.VISIBLE); } else { noBookmarksLayout.setVisibility(View.GONE); } } - private void popDeleteBookmarksSnackbar(int numOfSelected) { + 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() { - for (BookmarkItem item: fastAdapter.getSelectedItems()) { - deleteBookmark(item.getUrl()); - bookmarkItems.remove(item); + sparseBooleanArray = bookmarksList.getCheckedItemPositions(); + tempContents = new ArrayList<>(bookmarks); + for (int i = sparseBooleanArray.size() - 1; i >= 0; i--) { + deleteBookmark(bookmarkUrls.get(sparseBooleanArray.keyAt(i))); + bookmarks.remove(sparseBooleanArray.keyAt(i)); + bookmarkUrls.remove(sparseBooleanArray.keyAt(i)); } - bookmarkItemAdapter.clear(); - bookmarkItemAdapter.add(bookmarkItems); - fastAdapter.notifyDataSetChanged(); + adapter.notifyDataSetChanged(); setNoBookmarksState(); } @@ -184,6 +198,12 @@ public class BookmarksActivity extends AppCompatActivity { bookmarksDao.deleteBookmark(article, ZimContentProvider.getId(), ZimContentProvider.getName()); } + /*private void refreshBookmarksList() { + bookmarks.clear(); + bookmarks = bookmarksDao.getBookmarks(); + adapter.notifyDataSetChanged(); + setNoBookmarksState(); + }*/ private void setUpToolbar() { Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); @@ -196,15 +216,25 @@ public class BookmarksActivity extends AppCompatActivity { toolbar.setNavigationOnClickListener(v -> onBackPressed()); } - @Override - protected void onSaveInstanceState(Bundle outState) { - //add the values which need to be saved from the adapter to the bundle - outState = fastAdapter.saveInstanceState(outState); - super.onSaveInstanceState(outState); + public void onItemClick(AdapterView parent, View view, int position, long id) { + Intent intent = new Intent(this, KiwixMobileActivity.class); + if (!bookmarkUrls.get(position).equals("null")) { + intent.putExtra("choseXURL", bookmarkUrls.get(position)); + } else { + intent.putExtra("choseXTitle", bookmarks.get(position)); + } + intent.putExtra("bookmarkClicked", true); + int value = Settings.System.getInt(getContentResolver(), Settings.System.ALWAYS_FINISH_ACTIVITIES, 0); + if (value == 1) { + startActivity(intent); + finish(); + } else { + setResult(RESULT_OK, intent); + finish(); + } } - @Override public void onBackPressed() { int value = Settings.System.getInt(getContentResolver(), Settings.System.ALWAYS_FINISH_ACTIVITIES, 0); @@ -215,34 +245,9 @@ public class BookmarksActivity extends AppCompatActivity { startActivity(startIntent); } else { // we have a parent activity waiting... - setResult(RESULT_OK, startIntent); + setResult(RESULT_OK,startIntent ); finish(); } } - - class ActionBarCallBack implements ActionMode.Callback { - @Override - public boolean onCreateActionMode(ActionMode mode, Menu menu) { - return true; - } - - @Override - public boolean onActionItemClicked(ActionMode mode, MenuItem item) { - deleteSelectedItems(); - mode.finish(); - return true; - } - - - @Override - public void onDestroyActionMode(ActionMode mode) { - } - - @Override - public boolean onPrepareActionMode(ActionMode mode, Menu menu) { - return false; - } - } - }