camerauis/cameraxui/cxui/src/cxuiapplicationframeworkmonitorprivate.cpp
author hgs
Fri, 17 Sep 2010 16:35:28 +0300
changeset 58 ddba9caa7f32
parent 52 7e18d488ac5f
permissions -rw-r--r--
201037
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
28
3075d9b614e6 201017_1
hgs
parents:
diff changeset
     1
/*
58
hgs
parents: 52
diff changeset
     2
* Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
28
3075d9b614e6 201017_1
hgs
parents:
diff changeset
     3
* All rights reserved.
3075d9b614e6 201017_1
hgs
parents:
diff changeset
     4
* This component and the accompanying materials are made available
3075d9b614e6 201017_1
hgs
parents:
diff changeset
     5
* under the terms of "Eclipse Public License v1.0"
3075d9b614e6 201017_1
hgs
parents:
diff changeset
     6
* which accompanies this distribution, and is available
3075d9b614e6 201017_1
hgs
parents:
diff changeset
     7
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
3075d9b614e6 201017_1
hgs
parents:
diff changeset
     8
*
3075d9b614e6 201017_1
hgs
parents:
diff changeset
     9
* Initial Contributors:
3075d9b614e6 201017_1
hgs
parents:
diff changeset
    10
* Nokia Corporation - initial contribution.
3075d9b614e6 201017_1
hgs
parents:
diff changeset
    11
*
3075d9b614e6 201017_1
hgs
parents:
diff changeset
    12
* Contributors:
3075d9b614e6 201017_1
hgs
parents:
diff changeset
    13
*
3075d9b614e6 201017_1
hgs
parents:
diff changeset
    14
* Description:
3075d9b614e6 201017_1
hgs
parents:
diff changeset
    15
*
3075d9b614e6 201017_1
hgs
parents:
diff changeset
    16
*/
3075d9b614e6 201017_1
hgs
parents:
diff changeset
    17
3075d9b614e6 201017_1
hgs
parents:
diff changeset
    18
#include <QObject>
3075d9b614e6 201017_1
hgs
parents:
diff changeset
    19
3075d9b614e6 201017_1
hgs
parents:
diff changeset
    20
#ifdef Q_OS_SYMBIAN
3075d9b614e6 201017_1
hgs
parents:
diff changeset
    21
#include <e32cmn.h>
3075d9b614e6 201017_1
hgs
parents:
diff changeset
    22
#include <w32std.h>
3075d9b614e6 201017_1
hgs
parents:
diff changeset
    23
#include <apgwgnam.h>
3075d9b614e6 201017_1
hgs
parents:
diff changeset
    24
#include <apgtask.h>
3075d9b614e6 201017_1
hgs
parents:
diff changeset
    25
#include <eikenv.h>
3075d9b614e6 201017_1
hgs
parents:
diff changeset
    26
#include <avkondomainpskeys.h>  // keyguard state
3075d9b614e6 201017_1
hgs
parents:
diff changeset
    27
#include <hwrmpowerstatesdkpskeys.h> // battery status
40
hgs
parents: 28
diff changeset
    28
#include <UsbWatcherInternalPSKeys.h> // usb status
hgs
parents: 28
diff changeset
    29
#include <usbman.h>
hgs
parents: 28
diff changeset
    30
#include <usbpersonalityids.h>
58
hgs
parents: 52
diff changeset
    31
#include <tspropertydefs.h>
28
3075d9b614e6 201017_1
hgs
parents:
diff changeset
    32
3075d9b614e6 201017_1
hgs
parents:
diff changeset
    33
#include <QMetaEnum>
3075d9b614e6 201017_1
hgs
parents:
diff changeset
    34
#include <QString>
3075d9b614e6 201017_1
hgs
parents:
diff changeset
    35
#include <QVariant>
52
hgs
parents: 40
diff changeset
    36
#include <QTimer>
28
3075d9b614e6 201017_1
hgs
parents:
diff changeset
    37
#include <qsymbianevent.h>
40
hgs
parents: 28
diff changeset
    38
28
3075d9b614e6 201017_1
hgs
parents:
diff changeset
    39
#endif // Q_OS_SYMBIAN
3075d9b614e6 201017_1
hgs
parents:
diff changeset
    40
3075d9b614e6 201017_1
hgs
parents:
diff changeset
    41
#include "cxutils.h"
40
hgs
parents: 28
diff changeset
    42
#include "cxuieventlog.h"
28
3075d9b614e6 201017_1
hgs
parents:
diff changeset
    43
#include "cxuiapplication.h"
3075d9b614e6 201017_1
hgs
parents:
diff changeset
    44
#include "cxesettings.h"
3075d9b614e6 201017_1
hgs
parents:
diff changeset
    45
#include "cxuiapplicationframeworkmonitorprivate.h"
3075d9b614e6 201017_1
hgs
parents:
diff changeset
    46
58
hgs
parents: 52
diff changeset
    47
namespace
hgs
parents: 52
diff changeset
    48
{
52
hgs
parents: 40
diff changeset
    49
    const int CXUI_USB_MODE_CHECK_TIMER_DELAY = 1000; // 1 second
28
3075d9b614e6 201017_1
hgs
parents:
diff changeset
    50
3075d9b614e6 201017_1
hgs
parents:
diff changeset
    51
#ifdef Q_OS_SYMBIAN
3075d9b614e6 201017_1
hgs
parents:
diff changeset
    52
    inline QString convertTDesC2QString(const TDesC& aDescriptor)
3075d9b614e6 201017_1
hgs
parents:
diff changeset
    53
    {
3075d9b614e6 201017_1
hgs
parents:
diff changeset
    54
        #ifdef QT_NO_UNICODE
3075d9b614e6 201017_1
hgs
parents:
diff changeset
    55
            return QString::fromLocal8Bit(aDescriptor.Ptr(), aDescriptor.Length());
3075d9b614e6 201017_1
hgs
parents:
diff changeset
    56
        #else
3075d9b614e6 201017_1
hgs
parents:
diff changeset
    57
            return QString::fromUtf16(aDescriptor.Ptr(), aDescriptor.Length());
3075d9b614e6 201017_1
hgs
parents:
diff changeset
    58
        #endif
3075d9b614e6 201017_1
hgs
parents:
diff changeset
    59
    }
3075d9b614e6 201017_1
hgs
parents:
diff changeset
    60
3075d9b614e6 201017_1
hgs
parents:
diff changeset
    61
    inline QString windowGroupName(RWsSession& ws, int id)
3075d9b614e6 201017_1
hgs
parents:
diff changeset
    62
    {
3075d9b614e6 201017_1
hgs
parents:
diff changeset
    63
        TBuf<CApaWindowGroupName::EMaxLength> name;
3075d9b614e6 201017_1
hgs
parents:
diff changeset
    64
        ws.GetWindowGroupNameFromIdentifier(id, name);
3075d9b614e6 201017_1
hgs
parents:
diff changeset
    65
        // Window group name contains "null" characters,
3075d9b614e6 201017_1
hgs
parents:
diff changeset
    66
        // which are considered end-of-string if not replaced.
3075d9b614e6 201017_1
hgs
parents:
diff changeset
    67
        for (int i=0; i < name.Length(); i++) {
3075d9b614e6 201017_1
hgs
parents:
diff changeset
    68
            if (name[i] == NULL) {
3075d9b614e6 201017_1
hgs
parents:
diff changeset
    69
                name[i] = ' ';
3075d9b614e6 201017_1
hgs
parents:
diff changeset
    70
            }
3075d9b614e6 201017_1
hgs
parents:
diff changeset
    71
        }
3075d9b614e6 201017_1
hgs
parents:
diff changeset
    72
        return convertTDesC2QString(name);
3075d9b614e6 201017_1
hgs
parents:
diff changeset
    73
    }
3075d9b614e6 201017_1
hgs
parents:
diff changeset
    74
3075d9b614e6 201017_1
hgs
parents:
diff changeset
    75
    // Phone ui
3075d9b614e6 201017_1
hgs
parents:
diff changeset
    76
    static const unsigned int UID_PHONEUI         = 0x100058B3;
3075d9b614e6 201017_1
hgs
parents:
diff changeset
    77
    // Task switcher
3075d9b614e6 201017_1
hgs
parents:
diff changeset
    78
    static const unsigned int UID_TASKSWITCHER    = 0x2002677D;
3075d9b614e6 201017_1
hgs
parents:
diff changeset
    79
    // Dialog server
3075d9b614e6 201017_1
hgs
parents:
diff changeset
    80
    static const unsigned int UID_DIALOGAPPSERVER = 0x20022FC5;
40
hgs
parents: 28
diff changeset
    81
hgs
parents: 28
diff changeset
    82
    // Log event types
hgs
parents: 28
diff changeset
    83
    static const char *EVENT_USB        = "usb";
hgs
parents: 28
diff changeset
    84
    static const char *EVENT_FOREGROUND = "foreground";
58
hgs
parents: 52
diff changeset
    85
28
3075d9b614e6 201017_1
hgs
parents:
diff changeset
    86
#endif // Q_OS_SYMBIAN
58
hgs
parents: 52
diff changeset
    87
} // namespace
28
3075d9b614e6 201017_1
hgs
parents:
diff changeset
    88
3075d9b614e6 201017_1
hgs
parents:
diff changeset
    89
3075d9b614e6 201017_1
hgs
parents:
diff changeset
    90
/*!
3075d9b614e6 201017_1
hgs
parents:
diff changeset
    91
* Constructor
3075d9b614e6 201017_1
hgs
parents:
diff changeset
    92
*/
40
hgs
parents: 28
diff changeset
    93
CxuiApplicationFrameworkMonitorPrivate::CxuiApplicationFrameworkMonitorPrivate(CxuiApplicationFrameworkMonitor *parent,
hgs
parents: 28
diff changeset
    94
                                                                               CxuiApplication &application,
hgs
parents: 28
diff changeset
    95
                                                                               CxeSettings& settings)
hgs
parents: 28
diff changeset
    96
    :  q(parent),
hgs
parents: 28
diff changeset
    97
       mApplication(application),
28
3075d9b614e6 201017_1
hgs
parents:
diff changeset
    98
       mSettings(settings),
3075d9b614e6 201017_1
hgs
parents:
diff changeset
    99
#ifdef Q_OS_SYMBIAN
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   100
       mWsSession(CCoeEnv::Static()->WsSession()),
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   101
       mWindowGroup(CCoeEnv::Static()->RootWin()),
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   102
       mWindowGroupId(mWindowGroup.Identifier()),
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   103
       mWindowGroupName(),
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   104
       mKeyLockState(EKeyguardNotActive),
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   105
       mBatteryStatus(EBatteryStatusUnknown),
40
hgs
parents: 28
diff changeset
   106
       mUsbPersonality(0),
58
hgs
parents: 52
diff changeset
   107
       mTaskManagerVisibility(false),
52
hgs
parents: 40
diff changeset
   108
       mUsbModeCheckTimer(this),
40
hgs
parents: 28
diff changeset
   109
       mEventLog(NULL),
28
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   110
#endif // Q_OS_SYMBIAN
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   111
       mState(CxuiApplicationFrameworkMonitor::ForegroundOwned)
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   112
{
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   113
    CX_DEBUG_ENTER_FUNCTION();
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   114
#ifdef Q_OS_SYMBIAN
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   115
    mWindowGroup.EnableFocusChangeEvents();
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   116
    mWindowGroupName = windowGroupName(mWsSession, mWindowGroupId);
40
hgs
parents: 28
diff changeset
   117
    mEventLog = new CxuiEventLog("CxuiApplicationFrameworkMonitorPrivate");
58
hgs
parents: 52
diff changeset
   118
28
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   119
    init();
58
hgs
parents: 52
diff changeset
   120
52
hgs
parents: 40
diff changeset
   121
    mUsbModeCheckTimer.setSingleShot(true);
hgs
parents: 40
diff changeset
   122
    mUsbModeCheckTimer.setInterval(CXUI_USB_MODE_CHECK_TIMER_DELAY);
hgs
parents: 40
diff changeset
   123
    connect(&mUsbModeCheckTimer, SIGNAL(timeout()),
hgs
parents: 40
diff changeset
   124
            this, SLOT(usbModeCheckTimerCallback()));
28
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   125
#endif // Q_OS_SYMBIAN
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   126
    CX_DEBUG_EXIT_FUNCTION();
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   127
}
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   128
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   129
/*!
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   130
* Destructor
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   131
*/
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   132
CxuiApplicationFrameworkMonitorPrivate::~CxuiApplicationFrameworkMonitorPrivate()
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   133
{
40
hgs
parents: 28
diff changeset
   134
    CX_DEBUG_ENTER_FUNCTION();
hgs
parents: 28
diff changeset
   135
#ifdef Q_OS_SYMBIAN
hgs
parents: 28
diff changeset
   136
    delete mEventLog;
hgs
parents: 28
diff changeset
   137
#endif // Q_OS_SYMBIAN
hgs
parents: 28
diff changeset
   138
    CX_DEBUG_EXIT_FUNCTION();
28
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   139
}
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   140
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   141
/*!
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   142
* Current foreground owning state of this application.
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   143
* @return Foreground owning state.
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   144
*/
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   145
CxuiApplicationFrameworkMonitor::ForegroundState CxuiApplicationFrameworkMonitorPrivate::foregroundState() const
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   146
{
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   147
    return mState;
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   148
}
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   149
40
hgs
parents: 28
diff changeset
   150
/*!
hgs
parents: 28
diff changeset
   151
* Is USB connected in mass memory mode?
hgs
parents: 28
diff changeset
   152
* @return True if USB mass memory mode is active and connected, false otherwise.
hgs
parents: 28
diff changeset
   153
*/
hgs
parents: 28
diff changeset
   154
bool CxuiApplicationFrameworkMonitorPrivate::isUsbMassMemoryModeActive() const
hgs
parents: 28
diff changeset
   155
{
hgs
parents: 28
diff changeset
   156
    bool active(false);
hgs
parents: 28
diff changeset
   157
#ifdef Q_OS_SYMBIAN
hgs
parents: 28
diff changeset
   158
    // Mass memory mode activity can be seen from the KUsbWatcherSelectedPersonality property.
hgs
parents: 28
diff changeset
   159
    // When USB is connected in Mass Memory Mode, we get KUsbPersonalityIdMS as personality id.
hgs
parents: 28
diff changeset
   160
    // If USB is not connected, personality id is KUsbWatcherSelectedPersonalityNone.
hgs
parents: 28
diff changeset
   161
    active = (mUsbPersonality == KUsbPersonalityIdMS);
hgs
parents: 28
diff changeset
   162
#endif // Q_OS_SYMBIAN
hgs
parents: 28
diff changeset
   163
    return active;
hgs
parents: 28
diff changeset
   164
}
hgs
parents: 28
diff changeset
   165
hgs
parents: 28
diff changeset
   166
hgs
parents: 28
diff changeset
   167
28
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   168
#ifdef Q_OS_SYMBIAN
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   169
/*!
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   170
* Slot to handle Symbian event.
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   171
* @param event Symbian event to be handled. (Ownership not taken.)
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   172
*/
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   173
void CxuiApplicationFrameworkMonitorPrivate::handleEvent(const QSymbianEvent *event)
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   174
{
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   175
    // We receive tons of these events, so function start and end traces
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   176
    // are intentionally left out.
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   177
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   178
    if (event) {
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   179
        switch (event->type()) {
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   180
        case QSymbianEvent::WindowServerEvent:
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   181
            handleWindowServerEvent(event);
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   182
            break;
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   183
        }
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   184
    }
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   185
}
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   186
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   187
/*!
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   188
* Handle changes in RProperty values of keylock state and battery status.
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   189
* @param uid Category uid of the changed property.
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   190
* @param key Integer key of the changed property.
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   191
* @param value New value of the changed property.
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   192
*/
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   193
void CxuiApplicationFrameworkMonitorPrivate::handlePropertyEvent(long int uid, unsigned long int key, QVariant value)
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   194
{
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   195
    CX_DEBUG_ENTER_FUNCTION();
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   196
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   197
    if (uid == KPSUidAvkonDomain.iUid && key == KAknKeyguardStatus) {
40
hgs
parents: 28
diff changeset
   198
        CX_DEBUG(("CxuiApplicationFrameworkMonitor - keylock status changed: %d -> %d", mKeyLockState, value.toInt()));
28
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   199
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   200
        // Check if the keylock value has actually changed
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   201
        const int newKeyLockState = value.toInt();
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   202
        if (newKeyLockState != mKeyLockState) {
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   203
            mKeyLockState = newKeyLockState;
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   204
            // Set foreground state based on keylock status and focused application info.
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   205
            setState(getCurrentState());
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   206
        }
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   207
    } else if (uid == KPSUidHWRMPowerState.iUid && key == KHWRMBatteryStatus ) {
40
hgs
parents: 28
diff changeset
   208
        CX_DEBUG(("CxuiApplicationFrameworkMonitor - battery status changed: %d -> %d", mBatteryStatus, value.toInt() ));
28
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   209
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   210
        // If status changed, check if battery is going empty.
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   211
        const int newBatteryStatus = value.toInt();
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   212
        if (newBatteryStatus != mBatteryStatus) {
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   213
            mBatteryStatus = newBatteryStatus;
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   214
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   215
            // Notify that battery is almost empty,
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   216
            // need to stop any recordings etc.
40
hgs
parents: 28
diff changeset
   217
            if(mBatteryStatus == EBatteryStatusEmpty) {
hgs
parents: 28
diff changeset
   218
                emit q->batteryEmpty();
hgs
parents: 28
diff changeset
   219
            }
hgs
parents: 28
diff changeset
   220
        }
hgs
parents: 28
diff changeset
   221
    } else if (uid == KPSUidUsbWatcher.iUid && key == KUsbWatcherSelectedPersonality) {
hgs
parents: 28
diff changeset
   222
        CX_DEBUG(("CxuiApplicationFrameworkMonitor - usb personality changed: %d -> %d", mUsbPersonality, value.toInt()));
hgs
parents: 28
diff changeset
   223
hgs
parents: 28
diff changeset
   224
        const int newUsbPersonality(value.toInt());
hgs
parents: 28
diff changeset
   225
        if (newUsbPersonality != mUsbPersonality) {
hgs
parents: 28
diff changeset
   226
            // Check before saving the new state if mass memory mode was active,
hgs
parents: 28
diff changeset
   227
            // so we know when to emit the unactivated signal.
hgs
parents: 28
diff changeset
   228
            const bool wasUsbMassMemoryModeActive(isUsbMassMemoryModeActive());
hgs
parents: 28
diff changeset
   229
            // Store new state.
hgs
parents: 28
diff changeset
   230
            mUsbPersonality = newUsbPersonality;
hgs
parents: 28
diff changeset
   231
hgs
parents: 28
diff changeset
   232
            // Save state to log.
hgs
parents: 28
diff changeset
   233
            if (mEventLog) {
hgs
parents: 28
diff changeset
   234
                mEventLog->append(EVENT_USB, QString::number(mUsbPersonality));
hgs
parents: 28
diff changeset
   235
            }
hgs
parents: 28
diff changeset
   236
hgs
parents: 28
diff changeset
   237
            // Check if mass memory mode activity changed.
hgs
parents: 28
diff changeset
   238
            if (wasUsbMassMemoryModeActive != isUsbMassMemoryModeActive()) {
52
hgs
parents: 40
diff changeset
   239
hgs
parents: 40
diff changeset
   240
                // If the massmemory mode switched from on to off,
hgs
parents: 40
diff changeset
   241
                // the signal is emitted immediately.
hgs
parents: 40
diff changeset
   242
                // If the switch is from off to on, we need to use a timer
hgs
parents: 40
diff changeset
   243
                // as a workaround because  plugging in the USB charger
hgs
parents: 40
diff changeset
   244
                // sends a mass memory mode change event.
hgs
parents: 40
diff changeset
   245
                if (wasUsbMassMemoryModeActive) {
hgs
parents: 40
diff changeset
   246
                    emit q->usbMassMemoryModeToggled(isUsbMassMemoryModeActive());
hgs
parents: 40
diff changeset
   247
                } else {
hgs
parents: 40
diff changeset
   248
                    // (Re)starting the timer
hgs
parents: 40
diff changeset
   249
                    mUsbModeCheckTimer.stop();
hgs
parents: 40
diff changeset
   250
                    mUsbModeCheckTimer.start();
hgs
parents: 40
diff changeset
   251
                }
hgs
parents: 40
diff changeset
   252
28
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   253
            }
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   254
        }
58
hgs
parents: 52
diff changeset
   255
    } else if (uid == TsProperty::KCategory.iUid && key == TsProperty::KVisibilityKey) {
hgs
parents: 52
diff changeset
   256
        CX_DEBUG(("CxuiApplicationFrameworkMonitor - Task Manager visibility: %d -> %d", mTaskManagerVisibility, value.toBool()));
hgs
parents: 52
diff changeset
   257
        const bool newTsVisibility(value.toBool());
hgs
parents: 52
diff changeset
   258
hgs
parents: 52
diff changeset
   259
        // If the task switcher state is changed, then emit signal to inform client(s).
hgs
parents: 52
diff changeset
   260
        if (mTaskManagerVisibility != newTsVisibility) {
hgs
parents: 52
diff changeset
   261
            mTaskManagerVisibility = newTsVisibility;
hgs
parents: 52
diff changeset
   262
            emit q->taskSwitcherStateChanged(mTaskManagerVisibility);
hgs
parents: 52
diff changeset
   263
        }
28
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   264
    }
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   265
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   266
    CX_DEBUG_EXIT_FUNCTION();
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   267
}
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   268
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   269
/*!
52
hgs
parents: 40
diff changeset
   270
*  Callback function for the timer used to seperate USB charging
hgs
parents: 40
diff changeset
   271
*  from USB mass memory mode
hgs
parents: 40
diff changeset
   272
*/
hgs
parents: 40
diff changeset
   273
void CxuiApplicationFrameworkMonitorPrivate::usbModeCheckTimerCallback()
hgs
parents: 40
diff changeset
   274
{
hgs
parents: 40
diff changeset
   275
    CX_DEBUG_ENTER_FUNCTION();
hgs
parents: 40
diff changeset
   276
hgs
parents: 40
diff changeset
   277
    // if the device is still in mass memory mode after the timer has finished,
hgs
parents: 40
diff changeset
   278
    // the device really is in massmemory mode and not plugged into the charger
hgs
parents: 40
diff changeset
   279
    if (isUsbMassMemoryModeActive()){
hgs
parents: 40
diff changeset
   280
        emit q->usbMassMemoryModeToggled(isUsbMassMemoryModeActive());
hgs
parents: 40
diff changeset
   281
    }
hgs
parents: 40
diff changeset
   282
hgs
parents: 40
diff changeset
   283
    CX_DEBUG_EXIT_FUNCTION();
hgs
parents: 40
diff changeset
   284
}
hgs
parents: 40
diff changeset
   285
hgs
parents: 40
diff changeset
   286
/*!
28
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   287
* Set initial values.
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   288
*/
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   289
void CxuiApplicationFrameworkMonitorPrivate::init()
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   290
{
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   291
    CX_DEBUG_ENTER_FUNCTION();
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   292
58
hgs
parents: 52
diff changeset
   293
    // To be able to release resources fast enough, we need foreground
hgs
parents: 52
diff changeset
   294
    // priority also when moving to background. Once we have moved to
hgs
parents: 52
diff changeset
   295
    // background fully, we re-adjust Window Server "compute mode"
hgs
parents: 52
diff changeset
   296
    // to the normal value.
hgs
parents: 52
diff changeset
   297
    mWsSession.ComputeMode(RWsSession::EPriorityControlDisabled);
hgs
parents: 52
diff changeset
   298
28
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   299
    // Connect to application (window server) events.
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   300
    connect(&mApplication, SIGNAL(symbianEvent(const QSymbianEvent *)), this, SLOT(handleEvent(const QSymbianEvent *)));
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   301
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   302
    QVariant value;
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   303
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   304
    // Get initial battery status.
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   305
    mSettings.get(KPSUidHWRMPowerState.iUid, KHWRMBatteryStatus, Cxe::PublishAndSubscribe, value);
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   306
    mBatteryStatus = value.toInt();
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   307
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   308
    // Get initial keylock status.
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   309
    mSettings.get(KPSUidAvkonDomain.iUid, KAknKeyguardStatus, Cxe::PublishAndSubscribe, value);
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   310
    mKeyLockState = value.toInt();
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   311
40
hgs
parents: 28
diff changeset
   312
    // Get current USB personality
hgs
parents: 28
diff changeset
   313
    mSettings.get(KPSUidUsbWatcher.iUid, KUsbWatcherSelectedPersonality, Cxe::PublishAndSubscribe, value);
hgs
parents: 28
diff changeset
   314
    mUsbPersonality = value.toInt();
hgs
parents: 28
diff changeset
   315
58
hgs
parents: 52
diff changeset
   316
    // Get current Task Switcher foreground status
hgs
parents: 52
diff changeset
   317
    mSettings.get(TsProperty::KCategory.iUid, TsProperty::KVisibilityKey, Cxe::PublishAndSubscribe, value);
hgs
parents: 52
diff changeset
   318
    mTaskManagerVisibility = value.toBool();
hgs
parents: 52
diff changeset
   319
28
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   320
    bool ok = connect(&mSettings, SIGNAL(settingValueChanged(long int, unsigned long int, QVariant)),
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   321
                      this, SLOT(handlePropertyEvent(long int, unsigned long int, QVariant)));
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   322
    CX_DEBUG_ASSERT(ok);
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   323
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   324
    // Get foreground state. Depends on keyguard status, so that needs to be read first.
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   325
    mState = getCurrentState();
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   326
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   327
    CX_DEBUG_EXIT_FUNCTION();
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   328
}
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   329
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   330
/*!
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   331
* Helper method to handle Symbian event that specificly is of type QSymbianEvent::WindowServerEvent.
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   332
* @param event Symbian event to be handled. (Ownership not taken.)
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   333
*/
40
hgs
parents: 28
diff changeset
   334
void CxuiApplicationFrameworkMonitorPrivate::handleWindowServerEvent(const QSymbianEvent *event)
28
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   335
    {
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   336
    // We receive tons of these events, so function start and end traces
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   337
    // are intentionally left out.
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   338
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   339
    const TWsEvent *wsEvent = event->windowServerEvent();
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   340
    if (wsEvent) {
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   341
        switch (wsEvent->Type()) {
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   342
        case EEventFocusGroupChanged: {
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   343
            CX_DEBUG(("CxuiApplicationFrameworkMonitor - EEventFocusGroupChanged event"));
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   344
            setState(getCurrentState());
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   345
            break;
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   346
        }
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   347
        case EEventFocusGained: {
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   348
            CX_DEBUG(("CxuiApplicationFrameworkMonitor - EEventFocusGained event"));
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   349
            setState(getCurrentState());
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   350
            break;
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   351
        }
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   352
        case EEventFocusLost: {
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   353
            CX_DEBUG(("CxuiApplicationFrameworkMonitor - EEventFocusLost event"));
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   354
            setState(getCurrentState());
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   355
            break;
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   356
        }
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   357
        default:
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   358
            break;
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   359
        }
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   360
    }
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   361
}
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   362
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   363
/*!
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   364
* Set state and emit signal if state really changes.
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   365
* @param state New state.
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   366
*/
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   367
void CxuiApplicationFrameworkMonitorPrivate::setState(CxuiApplicationFrameworkMonitor::ForegroundState state)
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   368
{
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   369
    if (mState != state) {
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   370
        const CxuiApplicationFrameworkMonitor::ForegroundState original(mState);
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   371
        // Check if state transition is acceptable in current state.
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   372
        switch (mState) {
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   373
        case CxuiApplicationFrameworkMonitor::ForegroundOwned:
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   374
        case CxuiApplicationFrameworkMonitor::ForegroundPartiallyLost:
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   375
            // All changes accepted.
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   376
            mState = state;
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   377
            break;
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   378
        case CxuiApplicationFrameworkMonitor::ForegroundFullyLost:
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   379
            // If foreground application is changed to note when we are already
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   380
            // fully in background, cannot accept state change to "partial foreground".
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   381
            if (state != CxuiApplicationFrameworkMonitor::ForegroundPartiallyLost) {
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   382
                mState = state;
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   383
            } else {
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   384
                CX_DEBUG(("CxuiApplicationFrameworkMonitor - state change full bg -> partial bg ignored"));
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   385
            }
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   386
        }
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   387
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   388
        if (mState != original) {
58
hgs
parents: 52
diff changeset
   389
            if (mState == CxuiApplicationFrameworkMonitor::ForegroundOwned) {
hgs
parents: 52
diff changeset
   390
                // Keep foreground priority until fully in background.
hgs
parents: 52
diff changeset
   391
                // See init() for more comments.
hgs
parents: 52
diff changeset
   392
                mWsSession.ComputeMode(RWsSession::EPriorityControlDisabled);
hgs
parents: 52
diff changeset
   393
            }
hgs
parents: 52
diff changeset
   394
hgs
parents: 52
diff changeset
   395
            // If state was changed, signal it to listeners.
hgs
parents: 52
diff changeset
   396
            emit q->foregroundStateChanged(mState);
hgs
parents: 52
diff changeset
   397
hgs
parents: 52
diff changeset
   398
            if (mState == CxuiApplicationFrameworkMonitor::ForegroundFullyLost) {
hgs
parents: 52
diff changeset
   399
                // Background has been entered.
hgs
parents: 52
diff changeset
   400
                // Return Window Server "compute mode" to the normal value.
hgs
parents: 52
diff changeset
   401
                mWsSession.ComputeMode(RWsSession::EPriorityControlComputeOff);
hgs
parents: 52
diff changeset
   402
            }
hgs
parents: 52
diff changeset
   403
hgs
parents: 52
diff changeset
   404
#ifdef CX_DEBUG
40
hgs
parents: 28
diff changeset
   405
            // Print the event log with this foreground event included.
hgs
parents: 28
diff changeset
   406
            if (mEventLog) {
hgs
parents: 28
diff changeset
   407
                mEventLog->append(
hgs
parents: 28
diff changeset
   408
                    EVENT_FOREGROUND,
hgs
parents: 28
diff changeset
   409
                    CxuiApplicationFrameworkMonitor::staticMetaObject.enumerator(
hgs
parents: 28
diff changeset
   410
                        CxuiApplicationFrameworkMonitor::staticMetaObject.indexOfEnumerator("ForegroundState")).valueToKey(mState));
hgs
parents: 28
diff changeset
   411
                mEventLog->print();
hgs
parents: 28
diff changeset
   412
            }
58
hgs
parents: 52
diff changeset
   413
#endif // CX_DEBUG
28
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   414
        }
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   415
    }
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   416
}
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   417
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   418
/*!
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   419
* Get the current foreground state.
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   420
* @return Current state for foreground ownership.
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   421
*/
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   422
CxuiApplicationFrameworkMonitor::ForegroundState CxuiApplicationFrameworkMonitorPrivate::getCurrentState()
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   423
{
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   424
    CX_DEBUG_ENTER_FUNCTION();
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   425
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   426
    CxuiApplicationFrameworkMonitor::ForegroundState state(CxuiApplicationFrameworkMonitor::ForegroundOwned);
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   427
    int focusWindowGroupId(mWsSession.GetFocusWindowGroup());
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   428
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   429
    if (mKeyLockState != EKeyguardNotActive) {
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   430
        // Keylock enabled is the same as if other application is in foreground.
40
hgs
parents: 28
diff changeset
   431
        CX_DEBUG(("CxuiApplicationFrameworkMonitor - key lock on"));
28
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   432
        state = CxuiApplicationFrameworkMonitor::ForegroundFullyLost;
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   433
    } else if (focusWindowGroupId == mWindowGroupId) {
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   434
        // If our window group has focus, we clearly are the foreground owning application.
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   435
        CX_DEBUG(("CxuiApplicationFrameworkMonitor - Foreground window group matches ours."));
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   436
        state = CxuiApplicationFrameworkMonitor::ForegroundOwned;
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   437
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   438
    } else {
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   439
        // Need to check if foreground is owned by known apps.
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   440
        unsigned int uid(focusedApplicationUid());
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   441
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   442
        // Check the app uid.
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   443
        switch (uid) {
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   444
        case UID_TASKSWITCHER:
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   445
        case UID_DIALOGAPPSERVER:
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   446
            // Note or task switcher in foreground.
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   447
            state = CxuiApplicationFrameworkMonitor::ForegroundPartiallyLost;
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   448
            break;
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   449
        case UID_PHONEUI:
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   450
        default:
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   451
            // Foreground owned by other app.
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   452
            state = CxuiApplicationFrameworkMonitor::ForegroundFullyLost;
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   453
            break;
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   454
        }
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   455
    }
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   456
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   457
    CX_DEBUG_EXIT_FUNCTION();
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   458
    return state;
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   459
}
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   460
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   461
/*!
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   462
* Get the uid of application in foreground.
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   463
* @return Application uid for the foreground application.
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   464
*/
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   465
unsigned int CxuiApplicationFrameworkMonitorPrivate::focusedApplicationUid()
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   466
{
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   467
    unsigned int uid(0);
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   468
    int focusWgId(mWsSession.GetFocusWindowGroup());
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   469
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   470
    TRAP_IGNORE({
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   471
        CApaWindowGroupName* wgn = CApaWindowGroupName::NewLC(mWsSession, focusWgId);
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   472
        uid = wgn->AppUid().iUid;
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   473
        CleanupStack::PopAndDestroy(wgn);
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   474
    });
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   475
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   476
    // If the window group identifier does not have the application uid set,
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   477
    // get it via thread secure id.
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   478
    if (uid == 0) {
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   479
        TApaTask task(mWsSession);
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   480
        task.SetWgId(focusWgId);
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   481
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   482
        RThread t;
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   483
        int err = t.Open(task.ThreadId());
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   484
        if (err == KErrNone) {
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   485
            uid = t.SecureId().iId;
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   486
            CX_DEBUG(("CxuiApplicationFrameworkMonitor - uid resolved from thread"));
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   487
        }
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   488
        t.Close();
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   489
    }
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   490
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   491
#ifdef CX_DEBUG
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   492
    QString name(windowGroupName(mWsSession, focusWgId));
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   493
    CX_DEBUG(("CxuiApplicationFrameworkMonitor - Own window group id:     0x%08x", mWindowGroupId));
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   494
    CX_DEBUG(("CxuiApplicationFrameworkMonitor - Focused window group id: 0x%08x", focusWgId));
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   495
    CX_DEBUG(("CxuiApplicationFrameworkMonitor - Own window group name:        [%s]", mWindowGroupName.toAscii().constData()));
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   496
    CX_DEBUG(("CxuiApplicationFrameworkMonitor - Focused window group name:    [%s]", name.toAscii().constData()));
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   497
    CX_DEBUG(("CxuiApplicationFrameworkMonitor - Focused application uid: 0x%08x", uid));
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   498
#endif
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   499
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   500
    return uid;
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   501
}
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   502
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   503
#endif // Q_OS_SYMBIAN
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   504
3075d9b614e6 201017_1
hgs
parents:
diff changeset
   505
// end of file