upnpsettings/upnpsharingui/src/upnpappfilesharingdialog.cpp
changeset 0 7f85d04be362
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/upnpsettings/upnpsharingui/src/upnpappfilesharingdialog.cpp	Thu Dec 17 08:52:00 2009 +0200
@@ -0,0 +1,596 @@
+/*
+* Copyright (c) 2005-2007 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:      File sharing view of Home Network application
+*
+*/
+
+
+
+
+
+
+// INCLUDE FILES
+// system
+#include <aknlists.h>
+#include <akntitle.h>
+#include <AknProgressDialog.h>
+#include <StringLoader.h>
+#include <featmgr.h>
+#include <hlplch.h>
+#include <eikprogi.h>
+#include <aknnotewrappers.h>
+#include <aknmessagequerydialog.h> //displayinfol
+#include <akninputblock.h>          // CAknInputBlock
+#include <bautils.h> // BaflUtils
+
+// internal interfaces
+#include "cupnpmultiselectionui.h"
+#include "upnpfilesharingengine.h"
+#include "upnpfilesharingengineobserver.h"
+
+// this component
+#include <upnpsharingui.rsg>
+#include "upnpsharingui.hrh"
+#include "upnpappfilesharinglist.h"
+#include "upnpappfilesharingdialog.h"
+
+
+_LIT( KComponentLogfile, "upnpsharingui.txt");
+#include "upnplog.h"
+
+// CONSTANTS
+const TInt KHomeConnectUID3 = 0x10208A0A; // needed for help context
+_LIT( KUPNP_HLP_SHARE_CONTENT, "UPNP_HLP_SHARE_CONTENT" ); 
+// Filename of rsc file
+_LIT( KSharingUiRscFile, "\\resource\\upnpsharingui.rsc" );
+
+
+// ============================ MEMBER FUNCTIONS ============================
+
+
+// --------------------------------------------------------------------------
+// CUPnPAppFileSharingDialog::NewL
+// Two-phased constructor.
+// --------------------------------------------------------------------------
+//
+EXPORT_C CUPnPAppFileSharingDialog* CUPnPAppFileSharingDialog::NewL( 
+    TInt aMenuResource,
+    CUPnPFileSharingEngine& aEng )
+    {
+    __LOG("CUPnPAppFileSharingDialog::NewL");
+
+    CUPnPAppFileSharingDialog* self =
+        new (ELeave) CUPnPAppFileSharingDialog( aEng );
+    CleanupStack::PushL(self);
+    self->ConstructL( aMenuResource );
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+// --------------------------------------------------------------------------
+// Constructor
+// --------------------------------------------------------------------------
+//
+CUPnPAppFileSharingDialog::CUPnPAppFileSharingDialog( 
+    CUPnPFileSharingEngine& aEng )
+    : iFileSharingEngine( aEng )
+    , iFeatureManagerInitialized( EFalse )
+    {
+    }
+
+// --------------------------------------------------------------------------
+// CUPnPAppFileSharingDialog::ConstructL
+// Symbian 2nd phase constructor can leave.
+// --------------------------------------------------------------------------
+//
+void CUPnPAppFileSharingDialog::ConstructL( TInt aMenuResource )
+    {
+    __LOG("CUPnPAppFileSharingDialog::ConstructL");
+
+    iFileSharingEngine.SetObserver(this);
+
+    if ( aMenuResource == 0 )
+        {
+        aMenuResource = R_SHARINGUI_MENUBAR;
+        }
+
+    // determine resource file location
+    iCoeEnv = CEikonEnv::Static();
+    RFs& fileSession = iCoeEnv->FsSession();
+    TFileName rscFileName( KSharingUiRscFile );
+    TFileName dllName;
+    Dll::FileName( dllName );
+    TBuf<2> drive = dllName.Left( 2 ); // Drive letter followed by ':' 
+    rscFileName.Insert( 0, drive );
+    BaflUtils::NearestLanguageFile( fileSession, rscFileName );
+    if ( !BaflUtils::FileExists( fileSession, rscFileName ) )
+        {
+        User::Leave( KErrNotFound );
+        }
+    // load the resource file
+    iResFileOffset = iCoeEnv->AddResourceFileL( rscFileName );
+    FeatureManager::InitializeLibL();
+    iFeatureManagerInitialized = ETrue;
+
+    CAknDialog::ConstructL( aMenuResource );
+    }
+
+// --------------------------------------------------------------------------
+// Destructor
+// --------------------------------------------------------------------------
+//
+CUPnPAppFileSharingDialog::~CUPnPAppFileSharingDialog()
+    {
+    __LOG("CUPnPAppFileSharingDialog::~CUPnPAppFileSharingDialog");
+
+    iFileSharingEngine.SetObserver( NULL );
+
+    // unload resource file
+    if ( iResFileOffset )
+        {
+        iCoeEnv->DeleteResourceFile( iResFileOffset );
+        iResFileOffset = 0;
+        }
+
+    if( iFeatureManagerInitialized )
+        {
+        FeatureManager::UnInitializeLib();
+        }
+    }
+
+// --------------------------------------------------------------------------
+// CUPnPAppFileSharingDialog::ExecuteSharingDialogLD()
+// Executes the dialog using the component's own resource
+// --------------------------------------------------------------------------
+//
+EXPORT_C TInt CUPnPAppFileSharingDialog::ExecuteSharingDialogLD()
+    {
+    return ExecuteLD( R_SHARINGUI_DIALOG );
+    }
+
+
+// --------------------------------------------------------------------------
+// CUPnPAppFileSharingDialog::OkToExitL(TInt aButtonId)
+// called by framework when the softkey is pressed
+// --------------------------------------------------------------------------
+//
+TBool CUPnPAppFileSharingDialog::OkToExitL(TInt aButtonId)
+{
+   __LOG("CUPnPAppFileSharingDialog::OkToExitL");
+
+   TBool retval(EFalse);
+   if (aButtonId == EAknSoftkeyOptions)
+       {
+       DisplayMenuL();
+       }
+   else if (aButtonId == EAknSoftkeyBack)
+       {
+       iTitlePane->SetTextToDefaultL();
+       retval = ETrue; //back to previous dialog
+       }
+   else if ( aButtonId == EAknSoftkeyChange )
+       {
+       // msk event
+       TKeyEvent tmpEvent;
+       tmpEvent.iCode = EKeyOK;
+       tmpEvent.iModifiers = 0;
+       tmpEvent.iRepeats = 0;
+       tmpEvent.iScanCode = 0;
+       TEventCode eventType = EEventKey;
+       OfferKeyEventL( tmpEvent, eventType );
+       }
+    return retval;
+}
+
+// --------------------------------------------------------------------------
+// CUPnPAppFileSharingDialog::DynInitMenuPaneL
+// Dynamically initalizes menu pane
+// --------------------------------------------------------------------------
+//
+void CUPnPAppFileSharingDialog::DynInitMenuPaneL( TInt aResourceId,
+                                            CEikMenuPane* aMenuPane )
+    {
+    __LOG("CUPnPAppMainDialog::CUPnPAppFileSharingDialog");
+
+    if (aResourceId == R_SHARINGUI_MENU && 
+        !FeatureManager::FeatureSupported( KFeatureIdHelp ) )
+        {
+        aMenuPane->SetItemDimmed( EAknCmdHelp, ETrue );
+        }
+    }
+
+
+// --------------------------------------------------------------------------
+// CUPnPAppFileSharingDialog::PreLayoutDynInitL()
+// called by framework before dialog is shown
+// --------------------------------------------------------------------------
+//
+void CUPnPAppFileSharingDialog::PreLayoutDynInitL()
+    {
+    __LOG("CUPnPAppFileSharingDialog::PreLayoutDynInitL");
+
+    iFileSharingList->LoadDataFromEngineL();
+
+    // set dialog title
+    iStatusPane = iEikonEnv->AppUiFactory()->StatusPane();
+    iTitlePane = (CAknTitlePane*)iStatusPane->ControlL(
+                    TUid::Uid(EEikStatusPaneUidTitle));
+    iTitlePane->SetTextL(*StringLoader::LoadLC( R_SHARINGUI_TITLE_TEXT ) );
+    CleanupStack::PopAndDestroy();
+    }
+
+// --------------------------------------------------------------------------
+// CUPnPAppFileSharingDialog::ProcessCommandL()
+// called by framework when menu command is selected
+// --------------------------------------------------------------------------
+//
+void CUPnPAppFileSharingDialog::ProcessCommandL(TInt aCommand)
+    {
+    __LOG("CUPnPAppFileSharingDialog::ProcessCommandL");
+
+    HideMenu();
+
+    switch ( aCommand )
+        {
+        case ESharingUiCmdRefresh: 
+            {
+            TInt selectedItem = iFileSharingList->
+                ListBox()->CurrentItemIndex();
+            iFileSharingEngine.RefreshSharedMediaL( EImageAndVideo );
+            iFileSharingEngine.RefreshSharedMediaL( EPlaylist );
+            DisplayInfoL( R_SHARINGUI_UPDATING_CONTENT_HEADER,
+                          R_SHARINGUI_UPDATING_CONTENT_NOTE_TEXT,
+                          R_SHARINGUI_INFO_QUERY );
+            break;
+            }
+    case ESharingUiCmdAppChange:
+        {
+        TInt selectedItem = iFileSharingList->ListBox()->CurrentItemIndex();
+        if ( selectedItem == ESharingUiSettingItemVisibility )
+            {
+            iFileSharingList->EditItemL(selectedItem, ETrue);
+            }
+        else
+            {
+            RunMultiselectionDialogL();
+            }
+        break;
+        }
+
+    case EAknCmdExit:
+        {
+        User::Exit(KErrNone);
+        break;
+        }
+
+    case EAknCmdHelp:
+        {
+        HlpLauncher::LaunchHelpApplicationL( iEikonEnv->WsSession(),
+                     iEikonEnv->EikAppUi()->AppHelpContextL() );
+        break;
+        }
+
+    default:
+        {
+        __LOG("CUPnPAppFileSharingDialog::ProcessCommandL Unknown cmd");
+        }
+        }
+
+    CAknDialog::ProcessCommandL(aCommand);
+    }
+
+// --------------------------------------------------------------------------
+// CUPnPAppSettingsDialog::OfferKeyEventL()
+// called by framework when key is pressed
+// --------------------------------------------------------------------------
+//
+TKeyResponse CUPnPAppFileSharingDialog::OfferKeyEventL(
+    const TKeyEvent &aKeyEvent, TEventCode aType )
+    {
+    __LOG("CUPnPAppFileSharingDialog::OfferKeyEventL");
+
+    TKeyResponse retval = EKeyWasNotConsumed;
+    switch ( aKeyEvent.iCode )
+        {
+        case EKeyDownArrow:
+        case EKeyUpArrow:
+            {
+            if (aType == EEventKey)
+                {
+                retval = iFileSharingList->OfferKeyEventL( aKeyEvent, aType );
+                }
+            break;
+            }
+
+        case EKeyOK:
+            {
+            if ( aType == EEventKey )
+                {
+                TInt selectedItem =
+                    iFileSharingList->ListBox()->CurrentItemIndex();
+                if ( selectedItem == ESharingUiSettingItemVisibility )
+                    {
+                    retval = iFileSharingList->OfferKeyEventL(aKeyEvent, aType);
+                    }
+                else
+                    {
+                    RunMultiselectionDialogL();
+                    retval = EKeyWasConsumed;
+                    }
+                }
+            break;
+            }
+
+        default:
+            {
+            retval = CAknDialog::OfferKeyEventL(aKeyEvent, aType);
+            break;
+            }
+        }
+        
+    return retval;
+    }
+
+// --------------------------------------------------------------------------
+// CUPnPAppFileSharingDialog::HandleSharingStatus
+// Function informs when file sharing was enabled or disabled
+// --------------------------------------------------------------------------
+//
+void CUPnPAppFileSharingDialog::HandleSharingStatus( 
+        CUPnPFileSharingEngine& aEngine, 
+        TInt aError, 
+        TBool aPhase )
+    {
+    __LOG( "[CUPnPAppFileSharingDialog]\t CUPnPAppFileSharingDialog::\
+HandleSharingStatus begin");
+
+    iFileSharingList->HandleSharingStatus( aEngine, aError, aPhase );
+
+    if( !aError )
+        {
+        TInt strId( R_UPNP_PHONE_HIDDEN_TEXT );
+        if( aPhase )
+            {        
+            strId = R_UPNP_PHONE_VISIBLE_TEXT;
+            }
+
+        TRAP_IGNORE(
+            HBufC* str = StringLoader::LoadLC( strId );
+            CAknInformationNote* note = new ( ELeave ) CAknInformationNote;
+            note->ExecuteLD( *str );
+            CleanupStack::PopAndDestroy( str ) );
+        }
+
+    __LOG( "[CUPnPAppFileSharingDialog]\t CUPnPAppFileSharingDialog::\
+HandleSharingStatus end");
+    }
+
+// --------------------------------------------------------------------------
+// CUPnPAppFileSharingDialog::HandleSharingProgress
+// Informs about status of the sharing progress
+// --------------------------------------------------------------------------
+//
+void CUPnPAppFileSharingDialog::HandleSharingProgress(
+        CUPnPFileSharingEngine& /*aEngine*/, 
+        const RArray<TUpnpProgressInfo>& aProgress )
+    {
+    __LOG( "[CUPnPAppFileSharingDialog]\t CUPnPAppFileSharingDialog::\
+HandleSharingProgress begin");
+
+    TRAPD( err,
+        CAknInputBlock::NewLC();
+        iFileSharingList->SetFilesharingTextsL( aProgress );
+        CleanupStack::PopAndDestroy() );
+    if ( err != KErrNone )
+        {
+        //show some critical errors using
+        //default symbian error notes
+        CActiveScheduler::Current()->Error( err );
+        }
+
+    __LOG( "[CUPnPAppFileSharingDialog]\t CUPnPAppFileSharingDialog::\
+HandleSharingProgress end");
+    }
+
+// --------------------------------------------------------------------------
+// CUPnPAppFileSharingDialog::HandleSharingDone
+// Function informs when file sharing is done
+// --------------------------------------------------------------------------
+//
+void CUPnPAppFileSharingDialog::HandleSharingDone( 
+        CUPnPFileSharingEngine& /*aEngine*/, TInt aError )
+    {
+    __LOG( "[CUPnPAppFileSharingDialog]\t CUPnPAppFileSharingDialog::\
+HandleSharingDone begin");
+
+    //Show information note that sharing is completed
+    if ( aError == KErrInUse ||
+         aError == KErrNoMemory ||
+         aError == KErrDiskFull )
+        {
+        //show some critical errors using
+        //default symbian error notes
+        CActiveScheduler::Current()->Error( aError );
+        }
+
+    __LOG( "[CUPnPAppFileSharingDialog]\t CUPnPAppFileSharingDialog::\
+HandleSharingDone end");
+    }
+
+// --------------------------------------------------------------------------
+// CUPnPAppFileSharingDialog::HandleSharingConnectionLost
+// Callback to inform if connection has been lost
+// --------------------------------------------------------------------------
+//
+void CUPnPAppFileSharingDialog::HandleSharingConnectionLost( 
+        CUPnPFileSharingEngine& aEngine )
+    {
+    __LOG("CUPnPAppFileSharingDialog::HandleSharingConnectionLost");
+
+    TRAPD( err,
+        CAknInputBlock::NewLC();
+        iFileSharingList->HandleSharingConnectionLost( aEngine );
+        CleanupStack::PopAndDestroy() ); //CAknInputBlock
+    if ( err != KErrNone )
+        {
+        //show some critical errors using
+        //default symbian error notes
+        CActiveScheduler::Current()->Error( err );
+        }
+    }
+
+// --------------------------------------------------------------------------
+// CUPnPAppFileSharingDialog::RunMultiselectionDialogL();
+// Opens album selection dialog and sends selected albums
+// to engine
+// --------------------------------------------------------------------------
+//
+void CUPnPAppFileSharingDialog::RunMultiselectionDialogL(void)
+    {
+    __LOG("CUPnPAppFileSharingDialog::RunMultiselectionDialogL");
+
+    CUPnPMultiselectionUi* multiselectionDialog;
+
+    TInt selectedItem = iFileSharingList->ListBox()->CurrentItemIndex();
+
+    TInt visualSharingState;
+
+
+    THomeConnectMediaType mediaType;
+    if ( selectedItem == ESharingUiSettingItemVisual )
+        {
+        mediaType =
+                                EImageAndVideo;
+        }
+
+    else
+        {
+        mediaType =
+                                EPlaylist;
+        }
+    CArrayFix<TInt>* markedItems = new(ELeave) CArrayFixFlat<TInt>(3);
+    CleanupStack::PushL( markedItems );
+    multiselectionDialog = CUPnPMultiselectionUi::NewL(
+                                mediaType,
+                                &iFileSharingEngine,
+                                visualSharingState,
+                                markedItems );  
+    CleanupStack::PushL( multiselectionDialog );
+    TInt ret = multiselectionDialog->ExecuteDlgLD();
+
+    CleanupStack::PopAndDestroy( multiselectionDialog );
+
+    multiselectionDialog = NULL;
+
+    // Set title back
+    iTitlePane->SetTextL(*StringLoader::LoadLC( R_SHARINGUI_TITLE_TEXT ));
+    CleanupStack::PopAndDestroy();
+
+    if ( ret )
+        {
+        __LOG("CUPnPAppFileSharingDialog::RunMultiselectionDialogL: \
+Calling ShareMediaFilesL..");
+        // set selections
+        iFileSharingEngine.SetSelectionIndexesL( mediaType, *markedItems );
+
+        // Share files asynchronously
+        iFileSharingEngine.ShareMediaL( mediaType );
+
+        DisplayInfoL( R_SHARINGUI_UPDATING_CONTENT_HEADER,
+                      R_SHARINGUI_UPDATING_CONTENT_NOTE_TEXT,
+                      R_SHARINGUI_INFO_QUERY );
+        }
+    CleanupStack::PopAndDestroy( markedItems );
+    
+     }
+
+// --------------------------------------------------------------------------
+// CUPnPAppFileSharingDialog::GetHelpContext
+// --------------------------------------------------------------------------
+//
+void CUPnPAppFileSharingDialog::GetHelpContext(
+                                TCoeHelpContext& aContext) const
+    {
+    __LOG("CUPnPAppMainDialog::CUPnPAppFileSharingDialog");
+
+    aContext.iMajor = TUid::Uid( KHomeConnectUID3 );
+    aContext.iContext = KUPNP_HLP_SHARE_CONTENT;
+    }
+
+// --------------------------------------------------------------------------
+// CUPnPAppFileSharingDialog::CreateCustomControlL
+// From CAknDialog
+// --------------------------------------------------------------------------
+//
+SEikControlInfo CUPnPAppFileSharingDialog::CreateCustomControlL(
+                                                    TInt aControlType)
+    {
+    __LOG( "[CUPnPAppFileSharingDialog]\t CreateCustomControlL");
+    iFileSharingList = CUPnPAppFileSharingList::NewL( 
+        &iFileSharingEngine );
+
+    SEikControlInfo controlInfo;
+    controlInfo.iControl = NULL;
+    controlInfo.iTrailerTextId = 0;
+    controlInfo.iFlags = 0;
+    
+    if ( aControlType == KAknCtLastControlId )
+        {
+        controlInfo.iControl = iFileSharingList;
+        }
+    iFileSharingEngine.RequestSharingProgressL();
+
+    return controlInfo;
+    }
+    
+// --------------------------------------------------------------------------
+// CUPnPAppFileSharingDialog::DisplayInfoL();
+// Shows message query to user
+// --------------------------------------------------------------------------
+//
+void CUPnPAppFileSharingDialog::DisplayInfoL(TInt aHeaderResourceId,
+                                             TInt aMessageResourceId,
+                                             TInt aDialogResourceId)
+    {
+    HBufC* noteHeader = StringLoader::LoadL(
+        aHeaderResourceId);
+    CleanupStack::PushL(noteHeader);
+    HBufC* noteMsg = StringLoader::LoadL(
+        aMessageResourceId);
+    CleanupStack::PushL(noteMsg);
+
+    CAknMessageQueryDialog* dlg = CAknMessageQueryDialog::NewL(*noteMsg);
+
+    dlg->PrepareLC(aDialogResourceId);
+    dlg->QueryHeading()->SetTextL(*noteHeader);
+    dlg->RunLD();
+
+    CleanupStack::PopAndDestroy(noteMsg);
+    CleanupStack::PopAndDestroy(noteHeader);
+    }
+
+// --------------------------------------------------------------------------
+// CUPnPAppFileSharingDialog::UpdateFileSharingListL();
+// Get the pointer of iFileSharingList,update the visibity of item
+// --------------------------------------------------------------------------
+//
+EXPORT_C void CUPnPAppFileSharingDialog::UpdateFileSharingListL() 
+    {
+    if( iFileSharingList )
+        {  
+        iFileSharingList->UpdateVisibitySettingItemL();
+        }
+   
+    }
+//  End of File