messagingappbase/msgavkon/msgindicatorplugin/src/MsgWaitingObserver.cpp
author hgs
Thu, 04 Nov 2010 02:02:03 +0530
changeset 81 2043ea884c04
parent 79 2981cb3aa489
permissions -rw-r--r--
201044_03
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
79
hgs
parents:
diff changeset
     1
/*
hgs
parents:
diff changeset
     2
* Copyright (c) 2006-2008 Nokia Corporation and/or its subsidiary(-ies).
hgs
parents:
diff changeset
     3
* All rights reserved.
hgs
parents:
diff changeset
     4
* This component and the accompanying materials are made available
hgs
parents:
diff changeset
     5
* under the terms of "Eclipse Public License v1.0"
hgs
parents:
diff changeset
     6
* which accompanies this distribution, and is available
hgs
parents:
diff changeset
     7
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
hgs
parents:
diff changeset
     8
*
hgs
parents:
diff changeset
     9
* Initial Contributors:
hgs
parents:
diff changeset
    10
* Nokia Corporation - initial contribution.
hgs
parents:
diff changeset
    11
*
hgs
parents:
diff changeset
    12
* Contributors:
hgs
parents:
diff changeset
    13
*
hgs
parents:
diff changeset
    14
* Description:   MsgIndicatorPlugin plugin implementation
hgs
parents:
diff changeset
    15
*
hgs
parents:
diff changeset
    16
*/
hgs
parents:
diff changeset
    17
hgs
parents:
diff changeset
    18
hgs
parents:
diff changeset
    19
hgs
parents:
diff changeset
    20
#include <etelmm.h>
hgs
parents:
diff changeset
    21
#include <MessagingDomainCRKeys.h>
hgs
parents:
diff changeset
    22
#include "MsgWaitingObserver.h"
hgs
parents:
diff changeset
    23
#include "msgindicatorpluginlog.h"
hgs
parents:
diff changeset
    24
#include "msgindicatorpluginimplementation.h"
hgs
parents:
diff changeset
    25
	
hgs
parents:
diff changeset
    26
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
    27
// CMsgIndicatorPluginImplementation::CMsgIndicatorPluginImplementation
hgs
parents:
diff changeset
    28
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
    29
//
hgs
parents:
diff changeset
    30
CWaitingObserver::CWaitingObserver( RMobilePhone &aMobilePhone,
hgs
parents:
diff changeset
    31
    CMsgIndicatorPluginImplementation& iIndicatorPlugin ) :
hgs
parents:
diff changeset
    32
    CActive( EPriorityNormal ),
hgs
parents:
diff changeset
    33
	iChangeNotifySubscribed( EFalse ),
hgs
parents:
diff changeset
    34
    iMobilePhone( aMobilePhone ),
hgs
parents:
diff changeset
    35
    iMsgWaiting(),
hgs
parents:
diff changeset
    36
  	iMsgWaitingPckg( iMsgWaiting ),
hgs
parents:
diff changeset
    37
  	iIndicatorPlugin(iIndicatorPlugin)
hgs
parents:
diff changeset
    38
    {
hgs
parents:
diff changeset
    39
    CActiveScheduler::Add( this );
hgs
parents:
diff changeset
    40
    }
hgs
parents:
diff changeset
    41
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
    42
// CWaitingObserver::NewL
hgs
parents:
diff changeset
    43
// Two-phased constructor.
hgs
parents:
diff changeset
    44
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
    45
//
hgs
parents:
diff changeset
    46
CWaitingObserver* CWaitingObserver::NewL( RMobilePhone &aMobilePhone,
hgs
parents:
diff changeset
    47
                            CMsgIndicatorPluginImplementation& iIndicatorPlugin )
hgs
parents:
diff changeset
    48
    {
hgs
parents:
diff changeset
    49
    CWaitingObserver* self = new (ELeave) CWaitingObserver( aMobilePhone, iIndicatorPlugin);
hgs
parents:
diff changeset
    50
hgs
parents:
diff changeset
    51
    CleanupStack::PushL( self );
hgs
parents:
diff changeset
    52
    self->ConstructL();
hgs
parents:
diff changeset
    53
    CleanupStack::Pop( self );
hgs
parents:
diff changeset
    54
hgs
parents:
diff changeset
    55
    return self;
hgs
parents:
diff changeset
    56
    }
hgs
parents:
diff changeset
    57
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
    58
// CMsgIndicatorPluginImplementation::ConstructL
hgs
parents:
diff changeset
    59
// Symbian 2nd phase constructor can leave.
hgs
parents:
diff changeset
    60
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
    61
//
hgs
parents:
diff changeset
    62
void CWaitingObserver::ConstructL()
hgs
parents:
diff changeset
    63
    {
hgs
parents:
diff changeset
    64
    MSGPLUGINLOGGER_WRITE_FORMAT( "::ConstructL: this 0x%x", 
hgs
parents:
diff changeset
    65
    	this );
hgs
parents:
diff changeset
    66
hgs
parents:
diff changeset
    67
    User::LeaveIfError( iTelServer.Connect() );
hgs
parents:
diff changeset
    68
hgs
parents:
diff changeset
    69
    User::LeaveIfError( iTelServer.GetPhoneInfo( 0, iPhoneInfo ) );
hgs
parents:
diff changeset
    70
        
hgs
parents:
diff changeset
    71
    User::LeaveIfError( iMobilePhone.Open( iTelServer, iPhoneInfo.iName ) );   
hgs
parents:
diff changeset
    72
hgs
parents:
diff changeset
    73
    iMobilePhone.GetIccMessageWaitingIndicators( iStatus, iMsgWaitingPckg );
hgs
parents:
diff changeset
    74
    SetActive();
hgs
parents:
diff changeset
    75
    }
hgs
parents:
diff changeset
    76
hgs
parents:
diff changeset
    77
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
    78
// CWaitingObserver::~CWaitingObserver()
hgs
parents:
diff changeset
    79
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
    80
//
hgs
parents:
diff changeset
    81
CWaitingObserver::~CWaitingObserver()
hgs
parents:
diff changeset
    82
    {
hgs
parents:
diff changeset
    83
    MSGPLUGINLOGGER_WRITE_FORMAT( "Destructor: this 0x%x", 
hgs
parents:
diff changeset
    84
    	this );
hgs
parents:
diff changeset
    85
    Cancel();
hgs
parents:
diff changeset
    86
    iTelServer.Close();
hgs
parents:
diff changeset
    87
    }
hgs
parents:
diff changeset
    88
    
hgs
parents:
diff changeset
    89
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
    90
// CWaitingObserver::RunL()
hgs
parents:
diff changeset
    91
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
    92
//
hgs
parents:
diff changeset
    93
void CWaitingObserver::RunL()
hgs
parents:
diff changeset
    94
    {
hgs
parents:
diff changeset
    95
    TInt err = iStatus.Int();
hgs
parents:
diff changeset
    96
    MSGPLUGINLOGGER_WRITE_FORMAT("RunL(): err: %d", err);    
hgs
parents:
diff changeset
    97
    // subscribe for notifications
hgs
parents:
diff changeset
    98
hgs
parents:
diff changeset
    99
    if ( err == KErrNone )
hgs
parents:
diff changeset
   100
        {
hgs
parents:
diff changeset
   101
        UpdateIndicatorStatusL();
hgs
parents:
diff changeset
   102
        }
hgs
parents:
diff changeset
   103
        
hgs
parents:
diff changeset
   104
    iMobilePhone.NotifyIccMessageWaitingIndicatorsChange( iStatus, iMsgWaitingPckg );
hgs
parents:
diff changeset
   105
    SetActive();
hgs
parents:
diff changeset
   106
hgs
parents:
diff changeset
   107
    // get-request completed, DoCancel() must now cancel notify request
hgs
parents:
diff changeset
   108
    iChangeNotifySubscribed = ETrue; 
hgs
parents:
diff changeset
   109
    }
hgs
parents:
diff changeset
   110
hgs
parents:
diff changeset
   111
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   112
// CWaitingObserver::DoCancel()
hgs
parents:
diff changeset
   113
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   114
//    
hgs
parents:
diff changeset
   115
void CWaitingObserver::DoCancel()
hgs
parents:
diff changeset
   116
    {
hgs
parents:
diff changeset
   117
    if ( iChangeNotifySubscribed )
hgs
parents:
diff changeset
   118
        {
hgs
parents:
diff changeset
   119
        iMobilePhone.CancelAsyncRequest( EMobilePhoneNotifyIccMessageWaitingIndicatorsChange );  
hgs
parents:
diff changeset
   120
        }
hgs
parents:
diff changeset
   121
    else
hgs
parents:
diff changeset
   122
        {
hgs
parents:
diff changeset
   123
        iMobilePhone.CancelAsyncRequest( EMobilePhoneGetIccMessageWaitingIndicators );    
hgs
parents:
diff changeset
   124
        }
hgs
parents:
diff changeset
   125
    }
hgs
parents:
diff changeset
   126
hgs
parents:
diff changeset
   127
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   128
// CWaitingObserver::GetMsgCount(const TIndicatorMessageType aMsgType)
hgs
parents:
diff changeset
   129
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   130
//
hgs
parents:
diff changeset
   131
TInt CWaitingObserver::GetMsgCount( const TIndicatorMessageType aMsgType )
hgs
parents:
diff changeset
   132
    {
hgs
parents:
diff changeset
   133
    TInt msgCount = 0;
hgs
parents:
diff changeset
   134
    MSGPLUGINLOGGER_WRITE( "GetMsgCount()");
hgs
parents:
diff changeset
   135
    switch( aMsgType )
hgs
parents:
diff changeset
   136
        {
hgs
parents:
diff changeset
   137
    	case EIndicatorMessageTypeFax:
hgs
parents:
diff changeset
   138
    		msgCount = iMsgWaiting.iFaxMsgs;			
hgs
parents:
diff changeset
   139
        	MSGPLUGINLOGGER_WRITE_FORMAT( "GetMsgCount->FAX %d", msgCount );
hgs
parents:
diff changeset
   140
        	MSGPLUGINLOGGER_WRITE_FORMAT( "GetMsgCount->FAX %d", iMsgWaiting.iFaxMsgs );
hgs
parents:
diff changeset
   141
    		break;
hgs
parents:
diff changeset
   142
    		
hgs
parents:
diff changeset
   143
    	case EIndicatorMessageTypeVMLine1:
hgs
parents:
diff changeset
   144
    		msgCount = iMsgWaiting.iVoiceMsgs;
hgs
parents:
diff changeset
   145
        	MSGPLUGINLOGGER_WRITE_FORMAT( "GetMsgCount->LINE1 %d", msgCount );
hgs
parents:
diff changeset
   146
        	MSGPLUGINLOGGER_WRITE_FORMAT( "GetMsgCount->LINE1 %d", iMsgWaiting.iVoiceMsgs );
hgs
parents:
diff changeset
   147
    		break;
hgs
parents:
diff changeset
   148
    		
hgs
parents:
diff changeset
   149
    	case EIndicatorMessageTypeVMLine2:
hgs
parents:
diff changeset
   150
    		msgCount = iMsgWaiting.iAuxVoiceMsgs;
hgs
parents:
diff changeset
   151
        	MSGPLUGINLOGGER_WRITE_FORMAT( "GetMsgCount->LINE2 %d", msgCount );
hgs
parents:
diff changeset
   152
        	MSGPLUGINLOGGER_WRITE_FORMAT( "GetMsgCount->LINE2 %d", iMsgWaiting.iAuxVoiceMsgs );
hgs
parents:
diff changeset
   153
    		break;  
hgs
parents:
diff changeset
   154
        
hgs
parents:
diff changeset
   155
    	default:
hgs
parents:
diff changeset
   156
    		break;	    	
hgs
parents:
diff changeset
   157
        }
hgs
parents:
diff changeset
   158
    MSGPLUGINLOGGER_WRITE_FORMAT( "GetMsgCount->RETURN %d", msgCount );	    
hgs
parents:
diff changeset
   159
    return msgCount;
hgs
parents:
diff changeset
   160
    }
hgs
parents:
diff changeset
   161
    
hgs
parents:
diff changeset
   162
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   163
// CWaitingObserver::UpdateIndicatorStatusL()
hgs
parents:
diff changeset
   164
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   165
//	    	    
hgs
parents:
diff changeset
   166
void CWaitingObserver::UpdateIndicatorStatusL()
hgs
parents:
diff changeset
   167
	{
hgs
parents:
diff changeset
   168
    MSGPLUGINLOGGER_WRITE( "UpdateIndicatorStatus()");
hgs
parents:
diff changeset
   169
hgs
parents:
diff changeset
   170
    MSGPLUGINLOGGER_WRITE_FORMAT( "::UpdateIndicatorStatus: Voice mail line 1 count %d", iMsgWaiting.iVoiceMsgs );
hgs
parents:
diff changeset
   171
    MSGPLUGINLOGGER_WRITE_FORMAT( "::UpdateIndicatorStatus: Fax count %d", iMsgWaiting.iFaxMsgs );
hgs
parents:
diff changeset
   172
hgs
parents:
diff changeset
   173
    iMsgWaiting = iMsgWaitingPckg();
hgs
parents:
diff changeset
   174
    if(!CheckSupressNotificationSettingL())
hgs
parents:
diff changeset
   175
        {
hgs
parents:
diff changeset
   176
    	if(iMsgWaiting.iDisplayStatus & RMobilePhone::KDisplayVoicemailActive)
hgs
parents:
diff changeset
   177
        	{
hgs
parents:
diff changeset
   178
        	if ( !iIndicatorPlugin.IsALSSupported() )
hgs
parents:
diff changeset
   179
            	{
hgs
parents:
diff changeset
   180
            	MSGPLUGINLOGGER_WRITE( "iIndicatorPlugin.UpdateTextL( EAknIndicatorVoiceMailWaiting )");
hgs
parents:
diff changeset
   181
            	iIndicatorPlugin.UpdateL( EAknIndicatorVoiceMailWaiting );
hgs
parents:
diff changeset
   182
            	}
hgs
parents:
diff changeset
   183
        	else
hgs
parents:
diff changeset
   184
            	{
hgs
parents:
diff changeset
   185
            	MSGPLUGINLOGGER_WRITE( "iIndicatorPlugin.UpdateTextL( EAknIndicatorVoiceMailWaitingOnLine1 )");
hgs
parents:
diff changeset
   186
            	iIndicatorPlugin.UpdateL( EAknIndicatorVoiceMailWaitingOnLine1 );
hgs
parents:
diff changeset
   187
            	}
hgs
parents:
diff changeset
   188
        	}
hgs
parents:
diff changeset
   189
        }
hgs
parents:
diff changeset
   190
    if ( iMsgWaiting.iDisplayStatus & RMobilePhone::KDisplayAuxVoicemailActive )
hgs
parents:
diff changeset
   191
        {
hgs
parents:
diff changeset
   192
        MSGPLUGINLOGGER_WRITE( "iIndicatorPlugin.UpdateTextL( EAknIndicatorVoiceMailWaitingOnLine2 )");
hgs
parents:
diff changeset
   193
    	iIndicatorPlugin.UpdateL( EAknIndicatorVoiceMailWaitingOnLine2 );
hgs
parents:
diff changeset
   194
        }
hgs
parents:
diff changeset
   195
    if ( iMsgWaiting.iDisplayStatus & RMobilePhone::KDisplayFaxActive) 
hgs
parents:
diff changeset
   196
        {
hgs
parents:
diff changeset
   197
        MSGPLUGINLOGGER_WRITE( "iIndicatorPlugin.UpdateTextL( EAknIndicatorFaxMessage )");
hgs
parents:
diff changeset
   198
        iIndicatorPlugin.UpdateL( EAknIndicatorFaxMessage );
hgs
parents:
diff changeset
   199
        }
hgs
parents:
diff changeset
   200
	}	    
hgs
parents:
diff changeset
   201
// -------------------------------------------------------------------
hgs
parents:
diff changeset
   202
// Check the KMuiuSupressAllNotificationConfiguration value
hgs
parents:
diff changeset
   203
// -------------------------------------------------------------------
hgs
parents:
diff changeset
   204
//
hgs
parents:
diff changeset
   205
TBool CWaitingObserver::CheckSupressNotificationSettingL()
hgs
parents:
diff changeset
   206
{
hgs
parents:
diff changeset
   207
    TBool result = EFalse; 
hgs
parents:
diff changeset
   208
    TInt value = 0;
hgs
parents:
diff changeset
   209
    CRepository* repository = NULL;
hgs
parents:
diff changeset
   210
   
hgs
parents:
diff changeset
   211
   TRAPD( err, repository = CRepository::NewL( KCRUidMuiuMessagingConfiguration ) );
hgs
parents:
diff changeset
   212
   if( err == KErrNone && repository != NULL )
hgs
parents:
diff changeset
   213
       {
hgs
parents:
diff changeset
   214
       CleanupStack::PushL( repository ); 
hgs
parents:
diff changeset
   215
       err = repository->Get( KMuiuSupressAllNotificationConfiguration, value );
hgs
parents:
diff changeset
   216
       
hgs
parents:
diff changeset
   217
       if(err == KErrNone && (value & KMuiuNotificationSupressedForVoiceMail ))
hgs
parents:
diff changeset
   218
           {
hgs
parents:
diff changeset
   219
           result = ETrue;
hgs
parents:
diff changeset
   220
           }
hgs
parents:
diff changeset
   221
        } 
hgs
parents:
diff changeset
   222
       MSGPLUGINLOGGER_WRITE_FORMAT( "CWaitingObserver:  SupressNotification %d", result );
hgs
parents:
diff changeset
   223
       CleanupStack::PopAndDestroy( repository );
hgs
parents:
diff changeset
   224
       return result;
hgs
parents:
diff changeset
   225
}	    
hgs
parents:
diff changeset
   226
//  End of File