--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/customization/isadapter/src/isadapter.cpp Thu Dec 17 08:40:12 2009 +0200
@@ -0,0 +1,2537 @@
+/*
+* Copyright (c) 2002 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: DM Idle SoftKey Adapter
+*
+*/
+
+
+#include "isadapter.h"
+
+#include "IsAdapterDefines.h"
+#include "IsAdapterLiterals.h"
+#include "IdleSoftkeysAppTargetManager.h"
+#include "UiSettingsUtil.h"
+
+// symbian
+#include <implementationproxy.h>
+#include <centralrepository.h>
+#include <imcvcodc.h>
+// s60
+#include <FavouritesItemList.h>
+
+// tarm
+//#ifdef __SAP_POLICY_MANAGEMENT
+#include <SettingEnforcementInfo.h>
+#include <PolicyEngineXACML.h>
+#include <DMCert.h>
+//#endif
+
+//#include "UISettingsSrvConstants.h"
+#include "IsAdapterConstants.h"
+#include "nsmldmiapmatcher.h"
+#include "nsmldmuri.h"
+#include "TPtrC8I.h"
+#include "TARMCharConv.h"
+#include "FileCoderB64.h"
+#include "debug.h"
+#include <featmgr.h>
+// ------------------------------------------------------------------------------------------------
+// CIsAdapter* CIsAdapter::NewL( )
+// ------------------------------------------------------------------------------------------------
+CIsAdapter* CIsAdapter::NewL(MSmlDmCallback* aDmCallback )
+ {
+ RDEBUG( "CIsAdapter::NewL() >" );
+ CIsAdapter* self = NewLC( aDmCallback );
+ CleanupStack::Pop();
+ RDEBUG( "CIsAdapter::NewL() <" );
+ return self;
+ }
+
+// ------------------------------------------------------------------------------------------------
+// CIsAdapter* CIsAdapter::NewLC( )
+// ------------------------------------------------------------------------------------------------
+CIsAdapter* CIsAdapter::NewLC(MSmlDmCallback* aDmCallback )
+ {
+ RDEBUG( "CIsAdapter::NewLC() >" );
+ CIsAdapter* self = new (ELeave) CIsAdapter(aDmCallback);
+ CleanupStack::PushL(self);
+ self->ConstructL(aDmCallback);
+ RDEBUG( "CIsAdapter::NewLC() <" );
+ return self;
+ }
+
+// ------------------------------------------------------------------------------------------------
+// CIsAdapter::CIsAdapter()
+// ------------------------------------------------------------------------------------------------
+CIsAdapter::CIsAdapter(TAny* aEcomArguments)
+: CTARMDmStreamAdapter((MSmlDmCallback*)aEcomArguments)
+, iFavList(0)
+, iWebTargetManager(0)
+, iAppTargetManager(0)
+, iUiSettings(0)
+ {
+ RDEBUG( "CIsAdapter::CIsAdapter()" );
+ iUiSettingsNotInitialized = ETrue;
+ }
+
+// ------------------------------------------------------------------------------------------------
+// CIsAdapter::~CIsAdapter()
+// ------------------------------------------------------------------------------------------------
+CIsAdapter::~CIsAdapter()
+ {
+ RDEBUG( "CIsAdapter::~CIsAdapter() >" );
+ FeatureManager::UnInitializeLib();
+ delete iWebTargetManager;
+ delete iAppTargetManager;
+ delete iUiSettings;
+
+ iFavDb.Close();
+ iFavSession.Close();
+
+ if( iFavList != 0 )
+ {
+ delete iFavList;
+ iFavList = 0;
+ }
+
+ if( iTemporaryImageFile.Length() > 0 )
+ {
+ RDEBUG( "CIsAdapter::~CIsAdapter() Deleting temporary file" );
+ RFs fs;
+ TInt err = fs.Connect();
+ if( err == KErrNone )
+ {
+ fs.Delete( iTemporaryImageFile );
+ fs.Close();
+ iTemporaryImageFile.Zero();
+ }
+ }
+
+ RDEBUG( "CIsAdapter::~CIsAdapter() <" );
+ }
+
+
+
+// ------------------------------------------------------------------------------------------------
+// CIsAdapter::DDFVersionL()
+// ------------------------------------------------------------------------------------------------
+void CIsAdapter::DDFVersionL(CBufBase& aDDFVersion)
+ {
+ RDEBUG( "CIsAdapter::DDFVersionL() >" );
+
+ aDDFVersion.InsertL(0,KNSmlISDDFVersion);
+
+ RDEBUG( "CIsAdapter::DDFVersionL() <" );
+ }
+
+// ------------------------------------------------------------------------------------------------
+// CIsAdapter::DDFStructureL()
+// ------------------------------------------------------------------------------------------------
+void CIsAdapter::DDFStructureL( MSmlDmDDFObject& aDDF )
+ {
+ RDEBUG( "CIsAdapter::DDFStructureL() >" );
+
+ TSmlDmAccessTypes accessTypesGet;
+ accessTypesGet.SetGet();
+
+ TSmlDmAccessTypes accessTypesAddGet;
+ accessTypesAddGet.SetAdd();
+ accessTypesAddGet.SetGet();
+
+ TSmlDmAccessTypes accessTypesGetReplace;
+ accessTypesGetReplace.SetGet();
+ accessTypesGetReplace.SetReplace();
+
+ TSmlDmAccessTypes accessTypesADGR;
+ accessTypesADGR.SetAdd();
+ accessTypesADGR.SetDelete();
+ accessTypesADGR.SetGet();
+ accessTypesADGR.SetReplace();
+
+ /*
+ Node: ./Customzation
+ This interior node is the common parent to all customization..
+ Status: Required
+ Occurs: One
+ Format: Node
+ Access Types: Get
+ Values: N/A
+ */
+ MSmlDmDDFObject& apps = aDDF.AddChildObjectL(KNSmlCustomizationNodeName);
+ FillNodeInfoL(apps,accessTypesGet,MSmlDmDDFObject::EOne,MSmlDmDDFObject::EPermanent,MSmlDmDDFObject::ENode,
+ KNSmlISDescription,KNullDesC8());
+
+ /*
+ Node: ./Customization/IdleSoftKey
+ This interior node acts as a placeholder for one or more update packages within a same content provider group.
+ Status: Required
+ Occurs: One
+ Format: Node
+ Access Types: Get
+ Values: N/A
+ */
+ MSmlDmDDFObject& groupNode = apps.AddChildObjectL(KNSmlIS_IdleSoftKeyNodeName);
+ FillNodeInfoL(groupNode,accessTypesGet,MSmlDmDDFObject::EOne,MSmlDmDDFObject::EPermanent,
+ MSmlDmDDFObject::ENode,KNSmlISIdleSoftKeyNodeDescription,KNullDesC8());
+
+ // IdleSoftkeys/*
+ MSmlDmDDFObject& groupNodeSoftkeys = groupNode.AddChildObjectL(KNSmlIS_SoftKeysNodeName);
+ FillNodeInfoL(groupNodeSoftkeys,accessTypesGet,MSmlDmDDFObject::EOne,MSmlDmDDFObject::EPermanent,
+ MSmlDmDDFObject::ENode,KNSmlISSoftkeysNodeDescription,KNullDesC8());
+
+ MSmlDmDDFObject& groupNodeTargets = groupNode.AddChildObjectL(KNSmlIS_TargetsNodeName);
+ FillNodeInfoL(groupNodeTargets,accessTypesGet,MSmlDmDDFObject::EOne,MSmlDmDDFObject::EPermanent,
+ MSmlDmDDFObject::ENode,KNSmlISTargetsNodeDescription,KNullDesC8());
+
+ MSmlDmDDFObject& groupNodeWebTargets = groupNode.AddChildObjectL(KNSmlIS_WebTargetsNodeName);
+ FillNodeInfoL(groupNodeWebTargets,accessTypesAddGet,MSmlDmDDFObject::EOne,MSmlDmDDFObject::EPermanent,
+ MSmlDmDDFObject::ENode,KNSmlISWebTargetsNodeDescription,KNullDesC8());
+
+ // Dynamic node lists, IdleSoftkeys/*/X
+ MSmlDmDDFObject& groupNodeSoftkeysX = groupNodeSoftkeys.AddChildObjectGroupL();
+ FillNodeInfoL(groupNodeSoftkeysX,accessTypesGet,MSmlDmDDFObject::EOneOrMore,MSmlDmDDFObject::EDynamic,
+ MSmlDmDDFObject::ENode,KNSmlISSoftkeysXNodeDescription,KNullDesC8());
+
+ MSmlDmDDFObject& groupNodeTargetsX = groupNodeTargets.AddChildObjectGroupL();
+ FillNodeInfoL(groupNodeTargetsX,accessTypesGet,MSmlDmDDFObject::EZeroOrMore,MSmlDmDDFObject::EDynamic,
+ MSmlDmDDFObject::ENode,KNSmlISTargetsXNodeDescription,KNullDesC8());
+
+ MSmlDmDDFObject& groupNodeWebTargetsX = groupNodeWebTargets.AddChildObjectGroupL();
+ FillNodeInfoL(groupNodeWebTargetsX,accessTypesADGR,MSmlDmDDFObject::EZeroOrMore,MSmlDmDDFObject::EDynamic,
+ MSmlDmDDFObject::ENode,KNSmlISWebTargetsXNodeDescription,KNullDesC8());
+
+ // Softkeys/X/*
+ MSmlDmDDFObject& sId = groupNodeSoftkeysX.AddChildObjectL(KNSmlIS_SoftkeysIDNodeName);
+ FillNodeInfoL(sId,accessTypesGet,MSmlDmDDFObject::EOne,MSmlDmDDFObject::EPermanent,
+ MSmlDmDDFObject::EChr,KNSmlIS_SoftkeysIDDescription,KNSmlISTextPlain());
+ MSmlDmDDFObject& sRef = groupNodeSoftkeysX.AddChildObjectL(KNSmlIS_SoftkeysTargetRefNodeName);
+ FillNodeInfoL(sRef,accessTypesGetReplace,MSmlDmDDFObject::EOne,MSmlDmDDFObject::EPermanent,
+ MSmlDmDDFObject::EChr,KNSmlIS_SoftkeysTargetRefDescription,KNSmlISTextPlain());
+#ifdef IDLESOFTKEY_ADAPTER_SOFTKEY_IMAGES
+ MSmlDmDDFObject& sImage = groupNodeSoftkeysX.AddChildObjectL(KNSmlIS_SoftkeysImageNoneName);
+ FillNodeInfoL(sImage,accessTypesGetReplace,MSmlDmDDFObject::EOne,MSmlDmDDFObject::EPermanent,
+ MSmlDmDDFObject::EBin,KNSmlIS_SoftkeysImageDescription,KMimeTypeImageMbm());
+#ifdef IDLESOFTKEY_ADAPTER_IMAGEMASK
+ MSmlDmDDFObject& sImageMask = groupNodeSoftkeysX.AddChildObjectL(KNSmlIS_SoftkeysMaskNodeName);
+ FillNodeInfoL(sImageMask,accessTypesGetReplace,MSmlDmDDFObject::EOne,MSmlDmDDFObject::EPermanent,
+ MSmlDmDDFObject::EBin,KNSmlIS_SoftkeysMaskDescription,KMimeTypeImageMbm());
+#endif
+#endif
+ // Targets/X/*
+ MSmlDmDDFObject& tId = groupNodeTargetsX.AddChildObjectL(KNSmlIS_TargetsIDNodeName);
+ FillNodeInfoL(tId,accessTypesGet,MSmlDmDDFObject::EOne,MSmlDmDDFObject::EPermanent,
+ MSmlDmDDFObject::EChr,KNSmlIS_TargetsIDDescription,KNSmlISTextPlain());
+
+ MSmlDmDDFObject& tDesc = groupNodeTargetsX.AddChildObjectL(KNSmlIS_TargetsDescriptionNodeName);
+ FillNodeInfoL(tDesc,accessTypesGet,MSmlDmDDFObject::EOne,MSmlDmDDFObject::EPermanent,
+ MSmlDmDDFObject::EChr,KNSmlIS_TargetsDescriptionDescription,KNSmlISTextPlain());
+
+ MSmlDmDDFObject& tCaption = groupNodeTargetsX.AddChildObjectL(KNSmlIS_TargetsCaptionName);
+ FillNodeInfoL(tCaption,accessTypesGetReplace,MSmlDmDDFObject::EOne,MSmlDmDDFObject::EPermanent,
+ MSmlDmDDFObject::EChr,KNSmlIS_TargetsCaptionDescription,KNSmlISTextPlain());
+
+#ifndef IDLESOFTKEY_ADAPTER_SOFTKEY_IMAGES
+ MSmlDmDDFObject& tImage = groupNodeTargetsX.AddChildObjectL(KNSmlIS_TargetsImageNodeName);
+ FillNodeInfoL(tImage,accessTypesGetReplace,MSmlDmDDFObject::EOne,MSmlDmDDFObject::EPermanent,
+ MSmlDmDDFObject::EBin,KNSmlIS_TargetsImageDescription,KMimeTypeImageMbm());
+
+#ifdef IDLESOFTKEY_ADAPTER_IMAGEMASK
+ MSmlDmDDFObject& tImageMask = groupNodeTargetsX.AddChildObjectL(KNSmlIS_TargetsMaskNodeName);
+ FillNodeInfoL(tImageMask,accessTypesGetReplace,MSmlDmDDFObject::EOne,MSmlDmDDFObject::EPermanent,
+ MSmlDmDDFObject::EBin,KNSmlIS_TargetsMaskDescription,KMimeTypeImageMbm());
+#endif
+#endif
+
+ // WebTargets/X/*
+ MSmlDmDDFObject& wId = groupNodeWebTargetsX.AddChildObjectL(KNSmlIS_WebTargetsIDNodeName);
+ FillNodeInfoL(wId,accessTypesGet,MSmlDmDDFObject::EOne,MSmlDmDDFObject::EPermanent,
+ MSmlDmDDFObject::EChr,KNSmlIS_WebTargetsIDDescription,KNSmlISTextPlain());
+
+ MSmlDmDDFObject& wDesc = groupNodeWebTargetsX.AddChildObjectL(KNSmlIS_WebTargetsDescriptionNodeName);
+ FillNodeInfoL(wDesc,accessTypesGetReplace,MSmlDmDDFObject::EOne,MSmlDmDDFObject::EPermanent,
+ MSmlDmDDFObject::EChr,KNSmlIS_WebTargetsDescriptionDescription,KNSmlISTextPlain());
+
+ MSmlDmDDFObject& wURL = groupNodeWebTargetsX.AddChildObjectL(KNSmlIS_WebTargetsURLNodeName);
+ FillNodeInfoL(wURL,accessTypesGetReplace,MSmlDmDDFObject::EOne,MSmlDmDDFObject::EPermanent,
+ MSmlDmDDFObject::EChr,KNSmlIS_WebTargetsURLDescription,KNSmlISTextPlain());
+
+ MSmlDmDDFObject& wUserName = groupNodeWebTargetsX.AddChildObjectL(KNSmlIS_WebTargetsUserNameNodeName);
+ FillNodeInfoL(wUserName,accessTypesGetReplace,MSmlDmDDFObject::EOne,MSmlDmDDFObject::EPermanent,
+ MSmlDmDDFObject::EChr,KNSmlIS_WebTargetsUserNameDescription,KNSmlISTextPlain());
+
+ MSmlDmDDFObject& wPassword = groupNodeWebTargetsX.AddChildObjectL(KNSmlIS_WebTargetsPasswordNodeName);
+ FillNodeInfoL(wPassword,accessTypesGetReplace,MSmlDmDDFObject::EOne,MSmlDmDDFObject::EPermanent,
+ MSmlDmDDFObject::EChr,KNSmlIS_WebTargetsPasswordDescription,KNSmlISTextPlain());
+
+ MSmlDmDDFObject& wConRef = groupNodeWebTargetsX.AddChildObjectL(KNSmlIS_WebTargetsConRefNodeName);
+ FillNodeInfoL(wConRef,accessTypesGetReplace,MSmlDmDDFObject::EOne,MSmlDmDDFObject::EPermanent,
+ MSmlDmDDFObject::EChr,KNSmlIS_WebTargetsConRefDescription,KNSmlISTextPlain());
+
+ MSmlDmDDFObject& wCaption = groupNodeWebTargetsX.AddChildObjectL(KNSmlIS_WebTargetsCaptionNodeName);
+ FillNodeInfoL(wCaption,accessTypesGetReplace,MSmlDmDDFObject::EOne,MSmlDmDDFObject::EPermanent,
+ MSmlDmDDFObject::EChr,KNSmlIS_WebTargetsCaptionDescription,KNSmlISTextPlain());
+
+#ifndef IDLESOFTKEY_ADAPTER_SOFTKEY_IMAGES
+ MSmlDmDDFObject& wImage = groupNodeWebTargetsX.AddChildObjectL(KNSmlIS_WebTargetsImageNodeName);
+ FillNodeInfoL(wImage,accessTypesGetReplace,MSmlDmDDFObject::EOne,MSmlDmDDFObject::EPermanent,
+ MSmlDmDDFObject::EBin,KNSmlIS_WebTargetsImageDescription,KMimeTypeImageMbm());
+
+#ifdef IDLESOFTKEY_ADAPTER_IMAGEMASK
+ MSmlDmDDFObject& wImageMask = groupNodeWebTargetsX.AddChildObjectL(KNSmlIS_WebTargetsMaskNodeName);
+ FillNodeInfoL(wImageMask,accessTypesGetReplace,MSmlDmDDFObject::EOne,MSmlDmDDFObject::EPermanent,
+ MSmlDmDDFObject::EBin,KNSmlIS_WebTargetsMaskDescription,KMimeTypeImageMbm());
+#endif
+#endif
+
+ RDEBUG( "CIsAdapter::DDFStructureL() <" );
+ }
+
+// ------------------------------------------------------------------------------------------------
+// CIsAdapter::UpdateLeafObjectL()
+// ------------------------------------------------------------------------------------------------
+void CIsAdapter::UpdateLeafObjectL( CSmlDmAdapter::TError &aStatus,
+ const TDesC8& aURI, const TDesC8& aLUID,
+ const TDesC8& aObject, const TDesC8& aType)
+ {
+ RDEBUG( "CIsAdapter::UpdateLeafObjectL() >" );
+#ifdef __TARM_SYMBIAN_CONVERGENCY
+ TPtrC8 uriPtrc = NSmlDmURI::RemoveDotSlash( aURI );
+ CIsAdapter::TIsNodeIdentifier identifier = GetNodeIdentifier( uriPtrc );
+#else
+ CIsAdapter::TIsNodeIdentifier identifier = GetNodeIdentifier( aURI );
+#endif
+
+ HBufC16* strBuf;
+ TInt value;
+ CFavouritesItem *favItem = CFavouritesItem::NewLC();
+ RDEBUG_2( "CIsAdapter::UpdateLeafObjectL() CFavouritesItem ALLOC %x", favItem );
+ TPtrC8 ptr8(0, 0);
+
+ switch( identifier )
+ {
+
+#ifdef IDLESOFTKEY_ADAPTER_SOFTKEY_IMAGES
+ case EIsNodeSoftKeysXImage:
+ #ifdef __TARM_SYMBIAN_CONVERGENCY
+ SetSoftkeyImageL( uriPtrc, aObject, aType );
+ #else
+ SetSoftkeyImageL( aURI, aObject, aType );
+ #endif
+ break;
+
+#ifdef IDLESOFTKEY_ADAPTER_IMAGEMASK
+ case EIsNodeSoftKeysXMask:
+ #ifdef __TARM_SYMBIAN_CONVERGENCY
+ SetSoftkeyImageL( uriPtrc, aObject, aType );
+ #else
+ SetSoftkeyImageL( aURI, aObject, aType );
+ #endif
+ break;
+#endif
+#endif
+
+ case EIsNodeSoftKeysXTargetRef:
+#ifdef __TARM_SYMBIAN_CONVERGENCY
+ ptr8.Set( NSmlDmURI::URISeg( uriPtrc, 3 ) );
+#else
+ ptr8.Set( NSmlDmURI::URISeg( aURI, 3 ) );
+#endif
+ value = GetSoftkeyUidFromNodeNameL( ptr8 );
+ SetShortcutTargetL( aObject, value );
+ break;
+
+ case EIsNodeTargetsXCaption:
+#ifdef __TARM_SYMBIAN_CONVERGENCY
+ iAppTargetManager->SetCaptionL( uriPtrc, aObject );
+#else
+ iAppTargetManager->SetCaptionL( aURI, aObject );
+#endif
+ break;
+
+#ifndef IDLESOFTKEY_ADAPTER_SOFTKEY_IMAGES
+ case EIsNodeTargetsXImage:
+ #ifdef __TARM_SYMBIAN_CONVERGENCY
+ SetShortcutTargetImageL( uriPtrc, aObject, aType );
+ #else
+ SetShortcutTargetImageL( aURI, aObject, aType );
+ #endif
+
+ break;
+
+#ifdef IDLESOFTKEY_ADAPTER_IMAGEMASK
+ case EIsNodeTargetsXImageMask:
+ #ifdef __TARM_SYMBIAN_CONVERGENCY
+ SetShortcutTargetImageL( uriPtrc, aObject, aType );
+ #else
+ SetShortcutTargetImageL( aURI, aObject, aType );
+ #endif
+ break;
+#endif
+#endif
+
+ case EIsNodeWebTargetsX:
+#ifdef __TARM_SYMBIAN_CONVERGENCY
+ if( KErrNone != iWebTargetManager->RenameL( uriPtrc, aLUID, aObject ) )
+#else
+ if( KErrNone != iWebTargetManager->RenameL( aURI, aLUID, aObject ) )
+#endif
+ {
+ aStatus = CSmlDmAdapter::EError;
+ }
+ break;
+
+ case EIsNodeWebTargetsXDescription:
+ case EIsNodeWebTargetsXURL:
+ case EIsNodeWebTargetsXUserName:
+ case EIsNodeWebTargetsXPassword:
+ case EIsNodeWebTargetsXConRef:
+ {
+#ifdef __TARM_SYMBIAN_CONVERGENCY
+ iWebTargetManager->PrepareItemL( uriPtrc, *favItem, value );
+#else
+ iWebTargetManager->PrepareItemL( aURI, *favItem, value );
+#endif
+ strBuf = CTARMCharConv::ConvertFromUtf8LC( aObject );
+
+ switch( identifier )
+ {
+ case EIsNodeWebTargetsXDescription:
+ favItem->SetNameL( *strBuf );
+ break;
+
+ case EIsNodeWebTargetsXURL:
+ favItem->SetUrlL( *strBuf );
+ if( favItem->Url().Compare( *strBuf ) != 0 )
+ {
+ RDEBUG( "CIsAdapter::UpdateLeafObjectL() Bookmark URL setting failed with FavouritesEngine!" );
+ aStatus = CSmlDmAdapter::EError;
+ }
+ break;
+
+ case EIsNodeWebTargetsXUserName:
+ favItem->SetUserNameL( *strBuf );
+ break;
+
+ case EIsNodeWebTargetsXPassword:
+ favItem->SetPasswordL( *strBuf );
+ break;
+
+ case EIsNodeWebTargetsXConRef:
+ TFavouritesWapAp wapAp;
+ if( aObject.Length() == 0 )
+ {
+ wapAp.SetDefault();
+ }
+ else
+ {
+ iWebTargetManager->FindWapApL( aObject, value );
+ wapAp.SetApId( value );
+ }
+ favItem->SetWapAp( wapAp );
+ break;
+ }
+
+ CleanupStack::PopAndDestroy( strBuf );
+ iWebTargetManager->ReleaseItemL( *favItem );
+ }
+ break;
+
+ case EIsNodeWebTargetsXCaption:
+#ifdef __TARM_SYMBIAN_CONVERGENCY
+ iWebTargetManager->SetCaptionL( uriPtrc, aObject );
+#else
+ iWebTargetManager->SetCaptionL( aURI, aObject );
+#endif
+ break;
+
+#ifndef IDLESOFTKEY_ADAPTER_SOFTKEY_IMAGES
+ case EIsNodeWebTargetsXImage:
+ #ifdef __TARM_SYMBIAN_CONVERGENCY
+ SetShortcutTargetImageL( uriPtrc, aObject, aType );
+ #else
+ SetShortcutTargetImageL( aURI, aObject, aType );
+ #endif
+ break;
+
+#ifdef IDLESOFTKEY_ADAPTER_IMAGEMASK
+ case EIsNodeWebTargetsXImageMask:
+ #ifdef __TARM_SYMBIAN_CONVERGENCY
+ SetShortcutTargetImageL( uriPtrc, aObject, aType );
+ #else
+ SetShortcutTargetImageL( aURI, aObject, aType );
+ #endif
+ break;
+#endif
+#endif
+
+ default:
+ aStatus = CSmlDmAdapter::EError;
+ break;
+ };
+
+ CleanupStack::PopAndDestroy( favItem );
+
+ RDEBUG( "CIsAdapter::UpdateLeafObjectL() <" );
+ }
+
+// ------------------------------------------------------------------------------------------------
+// CIsAdapter::_UpdateLeafObjectL()
+// ------------------------------------------------------------------------------------------------
+void CIsAdapter::_UpdateLeafObjectL( const TDesC8& aURI, const TDesC8& aLUID,
+ const TDesC8& aObject, const TDesC8& aType,
+ TInt aStatusRef )
+ {
+ RDEBUG( "CIsAdapter::_UpdateLeafObjectL() >" );
+
+ TBuf8<KISTBufMaxLength> mimeType;
+ CopyAndTrimMimeType(mimeType, aType);
+
+ CSmlDmAdapter::TError status = CSmlDmAdapter::EOk;
+
+#ifdef __TARM_SYMBIAN_CONVERGENCY
+ TPtrC8 uriPtrc = NSmlDmURI::RemoveDotSlash( aURI );
+ TRAPD( reason,
+ UpdateLeafObjectL( status, uriPtrc, aLUID, aObject, aType ) );
+#else
+ TRAPD( reason,
+ UpdateLeafObjectL( status, aURI, aLUID, aObject, aType ) );
+#endif
+
+ if( KErrNone != reason )
+ {
+ RDEBUG_2( "CIsAdapter::_UpdateLeafObjectL: Error code %d", reason );
+ status = CSmlDmAdapter::EError;
+ }
+
+ iCallBack->SetStatusL(aStatusRef, status);
+
+ RDEBUG( "CIsAdapter::_UpdateLeafObjectL() <" );
+ }
+
+// ------------------------------------------------------------------------------------------------
+// CIsAdapter::_UpdateLeafObjectL()
+// ------------------------------------------------------------------------------------------------
+void CIsAdapter::_UpdateLeafObjectL( const TDesC8& /*aURI*/, const TDesC8& /*aLUID*/,
+ RWriteStream*& /*aStream*/, const TDesC8& /*aType*/,
+ TInt aStatusRef )
+ {
+ RDEBUG( "CIsAdapter::_UpdateLeafObjectL() (stream) >" );
+
+ // SymbianConvergencyNote! Check _UpdateLeafObjectL() <-> removes the "./" !
+
+ CSmlDmAdapter::TError ret = CSmlDmAdapter::EError;
+ iCallBack->SetStatusL(aStatusRef, ret);
+
+ RDEBUG( "CIsAdapter::_UpdateLeafObjectL() (stream) <" );
+ }
+
+// ------------------------------------------------------------------------------------------------
+// CIsAdapter::DeleteObjectL
+// ------------------------------------------------------------------------------------------------
+void CIsAdapter::DeleteObjectL( CSmlDmAdapter::TError &aStatus, const TDesC8& aURI,
+ const TDesC8& /*aLUID*/)
+ {
+ RDEBUG( "CIsAdapter::DeleteObjectL() >" );
+
+ // NOTE! Look _DeleteObjectL() <-> removes the "./" from the aURI !!
+
+ CIsAdapter::TIsNodeIdentifier identifier = GetNodeIdentifier( aURI );
+ CFavouritesItem *favItem = CFavouritesItem::NewLC();
+ RDEBUG_2( "CIsAdapter::DeleteObjectL() CFavouritesItem ALLOC %x", favItem );
+ TInt index;
+ TInt status = KErrNone;
+
+ switch( identifier )
+ {
+ case EIsNodeWebTargetsX:
+ status = iWebTargetManager->GetTargetFromNodeNameL( aURI, *favItem, index );
+ if( (0 != favItem) && (KErrNone == status) )
+ {
+ User::LeaveIfError( iFavDb.Delete( favItem->Uid() ) );
+ iWebTargetManager->CheckLUIDDatabaseL( ETrue );
+ //iWebTargetManager->iUiSettings->ReadBookmarksL();
+ }
+ else
+ {
+ aStatus = CSmlDmAdapter::EError;
+ }
+ break;
+
+ default:
+ aStatus = CSmlDmAdapter::EError;
+ break;
+ };
+
+ CleanupStack::PopAndDestroy( favItem );
+
+ RDEBUG( "CIsAdapter::DeleteObjectL() <" );
+ }
+
+// ------------------------------------------------------------------------------------------------
+// CIsAdapter::_DeleteObjectL
+// ------------------------------------------------------------------------------------------------
+void CIsAdapter::_DeleteObjectL( const TDesC8& aURI, const TDesC8& aLUID, TInt aStatusRef )
+ {
+ RDEBUG( "CIsAdapter::_DeleteObjectL() >" );
+
+ CSmlDmAdapter::TError status = CSmlDmAdapter::EOk;
+
+#ifdef __TARM_SYMBIAN_CONVERGENCY
+ TPtrC8 uriPtrc = NSmlDmURI::RemoveDotSlash( aURI );
+ TRAPD( reason,
+ DeleteObjectL( status, uriPtrc, aLUID ) );
+#else
+ TRAPD( reason,
+ DeleteObjectL( status, aURI, aLUID ) );
+#endif
+
+ if( KErrNone != reason )
+ {
+ RDEBUG_2( "CIsAdapter::_DeleteObjectL: Error code %d", reason );
+ status = CSmlDmAdapter::EError;
+ }
+
+ iCallBack->SetStatusL(aStatusRef, status);
+
+ RDEBUG( "CIsAdapter::_DeleteObjectL() <" );
+ }
+
+// ------------------------------------------------------------------------------------------------
+// CIsAdapter::FetchLeafObjectL
+// ------------------------------------------------------------------------------------------------
+CSmlDmAdapter::TError CIsAdapter::FetchLeafObjectL( const TDesC8& aURI, const TDesC8& /*aLUID*/,
+ TDes8& aNewMime, CBufFlat& aObject )
+ {
+ RDEBUG( "CIsAdapter::FetchLeafObjectL() >" );
+
+ // SymbianConvergency NOTE! Check _FetchLeafObjectL() <-> removes the "./" from the aURI
+
+ TBuf8<KISTBufMaxLength> mimeType;
+ CopyAndTrimMimeType(mimeType, aNewMime);
+
+ CSmlDmAdapter::TError status = CSmlDmAdapter::EOk;
+
+ CIsAdapter::TIsNodeIdentifier identifier = GetNodeIdentifier( aURI );
+
+ TInt softkeyUid;
+ HBufC8* strBuf = 0;
+ TBuf8<MAX_NUMBER_OF_DIGITS_IN_10BASE_INT64> numBuf;
+ TBuf <MAX_NUMBER_OF_DIGITS_IN_10BASE_INT64> numBuf16;
+ CFavouritesItem *favItem = CFavouritesItem::NewLC();
+ RDEBUG_2( "CIsAdapter::FetchLeafObjectL() CFavouritesItem ALLOC %x", favItem );
+ TBuf8<ISADAPTER_SHORTCUT_CAPTION_MAXLENGTH> caption;
+ TInt index;
+
+ switch( identifier )
+ {
+ case EIsNodeCustomization:
+ case EIsNodeIdleSoftkeys:
+ case EIsNodeSoftKeys:
+ case EIsNodeTargets:
+ case EIsNodeWebTargets:
+ case EIsNodeSoftKeysX:
+ case EIsNodeTargetsX:
+ case EIsNodeWebTargetsX:
+ // Empty
+ break;
+
+#ifdef IDLESOFTKEY_ADAPTER_SOFTKEY_IMAGES
+ case EIsNodeSoftKeysXImage:
+ status = CSmlDmAdapter::EError;
+ //softkeyUid = GetSoftkeyUidFromNodeNameL( NSmlDmURI::URISeg( aURI, 3 ) );
+ //GetSoftkeyImageL( softkeyUid, aObject );
+ break;
+
+#ifdef IDLESOFTKEY_ADAPTER_IMAGEMASK
+ case EIsNodeSoftKeysXMask:
+ status = CSmlDmAdapter::EError;
+ //softkeyUid = GetSoftkeyUidFromNodeNameL( NSmlDmURI::URISeg( aURI, 3 ) );
+ //GetSoftkeyImageL( softkeyUid, aObject, ETrue );
+ break;
+#endif
+#endif
+
+ case EIsNodeSoftKeysXID:
+ softkeyUid = GetSoftkeyUidFromNodeNameL( NSmlDmURI::URISeg( aURI, 3 ) );
+ numBuf.Num( softkeyUid );
+ aObject.InsertL( aObject.Size(), numBuf );
+ aObject.InsertL( aObject.Size(), KNSmlISSeparator() );
+ AddShortcutNameL( aObject, softkeyUid );
+ break;
+
+ case EIsNodeSoftKeysXTargetRef:
+ status = GetShortcutTargetURIL( aObject, GetSoftkeyUidFromNodeNameL( NSmlDmURI::URISeg( aURI, 3 ) ) );
+ break;
+
+ case EIsNodeTargetsXID:
+ iAppTargetManager->GetTargetFromNodeNameL( NSmlDmURI::URISeg( aURI, 3 ), index, caption );
+ numBuf.Num( index );
+ aObject.InsertL( aObject.Size(), numBuf );
+ break;
+
+ case EIsNodeTargetsXCaption:
+ iAppTargetManager->GetTargetFromNodeNameL( NSmlDmURI::URISeg( aURI, 3 ), index, caption );
+ aObject.InsertL( aObject.Size(), caption );
+ break;
+
+#ifndef IDLESOFTKEY_ADAPTER_SOFTKEY_IMAGES
+ case EIsNodeTargetsXImage:
+ status = CSmlDmAdapter::EError;
+ //iAppTargetManager->GetTargetFromNodeNameL( NSmlDmURI::URISeg( aURI, 3 ), index, caption );
+ //GetApplicationImageL( index, aObject );
+ break;
+
+#ifdef IDLESOFTKEY_ADAPTER_IMAGEMASK
+ case EIsNodeTargetsXImageMask:
+ status = CSmlDmAdapter::EError;
+ //iAppTargetManager->GetTargetFromNodeNameL( NSmlDmURI::URISeg( aURI, 3 ), index, caption );
+ //GetApplicationImageL( index, aObject, ETrue );
+ break;
+#endif
+#endif
+
+ case EIsNodeTargetsXDescription:
+ iAppTargetManager->GetTargetFromNodeNameL( NSmlDmURI::URISeg( aURI, 3 ), index, caption );
+ aObject.InsertL( aObject.Size(), caption );
+ break;
+
+ case EIsNodeWebTargetsXID:
+ case EIsNodeWebTargetsXDescription:
+ case EIsNodeWebTargetsXURL:
+ case EIsNodeWebTargetsXUserName:
+ case EIsNodeWebTargetsXPassword:
+ case EIsNodeWebTargetsXCaption:
+ {
+ iWebTargetManager->PrepareItemL( aURI, *favItem, index );
+ switch( identifier )
+ {
+ case EIsNodeWebTargetsXID:
+ numBuf16.Num( favItem->Uid() );
+ strBuf = CTARMCharConv::ConvertToUtf8LC( numBuf16 );
+ aObject.InsertL( aObject.Size(), *strBuf );
+ break;
+
+ case EIsNodeWebTargetsXDescription:
+ strBuf = CTARMCharConv::ConvertToUtf8LC( favItem->Name() );
+ aObject.InsertL( aObject.Size(), *strBuf );
+ break;
+
+ case EIsNodeWebTargetsXURL:
+ strBuf = CTARMCharConv::ConvertToUtf8LC( favItem->Url() );
+ aObject.InsertL( aObject.Size(), *strBuf );
+ break;
+
+ case EIsNodeWebTargetsXUserName:
+ status = CSmlDmAdapter::EError;
+
+ //strBuf = CTARMCharConv::ConvertToUtf8LC( favItem->UserName() );
+ //aObject.InsertL( aObject.Size(), *strBuf );
+ break;
+
+ case EIsNodeWebTargetsXPassword:
+ status = CSmlDmAdapter::EError;
+
+ //strBuf = CTARMCharConv::ConvertToUtf8LC( favItem->Password() );
+ //aObject.InsertL( aObject.Size(), *strBuf );
+ break;
+
+ case EIsNodeWebTargetsXCaption:
+ strBuf = CTARMCharConv::ConvertToUtf8LC( favItem->Name() );
+ aObject.InsertL( aObject.Size(), *strBuf );
+ break;
+ }
+ if(strBuf!=NULL)
+ {
+ CleanupStack::PopAndDestroy( strBuf );
+ }
+ iWebTargetManager->ReleaseItemL( *favItem, EFalse );
+ }
+ break;
+
+ case EIsNodeWebTargetsXConRef:
+ {
+ iWebTargetManager->PrepareItemL( aURI, *favItem, index );
+
+ TFavouritesWapAp wapAp = favItem->WapAp();
+ if( wapAp.IsDefault() )
+ {
+ aObject.InsertL( aObject.Size(), KDefaultApName8() );
+ }
+ else if( wapAp.IsNull() )
+ {
+ // Leave empty
+ }
+ else
+ {
+ CNSmlDMIAPMatcher *matcher = CNSmlDMIAPMatcher::NewLC( iCallBack );
+ TInt id = wapAp.ApId();
+ HBufC8* buf = matcher->URIFromIAPIdL( id );
+ if( 0 == buf )
+ {
+ User::Leave( KErrNotFound );
+ }
+ CleanupStack::PushL( buf );
+ aObject.InsertL( aObject.Size(), *buf );
+ CleanupStack::PopAndDestroy( buf );
+ CleanupStack::PopAndDestroy( matcher );
+ }
+
+ iWebTargetManager->ReleaseItemL( *favItem, EFalse );
+ }
+ break;
+
+#ifndef IDLESOFTKEY_ADAPTER_SOFTKEY_IMAGES
+ case EIsNodeWebTargetsXImage:
+ status = CSmlDmAdapter::EError;
+ //iWebTargetManager->PrepareItemL( aURI, *favItem, index );
+ //GetBookmarkImageL( index, aObject );
+ //iWebTargetManager->ReleaseItemL( *favItem, EFalse );
+ break;
+
+#ifdef IDLESOFTKEY_ADAPTER_IMAGEMASK
+ case EIsNodeWebTargetsXImageMask:
+ status = CSmlDmAdapter::EError;
+ //iWebTargetManager->PrepareItemL( aURI, *favItem, index );
+ //GetBookmarkImageL( index, aObject, ETrue );
+ //iWebTargetManager->ReleaseItemL( *favItem, EFalse );
+ break;
+#endif
+#endif
+
+ default:
+ status = CSmlDmAdapter::EError;
+ break;
+ };
+
+ CleanupStack::PopAndDestroy( favItem );
+
+ RDEBUG_2( "CIsAdapter::FetchLeafObjectL() < %d", (TInt)status );
+ return status;
+ }
+
+// ------------------------------------------------------------------------------------------------
+// CIsAdapter::_FetchLeafObjectL
+// ------------------------------------------------------------------------------------------------
+void CIsAdapter::_FetchLeafObjectL( const TDesC8& aURI, const TDesC8& aLUID,
+ const TDesC8& aType, TInt aResultsRef,
+ TInt aStatusRef )
+ {
+ RDEBUG("CIsAdapter::_FetchLeafObjectL() >");
+
+ TBuf8<KISTBufMaxLength> mimeType;
+ CopyAndTrimMimeType(mimeType, aType);
+
+ CSmlDmAdapter::TError status = CSmlDmAdapter::EOk;
+
+ CBufFlat *object = CBufFlat::NewL(128);
+ CleanupStack::PushL( object );
+
+#ifdef __TARM_SYMBIAN_CONVERGENCY
+ TPtrC8 uriPtrc = NSmlDmURI::RemoveDotSlash( aURI );
+ TRAPD(
+ reason,
+ status = FetchLeafObjectL( uriPtrc, aLUID, mimeType, *object ) );
+#else
+ TRAPD(
+ reason,
+ status = FetchLeafObjectL( aURI, aLUID, mimeType, *object ) );
+#endif
+
+ if( KErrNone != reason )
+ {
+ RDEBUG_2( "CIsAdapter::_FetchLeafObjectL: Error code %d", reason);
+ status = CSmlDmAdapter::EError;
+ }
+
+ iCallBack->SetStatusL(aStatusRef, status);
+
+ if( status == CSmlDmAdapter::EOk)
+ {
+ object->Compress();
+ iCallBack->SetResultsL( aResultsRef, *object, mimeType );
+ }
+
+ CleanupStack::PopAndDestroy( object );
+
+ RDEBUG("CIsAdapter::_FetchLeafObjectL() <");
+ }
+
+// ------------------------------------------------------------------------------------------------
+// CIsAdapter::_FetchLeafObjectSizeL
+// ------------------------------------------------------------------------------------------------
+void CIsAdapter::_FetchLeafObjectSizeL( const TDesC8& aURI, const TDesC8& aLUID,
+ const TDesC8& aType, TInt aResultsRef,
+ TInt aStatusRef )
+ {
+ RDEBUG("CIsAdapter::_FetchLeafObjectSizeL() >");
+
+ TBuf8<KISTBufMaxLength> mimeType;
+ CopyAndTrimMimeType(mimeType, aType);
+
+ CSmlDmAdapter::TError status = CSmlDmAdapter::EOk;
+
+ CBufFlat *object = CBufFlat::NewL(128);
+ CleanupStack::PushL( object );
+
+#ifdef __TARM_SYMBIAN_CONVERGENCY
+ TPtrC8 uriPtrc = NSmlDmURI::RemoveDotSlash( aURI );
+ TRAPD(
+ reason,
+ status = FetchLeafObjectL( uriPtrc, aLUID, mimeType, *object ) );
+#else
+ TRAPD(
+ reason,
+ status = FetchLeafObjectL( aURI, aLUID, mimeType, *object ) );
+#endif
+
+ if( KErrNone != reason )
+ {
+ RDEBUG_2( "CIsAdapter::_FetchLeafObjectSizeL: Error code %d", reason);
+ status = CSmlDmAdapter::EError;
+ }
+
+ iCallBack->SetStatusL(aStatusRef, status);
+
+ if( status == CSmlDmAdapter::EOk)
+ {
+ TBuf8<MAX_NUMBER_OF_DIGITS_IN_10BASE_INT64> numBuf;
+ object->Compress();
+
+ CBufFlat *object2 = CBufFlat::NewL(128);
+ CleanupStack::PushL( object2 );
+
+ numBuf.Num(object->Size());
+ object2->InsertL(0, numBuf);
+ object2->Compress();
+ iCallBack->SetResultsL( aResultsRef, *object2, KNSmlISTextPlain );
+
+ CleanupStack::PopAndDestroy( object2 );
+ }
+
+ CleanupStack::PopAndDestroy( object );
+
+ RDEBUG("CIsAdapter::_FetchLeafObjectSizeL() <");
+ }
+
+// ------------------------------------------------------------------------------------------------
+// CIsAdapter::_ChildURIListL
+// ------------------------------------------------------------------------------------------------
+void CIsAdapter::_ChildURIListL( const TDesC8& aURI, const TDesC8& /*aLUID*/,
+ const CArrayFix<TSmlDmMappingInfo>& /*aPreviousURISegmentList*/,
+ TInt aResultsRef, TInt aStatusRef )
+ {
+ RDEBUG( "CIsAdapter::_ChildURIListL() >" );
+
+ CSmlDmAdapter::TError ret = CSmlDmAdapter::EOk;
+
+ CBufFlat *currentList = CBufFlat::NewL(128);
+ CleanupStack::PushL(currentList);
+
+#ifdef __TARM_SYMBIAN_CONVERGENCY
+ TPtrC8 uriPtrc = NSmlDmURI::RemoveDotSlash( aURI );
+ CIsAdapter::TIsNodeIdentifier identifier = GetNodeIdentifier( uriPtrc );
+#else
+ CIsAdapter::TIsNodeIdentifier identifier = GetNodeIdentifier( aURI );
+#endif
+
+ switch( identifier )
+ {
+ case EIsNodeCustomization:
+ currentList->InsertL(currentList->Size(),KNSmlIS_IdleSoftKeyNodeName());
+ break;
+
+ case EIsNodeIdleSoftkeys:
+ currentList->InsertL(currentList->Size(),KNSmlIS_SoftKeysNodeName());
+ currentList->InsertL(currentList->Size(),KNSmlISSeparator());
+ currentList->InsertL(currentList->Size(),KNSmlIS_TargetsNodeName());
+ currentList->InsertL(currentList->Size(),KNSmlISSeparator());
+ currentList->InsertL(currentList->Size(),KNSmlIS_WebTargetsNodeName());
+ break;
+
+ case EIsNodeSoftKeys:
+ ListSoftkeysL( *currentList );
+ break;
+
+ case EIsNodeTargets:
+ iAppTargetManager->ListTargetsL( *currentList );
+ break;
+
+ case EIsNodeWebTargets:
+
+ //User::LeaveIfError( iUiSrv.UpdateShortcutTargetList() );
+ iWebTargetManager->ListWebTargetsL( *currentList );
+ iWebTargetManager->CheckLUIDDatabaseL( ETrue );
+ break;
+
+ case EIsNodeSoftKeysX:
+ currentList->InsertL(currentList->Size(),KNSmlIS_SoftkeysIDNodeName());
+ currentList->InsertL(currentList->Size(),KNSmlISSeparator());
+ currentList->InsertL(currentList->Size(),KNSmlIS_SoftkeysTargetRefNodeName());
+#ifdef IDLESOFTKEY_ADAPTER_SOFTKEY_IMAGES
+ currentList->InsertL(currentList->Size(),KNSmlISSeparator());
+ currentList->InsertL(currentList->Size(),KNSmlIS_SoftkeysImageNoneName());
+#ifdef IDLESOFTKEY_ADAPTER_IMAGEMASK
+ currentList->InsertL(currentList->Size(),KNSmlISSeparator());
+ currentList->InsertL(currentList->Size(),KNSmlIS_SoftkeysMaskNodeName());
+#endif
+#endif
+ break;
+
+ case EIsNodeTargetsX:
+ currentList->InsertL(currentList->Size(),KNSmlIS_TargetsIDNodeName());
+ currentList->InsertL(currentList->Size(),KNSmlISSeparator());
+ currentList->InsertL(currentList->Size(),KNSmlIS_TargetsDescriptionNodeName());
+ currentList->InsertL(currentList->Size(),KNSmlISSeparator());
+ currentList->InsertL(currentList->Size(),KNSmlIS_TargetsCaptionName());
+#ifndef IDLESOFTKEY_ADAPTER_SOFTKEY_IMAGES
+ currentList->InsertL(currentList->Size(),KNSmlISSeparator());
+ currentList->InsertL(currentList->Size(),KNSmlIS_TargetsImageNodeName());
+#ifdef IDLESOFTKEY_ADAPTER_IMAGEMASK
+ currentList->InsertL(currentList->Size(),KNSmlISSeparator());
+ currentList->InsertL(currentList->Size(),KNSmlIS_TargetsMaskNodeName());
+#endif
+#endif
+ break;
+
+ case EIsNodeWebTargetsX:
+ currentList->InsertL(currentList->Size(),KNSmlIS_WebTargetsIDNodeName());
+ currentList->InsertL(currentList->Size(),KNSmlISSeparator());
+ currentList->InsertL(currentList->Size(),KNSmlIS_WebTargetsDescriptionNodeName());
+ currentList->InsertL(currentList->Size(),KNSmlISSeparator());
+ currentList->InsertL(currentList->Size(),KNSmlIS_WebTargetsURLNodeName());
+ currentList->InsertL(currentList->Size(),KNSmlISSeparator());
+ currentList->InsertL(currentList->Size(),KNSmlIS_WebTargetsUserNameNodeName());
+ currentList->InsertL(currentList->Size(),KNSmlISSeparator());
+ currentList->InsertL(currentList->Size(),KNSmlIS_WebTargetsPasswordNodeName());
+ currentList->InsertL(currentList->Size(),KNSmlISSeparator());
+ currentList->InsertL(currentList->Size(),KNSmlIS_WebTargetsConRefNodeName());
+ currentList->InsertL(currentList->Size(),KNSmlISSeparator());
+ currentList->InsertL(currentList->Size(),KNSmlIS_WebTargetsCaptionNodeName());
+#ifndef IDLESOFTKEY_ADAPTER_SOFTKEY_IMAGES
+ currentList->InsertL(currentList->Size(),KNSmlISSeparator());
+ currentList->InsertL(currentList->Size(),KNSmlIS_WebTargetsImageNodeName());
+#ifdef IDLESOFTKEY_ADAPTER_IMAGEMASK
+ currentList->InsertL(currentList->Size(),KNSmlISSeparator());
+ currentList->InsertL(currentList->Size(),KNSmlIS_WebTargetsMaskNodeName());
+#endif
+#endif
+ break;
+
+ case EIsNodeSoftKeysXID:
+ case EIsNodeSoftKeysXTargetRef:
+#ifdef IDLESOFTKEY_ADAPTER_SOFTKEY_IMAGES
+ case EIsNodeSoftKeysXImage:
+#ifdef IDLESOFTKEY_ADAPTER_IMAGEMASK
+ case EIsNodeSoftKeysXMask:
+#endif
+#endif
+ // Empty
+ break;
+
+ case EIsNodeTargetsXID:
+ case EIsNodeTargetsXDescription:
+ case EIsNodeTargetsXCaption:
+#ifndef IDLESOFTKEY_ADAPTER_SOFTKEY_IMAGES
+ case EIsNodeTargetsXImage:
+#ifdef IDLESOFTKEY_ADAPTER_IMAGEMASK
+ case EIsNodeTargetsXImageMask:
+#endif
+#endif
+ // Empty
+ break;
+
+ case EIsNodeWebTargetsXID:
+ case EIsNodeWebTargetsXDescription:
+ case EIsNodeWebTargetsXURL:
+ case EIsNodeWebTargetsXUserName:
+ case EIsNodeWebTargetsXPassword:
+ case EIsNodeWebTargetsXConRef:
+ case EIsNodeWebTargetsXCaption:
+#ifndef IDLESOFTKEY_ADAPTER_SOFTKEY_IMAGES
+ case EIsNodeWebTargetsXImage:
+#ifdef IDLESOFTKEY_ADAPTER_IMAGEMASK
+ case EIsNodeWebTargetsXImageMask:
+#endif
+#endif
+ // Empty
+ break;
+
+ default:
+#ifdef __TARM_SYMBIAN_CONVERGENCY
+ if( uriPtrc.Length() == 0 )
+#else
+ if( aURI.Length() == 0 )
+#endif
+ {
+ currentList->InsertL(0,KNSmlCustomizationNodeName());
+ }
+ else
+ {
+ ret = CSmlDmAdapter::ENotFound;
+ }
+ break;
+ }
+
+ iCallBack->SetStatusL(aStatusRef, ret);
+
+ if( ret == CSmlDmAdapter::EOk )
+ {
+ iCallBack->SetResultsL(aResultsRef, *currentList, KNSmlISTextPlain);
+ }
+
+ CleanupStack::PopAndDestroy( currentList );
+
+ RDEBUG( "CIsAdapter::_ChildURIListL() <" );
+ }
+
+// ------------------------------------------------------------------------------------------------
+// CIsAdapter::AddNodeObjectL
+// ------------------------------------------------------------------------------------------------
+void CIsAdapter::AddNodeObjectL( CSmlDmAdapter::TError &aStatus, const TDesC8& aURI,
+ const TDesC8& /*aParentLUID*/ )
+ {
+ RDEBUG( "CIsAdapter::AddNodeObjectL() >" );
+
+ // SymbianConvergency NOTE! See _AddNodeObjectL() <-> it removes the "./" from aURI
+
+ CIsAdapter::TIsNodeIdentifier identifier = GetNodeIdentifier( aURI );
+
+ HBufC8* dataH = HBufC8::NewLC( KRepositoryEntryMaxLength );
+ RDEBUG_2( "CIsAdapter::AddNodeObjectL() HBufC8 dataH ALLOC %x", dataH);
+ TPtr8 data( dataH->Des() );
+ TInt index = -1;
+ TInt ret = KErrNone;
+
+ switch( identifier )
+ {
+ case EIsNodeWebTargetsX:
+ {
+ TRAPD( reason,
+ ret =
+ iWebTargetManager->GetTargetFromNodeNameL( aURI, index ) ); // Ignore index
+ if( (KErrNone != reason) || (KErrNone != ret) )
+ {
+ RDEBUG_2( "CIsAdapter::AddNodeObjectL: New WebTarget (%d)", reason);
+ CFavouritesItem *favItem = CFavouritesItem::NewLC();
+ RDEBUG_2( "CIsAdapter::AddNodeObjectL() CFavouritesItem ALLOC %x", favItem);
+
+ TPtrC8 namePtr( NSmlDmURI::LastURISeg(aURI) );
+ HBufC* nameBuf = HBufC::NewLC( namePtr.Length() );
+ RDEBUG_2( "CIsAdapter::AddNodeObjectL() HBufC nameBuf ALLOC %x", nameBuf);
+
+ nameBuf->Des().Copy( namePtr );
+ favItem->SetNameL( *nameBuf );
+ CleanupStack::PopAndDestroy( nameBuf );
+
+ favItem->SetUrlL(_L("http://"));
+ favItem->SetParentFolder(KFavouritesRootUid);
+
+ if( KErrNone == iFavDb.Add( *favItem, ETrue ) )
+ {
+ TBuf8<MAX_NUMBER_OF_DIGITS_IN_10BASE_INT64> newUID;
+ newUID.Num( favItem->Uid() );
+
+ if( KErrNone == iWebTargetManager->FindLUIDByURIL( aURI, data, index ) )
+ {
+ aStatus = CSmlDmAdapter::EAlreadyExists;
+ }
+
+ /*
+ else
+ if( KErrNone == iWebTargetManager->FindURIByLUIDL( data, newUID, index ) )
+ {
+ aStatus = CSmlDmAdapter::EAlreadyExists;
+ }*/
+ else
+ {
+ RDEBUG8_2( "CIsAdapter::AddNodeObjectL: New WebTarget UID=%S", &newUID );
+ iWebTargetManager->FindURIByLUIDL( data, newUID, index ); // Replace if LUid exists...
+ iWebTargetManager->UpdateLUIDDatabaseL( aURI, newUID, index );
+ iCallBack->SetMappingL( aURI, newUID );
+ }
+ }
+ else
+ {
+ aStatus = CSmlDmAdapter::EError;
+ }
+
+ CleanupStack::PopAndDestroy( favItem );
+ }
+ else
+ {
+ aStatus = CSmlDmAdapter::EAlreadyExists;
+ }
+ }
+ break;
+
+ default:
+ aStatus = CSmlDmAdapter::EError;
+ break;
+ };
+
+ CleanupStack::PopAndDestroy(dataH);
+
+ RDEBUG( "CIsAdapter::AddNodeObjectL() <" );
+ }
+
+// ------------------------------------------------------------------------------------------------
+// CIsAdapter::_AddNodeObjectL
+// ------------------------------------------------------------------------------------------------
+void CIsAdapter::_AddNodeObjectL( const TDesC8& aURI, const TDesC8& aParentLUID, TInt aStatusRef )
+ {
+ RDEBUG( "CIsAdapter::_AddNodeObjectL() >" );
+
+ CSmlDmAdapter::TError status = CSmlDmAdapter::EOk;
+
+#ifdef __TARM_SYMBIAN_CONVERGENCY
+ TPtrC8 uriPtrc = NSmlDmURI::RemoveDotSlash( aURI );
+ TRAPD(
+ reason,
+ AddNodeObjectL( status, uriPtrc, aParentLUID ) );
+#else
+ TRAPD(
+ reason,
+ AddNodeObjectL( status, aURI, aParentLUID ) );
+#endif
+
+ if( KErrNone != reason )
+ {
+ RDEBUG_2( "CIsAdapter::_AddNodeObjectL: Error code %d", reason);
+ status = CSmlDmAdapter::EError;
+ }
+
+ iCallBack->SetStatusL(aStatusRef, status);
+
+ RDEBUG( "CIsAdapter::_AddNodeObjectL() <" );
+ }
+
+// ------------------------------------------------------------------------------------------------
+// CIsAdapter::_ExecuteCommandL
+// ------------------------------------------------------------------------------------------------
+void CIsAdapter::_ExecuteCommandL( const TDesC8& /*aURI*/, const TDesC8& /*aLUID*/,
+ const TDesC8& /*aArgument*/, const TDesC8& /*aType*/,
+ TInt aStatusRef )
+ {
+ RDEBUG( "CIsAdapter::_ExecuteCommandL() >" );
+
+ CSmlDmAdapter::TError ret = CSmlDmAdapter::EError;
+ iCallBack->SetStatusL(aStatusRef, ret);
+
+ RDEBUG( "CIsAdapter::_ExecuteCommandL() <" );
+ }
+
+// ------------------------------------------------------------------------------------------------
+// CIsAdapter::_ExecuteCommandL
+// ------------------------------------------------------------------------------------------------
+void CIsAdapter::_ExecuteCommandL( const TDesC8& /*aURI*/, const TDesC8& /*aLUID*/,
+ RWriteStream*& /*aStream*/, const TDesC8& /*aType*/,
+ TInt aStatusRef )
+ {
+ RDEBUG( "CIsAdapter::_ExecuteCommandL() (stream) >" );
+
+ CSmlDmAdapter::TError ret = CSmlDmAdapter::EError;
+ iCallBack->SetStatusL(aStatusRef, ret);
+
+ RDEBUG( "CIsAdapter::_ExecuteCommandL() (stream) <" );
+ }
+
+// ------------------------------------------------------------------------------------------------
+// CIsAdapter::_CopyCommandL
+// ------------------------------------------------------------------------------------------------
+void CIsAdapter::_CopyCommandL( const TDesC8& /*aTargetURI*/, const TDesC8& /*aTargetLUID*/,
+ const TDesC8& /*aSourceURI*/, const TDesC8& /*aSourceLUID*/,
+ const TDesC8& /*aType*/, TInt aStatusRef )
+ {
+ RDEBUG( "CIsAdapter::_CopyCommandL() >" );
+
+ CSmlDmAdapter::TError ret = CSmlDmAdapter::EError;
+ iCallBack->SetStatusL(aStatusRef, ret);
+
+ RDEBUG( "CIsAdapter::_CopyCommandL() <" );
+ }
+
+// ------------------------------------------------------------------------------------------------
+// CIsAdapter::StartAtomicL
+// ------------------------------------------------------------------------------------------------
+void CIsAdapter::StartAtomicL()
+ {
+ RDEBUG( "CIsAdapter::StartAtomicL() ><" );
+ }
+
+// ------------------------------------------------------------------------------------------------
+// CIsAdapter::CommitAtomicL
+// ------------------------------------------------------------------------------------------------
+void CIsAdapter::CommitAtomicL()
+ {
+ RDEBUG( "CIsAdapter::CommitAtomicL() ><" );
+ }
+
+// ------------------------------------------------------------------------------------------------
+// CIsAdapter::RollbackAtomicL
+// ------------------------------------------------------------------------------------------------
+void CIsAdapter::RollbackAtomicL()
+ {
+ RDEBUG( "CIsAdapter::RollbackAtomicL() ><" );
+
+
+ CSmlDmAdapter::TError status = CSmlDmAdapter::ERollbackFailed;
+ iCallBack->SetStatusL(0, status);
+ }
+
+// -----------------------------------------------------------------------------
+// CIsAdapter::StreamType
+//
+// -----------------------------------------------------------------------------
+CTARMDmStreamAdapter::TAdapterStreamType CIsAdapter::StreamType( const TDesC8& /*aURI*/ )
+ {
+ RDEBUG( "CIsAdapter::StreamType()" );
+ return CTARMDmStreamAdapter::EStreamToBuffer;
+ }
+
+// ------------------------------------------------------------------------------------------------
+// CIsAdapter::StreamingSupport
+// ------------------------------------------------------------------------------------------------
+TBool CIsAdapter::StreamingSupport( TInt& aItemSize )
+ {
+ RDEBUG( "CIsAdapter::StreamingSupport()" );
+ aItemSize = 1024; // Large images are streamed
+ return EFalse; // don't support stream
+ }
+
+// ------------------------------------------------------------------------------------------------
+// CIsAdapter::CompleteOutstandingCmdsL
+// ------------------------------------------------------------------------------------------------
+void CIsAdapter::CompleteOutstandingCmdsL()
+ {
+ RDEBUG( "CIsAdapter::CompleteOutstandingCmdsL() ><" );
+ }
+
+// ------------------------------------------------------------------------------------------------
+// ImplementationTable
+// ------------------------------------------------------------------------------------------------
+const TImplementationProxy ImplementationTable[] =
+ {
+ { { KNSmlDMISAdapterImplUidValue }, (TProxyNewLPtr)CIsAdapter::NewL }
+ };
+
+// ------------------------------------------------------------------------------------------------
+// ImplementationGroupProxy
+// ------------------------------------------------------------------------------------------------
+EXPORT_C const TImplementationProxy* ImplementationGroupProxy( TInt& aTableCount )
+ {
+ aTableCount = sizeof(ImplementationTable) / sizeof(TImplementationProxy);
+ return ImplementationTable;
+ }
+
+// ------------------------------------------------------------------------------------------------
+// CIsAdapter::ConstructL
+// ------------------------------------------------------------------------------------------------
+void CIsAdapter::ConstructL(MSmlDmCallback *aDmCallback)
+ {
+ RDEBUG( "CIsAdapter::ConstructL() >" );
+
+ TRAPD( errf, FeatureManager::InitializeLibL() );
+ if( errf != KErrNone )
+ {
+ User::Leave(errf);
+ }
+
+ if(FeatureManager::FeatureSupported(KFeatureIdSapIdleSoftkeyAdapter))
+ {
+ iCallBack = aDmCallback;
+
+ //User::LeaveIfError( iUiSrv.Connect() );
+ //iUiSrv.UpdateShortcutTargetList();
+
+ User::LeaveIfError( iFavSession.Connect() );
+ User::LeaveIfError( iFavDb.Open( iFavSession, KBrowserBookmarks ) );
+
+ TInt count = 0;
+ // Get / create the count
+ //
+ CRepository* rep = CRepository::NewLC( KNSmlDMISAdapterCentRepUid );
+ RDEBUG_2( "CIsAdapter::ConstructL() CRepository ALLOC %x", rep);
+
+ TInt ret = rep->Get((TUint32)KRepositoryIdBookmarkCount, count);
+ if( ret == KErrNotFound )
+ {
+ ret = rep->Create((TUint32)KRepositoryIdBookmarkCount, count);
+ }
+
+ CleanupStack::PopAndDestroy( rep );
+
+ iWebTargetManager = new (ELeave) CIdleSoftkeysWebTargetManager(
+ iCallBack,
+ iFavDb
+ );
+ iWebTargetManager->CheckLUIDDatabaseL( EFalse );
+
+ iAppTargetManager = new (ELeave) CIdleSoftkeysAppTargetManager(
+ iCallBack
+
+ );
+ // just creating a pointer to the class
+ // this needs to be initialized before it is used
+ // to initialize we use ReadBookmarksL and ReadTargetsL function
+ iUiSettings = CUiSettingsUtil::NewL( );
+
+ RDEBUG( "CIsAdapter::ConstructL() <" );
+ }
+ else
+ {
+ FeatureManager::UnInitializeLib();
+ User::Leave( KErrNotSupported );
+ }
+
+ }
+
+// -------------------------------------------------------------------------------------
+// CIsAdapter::FillNodeInfoL()
+// Fills the node info in ddf structure
+// -------------------------------------------------------------------------------------
+void CIsAdapter::FillNodeInfoL( MSmlDmDDFObject& aNode,TSmlDmAccessTypes aAccTypes,
+ MSmlDmDDFObject::TOccurence aOccurrence, MSmlDmDDFObject::TScope aScope,
+ MSmlDmDDFObject::TDFFormat aFormat,const TDesC8& aDescription,const TDesC8& aMimeType)
+ {
+ RDEBUG( "CIsAdapter::FillNodeInfoL() >" );
+
+ aNode.SetAccessTypesL(aAccTypes);
+ aNode.SetOccurenceL(aOccurrence);
+ aNode.SetScopeL(aScope);
+ aNode.SetDFFormatL(aFormat);
+ aNode.SetDescriptionL(aDescription);
+ if(aMimeType.Length() > 0)
+ {
+ aNode.AddDFTypeMimeTypeL(aMimeType);
+ }
+
+ RDEBUG( "CIsAdapter::FillNodeInfoL() <" );
+ }
+
+// -------------------------------------------------------------------------------------
+// CIsAdapter::GetNodeIdentifier
+// -------------------------------------------------------------------------------------
+CIsAdapter::TIsNodeIdentifier CIsAdapter::GetNodeIdentifier(const TDesC8& aURI)
+ {
+ RDEBUG( "CIsAdapter::GetNodeIdentifier() >" );
+
+ // SymbianConvergency NOTE! Look _DeleteObjectL() <-> removes the "./" from the aURI !!
+
+ TInt numOfSegs = NSmlDmURI::NumOfURISegs( aURI );
+ if(numOfSegs == 0)
+ {
+ return CIsAdapter::EIsNodeNotUsedAndAlwaysLast;
+ }
+
+ TPtrC8I seg1 = NSmlDmURI::URISeg( aURI, 0 );
+
+ if(seg1 == KNSmlCustomizationNodeName)
+ {
+ if(numOfSegs == 1)
+ {
+ return EIsNodeCustomization;
+ }
+
+ // At least 2 segments
+ TPtrC8I seg2 = NSmlDmURI::URISeg( aURI, 1 );
+ if(seg2 == KNSmlIS_IdleSoftKeyNodeName)
+ {
+ if(numOfSegs == 2)
+ {
+ return CIsAdapter::EIsNodeIdleSoftkeys;
+ }
+
+ // At least 3 segments
+ TPtrC8I seg3 = NSmlDmURI::URISeg( aURI, 2 );
+ if(seg3 == KNSmlIS_SoftKeysNodeName)
+ {
+ if(numOfSegs == 3)
+ {
+ return CIsAdapter::EIsNodeSoftKeys;
+ }
+
+ // At least 4 segments
+ if(numOfSegs == 4)
+ {
+ return CIsAdapter::EIsNodeSoftKeysX;
+ }
+
+ // At least 5 segments
+ TPtrC8I seg5 = NSmlDmURI::URISeg( aURI, 4 );
+ if(seg5 == KNSmlIS_SoftkeysIDNodeName)
+ {
+ return CIsAdapter::EIsNodeSoftKeysXID;
+ }
+ else
+ if(seg5 == KNSmlIS_SoftkeysTargetRefNodeName)
+ {
+ return CIsAdapter::EIsNodeSoftKeysXTargetRef;
+ }
+#ifdef IDLESOFTKEY_ADAPTER_SOFTKEY_IMAGES
+ else
+ if(seg5 == KNSmlIS_SoftkeysImageNoneName)
+ {
+ return CIsAdapter::EIsNodeSoftKeysXImage;
+ }
+#ifdef IDLESOFTKEY_ADAPTER_IMAGEMASK
+ else
+ if(seg5 == KNSmlIS_SoftkeysMaskNodeName)
+ {
+ return CIsAdapter::EIsNodeSoftKeysXMask;
+ }
+#endif
+#endif
+ else
+ {
+ return CIsAdapter::EIsNodeNotUsedAndAlwaysLast;
+ }
+ }
+ else
+ if(seg3 == KNSmlIS_TargetsNodeName)
+ {
+ if(numOfSegs == 3)
+ {
+ return CIsAdapter::EIsNodeTargets;
+ }
+
+ // At least 4 segments
+ if(numOfSegs == 4)
+ {
+ return CIsAdapter::EIsNodeTargetsX;
+ }
+
+ // At least 5 segments
+ TPtrC8I seg5 = NSmlDmURI::URISeg( aURI, 4 );
+ if(seg5 == KNSmlIS_TargetsIDNodeName)
+ {
+ return CIsAdapter::EIsNodeTargetsXID;
+ }
+ else
+ if(seg5 == KNSmlIS_TargetsDescriptionNodeName)
+ {
+ return CIsAdapter::EIsNodeTargetsXDescription;
+ }
+ // ...
+ else
+ if(seg5 == KNSmlIS_TargetsCaptionName)
+ {
+ return CIsAdapter::EIsNodeTargetsXCaption;
+ }
+#ifndef IDLESOFTKEY_ADAPTER_SOFTKEY_IMAGES
+ else
+ if(seg5 == KNSmlIS_TargetsImageNodeName)
+ {
+ return CIsAdapter::EIsNodeTargetsXImage;
+ }
+#ifdef IDLESOFTKEY_ADAPTER_IMAGEMASK
+ else
+ if(seg5 == KNSmlIS_TargetsMaskNodeName)
+ {
+ return CIsAdapter::EIsNodeTargetsXImageMask;
+ }
+#endif
+#endif
+ // ...
+ else
+
+ {
+ return CIsAdapter::EIsNodeNotUsedAndAlwaysLast;
+ }
+ }
+ else
+ if(seg3 == KNSmlIS_WebTargetsNodeName)
+ {
+ if(numOfSegs == 3)
+ {
+ return CIsAdapter::EIsNodeWebTargets;
+ }
+
+ // At least 4 segments
+ if(numOfSegs == 4)
+ {
+ return CIsAdapter::EIsNodeWebTargetsX;
+ }
+
+ // At least 5 segments
+ TPtrC8I seg5 = NSmlDmURI::URISeg( aURI, 4 );
+ if(seg5 == KNSmlIS_WebTargetsIDNodeName)
+ {
+ return CIsAdapter::EIsNodeWebTargetsXID;
+ }
+ else
+ if(seg5 == KNSmlIS_WebTargetsDescriptionNodeName)
+ {
+ return CIsAdapter::EIsNodeWebTargetsXDescription;
+ }
+ else
+ if(seg5 == KNSmlIS_WebTargetsURLNodeName)
+ {
+ return CIsAdapter::EIsNodeWebTargetsXURL;
+ }
+ else
+ if(seg5 == KNSmlIS_WebTargetsUserNameNodeName)
+ {
+ return CIsAdapter::EIsNodeWebTargetsXUserName;
+ }
+ else
+ if(seg5 == KNSmlIS_WebTargetsPasswordNodeName)
+ {
+ return CIsAdapter::EIsNodeWebTargetsXPassword;
+ }
+ else
+ if(seg5 == KNSmlIS_WebTargetsConRefNodeName)
+ {
+ return CIsAdapter::EIsNodeWebTargetsXConRef;
+ }
+ // ...
+ else
+ if(seg5 == KNSmlIS_WebTargetsCaptionNodeName)
+ {
+ return CIsAdapter::EIsNodeWebTargetsXCaption;
+ }
+#ifndef IDLESOFTKEY_ADAPTER_SOFTKEY_IMAGES
+ else
+ if(seg5 == KNSmlIS_WebTargetsImageNodeName)
+ {
+ return CIsAdapter::EIsNodeWebTargetsXImage;
+ }
+#ifdef IDLESOFTKEY_ADAPTER_IMAGEMASK
+ else
+ if(seg5 == KNSmlIS_WebTargetsMaskNodeName)
+ {
+ return CIsAdapter::EIsNodeWebTargetsXImageMask;
+ }
+#endif
+#endif
+ // ...
+ else
+ {
+ return CIsAdapter::EIsNodeNotUsedAndAlwaysLast;
+ }
+ }
+ else
+ {
+ return CIsAdapter::EIsNodeNotUsedAndAlwaysLast;
+ }
+ }
+ else
+ {
+ return CIsAdapter::EIsNodeNotUsedAndAlwaysLast;
+ }
+ }
+ else
+ {
+ return CIsAdapter::EIsNodeNotUsedAndAlwaysLast;
+ }
+
+ // Note: do not return anything here
+ }
+
+
+// -------------------------------------------------------------------------------------
+// CIsAdapter::CopyAndTrimMimeType
+// -------------------------------------------------------------------------------------
+void CIsAdapter::CopyAndTrimMimeType(TDes8& aNewMime, const TDesC8& aType)
+ {
+ RDEBUG( "CIsAdapter::CopyAndTrimMimeType() >" );
+
+ if(aNewMime.MaxLength() < aType.Length())
+ {
+ aNewMime.Copy( aType.Left(aNewMime.MaxLength()) );
+ }
+ else
+ {
+ aNewMime.Copy( aType );
+ }
+ aNewMime.TrimAll();
+ aNewMime.LowerCase();
+
+ TInt pos;
+ while(( pos = aNewMime.Locate(' ') ) != KErrNotFound)
+ {
+ aNewMime.Delete(pos, 1);
+ }
+
+ RDEBUG( "CIsAdapter::CopyAndTrimMimeType() <" );
+ }
+
+// -------------------------------------------------------------------------------------
+// CIsAdapter::ListSoftkeysL
+// -------------------------------------------------------------------------------------
+TInt CIsAdapter::ListSoftkeysL( CBufFlat &aList )
+ {
+ RDEBUG( "CIsAdapter::ListSoftkeysL() >" );
+
+ TInt i;
+ for(i=0; i<NumberOfSoftkeys/*iUiSettings->GetSoftkeyCountL()*/; i++)
+ {
+ if(i>0)
+ {
+ aList.InsertL( aList.Size(), KNSmlISSeparator() );
+ }
+
+ HBufC8* softkeyName = GenerateSoftkeyNodeNameL( i );
+ CleanupStack::PushL( softkeyName );
+
+ aList.InsertL( aList.Size(), *softkeyName );
+
+ CleanupStack::PopAndDestroy( softkeyName );
+ }
+
+ RDEBUG( "CIsAdapter::ListSoftkeysL() <" );
+ return KErrNone;
+ }
+
+// -------------------------------------------------------------------------------------
+// CIsAdapter::GenerateSoftkeyNodeNameL
+// -------------------------------------------------------------------------------------
+HBufC8* CIsAdapter::GenerateSoftkeyNodeNameL(TInt aIndex )
+ {
+ RDEBUG( "CIsAdapter::GenerateSoftkeyNodeNameL() >" );
+
+ TInt index = aIndex;
+
+ HBufC8* softkeyName = HBufC8::NewL( KPrefixSoftkeyNodeName().Length()
+ + MAX_NUMBER_OF_DIGITS_IN_10BASE_INT64 );
+
+ TPtr8 ptr( softkeyName->Des() );
+
+ ptr.Format(KFormatSoftkeyNodeName, index+1);
+
+ RDEBUG8_2( "CIsAdapter::GenerateSoftkeyNodeNameL() < %S", &softkeyName );
+ return softkeyName;
+ }
+
+// -------------------------------------------------------------------------------------
+// CIsAdapter::GetSoftkeyIndexFromUid
+// -------------------------------------------------------------------------------------
+TInt CIsAdapter::GetSoftkeyIndexFromUid( TInt aUid )
+ {
+ RDEBUG( "CIsAdapter::GetSoftkeyIndexFromUid() >" );
+
+ switch( aUid )
+ {
+ case KScActionTypeUidValueSoftkeyLeft:
+ return 0;
+ case KScActionTypeUidValueSoftkeyRight:
+ return 1;
+ case KScActionTypeUidValueScrollkeyLeft:
+ return 2;
+ case KScActionTypeUidValueScrollkeyRight:
+ return 3;
+ case KScActionTypeUidValueScrollkeyUp:
+ return 4;
+ case KScActionTypeUidValueScrollkeyDown:
+ return 5;
+ case KScActionTypeUidValueScrollkeySelect:
+ return 6;
+ case KActiveIdleScUidValueItem1:
+ return 7;
+ case KActiveIdleScUidValueItem2:
+ return 8;
+ case KActiveIdleScUidValueItem3:
+ return 9;
+ case KActiveIdleScUidValueItem4:
+ return 10;
+ case KActiveIdleScUidValueItem5:
+ return 11;
+ default:
+ return -1;
+ }
+
+ // return aUid;
+ }
+
+// -------------------------------------------------------------------------------------
+// CIsAdapter::GetSoftkeyUidFromNodeNameL
+// -------------------------------------------------------------------------------------
+TInt CIsAdapter::GetSoftkeyUidFromNodeNameL(const TDesC8& aNodeName)
+ {
+ RDEBUG( "CIsAdapter::GetSoftkeyUidFromNodeNameL() >" );
+
+ TInt index = -1;
+ TInt compareLen = KPrefixSoftkeyNodeName().Length();
+ if(aNodeName.Left(compareLen) == KFormatSoftkeyNodeName().Left(compareLen))
+ {
+ TLex8 lex;
+ lex.Assign( aNodeName );
+
+ lex.Inc( compareLen );
+ User::LeaveIfError( lex.Val(index) );
+ index--;
+ User::LeaveIfError( index>=0 && index<NumberOfSoftkeys/*iUiSettings->GetSoftkeyCountL()*/ ? KErrNone : KErrGeneral );
+
+ HBufC8* softkeyName = GenerateSoftkeyNodeNameL( index );
+ CleanupStack::PushL( softkeyName );
+
+ TPtr8 ptr( softkeyName->Des() );
+ User::LeaveIfError( ptr == aNodeName ? KErrNone : KErrGeneral );
+
+ CleanupStack::PopAndDestroy( softkeyName );
+ }
+ else
+ {
+ User::Leave( KErrNotFound );
+ }
+
+ RDEBUG_2( "CIsAdapter::GetSoftkeyUidFromNodeNameL() < %d", iSoftkeyList[ index ] );
+ return iSoftkeyList[ index ];
+ }
+
+// -------------------------------------------------------------------------------------
+// CIsAdapter::AddShortcutNameL
+// -------------------------------------------------------------------------------------
+void CIsAdapter::AddShortcutNameL(CBufFlat& aBuffer, TInt aUid)
+ {
+ RDEBUG( "CIsAdapter::AddShortcutNameL() >" );
+
+ switch( aUid )
+ {
+
+ case KScActionTypeUidValueSoftkeyLeft:
+ aBuffer.InsertL( aBuffer.Size(), KISLeftSoftkeyName() );
+ break;
+ case KScActionTypeUidValueSoftkeyRight:
+ aBuffer.InsertL( aBuffer.Size(), KISRightSoftkeyName() );
+ break;
+ case KScActionTypeUidValueScrollkeyLeft:
+ aBuffer.InsertL( aBuffer.Size(), KISScrollLeftSoftkeyName() );
+ break;
+ case KScActionTypeUidValueScrollkeyRight:
+ aBuffer.InsertL( aBuffer.Size(), KISScrollRightSoftkeyName() );
+ break;
+ case KScActionTypeUidValueScrollkeyUp:
+ aBuffer.InsertL( aBuffer.Size(), KISScrollUpSoftkeyName() );
+ break;
+ case KScActionTypeUidValueScrollkeyDown:
+ aBuffer.InsertL( aBuffer.Size(), KISScrollDownSoftkeyName() );
+ break;
+ case KScActionTypeUidValueScrollkeySelect:
+ aBuffer.InsertL( aBuffer.Size(), KISSelectionSoftkeyName() );
+ break;
+
+ case KActiveIdleScUidValueItem1:
+ aBuffer.InsertL( aBuffer.Size(), KISAISoftkeyName1() );
+ break;
+ case KActiveIdleScUidValueItem2:
+ aBuffer.InsertL( aBuffer.Size(), KISAISoftkeyName2() );
+ break;
+ case KActiveIdleScUidValueItem3:
+ aBuffer.InsertL( aBuffer.Size(), KISAISoftkeyName3() );
+ break;
+ case KActiveIdleScUidValueItem4:
+ aBuffer.InsertL( aBuffer.Size(), KISAISoftkeyName4() );
+ break;
+ case KActiveIdleScUidValueItem5:
+ aBuffer.InsertL( aBuffer.Size(), KISAISoftkeyName5() );
+ break;
+ case KActiveIdleScUidValueItem6:
+ aBuffer.InsertL( aBuffer.Size(), KISAISoftkeyName6() );
+ break;
+
+
+
+ }
+ RDEBUG( "CIsAdapter::AddShortcutNameL() <" );
+ }
+
+#ifdef IDLESOFTKEY_ADAPTER_SOFTKEY_IMAGES
+
+void CIsAdapter::GetSoftkeyImageL(
+ TInt /*aSoftkeyUid*/,
+ CBufFlat &aImageBuffer,
+ TBool /*aGetMask*//*=EFalse*/ )
+ {
+ RDEBUG( "CIsAdapter::GetSoftkeyImageL() >" );
+
+ TFileName filename;
+ TBuf8<128> mimetype;
+
+
+
+ /*
+
+ if( aGetMask )
+ {
+ User::LeaveIfError( iUiSrv.GetSoftkeyMask(
+ aSoftkeyUid,
+ filename,
+ mimetype
+ ) );
+ }
+ else
+ {
+ User::LeaveIfError( iUiSrv.GetSoftkeyBitmap(
+ aSoftkeyUid,
+ filename,
+ mimetype
+ ) );
+ }
+
+ */
+
+ RFs fileSession;
+ RFile file;
+
+ User::LeaveIfError( fileSession.Connect() );
+ CleanupClosePushL( fileSession );
+
+ //
+ // Create new temp file
+ //
+ User::LeaveIfError( file.Open( fileSession, filename, EFileRead ) );
+ CleanupClosePushL( file );
+
+ //
+ // Decode data to buffer
+ //
+ TInt size = 0;
+ file.Size( size );
+ HBufC8* buffer = HBufC8::NewLC( size );
+
+ TPtr8 ptr( 0, 0 );
+ ptr.Set( buffer->Des() );
+ User::LeaveIfError( file.Read( ptr ) );
+
+ EncodeImageL( aImageBuffer, ptr );
+
+ CleanupStack::PopAndDestroy( buffer );
+
+ // Close file
+ CleanupStack::PopAndDestroy( &file );
+
+ // Close fileSession
+ CleanupStack::PopAndDestroy( &fileSession );
+
+ RDEBUG( "CIsAdapter::GetSoftkeyImageL() <" );
+ }
+
+#endif
+
+#ifndef IDLESOFTKEY_ADAPTER_SOFTKEY_IMAGES
+
+// -------------------------------------------------------------------------------------
+// CIsAdapter::GetApplicationImageL
+// -------------------------------------------------------------------------------------
+void CIsAdapter::GetApplicationImageL(
+ TInt aIndex,
+ CBufFlat &aImageBuffer,
+ TBool aGetMask/*=EFalse*/ )
+ {
+ RDEBUG( "CIsAdapter::GetApplicationImageL() >" );
+
+ GetShortcutImageL(
+ EUiSrvRtTypeApp,
+ aIndex,
+ aImageBuffer,
+ aGetMask
+ );
+
+ RDEBUG( "CIsAdapter::GetApplicationImageL() <" );
+ }
+
+// -------------------------------------------------------------------------------------
+// CIsAdapter::GetBookmarkImageL
+// -------------------------------------------------------------------------------------
+void CIsAdapter::GetBookmarkImageL(
+ TInt aIndex,
+ CBufFlat &aImageBuffer,
+ TBool aGetMask/*=EFalse*/ )
+ {
+ RDEBUG( "CIsAdapter::GetBookmarkImageL() >" );
+
+ GetShortcutImageL(
+ EUiSrvRtTypeBm,
+ aIndex,
+ aImageBuffer,
+ aGetMask
+ );
+
+ RDEBUG( "CIsAdapter::GetBookmarkImageL() <" );
+ }
+
+#endif
+
+#ifndef IDLESOFTKEY_ADAPTER_SOFTKEY_IMAGES
+
+// -------------------------------------------------------------------------------------
+// CIsAdapter::GetShortcutImageL
+// -------------------------------------------------------------------------------------
+void CIsAdapter::GetShortcutImageL(
+ TInt aRtMask,
+ TInt aIndex,
+ CBufFlat &aImageBuffer,
+ TBool aGetMask/*=EFalse*/ )
+ {
+ RDEBUG( "CIsAdapter::GetShortcutImageL() >" );
+ TFileName filename;
+ TBuf8<128> mimetype;
+
+ if( aGetMask )
+ {
+ User::LeaveIfError( iUiSrv.GetShortcutTargetMask(
+ aRtMask,
+ aIndex,
+ filename,
+ mimetype
+ ) );
+ }
+ else
+ {
+ User::LeaveIfError( iUiSrv.GetShortcutTargetBitmap(
+ aRtMask,
+ aIndex,
+ filename,
+ mimetype
+ ) );
+ }
+
+ RFs fileSession;
+ RFile file;
+
+ User::LeaveIfError( fileSession.Connect() );
+ CleanupClosePushL( fileSession );
+
+ //
+ // Create new temp file
+ //
+ User::LeaveIfError( file.Open( fileSession, filename, EFileRead ) );
+ CleanupClosePushL( file );
+
+ //
+ // Decode data to buffer
+ //
+ TInt size = 0;
+ file.Size( size );
+ HBufC8* buffer = HBufC8::NewLC( size );
+
+ TPtr8 ptr( 0, 0 );
+ ptr.Set( buffer->Des() );
+ User::LeaveIfError( file.Read( ptr ) );
+
+ EncodeImageL( aImageBuffer, ptr );
+
+ CleanupStack::PopAndDestroy( buffer );
+
+ // Close file
+ CleanupStack::PopAndDestroy( &file );
+
+ // Close fileSession
+ CleanupStack::PopAndDestroy( &fileSession );
+
+ RDEBUG( "CIsAdapter::GetShortcutImageL() <" );
+ }
+#endif
+
+#ifdef IDLESOFTKEY_ADAPTER_SOFTKEY_IMAGES
+void CIsAdapter::SetSoftkeyImageL (
+ const TDesC8& aURI,
+ const TDesC8& aObject,
+ const TDesC8& aType)
+ {
+ RDEBUG( "CIsAdapter::SetSoftkeyImageL() >" );
+
+ // SymbianConvergency NOTE! Functions that call this function will parse off the "./"
+ // from the aURI -> no need to parse "./" here
+
+ if( aType.Length() == 0 )
+ {
+ RDEBUG( "CIsAdapter::SetSoftkeyImageL() WARNING Mime type is empty!" );
+ }
+
+ CIsAdapter::TIsNodeIdentifier identifier = GetNodeIdentifier( aURI );
+ TInt softkeyUid = 0;
+
+ if(
+
+ (EIsNodeSoftKeysXImage != identifier)
+
+#ifdef IDLESOFTKEY_ADAPTER_IMAGEMASK
+
+ && (EIsNodeSoftKeysXMask != identifier)
+
+#endif
+
+ )
+ {
+ User::Leave( KErrArgument );
+ }
+
+ //
+ // Get shortcut target index
+ //
+ switch( identifier )
+ {
+
+ // Softkeys/*
+ case EIsNodeSoftKeysXImage:
+#ifdef IDLESOFTKEY_ADAPTER_IMAGEMASK
+ case EIsNodeSoftKeysXMask:
+#endif
+ {
+ softkeyUid = GetSoftkeyUidFromNodeNameL( NSmlDmURI::URISeg( aURI, 3 ) );
+ if(softkeyUid)
+ RDEBUG_2( "CIsAdapter::GetShortcutImageL() < %d", softkeyUid );
+ }
+ break;
+
+ default:
+ User::Leave( KErrArgument );
+ break;
+
+ }
+
+ //
+ // Decode image data
+ //
+ DecodeImageToFileL( aObject );
+/*
+ switch( identifier )
+ {
+ case EIsNodeSoftKeysXImage:
+ User::LeaveIfError( iUiSrv.SetSoftkeyBitmap(
+ softkeyUid,
+ iTemporaryImageFile,
+ aType ) );
+ break;
+
+#ifdef IDLESOFTKEY_ADAPTER_IMAGEMASK
+ case EIsNodeSoftKeysXMask:
+ User::LeaveIfError( iUiSrv.SetSoftkeyMask(
+ softkeyUid,
+ iTemporaryImageFile,
+ aType ) );
+ break;
+
+#endif
+ }
+ */
+
+ RDEBUG( "CIsAdapter::SetSoftkeyImageL() <" );
+ }
+#endif
+
+#ifndef IDLESOFTKEY_ADAPTER_SOFTKEY_IMAGES
+// -------------------------------------------------------------------------------------
+// CIsAdapter::SetShortcutTargetImageL
+// -------------------------------------------------------------------------------------
+void CIsAdapter::SetShortcutTargetImageL(
+ const TDesC8& aURI,
+ const TDesC8& aObject,
+ const TDesC8& aType)
+ {
+ RDEBUG( "CIsAdapter::SetShortcutTargetImageL() >" );
+
+ // SymbianConvergency NOTE! Functions that call this function will parse off the "./"
+ // from the aURI -> no need to parse "./" here
+
+ if( aType.Length() == 0 )
+ {
+ RDEBUG( "CIsAdapter::SetShortcutTargetImageL() WARNING Mime type is empty!" );
+ }
+
+ CIsAdapter::TIsNodeIdentifier identifier = GetNodeIdentifier( aURI );
+ TInt targetIndex = 0;
+
+ if(
+ (EIsNodeTargetsXImage != identifier)
+ && (EIsNodeWebTargetsXImage != identifier)
+
+#ifdef IDLESOFTKEY_ADAPTER_IMAGEMASK
+
+ && (EIsNodeTargetsXImageMask != identifier)
+ && (EIsNodeWebTargetsXImageMask != identifier)
+
+#endif
+
+ )
+ {
+ User::Leave( KErrArgument );
+ }
+
+ //
+ // Get shortcut target index
+ //
+ switch( identifier )
+ {
+
+ // Targets/*
+ case EIsNodeTargetsXImage:
+#ifdef IDLESOFTKEY_ADAPTER_IMAGEMASK
+ case EIsNodeTargetsXImageMask:
+#endif
+ {
+ TBuf8<ISADAPTER_SHORTCUT_CAPTION_MAXLENGTH> caption;
+ iAppTargetManager->GetTargetFromNodeNameL( NSmlDmURI::URISeg( aURI, 3 ), targetIndex, caption );
+ }
+
+ break;
+
+ // WebTargets/*
+ case EIsNodeWebTargetsXImage:
+#ifdef IDLESOFTKEY_ADAPTER_IMAGEMASK
+ case EIsNodeWebTargetsXImageMask:
+#endif
+ {
+ iWebTargetManager->CheckWebTargetsL();
+ CFavouritesItem *favItem = CFavouritesItem::NewLC();
+ RDEBUG_2( _L("CIsAdapter::SetShortcutTargetImageL() CFavouritesItem ALLOC %x"), favItem);
+ if( KErrNone !=
+ iWebTargetManager->GetTargetFromNodeNameL( NSmlDmURI::URISeg( aURI, 0, 4 ), *favItem, targetIndex ) )
+ {
+ User::Leave( KErrNotFound );
+ }
+ CleanupStack::PopAndDestroy( favItem );
+ }
+
+ break;
+
+ }
+
+ //
+ // Decode image data
+ //
+ DecodeImageToFileL( aObject );
+
+ switch( identifier )
+ {
+ case EIsNodeTargetsXImage:
+ User::LeaveIfError( iUiSrv.SetShortcutTargetBitmap( EUiSrvRtTypeApp,
+ targetIndex,
+ iTemporaryImageFile,
+ aType ) );
+ break;
+
+ case EIsNodeWebTargetsXImage:
+ User::LeaveIfError( iUiSrv.SetShortcutTargetBitmap( EUiSrvRtTypeBm,
+ targetIndex,
+ iTemporaryImageFile,
+ aType ) );
+ break;
+
+#ifdef IDLESOFTKEY_ADAPTER_IMAGEMASK
+ case EIsNodeTargetsXImageMask:
+ User::LeaveIfError( iUiSrv.SetShortcutTargetMask( EUiSrvRtTypeApp,
+ targetIndex,
+ iTemporaryImageFile,
+ aType ) );
+ break;
+
+ case EIsNodeWebTargetsXImageMask:
+ User::LeaveIfError( iUiSrv.SetShortcutTargetMask( EUiSrvRtTypeBm,
+ targetIndex,
+ iTemporaryImageFile,
+ aType ) );
+ break;
+#endif
+ }
+
+ RDEBUG( "CIsAdapter::SetShortcutTargetImageL() <" );
+ }
+#endif
+
+// -------------------------------------------------------------------------------------
+// CIsAdapter::DecodeImageToFileL
+// -------------------------------------------------------------------------------------
+TInt CIsAdapter::DecodeImageToFileL( const TDesC8& aObject )
+ {
+ RDEBUG( "CIsAdapter::DecodeImageToFileL() >" );
+
+ //
+ // Write file to a temp file
+ //
+ RFs fileSession;
+ RFile file;
+
+ User::LeaveIfError( fileSession.Connect() );
+ CleanupClosePushL( fileSession );
+
+ //
+ // Delete previous temp file
+ //
+ if( iTemporaryImageFile.Length() > 0 )
+ {
+ fileSession.Delete( iTemporaryImageFile );
+ iTemporaryImageFile.Zero();
+ }
+
+ //
+ // Create new temp file
+ //
+ User::LeaveIfError( file.Temp( fileSession, KTempFilePath, iTemporaryImageFile, EFileWrite ) );
+ CleanupClosePushL( file );
+
+ //
+ // Decode data to buffer
+ //
+ CBufFlat* buffer = CBufFlat::NewL( 128 );
+ CleanupStack::PushL( buffer );
+ DecodeImageL( *buffer, aObject );
+
+ // Write buffer to file and release buffer
+ User::LeaveIfError( file.Write( buffer->Ptr(0) ) );
+ CleanupStack::PopAndDestroy( buffer );
+
+ // Close file
+ CleanupStack::PopAndDestroy( &file );
+
+ // Close fileSession
+ CleanupStack::PopAndDestroy( &fileSession );
+
+ RDEBUG( "CIsAdapter::DecodeImageToFileL() <" );
+ return KErrNone;
+ }
+
+// -------------------------------------------------------------------------------------
+// CIsAdapter::DecodeImageL
+// -------------------------------------------------------------------------------------
+void CIsAdapter::DecodeImageL( CBufFlat& aBuffer, const TDesC8& aObject )
+ {
+ RDEBUG( "CIsAdapter::DecodeImageL() >" );
+
+ //
+ // Decoce from base 64
+ //
+ TImCodecB64 B64Coder;
+ HBufC8 *uncoded = HBufC8::NewLC( ( aObject.Length() * 3 ) / 4 + 16 );
+ RDEBUG_2( "CIsAdapter::DecodeImageL() HBufC8 uncoded ALLOC %x", uncoded);
+ TPtr8 uncodedPtr( uncoded->Des() );
+
+ TBool uncodeResult = TFileCoderB64::CheckB64Encode( aObject );//
+
+ if( uncodeResult )
+ {
+ // use base64 decode
+ B64Coder.Decode( aObject, uncodedPtr );
+ aBuffer.InsertL( 0, uncodedPtr );
+ }
+ else
+ {
+ // original data
+ aBuffer.InsertL( 0, aObject );
+ }
+
+ CleanupStack::PopAndDestroy( uncoded );
+
+ RDEBUG( "CIsAdapter::DecodeImageL() <" );
+ }
+
+// -------------------------------------------------------------------------------------
+// CIsAdapter::EncodeImageL
+// -------------------------------------------------------------------------------------
+void CIsAdapter::EncodeImageL( CBufFlat& aBuffer, const TDesC8& aObject )
+ {
+ RDEBUG( "CIsAdapter::EncodeImageL() >" );
+
+ //
+ // Decoce from base 64
+ //
+ TImCodecB64 B64Coder;
+ HBufC8 *encoded = HBufC8::NewLC( ( aObject.Length() * 4 ) / 3 + 16 );
+ RDEBUG_2( "CIsAdapter::EncodeImageL() HBufC8 encoded ALLOC %x", encoded);
+ TPtr8 encodedPtr( encoded->Des() );
+ TBool encodeResult = B64Coder.Encode( aObject, encodedPtr );
+
+ aBuffer.InsertL( 0, encodedPtr );
+
+ CleanupStack::PopAndDestroy( encoded );
+
+ RDEBUG( "CIsAdapter::EncodeImageL() <" );
+ }
+
+// -------------------------------------------------------------------------------------
+// CIsAdapter::GetShortcutTargetURIL
+// -------------------------------------------------------------------------------------
+CSmlDmAdapter::TError CIsAdapter::GetShortcutTargetURIL(CBufFlat& aBuffer, TInt aUid )
+ {
+ RDEBUG( "CIsAdapter::GetShortcutTargetURIL() >" );
+
+ TInt rtType = 0;
+ if(iUiSettingsNotInitialized)
+ {
+ iUiSettings->ReadTargetsL() ;
+ iUiSettings->ReadBookmarksL() ;
+ iUiSettingsNotInitialized = EFalse;
+ }
+ iUiSettings->GetShortcutRtTypeL( aUid, rtType );
+ // TScActionType acType = TUid::Uid( aUid );
+ CSmlDmAdapter::TError retVal = CSmlDmAdapter::EOk;
+
+
+ switch( rtType )
+ {
+ default:
+ {
+ TInt index = -1;
+ User::LeaveIfError(iUiSettings->GetShortcutTargetIndexL( aUid, index ));
+
+ if( index == -1 )
+ {
+ return CSmlDmAdapter::ENotFound;
+ }
+ else
+ {
+ HBufC8* nodeName = iAppTargetManager->GenerateNodeNameL( index );
+ CleanupStack::PushL( nodeName );
+ aBuffer.InsertL( aBuffer.Size(), KNSmlCustomizationNodeName() );
+ aBuffer.InsertL( aBuffer.Size(), KNSmlISSeparator() );
+ aBuffer.InsertL( aBuffer.Size(), KNSmlIS_IdleSoftKeyNodeName() );
+ aBuffer.InsertL( aBuffer.Size(), KNSmlISSeparator() );
+ aBuffer.InsertL( aBuffer.Size(), KNSmlIS_TargetsNodeName() );
+ aBuffer.InsertL( aBuffer.Size(), KNSmlISSeparator() );
+ aBuffer.InsertL( aBuffer.Size(), *nodeName );
+ CleanupStack::PopAndDestroy( nodeName );
+
+ return CSmlDmAdapter::EOk;
+ }
+ }
+
+
+ case KScRtTypeUidValueBookmark:
+ {
+ TInt bmId = -1, index = -1;
+ User::LeaveIfError(iUiSettings->GetShortcutTargetIndexL( aUid, index ));
+ User::LeaveIfError(iUiSettings->GetWebTargetAppUid( index, bmId ));
+
+ TBuf8<MAX_NUMBER_OF_DIGITS_IN_10BASE_INT64> numBuf;
+ numBuf.Num( bmId );
+ TInt ind = -1;
+
+ HBufC8* dataH = HBufC8::NewLC( KRepositoryEntryMaxLength );
+ TPtr8 data( dataH->Des() );
+ TBool ret = iWebTargetManager->FindURIByLUIDL( data, numBuf, ind );
+ User::LeaveIfError( ret );
+
+ aBuffer.InsertL( aBuffer.Size(), data );
+
+ CleanupStack::PopAndDestroy( dataH );
+ }
+ break;
+
+ }
+
+
+ RDEBUG_2( "CIsAdapter::GetShortcutTargetURIL() < %d", retVal );
+ return retVal;
+ }
+
+// -------------------------------------------------------------------------------------
+// CIsAdapter::SetShortcutTargetL
+// -------------------------------------------------------------------------------------
+void CIsAdapter::SetShortcutTargetL(const TDesC8& aURI, TInt aUid)
+ {
+ RDEBUG8_2( "CIsAdapter::SetShortcutTargetL() > %S ", &aURI );
+
+ // SymbianConvergency NOTE! this should be ok, for the aURI part
+ if(iUiSettingsNotInitialized)
+ {
+ iUiSettings->ReadTargetsL() ;
+ iUiSettings->ReadBookmarksL() ;
+ iUiSettingsNotInitialized = EFalse;
+ }
+ TPtrC8 uri( aURI );
+ if( uri.Left(2).Compare( _L8("./") ) == 0 )
+ {
+ uri.Set( aURI.Right( aURI.Length() - 2 ) );
+ }
+
+ CIsAdapter::TIsNodeIdentifier identifier = GetNodeIdentifier( uri );
+ if( (EIsNodeTargetsX != identifier) &&
+ (EIsNodeWebTargetsX != identifier) )
+ {
+ User::Leave( KErrArgument );
+ }
+
+ HBufC16* buf = CreateCopy16LC( uri );
+ TPtrC8 targetNode = NSmlDmURI::URISeg( uri, 2 );
+ TPtrC8 segment = NSmlDmURI::URISeg( uri, 3 );
+ TInt index = -1;
+
+ if( targetNode == KNSmlIS_WebTargetsNodeName() )
+ {
+ iWebTargetManager->CheckWebTargetsL();
+ CFavouritesItem *favItem = CFavouritesItem::NewLC();
+ RDEBUG_2( "CIsAdapter::SetShortcutTargetL() CFavouritesItem ALLOC %x", favItem);
+
+ TInt status = KErrNone;
+ TRAPD( reason,
+ status = iWebTargetManager->GetTargetFromNodeNameL( uri, *favItem, index ) );
+ if( (KErrNone == reason) && (0 != favItem) && (KErrNone == status) && (-1 != index) )
+ {
+ User::LeaveIfError(iUiSettings->SetShortcutTargetWebIndexL (aUid, index));
+ }
+ else
+ {
+ RDEBUG8_2( "CIsAdapter::SetShortcutTargetL: Error in argument, WebTarget %S", &targetNode);
+ User::Leave( KErrArgument );
+ }
+
+ CleanupStack::PopAndDestroy( favItem );
+ }
+ else
+ {
+ if( targetNode == KNSmlIS_TargetsNodeName() )
+ {
+ // Set new target
+ TBuf8<ISADAPTER_SHORTCUT_CAPTION_MAXLENGTH> caption;
+ iAppTargetManager->GetTargetFromNodeNameL( segment, index, caption );
+ User::LeaveIfError(iUiSettings->SetShortcutTargetAppIndexL (aUid, index));
+ }
+ else
+ {
+ RDEBUG8_2( "CIsAdapter::SetShortcutTargetL: Error in argument, AppTarget %S", &targetNode);
+ User::Leave( KErrArgument );
+ }
+ }
+
+ CleanupStack::PopAndDestroy( buf );
+
+ RDEBUG( "CIsAdapter::SetShortcutTargetL() <" );
+ }
+
+// -------------------------------------------------------------------------------------
+// CIsAdapter::CreateCopy16LC
+// -------------------------------------------------------------------------------------
+HBufC16* CIsAdapter::CreateCopy16LC( const TDesC8& aText )
+ {
+ RDEBUG( "CIsAdapter::CreateCopy16LC() >" );
+
+ HBufC16* buf = HBufC16::NewLC( aText.Length() );
+ RDEBUG_2( "CIsAdapter::CreateCopy16LC() HBufC16 buf ALLOC %x", buf);
+ buf->Des().Copy( aText );
+
+ RDEBUG( "CIsAdapter::CreateCopy16LC() <" );
+ return buf;
+ }
+
+// -----------------------------------------------------------------------------
+// CIsAdapter::PolicyRequestResourceL
+// -----------------------------------------------------------------------------
+//
+//#ifdef __SAP_POLICY_MANAGEMENT
+TPtrC8 CIsAdapter::PolicyRequestResourceL( const TDesC8& /*aURI*/ )
+{
+ if(! FeatureManager::FeatureSupported(KFeatureIdSapPolicyManagement ))
+ {
+ User::Leave(KErrNotSupported);
+ }
+
+ RDEBUG8_2( "CIsAdapter::PolicyRequestResourceL() >< %S",
+ &PolicyEngineXACML::KCustomizationManagement() );
+
+ return PolicyEngineXACML::KCustomizationManagement();
+
+}
+//#endif
+