--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/wmdrm/camese/wmdrmdlautils/src/wmdrmdlaui.cpp Thu Dec 17 08:52:27 2009 +0200
@@ -0,0 +1,319 @@
+/*
+* Copyright (c) 2008 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 class for WMDRM DLA UI
+*
+*/
+
+
+// INCLUDE FILES
+#include <f32file.h>
+
+#ifdef RD_MULTIPLE_DRIVE
+#include <driveinfo.h>
+#endif
+
+#include <eikfrlb.h>
+#include <eikfrlbd.h>
+#include <coemain.h>
+#include <bautils.h>
+#include <stringloader.h>
+#include <aknnotewrappers.h>
+#include <aknglobalnote.h>
+#include <aknlistquerydialog.h>
+#include <badesca.h>
+#include <gulicon.h>
+
+#include <data_caging_path_literals.hrh>
+#include <wmdrmdlautils.rsg>
+
+#include "wmdrmdlaui.h"
+
+#define _LOGGING_FILE L"wmdrmdlautils.txt"
+#include "logfn.h"
+
+// CONSTANTS
+#ifndef RD_MULTIPLE_DRIVE
+_LIT( KDriveZ, "z:" );
+#else
+_LIT( KRomDriveFormatter, "%c:" );
+#endif
+
+_LIT( KWmdrmDlaUtilsResFileName, "wmdrmdlautils.rsc" );
+
+// ======== LOCAL FUNCTIONS ========
+
+// ======== MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// CWmDrmDlaUi::ConstructL
+// ---------------------------------------------------------------------------
+//
+void CWmDrmDlaUi::ConstructL()
+ {
+ LOGFN( "CWmDrmDlaUi::ConstructL" );
+ iCoeEnv = CCoeEnv::Static();
+ if ( !iCoeEnv )
+ {
+ User::Leave( KErrNotSupported );
+ }
+
+ //Create resource file path
+ TPtr wmdrmDlaUtilsResourcePtr( NULL, 0 );
+ iWmdrmDlaUtilsResourceFile = HBufC::NewL( KMaxFileName );
+ wmdrmDlaUtilsResourcePtr.Set( iWmdrmDlaUtilsResourceFile->Des() );
+
+ //Append rom drive letter to the path
+#ifndef RD_MULTIPLE_DRIVE
+
+ wmdrmDlaUtilsResourcePtr.Append( KDriveZ );
+
+#else //RD_MULTIPLE_DRIVE
+
+ TInt driveNumber( -1 );
+ TChar driveLetter;
+ //Get rom drive number
+ User::LeaveIfError(
+ DriveInfo::GetDefaultDrive( DriveInfo::EDefaultRom,
+ driveNumber ) );
+ //Get drive letter from the drive number
+ User::LeaveIfError(
+ iCoeEnv->FsSession().DriveToChar( driveNumber,
+ driveLetter ) );
+ wmdrmDlaUtilsResourcePtr.AppendFormat( KRomDriveFormatter,
+ (TUint)driveLetter );
+
+#endif
+
+ //Append directory to the path
+ wmdrmDlaUtilsResourcePtr.Append( KDC_RESOURCE_FILES_DIR );
+ //Append name of the resource file to the path
+ wmdrmDlaUtilsResourcePtr.Append( KWmdrmDlaUtilsResFileName );
+
+ TFileName resourceFile;
+ resourceFile = *iWmdrmDlaUtilsResourceFile;
+ //Find the correct language file for the resource
+ BaflUtils::NearestLanguageFile( iCoeEnv->FsSession(),
+ resourceFile );
+ //Add resource file to the CCoeEnv.
+ //Resource file must be removed from the CCoeEnv when we are done
+ iWmdrmDlaUtilsResourceFileOffset
+ = iCoeEnv->AddResourceFileL( resourceFile );
+
+ iGlobalNote = CAknGlobalNote::NewL();
+ }
+
+// ---------------------------------------------------------------------------
+// CWmDrmDlaUi::CWmDrmDlaUi
+// ---------------------------------------------------------------------------
+//
+CWmDrmDlaUi::CWmDrmDlaUi() : CActive( EPriorityStandard )
+ {
+ LOGFN( "CWmDrmDlaUi::CWmDrmDlaUi" );
+ CActiveScheduler::Add( this );
+ }
+
+// ---------------------------------------------------------------------------
+// CWmDrmDlaUi::NewL
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CWmDrmDlaUi* CWmDrmDlaUi::NewL()
+ {
+ LOGFN( "CWmDrmDlaUi::NewL" );
+ CWmDrmDlaUi* self = CWmDrmDlaUi::NewLC();
+ CleanupStack::Pop( self );
+ return self;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CWmDrmDlaUi::NewLC
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CWmDrmDlaUi* CWmDrmDlaUi::NewLC()
+ {
+ LOGFN( "CWmDrmDlaUi::NewLC" );
+ CWmDrmDlaUi* self = new( ELeave ) CWmDrmDlaUi;
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ return self;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CWmDrmDlaUi::~CWmDrmDlaUi
+// ---------------------------------------------------------------------------
+//
+CWmDrmDlaUi::~CWmDrmDlaUi()
+ {
+ LOGFN( "CWmDrmDlaUi::~CWmDrmDlaUi" );
+ Cancel();
+ delete iGlobalNote;
+ delete iGlobalNoteText;
+ iCoeEnv->DeleteResourceFile( iWmdrmDlaUtilsResourceFileOffset );
+ delete iWmdrmDlaUtilsResourceFile;
+ }
+
+// ---------------------------------------------------------------------------
+// CWmDrmDlaUi::ShowErrorNoteL
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CWmDrmDlaUi::ShowErrorNoteL(
+ TInt aTextResourceId )
+ {
+ LOGFN( "CWmDrmDlaUi::ShowErrorNoteL" );
+ HBufC* msgText( StringLoader::LoadLC( aTextResourceId, iCoeEnv ) );
+ CAknResourceNoteDialog* note = new ( ELeave ) CAknErrorNote( ETrue );
+ note->ExecuteLD( *msgText );
+ CleanupStack::PopAndDestroy( msgText );
+ }
+
+// ---------------------------------------------------------------------------
+// CWmDrmDlaUi::ShowWaitNoteL
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CWmDrmDlaUi::ShowWaitNoteL(
+ TInt aTextResourceId,
+ MWmDrmDlaWaitNoteCallback* aCallback )
+ {
+ LOGFN( "CWmDrmDlaUi::ShowWaitNoteL" );
+ if ( IsActive() )
+ {
+ User::Leave( KErrInUse );
+ }
+ iGlobalNoteText = StringLoader::LoadL( aTextResourceId, iCoeEnv );
+ iGlobalNoteId = iGlobalNote->ShowNoteL( iStatus,
+ EAknGlobalWaitNote,
+ *iGlobalNoteText );
+ iCallback = aCallback;
+ SetActive();
+ }
+
+// ---------------------------------------------------------------------------
+// CWmDrmDlaUi::RemoveWaitNote
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CWmDrmDlaUi::RemoveWaitNote()
+ {
+ LOGFN( "CWmDrmDlaUi::RemoveWaitNote" );
+ Cancel();
+ }
+
+// ---------------------------------------------------------------------------
+// CWmDrmDlaUi::ShowListQueryL
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TInt CWmDrmDlaUi::ShowListQueryL(
+ MDesCArray* aItems,
+ CArrayPtr<CGulIcon>* aIcons )
+ {
+ LOGFN( "CWmDrmDlaUi::ShowListQueryL" );
+
+ //This method takes the ownership of the input parameters
+ //Push the input parameters to the cleanupstack to make sure we won't leak
+ //memory
+ CleanupStack::PushL( aIcons );
+ CleanupStack::PushL( aItems );
+
+ //Check that both inputs really exist.
+ if ( !aItems || !aIcons )
+ {
+ User::Leave( KErrArgument );
+ }
+
+ //Create the query with index parameter
+ //Query will take the ownership of the items and icons
+ TInt index( 0 );
+ CAknListQueryDialog* dlg = new (ELeave) CAknListQueryDialog( &index );
+ dlg->PrepareLC( R_WMDRMDLA_LIST_QUERY );
+
+ //Arrange cleanupstack in a way that query can take the ownership of the
+ //items and icons
+ CleanupStack::Pop( 2, aItems ); //dlg, aItems
+ //Ownership of the items is transferred to query
+ dlg->SetItemTextArray( aItems );
+ dlg->SetOwnershipType( ELbmOwnsItemArray );
+ CleanupStack::PushL( dlg );
+ //Ownership of the icons in transferred to query
+ dlg->SetIconArrayL( aIcons );
+ CleanupStack::Pop( 2, aIcons ); //dlg, aIcons
+ CleanupStack::PushL( dlg );
+
+ //Enable marquee scrolling for the text items
+ CEikFormattedCellListBox* listbox(
+ static_cast<CEikFormattedCellListBox*>( dlg->ListBox() ) /* ,
+ EAknListBoxItemSpecificMenuDisabled */ );
+ listbox->ItemDrawer()->ColumnData()->EnableMarqueeL( ETrue );
+
+ //Launch the query
+ TInt key( dlg->RunLD() );
+ LOG2( "key: %d", key );
+ //If user cancelled query, then return -1
+ //Else return index of the selected service
+ if ( key != EAknSoftkeyOk )
+ {
+ index = -1;
+ }
+ LOG2( "index: %d", index );
+ return index;
+ }
+
+// ---------------------------------------------------------------------------
+// CWmDrmDlaUi::DoCancel
+// ---------------------------------------------------------------------------
+//
+void CWmDrmDlaUi::DoCancel()
+ {
+ LOGFN( "CWmDrmDlaUi::DoCancel" );
+ CancelWaitNote();
+ }
+
+// ---------------------------------------------------------------------------
+// CWmDrmDlaUi::RunL
+// ---------------------------------------------------------------------------
+//
+void CWmDrmDlaUi::RunL()
+ {
+ LOGFN( "CWmDrmDlaUi::RunL" );
+ CancelWaitNote();
+ if ( iCallback )
+ {
+ iCallback->UserWaitNoteCancellation();
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// CWmDrmDlaUi::RunError
+// ---------------------------------------------------------------------------
+//
+TInt CWmDrmDlaUi::RunError( TInt /*aError*/ )
+ {
+ return KErrNone;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CWmDrmDlaUi::CancelWaitNote
+// ---------------------------------------------------------------------------
+//
+void CWmDrmDlaUi::CancelWaitNote()
+ {
+ LOGFN( "CWmDrmDlaUi::CancelWaitNote" );
+ if ( iGlobalNoteId )
+ {
+ TRAP_IGNORE( iGlobalNote->CancelNoteL( iGlobalNoteId ) );
+ iGlobalNoteId = 0;
+ delete iGlobalNoteText;
+ iGlobalNoteText = NULL;
+ }
+ }