hsappkeyhandler/src/hsappkeyplugin.cpp
changeset 116 305818acdca4
parent 112 dbfb5e38438b
child 127 7b66bc3c6dc9
equal deleted inserted replaced
112:dbfb5e38438b 116:305818acdca4
    10 * Nokia Corporation - initial contribution.
    10 * Nokia Corporation - initial contribution.
    11 *
    11 *
    12 * Contributors:
    12 * Contributors:
    13 *
    13 *
    14 * Description:  Main plugin class
    14 * Description:  Main plugin class
    15  *
    15 *
    16 */
    16 */
    17 
       
    18 
    17 
    19 #include <w32std.h>
    18 #include <w32std.h>
    20 #include <eikenv.h>
    19 #include <eikenv.h>
    21 #include <apgtask.h>
    20 #include <apgtask.h>
    22 #include <apgcli.h>
    21 #include <apgcli.h>
    23 #include <e32property.h>
    22 #include <e32property.h>
    24 #include <hb/hbcore/hbdevicedialogsymbian.h>
    23 #include <hb/hbcore/hbdevicedialogsymbian.h>
    25 #include <hb/hbcore/hbsymbianvariant.h> 
    24 #include <hb/hbcore/hbsymbianvariant.h>
    26 #include <tspropertydefs.h>
    25 #include <tspropertydefs.h>
    27 #include <afactivitylauncher.h>
    26 #include <afactivitylauncher.h>
    28 #include <homescreendomainpskeys.h>
    27 #include <homescreendomainpskeys.h>
    29 #include "hsappkeyplugin.h"
    28 #include "hsappkeyplugin.h"
    30 
    29 
    31 _LIT(KHsActivactionUri, "appto://20022F35?activityname=HsIdleView");
    30 _LIT( KHsActivactionUri, "appto://20022F35?activityname=HsIdleView" );
    32 _LIT(KAppLibActivactionUri, "appto://20022F35?activityname=AppLibMainView");
    31 _LIT( KAppLibActivactionUri, "appto://20022F35?activityname=AppLibMainView" );
    33 _LIT(KTsPluginName, "com.nokia.taskswitcher.tsdevicedialogplugin/1.0");
    32 _LIT( KTsPluginName, "com.nokia.taskswitcher.tsdevicedialogplugin/1.0" );
    34 
    33 
    35 
    34 
    36 // ======== MEMBER FUNCTIONS ========
    35 // ======== MEMBER FUNCTIONS ========
    37 
    36 
    38 // ---------------------------------------------------------------------------
    37 // ---------------------------------------------------------------------------
    39 // 
    38 //
    40 // ---------------------------------------------------------------------------
    39 // ---------------------------------------------------------------------------
    41 //
    40 //
    42 CHsAppKeyPlugin::CHsAppKeyPlugin()
    41 CHsAppKeyPlugin::CHsAppKeyPlugin()
    43 : iEikEnv( CEikonEnv::Static() )
    42     : iEikEnv( CEikonEnv::Static() ) // codescanner::eikonenvstatic
    44 {
    43     {
    45 }
    44     }
    46 
    45 
    47 // ---------------------------------------------------------------------------
    46 // ---------------------------------------------------------------------------
    48 // Two-phased constructor.
    47 // Two-phased constructor.
    49 // ---------------------------------------------------------------------------
    48 // ---------------------------------------------------------------------------
    50 //
    49 //
    51 CHsAppKeyPlugin* CHsAppKeyPlugin::NewL()
    50 CHsAppKeyPlugin* CHsAppKeyPlugin::NewL()
    52 {
    51     {
    53     CHsAppKeyPlugin* self = new (ELeave) CHsAppKeyPlugin;
    52     CHsAppKeyPlugin* self = new ( ELeave ) CHsAppKeyPlugin;
    54     return self;
    53     return self;
    55 }
    54     }
    56     
    55 
    57 // ---------------------------------------------------------------------------
    56 // ---------------------------------------------------------------------------
    58 // C++ Destructor
    57 // C++ Destructor
    59 // ---------------------------------------------------------------------------
    58 // ---------------------------------------------------------------------------
    60 //
    59 //
    61 CHsAppKeyPlugin::~CHsAppKeyPlugin()
    60 CHsAppKeyPlugin::~CHsAppKeyPlugin()
    62 {
    61     {
    63     delete mDialog;
    62     delete iDialog;
    64 }
    63     }
    65 
    64 
    66 // ---------------------------------------------------------------------------
    65 // ---------------------------------------------------------------------------
    67 // From MHbDeviceDialogObserver
    66 // From MHbDeviceDialogObserver
    68 // 
    67 //
    69 // ---------------------------------------------------------------------------
    68 // ---------------------------------------------------------------------------
    70 //
    69 //
    71 void CHsAppKeyPlugin::DataReceived(CHbSymbianVariantMap& /*aData*/)
    70 void CHsAppKeyPlugin::DataReceived( CHbSymbianVariantMap& /*aData*/ )
    72 {
    71     {
    73     //no implementation required
    72     //no implementation required
    74 }
    73     }
    75 
    74 
    76 // ---------------------------------------------------------------------------
    75 // ---------------------------------------------------------------------------
    77 // From MHbDeviceDialogObserver
    76 // From MHbDeviceDialogObserver
    78 // 
    77 //
    79 // ---------------------------------------------------------------------------
    78 // ---------------------------------------------------------------------------
    80 //
    79 //
    81 void CHsAppKeyPlugin::DeviceDialogClosed(TInt /*aCompletionCode*/)
    80 void CHsAppKeyPlugin::DeviceDialogClosed( TInt /*aCompletionCode*/ )
    82 {
    81     {
    83     delete mDialog;
    82     delete iDialog;
    84     mDialog = 0;
    83     iDialog = 0;
    85 }
    84     }
    86 
    85 
    87 // ---------------------------------------------------------------------------
    86 // ---------------------------------------------------------------------------
    88 // From CSysapKeyHandlerPlugin
    87 // From CSysapKeyHandlerPlugin
    89 // 
    88 //
    90 // ---------------------------------------------------------------------------
    89 // ---------------------------------------------------------------------------
    91 //
    90 //
    92 TKeyResponse CHsAppKeyPlugin::HandleKeyEventL(const TKeyEvent &aKeyEvent, 
    91 TKeyResponse CHsAppKeyPlugin::HandleKeyEventL( const TKeyEvent& aKeyEvent,  
    93                                               TEventCode /*aType*/)
    92                                                TEventCode /*aType*/ )
    94 {
    93     {
    95     TKeyResponse retVal(EKeyWasNotConsumed);
    94     TKeyResponse retVal( EKeyWasNotConsumed );
    96     if (aKeyEvent.iCode == EKeyApplication0) {
    95     if ( aKeyEvent.iCode == EKeyApplication0 )
    97         if (iSecondEvent) {
    96         {
    98             if (aKeyEvent.iRepeats > 0)
    97         if ( aKeyEvent.iRepeats > 0 )
    99                 HandleLongPressL();
    98             {
   100             else 
    99             HandleLongPressL();
   101                 HandleShortPressL();
   100             }
   102             retVal = EKeyWasConsumed;
   101         else
   103         }
   102             {
   104         iSecondEvent = !iSecondEvent; 
   103             HandleShortPressL();
   105     }
   104             }
       
   105         retVal = EKeyWasConsumed;
       
   106         }
   106     return retVal;
   107     return retVal;
   107 }
   108     }
   108 
   109 
   109 // ---------------------------------------------------------------------------
   110 // ---------------------------------------------------------------------------
   110 // From CSysapKeyHandlerPlugin
   111 // From CSysapKeyHandlerPlugin
   111 // 
   112 //
   112 // ---------------------------------------------------------------------------
   113 // ---------------------------------------------------------------------------
   113 //
   114 //
   114 void CHsAppKeyPlugin::ProvideKeyEventsL(RArray<TKeyEvent>& aKeyEventArray) 
   115 void CHsAppKeyPlugin::ProvideKeyEventsL( RArray<TKeyEvent>& aKeyEventArray ) // codescanner::LFunctionCantLeave
   115 {
   116     {
   116     TKeyEvent key;
   117     TKeyEvent key;
   117     key.iCode = EKeyApplication0;
   118     key.iCode = EKeyApplication0;
   118     key.iScanCode = EStdKeyApplication0;
   119     key.iScanCode = EStdKeyApplication0;
   119     key.iModifiers = 0;
   120     key.iModifiers = 0;
   120     key.iRepeats = 0;
   121     key.iRepeats = 0;
   121     aKeyEventArray.Append(key);
   122     aKeyEventArray.Append( key );
   122     
   123 
   123     TKeyEvent longkey;
   124     TKeyEvent longkey;
   124     longkey.iCode = EKeyApplication0;
   125     longkey.iCode = EKeyApplication0;
   125     longkey.iScanCode = EStdKeyApplication0;
   126     longkey.iScanCode = EStdKeyApplication0;
   126     longkey.iModifiers = 0;
   127     longkey.iModifiers = 0;
   127     longkey.iRepeats = 1;
   128     longkey.iRepeats = 1;
   128     aKeyEventArray.Append(longkey);
   129     aKeyEventArray.Append( longkey );
   129 
   130     }
   130 }
   131 
   131 
   132 // ---------------------------------------------------------------------------
   132 // ---------------------------------------------------------------------------
   133 //
   133 // 
       
   134 // ---------------------------------------------------------------------------
   134 // ---------------------------------------------------------------------------
   135 //
   135 //
   136 void CHsAppKeyPlugin::HandleShortPressL()
   136 void CHsAppKeyPlugin::HandleShortPressL()
   137 {   
   137     {
   138     TInt value(0);
   138     TInt value( 0 );
   139     RProperty::Get(TsProperty::KCategory, TsProperty::KVisibilityKey, value);
   139     RProperty::Get( TsProperty::KCategory, TsProperty::KVisibilityKey, value );
   140     if (value) {
   140     if ( value )
       
   141         {
   141         // when Task Switcher dialog is visible, Appkey is used to dismiss it
   142         // when Task Switcher dialog is visible, Appkey is used to dismiss it
   142     
   143         DismissTaskSwitcher();
   143         // @todo: remove notification through property when SharedDialog flag
   144         }
   144         // is implemented in Orbit.
   145     else
   145         if (!mDialog) {
   146         {
   146             // dismiss dialog launched from HomeScreen
       
   147             User::LeaveIfError(RProperty::Set(TsProperty::KCategory, TsProperty::KDismissRequestKey, 1));
       
   148         } else {
       
   149             // dismiss dialog launched by this plugin
       
   150             delete mDialog;
       
   151             mDialog = 0;
       
   152         }
       
   153     } else {
       
   154         // when there is no Task Switcher dialog, Appkey is used to switch between Applib and HomeScreen
   147         // when there is no Task Switcher dialog, Appkey is used to switch between Applib and HomeScreen
   155         RApaLsSession apaLsSession;
   148         RApaLsSession apaLsSession;
   156         CleanupClosePushL(apaLsSession);
   149         CleanupClosePushL( apaLsSession );
   157         User::LeaveIfError(apaLsSession.Connect());
   150         User::LeaveIfError( apaLsSession.Connect() );
   158         CAfActivityLauncher *activityEnabler = 
   151         CAfActivityLauncher* activityEnabler =
   159             CAfActivityLauncher::NewLC(apaLsSession, 
   152             CAfActivityLauncher::NewLC( apaLsSession,
   160                                        iEikEnv->WsSession());
   153                                         iEikEnv->WsSession() );
   161         TInt state(0);
   154         TInt state( 0 );
   162         RProperty::Get(KHsCategoryUid, KHsCategoryStateKey, state);
   155         RProperty::Get( KHsCategoryUid, KHsCategoryStateKey, state );
   163         if (state == EHomeScreenIdleState) {
   156         if ( state == EHomeScreenWidgetViewForeground )
   164             activityEnabler->launchActivityL(KAppLibActivactionUri);
   157             {
   165         } else {
   158             activityEnabler->launchActivityL( KAppLibActivactionUri );
   166             activityEnabler->launchActivityL(KHsActivactionUri);
   159             }
   167         }    
   160         else
   168         CleanupStack::PopAndDestroy(activityEnabler);
   161             {
   169         CleanupStack::PopAndDestroy(&apaLsSession);
   162             activityEnabler->launchActivityL( KHsActivactionUri );
   170     }
   163             }
   171 }
   164         CleanupStack::PopAndDestroy( activityEnabler );
   172 
   165         CleanupStack::PopAndDestroy( &apaLsSession );
   173 // ---------------------------------------------------------------------------
   166         }
   174 // 
   167     }
       
   168 
       
   169 // ---------------------------------------------------------------------------
       
   170 //
   175 // ---------------------------------------------------------------------------
   171 // ---------------------------------------------------------------------------
   176 //
   172 //
   177 void CHsAppKeyPlugin::HandleLongPressL()
   173 void CHsAppKeyPlugin::HandleLongPressL()
   178 {
   174     {
   179     if( !mDialog ) {
   175     TInt tsVisible( 0 );
   180         TInt value( 0 );
   176     RProperty::Get( TsProperty::KCategory,
   181         RProperty::Get( TsProperty::KCategory, 
       
   182                     TsProperty::KVisibilityKey,
   177                     TsProperty::KVisibilityKey,
   183                     value );
   178                     tsVisible );
   184         if(!value) {
   179     if ( tsVisible ) 
   185             mDialog = CHbDeviceDialogSymbian::NewL();    
   180         {
       
   181         DismissTaskSwitcher();
       
   182         } 
       
   183     else 
       
   184         {
       
   185         if ( !iDialog )
       
   186             {
       
   187             iDialog = CHbDeviceDialogSymbian::NewL();
   186             CHbSymbianVariantMap* params = CHbSymbianVariantMap::NewL();
   188             CHbSymbianVariantMap* params = CHbSymbianVariantMap::NewL();
   187             if(KErrNone != mDialog->Show(KTsPluginName,*params,this)) {
   189             if ( KErrNone != iDialog->Show( KTsPluginName, *params, this ) )
   188                 delete mDialog;
   190                 {
   189                 mDialog = 0;
   191                 delete iDialog;
   190             }
   192                 iDialog = 0;
       
   193                 }
   191             delete params;
   194             delete params;
   192         }
   195             }
   193     }
   196         }
   194 }
   197     }
   195 //  End of File
   198 
   196 
   199 // ---------------------------------------------------------------------------
   197 
   200 //
       
   201 // ---------------------------------------------------------------------------
       
   202 //
       
   203 void CHsAppKeyPlugin::DismissTaskSwitcher()
       
   204     {
       
   205     // @todo: remove notification through property when SharedDialog flag
       
   206     // is implemented in Orbit.
       
   207     if ( !iDialog )
       
   208         {
       
   209         // dismiss dialog launched from HomeScreen
       
   210         User::LeaveIfError( RProperty::Set( TsProperty::KCategory, TsProperty::KDismissRequestKey, 1 ) );
       
   211         }
       
   212     else
       
   213         {
       
   214         // dismiss dialog launched by this plugin
       
   215         delete iDialog;
       
   216         iDialog = 0;
       
   217         }
       
   218     }