/*
* Copyright (C) 2012 Alex Kuiper
*
* This file is part of PageTurner
*
* PageTurner is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* PageTurner is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with PageTurner. If not, see <http://www.gnu.org/licenses/>.*
*/
package net.nightwhistler.pageturner.activity;
import android.content.Intent;
import android.os.Build;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.MotionEvent;
import android.view.View;
import android.widget.ExpandableListView;
import com.google.inject.Inject;
import net.nightwhistler.pageturner.Configuration;
import net.nightwhistler.pageturner.R;
import net.nightwhistler.pageturner.fragment.ReadingFragment;
import net.nightwhistler.pageturner.view.NavigationCallback;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import roboguice.inject.InjectFragment;
import java.util.ArrayList;
import java.util.List;
import static jedi.functional.FunctionalPrimitives.forEach;
public class ReadingActivity extends PageTurnerActivity {
@InjectFragment(R.id.fragment_reading)
private ReadingFragment readingFragment;
@Inject
private Configuration config;
private static final Logger LOG = LoggerFactory
.getLogger("ReadingActivity");
private int searchIndex = -1;
@Override
protected int getMainLayoutResource() {
return R.layout.activity_reading;
}
@Override
public void onDrawerClosed(View view) {
getSupportActionBar().setTitle(R.string.app_name);
super.onDrawerClosed(view);
}
@Override
protected void initDrawerItems( ExpandableListView expandableListView ) {
super.initDrawerItems( expandableListView );
if ( expandableListView == null ) {
return;
}
if ( this.readingFragment != null ) {
if ( readingFragment.hasSearchResults() ) {
List<NavigationCallback> searchCallbacks =
this.readingFragment.getSearchResults();
getAdapter().findGroup(this.searchIndex).match(
s -> forEach(searchCallbacks, s::addChild),
() -> LOG.error("Could not find Search drawer item!"));
}
}
}
protected List<NavigationCallback> getMenuItems( Configuration config ) {
List<NavigationCallback> menuItems = new ArrayList<>();
//Add in a blank item to get the spacing right
if ( Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB && config.isFullScreenEnabled() ) {
menuItems.add( new NavigationCallback("") );
menuItems.add( new NavigationCallback("") );
}
String nowReading = getString( R.string.now_reading, config.getLastReadTitle() );
NavigationCallback readingCallback = new NavigationCallback(nowReading);
menuItems.add( readingCallback );
if ( this.readingFragment != null ) {
if ( this.readingFragment.hasTableOfContents() ) {
NavigationCallback tocCallback = new NavigationCallback(getString(R.string.toc_label));
readingCallback.addChild(tocCallback);
tocCallback.addChildren( readingFragment.getTableOfContents() );
}
if ( this.readingFragment.hasHighlights() ) {
NavigationCallback highlightsCallback = new NavigationCallback(getString(R.string.highlights));
readingCallback.addChild( highlightsCallback );
highlightsCallback.addChildren( readingFragment.getHighlights() );
}
if ( this.readingFragment.hasSearchResults() ) {
menuItems.add( new NavigationCallback(getString(R.string.search_results)));
this.searchIndex = menuItems.size() - 1;
}
if ( this.readingFragment.hasBookmarks() ) {
NavigationCallback bookmarksCallback = new NavigationCallback(getString(R.string.bookmarks));
readingCallback.addChild( bookmarksCallback );
bookmarksCallback.addChildren( readingFragment.getBookmarks() );
}
}
menuItems.add( new NavigationCallback(getString(R.string.open_library))
.setOnClick(() -> launchActivity(LibraryActivity.class)));
menuItems.add( new NavigationCallback(getString(R.string.download))
.setOnClick(() -> launchActivity(CatalogActivity.class)));
menuItems.add( new NavigationCallback(getString(R.string.prefs)).setOnClick(this::startPreferences));
return menuItems;
}
@Override
protected void startPreferences() {
if ( readingFragment != null ) {
this.readingFragment.saveConfigState();
}
Intent intent = new Intent(this, PageTurnerPrefsActivity.class);
startActivity(intent);
}
@Override
protected int getTheme(Configuration config) {
int theme = config.getTheme();
if ( config.isFullScreenEnabled() ) {
if (config.getColourProfile() == Configuration.ColourProfile.NIGHT) {
theme = R.style.DarkFullScreen;
} else {
theme = R.style.LightFullScreen;
}
}
return theme;
}
@Override
protected void onCreatePageTurnerActivity(Bundle savedInstanceState) {
Class<? extends PageTurnerActivity> lastActivityClass = config.getLastActivity();
if ( !config.isAlwaysOpenLastBook() && lastActivityClass != null
&& lastActivityClass != ReadingActivity.class
&& getIntent().getData() == null ) {
Intent intent = new Intent(this, lastActivityClass);
startActivity(intent);
finish();
}
}
@Override
public boolean onSearchRequested() {
readingFragment.onSearchRequested();
return true;
}
@Override
public void onWindowFocusChanged(boolean hasFocus) {
readingFragment.onWindowFocusChanged(hasFocus);
}
public void onMediaButtonEvent(View view) {
this.readingFragment.onMediaButtonEvent(view.getId());
}
@Override
public boolean onTouchEvent(MotionEvent event) {
return readingFragment.onTouchEvent(event);
}
@Override
public boolean dispatchKeyEvent(KeyEvent event) {
int action = event.getAction();
int keyCode = event.getKeyCode();
if ( action == KeyEvent.ACTION_DOWN && keyCode == KeyEvent.KEYCODE_BACK && isDrawerOpen() ) {
closeNavigationDrawer();
return true;
}
if ( readingFragment.dispatchKeyEvent(event) ) {
return true;
}
return super.dispatchKeyEvent(event);
}
@Override
protected void beforeLaunchActivity() {
readingFragment.saveReadingPosition();
readingFragment.getBookView().releaseResources();
}
}