package com.yamin.reader.activity; import java.lang.reflect.Field; import java.util.ArrayList; import java.util.LinkedList; import java.util.List; import org.geometerplus.android.fbreader.NavigationPopup; import org.geometerplus.android.fbreader.PopupPanel; import org.geometerplus.android.fbreader.ProcessHyperlinkAction; import org.geometerplus.android.fbreader.RunPluginAction; import org.geometerplus.android.fbreader.SearchAction; import org.geometerplus.android.fbreader.SelectionBookmarkAction; import org.geometerplus.android.fbreader.SelectionCopyAction; import org.geometerplus.android.fbreader.SelectionHidePanelAction; import org.geometerplus.android.fbreader.SelectionPopup; import org.geometerplus.android.fbreader.SelectionShareAction; import org.geometerplus.android.fbreader.SelectionShowPanelAction; import org.geometerplus.android.fbreader.SetScreenOrientationAction; import org.geometerplus.android.fbreader.ShareBookAction; import org.geometerplus.android.fbreader.ShowBookmarksAction; import org.geometerplus.android.fbreader.ShowLibraryAction; import org.geometerplus.android.fbreader.ShowNavigationAction; import org.geometerplus.android.fbreader.ShowPreferencesAction; import org.geometerplus.android.fbreader.ShowTOCAction; import org.geometerplus.android.fbreader.TextSearchPopup; import org.geometerplus.android.fbreader.api.ApiListener; import org.geometerplus.android.fbreader.api.ApiServerImplementation; import org.geometerplus.android.fbreader.api.PluginApi; import org.geometerplus.android.fbreader.libraryService.BookCollectionShadow; import org.geometerplus.android.util.UIUtil; import org.geometerplus.fbreader.book.Book; import org.geometerplus.fbreader.book.Bookmark; import org.geometerplus.fbreader.book.SerializerUtil; import org.geometerplus.fbreader.bookmodel.BookModel; import org.geometerplus.fbreader.fbreader.ActionCode; import org.geometerplus.fbreader.fbreader.ChangeFontSizeAction; import org.geometerplus.fbreader.fbreader.ColorProfile; import org.geometerplus.fbreader.fbreader.FBReaderApp; import org.geometerplus.fbreader.fbreader.FBRreshAction; import org.geometerplus.fbreader.fbreader.SwitchProfileAction; import org.geometerplus.zlibrary.core.filesystem.ZLFile; import org.geometerplus.zlibrary.core.library.ZLibrary; import org.geometerplus.zlibrary.core.options.ZLEnumOption; import org.geometerplus.zlibrary.core.options.ZLIntegerRangeOption; import org.geometerplus.zlibrary.core.view.ZLView; import org.geometerplus.zlibrary.text.view.ZLTextView; import org.geometerplus.zlibrary.text.view.style.ZLTextStyleCollection; import org.geometerplus.zlibrary.ui.android.application.ZLAndroidApplicationWindow; import org.geometerplus.zlibrary.ui.android.library.ZLAndroidApplication; import org.geometerplus.zlibrary.ui.android.library.ZLAndroidLibrary; import org.geometerplus.zlibrary.ui.android.view.AndroidFontUtil; import org.geometerplus.zlibrary.ui.android.view.ZLAndroidWidget; import android.app.Activity; import android.app.SearchManager; import android.content.BroadcastReceiver; import android.content.ContentResolver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.content.res.Configuration; import android.graphics.drawable.ColorDrawable; import android.net.Uri; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.os.PowerManager; import android.util.Log; import android.view.KeyEvent; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import android.view.Window; import android.view.WindowManager; import android.view.animation.AnimationUtils; import android.widget.AdapterView; import android.widget.ArrayAdapter; import android.widget.CompoundButton; import android.widget.CompoundButton.OnCheckedChangeListener; import android.widget.Gallery; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.PopupWindow; import android.widget.RelativeLayout; import android.widget.ScrollView; import android.widget.SeekBar; import android.widget.Spinner; import android.widget.Toast; import com.yamin.reader.R; import com.yamin.reader.adapter.PopGalleryAdapter; import com.yamin.reader.database.DbDataOperation; import com.yamin.reader.utils.ToolUtils; import com.yamin.reader.view.SwitchButton; /** * * @ClassName: CoreReadActivity * @Description: TODO(这里用一句话描述这个类的作用) 基于开源的FBREADERJ1.8.2 * @author ymcao * @date 2013-6-24 下午8:27:04 * */ public class CoreReadActivity extends Activity { public static final String ACTION_OPEN_BOOK = "android.easyreader.action.VIEW"; public static final String BOOK_KEY = "esayreader.book"; public static final String BOOKMARK_KEY = "esayreader.bookmark"; public static final String BOOK_PATH_KEY = "esayreader.book.path"; public static final int REQUEST_PREFERENCES = 1; public static final int REQUEST_CANCEL_MENU = 2; private static final int NIGHT_UPDATEUI = 0; private static final int DAY_UPDATEUI = 1; private static final int GREEN_UPDATEUI = 2; private static final int BROWN_UPDATEUI = 3; public static final int RESULT_DO_NOTHING = RESULT_FIRST_USER; public static final int RESULT_REPAINT = RESULT_FIRST_USER + 1; private static final String PLUGIN_ACTION_PREFIX = "___"; private ZLIntegerRangeOption option; ZLEnumOption<ZLView.Animation> animoption; private Gallery bgGallery; private boolean isNight = false; // PopupWindow mPopuwindow; private ImageView bookMarksButton; private ImageView fontBigButton; private ImageView fontSmallButton; private ImageView bookTocButton; private ImageView bookMoreButton; private ImageView bookHomeButton; private ImageView bookSearchButton; private RelativeLayout topLL; private LinearLayout bottomLL; private SeekBar brightness_slider; private SwitchButton dayornightSwitch; private ScrollView popuMenuLL; private LinearLayout navigation_settings; Spinner animSpinner; private ContentResolver resolver; private final List<PluginApi.ActionInfo> myPluginActions = new LinkedList<PluginApi.ActionInfo>(); private final BroadcastReceiver myPluginInfoReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { final ArrayList<PluginApi.ActionInfo> actions = getResultExtras( true).<PluginApi.ActionInfo> getParcelableArrayList( PluginApi.PluginInfo.KEY); if (actions != null) { synchronized (myPluginActions) { int index = 0; while (index < myPluginActions.size()) { myFBReaderApp.removeAction(PLUGIN_ACTION_PREFIX + index++); } myPluginActions.addAll(actions); index = 0; for (PluginApi.ActionInfo info : myPluginActions) { myFBReaderApp.addAction(PLUGIN_ACTION_PREFIX + index++, new RunPluginAction(CoreReadActivity.this, myFBReaderApp, info.getId())); } } } } }; private Handler mHandler = new Handler() { @Override public void handleMessage(Message msg) { // TODO Auto-generated method stub switch (msg.what) { case NIGHT_UPDATEUI: topLL.setBackgroundColor(getResources().getColor(R.color.black)); bottomLL.setBackgroundColor(getResources().getColor( R.color.black)); if (mPopuwindow != null && mPopuwindow.isShowing()) { popuMenuLL.setBackground(getResources().getDrawable( R.drawable.popup_menu_0)); } animSpinner.setBackground(getResources().getDrawable( R.drawable.button_spinner_dark)); break; case DAY_UPDATEUI: topLL.setBackgroundColor(getResources().getColor( R.color.main_bg_1)); bottomLL.setBackgroundColor(getResources().getColor( R.color.main_bg_1)); if (mPopuwindow != null && mPopuwindow.isShowing()) { popuMenuLL.setBackground(getResources().getDrawable( R.drawable.popup_menu_1)); } animSpinner.setBackground(getResources().getDrawable( R.drawable.button_spinner_light)); break; case BROWN_UPDATEUI: myFBReaderApp.runAction(ActionCode.SWITCH_TO_BG3, new SwitchProfileAction(myFBReaderApp, ColorProfile.THIRD)); myFBReaderApp.runAction(ActionCode.JUST_REFRESH, new FBRreshAction(myFBReaderApp, 0)); topLL.setBackgroundColor(getResources().getColor( R.color.main_bg_3)); bottomLL.setBackgroundColor(getResources().getColor( R.color.main_bg_3)); if (mPopuwindow != null && mPopuwindow.isShowing()) { popuMenuLL.setBackground(getResources().getDrawable( R.drawable.popup_menu_3)); } break; case GREEN_UPDATEUI: myFBReaderApp.runAction(ActionCode.SWITCH_TO_BG2, new SwitchProfileAction(myFBReaderApp, ColorProfile.SECOND)); myFBReaderApp.runAction(ActionCode.JUST_REFRESH, new FBRreshAction(myFBReaderApp, 0)); topLL.setBackgroundColor(getResources().getColor( R.color.main_bg_2)); bottomLL.setBackgroundColor(getResources().getColor( R.color.main_bg_2)); if (mPopuwindow != null && mPopuwindow.isShowing()) { popuMenuLL.setBackground(getResources().getDrawable( R.drawable.popup_menu_2)); } break; } super.handleMessage(msg); } }; /* * */ public static void openBookActivity(Context context, Book book, Bookmark bookmark) { context.startActivity(new Intent(context, CoreReadActivity.class) .setAction(ACTION_OPEN_BOOK) .putExtra(BOOK_KEY, SerializerUtil.serialize(book)) .putExtra(BOOKMARK_KEY, SerializerUtil.serialize(bookmark)) .addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)); } private static ZLAndroidLibrary getZLibrary() { return (ZLAndroidLibrary) ZLAndroidLibrary.Instance(); } private FBReaderApp myFBReaderApp; private volatile Book myBook; private RelativeLayout myRootView; private ZLAndroidWidget myMainView; private boolean isBottomAndTopMenuShow = false; private int myFullScreenFlag; private synchronized void openBook(Intent intent, Runnable action, boolean force) { if (!force && myBook != null) { return; } myBook = SerializerUtil .deserializeBook(intent.getStringExtra(BOOK_KEY)); final Bookmark bookmark = SerializerUtil.deserializeBookmark(intent .getStringExtra(BOOKMARK_KEY)); if (myBook == null) { final Uri data = intent.getData(); if (data != null) { this.myBook = createBookForFile(ZLFile.createFileByPath(data .getPath())); } } myFBReaderApp.openBook(myBook, bookmark, action); } public Book createBookForFile(ZLFile file) { if (file == null) { return null; } Book book = myFBReaderApp.Collection.getBookByFile(file); if (book != null) { return book; } if (file.isArchive()) { for (ZLFile child : file.children()) { book = myFBReaderApp.Collection.getBookByFile(child); if (book != null) { return book; } } } return null; } @Override protected void onCreate(Bundle icicle) { super.onCreate(icicle); // Thread.setDefaultUncaughtExceptionHandler(new // UncaughtExceptionHandler( // this)); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.core_main); setDefaultKeyMode(DEFAULT_KEYS_SEARCH_LOCAL); getZLibrary().setActivity(CoreReadActivity.this); resolver = getContentResolver(); // final ZLAndroidLibrary zlibrary = (ZLAndroidLibrary) ZLibrary .Instance(); myFullScreenFlag = zlibrary.ShowStatusBarOption.getValue() ? 0 : WindowManager.LayoutParams.FLAG_FULLSCREEN; getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, myFullScreenFlag); // option = ZLTextStyleCollection.Instance().getBaseStyle().FontSizeOption; // myFBReaderApp = (FBReaderApp) FBReaderApp.Instance(); if (myFBReaderApp == null) { myFBReaderApp = new FBReaderApp(CoreReadActivity.this, new BookCollectionShadow()); } getCollection().bindToService(this, null); myBook = null; final ZLAndroidApplication androidApplication = (ZLAndroidApplication) getApplication(); if (androidApplication.myMainWindow == null) { androidApplication.myMainWindow = new ZLAndroidApplicationWindow( myFBReaderApp); myFBReaderApp.initWindow(); } if (myFBReaderApp.getPopupById(TextSearchPopup.ID) == null) { new TextSearchPopup(myFBReaderApp); } if (myFBReaderApp.getPopupById(NavigationPopup.ID) == null) { new NavigationPopup(myFBReaderApp); } if (myFBReaderApp.getPopupById(SelectionPopup.ID) == null) { new SelectionPopup(myFBReaderApp); } myFBReaderApp.addAction(ActionCode.SHOW_LIBRARY, new ShowLibraryAction( this, myFBReaderApp)); myFBReaderApp.addAction(ActionCode.SHOW_PREFERENCES, new ShowPreferencesAction(this, myFBReaderApp)); myFBReaderApp.addAction(ActionCode.SHOW_TOC, new ShowTOCAction(this, myFBReaderApp)); myFBReaderApp.addAction(ActionCode.SHOW_BOOKMARKS, new ShowBookmarksAction(this, myFBReaderApp)); myFBReaderApp.addAction(ActionCode.SHOW_NAVIGATION, new ShowNavigationAction(this, myFBReaderApp)); myFBReaderApp.addAction(ActionCode.SEARCH, new SearchAction(this, myFBReaderApp)); myFBReaderApp.addAction(ActionCode.SHARE_BOOK, new ShareBookAction( this, myFBReaderApp)); myFBReaderApp.addAction(ActionCode.SELECTION_SHOW_PANEL, new SelectionShowPanelAction(this, myFBReaderApp)); myFBReaderApp.addAction(ActionCode.SELECTION_HIDE_PANEL, new SelectionHidePanelAction(this, myFBReaderApp)); myFBReaderApp.addAction(ActionCode.SELECTION_COPY_TO_CLIPBOARD, new SelectionCopyAction(this, myFBReaderApp)); myFBReaderApp.addAction(ActionCode.SELECTION_SHARE, new SelectionShareAction(this, myFBReaderApp)); myFBReaderApp.addAction(ActionCode.SELECTION_BOOKMARK, new SelectionBookmarkAction(this, myFBReaderApp)); myFBReaderApp.addAction(ActionCode.PROCESS_HYPERLINK, new ProcessHyperlinkAction(this, myFBReaderApp)); myFBReaderApp.addAction(ActionCode.SET_SCREEN_ORIENTATION_SYSTEM, new SetScreenOrientationAction(this, myFBReaderApp, ZLibrary.SCREEN_ORIENTATION_SYSTEM)); myFBReaderApp.addAction(ActionCode.SET_SCREEN_ORIENTATION_SENSOR, new SetScreenOrientationAction(this, myFBReaderApp, ZLibrary.SCREEN_ORIENTATION_SENSOR)); myFBReaderApp.addAction(ActionCode.SET_SCREEN_ORIENTATION_PORTRAIT, new SetScreenOrientationAction(this, myFBReaderApp, ZLibrary.SCREEN_ORIENTATION_PORTRAIT)); myFBReaderApp.addAction(ActionCode.SET_SCREEN_ORIENTATION_LANDSCAPE, new SetScreenOrientationAction(this, myFBReaderApp, ZLibrary.SCREEN_ORIENTATION_LANDSCAPE)); if (ZLibrary.Instance().supportsAllOrientations()) { myFBReaderApp.addAction( ActionCode.SET_SCREEN_ORIENTATION_REVERSE_PORTRAIT, new SetScreenOrientationAction(this, myFBReaderApp, ZLibrary.SCREEN_ORIENTATION_REVERSE_PORTRAIT)); myFBReaderApp.addAction( ActionCode.SET_SCREEN_ORIENTATION_REVERSE_LANDSCAPE, new SetScreenOrientationAction(this, myFBReaderApp, ZLibrary.SCREEN_ORIENTATION_REVERSE_LANDSCAPE)); } initView(); setListener(); } /* * Init UI View */ public void initView() { myRootView = (RelativeLayout) findViewById(R.id.root_view); myMainView = (ZLAndroidWidget) findViewById(R.id.main_view); // topLL = (RelativeLayout) findViewById(R.id.topMenuLL); bottomLL = (LinearLayout) findViewById(R.id.bottomMenuLL); animSpinner = (Spinner) findViewById(R.id.animSpinner); ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource( this, R.array.spinner_anim, R.layout.spinner_item_print); adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); animSpinner.setAdapter(adapter); if(myFBReaderApp.PageTurningOptions.Animation.getValue().equals(ZLView.Animation.curl)){ animSpinner.setSelection(0); } else if(myFBReaderApp.PageTurningOptions.Animation.getValue().equals(ZLView.Animation.slide)){ animSpinner.setSelection(1); } else if(myFBReaderApp.PageTurningOptions.Animation.getValue().equals(ZLView.Animation.shift)){ animSpinner.setSelection(2); } bookMoreButton = (ImageView) findViewById(R.id.bookMoreButton); // ----------------------------------------- bookMarksButton = (ImageView) findViewById(R.id.bookMarkButton); fontBigButton = (ImageView) findViewById(R.id.fontsizeBigButton); fontSmallButton = (ImageView) findViewById(R.id.fontsizeSmallButton); bookHomeButton = (ImageView) findViewById(R.id.bookHomeButton); bookSearchButton = (ImageView) findViewById(R.id.bookSearchButton); bookTocButton = (ImageView) findViewById(R.id.bookTocButton); // if (myFBReaderApp.getColorProfileName() != null && myFBReaderApp.getColorProfileName().equals( ColorProfile.NIGHT)) { topLL.setBackgroundColor(getResources().getColor(R.color.black)); bottomLL.setBackgroundColor(getResources().getColor(R.color.black)); } else { if (myFBReaderApp.getColorProfileName() != null && myFBReaderApp.getColorProfileName().equals( ColorProfile.SECOND)) { topLL.setBackgroundColor(getResources().getColor( R.color.main_bg_2)); bottomLL.setBackgroundColor(getResources().getColor( R.color.main_bg_2)); } else if (myFBReaderApp.getColorProfileName() != null && myFBReaderApp.getColorProfileName().equals( ColorProfile.THIRD)) { topLL.setBackgroundColor(getResources().getColor( R.color.main_bg_3)); bottomLL.setBackgroundColor(getResources().getColor( R.color.main_bg_3)); } else { topLL.setBackgroundColor(getResources().getColor( R.color.main_bg_1)); bottomLL.setBackgroundColor(getResources().getColor( R.color.main_bg_1)); } } // } public ZLAndroidWidget getMainView() { return myMainView; } private void setListener() { bookMoreButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub showPopupWindow(bookMoreButton); Log.i("MAIN", "onClick()"); } }); bookTocButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub if (!myFBReaderApp.Model.TOCTree.hasChildren()) { Toast.makeText(CoreReadActivity.this, "本书暂无目录!", Toast.LENGTH_SHORT).show(); } myFBReaderApp.runAction(ActionCode.SHOW_TOC, new ShowTOCAction( CoreReadActivity.this, myFBReaderApp)); } }); bookMarksButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub myFBReaderApp.runAction(ActionCode.SHOW_BOOKMARKS, new ShowBookmarksAction(CoreReadActivity.this, myFBReaderApp)); } }); fontBigButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub if (option.getValue() <= 55) { myFBReaderApp.runAction(ActionCode.INCREASE_FONT, new ChangeFontSizeAction(myFBReaderApp, +2)); } } }); fontSmallButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub if (option.getValue() >= 30) { myFBReaderApp.runAction(ActionCode.DECREASE_FONT, new ChangeFontSizeAction(myFBReaderApp, -2)); } } }); bookHomeButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub backPress(); } }); bookSearchButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub myFBReaderApp.runAction(ActionCode.SEARCH, new SearchAction( CoreReadActivity.this, myFBReaderApp)); } }); animSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2, long arg3) { // TODO Auto-generated method stub switch (arg2) { default: case 0: myFBReaderApp.PageTurningOptions.Animation.setValue(ZLView.Animation.curl); break; case 1: myFBReaderApp.PageTurningOptions.Animation.setValue(ZLView.Animation.slide); break; case 2: myFBReaderApp.PageTurningOptions.Animation.setValue(ZLView.Animation.shift); break; } myFBReaderApp.getViewWidget().repaint(); } @Override public void onNothingSelected(AdapterView<?> arg0) { // TODO Auto-generated method stub } }); } @Override protected void onNewIntent(final Intent intent) { Log.i("TAG", "onNewIntent()"); final String action = intent.getAction(); final Uri data = intent.getData(); if ((intent.getFlags() & Intent.FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY) != 0) { super.onNewIntent(intent); } else if (Intent.ACTION_VIEW.equals(action) && data != null && "fbreader-action".equals(data.getScheme())) { myFBReaderApp.runAction(data.getEncodedSchemeSpecificPart(), data.getFragment()); } else if (ACTION_OPEN_BOOK.equals(action)) { getCollection().bindToService(this, new Runnable() { public void run() { Log.i("TAG", "openBook()"); openBook(intent, null, true); } }); } else if (Intent.ACTION_SEARCH.equals(action)) { final String pattern = intent.getStringExtra(SearchManager.QUERY); final Runnable runnable = new Runnable() { public void run() { final TextSearchPopup popup = (TextSearchPopup) myFBReaderApp .getPopupById(TextSearchPopup.ID); popup.initPosition(); myFBReaderApp.TextSearchPatternOption.setValue(pattern); if (myFBReaderApp.getTextView().search(pattern, true, false, false, false) != 0) { runOnUiThread(new Runnable() { public void run() { myFBReaderApp.showPopup(popup.getId()); } }); } else { runOnUiThread(new Runnable() { public void run() { UIUtil.showErrorMessage(CoreReadActivity.this, "textNotFound"); popup.StartPosition = null; } }); } } }; UIUtil.wait("search", runnable, this); } else { super.onNewIntent(intent); } } @Override protected void onStart() { super.onStart(); getCollection().bindToService(this, new Runnable() { public void run() { new Thread() { public void run() { openBook(getIntent(), null, false); myFBReaderApp.getViewWidget().repaint(); } }.start(); myFBReaderApp.getViewWidget().repaint(); } }); initPluginActions(); final ZLAndroidLibrary zlibrary = (ZLAndroidLibrary) ZLibrary .Instance(); final int fullScreenFlag = zlibrary.ShowStatusBarOption.getValue() ? 0 : WindowManager.LayoutParams.FLAG_FULLSCREEN; if (fullScreenFlag != myFullScreenFlag) { finish(); startActivity(new Intent(this, getClass())); } SetScreenOrientationAction.setOrientation(this, zlibrary .getOrientationOption().getValue()); ((PopupPanel) myFBReaderApp.getPopupById(TextSearchPopup.ID)) .setPanelInfo(CoreReadActivity.this, myRootView); ((PopupPanel) myFBReaderApp.getPopupById(NavigationPopup.ID)) .setPanelInfo(CoreReadActivity.this, myRootView); ((PopupPanel) myFBReaderApp.getPopupById(SelectionPopup.ID)) .setPanelInfo(CoreReadActivity.this, myRootView); } @Override public void onWindowFocusChanged(boolean hasFocus) { super.onWindowFocusChanged(hasFocus); switchWakeLock(hasFocus && getZLibrary().BatteryLevelToTurnScreenOffOption.getValue() < myFBReaderApp .getBatteryLevel()); } private void initPluginActions() { synchronized (myPluginActions) { int index = 0; while (index < myPluginActions.size()) { myFBReaderApp.removeAction(PLUGIN_ACTION_PREFIX + index++); } myPluginActions.clear(); } sendOrderedBroadcast(new Intent(PluginApi.ACTION_REGISTER), null, myPluginInfoReceiver, null, RESULT_OK, null, null); } @Override protected void onResume() { super.onResume(); myStartTimer = true; final int brightnessLevel = getZLibrary().ScreenBrightnessLevelOption .getValue(); if (brightnessLevel != 0) { setScreenBrightness(brightnessLevel); } else { setScreenBrightnessAuto(); } if (getZLibrary().DisableButtonLightsOption.getValue()) { setButtonLight(false); } registerReceiver(myBatteryInfoReceiver, new IntentFilter( Intent.ACTION_BATTERY_CHANGED)); PopupPanel.restoreVisibilities(myFBReaderApp); ApiServerImplementation.sendEvent(this, ApiListener.EVENT_READ_MODE_OPENED); getCollection().bindToService(this, new Runnable() { public void run() { final BookModel model = myFBReaderApp.Model; if (model == null || model.Book == null) { return; } onPreferencesUpdate(myFBReaderApp.Collection .getBookById(model.Book.getId())); } }); } @Override protected void onPause() { try { unregisterReceiver(myBatteryInfoReceiver); } catch (IllegalArgumentException e) { // do nothing, this exception means myBatteryInfoReceiver was not // registered } myFBReaderApp.stopTimer(); if (getZLibrary().DisableButtonLightsOption.getValue()) { setButtonLight(true); } if (mPopuwindow != null && mPopuwindow.isShowing()) { mPopuwindow.dismiss(); } super.onPause(); } @Override protected void onStop() { ApiServerImplementation.sendEvent(this, ApiListener.EVENT_READ_MODE_CLOSED); PopupPanel.removeAllWindows(myFBReaderApp, this); Log.i("MAIN", "onStop()"); super.onStop(); } @Override protected void onDestroy() { getCollection().unbind(); // if (mPopuwindow != null && mPopuwindow.isShowing()) { mPopuwindow.dismiss(); } // //backPress(); super.onDestroy(); } @Override public void onLowMemory() { myFBReaderApp.onWindowClosing(); super.onLowMemory(); } @Override public boolean onSearchRequested() { final FBReaderApp.PopupPanel popup = myFBReaderApp.getActivePopup(); myFBReaderApp.hideActivePopup(); final SearchManager manager = (SearchManager) getSystemService(SEARCH_SERVICE); manager.setOnCancelListener(new SearchManager.OnCancelListener() { public void onCancel() { if (popup != null) { myFBReaderApp.showPopup(popup.getId()); } manager.setOnCancelListener(null); } }); startSearch(myFBReaderApp.TextSearchPatternOption.getValue(), true, null, false); return true; } // public void backPress() { int y = myFBReaderApp.getTextView().pagePosition().Current; int z = myFBReaderApp.getTextView().pagePosition().Total; Log.i("MAIN", y + "" + "/" + z + ToolUtils.myPercent(y, z)); DbDataOperation.updateValuesToTable(resolver, "" + ToolUtils.myPercent(y, z), myFBReaderApp.Model.Book.File.getShortName()); Log.i("MAIN", "" + myFBReaderApp.getTextView().getEndCursor()); myFBReaderApp.Collection.storePosition(myBook.getId(), myFBReaderApp .getTextView().getEndCursor()); // startActivity(new Intent(CoreReadActivity.this, MainActivity.class)); CoreReadActivity.this.overridePendingTransition(R.anim.activity_enter, R.anim.activity_exit); CoreReadActivity.this.finish(); } // public void showSelectionPanel() { final ZLTextView view = myFBReaderApp.getTextView(); ((SelectionPopup) myFBReaderApp.getPopupById(SelectionPopup.ID)).move( view.getSelectionStartY(), view.getSelectionEndY()); myFBReaderApp.showPopup(SelectionPopup.ID); } public void hideSelectionPanel() { final FBReaderApp.PopupPanel popup = myFBReaderApp.getActivePopup(); if (popup != null && popup.getId() == SelectionPopup.ID) { myFBReaderApp.hideActivePopup(); } } private void onPreferencesUpdate(Book book) { AndroidFontUtil.clearFontCache(); myFBReaderApp.onBookUpdated(book); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { switch (requestCode) { case REQUEST_CANCEL_MENU: myFBReaderApp.runCancelAction(resultCode - 1); break; } } public void navigate() { // ((NavigationPopup) myFBReaderApp.getPopupById(NavigationPopup.ID)) // .runNavigation(); if (!isBottomAndTopMenuShow) { isBottomAndTopMenuShow = true; topLL.setVisibility(View.VISIBLE); bottomLL.setVisibility(View.VISIBLE); topLL.startAnimation(AnimationUtils.loadAnimation(this, R.anim.layout_enter)); bottomLL.startAnimation(AnimationUtils.loadAnimation(this, R.anim.layout_enter)); } else { isBottomAndTopMenuShow = false; topLL.setVisibility(View.GONE); bottomLL.setVisibility(View.GONE); topLL.startAnimation(AnimationUtils.loadAnimation(this, R.anim.layout_exit)); bottomLL.startAnimation(AnimationUtils.loadAnimation(this, R.anim.layout_exit)); } } @Override public boolean onCreateOptionsMenu(Menu menu) { final ZLAndroidLibrary zlibrary = (ZLAndroidLibrary) ZLibrary .Instance(); if (!zlibrary.isKindleFire() && !zlibrary.ShowStatusBarOption.getValue()) { // getWindow().addFlags( // WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN); } return true; } @Override public boolean onPrepareOptionsMenu(Menu menu) { final ZLAndroidLibrary zlibrary = (ZLAndroidLibrary) ZLibrary .Instance(); if (!zlibrary.isKindleFire() && !zlibrary.ShowStatusBarOption.getValue()) { // getWindow().addFlags( // WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN); } return super.onPrepareOptionsMenu(menu); } @Override public void onOptionsMenuClosed(Menu menu) { super.onOptionsMenuClosed(menu); final ZLAndroidLibrary zlibrary = (ZLAndroidLibrary) ZLibrary .Instance(); if (!zlibrary.isKindleFire() && !zlibrary.ShowStatusBarOption.getValue()) { // getWindow().clearFlags( // WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN); } } @Override public boolean onOptionsItemSelected(MenuItem item) { final ZLAndroidLibrary zlibrary = (ZLAndroidLibrary) ZLibrary .Instance(); if (!zlibrary.isKindleFire() && !zlibrary.ShowStatusBarOption.getValue()) { // getWindow().clearFlags( // WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN); } return super.onOptionsItemSelected(item); } //建议加入onConfigurationChanged回调方法 //注:如果当前Activity没有设置android:configChanges属性,或者是固定横屏或竖屏模式,则不需要加入 @Override public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); } @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) { // backPress(); this.onBackPressed(); return true; } return (myMainView != null && myMainView.onKeyDown(keyCode, event)) || super.onKeyDown(keyCode, event); } private void setButtonLight(boolean enabled) { try { final WindowManager.LayoutParams attrs = getWindow() .getAttributes(); final Class<?> cls = attrs.getClass(); final Field fld = cls.getField("buttonBrightness"); if (fld != null && "float".equals(fld.getType().toString())) { fld.setFloat(attrs, enabled ? -1.0f : 0.0f); getWindow().setAttributes(attrs); } } catch (NoSuchFieldException e) { } catch (IllegalAccessException e) { } } private PowerManager.WakeLock myWakeLock; private boolean myWakeLockToCreate; private boolean myStartTimer; public final void createWakeLock() { if (myWakeLockToCreate) { synchronized (this) { if (myWakeLockToCreate) { myWakeLockToCreate = false; myWakeLock = ((PowerManager) getSystemService(POWER_SERVICE)) .newWakeLock(PowerManager.SCREEN_BRIGHT_WAKE_LOCK, "FBReader"); myWakeLock.acquire(); } } } if (myStartTimer) { myFBReaderApp.startTimer(); myStartTimer = false; } } private final void switchWakeLock(boolean on) { if (on) { if (myWakeLock == null) { myWakeLockToCreate = true; } } else { if (myWakeLock != null) { synchronized (this) { if (myWakeLock != null) { myWakeLock.release(); myWakeLock = null; } } } } } private BroadcastReceiver myBatteryInfoReceiver = new BroadcastReceiver() { public void onReceive(Context context, Intent intent) { final int level = intent.getIntExtra("level", 100); final ZLAndroidApplication application = (ZLAndroidApplication) getApplication(); application.myMainWindow.setBatteryLevel(level); switchWakeLock(hasWindowFocus() && getZLibrary().BatteryLevelToTurnScreenOffOption .getValue() < level); } }; private void setScreenBrightnessAuto() { final WindowManager.LayoutParams attrs = getWindow().getAttributes(); attrs.screenBrightness = -1.0f; getWindow().setAttributes(attrs); } public void setScreenBrightness(int percent) { if (percent < 1) { percent = 10; } else if (percent > 100) { percent = 100; } final WindowManager.LayoutParams attrs = getWindow().getAttributes(); attrs.screenBrightness = percent / 100.0f; getWindow().setAttributes(attrs); getZLibrary().ScreenBrightnessLevelOption.setValue(percent); } public int getScreenBrightness() { final int level = (int) (100 * getWindow().getAttributes().screenBrightness); return (level >= 0) ? level : 50; } private BookCollectionShadow getCollection() { return (BookCollectionShadow) myFBReaderApp.Collection; } /* * @弹出POPU MENU */ public void showPopupWindow(View v) { ScrollView layout = (ScrollView) LayoutInflater.from( CoreReadActivity.this).inflate(R.layout.book_settings, null); brightness_slider = (SeekBar) layout.findViewById(R.id.brightness_slider); int percent = getZLibrary().ScreenBrightnessLevelOption.getValue(); brightness_slider.setProgress(percent); dayornightSwitch = (SwitchButton) layout.findViewById(R.id.main_myslipswitch); // if (myFBReaderApp.getColorProfileName() != null && myFBReaderApp.getColorProfileName().equals( ColorProfile.NIGHT)) { dayornightSwitch.setChecked(true); } else { dayornightSwitch.setChecked(false); } popuMenuLL = (ScrollView) layout.findViewById(R.id.popuMenuBg); if (myFBReaderApp.getColorProfileName() != null && myFBReaderApp.getColorProfileName().equals( ColorProfile.NIGHT)) { popuMenuLL.setBackground(getResources().getDrawable( R.drawable.popup_menu_0)); } else if (myFBReaderApp.getColorProfileName() != null && myFBReaderApp.getColorProfileName().equals( ColorProfile.SECOND)) { popuMenuLL.setBackground(getResources().getDrawable( R.drawable.popup_menu_2)); } else if (myFBReaderApp.getColorProfileName() != null && myFBReaderApp.getColorProfileName().equals( ColorProfile.THIRD)) { popuMenuLL.setBackground(getResources().getDrawable( R.drawable.popup_menu_3)); } else { popuMenuLL.setBackground(getResources().getDrawable( R.drawable.popup_menu_1)); } navigation_settings = (LinearLayout) layout .findViewById(R.id.navigation_settings); bgGallery = (Gallery) layout.findViewById(R.id.bgGallery); // --------------------------------------- mPopuwindow = new PopupWindow(layout, ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT); ColorDrawable cd = new ColorDrawable(-0000); mPopuwindow.setBackgroundDrawable(cd); mPopuwindow.setBackgroundDrawable(cd); mPopuwindow.setOutsideTouchable(true); mPopuwindow.setFocusable(true); // showAsDropDown会把里面的view作为参照物,所以要那满屏幕parent // popupWindow.showAsDropDown(findViewById(R.id.tv_title), x, 10); mPopuwindow.showAsDropDown(v); setPopuListener(); } private void setPopuListener() { // TODO Auto-generated method stub brightness_slider .setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { /** * 拖动条停止拖动的时候调用 */ @Override public void onStopTrackingTouch(SeekBar seekBar) { } /** * 拖动条开始拖动的时候调用 */ @Override public void onStartTrackingTouch(SeekBar seekBar) { } /** * 拖动条进度改变的时候调用 */ @Override public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { setScreenBrightness(progress); } }); dayornightSwitch .setOnCheckedChangeListener(new OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { // TODO Auto-generated method stub if (isChecked) { myFBReaderApp.runAction( ActionCode.SWITCH_TO_NIGHT_PROFILE, new SwitchProfileAction(myFBReaderApp, ColorProfile.NIGHT)); Toast.makeText(CoreReadActivity.this, "夜间模式开启", Toast.LENGTH_SHORT).show(); Message message = new Message(); message.what = NIGHT_UPDATEUI; mHandler.sendMessage(message); isNight = true; } else { myFBReaderApp.runAction( ActionCode.SWITCH_TO_DAY_PROFILE, new SwitchProfileAction(myFBReaderApp, ColorProfile.DAY)); Toast.makeText(CoreReadActivity.this, "白天模式开启", Toast.LENGTH_SHORT).show(); Message message = new Message(); message.what = DAY_UPDATEUI; mHandler.sendMessage(message); isNight = false; } } }); navigation_settings.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub if (mPopuwindow != null && mPopuwindow.isShowing()) { mPopuwindow.dismiss(); } ((NavigationPopup) myFBReaderApp .getPopupById(NavigationPopup.ID)).runNavigation(); } }); final PopGalleryAdapter localPopGalleryAdapter = new PopGalleryAdapter( this, "wallpapers", bgGallery, ((FBReaderApp) FBReaderApp.Instance()).getColorProfile().WallpaperOption .getValue()); bgGallery.setAdapter(localPopGalleryAdapter); if (myFBReaderApp.getColorProfileName() != null && myFBReaderApp.getColorProfileName().equals(ColorProfile.DAY)) { localPopGalleryAdapter.setUserIndex(0); //localPopGalleryAdapter.notifyDataSetChanged(); } else if (myFBReaderApp.getColorProfileName() != null && myFBReaderApp.getColorProfileName().equals( ColorProfile.SECOND)) { localPopGalleryAdapter.setUserIndex(1); //localPopGalleryAdapter.notifyDataSetChanged(); } else { localPopGalleryAdapter.setUserIndex(2); //localPopGalleryAdapter.notifyDataSetChanged(); } if (myFBReaderApp.getColorProfileName() != null && myFBReaderApp.getColorProfileName().equals( ColorProfile.NIGHT)) { isNight = true; } else { isNight = false; } bgGallery.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> paramAdapterView, View paramView, int arg2, long arg3) { // TODO Auto-generated method stub if (!isNight) { localPopGalleryAdapter.setUserIndex(arg2); localPopGalleryAdapter.notifyDataSetChanged(); Message message; switch (arg2) { default: case 0: Log.i("MAIN", "0"); message = new Message(); message.what = DAY_UPDATEUI; mHandler.sendMessage(message); myFBReaderApp.runAction( ActionCode.SWITCH_TO_DAY_PROFILE, new SwitchProfileAction(myFBReaderApp, ColorProfile.DAY)); myFBReaderApp.runAction(ActionCode.JUST_REFRESH, new FBRreshAction(myFBReaderApp, 0)); break; case 1: Log.i("MAIN", "1"); message = new Message(); message.what = GREEN_UPDATEUI; mHandler.sendMessage(message); break; case 2: Log.i("MAIN", "2"); message = new Message(); message.what = BROWN_UPDATEUI; mHandler.sendMessage(message); break; } } } }); } }