diff -r 000000000000 -r 094583676ce7 wvuing/imindicatorplugin/src/cimindicatorpluginimplementation.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/wvuing/imindicatorplugin/src/cimindicatorpluginimplementation.cpp Thu Dec 17 08:41:52 2009 +0200 @@ -0,0 +1,180 @@ +/* +* Copyright (c) 2006-2006 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: ImIndicatorPlugin plugin implementation +* +*/ + + + +// INCLUDE FILES +#include +#include +#include +#include +#include +#include +#include + +#include "cimindicatorpluginimplementation.h" +#include "chatdebugprint.h" +#include "chatdebugassert.h" +#include "caexternalinterface.h" +#include "caminimalresourcereader.h" +#include "iminternalpskeys.h" + +// CONSTANTS +_LIT( KIndicatorResourceFile, "imindicatorng.rsc" ); +const TInt KMaxMessageNumberLength = 4; // 9999 = 4 numbers + + +// ======== MEMBER FUNCTIONS ======== + +// --------------------------------------------------------------------------- +// CImIndicatorPluginImplementation::CImIndicatorPluginImplementation +// C++ default constructor can NOT contain any code, that +// might leave. +// --------------------------------------------------------------------------- +// +CImIndicatorPluginImplementation::CImIndicatorPluginImplementation() + { + } + +// --------------------------------------------------------------------------- +// CImIndicatorPluginImplementation::ConstructL +// Symbian 2nd phase constructor can leave. +// --------------------------------------------------------------------------- +// +void CImIndicatorPluginImplementation::ConstructL() + { + CHAT_DP_FUNC_ENTER( "CImIndicatorPluginImplementation::ConstructL" ); + + // Read resource strings + CAMinimalResourceReader* reader = CAMinimalResourceReader::NewLC(); + TPtrC file( KIndicatorResourceFile ); + reader->OpenResourceFileL( file ); + + iPopupHeading = + reader->ReadTextResourceL( R_QTN_CHAT_STYLUS_POPUP_IM ); + iPopupTextOne = + reader->ReadTextResourceL( R_QTN_CHAT_STYLUS_POPUP_NEW1 ); + iPopupTextMultiple = + reader->ReadTextResourceL( R_QTN_CHAT_STYLUS_POPUP_NEW ); + + CleanupStack::PopAndDestroy(); // reader + + CHAT_DP_FUNC_DONE( "CImIndicatorPluginImplementation::ConstructL" ); + } + +// ----------------------------------------------------------------------------- +// CImIndicatorPluginImplementation::NewL +// Two-phased constructor. +// ----------------------------------------------------------------------------- +// +CImIndicatorPluginImplementation* CImIndicatorPluginImplementation::NewL() + { + CImIndicatorPluginImplementation* self = + new( ELeave ) CImIndicatorPluginImplementation; + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + return self; + } + + +// Destructor +CImIndicatorPluginImplementation::~CImIndicatorPluginImplementation() + { + CHAT_DP_FUNC_ENTER( "~CImIndicatorPluginImplementation" ); + delete iPopupTextMultiple; + delete iPopupTextOne; + delete iPopupHeading; + CHAT_DP_FUNC_DONE( "~CImIndicatorPluginImplementation" ); + } + + +// --------------------------------------------------------------------------- +// CImIndicatorPluginImplementation::HandleIndicatorTapL +// --------------------------------------------------------------------------- +// +void CImIndicatorPluginImplementation::HandleIndicatorTapL( const TInt /*aUid*/ ) + { + CHAT_DP_FUNC_ENTER( "CImIndicatorPluginImplementation::HandleIndicatorTapL" ); + ShowMessageL(); + CHAT_DP_FUNC_DONE( "CImIndicatorPluginImplementation::HandleIndicatorTapL" ); + } + + + +// --------------------------------------------------------------------------- +// CImIndicatorPluginImplementation::CreatePopupContentMessageL() +// --------------------------------------------------------------------------- +// +HBufC* CImIndicatorPluginImplementation::CreatePopupContentMessageL() + { + if ( !iPopupTextMultiple || !iPopupTextOne ) + { + // Load resource strings before calling this method! + __CHAT_ASSERT_DEBUG( EFalse ); + return KNullDesC().AllocL(); + } + + // Get unread message count + TInt messageCount = 0; + RProperty::Get( KPSUidIMUI, KIMUnreadMsgKey, messageCount ); + + // Construct proper popup message (singular or plural) + HBufC* dynStringBuf = NULL; + if ( messageCount > 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 + messageCount ); + } + else // mesageCount <= 1 + { + dynStringBuf = iPopupTextOne->AllocL(); + } + return dynStringBuf; + } + + + +// --------------------------------------------------------------------------- +// CImIndicatorPluginImplementation::TextL() +// --------------------------------------------------------------------------- +// +HBufC* CImIndicatorPluginImplementation::TextL( const TInt /*aUid*/, TInt& aTextType ) + { + aTextType = CAknIndicatorPlugin::EAknIndicatorPluginLinkText; + return CreatePopupContentMessageL(); + } +// --------------------------------------------------------------------------- +// CImIndicatorPluginImplementation::ShowMessageL() +// --------------------------------------------------------------------------- +// +void CImIndicatorPluginImplementation::ShowMessageL() + { + // Launch "conversation list view" + TVwsViewId view( KUidChatClient, KUidFriendsListView ); + CCoeEnv::Static()->AppUi()->CreateActivateViewEventL( + view, KUidChatPrivateChatListViewSoftNoteActivationId, + KNullDesC8 ); + } + +// End of File