rolled back to old bookmarks

This commit is contained in:
Elad Keyshawn 2017-02-05 11:16:03 +02:00
parent f5d7f25243
commit e28779f98d
6 changed files with 199 additions and 200 deletions

View File

@ -54,13 +54,6 @@ dependencies {
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'

View File

@ -2,6 +2,6 @@
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<!-- Color when the row is selected -->
<item android:drawable="@android:color/darker_gray" android:state_pressed="false" android:state_selected="true" />
<!-- Standard background color -->
</selector>

View File

@ -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">
<LinearLayout
@ -32,12 +33,11 @@
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.v7.widget.RecyclerView
<ListView
android:id="@+id/bookmarks_list"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="?android:attr/selectableItemBackground"
/>
android:background="?attr/listBackground"/>
<LinearLayout
@ -58,6 +58,7 @@
style="@android:style/TextAppearance.Large"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:gravity="center"
android:paddingBottom="15dp"
android:paddingLeft="10dp"

View File

@ -3,8 +3,7 @@
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:orientation="horizontal"
android:layout_height="wrap_content"
android:background="@drawable/bookmark_row_selector">
android:layout_height="wrap_content">
<LinearLayout
@ -17,6 +16,7 @@
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_margin="15dp"
android:textColor="@drawable/bookmarks_selector"
android:textSize="15sp"
/>

View File

@ -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<BookmarkItem,BookmarkItem.ViewHolder> {
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<BookmarkItem,BookmarkItem.ViewHolder> {
//
// 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);
// }
// }
//
//}

View File

@ -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<String> bookmarksTitles;
public class BookmarksActivity extends AppCompatActivity
implements AdapterView.OnItemClickListener {
private SparseBooleanArray sparseBooleanArray;
private ArrayList<String> bookmarks;
private ArrayList<String> bookmarkUrls;
private RecyclerView bookmarksRecyclerview;
private ArrayList<String> tempContents;
private ListView bookmarksList;
private ArrayAdapter adapter;
private ArrayList<String> selected;
private int numOfSelected;
private CoordinatorLayout snackbarLayout;
private LinearLayout noBookmarksLayout;
private BookmarksDao bookmarksDao;
FastAdapter<BookmarkItem> fastAdapter;
ItemAdapter<BookmarkItem> bookmarkItemAdapter;
private ArrayList<BookmarkItem> 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<String>(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();
}
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());
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 {
intent.putExtra("choseXTitle", bookmarkItems.get(position).getTitle());
mode.setTitle(Integer.toString(numOfSelected));
}
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();
@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 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,14 +216,24 @@ 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() {
@ -220,29 +250,4 @@ public class BookmarksActivity extends AppCompatActivity {
}
}
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;
}
}
}