diff -r b01126ce0bec -r ba63c83f4716 idlehomescreen/widgetmanager/src/wmstore.cpp --- a/idlehomescreen/widgetmanager/src/wmstore.cpp Wed Sep 15 12:00:00 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,367 +0,0 @@ -/* -* Copyright (c) 2009 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: -* Implementation of the store for WidgetManager -* -*/ - -// INCLUDE FILES -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include // widgetreqistry -#include -#include -#include -#include -#include - -#include "wmimageconverter.h" -#include "wmstore.h" -#include "wmcommon.h" -#include "wmplugin.h" -#include "wmresourceloader.h" -#include "wmmaincontainer.h" -#include "wmconfiguration.h" -#include "wmprocessmonitor.h" - -// CONSTANTS - -// MEMBER FUNCTIONS - -// --------------------------------------------------------- -// CWmStore::NewL -// --------------------------------------------------------- -// -CWmStore* CWmStore::NewL( CWmConfItem& aWmConfItem, - CWmResourceLoader& aResourceLoader ) - { - CWmStore* self = new (ELeave) CWmStore( aWmConfItem ); - CleanupStack::PushL( self ); - self->ConstructL( aResourceLoader ); - CleanupStack::Pop( self ); - return self; - } - -// --------------------------------------------------------- -// CWmStore::~CWmStore -// --------------------------------------------------------- -// -CWmStore::~CWmStore() - { - delete iIcon; - delete iMask; - - // if MAknIconFileProvider was used to create image from icon string - // then it'll try accessing imageconverter after bitmap deletion - // for de-reference open file count, so it should be deleted last. - delete iImageConverter; - delete iProcessMonitor; - delete iBrowserLauncher; - } - -// --------------------------------------------------------- -// CWmStore::CWmStore -// --------------------------------------------------------- -// -CWmStore::CWmStore( CWmConfItem& aWmConfItem ) - : iWmConfItem( aWmConfItem ) - { - iIcon = NULL; - iMask = NULL; - iProcessMonitor = NULL; - iBrowserLauncher = NULL; - } - -// --------------------------------------------------------- -// CWmStore::ConstructL -// --------------------------------------------------------- -// -void CWmStore::ConstructL( CWmResourceLoader& aResourceLoader ) - { - // start image converter for the icon - iImageConverter = CWmImageConverter::NewL(); - - // get size of icon for double large style list - TRect rect; - TAknLayoutRect layout; - - layout.LayoutRect( rect, - AknLayoutScalable_Avkon::list_double_large_graphic_pane_g1( 0 ).LayoutLine() ); - - TSize iconSize( layout.Rect().Width(), - layout.Rect().Height() ); - - // create icon - TInt err = iImageConverter->HandleIconString( - iconSize, - iWmConfItem.Icon(), - iIcon, - iMask, - ETrue ); // force scaling for non scaleble icons - - if ( err != KErrNone ) - { - // lets use basket icon - // skin( 0x101f86e3 0x23f6 ):mif( z:\resource\apps\widgetmanager.mif 16388 16389 ) - _LIT( KSkinMifIconFormat, "skin( 0x%x 0x%x ):mif( %S %d %d )"); - const TInt KMaxIconDescriptorLength = 256; - TBuf buf; - buf.Format( KSkinMifIconFormat(), - EAknsMajorGeneric, EAknsMinorGenericQgnPropLmShopping, - &aResourceLoader.IconFilePath(), - EMbmWidgetmanagerQgn_menu_shopping, - EMbmWidgetmanagerQgn_menu_shopping_mask ); - - iImageConverter->HandleIconString( - iconSize, - buf, - iIcon, - iMask, - EFalse ); // force scaling for non scaleble icons - } - } - -// --------------------------------------------------------- -// CWmStore::StoreIcon -// --------------------------------------------------------- -// -CFbsBitmap* CWmStore::StoreIcon() - { - return iIcon; - } - -// --------------------------------------------------------- -// CWmStore::StoreMask -// --------------------------------------------------------- -// -CFbsBitmap* CWmStore::StoreMask() - { - return iMask; - } - -// --------------------------------------------------------- -// CWmStore::Heading -// --------------------------------------------------------- -// -const TDesC& CWmStore::Heading() - { - return iWmConfItem.Title(); - } - -// --------------------------------------------------------- -// CWmStore::Order -// --------------------------------------------------------- -// -TInt CWmStore::Order() const - { - return iWmConfItem.Order(); - } - -// --------------------------------------------------------- -// CWmStore::ExecuteL -// --------------------------------------------------------- -// -void CWmStore::ExecuteL() - { - if ( iWmConfItem.Id() == EOvi ) - { - if ( !iProcessMonitor ) - { - iProcessMonitor = CWmProcessMonitor::NewL(); - } - // if process monitor is active laucher was allready started. - // this is for ignoring multiple presses - if ( !iProcessMonitor->IsActive() ) - { - RunOviL(); - } - } - else if ( iWmConfItem.Id() >= EStore1 && iWmConfItem.Id() < ELastItem ) - { - // if this leaves it means we need to start browser - // becouse application info was not given - TRAPD( err, RunApplicationL() ) - if ( err != KErrNone ) - { - StartBrowserL( iWmConfItem.BrowserUrl() ); - } - } - else - { - // Not supported - User::Leave( KErrGeneral ); - } - } - -// --------------------------------------------------------- -// CWmStore::RunOviL -// --------------------------------------------------------- -// -void CWmStore::RunOviL() - { - RApaLsSession session; - User::LeaveIfError( session.Connect() ); - CleanupClosePushL( session ); - - //get app info - TApaAppInfo appInfo; - if ( session.GetAppInfo( appInfo, iWmConfItem.AppUid() ) == KErrNone ) - { - // Form parameter - HBufC* param = HBufC::NewLC( iWmConfItem.AppParam().Length() ); - param->Des().Copy( iWmConfItem.AppParam() ); - - // do the launch - RProcess process; - User::LeaveIfError( process.Create( appInfo.iFullName, *param ) ); - - iProcessMonitor->Monitor( process ); - process.Resume(); - - CleanupStack::PopAndDestroy( param ); - } - - CleanupStack::PopAndDestroy( &session ); - } - -// --------------------------------------------------------- -// CWmStore::StartBrowserL -// --------------------------------------------------------- -// -void CWmStore::StartBrowserL( const TDesC& aUrl ) - { - // already running/or request launch or url is empty - if ( iBrowserLauncher || !aUrl.Length() ) { return; } - - _LIT( KUrlPrefix, "4 "); - HBufC* param = HBufC::NewLC( aUrl.Length() + KUrlPrefix().Length() ); - param->Des().Append( KUrlPrefix ); - param->Des().Append( aUrl ); - - // Create browser launcher - CBrowserLauncher* launcher = CBrowserLauncher::NewLC(); - - // Asynchronous operation to launch the browser with given URL - launcher->LaunchBrowserEmbeddedL( - *param, NULL, this, NULL ); - - CleanupStack::Pop( launcher ); - iBrowserLauncher = launcher; - launcher = NULL; - - CleanupStack::PopAndDestroy( param ); - } - -// --------------------------------------------------------- -// CWmStore::HandleServerAppExit -// --------------------------------------------------------- -// -void CWmStore::HandleServerAppExit( TInt aReason ) - { - MAknServerAppExitObserver::HandleServerAppExit( aReason ); - delete iBrowserLauncher; - iBrowserLauncher = NULL; - } - -// --------------------------------------------------------- -// CWmStore::RunApplicationL -// --------------------------------------------------------- -// -void CWmStore::RunApplicationL() - { - CWmConfiguration::TStoreAppType type = iWmConfItem.AppType(); - if ( type == CWmConfiguration::EUnknown || - type >= CWmConfiguration::EReserved ) - { - // Leave if not found - User::Leave( KErrArgument ); - } - - switch( type ) - { - case CWmConfiguration::ES60: - case CWmConfiguration::EQt: - { - StartProcessL( iWmConfItem.AppUid(), - iWmConfItem.AppParam() ); - } - break; - case CWmConfiguration::ECwrt: - { - StartWidgetL( iWmConfItem.AppUid(), - iWmConfItem.AppParam() ); - } - break; - case CWmConfiguration::EWrt: - { - StartWidgetL( iWmConfItem.AppUid(), KNullDesC ); - } - break; - } - } - -// --------------------------------------------------------- -// CWmStore::StartProcessL -// --------------------------------------------------------- -// -void CWmStore::StartProcessL( TUid aUid, const TDesC& aParam ) - { - RApaLsSession session; - User::LeaveIfError( session.Connect() ); - CleanupClosePushL( session ); - - //get app info - TApaAppInfo appInfo; - User::LeaveIfError( session.GetAppInfo( appInfo, aUid ) ); - // do the launch - RProcess process; - User::LeaveIfError( process.Create( appInfo.iFullName, aParam ) ); - process.Resume(); - - CleanupStack::PopAndDestroy( &session ); - } - -// --------------------------------------------------------- -// CWmStore::StartWidgetL -// --------------------------------------------------------- -// -void CWmStore::StartWidgetL( TUid aAppUid, const TDesC& aParams ) - { - if ( aAppUid == KNullUid ) - User::Leave( KErrArgument ); - - HBufC* params = aParams.AllocLC(); - - RApaLsSession appArc; - User::LeaveIfError( appArc.Connect() ); - CleanupClosePushL( appArc ); - - TThreadId threadId; - User::LeaveIfError( appArc.StartDocument( *params, aAppUid, threadId ) ); - - CleanupStack::PopAndDestroy( &appArc ); - CleanupStack::PopAndDestroy( params ); - } - -// End of file