From aa69a4f43f27341eb4f13a11177f83d641360a4c Mon Sep 17 00:00:00 2001 From: Nikolay Pultsin Date: Sat, 20 Aug 2011 01:51:12 +0100 Subject: [PATCH] separate package for items --- .../fbreader/network/NetworkBookActions.java | 2 + .../network/NetworkBookInfoActivity.java | 2 + .../network/NetworkCatalogActions.java | 5 +- .../network/NetworkLibraryActivity.java | 103 +++++------------- .../fbreader/network/NetworkTreeActions.java | 2 + .../fbreader/network/SearchItemActions.java | 2 + .../android/fbreader/network/Util.java | 6 +- .../fbreader/network/action/Action.java | 53 +++++++++ .../network/{ => action}/ActionCode.java | 4 +- .../network/action/CatalogAction.java | 34 ++++++ .../fbreader/network/action/RootAction.java | 34 ++++++ .../fbreader/network/action/SignUpAction.java | 56 ++++++++++ 12 files changed, 221 insertions(+), 82 deletions(-) create mode 100644 src/org/geometerplus/android/fbreader/network/action/Action.java rename src/org/geometerplus/android/fbreader/network/{ => action}/ActionCode.java (93%) create mode 100644 src/org/geometerplus/android/fbreader/network/action/CatalogAction.java create mode 100644 src/org/geometerplus/android/fbreader/network/action/RootAction.java create mode 100644 src/org/geometerplus/android/fbreader/network/action/SignUpAction.java diff --git a/src/org/geometerplus/android/fbreader/network/NetworkBookActions.java b/src/org/geometerplus/android/fbreader/network/NetworkBookActions.java index 88c02f8fc..eb73e8b38 100644 --- a/src/org/geometerplus/android/fbreader/network/NetworkBookActions.java +++ b/src/org/geometerplus/android/fbreader/network/NetworkBookActions.java @@ -47,6 +47,8 @@ import org.geometerplus.fbreader.network.tree.NetworkAuthorTree; import org.geometerplus.fbreader.network.tree.NetworkSeriesTree; import org.geometerplus.fbreader.network.authentication.NetworkAuthenticationManager; +import org.geometerplus.android.fbreader.network.action.ActionCode; + class NetworkBookActions extends NetworkTreeActions { public static final int DOWNLOAD_BOOK_ITEM_ID = 0; public static final int DOWNLOAD_DEMO_ITEM_ID = 1; diff --git a/src/org/geometerplus/android/fbreader/network/NetworkBookInfoActivity.java b/src/org/geometerplus/android/fbreader/network/NetworkBookInfoActivity.java index f0a5c92ad..9fe9f8b15 100644 --- a/src/org/geometerplus/android/fbreader/network/NetworkBookInfoActivity.java +++ b/src/org/geometerplus/android/fbreader/network/NetworkBookInfoActivity.java @@ -46,6 +46,8 @@ import org.geometerplus.fbreader.network.*; import org.geometerplus.fbreader.network.tree.NetworkBookTree; import org.geometerplus.fbreader.network.urlInfo.*; +import org.geometerplus.android.fbreader.network.action.ActionCode; + public class NetworkBookInfoActivity extends Activity implements NetworkView.EventListener { private NetworkBookItem myBook; private View myMainView; diff --git a/src/org/geometerplus/android/fbreader/network/NetworkCatalogActions.java b/src/org/geometerplus/android/fbreader/network/NetworkCatalogActions.java index 5069c01d4..5dd7a496f 100644 --- a/src/org/geometerplus/android/fbreader/network/NetworkCatalogActions.java +++ b/src/org/geometerplus/android/fbreader/network/NetworkCatalogActions.java @@ -46,6 +46,8 @@ import org.geometerplus.fbreader.network.tree.NetworkCatalogRootTree; import org.geometerplus.fbreader.network.opds.BasketItem; import org.geometerplus.fbreader.network.urlInfo.UrlInfo; +import org.geometerplus.android.fbreader.network.action.ActionCode; + class NetworkCatalogActions extends NetworkTreeActions { @Override public boolean canHandleTree(NetworkTree tree) { @@ -187,9 +189,6 @@ class NetworkCatalogActions extends NetworkTreeActions { case ActionCode.SIGNIN: Util.runAuthenticationDialog(activity, item.Link, null, null); return true; - case ActionCode.SIGNUP: - Util.runRegistrationDialog(activity, item.Link); - return true; case ActionCode.SIGNOUT: doSignOut(activity, catalogTree); return true; diff --git a/src/org/geometerplus/android/fbreader/network/NetworkLibraryActivity.java b/src/org/geometerplus/android/fbreader/network/NetworkLibraryActivity.java index 83db30ca6..a84f00566 100644 --- a/src/org/geometerplus/android/fbreader/network/NetworkLibraryActivity.java +++ b/src/org/geometerplus/android/fbreader/network/NetworkLibraryActivity.java @@ -50,6 +50,8 @@ import org.geometerplus.fbreader.network.authentication.NetworkAuthenticationMan import org.geometerplus.android.fbreader.tree.BaseActivity; import org.geometerplus.android.fbreader.api.PluginApi; +import org.geometerplus.android.fbreader.network.action.*; + public class NetworkLibraryActivity extends BaseActivity implements NetworkView.EventListener { protected static final int BASIC_AUTHENTICATION_CODE = 1; protected static final int CUSTOM_AUTHENTICATION_CODE = 2; @@ -291,52 +293,6 @@ public class NetworkLibraryActivity extends BaseActivity implements NetworkView. return item; } - private static abstract class Action { - final int Code; - final int IconId; - - private final String myResourceKey; - - Action(int code, String resourceKey, int iconId) { - Code = code; - myResourceKey = resourceKey; - IconId = iconId; - } - - abstract boolean isVisible(NetworkTree tree); - - boolean isEnabled(NetworkTree tree) { - return true; - } - - String getLabel(NetworkTree tree) { - return - NetworkLibrary.resource().getResource("menu").getResource(myResourceKey).getValue(); - } - } - - private static class RootAction extends Action { - RootAction(int code, String resourceKey, int iconId) { - super(code, resourceKey, iconId); - } - - @Override - boolean isVisible(NetworkTree tree) { - return tree instanceof RootTree; - } - } - - private static class CatalogAction extends Action { - CatalogAction(int code, String resourceKey) { - super(code, resourceKey, -1); - } - - @Override - boolean isVisible(NetworkTree tree) { - return tree instanceof NetworkCatalogTree; - } - } - private MenuItem addMenuItem(Menu menu, int index, String resourceKey, int iconId) { final String label = NetworkLibrary.resource().getResource("menu").getResource(resourceKey).getValue(); return menu.add(0, index, Menu.NONE, label).setIcon(iconId); @@ -359,16 +315,24 @@ public class NetworkLibraryActivity extends BaseActivity implements NetworkView. myMenuActions.clear(); myMenuActions.add(new RootAction(ActionCode.SEARCH, "networkSearch", R.drawable.ic_menu_search) { @Override - boolean isEnabled(NetworkTree tree) { + public boolean isEnabled(NetworkTree tree) { return !searchIsInProgress(); } + + @Override + public void run(NetworkTree tree) { + onSearchRequested(); + } + }); + myMenuActions.add(new RootAction(ActionCode.CUSTOM_CATALOG_ADD, "addCustomCatalog", R.drawable.ic_menu_add) { + }); + myMenuActions.add(new RootAction(ActionCode.REFRESH, "refreshCatalogsList", R.drawable.ic_menu_refresh) { + }); + myMenuActions.add(new RootAction(ActionCode.LANGUAGE_FILTER, "languages", R.drawable.ic_menu_languages) { }); - myMenuActions.add(new RootAction(ActionCode.CUSTOM_CATALOG_ADD, "addCustomCatalog", R.drawable.ic_menu_add)); - myMenuActions.add(new RootAction(ActionCode.REFRESH, "refreshCatalogsList", R.drawable.ic_menu_refresh)); - myMenuActions.add(new RootAction(ActionCode.LANGUAGE_FILTER, "languages", R.drawable.ic_menu_languages)); myMenuActions.add(new CatalogAction(ActionCode.RELOAD_CATALOG, "reload") { @Override - boolean isVisible(NetworkTree tree) { + public boolean isVisible(NetworkTree tree) { if (!super.isVisible(tree)) { return false; } @@ -383,7 +347,7 @@ public class NetworkLibraryActivity extends BaseActivity implements NetworkView. }); myMenuActions.add(new CatalogAction(ActionCode.SIGNIN, "signIn") { @Override - boolean isVisible(NetworkTree tree) { + public boolean isVisible(NetworkTree tree) { if (!super.isVisible(tree)) { return false; } @@ -393,24 +357,10 @@ public class NetworkLibraryActivity extends BaseActivity implements NetworkView. return mgr != null && !mgr.mayBeAuthorised(false); } }); - myMenuActions.add(new CatalogAction(ActionCode.SIGNUP, "signUp") { - @Override - boolean isVisible(NetworkTree tree) { - if (!super.isVisible(tree)) { - return false; - } - - final NetworkCatalogItem item = ((NetworkCatalogTree)tree).Item; - final NetworkAuthenticationManager mgr = item.Link.authenticationManager(); - return - mgr != null && - !mgr.mayBeAuthorised(false) && - Util.isRegistrationSupported(NetworkLibraryActivity.this, item.Link); - } - }); + myMenuActions.add(new SignUpAction(this)); myMenuActions.add(new CatalogAction(ActionCode.SIGNOUT, "signOut") { @Override - boolean isVisible(NetworkTree tree) { + public boolean isVisible(NetworkTree tree) { if (!super.isVisible(tree)) { return false; } @@ -421,7 +371,7 @@ public class NetworkLibraryActivity extends BaseActivity implements NetworkView. } @Override - String getLabel(NetworkTree tree) { + public String getLabel(NetworkTree tree) { final NetworkAuthenticationManager mgr = (((NetworkCatalogTree)tree).Item).Link.authenticationManager(); final String userName = @@ -431,7 +381,7 @@ public class NetworkLibraryActivity extends BaseActivity implements NetworkView. }); myMenuActions.add(new CatalogAction(ActionCode.TOPUP, "topup") { @Override - boolean isVisible(NetworkTree tree) { + public boolean isVisible(NetworkTree tree) { if (!super.isVisible(tree)) { return false; } @@ -485,10 +435,16 @@ public class NetworkLibraryActivity extends BaseActivity implements NetworkView. @Override public boolean onOptionsItemSelected(MenuItem item) { - if (getCurrentTree() instanceof RootTree) { + final NetworkTree tree = (NetworkTree)getCurrentTree(); + for (Action a : myMenuActions) { + if (a.Code == item.getItemId()) { + a.run(tree); + break; + } + } + + if (tree instanceof RootTree) { switch (item.getItemId()) { - case ActionCode.SEARCH: - return onSearchRequested(); case ActionCode.CUSTOM_CATALOG_ADD: AddCustomCatalogItemActions.addCustomCatalog(this); return true; @@ -502,7 +458,6 @@ public class NetworkLibraryActivity extends BaseActivity implements NetworkView. return true; } } else { - final NetworkTree tree = (NetworkTree)getCurrentTree(); final NetworkTreeActions actions = NetworkView.Instance().getActions(tree); if (actions != null) { return actions.runAction(this, tree, item.getItemId()); diff --git a/src/org/geometerplus/android/fbreader/network/NetworkTreeActions.java b/src/org/geometerplus/android/fbreader/network/NetworkTreeActions.java index 6090ed84b..adcab6a03 100644 --- a/src/org/geometerplus/android/fbreader/network/NetworkTreeActions.java +++ b/src/org/geometerplus/android/fbreader/network/NetworkTreeActions.java @@ -27,6 +27,8 @@ import android.view.MenuItem; import org.geometerplus.fbreader.network.NetworkLibrary; import org.geometerplus.fbreader.network.NetworkTree; +import org.geometerplus.android.fbreader.network.action.ActionCode; + abstract class NetworkTreeActions { // special values to return from getDefaultActionCode(NetworkTree) protected final String getTitleValue(String key) { diff --git a/src/org/geometerplus/android/fbreader/network/SearchItemActions.java b/src/org/geometerplus/android/fbreader/network/SearchItemActions.java index cc8ade492..73fe641ff 100644 --- a/src/org/geometerplus/android/fbreader/network/SearchItemActions.java +++ b/src/org/geometerplus/android/fbreader/network/SearchItemActions.java @@ -24,6 +24,8 @@ import android.view.ContextMenu; import org.geometerplus.fbreader.network.NetworkTree; import org.geometerplus.fbreader.network.tree.SearchItemTree; +import org.geometerplus.android.fbreader.network.action.ActionCode; + class SearchItemActions extends NetworkTreeActions { private static final int RUN_SEARCH_ITEM_ID = 0; diff --git a/src/org/geometerplus/android/fbreader/network/Util.java b/src/org/geometerplus/android/fbreader/network/Util.java index 4559c1d8b..448283402 100644 --- a/src/org/geometerplus/android/fbreader/network/Util.java +++ b/src/org/geometerplus/android/fbreader/network/Util.java @@ -39,7 +39,7 @@ import org.geometerplus.fbreader.network.urlInfo.UrlInfo; import org.geometerplus.android.util.UIUtil; import org.geometerplus.android.util.PackageUtil; -abstract class Util implements UserRegistrationConstants { +public abstract class Util implements UserRegistrationConstants { private static final String REGISTRATION_ACTION = "android.fbreader.action.NETWORK_LIBRARY_REGISTER"; @@ -47,7 +47,7 @@ abstract class Util implements UserRegistrationConstants { return url != null && PackageUtil.canBeStarted(activity, new Intent(action, Uri.parse(url)), true); } - static boolean isRegistrationSupported(Activity activity, INetworkLink link) { + public static boolean isRegistrationSupported(Activity activity, INetworkLink link) { return testService( activity, REGISTRATION_ACTION, @@ -55,7 +55,7 @@ abstract class Util implements UserRegistrationConstants { ); } - static void runRegistrationDialog(Activity activity, INetworkLink link) { + public static void runRegistrationDialog(Activity activity, INetworkLink link) { try { final Intent intent = new Intent( REGISTRATION_ACTION, diff --git a/src/org/geometerplus/android/fbreader/network/action/Action.java b/src/org/geometerplus/android/fbreader/network/action/Action.java new file mode 100644 index 000000000..5762efc65 --- /dev/null +++ b/src/org/geometerplus/android/fbreader/network/action/Action.java @@ -0,0 +1,53 @@ +/* + * Copyright (C) 2010-2011 Geometer Plus + * + * This program 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 2 of the License, or + * (at your option) any later version. + * + * This program 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 this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA + * 02110-1301, USA. + */ + +package org.geometerplus.android.fbreader.network.action; + +import java.util.*; + +import org.geometerplus.fbreader.network.NetworkTree; +import org.geometerplus.fbreader.network.NetworkLibrary; + +public abstract class Action { + public final int Code; + public final int IconId; + + private final String myResourceKey; + + protected Action(int code, String resourceKey, int iconId) { + Code = code; + myResourceKey = resourceKey; + IconId = iconId; + } + + public abstract boolean isVisible(NetworkTree tree); + + public boolean isEnabled(NetworkTree tree) { + return true; + } + + // TODO: change to abstract + public void run(NetworkTree tree) { + } + + public String getLabel(NetworkTree tree) { + return + NetworkLibrary.resource().getResource("menu").getResource(myResourceKey).getValue(); + } +} diff --git a/src/org/geometerplus/android/fbreader/network/ActionCode.java b/src/org/geometerplus/android/fbreader/network/action/ActionCode.java similarity index 93% rename from src/org/geometerplus/android/fbreader/network/ActionCode.java rename to src/org/geometerplus/android/fbreader/network/action/ActionCode.java index 997832a41..ee96a6a14 100644 --- a/src/org/geometerplus/android/fbreader/network/ActionCode.java +++ b/src/org/geometerplus/android/fbreader/network/action/ActionCode.java @@ -17,9 +17,9 @@ * 02110-1301, USA. */ -package org.geometerplus.android.fbreader.network; +package org.geometerplus.android.fbreader.network.action; -interface ActionCode { +public interface ActionCode { int TREE_SHOW_CONTEXT_MENU = -2; int TREE_NO_ACTION = -1; diff --git a/src/org/geometerplus/android/fbreader/network/action/CatalogAction.java b/src/org/geometerplus/android/fbreader/network/action/CatalogAction.java new file mode 100644 index 000000000..c2e5f5491 --- /dev/null +++ b/src/org/geometerplus/android/fbreader/network/action/CatalogAction.java @@ -0,0 +1,34 @@ +/* + * Copyright (C) 2010-2011 Geometer Plus + * + * This program 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 2 of the License, or + * (at your option) any later version. + * + * This program 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 this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA + * 02110-1301, USA. + */ + +package org.geometerplus.android.fbreader.network.action; + +import org.geometerplus.fbreader.network.NetworkTree; +import org.geometerplus.fbreader.network.tree.NetworkCatalogTree; + +public class CatalogAction extends Action { + protected CatalogAction(int code, String resourceKey) { + super(code, resourceKey, -1); + } + + @Override + public boolean isVisible(NetworkTree tree) { + return tree instanceof NetworkCatalogTree; + } +} diff --git a/src/org/geometerplus/android/fbreader/network/action/RootAction.java b/src/org/geometerplus/android/fbreader/network/action/RootAction.java new file mode 100644 index 000000000..f568e4b2d --- /dev/null +++ b/src/org/geometerplus/android/fbreader/network/action/RootAction.java @@ -0,0 +1,34 @@ +/* + * Copyright (C) 2010-2011 Geometer Plus + * + * This program 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 2 of the License, or + * (at your option) any later version. + * + * This program 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 this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA + * 02110-1301, USA. + */ + +package org.geometerplus.android.fbreader.network.action; + +import org.geometerplus.fbreader.network.NetworkTree; +import org.geometerplus.fbreader.network.tree.RootTree; + +public class RootAction extends Action { + protected RootAction(int code, String resourceKey, int iconId) { + super(code, resourceKey, iconId); + } + + @Override + public boolean isVisible(NetworkTree tree) { + return tree instanceof RootTree; + } +} diff --git a/src/org/geometerplus/android/fbreader/network/action/SignUpAction.java b/src/org/geometerplus/android/fbreader/network/action/SignUpAction.java new file mode 100644 index 000000000..417af1d10 --- /dev/null +++ b/src/org/geometerplus/android/fbreader/network/action/SignUpAction.java @@ -0,0 +1,56 @@ +/* + * Copyright (C) 2010-2011 Geometer Plus + * + * This program 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 2 of the License, or + * (at your option) any later version. + * + * This program 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 this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA + * 02110-1301, USA. + */ + +package org.geometerplus.android.fbreader.network.action; + +import org.geometerplus.fbreader.network.NetworkTree; +import org.geometerplus.fbreader.network.NetworkCatalogItem; +import org.geometerplus.fbreader.network.tree.NetworkCatalogTree; +import org.geometerplus.fbreader.network.authentication.NetworkAuthenticationManager; + +import org.geometerplus.android.fbreader.network.NetworkLibraryActivity; +import org.geometerplus.android.fbreader.network.Util; + +public class SignUpAction extends CatalogAction { + private final NetworkLibraryActivity myActivity; + + public SignUpAction(NetworkLibraryActivity activity) { + super(ActionCode.SIGNUP, "signUp"); + myActivity = activity; + } + + @Override + public boolean isVisible(NetworkTree tree) { + if (!super.isVisible(tree)) { + return false; + } + + final NetworkCatalogItem item = ((NetworkCatalogTree)tree).Item; + final NetworkAuthenticationManager mgr = item.Link.authenticationManager(); + return + mgr != null && + !mgr.mayBeAuthorised(false) && + Util.isRegistrationSupported(myActivity, item.Link); + } + + @Override + public void run(NetworkTree tree) { + Util.runRegistrationDialog(myActivity, (((NetworkCatalogTree)tree).Item).Link); + } +}