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