diff options
author | Oluwatobi Bashir-Bello <nbashirbello@google.com> | 2015-04-15 15:24:36 +0000 |
---|---|---|
committer | android-build-merger <android-build-merger@google.com> | 2015-04-15 15:24:36 +0000 |
commit | 8fea585bb0d1f9b3be3d02aefd800d053418352c (patch) | |
tree | ea2469d2e77db7c16044f71317e8d15e7eea3f79 | |
parent | 915d2a0a05fa7531748bb0cc33c4dcfaa3ce8f1c (diff) | |
parent | 9415706321faf9352f0106f3062969dbb4bf6b8e (diff) | |
download | login-8fea585bb0d1f9b3be3d02aefd800d053418352c.tar.gz |
Fix logout - Logs all users out when you logout.studio-master-release
automerge: 9415706
* commit '9415706321faf9352f0106f3062969dbb4bf6b8e':
Fix logout - Logs all users out when you logout.
-rw-r--r-- | src/com/google/gct/login/CredentialedUserRoster.java | 12 | ||||
-rw-r--r-- | src/com/google/gct/login/GoogleLogin.java | 49 | ||||
-rw-r--r-- | src/com/google/gct/login/GoogleLoginPrefs.java | 10 | ||||
-rw-r--r-- | testSrc/com/google/gct/login/CredentialedUserRosterTest.java | 19 |
4 files changed, 65 insertions, 25 deletions
diff --git a/src/com/google/gct/login/CredentialedUserRoster.java b/src/com/google/gct/login/CredentialedUserRoster.java index d8936fb..21aa574 100644 --- a/src/com/google/gct/login/CredentialedUserRoster.java +++ b/src/com/google/gct/login/CredentialedUserRoster.java @@ -163,6 +163,18 @@ public class CredentialedUserRoster { } /** + * Removes all logged in users. There is no active user after this. + */ + public void removeAllUsers() { + synchronized (this) { + myAllUsers.clear(); + myActiveUser = null; + GoogleLoginPrefs.removeAllUsers(); + notifyLoginStatusChange(); + } + } + + /** * Register a specified {@link GoogleLoginListener} to be notified of changes to the * logged-in state. * diff --git a/src/com/google/gct/login/GoogleLogin.java b/src/com/google/gct/login/GoogleLogin.java index 1a1bcd3..e7969ed 100644 --- a/src/com/google/gct/login/GoogleLogin.java +++ b/src/com/google/gct/login/GoogleLogin.java @@ -383,8 +383,9 @@ public class GoogleLogin { } /** - * Logs the user out. Pops up a question dialog asking if the user really - * wants to quit. + * Logs out the active user by popping up a question dialog asking if the active user really + * wants to quit. If the active user chooses to sign out, signs out the active user and all other + * signed in users. * * @return true if the user logged out, false otherwise */ @@ -394,16 +395,16 @@ public class GoogleLogin { return false; } - boolean loggedOut = activeUser.getGoogleLoginState().logOut(); + boolean loggedOut = activeUser.getGoogleLoginState().logOut(); if(loggedOut) { - users.removeUser(activeUser.getEmail()); + logOutAllUsers(); } return loggedOut; } /** - * Logs the user out. + * Logs out the active user and all other signed in users. * * @param showPrompt if true, opens a prompt asking if the user really wants * to log out. If false, the user is logged out @@ -415,7 +416,13 @@ public class GoogleLogin { if (activeUser == null) { return false; } - return activeUser.getGoogleLoginState().logOut(showPrompt); + + boolean loggedOut = activeUser.getGoogleLoginState().logOut(showPrompt); + if(loggedOut) { + logOutAllUsers(); + } + + return loggedOut; } /** @@ -434,16 +441,6 @@ public class GoogleLogin { } /** - * Logs out the active user. - */ - // TODO: Hook this into the shutdown process of IntelliJ - public void stop() { - if (GoogleLoginPrefs.getLogoutOnExitPref()) { - logOut(false); - } - } - - /** * Sets the active user to <code>userEmail</code> if <code>userEmail</code> is a logged * in user. * @param userEmail The user to be set as active. @@ -484,6 +481,16 @@ public class GoogleLogin { } /** + * Logs out all signed in users without popping up logout confirmation message. + */ + private void logOutAllUsers() { + for (CredentialedUser aUser : users.getAllUsers().values()) { + aUser.getGoogleLoginState().logOut(false /* showPrompt */); + } + users.removeAllUsers(); + } + + /** * Gets all the implementations of {@link GoogleLoginListener} and registers them to * <code>state</code>. */ @@ -638,15 +645,7 @@ public class GoogleLogin { public boolean askYesOrNo(String title, String message) { String updatedMessage = message; if (message.equals("Are you sure you want to sign out?")) { - updatedMessage = "Are you sure you want to sign out"; - CredentialedUser activeUser = getActiveUser(); - if (activeUser != null && !Strings.isNullOrEmpty(activeUser.getName())) { - updatedMessage += (" " + activeUser.getName()); - } - if (activeUser != null && !Strings.isNullOrEmpty(activeUser.getEmail())) { - updatedMessage += (" (" + activeUser.getEmail() + ")"); - } - updatedMessage += "?"; + updatedMessage += " This will sign out all logged in users."; } return (Messages.showYesNoDialog(updatedMessage, title, GoogleLoginIcons.GOOGLE_FAVICON) == Messages.YES); } diff --git a/src/com/google/gct/login/GoogleLoginPrefs.java b/src/com/google/gct/login/GoogleLoginPrefs.java index 0c9afd0..46bad4e 100644 --- a/src/com/google/gct/login/GoogleLoginPrefs.java +++ b/src/com/google/gct/login/GoogleLoginPrefs.java @@ -183,6 +183,16 @@ public class GoogleLoginPrefs { } /** + * Clears all persistently stored users. There is no active user after this. + */ + public static void removeAllUsers() { + Preferences prefs = getPrefs(); + prefs.remove(USERS); + prefs.remove(ACTIVE_USER); + flushPrefs(prefs); + } + + /** * Retrieves the persistently stored active user. * @return the stored active user. */ diff --git a/testSrc/com/google/gct/login/CredentialedUserRosterTest.java b/testSrc/com/google/gct/login/CredentialedUserRosterTest.java index 471409b..23a2c7f 100644 --- a/testSrc/com/google/gct/login/CredentialedUserRosterTest.java +++ b/testSrc/com/google/gct/login/CredentialedUserRosterTest.java @@ -238,4 +238,23 @@ public class CredentialedUserRosterTest extends TestCase { Assert.assertTrue(setUsers.containsKey(user2.getEmail())); Assert.assertTrue(setUsers.containsKey(user3.getEmail())); } + + /** + * Tests {@link com.google.gct.login.CredentialedUserRoster#removeAllUsers()} + */ + public void testRemoveAllUsers() { + Assert.assertEquals(0, users.numberOfUsers()); + + users.addUser(user1); + users.removeAllUsers(); + Assert.assertEquals(0, users.numberOfUsers()); + Assert.assertEquals(null, users.getActiveUser()); + + users.addUser(user1); + users.addUser(user2); + users.addUser(user3); + users.removeAllUsers(); + Assert.assertEquals(0, users.numberOfUsers()); + Assert.assertEquals(null, users.getActiveUser()); + } } |