logsui/LogsIndicatorPlugin/CLogsIndicatorPlugin.cpp
changeset 0 e686773b3f54
child 21 9da50d567e3c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/logsui/LogsIndicatorPlugin/CLogsIndicatorPlugin.cpp	Tue Feb 02 10:12:17 2010 +0200
@@ -0,0 +1,212 @@
+/*
+* Copyright (c) 2002 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: 
+*     Ecom plugin to implement touch support for universal missed calls indicator. 
+*
+*
+*/
+
+
+// INCLUDE FILES
+#include "CLogsIndicatorPlugin.h"
+
+#include <apacmdln.h>  // -> For CApaCommandLine 
+#include <apgcli.h>
+#include <apgtask.h>
+
+#include <LogsUiCmdStarter.h>
+
+#include <StringLoader.h> 
+#include <Logs.rsg>
+#include <AknUtils.h>
+#include <LogsDomainCRKeys.h>
+
+#include <AknPreviewPopUpController.h>
+#include <centralrepository.h>   
+#include <bautils.h>
+#include <pathinfo.h>
+
+#include "LogsDebug.h"
+
+
+#include <data_caging_path_literals.hrh> // KDC_APP_RESOURCE_DIR
+
+
+// CONSTANTS
+
+// LogsIndicator.RSS is included in Logs.RSS and compiled to Logs.RSC.
+// Needed for the resource strings.
+_LIT( KIndicatorResourceFile, "Logs.RSC" );  
+
+
+// ---------------------------------------------------------------------------
+// CLogsIndicatorPlugin::NewL
+// ---------------------------------------------------------------------------
+//
+CLogsIndicatorPlugin* CLogsIndicatorPlugin::NewL()
+    {
+    CLogsIndicatorPlugin* self = new( ELeave ) CLogsIndicatorPlugin;
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop( self );
+    return self;
+    }
+    
+    
+// ---------------------------------------------------------------------------
+// CLogsIndicatorPlugin::ConstructL
+// Symbian 2nd phase constructor can leave.
+// ---------------------------------------------------------------------------
+//
+void CLogsIndicatorPlugin::ConstructL()
+    {
+    // Access to Central repository is needed to later retrieve
+    // the number of missed calls     
+    iRepositoryLogs    = CRepository::NewL( KCRUidLogs );
+    
+    iNotifyHandlerLogs = CCenRepNotifyHandler::NewL
+        (*this, *iRepositoryLogs, CCenRepNotifyHandler::EIntKey, KLogsNewMissedCalls);
+        
+    iNotifyHandlerLogs->StartListeningL();
+ 
+    // Read resource strings    
+    CCoeEnv* env = CCoeEnv::Static();
+    
+    if( !iResourceFileOffset )
+        {
+        TFileName* resFile = new( ELeave )TFileName( 
+            TParsePtrC( PathInfo::RomRootPath() ).Drive() );
+        CleanupStack::PushL( resFile );
+        resFile->Append( KDC_APP_RESOURCE_DIR );
+        resFile->Append( KIndicatorResourceFile );
+
+        BaflUtils::NearestLanguageFile( env->FsSession(), *resFile );
+        iResourceFileOffset = env->AddResourceFileL( *resFile );
+
+        CleanupStack::PopAndDestroy( resFile );
+        }
+   
+    iPopupHeading =         env->AllocReadResourceL( R_QTN_LOGS_STYLUS_POPUP_LOGS );
+	iPopupTextOne =         env->AllocReadResourceL( R_QTN_LOGS_STYLUS_POPUP_MISSED1 );
+	iPopupTextMultiple =    env->AllocReadResourceL( R_QTN_LOGS_STYLUS_POPUP_MISSED );   
+
+	iUid = 0;
+    }
+
+// ---------------------------------------------------------------------------
+// CLogsIndicatorPlugin::CLogsIndicatorPlugin
+// ---------------------------------------------------------------------------
+//
+CLogsIndicatorPlugin::CLogsIndicatorPlugin()
+    {
+    }
+    
+// ---------------------------------------------------------------------------
+// CLogsIndicatorPlugin::~CLogsIndicatorPlugin
+// ---------------------------------------------------------------------------
+//
+CLogsIndicatorPlugin::~CLogsIndicatorPlugin()
+    {
+    delete iPopupHeading;   
+    delete iPopupTextOne;
+    delete iPopupTextMultiple;  
+    
+    // notify cenrep that this observer is no longer here. 
+    if (iNotifyHandlerLogs)
+        {
+        iNotifyHandlerLogs->StopListening();  
+        delete iNotifyHandlerLogs; 
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CLogsIndicatorPlugin::HandleIndicatorTapL
+// ---------------------------------------------------------------------------
+//
+void CLogsIndicatorPlugin::HandleIndicatorTapL(const TInt /*aUid*/)
+    {
+    // Start Logs application Missed calls view
+    LogsUiCmdStarter::CmdStartL( LogsUiCmdStarterConsts::KMissedView() );     
+    }
+
+// ---------------------------------------------------------------------------
+// CLogsIndicatorPlugin::TextL
+//
+// Called by framework first during construction and later after UpdateL
+// is called - see CLogsIndicatorPlugin::HandleNotifyInt
+// ---------------------------------------------------------------------------
+//    
+HBufC* CLogsIndicatorPlugin::TextL( const TInt aUid, TInt& aTextType )
+    {
+    // store the internal uid of this plugin
+    iUid = aUid;
+    aTextType = EAknIndicatorPluginLinkText;
+    
+    return CreatePopupContentMessageL();
+    }
+
+// ---------------------------------------------------------------------------
+// CLogsIndicatorPlugin::CreatePopupContentMessageL
+// ---------------------------------------------------------------------------
+//
+HBufC* CLogsIndicatorPlugin::CreatePopupContentMessageL()
+    {
+    TInt missedCount;
+    
+    // Get new missed calls count
+    iRepositoryLogs->Get( KLogsNewMissedCalls, missedCount );   
+      
+    // Construct proper popup message (singular or plural)
+    HBufC* dynStringBuf = NULL;
+    if( missedCount > 1 )
+        {
+        TInt reqDynLen = iPopupTextMultiple->Length() + KMaxEventNumberLength;
+        dynStringBuf = HBufC::NewL( reqDynLen );
+        TPtr dynString = dynStringBuf->Des();
+        StringLoader::Format( dynString,
+                              iPopupTextMultiple->Des(),
+                              -1,             //No index code in source string
+                              missedCount );
+        }
+    else // eventCount <= 1
+        {
+        dynStringBuf = iPopupTextOne->AllocL();
+        }
+    return dynStringBuf;
+    }
+
+// ---------------------------------------------------------------------------
+// CLogsIndicatorPlugin::HandleNotifyInt
+// ---------------------------------------------------------------------------
+//
+void CLogsIndicatorPlugin::HandleNotifyInt( TUint32 aId, TInt aNewValue )
+    {
+    // Sanity check the parameters
+    if (aId == KLogsNewMissedCalls && aNewValue >= 0)
+        {   
+        // Call UpdateL which will eventually lead to a callback to the TextL here and
+        // the update of the popup message (missed calls count)        
+        TRAPD(err, UpdateL(iUid));
+        if (err != KErrNone)
+            {
+            // nothing to do, the plugin text just won't be updated
+            LOGS_DEBUG_PRINT(LOGS_DEBUG_STRING
+                ( "CLogsIndicatorPlugin::HandleNotifyInt - UpdateL failed")); 
+            }
+        }
+    }
+
+
+
+// end of file