登陆email

详细代码流程

Welcome.java首先在Welcome.javaonCreate()方法中,判断当前账户的数量

        try {

            c = getContentResolver().query(

                    EmailContent.Account.CONTENT_URI,

                    EmailContent.Account.ID_PROJECTION,

                    null,null,null);

            switch (c.getCount()) {

                case 0:

                AccountSetupGuide.actionSetupGuide(this);

                break;

                case 1:

                    c.moveToFirst();

                    long accountId = c.getLong(EmailContent.Account.CONTENT_ID_COLUMN);

                    MessageList.actionHandleAccount(this, accountId, Mailbox.TYPE_INBOX);

                    break;

                default:

                    AccountFolderList.actionShowAccounts(this);

                    break;

            }

        } finally {

            if (c !=null) {

                c.close();

            }

        }

c.getcount()1时,直接进入MessageList打开该账户的Inbox

c.getcount()0时,进入AccountSetupGuide去新建账户。

否则,进入AccountFolderList去选择账户。

 

AccountSetupGuide.java列出不同类型的账户供用户选择,并监听用户的操作

  list.setOnItemClickListener(new OnItemClickListener(){

   publicvoid onItemClick(AdapterView<?> adapterView, View view,int position,long id) {

   BooleanisExchangePositionCustom = (1 == Settings.Systemex.getInt(getContentResolver(),                       "exchange_position_custom", 0));

                if (!isExchangePositionCustom && (position == 0)) {

                    onExchangeAccountSetup();

                }elseif (isExchangePositionCustom && (position ==mListSuffixs.size()-2)) {

                                    onExchangeAccountSetup(); //Exchange

                } else

                if (position >=mListSuffixs.size()-1) {

                    onOtherAccountSetup();             //普通email

                } else {

                    onPresetAccountSetup(position);  //预置email类型

                }

            }

        });

无论选择哪个,都会进入AccountSetupBasics.java类,但是发送的intent不同。

privatevoid onExchangeAccountSetup() {

        AccountSetupBasics.actionSetupExchange(this);

    }

    privatevoid onOtherAccountSetup() {

        AccountSetupBasics.actionNewAccount(this);

    }

    privatevoid onPresetAccountSetup(int position) {

        AccountSetupBasics.actionNewAccount(this,mListSuffixs.get(position));

}

 

AccountSetupBasics.java:处理与用户输入的交互,这里要求用户输入账户地址,密码(exchange还需要域名和用户名),然后通过finishAutoSetup()onManualSetup()两个方法进行设置。若finishAutoSetup()出现异常,都会调用onManualSetup()

主要完成如下动作:保存email(地址),domain(域名),user(用户名),password(密码),由Provider提供incomingUsernameincomingUriTemplateoutgoingUsernameoutgoingUriTemplate;设置默认签名,默认同步间隔。

若是exchange类型账户,

        if (mEasAccount) {

            // TODO: Confirm correct delete policy for exchange

            mAccount.setDeletePolicy(Account.DELETE_POLICY_ON_DELETE);

            mAccount.setSyncInterval(Account.CHECK_INTERVAL_PUSH);

            mAccount.setSyncInterval(mDefaultCheckInterval);

            mAccount.setSyncLookback(1);

            AccountSetupExchange.actionIncomingSettings(this,mAccount,mDefaultView.isChecked(),mEasFlowMode,

                    allowAutoDiscover, true);

            return;

        }

其他类型,则

AccountSetupIncoming.actionIncomingSettings(this, mAccount, mDefaultView.isChecked(), true);

 

 

AccountSetupExchange.java保存如下信息: Email Address (from previous setup screen)ServerDomain,是否要求Requires SSL User (login) Password。调用loadFields(mAccount)将这些信息显示在UI。然后调用AccountSetupCheckSettings.java,进行设置检查,如果返回值为RESULT_OK,则执行doOptions(),调用AccountSetupOptions.java

 

AccountSetupCheckSettings.java:开启新线程调用store.autoDiscover()进行配置检查,并对返回值进行处理。如果返回值为RESULT_OK,则finish();是错误的状态值,则弹出showErrorDialog()

 

AccountSetupIncoming.java:分支代码。主要进行接收服务器设置,设置接受协议和端口。(AccountSetupOutgoing.java:外发服务器设置,外发协议及端口)。由于界面优化,现在功能实现都整合在AccountSetupIncoming.java中实现了。用户可以切换pop3/imap类型,则调用changeToImap()changeToPop3()更新端口和安全策略。

 

AccountSetupOptions.java显示默认同步间隔,是否为默认账户,exchange还显示同步联系人及日历初始状态。用户

 

AccountSetupNames.java设置账户姓名(exchange不需要)和外发显示姓名。设置之后下一步会调用AccountBackupStore.java(调用EmailContent.javapublic Uri save(Context context))将账户信息写入数据库。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值