eventsui/eventshandlerui/eventshandlerserver/src/evtglobalquery.cpp
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Tue, 02 Feb 2010 00:16:03 +0200
changeset 0 522cd55cc3d7
permissions -rw-r--r--
Revision: 201003 Kit: 201005

/*
* Copyright (c) 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:  Handler for displaying the Events Global Query
*
*/

// System Includes
#include <coecntrl.h> // CCoeControl
#include <AknGlobalMsgQuery.h> //CAknGlobalMsgQuery
#include <avkon.rsg>
#include <avkon.hrh>
#include <gulicon.h>
#include <AknsUtils.h>
#include <avkon.mbg>
#include <evthandlerserver.mbg>
#include <eikimage.h>
#include <data_caging_path_literals.hrh>
#include <AknsConstants.h> 		// Skin Ids
#include <AknIconUtils.h>
#include <AknsSkinInstance.h>

// User Includes
#include "evtglobalquery.h"
#include "evtinfonoteparams.h"
#include "evtkeylockhandler.h"
#include "evtdebug.h"
#include "evtinfonoteinterface.h"

_LIT( KEvtDefaultIconFileName, "evthandlerserver.mif" );
static const TInt KTimetoPlay = 60;

// ================ Member funtions for CEvtGlobalQuery class ===============

// ---------------------------------------------------------------------------
// CEvtGlobalQuery::CEvtGlobalQuery
// ---------------------------------------------------------------------------
//
CEvtGlobalQuery::CEvtGlobalQuery( CEvtInfoNoteInputParam&      aInputParam ) 
        : CActive (EPriorityStandard),  iInputParam( aInputParam )
	{
    CActiveScheduler::Add( this );
	}

// ---------------------------------------------------------------------------
// CEvtGlobalQuery::~CEvtGlobalQuery
// ---------------------------------------------------------------------------
//
CEvtGlobalQuery::~CEvtGlobalQuery()
	{
	Cancel();
	
    // Delete the Query
	delete iGlobalMsgQuery;
	
    // Delete the tone player
    delete iTonePlayer;
    
    // Delete Key Lock Handler
    if( iKeyLockHandler )
        {
        delete iKeyLockHandler;
        }
	}
	
// ---------------------------------------------------------------------------
// CEvtGlobalQuery::NewL
// ---------------------------------------------------------------------------
//
EXPORT_C CEvtGlobalQuery* CEvtGlobalQuery::NewL( CEvtInfoNoteInputParam&      aInputParam )
    {
	CEvtGlobalQuery* self = NewLC(aInputParam);
	CleanupStack::Pop( self );
	return self;
    }

// ---------------------------------------------------------------------------
// CEvtGlobalQuery::NewLC
// ---------------------------------------------------------------------------
//
EXPORT_C CEvtGlobalQuery* CEvtGlobalQuery::NewLC( CEvtInfoNoteInputParam&      aInputParam )
    {
	CEvtGlobalQuery* self = new ( ELeave )CEvtGlobalQuery(aInputParam);
	CleanupStack::PushL( self );
	self->ConstructL( );
	return self;
    } 

// ---------------------------------------------------------------------------
// CEvtGlobalQuery::ConstructL
// ---------------------------------------------------------------------------
//
void CEvtGlobalQuery::ConstructL()
    {
    EVTUIDEBUG( "+ CEvtGlobalQuery::ConstructL()" );
	    	
    iGlobalMsgQuery = CAknGlobalMsgQuery::NewL();
        
    iKeyLockHandler = CEvtKeyLockHandler::NewL( );
    
    iTonePlayer = CEvtTonePlayer::NewL( *this );     
	
    EVTUIDEBUG( "- CEvtGlobalQuery::ConstructL()" );
    }

// ---------------------------------------------------------------------------
// void CEvtGlobalQuery::RunL()
// ---------------------------------------------------------------------------
//                             
void CEvtGlobalQuery::RunL()
    {
	EVTUIDEBUG( "+ CEvtGlobalQuery::RunL()" );
    iReturnBuffer->Zero( );
	if(iStatus.Int() == EAknSoftkeyOpen)
		{
		iReturnBuffer->AppendNum( EOpenTrigger );
		
		// Disable the Key Lock irrespective of previously maintained state.
		// Update the Key Lock state.
	    if ( iKeyLockHandler )
	        {
	        iKeyLockHandler->EnableKeyLock( EFalse );
			iKeyLockHandler->UpdateStateWithoutNote();
	        }
		}
	else
		{
		iReturnBuffer->AppendNum( ECloseInfoNote );
	
		// Update the Key Lock state.
	    if ( iKeyLockHandler )
	        {
			iKeyLockHandler->UpdateStateWithNote();
	        }
		}
    User::RequestComplete( iReturnStatus, KErrNone );
	
	EVTUIDEBUG( "- CEvtGlobalQuery::RunL()" );
    }
    
// ---------------------------------------------------------------------------
// void CEvtGlobalQuery::DoCancel()
// ---------------------------------------------------------------------------
// 
void CEvtGlobalQuery::DoCancel()
    {
	EVTUIDEBUG( "+ CEvtGlobalQuery::DoCancel()" );
    // Cancel the outstanding CR notification request
    if( iGlobalMsgQuery )
        {
        iGlobalMsgQuery->CancelMsgQuery();      
        User::RequestComplete( iReturnStatus, KErrCancel );  
        }
	EVTUIDEBUG( "- CEvtGlobalQuery::DoCancel()" );
    }

// ---------------------------------------------------------------------------
// TInt CEvtGlobalQuery::RunError()
// ---------------------------------------------------------------------------
//    
TInt CEvtGlobalQuery::RunError( TInt aError )
	{    	
	return aError;	
	} 

// ---------------------------------------------------------------------------
// void CEvtGlobalQuery::CancelDialog()
// ---------------------------------------------------------------------------
//
EXPORT_C void CEvtGlobalQuery::CancelDialog()
	{    	
    EVTUIDEBUG( "+ CEvtGlobalQuery::CancelDialog()" );
	Cancel();
    EVTUIDEBUG( "- CEvtGlobalQuery::CancelDialog()" );
	} 

// ---------------------------------------------------------------------------
// TInt CEvtGlobalQuery::RunError()
// ---------------------------------------------------------------------------
//  
EXPORT_C void CEvtGlobalQuery::StartGlobalQueryL(TRequestStatus& aStatus, TDes8& aRetBuffer)
    {
    EVTUIDEBUG( "+ CEvtGlobalQuery::StartGlobalQueryL()" );
    iReturnStatus = &aStatus;
    iReturnBuffer = &aRetBuffer;
    
    *iReturnStatus = KRequestPending;
    
    if( iGlobalMsgQuery )
        {
        iGlobalMsgQuery->CancelMsgQuery();  
        delete iGlobalMsgQuery;
        iGlobalMsgQuery = NULL;
        }
    
    TFileName fileName;    
    TInt bmpID;
    TInt bmpMaskID;
    
    GetIconDetailsL(fileName, bmpID, bmpMaskID);
    
    // Maintain the Key Lock State and Enable if it is already not enabled
    if ( iKeyLockHandler )
        {
        iKeyLockHandler->MaintainState();
        }
        
    // If tone player is there, then start tone playing
    if ( iInputParam.ToneEnabled() )
        {
        iGlobalMsgQuery = CAknGlobalMsgQuery::NewL();
        iGlobalMsgQuery->ShowMsgQueryL(iStatus, iInputParam.Description(), R_AVKON_SOFTKEYS_OPEN_CLOSE, iInputParam.Subject(), fileName, bmpID, bmpMaskID );
        SetActive();
        iTonePlayer->PlayFileL( iInputParam.Tone(), iInputParam.ToneRepeat(), KTimetoPlay );
        }
    else
        {
        iGlobalMsgQuery = CAknGlobalMsgQuery::NewL();
        iGlobalMsgQuery->ShowMsgQueryL(iStatus, iInputParam.Description(), R_AVKON_SOFTKEYS_OPEN_CLOSE, iInputParam.Subject(), fileName, bmpID, bmpMaskID );
        SetActive();
        }

    EVTUIDEBUG( "- CEvtGlobalQuery::StartGlobalQueryL()" );
    }  

// ---------------------------------------------------------------------------
// void CEvtGlobalQuery::GetIconDetailsL()
// ---------------------------------------------------------------------------
//    
void CEvtGlobalQuery::GetIconDetailsL( TFileName& aFileName, TInt& aBmpID, TInt& aBmpMaskID )
	{    	
    EVTUIDEBUG( "+ CEvtGlobalQuery::GetIconDetailsL()" );
	RProcess currentProcess;
	TParse parser;
	
	parser.Set( currentProcess.FileName(), NULL, NULL );
	TPtrC filename( parser.FullName() );
    //filename.Copy( KTempDrive );
	
	User::LeaveIfError( parser.Set( KEvtDefaultIconFileName, &KDC_APP_BITMAP_DIR, &filename ));
    aFileName = parser.FullName();
    
     //retrieve accuracy level       
    CEvtInfoNoteInputParam::TEvtTriggerAccuracy accuracy = iInputParam.TrigerringAccuracy();
    EVTUIDEBUG1( "Icon creation:Accuracy level = %d", accuracy )
    
    switch( accuracy )
    	{
    	case CEvtInfoNoteInputParam::EEvtAccurateTrigger:
    		aBmpID = EMbmEvthandlerserverQgn_note_locev_alarm_acc;
    		aBmpMaskID = EMbmEvthandlerserverQgn_note_locev_alarm_acc_mask;
    		break;
    	case CEvtInfoNoteInputParam::EEvtInaccurateTrigger:
    		aBmpID = EMbmEvthandlerserverQgn_note_locev_alarm_inacc;
    		aBmpMaskID = EMbmEvthandlerserverQgn_note_locev_alarm_inacc_mask;
    		break;
    	case CEvtInfoNoteInputParam::EEvtHighlyInaccurateTrigger:
    	default:
    		aBmpID = EMbmEvthandlerserverQgn_note_locev_alarm_inacc_heavy;
    		aBmpMaskID = EMbmEvthandlerserverQgn_note_locev_alarm_inacc_heavy_mask;
    		break;
    	}
    EVTUIDEBUG( "- CEvtGlobalQuery::GetIconDetailsL()" );
	} 

// ---------------------------------------------------------------------------
// void CEvtGlobalQuery::TonePlayCompleteL()
// ---------------------------------------------------------------------------
//  
void CEvtGlobalQuery::TonePlayCompleteL( TBool aTimeout )
	{
    EVTUIDEBUG( "+ CEvtGlobalQuery::TonePlayCompleteL()" );
		// Enable KeyLock on Timeout.
    if ( iKeyLockHandler && aTimeout )
        {
        iKeyLockHandler->EnableKeyLock( ETrue );
        iKeyLockHandler->UpdateStateWithoutNote();
        }
        
    // Update the CBA
    iGlobalMsgQuery->UpdateMsgQuery( R_AVKON_SOFTKEYS_OPEN_CLOSE );
    EVTUIDEBUG( "- CEvtGlobalQuery::TonePlayCompleteL()" );
	}