diff --git a/AndroidManifest.xml b/AndroidManifest.xml index 900154899..0faeb87b5 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -256,6 +256,12 @@ + + + + + + diff --git a/AndroidManifest.xml.pattern b/AndroidManifest.xml.pattern index 2b2c27e05..c96b50d4e 100644 --- a/AndroidManifest.xml.pattern +++ b/AndroidManifest.xml.pattern @@ -256,6 +256,12 @@ + + + + + + diff --git a/src/org/geometerplus/android/fbreader/network/AddCustomCatalogActivity.java b/src/org/geometerplus/android/fbreader/network/AddCustomCatalogActivity.java index ff42f093c..0b5eae4cf 100644 --- a/src/org/geometerplus/android/fbreader/network/AddCustomCatalogActivity.java +++ b/src/org/geometerplus/android/fbreader/network/AddCustomCatalogActivity.java @@ -89,20 +89,30 @@ public class AddCustomCatalogActivity extends Activity { } ); - Util.initLibrary(this); - final Intent intent = getIntent(); - final String action = intent.getAction(); - myEditNotAdd = Util.EDIT_CATALOG_ACTION.equals(action); + myEditNotAdd = Util.EDIT_CATALOG_ACTION.equals(intent.getAction()); myLink = null; + + Util.initLibrary(this, new Runnable() { + public void run() { + init(intent); + } + }); + } + + private void init(Intent intent) { + final String action = intent.getAction(); Uri uri = null; if (myEditNotAdd || Intent.ACTION_VIEW.equals(action) || Util.ADD_CATALOG_URL_ACTION.equals(action)) { uri = intent.getData(); if (uri != null) { - if ("opds".equals(uri.getScheme())) { - uri = Uri.parse("http" + uri.toString().substring(4)); + final String scheme = uri.getScheme(); + if ("opds".equals(scheme)) { + uri = Uri.parse("http" + uri.toString().substring(scheme.length())); + } else if ("opds-fbreader".equals(scheme)) { + uri = Uri.parse("https" + uri.toString().substring(scheme.length())); } final INetworkLink link = NetworkLibrary.Instance().getLinkByUrl(uri.toString()); if (link instanceof ICustomNetworkLink) { @@ -114,14 +124,15 @@ public class AddCustomCatalogActivity extends Activity { } if (myLink != null) { - setTextById(R.id.add_custom_catalog_url, myLink.getUrl(UrlInfo.Type.Catalog)); - setTextById(R.id.add_custom_catalog_title, myLink.getTitle()); - setTextById(R.id.add_custom_catalog_summary, myLink.getSummary()); - setExtraFieldsVisibility(true); - } else if (uri != null) { - if ("opds".equals(uri.getScheme())) { - uri = Uri.parse("http" + uri.toString().substring(4)); + if (myEditNotAdd) { + setTextById(R.id.add_custom_catalog_url, myLink.getUrl(UrlInfo.Type.Catalog)); + setTextById(R.id.add_custom_catalog_title, myLink.getTitle()); + setTextById(R.id.add_custom_catalog_summary, myLink.getSummary()); + setExtraFieldsVisibility(true); + } else { + openCatalog(uri); } + } else if (uri != null) { loadInfoByUri(uri); } else { setExtraFieldsVisibility(false); @@ -165,17 +176,20 @@ public class AddCustomCatalogActivity extends Activity { library.addCustomLink(myLink); library.synchronize(); - final Intent intent = new Intent( - FBReaderIntents.Action.OPEN_NETWORK_CATALOG, - myEditNotAdd ? null : uri, - AddCustomCatalogActivity.this, - NetworkLibraryPrimaryActivity.class - ).addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP); - startActivity(intent); - finish(); + openCatalog(myEditNotAdd ? null : uri); } } + private void openCatalog(Uri uri) { + startActivity(new Intent( + FBReaderIntents.Action.OPEN_NETWORK_CATALOG, + uri, + this, + NetworkLibraryPrimaryActivity.class + ).addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP)); + finish(); + } + private boolean isEmptyString(String s) { return s == null || s.length() == 0; } diff --git a/src/org/geometerplus/android/fbreader/network/NetworkLibraryActivity.java b/src/org/geometerplus/android/fbreader/network/NetworkLibraryActivity.java index 4b0c43f8c..4a57669b7 100644 --- a/src/org/geometerplus/android/fbreader/network/NetworkLibraryActivity.java +++ b/src/org/geometerplus/android/fbreader/network/NetworkLibraryActivity.java @@ -77,8 +77,14 @@ public abstract class NetworkLibraryActivity extends TreeActivity i if (getCurrentTree() instanceof RootTree) { mySingleCatalog = intent.getBooleanExtra("SingleCatalog", false); if (!NetworkLibrary.Instance().isInitialized()) { - Util.initLibrary(this); - myDeferredIntent = intent; + Util.initLibrary(this, new Runnable() { + public void run() { + NetworkLibrary.Instance().runBackgroundUpdate(false); + if (intent != null) { + openTreeByIntent(intent); + } + } + }); } else { NetworkLibrary.Instance().fireModelChangedEvent(NetworkLibrary.ChangeListener.Code.SomeCode); openTreeByIntent(intent); @@ -363,11 +369,6 @@ public abstract class NetworkLibraryActivity extends TreeActivity i showInitLibraryDialog((String)params[0]); break; case InitializationFinished: - NetworkLibrary.Instance().runBackgroundUpdate(false); - if (myDeferredIntent != null) { - openTreeByIntent(myDeferredIntent); - myDeferredIntent = null; - } break; case Found: openTree((NetworkTree)params[0]); @@ -407,7 +408,7 @@ public abstract class NetworkLibraryActivity extends TreeActivity i final DialogInterface.OnClickListener listener = new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { if (which == DialogInterface.BUTTON_POSITIVE) { - Util.initLibrary(NetworkLibraryActivity.this); + Util.initLibrary(NetworkLibraryActivity.this, null); } else { finish(); } diff --git a/src/org/geometerplus/android/fbreader/network/Util.java b/src/org/geometerplus/android/fbreader/network/Util.java index 7e96ddaaa..05024bc64 100644 --- a/src/org/geometerplus/android/fbreader/network/Util.java +++ b/src/org/geometerplus/android/fbreader/network/Util.java @@ -49,12 +49,7 @@ public abstract class Util implements UserRegistrationConstants { return intent; } - static void initLibrary(final Activity activity) { - final NetworkLibrary library = NetworkLibrary.Instance(); - if (library.isInitialized()) { - return; - } - + static void initLibrary(final Activity activity, final Runnable action) { Config.Instance().runOnConnect(new Runnable() { public void run() { UIUtil.wait("loadingNetworkLibrary", new Runnable() { @@ -63,7 +58,13 @@ public abstract class Util implements UserRegistrationConstants { new SQLiteNetworkDatabase(activity.getApplication()); } - library.initialize(); + final NetworkLibrary library = NetworkLibrary.Instance(); + if (!library.isInitialized()) { + library.initialize(); + } + if (action != null) { + action.run(); + } } }, activity); }