hsappkeyhandler/src/hsappkeyplugin.cpp
author hgs
Fri, 09 Jul 2010 14:19:08 +0300
changeset 102 8b8b34fa9751
parent 93 82b66994846c
child 107 b34d53f6acdf
permissions -rw-r--r--
201027
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
92
hgs
parents:
diff changeset
     1
/*
hgs
parents:
diff changeset
     2
* Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
hgs
parents:
diff changeset
     3
* All rights reserved.
hgs
parents:
diff changeset
     4
* This component and the accompanying materials are made available
hgs
parents:
diff changeset
     5
* under the terms of "Eclipse Public License v1.0"
hgs
parents:
diff changeset
     6
* which accompanies this distribution, and is available
hgs
parents:
diff changeset
     7
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
hgs
parents:
diff changeset
     8
*
hgs
parents:
diff changeset
     9
* Initial Contributors:
hgs
parents:
diff changeset
    10
* Nokia Corporation - initial contribution.
hgs
parents:
diff changeset
    11
*
hgs
parents:
diff changeset
    12
* Contributors:
hgs
parents:
diff changeset
    13
*
hgs
parents:
diff changeset
    14
* Description:  Main plugin class
hgs
parents:
diff changeset
    15
 *
hgs
parents:
diff changeset
    16
*/
hgs
parents:
diff changeset
    17
hgs
parents:
diff changeset
    18
hgs
parents:
diff changeset
    19
#include <w32std.h>
hgs
parents:
diff changeset
    20
#include <eikenv.h>
hgs
parents:
diff changeset
    21
#include <apgtask.h>
hgs
parents:
diff changeset
    22
#include <apgcli.h>
102
hgs
parents: 93
diff changeset
    23
#include <e32property.h>
92
hgs
parents:
diff changeset
    24
#include <hb/hbcore/hbdevicedialogsymbian.h>
hgs
parents:
diff changeset
    25
#include <hb/hbcore/hbsymbianvariant.h> 
102
hgs
parents: 93
diff changeset
    26
#include <tspropertydefs.h>
92
hgs
parents:
diff changeset
    27
#include "hsappkeyplugin.h"
hgs
parents:
diff changeset
    28
hgs
parents:
diff changeset
    29
const TUid KHSAppUid  = { 0x20022F35 };
hgs
parents:
diff changeset
    30
_LIT(KTsPluginName, "com.nokia.taskswitcher.tsdevicedialogplugin/1.0");
hgs
parents:
diff changeset
    31
hgs
parents:
diff changeset
    32
hgs
parents:
diff changeset
    33
// ======== MEMBER FUNCTIONS ========
hgs
parents:
diff changeset
    34
hgs
parents:
diff changeset
    35
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
    36
// 
hgs
parents:
diff changeset
    37
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
    38
//
hgs
parents:
diff changeset
    39
CHsAppKeyPlugin::CHsAppKeyPlugin()
hgs
parents:
diff changeset
    40
: iEikEnv( CEikonEnv::Static() )
hgs
parents:
diff changeset
    41
{
hgs
parents:
diff changeset
    42
}
hgs
parents:
diff changeset
    43
hgs
parents:
diff changeset
    44
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
    45
// Two-phased constructor.
hgs
parents:
diff changeset
    46
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
    47
//
hgs
parents:
diff changeset
    48
CHsAppKeyPlugin* CHsAppKeyPlugin::NewL()
hgs
parents:
diff changeset
    49
{
hgs
parents:
diff changeset
    50
    CHsAppKeyPlugin* self = new (ELeave) CHsAppKeyPlugin;
hgs
parents:
diff changeset
    51
    return self;
hgs
parents:
diff changeset
    52
}
hgs
parents:
diff changeset
    53
    
hgs
parents:
diff changeset
    54
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
    55
// C++ Destructor
hgs
parents:
diff changeset
    56
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
    57
//
hgs
parents:
diff changeset
    58
CHsAppKeyPlugin::~CHsAppKeyPlugin()
hgs
parents:
diff changeset
    59
{
hgs
parents:
diff changeset
    60
    delete mDialog;
hgs
parents:
diff changeset
    61
}
hgs
parents:
diff changeset
    62
hgs
parents:
diff changeset
    63
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
    64
// From MHbDeviceDialogObserver
hgs
parents:
diff changeset
    65
// 
hgs
parents:
diff changeset
    66
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
    67
//
hgs
parents:
diff changeset
    68
void CHsAppKeyPlugin::DataReceived(CHbSymbianVariantMap& /*aData*/)
hgs
parents:
diff changeset
    69
{
hgs
parents:
diff changeset
    70
    //no implementation required
hgs
parents:
diff changeset
    71
}
hgs
parents:
diff changeset
    72
hgs
parents:
diff changeset
    73
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
    74
// From MHbDeviceDialogObserver
hgs
parents:
diff changeset
    75
// 
hgs
parents:
diff changeset
    76
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
    77
//
hgs
parents:
diff changeset
    78
void CHsAppKeyPlugin::DeviceDialogClosed(TInt /*aCompletionCode*/)
hgs
parents:
diff changeset
    79
{
hgs
parents:
diff changeset
    80
    delete mDialog;
hgs
parents:
diff changeset
    81
    mDialog = 0;
hgs
parents:
diff changeset
    82
}
hgs
parents:
diff changeset
    83
hgs
parents:
diff changeset
    84
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
    85
// From CSysapKeyHandlerPlugin
hgs
parents:
diff changeset
    86
// 
hgs
parents:
diff changeset
    87
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
    88
//
hgs
parents:
diff changeset
    89
TKeyResponse CHsAppKeyPlugin::HandleKeyEventL( const TKeyEvent&  aKeyEvent , 
hgs
parents:
diff changeset
    90
                                              TEventCode  /*aType*/ 
hgs
parents:
diff changeset
    91
                                            )
hgs
parents:
diff changeset
    92
{
hgs
parents:
diff changeset
    93
    TKeyResponse retVal(EKeyWasNotConsumed);
hgs
parents:
diff changeset
    94
    if (aKeyEvent.iCode == EKeyApplication0) {
hgs
parents:
diff changeset
    95
        if (iSecondEvent) {
hgs
parents:
diff changeset
    96
            if (aKeyEvent.iRepeats > 0)
hgs
parents:
diff changeset
    97
                HandleLongPressL();
hgs
parents:
diff changeset
    98
            else 
hgs
parents:
diff changeset
    99
                HandleShortPressL();
hgs
parents:
diff changeset
   100
            retVal = EKeyWasConsumed;
hgs
parents:
diff changeset
   101
        }
hgs
parents:
diff changeset
   102
        iSecondEvent =!iSecondEvent; 
hgs
parents:
diff changeset
   103
    }
hgs
parents:
diff changeset
   104
    return retVal;
hgs
parents:
diff changeset
   105
}
hgs
parents:
diff changeset
   106
hgs
parents:
diff changeset
   107
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   108
// From CSysapKeyHandlerPlugin
hgs
parents:
diff changeset
   109
// 
hgs
parents:
diff changeset
   110
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   111
//
hgs
parents:
diff changeset
   112
void CHsAppKeyPlugin::ProvideKeyEventsL(RArray<TKeyEvent>& aKeyEventArray) 
hgs
parents:
diff changeset
   113
{
hgs
parents:
diff changeset
   114
    TKeyEvent key;
hgs
parents:
diff changeset
   115
    key.iCode = EKeyApplication0;
hgs
parents:
diff changeset
   116
    key.iScanCode = EStdKeyApplication0;
hgs
parents:
diff changeset
   117
    key.iModifiers = 0;
102
hgs
parents: 93
diff changeset
   118
    key.iRepeats = 0;
92
hgs
parents:
diff changeset
   119
    aKeyEventArray.Append(key);
102
hgs
parents: 93
diff changeset
   120
    
hgs
parents: 93
diff changeset
   121
    TKeyEvent longkey;
hgs
parents: 93
diff changeset
   122
    longkey.iCode = EKeyApplication0;
hgs
parents: 93
diff changeset
   123
    longkey.iScanCode = EStdKeyApplication0;
hgs
parents: 93
diff changeset
   124
    longkey.iModifiers = 0;
hgs
parents: 93
diff changeset
   125
    longkey.iRepeats = 1;
hgs
parents: 93
diff changeset
   126
    aKeyEventArray.Append(longkey);
hgs
parents: 93
diff changeset
   127
92
hgs
parents:
diff changeset
   128
}
hgs
parents:
diff changeset
   129
hgs
parents:
diff changeset
   130
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   131
// 
hgs
parents:
diff changeset
   132
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   133
//
hgs
parents:
diff changeset
   134
void CHsAppKeyPlugin::HandleShortPressL()
hgs
parents:
diff changeset
   135
{    
hgs
parents:
diff changeset
   136
    RWsSession& ws = iEikEnv->WsSession();
hgs
parents:
diff changeset
   137
    TApaTaskList appList(ws);
hgs
parents:
diff changeset
   138
    TApaTask task = appList.FindApp(KHSAppUid);
hgs
parents:
diff changeset
   139
hgs
parents:
diff changeset
   140
    if (task.Exists()) {
hgs
parents:
diff changeset
   141
        task.BringToForeground();
hgs
parents:
diff changeset
   142
    } else {        
hgs
parents:
diff changeset
   143
        RApaLsSession apaLsSession;
hgs
parents:
diff changeset
   144
        User::LeaveIfError(apaLsSession.Connect());
hgs
parents:
diff changeset
   145
        CleanupClosePushL(apaLsSession);
hgs
parents:
diff changeset
   146
        
hgs
parents:
diff changeset
   147
        TApaAppInfo appInfo;
hgs
parents:
diff changeset
   148
        apaLsSession.GetAppInfo(appInfo, KHSAppUid );
hgs
parents:
diff changeset
   149
        
hgs
parents:
diff changeset
   150
        CApaCommandLine *cmdLine = CApaCommandLine::NewLC();
hgs
parents:
diff changeset
   151
        cmdLine->SetExecutableNameL(appInfo.iFullName);
hgs
parents:
diff changeset
   152
        User::LeaveIfError( apaLsSession.StartApp(*cmdLine));
hgs
parents:
diff changeset
   153
    
hgs
parents:
diff changeset
   154
        CleanupStack::PopAndDestroy(cmdLine);
hgs
parents:
diff changeset
   155
        CleanupStack::PopAndDestroy(&apaLsSession);
hgs
parents:
diff changeset
   156
    }
hgs
parents:
diff changeset
   157
    delete mDialog;
hgs
parents:
diff changeset
   158
    mDialog =0;
hgs
parents:
diff changeset
   159
}
hgs
parents:
diff changeset
   160
hgs
parents:
diff changeset
   161
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   162
// 
hgs
parents:
diff changeset
   163
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   164
//
hgs
parents:
diff changeset
   165
void CHsAppKeyPlugin::HandleLongPressL()
hgs
parents:
diff changeset
   166
{
hgs
parents:
diff changeset
   167
    if( !mDialog ) {
102
hgs
parents: 93
diff changeset
   168
        TInt value( 0 );
hgs
parents: 93
diff changeset
   169
        RProperty::Get( TsProperty::KCategory, 
hgs
parents: 93
diff changeset
   170
                    TsProperty::KVisibilityKey,
hgs
parents: 93
diff changeset
   171
                    value );
hgs
parents: 93
diff changeset
   172
        if(!value){
hgs
parents: 93
diff changeset
   173
            mDialog = CHbDeviceDialogSymbian::NewL();
hgs
parents: 93
diff changeset
   174
    
hgs
parents: 93
diff changeset
   175
            CHbSymbianVariantMap* params = CHbSymbianVariantMap::NewL();
92
hgs
parents:
diff changeset
   176
        if(KErrNone != mDialog->Show(KTsPluginName,*params,this)) {
hgs
parents:
diff changeset
   177
            delete mDialog;
93
hgs
parents: 92
diff changeset
   178
            mDialog = 0;
102
hgs
parents: 93
diff changeset
   179
            }
hgs
parents: 93
diff changeset
   180
        delete params;
92
hgs
parents:
diff changeset
   181
        }
hgs
parents:
diff changeset
   182
    }
hgs
parents:
diff changeset
   183
}
hgs
parents:
diff changeset
   184
//  End of File
hgs
parents:
diff changeset
   185
hgs
parents:
diff changeset
   186