1
0
Fork 0
mirror of https://github.com/geometer/FBReaderJ.git synced 2025-10-04 18:29:23 +02:00

runnable map has been moved from Util to AuthenticationActivity

This commit is contained in:
Nikolay Pultsin 2011-08-20 19:44:22 +01:00
parent 1ef43b40e2
commit b4a219aefe
2 changed files with 40 additions and 42 deletions

View file

@ -39,6 +39,7 @@ import org.geometerplus.zlibrary.core.network.ZLNetworkException;
import org.geometerplus.zlibrary.core.options.ZLStringOption; import org.geometerplus.zlibrary.core.options.ZLStringOption;
import org.geometerplus.fbreader.network.INetworkLink; import org.geometerplus.fbreader.network.INetworkLink;
import org.geometerplus.fbreader.network.NetworkLibrary;
import org.geometerplus.fbreader.network.authentication.NetworkAuthenticationManager; import org.geometerplus.fbreader.network.authentication.NetworkAuthenticationManager;
import org.geometerplus.zlibrary.ui.android.R; import org.geometerplus.zlibrary.ui.android.R;
@ -46,8 +47,24 @@ import org.geometerplus.zlibrary.ui.android.R;
import org.geometerplus.android.util.UIUtil; import org.geometerplus.android.util.UIUtil;
public class AuthenticationActivity extends Activity { public class AuthenticationActivity extends Activity {
private static final Map<Long,Runnable> ourOnSuccessRunnableMap =
Collections.synchronizedMap(new HashMap<Long,Runnable>());
private static volatile long ourNextCode;
static Intent registerRunnable(Intent intent, Runnable action) {
synchronized (ourOnSuccessRunnableMap) {
if (action != null) {
ourOnSuccessRunnableMap.put(ourNextCode, action);
intent.putExtra(RUNNABLE_KEY, ourNextCode);
++ourNextCode;
}
}
return intent;
}
private static final String AREA_KEY = "area"; private static final String AREA_KEY = "area";
private static final String HOST_KEY = "host"; private static final String HOST_KEY = "host";
private static final String RUNNABLE_KEY = "onSuccess";
static final String SCHEME_KEY = "scheme"; static final String SCHEME_KEY = "scheme";
static final String USERNAME_KEY = "username"; static final String USERNAME_KEY = "username";
static final String PASSWORD_KEY = "password"; static final String PASSWORD_KEY = "password";
@ -116,6 +133,7 @@ public class AuthenticationActivity extends Activity {
private Timer myOkButtonUpdater; private Timer myOkButtonUpdater;
private TextView myUsernameView; private TextView myUsernameView;
private boolean myCustomAuthentication; private boolean myCustomAuthentication;
private Runnable myOnSuccessRunnable;
@Override @Override
public void onCreate(Bundle icicle) { public void onCreate(Bundle icicle) {
@ -137,6 +155,7 @@ public class AuthenticationActivity extends Activity {
final String error = intent.getStringExtra(ERROR_KEY); final String error = intent.getStringExtra(ERROR_KEY);
final boolean showSignupLink = intent.getBooleanExtra(SHOW_SIGNUP_LINK_KEY, false); final boolean showSignupLink = intent.getBooleanExtra(SHOW_SIGNUP_LINK_KEY, false);
myCustomAuthentication = intent.getBooleanExtra(CUSTOM_AUTH_KEY, false); myCustomAuthentication = intent.getBooleanExtra(CUSTOM_AUTH_KEY, false);
myOnSuccessRunnable = ourOnSuccessRunnableMap.remove(intent.getLongExtra(RUNNABLE_KEY, -1));
myResource = ZLResource.resource("dialog").getResource("AuthenticationDialog"); myResource = ZLResource.resource("dialog").getResource("AuthenticationDialog");
@ -199,6 +218,18 @@ public class AuthenticationActivity extends Activity {
cancelButton.setText(buttonResource.getResource("cancel").getValue()); cancelButton.setText(buttonResource.getResource("cancel").getValue());
cancelButton.setOnClickListener(new Button.OnClickListener() { cancelButton.setOnClickListener(new Button.OnClickListener() {
public void onClick(View v) { public void onClick(View v) {
runOnUiThread(new Runnable() {
public void run() {
final NetworkAuthenticationManager mgr = myLink.authenticationManager();
if (mgr.mayBeAuthorised(false)) {
mgr.logOut();
}
final NetworkLibrary library = NetworkLibrary.Instance();
library.invalidateVisibility();
library.synchronize();
NetworkView.Instance().fireModelChanged();
}
});
finish(); finish();
} }
}); });
@ -233,6 +264,13 @@ public class AuthenticationActivity extends Activity {
mgr.initialize(); mgr.initialize();
} }
finishOk(username, password); finishOk(username, password);
if (myOnSuccessRunnable != null) {
myOnSuccessRunnable.run();
}
final NetworkLibrary library = NetworkLibrary.Instance();
library.invalidateVisibility();
library.synchronize();
NetworkView.Instance().fireModelChanged();
} catch (final ZLNetworkException e) { } catch (final ZLNetworkException e) {
mgr.logOut(); mgr.logOut();
runOnUiThread(new Runnable() { runOnUiThread(new Runnable() {

View file

@ -79,22 +79,17 @@ public abstract class Util implements UserRegistrationConstants {
} }
} }
private static final Map<Activity,Runnable> ourAfterRegisrationMap =
new HashMap<Activity,Runnable>();
public static void runAuthenticationDialog(Activity activity, INetworkLink link, Runnable onSuccess) { public static void runAuthenticationDialog(Activity activity, INetworkLink link, Runnable onSuccess) {
final NetworkAuthenticationManager mgr = link.authenticationManager(); final NetworkAuthenticationManager mgr = link.authenticationManager();
final Intent intent = intentByLink(new Intent(activity, AuthenticationActivity.class), link); 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.UserNameOption.getValue());
if (isRegistrationSupported(activity, link)) { if (isRegistrationSupported(activity, link)) {
intent.putExtra(AuthenticationActivity.SHOW_SIGNUP_LINK_KEY, true); intent.putExtra(AuthenticationActivity.SHOW_SIGNUP_LINK_KEY, true);
} }
intent.putExtra(AuthenticationActivity.SCHEME_KEY, "https"); intent.putExtra(AuthenticationActivity.SCHEME_KEY, "https");
intent.putExtra(AuthenticationActivity.CUSTOM_AUTH_KEY, true); intent.putExtra(AuthenticationActivity.CUSTOM_AUTH_KEY, true);
if (onSuccess != null) {
ourAfterRegisrationMap.put(activity, onSuccess);
}
activity.startActivityForResult(intent, NetworkLibraryActivity.CUSTOM_AUTHENTICATION_CODE); activity.startActivityForResult(intent, NetworkLibraryActivity.CUSTOM_AUTHENTICATION_CODE);
} }
@ -104,44 +99,9 @@ public abstract class Util implements UserRegistrationConstants {
return; return;
} }
final Runnable onSuccess = ourAfterRegisrationMap.get(activity);
ourAfterRegisrationMap.remove(activity);
switch (resultCode) { switch (resultCode) {
case AuthenticationActivity.RESULT_CANCELED:
UIUtil.wait(
"signOut",
new Runnable() {
public void run() {
final NetworkAuthenticationManager mgr =
link.authenticationManager();
if (mgr.mayBeAuthorised(false)) {
mgr.logOut();
}
final NetworkLibrary library = NetworkLibrary.Instance();
library.invalidateVisibility();
library.synchronize();
NetworkView.Instance().fireModelChanged();
}
},
activity
);
break;
case AuthenticationActivity.RESULT_OK:
activity.runOnUiThread(new Runnable() {
public void run() {
if (onSuccess != null) {
onSuccess.run();
}
final NetworkLibrary library = NetworkLibrary.Instance();
library.invalidateVisibility();
library.synchronize();
NetworkView.Instance().fireModelChanged();
}
});
break;
case AuthenticationActivity.RESULT_SIGNUP: case AuthenticationActivity.RESULT_SIGNUP:
Util.runRegistrationDialog(activity, link); runRegistrationDialog(activity, link);
break; break;
} }
} }