summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOluwatobi Bashir-Bello <nbashirbello@google.com>2015-04-14 14:03:25 -0400
committerOluwatobi Bashir-Bello <nbashirbello@google.com>2015-04-14 14:09:27 -0400
commit9415706321faf9352f0106f3062969dbb4bf6b8e (patch)
treeea2469d2e77db7c16044f71317e8d15e7eea3f79
parent04285010a9ebcf288de7e1052fe3ea5950da1527 (diff)
downloadlogin-9415706321faf9352f0106f3062969dbb4bf6b8e.tar.gz
Fix logout - Logs all users out when you logout.
Change-Id: I377c216bdbf106d911fe1f03755f033d8b48305d
-rw-r--r--src/com/google/gct/login/CredentialedUserRoster.java12
-rw-r--r--src/com/google/gct/login/GoogleLogin.java49
-rw-r--r--src/com/google/gct/login/GoogleLoginPrefs.java10
-rw-r--r--testSrc/com/google/gct/login/CredentialedUserRosterTest.java19
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());
+ }
}