--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/upnpframework/upnpcommonui/src/upnpexternaldevicedialog.cpp Thu Dec 17 08:52:00 2009 +0200
@@ -0,0 +1,813 @@
+/*
+* Copyright (c) 2005 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: Source file for UPnP External device dialog
+* UI Implementation
+*
+*/
+
+
+// INCLUDE FILES
+// System
+#include <aknnavide.h> // CAknNavigationDecorator
+#include <barsread.h> // TResourceReader
+#include <AknIconArray.h>
+#include <eikclbd.h>
+#include <StringLoader.h>
+#include <featmgr.h>
+#include <hlplch.h>
+#include <upnpstring.h>
+#include <layoutmetadata.cdl.h>
+
+// upnpframework / avcontroller api
+#include "upnpavdevice.h"
+#include "upnpavcontroller.h"
+#include "upnpavbrowsingsession.h"
+#include "upnpavdevicelist.h"
+
+// upnpframework / internal api's
+#include "upnpcommonutils.h"
+
+// common ui internal
+#include "upnpadvfinddialog.h"
+#include "upnpcommonui.hrh"
+#include "upnpexternaldevicedialog.h"
+#include <upnpcommonui.rsg>
+#include <upnpcommonui.mbg> //for icons
+#include "upnpcommonui.h"
+#include "upnpnavipanecontainer.h"
+
+_LIT( KComponentLogfile, "commonui.txt");
+#include "upnplog.h"
+
+// CONSTANTS
+_LIT( KAknCommonUIMbmFileName, "\\resource\\apps\\upnpcommonui.mbm" );
+const TInt KLength = 100;
+_LIT(KUPNP_HLP_MAIN_EXTERNAL,"UPNP_HLP_MAIN_EXTERNAL");
+
+
+// --------------------------------------------------------------------------
+// CUPnPExternalDeviceDialog::CUPnPExternalDeviceDialog
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// --------------------------------------------------------------------------
+//
+CUPnPExternalDeviceDialog::CUPnPExternalDeviceDialog(
+ MUPnPAVController& aAVControl,
+ CUPnPCommonUI& aCommonUI):
+ iAVControl(aAVControl),
+ iCommonUI(aCommonUI)
+ {
+ iPreDeviceObserver = iAVControl.DeviceObserver();
+ iAVControl.RemoveDeviceObserver();
+ iAVControl.SetDeviceObserver( *this );
+ }
+
+// Destructor
+CUPnPExternalDeviceDialog::~CUPnPExternalDeviceDialog()
+ {
+ __LOG( "CUPnPExternalDeviceDialog::~CUPnPExternalDeviceDialog" );
+
+ delete iDeviceArray;
+ iAVControl.RemoveDeviceObserver();
+
+ if( iPreDeviceObserver )
+ {
+ iAVControl.SetDeviceObserver( *iPreDeviceObserver );
+ }
+
+ if ( iNaviDecorator && iNaviPaneContainer )
+ {
+ iNaviPaneContainer->Pop( iNaviDecorator );
+ }
+ delete iNaviDecorator;
+ iNaviDecorator = NULL;
+
+ __LOG( "CUPnPExternalDeviceDialog::~CUPnPExternalDeviceDialog End." );
+ }
+
+// --------------------------------------------------------------------------
+// CUPnPExternalDeviceDialog::ConstructL
+// Symbian 2nd phase constructor can leave.
+// --------------------------------------------------------------------------
+//
+void CUPnPExternalDeviceDialog::ConstructL( TInt aMenuResource )
+ {
+ __LOG( "CUPnPExternalDeviceDialog::ConstructL" );
+
+ iDeviceArray = CUpnpAVDeviceList::NewL();
+
+ CAknDialog::ConstructL( aMenuResource );
+ __LOG( "CUPnPExternalDeviceDialog::ConstructL End" );
+ }
+
+// --------------------------------------------------------------------------
+// CUPnPExternalDeviceDialog::NewL
+// Two-phased constructor.
+// --------------------------------------------------------------------------
+//
+CUPnPExternalDeviceDialog* CUPnPExternalDeviceDialog::NewL(
+ TInt aMenuResource,
+ MUPnPAVController& aAVControl,
+ CUPnPCommonUI& aCommonUI)
+ {
+ __LOG( "CUPnPExternalDeviceDialog::NewL" );
+
+ CUPnPExternalDeviceDialog* self =
+ new ( ELeave ) CUPnPExternalDeviceDialog( aAVControl,
+ aCommonUI );
+ CleanupStack::PushL( self );
+ self->ConstructL( aMenuResource );
+ CleanupStack::Pop();
+ __LOG( "CUPnPExternalDeviceDialog::NewL End" );
+ return self;
+ }
+
+// --------------------------------------------------------------------------
+// CUPnPExternalDeviceDialog::PreLayoutDynInitL();
+// called by framework before dialog is shown
+// --------------------------------------------------------------------------
+//
+void CUPnPExternalDeviceDialog::PreLayoutDynInitL()
+ {
+ __LOG( "CUPnPExternalDeviceDialog::PreLayoutDynInitL" );
+
+ // Create dialog title text
+ CEikStatusPane* statusPane =
+ ( ( CAknAppUi* )iEikonEnv->EikAppUi() )->StatusPane();
+ iTitlePane = ( CAknTitlePane* )statusPane->ControlL(
+ TUid::Uid( EEikStatusPaneUidTitle ) );
+ iTitlePane->SetTextL( *StringLoader::LoadLC(
+ R_UPNPCOMMONUI_EXTERNAL_MEDIA_TITLE ) );
+ CleanupStack::PopAndDestroy();
+
+ iListBox = static_cast<CAknSingleGraphicStyleListBox*>
+ ( Control( EUPnPExternDevicesListBoxId ) );
+ iListBox->CreateScrollBarFrameL( ETrue );
+ iListBox->ScrollBarFrame()->SetScrollBarVisibilityL(
+ CEikScrollBarFrame::EOff, CEikScrollBarFrame::EAuto );
+ iListBox->ItemDrawer()->ColumnData()->EnableMarqueeL( ETrue );
+
+
+ CAknIconArray* icons = new ( ELeave ) CAknIconArray( 3 );
+ CleanupStack::PushL(icons);
+
+ // Mif icons
+ MAknsSkinInstance* skin = AknsUtils::SkinInstance();
+ TFileName iconsPath( AknIconUtils::AvkonIconFileName( ) );
+
+ // Folder icon
+
+ TFileName mbmFileName( KAknCommonUIMbmFileName );
+ TFileName dllName;
+ Dll::FileName( dllName );
+ TBuf<2> drive = dllName.Left( 2 ); // Drive letter followed by ':'
+ mbmFileName.Insert( 0, drive );
+
+ AppendIconToArrayL( icons, skin,
+ mbmFileName,
+ KAknsIIDDefault,
+ EMbmUpnpcommonuiQgn_server_icon,
+ EMbmUpnpcommonuiQgn_server_icon_mask );
+
+
+ iListBox->ItemDrawer()->ColumnData()->SetIconArray( icons );
+
+ CleanupStack::Pop( icons );
+
+ // Enable horizontal scrolling
+ iListBox->ItemDrawer()->ColumnData()->EnableMarqueeL( ETrue );
+
+ DisplayMediaServersL();
+
+ if ( !iDeviceArray->Count() )
+ {
+ // show "Waiting devices" text
+ iListBox->View()->SetListEmptyTextL(
+ *StringLoader::LoadLC( R_UPNPCOMMONUI_EXTERNAL_WAITING_NOTE ) );
+ CleanupStack::PopAndDestroy();
+ }
+ else
+ {
+ CEikButtonGroupContainer* cba = &ButtonGroupContainer();
+ cba->SetCommandSetL( R_UPNPCOMMONUI_SOFTKEYS_OPTIONS_BACK__OPEN );
+ cba->DrawDeferred();
+ }
+ __LOG( "CUPnPExternalDeviceDialog::PreLayoutDynInitL End" );
+ }
+
+// --------------------------------------------------------------------------
+// CUPnPExternalDeviceDialog::PostLayoutDynInitL();
+// --------------------------------------------------------------------------
+//
+void CUPnPExternalDeviceDialog::PostLayoutDynInitL()
+ {
+ iNaviPaneActive = ETrue;
+ UpDateAnimationWindowL(iNaviPaneActive);//DateAnimationWindow();
+ }
+
+// --------------------------------------------------------------------------
+// CUPnPExternalDeviceDialog::OkToExitL(TInt aButtonId)
+// see upnpexternaldevicedialog.h
+// --------------------------------------------------------------------------
+//
+TBool CUPnPExternalDeviceDialog::OkToExitL( TInt aButtonId )
+ {
+ __LOG( "CUPnPExternalDeviceDialog::OkToExitL" );
+
+ TBool returnValue = EFalse;
+ iCommonUI.HandleCommonErrorL( aButtonId, NULL );
+ // Translate the button presses into commands for the appui & current
+ // view to handle
+ switch ( aButtonId )
+ {
+ case EAknSoftkeyOptions:
+ {
+ DisplayMenuL();
+ break;
+ }
+ case EAknSoftkeyOpen: //fall through
+ case EAknSoftkeyOk:
+ {
+ CTextListBoxModel *model = iListBox->Model();
+
+ if (model->NumberOfItems()) //browse only if list have items
+ {
+ iNaviPaneActive = EFalse;
+ UpDateAnimationWindowL(iNaviPaneActive);
+
+ TInt ret = ExecuteBrowseL();
+ if (ret == EAknCmdExit ||
+ ret == EEikCmdExit ||
+ ret == KErrDisconnected ||
+ ret == KErrSessionClosed
+ )
+ {
+ TryExitL( ret );
+ }
+ else
+ {
+ DisplayMediaServersL();
+ iNaviPaneActive = ETrue;
+ UpDateAnimationWindowL(iNaviPaneActive);
+ }
+ }
+ break;
+ }
+ case EAknSoftkeyBack: // fall through
+ case EUPnPBackCmd: // fall through
+ case EAknSoftkeyCancel: // fall through
+ case EAknSoftkeyExit: // fall through
+ case EAknCmdExit: // fall through
+ case EEikCmdExit: // fall through
+ case KErrNotReady: // fall through
+ case KErrDisconnected:
+ {
+ if( iTitlePane )
+ {
+ iTitlePane->SetTextToDefaultL();
+ }
+ returnValue = ETrue; //back to previous dialog
+ break;
+ }
+ case KErrSessionClosed:
+ {
+ DisplayMediaServersL();
+ iNaviPaneActive = ETrue;
+ UpDateAnimationWindowL(iNaviPaneActive);
+
+ break;
+ }
+ default:
+ {
+ // ignore
+ }
+ }
+
+ __LOG( "CUPnPExternalDeviceDialog::OkToExitL End." );
+ return returnValue;
+ }
+
+// --------------------------------------------------------------------------
+// CUPnPExternalDevice::DynInitMenuPaneL(TInt aResourceId,
+// CEikMenuPane *aMenuPane)
+// called by framework before menu panel is shown
+// --------------------------------------------------------------------------
+void CUPnPExternalDeviceDialog::DynInitMenuPaneL( TInt aResourceId,
+ CEikMenuPane *aMenuPane )
+ {
+ __LOG( "CUPnPExternalDeviceDialog::DynInitMenuPaneL" );
+
+ if( aResourceId == R_UPNPCOMMONUI_EXTERNAL_DEVICE_OPTION_MENU )
+ {
+ // Hide menu items if empty list
+ CTextListBoxModel *model = iListBox->Model();
+ if ( !model->NumberOfItems() )
+ {
+ aMenuPane->SetItemDimmed( EUPnPOpen, ETrue );
+ aMenuPane->SetItemDimmed( EUPnPFind, ETrue );
+ }
+
+ // Hide "Find" if the currently focused device does not support it
+ TInt selected_item = iListBox->CurrentItemIndex();
+ if( selected_item >= 0 &&
+ !( *iDeviceArray )[ selected_item ]->SearchCapability() )
+ {
+ aMenuPane->SetItemDimmed( EUPnPFind, ETrue );
+ }
+
+ // Hide "Help" if the help file is not available
+ if( !FeatureManager::FeatureSupported( KFeatureIdHelp ) )
+ {
+ aMenuPane->SetItemDimmed( EUPnPHelp, ETrue );
+ }
+ }
+ __LOG( "CUPnPExternalDeviceDialog::DynInitMenuPaneL End" );
+ }
+
+// --------------------------------------------------------------------------
+// CUPnPExternalDeviceDialog::ProcessCommandL(TInt aCommand)
+// called by framework when menu item is selected
+// --------------------------------------------------------------------------
+//
+void CUPnPExternalDeviceDialog::ProcessCommandL( TInt aCommand )
+ {
+ __LOG( "CUPnPExternalDeviceDialog::ProcessCommandL" );
+
+ TInt error = KErrNone;
+ HideMenu();
+ switch ( aCommand )
+ {
+ case EAknCmdExit:
+ case EEikCmdExit:
+ {
+ TryExitL( aCommand );
+ break;
+ }
+ case EUPnPOpen:
+ {
+ iNaviPaneActive = EFalse;
+ UpDateAnimationWindowL(iNaviPaneActive);
+
+ error = ExecuteBrowseL();
+ if ( error == EAknCmdExit ||
+ error == EEikCmdExit ||
+ error == KErrDisconnected ||
+ error == KErrSessionClosed )
+ {
+ TryExitL( error );
+ }
+ else
+ {
+ DisplayMediaServersL();
+ iNaviPaneActive = ETrue;
+ UpDateAnimationWindowL(iNaviPaneActive);
+ }
+ break;
+ }
+ case EUPnPFind:
+ {
+ iNaviPaneActive = EFalse;
+ UpDateAnimationWindowL(iNaviPaneActive);
+
+ error = ExecuteFindL();
+ if ( error == EAknCmdExit ||
+ error == EEikCmdExit ||
+ error == KErrDisconnected ||
+ error == KErrNotReady ||
+ error == KErrSessionClosed )
+ {
+ TryExitL( error );
+ }
+ else
+ {
+ iNaviPaneActive = ETrue;
+ UpDateAnimationWindowL(iNaviPaneActive);
+ }
+ break;
+ }
+ case EUPnPHelp:
+ {
+ iNaviPaneActive = EFalse;
+ UpDateAnimationWindowL(iNaviPaneActive);
+ HlpLauncher::LaunchHelpApplicationL( iEikonEnv->WsSession(),
+ iEikonEnv->EikAppUi()->AppHelpContextL() );
+ iNaviPaneActive = ETrue;
+ UpDateAnimationWindowL(iNaviPaneActive);
+ break;
+ }
+ default:
+ break;
+ }
+ __LOG( "CUPnPExternalDeviceDialog::ProcessCommandL End" );
+ }
+
+// --------------------------------------------------------------------------
+// CUPnPExternalDeviceDialog::UPnPDeviceDiscovered
+// Returns discovered device from UPnP AV control point.
+// --------------------------------------------------------------------------
+//
+void CUPnPExternalDeviceDialog::UPnPDeviceDiscovered(
+ const CUpnpAVDevice& aDevice )
+ {
+ __LOG( "CUPnPExternalDeviceDialog::UPnPDeviceDiscovered" );
+ TInt error = KErrNone;
+ TRAP( error, UPnPDeviceDiscoveredL( aDevice ) );
+
+ __LOG1( "CUPnPExternalDeviceDialog::UPnPDeviceDiscovered %d", error);
+ }
+
+// --------------------------------------------------------------------------
+// CUPnPExternalDeviceDialog::UPnPDeviceDiscoveredL
+// Returns discovered device from UPnP AV control point.
+// --------------------------------------------------------------------------
+//
+void CUPnPExternalDeviceDialog::UPnPDeviceDiscoveredL(
+ const CUpnpAVDevice& aDevice )
+ {
+ __LOG( "CUPnPExternalDeviceDialog::UPnPDeviceDiscovered" );
+
+ // Display only Media servers
+ if( aDevice.DeviceType() == CUpnpAVDevice::EMediaServer )
+ {
+ CUpnpAVDevice* tempDevice = CUpnpAVDevice::NewL( aDevice ) ;
+
+ CleanupStack::PushL( tempDevice );
+ iDeviceArray->AppendDeviceL( *tempDevice );
+ CleanupStack::Pop( tempDevice );
+
+ // Get device friendly name and replace illegal characters.
+ HBufC8* tmpfriendlyname =
+ UPnPCommonUtils::ReplaceIllegalFilenameCharactersL(
+ ( ( CUpnpAVDevice* )tempDevice )->FriendlyName() );
+
+ CleanupStack::PushL( tmpfriendlyname );
+ TPtrC8 friendlyname = *tmpfriendlyname;
+
+ CTextListBoxModel* model = iListBox->Model();
+ MDesCArray* textArray = model->ItemTextArray();
+ CDesCArray* listBoxItems = static_cast<CDesCArray*>( textArray );
+ TBuf<256> item;
+
+ HBufC *tmpbuf = UpnpString::ToUnicodeL( friendlyname.Left( KLength ) );
+ CleanupStack::PushL( tmpbuf );
+
+ item.Format( _L( "%d\t%S\t\t" ),0, tmpbuf );
+ CleanupStack::PopAndDestroy( tmpbuf );
+ CleanupStack::PopAndDestroy( tmpfriendlyname );
+
+ listBoxItems->AppendL( item );
+ iListBox->HandleItemAdditionL(); // Update listbox
+
+ iListBox->ActivateL();
+ iListBox->DrawDeferred();
+
+ //update menu pane
+ CEikButtonGroupContainer* cba = &ButtonGroupContainer();
+
+ cba->SetCommandSetL( R_UPNPCOMMONUI_SOFTKEYS_OPTIONS_BACK__OPEN );
+ cba->DrawDeferred();
+ }
+ __LOG( "CUPnPExternalDeviceDialog::UPnPDeviceDiscovered End" );
+ }
+
+// --------------------------------------------------------------------------
+// CUPnPExternalDeviceDialog::UPnPDeviceDisappeared
+// Returns disappeared device from UPnP AV control point.
+// --------------------------------------------------------------------------
+//
+void CUPnPExternalDeviceDialog::UPnPDeviceDisappeared(
+ const CUpnpAVDevice& aDevice )
+ {
+ __LOG( "CUPnPExternalDeviceDialog::UPnPDeviceDisappeared" );
+
+ TRAP_IGNORE( UPnPDeviceDisappearedL( aDevice ) );
+
+ }
+
+// --------------------------------------------------------------------------
+// CUPnPExternalDeviceDialog::UPnPDeviceDisappearedL
+// Returns disappeared device from UPnP AV control point.
+// --------------------------------------------------------------------------
+//
+void CUPnPExternalDeviceDialog::UPnPDeviceDisappearedL(
+ const CUpnpAVDevice& aDevice )
+ {
+ __LOG( "CUPnPExternalDeviceDialog::UPnPDeviceDissapearedL" );
+
+ CTextListBoxModel* model = iListBox->Model();
+ TInt currentItem = iListBox->CurrentItemIndex();
+ MDesCArray* textArray = model->ItemTextArray();
+ CDesCArray* listBoxItems = static_cast<CDesCArray*>( textArray );
+ TInt i = 0;
+ TPtrC8 ptr(aDevice.Uuid());
+ while( i < iDeviceArray->Count() &&
+ ptr.Compare( ( *iDeviceArray)[ i ]->Uuid() ) )
+ {
+ i++;
+ }
+ if ( i < iDeviceArray->Count() )
+ {
+ iDeviceArray->RemoveAndDestroy( i );
+ listBoxItems->Delete( i,1 );
+ AknListBoxUtils::HandleItemRemovalAndPositionHighlightL(
+ iListBox, currentItem, ETrue );
+ iListBox->DrawDeferred();
+ }
+
+ if ( !iDeviceArray->Count() )
+ {
+ // show "Waiting devices" text
+ iListBox->View()->SetListEmptyTextL(
+ *StringLoader::LoadLC( R_UPNPCOMMONUI_EXTERNAL_WAITING_NOTE ) );
+ CleanupStack::PopAndDestroy(); // R_EXTERNAL_WAITING_NOTE
+
+ CEikButtonGroupContainer* cba = &ButtonGroupContainer();
+ cba->SetCommandSetL( R_UPNPCOMMONUI_SOFTKEYS_EMPTY_BACK );
+ cba->DrawDeferred();
+ }
+
+ __LOG( "CUPnPExternalDeviceDialog::UPnPDeviceDissapearedL-END" );
+ }
+
+// --------------------------------------------------------------------------
+// CUPnPExternalDeviceDialog::AppendIconToArrayL
+// Load a possibly skinned icon (with mask) and append it to an
+// icon array.
+// --------------------------------------------------------------------------
+//
+void CUPnPExternalDeviceDialog::AppendIconToArrayL( CAknIconArray* aArray,
+ MAknsSkinInstance* aSkin,
+ const TDesC& aMbmFile,
+ const TAknsItemID& aID,
+ TInt aBitmapId,
+ TInt aMaskId )
+ {
+ __LOG( "CUPnPExternalDeviceDialog::AppendIconToArrayL" );
+
+ __ASSERTD( aArray != NULL, __FILE__, __LINE__ );
+
+ CFbsBitmap* bitmap = NULL;
+ CFbsBitmap* mask = NULL;
+
+ AknsUtils::CreateIconLC( aSkin, aID,
+ bitmap, mask, aMbmFile, aBitmapId, aMaskId );
+
+ CGulIcon* icon = CGulIcon::NewL( bitmap, mask );
+ icon->SetBitmapsOwnedExternally( EFalse );
+
+ // icon now owns the bitmaps, no need to keep on cleanup stack.
+ CleanupStack::Pop( 2 ); // mask, bitmap
+ bitmap = NULL;
+ mask = NULL;
+
+ CleanupStack::PushL( icon );
+ aArray->AppendL( icon );
+
+ // aArray now owns the icon, no need to delete.
+ CleanupStack::Pop();
+ __LOG( "CUPnPExternalDeviceDialog::AppendIconToArrayL End" );
+ }
+
+// --------------------------------------------------------------------------
+// CUPnPBrowseDialog::DisplayMediaServersL
+// Add visible Media Servers to Listbox of dialog
+// --------------------------------------------------------------------------
+void CUPnPExternalDeviceDialog::DisplayMediaServersL()
+ {
+ __LOG( "CUPnPExternalDeviceDialog::DisplayMediaServersL" );
+
+ CTextListBoxModel* model = iListBox->Model();
+ MDesCArray* textArray = model->ItemTextArray();
+ CDesCArray* listBoxItems = static_cast<CDesCArray*>( textArray );
+
+ //clear list
+ delete iDeviceArray; iDeviceArray = NULL;
+ listBoxItems->Reset();
+
+ TBuf<256> item;
+
+ iDeviceArray=iAVControl.GetMediaServersL();
+
+
+ if ( iDeviceArray->Count() )
+ {
+ for ( TInt i=0; i < iDeviceArray->Count(); i++ )
+ {
+ // Get device frienly name and replace illegal characters.
+ HBufC8* tmpfriendlyname =
+ UPnPCommonUtils::ReplaceIllegalFilenameCharactersL(
+ ( *iDeviceArray )[ i ]->FriendlyName() );
+
+ CleanupStack::PushL( tmpfriendlyname );
+ TPtrC8 friendlyname = *tmpfriendlyname;
+
+ HBufC* tmpbuf = UpnpString::ToUnicodeL(
+ friendlyname.Left( KLength ) );
+ CleanupStack::PushL( tmpbuf );
+ item.Format( _L( "%d\t%S\t\t" ),0, tmpbuf );
+ CleanupStack::PopAndDestroy( tmpbuf );
+ CleanupStack::PopAndDestroy( tmpfriendlyname );
+ listBoxItems->AppendL( item );
+ }
+
+ iListBox->HandleItemAdditionL(); // Update listbox
+ iListBox->SetCurrentItemIndexAndDraw( 0 ); // select new item
+ }
+ __LOG( "CUPnPExternalDeviceDialog::DisplayMediaServersL End" );
+ }
+
+
+// --------------------------------------------------------------------------
+// CUPnPExternalDeviceDialog::ExecuteBrowseL
+// see upnpexternaldevicedialog.h
+// --------------------------------------------------------------------------
+TInt CUPnPExternalDeviceDialog::ExecuteBrowseL()
+ {
+ __LOG( "CUPnPExternalDeviceDialog::ExecuteBrowseL" );
+
+ TInt selected_item = iListBox->CurrentItemIndex();
+
+ const CUpnpAVDevice* selectedDevice = ( *iDeviceArray )[ selected_item ];
+
+ TInt ret = iCommonUI.ExecuteBrowseDialogL(
+ iAVControl, *selectedDevice );
+
+ iTitlePane->SetTextL( *StringLoader::LoadLC(
+ R_UPNPCOMMONUI_EXTERNAL_MEDIA_TITLE ) );
+ CleanupStack::PopAndDestroy();
+
+
+ __LOG( "CUPnPExternalDeviceDialog::ExecuteBrowseL End" );
+ return ret;
+ }
+
+// --------------------------------------------------------------------------
+// CUPnPExternalDeviceDialog::ExecuteFindL
+// see upnpexternaldevicedialog.h
+// --------------------------------------------------------------------------
+TInt CUPnPExternalDeviceDialog::ExecuteFindL()
+ {
+ __LOG( "CUPnPExternalDeviceDialog::ExecuteFindL" );
+
+ TInt ret = KErrNone;
+ TInt selected_item = iListBox->CurrentItemIndex();
+ CUpnpAVDevice* selectedDevice =
+ ( *iDeviceArray )[ selected_item ];
+
+ if( selectedDevice )
+ {
+ //create a browsessesion only for advFind dialog
+
+ MUPnPAVBrowsingSession* browsingSession = NULL;
+ browsingSession = &( iAVControl.StartBrowsingSessionL(
+ *selectedDevice ) );
+
+ ret = iCommonUI.ExecuteAdvFindDialogL( iAVControl,
+ *browsingSession );
+ browsingSession->RemoveObserver();
+ iAVControl.StopBrowsingSession( *browsingSession );
+ }
+
+ if( KErrDisconnected != ret ) //if not WLAN lost
+ {
+ DisplayMediaServersL();
+ }
+
+ __LOG( "CUPnPExternalDeviceDialog::ExecuteFindL End" );
+ return ret;
+ }
+
+
+
+// --------------------------------------------------------------------------
+// CUPnPExternalDeviceDialog::WLANConnectionLost
+// see upnpexternaldevicedialog.h
+// --------------------------------------------------------------------------
+void CUPnPExternalDeviceDialog::WLANConnectionLost()
+ {
+ __LOG( "CUPnPExternalDeviceDialog::WLANConnectionLost" );
+ //if no dialog created in CUPnPExternalDeviceDialog, destory itself
+ //Otherwise destory other dialogs like in normal by KErrAbort
+ if( !iCommonUI.PresenceOfDialog() )
+ {
+ TRAP_IGNORE( TryExitL( KErrDisconnected ) );
+ }
+
+ }
+
+
+// --------------------------------------------------------------------------
+// CUPnPExternalDeviceDialog::GetHelpContext
+// see upnpexternaldevicedialog.h
+// --------------------------------------------------------------------------
+//
+void CUPnPExternalDeviceDialog::GetHelpContext(
+ TCoeHelpContext& aContext ) const
+ {
+ __LOG( "CUPnPExternalDeviceDialog::GetHelpContext" );
+
+// aContext.iMajor = TUid::Uid( KMediaGalleryUID3 );
+ aContext.iContext = KUPNP_HLP_MAIN_EXTERNAL;
+
+ __LOG( "CUPnPExternalDeviceDialog::GetHelpContext End" );
+ }
+
+// --------------------------------------------------------------------------
+// CUPnPExternalDeviceDialog::UpDateAnimationWindowL
+// see upnpexternaldevicedialog.h
+// --------------------------------------------------------------------------
+//
+void CUPnPExternalDeviceDialog::UpDateAnimationWindowL(TBool aAnimationState)
+ {
+ __LOG( "CUPnPExternalDeviceDialog::UpDateAnimationWindowL" );
+ if ( iNaviDecorator )
+ {
+ iNaviPaneContainer->Pop( iNaviDecorator );
+ }
+
+ // destroy iNaviDecorator
+ delete iNaviDecorator;
+ iNaviDecorator = NULL;
+
+ if ( ( !Layout_Meta_Data::IsLandscapeOrientation() )
+ && ( aAnimationState ) )
+ {
+ iStatusPane = iEikonEnv->AppUiFactory()->StatusPane();
+
+ TBool naviFaded = iStatusPane->IsFaded();
+
+ if (!naviFaded)
+ {
+ iNaviPaneContainer = ( CAknNavigationControlContainer* )
+ iStatusPane->ControlL( TUid::Uid( EEikStatusPaneUidNavi ) );
+
+ TPoint screenPosition = iNaviPaneContainer->
+ PositionRelativeToScreen();
+ /**
+ * adjust the screen position so that the "Searching..." could be
+ * exactly in that "blue" NaviPane
+ */
+ screenPosition.iY = screenPosition.iY+1;
+ iNaviContainer = CUPnPNaviPaneContainer::NewL(
+ iNaviPaneContainer->Rect(),
+ screenPosition,
+ iNaviPaneContainer );
+
+ iNaviDecorator = CAknNavigationDecorator::NewL(
+ iNaviPaneContainer, iNaviContainer );
+ iNaviDecorator->SetContainerWindowL( *iNaviPaneContainer );
+ iNaviDecorator->MakeScrollButtonVisible(EFalse);
+ iNaviDecorator->SetComponentsToInheritVisibility( ETrue );
+ iNaviPaneContainer->PushL( *iNaviDecorator );
+ }
+ }
+ iListBox->ActivateL();
+
+ __LOG( "CUPnPExternalDeviceDialog::UpDateAnimationWindowL End" );
+ }
+
+// --------------------------------------------------------------------------
+// CUPnPExternalDeviceDialog::HandleResourceChange
+// --------------------------------------------------------------------------
+//
+void CUPnPExternalDeviceDialog::HandleResourceChange(TInt aType)
+ {
+ __LOG("[UPnPCommonUI]\t CUPnPExternalDeviceDialog::HandleResourceChange");
+ CAknDialog::HandleResourceChange(aType);
+
+ // Update Titlepane only if there is no other dialogs open
+ if( !iCommonUI.PresenceOfDialog() )
+ {
+ __LOG("[UPnPCommonUI]\t CUPnPExternalDeviceDialog::HandleResourceChange\
+updating iTitlePane");
+
+ TRAPD( err,
+ iTitlePane->SetTextL( *StringLoader::LoadLC(
+ R_UPNPCOMMONUI_EXTERNAL_MEDIA_TITLE ) );
+ CleanupStack::PopAndDestroy();
+ );
+
+ if( err != KErrNone )
+ {
+ __LOG("[UPnPCommonUI]\t CUPnPExternalDeviceDialog::HandleResourceChange\
+iTitlePane->SetTextL failed");
+ }
+ }
+
+ if (iNaviPaneActive)
+ {
+ TRAP_IGNORE( UpDateAnimationWindowL(iNaviPaneActive) );
+ }
+ }
+// end of file