idlefw/plugins/shortcutplugin/src/caiscutengineext.cpp
branchRCL_3
changeset 9 d0529222e3f0
parent 4 1a2a00e78665
child 10 5ef93ea513cb
child 18 bd874ee5e5e2
equal deleted inserted replaced
4:1a2a00e78665 9:d0529222e3f0
     1 /*
       
     2 * Copyright (c) 2005-2006 Nokia Corporation and/or its subsidiary(-ies).
       
     3 * All rights reserved.
       
     4 * This component and the accompanying materials are made available
       
     5 * under the terms of "Eclipse Public License v1.0"
       
     6 * which accompanies this distribution, and is available
       
     7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     8 *
       
     9 * Initial Contributors:
       
    10 * Nokia Corporation - initial contribution.
       
    11 *
       
    12 * Contributors:
       
    13 *
       
    14 * Description:  Shortcut plug-in engine extension
       
    15 *
       
    16 */
       
    17 
       
    18 #include <gslauncher.h>
       
    19 #include <gulicon.h>
       
    20 #include <viewcli.h>
       
    21 #include <coemain.h>
       
    22 
       
    23 #include <aiscutextdefs.h>
       
    24 
       
    25 #include "caiscutengineext.h"
       
    26 #include "caiscutextserver.h"
       
    27 #include "taiscutparser.h"
       
    28 #include "caiscutshortcut.h"
       
    29 #include "caiscutplugin.h"
       
    30 #include "aiscutcontentmodel.h"
       
    31 #include "caiscutextdata.h"
       
    32 #include "caiscutextdatamodel.h"
       
    33 
       
    34 // ======== LOCAL DEFINITIONS ========
       
    35 
       
    36 namespace
       
    37     {
       
    38     //  LOCAL CONSTANTS
       
    39     /**
       
    40      * Target id hex format
       
    41      */
       
    42     _LIT( KTargetIdFormat, "0x%08x" );
       
    43 
       
    44     /**
       
    45      * Maximum length of target id
       
    46      */
       
    47     const TInt KTargetIdMaxLength = 11;
       
    48     }
       
    49 
       
    50 // ======== MEMBER FUNCTIONS ========
       
    51 
       
    52 // ---------------------------------------------------------------------------
       
    53 //
       
    54 // ---------------------------------------------------------------------------
       
    55 //
       
    56 CAiScutEngineExt* CAiScutEngineExt::NewL( CAiScutPlugin& aPlugin )
       
    57     {
       
    58     CAiScutEngineExt* self = new( ELeave ) CAiScutEngineExt( aPlugin );
       
    59     CleanupStack::PushL( self );
       
    60     self->ConstructL();
       
    61     CleanupStack::Pop( self );
       
    62     return self;
       
    63     }
       
    64 
       
    65 // ---------------------------------------------------------------------------
       
    66 //
       
    67 // ---------------------------------------------------------------------------
       
    68 //
       
    69 CAiScutEngineExt::~CAiScutEngineExt()
       
    70     {
       
    71     delete iAiScutExtServer;
       
    72     delete iExtDataModel;
       
    73     }
       
    74 
       
    75 // ---------------------------------------------------------------------------
       
    76 //
       
    77 // ---------------------------------------------------------------------------
       
    78 //
       
    79 CAiScutEngineExt::CAiScutEngineExt( CAiScutPlugin& aPlugin )
       
    80     : CAiScutEngine( aPlugin )
       
    81     {
       
    82     }
       
    83 
       
    84 // ---------------------------------------------------------------------------
       
    85 //
       
    86 // ---------------------------------------------------------------------------
       
    87 //
       
    88 void CAiScutEngineExt::ConstructL()
       
    89     {
       
    90     CAiScutEngine::ConstructL();
       
    91 
       
    92     iExtDataModel = CAiScutExtDataModel::NewL();
       
    93     iAiScutExtServer = new( ELeave ) CAiScutExtServer( *this, Env()->WsSession() );
       
    94     iAiScutExtServer->ConstructL();
       
    95     TRAPD( err, iAiScutExtServer->StartL( KAiScutExtServerName ) );
       
    96 
       
    97     if( err != KErrNone && err != KErrAlreadyExists )
       
    98         {
       
    99         User::Leave( err );
       
   100         }
       
   101     
       
   102     //Send EAiScutEventGainFocus to the leftmost shortcut in order to put
       
   103     //its state machine in correct state
       
   104     if( iShortcuts.Count() > 0 )
       
   105     {
       
   106         static_cast< CAiScutShortcutExt* >( iShortcuts[ 0 ] )->HandleAIEventL(
       
   107             EAiScutEventGainFocus );
       
   108         }
       
   109     }
       
   110 
       
   111 // ---------------------------------------------------------------------------
       
   112 //
       
   113 // ---------------------------------------------------------------------------
       
   114 //
       
   115 void CAiScutEngineExt::CheckAccessAndPublish( CAiScutShortcut& aShortcut )
       
   116     {
       
   117     TRAPD( err,
       
   118         RAiShortcutArray shortcutArray;
       
   119         CleanupClosePushL( shortcutArray );
       
   120         shortcutArray.AppendL( &aShortcut );
       
   121         aShortcut.SetToBePublished( ETrue );
       
   122         iPlugin.PublishShortcutsL( shortcutArray );
       
   123         CleanupStack::PopAndDestroy( &shortcutArray );
       
   124         );
       
   125 
       
   126     if( err != KErrNone )
       
   127         {
       
   128         //Delegate publishing to the original engine
       
   129         CAiScutEngine::CheckAccessAndPublish( EScutCheckAll, ETrue );
       
   130         }
       
   131     }
       
   132 
       
   133 // ---------------------------------------------------------------------------
       
   134 // Handles an event sent by the AI framework.
       
   135 // ---------------------------------------------------------------------------
       
   136 //
       
   137 void CAiScutEngineExt::HandleAiEventL( TInt aEvent, const TDesC& aParam )
       
   138     {
       
   139     CAiScutShortcutExt* shortcut = FindShortcutById( aParam );
       
   140     if( shortcut )
       
   141         {
       
   142         shortcut->HandleAIEventL( aEvent );
       
   143         }
       
   144     CAiScutEngine::HandleAiEventL( aEvent, aParam );
       
   145     }
       
   146 
       
   147 // ---------------------------------------------------------------------------
       
   148 //
       
   149 // ---------------------------------------------------------------------------
       
   150 //
       
   151 void CAiScutEngineExt::ResumeL( TBool aPublishAll, TAiTransitionReason aReason )
       
   152     {
       
   153     TArray<CAiScutExtData*> extDataArray = iExtDataModel->AiScutExtDataArray();
       
   154     const TInt count = extDataArray.Count();
       
   155     //Iterate extension data items and populate to matching shortcuts.
       
   156     //Remove the items that are not used in any shortcut.
       
   157     for( TInt i = 0; i < count; i++ )
       
   158         {
       
   159         CAiScutExtData* extData = extDataArray[ i ];
       
   160         const TDesC& targetDefinition = extData->TargetDefinition();
       
   161         if( !PopulateExtData( targetDefinition, extData ) )
       
   162             {
       
   163             iExtDataModel->RemoveAiScutExtData( targetDefinition );
       
   164             }
       
   165         }
       
   166 
       
   167     TAiTransitionReason resumeReason = iPlugin.ResumeReason();
       
   168     const TInt shortcutCount = iShortcuts.Count();
       
   169     for( TInt i = 0; i < shortcutCount; i++ )
       
   170         {
       
   171         CAiScutShortcutExt* shortcut = static_cast< CAiScutShortcutExt* >
       
   172             ( iShortcuts[ i ] );
       
   173         shortcut->HandleResumed( resumeReason );
       
   174         }
       
   175 
       
   176     iAiScutExtServer->ResumeL( aReason );
       
   177 
       
   178     CAiScutEngine::ResumeL( aPublishAll, aReason );
       
   179     }
       
   180 
       
   181 // ---------------------------------------------------------------------------
       
   182 //
       
   183 // ---------------------------------------------------------------------------
       
   184 //
       
   185 void CAiScutEngineExt::HandleSetPopupLineArrayL( const TDesC& aDefinition,
       
   186     CDesCArray* aLineArray )
       
   187     {
       
   188     CAiScutExtData* extData = iExtDataModel->SetPopupLineArrayL(
       
   189         aDefinition, aLineArray );
       
   190     TBool shortcutsFound = PopulateExtData(
       
   191         aDefinition, extData );
       
   192     if( !shortcutsFound )
       
   193         {
       
   194         iExtDataModel->RemoveAiScutExtData( aDefinition );
       
   195         }
       
   196     }
       
   197 
       
   198 // ---------------------------------------------------------------------------
       
   199 //
       
   200 // ---------------------------------------------------------------------------
       
   201 //
       
   202 void CAiScutEngineExt::HandleResetPopupLineArrayL( const TDesC& aDefinition )
       
   203     {
       
   204     CAiScutExtData* extData = iExtDataModel->ResetPopupLineArray( aDefinition );
       
   205     TBool shortcutsFound = PopulateExtData(
       
   206         aDefinition, extData );
       
   207     if( !shortcutsFound )
       
   208         {
       
   209         iExtDataModel->RemoveAiScutExtData( aDefinition );
       
   210         }
       
   211     }
       
   212 
       
   213 // ---------------------------------------------------------------------------
       
   214 //
       
   215 // ---------------------------------------------------------------------------
       
   216 //
       
   217 void CAiScutEngineExt::HandleSetIconL( const TDesC& aDefinition, CGulIcon* aIcon )
       
   218     {
       
   219     CAiScutExtData* extData = iExtDataModel->SetIconL( aDefinition, aIcon );
       
   220     TBool shortcutsFound = PopulateExtData(
       
   221         aDefinition, extData );
       
   222     if( !shortcutsFound )
       
   223         {
       
   224         iExtDataModel->RemoveAiScutExtData( aDefinition );
       
   225         }
       
   226     }
       
   227 
       
   228 // ---------------------------------------------------------------------------
       
   229 //
       
   230 // ---------------------------------------------------------------------------
       
   231 //
       
   232 void CAiScutEngineExt::HandleResetIconL( const TDesC& aDefinition )
       
   233     {
       
   234     CAiScutExtData* extData = iExtDataModel->ResetIcon( aDefinition );
       
   235     TBool shortcutsFound = PopulateExtData(
       
   236         aDefinition, extData );
       
   237     if( !shortcutsFound )
       
   238         {
       
   239         iExtDataModel->RemoveAiScutExtData( aDefinition );
       
   240         }
       
   241     }
       
   242 
       
   243 // ---------------------------------------------------------------------------
       
   244 //
       
   245 // ---------------------------------------------------------------------------
       
   246 //
       
   247 TBool CAiScutEngineExt::HandleIsInShortcutsL( const TDesC& aDefinition ) const
       
   248     {
       
   249     const TInt shortcutCount = iShortcuts.Count();
       
   250     for( TInt i = 0; i < shortcutCount; i++ )
       
   251         {
       
   252         CAiScutShortcutExt* shortcut = static_cast< CAiScutShortcutExt* >
       
   253             ( iShortcuts[ i ] );
       
   254         TPtrC activeTargetDefinition = shortcut->ActiveTargetDefinition();
       
   255         if( activeTargetDefinition.CompareF( aDefinition ) == 0 )
       
   256             {
       
   257             return ETrue;
       
   258             }
       
   259         }
       
   260 
       
   261     return EFalse;
       
   262     }
       
   263 
       
   264 // ---------------------------------------------------------------------------
       
   265 //
       
   266 // ---------------------------------------------------------------------------
       
   267 //
       
   268 void CAiScutEngineExt::HandleIssuePutInShortcutsL( const TDesC& /*aDefinition*/ )
       
   269     {
       
   270     CGSLauncher* l = CGSLauncher::NewLC();
       
   271     l->LaunchGSViewL ( TUid::Uid( AI_UID_ECOM_IMPLEMENTATION_SETTINGS_SCUTPLUGIN ),
       
   272                        KScutActiveIdleUid,
       
   273                        KNullDesC8 );    
       
   274     CleanupStack::PopAndDestroy( l );
       
   275     }
       
   276 
       
   277 // ---------------------------------------------------------------------------
       
   278 //
       
   279 // ---------------------------------------------------------------------------
       
   280 //
       
   281 TBool CAiScutEngineExt::PopulateExtData( const TDesC& aDefinition,
       
   282     const MAiScutExtData* aAiScutExtData )
       
   283     {
       
   284     //Iterate shortcuts and update matching ones with new extData
       
   285     TBool shortcutsFound = EFalse;
       
   286     const TInt shortcutCount = iShortcuts.Count();
       
   287     for( TInt i = 0; i < shortcutCount; i++ )
       
   288         {
       
   289         CAiScutShortcutExt* shortcut = static_cast< CAiScutShortcutExt* >
       
   290             ( iShortcuts[ i ] );
       
   291         TPtrC activeTargetDefinition = shortcut->ActiveTargetDefinition();
       
   292         if( activeTargetDefinition.CompareF( aDefinition ) == 0 )
       
   293             {
       
   294             shortcut->SetAiScutExtData( aAiScutExtData );
       
   295             shortcutsFound = ETrue;
       
   296             }
       
   297         }
       
   298 
       
   299     return shortcutsFound;
       
   300     }
       
   301 
       
   302 // ---------------------------------------------------------------------------
       
   303 //
       
   304 // ---------------------------------------------------------------------------
       
   305 //
       
   306 CAiScutShortcutExt* CAiScutEngineExt::FindShortcutById(
       
   307     const TDesC& aId ) const
       
   308     {
       
   309     const TInt shortcutCount = iShortcuts.Count();
       
   310     for( TInt i = 0; i < shortcutCount; i++ )
       
   311         {
       
   312         CAiScutShortcutExt* shortcut = static_cast< CAiScutShortcutExt* >
       
   313             ( iShortcuts[ i ] );
       
   314 
       
   315         TBuf< KTargetIdMaxLength > id;
       
   316         id.Format( KTargetIdFormat, shortcut->Id() );
       
   317 
       
   318         if( id.CompareF( aId ) == 0 )
       
   319             {
       
   320             return shortcut;
       
   321             }
       
   322         }
       
   323     return NULL;
       
   324     }
       
   325 
       
   326 // End of File.