coreapplicationuis/advancedtspcontroller/src/tsptriggerevents.cpp
author hgs
Tue, 29 Jun 2010 10:40:11 +0300
changeset 46 eea20ed08f4b
permissions -rw-r--r--
201025_02
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
46
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
     1
/*
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
     2
* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). 
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
     3
* All rights reserved.
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
     4
* This component and the accompanying materials are made available
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
     5
* under the terms of "Eclipse Public License v1.0"
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
     6
* which accompanies this distribution, and is available
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
     7
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
     8
*
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
     9
* Initial Contributors:
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
    10
* Nokia Corporation - initial contribution.
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
    11
*
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
    12
* Contributors:
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
    13
*
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
    14
* Description: Observes changes in the default player that should be used for a bearer
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
    15
*/
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
    16
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
    17
#include <AudioClientsListPSKeys.h>
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
    18
#include "tsptriggerevents.h"
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
    19
#include "RemConDebug.h"
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
    20
//-----------------------------------------------------------------------
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
    21
// CTspTriggerEventsWatcher
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
    22
//-----------------------------------------------------------------------
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
    23
CTspTriggerEventsWatcher* CTspTriggerEventsWatcher::NewL(MTspRulesTriggerObserver& aObserver)
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
    24
    {
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
    25
    CTspTriggerEventsWatcher* self = new(ELeave)CTspTriggerEventsWatcher(aObserver);
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
    26
    CleanupStack::PushL(self);
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
    27
    self->ConstructL();
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
    28
    CleanupStack::Pop(self);
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
    29
    return self;
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
    30
    }
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
    31
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
    32
CTspTriggerEventsWatcher::CTspTriggerEventsWatcher(MTspRulesTriggerObserver& aObserver)
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
    33
    : iObserver(aObserver)
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
    34
    {
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
    35
    }
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
    36
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
    37
void CTspTriggerEventsWatcher::ConstructL()
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
    38
    {
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
    39
    // Create WServ event watcher
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
    40
    iWsEventsObserver = CWsEventsObserver::NewL(iObserver);
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
    41
    
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
    42
    // Create observer for audio routing
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
    43
    iAudioClientObserver = CActiveAudioClientObserver::NewL(iObserver);
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
    44
    
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
    45
    // Create observer for TSP client mapper
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
    46
    iClientMapperObserver = CTspClientMapperObserver::NewL(iObserver);
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
    47
    }
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
    48
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
    49
CTspTriggerEventsWatcher::~CTspTriggerEventsWatcher()
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
    50
    {
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
    51
    delete iAudioClientObserver;
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
    52
    delete iWsEventsObserver;
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
    53
    delete iClientMapperObserver;
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
    54
    }
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
    55
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
    56
//-----------------------------------------------------------------------
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
    57
// CWsEventsObserver
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
    58
//-----------------------------------------------------------------------
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
    59
CWsEventsObserver* CWsEventsObserver::NewL(MTspRulesTriggerObserver& aObserver)
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
    60
    {
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
    61
    CWsEventsObserver* self = new(ELeave)CWsEventsObserver(aObserver);
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
    62
    CleanupStack::PushL(self);
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
    63
    self->ConstructL();
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
    64
    CleanupStack::Pop(self);
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
    65
    return self;
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
    66
    }
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
    67
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
    68
CWsEventsObserver::~CWsEventsObserver()
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
    69
    {
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
    70
    Cancel(); 
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
    71
    iWindowGroup.Close(); 
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
    72
    iWsSession.Close();
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
    73
    }
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
    74
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
    75
CWsEventsObserver::CWsEventsObserver(MTspRulesTriggerObserver& aObserver)
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
    76
    : CActive(CActive::EPriorityStandard), iObserver(aObserver), iWsSession(), iWindowGroup(iWsSession)
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
    77
    {
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
    78
    }
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
    79
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
    80
void CWsEventsObserver::ConstructL()
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
    81
    {
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
    82
    // Register to recieve WServ events
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
    83
    CActiveScheduler::Add(this);    
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
    84
    User::LeaveIfError(iWsSession.Connect());
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
    85
    iWindowGroup = RWindowGroup(iWsSession); 
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
    86
    User::LeaveIfError(iWindowGroup.Construct(reinterpret_cast<TUint32>(this), EFalse));
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
    87
    iWindowGroup.SetOrdinalPosition(-1); 
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
    88
    iWindowGroup.DefaultOwningWindow(); 
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
    89
    iWindowGroup.EnableReceiptOfFocus(EFalse);    
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
    90
    iWindowGroup.EnableGroupListChangeEvents(); // For changes in z-order 
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
    91
    iWsSession.EventReady(&iStatus);
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
    92
    SetActive(); 
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
    93
    }
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
    94
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
    95
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
    96
void CWsEventsObserver::RunL()
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
    97
    {
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
    98
    COM_TRACE_( "[REMCONTSPCONTROLLER] CWsEventsObserver::RunL" );
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
    99
    TWsEvent event;
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
   100
    iWsSession.GetEvent(event);
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
   101
    iWsSession.EventReady(&iStatus);
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
   102
    SetActive(); 
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
   103
    if(event.Type() == EEventWindowGroupListChanged)
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
   104
        {
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
   105
        COM_TRACE_( "[REMCONTSPCONTROLLER] CWsEventsObserver::RunL - EEventWindowGroupListChanged" );
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
   106
        iObserver.MtrtoEvaluateRoutingRules();
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
   107
        }
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
   108
    }
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
   109
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
   110
void CWsEventsObserver::DoCancel()
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
   111
    {
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
   112
    iWsSession.EventReadyCancel();
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
   113
    }
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
   114
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
   115
//-----------------------------------------------------------------------
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
   116
// CActiveAudioClientObserver
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
   117
//-----------------------------------------------------------------------
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
   118
CActiveAudioClientObserver* CActiveAudioClientObserver::NewL(MTspRulesTriggerObserver& aObserver)
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
   119
    {
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
   120
    CActiveAudioClientObserver* self = new(ELeave)CActiveAudioClientObserver(aObserver);
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
   121
    CleanupStack::PushL(self);
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
   122
    self->ConstructL();
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
   123
    CleanupStack::Pop(self);
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
   124
    return self;
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
   125
    }
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
   126
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
   127
CActiveAudioClientObserver::~CActiveAudioClientObserver()
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
   128
    {
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
   129
    Cancel(); 
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
   130
    iAudioApplication.Close();
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
   131
    }
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
   132
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
   133
CActiveAudioClientObserver::CActiveAudioClientObserver(MTspRulesTriggerObserver& aObserver)
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
   134
    : CActive(CActive::EPriorityStandard), iObserver(aObserver)
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
   135
    {
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
   136
    }
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
   137
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
   138
void CActiveAudioClientObserver::ConstructL()
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
   139
    {
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
   140
    User::LeaveIfError(iAudioApplication.Attach(KPSUidMMFAudioServer, KAudioPolicyApplicationAudioStatePlaying));
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
   141
    CActiveScheduler::Add(this);    
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
   142
    iAudioApplication.Subscribe(iStatus);
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
   143
    SetActive(); 
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
   144
    }
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
   145
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
   146
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
   147
void CActiveAudioClientObserver::RunL()
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
   148
    {
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
   149
    // Doesn't matter what the value is - that'll be checked when evaluation
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
   150
    // the TSP target rules.  Inform the TSP of the value change and 
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
   151
    // re-subscribe.
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
   152
    COM_TRACE_( "[REMCONTSPCONTROLLER] CWsEventsObserver::RunL" );
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
   153
    iAudioApplication.Subscribe(iStatus);
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
   154
    SetActive(); 
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
   155
    iObserver.MtrtoEvaluateRoutingRules();
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
   156
    }
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
   157
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
   158
void CActiveAudioClientObserver::DoCancel()
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
   159
    {
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
   160
    iAudioApplication.Cancel();
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
   161
    }
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
   162
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
   163
//-----------------------------------------------------------------------
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
   164
// CTspClientMapperObserver
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
   165
//-----------------------------------------------------------------------
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
   166
CTspClientMapperObserver* CTspClientMapperObserver::NewL(MTspRulesTriggerObserver& aObserver)
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
   167
    {
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
   168
    CTspClientMapperObserver* self = new(ELeave)CTspClientMapperObserver(aObserver);
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
   169
    CleanupStack::PushL(self);
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
   170
    self->ConstructL();
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
   171
    CleanupStack::Pop(self);
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
   172
    return self;
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
   173
    }
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
   174
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
   175
CTspClientMapperObserver::~CTspClientMapperObserver()
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
   176
    {
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
   177
    Cancel(); 
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
   178
    }
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
   179
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
   180
CTspClientMapperObserver::CTspClientMapperObserver(MTspRulesTriggerObserver& aObserver)
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
   181
    : CActive(CActive::EPriorityStandard), iObserver(aObserver)
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
   182
    {
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
   183
    }
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
   184
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
   185
void CTspClientMapperObserver::ConstructL()
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
   186
    {
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
   187
    const TUid KTspClientMapperProperty = { 0x10200C70 };
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
   188
    const TUint32 KTspClientMapperKeyPlaying = 0x00000001;
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
   189
    User::LeaveIfError(iPlayingClients.Attach(KTspClientMapperProperty, KTspClientMapperKeyPlaying));
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
   190
    CActiveScheduler::Add(this);    
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
   191
    iPlayingClients.Subscribe(iStatus);
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
   192
    SetActive(); 
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
   193
    }
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
   194
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
   195
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
   196
void CTspClientMapperObserver::RunL()
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
   197
    {
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
   198
    // Doesn't matter what the value is - that'll be checked when evaluating
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
   199
    // the TSP target rules.  Inform the TSP of the value change and 
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
   200
    // re-subscribe.
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
   201
    COM_TRACE_( "[REMCONTSPCONTROLLER] CWsEventsObserver::RunL" );
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
   202
    iPlayingClients.Subscribe(iStatus);
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
   203
    SetActive(); 
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
   204
    iObserver.MtrtoEvaluateRoutingRules();
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
   205
    }
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
   206
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
   207
void CTspClientMapperObserver::DoCancel()
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
   208
    {
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
   209
    iPlayingClients.Cancel();
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
   210
    }
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
   211
eea20ed08f4b 201025_02
hgs
parents:
diff changeset
   212