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