diff -r 2b7283837edb -r 3104fc151679 imstatuspaneindicatorplugin/src/imstatuspaneindicatorpluginimplementation.cpp --- a/imstatuspaneindicatorplugin/src/imstatuspaneindicatorpluginimplementation.cpp Thu Aug 19 09:41:53 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,253 +0,0 @@ -/* -* Copyright (c) 2009 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: This class is the plugin implementation -* -*/ - - -// INCLUDE FILES -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -// imlauncher -#include - -//sp settings -#include -#include -#include - -#include "imstatuspaneindicator.h" -#include "imstatuspaneindicatorpluginimplementation.h" - -// ======== MEMBER FUNCTIONS ======== - -// --------------------------------------------------------------------------- -// CIMStatusPaneIndicatorPluginImplementation::CIMStatusPaneIndicatorPluginImplementation -// C++ default constructor can NOT contain any code, that -// might leave. -// --------------------------------------------------------------------------- -// -CIMStatusPaneIndicatorPluginImplementation::CIMStatusPaneIndicatorPluginImplementation() -: iCoeEnv( *CCoeEnv::Static() ) - { - } - -// --------------------------------------------------------------------------- -// CIMStatusPaneIndicatorPluginImplementation::ConstructL -// Symbian 2nd phase constructor can leave. -// --------------------------------------------------------------------------- -// -void CIMStatusPaneIndicatorPluginImplementation::ConstructL() - { - TFileName resPathWithoutDrive; - resPathWithoutDrive.Zero(); - resPathWithoutDrive.Append( KResourceDir() ); - resPathWithoutDrive.Append( KIndicatorResourceFile() ); - - TFileName path; - Dll::FileName(path); //get the location of the dll - - TDriveName drive( TParsePtrC( path ).Drive( ) ); // solve drive - - // leave to stack, LC method - HBufC* resourceFilePath = HBufC::NewLC( KMaxResourcePathLength ); - TPtr ptr( resourceFilePath->Des() ); - ptr.Append( resPathWithoutDrive ); // without drive - ptr.Insert( 0, drive ); // insert drive - - // NearestLanguageFile takes only TFileName - path.Zero(); - path.Append( *resourceFilePath ); - - if ( path.Length() != 0 ) - { - BaflUtils::NearestLanguageFile( iCoeEnv.FsSession(), path ); - } - - CleanupStack::PopAndDestroy(resourceFilePath); - - iResourceOffset = iCoeEnv.AddResourceFileL(path); - - iPopupTextOne = StringLoader::LoadLC( R_QTN_SERVTAB_UNIPANE_ONENEWMSG ); - CleanupStack::Pop(); - iPopupTextMultiple = StringLoader::LoadLC( R_QTN_SERVTAB_UNIPANE_NEWMSGS ); - CleanupStack::Pop(); - iIMStatusPaneIndicator = CIMStatusPaneIndicator::NewL(); - } - -// ----------------------------------------------------------------------------- -// CIMStatusPaneIndicatorPluginImplementation::NewL -// Two-phased constructor. -// ----------------------------------------------------------------------------- -// -CIMStatusPaneIndicatorPluginImplementation* CIMStatusPaneIndicatorPluginImplementation::NewL() - { - CIMStatusPaneIndicatorPluginImplementation* self = - new( ELeave ) CIMStatusPaneIndicatorPluginImplementation(); - CleanupStack::PushL( self ); - self->ConstructL(); - CleanupStack::Pop( self ); - return self; - } - - -// Destructor -CIMStatusPaneIndicatorPluginImplementation::~CIMStatusPaneIndicatorPluginImplementation() - { - delete iIMStatusPaneIndicator; - iCoeEnv.DeleteResourceFile( iResourceOffset ); - delete iPopupTextMultiple; - delete iPopupTextOne; - iViewServices.Close(); - } - - -// --------------------------------------------------------------------------- -// CIMStatusPaneIndicatorPluginImplementation::HandleIndicatorTapL -// --------------------------------------------------------------------------- -// -void CIMStatusPaneIndicatorPluginImplementation::HandleIndicatorTapL( const TInt aUid) - { - if(EAknIndicatorMecoServiceTab == aUid) - { - ShowMessageL(); - } - } - -// --------------------------------------------------------------------------- -// CIMStatusPaneIndicatorPluginImplementation::CreatePopupContentMessageL() -// --------------------------------------------------------------------------- -// -HBufC* CIMStatusPaneIndicatorPluginImplementation::CreatePopupContentMessageL() - { - if( !iPopupTextMultiple || !iPopupTextOne ) - { - // do not allocate KNullDesC>AllocL() memory here, as the avakon component - // donot test for the lenght of the text, instead it tests if - // the text is valid or not. - // Load resource strings before calling this method! - return NULL; - } - - HBufC* dynStringBuf = NULL; - if(iIMStatusPaneIndicator) - { - TInt Count = iIMStatusPaneIndicator->MsgCount(); - if( 1 == Count ) - { - dynStringBuf = iPopupTextOne->AllocL(); - } - else if(Count > 1) - { - TInt reqDynLen = iPopupTextMultiple->Length() + - KMaxMessageNumberLength; - dynStringBuf = HBufC::NewL( reqDynLen ); - TPtr dynString = dynStringBuf->Des(); - StringLoader::Format( dynString, - iPopupTextMultiple->Des(), - -1, //No index code in source string - Count ); - } - } - - return dynStringBuf; - } - -// --------------------------------------------------------------------------- -// CIMStatusPaneIndicatorPluginImplementation::TextL() -// --------------------------------------------------------------------------- -// -HBufC* CIMStatusPaneIndicatorPluginImplementation::TextL( const TInt aUid, TInt& aTextType ) - { - if(EAknIndicatorMecoServiceTab == aUid) - { - // check the uid, if its only my uid then call the functionality below. - aTextType = CAknIndicatorPlugin::EAknIndicatorPluginLinkText; - return CreatePopupContentMessageL(); - } - return NULL; - } -// --------------------------------------------------------------------------- -// CIMStatusPaneIndicatorPluginImplementation::ShowMessageL() -// --------------------------------------------------------------------------- -// -void CIMStatusPaneIndicatorPluginImplementation::ShowMessageL() - { - if(iIMStatusPaneIndicator) - { - // conversation view should be launched if is 1 message or if more than - // one message, but the sender is same of all the messages. - if(iIMStatusPaneIndicator->MsgCount() >= 1 && iIMStatusPaneIndicator->IsMultipleSenders() == 1 ) - { - TVwsViewId activeViewId; - CCoeEnv::Static()->AppUi()->GetActiveViewId( activeViewId ); - // launch the conversation view - // imlauncher call for luanching the conversationview with seletced user id - IMCVLauncher::LaunchImConversationViewL(activeViewId, iIMStatusPaneIndicator->ServiceId(), iIMStatusPaneIndicator->SenderId()); - } - // servie tab is launched when there are more than one messages received from different - // senders. - else if(iIMStatusPaneIndicator->MsgCount() > 1 ) - { - //launch service tab based on the service id. - TInt serviceviewId = 0 ; - TInt seriveId = iIMStatusPaneIndicator->ServiceId(); - if( seriveId != KErrNotFound) - { - CSPSettings* spSettings = CSPSettings::NewL(); - CleanupStack::PushL(spSettings); - //get the tabview id from settings - CSPProperty* property = CSPProperty::NewLC(); - spSettings->FindPropertyL( seriveId, - EPropertyContactViewId, - *property ); - property->GetValue(serviceviewId); - CleanupStack::PopAndDestroy( property ); - CleanupStack::PopAndDestroy( spSettings ); - } - // Launched from service tab, go back there - TInt err = iViewServices.Open(); - if ( KErrServerTerminated == err || KErrNotFound == err ) - { - iViewServices.Close(); - err = iViewServices.Open(); - } - // this error comes when the phonebook is already open, hence we should directly launch the - // service tab. - if(KErrAlreadyExists != err) - { - User::LeaveIfError( err ); - } - // Activate the service tab in phonebook. - User::LeaveIfError( iViewServices.Activate( - KMECOIMPLEMENTATIONUID, - serviceviewId ) ); - - } - } - } - - - -// End of File