高通android 7.0新建短信流程

在短信列表,点击新建短信按钮,进入新建短信流程。
ConversationList.java

public void createNewMessage() {
        startActivity(ComposeMessageActivity.createIntent(this, 0));
    }
新建和打开已有的的区别是传递进去的threadId不一样,新建的threadId为0,也就是数据库中并没有记录。

ComposeMessageActivity.java
onCreate

Window window = ComposeMessageActivity.this.getWindow();
window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
设置短信的系统bar,状态栏等的背景是透明的,所以最终效果是跟短信背景一体化。

initResourceRefs();初始化资源,里面具体内容读者自己查看,无非就是调用findViewById来获取控件

mBackgroundQueryHandler = new BackgroundQueryHandler(mContentResolver);这个是用来后台查询数据的

initialize(savedInstanceState, 0);初始化数据
我们主要来看initialize
mWorkingMessage = WorkingMessage.createEmpty(this);创建一个空的WorkingMessage,前面我们说过了,WorkingMessage表示一个正在编辑的短信

initActivityState(savedInstanceState);主要根据传递进来的Intent,来分析处理,对于新建短信,并没有什么需要加载的。后面分析

initMessageList();初始化短信历史列表

if (mConversation.getThreadId() <= 0//新建短信的threadId就是为0,所以走if分支
                && (!mConversation.isGroupChat() || mConversation.getGroupChat() == null)) {
            // Hide the recipients editor so the call to initRecipientsEditor won't get
            // short-circuited.
            hideRecipientEditor();//收件人编辑框只有在新建短信的场景下才会有
            initRecipientsEditor();//初始化收件人编辑框
            updateColorPalette(sPrimaryColorDark);
            setActionBarColor(sPrimaryColorDark);
        } else {
            hideRecipientEditor();
        }

updateSendButtonState();更新发送按钮状态,只有收件人和短信发送内容都有的情况下,且短信可用,默认短信,sim卡可用的情况下,发送按钮才会enable

drawTopPanel(false);//这里的topPanel,是我们添加彩信附件的时候,会在文字编辑框上面出现的区域
if (!mShouldLoadDraft) {//在initialize上面进行判断的,是否加载草稿,新建符合savedInstanceState == null条件,所以是不需要加载草稿
     // We're not loading a draft, so we can draw the bottom panel immediately.
     drawBottomPanel();//主要绘制文字编辑框所在区域,每次调用这个,都会根据当前短信实时状态来绘制。
}
updateTitle(mConversation.getRecipients());//更新标题


onStart
initFocus();初始化焦点
第一次进入短信会话详情界面,焦点主要处于两个地方,要么新建短信等有收件人编辑框的,会处于收件人编辑框,要么焦点会在文本编辑框
if (isRecipientsEditorVisible()) {
            mRecipientsEditor.addTextChangedListener(mRecipientsWatcher);
        }为收件人编辑框添加文本改变监听类,短信的各个状态都会因为收件人的输入删除而发送改变

registerReceiver(mHttpProgressReceiver, mHttpProgressFilter);
// Register a BroadcastReceiver to listen on SD card state.
registerReceiver(mMediaStateReceiver, getMediaStateFilter());
registerReceiver(mAirplaneModeBroadcastReceiver, mAirplaneModeFilter);
registerReceiver(mSimBroadcastReceiver, mSIMStatusChangeFilter);
注册各类广播

getWindow().setSoftInputMode(mode);软键盘相关

CharSequence text = mWorkingMessage.getText();//新建的话这里为null
        if (text != null) {
            mTextEditor.setTextKeepState(text);
        }
        if (!DEFER_LOADING_MESSAGES_AND_DRAFT) {
            loadMessagesAndDraft(1);
        } else {//我们会走else分支
            // HACK: force load messages+draft after max delay, if it's not already loaded.
            // this is to work around when coming out of sleep mode. WindowManager behaves
            // strangely and hides the keyboard when it should be shown, or sometimes initially
            // shows it when we want to hide it. In that case, we never get the onSizeChanged()
            // callback w/ keyboard shown, so we wouldn't know to load the messages+draft.
            mHandler.postDelayed(new Runnable() {
                public void run() {
                    loadMessagesAndDraft(2);//查询短信历史记录和草稿,我们新建短信查询后为空,所以这里就不说了,留着后面说
                }
            }, LOADING_MESSAGES_AND_DRAFT_MAX_DELAY_MS);
        }

onResume
没有特别需要看的。。。

所以其实新建是特别简单的流程,什么都是新的,涉及到的就是收件人编辑框。对于收件人编辑框,我后面会有一个专门的博客来进行说明。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值