diff --git a/AndroidManifest.xml b/AndroidManifest.xml index 49c18abc4..e3059f007 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -133,7 +133,7 @@ - + diff --git a/AndroidManifest.xml.pattern b/AndroidManifest.xml.pattern index 721a44cbe..c268abf1a 100644 --- a/AndroidManifest.xml.pattern +++ b/AndroidManifest.xml.pattern @@ -133,7 +133,7 @@ - + diff --git a/src/org/geometerplus/android/fbreader/network/NetworkCatalogActions.java b/src/org/geometerplus/android/fbreader/network/NetworkCatalogActions.java index c3c31eb24..f236441f3 100644 --- a/src/org/geometerplus/android/fbreader/network/NetworkCatalogActions.java +++ b/src/org/geometerplus/android/fbreader/network/NetworkCatalogActions.java @@ -25,6 +25,7 @@ import android.app.Activity; import android.app.AlertDialog; import android.content.Intent; import android.content.DialogInterface; +import android.content.ActivityNotFoundException; import android.net.Uri; import android.view.Menu; import android.view.ContextMenu; @@ -376,15 +377,17 @@ class NetworkCatalogActions extends NetworkTreeActions { NetworkView.Instance().tryResumeLoading(activity, tree, new Runnable() { public void run() { if (tree instanceof NetworkCatalogRootTree) { - /* - activity.startActivityForResult( - new Intent( - Util.TOPUP_ACTION, - Uri.parse(tree.Item.Link.getUrl(UrlInfo.Type.Catalog)) - ), - NetworkLibraryActivity.LIST_TOPUP_METHODS_CODE - ); - */ + try { + activity.startActivityForResult( + new Intent( + Util.TOPUP_ACTION, + Uri.parse(tree.Item.Link.getUrl(UrlInfo.Type.Catalog)) + ), + NetworkLibraryActivity.LIST_TOPUP_METHODS_CODE + ); + } catch (ActivityNotFoundException e) { + // ignore + } } boolean resumeNotLoad = false; diff --git a/src/org/geometerplus/android/fbreader/network/NetworkInitializer.java b/src/org/geometerplus/android/fbreader/network/NetworkInitializer.java index 84b9d442d..724aac862 100644 --- a/src/org/geometerplus/android/fbreader/network/NetworkInitializer.java +++ b/src/org/geometerplus/android/fbreader/network/NetworkInitializer.java @@ -19,6 +19,7 @@ package org.geometerplus.android.fbreader.network; +import android.app.Activity; import android.app.AlertDialog; import android.content.DialogInterface; import android.content.Intent; diff --git a/src/org/geometerplus/android/fbreader/network/NetworkLibraryActivity.java b/src/org/geometerplus/android/fbreader/network/NetworkLibraryActivity.java index 0b1db78ab..8c50cb48f 100644 --- a/src/org/geometerplus/android/fbreader/network/NetworkLibraryActivity.java +++ b/src/org/geometerplus/android/fbreader/network/NetworkLibraryActivity.java @@ -72,8 +72,7 @@ public class NetworkLibraryActivity extends BaseActivity implements NetworkView. @Override public void onCreate(Bundle icicle) { super.onCreate(icicle); - - OLD_STYLE_FLAG = true; + System.err.println("NetworkLibraryActivity.onCreate"); SQLiteCookieDatabase.init(this); @@ -189,6 +188,11 @@ public class NetworkLibraryActivity extends BaseActivity implements NetworkView. return false; } + @Override + protected boolean isTreeInvisible(FBTree tree) { + return tree instanceof RootTree && ((RootTree)tree).IsFake; + } + @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) { @@ -286,14 +290,14 @@ public class NetworkLibraryActivity extends BaseActivity implements NetworkView. Util.processSignup(((NetworkCatalogTree)getCurrentTree()).Item.Link, resultCode, data); break; case LIST_TOPUP_METHODS_CODE: - { - final Bundle bundle = data.getExtras(); - final ArrayList infos = - bundle != null - ? bundle.getParcelableArrayList(PluginApi.PluginInfo.KEY) - : null; - System.err.println("infos: " + infos); - } + if (data != null) { + final Bundle bundle = data.getExtras(); + final ArrayList infos = + bundle != null + ? bundle.getParcelableArrayList(PluginApi.PluginInfo.KEY) + : null; + System.err.println("infos: " + infos); + } } } diff --git a/src/org/geometerplus/android/fbreader/network/Util.java b/src/org/geometerplus/android/fbreader/network/Util.java index 3c3b63c14..44a792a47 100644 --- a/src/org/geometerplus/android/fbreader/network/Util.java +++ b/src/org/geometerplus/android/fbreader/network/Util.java @@ -242,10 +242,14 @@ abstract class Util implements UserRegistrationConstants { static void openTree(Context context, NetworkTree tree) { final Class clz = tree instanceof NetworkBookTree ? NetworkBookInfoActivity.class : NetworkLibraryActivity.class; - context.startActivity( - new Intent(context.getApplicationContext(), clz) - .putExtra(NetworkLibraryActivity.TREE_KEY_KEY, tree.getUniqueKey()) - ); + if (context instanceof NetworkLibraryActivity && clz == NetworkLibraryActivity.class) { + ((NetworkLibraryActivity)context).openTree(tree); + } else { + context.startActivity( + new Intent(context.getApplicationContext(), clz) + .putExtra(NetworkLibraryActivity.TREE_KEY_KEY, tree.getUniqueKey()) + ); + } } public static NetworkTree getTreeFromIntent(Intent intent) { diff --git a/src/org/geometerplus/android/fbreader/tree/BaseActivity.java b/src/org/geometerplus/android/fbreader/tree/BaseActivity.java index cad4b927c..beb54e5f5 100644 --- a/src/org/geometerplus/android/fbreader/tree/BaseActivity.java +++ b/src/org/geometerplus/android/fbreader/tree/BaseActivity.java @@ -71,14 +71,12 @@ public abstract class BaseActivity extends ListActivity { protected abstract FBTree getTreeByKey(FBTree.Key key); public abstract boolean isTreeSelected(FBTree tree); - protected boolean OLD_STYLE_FLAG = false; + protected boolean isTreeInvisible(FBTree tree) { + return false; + } @Override public boolean onKeyDown(int keyCode, KeyEvent event) { - if (OLD_STYLE_FLAG) { - return super.onKeyDown(keyCode, event); - } - if (keyCode == KeyEvent.KEYCODE_BACK) { FBTree parent = null; while (parent == null && !myHistory.isEmpty()) { @@ -87,7 +85,7 @@ public abstract class BaseActivity extends ListActivity { if (parent == null) { parent = myCurrentTree.Parent; } - if (parent != null) { + if (parent != null && !isTreeInvisible(parent)) { openTree(parent, myCurrentTree, false); return true; } @@ -96,7 +94,8 @@ public abstract class BaseActivity extends ListActivity { return super.onKeyDown(keyCode, event); } - protected void openTree(final FBTree tree) { + // TODO: change to protected + public void openTree(final FBTree tree) { openTree(tree, null, true); } @@ -157,7 +156,7 @@ public abstract class BaseActivity extends ListActivity { if (storeInHistory && !myCurrentKey.equals(tree.getUniqueKey())) { myHistory.add(myCurrentKey); } - startActivity(new Intent(this, getClass()) + onNewIntent(new Intent(this, getClass()) .setAction(OPEN_TREE_ACTION) .putExtra(TREE_KEY_KEY, tree.getUniqueKey()) .putExtra( diff --git a/src/org/geometerplus/fbreader/network/NetworkLibrary.java b/src/org/geometerplus/fbreader/network/NetworkLibrary.java index 9aeb2ed7c..a2bffc5cf 100644 --- a/src/org/geometerplus/fbreader/network/NetworkLibrary.java +++ b/src/org/geometerplus/fbreader/network/NetworkLibrary.java @@ -124,8 +124,8 @@ public class NetworkLibrary { return filteredList; } - private final RootTree myRootTree = new RootTree("@Root"); - private final RootTree myFakeRootTree = new RootTree("@FakeRoot"); + private final RootTree myRootTree = new RootTree("@Root", false); + private final RootTree myFakeRootTree = new RootTree("@FakeRoot", true); private SearchItemTree mySearchItemTree; private boolean myChildrenAreInvalid = true; diff --git a/src/org/geometerplus/fbreader/network/tree/RootTree.java b/src/org/geometerplus/fbreader/network/tree/RootTree.java index da9dbca46..d91eb592f 100644 --- a/src/org/geometerplus/fbreader/network/tree/RootTree.java +++ b/src/org/geometerplus/fbreader/network/tree/RootTree.java @@ -22,9 +22,12 @@ package org.geometerplus.fbreader.network.tree; import org.geometerplus.fbreader.network.*; public final class RootTree extends NetworkTree { + public final boolean IsFake; + private final String myId; - public RootTree(String id) { + public RootTree(String id, boolean isFake) { + IsFake = isFake; myId = id; }