1
0
mirror of https://github.com/moparisthebest/k-9 synced 2024-08-13 17:03:48 -04:00

Dialogs in place to continue after selecting an account. No input validation for now.

This commit is contained in:
Sander Bogaert 2011-06-28 14:17:19 +02:00 committed by Andrew Chen
parent 002f1a7429
commit 694b643a7c
4 changed files with 270 additions and 23 deletions

View File

@ -0,0 +1,49 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:padding="10dp">
<TextView android:id="@+id/form_label_email"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/account_setup_basics_email_hint"
android:layout_marginBottom="10dp"/>
<EditText android:id="@+id/account_dialog_address_field"
android:singleLine="true"
android:inputType="textEmailAddress"
android:layout_height="wrap_content"
android:layout_width="fill_parent"/>
<TextView android:id="@+id/form_label_password"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/account_setup_basics_password_hint"
android:layout_marginBottom="10dp"/>
<EditText android:id="@+id/account_dialog_password_field"
android:inputType="textPassword"
android:password="true"
android:singleLine="true"
android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:nextFocusDown="@+id/next"/>
<CheckBox android:id="@+id/account_dialog_manual_box"
android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:text="@string/account_setup_basics_manual_setup_action"/>
<Button android:id="@+id/account_dialog_next"
android:text="@string/next_action"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:drawableRight="@drawable/button_indicator_next" />
<!-- android:layout_marginBottom="-4dip"
android:layout_alignParentRight="true"
android:layout_centerVertical="false"-->
</LinearLayout>

View File

@ -0,0 +1,38 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:padding="10dp">
<TextView android:id="@+id/account_dialog_password_help"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="10dp"/>
<EditText
android:id="@+id/account_dialog_password_field"
android:inputType="textPassword"
android:password="true"
android:singleLine="true"
android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:nextFocusDown="@+id/next"
/>
<CheckBox android:id="@+id/account_dialog_manual_box"
android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:text="@string/account_setup_basics_manual_setup_action"/>
<Button android:id="@+id/account_dialog_next"
android:text="@string/next_action"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:drawableRight="@drawable/button_indicator_next" />
<!-- android:layout_marginBottom="-4dip"
android:layout_alignParentRight="true"
android:layout_centerVertical="false"-->
</LinearLayout>

View File

@ -351,6 +351,7 @@ http://k9mail.googlecode.com/
<string name="accounts_setup_help">
Select an account here to setup, press menu to load more backup files or create an new account.
</string>
<string name="account_setup_device_sectionheader">Device</string>
<string name="account_setup_basics_instructions">Enter this account\'s email address:</string>
<string name="account_setup_basics_email_hint">Email address</string>
<string name="account_setup_basics_password_hint">Password</string>

View File

@ -6,37 +6,57 @@ import android.content.Context;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Parcelable;
import android.provider.ContactsContract;
import android.text.Editable;
import android.text.TextWatcher;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.*;
import android.widget.AdapterView.OnItemClickListener;
import com.fsck.k9.EmailAddressValidator;
import com.fsck.k9.R;
import com.fsck.k9.*;
import com.fsck.k9.activity.K9ListActivity;
import com.fsck.k9.helper.Contacts;
import com.fsck.k9.helper.SectionListAdapter;
import java.io.Serializable;
import java.io.UnsupportedEncodingException;
import java.net.URI;
import java.net.URISyntaxException;
import java.net.URLEncoder;
import static com.fsck.k9.activity.setup.AccountSetupBasics.*;
/**
* User: dzan
* Date: 18/06/11
*
* TODO: Encapsulate accountAdaptor. No need for this to be global except due the test-data.
*/
public class AccountSetupIndex extends K9ListActivity implements OnItemClickListener, OnClickListener {
private static final String DEVICE_STRING = "Device";
private static final int DIALOG_NEW_ACCOUNT = 0;
private static final int DIALOG_DEVICE_ACCOUNT = 1;
private static final int DIALOG_BACKUP_ACCOUNT = 2;
private static final String BUNDLE_TYPE_SUGGESTION = "SUGGESTION";
public enum SuggestionType { DEVICE, BACKUP, NEW }
// temp hard coded value ( since we don't ask if it should be default account for now )
private boolean bTmpDefaultAccount = true;
private Account mAccount;
private Button mNewAccountDialogButton;
private Button mPasswordDialogButton;
private EmailAddressValidator mEmailValidator = new EmailAddressValidator();
public static void actionNewAccount(Context context) {
Intent i = new Intent(context, AccountSetupIndex.class);
context.startActivity(i);
}
private Button mNewAccountButton;
private SectionListAdapter<AccountSuggestion> accountAdapter;
@Override
@ -45,7 +65,7 @@ public class AccountSetupIndex extends K9ListActivity implements OnItemClickList
// layout
setContentView(R.layout.account_setup_index);
mNewAccountButton = (Button)findViewById(R.id.new_account);
Button mNewAccountButton = (Button)findViewById(R.id.new_account);
// button callbacks
mNewAccountButton.setOnClickListener(this);
@ -64,54 +84,153 @@ public class AccountSetupIndex extends K9ListActivity implements OnItemClickList
}
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
Toast.makeText(getApplicationContext(), ((TextView) view).getText(),
Toast.LENGTH_SHORT).show();
public void onItemClick(AdapterView<?> adapterView, View view, int pos, long id) {
SectionListAdapter<AccountSuggestion> adapter = (SectionListAdapter<AccountSuggestion>)adapterView.getAdapter();
AccountSuggestion suggestion = (AccountSuggestion)adapter.getItem(pos);
Bundle tmp = new Bundle();
tmp.putString(BUNDLE_TYPE_SUGGESTION,suggestion.getAccount());
switch(suggestion.getSuggestionType()){
case DEVICE:
showDialog(DIALOG_DEVICE_ACCOUNT,tmp);
break;
case BACKUP:
showDialog(DIALOG_BACKUP_ACCOUNT,tmp);
break;
default:
return;
}
}
public void onClick(View view) {
switch (view.getId()) {
case R.id.new_account:
onNew();
showDialog(DIALOG_NEW_ACCOUNT);
break;
}
}
protected void onNew() {
AccountSetupBasics.actionNewAccount(this);
}
/*
Dialogues
*/
protected Dialog onCreateDialog(int dialog_id){
Dialog dialog;
switch (dialog_id){
Dialog dialog = new Dialog(this);
switch(dialog_id){
case DIALOG_NEW_ACCOUNT:
dialog = new Dialog(this);
dialog.setContentView(R.layout.account_dialog_new);
dialog.setTitle("Setup a new account.");
final EditText emailField = ((EditText)dialog.findViewById(R.id.account_dialog_address_field));
final EditText passwordField = ((EditText)dialog.findViewById(R.id.account_dialog_password_field));
final CheckBox manualCheck = (CheckBox)dialog.findViewById(R.id.account_dialog_manual_box);
mNewAccountDialogButton = ((Button)dialog.findViewById(R.id.account_dialog_next));
mNewAccountDialogButton.setOnClickListener(new OnClickListener() {
public void onClick(View view) {
String email = emailField.getText().toString();
String password = passwordField.getText().toString();
// TODO: replace this with a few listeners on the fields that activate/deactive the button on acceptable values
if( !mEmailValidator.isValidAddressOnly(email) || password.isEmpty() ) return;
if(manualCheck.isChecked())
onManualSetup(email, password);
else startSettingsDetection(email, password);
}
});
break;
case DIALOG_DEVICE_ACCOUNT:
dialog = new Dialog(this);
break;
case DIALOG_BACKUP_ACCOUNT:
dialog = new Dialog(this);
dialog.setContentView(R.layout.account_dialog_password);
dialog.setTitle("Enter password.");
mPasswordDialogButton = ((Button)dialog.findViewById(R.id.account_dialog_next));
break;
default:
dialog = null;
default: dialog = null;
}
dialog.show();
return dialog;
}
protected void onPrepareDialog(int id, Dialog dialog, final Bundle args){
switch(id){
case DIALOG_DEVICE_ACCOUNT:
case DIALOG_BACKUP_ACCOUNT:
((TextView)dialog.findViewById(R.id.account_dialog_password_help)).setText
("Enter the password for the '" + args.get(BUNDLE_TYPE_SUGGESTION) + "' account: ");
final EditText passwordField = ((EditText) dialog.findViewById(R.id.account_dialog_password_field));
final CheckBox manualCheck = (CheckBox)dialog.findViewById(R.id.account_dialog_manual_box);
mPasswordDialogButton.setOnClickListener(new OnClickListener() {
public void onClick(View view) {
String email = args.get(BUNDLE_TYPE_SUGGESTION).toString();
String password = passwordField.getText().toString();
// TODO: replace this with a few listeners on the fields that activate/deactive the button on acceptable values
if( password.isEmpty() ) return;
if (manualCheck.isChecked())
onManualSetup(email, password);
else startSettingsDetection(email, password);
}
});
break;
default: return;
}
}
private void onManualSetup(String email, String password) {
String[] emailParts = splitEmail(email);
String user = emailParts[0];
String domain = emailParts[1];
mAccount = Preferences.getPreferences(this).newAccount();
mAccount.setName(getOwnerName());
mAccount.setEmail(email);
try {
String userEnc = URLEncoder.encode(user, "UTF-8");
String passwordEnc = URLEncoder.encode(password, "UTF-8");
URI uri = new URI("placeholder", userEnc + ":" + passwordEnc, "mail." + domain, -1, null,
null, null);
mAccount.setStoreUri(uri.toString());
mAccount.setTransportUri(uri.toString());
} catch (UnsupportedEncodingException enc) {
// This really shouldn't happen since the encoding is hardcoded to UTF-8
Log.e(K9.LOG_TAG, "Couldn't urlencode username or password.", enc);
} catch (URISyntaxException use) {
/*
* If we can't set up the URL we just continue. It's only for
* convenience.
*/
}
mAccount.setDraftsFolderName(getString(R.string.special_mailbox_name_drafts));
mAccount.setTrashFolderName(getString(R.string.special_mailbox_name_trash));
mAccount.setSentFolderName(getString(R.string.special_mailbox_name_sent));
AccountSetupAccountType.actionSelectAccountType(this, mAccount, bTmpDefaultAccount);
finish();
}
private void startSettingsDetection(String email, String password) {
}
/*
Scans device for email addresses and adds them as suggestions
*/
private void fillFromDevice(SectionListAdapter<AccountSuggestion> adp){
EmailAddressValidator mEmailValidator = new EmailAddressValidator();
for( android.accounts.Account acc : AccountManager.get(this).getAccounts() )
if( mEmailValidator.isValidAddressOnly(acc.name) )
adp.add(DEVICE_STRING, new AccountSuggestion(acc.name, SuggestionType.DEVICE));
adp.add(getString(R.string.account_setup_device_sectionheader), new AccountSuggestion(acc.name, SuggestionType.DEVICE));
// TEMP DATA TO TEST
accountAdapter.add("file1", new AccountSuggestion("piet@snot.com",SuggestionType.BACKUP));
@ -135,6 +254,46 @@ public class AccountSetupIndex extends K9ListActivity implements OnItemClickList
}
}
/*
Some helpers copy pasted from previous setup. Need a review.
*/
private String[] splitEmail(String email) {
String[] retParts = new String[2];
String[] emailParts = email.split("@");
retParts[0] = (emailParts.length > 0) ? emailParts[0] : "";
retParts[1] = (emailParts.length > 1) ? emailParts[1] : "";
return retParts;
}
private String getOwnerName() {
String name = null;
try {
name = Contacts.getInstance(this).getOwnerName();
} catch (Exception e) {
Log.e(K9.LOG_TAG, "Could not get owner name, using default account name", e);
}
if (name == null || name.length() == 0) {
try {
name = getDefaultAccountName();
} catch (Exception e) {
Log.e(K9.LOG_TAG, "Could not get default account name", e);
}
}
if (name == null) {
name = "";
}
return name;
}
private String getDefaultAccountName() {
String name = null;
Account account = Preferences.getPreferences(this).getDefaultAccount();
if (account != null) {
name = account.getName();
}
return name;
}
/*
Simple class to wrap account suggestion data
*/