1
0
Fork 0
mirror of https://github.com/geometer/FBReaderJ.git synced 2025-10-03 17:59:33 +02:00

package size if 13% less :)

This commit is contained in:
Nikolay Pultsin 2011-03-26 22:23:26 +00:00
parent 5edff43e87
commit 4ea38a40bb
11 changed files with 87 additions and 222 deletions

View file

@ -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

View file

@ -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>

View file

@ -10,3 +10,4 @@
# Project target.
target=android-8
java.encoding=utf-8
proguard.config=proguard.cfg

33
proguard.cfg Executable file
View 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 *;
}

View file

@ -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;
}
}

View file

@ -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";

View file

@ -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>();

View file

@ -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();

View file

@ -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();

View file

@ -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);

View file

@ -56,7 +56,7 @@ public class ZLAndroidApplication extends Application {
"PD_Novel".equals(Build.MODEL);
}
ZLAndroidApplicationWindow myMainWindow;
public ZLAndroidApplicationWindow myMainWindow;
@Override
public void onCreate() {