diff -r ebe688cedc25 -r 7fdbb852d323 messagingappbase/msgavkon/msgindicatorplugin/src/msgindicatorpluginimplementation.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/messagingappbase/msgavkon/msgindicatorplugin/src/msgindicatorpluginimplementation.cpp Wed Sep 01 12:31:54 2010 +0100 @@ -0,0 +1,839 @@ +/* +* Copyright (c) 2006-2008 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: MsgIndicatorPlugin plugin implementation +* +*/ + + + +#include // BaflUtils +#include +#include // for RApaLsSession + +// INCLUDE FILES +#include // CCoeEnv +#include // CCoeAppUi +#include // TVwsViewId +#include // RPropert +#include // MsgIndicator resources +#include // Stringloader +#include +#include // KMsvGlobalInBoxIndexEntryIdValue +#include "msgindicatorpluginimplementation.h" +#include // KDC_RESOURCE_FILES_DIR +#include // RConeResourceLoader +#include // CenRepKeys +#include //CRepository +#include // MsvUiServiceUtilitiesInternal +#include +#include "msgindicatorpluginlog.h" //Logging +#include + +#include // for AknDialogShutter +// CONSTANTS +_LIT( KIndicatorResourceFile,"msgindicator.rsc" ); +const TUid KMceShowMail = { 0x01 }; +const TInt KMaxMessageNumberLength = 4; // 9999 = 4 numbers +const TUid KMCEAppUid = { 0x100058C5 }; +const TUid KMCEMessageListViewUid = { 0x02 }; +const TUid KMCEMainViewUid = { 0x01 }; +const TInt KListgranularity = 22; +const TInt KTextLength = 150; + /* Maximum number of voice mails */ +const TInt EVMMaximumNumber = 255; +const TUid KVmBxUid = { 0x100058F5 }; +const TInt KRestartTimer = 100000 ; +#define KSpeeddialVmbxDialUidView TVwsViewId( TUid::Uid( 0x1000590A ),TUid::Uid( 0x02 ) ) +_LIT8( KExternalLaunch, "outside" ); + +const TUid KConversationAppUid = { 0x2002A540 }; +const TUid KConversationListViewUid = { 0x01 }; +const TMsvId KConversationListViewid = 0x01; + +// ======== MEMBER FUNCTIONS ======== + +// --------------------------------------------------------------------------- +// CMsgIndicatorPluginImplementation::CMsgIndicatorPluginImplementation +// C++ default constructor can NOT contain any code, that +// might leave. +// --------------------------------------------------------------------------- +// +CMsgIndicatorPluginImplementation::CMsgIndicatorPluginImplementation() + { + } + +// --------------------------------------------------------------------------- +// CMsgIndicatorPluginImplementation::ConstructL +// Symbian 2nd phase constructor can leave. +// --------------------------------------------------------------------------- +// +void CMsgIndicatorPluginImplementation::ConstructL() + { + MSGPLUGINLOGGER_CREATE + + //CRepository + iStorage = CRepository::NewL( KCRUidNcnList ); + + //Get the ALS status + iIsALSSupported = UpdateALSStatus(); + + //RVmbxNumber + iSVmbxOpen = EFalse; + + // Read resource strings + // Resource loader + CEikonEnv* env = CEikonEnv::Static(); + RConeResourceLoader resourceLoader( *env ); + + iObserver = CWaitingObserver::NewL( iMobilePhone, *this ); + + TParse fp; + fp.Set( KIndicatorResourceFile, &KDC_RESOURCE_FILES_DIR , NULL ); + TFileName filename = fp.FullName(); + + resourceLoader.OpenL( filename ); + + BaflUtils::NearestLanguageFile(env->FsSession(), filename); + + env->AddResourceFileL(filename); + + iMessagesStrings = new(ELeave)CDesCArrayFlat( KListgranularity ); + iMessagesStrings->Reset(); + TBuf tmpBuf; + + StringLoader::Load( tmpBuf, R_QTN_GEN_NEW_ITEM_IN_INBOX, env ); + iMessagesStrings->AppendL( tmpBuf ); + StringLoader::Load( tmpBuf, R_QTN_GEN_NEW_ITEMS_IN_INBOX, env ); + iMessagesStrings->AppendL( tmpBuf ); + StringLoader::Load( tmpBuf, R_QTN_GEN_NEW_ITEM_IN_OUTBOX, env ); + iMessagesStrings->AppendL( tmpBuf ); + StringLoader::Load( tmpBuf, R_QTN_GEN_NEW_ITEMS_IN_OUTBOX, env ); + iMessagesStrings->AppendL( tmpBuf ); + StringLoader::Load( tmpBuf, R_QTN_GEN_NEW_OTHER_MESSAGES, env ); + iMessagesStrings->AppendL( tmpBuf ); + + StringLoader::Load( tmpBuf, R_QTN_GEN_NEW_EMAIL, env ); + iMessagesStrings->AppendL( tmpBuf ); + StringLoader::Load( tmpBuf, R_QTN_GEN_VOICE_MAIL_INDICATOR, env ); + iMessagesStrings->AppendL( tmpBuf ); + StringLoader::Load( tmpBuf, R_QTN_GEN_VOICE_MAILS_INDICATOR, env ); + iMessagesStrings->AppendL( tmpBuf ); + StringLoader::Load( tmpBuf, R_QTN_GEN_UNK_AMOUNT_VOICE_MAILS_INDICATOR, env ); + iMessagesStrings->AppendL( tmpBuf ); + StringLoader::Load( tmpBuf, R_QTN_GEN_VOICE_MAIL_ON_LINE1, env ); + iMessagesStrings->AppendL( tmpBuf ); + + StringLoader::Load( tmpBuf, R_QTN_GEN_VOICE_MAIL_INDICATOR_ON_LINE1, env ); + iMessagesStrings->AppendL( tmpBuf ); + StringLoader::Load( tmpBuf, R_QTN_GEN_VOICE_MAILS_INDICATOR_ON_LINE1, env ); + iMessagesStrings->AppendL( tmpBuf ); + StringLoader::Load( tmpBuf, R_QTN_GEN_VOICE_MAIL_ON_LINE2, env ); + iMessagesStrings->AppendL( tmpBuf ); + StringLoader::Load( tmpBuf, R_QTN_GEN_VOICE_MAIL_INDICATOR_ON_LINE2, env ); + iMessagesStrings->AppendL( tmpBuf ); + StringLoader::Load( tmpBuf, R_QTN_GEN_VOICE_MAILS_INDICATOR_ON_LINE2, env ); + iMessagesStrings->AppendL( tmpBuf ); + + + StringLoader::Load( tmpBuf, R_QTN_GEN_NEW_FAX, env ); + iMessagesStrings->AppendL( tmpBuf ); + StringLoader::Load( tmpBuf, R_QTN_GEN_NEW_FAXES, env ); + iMessagesStrings->AppendL( tmpBuf ); + StringLoader::Load( tmpBuf, R_QTN_GEN_UKN_AMOUNT_NEW_FAXES, env ); + iMessagesStrings->AppendL( tmpBuf ); + + StringLoader::Load( tmpBuf, R_QTN_GEN_SIM_MSG_FULL, env ); + iMessagesStrings->AppendL( tmpBuf ); + + iRepository = CRepository::NewL(KCRUidMuiuSettings); + resourceLoader.Close(); + } + +// ----------------------------------------------------------------------------- +// CMsgIndicatorPluginImplementation::NewL +// Two-phased constructor. +// ----------------------------------------------------------------------------- +// +CMsgIndicatorPluginImplementation* CMsgIndicatorPluginImplementation::NewL() + { + CMsgIndicatorPluginImplementation* self = + new( ELeave ) CMsgIndicatorPluginImplementation; + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + return self; + } + + +// Destructor +CMsgIndicatorPluginImplementation::~CMsgIndicatorPluginImplementation() + { + delete iMessagesStrings; + delete iStorage; + iVmbx.Close(); +// iObserver->Cancel(); + delete iObserver; + if(iRepository) + { + delete iRepository; + iRepository = NULL; + } + MSGPLUGINLOGGER_DELETE + } + + +// --------------------------------------------------------------------------- +// CMsgIndicatorPluginImplementation::HandleIndicatorTapL +// --------------------------------------------------------------------------- +// +void CMsgIndicatorPluginImplementation::HandleIndicatorTapL( const TInt aUid ) + { + + MSGPLUGINLOGGER_WRITE_FORMAT("HandleIndicatorTapL: Indicator: %d", aUid); + + + const TVwsViewId KMessagingCentreView( KMCEAppUid, KMCEMessageListViewUid ); + const TVwsViewId KMessagingCentreMainView( KMCEAppUid, KMCEMainViewUid ); + const TVwsViewId KConversationView( KConversationAppUid, KConversationListViewUid ); + +#ifdef OFFLINE_TESTING // See msgindicatorpluginlog.h + TInt testaUid; + if ( aUid == EAknIndicatorOutbox ) // Change outbox id to .... + { + testaUid = KOffLineId; + } + else + { + testaUid = aUid; // Other indicators should be same + } + switch ( testaUid ) +#else + switch ( aUid ) +#endif // OFFLINE_TESTING + { + // SMS/MMS Envelope + case EAknIndicatorEnvelope: + { + // Launch "Inbox view" + TInt conversationview = 0; + if ( iRepository ) + { + iRepository->Get(KMuiuMceDefaultView,conversationview); + } + if (conversationview == 1 ) + { + CCoeEnv::Static()->AppUi()->CreateActivateViewEventL( + KConversationView, TUid::Uid( KConversationListViewid ), + KNullDesC8 ); + } + else + { + CCoeEnv::Static()->AppUi()->CreateActivateViewEventL( + KMessagingCentreView, TUid::Uid( KMsvGlobalInBoxIndexEntryIdValue ), + KNullDesC8 ); + } + } + break; + // Email + case EAknIndicatorEmailMessage: + // Launch "Email Inbox view" or mce mainview + CCoeEnv::Static()->AppUi()->CreateActivateViewEventL( + KMessagingCentreMainView, KMceShowMail, + KNullDesC8 ); + break; + // Outbox + case EAknIndicatorOutbox: + { + TInt closedEntryId = 0; + TInt r = RProperty::Get( KPSUidMuiu, KMceTemplatesDialog, closedEntryId ); + if ( r != KErrNone ) + { + closedEntryId = 0; + } + + if ( closedEntryId ) + { + TFindProcess findProc(_L("*[100058C5]*")); // by MCE UID3 + TFullName result; + + RProcess processHandle; + while ( findProc.Next(result) == KErrNone) + { + TInt err; + TRAP (err,processHandle.Open( findProc, EOwnerThread)); + //Kernel opened the process successfully + //Call Terminate on that process,to check the Cancel API. + //Calling the processHandle.Terminate. + if ( err == KErrNone ) + { + processHandle.Terminate(KErrCancel); + processHandle.Close(); + } + } + // After termination of the process KMceTemplatesDialog key should be set to '0' + r = RProperty::Set( KPSUidMuiu, KMceTemplatesDialog, 0 ); + User::After(KRestartTimer); + } + // Launch "Outbox view" + CCoeEnv::Static()->AppUi()->CreateActivateViewEventL( + KMessagingCentreView, TUid::Uid( KMsvGlobalOutBoxIndexEntryIdValue ), + KNullDesC8 ); + } + break; + // Other message + case EAknIndicatorOtherMessage: + // Hide popup. Closes the stylus activated popup in this case + break; + // Voicemail General + case EAknIndicatorVoiceMailWaiting: + LaunchNewVoiceMailAppL ( EMsgIndicatorLine1 ); + break; + // Voicemail Line1 + case EAknIndicatorVoiceMailWaitingOnLine1: + LaunchNewVoiceMailAppL ( EMsgIndicatorLine1 ); + break; + // Voicemail Line2 + case EAknIndicatorVoiceMailWaitingOnLine2: + LaunchNewVoiceMailAppL( EMsgIndicatorLine2 ); + break; + // Remote mail + case EAknIndicatorRemoteMailboxEmailMessage: + //None + break; + // Fax + case EAknIndicatorFaxMessage: + break; + // Default + default: + break; + } + } + + +void CMsgIndicatorPluginImplementation::LaunchNewVoiceMailAppL(TInt aType) + { + TUid uid = {1}; // als line 1 or no als (TVmbxNumberEntry::EAlsLine1Entry) + if ( aType == EMsgIndicatorLine2 ) + { + uid.iUid = 2; // (TVmbxNumberEntry::EAlsLine2Entry) + } + + LaunchViewL( KSpeeddialVmbxDialUidView, uid, KExternalLaunch ); + } + +void CMsgIndicatorPluginImplementation::LaunchViewL(const TVwsViewId& aViewId, TUid aCustomMessageId, + const TDesC8& aCustomMessage) + { + CCoeEnv::Static()->AppUi()->CreateActivateViewEventL(aViewId, aCustomMessageId, aCustomMessage); + } + + +// --------------------------------------------------------------------------- +// CMsgIndicatorPluginImplementation::HandlePreviewPopUpEventL +// Virtual function from MAknPreviewPopUpObserver, not used +// --------------------------------------------------------------------------- +// +void CMsgIndicatorPluginImplementation::HandlePreviewPopUpEventL( + CAknPreviewPopUpController* /*aController*/, + TPreviewPopUpEvent /*aEvent*/ ) + { + } + + +// --------------------------------------------------------------------------- +// CMsgIndicatorPluginImplementation::ProcessCommandL +// Virtual function from MEikCommandObserver, not used +// --------------------------------------------------------------------------- +// + +void CMsgIndicatorPluginImplementation::ProcessCommandL( TInt /*aCommandId*/ ) + { + } + + +// --------------------------------------------------------------------------- +// CMsgIndicatorPluginImplementation::CreatePopupContentEnvelopeMessageL() +// --------------------------------------------------------------------------- +// +HBufC* CMsgIndicatorPluginImplementation::CreatePopupContentEnvelopeMessageL(TBool& aMsgCountZero) + { + + // Get unread message count + // Create storage KNcnNewMessageCountInInbox + // Construct proper popup message (singular or plural) + HBufC* dynStringBuf = NULL; + TInt messageCount = 0; + + if ( iStorage->Get( KNcnNewMessageCountInInbox, messageCount ) == KErrNone ) + { + if ( messageCount > 1 ) + { + dynStringBuf = HBufC::NewL( ( *iMessagesStrings )[ENewItemsInInbox].Length() + + KMaxMessageNumberLength ); + TPtr dynString = dynStringBuf->Des(); + StringLoader::Format( dynString, + ( *iMessagesStrings )[ENewItemsInInbox], //"%N New messages" + -1, //No index code in source string + messageCount ); + } + else if ( messageCount == 1 ) + { + dynStringBuf = ( *iMessagesStrings )[ENewItemInInbox].AllocL() ; //"1 New message" + } + else if ( messageCount == 0 ) + { + dynStringBuf = ( *iMessagesStrings )[ESimMemoryFull].AllocL() ; //"Sim Messages Full" + // Msg count is zero and indicator is blinking. + aMsgCountZero = ETrue; + } + } + return dynStringBuf; + } + +// --------------------------------------------------------------------------- +// CMsgIndicatorPluginImplementation::CreatePopupContentFaxMessageL() +// --------------------------------------------------------------------------- +// +HBufC* CMsgIndicatorPluginImplementation::CreatePopupContentFaxMessageL() + { + // Get EIndicatorMessageTypeFax count + // Construct proper popup message (singular or plural) + HBufC* dynStringBuf = NULL; + TInt messageCount = iObserver->GetMsgCount(EIndicatorMessageTypeFax); + + if ( messageCount > 1 && messageCount < EVMMaximumNumber) + { + dynStringBuf = HBufC::NewL( ( *iMessagesStrings )[ENewItemsInInbox].Length() + + KMaxMessageNumberLength ); + TPtr dynString = dynStringBuf->Des(); + StringLoader::Format( dynString, + ( *iMessagesStrings )[ENewFaxes], //"%N New Faxes" + -1, //No index code in source string + messageCount ); + } + else if ( messageCount == 1 ) + { + dynStringBuf = ( *iMessagesStrings )[ENewFax].AllocL() ; //"1 New Fax" + } + else + { + dynStringBuf = ( *iMessagesStrings )[ENewUknFaxes].AllocL(); //"New Faxes" + } + return dynStringBuf; + } + +// --------------------------------------------------------------------------- +// CMsgIndicatorPluginImplementation::CreatePopupContentOutboxMessageL() +// --------------------------------------------------------------------------- +// +HBufC* CMsgIndicatorPluginImplementation::CreatePopupContentOutboxMessageL() + { + // Get message count + // Create storage KNcnMessageCountInOutbox + // Construct proper popup message (singular or plural) + HBufC* dynStringBuf = NULL; + TInt messageCount = 0; + + if ( iStorage->Get( KNcnMessageCountInOutbox, messageCount ) == KErrNone ) + { + if ( messageCount > 1 ) + { + dynStringBuf = HBufC::NewL( ( *iMessagesStrings )[ENewItemsInOutbox].Length() + + KMaxMessageNumberLength ); + TPtr dynString = dynStringBuf->Des(); + StringLoader::Format( dynString, + ( *iMessagesStrings )[ENewItemsInOutbox], //"%N msgs in outbox" + -1, //No index code in source string + messageCount ); + + } + else if ( messageCount == 1 ) + { + dynStringBuf = ( *iMessagesStrings )[ENewItemInOutbox].AllocL(); //"1 message in outbox" + } + } + return dynStringBuf; + } + +// --------------------------------------------------------------------------- +// CMsgIndicatorPluginImplementation::CreatePopupContentEmailMessageL() +// --------------------------------------------------------------------------- +// +HBufC* CMsgIndicatorPluginImplementation::CreatePopupContentEmailMessageL() + { + // Construct proper popup message (singular) + HBufC* dynStringBuf = NULL; + dynStringBuf = ( *iMessagesStrings )[ENewEmail].AllocL(); //"New e-mail" + return dynStringBuf; + } + +// --------------------------------------------------------------------------- +// CMsgIndicatorPluginImplementation::CreatePopupContentOtherMessageL() +// --------------------------------------------------------------------------- +// +HBufC* CMsgIndicatorPluginImplementation::CreatePopupContentOtherMessageL() + { + // Construct proper popup message (singular) + HBufC* dynStringBuf = NULL; + //"New messages available." + dynStringBuf = ( *iMessagesStrings )[ENewOtherMessages].AllocL(); //"New msgs available" + return dynStringBuf; + } + +// --------------------------------------------------------------------------- +// CMsgIndicatorPluginImplementation::CreatePopupContentVoiceMailGeneralL() +// --------------------------------------------------------------------------- +// +HBufC* CMsgIndicatorPluginImplementation::CreatePopupContentVoiceMailGeneralL() + { + // Get message count EIndicatorMessageTypeVMLine1 + // Construct proper popup message (singular or plural) + HBufC* dynStringBuf = NULL; + TInt messageCount = iObserver->GetMsgCount(EIndicatorMessageTypeVMLine1); + + if ( messageCount > 1 && messageCount < EVMMaximumNumber ) + { + dynStringBuf = HBufC::NewL( ( *iMessagesStrings )[ENewVoiceMails].Length() + + KMaxMessageNumberLength ); + TPtr dynString = dynStringBuf->Des(); + StringLoader::Format( dynString, + ( *iMessagesStrings )[ENewVoiceMails], //"%N new voice msgs" + -1, //No index code in source string + messageCount ); + } + else if ( messageCount == 1 ) + { + dynStringBuf = ( *iMessagesStrings )[ENewVoiceMail].AllocL(); //"New Voice msg" + } + else + { + dynStringBuf = ( *iMessagesStrings )[ENewUnkVoiceMails].AllocL(); //"New voice msgs" + } + return dynStringBuf; + } + +// --------------------------------------------------------------------------- +// CMsgIndicatorPluginImplementation::CreatePopupContentVoiceMailLineOneL() +// --------------------------------------------------------------------------- +// +HBufC* CMsgIndicatorPluginImplementation::CreatePopupContentVoiceMailLineOneL() + { + // Get message count EIndicatorMessageTypeVMLine1 + // Construct proper popup message + HBufC* dynStringBuf = NULL; + TInt messageCount = iObserver->GetMsgCount(EIndicatorMessageTypeVMLine1); + + if ( messageCount > 1 && messageCount < EVMMaximumNumber ) + { + dynStringBuf = HBufC::NewL( ( *iMessagesStrings )[ENewVoiceMailsOnLine1].Length() + + KMaxMessageNumberLength ); + TPtr dynString = dynStringBuf->Des(); + StringLoader::Format( dynString, + ( *iMessagesStrings )[ENewVoiceMailsOnLine1], //"%N new msgs, line 1" + -1, //No index code in source string + messageCount ); + } + else if ( messageCount == 1 ) + { + dynStringBuf = ( *iMessagesStrings )[ENewVoiceMailOnLine1].AllocL(); //"New msg, line 1" + } + else + { + dynStringBuf = ( *iMessagesStrings )[ENewUnkVoiceMailsOnLine1].AllocL(); //"New msgs, line 1" + } + return dynStringBuf; + } + +// --------------------------------------------------------------------------- +// CMsgIndicatorPluginImplementation::CreatePopupContentVoiceMailLineTwoL() +// --------------------------------------------------------------------------- +// +HBufC* CMsgIndicatorPluginImplementation::CreatePopupContentVoiceMailLineTwoL() + { + // Get message count EIndicatorMessageTypeVMLine2 + // Construct proper popup message + HBufC* dynStringBuf = NULL; + TInt messageCount = iObserver->GetMsgCount(EIndicatorMessageTypeVMLine2); + + if ( messageCount > 1 && messageCount < EVMMaximumNumber ) + { + dynStringBuf = HBufC::NewL( ( *iMessagesStrings )[ENewVoiceMailsOnLine2].Length() + + KMaxMessageNumberLength ); + TPtr dynString = dynStringBuf->Des(); + StringLoader::Format( dynString, + ( *iMessagesStrings )[ENewVoiceMailsOnLine2], //"%N new msgs, line 2" + -1, //No index code in source string + messageCount ); + } + else if ( messageCount == 1 ) + { + dynStringBuf = ( *iMessagesStrings )[ENewVoiceMailOnLine2].AllocL(); //"New msg, line 2" + } + else + { + dynStringBuf = ( *iMessagesStrings )[ENewUnkVoiceMailsOnLine2].AllocL(); //"New msgs, line 2" + } + return dynStringBuf; + } + +// --------------------------------------------------------------------------- +// CMsgIndicatorPluginImplementation::CheckVMBNumberAndCallL( TMsgLine aLine ) +// --------------------------------------------------------------------------- +// +void CMsgIndicatorPluginImplementation::CheckVMBNumberAndCallL( TMsgLine aLine ) + { + + TPhCltTelephoneNumber vmbxNumber; + vmbxNumber.Zero(); + + if ( !iSVmbxOpen ) + { + if ( iVmbx.Open() == KErrNone ) + { + iSVmbxOpen = ETrue; + } + else + { + User::Leave( KLeaveWithoutAlert ); //No vmbx available, so nothing we can do + } + } + if ( aLine == EMsgIndicatorGeneral ) + { + if ( ( iVmbx.GetVmbxNumber( vmbxNumber, EAlsActiveLineEntry ) == KErrNotFound ) ) + { + // Launching the VmBx application - User need to call manually after entring VmBx number + LaunchVmBxAppL() ; + } + else + { + CallL(vmbxNumber); // If VmBx number is already defined + } + } + else if ( aLine == EMsgIndicatorLine1 ) + { + if ( ( iVmbx.GetVmbxNumber( vmbxNumber, EAlsLine1Entry ) == KErrNotFound ) ) + { + // Launching the VmBx application - User need to call manually after entring VmBx number + LaunchVmBxAppL() ; + } + else + { + CallL(vmbxNumber); // If VmBx number is already defined + } + } + else if ( aLine == EMsgIndicatorLine2 ) + { + if ( ( iVmbx.GetVmbxNumber( vmbxNumber, EAlsLine2Entry ) == KErrNotFound ) ) + { + // Launching the VmBx application - User need to call manually after entring VmBx number + LaunchVmBxAppL() ; + } + else + { + CallL(vmbxNumber); // If VmBx number is already defined + } + } + } + +// --------------------------------------------------------------------------- +// CMsgIndicatorPluginImplementation::LaunchVmBxApp () +// Launches voice mailbox application +// --------------------------------------------------------------------------- +// +void CMsgIndicatorPluginImplementation::LaunchVmBxAppL() + { + TInt err = KErrNone ; + RApaLsSession appArcSession; + User::LeaveIfError( appArcSession.Connect() ); + CleanupClosePushL( appArcSession ); + + CApaCommandLine* cmdLine = CApaCommandLine::NewLC(); + TApaAppInfo info; + User::LeaveIfError( appArcSession.GetAppInfo( info, KVmBxUid ) ); +#ifdef RD_APPS_TO_EXES + cmdLine->SetExecutableNameL( info.iFullName ); +#else + cmdLine->SetLibraryNameL( info.iFullName ); +#endif + cmdLine->SetCommandL( EApaCommandOpen ); + err = appArcSession.StartApp( *cmdLine ); + User::LeaveIfError( err ); + CleanupStack::PopAndDestroy( cmdLine ); + CleanupStack::PopAndDestroy(); // appArcSession + } + +// --------------------------------------------------------------------------- +// CMsgIndicatorPluginImplementation::CallL( TPhCltTelephoneNumber aTelNumber ) +// --------------------------------------------------------------------------- +// +void CMsgIndicatorPluginImplementation::CallL( TPhCltTelephoneNumber aTelNumber ) + { + TPhCltNameBuffer recipientstring; + recipientstring = KNullDesC; // No need to show voicemailbox name + // ETrue = No query + MsvUiServiceUtilitiesInternal::CallToSenderQueryL( aTelNumber, recipientstring, ETrue ); + } + +// --------------------------------------------------------------------------- +// CMsgIndicatorPluginImplementation::TextL( const TInt aUid, TInt& aTextType ) +// --------------------------------------------------------------------------- +// +HBufC* CMsgIndicatorPluginImplementation::TextL( const TInt aUid, + TInt& aTextType ) + { + + HBufC* textBuf = NULL; + +#ifdef OFFLINE_TESTING // See msgindicatorpluginlog.h + TInt testaUid; + if ( aUid == EAknIndicatorOutbox ) // Change outbox id to .... + { + testaUid = KOffLineId; + } + else + { + testaUid = aUid; // Other indicators should be same + } + switch ( testaUid ) // OFFLINE TESTING +#else + switch ( aUid ) +#endif //OFFLINE_TESTING + { + // SMS/MMS Envelope + case EAknIndicatorEnvelope: + { + TBool isMsgCountZero = EFalse; + textBuf = CreatePopupContentEnvelopeMessageL( isMsgCountZero ); + if ( isMsgCountZero ) // Sim Memory case + { + // If indicator is visible and msg count is zero + // we can't show link. + aTextType = EAknIndicatorPluginInformationText; + } + else + { + aTextType = EAknIndicatorPluginLinkText; + } + } + break; + // Email + case EAknIndicatorEmailMessage: + textBuf = CreatePopupContentEmailMessageL(); + aTextType = EAknIndicatorPluginLinkText; + break; + // Outbox + case EAknIndicatorOutbox: + textBuf = CreatePopupContentOutboxMessageL(); + aTextType = EAknIndicatorPluginLinkText; + break; + // Other message + case EAknIndicatorOtherMessage: + textBuf = CreatePopupContentOtherMessageL(); + aTextType = EAknIndicatorPluginInformationText; + break; + // Voicemail General + case EAknIndicatorVoiceMailWaiting: + textBuf = CreatePopupContentVoiceMailGeneralL(); + aTextType = EAknIndicatorPluginLinkText; + break; + // Voicemail Line1 + case EAknIndicatorVoiceMailWaitingOnLine1: + textBuf = CreatePopupContentVoiceMailLineOneL(); + aTextType = EAknIndicatorPluginLinkText; + break; + // Voicemail Line2 + case EAknIndicatorVoiceMailWaitingOnLine2: + textBuf = CreatePopupContentVoiceMailLineTwoL(); + aTextType = EAknIndicatorPluginLinkText; + break; + // Remotemail + case EAknIndicatorRemoteMailboxEmailMessage: + aTextType = EAknIndicatorPluginInformationText; + break; + // Fax + case EAknIndicatorFaxMessage: + textBuf = CreatePopupContentFaxMessageL(); + aTextType = EAknIndicatorPluginInformationText; + break; + // Default + default: + break; + + } + return textBuf; + } + +// --------------------------------------------------------------------------- +// CMsgIndicatorPluginImplementation::IsALSSupported() +// --------------------------------------------------------------------------- +// +TBool CMsgIndicatorPluginImplementation::IsALSSupported() + { + return iIsALSSupported; + } + +// --------------------------------------------------------------------------- +// CMsgIndicatorPluginImplementation::UpdateALSStatus() +// Find out if alternative line subscription is active in the terminal +// --------------------------------------------------------------------------- +// + +TBool CMsgIndicatorPluginImplementation::UpdateALSStatus() + { + //Open the information settings + RSSSettings settings; + TInt status = settings.Open(); + + if ( status == KErrNone ) + { + // Get the ALS information, + // ALS is supported, if: + // 1. supported by the device (ALS PP enabled) + // 2. CSP enabled and SIM supports alternative service line (line2) + TInt alsValue = KErrUnknown; + status = settings.Get( ESSSettingsAls, alsValue ); + + //Close the settings, they are no longer needed + settings.Close(); + + // Meaning of the ALS values + // ESSSettingsAlsNotSupported - ALS not supported, always primary line. + // ESSSettingsAlsPrimary - ALS supported, primary line selected. + // ESSSettingsAlsAlternate - ALS supported, alternate line selected. + + //Value read OK and ALS not supported + if( status == KErrNone && alsValue == ESSSettingsAlsNotSupported ) + { + return EFalse; + } + //Value read OK and ALS is supported + else if( status == KErrNone && + ( alsValue == ESSSettingsAlsPrimary || alsValue == ESSSettingsAlsAlternate ) ) + { + return ETrue; + } + //Default value. ALS not supported. Returned if ALS status can't be read properly! + else + { + return EFalse; + } + } + else + { + return EFalse; + } + } + + +// End of File