hsappkeyhandler/src/hsappkeyplugin.cpp
author hgs
Wed, 18 Aug 2010 10:39:24 +0300
changeset 112 dbfb5e38438b
parent 107 b34d53f6acdf
child 116 305818acdca4
permissions -rw-r--r--
201033
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>
107
hgs
parents: 102
diff changeset
    27
#include <afactivitylauncher.h>
hgs
parents: 102
diff changeset
    28
#include <homescreendomainpskeys.h>
92
hgs
parents:
diff changeset
    29
#include "hsappkeyplugin.h"
hgs
parents:
diff changeset
    30
107
hgs
parents: 102
diff changeset
    31
_LIT(KHsActivactionUri, "appto://20022F35?activityname=HsIdleView");
hgs
parents: 102
diff changeset
    32
_LIT(KAppLibActivactionUri, "appto://20022F35?activityname=AppLibMainView");
92
hgs
parents:
diff changeset
    33
_LIT(KTsPluginName, "com.nokia.taskswitcher.tsdevicedialogplugin/1.0");
hgs
parents:
diff changeset
    34
hgs
parents:
diff changeset
    35
hgs
parents:
diff changeset
    36
// ======== MEMBER FUNCTIONS ========
hgs
parents:
diff changeset
    37
hgs
parents:
diff changeset
    38
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
    39
// 
hgs
parents:
diff changeset
    40
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
    41
//
hgs
parents:
diff changeset
    42
CHsAppKeyPlugin::CHsAppKeyPlugin()
hgs
parents:
diff changeset
    43
: iEikEnv( CEikonEnv::Static() )
hgs
parents:
diff changeset
    44
{
hgs
parents:
diff changeset
    45
}
hgs
parents:
diff changeset
    46
hgs
parents:
diff changeset
    47
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
    48
// Two-phased constructor.
hgs
parents:
diff changeset
    49
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
    50
//
hgs
parents:
diff changeset
    51
CHsAppKeyPlugin* CHsAppKeyPlugin::NewL()
hgs
parents:
diff changeset
    52
{
hgs
parents:
diff changeset
    53
    CHsAppKeyPlugin* self = new (ELeave) CHsAppKeyPlugin;
hgs
parents:
diff changeset
    54
    return self;
hgs
parents:
diff changeset
    55
}
hgs
parents:
diff changeset
    56
    
hgs
parents:
diff changeset
    57
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
    58
// C++ Destructor
hgs
parents:
diff changeset
    59
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
    60
//
hgs
parents:
diff changeset
    61
CHsAppKeyPlugin::~CHsAppKeyPlugin()
hgs
parents:
diff changeset
    62
{
hgs
parents:
diff changeset
    63
    delete mDialog;
hgs
parents:
diff changeset
    64
}
hgs
parents:
diff changeset
    65
hgs
parents:
diff changeset
    66
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
    67
// From MHbDeviceDialogObserver
hgs
parents:
diff changeset
    68
// 
hgs
parents:
diff changeset
    69
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
    70
//
hgs
parents:
diff changeset
    71
void CHsAppKeyPlugin::DataReceived(CHbSymbianVariantMap& /*aData*/)
hgs
parents:
diff changeset
    72
{
hgs
parents:
diff changeset
    73
    //no implementation required
hgs
parents:
diff changeset
    74
}
hgs
parents:
diff changeset
    75
hgs
parents:
diff changeset
    76
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
    77
// From MHbDeviceDialogObserver
hgs
parents:
diff changeset
    78
// 
hgs
parents:
diff changeset
    79
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
    80
//
hgs
parents:
diff changeset
    81
void CHsAppKeyPlugin::DeviceDialogClosed(TInt /*aCompletionCode*/)
hgs
parents:
diff changeset
    82
{
hgs
parents:
diff changeset
    83
    delete mDialog;
hgs
parents:
diff changeset
    84
    mDialog = 0;
hgs
parents:
diff changeset
    85
}
hgs
parents:
diff changeset
    86
hgs
parents:
diff changeset
    87
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
    88
// From CSysapKeyHandlerPlugin
hgs
parents:
diff changeset
    89
// 
hgs
parents:
diff changeset
    90
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
    91
//
112
hgs
parents: 107
diff changeset
    92
TKeyResponse CHsAppKeyPlugin::HandleKeyEventL(const TKeyEvent &aKeyEvent, 
hgs
parents: 107
diff changeset
    93
                                              TEventCode /*aType*/)
92
hgs
parents:
diff changeset
    94
{
hgs
parents:
diff changeset
    95
    TKeyResponse retVal(EKeyWasNotConsumed);
hgs
parents:
diff changeset
    96
    if (aKeyEvent.iCode == EKeyApplication0) {
hgs
parents:
diff changeset
    97
        if (iSecondEvent) {
hgs
parents:
diff changeset
    98
            if (aKeyEvent.iRepeats > 0)
hgs
parents:
diff changeset
    99
                HandleLongPressL();
hgs
parents:
diff changeset
   100
            else 
hgs
parents:
diff changeset
   101
                HandleShortPressL();
hgs
parents:
diff changeset
   102
            retVal = EKeyWasConsumed;
hgs
parents:
diff changeset
   103
        }
112
hgs
parents: 107
diff changeset
   104
        iSecondEvent = !iSecondEvent; 
92
hgs
parents:
diff changeset
   105
    }
hgs
parents:
diff changeset
   106
    return retVal;
hgs
parents:
diff changeset
   107
}
hgs
parents:
diff changeset
   108
hgs
parents:
diff changeset
   109
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   110
// From CSysapKeyHandlerPlugin
hgs
parents:
diff changeset
   111
// 
hgs
parents:
diff changeset
   112
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   113
//
hgs
parents:
diff changeset
   114
void CHsAppKeyPlugin::ProvideKeyEventsL(RArray<TKeyEvent>& aKeyEventArray) 
hgs
parents:
diff changeset
   115
{
hgs
parents:
diff changeset
   116
    TKeyEvent key;
hgs
parents:
diff changeset
   117
    key.iCode = EKeyApplication0;
hgs
parents:
diff changeset
   118
    key.iScanCode = EStdKeyApplication0;
hgs
parents:
diff changeset
   119
    key.iModifiers = 0;
102
hgs
parents: 93
diff changeset
   120
    key.iRepeats = 0;
92
hgs
parents:
diff changeset
   121
    aKeyEventArray.Append(key);
102
hgs
parents: 93
diff changeset
   122
    
hgs
parents: 93
diff changeset
   123
    TKeyEvent longkey;
hgs
parents: 93
diff changeset
   124
    longkey.iCode = EKeyApplication0;
hgs
parents: 93
diff changeset
   125
    longkey.iScanCode = EStdKeyApplication0;
hgs
parents: 93
diff changeset
   126
    longkey.iModifiers = 0;
hgs
parents: 93
diff changeset
   127
    longkey.iRepeats = 1;
hgs
parents: 93
diff changeset
   128
    aKeyEventArray.Append(longkey);
hgs
parents: 93
diff changeset
   129
92
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
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   135
//
hgs
parents:
diff changeset
   136
void CHsAppKeyPlugin::HandleShortPressL()
107
hgs
parents: 102
diff changeset
   137
{   
112
hgs
parents: 107
diff changeset
   138
    TInt value(0);
hgs
parents: 107
diff changeset
   139
    RProperty::Get(TsProperty::KCategory, TsProperty::KVisibilityKey, value);
hgs
parents: 107
diff changeset
   140
    if (value) {
hgs
parents: 107
diff changeset
   141
        // when Task Switcher dialog is visible, Appkey is used to dismiss it
hgs
parents: 107
diff changeset
   142
    
hgs
parents: 107
diff changeset
   143
        // @todo: remove notification through property when SharedDialog flag
hgs
parents: 107
diff changeset
   144
        // is implemented in Orbit.
hgs
parents: 107
diff changeset
   145
        if (!mDialog) {
hgs
parents: 107
diff changeset
   146
            // dismiss dialog launched from HomeScreen
hgs
parents: 107
diff changeset
   147
            User::LeaveIfError(RProperty::Set(TsProperty::KCategory, TsProperty::KDismissRequestKey, 1));
hgs
parents: 107
diff changeset
   148
        } else {
hgs
parents: 107
diff changeset
   149
            // dismiss dialog launched by this plugin
hgs
parents: 107
diff changeset
   150
            delete mDialog;
hgs
parents: 107
diff changeset
   151
            mDialog = 0;
hgs
parents: 107
diff changeset
   152
        }
107
hgs
parents: 102
diff changeset
   153
    } else {
112
hgs
parents: 107
diff changeset
   154
        // when there is no Task Switcher dialog, Appkey is used to switch between Applib and HomeScreen
hgs
parents: 107
diff changeset
   155
        RApaLsSession apaLsSession;
hgs
parents: 107
diff changeset
   156
        CleanupClosePushL(apaLsSession);
hgs
parents: 107
diff changeset
   157
        User::LeaveIfError(apaLsSession.Connect());
hgs
parents: 107
diff changeset
   158
        CAfActivityLauncher *activityEnabler = 
hgs
parents: 107
diff changeset
   159
            CAfActivityLauncher::NewLC(apaLsSession, 
hgs
parents: 107
diff changeset
   160
                                       iEikEnv->WsSession());
hgs
parents: 107
diff changeset
   161
        TInt state(0);
hgs
parents: 107
diff changeset
   162
        RProperty::Get(KHsCategoryUid, KHsCategoryStateKey, state);
hgs
parents: 107
diff changeset
   163
        if (state == EHomeScreenIdleState) {
hgs
parents: 107
diff changeset
   164
            activityEnabler->launchActivityL(KAppLibActivactionUri);
hgs
parents: 107
diff changeset
   165
        } else {
hgs
parents: 107
diff changeset
   166
            activityEnabler->launchActivityL(KHsActivactionUri);
hgs
parents: 107
diff changeset
   167
        }    
hgs
parents: 107
diff changeset
   168
        CleanupStack::PopAndDestroy(activityEnabler);
hgs
parents: 107
diff changeset
   169
        CleanupStack::PopAndDestroy(&apaLsSession);
hgs
parents: 107
diff changeset
   170
    }
92
hgs
parents:
diff changeset
   171
}
hgs
parents:
diff changeset
   172
hgs
parents:
diff changeset
   173
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   174
// 
hgs
parents:
diff changeset
   175
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   176
//
hgs
parents:
diff changeset
   177
void CHsAppKeyPlugin::HandleLongPressL()
hgs
parents:
diff changeset
   178
{
hgs
parents:
diff changeset
   179
    if( !mDialog ) {
102
hgs
parents: 93
diff changeset
   180
        TInt value( 0 );
hgs
parents: 93
diff changeset
   181
        RProperty::Get( TsProperty::KCategory, 
hgs
parents: 93
diff changeset
   182
                    TsProperty::KVisibilityKey,
hgs
parents: 93
diff changeset
   183
                    value );
112
hgs
parents: 107
diff changeset
   184
        if(!value) {
hgs
parents: 107
diff changeset
   185
            mDialog = CHbDeviceDialogSymbian::NewL();    
102
hgs
parents: 93
diff changeset
   186
            CHbSymbianVariantMap* params = CHbSymbianVariantMap::NewL();
112
hgs
parents: 107
diff changeset
   187
            if(KErrNone != mDialog->Show(KTsPluginName,*params,this)) {
hgs
parents: 107
diff changeset
   188
                delete mDialog;
hgs
parents: 107
diff changeset
   189
                mDialog = 0;
102
hgs
parents: 93
diff changeset
   190
            }
112
hgs
parents: 107
diff changeset
   191
            delete params;
92
hgs
parents:
diff changeset
   192
        }
hgs
parents:
diff changeset
   193
    }
hgs
parents:
diff changeset
   194
}
hgs
parents:
diff changeset
   195
//  End of File
hgs
parents:
diff changeset
   196
hgs
parents:
diff changeset
   197