Loading k9mail/src/main/java/com/fsck/k9/activity/setup/AccountSetupAccountType.java +25 −7 Original line number Diff line number Diff line package com.fsck.k9.activity.setup; import android.content.Context; import android.content.Intent; import android.os.Bundle; Loading @@ -13,9 +13,19 @@ import com.fsck.k9.K9; import com.fsck.k9.Preferences; import com.fsck.k9.R; import com.fsck.k9.activity.K9Activity; import com.fsck.k9.helper.EmailHelper; import com.fsck.k9.mail.ServerSettings.Type; import com.fsck.k9.setup.ServerNameSuggester; import java.net.URI; import java.net.URISyntaxException; import static com.fsck.k9.mail.ServerSettings.Type.IMAP; import static com.fsck.k9.mail.ServerSettings.Type.POP3; import static com.fsck.k9.mail.ServerSettings.Type.SMTP; import static com.fsck.k9.mail.ServerSettings.Type.WebDAV; /** * Prompts the user to select an account type. The account type, along with the * passed in email address, password and makeDefault are then passed on to the Loading @@ -25,6 +35,7 @@ public class AccountSetupAccountType extends K9Activity implements OnClickListen private static final String EXTRA_ACCOUNT = "account"; private static final String EXTRA_MAKE_DEFAULT = "makeDefault"; private final ServerNameSuggester serverNameSuggester = new ServerNameSuggester(); private Account mAccount; private boolean mMakeDefault; Loading @@ -48,14 +59,18 @@ public class AccountSetupAccountType extends K9Activity implements OnClickListen mMakeDefault = getIntent().getBooleanExtra(EXTRA_MAKE_DEFAULT, false); } private void setupStoreAndSmtpTransport(String schemePrefix) throws URISyntaxException { private void setupStoreAndSmtpTransport(Type serverType, String schemePrefix) throws URISyntaxException { String domainPart = EmailHelper.getDomainFromEmailAddress(mAccount.getEmail()); String suggestedStoreServerName = serverNameSuggester.suggestServerName(serverType, domainPart); URI storeUriForDecode = new URI(mAccount.getStoreUri()); URI storeUri = new URI(schemePrefix, storeUriForDecode.getUserInfo(), storeUriForDecode.getHost(), URI storeUri = new URI(schemePrefix, storeUriForDecode.getUserInfo(), suggestedStoreServerName, storeUriForDecode.getPort(), null, null, null); mAccount.setStoreUri(storeUri.toString()); String suggestedTransportServerName = serverNameSuggester.suggestServerName(SMTP, domainPart); URI transportUriForDecode = new URI(mAccount.getTransportUri()); URI transportUri = new URI("smtp+tls+", transportUriForDecode.getUserInfo(), transportUriForDecode.getHost(), URI transportUri = new URI("smtp+tls+", transportUriForDecode.getUserInfo(), suggestedTransportServerName, transportUriForDecode.getPort(), null, null, null); mAccount.setTransportUri(transportUri.toString()); } Loading @@ -78,7 +93,10 @@ public class AccountSetupAccountType extends K9Activity implements OnClickListen if (userInfo.length > 2) { userPass = userPass + ":" + userInfo[2]; } URI uri = new URI("webdav+ssl+", userPass, uriForDecode.getHost(), uriForDecode.getPort(), null, null, null); String domainPart = EmailHelper.getDomainFromEmailAddress(mAccount.getEmail()); String suggestedServerName = serverNameSuggester.suggestServerName(WebDAV, domainPart); URI uri = new URI("webdav+ssl+", userPass, suggestedServerName, uriForDecode.getPort(), null, null, null); mAccount.setStoreUri(uri.toString()); } Loading @@ -86,11 +104,11 @@ public class AccountSetupAccountType extends K9Activity implements OnClickListen try { switch (v.getId()) { case R.id.pop: { setupStoreAndSmtpTransport("pop3+ssl+"); setupStoreAndSmtpTransport(POP3, "pop3+ssl+"); break; } case R.id.imap: { setupStoreAndSmtpTransport("imap+ssl+"); setupStoreAndSmtpTransport(IMAP, "imap+ssl+"); break; } case R.id.webdav: { Loading k9mail/src/main/java/com/fsck/k9/helper/EmailHelper.java 0 → 100644 +15 −0 Original line number Diff line number Diff line package com.fsck.k9.helper; public final class EmailHelper { private EmailHelper() {} public static String getDomainFromEmailAddress(String email) { int separatorIndex = email.lastIndexOf('@'); if (separatorIndex == -1 || separatorIndex + 1 == email.length()) { return null; } return email.substring(separatorIndex + 1); } } k9mail/src/main/java/com/fsck/k9/setup/ServerNameSuggester.java 0 → 100644 +26 −0 Original line number Diff line number Diff line package com.fsck.k9.setup; import com.fsck.k9.mail.ServerSettings.Type; public class ServerNameSuggester { public String suggestServerName(Type serverType, String domainPart) { switch (serverType) { case IMAP: { return "imap." + domainPart; } case SMTP: { return "smtp." + domainPart; } case WebDAV: { return "exchange." + domainPart; } case POP3: { return "pop3." + domainPart; } } throw new AssertionError("Missed case: " + serverType); } } k9mail/src/test/java/com/fsck/k9/setup/ServerNameSuggesterTest.java 0 → 100644 +64 −0 Original line number Diff line number Diff line package com.fsck.k9.setup; import com.fsck.k9.mail.ServerSettings.Type; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.robolectric.RobolectricTestRunner; import org.robolectric.annotation.Config; import static org.junit.Assert.assertEquals; @RunWith(RobolectricTestRunner.class) @Config(manifest = Config.NONE, sdk = 21) public class ServerNameSuggesterTest { private ServerNameSuggester serverNameSuggester; @Before public void setUp() throws Exception { serverNameSuggester = new ServerNameSuggester(); } @Test public void suggestServerName_forImapServer() throws Exception { Type serverType = Type.IMAP; String domainPart = "example.org"; String result = serverNameSuggester.suggestServerName(serverType, domainPart); assertEquals("imap.example.org", result); } @Test public void suggestServerName_forPop3Server() throws Exception { Type serverType = Type.POP3; String domainPart = "example.org"; String result = serverNameSuggester.suggestServerName(serverType, domainPart); assertEquals("pop3.example.org", result); } @Test public void suggestServerName_forWebDavServer() throws Exception { Type serverType = Type.WebDAV; String domainPart = "example.org"; String result = serverNameSuggester.suggestServerName(serverType, domainPart); assertEquals("exchange.example.org", result); } @Test public void suggestServerName_forSmtpServer() throws Exception { Type serverType = Type.SMTP; String domainPart = "example.org"; String result = serverNameSuggester.suggestServerName(serverType, domainPart); assertEquals("smtp.example.org", result); } } Loading
k9mail/src/main/java/com/fsck/k9/activity/setup/AccountSetupAccountType.java +25 −7 Original line number Diff line number Diff line package com.fsck.k9.activity.setup; import android.content.Context; import android.content.Intent; import android.os.Bundle; Loading @@ -13,9 +13,19 @@ import com.fsck.k9.K9; import com.fsck.k9.Preferences; import com.fsck.k9.R; import com.fsck.k9.activity.K9Activity; import com.fsck.k9.helper.EmailHelper; import com.fsck.k9.mail.ServerSettings.Type; import com.fsck.k9.setup.ServerNameSuggester; import java.net.URI; import java.net.URISyntaxException; import static com.fsck.k9.mail.ServerSettings.Type.IMAP; import static com.fsck.k9.mail.ServerSettings.Type.POP3; import static com.fsck.k9.mail.ServerSettings.Type.SMTP; import static com.fsck.k9.mail.ServerSettings.Type.WebDAV; /** * Prompts the user to select an account type. The account type, along with the * passed in email address, password and makeDefault are then passed on to the Loading @@ -25,6 +35,7 @@ public class AccountSetupAccountType extends K9Activity implements OnClickListen private static final String EXTRA_ACCOUNT = "account"; private static final String EXTRA_MAKE_DEFAULT = "makeDefault"; private final ServerNameSuggester serverNameSuggester = new ServerNameSuggester(); private Account mAccount; private boolean mMakeDefault; Loading @@ -48,14 +59,18 @@ public class AccountSetupAccountType extends K9Activity implements OnClickListen mMakeDefault = getIntent().getBooleanExtra(EXTRA_MAKE_DEFAULT, false); } private void setupStoreAndSmtpTransport(String schemePrefix) throws URISyntaxException { private void setupStoreAndSmtpTransport(Type serverType, String schemePrefix) throws URISyntaxException { String domainPart = EmailHelper.getDomainFromEmailAddress(mAccount.getEmail()); String suggestedStoreServerName = serverNameSuggester.suggestServerName(serverType, domainPart); URI storeUriForDecode = new URI(mAccount.getStoreUri()); URI storeUri = new URI(schemePrefix, storeUriForDecode.getUserInfo(), storeUriForDecode.getHost(), URI storeUri = new URI(schemePrefix, storeUriForDecode.getUserInfo(), suggestedStoreServerName, storeUriForDecode.getPort(), null, null, null); mAccount.setStoreUri(storeUri.toString()); String suggestedTransportServerName = serverNameSuggester.suggestServerName(SMTP, domainPart); URI transportUriForDecode = new URI(mAccount.getTransportUri()); URI transportUri = new URI("smtp+tls+", transportUriForDecode.getUserInfo(), transportUriForDecode.getHost(), URI transportUri = new URI("smtp+tls+", transportUriForDecode.getUserInfo(), suggestedTransportServerName, transportUriForDecode.getPort(), null, null, null); mAccount.setTransportUri(transportUri.toString()); } Loading @@ -78,7 +93,10 @@ public class AccountSetupAccountType extends K9Activity implements OnClickListen if (userInfo.length > 2) { userPass = userPass + ":" + userInfo[2]; } URI uri = new URI("webdav+ssl+", userPass, uriForDecode.getHost(), uriForDecode.getPort(), null, null, null); String domainPart = EmailHelper.getDomainFromEmailAddress(mAccount.getEmail()); String suggestedServerName = serverNameSuggester.suggestServerName(WebDAV, domainPart); URI uri = new URI("webdav+ssl+", userPass, suggestedServerName, uriForDecode.getPort(), null, null, null); mAccount.setStoreUri(uri.toString()); } Loading @@ -86,11 +104,11 @@ public class AccountSetupAccountType extends K9Activity implements OnClickListen try { switch (v.getId()) { case R.id.pop: { setupStoreAndSmtpTransport("pop3+ssl+"); setupStoreAndSmtpTransport(POP3, "pop3+ssl+"); break; } case R.id.imap: { setupStoreAndSmtpTransport("imap+ssl+"); setupStoreAndSmtpTransport(IMAP, "imap+ssl+"); break; } case R.id.webdav: { Loading
k9mail/src/main/java/com/fsck/k9/helper/EmailHelper.java 0 → 100644 +15 −0 Original line number Diff line number Diff line package com.fsck.k9.helper; public final class EmailHelper { private EmailHelper() {} public static String getDomainFromEmailAddress(String email) { int separatorIndex = email.lastIndexOf('@'); if (separatorIndex == -1 || separatorIndex + 1 == email.length()) { return null; } return email.substring(separatorIndex + 1); } }
k9mail/src/main/java/com/fsck/k9/setup/ServerNameSuggester.java 0 → 100644 +26 −0 Original line number Diff line number Diff line package com.fsck.k9.setup; import com.fsck.k9.mail.ServerSettings.Type; public class ServerNameSuggester { public String suggestServerName(Type serverType, String domainPart) { switch (serverType) { case IMAP: { return "imap." + domainPart; } case SMTP: { return "smtp." + domainPart; } case WebDAV: { return "exchange." + domainPart; } case POP3: { return "pop3." + domainPart; } } throw new AssertionError("Missed case: " + serverType); } }
k9mail/src/test/java/com/fsck/k9/setup/ServerNameSuggesterTest.java 0 → 100644 +64 −0 Original line number Diff line number Diff line package com.fsck.k9.setup; import com.fsck.k9.mail.ServerSettings.Type; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.robolectric.RobolectricTestRunner; import org.robolectric.annotation.Config; import static org.junit.Assert.assertEquals; @RunWith(RobolectricTestRunner.class) @Config(manifest = Config.NONE, sdk = 21) public class ServerNameSuggesterTest { private ServerNameSuggester serverNameSuggester; @Before public void setUp() throws Exception { serverNameSuggester = new ServerNameSuggester(); } @Test public void suggestServerName_forImapServer() throws Exception { Type serverType = Type.IMAP; String domainPart = "example.org"; String result = serverNameSuggester.suggestServerName(serverType, domainPart); assertEquals("imap.example.org", result); } @Test public void suggestServerName_forPop3Server() throws Exception { Type serverType = Type.POP3; String domainPart = "example.org"; String result = serverNameSuggester.suggestServerName(serverType, domainPart); assertEquals("pop3.example.org", result); } @Test public void suggestServerName_forWebDavServer() throws Exception { Type serverType = Type.WebDAV; String domainPart = "example.org"; String result = serverNameSuggester.suggestServerName(serverType, domainPart); assertEquals("exchange.example.org", result); } @Test public void suggestServerName_forSmtpServer() throws Exception { Type serverType = Type.SMTP; String domainPart = "example.org"; String result = serverNameSuggester.suggestServerName(serverType, domainPart); assertEquals("smtp.example.org", result); } }