wvuing/imindicatorplugin/src/cimindicatorpluginimplementation.cpp
changeset 0 094583676ce7
--- /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 <coemain.h>
+#include <coeaui.h>
+#include <vwsdef.h>
+#include <e32property.h>
+#include <imindicatorng.rsg>
+#include <stringloader.h>
+#include <aknutils.h>
+
+#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