diff --git a/assets/resources/application/en.xml b/assets/resources/application/en.xml
index aa8206ad7..947d02f79 100644
--- a/assets/resources/application/en.xml
+++ b/assets/resources/application/en.xml
@@ -670,6 +670,12 @@
+
+
+
+
+
+
diff --git a/src/org/geometerplus/android/fbreader/network/Util.java b/src/org/geometerplus/android/fbreader/network/Util.java
index 552cffc57..48fddc59a 100644
--- a/src/org/geometerplus/android/fbreader/network/Util.java
+++ b/src/org/geometerplus/android/fbreader/network/Util.java
@@ -43,6 +43,8 @@ import org.geometerplus.android.util.PackageUtil;
public abstract class Util implements UserRegistrationConstants {
private static final String REGISTRATION_ACTION =
"android.fbreader.action.NETWORK_LIBRARY_REGISTER";
+ private static final String AUTOREGISTRATION_ACTION =
+ "android.fbreader.action.NETWORK_LIBRARY_AUTOREGISTER";
static INetworkLink linkByIntent(Intent intent) {
return NetworkLibrary.Instance().getLinkByUrl(intent.getData().toString());
@@ -64,6 +66,14 @@ public abstract class Util implements UserRegistrationConstants {
);
}
+ public static boolean isAutoregistrationSupported(Activity activity, INetworkLink link) {
+ return testService(
+ activity,
+ AUTOREGISTRATION_ACTION,
+ link.getUrl(UrlInfo.Type.SignUp)
+ );
+ }
+
public static void runRegistrationDialog(Activity activity, INetworkLink link) {
try {
final Intent intent = new Intent(
@@ -71,10 +81,20 @@ public abstract class Util implements UserRegistrationConstants {
Uri.parse(link.getUrl(UrlInfo.Type.SignUp))
);
if (PackageUtil.canBeStarted(activity, intent, true)) {
- activity.startActivityForResult(new Intent(
- REGISTRATION_ACTION,
- Uri.parse(link.getUrl(UrlInfo.Type.SignUp))
- ), NetworkLibraryActivity.SIGNUP_CODE);
+ activity.startActivityForResult(intent, NetworkLibraryActivity.SIGNUP_CODE);
+ }
+ } catch (ActivityNotFoundException e) {
+ }
+ }
+
+ public static void runAutoregistrationDialog(Activity activity, INetworkLink link) {
+ try {
+ final Intent intent = new Intent(
+ AUTOREGISTRATION_ACTION,
+ Uri.parse(link.getUrl(UrlInfo.Type.SignUp))
+ );
+ if (PackageUtil.canBeStarted(activity, intent, true)) {
+ activity.startActivityForResult(intent, NetworkLibraryActivity.SIGNUP_CODE);
}
} catch (ActivityNotFoundException e) {
}
diff --git a/src/org/geometerplus/android/fbreader/network/action/NetworkBookActions.java b/src/org/geometerplus/android/fbreader/network/action/NetworkBookActions.java
index d49fb2311..04a182317 100644
--- a/src/org/geometerplus/android/fbreader/network/action/NetworkBookActions.java
+++ b/src/org/geometerplus/android/fbreader/network/action/NetworkBookActions.java
@@ -381,11 +381,56 @@ public abstract class NetworkBookActions {
if (mgr.isAuthorised(true)) {
buyDialogRunnable.run();
} else {
- Util.runAuthenticationDialog(activity, book.Link, new Runnable() {
- public void run() {
- activity.runOnUiThread(buyDialogRunnable);
+ final String signInKey = "signIn";
+ final String registerKey = "signUp";
+ final String autoregisterKey = "quickBuy";
+
+ final ArrayList items = new ArrayList();
+ items.add(signInKey);
+ if (Util.isRegistrationSupported(activity, book.Link)) {
+ items.add(registerKey);
+ }
+ if (Util.isAutoregistrationSupported(activity, book.Link)) {
+ items.add(autoregisterKey);
+ }
+
+ if (items.size() > 1) {
+ final ZLResource box = dialogResource.getResource("purchaseActions");
+
+ CharSequence[] names = new CharSequence[items.size()];
+ for (int i = 0; i < names.length; ++i) {
+ names[i] = box.getResource(items.get(i)).getValue();
}
- });
+
+ new AlertDialog.Builder(activity)
+ .setIcon(0)
+ .setTitle(box.getResource("title").getValue())
+ .setItems(names, new DialogInterface.OnClickListener() {
+ public void onClick(DialogInterface dialog, int which) {
+ final String item = items.get(which);
+ if (signInKey.equals(item)) {
+ Util.runAuthenticationDialog(activity, book.Link, new Runnable() {
+ public void run() {
+ activity.runOnUiThread(buyDialogRunnable);
+ }
+ });
+ } else if (registerKey.equals(item)) {
+ Util.runRegistrationDialog(activity, book.Link);
+ // TODO: buy on success
+ } else if (autoregisterKey.equals(item)) {
+ Util.runAutoregistrationDialog(activity, book.Link);
+ // TODO: buy on success
+ }
+ }
+ })
+ .create().show();
+ } else {
+ Util.runAuthenticationDialog(activity, book.Link, new Runnable() {
+ public void run() {
+ activity.runOnUiThread(buyDialogRunnable);
+ }
+ });
+ }
}
} catch (ZLNetworkException e) {
}