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;
- }
- }
-
}