summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOluwatobi Bashir-Bello <nbashirbello@google.com>2014-07-09 13:40:28 -0400
committerOluwatobi Bashir-Bello <nbashirbello@google.com>2014-07-10 08:37:42 -0400
commitf23d47ca43543ad108250459beef0151e12e6aea (patch)
tree4796d11bcc261ab2704f78d82a940c7446c0e5b5
parenta90ae6c0ec9e4a489d2e8fd87475315187a19be2 (diff)
downloadcloud-f23d47ca43543ad108250459beef0151e12e6aea.tar.gz
Let the CredentialUserRoster notify login listeners of changes as opposed to the common Login API. This way, users would be notified of login events only when the changes are reflected in GoogleLogin#users.
Change-Id: Ib762842c10a61ad626a2a898fd0ed9e88c0a91cd
-rw-r--r--login/src/com/google/gct/login/CredentialedUserRoster.java30
-rw-r--r--login/src/com/google/gct/login/GoogleLogin.java8
-rw-r--r--login/src/com/google/gct/login/GoogleLoginListener.java8
3 files changed, 39 insertions, 7 deletions
diff --git a/login/src/com/google/gct/login/CredentialedUserRoster.java b/login/src/com/google/gct/login/CredentialedUserRoster.java
index d383ca2..152382e 100644
--- a/login/src/com/google/gct/login/CredentialedUserRoster.java
+++ b/login/src/com/google/gct/login/CredentialedUserRoster.java
@@ -15,9 +15,11 @@
*/
package com.google.gct.login;
+import com.google.common.collect.Lists;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
+import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
@@ -29,6 +31,11 @@ import java.util.Map;
public class CredentialedUserRoster {
private final Map<String, CredentialedUser> allUsers = new HashMap<String, CredentialedUser>();
private CredentialedUser activeUser;
+ private Collection<GoogleLoginListener> listeners;
+
+ public CredentialedUserRoster() {
+ listeners = Lists.newLinkedList();
+ }
/**
* Returns a copy of the map of the current logged in users.
@@ -82,6 +89,7 @@ public class CredentialedUserRoster {
activeUser = allUsers.get(userEmail);
activeUser.setActive(true);
GoogleLoginPrefs.saveActiveUser(userEmail);
+ notifyLoginStatusChange();
}
}
@@ -94,6 +102,7 @@ public class CredentialedUserRoster {
activeUser.setActive(false);
activeUser = null;
GoogleLoginPrefs.removeActiveUser();
+ notifyLoginStatusChange();
}
}
}
@@ -151,8 +160,29 @@ public class CredentialedUserRoster {
}
allUsers.remove(userEmail);
+ notifyLoginStatusChange();
return true;
}
}
+ /**
+ * Register a specified {@link GoogleLoginListener} to be notified of changes to the
+ * logged-in state.
+ *
+ * @param listener the specified {@code GoogleLoginListener}
+ */
+ void addLoginListener(GoogleLoginListener listener) {
+ synchronized(listeners) {
+ listeners.add(listener);
+ }
+ }
+
+ private void notifyLoginStatusChange() {
+ synchronized(listeners) {
+ for (GoogleLoginListener listener : listeners) {
+ listener.statusChanged();
+ }
+ }
+ }
+
}
diff --git a/login/src/com/google/gct/login/GoogleLogin.java b/login/src/com/google/gct/login/GoogleLogin.java
index 8db1356..cf1ddf1 100644
--- a/login/src/com/google/gct/login/GoogleLogin.java
+++ b/login/src/com/google/gct/login/GoogleLogin.java
@@ -71,6 +71,7 @@ public class GoogleLogin {
this.uiFacade = new AndroidUiFacade();
this.users = new CredentialedUserRoster();
this.dataStore = new AndroidPreferencesOAuthDataStore();
+ addLoginListenersFromExtensionPoints();
}
/**
@@ -419,12 +420,11 @@ public class GoogleLogin {
/**
* Gets all the implementations of {@link GoogleLoginListener} and registers them to
* <code>state</code>.
- * @param state the {@link GoogleLoginState} for which we want to register listeners to.
*/
- private static void addLoginListenersFromExtensionPoints(GoogleLoginState state) {
+ private void addLoginListenersFromExtensionPoints() {
GoogleLoginListener[] loginListeners = Extensions.getExtensions(GoogleLoginListener.EP_NAME);
for(GoogleLoginListener listener : loginListeners) {
- state.addLoginListener(listener);
+ users.addLoginListener(listener);
}
}
@@ -441,8 +441,6 @@ public class GoogleLogin {
new AndroidPreferencesOAuthDataStore(),
uiFacade,
new AndroidLoggerFacade());
-
- addLoginListenersFromExtensionPoints(state);
return state;
}
diff --git a/login/src/com/google/gct/login/GoogleLoginListener.java b/login/src/com/google/gct/login/GoogleLoginListener.java
index 8964fe5..560f5f0 100644
--- a/login/src/com/google/gct/login/GoogleLoginListener.java
+++ b/login/src/com/google/gct/login/GoogleLoginListener.java
@@ -15,13 +15,17 @@
*/
package com.google.gct.login;
-import com.google.gdt.eclipse.login.common.LoginListener;
import com.intellij.openapi.extensions.ExtensionPointName;
/**
* Listener for changes in the login status.
*/
-public interface GoogleLoginListener extends LoginListener {
+public interface GoogleLoginListener {
public static ExtensionPointName<GoogleLoginListener> EP_NAME =
new ExtensionPointName<GoogleLoginListener>("com.google.gct.login.googleLoginListener");
+
+ /**
+ * Called when the login or active status of the user changes.
+ */
+ void statusChanged();
}