[3.19] 490820: always set password field echo character if possible

Change-Id: Idac6aec404f7dfaeec89935e4f13cc0b56990940
Task-Url: https://bugs.eclipse.org/bugs/show_bug.cgi?id=490820
Signed-off-by: Jaxsun McCarthy Huggan <jaxsun.mccarthy@tasktop.com>
diff --git a/org.eclipse.mylyn.tasks.ui.tests/src/org/eclipse/mylyn/tasks/ui/wizards/RepositorySettingsPageTest.java b/org.eclipse.mylyn.tasks.ui.tests/src/org/eclipse/mylyn/tasks/ui/wizards/RepositorySettingsPageTest.java
index 82880e2..6c35ee5 100644
--- a/org.eclipse.mylyn.tasks.ui.tests/src/org/eclipse/mylyn/tasks/ui/wizards/RepositorySettingsPageTest.java
+++ b/org.eclipse.mylyn.tasks.ui.tests/src/org/eclipse/mylyn/tasks/ui/wizards/RepositorySettingsPageTest.java
@@ -25,6 +25,7 @@
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.Status;
+import org.eclipse.jface.preference.StringFieldEditor;
 import org.eclipse.jface.wizard.IWizard;
 import org.eclipse.jface.wizard.IWizardContainer;
 import org.eclipse.mylyn.internal.tasks.core.ITasksCoreConstants;
@@ -225,6 +226,7 @@
 
 		assertTrue(page.needsRepositoryCredentials());
 		assertCredentialsEnabled(page);
+		assertPasswordIsSecret(page);
 	}
 
 	@Test
@@ -233,10 +235,12 @@
 		page.setNeedsRepositoryCredentials(true);
 		page.createControl(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell());
 		assertCredentialsEnabled(page);
+		assertPasswordIsSecret(page);
 
 		page.setNeedsRepositoryCredentials(false);
 
 		assertCredentialsDisabled(page);
+		assertPasswordIsSecret(page);
 	}
 
 	@Test
@@ -246,9 +250,11 @@
 		page.createControl(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell());
 		page.setNeedsRepositoryCredentials(false);
 		assertCredentialsDisabled(page);
+		assertPasswordIsSecret(page);
 
 		page.setNeedsRepositoryCredentials(true);
 		assertCredentialsEnabled(page);
+		assertPasswordIsSecret(page);
 	}
 
 	@Test
@@ -261,15 +267,18 @@
 		assertTrue(page.needsRepositoryCredentials());
 		assertTrue(page.isAnonymousAccess());
 		assertCredentialsDisabled(page);
+		assertPasswordIsSecret(page);
 
 		page.setAnonymous(false);
 		page.setNeedsRepositoryCredentials(false);
 
 		assertCredentialsDisabled(page);
+		assertPasswordIsSecret(page);
 
 		page.setNeedsRepositoryCredentials(true);
 
 		assertCredentialsEnabled(page);
+		assertPasswordIsSecret(page);
 	}
 
 	@Test
@@ -312,4 +321,9 @@
 		assertFalse(page.repositoryUserNameEditor.getTextControl(page.compositeContainer).isEnabled());
 		assertFalse(page.repositoryPasswordEditor.getTextControl(page.compositeContainer).isEnabled());
 	}
+
+	private void assertPasswordIsSecret(TestRepositorySettingsPage page) {
+		StringFieldEditor passwordEditor = page.repositoryPasswordEditor;
+		assertEquals('*', passwordEditor.getTextControl(page.compositeContainer).getEchoChar());
+	}
 }
diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasks/ui/wizards/AbstractRepositorySettingsPage.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasks/ui/wizards/AbstractRepositorySettingsPage.java
index e8303d2..3300511 100644
--- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasks/ui/wizards/AbstractRepositorySettingsPage.java
+++ b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasks/ui/wizards/AbstractRepositorySettingsPage.java
@@ -560,10 +560,12 @@
 			}
 		});
 
-		if (needsRepositoryCredentials()) {
+		if (repositoryPasswordEditor != null) {
 			// bug 131656: must set echo char after setting value on Mac
 			((RepositoryStringFieldEditor) repositoryPasswordEditor).getTextControl().setEchoChar('*');
+		}
 
+		if (needsRepositoryCredentials()) {
 			if (needsAnonymousLogin()) {
 				// do this after username and password widgets have been intialized
 				if (repository != null) {