package org.wikipedia.readinglist; import android.content.Context; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.support.v4.view.ViewCompat; import android.support.v7.widget.PopupMenu; import android.view.MenuItem; import android.view.View; import org.wikipedia.R; import org.wikipedia.concurrency.CallbackTask; import org.wikipedia.page.PageTitle; import org.wikipedia.readinglist.page.ReadingListPage; import org.wikipedia.readinglist.page.database.ReadingListDaoProxy; public class ReadingListBookmarkMenu { public interface Callback { void onAddRequest(@Nullable ReadingListPage page); void onDeleted(@Nullable ReadingListPage page); } @NonNull private final View anchorView; @Nullable private final Callback callback; @Nullable private ReadingListPage page; public ReadingListBookmarkMenu(@NonNull View anchorView, @Nullable Callback callback) { this.anchorView = anchorView; this.callback = callback; } public void show(@NonNull PageTitle title) { ReadingList.DAO.anyListContainsTitleAsync(ReadingListDaoProxy.key(title), new CallbackTask.DefaultCallback<ReadingListPage>() { @Override public void success(@Nullable ReadingListPage page) { if (!ViewCompat.isAttachedToWindow(anchorView)) { return; } ReadingListBookmarkMenu.this.page = page; showMenu(); } }); } private void showMenu() { if (page == null) { return; } Context context = anchorView.getContext(); PopupMenu menu = new PopupMenu(context, anchorView); menu.getMenuInflater().inflate(R.menu.menu_reading_list_page_toggle, menu.getMenu()); menu.setOnMenuItemClickListener(new PageSaveMenuClickListener()); if (page.listKeys().size() == 1) { MenuItem removeItem = menu.getMenu().findItem(R.id.menu_remove_from_lists); removeItem.setTitle(context.getString(R.string.reading_list_remove_from_list, ReadingListDaoProxy.listName((String) page.listKeys().toArray()[0]))); } menu.show(); } private void deleteOrShowDialog(@NonNull Context context) { if (page == null) { return; } new RemoveFromReadingListsDialog(page).deleteOrShowDialog(context, new RemoveFromReadingListsDialog.Callback() { @Override public void onDeleted(@NonNull ReadingListPage page) { if (callback != null) { callback.onDeleted(page); } } }); } private class PageSaveMenuClickListener implements PopupMenu.OnMenuItemClickListener { @Override public boolean onMenuItemClick(MenuItem item) { switch (item.getItemId()) { case R.id.menu_add_to_other_list: if (callback != null) { callback.onAddRequest(page); } return true; case R.id.menu_remove_from_lists: deleteOrShowDialog(anchorView.getContext()); return true; default: return false; } } } }