From 486e971066979f41c1a38ad7414cd1430a55d87e Mon Sep 17 00:00:00 2001 From: Tony Mantler Date: Fri, 15 Aug 2014 11:18:10 -0700 Subject: [PATCH] Fix providers.xml alternate diversion b/17048013 Change-Id: If2bc857266a6ba1445bf1fabbaed179c1b13a14f --- .../android/emailcommon/provider/HostAuth.java | 7 +++++++ .../email/activity/setup/AccountSetupFinal.java | 15 +++++++++------ 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/emailcommon/src/com/android/emailcommon/provider/HostAuth.java b/emailcommon/src/com/android/emailcommon/provider/HostAuth.java index c23f276a8..5ed10c00b 100644 --- a/emailcommon/src/com/android/emailcommon/provider/HostAuth.java +++ b/emailcommon/src/com/android/emailcommon/provider/HostAuth.java @@ -562,6 +562,13 @@ public class HostAuth extends EmailContent implements Parcelable { setConnection(protocol, host, port, flags, clientCertAlias); } + public static String getProtocolFromString(String uriString) { + final Uri uri = Uri.parse(uriString); + final String scheme = uri.getScheme(); + final String[] schemeParts = scheme.split("\\+"); + return schemeParts[0]; + } + @Override public String toString() { return "[protocol " + mProtocol + "]"; diff --git a/src/com/android/email/activity/setup/AccountSetupFinal.java b/src/com/android/email/activity/setup/AccountSetupFinal.java index 4a163049f..f080b136b 100644 --- a/src/com/android/email/activity/setup/AccountSetupFinal.java +++ b/src/com/android/email/activity/setup/AccountSetupFinal.java @@ -857,18 +857,21 @@ public class AccountSetupFinal extends AccountSetupActivity try { mProvider.expandTemplates(email); - final Account account = mSetupData.getAccount(); - final HostAuth recvAuth = account.getOrCreateHostAuthRecv(this); - recvAuth.setHostAuthFromString(mProvider.incomingUri); - - final EmailServiceUtils.EmailServiceInfo info = mSetupData.getIncomingServiceInfo(this); + final String primaryProtocol = HostAuth.getProtocolFromString(mProvider.incomingUri); + EmailServiceUtils.EmailServiceInfo info = + EmailServiceUtils.getServiceInfo(this, primaryProtocol); // If the protocol isn't one we can use, and we're not diverting to gmail, try the alt if (!info.isGmailStub && !EmailServiceUtils.isServiceAvailable(this, info.protocol)) { LogUtils.d(LogUtils.TAG, "Protocol %s not available, using alternate", info.protocol); mProvider.expandAlternateTemplates(email); - recvAuth.setHostAuthFromString(mProvider.incomingUri); + final String alternateProtocol = HostAuth.getProtocolFromString( + mProvider.incomingUri); + info = EmailServiceUtils.getServiceInfo(this, alternateProtocol); } + final Account account = mSetupData.getAccount(); + final HostAuth recvAuth = account.getOrCreateHostAuthRecv(this); + recvAuth.setHostAuthFromString(mProvider.incomingUri); recvAuth.setUserName(mProvider.incomingUsername); recvAuth.mPort =