package org.ebookdroid.ui.viewer.adapters; import org.sufficientlysecure.viewer.R; import org.ebookdroid.common.settings.SettingsManager; import org.ebookdroid.common.settings.books.BookSettings; import org.ebookdroid.common.settings.books.Bookmark; import org.ebookdroid.core.Page; import org.ebookdroid.core.PageIndex; import org.ebookdroid.ui.viewer.views.BookmarkView; import android.content.Context; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.ProgressBar; import android.widget.TextView; import java.util.Collections; import org.emdev.ui.actions.IActionController; public final class BookmarkAdapter extends BaseAdapter { public final BookSettings bookSettings; final IActionController<?> actions; final Page lastPage; final Bookmark start; final Bookmark end; final Context context; public BookmarkAdapter(final Context context, final IActionController<?> actions, final Page lastPage, final BookSettings bookSettings) { this.context = context; this.actions = actions; this.lastPage = lastPage; this.bookSettings = bookSettings; this.start = new Bookmark(true, context.getString(R.string.bookmark_start), PageIndex.FIRST, 0, 0); this.end = new Bookmark(true, context.getString(R.string.bookmark_end), PageIndex.LAST, 0, 1); Collections.sort(bookSettings.bookmarks); } public void add(final Bookmark... bookmarks) { for (final Bookmark bookmark : bookmarks) { bookSettings.bookmarks.add(bookmark); } Collections.sort(bookSettings.bookmarks); SettingsManager.storeBookSettings(bookSettings); notifyDataSetChanged(); } public void update(Bookmark b) { Collections.sort(bookSettings.bookmarks); SettingsManager.storeBookSettings(bookSettings); notifyDataSetInvalidated(); } public void remove(final Bookmark b) { if (!b.service) { bookSettings.bookmarks.remove(b); SettingsManager.storeBookSettings(bookSettings); notifyDataSetChanged(); } } public void clear() { bookSettings.bookmarks.clear(); SettingsManager.storeBookSettings(bookSettings); notifyDataSetChanged(); } @Override public int getCount() { return 2 + bookSettings.bookmarks.size(); } public boolean hasUserBookmarks() { return !bookSettings.bookmarks.isEmpty(); } @Override public Object getItem(final int index) { return getBookmark(index); } public Bookmark getBookmark(final int index) { if (index == 0) { return start; } if (index - 1 < bookSettings.bookmarks.size()) { return bookSettings.bookmarks.get(index - 1); } return end; } @Override public long getItemId(final int index) { return index; } @Override public View getView(final int index, View itemView, final ViewGroup parent) { if (itemView == null) { itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.bookmark, parent, false); final BookmarkView text = (BookmarkView) itemView.findViewById(R.id.bookmarkName); text.setActions(actions); final ProgressBar bar = (ProgressBar) itemView.findViewById(R.id.bookmarkPage); bar.setProgressDrawable(context.getResources().getDrawable(R.drawable.viewer_goto_dlg_progress)); } final Bookmark b = getBookmark(index); final TextView text = (TextView) itemView.findViewById(R.id.bookmarkName); text.setText(b.name); text.setTag(b); final ProgressBar bar = (ProgressBar) itemView.findViewById(R.id.bookmarkPage); bar.setMax(lastPage != null ? lastPage.index.viewIndex : 0); bar.setProgress(b.page.viewIndex); final View btn = itemView.findViewById(R.id.bookmark_remove); if (b.service) { btn.setVisibility(View.GONE); } else { btn.setVisibility(View.VISIBLE); btn.setOnClickListener(actions.getOrCreateAction(R.id.actions_showDeleteBookmarkDlg)); btn.setTag(b); } return itemView; } }