diff options
author | Oluwatobi Bashir-Bello <nbashirbello@google.com> | 2014-07-09 13:40:28 -0400 |
---|---|---|
committer | Oluwatobi Bashir-Bello <nbashirbello@google.com> | 2014-07-10 08:37:42 -0400 |
commit | f23d47ca43543ad108250459beef0151e12e6aea (patch) | |
tree | 4796d11bcc261ab2704f78d82a940c7446c0e5b5 | |
parent | a90ae6c0ec9e4a489d2e8fd87475315187a19be2 (diff) | |
download | cloud-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.java | 30 | ||||
-rw-r--r-- | login/src/com/google/gct/login/GoogleLogin.java | 8 | ||||
-rw-r--r-- | login/src/com/google/gct/login/GoogleLoginListener.java | 8 |
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(); } |