diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index cda59efc6..23dc52e7a 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -166,7 +166,7 @@
-
+
diff --git a/AndroidManifest.xml.pattern b/AndroidManifest.xml.pattern
index c31f442c7..d94a26ef1 100644
--- a/AndroidManifest.xml.pattern
+++ b/AndroidManifest.xml.pattern
@@ -166,7 +166,7 @@
-
+
diff --git a/src/org/geometerplus/android/fbreader/network/AuthenticationActivity.java b/src/org/geometerplus/android/fbreader/network/AuthenticationActivity.java
index 11539da3b..49e020071 100644
--- a/src/org/geometerplus/android/fbreader/network/AuthenticationActivity.java
+++ b/src/org/geometerplus/android/fbreader/network/AuthenticationActivity.java
@@ -246,11 +246,10 @@ public class AuthenticationActivity extends Activity {
private void runCustomAuthentication(final String username, final String password) {
final NetworkAuthenticationManager mgr = myLink.authenticationManager();
- mgr.UserNameOption.setValue(username);
final Runnable runnable = new Runnable() {
public void run() {
try {
- mgr.authorise(password);
+ mgr.authorise(username, password);
if (mgr.needsInitialization()) {
mgr.initialize();
}
diff --git a/src/org/geometerplus/android/fbreader/network/AccountMenuActivity.java b/src/org/geometerplus/android/fbreader/network/AuthorizationMenuActivity.java
similarity index 88%
rename from src/org/geometerplus/android/fbreader/network/AccountMenuActivity.java
rename to src/org/geometerplus/android/fbreader/network/AuthorizationMenuActivity.java
index a6b52c649..8a82af51e 100644
--- a/src/org/geometerplus/android/fbreader/network/AccountMenuActivity.java
+++ b/src/org/geometerplus/android/fbreader/network/AuthorizationMenuActivity.java
@@ -35,10 +35,10 @@ import org.geometerplus.android.util.PackageUtil;
import org.geometerplus.android.fbreader.api.PluginApi;
-public class AccountMenuActivity extends MenuActivity {
+public class AuthorizationMenuActivity extends MenuActivity {
public static void runMenu(Context context, INetworkLink link) {
context.startActivity(
- Util.intentByLink(new Intent(context, AccountMenuActivity.class), link)
+ Util.intentByLink(new Intent(context, AuthorizationMenuActivity.class), link)
);
}
@@ -69,10 +69,10 @@ public class AccountMenuActivity extends MenuActivity {
try {
final NetworkAuthenticationManager mgr = myLink.authenticationManager();
if (info.getId().toString().endsWith("/signIn")) {
- Util.runAuthenticationDialog(AccountMenuActivity.this, myLink, null);
+ Util.runAuthenticationDialog(AuthorizationMenuActivity.this, myLink, null);
} else {
final Intent intent = Util.authorizationIntent(myLink, info.getId());
- if (PackageUtil.canBeStarted(AccountMenuActivity.this, intent, true)) {
+ if (PackageUtil.canBeStarted(AuthorizationMenuActivity.this, intent, true)) {
startActivity(intent);
}
}
diff --git a/src/org/geometerplus/android/fbreader/network/BuyBooksActivity.java b/src/org/geometerplus/android/fbreader/network/BuyBooksActivity.java
index d11ad477c..0f6d62497 100644
--- a/src/org/geometerplus/android/fbreader/network/BuyBooksActivity.java
+++ b/src/org/geometerplus/android/fbreader/network/BuyBooksActivity.java
@@ -86,7 +86,7 @@ public class BuyBooksActivity extends Activity implements NetworkLibrary.ChangeL
finish();
return;
}
- myBooks = new ArrayList(keys.size());
+ myBooks = new ArrayList(keys.size());
for (NetworkTree.Key k : keys) {
final NetworkTree tree = myLibrary.getTreeByKey(k);
if (tree instanceof NetworkBookTree) {
@@ -106,7 +106,7 @@ public class BuyBooksActivity extends Activity implements NetworkLibrary.ChangeL
try {
if (!mgr.isAuthorised(true)) {
- AccountMenuActivity.runMenu(this, myLink);
+ AuthorizationMenuActivity.runMenu(this, myLink);
}
} catch (ZLNetworkException e) {
}
@@ -122,10 +122,17 @@ public class BuyBooksActivity extends Activity implements NetworkLibrary.ChangeL
myAccount = mgr.currentAccount();
- setupUI(true);
+ setupUI(AuthorizationState.Authorized);
+
+ NetworkLibrary.Instance().addChangeListener(this);
}
- private void setupUI(boolean authorized) {
+ private static enum AuthorizationState {
+ Authorized,
+ NotAuthorized
+ };
+
+ private void setupUI(AuthorizationState state) {
final ZLResource dialogResource = ZLResource.resource("dialog");
final ZLResource buttonResource = dialogResource.getResource("button");
@@ -142,101 +149,100 @@ public class BuyBooksActivity extends Activity implements NetworkLibrary.ChangeL
setTitle(resource.getResource("title").getValue());
}
- if (!authorized) {
- textArea.setText(resource.getResource("notAuthorized").getValue());
- okButton.setText(buttonResource.getResource("authorize").getValue());
- cancelButton.setText(buttonResource.getResource("cancel").getValue());
- okButton.setOnClickListener(new View.OnClickListener() {
- public void onClick(View v) {
- AccountMenuActivity.runMenu(BuyBooksActivity.this, myLink);
- }
- });
- cancelButton.setOnClickListener(new View.OnClickListener() {
- public void onClick(View v) {
- finish();
- }
- });
- } else if (myAccount == null) {
- textArea.setText(resource.getResource("noAccountInformation").getValue());
- okButton.setText(buttonResource.getResource("refresh").getValue());
- cancelButton.setText(buttonResource.getResource("cancel").getValue());
- okButton.setOnClickListener(new View.OnClickListener() {
- public void onClick(View v) {
- refreshAccountInformation();
- }
- });
- cancelButton.setOnClickListener(new View.OnClickListener() {
- public void onClick(View v) {
- finish();
- }
- });
- } else if (myCost.compareTo(myAccount) > 0) {
- if (Money.ZERO.equals(myAccount)) {
- textArea.setText(
- resource.getResource("zeroFunds").getValue()
- .replace("%0", myCost.toString())
- );
- } else {
- textArea.setText(
- resource.getResource("unsufficientFunds").getValue()
- .replace("%0", myCost.toString())
- .replace("%1", myAccount.toString())
- );
- }
- okButton.setText(buttonResource.getResource("pay").getValue());
- cancelButton.setText(buttonResource.getResource("refresh").getValue());
- okButton.setOnClickListener(new View.OnClickListener() {
- public void onClick(View v) {
- TopupMenuActivity.runMenu(BuyBooksActivity.this, myLink, myCost.subtract(myAccount));
- }
- });
- cancelButton.setOnClickListener(new View.OnClickListener() {
- public void onClick(View v) {
- refreshAccountInformation();
- }
- });
- } else {
- okButton.setOnClickListener(new View.OnClickListener() {
- public void onClick(View v) {
- UIUtil.wait("purchaseBook", buyRunnable(), BuyBooksActivity.this);
- }
- });
- cancelButton.setOnClickListener(new View.OnClickListener() {
- public void onClick(View v) {
- finish();
- }
- });
- if (myBooks.size() > 1) {
- textArea.setText(
- resource.getResource("confirmSeveralBooks").getValue()
- .replace("%s", String.valueOf(myBooks.size()))
- );
- okButton.setText(buttonResource.getResource("buy").getValue());
+ switch (state) {
+ case NotAuthorized:
+ textArea.setText(resource.getResource("notAuthorized").getValue());
+ okButton.setText(buttonResource.getResource("authorize").getValue());
cancelButton.setText(buttonResource.getResource("cancel").getValue());
- } else if (myBooks.get(0).getStatus() == NetworkBookItem.Status.CanBePurchased) {
- textArea.setText(
- resource.getResource("confirm").getValue().replace("%s", myBooks.get(0).Title)
- );
- okButton.setText(buttonResource.getResource("buy").getValue());
- cancelButton.setText(buttonResource.getResource("cancel").getValue());
- } else {
- textArea.setText(resource.getResource("alreadyBought").getValue());
- cancelButton.setText(buttonResource.getResource("ok").getValue());
- okButton.setVisibility(View.GONE);
- }
+ okButton.setOnClickListener(new View.OnClickListener() {
+ public void onClick(View v) {
+ AuthorizationMenuActivity.runMenu(BuyBooksActivity.this, myLink);
+ }
+ });
+ cancelButton.setOnClickListener(new View.OnClickListener() {
+ public void onClick(View v) {
+ finish();
+ }
+ });
+ break;
+ case Authorized:
+ if (myAccount == null) {
+ textArea.setText(resource.getResource("noAccountInformation").getValue());
+ okButton.setText(buttonResource.getResource("refresh").getValue());
+ cancelButton.setText(buttonResource.getResource("cancel").getValue());
+ okButton.setOnClickListener(new View.OnClickListener() {
+ public void onClick(View v) {
+ refreshAccountInformation();
+ }
+ });
+ cancelButton.setOnClickListener(new View.OnClickListener() {
+ public void onClick(View v) {
+ finish();
+ }
+ });
+ } else if (myCost.compareTo(myAccount) > 0) {
+ if (Money.ZERO.equals(myAccount)) {
+ textArea.setText(
+ resource.getResource("zeroFunds").getValue()
+ .replace("%0", myCost.toString())
+ );
+ } else {
+ textArea.setText(
+ resource.getResource("unsufficientFunds").getValue()
+ .replace("%0", myCost.toString())
+ .replace("%1", myAccount.toString())
+ );
+ }
+ okButton.setText(buttonResource.getResource("pay").getValue());
+ cancelButton.setText(buttonResource.getResource("refresh").getValue());
+ okButton.setOnClickListener(new View.OnClickListener() {
+ public void onClick(View v) {
+ TopupMenuActivity.runMenu(BuyBooksActivity.this, myLink, myCost.subtract(myAccount));
+ }
+ });
+ cancelButton.setOnClickListener(new View.OnClickListener() {
+ public void onClick(View v) {
+ refreshAccountInformation();
+ }
+ });
+ } else {
+ okButton.setOnClickListener(new View.OnClickListener() {
+ public void onClick(View v) {
+ UIUtil.wait("purchaseBook", buyRunnable(), BuyBooksActivity.this);
+ }
+ });
+ cancelButton.setOnClickListener(new View.OnClickListener() {
+ public void onClick(View v) {
+ finish();
+ }
+ });
+ if (myBooks.size() > 1) {
+ textArea.setText(
+ resource.getResource("confirmSeveralBooks").getValue()
+ .replace("%s", String.valueOf(myBooks.size()))
+ );
+ okButton.setText(buttonResource.getResource("buy").getValue());
+ cancelButton.setText(buttonResource.getResource("cancel").getValue());
+ } else if (myBooks.get(0).getStatus() == NetworkBookItem.Status.CanBePurchased) {
+ textArea.setText(
+ resource.getResource("confirm").getValue().replace("%s", myBooks.get(0).Title)
+ );
+ okButton.setText(buttonResource.getResource("buy").getValue());
+ cancelButton.setText(buttonResource.getResource("cancel").getValue());
+ } else {
+ textArea.setText(resource.getResource("alreadyBought").getValue());
+ cancelButton.setText(buttonResource.getResource("ok").getValue());
+ okButton.setVisibility(View.GONE);
+ }
+ }
+ break;
}
}
@Override
- protected void onStart() {
- super.onStart();
- NetworkLibrary.Instance().addChangeListener(this);
- }
-
- @Override
- protected void onStop() {
+ protected void onDestroy() {
NetworkLibrary.Instance().removeChangeListener(this);
- super.onStop();
+ super.onDestroy();
}
@Override
@@ -285,7 +291,7 @@ public class BuyBooksActivity extends Activity implements NetworkLibrary.ChangeL
if (updated) {
runOnUiThread(new Runnable() {
public void run() {
- setupUI(true);
+ setupUI(AuthorizationState.Authorized);
}
});
}
@@ -342,23 +348,29 @@ public class BuyBooksActivity extends Activity implements NetworkLibrary.ChangeL
// method from NetworkLibrary.ChangeListener
public void onLibraryChanged(final NetworkLibrary.ChangeListener.Code code, final Object[] params) {
- switch (code) {
- case SignedIn:
- updateAuthorizationState();
- break;
- }
+ runOnUiThread(new Runnable() {
+ public void run() {
+ switch (code) {
+ case SignedIn:
+ updateAuthorizationState();
+ break;
+ }
+ }
+ });
}
private void updateAuthorizationState() {
final NetworkAuthenticationManager mgr = myLink.authenticationManager();
try {
if (mgr.isAuthorised(true)) {
+ setupUI(AuthorizationState.Authorized);
refreshAccountInformation();
} else {
- setupUI(false);
+ setupUI(AuthorizationState.NotAuthorized);
}
} catch (ZLNetworkException e) {
- setupUI(false);
+ e.printStackTrace();
+ setupUI(AuthorizationState.NotAuthorized);
}
}
}
diff --git a/src/org/geometerplus/android/fbreader/network/ListenerCallback.java b/src/org/geometerplus/android/fbreader/network/ListenerCallback.java
index 6942b45bb..204ef8b42 100644
--- a/src/org/geometerplus/android/fbreader/network/ListenerCallback.java
+++ b/src/org/geometerplus/android/fbreader/network/ListenerCallback.java
@@ -42,7 +42,6 @@ public class ListenerCallback extends BroadcastReceiver implements UserRegistrat
if (mgr instanceof LitResAuthenticationManager) {
try {
processSignup((LitResAuthenticationManager)mgr, intent);
- library.fireModelChangedEvent(NetworkLibrary.ChangeListener.Code.SignedIn);
} catch (ZLNetworkException e) {
e.printStackTrace();
}
@@ -64,7 +63,10 @@ public class ListenerCallback extends BroadcastReceiver implements UserRegistrat
// throw new ZLNetworkException(NetworkException.ERROR_AUTHENTICATION_FAILED);
//}
try {
- mgr.authorise(data.getStringExtra(USER_REGISTRATION_PASSWORD));
+ mgr.authorise(
+ data.getStringExtra(USER_REGISTRATION_USERNAME),
+ data.getStringExtra(USER_REGISTRATION_PASSWORD)
+ );
mgr.initialize();
} catch (ZLNetworkException e) {
mgr.logOut();
diff --git a/src/org/geometerplus/android/fbreader/network/Util.java b/src/org/geometerplus/android/fbreader/network/Util.java
index 17adf11b4..7a3d6243b 100644
--- a/src/org/geometerplus/android/fbreader/network/Util.java
+++ b/src/org/geometerplus/android/fbreader/network/Util.java
@@ -95,7 +95,7 @@ public abstract class Util implements UserRegistrationConstants {
final Intent intent = intentByLink(new Intent(activity, AuthenticationActivity.class), link);
AuthenticationActivity.registerRunnable(intent, onSuccess);
- intent.putExtra(AuthenticationActivity.USERNAME_KEY, mgr.UserNameOption.getValue());
+ intent.putExtra(AuthenticationActivity.USERNAME_KEY, mgr.getUserName());
intent.putExtra(AuthenticationActivity.SCHEME_KEY, "https");
intent.putExtra(AuthenticationActivity.CUSTOM_AUTH_KEY, true);
activity.startActivity(intent);
diff --git a/src/org/geometerplus/android/fbreader/network/action/SignOutAction.java b/src/org/geometerplus/android/fbreader/network/action/SignOutAction.java
index e35f67804..e103f0a42 100644
--- a/src/org/geometerplus/android/fbreader/network/action/SignOutAction.java
+++ b/src/org/geometerplus/android/fbreader/network/action/SignOutAction.java
@@ -67,7 +67,7 @@ public class SignOutAction extends Action {
public String getOptionsLabel(NetworkTree tree) {
final NetworkAuthenticationManager mgr = tree.getLink().authenticationManager();
final String userName =
- mgr != null && mgr.mayBeAuthorised(false) ? mgr.UserNameOption.getValue() : "";
+ mgr != null && mgr.mayBeAuthorised(false) ? mgr.getVisibleUserName() : "";
return super.getOptionsLabel(tree).replace("%s", userName);
}
@@ -75,7 +75,7 @@ public class SignOutAction extends Action {
public String getContextLabel(NetworkTree tree) {
final NetworkAuthenticationManager mgr = tree.getLink().authenticationManager();
final String userName =
- mgr != null && mgr.mayBeAuthorised(false) ? mgr.UserNameOption.getValue() : "";
+ mgr != null && mgr.mayBeAuthorised(false) ? mgr.getVisibleUserName() : "";
return super.getContextLabel(tree).replace("%s", userName);
}
}
diff --git a/src/org/geometerplus/fbreader/network/authentication/NetworkAuthenticationManager.java b/src/org/geometerplus/fbreader/network/authentication/NetworkAuthenticationManager.java
index f162aecde..f85cd783a 100644
--- a/src/org/geometerplus/fbreader/network/authentication/NetworkAuthenticationManager.java
+++ b/src/org/geometerplus/fbreader/network/authentication/NetworkAuthenticationManager.java
@@ -48,18 +48,27 @@ public abstract class NetworkAuthenticationManager {
public final INetworkLink Link;
- public final ZLStringOption UserNameOption;
+ protected final ZLStringOption UserNameOption;
protected NetworkAuthenticationManager(INetworkLink link) {
Link = link;
UserNameOption = new ZLStringOption(link.getSiteName(), "userName", "");
}
+ public String getUserName() {
+ return UserNameOption.getValue();
+ }
+
+ public String getVisibleUserName() {
+ final String username = getUserName();
+ return username.startsWith("fbreader-auto-") ? "auto" : username;
+ }
+
/*
* Common manager methods
*/
public abstract boolean isAuthorised(boolean useNetwork /* = true */) throws ZLNetworkException;
- public abstract void authorise(String password) throws ZLNetworkException;
+ public abstract void authorise(String username, String password) throws ZLNetworkException;
public abstract void logOut();
public abstract BookUrlInfo downloadReference(NetworkBookItem book);
public abstract void refreshAccountInformation() throws ZLNetworkException;
diff --git a/src/org/geometerplus/fbreader/network/authentication/litres/LitResAuthenticationManager.java b/src/org/geometerplus/fbreader/network/authentication/litres/LitResAuthenticationManager.java
index 223ec81c1..b139021a1 100644
--- a/src/org/geometerplus/fbreader/network/authentication/litres/LitResAuthenticationManager.java
+++ b/src/org/geometerplus/fbreader/network/authentication/litres/LitResAuthenticationManager.java
@@ -81,12 +81,16 @@ public class LitResAuthenticationManager extends NetworkAuthenticationManager {
myCanRebillOption = new ZLBooleanOption(link.getSiteName(), "canRebill", false);
}
- public synchronized void initUser(String userName, String sid, String userId, boolean canRebill) {
- UserNameOption.setValue(userName);
+ public synchronized void initUser(String username, String sid, String userId, boolean canRebill) {
+ if (username == null) {
+ username = UserNameOption.getValue();
+ } else {
+ UserNameOption.setValue(username);
+ }
mySidOption.setValue(sid);
myUserIdOption.setValue(userId);
myCanRebillOption.setValue(canRebill);
- myFullyInitialized = !"".equals(userName) && !"".equals(sid) && !"".equals(userId);
+ myFullyInitialized = !"".equals(username) && !"".equals(sid) && !"".equals(userId);
}
@Override
@@ -95,13 +99,17 @@ public class LitResAuthenticationManager extends NetworkAuthenticationManager {
}
private synchronized void logOut(boolean full) {
+ if ("".equals(mySidOption.getValue())) {
+ return;
+ }
if (full) {
- initUser(UserNameOption.getValue(), "", "", false);
+ initUser(null, "", "", false);
} else {
myFullyInitialized = false;
}
myInitializedDataSid = null;
myPurchasedBooks.clear();
+ NetworkLibrary.Instance().fireModelChangedEvent(NetworkLibrary.ChangeListener.Code.SignedIn);
}
@Override
@@ -136,7 +144,7 @@ public class LitResAuthenticationManager extends NetworkAuthenticationManager {
}
request.addPostParameter("sid", sid);
ZLNetworkManager.Instance().perform(request);
- initUser(UserNameOption.getValue(), xmlReader.Sid, xmlReader.UserId, xmlReader.CanRebill);
+ initUser(null, xmlReader.Sid, xmlReader.UserId, xmlReader.CanRebill);
return true;
} catch (ZLNetworkException e) {
if (NetworkException.ERROR_AUTHENTICATION_FAILED.equals(e.getCode())) {
@@ -148,38 +156,30 @@ public class LitResAuthenticationManager extends NetworkAuthenticationManager {
}
@Override
- public void authorise(String password) throws ZLNetworkException {
+ public void authorise(String username, String password) throws ZLNetworkException {
final Map params = new HashMap();
final String url = parseUrl(Link.getUrl(UrlInfo.Type.SignIn), params);
if (url == null) {
throw new ZLNetworkException(NetworkException.ERROR_UNSUPPORTED_OPERATION);
}
- final String login;
synchronized (this) {
- login = UserNameOption.getValue();
+ UserNameOption.setValue(username);
}
- final LitResLoginXMLReader xmlReader = new LitResLoginXMLReader(Link.getSiteName());
-
- ZLNetworkException exception = null;
try {
+ final LitResLoginXMLReader xmlReader = new LitResLoginXMLReader(Link.getSiteName());
final LitResNetworkRequest request = new LitResNetworkRequest(url, xmlReader);
for (Map.Entry entry : params.entrySet()) {
request.addPostParameter(entry.getKey(), entry.getValue());
}
- request.addPostParameter("login", login);
+ request.addPostParameter("login", username);
request.addPostParameter("pwd", password);
ZLNetworkManager.Instance().perform(request);
+ NetworkLibrary.Instance().fireModelChangedEvent(NetworkLibrary.ChangeListener.Code.SignedIn);
+ initUser(null, xmlReader.Sid, xmlReader.UserId, xmlReader.CanRebill);
} catch (ZLNetworkException e) {
- exception = e;
- }
-
- synchronized (this) {
- if (exception != null) {
- logOut(false);
- throw exception;
- }
- initUser(UserNameOption.getValue(), xmlReader.Sid, xmlReader.UserId, xmlReader.CanRebill);
+ logOut(false);
+ throw e;
}
}