idlefw/plugins/shortcutplugin/src/caiscuttargetapp.cpp
branchRCL_3
changeset 9 d0529222e3f0
parent 4 1a2a00e78665
child 10 5ef93ea513cb
child 18 bd874ee5e5e2
--- a/idlefw/plugins/shortcutplugin/src/caiscuttargetapp.cpp	Tue Feb 02 00:23:10 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,633 +0,0 @@
-/*
-* Copyright (c) 2005-2006 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:  Class for application shortcut target
-*
-*/
-
-
-#include <coemain.h>            // For CCoeEnv
-#include <w32std.h>             // For RWsSession
-#include <akntranseffect.h>
-#include <akntransitionutils.h>
-#include <apacmdln.h>           // For CApaCommandLine
-#include <apgtask.h>            // For TApaTaskList
-#include <apgwgnam.h>           // For CApaWindowGroupName
-#include <gulicon.h>            // For CGulIcon
-#include <AknsUtils.h>          // For AknsUtils
-#include <AknTaskList.h>        // For CAknTaskList
-#include <gfxtranseffect/gfxtranseffect.h>		// For Transition effect
-#include <gslauncher.h>
-#include <viewcli.h>            // For CVwsSessionWrapper
-#include <escapeutils.h>
-#ifdef SYMBIAN_ENABLE_SPLIT_HEADERS
-#include <viewclipartner.h>
-#endif
-
-#include <featmgr.h>
-#include <centralrepository.h>
-#include <e32property.h>
-#include <settingsinternalcrkeys.h>
-#include <UikonInternalPSKeys.h>
-
-#include <aiscuttexts.rsg>
-//#include <pslnactiveidleplugin.mbg>
-#include <data_caging_path_literals.hrh>
-
-#include <activeidle2domainpskeys.h>
-
-#include "aiscutcontentmodel.h"
-#include "caiscuttargetapp.h"
-#include "caiscutengine.h"
-
-#include <aiscutplugin.mbg>
-#include "debug.h"
-
-#include <AknSgcc.h>
-
-const TInt KIconSizeArray = 4;
-
-// ======== MEMBER FUNCTIONS =================================================
-
-// ---------------------------------------------------------------------------
-//
-// ---------------------------------------------------------------------------
-//
-CAiScutTargetApp::CAiScutTargetApp(
-    CAiScutEngine& aEngine, TShortcutType aType, const TUid aUid)
-    : CAiScutTarget(aEngine, aType)
-    , iAppUid(aUid)
-    {
-    }
-
-
-// ---------------------------------------------------------------------------
-//
-// ---------------------------------------------------------------------------
-//
-void CAiScutTargetApp::ConstructL(const TAiScutParser& aParser)
-    {
-    iDefinition = aParser.Get(EScutDefComplete).AllocL();
-
-    iViewUid.iUid = -1;
-
-    switch (Type())
-        {
-    case EScutApplicationView:
-    case EScutChangeTheme:
-        if (iAppUid == KScutAppShellUid)
-            {
-            iViewUid.iUid = 1; // activate always appshell main view.
-            }
-        else
-            {
-            iViewUid = TAiScutParser::ParseUid(aParser.Get(EScutDefParamValue));
-            }
-        break;
-
-    case EScutLogsMissedCallsView:
-        iMsg = TPtrC8(KLogsMissedCallsView).AllocL();
-        break;
-
-    case EScutLogsDialledCallsView:
-        iMsg = TPtrC8(KLogsDialledCallsView).AllocL();
-        break;
-
-    case EScutLogsReceivedCallsView:
-        iMsg = TPtrC8(KLogsReceivedCallsView).AllocL();
-        break;
-
-    case EScutLogsMainView:
-        iMsg = TPtrC8(KLogsMainView).AllocL();
-        break;
-
-    case EScutApplicationWithParams:
-        {
-        TPtrC ptr = aParser.Get(EScutDefParamNameAndValue);
-        iMsg = EscapeUtils::ConvertFromUnicodeToUtf8L(ptr);
-        break;
-        }
-
-    default:
-        break;
-        }
-
-    }
-
-
-// ---------------------------------------------------------------------------
-//
-// ---------------------------------------------------------------------------
-//
-CAiScutTargetApp* CAiScutTargetApp::NewL(
-    CAiScutEngine& aEngine, TShortcutType aType, const TAiScutParser& aParser)
-    {
-    CAiScutTargetApp* self =
-        new (ELeave) CAiScutTargetApp(aEngine, aType, aParser.Uid());
-
-    CleanupStack::PushL(self);
-    self->ConstructL(aParser);
-
-    CleanupStack::Pop(self);
-
-    return self;
-    }
-
-
-// ---------------------------------------------------------------------------
-//
-// ---------------------------------------------------------------------------
-//
-CAiScutTargetApp::~CAiScutTargetApp()
-    {
-    delete iCaption;
-    delete iShortCaption;
-	delete iMsg;
-    delete iDefinition;
-    }
-
-
-// ---------------------------------------------------------------------------
-// Returns the shortcut definition string.
-// ---------------------------------------------------------------------------
-//
-TPtrC CAiScutTargetApp::Definition() const
-    {
-    return iDefinition ? TPtrC(*iDefinition) : TPtrC();
-    }
-
-
-// ---------------------------------------------------------------------------
-// Returns the shortcut target caption.
-// ---------------------------------------------------------------------------
-//
-TInt CAiScutTargetApp::GetCaption(TPtrC& aDes, TAiScutAppTitleType aTitleType) const
-    {
-    TRAP_IGNORE(GetCaptionL(aTitleType));
-
-    if (aTitleType == EAiScutSkeyTitle)
-        {
-        aDes.Set(iShortCaption ? *iShortCaption : KNullDesC());
-        }
-    else
-        {
-        aDes.Set(iCaption ? *iCaption : KNullDesC());
-        }
-
-    return 0;
-    }
-
-// ---------------------------------------------------------------------------
-// Returns the shortcut target caption.
-// ---------------------------------------------------------------------------
-//
-void CAiScutTargetApp::GetCaptionL(TAiScutAppTitleType aTitleType) const
-    {
-    TApaAppInfo appInfo;
-
-    // Use lazy evaluation, create the caption only when it is first needed.
-    if (aTitleType == EAiScutSkeyTitle)
-        {
-        if( !iShortCaption )
-            {
-            iEngine.ApaSession().GetAppInfo(appInfo, iAppUid);
-            iShortCaption = appInfo.iShortCaption.AllocL();            
-            }
-        }
-    else
-        {
-        if (!iCaption)
-            {
-            iEngine.ApaSession().GetAppInfo(appInfo, iAppUid);
-            iCaption = appInfo.iCaption.AllocL();
-            }
-        }
-    }
-
-// ---------------------------------------------------------------------------
-// Returns the shortcut target icon.
-// ---------------------------------------------------------------------------
-//
-TInt CAiScutTargetApp::GetIcon(CGulIcon*& aIcon) const
-    {
-    // First try to make the override icon
-    // if not successful then do it ourself
-    if ( CAiScutTarget::GetIcon(aIcon) != KErrNone )
-        {
-        TRAP_IGNORE(CreateAppIconL(aIcon));
-        }
-
-
-    return 0;
-    }
-
-// ---------------------------------------------------------------------------
-// Returns the shortcut target icon for toolbar.
-// ---------------------------------------------------------------------------
-//
-TInt CAiScutTargetApp::GetToolbarIcon(CGulIcon*& aIcon) const
-    {
-    if ( CAiScutTarget::GetToolbarIcon(aIcon) != KErrNone)
-        {
-        TRAP_IGNORE(CreateAppIconL(aIcon));
-        }
-
-    return 0;
-    }
-
-// ---------------------------------------------------------------------------
-// Creates the application icon.
-// ---------------------------------------------------------------------------
-//
-
-void CAiScutTargetApp::CreateAppIconL(CGulIcon*& aIcon) const
-    {
-    // To make sure we won't end up with a partially created icon, we first create
-    // a temporary icon and take it into use only when it is propertly initialized.
-    CGulIcon* tempIcon = NULL;
-    TInt err = KErrNone;
-
-    // If no scalable icon support is available then the icon is constructed the "old way"
-    // java icon separately from the native icon. If the support is available then the
-    // java icon is constructed the same way the native icon is constructed.
-
-    const TBool isNonNative = iEngine.IsNonNative(iAppUid);
-
-    // First try to create a normal non-native icon
-    if (isNonNative)
-        {
-        TRAP(err,
-            tempIcon = CreateNonNativeIconL()
-            );
-        // Just to be sure
-        if (err != KErrNone)
-            {
-            tempIcon = NULL;
-            }
-        }
-    // No icon yet so either native icon or non-native SVG icon.
-    if (!tempIcon)
-        {
-        MAknsSkinInstance* skin = AknsUtils::SkinInstance();
-        if ((iAppUid == KScutPersonalisationUid && iViewUid == KScutChangeThemeViewId)
-         || (iAppUid == KScutGeneralSettingsUid && (iViewUid == KScutInstallationViewId
-                               ||  iViewUid == KScutConnectivityViewId))
-          )
-          {
-          tempIcon = CreateSubstituteIconL(skin, iAppUid, iViewUid);
-          }
-    else
-      {
-          CFbsBitmap* bitmap = NULL;
-          CFbsBitmap* mask   = NULL;
-
-        AknsUtils::CreateAppIconLC(skin, iAppUid, EAknsAppIconTypeList, bitmap, mask);
-        if (bitmap)
-          {
-        tempIcon = CGulIcon::NewL(bitmap, mask);
-        CleanupStack::Pop(2);   // Bitmap and mask. They have to be popped out by number
-                                    // because the order in which they are pushed in is undefined.
-        }
-
-          }
-
-    }
-
-    aIcon = tempIcon;
-  }
-
-
-CGulIcon* CAiScutTargetApp::CreateSubstituteIconL( MAknsSkinInstance* aSkin, TUid aAppUid, TUid iViewUid ) const
-  {
-  CGulIcon* tempIcon = NULL;
-  TParse* parse = new (ELeave) TParse;
-    CleanupStack::PushL(parse);
-    parse->Set(KBitmapFile, &KDC_APP_BITMAP_DIR, NULL);
-    HBufC* fileName = parse->FullName().AllocLC();
-  TPtr fileNamePtr = fileName->Des();
-
-  //change idle theme
-  if (aAppUid == KScutPersonalisationUid && iViewUid == KScutChangeThemeViewId)
-      {
-      tempIcon = AknsUtils::CreateGulIconL(
-          aSkin,
-          KAknsIIDQgnPropPslnAiSub,
-          fileNamePtr,
-            EMbmAiscutpluginQgn_prop_psln_ai_sub,
-          EMbmAiscutpluginQgn_prop_psln_ai_sub_mask);
-      }
-    //appmngr
-    else if(aAppUid == KScutGeneralSettingsUid && iViewUid == KScutInstallationViewId)
-      {
-      CFbsBitmap* bitmap = NULL;
-      CFbsBitmap* mask   = NULL;
-
-    AknsUtils::CreateAppIconLC(aSkin, KScutAppMngrUid, EAknsAppIconTypeList, bitmap, mask);
-    
-    // The icon may reside in cache so we need to exclude in order
-    // for updated icons to be loaded properly.
-    AknIconUtils::ExcludeFromCache( bitmap );
-    if (bitmap)
-      {
-      tempIcon = CGulIcon::NewL(bitmap, mask);
-      CleanupStack::Pop(2);   // Bitmap and mask. They have to be popped out by number
-                  // because the order in which they are pushed in is undefined.
-      }
-      }
-    //connectivity view
-    else if(aAppUid == KScutGeneralSettingsUid && iViewUid == KScutConnectivityViewId)
-      {
-      tempIcon = AknsUtils::CreateGulIconL(
-          aSkin,
-          KAknsIIDQgnPropAiShortcut,
-          fileNamePtr,
-            EMbmAiscutpluginQgn_prop_cp_conn_shortcut,
-          EMbmAiscutpluginQgn_prop_cp_conn_shortcut_mask);
-      }
-    else
-      {
-      //never should go here!
-      }
-
-      CleanupStack::PopAndDestroy(2, parse); // fileName, parse
-      return tempIcon;
-  }
-
-// ---------------------------------------------------------------------------
-// Creates the NonNative application icon.
-// ---------------------------------------------------------------------------
-//
-
-CGulIcon* CAiScutTargetApp::CreateNonNativeIconL() const
-    {
-    CApaMaskedBitmap* maskedbitmap = CApaMaskedBitmap::NewLC();
-
-    CArrayFixFlat<TSize>* sizesArray = new (ELeave) CArrayFixFlat<TSize>(KIconSizeArray);
-    CleanupStack::PushL(sizesArray);
-
-    TInt err = iEngine.ApaSession().GetAppIconSizes(iAppUid, *sizesArray);
-
-    // If there is no error and there is something in array
-    // use first icon size and get an icon.
-    if (!err && sizesArray->Count())
-        {
-        err = iEngine.ApaSession().GetAppIcon(iAppUid, sizesArray->At(0), *maskedbitmap);
-        }
-
-    // If there was an error, delete every allocated object and leave.
-    if (err)
-        {
-        CleanupStack::PopAndDestroy(sizesArray);
-        CleanupStack::PopAndDestroy(maskedbitmap);
-        User::Leave(err);
-        }
-
-    CFbsBitmap* bitmap = new (ELeave) CFbsBitmap();
-    CleanupStack::PushL(bitmap);
-    CFbsBitmap* mask   = new (ELeave) CFbsBitmap();
-    CleanupStack::PushL(mask);
-
-    User::LeaveIfError(bitmap->Duplicate(maskedbitmap->Handle()));
-    User::LeaveIfError(mask->Duplicate(maskedbitmap->Mask()->Handle()));
-
-    CGulIcon* icon = CGulIcon::NewL(bitmap, mask);
-    //icon->SetBitmapsOwnedExternally(ETrue);
-
-    CleanupStack::Pop(mask);
-    CleanupStack::Pop(bitmap);
-
-    CleanupStack::PopAndDestroy(sizesArray);
-    CleanupStack::PopAndDestroy(maskedbitmap);
-
-    return icon;
-    }
-
-// ---------------------------------------------------------------------------
-// Checks if the target application is accessible.
-// ---------------------------------------------------------------------------
-//
-TBool CAiScutTargetApp::IsAccessibleL(TInt /*aCheckType*/)
-    {
-    if (iAppUid == KNullUid || iEngine.IsHidden(iAppUid))
-        {
-        return EFalse;
-        }
-
-    TApaAppInfo appInfo;
-    TInt ret = iEngine.ApaSession().GetAppInfo(appInfo, iAppUid);
-
-    if (ret == RApaLsSession::EAppListInvalid)
-        {
-        // Application list not fully populated yet. Leave with KErrNotReady so
-        // the engine can trap it and start the timer to check accessiblity later.
-        User::Leave(KErrNotReady);
-        }
-
-    return (ret == KErrNone);
-    }
-
-
-// ---------------------------------------------------------------------------
-//
-// ---------------------------------------------------------------------------
-//
-void CAiScutTargetApp::LaunchL()
-    {
-    LaunchL( KNullDesC8 );
-    }
-
-// ---------------------------------------------------------------------------
-//
-// ---------------------------------------------------------------------------
-//
-void CAiScutTargetApp::LaunchL( const TDesC8& aCustomMessage )
-    {
-    __PRINTS( "XAI: CAiScutShortcut::LaunchL");
-    __PRINT( __DBG_FORMAT("XAI:   type = %d"), Type());
-
-    if (iAppUid != KNullUid)
-        {
-
-        // Some special cases
-        // ---------------------------------
-        if( Type() == EScutApplicationView &&
-            iAppUid == KScutGeneralSettingsUid )
-            {
-            CGSLauncher* l = CGSLauncher::NewLC();
-            l->LaunchGSViewL ( iViewUid,
-                               KScutActiveIdleUid,
-                               aCustomMessage );            
-            CleanupStack::PopAndDestroy( l );
-            
-            return;    
-            }
-        else if ( ( ( Type() == EScutChangeTheme) && ( iAppUid == KScutPersonalisationUid ) ) ||  // For AI2 Themes
-                  ( iAppUid == KScutDiallerUid ) )                                                // Dialer
-            {
-            const TVwsViewId viewId(iAppUid, iViewUid);
-            TUid msgId = KScutGeneralSettingsUid;
-            
-            if( iAppUid == KScutDiallerUid ) 
-                {
-                msgId = KScutDiallerViewCommand;
-                RProperty::Set(KPSUidAiInformation, KActiveIdleState, EPSAiNumberEntry );
-                }
-
-            TInt err = iEngine.VwsSession()->CreateActivateViewEvent( viewId, msgId, aCustomMessage );
-
-            return;
-            }
-
-        TBool         exists = EFalse;
-
-        CAknTaskList* taskList = CAknTaskList::NewL(iEngine.Env()->WsSession());
-        TApaTask      task(taskList->FindRootApp(iAppUid));
-        delete        taskList;
-
-        exists = task.Exists();
-
-        // If not found, try again little harder
-        // ----------------------------------------
-        if (!exists)
-            {
-            RWsSession wsSession = iEngine.Env()->WsSession();
-            task.SetWgId(0);                // Set task to non-existant task
-            TInt wgId=0;
-            CApaWindowGroupName::FindByAppUid(iAppUid, wsSession, wgId);
-
-            if (wgId != KErrNotFound)
-                {
-                exists = ETrue;
-            task.SetWgId(wgId);
-                }
-            }
-
-        // Actual reactivatio / starting
-        // -----------------------------
-        if (exists)       // Found, reactivate
-            {
-            if (iMsg && iMsg->Length())
-                {
-                task.SendMessage(KNullUid, *iMsg);
-                }
-            if ( iAppUid == KScutAppShellUid ) // AppShell effect is an exception
-            	{
-            	//start different fullscreen effect when launching appshell
-            	GfxTransEffect::BeginFullScreen( AknTransEffect::EApplicationActivate ,
-            			TRect(0,0,0,0),
-            	        AknTransEffect::EParameterType,
-            	        AknTransEffect::GfxTransParam( iAppUid,
-            	        AknTransEffect::TParameter::EActivateExplicitContinue ) );        
-            	}
-            
-            if( iAppUid == KScutAppShellUid ) // Appshell starting is an exception
-                {
-                task.SendMessage( KUidApaMessageSwitchOpenFile , KNullDesC8 );
-                }
-            else
-                {
-                // If message was sent, don't try to bring task to foreground as task will do it itself
-                if ( !( (iAppUid == KScutLogsUid) && (iMsg && iMsg->Length() > 0)) )
-                    {
-                    CAknSgcClient::MoveApp(task.WgId(), ESgcMoveAppToForeground);
-                    }
-                }
-            }
-        else             // Not exists, starting
-            {
-            TApaAppInfo appInfo;
-
-            if (iEngine.ApaSession().GetAppInfo(appInfo, iAppUid) == KErrNone)
-                {
-                if (FeatureManager::FeatureSupported(KFeatureIdCommonVoip) &&
-                    (iAppUid == KScutEasyVoIPApplicationUid) )
-                    {
-                    SetEasyVoIPShortcutStartL();
-                    }
-
-                CApaCommandLine* cmdLine = CApaCommandLine::NewLC();
-                cmdLine->SetExecutableNameL(appInfo.iFullName);
-                if (iMsg && iMsg->Length())
-                    {
-                    cmdLine->SetCommandL(EApaCommandRun);
-                    cmdLine->SetTailEndL(*iMsg);
-                    }
-                if (iBackground)
-                    {
-                    cmdLine->SetCommandL(EApaCommandBackground);
-                    }
-                if ( iAppUid == KScutVoiceDialUid )
-                	{
-                	cmdLine ->SetCommandL( EApaCommandRunWithoutViews );
-                	}
-
-                TInt err = iEngine.ApaSession().StartApp(*cmdLine);
-
-
-                __PRINT( __DBG_FORMAT("XAI:   StartApp err = %d"), err);
-
-                User::LeaveIfError(err);
-
-                CleanupStack::PopAndDestroy(cmdLine);
-                }
-            }
-        }
-    }
-
-
-// ---------------------------------------------------------------------------
-// Return application uid this target launches.
-// ---------------------------------------------------------------------------
-//
-TUid CAiScutTargetApp::AppUid() const
-    {
-
-#ifdef __WEB_WIDGETS
-    // for widgets return widgetapp uid.
-    if (iEngine.IsWidget(iAppUid))
-        {
-        return KUidWidgetUi;
-        }
-#endif
-
-    return iAppUid;
-    }
-
-// ---------------------------------------------------------------------------
-// Return the view id
-// ---------------------------------------------------------------------------
-//
-TUid CAiScutTargetApp::AdditionalUid() const
-    {
-    return iViewUid;
-    }
-
-// ---------------------------------------------------------------------------
-// CScShortcutNativeApp::SetEasyVoIPShortcutStartL()
-//
-// Performs Central Repository shortcut set for EasyVoIP application.
-// ---------------------------------------------------------------------------
-//
-void CAiScutTargetApp::SetEasyVoIPShortcutStartL() const
-    {
-    CRepository* repository = CRepository::NewL(KUidEasyVoIPRepository);
-    CleanupStack::PushL(repository);
-
-    // Set shortcut start for EasyVoIP application.
-    TInt error = repository->Set(KEasyVoIPShortcutStartup, 1);
-    User::LeaveIfError(error);
-
-    CleanupStack::PopAndDestroy(repository);
-    }
-
-// End of File.