mirror of
https://github.com/geometer/FBReaderJ.git
synced 2025-10-03 01:39:18 +02:00
package size if 13% less :)
This commit is contained in:
parent
5edff43e87
commit
4ea38a40bb
11 changed files with 87 additions and 222 deletions
|
@ -5,6 +5,8 @@
|
|||
* No OutOfMemoryErrors in image loading
|
||||
* Float series index parsing has been fixed
|
||||
* Separate color for visited hyperlinks (original code by Steffen Siebert)
|
||||
* Removed menubar.xml: menu list is moved into the code
|
||||
* Proguard obfuscation has been added; package size decreased
|
||||
|
||||
===== 0.99.18 (Mar 15, 2011) =====
|
||||
* Web-free icon
|
||||
|
|
|
@ -1,16 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<menubar>
|
||||
<item id="library"/>
|
||||
<item id="networkLibrary"/>
|
||||
<item id="toc"/>
|
||||
<item id="bookmarks"/>
|
||||
<item id="night"/>
|
||||
<item id="day"/>
|
||||
<item id="search"/>
|
||||
<item id="preferences"/>
|
||||
<item id="bookInfo"/>
|
||||
<item id="rotate"/>
|
||||
<item id="increaseFont"/>
|
||||
<item id="decreaseFont"/>
|
||||
<item id="navigate"/>
|
||||
</menubar>
|
|
@ -10,3 +10,4 @@
|
|||
# Project target.
|
||||
target=android-8
|
||||
java.encoding=utf-8
|
||||
proguard.config=proguard.cfg
|
||||
|
|
33
proguard.cfg
Executable file
33
proguard.cfg
Executable file
|
@ -0,0 +1,33 @@
|
|||
-optimizationpasses 5
|
||||
-dontusemixedcaseclassnames
|
||||
-dontskipnonpubliclibraryclasses
|
||||
-dontpreverify
|
||||
-verbose
|
||||
-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*
|
||||
|
||||
-keep public class * extends android.app.Activity
|
||||
-keep public class * extends android.app.Application
|
||||
-keep public class * extends android.app.Service
|
||||
-keep public class * extends android.content.BroadcastReceiver
|
||||
-keep public class * extends android.content.ContentProvider
|
||||
|
||||
-keepclasseswithmembernames class * {
|
||||
native <methods>;
|
||||
}
|
||||
|
||||
-keepclasseswithmembernames class * {
|
||||
public <init>(android.content.Context, android.util.AttributeSet);
|
||||
}
|
||||
|
||||
-keepclasseswithmembernames class * {
|
||||
public <init>(android.content.Context, android.util.AttributeSet, int);
|
||||
}
|
||||
|
||||
-keepclassmembers enum * {
|
||||
public static **[] values();
|
||||
public static ** valueOf(java.lang.String);
|
||||
}
|
||||
|
||||
-keep class * implements android.os.Parcelable {
|
||||
public static final android.os.Parcelable$Creator *;
|
||||
}
|
|
@ -73,7 +73,7 @@ public final class FBReader extends ZLAndroidActivity {
|
|||
@Override
|
||||
public void onCreate(Bundle icicle) {
|
||||
super.onCreate(icicle);
|
||||
final ZLAndroidApplication application = ZLAndroidApplication.Instance();
|
||||
final ZLAndroidApplication application = (ZLAndroidApplication)getApplication();
|
||||
myFullScreenFlag =
|
||||
application.ShowStatusBarOption.getValue() ? 0 : WindowManager.LayoutParams.FLAG_FULLSCREEN;
|
||||
getWindow().setFlags(
|
||||
|
@ -91,7 +91,7 @@ public final class FBReader extends ZLAndroidActivity {
|
|||
fbReader.addAction(ActionCode.SHOW_LIBRARY, new ShowLibraryAction(this, fbReader));
|
||||
fbReader.addAction(ActionCode.SHOW_PREFERENCES, new ShowPreferencesAction(this, fbReader));
|
||||
fbReader.addAction(ActionCode.SHOW_BOOK_INFO, new ShowBookInfoAction(this, fbReader));
|
||||
fbReader.addAction(ActionCode.SHOW_CONTENTS, new ShowTOCAction(this, fbReader));
|
||||
fbReader.addAction(ActionCode.SHOW_TOC, new ShowTOCAction(this, fbReader));
|
||||
fbReader.addAction(ActionCode.SHOW_BOOKMARKS, new ShowBookmarksAction(this, fbReader));
|
||||
fbReader.addAction(ActionCode.SHOW_NETWORK_LIBRARY, new ShowNetworkLibraryAction(this, fbReader));
|
||||
|
||||
|
@ -106,7 +106,7 @@ public final class FBReader extends ZLAndroidActivity {
|
|||
|
||||
@Override
|
||||
public boolean onPrepareOptionsMenu(Menu menu) {
|
||||
final ZLAndroidApplication application = ZLAndroidApplication.Instance();
|
||||
final ZLAndroidApplication application = (ZLAndroidApplication)getApplication();
|
||||
if (!application.ShowStatusBarOption.getValue() &&
|
||||
application.ShowStatusBarWhenMenuIsActiveOption.getValue()) {
|
||||
getWindow().addFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN);
|
||||
|
@ -117,7 +117,7 @@ public final class FBReader extends ZLAndroidActivity {
|
|||
@Override
|
||||
public void onOptionsMenuClosed(Menu menu) {
|
||||
super.onOptionsMenuClosed(menu);
|
||||
final ZLAndroidApplication application = ZLAndroidApplication.Instance();
|
||||
final ZLAndroidApplication application = (ZLAndroidApplication)getApplication();
|
||||
if (!application.ShowStatusBarOption.getValue() &&
|
||||
application.ShowStatusBarWhenMenuIsActiveOption.getValue()) {
|
||||
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN);
|
||||
|
@ -161,7 +161,7 @@ public final class FBReader extends ZLAndroidActivity {
|
|||
@Override
|
||||
public void onStart() {
|
||||
super.onStart();
|
||||
final ZLAndroidApplication application = ZLAndroidApplication.Instance();
|
||||
final ZLAndroidApplication application = (ZLAndroidApplication)getApplication();
|
||||
|
||||
final int fullScreenFlag =
|
||||
application.ShowStatusBarOption.getValue() ? 0 : WindowManager.LayoutParams.FLAG_FULLSCREEN;
|
||||
|
@ -252,4 +252,35 @@ public final class FBReader extends ZLAndroidActivity {
|
|||
public void navigate() {
|
||||
ourNavigatePanel.runNavigation();
|
||||
}
|
||||
|
||||
private void addMenuItem(Menu menu, String actionId, int iconId) {
|
||||
final ZLAndroidApplication application = (ZLAndroidApplication)getApplication();
|
||||
application.myMainWindow.addMenuItem(menu, actionId, iconId);
|
||||
}
|
||||
|
||||
private void addMenuItem(Menu menu, String actionId) {
|
||||
final ZLAndroidApplication application = (ZLAndroidApplication)getApplication();
|
||||
application.myMainWindow.addMenuItem(menu, actionId, null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onCreateOptionsMenu(Menu menu) {
|
||||
super.onCreateOptionsMenu(menu);
|
||||
final ZLAndroidApplication application = (ZLAndroidApplication)getApplication();
|
||||
addMenuItem(menu, ActionCode.SHOW_LIBRARY, R.drawable.ic_menu_library);
|
||||
addMenuItem(menu, ActionCode.SHOW_NETWORK_LIBRARY, R.drawable.ic_menu_networklibrary);
|
||||
addMenuItem(menu, ActionCode.SHOW_TOC, R.drawable.ic_menu_toc);
|
||||
addMenuItem(menu, ActionCode.SHOW_BOOKMARKS, R.drawable.ic_menu_bookmarks);
|
||||
addMenuItem(menu, ActionCode.SWITCH_TO_NIGHT_PROFILE, R.drawable.ic_menu_night);
|
||||
addMenuItem(menu, ActionCode.SWITCH_TO_DAY_PROFILE, R.drawable.ic_menu_day);
|
||||
addMenuItem(menu, ActionCode.SEARCH, R.drawable.ic_menu_search);
|
||||
addMenuItem(menu, ActionCode.SHOW_PREFERENCES);
|
||||
addMenuItem(menu, ActionCode.SHOW_BOOK_INFO);
|
||||
addMenuItem(menu, ActionCode.ROTATE);
|
||||
addMenuItem(menu, ActionCode.INCREASE_FONT);
|
||||
addMenuItem(menu, ActionCode.DECREASE_FONT);
|
||||
addMenuItem(menu, ActionCode.SHOW_NAVIGATION);
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -23,7 +23,7 @@ public interface ActionCode {
|
|||
String SHOW_LIBRARY = "library";
|
||||
String SHOW_PREFERENCES = "preferences";
|
||||
String SHOW_BOOK_INFO = "bookInfo";
|
||||
String SHOW_CONTENTS = "toc";
|
||||
String SHOW_TOC = "toc";
|
||||
String SHOW_BOOKMARKS = "bookmarks";
|
||||
String SHOW_NETWORK_LIBRARY = "networkLibrary";
|
||||
|
||||
|
|
|
@ -22,7 +22,6 @@ package org.geometerplus.zlibrary.core.application;
|
|||
import java.util.*;
|
||||
|
||||
import org.geometerplus.zlibrary.core.filesystem.*;
|
||||
import org.geometerplus.zlibrary.core.resources.ZLResource;
|
||||
import org.geometerplus.zlibrary.core.view.ZLView;
|
||||
import org.geometerplus.zlibrary.core.xml.ZLStringMap;
|
||||
import org.geometerplus.zlibrary.core.xml.ZLXMLReaderAdapter;
|
||||
|
@ -42,17 +41,10 @@ public abstract class ZLApplication {
|
|||
private ZLView myView;
|
||||
|
||||
private final HashMap<String,ZLAction> myIdToActionMap = new HashMap<String,ZLAction>();
|
||||
private Menubar myMenubar;
|
||||
//private ZLTime myLastKeyActionTime;
|
||||
|
||||
protected ZLApplication() {
|
||||
ourInstance = this;
|
||||
|
||||
new MenubarCreator().read(ZLResourceFile.createResourceFile("default/menubar.xml"));
|
||||
}
|
||||
|
||||
final Menubar getMenubar() {
|
||||
return myMenubar;
|
||||
}
|
||||
|
||||
protected final void setView(ZLView view) {
|
||||
|
@ -72,7 +64,6 @@ public abstract class ZLApplication {
|
|||
}
|
||||
|
||||
public void initWindow() {
|
||||
myWindow.init();
|
||||
setView(myView);
|
||||
}
|
||||
|
||||
|
@ -216,146 +207,6 @@ public abstract class ZLApplication {
|
|||
return (myWindow != null) ? myWindow.getBatteryLevel() : 0;
|
||||
}
|
||||
|
||||
//Menu
|
||||
static class Menu {
|
||||
public interface Item {
|
||||
}
|
||||
|
||||
private final ArrayList<Item> myItems = new ArrayList<Item>();
|
||||
private final ZLResource myResource;
|
||||
|
||||
Menu(ZLResource resource) {
|
||||
myResource = resource;
|
||||
}
|
||||
|
||||
ZLResource getResource() {
|
||||
return myResource;
|
||||
}
|
||||
|
||||
void addItem(String actionId) {
|
||||
myItems.add(new Menubar.PlainItem(myResource.getResource(actionId)));
|
||||
}
|
||||
|
||||
Menubar.Submenu addSubmenu(String key) {
|
||||
Menubar.Submenu submenu = new Menubar.Submenu(myResource.getResource(key));
|
||||
myItems.add(submenu);
|
||||
return submenu;
|
||||
}
|
||||
|
||||
int size() {
|
||||
return myItems.size();
|
||||
}
|
||||
|
||||
Item getItem(int index) {
|
||||
return (Item)myItems.get(index);
|
||||
}
|
||||
}
|
||||
|
||||
//MenuBar
|
||||
public static final class Menubar extends Menu {
|
||||
public static final class PlainItem implements Item {
|
||||
private final ZLResource myResource;
|
||||
|
||||
public PlainItem(ZLResource resource) {
|
||||
myResource = resource;
|
||||
}
|
||||
|
||||
public String getActionId() {
|
||||
return myResource.Name;
|
||||
}
|
||||
|
||||
public String getTitle() {
|
||||
return myResource.getValue();
|
||||
}
|
||||
};
|
||||
|
||||
public static final class Submenu extends Menu implements Item {
|
||||
public Submenu(ZLResource resource) {
|
||||
super(resource);
|
||||
}
|
||||
|
||||
public String getMenuName() {
|
||||
return getResource().getValue();
|
||||
}
|
||||
};
|
||||
|
||||
public Menubar() {
|
||||
super(ZLResource.resource("menu"));
|
||||
}
|
||||
}
|
||||
|
||||
//MenuVisitor
|
||||
static public abstract class MenuVisitor {
|
||||
public final void processMenu(ZLApplication application) {
|
||||
if (application.myMenubar != null) {
|
||||
processMenu(application.myMenubar);
|
||||
}
|
||||
}
|
||||
|
||||
private final void processMenu(Menu menu) {
|
||||
final int size = menu.size();
|
||||
for (int i = 0; i < size; ++i) {
|
||||
final Menu.Item item = menu.getItem(i);
|
||||
if (item instanceof Menubar.PlainItem) {
|
||||
processItem((Menubar.PlainItem)item);
|
||||
} else if (item instanceof Menubar.Submenu) {
|
||||
Menubar.Submenu submenu = (Menubar.Submenu)item;
|
||||
processSubmenuBeforeItems(submenu);
|
||||
processMenu(submenu);
|
||||
processSubmenuAfterItems(submenu);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
protected abstract void processSubmenuBeforeItems(Menubar.Submenu submenu);
|
||||
protected abstract void processSubmenuAfterItems(Menubar.Submenu submenu);
|
||||
protected abstract void processItem(Menubar.PlainItem item);
|
||||
}
|
||||
|
||||
private class MenubarCreator extends ZLXMLReaderAdapter {
|
||||
private static final String ITEM = "item";
|
||||
private static final String SUBMENU = "submenu";
|
||||
|
||||
private final ArrayList<Menubar.Submenu> mySubmenuStack = new ArrayList<Menubar.Submenu>();
|
||||
|
||||
@Override
|
||||
public boolean dontCacheAttributeValues() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean startElementHandler(String tag, ZLStringMap attributes) {
|
||||
if (myMenubar == null) {
|
||||
myMenubar = new Menubar();
|
||||
}
|
||||
final ArrayList<Menubar.Submenu> stack = mySubmenuStack;
|
||||
final Menu menu = stack.isEmpty() ? myMenubar : (Menu)stack.get(stack.size() - 1);
|
||||
if (ITEM == tag) {
|
||||
final String id = attributes.getValue("id");
|
||||
if (id != null) {
|
||||
menu.addItem(id);
|
||||
}
|
||||
} else if (SUBMENU == tag) {
|
||||
final String id = attributes.getValue("id");
|
||||
if (id != null) {
|
||||
stack.add(menu.addSubmenu(id));
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean endElementHandler(String tag) {
|
||||
if (SUBMENU == tag) {
|
||||
final ArrayList<Menubar.Submenu> stack = mySubmenuStack;
|
||||
if (!stack.isEmpty()) {
|
||||
stack.remove(stack.size() - 1);
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
private Timer myTimer;
|
||||
private final HashMap<Runnable,Long> myTimerTaskPeriods = new HashMap<Runnable,Long>();
|
||||
private final HashMap<Runnable,TimerTask> myTimerTasks = new HashMap<Runnable,TimerTask>();
|
||||
|
|
|
@ -31,11 +31,6 @@ abstract public class ZLApplicationWindow {
|
|||
return myApplication;
|
||||
}
|
||||
|
||||
protected void init() {
|
||||
initMenu();
|
||||
}
|
||||
|
||||
abstract protected void initMenu();
|
||||
abstract protected void refreshMenu();
|
||||
|
||||
abstract protected void repaintView();
|
||||
|
|
|
@ -26,6 +26,7 @@ import android.view.MenuItem;
|
|||
|
||||
import org.geometerplus.zlibrary.core.application.ZLApplication;
|
||||
import org.geometerplus.zlibrary.core.application.ZLApplicationWindow;
|
||||
import org.geometerplus.zlibrary.core.resources.ZLResource;
|
||||
|
||||
import org.geometerplus.zlibrary.ui.android.view.ZLAndroidWidget;
|
||||
import org.geometerplus.zlibrary.ui.android.library.ZLAndroidLibrary;
|
||||
|
@ -34,39 +35,12 @@ import org.geometerplus.zlibrary.ui.android.library.ZLAndroidApplication;
|
|||
import org.geometerplus.zlibrary.ui.android.R;
|
||||
|
||||
public final class ZLAndroidApplicationWindow extends ZLApplicationWindow {
|
||||
private final HashMap<MenuItem,ZLApplication.Menubar.PlainItem> myMenuItemMap =
|
||||
new HashMap<MenuItem,ZLApplication.Menubar.PlainItem>();
|
||||
|
||||
private class MenuBuilder extends ZLApplication.MenuVisitor {
|
||||
private int myItemCount = Menu.FIRST;
|
||||
private final Stack<Menu> myMenuStack = new Stack<Menu>();
|
||||
|
||||
private MenuBuilder(Menu menu) {
|
||||
myMenuStack.push(menu);
|
||||
}
|
||||
protected void processSubmenuBeforeItems(ZLApplication.Menubar.Submenu submenu) {
|
||||
myMenuStack.push(myMenuStack.peek().addSubMenu(0, myItemCount++, Menu.NONE, submenu.getMenuName()));
|
||||
}
|
||||
protected void processSubmenuAfterItems(ZLApplication.Menubar.Submenu submenu) {
|
||||
myMenuStack.pop();
|
||||
}
|
||||
protected void processItem(ZLApplication.Menubar.PlainItem item) {
|
||||
MenuItem menuItem = myMenuStack.peek().add(0, myItemCount++, Menu.NONE, item.getTitle());
|
||||
try {
|
||||
final String fieldName = "ic_menu_" + item.getActionId().toLowerCase();
|
||||
menuItem.setIcon(R.drawable.class.getField(fieldName).getInt(null));
|
||||
} catch (NoSuchFieldException e) {
|
||||
} catch (IllegalAccessException e) {
|
||||
}
|
||||
menuItem.setOnMenuItemClickListener(myMenuListener);
|
||||
myMenuItemMap.put(menuItem, item);
|
||||
}
|
||||
}
|
||||
private final HashMap<MenuItem,String> myMenuItemMap = new HashMap<MenuItem,String>();
|
||||
|
||||
private final MenuItem.OnMenuItemClickListener myMenuListener =
|
||||
new MenuItem.OnMenuItemClickListener() {
|
||||
public boolean onMenuItemClick(MenuItem item) {
|
||||
getApplication().doAction(myMenuItemMap.get(item).getActionId());
|
||||
getApplication().doAction(myMenuItemMap.get(item));
|
||||
return true;
|
||||
}
|
||||
};
|
||||
|
@ -75,24 +49,25 @@ public final class ZLAndroidApplicationWindow extends ZLApplicationWindow {
|
|||
super(application);
|
||||
}
|
||||
|
||||
public void buildMenu(Menu menu) {
|
||||
new MenuBuilder(menu).processMenu(getApplication());
|
||||
refreshMenu();
|
||||
public void addMenuItem(Menu menu, String actionId, Integer iconId) {
|
||||
final ZLResource resource = ZLResource.resource("menu");
|
||||
final MenuItem menuItem = menu.add(resource.getResource(actionId).getValue());
|
||||
if (iconId != null) {
|
||||
menuItem.setIcon(iconId);
|
||||
}
|
||||
menuItem.setOnMenuItemClickListener(myMenuListener);
|
||||
myMenuItemMap.put(menuItem, actionId);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void refreshMenu() {
|
||||
for (Map.Entry<MenuItem,ZLApplication.Menubar.PlainItem> entry : myMenuItemMap.entrySet()) {
|
||||
final String actionId = entry.getValue().getActionId();
|
||||
for (Map.Entry<MenuItem,String> entry : myMenuItemMap.entrySet()) {
|
||||
final String actionId = entry.getValue();
|
||||
final ZLApplication application = getApplication();
|
||||
entry.getKey().setVisible(application.isActionVisible(actionId) && application.isActionEnabled(actionId));
|
||||
}
|
||||
}
|
||||
|
||||
public void initMenu() {
|
||||
// TODO: implement
|
||||
}
|
||||
|
||||
protected void repaintView() {
|
||||
final ZLAndroidWidget widget =
|
||||
((ZLAndroidLibrary)ZLAndroidLibrary.Instance()).getWidget();
|
||||
|
|
|
@ -219,13 +219,6 @@ public abstract class ZLAndroidActivity extends Activity {
|
|||
return (ZLAndroidLibrary)ZLAndroidLibrary.Instance();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onCreateOptionsMenu(final Menu menu) {
|
||||
super.onCreateOptionsMenu(menu);
|
||||
((ZLAndroidApplication)getApplication()).myMainWindow.buildMenu(menu);
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onKeyDown(int keyCode, KeyEvent event) {
|
||||
View view = findViewById(R.id.main_view);
|
||||
|
|
|
@ -56,7 +56,7 @@ public class ZLAndroidApplication extends Application {
|
|||
"PD_Novel".equals(Build.MODEL);
|
||||
}
|
||||
|
||||
ZLAndroidApplicationWindow myMainWindow;
|
||||
public ZLAndroidApplicationWindow myMainWindow;
|
||||
|
||||
@Override
|
||||
public void onCreate() {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue