diff --git a/AndroidManifest.xml b/AndroidManifest.xml index e7a566102..539a8433d 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -108,6 +108,18 @@ android:configChanges="keyboardHidden|orientation|locale" > + + + + + + + + + + + + \ No newline at end of file diff --git a/res/values/strings.xml b/res/values/strings.xml index 46444369f..06528342f 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -369,6 +369,8 @@ http://k9mail.googlecode.com/ Canceling\u2026 Autoconfiguration attempt + Confirm incoming server settings + Confirm outgoing server settings Attempting to configure your account... Looking for safe server-side configuration files... Looking for UNSAFE server-side configuration files... diff --git a/src/com/fsck/k9/activity/setup/AccountSetupAutoConfiguration.java b/src/com/fsck/k9/activity/setup/AccountSetupAutoConfiguration.java index 42cba7620..2d1c22912 100644 --- a/src/com/fsck/k9/activity/setup/AccountSetupAutoConfiguration.java +++ b/src/com/fsck/k9/activity/setup/AccountSetupAutoConfiguration.java @@ -14,9 +14,11 @@ import android.widget.TextView; import com.fsck.k9.K9; import com.fsck.k9.R; import com.fsck.k9.activity.K9Activity; +import com.fsck.k9.helper.configxmlparser.AutoconfigInfo; import com.fsck.k9.helper.configxmlparser.ConfigurationXMLHandler; import com.fsck.k9.mail.store.TrustManagerFactory; import org.xml.sax.InputSource; +import org.xml.sax.Parser; import org.xml.sax.SAXException; import org.xml.sax.XMLReader; @@ -85,6 +87,7 @@ public class AccountSetupAutoConfiguration extends K9Activity implements View.On private String mEmailAddress; private String mPassword; private String mLastMessage; + private AutoconfigInfo mAutoConfigInfo; private boolean bForceManual = false; private boolean bDoneSearching = false; private boolean bFound = false; @@ -257,10 +260,12 @@ public class AccountSetupAutoConfiguration extends K9Activity implements View.On Start parsing the xml */ private void parse(String data) throws IOException, SAXException, ParserConfigurationException { + ConfigurationXMLHandler parser = new ConfigurationXMLHandler(); XMLReader xr = SAXParserFactory.newInstance().newSAXParser().getXMLReader(); - xr.setContentHandler(new ConfigurationXMLHandler()); + xr.setContentHandler(parser); // TODO: see if this has performance consequences, otherwise change all so we pass around InputSource not string xr.parse(new InputSource(new StringReader(data))); + mAutoConfigInfo = parser.getAutoconfigInfo(); } /* @@ -367,12 +372,6 @@ public class AccountSetupAutoConfiguration extends K9Activity implements View.On return retParts; } - @Override - public void onActivityResult(int reqCode, int resCode, Intent data) { - setResult(resCode); - finish(); - } - public void onClick(View v) { switch (v.getId()) { case R.id.autoconfig_button_cancel: @@ -384,7 +383,9 @@ public class AccountSetupAutoConfiguration extends K9Activity implements View.On // launch confirm activities }else{ - + AccountSetupConfirmIncoming.actionConfirmIncoming + (this, mEmailAddress, mPassword, mAutoConfigInfo); + finish(); } break; default: return; @@ -394,6 +395,7 @@ public class AccountSetupAutoConfiguration extends K9Activity implements View.On /* Ask the user to accept ssl certificates if they are not trusted already. TODO: Rework this so it changes the url counter, not restart intent + NOTE: It's called but doesn't work right now because for the connection the default sslfactory is yet used */ private void acceptKeyDialog(final int msgResId, final int urlNumber, final Object... args) { mHandler.post(new Runnable() { diff --git a/src/com/fsck/k9/activity/setup/AccountSetupConfirmIncoming.java b/src/com/fsck/k9/activity/setup/AccountSetupConfirmIncoming.java new file mode 100644 index 000000000..1aab3fa91 --- /dev/null +++ b/src/com/fsck/k9/activity/setup/AccountSetupConfirmIncoming.java @@ -0,0 +1,87 @@ +package com.fsck.k9.activity.setup; + +/* + After gathering the necessary information one way or another this activity displays it to the user, eventually warns + him it could be false ( no https ), asks for confirmation, allows selection of protocol,... and then goes on to test + the final settings. + */ + +import android.content.Context; +import android.content.Intent; +import android.os.Bundle; +import android.view.View; +import android.widget.ArrayAdapter; +import android.widget.Spinner; +import com.fsck.k9.Account; +import com.fsck.k9.Preferences; +import com.fsck.k9.R; +import com.fsck.k9.activity.K9Activity; +import com.fsck.k9.helper.configxmlparser.AutoconfigInfo; +import com.fsck.k9.helper.configxmlparser.AutoconfigInfo.ServerType; + +public class AccountSetupConfirmIncoming extends K9Activity implements View.OnClickListener { + + private static final String EXTRA_ACCOUNT = "account"; + private static final String EXTRA_CONFIG_INFO = "configInfo"; + private static final String EXTRA_EMAIL = "email"; + private static final String EXTRA_PASSWORD = "password"; + + + public static void actionConfirmIncoming(Context context, Account account, AutoconfigInfo info) { + Intent i = new Intent(context, AccountSetupConfirmIncoming.class); + i.putExtra(EXTRA_ACCOUNT, account.getUuid()); + i.putExtra(EXTRA_CONFIG_INFO, info); + context.startActivity(i); + } + + public static void actionConfirmIncoming(Context context, String email, String password, AutoconfigInfo info){ + Intent i = new Intent(context, AccountSetupConfirmIncoming.class); + i.putExtra(EXTRA_EMAIL, email); + i.putExtra(EXTRA_PASSWORD, password); + i.putExtra(EXTRA_CONFIG_INFO, info); + context.startActivity(i); + } + + // data + Account mAccount; + AutoconfigInfo mConfigInfo; + + // gui elements + Spinner mProtocolSpinner; + Spinner mHostnameSpinner; + + @Override + public void onCreate(Bundle savedInstance){ + super.onCreate(savedInstance); + setContentView(R.layout.account_setup_confirm); + + // initialise gui elements from inflated layout + mHostnameSpinner = (Spinner) findViewById(R.id.spinner_hostname); + mProtocolSpinner = (Spinner) findViewById(R.id.spinner_protocol); + + // get the data out of our intent + // if no blank account passed make one + String accountUuid = getIntent().getStringExtra(EXTRA_ACCOUNT); + if(accountUuid != null) + mAccount = Preferences.getPreferences(this).getAccount(accountUuid); + else mAccount = Account.getBlankAccount(this, + getIntent().getStringExtra(EXTRA_EMAIL), + getIntent().getStringExtra(EXTRA_PASSWORD)); + mConfigInfo = getIntent().getParcelableExtra(EXTRA_CONFIG_INFO); + + // attach data to gui elements + // TODO: could make it's own layout xml.. + ArrayAdapter protocolAdapter = + new ArrayAdapter(this, R.layout.account_setup_index_list_item, mConfigInfo.getAvailableIncomingServerTypes()); + mHostnameSpinner.setAdapter(protocolAdapter); + + // attach the listeners + + } + + @Override + public void onClick(View view) { + //To change body of implemented methods use File | Settings | File Templates. + } + +} diff --git a/src/com/fsck/k9/activity/setup/AccountSetupConfirmOutgoing.java b/src/com/fsck/k9/activity/setup/AccountSetupConfirmOutgoing.java new file mode 100644 index 000000000..5de2eb71a --- /dev/null +++ b/src/com/fsck/k9/activity/setup/AccountSetupConfirmOutgoing.java @@ -0,0 +1,72 @@ +package com.fsck.k9.activity.setup; + +/* + After gathering the necessary information one way or another this activity displays it to the user, eventually warns + him it could be false ( no https ), asks for confirmation, allows selection of protocol,... and then goes on to test + the final settings. + */ + +import android.app.Activity; +import android.content.Context; +import android.content.Intent; +import android.os.Bundle; +import android.view.View; +import com.fsck.k9.Account; +import com.fsck.k9.Preferences; +import com.fsck.k9.R; +import com.fsck.k9.activity.K9Activity; +import com.fsck.k9.helper.configxmlparser.AutoconfigInfo; + +public class AccountSetupConfirmOutgoing extends K9Activity implements View.OnClickListener{ + + private static final String EXTRA_ACCOUNT = "account"; + private static final String EXTRA_CONFIG_INFO = "configInfo"; + private static final String EXTRA_EMAIL = "email"; + private static final String EXTRA_PASSWORD = "password"; + + + public static void actionConfirmOutgoing(Context context, Account account, AutoconfigInfo info) { + Intent i = new Intent(context, AccountSetupConfirmOutgoing.class); + i.putExtra(EXTRA_ACCOUNT, account.getUuid()); + i.putExtra(EXTRA_CONFIG_INFO, info); + context.startActivity(i); + } + + public static void actionConfirmOutgoing(Context context, String email, String password, AutoconfigInfo info){ + Intent i = new Intent(context, AccountSetupConfirmOutgoing.class); + i.putExtra(EXTRA_EMAIL, email); + i.putExtra(EXTRA_PASSWORD, password); + i.putExtra(EXTRA_CONFIG_INFO, info); + context.startActivity(i); + } + + // data + Account mAccount; + AutoconfigInfo mConfigInfo; + + @Override + public void onCreate(Bundle savedInstance){ + super.onCreate(savedInstance); + setContentView(R.layout.account_setup_confirm); + + // initialise gui elements from inflated layout + + // get the data out of our intent + // if no blank account passed make one + String accountUuid = getIntent().getStringExtra(EXTRA_ACCOUNT); + if(accountUuid != null) + mAccount = Preferences.getPreferences(this).getAccount(accountUuid); + else mAccount = Account.getBlankAccount(this, + getIntent().getStringExtra(EXTRA_EMAIL), + getIntent().getStringExtra(EXTRA_PASSWORD)); + mConfigInfo = getIntent().getParcelableExtra(EXTRA_CONFIG_INFO); + + // attach the listeners + + } + + @Override + public void onClick(View view) { + //To change body of implemented methods use File | Settings | File Templates. + } +}