package org.ebookdroid.ui.library; import org.emdev.ui.uimanager.UIManagerAppCompat; 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.PageIndex; import org.ebookdroid.ui.library.views.FileBrowserView; import android.os.Bundle; import android.support.v7.widget.Toolbar; import android.view.ContextMenu; import android.view.ContextMenu.ContextMenuInfo; import android.view.KeyEvent; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; import android.view.SubMenu; import android.view.View; import android.widget.AbsListView; import android.widget.AdapterView.AdapterContextMenuInfo; import android.widget.ExpandableListAdapter; import android.widget.ExpandableListView; import android.widget.ExpandableListView.ExpandableListContextMenuInfo; import android.widget.ImageView; import android.widget.TextView; import android.widget.ViewFlipper; import java.io.File; import java.util.ArrayList; import java.util.Collections; import java.util.List; import org.emdev.common.android.AndroidVersion; import org.emdev.ui.AbstractActionActivity; import org.emdev.ui.actions.ActionMenuHelper; import org.emdev.ui.uimanager.IUIManager; import org.emdev.utils.LayoutUtils; import org.emdev.utils.LengthUtils; public class BrowserActivity extends AbstractActionActivity<BrowserActivity, BrowserActivityController> { private static final String CURRENT_DIRECTORY = "currentDirectory"; ViewFlipper viewflipper; public BrowserActivity() { super(false, ON_CREATE); } /** * {@inheritDoc} * * @see org.emdev.ui.AbstractActionActivity#createController() */ @Override protected BrowserActivityController createController() { return new BrowserActivityController(this); } /** * {@inheritDoc} * * @see org.emdev.ui.AbstractActionActivity#onCreateImpl(android.os.Bundle) */ @Override protected void onCreateImpl(final Bundle savedInstanceState) { setContentView(R.layout.browser); Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(toolbar); final BrowserActivityController c = getController(); viewflipper = (ViewFlipper) findViewById(R.id.browserflip); viewflipper.addView(LayoutUtils.fillInParent(viewflipper, new FileBrowserView(c, c.adapter))); } /** * {@inheritDoc} * * @see android.app.Activity#onSaveInstanceState(android.os.Bundle) */ @Override protected void onSaveInstanceState(final Bundle outState) { super.onSaveInstanceState(outState); outState.putString(CURRENT_DIRECTORY, getController().adapter.getCurrentDirectory().getAbsolutePath()); } /** * {@inheritDoc} * * @see android.app.Activity#onCreateOptionsMenu(android.view.Menu) */ @Override public boolean onCreateOptionsMenu(final Menu menu) { final MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.browsermenu, menu); return true; } /** * {@inheritDoc} * * @see org.emdev.ui.AbstractActionActivity#updateMenuItems(android.view.Menu) */ @Override protected void updateMenuItems(final Menu optionsMenu) { final File dir = getController().adapter.getCurrentDirectory(); final boolean hasParent = dir != null ? dir.getParentFile() != null : false; ActionMenuHelper.setMenuItemEnabled(optionsMenu, hasParent, R.id.browserupfolder, R.drawable.browser_actionbar_nav_up_enabled, R.drawable.browser_actionbar_nav_up_disabled); } void setTitle(final File dir) { final String path = dir.getAbsolutePath(); setTitle(path); UIManagerAppCompat.invalidateOptionsMenu(this); } /** * {@inheritDoc} * * @see android.app.Activity#onKeyUp(int, android.view.KeyEvent) */ @Override public boolean onKeyUp(final int keyCode, final KeyEvent event) { if (getController().onKeyUp(keyCode, event)) { return true; } return super.onKeyUp(keyCode, event); } public void showProgress(final boolean show) { runOnUiThread(new Runnable() { @Override public void run() { UIManagerAppCompat.setProgressSpinnerVisible(BrowserActivity.this, show); } }); } /** * {@inheritDoc} * * @see android.app.Activity#onCreateContextMenu(android.view.ContextMenu, android.view.View, android.view.ContextMenu.ContextMenuInfo) */ @Override public void onCreateContextMenu(final ContextMenu menu, final View v, final ContextMenuInfo menuInfo) { final Object source = getContextMenuSource(v, menuInfo); if (source instanceof File) { final File node = (File) source; final String path = node.getAbsolutePath(); if (node.isDirectory()) { createFolderMenu(menu, path); } else { createFileMenu(menu, path); } } ActionMenuHelper.setMenuSource(getController(), menu, source); } protected Object getContextMenuSource(final View v, final ContextMenuInfo menuInfo) { Object source = null; if (menuInfo instanceof AdapterContextMenuInfo) { final AbsListView list = (AbsListView) v; final AdapterContextMenuInfo mi = (AdapterContextMenuInfo) menuInfo; source = list.getAdapter().getItem(mi.position); } else if (menuInfo instanceof ExpandableListContextMenuInfo) { final ExpandableListView list = (ExpandableListView) v; final ExpandableListAdapter adapter = list.getExpandableListAdapter(); final ExpandableListContextMenuInfo mi = (ExpandableListContextMenuInfo) menuInfo; final long pp = mi.packedPosition; final int group = ExpandableListView.getPackedPositionGroup(pp); final int child = ExpandableListView.getPackedPositionChild(pp); if (child >= 0) { source = adapter.getChild(group, child); } else { source = adapter.getGroup(group); } } return source; } protected void createFileMenu(final ContextMenu menu, final String path) { final BookSettings bs = SettingsManager.getBookSettings(path); final MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.book_menu, menu); menu.setHeaderTitle(path); menu.findItem(R.id.bookmenu_recentgroup).setVisible(bs != null); menu.findItem(R.id.bookmenu_openbookshelf).setVisible(false); menu.findItem(R.id.bookmenu_openbookfolder).setVisible(false); final MenuItem om = menu.findItem(R.id.bookmenu_open); final SubMenu osm = om != null ? om.getSubMenu() : null; if (osm == null) { return; } osm.clear(); final List<Bookmark> list = new ArrayList<Bookmark>(); list.add(new Bookmark(true, getString(R.string.bookmark_start), PageIndex.FIRST, 0, 0)); list.add(new Bookmark(true, getString(R.string.bookmark_end), PageIndex.LAST, 0, 1)); if (bs != null) { if (LengthUtils.isNotEmpty(bs.bookmarks)) { list.addAll(bs.bookmarks); } list.add(new Bookmark(true, getString(R.string.bookmark_current), bs.currentPage, bs.offsetX, bs.offsetY)); } Collections.sort(list); for (final Bookmark b : list) { addBookmarkMenuItem(osm, b); } } protected void addBookmarkMenuItem(final Menu menu, final Bookmark b) { final MenuItem bmi = menu.add(R.id.actions_goToBookmarkGroup, R.id.actions_goToBookmark, Menu.NONE, b.name); bmi.setIcon(R.drawable.viewer_menu_bookmark); ActionMenuHelper.setMenuItemExtra(bmi, "bookmark", b); } protected void createFolderMenu(final ContextMenu menu, final String path) { final MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.library_menu, menu); menu.setHeaderTitle(path); } }