编辑内容后,按home键返回待机,之前输入的内容未保存

短信编辑器是不支持“退出时自动保存文字”的功能的,也没有compile option可以打开来支持。如果要支持需要进行新的设计完成这个功能,下面提供一些设计思路:

编辑器退出(Home key和Back key两种case)的时候,将短信内容保存到文件或一个全局变量(大小需要2K)。建议使用全局变量,用文件需要很多error handling会比较复杂。但是全局变量有个缺点就是关机之后信息会丢失。

1. 保存短信内容
Back Key --> 在VappComposerMainPage()::onBack() 函数的最开头部分加入保存短信的代码;
Home Key --> 在VcuiUcMainCui()::onProcessClose() 函数的结尾部分,return VFX_APP_CLOSE_ANSWER_YES 语句之前,加入保存短信的代码;
VappComposerMainPage中取text的方法: textEditorBody->getText()
VcuiUcMainCui取text的方法:m_scr->comoser_page->textEditorBody->getText()

2. 读取并恢复短信内容
在VappComposerMainPage()::onEntered() 函数的结尾部分加入读取并恢复短信的代码
设置editor的文字: textEditorBody->setText()

3. 如果希望只是新建一条新短信的时候进入编辑器才恢复之前的文字,其他情况(如:reply, forward,share picture from gallery ...)都不需要恢复之前的文字,那么需要在新建短信的时候设置一个flag,在前面提到的读取和恢复短信的代码之前检查这个flag,如果flag有置位才进行恢复操作。
设置flag的位置:在VcuiUcMainCui()::handleData() 中 语句 if(!data) 条件满足的时候,表示是新建一条短信。

补充一下,在VappComposerMainPage()::onEntered() 中去恢复保存的文字时可以使用 VappComposerMainPage()::insertTextString() 可以更方便,且不易出错,建议改用这个API。

 

具体修改代码如下:vapp_uc_core.cpp文件中

//-------------add code start
VfxWChar g_sms_txtbuffer[2048] = {0};
BOOL g_is_new_message = FALSE;
//-------------add code end


 

VfxBool VcuiUcMainCui::handleData(void* args, VfxU32 argsize)
{
    VappUcEntryStruct *data = (VappUcEntryStruct *)args;

    VFX_ALLOC_NEW(m_app_data, VappUcAppData, this);
    m_app_data->vappUcSetAppData();
    m_app_data->m_parent = (void *)this;

    m_app_data->appBaseId = ucGetAppBaseId(data,this->getGroupId());
    if( m_app_data->appBaseId == 0 )
    {
        MMI_ASSERT(0);
        vappUcDeInitData();
        m_app_data->m_signalTerminate.postEmit((WCHAR*)((UI_string_type) GetString(STR_GLOBAL_NOT_AVAILABLE)), MMI_NMGR_BALLOON_TYPE_FAILURE);
        return VFX_FALSE;
    }
    m_app_data->p_vapp_uc_asm = (VappUcAppDataAfterSerializeBuffer *)vadpAsmAlloc(getGroupId(), VAPP_UC_SERIALIZE_ASM_SIZE); 
    if( !(m_app_data->p_vapp_uc_asm) )
        MMI_ASSERT(0);
    m_app_data->main            = &(m_app_data->p_vapp_uc_asm->main);
    m_app_data->send_info       = &(m_app_data->p_vapp_uc_asm->send_info);
    m_app_data->done            = &(m_app_data->p_vapp_uc_asm->done);
    m_app_data->m_service_cntxt = &(m_app_data->p_vapp_uc_asm->m_service_cntxt);

    memset(m_app_data->main, 0, sizeof(VappUcMainStruct));
    memset(m_app_data->send_info, 0, sizeof(VappUcSendInfoStruct));
    memset(m_app_data->done, 0, sizeof(VappUcDoneStruct));
    memset(m_app_data->m_service_cntxt, 0, sizeof(srv_uc_cntxt_reference_struct));

    if( VFX_FALSE == m_app_data->getServiceContext() )
    {
        vappUcDeInitData();
        m_app_data->m_signalTerminate.postEmit((WCHAR*)((UI_string_type) GetString(STR_GLOBAL_NOT_AVAILABLE)), MMI_NMGR_BALLOON_TYPE_FAILURE);
        return VFX_FALSE;
    }

#ifdef __MMI_COSMOS_UC_VOLUNTEER_FREE_SUPPORT__
    vappUcResetSerialize(m_app_data->main->instance);
#endif        

 #ifdef __MMI_COSMOS_UC_END_KEY_SAVE_SUPPORT__
	EndKeyHandle[m_app_data->main->instance].EndKeyAppData = m_app_data;  
#endif     
    
    m_app_data->m_service_cntxt->main->app_id = getGroupId();
	{
		/*kuldeep_gplus*/
		VfxS16 error;
		U8 get_sim_id = 0;
		ReadValue(NVRAM_UC_APP_PREFER_SIM, &get_sim_id, DS_BYTE, &error);
		m_app_data->nvram_sim_id = (srv_uc_sim_id)get_sim_id ;
	}
    if(m_app_data->m_service_cntxt->send_info->action != SRV_UC_ACTION_IDLE)
    {
        vappUcDisplayPopup((WCHAR*)((UI_string_type) GetString(STR_GLOBAL_NOT_AVAILABLE)), MMI_NMGR_BALLOON_TYPE_FAILURE);
        vappUcDeInitData();
        return VFX_FALSE;
    }

	m_app_data->m_signalTerminate.connect(m_app_data, &VappUcAppData::vappUcTerminateWithPopup);
	m_app_data->m_signalTerminateWtPopUp.connect(this, &VcuiUcMainCui::vappUcTerminate);

	m_app_data->main->max_text_limit = UC_MMS_MAX_TEXT_CHAR_COUNT;
#ifdef __MMI_EMAIL__
    if (data && data->edit_mode == SRV_UC_MMS_EDIT_MODE_EMAIL)
	{
		m_app_data->main->max_text_limit = UC_EMAIL_MAX_TEXT_CHAR_COUNT;
	}
#endif
    m_app_data->m_useSecondStage = VFX_TRUE;


	g_is_new_message = FALSE;//---------------owner add code


    if(!data) /* WRITE MESSAGE  only from UM*/
    {
    	g_is_new_message = TRUE;//-----------------owner add code
        m_app_data->m_useSecondStage = VFX_FALSE;
        m_app_data->m_service_cntxt->main->state = SRV_UC_STATE_WRITE_NEW_MSG;
        m_app_data->resetApp();

        m_app_data->m_service_cntxt->msg_type->setting_msg_type = srv_uc_get_setting_msg_type();
        m_app_data->m_service_cntxt->msg_type->curr_msg_type = m_app_data->m_service_cntxt->msg_type->setting_msg_type;
    #ifdef __MMI_MMS_STANDALONE_COMPOSER__
        m_app_data->m_service_cntxt->msg_type->caller_specific_msg_type = SRV_UC_MSG_TYPE_MMS_ONLY;
    #else /* __MMI_MMS_STANDALONE_COMPOSER__ */ 
		#ifndef __MMI_MMS_2__
			m_app_data->m_service_cntxt->msg_type->caller_specific_msg_type = SRV_UC_MSG_TYPE_SMS_ONLY;
		#else
			m_app_data->m_service_cntxt->msg_type->caller_specific_msg_type = SRV_UC_MSG_TYPE_DEFAULT;
		#endif
    #endif /* __MMI_MMS_STANDALONE_COMPOSER__ */
        m_app_data->m_service_cntxt->msg_type->backup_msg_type = SRV_UC_MSG_TYPE_DEFAULT;
        m_app_data->m_service_cntxt->send_info->send_sim_id = vappUcGetCurrSimId();

        VfxS32 result = srv_uc_check_uc_folder(m_app_data->main->instance);
        if (result < 0)
        {
            //vappUcTerminate();
            vappUcDeInitData();
            //vappUcDisplayPopup((WCHAR*)((UI_string_type) GetString(srv_fmgr_fs_error_get_string(result))), MMI_NMGR_BALLOON_TYPE_FAILURE);
            m_app_data->m_signalTerminate.postEmit((WCHAR*)((UI_string_type) GetString(srv_fmgr_fs_error_get_string(result))), MMI_NMGR_BALLOON_TYPE_FAILURE);
            return VFX_FALSE;
        }
        if(m_app_data->m_service_cntxt->main->state != SRV_UC_STATE_WRITE_NEW_MSG)
        {
            /* TODO: Show progressing screen */
        }
        srv_uc_get_sms_setting(m_app_data->main->instance);
        if(!m_app_data->getMmsSetting())
        {
            vappUcDeInitData();
            return VFX_FALSE;
        }
    }
    else if(data->type == SRV_UC_STATE_WRITE_NEW_MSG ||	/* WRITE MESSAGE from any application */
		(data->info_type == SRV_UC_INFO_TYPE_EMAIL && data->type == SRV_UC_STATE_EDIT_EXISTED_MSG ) ||
		(data->info_type == SRV_UC_INFO_TYPE_SMS_TEMPLATE && data->type == SRV_UC_STATE_EDIT_EXISTED_MSG ) ) 
    //else if(data->file_path) /* WRITE MESSAGE from filemanager */
    {
      #ifdef __MMI_MESSAGES_TEMPLATE__ 
        if(data->operation == UC_OPERATION_WRITE_NEW_SMS_TEMPLATE)
        {
            m_app_data->operation_type = (vappUcMsgOperationEnum)UC_OPERATION_WRITE_NEW_SMS_TEMPLATE;
            m_app_data->m_service_cntxt->msg_type->setting_msg_type = SRV_UC_MSG_TYPE_SMS_PREFER;
            m_app_data->m_service_cntxt->msg_type->curr_msg_type = SRV_UC_MSG_TYPE_SMS_PREFER;
            m_app_data->m_service_cntxt->msg_type->caller_specific_msg_type = SRV_UC_MSG_TYPE_SMS_ONLY;
            m_app_data->m_service_cntxt->send_info->send_sim_id = vappUcGetCurrSimId();
            m_app_data->main->max_text_limit = SRV_SMS_TEMPLATE_MAX_CHAR_NUM;
            VfxS32 result = srv_uc_check_uc_folder(m_app_data->main->instance);
            if (result < 0)
            {
                //vappUcTerminate();
                vappUcDeInitData();
                //vappUcDisplayPopup((WCHAR*)((UI_string_type) GetString(srv_fmgr_fs_error_get_string(result))), MMI_NMGR_BALLOON_TYPE_FAILURE);
                m_app_data->m_signalTerminate.postEmit((WCHAR*)((UI_string_type) GetString(srv_fmgr_fs_error_get_string(result))), MMI_NMGR_BALLOON_TYPE_FAILURE);
                return VFX_FALSE;
            }
            srv_uc_get_sms_setting(m_app_data->main->instance);
            if(!m_app_data->getMmsSetting())
            {
                vappUcDeInitData();
                return VFX_FALSE;
            }
        }
        else
      #endif 
      #ifdef __MMI_MMS_TEMPLATE_SUPPORT__
        if(data->operation == UC_OPERATION_WRITE_NEW_MMS_TEMPLATE)
        {
            /* Create a new MMS Template */
            m_app_data->operation_type = (vappUcMsgOperationEnum)UC_OPERATION_WRITE_NEW_MMS_TEMPLATE;
            m_app_data->m_service_cntxt->msg_type->setting_msg_type = SRV_UC_MSG_TYPE_MMS_PREFER;
            m_app_data->m_service_cntxt->msg_type->curr_msg_type = SRV_UC_MSG_TYPE_MMS_PREFER;
            m_app_data->m_service_cntxt->msg_type->caller_specific_msg_type = SRV_UC_MSG_TYPE_MMS_ONLY;
            VfxS32 result = srv_uc_check_uc_folder(m_app_data->main->instance);
            m_app_data->m_service_cntxt->send_info->send_sim_id = vappUcGetCurrSimId();
            if (result < 0)
            {
                //vappUcTerminate();
                vappUcDeInitData();
                //vappUcDisplayPopup((WCHAR*)((UI_string_type) GetString(srv_fmgr_fs_error_get_string(result))), MMI_NMGR_BALLOON_TYPE_FAILURE);
                m_app_data->m_signalTerminate.postEmit((WCHAR*)((UI_string_type) GetString(srv_fmgr_fs_error_get_string(result))), MMI_NMGR_BALLOON_TYPE_FAILURE);
                return VFX_FALSE;
            }
            srv_uc_get_sms_setting(m_app_data->main->instance);
            if(!m_app_data->getMmsSetting())
            {
                vappUcDeInitData();
                return VFX_FALSE;
            }
        }
        else
      #endif      
        if(data->info_type == SRV_UC_INFO_TYPE_EMAIL && data->type == SRV_UC_STATE_EDIT_EXISTED_MSG )
        {
        #ifdef __MMI_EMAIL__
            m_app_data->m_service_cntxt->msg_type->MMS_edit_mode = (srv_uc_MMS_edit_mode_enum)data->edit_mode;
            m_app_data->m_service_cntxt->send_info->send_sim_id = vappUcGetCurrSimId();
            if (m_app_data->m_service_cntxt->msg_type->MMS_edit_mode == SRV_UC_MMS_EDIT_MODE_EMAIL)
            {
                m_app_data->m_service_cntxt->msg_type->caller_specific_msg_type = SRV_UC_MSG_TYPE_MMS_ONLY;
            }
        #endif /* __MMI_EMAIL__ */ 
            if(!m_app_data->ucEntryWriteMsgWithContent(data))
            {
                vappUcDeInitData();
                return VFX_FALSE;
            }
        }
		else if(data->operation == UC_OPERATION_EDIT_SMS_TEMPLATE)
        {
        #ifdef __MMI_MESSAGES_TEMPLATE__ 
            m_app_data->m_service_cntxt->msg_type->MMS_edit_mode = (srv_uc_MMS_edit_mode_enum)data->edit_mode;
            m_app_data->m_service_cntxt->main->state = SRV_UC_STATE_EDIT_EXISTED_MSG;
            m_app_data->m_service_cntxt->msg_type->caller_specific_msg_type = SRV_UC_MSG_TYPE_SMS_ONLY;
            m_app_data->m_service_cntxt->send_info->send_sim_id = vappUcGetCurrSimId();
            m_app_data->operation_type = data->operation;
            m_app_data->main->max_text_limit = SRV_SMS_TEMPLATE_MAX_CHAR_NUM;
            if(!m_app_data->ucEntryWriteMsgWithContent(data))
            {
                vappUcDeInitData();
                return VFX_FALSE;
            }
        #endif    
        }
        else
        {
            m_app_data->m_service_cntxt->msg_type->MMS_edit_mode = (srv_uc_MMS_edit_mode_enum)data->edit_mode;
            m_app_data->m_service_cntxt->main->state = SRV_UC_STATE_WRITE_NEW_MSG;
			if(data->launch_mode != UC_LAUNCH_MODE_NONE)
			{
				m_app_data->m_service_cntxt->send_info->send_sim_id = data->sim_id;
			}
			else
			{
				m_app_data->m_service_cntxt->send_info->send_sim_id = vappUcGetCurrSimId();
			}
            m_app_data->operation_type = data->operation;
			 m_app_data->m_service_cntxt->msg_type->caller_specific_msg_type = data->msg_type;
			m_app_data->main->launch_mode = data->launch_mode;
            if(!m_app_data->ucEntryWriteMsgWithContent(data))
            {
                vappUcDeInitData();
                return VFX_FALSE;
            }
        }
    }
#ifdef __MMI_MMS_2__
    else if(data->info_type == SRV_UC_INFO_TYPE_MMS)
    {
        m_app_data->resetApp();
        m_app_data->m_service_cntxt->main->state = (srv_uc_state_enum)srv_uc_convert_mms_app_mode_to_uc_state(data->mode);
        if (m_app_data->m_service_cntxt->main->state == SRV_UC_STATE_FORWARD)
        {
            m_app_data->m_service_cntxt->main->mode = SRV_UC_FORWARD_WITHOUT_EDIT_MODE;
            m_app_data->m_service_cntxt->main->state = SRV_UC_STATE_EDIT_EXISTED_MSG;
        }
        else if (m_app_data->m_service_cntxt->main->state == SRV_UC_STATE_SEND)
        {
            m_app_data->send_info->curr_folder = (U16) mma_get_box(data->msg_id);
        }
        m_app_data->m_service_cntxt->send_info->existed_msg_id = data->msg_id;
        m_app_data->send_info->existed_msg_storage = (mma_msg_storage_type_enum) data->curr_storage;
        m_app_data->m_service_cntxt->send_info->existed_msg_type = SRV_UC_MSG_TYPE_MMS_PREFER;
        if (m_app_data->m_service_cntxt->main->state == SRV_UC_STATE_REPLY || m_app_data->m_service_cntxt->main->state == SRV_UC_STATE_REPLY_ALL)
        {
            m_app_data->m_service_cntxt->send_info->send_sim_id = srv_uc_convert_sim_id(data->sim_id);
        }
        else
        {
            m_app_data->m_service_cntxt->send_info->send_sim_id = vappUcGetCurrSimId();
        }
        m_app_data->operation_type = data->operation;
		m_app_data->main->launch_mode = data->launch_mode;
        m_app_data->m_service_cntxt->msg_type->setting_msg_type = srv_uc_get_setting_msg_type();
        m_app_data->m_service_cntxt->msg_type->curr_msg_type = m_app_data->m_service_cntxt->msg_type->setting_msg_type;
    #ifdef __MMI_MMS_STANDALONE_COMPOSER__
        m_app_data->m_service_cntxt->msg_type->caller_specific_msg_type = SRV_UC_MSG_TYPE_MMS_ONLY;
    #else 
        m_app_data->m_service_cntxt->msg_type->caller_specific_msg_type = SRV_UC_MSG_TYPE_DEFAULT;
    #endif 
        m_app_data->m_service_cntxt->msg_type->backup_msg_type = SRV_UC_MSG_TYPE_DEFAULT;
    #ifdef __MMI_MMS_TEMPLATE_SUPPORT__
		if(m_app_data->operation_type == UC_OPERATION_EDIT_MMS_TEMPLATE)
		{
		m_app_data->m_service_cntxt->msg_type->caller_specific_msg_type = SRV_UC_MSG_TYPE_MMS_ONLY;
		}
    #endif
    #if /*__MMI_OP01_202_MMS_REPLY_BY_SMS_MMS_SUPPORT__*/ 0
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
    #endif /* __MMI_OP01_202_MMS_REPLY_BY_SMS_MMS_SUPPORT__ */ 
        VfxS32 result = srv_uc_check_uc_folder(m_app_data->main->instance);
        if (result < 0)
        {
            //vappUcTerminate();
            vappUcDeInitData();
            //vappUcDisplayPopup((WCHAR*)((UI_string_type) GetString(srv_fmgr_fs_error_get_string(result))), MMI_NMGR_BALLOON_TYPE_FAILURE);
            m_app_data->m_signalTerminate.postEmit((WCHAR*)((UI_string_type) GetString(srv_fmgr_fs_error_get_string(result))), MMI_NMGR_BALLOON_TYPE_FAILURE);
            return VFX_FALSE;
        }
        m_app_data->main->busy_getting_data = 1;
        if(!m_app_data->getMmsSetting())
        {
            vappUcDeInitData();
            return VFX_FALSE;
        }
    }
#endif
    else if(data->info_type == SRV_UC_INFO_TYPE_SMS)
    {
        /* TODO: Show progress screen */
        VFX_SYS_ALLOC_MEM(m_app_data->otherAppTempUcInfo, sizeof(VappUcEntryStruct));
        if(m_app_data->otherAppTempUcInfo)
        {
            memset(m_app_data->otherAppTempUcInfo, 0, sizeof(VappUcEntryStruct));
        }
        else
        {
            ASSERT(0);
        }
        m_app_data->m_service_cntxt->send_info->send_sim_id = vappUcGetCurrSimId();
        m_app_data->main->busy_getting_data = 1;
        m_app_data->ucSmsMsgOperationTrigger(data);
    }
/*    else if(data->info_type == SRV_UC_INFO_TYPE_EMAIL)
    {
        VFX_SYS_ALLOC_MEM(m_app_data->otherAppTempUcInfo, sizeof(VappUcEntryStruct));
        if(m_app_data->otherAppTempUcInfo)
        {
            memset(m_app_data->otherAppTempUcInfo, 0, sizeof(VappUcEntryStruct));
        }
        else
        {
            ASSERT(0);
        }
        m_app_data->main->busy_getting_data = 1;
        m_app_data->ucSmsMsgOperationTrigger(data);
    }    */
    vappUcDeInitData();
    return VFX_TRUE;
}

#ifdef __MMI_MMS_USE_ASM__  
VfxAppCloseAnswerEnum VcuiUcMainCui::onProcessClose(VfxAppCloseOption options)
{
    m_inCloseProcess = VFX_TRUE;
    if(m_app_data)
    {
        if(isWaitToBeClose())
        {        

            return VFX_APP_CLOSE_ANSWER_LATER;
        }
    }
    m_inCloseProcess = VFX_FALSE;
	//------------add code start
	if(g_is_new_message)
	{
		mmi_ucs2ncpy((S8*)g_sms_txtbuffer, (S8*)(m_app_data->m_service_cntxt->main->text_buffer), 2048);
	}

	g_is_new_message = FALSE;
	//-------------add code end
    return VFX_APP_CLOSE_ANSWER_YES;
}


vapp_uc_screen.cpp文件

//add code start
extern VfxWChar g_sms_txtbuffer[2048];
extern BOOL g_is_new_message;
//add code end
void VappComposerMainPage::onEntered()
{
    VfxPage::onEntered();
    if( NULL != composer_form)
        composer_form->setIsAnimEnabled(VFX_TRUE);
//add owner code 
	if(g_is_new_message)
	{
		insertTextString(g_sms_txtbuffer,TRUE);
	}
//add owner code 
}

void VappComposerMainPage::onBack(void)
{
	VcpContactSelector* recipientHead= m_contactSelectorTo;
	VcpTextEditor* r_editor = NULL;
    VappUCMainScr* scr = (VappUCMainScr*)getMainScr();
    VappUcAppData* app = (VappUcAppData*)(scr->m_app_data);

	srv_uc_address_group_type_enum type = (srv_uc_address_group_type_enum)app->getContactInsertType();
	switch(type)
	{
	case SRV_UC_ADDRESS_GROUP_TYPE_TO:
		recipientHead = m_contactSelectorTo;
		break;

	case SRV_UC_ADDRESS_GROUP_TYPE_CC:
		recipientHead = m_contactSelectorCc;
		break;

	case SRV_UC_ADDRESS_GROUP_TYPE_BCC:
		recipientHead = m_contactSelectorBcc;
		break;
	}
	if(recipientHead)
	{
		r_editor = recipientHead->getInputbox();
		r_editor->deleteAll();
		r_editor->setEnterKeyEnabled(VFX_FALSE);
	}

    if( NULL != composer_form)
        composer_form->setIsAnimEnabled(VFX_FALSE);
        
	app->main->skip_save_on_deinit = VFX_FALSE;
        //--------------add code
	if(g_is_new_message)
	{
		mmi_ucs2ncpy((S8*)g_sms_txtbuffer, (S8*)textEditorBody->getText(), 2048);
	}

	g_is_new_message = FALSE;
	//--------------add code
	VfxPage::onBack();
}




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值