# HG changeset patch # User Dremov Kirill (Nokia-D-MSW/Tampere) # Date 1283256727 -10800 # Node ID 73a1feb507fb78cbd9d1a54700f18b2b53de9d24 # Parent 33a5d2bbf6fce39861d4300896e5cacef8ffa4c9 Revision: 201032 Kit: 201035 diff -r 33a5d2bbf6fc -r 73a1feb507fb group/bld.inf --- a/group/bld.inf Thu Aug 19 09:51:39 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,36 +0,0 @@ -/* -* 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: This file provides the information required for building the -* ipappservices -* -*/ - - -#include - -PRJ_PLATFORMS -DEFAULT - -PRJ_EXPORTS -../rom/multimediasharing.iby CORE_APP_LAYER_IBY_EXPORT_PATH(multimediasharing.iby) -../rom/multimediasharingresources.iby LANGUAGE_APP_LAYER_IBY_EXPORT_PATH(multimediasharingresources.iby) - -// Export stub sis file making possible eclipsing files in the rom image -../rom/multimediasharing_stub.SIS /epoc32/data/z/system/install/multimediasharing_stub.sis - -PRJ_MMPFILES -#include "../mmsharinguis_plat/group/bld.inf" -#include "../mmsharing/group/bld.inf" -#include "../mmshplugins/group/bld.inf" -#include "../mmsharing/mmshui/help/group/bld.inf" \ No newline at end of file diff -r 33a5d2bbf6fc -r 73a1feb507fb inc/musavasettings.h --- a/inc/musavasettings.h Thu Aug 19 09:51:39 2010 +0300 +++ b/inc/musavasettings.h Tue Aug 31 15:12:07 2010 +0300 @@ -24,6 +24,7 @@ #include #include #include +#include class MMusAvaSettingsObserver; @@ -49,10 +50,18 @@ }; public: - /** - * Returns the manual activation - * - */ + /** + * Returns the fast mode value + * + * @return The fast mode value. + */ + virtual MusSettingsKeys::TFastMode FastMode() const; + + + /** + * Returns the manual activation + * + */ virtual TManualActivation ManualActivation(); /** @@ -117,20 +126,17 @@ */ virtual void SetObserver( MMusAvaSettingsObserver& aObserver ); + /* + * Gets the settings observer pointer + * + */ + MMusAvaSettingsObserver* Observer(); + /** * Sets the for the manual activation * */ virtual void SetManualActivation( TManualActivation aManualActivation ); - - /** - * Returns the direction of the mobile call. - * - * @return 0, if the direction of the call is unknown. - * 1, call is from public number. - * 2, call is from private number - */ - virtual TInt CallPrivacy(); }; diff -r 33a5d2bbf6fc -r 73a1feb507fb inc/musavasettings.inl --- a/inc/musavasettings.inl Thu Aug 19 09:51:39 2010 +0300 +++ b/inc/musavasettings.inl Tue Aug 31 15:12:07 2010 +0300 @@ -11,12 +11,11 @@ * * Contributors: * -* Description: ECOM interface default implementation. +* Description: ECOM interface default implementation. * */ - #ifndef MUSAVASETTING_INL #define MUSAVASETTING_INL @@ -26,6 +25,16 @@ // // ----------------------------------------------------------------------------- // +inline MusSettingsKeys::TFastMode MMusAvaSettings::FastMode() const + { + User::Leave( KErrNotSupported ); + return MusSettingsKeys::EFastModeOff; + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// inline MMusAvaSettings::TManualActivation MMusAvaSettings::ManualActivation() { User::Leave( KErrNotSupported ); @@ -143,19 +152,19 @@ // // ----------------------------------------------------------------------------- // -inline void MMusAvaSettings::SetManualActivation( TManualActivation /*aManualActivation*/ ) +inline MMusAvaSettingsObserver* MMusAvaSettings::Observer() { - User::Leave( KErrNotSupported ); + return NULL; } // ----------------------------------------------------------------------------- // // ----------------------------------------------------------------------------- // -inline TInt MMusAvaSettings::CallPrivacy() - { +inline void MMusAvaSettings::SetManualActivation( TManualActivation /*aManualActivation*/ ) + { User::Leave( KErrNotSupported ); - return 0; // To avoid "return value expected" warning } + #endif // MUSAVASETTING_INL diff -r 33a5d2bbf6fc -r 73a1feb507fb inc/muscallmonitorobserver.h --- a/inc/muscallmonitorobserver.h Thu Aug 19 09:51:39 2010 +0300 +++ b/inc/muscallmonitorobserver.h Tue Aug 31 15:12:07 2010 +0300 @@ -16,12 +16,11 @@ */ - #ifndef MUSCALLMONITOROBSERVER_H #define MUSCALLMONITOROBSERVER_H #include -#include +#include /** * Observer for the monitor @@ -33,22 +32,19 @@ public: // type definitions - virtual void CallConnectedL( const TDesC& aTelNumber ) = 0; + virtual void CallConnectedL( const TDesC& aTelNumber, TBool aIsSipUri ) = 0; - virtual void CallHoldL( const TDesC& aTelNumber ) = 0; + virtual void CallHoldL( const TDesC& aTelNumber, TBool aIsSipUri ) = 0; virtual void ConferenceCallL() = 0; virtual void NoActiveCallL() = 0; - - virtual void ConferenceCallLTerminated() = 0; /** * */ - virtual TBool ResolveAddressesL( CPbkContactItem& /*aPbkItem*/, - CDesCArrayFlat*& /*aContactsArray*/, - TPbkFieldId /*aTPbkFieldId*/ ) + virtual TBool ResolveAddressesL( const TDesC& /*aContactId*/, + CDesCArrayFlat*& /*aContactsArray*/) { return EFalse; } diff -r 33a5d2bbf6fc -r 73a1feb507fb inc/muscommon.h --- a/inc/muscommon.h Thu Aug 19 09:51:39 2010 +0300 +++ b/inc/muscommon.h Tue Aug 31 15:12:07 2010 +0300 @@ -53,6 +53,12 @@ ESipOptionsFailed // sip options revealed that the remote host is // not capable of video sharing -> error }; + + // values for application startup behavior (have same effect as command + // enumerations of CApaCommandLine) + const TUint KMusCommandLetterRun = 'R'; + const TUint KMusCommandLetterBackground = 'B'; + } #endif // MUSMANAGERCOMMON_H diff -r 33a5d2bbf6fc -r 73a1feb507fb inc/musfactorysettings.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/inc/musfactorysettings.h Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,62 @@ +/* +* Copyright (c) 2005-2006 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: This interface is used by +* clients to get and availability setting for Video Charging +* +*/ + + +#ifndef __MUSFACTORYSETTINGS_H__ +#define __MUSFACTORYSETTINGS_H__ + +// INCLUDES +#include +#include +#include +#include + +class MMusAvaSettingsObserver; + +/** + * Utility function to check the factory configurations. + * @lib musaoplugin.lib + */ + +class MusFactorySettings + { +public: + /** + * Checks from the factory settings whether call type is supported. + * @aCallType : Type of the call retrived from Tsy apis. + * + * @return ETrue if supported else EFalse. + * Leaves when cenrep key is not found or cenrep related error happens. + */ + static TBool IsSupportedL(const TPSCTsyCallType& aCallType); + + /** + * Checks from the factory settings whether network type is supported. + * @aNetworkType : Type of the network + * + * @return ETrue if supported else EFalse. + * Leaves when cenrep key is not found or cenrep related error happens. + */ + static TBool IsSupportedL(const RMobilePhone::TMobilePhoneNetworkMode& aNetworkType); + + }; + +#include "musfactorysettings.inl" + +#endif + diff -r 33a5d2bbf6fc -r 73a1feb507fb inc/musfactorysettings.inl --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/inc/musfactorysettings.inl Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,108 @@ +/* +* Copyright (c) 2006 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: +* +*/ + + +#ifndef MUSFACTROYSETTINGS_INL +#define MUSFACTORYSETTINGS_INL + + +#include "musfactorysettings.h" +#include "mussettingskeys.h" +#include "mussettings.h" +#include "muslogger.h" + +// ----------------------------------------------------------------------------- +// Checks from the factory settings ( central repository ) +// whether call type is supported. +// ----------------------------------------------------------------------------- +// +inline TBool MusFactorySettings::IsSupportedL( + const TPSCTsyCallType& aCallType) + { + MusSettingsKeys::TAllowedCSOnly allowedCallType = + MultimediaSharingSettings::AllowedCSOnlySettingL(); + if( allowedCallType == MusSettingsKeys::EAllowedCSOnly && + aCallType != EPSCTsyCallTypeCSVoice ) + { + MUS_LOG( "mus: [MUSAO] <-> MusFactorySettings::IsSupportedL Call : EFalse" ) + return EFalse; + } + MUS_LOG( "mus: [MUSAO] <-> MusFactorySettings::IsSupportedL Call : ETrue" ) + return ETrue; + } + + +// ----------------------------------------------------------------------------- +// Checks from the factory settings ( central repository ) +// whether network type is supported. +// ----------------------------------------------------------------------------- +// +inline TBool MusFactorySettings::IsSupportedL( + const RMobilePhone::TMobilePhoneNetworkMode& aNetworkType) + { + MUS_LOG1( "mus: [MUSAO] -> MusFactorySettings::IsSupportedL Network :%d", aNetworkType ) + + TBool networkSupported = EFalse; + TInt onlyIn3GNetwork = MusSettingsKeys::EAllowedAllBearers; + // Check from Central Repository that do we Only support in 3G or All Networks. + // if key is not found then behave like default ie AllowedAllBearers. + TRAP_IGNORE( onlyIn3GNetwork = MultimediaSharingSettings::Allowed3GOnlySettingL() ); + if( onlyIn3GNetwork == MusSettingsKeys::EAllowedAllBearers ) + { + networkSupported = ETrue; + } + else + { + switch( aNetworkType ) + { + case RMobilePhone::ENetworkModeWcdma: + case RMobilePhone::ENetworkModeTdcdma: + case RMobilePhone::ENetworkModeCdma95: + case RMobilePhone::ENetworkModeCdma2000: + { + networkSupported = ETrue; + break; + } + + case RMobilePhone::ENetworkModeGsm: + { + TInt edgeDtmSupport = KErrNone; + + // We Will throw an Activation Error for the Mandatory Settings if + // they are not found. + + edgeDtmSupport = MultimediaSharingSettings::EdgeDtmSupportSettingL(); + + if( edgeDtmSupport == MusSettingsKeys::EDtmModeAllowed ) + { + networkSupported = ETrue; + } + else + { + networkSupported = EFalse; + } + break; + } + } + } + MUS_LOG1( "mus: [MUSAO] <- MusFactorySettings::IsSupportedL (%d)", networkSupported ) + + return networkSupported; + } + + +#endif // MUSFACTROYSETTINGS_INL diff -r 33a5d2bbf6fc -r 73a1feb507fb inc/musindicatorapi.h --- a/inc/musindicatorapi.h Thu Aug 19 09:51:39 2010 +0300 +++ b/inc/musindicatorapi.h Tue Aug 31 15:12:07 2010 +0300 @@ -29,14 +29,28 @@ #include - +class CMusIndicatorDsa; class CAknGlobalMsgQuery; class CMusSoundPlayer; /** - * MusIndicatorApi provides means to indicate availability + * MusIndicatorApi provides means to show notes and indicate availability * of videosharing to user. + * + * @code + * // Shows roaming activation query + * if ( MusIndicatorApi::ConfirmationQueryL( + * MusIndicatorApi::EVsRoamingActivationQuery ) ) + * { + * // respond to user response "yes" + * } + * else + * { + * // respond to user response "no" + * } + * @endcode + * * @lib musindicator.lib */ class CMusIndicatorApi : public CActive, MMusSoundPlayerObserver @@ -85,6 +99,14 @@ ~CMusIndicatorApi(); /** + * Shows a global query to user. + * + * @param aQuery Identifies displayed query. + * @return Boolean value indicating if user accepted the query. + */ + IMPORT_C static TBool ConfirmationQueryL( TVsPopupQuery aQuery ); + + /** * Indicates availability of video sharing. */ IMPORT_C void IndicateAvailabilityL(); @@ -141,11 +163,39 @@ */ void PlayToneL(); + /** + * Returns text from a resource file for a specified note/query. + * + * @param aQuery Identifies displayed query. + * @return Text associated with specified query. Ownership is transferred. + */ + static HBufC* NoteTextLC( TVsPopupQuery aQuery ); + + /** + * Asynchronous query. Result returned via observer interface. + */ + void ShowLiveSharingQueryL( TBool aPlayTone ); + + static TInt LiveSharingQueryTimeout( TAny* aThis ); + void StartLiveSharingL(); + void ToggleIndicatorL(); + TBool IsSubscriber() const; private: // data + /** + * Pointer to indicator window + * Own. + */ + CMusIndicatorDsa* iIndicatorWindow; + + /** + * Pointer to global msg query. + * Own. + */ + CAknGlobalMsgQuery* iQuery; /** * Sound player. @@ -158,6 +208,8 @@ * Own. */ MMusIndicatorObserver* iObserver; + + CPeriodic* iLiveSharingQueryTimeout; RProperty iProperty; diff -r 33a5d2bbf6fc -r 73a1feb507fb inc/musresourcefinderutil.inl --- a/inc/musresourcefinderutil.inl Thu Aug 19 09:51:39 2010 +0300 +++ b/inc/musresourcefinderutil.inl Tue Aug 31 15:12:07 2010 +0300 @@ -59,7 +59,6 @@ BaflUtils::NearestLanguageFile(fs ,fName ); CleanupStack::PopAndDestroy( fileName ); // fileName fileName = fName.AllocLC(); - fileNamePtr.Set(fileName->Des()); } if ( BaflUtils::FileExists( fs, *fileName ) ) { diff -r 33a5d2bbf6fc -r 73a1feb507fb inc/mussesseioninformationapi.h --- a/inc/mussesseioninformationapi.h Thu Aug 19 09:51:39 2010 +0300 +++ b/inc/mussesseioninformationapi.h Tue Aug 31 15:12:07 2010 +0300 @@ -51,8 +51,7 @@ ENoCall, ECallConnected, ECallHold, - EConferenceCall, - EConferenceTerminated + EConferenceCall }; /** Contains the call direction */ @@ -74,25 +73,11 @@ EMUSAllowed = 1, EMUSForbidden }; - - /** Contains the call privacy */ - const TInt KMUSPrivacy( 0x102823A4 ); - /** Contains the possible values for call privacy*/ - enum TMusCallPrivacy - { - EPrivacyOn = 1, - EPrivacyOff - }; - - /** Phone's CLIR setting. This is used in MO case to determine if the - * caller's phone number/id is sent to remote party */ - const TInt KMusClirSetting( 0x102823A5 ); - /** Possible values for KMusClirSetting */ - enum TMusClirSetting - { - ESendOwnNumber, - EDoNotSendOwnNumber - }; + /** Contains the call provider information. ( For example Skype ) + * This string will be used to parse the corresponding ecom plugin + * which implements the livecomms engine api + */ + const TInt KMUSCallProvider( 0x102823A4 ); } #endif // MUSRESOURCEPROPERTIES_H diff -r 33a5d2bbf6fc -r 73a1feb507fb inc/mussessionproperties.h --- a/inc/mussessionproperties.h Thu Aug 19 09:51:39 2010 +0300 +++ b/inc/mussessionproperties.h Tue Aug 31 15:12:07 2010 +0300 @@ -60,8 +60,8 @@ const TInt KSipProfileId( 0x1A ); const TInt KContactName( 0x1B ); - const TInt KPrivacyStatus( 0x1C ); const TInt KMusIndicatorStatus( KMusIndicator ); + const TInt KFastMode( 0x1D ); } #endif // MUSPSKEYS_H diff -r 33a5d2bbf6fc -r 73a1feb507fb inc/mussettings.h --- a/inc/mussettings.h Thu Aug 19 09:51:39 2010 +0300 +++ b/inc/mussettings.h Tue Aug 31 15:12:07 2010 +0300 @@ -14,7 +14,7 @@ * Description: ?Description * Name : mussettingskeys.h -* Version : %version: 9 % << Don't touch! Updated by Synergy at check-out. +* Version : %version: 10 % << Don't touch! Updated by Synergy at check-out. * */ @@ -30,6 +30,51 @@ class MultimediaSharingSettings { public: + + /** + * Returns the cenrep configured value for KFastStartupMode key. + * + * @return Current KVideoDirection Key value from cenrep. + */ + static MusSettingsKeys::TFastMode FastStartupModeL(); + + + /** + * Returns the cenrep configured value for KVideoBandwidth key. + * + * @return Current KVideoBandwidth Key value from cenrep. + */ + static TInt VideoBandwidthSettingL(); + + /** + * Returns the cenrep configured value for KVideoDirection key. + * + * @return Current KVideoDirection Key value from cenrep. + */ + static MusSettingsKeys::TVideoDirection VideoDirectionL(); + + + /** + * Returns the cenrep configured value for KCameraUsage key. + * + * @return Current KCameraUsage Key value from cenrep. + */ + static MusSettingsKeys::TUseCamera CameraUsageL(); + + /** + * Returns the cenrep configured value for AllowedCSOnly key. + * + * @return Current AllowedCSOnly Key value from cenrep. + */ + static MusSettingsKeys::TAllowedCSOnly AllowedCSOnlySettingL(); + + /** + * Returns the cenrep configured value for Allowed3GOnly key. + * + * @return Current Allowed3GOnly Key value from cenrep. + */ + static MusSettingsKeys::TAllowed3GOnly Allowed3GOnlySettingL(); + /** * Returns current MS activation setting. * @@ -80,6 +125,36 @@ * * @return */ + static MusSettingsKeys::TPopupNotification PopupNotificationSettingL(); + + /** + * Sets + * + * @param + */ + static void SetPopupNotificationSettingL( + MusSettingsKeys::TPopupNotification aNotificationSetting ); + + /** + * Returns + * + * @return + */ + static MusSettingsKeys::TPopupNotificationType PopupNotificationTypeSettingL(); + + /** + * Sets + * + * @param + */ + static void SetPopupNotificationTypeSettingL( + MusSettingsKeys::TPopupNotificationType aNotificationSetting ); + + /** + * Returns + * + * @return + */ static MusSettingsKeys::TEdgeDtmSupport EdgeDtmSupportSettingL(); /** @@ -235,9 +310,7 @@ * @param * @param */ - static void MultimediaSharingSettings::SetPropertyValueL( - TUint32 aKey, - const TDesC& aValue ); + static void SetPropertyValueL( TUint32 aKey, const TDesC& aValue ); /** * For internal usage only. Use direct getters/setters for each setting. @@ -246,22 +319,15 @@ * @param */ static void SetPropertyValueL( TUint32 aKey, TInt aValue ); - + /** * If Encoding device set to KMusDisableAVC (0x0fffffff) returns ETrue * else otherwise. * Means AVC will be disabled when encoding device cenrep configuration * set to 0x0fffffff. */ - static TBool MultimediaSharingSettings::IsAvcDisabled(); - - - /** - * @return ETrue if privacy is requested - * EFalse otherwise, or if an error occurred reading cenrep - */ - static TBool PrivacySetting(); - + static TBool IsAvcDisabled(); + }; #include "mussettings.inl" diff -r 33a5d2bbf6fc -r 73a1feb507fb inc/mussettings.inl --- a/inc/mussettings.inl Thu Aug 19 09:51:39 2010 +0300 +++ b/inc/mussettings.inl Tue Aug 31 15:12:07 2010 +0300 @@ -12,7 +12,7 @@ * Contributors: * * Description: ?Description -* Version : %version: 19 % << Don't touch! Updated by Synergy at check-out. +* Version : %version: 20 % << Don't touch! Updated by Synergy at check-out. * */ @@ -191,6 +191,66 @@ // // ----------------------------------------------------------------------------- // +inline MusSettingsKeys::TPopupNotification + MultimediaSharingSettings::PopupNotificationSettingL() + { + MUS_LOG( "mus: [MUSSET] -> MultimediaSharingSettings::PopupNotificationSettingL()" ) + TInt value = GetPropertyValueL( MusSettingsKeys::KPopupNotification ); + MUS_LOG1( "mus: [MUSSET] <- MultimediaSharingSettings::PopupNotificationSettingL( %d )", + value ) + return ( MusSettingsKeys::TPopupNotification ) value; + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +inline void MultimediaSharingSettings::SetPopupNotificationSettingL( + MusSettingsKeys::TPopupNotification aNotificationSetting ) + { + MUS_LOG1( "mus: [MUSSET] -> MultimediaSharingSettings::SetPopupNotificationSettingL( %d )", + ( TInt ) aNotificationSetting ) + SetPropertyValueL( MusSettingsKeys::KPopupNotification, + ( TInt ) aNotificationSetting ); + MUS_LOG( "mus: [MUSSET] <- MultimediaSharingSettings::SetPopupNotificationSettingL()" ) + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +inline MusSettingsKeys::TPopupNotificationType + MultimediaSharingSettings::PopupNotificationTypeSettingL() + { + MUS_LOG( "mus: [MUSSET] -> MultimediaSharingSettings::PopupNotificationTypeSettingL()" ) + TInt value = GetPropertyValueL( MusSettingsKeys::KPopupNotificationType ); + MUS_LOG1( "mus: [MUSSET] <- MultimediaSharingSettings::PopupNotificationTypeSettingL( %d )", + value ) + return ( MusSettingsKeys::TPopupNotificationType ) value; + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +inline void MultimediaSharingSettings::SetPopupNotificationTypeSettingL( + MusSettingsKeys::TPopupNotificationType aNotificationSetting ) + { + MUS_LOG1( "mus: [MUSSET] -> MultimediaSharingSettings::SetActivationSettingL( %d )", + ( TInt ) aNotificationSetting ) + SetPropertyValueL( MusSettingsKeys::KPopupNotificationType, ( TInt ) aNotificationSetting ); + MUS_LOG( "mus: [MUSSET] <- MultimediaSharingSettings::SetActivationSettingL()" ) + + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// inline MusSettingsKeys::TEdgeDtmSupport MultimediaSharingSettings::EdgeDtmSupportSettingL() { @@ -524,6 +584,88 @@ } // ----------------------------------------------------------------------------- +// Returns the cenrep configured value for KAllowOnlyWithActiveCSCall key. +// ----------------------------------------------------------------------------- +// +inline MusSettingsKeys::TAllowedCSOnly + MultimediaSharingSettings::AllowedCSOnlySettingL() + { + MUS_LOG( "mus: [MUSSET] -> MultimediaSharingSettings::AllowedCSOnlySettingL()" ) + TInt value = GetPropertyValueL( MusSettingsKeys::KAllowOnlyWithActiveCSCall ); + MUS_LOG1( "mus: [MUSSET] <- MultimediaSharingSettings::AllowedCSOnlySettingL( %d )", + value ) + return ( MusSettingsKeys::TAllowedCSOnly ) value; + } + +// ----------------------------------------------------------------------------- +// Returns the cenrep configured value for KAllowOnlyIn3GNetwork key. +// ----------------------------------------------------------------------------- +// +inline MusSettingsKeys::TAllowed3GOnly + MultimediaSharingSettings::Allowed3GOnlySettingL() + { + MUS_LOG( "mus: [MUSSET] -> MultimediaSharingSettings::Allowed3GOnlySettingL()" ) + TInt value = GetPropertyValueL( MusSettingsKeys::KAllowOnlyIn3GNetwork ); + MUS_LOG1( "mus: [MUSSET] <- MultimediaSharingSettings::Allowed3GOnlySettingL( %d )", + value ) + return ( MusSettingsKeys::TAllowed3GOnly ) value; + } + + +// ----------------------------------------------------------------------------- +// Returns the cenrep configured value for KCameraUsage key. +// ----------------------------------------------------------------------------- +// +inline MusSettingsKeys::TUseCamera + MultimediaSharingSettings::CameraUsageL() + { + MUS_LOG( "mus: [MUSSET] -> MultimediaSharingSettings::CameraUsageL()" ) + TInt value = GetPropertyValueL( MusSettingsKeys::KCameraUsage ); + MUS_LOG1( "mus: [MUSSET] <- MultimediaSharingSettings::CameraUsageL( %d )", + value ) + return ( MusSettingsKeys::TUseCamera ) value; + } + + +// ----------------------------------------------------------------------------- +// Returns the cenrep configured value for KVideoDirection key. +// ----------------------------------------------------------------------------- +inline MusSettingsKeys::TVideoDirection + MultimediaSharingSettings::VideoDirectionL() + { + MUS_LOG( "mus: [MUSSET] -> MultimediaSharingSettings::VideoDirectionL()" ) + TInt value = GetPropertyValueL( MusSettingsKeys::KVideoDirection ); + MUS_LOG1( "mus: [MUSSET] <- MultimediaSharingSettings::VideoDirectionL( %d )", + value ) + return ( MusSettingsKeys::TVideoDirection ) value; + } + +// ----------------------------------------------------------------------------- +// Returns the cenrep configured value for KVideoBandwidth key. +// ----------------------------------------------------------------------------- +inline TInt MultimediaSharingSettings::VideoBandwidthSettingL() + { + MUS_LOG( "mus: [MUSSET] -> MultimediaSharingSettings::VideoBandwidthSettingL()" ) + TInt value = GetPropertyValueL( MusSettingsKeys::KVideoBandwidth ); + MUS_LOG1( "mus: [MUSSET] <- MultimediaSharingSettings::VideoBandwidthSettingL( %d )", + value ) + return value; + } + +// ----------------------------------------------------------------------------- +// Returns the cenrep configured value for KFastStartupMode key. +// ----------------------------------------------------------------------------- +inline MusSettingsKeys::TFastMode + MultimediaSharingSettings::FastStartupModeL() + { + MUS_LOG( "mus: [MUSSET] -> MultimediaSharingSettings::FastStartupModeL()" ) + TInt value = GetPropertyValueL( MusSettingsKeys::KFastStartupMode ); + MUS_LOG1( "mus: [MUSSET] <- MultimediaSharingSettings::FastStartupModeL( %d )", + value ) + return ( MusSettingsKeys::TFastMode ) value; + } + +// ----------------------------------------------------------------------------- // // ----------------------------------------------------------------------------- // @@ -541,18 +683,4 @@ return EFalse; } -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -inline TBool MultimediaSharingSettings::PrivacySetting() - { - MUS_LOG( "mus: [MUSSET] -> MultimediaSharingSettings::PrivacySetting()" ) - - TInt value(0); - TRAPD( err, value = GetPropertyValueL( MusSettingsKeys::KPrivacyExchange ) ); - MUS_LOG2( "mus: [MUSSET] <- MultimediaSharingSettings::PrivacySetting() err=%d value=%d", - err, value ) - return ( err == KErrNone && value == MusSettingsKeys::EPrivacy ); - } #endif // MUSSETTINGS_INL diff -r 33a5d2bbf6fc -r 73a1feb507fb inc/musuid.hrh --- a/inc/musuid.hrh Thu Aug 19 09:51:39 2010 +0300 +++ b/inc/musuid.hrh Tue Aug 31 15:12:07 2010 +0300 @@ -38,3 +38,5 @@ #define KMusAvaPluginInterfaceUid 0x10282393 #endif + +//end of file diff -r 33a5d2bbf6fc -r 73a1feb507fb layers.sysdef.xml --- a/layers.sysdef.xml Thu Aug 19 09:51:39 2010 +0300 +++ b/layers.sysdef.xml Tue Aug 31 15:12:07 2010 +0300 @@ -1,20 +1,19 @@ - ]> - + - + - - + - + \ No newline at end of file diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/Conf/multimediasharing.confml Binary file mmsharing/Conf/multimediasharing.confml has changed diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/Conf/multimediasharing_1028238B.crml Binary file mmsharing/Conf/multimediasharing_1028238B.crml has changed diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/cenrep/1028238b.txt Binary file mmsharing/cenrep/1028238b.txt has changed diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/cenrep/keys_multimediasharing.xls Binary file mmsharing/cenrep/keys_multimediasharing.xls has changed diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/group/bld.inf --- a/mmsharing/group/bld.inf Thu Aug 19 09:51:39 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,44 +0,0 @@ -/* -* Copyright (c) 2005-2006 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: project specification -* -*/ -#include - -PRJ_PLATFORMS -DEFAULT - -PRJ_EXPORTS -../mmshshared/loc/mus.loc APP_LAYER_LOC_EXPORT_PATH(mus.loc) -../mmshshared/loc/musoperator.loc APP_LAYER_LOC_EXPORT_PATH(musoperator.loc) - -// Generic configuration interface for multimediasharing cenrep settings -// component_1028238b implementation specifics for cenrep data -// component_1028238b implementation specifics for genconf ml data -../Conf/multimediasharing.confml APP_LAYER_CONFML(multimediasharing.confml) -../Conf/multimediasharing_1028238B.crml APP_LAYER_CRML(multimediasharing_1028238B.crml) - -// Export backup registration xml file to register multimediasharing settings -// to be securely backed up as part of symbian secure backup restore operation. -// Here data owner will be musmanager server process but the real data stored -// in central repository. Hence central repository uid should be specified as proxy data owner. -../cenrep/backup_registration.xml /epoc32/data/z/private/1028238d/backup_registration.xml - -PRJ_MMPFILES -#include "../mmshavailability/group/bld.inf" -#include "../mmshindicator/group/bld.inf" -#include "../mmshmanagercli/group/bld.inf" -#include "../mmshmanagersrv/group/bld.inf" -#include "../mmshengine/group/bld.inf" -#include "../mmshui/group/bld.inf" diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/group/group.pro --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/group/group.pro Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,36 @@ +# +# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +# All rights reserved. +# This component and the accompanying materials are made available +# under the terms of "Eclipse Public License v1.0" +# which accompanies this distribution, and is available +# at the URL "http://www.eclipse.org/legal/epl-v10.html". +# +# Initial Contributors: +# Nokia Corporation - initial contribution. +# +# Contributors: +# +# Description: +# +# + +TEMPLATE = subdirs +CONFIG += ordered + +symbian: { + :BLD_INF_RULES.prj_exports += "../mmshshared/loc/mus.loc APP_LAYER_LOC_EXPORT_PATH(mus.loc)" + :BLD_INF_RULES.prj_exports += "../mmshshared/loc/musoperator.loc APP_LAYER_LOC_EXPORT_PATH(musoperator.loc)" + :BLD_INF_RULES.prj_exports += "../Conf/multimediasharing.confml APP_LAYER_CONFML(multimediasharing.confml)" + :BLD_INF_RULES.prj_exports += "../Conf/multimediasharing_1028238B.crml APP_LAYER_CRML(multimediasharing_1028238B.crml)" + :BLD_INF_RULES.prj_exports += "../cenrep/backup_registration.xml /epoc32/data/z/private/1028238D/backup_registration.xml" + + :BLD_INF_RULES.prj_mmpfiles += $$LITERAL_HASH"include \"../mmshavailability/group/bld.inf\"" + :BLD_INF_RULES.prj_mmpfiles += $$LITERAL_HASH"include \"../mmshindicator/group/bld.inf\"" + :BLD_INF_RULES.prj_mmpfiles += $$LITERAL_HASH"include \"../mmshmanagercli/group/bld.inf\"" + :BLD_INF_RULES.prj_mmpfiles += $$LITERAL_HASH"include \"../mmshmanagersrv/group/bld.inf\"" + :BLD_INF_RULES.prj_mmpfiles += $$LITERAL_HASH"include \"../mmshengine/group/bld.inf\"" +} + +SUBDIRS += ../livecommsui +SUBDIRS += ../mmshapp diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/inc/musavainterface.h --- a/mmsharing/inc/musavainterface.h Thu Aug 19 09:51:39 2010 +0300 +++ b/mmsharing/inc/musavainterface.h Tue Aug 31 15:12:07 2010 +0300 @@ -126,6 +126,7 @@ virtual TBool ExtensionAvailability() = 0; virtual TBool Available( MMusAvaObserver::TAvailabilityName aAvailability ) = 0; virtual MMusAvaObserver::TAvailabilityStatus AvailabilityState( MMusAvaObserver::TAvailabilityName aAvailability ) = 0; + virtual void PrepareForReceivedInviteL() = 0; private: //Data diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/inc/musavaobserver.h --- a/mmsharing/inc/musavaobserver.h Thu Aug 19 09:51:39 2010 +0300 +++ b/mmsharing/inc/musavaobserver.h Tue Aug 31 15:12:07 2010 +0300 @@ -159,8 +159,6 @@ virtual void AvailabilityError( TAvailabilityName aName, TAvailabilityStatus aStatus ) = 0; - - virtual void AvailabilitiesAbleToShowIndicator() = 0; }; diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/inc/musavasettingsobserver.h --- a/mmsharing/inc/musavasettingsobserver.h Thu Aug 19 09:51:39 2010 +0300 +++ b/mmsharing/inc/musavasettingsobserver.h Tue Aug 31 15:12:07 2010 +0300 @@ -24,6 +24,8 @@ #include #include +#include "musmanagercommon.h" + /** * Defines setting interface for the MusAvailability Plug-in * @@ -48,6 +50,8 @@ virtual TApplicationState ApplicationState() = 0; virtual TBool OptionAllowed() = 0; + + virtual void StartApplicationL( MultimediaSharing::TMusUseCase aUseCase ) = 0; }; diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/bwins/livecommsuiu.def --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/bwins/livecommsuiu.def Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,5 @@ +EXPORTS + ?terminateSession@LcViewManager@@QAEXXZ @ 1 NONAME ; void LcViewManager::terminateSession(void) + ??1LcViewManager@@UAE@XZ @ 2 NONAME ; LcViewManager::~LcViewManager(void) + ??0LcViewManager@@QAE@ABVQString@@0@Z @ 3 NONAME ; LcViewManager::LcViewManager(class QString const &, class QString const &) + diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/eabi/livecommsuiu.def --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/eabi/livecommsuiu.def Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,8 @@ +EXPORTS + _ZN13LcViewManager16terminateSessionEv @ 1 NONAME + _ZN13LcViewManagerC1ERK7QStringS2_ @ 2 NONAME + _ZN13LcViewManagerC2ERK7QStringS2_ @ 3 NONAME + _ZN13LcViewManagerD0Ev @ 4 NONAME + _ZN13LcViewManagerD1Ev @ 5 NONAME + _ZN13LcViewManagerD2Ev @ 6 NONAME + diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/inc/lceffecthandler.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/inc/lceffecthandler.h Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,96 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ +#ifndef LCEFFECTHANDLER_H +#define LCEFFECTHANDLER_H + +#include +#include + +class HbWidget; +class LcUiEngine; + +/** + * + */ +class LcEffectHandler : public QObject +{ + Q_OBJECT + friend class UT_LcEffectHandler; + friend class UT_LcView; + +public: + + enum DissapperEffect{ + NormalDissappear, + DissappearToFlip + }; + + explicit LcEffectHandler(LcUiEngine& engine, + HbWidget* sharedVideo, + HbWidget* sharedVideoOverlay, + HbWidget* receivedVideo, + HbWidget* receivedVideoOverlay); + ~LcEffectHandler(); + + void setVisibility(HbWidget* widget, bool visible); + + void setDissappearEffect( LcEffectHandler::DissapperEffect aEffectType ); + + bool isSwapInProgress(); + + void startEffects(); + +signals: + void swapCompleted(); + void loadSwapLayout(); + +public slots: + + void showSendWindow(); + void showReceiveWindow(); + void hideSendWindow(); + void hideReceiveWindow(); + void windowAppearComplete( HbEffect::EffectStatus status ); + void windowDisappearComplete( HbEffect::EffectStatus status ); + void windowDisappearToFlipComplete( HbEffect::EffectStatus status ); + void windowFlipComplete( HbEffect::EffectStatus status ); + void windowSwapSharedComplete( HbEffect::EffectStatus status ); + void windowSwapReceivedComplete( HbEffect::EffectStatus status ); + void swap(); + +private: + void startEffect( HbWidget* widget, const char *effectId, const char *callBack = "" ); + bool isSharedVideoAtTop() const; + bool videosSideBySide() const; + void handleSwapCompletion(); + void initializeSwap(); + +private: //data + + LcUiEngine& mEngine; + HbWidget* mSharedVideo; + HbWidget* mSharedVideoOverlay; + HbWidget* mReceivedVideo; + HbWidget* mReceivedVideoOverlay; + + QString mEffectCallBack; + bool mSwapSharedCompleted; + bool mSwapReceivedCompleted; + bool mSwapInProgress; +}; + +#endif // LCEFFECTHANDLER_H diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/inc/lcexport.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/inc/lcexport.h Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,33 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ +#ifndef LCEXPORT_H +#define LCEXPORT_H + +#include + +#if !defined(UNIT_TESTING) +#if !defined(LIVECOMMS_EXPORT) +#if defined(LIVECOMMSUI_LIB) +#define LIVECOMMS_EXPORT Q_DECL_EXPORT +#else +#define LIVECOMMS_EXPORT Q_DECL_IMPORT +#endif +#endif +#else +#define LIVECOMMS_EXPORT +#endif +#endif // LCEXPORT_H diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/inc/lclogger.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/inc/lclogger.h Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,104 @@ +/* +* Copyright (c) 2006 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: ?Description +* +*/ + + +#ifndef LCLOGGER_H +#define LCLOGGER_H + +#include + + +// Disabled PC_lint warning for "Undefined preprocessor variable 'UNIT_TESTING'" +//lint -e553 +#if ( !defined(_DEBUG) || defined(QT_NO_DEBUG_OUTPUT) ) // release or unit test build; no logs + +#define LC_QDEBUG( a ) +#define LC_QDEBUG_2( a, b) +#define LC_QDEBUG_3( a, b, c) +#define LC_QDEBUG_4( a, b, c, d) +#define LC_QWARNING( a ) +#define LC_QWARNING_2( a, b ) +#define LC_QCRITICAL( a ) +#define LC_QCRITICAL_2( a, b ) +#define LC_QCRITICAL_3( a, b, c) + +#else // debug build; logs + + +const char lcDebugPrefix[] = "Debug: "; +const char lcWarningPrefix[] = "Warning: "; +const char lcCriticalPrefix[] = "Critical: "; +const char lcFatalPrefix[] = "Fatal: "; + +#include // RDebug +#include +#include +#include +#include +#include + +const char lcLogFile[] = "C:/logs/mus/musdebug.txt";// MultimediaSharing logging file. + + +#define LC_QDEBUG( a )\ + qDebug() << a; + +#define LC_QDEBUG_2( a, b)\ + qDebug() << a << b; + +#define LC_QDEBUG_3( a, b, c)\ + qDebug() << a << b << c; + +#define LC_QDEBUG_4( a, b, c, d)\ + qDebug() << a << b << c << d; + +#define LC_QWARNING( a )\ + qWarning() << a; + +#define LC_QWARNING_2( a, b )\ + qWarning() << a << b; + +#define LC_QCRITICAL( a )\ + qCritical() << a; + +#define LC_QCRITICAL_2( a, b )\ + qCritical() << a << b; + +#define LC_QCRITICAL_3( a, b, c)\ + qCritical() << a << b << c; + + +// File logging can be disabled by commenting above definition. +#define LCUI_FILE_LOGGING_ENABLED + +#if ( defined __WINSCW__ ) || ( defined __WINS__ ) +// No sense to have file logging enabled in wins +#undef LCUI_FILE_LOGGING_ENABLED +#endif + +#ifdef LCUI_FILE_LOGGING_ENABLED +const bool lcFileLoggingEnabled = ETrue; +#else +const bool lcFileLoggingEnabled = EFalse; +#endif + + +#endif + +#endif // LCLOGGER_H + +// End of File diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/inc/lcuicomponentrepository.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/inc/lcuicomponentrepository.h Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,107 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ +#ifndef LCUICOMPONENTREPOSITORY_H +#define LCUICOMPONENTREPOSITORY_H + +#include +#include +#include +#include + +class LcView; +class QAction; +class HbProgressDialog; +class HbDialog; +class LcUiEngine; +class HbMenu; +class HbMessageBox; + +class LcUiComponentRepository : public HbDocumentLoader +{ + friend class UT_LcUiComponentRepository; + +public: + + explicit LcUiComponentRepository(LcUiEngine& engine); + ~LcUiComponentRepository(); + +public: + + LcView* idleView(); + LcView* receiveView(); + LcView* receiveOnlyView(); + LcView* twowayView(); + LcView* sendView(); + LcView* allInOneView(); + + HbDialog* acceptQuery(); + HbProgressDialog* invitingNote(); + HbProgressDialog* waitingNote(); + HbDialog* recipientQuery(); + HbDialog* shareOwnVideoQuery(); + void sharedVideoContextMenuActions( HbMenu* menu, LcView& view ); + bool loadLayout( const QString& layoutName ); + // returns the currently loaded layout name + QString layout()const; + // returns the previously loaded layout name + QString previousLayout()const; + +private: //from HbDocumentLoader + + QObject *createObject(const QString& type, const QString &name); + +private: + + LcView* loadView( QObjectList& components, + const QString& viewId, + const QString& xmlFile ); + void connectActions( LcView& view ) const; + bool connect( QAction& hbAction, LcView& view ) const; + +private: + + QString mLastLoadedView; + + LcUiEngine& mEngine; + + QObjectList mIdleViewComponents; + QObjectList mReceiveViewComponents; + QObjectList mSendViewComponents; + QObjectList mTwowayViewComponents; + QObjectList mAllInOneViewComponents; + QObjectList mReceiveOnlyViewComponents; + + QHash* mSlots; + + LcView* mIdleView; + LcView* mReceiveView; + LcView* mSendView; + LcView* mTwowayView; + LcView* mAllInOneView; + LcView* mReceiveOnlyView; + + HbDialog* mAcceptQuery; + HbProgressDialog* mInvitingNote; + HbProgressDialog* mWaitingNote; + HbDialog* mRecipientQuery; + HbMessageBox* mShareOwnVideoQuery; + + QString mLayout; + QString mPreviousLayout; +}; + +#endif // LCUICOMPONENTREPOSITORY_H diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/inc/lcuidefs.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/inc/lcuidefs.h Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,161 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ +#ifndef LCUIDEFS_H_ +#define LCUIDEFS_H_ + +#include + +class LcUtil { + +public: + + inline static void asyncSlotCall( QObject* instance, const char* slot ) + { + QMetaObject::invokeMethod(instance, slot, Qt::QueuedConnection ); + } + + inline static void asyncSlotCall( QObject* instance, const char* slot, QGenericArgument arg ) + { + QMetaObject::invokeMethod(instance, slot, Qt::QueuedConnection, arg ); + } +}; + +// Panic the current thread +#if ( defined __WINSCW__ ) || ( defined __WINS__ ) || ( defined __ARMV5__ ) +#include +#define LC_PANIC() User::Invariant() +#else +#define LC_PANIC() +#endif + +#define LC_MCC_WINDOW_FACTOR 50 + +#define LC_NOTE_ON_TOP 20 + +#define LC_NOTE_TIMEOUT 3000 + +#define DESC_TO_QSTRING( desc )\ + QString::fromRawData( reinterpret_cast(desc.Ptr()), desc.Length()); + +#define LC_INVITING "Inviting..." +#define LC_WAITING_VIDEO "Waiting for shared video..." +#define LC_OK "OK" +#define LC_CANCEL "Cancel" +#define LC_ACCEPT_SESSION "Accept incoming session from" +#define LC_RECIPIENT_QUERY "Enter recipient address:" + +#ifndef QT_TESTLIB_LIB +const char lcIdleViewFile[] = ":/xml/lcidleview.docml"; +const char lcReceiveViewFile[] = ":/xml/lcreceiveview.docml"; +const char lcReceiveOnlyViewFile[] = ":/xml/lcreceiveonlyview.docml"; +const char lcSendViewFile[] = ":/xml/lcsendview.docml"; +const char lcTwowayViewFile[] = ":/xml/lctwowayview.docml"; +const char lcAllInOneViewFile[] = ":/xml/lcvtview.docml"; +#else +const char lcIdleViewFile[] = "c:/lcidleview.docml"; +const char lcReceiveViewFile[] = "C:/lcreceiveview.docml"; +const char lcReceiveOnlyViewFile[] = "C:/lcreceiveonlyview.docml"; +const char lcSendViewFile[] = "C:/lcsendview.docml"; +const char lcTwowayViewFile[] = "C:/lctwowayview.docml"; +const char lcAllInOneViewFile[] = "C:/lcvtview.docml"; + +#endif + +const char lcLcViewTypeName[] = "LcView"; + +//view ids +const char lcViewIdleId[] = "lc_view_idle"; +const char lcViewReceiveId[] = "lc_view_recv"; +const char lcViewReceiveOnlyId[] = "lc_view_recvonly"; +const char lcViewSendId[] = "lc_view_send"; +const char lcViewTwowayId[] = "lc_view_twoway"; +const char lcViewAllInOneId[] = "lc_view_allinone"; + +//widget ids +const char lcIconContactId[] = "lc_icon_contact"; +const char lcLabelRecipientId[] = "lc_label_recipient"; +const char lcLabelDurationId[] = "lc_label_duration"; +const char lcWidgetRecvVideoId[] = "lc_widget_recvvideo"; +const char lcWidgetSendVideoId[] = "lc_widget_sendvideo"; +const char lcWidgetRecvVideoId2[] = "lc_widget_recvvideo2"; +const char lcWidgetSendVideoId2[] = "lc_widget_sendvideo2"; +const char lcButtonEndCall[] = "lc_button_endCall"; +const char lcWidgetDialpad[] = "lc_label_dialpad"; + +//action ids +const char lcActFullscreenId[] = "lc_act_fullscreen"; +const char lcActVideopreferenceId[] = "lc_act_videopreference"; +const char lcActDialerId[] = "lc_act_dialer"; +const char lcActEndactivecallId[] = "lc_act_endactivecall"; +const char lcActStopSharingId[] = "lc_act_stopsharing"; +const char lcActEnableCameraId[] = "lc_act_enablecamera"; +const char lcActMuteId[] = "lc_act_mute"; +const char lcActGalleryId[] = "lc_act_gallery"; +const char lcActChangeCameraId[] = "lc_act_changecamera"; +const char lcActMenuChangeCameraId[] = "lc_act_menu_changecamera"; +const char lcActAdjustVideoId[] = "lc_act_adjustvideo"; +const char lcActShareImageId[] = "lc_act_shareimage"; +const char lcActSwapViewsId[] = "lc_act_swapviews"; +const char lcActSwitchToVoiceCallId[] = "lc_act_switchtovoicecall"; +const char lcActDisableCameraId[] = "lc_act_disablecamera"; +const char lcActMenuDisableCameraId[] = "lc_act_menu_disablecamera"; +const char lcActSpeakerId[] = "lc_act_speaker"; +const char lcActOpenKeypadId[] = "lc_act_openkeypad"; + + +//layouts ids +const char lcLayoutLandscapeDefaultId[] = "landscape"; //Main window - received content +const char lcLayoutFullscreenId[] = "fullscreen"; +const char lcLayoutLandscapeSwappedId[] = "lc_layout_landscape_swapped";//Main window - sent content +const char lcLayoutLandscapeDialpadId[] = "lc_layout_landscape_dialpad"; // Dialpad layout + + +//translations Id +const char lcTranslationsDirectory[] = ":/translations"; +const char lcTranslationsFileNameDefault[] = "livecommsui_en_GB"; +const char lcTranslationsFileName[] = "livecommsui_"; + +//icon names +const char lcIconNameUnmuteMic[] = "qtg_mono_mic_unmute"; +const char lcIconNameMuteMic[] = "qtg_mono_mic_mute"; +const char lcIconNameHandset[] = "qtg_mono_mobile"; +const char lcIconNameLoudspeaker[] = "qtg_mono_speaker"; +const char lcIconNameMainCamera[] = "qtg_mono_change_cam_mode"; +const char lcIconNameSecondaryCamera[] = "qtg_mono_change_cam_mode"; +const char lcIconNameEnableCamera[] = "qtg_mono_camcorder"; +const char lcIconNameDisableCamera[] = "qtg_mono_camcorder_off"; + +const char lcIconNameBlackWin[] = ":/black_win.bmp"; + + +//effects +const char lcEffectWinAppear[] = ":/win_appear.fxml"; +const char lcEffectWinDisappear[] = ":/win_disappear.fxml"; +const char lcEffectWinFlip[] = ":/win_flip.fxml"; +const char lcEffectWinSwapDown[] = ":/win_swap_down.fxml"; +const char lcEffectWinSwapUp[] = ":/win_swap_up.fxml"; + +const char lcEffectWinId[] = "vidwindow"; +const char lcEffectWinAppearId[] = "appear"; +const char lcEffectWinDisappearId[] = "disappear"; +const char lcEffectWinFlipId[] = "flip"; +const char lcEffectWinSwapDownId[] = "swapDown"; +const char lcEffectWinSwapUpId[] = "swapUp"; + +const char lcEffectWinDefaultCallback[] = "windowDisappearComplete"; + +#endif /* LCUIDEFS_H_ */ diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/inc/lcvideowidget.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/inc/lcvideowidget.h Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,43 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ +#ifndef LCVIDEOWIDGET_H +#define LCVIDEOWIDGET_H + +#include + + +class LcVideoWidget : public HbTransparentWindow +{ + Q_OBJECT + +public: + + explicit LcVideoWidget(QGraphicsItem *parent = 0, bool showVideo = true); + ~LcVideoWidget(); + void setShowVideo(bool showVideo); + bool isShowingVideo(); + void setLocalPlayer(bool local){mLocalPlayer = local ;}; + +public: // From HbTransparentWindow + void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, + QWidget *widget = 0); +private: + bool mShowVideo; + bool mLocalPlayer; +}; + +#endif // LCVIDEOWIDGET_H diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/inc/lcview.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/inc/lcview.h Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,152 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ +#ifndef LCVIEW_H +#define LCVIEW_H + +#include + +//temp +#define LC_UNMUTE_TEXT "Unmute" +#define LC_MUTE_TEXT "Mute" +#define LC_HANDSET_TEXT "Handset" +#define LC_SPEAKER_TEXT "Speaker" + +class LcUiEngine; +class LcUiComponentRepository; +class HbLabel; +class HbMessageBox; +class HbAction; +class HbPushButton; +class HbTransparentWindow; +class HbMenu; +class LcVideoWidget; +class LcEffectHandler; +class Dialpad; +class DialpadVtKeyHandler; + +class LcView : public HbView +{ + Q_OBJECT + friend class UT_LcView; + friend class UT_LcUiComponentRepository; + +public: + + explicit LcView(LcUiEngine& engine, LcUiComponentRepository& repository); + ~LcView(); + +public: + + void init(); + void activated(); + void deactivated(); + QString currentLayout(); + +public slots: + + void endVideoSession(); + void disableCamera(); + void mute(); + void changeCamera(); + void switchToVoiceCall(); + void speaker(); + void updateVideoRects(); + void swap(); + void shareImage(); + void updateSwapLayout(); + void menuAboutToShow(); + void back(); +//temp + void notSupported(); + +private slots: + + void setMuteActionToUnmute(); + void setMuteActionToMute(); + void setCameraActionToMain(); + void setCameraActionToSecondary(); + void setSpeakerActionToHandset(); + void setSpeakerActionToSpeaker(); + void setCameraActionToDisable(); + void setCameraActionToEnable(); + void disableControls(); + void enableControls(); + void watchInactivity(); + void updateVolumeSlider(int aVolumeLevel); + +protected: // From HbView + + void gestureEvent(QGestureEvent *event); + +protected slots: + void openDialpad(); + virtual void dialpadOpened(); + virtual void dialpadClosed(); + virtual void dialpadEditorTextChanged(); + +protected: + void setDialpadPosition(); + +private: // fullscreen + void timerEvent( QTimerEvent * event ); + void toFullScreen( bool fullscreen ); + +private: + void createNotSupportedNote(); + void createContextMenu(); + QRectF translateRectForOrientation(const QRectF& origRect); + QPointF translatePointForOrientation(const QPointF& origPoint); + void setVisibility( QGraphicsItem* item, bool visible ); + void addOptionsMenuActions(); + void gestureLongPress( QPointF coords ); + void gestureShortPress(); + bool isVideoPositionedCorrectly( LcVideoWidget* mVideoWidget ); + bool isPositioned(); + +private://not owned + + LcUiEngine& mEngine; + LcUiComponentRepository& mRepository; + HbLabel* mRecipient; + HbLabel* mDuration; + HbLabel* mContactIcon; + LcVideoWidget* mSharedVideoWidget; + LcVideoWidget* mReceivedVideoWidget; + HbAction* mChangeCameraAction; + HbAction* mMuteAction; + HbAction* mSpeakerAction; + HbAction* mDisableCameraAction; + HbAction* mDisableCameraMenuAction; + HbMessageBox* mNotSupportedNote; + HbPushButton* mEndCallButton; + + LcVideoWidget* mReceivedVideoEffectOverlay; + LcVideoWidget* mSharedVideoEffectOverlay; + LcEffectHandler* mEffectHandler; + +private: + + HbMenu* mItemContextMenu; + bool mIsOptionMenuOpen; + Dialpad* mDialpad; // Not owned + DialpadVtKeyHandler* mDialpadVtKeyHandler; + int timerId; + bool isViewReady; +}; + + +#endif // LCVIEW_H diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/inc/lcviewmanager.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/inc/lcviewmanager.h Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,53 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ +#ifndef LCVIEWMANAGER_H +#define LCVIEWMANAGER_H + +#include +#include + +class LcViewManagerPrivate; +class HbMainWindow; + +/** + * + */ +class LcViewManager : public QObject +{ + Q_OBJECT + friend class UT_LcUiViewManager; + +public: // The exported API + + LIVECOMMS_EXPORT LcViewManager( + const QString &engineName, + const QString &applicationDisplayName); + + LIVECOMMS_EXPORT ~LcViewManager(); + +public slots: + + //terminateSession will close engine session asynchronously + //when session is closed application will be also closed + LIVECOMMS_EXPORT void terminateSession(); + +private: //data + + LcViewManagerPrivate* d_ptr; +}; + +#endif // LCVIEWMANAGER_H diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/inc/lcviewmanager_p.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/inc/lcviewmanager_p.h Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,92 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ +#ifndef LCVIEWMANAGER_P_H +#define LCVIEWMANAGER_P_H + +#include + +class HbMainWindow; +class LcUiEngine; +class LcUiComponentRepository; +class LcView; +class HbAction; + +#include + +class LcMainWindow : public HbMainWindow + { + Q_OBJECT + +public: + + LcMainWindow(); + virtual ~LcMainWindow(); + +protected: // From QObject + + bool eventFilter ( QObject * watched, QEvent * event ); + +signals: + + void appFocusGained(); + void appFocusLost(); + +private: + friend class UT_LcUiViewManager; + }; + +class LcViewManagerPrivate : public QObject +{ + Q_OBJECT + friend class UT_LcUiViewManager; + +public: + + explicit LcViewManagerPrivate(const QString &engineName, + const QString &applicationDisplayName); + ~LcViewManagerPrivate(); + + //this will close engine session asynchronously + //when session is closed application will be also closed + void terminateSession(); + +public slots: + void changeView(); + //for layout switch + void prepareOrientationChange(); + +private slots: + void closeApp(); + void activateCurrentView(bool startup); + +private: + + void startEngine(); + void setCurrentView(bool startup=false); + LcView* currentView(); + +private: //data + + LcMainWindow mMainWindow; + LcUiEngine* mEngine; + LcUiComponentRepository* mRepository; + +private: + friend class UT_LcUiViewManager; +}; + +#endif // LCVIEWMANAGER_P_H diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/livecommsui.qrc --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/livecommsui.qrc Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,21 @@ + + + + resources/hbpushbutton_color.css + + + resources/lcviews/lcidleview.docml.bin + resources/lcviews/lcreceiveview.docml.bin + resources/lcviews/lcreceiveonlyview.docml.bin + resources/lcviews/lcsendview.docml.bin + resources/lcviews/lctwowayview.docml.bin + resources/lcviews/lcvtview.docml.bin + + + resources/win_appear.fxml + resources/win_disappear.fxml + resources/win_flip.fxml + resources/win_swap_down.fxml + resources/win_swap_up.fxml + + diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/resources/hbpushbutton_color.css --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/resources/hbpushbutton_color.css Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,10 @@ +/* For End Call button */ +HbPushButton[state = "normal"]::icon +{ + color: var(qtc_callhandling_reject_normal); +} + +HbPushButton[state = "pressed"]::icon +{ + color: var(qtc_callhandling_reject_pressed); +} diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/resources/lcviews.uip Binary file mmsharing/livecommsui/lcui/resources/lcviews.uip has changed diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/resources/lcviews/lcidleview.docml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/resources/lcviews/lcidleview.docml Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,72 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + +
+ + + + + +
diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/resources/lcviews/lcreceiveView.docml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/resources/lcviews/lcreceiveView.docml Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,190 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + +
diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/resources/lcviews/lcreceiveonlyView.docml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/resources/lcviews/lcreceiveonlyView.docml Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,185 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + +
diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/resources/lcviews/lcsendview.docml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/resources/lcviews/lcsendview.docml Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,200 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + +
diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/resources/lcviews/lctwowayview.docml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/resources/lcviews/lctwowayview.docml Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,214 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + +
diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/resources/lcviews/lcvtview.docml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/resources/lcviews/lcvtview.docml Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,256 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/resources/win_appear.fxml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/resources/win_appear.fxml Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,14 @@ + + + + + + +0.6 + +1.0 +0.0 + + + + diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/resources/win_disappear.fxml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/resources/win_disappear.fxml Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,15 @@ + + + + + + +0.6 + +0.2 +1.0 + + + + + diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/resources/win_flip.fxml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/resources/win_flip.fxml Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,41 @@ + + + + + + +3.0 + +0 +-90 +90 +0 + + + +0.5 + + +0.5 + + +0 + + +1 + + +0 + + +3.0 + +1.0 +0.0 +0.0 +1.0 + + + + + diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/resources/win_swap_down.fxml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/resources/win_swap_down.fxml Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,35 @@ + + + + + 5.0 + + + + + + + + + + 245 + + + + 5.0 + 1.0 + 0.2 + 0.2 + 2.0 + + + + 5.0 + 1.0 + 0.2 + 0.2 + 2.0 + + + + \ No newline at end of file diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/resources/win_swap_up.fxml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/resources/win_swap_up.fxml Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,35 @@ + + + + + 5.0 + + + + + + + + + + 94 + + + + 5.0 + 1.0 + 0.2 + 0.2 + 0.5 + + + + 5.0 + 1.0 + 0.2 + 0.2 + 0.5 + + + + \ No newline at end of file diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/src/lceffecthandler.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/src/lceffecthandler.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,379 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + +//USER +#include "lceffecthandler.h" +#include "lclogger.h" +#include "lcuidefs.h" +#include "lcuiengine.h" + +//SYSTEM +#include +#include + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +LcEffectHandler::LcEffectHandler(LcUiEngine& engine, + HbWidget* sharedVideo, + HbWidget* sharedVideoOverlay, + HbWidget* receivedVideo, + HbWidget* receivedVideoOverlay) : + mEngine(engine), + mSharedVideo(sharedVideo), + mSharedVideoOverlay(sharedVideoOverlay), + mReceivedVideo(receivedVideo), + mReceivedVideoOverlay(receivedVideoOverlay), + mSwapSharedCompleted(false), + mSwapReceivedCompleted(false), + mSwapInProgress(false) +{ + HbEffect::add(lcEffectWinId, lcEffectWinDisappear, lcEffectWinDisappearId ); + HbEffect::add(lcEffectWinId, lcEffectWinAppear, lcEffectWinAppearId ); + HbEffect::add(lcEffectWinId, lcEffectWinFlip, lcEffectWinFlipId ); + HbEffect::add(lcEffectWinId, lcEffectWinSwapDown, lcEffectWinSwapDownId ); + HbEffect::add(lcEffectWinId, lcEffectWinSwapUp, lcEffectWinSwapUpId ); + + mEffectCallBack = lcEffectWinDefaultCallback; +} + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +LcEffectHandler::~LcEffectHandler() +{ +} + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void LcEffectHandler::setVisibility(HbWidget* widget, bool visible) +{ + if ( !HbEffect::effectRunning( widget )) { + widget->setVisible( visible ); + } +} + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void LcEffectHandler::setDissappearEffect( + LcEffectHandler::DissapperEffect aEffectType ) +{ + if ( aEffectType == LcEffectHandler::DissappearToFlip ) { + mEffectCallBack = "windowDisappearToFlipComplete"; + } else if ( aEffectType == LcEffectHandler::NormalDissappear ) { + mEffectCallBack = "windowDisappearComplete"; + } else { + mEffectCallBack = lcEffectWinDefaultCallback; + } +} +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void LcEffectHandler::showSendWindow() +{ + LC_QDEBUG( "livecomms [UI] -> LcEffectHandler::showSendWindow()" ) + if ( mSharedVideo ) { + if ( mSwapSharedCompleted || !HbEffect::effectRunning( mSharedVideoOverlay )) { + startEffect( mSharedVideoOverlay, + lcEffectWinAppearId, "windowAppearComplete" ); + + mSharedVideo->show(); + } else { + LC_QDEBUG( "livecomms [UI] LcEffectHandler: postponed due ongoing animation" ) + } + } + LC_QDEBUG( "livecomms [UI] <- LcEffectHandler::showSendWindow()" ) +} + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void LcEffectHandler::showReceiveWindow() +{ + LC_QDEBUG( "livecomms [UI] -> LcEffectHandler::showReceiveWindow()" ) + if ( mReceivedVideo ) { + if ( mSwapReceivedCompleted || !HbEffect::effectRunning( mReceivedVideoOverlay )) { + startEffect( mReceivedVideoOverlay, + lcEffectWinAppearId, "windowAppearComplete" ); + mReceivedVideo->show(); + } else { + LC_QDEBUG( "livecomms [UI] LcEffectHandler: postponed due ongoing animation" ) + } + } + LC_QDEBUG( "livecomms [UI] <- LcEffectHandler::showReceiveWindow()" ) + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void LcEffectHandler::hideSendWindow() +{ + LC_QDEBUG( "livecomms [UI] -> LcEffectHandler::hideSendWindow()" ) + if ( mSharedVideo && mSharedVideo->isVisible() ) { + startEffect( mSharedVideoOverlay, + lcEffectWinDisappearId, mEffectCallBack.toAscii().data() ); + mSharedVideo->hide(); + } + + mEffectCallBack = lcEffectWinDefaultCallback; + LC_QDEBUG( "livecomms [UI] <- LcEffectHandlerLcEffectHandler::hideSendWindow()" ) +} + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void LcEffectHandler::hideReceiveWindow() +{ + LC_QDEBUG( "livecomms [UI] -> LcEffectHandler::hideReceiveWindow()" ) + if ( mReceivedVideo && mReceivedVideo->isVisible() ) { + startEffect( mReceivedVideoOverlay, + lcEffectWinDisappearId, "windowDisappearComplete" ); + mReceivedVideo->hide(); + } + + LC_QDEBUG( "livecomms [UI] <- LcEffectHandler::hideReceiveWindow()" ) +} + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void LcEffectHandler::swap() +{ + LC_QDEBUG( "livecomms [UI] -> LcEffectHandler::swap()" ) + + // Emit the signal which triggers to loading of new swapped section + mSwapInProgress = true; + emit loadSwapLayout(); + + startEffects(); + + LC_QDEBUG( "livecomms [UI] <- LcEffectHandler::swap()" ) +} + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void LcEffectHandler::startEffects() +{ + if( mSharedVideo && mReceivedVideo ) { + + mSwapSharedCompleted = false; + mSwapReceivedCompleted = false; + + startEffect( mSharedVideoOverlay, lcEffectWinDisappearId, "windowSwapSharedComplete" ); + startEffect( mReceivedVideoOverlay, lcEffectWinDisappearId, "windowSwapReceivedComplete" ); + + mSharedVideo->hide(); + mReceivedVideo->hide(); + } + +} + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void LcEffectHandler::startEffect( + HbWidget* widget, const char *effectId, const char *callBack ) +{ + LC_QDEBUG( "livecomms [UI] -> LcEffectHandler::startEffect()" ) + if( widget ) { + widget->setOpacity(1.0); // Previous effect might have set opacity to zero + widget->show(); + LC_QDEBUG_2( "livecomms [UI] window: ", widget->geometry() ) + LC_QDEBUG_2( "livecomms [UI] effect name: ", QString(effectId) ) + HbEffect::start( widget, lcEffectWinId, effectId, this, callBack ); + } + LC_QDEBUG( "livecomms [UI] <- LcEffectHandler::startEffect()" ) +} + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void LcEffectHandler::windowAppearComplete(HbEffect::EffectStatus status) +{ + Q_UNUSED(status); + LC_QDEBUG( "livecomms [UI] -> LcEffectHandler::windowAppearComplete()" ) + + if ( status.item && status.item == mSharedVideoOverlay && + !HbEffect::effectRunning( mSharedVideoOverlay ) ) { + mSharedVideoOverlay->hide(); + + } + if ( status.item && status.item == mReceivedVideoOverlay && + !HbEffect::effectRunning( mReceivedVideoOverlay ) ) { + mReceivedVideoOverlay->hide(); + + } + + LC_QDEBUG( "livecomms [UI] <- LcEffectHandler::windowAppearComplete()" ) +} + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void LcEffectHandler::windowDisappearComplete(HbEffect::EffectStatus status) +{ + Q_UNUSED(status); + LC_QDEBUG( "livecomms [UI] -> LcEffectHandler::windowDisappearComplete()" ) + LC_QDEBUG( "livecomms [UI] <- LcEffectHandler::windowDisappearComplete()" ) +} + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void LcEffectHandler::windowDisappearToFlipComplete(HbEffect::EffectStatus status) +{ + Q_UNUSED(status); + LC_QDEBUG( "livecomms [UI] -> LcEffectHandler::windowDisappearToFlipComplete()" ) + if( mSharedVideo ) { + mSharedVideo->hide(); + startEffect( mSharedVideoOverlay, lcEffectWinFlipId, "windowFlipComplete" ); + } + LC_QDEBUG( "livecomms [UI] <- LcEffectHandler::windowDisappearToFlipComplete()" ) +} + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void LcEffectHandler::windowFlipComplete(HbEffect::EffectStatus status) +{ + Q_UNUSED(status); + LC_QDEBUG( "livecomms [UI] -> LcEffectHandler::flipHideComplete()" ) + if( mEngine.isLocalPlayerPlaying() ) { + showSendWindow(); + } + LC_QDEBUG( "livecomms [UI] <- LcEffectHandler::flipHideComplete()" ) +} + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void LcEffectHandler::windowSwapSharedComplete(HbEffect::EffectStatus status) +{ + Q_UNUSED(status); + LC_QDEBUG( "livecomms [UI] -> LcEffectHandler::windowSwapSharedComplete()" ) + if( mSharedVideo ) { + LC_QDEBUG_2( "livecomms [UI] window: ", mSharedVideo->geometry() ) + LC_QDEBUG_2( "livecomms [UI] effect window: ", mSharedVideoOverlay->geometry() ) + + mSwapSharedCompleted = true; + + handleSwapCompletion(); + } + LC_QDEBUG( "livecomms [UI] <- LcEffectHandler::windowSwapSharedComplete()" ) +} + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void LcEffectHandler::windowSwapReceivedComplete(HbEffect::EffectStatus status) +{ + Q_UNUSED(status); + LC_QDEBUG( "livecomms [UI] -> LcEffectHandler::windowSwapReceivedComplete()" ) + if( mReceivedVideo ) { + LC_QDEBUG_2( "livecomms [UI] window: ", mReceivedVideo->geometry() ) + LC_QDEBUG_2( "livecomms [UI] effect window: ", mReceivedVideoOverlay->geometry() ) + + mSwapReceivedCompleted = true; + + handleSwapCompletion(); + } + LC_QDEBUG( "livecomms [UI] <- LcEffectHandler::windowSwapReceivedComplete()" ) +} + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +bool LcEffectHandler::isSharedVideoAtTop() const +{ + return ( mSharedVideo && mReceivedVideo && + mSharedVideo->geometry().top() < mReceivedVideo->geometry().top()); +} + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +bool LcEffectHandler::videosSideBySide() const +{ + return ( mSharedVideo && mReceivedVideo && + mSharedVideo->geometry().top() == mReceivedVideo->geometry().top() ); +} + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void LcEffectHandler::handleSwapCompletion() +{ + LC_QDEBUG( "livecomms [UI] -> LcEffectHandler::handleSwapCompletion()" ) + if ( mSwapSharedCompleted && mSwapReceivedCompleted ){ + LC_QDEBUG( "livecomms [UI] Both swaps done, complete" ) + + emit swapCompleted(); + + if( mEngine.isLocalPlayerPlaying() ) { + showSendWindow(); + } + if( mEngine.isRemotePlayerPlaying() ) { + showReceiveWindow(); + } + + mSwapInProgress = false; + } + LC_QDEBUG( "livecomms [UI] <- LcEffectHandler::handleSwapCompletion()" ) +} + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +bool LcEffectHandler::isSwapInProgress() +{ + return mSwapInProgress; +} + + +// End of file + diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/src/lcuicomponentrepository.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/src/lcuicomponentrepository.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,589 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + +//USER +#include "lcuicomponentrepository.h" +#include "lcview.h" +#include "lcuidefs.h" +#include "lclogger.h" +#include "lcuiengine.h" +#include "lcvideowidget.h" + +//SYSTEM +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +// ----------------------------------------------------------------------------- +// LcUiComponentRepository::LcUiComponentRepository +// ----------------------------------------------------------------------------- +// +LcUiComponentRepository::LcUiComponentRepository(LcUiEngine& engine) + : HbDocumentLoader(), + mEngine(engine), + mSlots(0), + mIdleView(0), + mReceiveView(0), + mSendView(0), + mTwowayView(0), + mAllInOneView(0), + mReceiveOnlyView(0), + mAcceptQuery(0), + mInvitingNote(0), + mWaitingNote(0), + mRecipientQuery(0), + mShareOwnVideoQuery(0) +{ + LC_QDEBUG( "livecomms [UI] -> LcUiComponentRepository::LcUiComponentRepository()" ) + + mSlots = new QHash; + mSlots->insert( lcActFullscreenId, SLOT( notSupported() ) ); + mSlots->insert( lcActVideopreferenceId, SLOT( notSupported() ) ); + mSlots->insert( lcActDialerId, SLOT( notSupported() ) ); + mSlots->insert( lcActEndactivecallId, SLOT( notSupported() ) ); + mSlots->insert( lcActStopSharingId, SLOT( endVideoSession() ) ); + mSlots->insert( lcActEnableCameraId, SLOT( disableCamera() ) ); + mSlots->insert( lcActMuteId, SLOT( mute() ) ); + mSlots->insert( lcActGalleryId, SLOT( notSupported() ) ); + mSlots->insert( lcActChangeCameraId, SLOT( changeCamera() ) ); + mSlots->insert( lcActAdjustVideoId, SLOT( notSupported() ) ); + mSlots->insert( lcActShareImageId, SLOT( notSupported() ) ); + mSlots->insert( lcActSwapViewsId, SLOT( swap() ) ); + mSlots->insert( lcActSwitchToVoiceCallId, SLOT( switchToVoiceCall() ) ); + mSlots->insert( lcActOpenKeypadId, SLOT( openDialpad() ) ); + mSlots->insert( lcActDisableCameraId, SLOT( disableCamera() ) ); + mSlots->insert( lcActSpeakerId, SLOT( speaker() ) ); + + mSlots->insert( lcActMenuDisableCameraId, SLOT( disableCamera() ) ); + mSlots->insert( lcActMenuChangeCameraId, SLOT( changeCamera() ) ); + + LC_QDEBUG( "livecomms [UI] <- LcUiComponentRepository::LcUiComponentRepository()" ) +} + +// ----------------------------------------------------------------------------- +// LcUiComponentRepository::~LcUiComponentRepository +// ----------------------------------------------------------------------------- +// +LcUiComponentRepository::~LcUiComponentRepository() +{ + LC_QDEBUG( "livecomms [UI] -> LcUiComponentRepository::~LcUiComponentRepository()" ) + + delete mSlots; + + mIdleViewComponents.clear(); + mReceiveViewComponents.clear(); + mSendViewComponents.clear(); + mTwowayViewComponents.clear(); + mAllInOneViewComponents.clear(); + mReceiveOnlyViewComponents.clear(); + + delete mAcceptQuery; + delete mInvitingNote; + delete mWaitingNote; + delete mRecipientQuery; + delete mShareOwnVideoQuery; + + LC_QDEBUG( "livecomms [UI] <- LcUiComponentRepository::~LcUiComponentRepository()" ) +} + +// ----------------------------------------------------------------------------- +// LcUiComponentRepository::createObject +// ----------------------------------------------------------------------------- +// +QObject* LcUiComponentRepository::createObject( + const QString& type, const QString &name) +{ + QObject* object = 0; + + if ( type == lcLcViewTypeName || + name == lcViewIdleId || + name == lcViewReceiveId || + name == lcViewReceiveOnlyId || + name == lcViewAllInOneId || + name == lcViewSendId || + name == lcViewTwowayId ) { + LC_QDEBUG_2( "-> LcUiComponentRepository::createObject() ", + "- creating LcView -" ) + object = new LcView( mEngine, *this ); + } + else if ( name == lcWidgetSendVideoId ) { + LC_QDEBUG_2( "-> LcUiComponentRepository::createObject() ", + "- creating shared video widget -" ) + object = new LcVideoWidget(); + static_cast(object)->setLocalPlayer(true); + } + else if ( name == lcWidgetSendVideoId2 ) { + LC_QDEBUG_2( "-> LcUiComponentRepository::createObject() ", + "- creating shared video widget effect overlay -" ) + object = new LcVideoWidget(0, false); + static_cast(object)->setLocalPlayer(true); + } + else if ( name == lcWidgetRecvVideoId ) { + LC_QDEBUG_2( "-> LcUiComponentRepository::createObject() ", + "- creating received video widget -" ) + object = new LcVideoWidget(); + static_cast(object)->setLocalPlayer(false); + + } + else if ( name == lcWidgetRecvVideoId2 ) { + LC_QDEBUG_2( "-> LcUiComponentRepository::createObject() ", + "- creating received video widget effect overlay -" ) + object = new LcVideoWidget(0, false); + static_cast(object)->setLocalPlayer(false); + } + else if ( name == lcButtonEndCall ){ + object = HbDocumentLoader::createObject( type, name ); + HbFrameDrawer*frameDrawer = new HbFrameDrawer("qtg_fr_btn_red_normal",HbFrameDrawer::NinePieces); + static_cast(object)->setFrameBackground(frameDrawer); + HbStyleLoader::registerFilePath(":/hbpushbutton_color.css"); + } + else if ( name == lcWidgetDialpad ){ + HbMainWindow* pWindow = HbInstance::instance()->allMainWindows().at(0); + if( pWindow ){ + object = new Dialpad( *pWindow ); + } + } + else { + object = HbDocumentLoader::createObject( type, name ); + } + if (object) { + object->setObjectName(name); + } + + LC_QDEBUG_2( "livecomms [UI] <- LcUiComponentRepository::createObject(), name=", name ) + + return object; +} + +// ----------------------------------------------------------------------------- +// LcUiComponentRepository::idleView +// ----------------------------------------------------------------------------- +// +LcView* LcUiComponentRepository::idleView() +{ + LC_QDEBUG( "livecomms [UI] -> LcUiComponentRepository::idleView()" ); + + reset(); + setObjectTree( mIdleViewComponents ); + + if ( !mIdleView ) { + mIdleView = loadView( + mIdleViewComponents, lcViewIdleId, lcIdleViewFile ); + } + LC_QDEBUG( "livecomms [UI] <- LcUiComponentRepository::idleView()" ); + return mIdleView; +} + +// ----------------------------------------------------------------------------- +// LcUiComponentRepository::receiveView +// ----------------------------------------------------------------------------- +// +LcView* LcUiComponentRepository::receiveView() +{ + LC_QDEBUG( "livecomms [UI] -> LcUiComponentRepository::receiveView()" ); + + reset(); + setObjectTree( mReceiveViewComponents ); + if ( !mReceiveView ) { + mReceiveView = loadView( + mReceiveViewComponents, lcViewReceiveId, lcReceiveViewFile ); + } + LC_QDEBUG( "livecomms [UI] <- LcUiComponentRepository::receiveView()" ); + return mReceiveView; +} + +// ----------------------------------------------------------------------------- +// LcUiComponentRepository::receiveOnlyView +// ----------------------------------------------------------------------------- +// +LcView* LcUiComponentRepository::receiveOnlyView() +{ + LC_QDEBUG( "livecomms [UI] -> LcUiComponentRepository::receiveOnlyView()" ); + + reset(); + setObjectTree( mReceiveOnlyViewComponents ); + if ( !mReceiveOnlyView ) { + mReceiveOnlyView = loadView( + mReceiveOnlyViewComponents, lcViewReceiveOnlyId, lcReceiveOnlyViewFile ); + } + LC_QDEBUG( "livecomms [UI] <- LcUiComponentRepository::receiveOnlyView()" ); + return mReceiveOnlyView; +} + +// ----------------------------------------------------------------------------- +// LcUiComponentRepository::twowayView +// ----------------------------------------------------------------------------- +// +LcView* LcUiComponentRepository::twowayView() +{ + LC_QDEBUG( "livecomms [UI] -> LcUiComponentRepository::twowayView()" ); + + reset(); + setObjectTree( mTwowayViewComponents ); + if ( !mTwowayView ) { + mTwowayView = loadView( + mTwowayViewComponents, lcViewTwowayId, lcTwowayViewFile ); + } + LC_QDEBUG( "livecomms [UI] <- LcUiComponentRepository::twowayView()" ); + return mTwowayView; +} + +// ----------------------------------------------------------------------------- +// LcUiComponentRepository::sendView +// ----------------------------------------------------------------------------- +// +LcView* LcUiComponentRepository::sendView() +{ + LC_QDEBUG( "livecomms [UI] -> LcUiComponentRepository::sendView()" ); + + reset(); + setObjectTree( mSendViewComponents ); + if ( !mSendView ) { + mSendView = + loadView( mSendViewComponents, lcViewSendId, lcSendViewFile ); + } + LC_QDEBUG( "livecomms [UI] <- LcUiComponentRepository::sendView()" ); + return mSendView; +} + +// ----------------------------------------------------------------------------- +// LcUiComponentRepository::allInOneView +// ----------------------------------------------------------------------------- +// +LcView* LcUiComponentRepository::allInOneView() +{ + LC_QDEBUG( "livecomms [UI] -> LcUiComponentRepository::allInOneView()" ); + + reset(); + setObjectTree( mAllInOneViewComponents ); + if ( !mAllInOneView ) { + mAllInOneView = loadView( + mAllInOneViewComponents, lcViewAllInOneId, lcAllInOneViewFile ); + } + LC_QDEBUG( "livecomms [UI] <- LcUiComponentRepository::allInOneView()" ); + return mAllInOneView; +} + +// ----------------------------------------------------------------------------- +// LcUiComponentRepository::acceptQuery +// ----------------------------------------------------------------------------- +// +HbDialog* LcUiComponentRepository::acceptQuery() +{ + LC_QDEBUG( "livecomms [UI] -> LcUiComponentRepository::acceptQuery()" ); + + if ( !mAcceptQuery ) { + mAcceptQuery = new HbDialog(); + HbAction* acceptAction = new HbAction( LC_OK ); + HbAction* rejectAction = new HbAction( LC_CANCEL ); + mAcceptQuery->addAction(acceptAction); + mAcceptQuery->addAction(rejectAction); + mAcceptQuery->setVisible(false); + HbLabel* label = new HbLabel( LC_ACCEPT_SESSION ); + mAcceptQuery->setHeadingWidget(label); + HbLabel* label2 = new HbLabel(); + mAcceptQuery->setContentWidget(label2); + mAcceptQuery->setTimeout(0); + mAcceptQuery->setDismissPolicy(HbDialog::NoDismiss); + } + LC_QDEBUG( "livecomms [UI] <- LcUiComponentRepository::acceptQuery()" ); + return mAcceptQuery; +} + +// ----------------------------------------------------------------------------- +// LcUiComponentRepository::invitingNote +// ----------------------------------------------------------------------------- +// +HbProgressDialog* LcUiComponentRepository::invitingNote() +{ + LC_QDEBUG( "livecomms [UI] -> LcUiComponentRepository::invitingNote()" ); + + if ( !mInvitingNote ) { + mInvitingNote = new HbProgressDialog(); + mInvitingNote->setVisible(false); + mInvitingNote->setText( LC_INVITING ); + HbAction* rejectAction = new HbAction( LC_CANCEL ); + mInvitingNote->addAction(rejectAction); + } + LC_QDEBUG( "livecomms [UI] <- LcUiComponentRepository::invitingNote()" ); + return mInvitingNote; +} + +// ----------------------------------------------------------------------------- +// LcUiComponentRepository::waitingNote +// ----------------------------------------------------------------------------- +// +HbProgressDialog* LcUiComponentRepository::waitingNote() +{ + LC_QDEBUG( "livecomms [UI] -> LcUiComponentRepository::waitingNote()" ); + + if ( !mWaitingNote ) { + mWaitingNote = new HbProgressDialog(); + mWaitingNote->setVisible(false); + HbAction* rejectAction = new HbAction( LC_CANCEL ); + mWaitingNote->addAction(rejectAction); + mWaitingNote->setText( LC_WAITING_VIDEO ); + } + LC_QDEBUG( "livecomms [UI] <- LcUiComponentRepository::waitingNote()" ); + return mWaitingNote; +} + +// ----------------------------------------------------------------------------- +// LcUiComponentRepository::recipientQuery +// ----------------------------------------------------------------------------- +// +HbDialog* LcUiComponentRepository::recipientQuery() +{ + LC_QDEBUG( "livecomms [UI] -> LcUiComponentRepository::recipientQuery()" ); + + if ( !mRecipientQuery ) { + mRecipientQuery = new HbDialog(); + HbLabel* label = new HbLabel( LC_RECIPIENT_QUERY ); + mRecipientQuery->setHeadingWidget(label); + mRecipientQuery->setTimeout(HbDialog::NoTimeout); + mRecipientQuery->setDismissPolicy(HbDialog::TapOutside); + HbAction* acceptAction = new HbAction( LC_OK ); + HbAction* rejectAction = new HbAction( LC_CANCEL ); + mRecipientQuery->addAction(acceptAction); + mRecipientQuery->addAction(rejectAction); + mRecipientQuery->setVisible(false); + } + LC_QDEBUG( "livecomms [UI] <- LcUiComponentRepository::recipientQuery()" ); + return mRecipientQuery; +} + +// ----------------------------------------------------------------------------- +// LcUiComponentRepository::shareOwnVideoQuery +// ----------------------------------------------------------------------------- +// +HbDialog* LcUiComponentRepository::shareOwnVideoQuery() +{ + LC_QDEBUG( "livecomms [UI] -> LcUiComponentRepository::shareOwnVideoQuery()" ); + + if ( !mShareOwnVideoQuery ) { + mShareOwnVideoQuery = new HbMessageBox( HbMessageBox::MessageTypeQuestion ); + mShareOwnVideoQuery->setStandardButtons( HbMessageBox::Yes | HbMessageBox::No ); + mShareOwnVideoQuery->setText( hbTrId( "txt_vt_info_allow_own_image_to_be_sent" )); + mShareOwnVideoQuery->setZValue(LC_NOTE_ON_TOP); + mShareOwnVideoQuery->setTimeout( HbDialog::NoTimeout ); + mShareOwnVideoQuery->setDismissPolicy( HbDialog::NoDismiss ); + mShareOwnVideoQuery->setVisible(false); + } + LC_QDEBUG( "livecomms [UI] <- LcUiComponentRepository::shareOwnVideoQuery()" ); + return mShareOwnVideoQuery; +} + +// ----------------------------------------------------------------------------- +// LcUiComponentRepository::sharedVideoContextMenuActions +// ----------------------------------------------------------------------------- +// +void LcUiComponentRepository::sharedVideoContextMenuActions( HbMenu* menu, LcView& view ) +{ + Q_UNUSED(view) + LC_QDEBUG( + "livecomms [UI] -> LcUiComponentRepository::sharedVideoContextMenuActions()" ); + + menu->actions().clear(); + //due stubs in unit tests, qobject_cast cannot be used. + //Using static_cast instead + HbAction* swap = static_cast( findObject( lcActSwapViewsId ) ); + HbAction* changeCamera = + static_cast( findObject( lcActMenuChangeCameraId ) ); + + HbAction* disableCamera = + static_cast( findObject( lcActMenuDisableCameraId ) ); + HbAction* enableCamera = + static_cast( findObject( lcActEnableCameraId ) ); + + if ( swap ) { + LC_QDEBUG_2( "Adding ", swap->text() ); + menu->addAction( swap ); + } + if ( changeCamera ) { + LC_QDEBUG_2( "Adding ", changeCamera->text() ); + menu->addAction( changeCamera ); + } + if ( mEngine.isLocalPlayerPlaying() ) { + if ( disableCamera ) { + LC_QDEBUG_2( "Adding ", disableCamera->text() ); + menu->addAction( disableCamera ); + } + } else { + if ( enableCamera ) { + LC_QDEBUG_2( "Adding ", enableCamera->text() ); + menu->addAction( enableCamera ); + } + } + + + LC_QDEBUG( + "livecomms [UI] <- LcUiComponentRepository::sharedVideoContextMenuActions()" ); +} + +// ----------------------------------------------------------------------------- +// LcUiComponentRepository::loadView +// ----------------------------------------------------------------------------- +// +LcView* LcUiComponentRepository::loadView( QObjectList& components, + const QString& viewId, + const QString& xmlFile ) +{ + LC_QDEBUG( "livecomms [UI] -> LcUiComponentRepository::loadView()" ); + + LcView* view = 0; + bool ok( false ); + // Load the XML file + components = load( xmlFile, &ok ); + + if ( !ok ) { + LC_QCRITICAL_3( "! loading of XML file ", xmlFile , " failed !" ) + return 0; + } + + mLastLoadedView = xmlFile; + + ok = loadLayout( lcLayoutLandscapeDefaultId ); + if ( !ok ) { + LC_QCRITICAL( "! loading of layout failed !" ) + return 0; + } + + view = qobject_cast( findWidget( viewId ) ); + if ( view ) { + connectActions( *view ); + view->init(); + } + + LC_QDEBUG( "livecomms [UI] <- LcUiComponentRepository::loadView()" ); + return view; +} + + +// ----------------------------------------------------------------------------- +// LcUiComponentRepository::connectActions +// ----------------------------------------------------------------------------- +// +void LcUiComponentRepository::connectActions( LcView& view ) const +{ + LC_QDEBUG( "livecomms [UI] -> LcUiComponentRepository::connectActions()" ); + foreach( QAction* hbAction, view.menu()->actions() ) { + connect( *hbAction, view ); + } + foreach( QAction* hbAction, view.toolBar()->actions() ) { + connect( *hbAction, view ); + } + + HbAction* changeCamera = + static_cast( findObject( lcActMenuChangeCameraId ) ); + HbAction* disableCamera = + static_cast( findObject( lcActMenuDisableCameraId ) ); + HbAction* enableCamera = + static_cast( findObject( lcActEnableCameraId ) ); + + QObject::connect( changeCamera, SIGNAL(triggered()), + &view, SLOT(changeCamera()) ); + + QObject::connect( disableCamera, SIGNAL(triggered()), + &view, SLOT(disableCamera()) ); + + QObject::connect( enableCamera, SIGNAL(triggered()), + &view, SLOT(disableCamera()) ); + + LC_QDEBUG( "livecomms [UI] <- LcUiComponentRepository::connectActions()" ) +} + +// ----------------------------------------------------------------------------- +// LcUiComponentRepository::connect +// ----------------------------------------------------------------------------- +// +bool LcUiComponentRepository::connect( QAction& hbAction, LcView& view ) const +{ + LC_QDEBUG_2( "livecomms [UI] -> LcUiComponentRepository::connect() action=", + hbAction.objectName() ) + + const char* method = mSlots->value( hbAction.objectName() ); + bool slotFound = ( QString( method ).length() > 0 ); + + if ( slotFound ) { + QObject::connect( &hbAction, SIGNAL(triggered()), &view, method ); + } + + LC_QDEBUG( "livecomms [UI] <- LcUiComponentRepository::connect()" ) + + return slotFound; +} + + +// ----------------------------------------------------------------------------- +// LcUiComponentRepository::loadLayout +// ----------------------------------------------------------------------------- +// +bool LcUiComponentRepository::loadLayout( const QString& layoutName ) + { + LC_QDEBUG( "livecomms [UI] -> LcUiComponentRepository::loadLayout()" ) + bool ok( false ); + + if ( mLastLoadedView.length() > 0) { + LC_QDEBUG_4( "layout = ", layoutName, ", view =", mLastLoadedView ) + + load( mLastLoadedView, layoutName, &ok ); + if (!ok) { + LC_QCRITICAL( "! loading of XML failed !" ) + } + else{ + mPreviousLayout = mLayout; + mLayout = layoutName; + } + } else { + LC_QCRITICAL( "! not loading layout, since view is not loaded!" ) + } + + LC_QDEBUG( "livecomms [UI] <- LcUiComponentRepository::loadLayout()" ) + return ok; + } + +// ----------------------------------------------------------------------------- +// LcUiComponentRepository::layout()const +// ----------------------------------------------------------------------------- +// +QString LcUiComponentRepository::layout()const + { + LC_QDEBUG_2( "livecomms [UI] -> LcUiComponentRepository::layout()",mLayout ) + return mLayout; + } + +// ----------------------------------------------------------------------------- +// LcUiComponentRepository::previousLayout()const +// ----------------------------------------------------------------------------- +// +QString LcUiComponentRepository::previousLayout()const + { + LC_QDEBUG_2( "livecomms [UI] -> LcUiComponentRepository::previousLayout()", + mPreviousLayout ) + return mPreviousLayout; + } +// End of file diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/src/lcvideowidget.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/src/lcvideowidget.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,105 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + +//USER +#include "lcvideowidget.h" + +//SYSTEM +#include + +const qreal lcVideoWidgetCornerRounding = 10.0; + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +LcVideoWidget::LcVideoWidget(QGraphicsItem *parent, bool showVideo) : + HbTransparentWindow(parent), + mShowVideo(showVideo) +{ + setFlag(QGraphicsItem::ItemUsesExtendedStyleOption, true); +} + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +LcVideoWidget::~LcVideoWidget() +{ +} + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void LcVideoWidget::paint( + QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) +{ + Q_UNUSED(widget) + QPointF initialPosition(0,0); + + //Workaround: widgets positioning takes time, do not paint if they are not + //positioned correctly. + + if ( this->pos() != initialPosition ) { + + painter->save(); + if ( mShowVideo ){ + + QPainter::CompositionMode origCompositionMode = painter->compositionMode(); + painter->setCompositionMode(QPainter::CompositionMode_Source); +#if ( defined __WINSCW__ ) || ( defined __WINS__ ) + if( mLocalPlayer ){ + painter->setBrush(QColor(Qt::darkGreen)); + }else{ + painter->setBrush(QColor(Qt::darkRed)); + } +#else + painter->setBrush(QColor(0,0,0,0)); +#endif + painter->drawRoundedRect( option->exposedRect, + lcVideoWidgetCornerRounding, lcVideoWidgetCornerRounding); + + painter->setCompositionMode(origCompositionMode); // restore + } else { + painter->setBrush(QColor(0,0,0,255)); + painter->drawRoundedRect( option->exposedRect, + lcVideoWidgetCornerRounding, lcVideoWidgetCornerRounding); + } + painter->restore(); + } +} + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void LcVideoWidget::setShowVideo(bool showVideo) +{ + mShowVideo = showVideo; +} + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +bool LcVideoWidget::isShowingVideo() +{ + return mShowVideo; +} + +// End of file diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/src/lcview.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/src/lcview.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,1074 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ +//USER +#include "lcview.h" +#include "lclogger.h" +#include "lcuiengine.h" +#include "lcuidefs.h" +#include "lcuicomponentrepository.h" +#include "lceffecthandler.h" +#include "lcvideowidget.h" + +//SYSTEM +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + + + +#if ( defined __WINSCW__ ) || ( defined __WINS__ ) +const int inActivityTimeout = 5000; //5 secs +#else +const int inActivityTimeout = 2000; //2 secs +#endif + +// ----------------------------------------------------------------------------- +// LcView::LcView +// ----------------------------------------------------------------------------- +// +LcView::LcView(LcUiEngine& engine, LcUiComponentRepository& repository) + : HbView(0), + mEngine(engine), + mRepository(repository), + mRecipient(0), + mDuration(0), + mContactIcon(0), + mSharedVideoWidget(0), + mReceivedVideoWidget(0), + mChangeCameraAction(0), + mMuteAction(0), + mSpeakerAction(0), + mDisableCameraAction(0), + mDisableCameraMenuAction(0), + mNotSupportedNote(0), + mEndCallButton(0), + mReceivedVideoEffectOverlay(0), + mSharedVideoEffectOverlay(0), + mEffectHandler(0), + mItemContextMenu(0), + mIsOptionMenuOpen(false), + mDialpad(0), + mDialpadVtKeyHandler(0), + timerId(0), + isViewReady(0) +{ + LC_QDEBUG( "livecomms [UI] -> LcView::LcView()" ) + + createNotSupportedNote(); + + // For LiveComms views Dock Wiget Item is explicitly hidden. + hideItems(Hb::DockWidgetItem); + + //Subscribe to the gesture events. + grabGesture(Qt::TapGesture,Qt::DontStartGestureOnChildren); + + LC_QDEBUG( "livecomms [UI] <- LcView::LcView()" ) +} + + +// ----------------------------------------------------------------------------- +// LcView::~LcView +// ----------------------------------------------------------------------------- +// +LcView::~LcView() +{ + LC_QDEBUG( "livecomms [UI] -> LcView::~LcView()" ) + + // Un-subscribe to the gesture events. + ungrabGesture(Qt::TapGesture); + + delete mEffectHandler; + delete mNotSupportedNote; + delete mDialpadVtKeyHandler; + + LC_QDEBUG( "livecomms [UI] <- LcView::~LcView()" ) +} + +// ----------------------------------------------------------------------------- +// LcView::init +// ----------------------------------------------------------------------------- +// +void LcView::init() +{ + LC_QDEBUG( "livecomms [UI] -> LcView::init()" ) + //find member widgets from repository + //( can be also found by browsing this view itself ) + + //due stubs in unit tests, qobject_cast cannot be used. Using static_cast instead + mRecipient = + static_cast( mRepository.findWidget( lcLabelRecipientId ) ); + mDuration = + static_cast( mRepository.findWidget( lcLabelDurationId ) ); + mContactIcon = + static_cast( mRepository.findWidget( lcIconContactId ) ); + mSharedVideoWidget = + static_cast( + mRepository.findWidget( lcWidgetSendVideoId ) ); + mReceivedVideoWidget = + static_cast( + mRepository.findWidget( lcWidgetRecvVideoId ) ); + mChangeCameraAction = + static_cast( mRepository.findObject( lcActChangeCameraId ) ); + mMuteAction = + static_cast( mRepository.findObject( lcActMuteId ) ); + mSpeakerAction = + static_cast( mRepository.findObject( lcActSpeakerId ) ); + mDisableCameraAction = + static_cast( mRepository.findObject( lcActDisableCameraId ) ); + + mDisableCameraMenuAction = + static_cast( mRepository.findObject( lcActMenuDisableCameraId ) ); + + mEndCallButton = + static_cast( mRepository.findObject( lcButtonEndCall ) ); + + if ( mEndCallButton ) { + connect( mEndCallButton, SIGNAL(clicked()), this, SLOT(endVideoSession())); + } + + if ( mSharedVideoWidget ) { + mSharedVideoEffectOverlay = static_cast( + mRepository.findWidget( lcWidgetSendVideoId2 ) ); + if ( mSharedVideoEffectOverlay ) { + mSharedVideoEffectOverlay->show(); + } + } + + mReceivedVideoEffectOverlay = + static_cast( mRepository.findWidget( lcWidgetRecvVideoId2 ) ); + + if ( mReceivedVideoEffectOverlay ) { + mReceivedVideoEffectOverlay->show(); + } + + // swap + mEffectHandler = new LcEffectHandler( mEngine, + mSharedVideoWidget, mSharedVideoEffectOverlay, + mReceivedVideoWidget, mReceivedVideoEffectOverlay); + connect( mEffectHandler, SIGNAL(swapCompleted()), this, SLOT(updateVideoRects()) ); + connect( mEffectHandler, SIGNAL(loadSwapLayout()), this, SLOT(updateSwapLayout()) ); + + // menu + if ( menu()) { + connect( menu(), SIGNAL(aboutToShow()), this, SLOT(menuAboutToShow()) ); + connect( menu(), SIGNAL(aboutToHide()), this, SLOT(watchInactivity()) ); + } + + // Set up navigation action. + setNavigationAction(new HbAction(Hb::BackNaviAction, this)); + connect(navigationAction(), SIGNAL(triggered()), this, + SLOT(back())); + + // dialpad + mDialpad = static_cast ( mRepository.findWidget("lc_label_dialpad") ); + connect( mDialpad, SIGNAL(aboutToClose()), this, SLOT(dialpadClosed()) ); + connect( mDialpad, SIGNAL(aboutToOpen()), this, SLOT(dialpadOpened()) ); + connect( &mDialpad->editor(), SIGNAL( contentsChanged() ), this, SLOT( dialpadEditorTextChanged() ) ); + HbMainWindow* pWindow = HbInstance::instance()->allMainWindows().at(0); + if( pWindow && mDialpad ){ + mDialpadVtKeyHandler = new DialpadVtKeyHandler( mDialpad,*pWindow ); + } + + // inactivity + connect( this, SIGNAL( contentFullScreenChanged() ), this, SLOT( watchInactivity() ) ) ; + + // deactivate fullscreen and it inturn starts inactivity timeout + toFullScreen( false ); + + if ( mSharedVideoWidget ) { + connect( mSharedVideoWidget, SIGNAL( xChanged() ), this, + SLOT( updateVideoRects() ), Qt::QueuedConnection ); + connect( mSharedVideoWidget, SIGNAL( yChanged() ), this, + SLOT( updateVideoRects() ) , Qt::QueuedConnection); + } + if ( mReceivedVideoWidget ) { + connect( mReceivedVideoWidget, SIGNAL( xChanged() ), this, + SLOT( updateVideoRects() ), Qt::QueuedConnection ); + connect( mReceivedVideoWidget, SIGNAL( yChanged() ), this, + SLOT( updateVideoRects() ), Qt::QueuedConnection ); + } + + //Subscribe to the Volume Change Events. + connect( &mEngine, SIGNAL(volumeChanged(int)), + this, SLOT(updateVolumeSlider(int)) ); + + LC_QDEBUG( "livecomms [UI] <- LcView::init()" ) +} + + +// ----------------------------------------------------------------------------- +// LcView::updateVideoRects +// ----------------------------------------------------------------------------- +// +void LcView::updateVideoRects() +{ + LC_QDEBUG( "livecomms [UI] -> LcView::updateVideoRects()" ) + + QRectF sharedContentRect; + QRectF receivedContentRect; + + //Workaround: widgets positioning takes time, do not inform to the + //engine for rendering if co-ordinates of the videos are incorrect. + + if ( isPositioned() ) { + + if ( mSharedVideoWidget ) { + sharedContentRect = mSharedVideoWidget->geometry(); + sharedContentRect.moveTop( + sharedContentRect.y() + mapToParent(scenePos()).y()); + sharedContentRect = translateRectForOrientation(sharedContentRect); + mEffectHandler->setVisibility( + mSharedVideoWidget, mEngine.isLocalPlayerPlaying()); + } + + if ( mReceivedVideoWidget ) { + receivedContentRect = mReceivedVideoWidget->geometry(); + receivedContentRect.moveTop( + receivedContentRect.y() + mapToParent(scenePos()).y()); + receivedContentRect = translateRectForOrientation(receivedContentRect); + mEffectHandler->setVisibility( + mReceivedVideoWidget, mEngine.isRemotePlayerPlaying()); + } + + mEngine.setContentAreas( sharedContentRect, receivedContentRect ); + mEngine.setOrientation( HbInstance::instance()->allMainWindows().at(0)->orientation() ); + mEngine.updateSession(); + } + LC_QDEBUG( "livecomms [UI] <- LcView::updateVideoRects()" ) +} + +// ----------------------------------------------------------------------------- +// LcView::swap +// ----------------------------------------------------------------------------- +// +void LcView::swap() +{ + LC_QDEBUG( "livecomms [UI] -> LcView::swap()" ) + if ( mEffectHandler ){ + mEffectHandler->swap(); + } + LC_QDEBUG( "livecomms [UI] <- LcView::swap()" ) +} + + +// ----------------------------------------------------------------------------- +// LcView::updateSwapLayout +// ----------------------------------------------------------------------------- +// + +void LcView::updateSwapLayout() +{ + mRepository.loadLayout( currentLayout() ); + toFullScreen( true ); +} + +// ----------------------------------------------------------------------------- +// LcView::activated +// ----------------------------------------------------------------------------- +// +void LcView::activated() +{ + LC_QDEBUG( "livecomms [UI] -> LcView::activated()" ) + + updateVideoRects(); + + if ( mEngine.mainCamera() ) { + setCameraActionToSecondary(); + } else { + setCameraActionToMain(); + } + + if ( mEngine.isMuted() ) { + setMuteActionToUnmute(); + } else { + setMuteActionToMute(); + } + + if ( mEngine.isSpeakerOn() ) { + setSpeakerActionToHandset(); + } else { + setSpeakerActionToSpeaker(); + } + + if( mEngine.isLocalPlayerPlaying() ){ + setCameraActionToDisable(); + } else { + setCameraActionToEnable(); + } + + if ( mChangeCameraAction ) { + connect( + &mEngine, SIGNAL(cameraChangedToMain()), + this, SLOT(setCameraActionToSecondary()) ); + connect( + &mEngine, SIGNAL(cameraChangedToSecondary()), + this, SLOT(setCameraActionToMain())); + } + + if ( mMuteAction ) { + connect( + &mEngine, SIGNAL(muted()), + this, SLOT(setMuteActionToUnmute()) ); + connect( + &mEngine, SIGNAL(unmuted()), + this, SLOT(setMuteActionToMute())); + } + + if ( mSpeakerAction ) { + connect( &mEngine, SIGNAL(speakerEnabled()), + this, SLOT(setSpeakerActionToHandset()) ); + connect( &mEngine, SIGNAL(speakerDisabled()), + this, SLOT(setSpeakerActionToSpeaker()) ); + } + + if ( mDisableCameraAction ) { + connect( + &mEngine, SIGNAL(cameraDisabled()), + this, SLOT(setCameraActionToEnable()) ); + connect( + &mEngine, SIGNAL(cameraEnabled()), + this, SLOT(setCameraActionToDisable())); + } + + connect( &mEngine, SIGNAL(blocked()), this, SLOT(disableControls()) ); + connect( &mEngine, SIGNAL(unblocked()), this, SLOT(enableControls()) ); + + if ( mDuration ) { + // TODO: clearing is needed for label in order to + // get text changed. Seems like bug in orbit side. + // This causes that duration is not changed. Workaround + // would be to call clear always when duration changes. + mDuration->clear(); + connect( + &mEngine, SIGNAL(sessionDurationChanged(const QString &)), + mDuration, SLOT(setPlainText(const QString &)) ); + } + + if ( mRecipient ){ + mRecipient->clear(); + mRecipient->setPlainText( mEngine.recipient() ); + connect( + &mEngine, SIGNAL(recipientChanged(const QString &)), + mRecipient, SLOT(setPlainText(const QString &)) ); + } + + if ( mSharedVideoWidget ) { + connect( &mEngine, SIGNAL(localPlayerPlaying()), + mEffectHandler, SLOT(showSendWindow()) ); + connect( &mEngine, SIGNAL(localPlayerPaused()), + mEffectHandler, SLOT(hideSendWindow()) ); + connect( &mEngine, SIGNAL(localPlayerPlaying()), + this, SLOT(setCameraActionToDisable())); + connect( &mEngine, SIGNAL(localPlayerPaused()), + this, SLOT(setCameraActionToEnable())); + connect( &mEngine, SIGNAL(localPlayerUnavailable()), + this, SLOT(setCameraActionToEnable())); + connect( &mEngine, SIGNAL(localPlayerPlaying()), + this, SLOT(updateVideoRects())); + } + + if ( mReceivedVideoWidget ) { + connect( &mEngine, SIGNAL(remotePlayerPlaying()), + mEffectHandler, SLOT(showReceiveWindow()) ); + connect( &mEngine, SIGNAL(remotePlayerPaused()), + mEffectHandler, SLOT(hideReceiveWindow()) ); + connect( &mEngine, SIGNAL(remotePlayerPlaying()), + this, SLOT(updateVideoRects()) ); + } + + mEngine.setCurrentView(this); + + LC_QDEBUG( "livecomms [UI] <- LcView::activated()" ) +} + +// ----------------------------------------------------------------------------- +// LcView::deactivated +// ----------------------------------------------------------------------------- +// +void LcView::deactivated() +{ + LC_QDEBUG( "livecomms [UI] -> LcView::deactivated()" ) + QRectF sharedContentRect;//null area + QRectF receivedContentRect;//null area + + mEngine.setContentAreas( sharedContentRect, receivedContentRect ); + disconnect( &mEngine, 0, this, 0 ); + + LC_QDEBUG( "livecomms [UI] <- LcView::deactivated()" ) +} + +// ----------------------------------------------------------------------------- +// LcView::notSupported +// ----------------------------------------------------------------------------- +// +void LcView::notSupported() +{ + LC_QDEBUG( "livecomms [UI] -> LcView::notSupported()" ) + + mNotSupportedNote->show(); + toFullScreen( false ); + + LC_QDEBUG( "livecomms [UI] <- LcView::notSupported()" ) +} + +// ----------------------------------------------------------------------------- +// LcView::shareImage +// ----------------------------------------------------------------------------- +// +void LcView::shareImage() +{ + LC_QDEBUG( "livecomms [UI] -> LcView::shareImage()" ) + const char localImageName[] = "c:\\data\\local.jpg"; + QString fileName = QString::fromAscii(localImageName); + mEngine.shareImage(fileName); + LC_QDEBUG( "livecomms [UI] <- LcView::shareImage()" ) +} + +// ----------------------------------------------------------------------------- +// LcView::endVideoSession +// ----------------------------------------------------------------------------- +// +void LcView::endVideoSession() +{ + LC_QDEBUG( "livecomms [UI] -> LcView::endVideoSession()" ) + + mEngine.stop(); + + LC_QDEBUG( "livecomms [UI] <- LcView::endVideoSession()" ) + +} + +// ----------------------------------------------------------------------------- +// LcView::disableCamera +// ----------------------------------------------------------------------------- +// +void LcView::disableCamera() +{ + LC_QDEBUG( "livecomms [UI] -> LcView::disableCamera()" ) + + mEffectHandler->setDissappearEffect( LcEffectHandler::NormalDissappear ); + mEngine.toggleDisableCamera(); + toFullScreen( mEngine.fullScreenMode() ); + + LC_QDEBUG( "livecomms [UI] <- LcView::disableCamera()" ) +} + +// ----------------------------------------------------------------------------- +// LcView::mute +// ----------------------------------------------------------------------------- +// +void LcView::mute() +{ + LC_QDEBUG( "livecomms [UI] -> LcView::mute()" ) + + mEngine.toggleMute(); + toFullScreen( false ); + + LC_QDEBUG( "livecomms [UI] <- LcView::mute()" ) +} + +// ----------------------------------------------------------------------------- +// LcView::changeCamera +// ----------------------------------------------------------------------------- +// +void LcView::changeCamera() +{ + LC_QDEBUG( "livecomms [UI] -> LcView::changeCamera()" ) + + mEffectHandler->setDissappearEffect( LcEffectHandler::DissappearToFlip ); + mEngine.toggleCamera(); + toFullScreen( false ); + + LC_QDEBUG( "livecomms [UI] <- LcView::changeCamera()" ) +} + +// ----------------------------------------------------------------------------- +// LcView::switchToVoiceCall +// ----------------------------------------------------------------------------- +// +void LcView::switchToVoiceCall() +{ + LC_QDEBUG( "livecomms [UI] -> LcView::switchToVoiceCall()" ) + + mEngine.stop(); + + LC_QDEBUG( "livecomms [UI] <- LcView::switchToVoiceCall()" ) +} + +// ----------------------------------------------------------------------------- +// LcView::speaker +// ----------------------------------------------------------------------------- +// +void LcView::speaker() +{ + LC_QDEBUG( "livecomms [UI] -> LcView::speaker()" ) + + mEngine.toggleSpeaker(); + toFullScreen( false ); + + LC_QDEBUG( "livecomms [UI] <- LcView::speaker()" ) +} + +// ----------------------------------------------------------------------------- +// LcView::setCameraActionToMain +// ----------------------------------------------------------------------------- +// +void LcView::setCameraActionToMain() +{ + LC_QDEBUG( "livecomms [UI] -> LcView::setCameraActionToMain()" ) + + if ( mChangeCameraAction ){ + mChangeCameraAction->setIcon (HbIcon( lcIconNameMainCamera )); + } + LC_QDEBUG( "livecomms [UI] <- LcView::setCameraActionToMain()" ) +} + +// ----------------------------------------------------------------------------- +// LcView::setCameraActionToSecondary +// ----------------------------------------------------------------------------- +// +void LcView::setCameraActionToSecondary() +{ + LC_QDEBUG( "livecomms [UI] -> LcView::setCameraActionToSecondary()" ) + + if ( mChangeCameraAction ){ + mChangeCameraAction->setIcon (HbIcon( lcIconNameSecondaryCamera )); + } + LC_QDEBUG( "livecomms [UI] <- LcView::setCameraActionToSecondary()" ) +} + +// ----------------------------------------------------------------------------- +// LcView::setMuteActionToUnmute +// ----------------------------------------------------------------------------- +// +void LcView::setMuteActionToUnmute() +{ + LC_QDEBUG( "livecomms [UI] -> LcView::setMuteActionToUnmute()" ) + + if ( mMuteAction ){ + mMuteAction->setIcon (HbIcon( lcIconNameUnmuteMic )); + } + LC_QDEBUG( "livecomms [UI] <- LcView::setMuteActionToUnmute()" ) +} + +// ----------------------------------------------------------------------------- +// LcView::setMuteActionToMute +// ----------------------------------------------------------------------------- +// +void LcView::setMuteActionToMute() +{ + LC_QDEBUG( "livecomms [UI] -> LcView::setMuteActionToMute()" ) + if ( mMuteAction ){ + mMuteAction->setIcon (HbIcon( lcIconNameMuteMic )); + } + LC_QDEBUG( "livecomms [UI] <- LcView::setMuteActionToMute()" ) +} + +// ----------------------------------------------------------------------------- +// LcView::setSpeakerActionToHandset +// ----------------------------------------------------------------------------- +// +void LcView::setSpeakerActionToHandset() +{ + LC_QDEBUG( "livecomms [UI] -> LcView::setSpeakerActionToHandset()" ) + if ( mSpeakerAction ){ + mSpeakerAction->setIcon (HbIcon( lcIconNameHandset )); + } + LC_QDEBUG( "livecomms [UI] <- LcView::setSpeakerActionToHandset()" ) +} + +// ----------------------------------------------------------------------------- +// LcView::setSpeakerActionToSpeaker +// ----------------------------------------------------------------------------- +// +void LcView::setSpeakerActionToSpeaker() +{ + LC_QDEBUG( "livecomms [UI] -> LcView::setSpeakerActionToSpeaker()" ) + if ( mSpeakerAction ){ + mSpeakerAction->setIcon( HbIcon( lcIconNameLoudspeaker )); + } + LC_QDEBUG( "livecomms [UI] <- LcView::setSpeakerActionToSpeaker()" ) +} + +// ----------------------------------------------------------------------------- +// LcView::setCameraActionToEnable +// ----------------------------------------------------------------------------- +// +void LcView::setCameraActionToEnable() +{ + LC_QDEBUG( "livecomms [UI] -> LcView::setCameraActionToEnable()" ) + + if ( mDisableCameraAction ){ + mDisableCameraAction->setIcon( HbIcon( lcIconNameEnableCamera )); + } + if ( mDisableCameraMenuAction ){ + // TODO: get text from repository as loc id is not the same for mus + mDisableCameraMenuAction->setText( hbTrId( "txt_vt_menu_enable_camera" )); + } + + LC_QDEBUG( "livecomms [UI] <- LcView::setCameraActionToEnable()" ) +} + +// ----------------------------------------------------------------------------- +// LcView::setCameraActionToDisable +// ----------------------------------------------------------------------------- +// +void LcView::setCameraActionToDisable() +{ + LC_QDEBUG( "livecomms [UI] -> LcView::setCameraActionToDisable()" ) + + if ( mDisableCameraAction ){ + mDisableCameraAction->setIcon (HbIcon( lcIconNameDisableCamera )); + } + if ( mDisableCameraMenuAction ){ + // TODO: get text from repository as loc id is not the same for mus + mDisableCameraMenuAction->setText( hbTrId( "txt_vt_menu_disable_camera" )); + } + + LC_QDEBUG( "livecomms [UI] <- LcView::setCameraActionToDisable()" ) +} + +// ----------------------------------------------------------------------------- +// LcView::disableControls +// ----------------------------------------------------------------------------- +// +void LcView::disableControls() +{ + LC_QDEBUG( "livecomms [UI] -> LcView::disableControls()" ) + menu()->setEnabled( false ); + toolBar()->setEnabled( false ); + LC_QDEBUG( "livecomms [UI] <- LcView::disableControls()" ) +} + +// ----------------------------------------------------------------------------- +// LcView::enableControls +// ----------------------------------------------------------------------------- +// +void LcView::enableControls() +{ + LC_QDEBUG( "livecomms [UI] -> LcView::enableControls()" ) + menu()->setEnabled( true ); + toolBar()->setEnabled( true ); + LC_QDEBUG( "livecomms [UI] <- LcView::enableControls()" ) +} + +// ----------------------------------------------------------------------------- +// LcView::gestureEvent +// ----------------------------------------------------------------------------- +// +void LcView::gestureEvent(QGestureEvent *event) +{ + LC_QDEBUG( "livecomms [UI] -> LcView::gestureEvent()" ) + if( event ){ + // unsafe typecast but no other way to access tapstylehint from orbit + HbTapGesture *tap = static_cast(event->gesture(Qt::TapGesture)); + Qt::GestureState tapState = tap->state(); + HbTapGesture::TapStyleHint hint = tap->tapStyleHint(); + if ( tapState == Qt::GestureUpdated && hint == HbTapGesture::TapAndHold ) { + gestureLongPress(translatePointForOrientation(tap->position())); + } else if ( tapState == Qt::GestureFinished && hint == HbTapGesture::Tap ) { + gestureShortPress(); + } + } + LC_QDEBUG( "livecomms [UI] <- LcView::gestureEvent()" ) +} + + +// ----------------------------------------------------------------------------- +// LcView::gestureLongPress +// ----------------------------------------------------------------------------- +// +void LcView::gestureLongPress(QPointF coords) +{ + LC_QDEBUG_2( "livecomms [UI] -> LcView::gestureLongPress(), coords:", coords ) + + bool sharedHit = false; + + if ( mSharedVideoWidget && mSharedVideoWidget->windowFrameGeometry().contains(coords) ) { + LC_QDEBUG( "livecomms [UI] LcView mapped to mSharedVideoWidget" ) + sharedHit = true; + } + + if ( sharedHit ) { + LC_QDEBUG( "livecomms [UI] LcView mapped to mSharedVideoWidget" ) + + createContextMenu(); + mRepository.sharedVideoContextMenuActions( mItemContextMenu, *this ); + + if ( mItemContextMenu->actions().count() > 0 ) { + mItemContextMenu->open(this); + } + } + + LC_QDEBUG( "livecomms [UI] <- LcView::gestureLongPress()" ) +} + + + +// ----------------------------------------------------------------------------- +// LcView::gestureShortPress +// ----------------------------------------------------------------------------- +// +void LcView::gestureShortPress() +{ + LC_QDEBUG( "livecomms [UI] -> LcView::gestureShortPress()" ) + toFullScreen( !mEngine.fullScreenMode() ); + LC_QDEBUG( "livecomms [UI] <- LcView::gestureShortPress()" ) +} + +// ----------------------------------------------------------------------------- +// LcView::createNotSupportedNote +// ----------------------------------------------------------------------------- +// +void LcView::createNotSupportedNote() +{ + LC_QDEBUG( "livecomms [UI] -> LcView::createNotSupportedNote()" ) + + if ( !mNotSupportedNote ){ + mNotSupportedNote = new HbMessageBox(QString("Not supported")); + mNotSupportedNote->setTimeout(HbDialog::StandardTimeout); + mNotSupportedNote->setZValue(LC_NOTE_ON_TOP); + mNotSupportedNote->hide(); + } + + LC_QDEBUG( "livecomms [UI] <- LcView::createNotSupportedNote()" ) +} + + + +// ----------------------------------------------------------------------------- +// LcView::createContextMenu +// ----------------------------------------------------------------------------- +// +void LcView::createContextMenu() +{ + LC_QDEBUG( "livecomms [UI] -> LcView::createContextMenu()" ) + + // mItemContextMenu is destroyed upon close + mItemContextMenu = new HbMenu(); + mItemContextMenu->setDismissPolicy(HbMenu::TapAnywhere); + mItemContextMenu->setTimeout(HbMenu::ContextMenuTimeout); + mItemContextMenu->setAttribute(Qt::WA_DeleteOnClose); + + LC_QDEBUG( "livecomms [UI] <- LcView::createContextMenu()" ) +} + +// ----------------------------------------------------------------------------- +// LcView::currentLayout +// ----------------------------------------------------------------------------- +// +QString LcView::currentLayout() +{ + QString layout( lcLayoutLandscapeDefaultId ); + + if ( mEffectHandler->isSwapInProgress() && + mSharedVideoWidget && + mReceivedVideoWidget && + mSharedVideoWidget->geometry().left() > mReceivedVideoWidget->geometry().left() ) { + + layout = lcLayoutLandscapeSwappedId; + } + + LC_QDEBUG_2( "livecomms [UI] -> LcView::currentLayout()", layout ) + return layout; +} + + +// ----------------------------------------------------------------------------- +// LcView::menuAboutToShow +// ----------------------------------------------------------------------------- +// +void LcView::menuAboutToShow() +{ + LC_QDEBUG( "livecomms [UI] -> LcView::menuAboutToShow()" ) + toFullScreen( false ); + LC_QDEBUG( "livecomms [UI] <- LcView::menuAboutToShow()" ) +} + +// ----------------------------------------------------------------------------- +// LcView::translateRectForOrientation +// Video windows at engine side do not change their coordinate system +// when orientation at orbit UI changes. Therefore we need to convert video +// rects from landscape coordinate system to portait coordinate system. +// NOTE: Landscape orientation has different rotation in emulator than in HW. +// ----------------------------------------------------------------------------- +// +QRectF LcView::translateRectForOrientation(const QRectF& origRect) +{ + QRectF newRect = origRect; + QMatrix m; +#if ( defined __WINSCW__ ) || ( defined __WINS__ ) + m.rotate(270); + newRect = m.mapRect(newRect); + newRect.translate(0,HbInstance::instance()->allMainWindows().at(0)->rect().height()); +#else + m.rotate(90); + newRect = m.mapRect(newRect); + newRect.translate(HbInstance::instance()->allMainWindows().at(0)->rect().width(),0); +#endif + return newRect; +} + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +QPointF LcView::translatePointForOrientation(const QPointF& origPoint) +{ + QPointF newPoint = origPoint; + QMatrix m; +#if ( defined __WINSCW__ ) || ( defined __WINS__ ) + m.translate(HbInstance::instance()->allMainWindows().at(0)->rect().height(),0); + m.rotate(90); + newPoint = m.map(newPoint); +#else + m.translate(0,HbInstance::instance()->allMainWindows().at(0)->rect().width()); + m.rotate(270); + newPoint = m.map(newPoint); +#endif + return newPoint; +} + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void LcView::setVisibility( QGraphicsItem* item, bool visible ) +{ + if ( item ) { + item->setVisible(visible); + } +} + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void LcView::addOptionsMenuActions() +{ + HbAction* swapAction = static_cast( + mRepository.findObject(lcActSwapViewsId)); + menu()->addAction(swapAction); + + HbAction* openKeypadAction = static_cast( + mRepository.findObject(lcActOpenKeypadId)); + menu()->addAction(openKeypadAction); +} + +// ----------------------------------------------------------------------------- +// LcView::openDialpad() +// ----------------------------------------------------------------------------- +// +void LcView::openDialpad() +{ + LC_QDEBUG("livecomms [UI] -> LcView::openDialpad()") + mRepository.loadLayout( lcLayoutLandscapeDialpadId ); + if ( mEffectHandler )mEffectHandler->startEffects(); + mDialpad->openDialpad(); + mDialpad->setCallButtonEnabled(false); + menu()->clearActions(); + LC_QDEBUG("livecomms [UI] <- LcView::openDialpad()") +} + +// ----------------------------------------------------------------------------- +// LcView::dialpadOpened() +// ----------------------------------------------------------------------------- +// +void LcView::dialpadOpened() +{ + LC_QDEBUG("livecomms [UI] <-> LcView::dialpadOpened()") + toolBar()->setVisible( false ); + setTitleBarVisible( true ); +} + +// ----------------------------------------------------------------------------- +// LcView::dialpadClosed() +// ----------------------------------------------------------------------------- +// +void LcView::dialpadClosed() +{ + LC_QDEBUG("livecomms [UI] -> LcView::dialpadClosed()") + mDialpad->editor().setText(QString()); + addOptionsMenuActions(); + // switch back to the previous layout + QString pLayout = mRepository.previousLayout(); + QString layout; + bool isSwapped = (pLayout == lcLayoutLandscapeDefaultId) + ? false : true; + layout = (isSwapped) ? + lcLayoutLandscapeSwappedId : lcLayoutLandscapeDefaultId; + + mRepository.loadLayout( layout ); + if ( mEffectHandler ){ + mEffectHandler->startEffects(); + } + toFullScreen(false); + LC_QDEBUG("livecomms [UI] <- LcView::dialpadClosed()") +} + +// ----------------------------------------------------------------------------- +// LcView::dialpadEditorTextChanged() +// ----------------------------------------------------------------------------- +// +void LcView::dialpadEditorTextChanged() +{ + LC_QDEBUG_2("livecomms [UI] -> Dial Pad Field ", mDialpad->editor().text()); + + if ( mDialpad->editor().text().length() > 0 ) { + LC_QDEBUG_2("livecomms [UI] -> Last Dialled Charcter ", mDialpad->editor().text().right(1)); + bool dialPadStatus = mEngine.SendDialTone(mDialpad->editor().text().right(1).at(0)); + LC_QDEBUG_2("livecomms [UI] -> Dialpad Send Tone Status ",dialPadStatus) + } +} + +// ----------------------------------------------------------------------------- +// LcView::back +// ----------------------------------------------------------------------------- +// +void LcView::back() +{ + LC_QDEBUG("livecomms [UI] -> LcView::back()") + if ( mDialpad && mDialpad->isOpen()) { + LC_QDEBUG("livecomms [UI] - Closing dialpad") + mDialpad->closeDialpad(); + } else { + mEngine.minimize(); + } + + LC_QDEBUG("livecomms [UI] <- LcView::back()") +} + +// ----------------------------------------------------------------------------- +// LcView::timerEvent +// ----------------------------------------------------------------------------- +// +void LcView::timerEvent( QTimerEvent * event ) +{ + if ( event->timerId() == timerId ){ + LC_QDEBUG("livecomms [UI] -> LcView::timerEvent() inActivity Timeout") + killTimer( timerId ); + toFullScreen(true); + } +} + +// ----------------------------------------------------------------------------- +// LcView::watchInactivity +// ----------------------------------------------------------------------------- +// +void LcView::watchInactivity() +{ + if( !mEngine.fullScreenMode() && !( mDialpad && mDialpad->isOpen() ) ){ + LC_QDEBUG("livecomms [UI] - LcView::watchInactivity() start watching inactivity") + killTimer( timerId ); + timerId = startTimer( inActivityTimeout ); + } +} + +// ----------------------------------------------------------------------------- +// LcView::toFullScreen utility function +// ----------------------------------------------------------------------------- +// +void LcView::toFullScreen( bool fullscreen ) +{ + LC_QDEBUG_2("livecomms [UI] - LcView::toFullScreen(),",fullscreen) + if( menu()->isVisible() || ( mDialpad && mDialpad->isOpen() ) ) return; + mEngine.setFullScreenMode( fullscreen ); + setTitleBarVisible( !fullscreen ); + setStatusBarVisible( !fullscreen ); + toolBar()->setVisible( !fullscreen ); + setVisibility( mEndCallButton, !fullscreen ); + setVisibility( mDuration, !fullscreen ); + setVisibility( mRecipient, !fullscreen ); + emit contentFullScreenChanged(); +} + + +// ----------------------------------------------------------------------------- +// LcView::isVideoPositionedCorrectly utility function +// ----------------------------------------------------------------------------- +// +bool LcView::isVideoPositionedCorrectly( LcVideoWidget* mVideoWidget ) +{ + LC_QDEBUG("livecomms [UI] -> LcView::isVideoPositionedCorrectly()") + LC_QDEBUG("livecomms [UI] <- LcView::isVideoPositionedCorrectly()") + QPointF initialPosition(0,0); + return ( !mVideoWidget || + (( mVideoWidget ) && ( mVideoWidget->pos()!= initialPosition ))); +} + +// ----------------------------------------------------------------------------- +// LcView::isPositioned utility function +// hack style since orbit give viewready much earlier and widgets do not have +// proper co-ordinates. +// ----------------------------------------------------------------------------- +// +bool LcView::isPositioned() +{ + LC_QDEBUG("livecomms [UI] -> LcView::isPositioned()") + // at first time check for video positions if they are not ready + // wait for x or y changed event and recheck position. + // After firsttime it will work. + if( !isViewReady ){ + isViewReady = isVideoPositionedCorrectly( mSharedVideoWidget ) && + isVideoPositionedCorrectly( mReceivedVideoWidget ); + if( isViewReady ){ + if ( mSharedVideoWidget ) { + disconnect( mSharedVideoWidget, SIGNAL( xChanged() ), this, + SLOT( updateVideoRects() ) ); + disconnect( mSharedVideoWidget, SIGNAL( yChanged() ), this, + SLOT( updateVideoRects() ) ); + } + if ( mReceivedVideoWidget ) { + disconnect( mReceivedVideoWidget, SIGNAL( xChanged() ), this, + SLOT( updateVideoRects() ) ); + disconnect( mReceivedVideoWidget, SIGNAL( yChanged() ), this, + SLOT( updateVideoRects() ) ); + } + } + } + LC_QDEBUG_2("livecomms [UI] - LcView::isPositioned(),",isViewReady) + return isViewReady; +} + + +// ----------------------------------------------------------------------------- +// LcView::updateVolumeSlider +// ----------------------------------------------------------------------------- +// +void LcView::updateVolumeSlider( int aVolumeLevel ) +{ + LC_QDEBUG("livecomms [UI] -> LcView::updateVolumeSlider()") + //TBD: Show volume slider, with update volume level + LC_QDEBUG_2("Volume Level Is,",aVolumeLevel) + LC_QDEBUG("livecomms [UI] <- LcView::updateVolumeSlider()") +} + + +// End of file diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/src/lcviewmanager.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/src/lcviewmanager.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,59 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + +//USER +#include "lcviewmanager.h" +#include "lcviewmanager_p.h" +#include "lclogger.h" + + + +// ----------------------------------------------------------------------------- +// LcViewManager::LcViewManager +// ----------------------------------------------------------------------------- +// +LcViewManager::LcViewManager( const QString &engineName, + const QString &applicationDisplayName) +{ + + d_ptr = new LcViewManagerPrivate( engineName, applicationDisplayName ); + +} + + +// ----------------------------------------------------------------------------- +// LcViewManager::~LcViewManager +// ----------------------------------------------------------------------------- +// +LcViewManager::~LcViewManager() +{ + delete d_ptr; +} + + +// ----------------------------------------------------------------------------- +// LcViewManager::terminateSession +// ----------------------------------------------------------------------------- +// +void LcViewManager::terminateSession() +{ + d_ptr->terminateSession(); +} + + +// End of file + diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/src/lcviewmanager_p.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/src/lcviewmanager_p.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,282 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + +// USER INCLUDES +#include "lcviewmanager_p.h" +#include "lcuicomponentrepository.h" +#include "lcuidefs.h" +#include "lcuiengine.h" +#include "lcview.h" +#include "lclogger.h" + +// SYSTEM INCLUDES +#include +#include +#include +#include +#include +#include +#include + +// CONSTANTS +#define LC_VIEWMANAGER_SLOT_ACTIVATE_CURRENT_VIEW "activateCurrentView" + + + +// ----------------------------------------------------------------------------- +// LcMainWindow::LcMainWindow +// ----------------------------------------------------------------------------- +// +LcMainWindow::LcMainWindow() : + HbMainWindow(0, Hb::WindowFlagFixedHorizontal | Hb::WindowFlagTransparent) +{ + // TODO: remove flag WindowFlagFixedHorizontal if portait layout + // is going to be supported. + qApp->installEventFilter(this); +} + +// ----------------------------------------------------------------------------- +// LcMainWindow::~LcMainWindow +// ----------------------------------------------------------------------------- +// +LcMainWindow::~LcMainWindow() +{ +} + +// ----------------------------------------------------------------------------- +// LcMainWindow::eventFilter +// ----------------------------------------------------------------------------- +// +bool LcMainWindow::eventFilter ( QObject * watched, QEvent * event ) +{ + if ( event->type() == QEvent::ApplicationActivate ){ + LC_QDEBUG( "livecomms [UI] -> LcMainWindow::eventFilter(), ApplicationActivate" ) + emit appFocusGained(); + } else if (( event->type() == QEvent::ApplicationDeactivate ) && + ( !this->windowSurface()) ){ + LC_QDEBUG( "livecomms [UI] -> LcMainWindow::eventFilter(), ApplicationDeactivate" ) + emit appFocusLost(); + } + return QObject::eventFilter(watched, event); +} + + +// ----------------------------------------------------------------------------- +// LcViewManagerPrivate::LcViewManagerPrivate +// ----------------------------------------------------------------------------- +// +LcViewManagerPrivate::LcViewManagerPrivate( + const QString& engineName, + const QString& applicationDisplayName) : + mEngine( 0 ), + mRepository( 0 ) +{ + LC_QDEBUG( "livecomms [UI] -> LcViewManagerPrivate::LcViewManagerPrivate()" ) + + mEngine = new LcUiEngine( engineName, applicationDisplayName ); + mRepository = new LcUiComponentRepository( *mEngine ); + setCurrentView( true ); + + connect(&mMainWindow, SIGNAL(appFocusGained()), mEngine, SLOT(maximize())); + connect(&mMainWindow, SIGNAL(appFocusLost()), mEngine, SLOT(minimize())); + + LC_QDEBUG( "livecomms [UI] <- LcViewManagerPrivate::LcViewManagerPrivate()" ) +} + +// ----------------------------------------------------------------------------- +// LcViewManagerPrivate::~LcViewManagerPrivate +// ----------------------------------------------------------------------------- +// +LcViewManagerPrivate::~LcViewManagerPrivate() +{ + LC_QDEBUG( "livecomms [UI] -> LcViewManagerPrivate::~LcViewManagerPrivate()" ) + + delete mEngine; + QList views = mMainWindow.views(); + foreach( HbView* view, views ){ + mMainWindow.removeView(view); + } + delete mRepository; + + LC_QDEBUG( "livecomms [UI] <- LcViewManagerPrivate::~LcViewManagerPrivate()" ) +} + +// ----------------------------------------------------------------------------- +// LcViewManagerPrivate::terminateSession +// ----------------------------------------------------------------------------- +// +void LcViewManagerPrivate::terminateSession() +{ + LC_QDEBUG( "livecomms [UI] -> LcViewManagerPrivate::terminateSession" ) + mEngine->stop(); + LC_QDEBUG( "livecomms [UI] <- LcViewManagerPrivate::terminateSession" ) +} + + +// ----------------------------------------------------------------------------- +// LcViewManagerPrivate::prepareOrientationChange +// ----------------------------------------------------------------------------- +// +void LcViewManagerPrivate::prepareOrientationChange() +{ + LC_QDEBUG( "livecomms [UI] -> LcViewManagerPrivate::prepareOrientationChange()" ) + LC_QDEBUG( "livecomms [UI] <- LcViewManagerPrivate::prepareOrientationChange()" ) +} + +// ----------------------------------------------------------------------------- +// LcViewManagerPrivate::activateCurrentView +// ----------------------------------------------------------------------------- +// +void LcViewManagerPrivate::activateCurrentView(bool startup) +{ + LC_QDEBUG( "livecomms [UI] -> LcViewManagerPrivate::activateCurrentView()" ) + if ( mMainWindow.currentView() ) { + static_cast( mMainWindow.currentView() )->activated(); + } + + if ( startup ){ + LC_QDEBUG( "livecomms [UI] Start engine" ) + startEngine(); + } + LC_QDEBUG( "livecomms [UI] <- LcViewManagerPrivate::activateCurrentView()" ) +} + +// ----------------------------------------------------------------------------- +// LcViewManagerPrivate::startEngine +// ----------------------------------------------------------------------------- +// +void LcViewManagerPrivate::startEngine() +{ + connect(mEngine, SIGNAL(layoutChanged()), this, SLOT(changeView()), + Qt::QueuedConnection ); + connect(mEngine, SIGNAL(stopped()), this, SLOT(closeApp()), + Qt::QueuedConnection ); + + mEngine->setUiComponents( mRepository->invitingNote(), + mRepository->waitingNote(), + mRepository->acceptQuery(), + mRepository->recipientQuery(), + mRepository->shareOwnVideoQuery() ); + mEngine->start(); +} + +// ----------------------------------------------------------------------------- +// LcViewManagerPrivate::setCurrentView +// ----------------------------------------------------------------------------- +// +void LcViewManagerPrivate::setCurrentView(bool startup) +{ + LC_QDEBUG( "livecomms [UI] -> LcViewManagerPrivate::setCurrentView()" ) + + LcView* currView = currentView(); + + bool found(false); + foreach ( HbView* view, mMainWindow.views() ){ + found |= ( view == currView ); + } + if ( !found ){ + mMainWindow.addView( currView ); + } + mMainWindow.setCurrentView( currView ); + + LcUtil::asyncSlotCall( + this, LC_VIEWMANAGER_SLOT_ACTIVATE_CURRENT_VIEW, Q_ARG( bool, startup ) ); + + LC_QDEBUG( "livecomms [UI] <- LcViewManagerPrivate::setCurrentView()" ) +} + +// ----------------------------------------------------------------------------- +// LcViewManagerPrivate::currentView +// ----------------------------------------------------------------------------- +// +LcView* LcViewManagerPrivate::currentView() +{ + LC_QDEBUG( "livecomms [UI] -> LcViewManagerPrivate::currentView()" ) + + LcViewLayoutHint hint = mEngine->viewLayout(); + LcView* nextView = 0; + + switch ( hint ) { + case Lc_ReceivedViewLayout: + LC_QDEBUG( "livecomms [UI] - switching to receive view -" ) + nextView = mRepository->receiveView(); + break; + case Lc_ReceivedOnlyViewLayout: + LC_QDEBUG( "livecomms [UI] - switching to receive only view -" ) + nextView = mRepository->receiveOnlyView(); + break; + case Lc_AllInOneViewLayout: + LC_QDEBUG( "livecomms [UI] - switching to allinone view -" ) + nextView = mRepository->allInOneView(); + break; + case Lc_TwowayViewLayout: + LC_QDEBUG( "livecomms [UI] - switching to twoway view -" ) + nextView = mRepository->twowayView(); + break; + case Lc_SharedViewLayout: + LC_QDEBUG( "livecomms [UI] - switching to send view -" ) + nextView = mRepository->sendView(); + break; + default: + LC_QDEBUG( "livecomms [UI] - switching to idle view -" ) + nextView = mRepository->idleView(); + break; + } + if ( !nextView && hint > Lc_IdleViewLayout ) { + LC_QDEBUG( "livecomms [UI] ! could not get view !" ) + LC_QDEBUG( "livecomms [UI] - switching to idle view -" ) + nextView = mRepository->idleView(); + } + + if ( !nextView ) { + LC_QCRITICAL( "livecomms [UI] ! still could not get view !. ABORT" ) + LC_PANIC(); + } + + LC_QDEBUG( "livecomms [UI] <- LcViewManagerPrivate::currentView()" ) + return nextView; +} + +// ----------------------------------------------------------------------------- +// LcViewManagerPrivate::changeView +// ----------------------------------------------------------------------------- +// +void LcViewManagerPrivate::changeView() +{ + LC_QDEBUG( "livecomms [UI] -> LcViewManagerPrivate::changeView()" ) + + LcView* currentView = static_cast( mMainWindow.currentView() ); + currentView->deactivated(); + setCurrentView(); + + LC_QDEBUG( "livecomms [UI] <- LcViewManagerPrivate::changeView()" ) +} + +// ----------------------------------------------------------------------------- +// LcViewManagerPrivate::closeApp +// ----------------------------------------------------------------------------- +// +void LcViewManagerPrivate::closeApp() +{ + LC_QDEBUG( "livecomms [UI] -> LcViewManagerPrivate::closeApp()" ) + + qApp->exit(0); + + LC_QDEBUG( "livecomms [UI] <- LcViewManagerPrivate::closeApp()" ) +} + +// End of file diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/dummymusengineplugin/data/20021341.rss --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/dummymusengineplugin/data/20021341.rss Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,40 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + +#include "registryinfov2.rh" + +RESOURCE REGISTRY_INFO theInfo + { + resource_format_version = RESOURCE_FORMAT_VERSION_2; + dll_uid = 0x20021341; + interfaces = + { + INTERFACE_INFO + { + interface_uid = 0x20021340; + implementations = + { + IMPLEMENTATION_INFO + { + implementation_uid = 0x20021341; + version_no = 1; + default_data = "MultimediaSharing"; + } + }; + } + }; + } diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/dummymusengineplugin/group/bld.inf --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/dummymusengineplugin/group/bld.inf Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,23 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + +#include + +PRJ_MMPFILES +dummymusengineplugin.mmp + + diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/dummymusengineplugin/group/dummymusengineplugin.mmp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/dummymusengineplugin/group/dummymusengineplugin.mmp Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,82 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + +#include + +TARGET musengineplugin.dll +TARGETTYPE PLUGIN +UID 0x10009D8D 0x20021341 +VENDORID VID_DEFAULT +CAPABILITY CAP_ECOM_PLUGIN + +SOURCEPATH ../data +START RESOURCE 20021341.rss +TARGET musengineplugin.rsc +END + +SOURCEPATH ../src +SOURCE musenginepluginentry.cpp +SOURCE musengsessionmanager.cpp + + +SOURCE musengmcesession.cpp +SOURCE musengtwowaysession.cpp +SOURCE musengcamerahandler.cpp +SOURCE musengvideoplayerbase.cpp +SOURCE musenglocalvideoplayer.cpp +SOURCE musenglivevideoplayer.cpp +SOURCE musengremotevideoplayer.cpp +SOURCE svptimer.cpp +SOURCE mccdatasender.cpp +SOURCE mccdatareceiver.cpp musenglivesession.cpp + +/* +SOURCE musengmceoutsession.cpp +SOURCE musenglivesession.cpp +SOURCE musengreceivesession.cpp +SOURCE musengtwowayrecvsession.cpp + +SOURCE musengtelephoneutils.cpp +SOURCE musengsessiondurationtimer.cpp +SOURCE musengclipsession.cpp +SOURCE musenguriparser.cpp +SOURCE musengmceutils.cpp +SOURCE mussipprofilehandler.cpp +SOURCE musengclipvideoplayer.cpp +*/ + +USERINCLUDE ../inc +USERINCLUDE ../../../../../../inc +USERINCLUDE ../../../../../mmshengine/inc + +APP_LAYER_SYSTEMINCLUDE +SYSTEMINCLUDE /epoc32/include/ecom + +LIBRARY euser.lib +LIBRARY bafl.lib +LIBRARY inetprotutil.lib +LIBRARY phoneclient.lib +LIBRARY centralrepository.lib +LIBRARY sipprofilecli.lib +LIBRARY sipclient.lib +LIBRARY sipcodec.lib +LIBRARY mceclient.lib +LIBRARY drmcommon.lib +LIBRARY charconv.lib +LIBRARY telephonyaudiorouting.lib +LIBRARY cntmodel.lib ecom.lib +DEBUGLIBRARY flogger.lib diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/dummymusengineplugin/inc/mccdatareceiver.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/dummymusengineplugin/inc/mccdatareceiver.h Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,63 @@ +/* +* Copyright (c) 2006 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: +* +*/ + + + + +#ifndef MCCDATARECEIVER_H +#define MCCDATARECEIVER_H +#include +#include + +#include "mccdatareceiverobserver.h" +#include "mccdatastructures.h" + + +// CLASS DECLARATION + +/** +* CMccDataReceiver class declaration +*/ +class CMccDataReceiver : public CActive + { + public: + + static CMccDataReceiver* NewL( MMccDataReceiverObserver& aObserver ); + + ~CMccDataReceiver(); + + TDataMessage iInitData; + + public: // From CActive + + void DoCancel(); + void RunL(); + TInt RunError(TInt aError); + + private: + CMccDataReceiver( MMccDataReceiverObserver& aObserver ); + void ConstructL(); // second construction phase + + private: + + RMsgQueue iMsgQueue; + MMccDataReceiverObserver* iObserver; + + }; + + +#endif \ No newline at end of file diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/dummymusengineplugin/inc/mccdatareceiverobserver.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/dummymusengineplugin/inc/mccdatareceiverobserver.h Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,41 @@ +/* +* Copyright (c) 2006 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: +* +*/ + + + + +#ifndef MCCDATARECEIVEROBSERVER_H +#define MCCDATARECEIVEROBSERVER_H + +#include +#include "mccdatastructures.h" + +// CLASS DECLARATION + +/** +* CMccDataReceiver class declaration +*/ +class MMccDataReceiverObserver + { + public: + + virtual void DataReceived( const TDataMessage& aData ) = 0; + + }; + + +#endif \ No newline at end of file diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/dummymusengineplugin/inc/mccdatasender.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/dummymusengineplugin/inc/mccdatasender.h Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,64 @@ +/* +* Copyright (c) 2006 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: +* +*/ + + + + +#ifndef MCCDATASENDER_H +#define MCCDATASENDER_H +#include +#include + +#include "mccdatastructures.h" + + +// CLASS DECLARATION + +/** +* CMccPeriodicRunner class declaration +*/ +class CMccDataSender : public CActive + { + public: + + static CMccDataSender* NewL(); + + ~CMccDataSender(); + + public: + + void Send( const TDataMessage& aData ); + + public: // From CActive + + void DoCancel(); + void RunL(); + TInt RunError(TInt aError); + + private: + CMccDataSender(); + void ConstructL(); // second construction phase + + private: + + RMsgQueue iMsgQueue; + TDataMessage iBuffer; + + }; + + +#endif \ No newline at end of file diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/dummymusengineplugin/inc/mccdatastructures.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/dummymusengineplugin/inc/mccdatastructures.h Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,48 @@ +/* +* Copyright (c) 2006 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: +* +*/ + + + + +#ifndef MCCDATASTRUCTURES_H +#define MCCDATASTRUCTURES_H + +#include + +enum TDataId +{ + EUninitialized, + EInitComplete, + EEstablish, + EProceeding, + EEstablished, + ETerminate, + ETerminated +}; + +class TDataMessage +{ +public: + TDataId iDataId; + TInt iDataIntValue; + TBuf<50> iDataBufValue; + +}; + + + +#endif \ No newline at end of file diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/dummymusengineplugin/inc/musengcamerahandler.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/dummymusengineplugin/inc/musengcamerahandler.h Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,111 @@ +/* +* 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: +* +*/ + + +#ifndef MUSHENGCAMERAHANDLER_H +#define MUSHENGCAMERAHANDLER_H + +// USER +#include "lccameracontrol.h" +#include "lcbrightnesscontrol.h" +#include "lczoomcontrol.h" + +// SYSTEM +#include +#include + + +// CLASS + +class TMusEngCameraHandler : + public MLcCameraControl, + public MLcBrightnessControl, + public MLcZoomControl + { + + public: // From MLcCameraControl + + TInt LcCameraCountL(); + + TInt CurrentLcCameraIndex(); + + void ToggleLcCameraL(); + + public: // From MLcBrightnessControl + + TInt MinLcBrightnessL(); + + TInt MaxLcBrightnessL(); + + TInt LcBrightnessL(); + + void SetLcBrightnessL( TInt aValue ); + + void IncreaseLcBrightnessL(); + + void DecreaseLcBrightnessL(); + + public: // From MLcZoomControl + + TInt MinLcZoomL(); + + TInt MaxLcZoomL(); + + TInt LcZoomValueL(); + + void SetLcZoomValueL( TInt aValue ); + + void LcZoomInL(); + + void LcZoomOutL(); + + public: + + TMusEngCameraHandler(); + + TInt ZoomStepSize( TInt64& aTime ); + + private: + + enum TCurrentCamera + { + ECameraNotAvailable = KErrNotFound, + EBackCamera = 0, + EFrontCamera = 1 + }; + + + private: // Data + + + TCameraInfo iCameraInfo; + + TInt iDefaultBrightness; + + TInt64 iZoomInTime; + + TInt64 iZoomOutTime; + + TInt iSmallZoomStep; + + TInt iBigZoomStep; + + TCurrentCamera iCurrentCamera; + }; + +#endif + diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/dummymusengineplugin/inc/musengdisplayhandler.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/dummymusengineplugin/inc/musengdisplayhandler.h Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,109 @@ +/* +* 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: +* +*/ + + +#ifndef MUSHENGDISPLAYHANDLER_H +#define MUSHENGDISPLAYHANDLER_H + + +#include + +// CLASS DECLARATION + +/** +* An Interface for display services +* +* @lib museng.lib +* @since S60 v3.2 +*/ +class MMusEngDisplayHandler + { + + public: + + /* + * Defines possible rotations + */ + enum TDisplayOrientation + { + EPortrait, // Normal + ELandscape // 90 degree's clockwise rotation + }; + + /** + * Returns currently assigned drawing area + * + * @return TRect This session drawing area rectangle + */ + virtual TRect Rect() const = 0; + + /** + * Sets new drawing area + * + * @param TRect This session new drawing area rectangle + */ + virtual void SetRectL( const TRect& aRect ) = 0; + + /** + * Sets secondary rect (e.g. viewfinder in twoway session) + * @param TRect This session new secondary drawing area rectangle + */ + virtual void SetSecondaryRectL( const TRect& aSecondaryRect ) = 0; + + /** + * Gets secondary rect. + * @return TRect This session secondary drawing area rectangle + */ + virtual TRect SecondaryRect() const = 0; + + /** + * Enables or disables display. Call to this function is considered + * as a permission or denial to draw to the display. + */ + virtual void EnableDisplayL( TBool aEnable ) = 0; + + /** + * Check whether display is enabled + */ + virtual TBool IsDisplayEnabled() = 0; + + /** + * Returns current display orientation. + * + * @pre Session is ongoing + * @return Current display orientation + * @leave KErrNotReady if precondition is not fullfilled + */ + virtual TDisplayOrientation OrientationL() = 0; + + /** + * Sets display orientation. + * + * @pre Session is ongoing + * @return Sets display orientation + * @leave KErrNotReady if precondition is not fullfilled + */ + virtual void SetOrientationL( TDisplayOrientation aOrientation ) = 0; + + /** + * Check if display is actively displaying content + * @return ETrue if is displaying content, otherwise EFalse + */ + virtual TBool IsDisplayActive() = 0; + }; + +#endif diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/dummymusengineplugin/inc/musenglivesession.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/dummymusengineplugin/inc/musenglivesession.h Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,86 @@ +/* +* 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: +* +*/ + + +#ifndef MUSHENGLIVESESSION_H +#define MUSHENGLIVESESSION_H + +// USER +#include "musengmcesession.h" + +// SYSTEM +#include + +// FORWARD DECLARATIONS +class MMusEngLiveSessionObserver; +class CMceDisplaySink; +class MMusEngTwoWaySessionObserver; +class CMusEngRemoteVideoPlayer; + + +class CMusEngLiveSession : public CMusEngMceSession + { + public: + /** + * Creates new MultimediaSharing Live session. + * @return CMusEngLiveSession* New instanse of specified class + */ + static CMusEngLiveSession* NewL(); + + + public: + + /** + * Destructor + */ + ~CMusEngLiveSession(); + + public: + + void EnableDisplayL( TBool aEnable ); + + void SetOrientationL( MMusEngDisplayHandler::TDisplayOrientation aOrientation ); + + void EstablishLcSessionL(); + + void TerminateLcSessionL(); + + public: + + /** + * Sets both remote (receiving video) and local (viewfinder) rects. + * + */ + void SetRectsL( const TRect& aRemoteRect, + const TRect& aLocalRect ); + + private: + + /** + * Constructor + */ + CMusEngLiveSession(); + + /** + * Second-phase constructor + */ + void ConstructL(); + + }; + +#endif + diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/dummymusengineplugin/inc/musenglivevideoplayer.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/dummymusengineplugin/inc/musenglivevideoplayer.h Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,83 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + + +#ifndef MUSHENGLIVEVIDEOPLAYER_H +#define MUSHENGLIVEVIDEOPLAYER_H + +// INCLUDES +#include "musenglocalvideoplayer.h" +#include "lcdestinationfilecontrol.h" + +// FORWARD DECLARATIONS +class CMceSession; +class TMusEngCameraHandler; + +// CLASS DECLARATION +class CMusEngLiveVideoPlayer : + public CMusEngLocalVideoPlayer, + public MLcDestinationFileControl + { + public: // Constructors and destructor + + static CMusEngLiveVideoPlayer* NewL( + MMusEngDisplayHandler& aDisplayHandler, + TMusEngCameraHandler& aCameraHandler, + MLcAudioControl& aLcAudioControl ); + + ~CMusEngLiveVideoPlayer(); + + public: // From MLcVideoPlayer + + TBool LcIsPlayingL(); + + void LcPlayL(); + + void LcPauseL(); + + MLcCameraControl* LcCameraControl(); + + MLcDestinationFileControl* LcDestinationFileControl(); + + MLcZoomControl* LcZoomControl(); + + MLcBrightnessControl* LcBrightnessControl(); + + public: // From MLcDestinationFileControl + + void SetLcFileNameL( const TFileName& aFileName ); + + TFileName& LcFileName(); + + void LcRecordL( TBool aRecord ); + + TBool LcIsRecording(); + + private: // Constructors + + CMusEngLiveVideoPlayer( + MMusEngDisplayHandler& aDisplayHandler, + TMusEngCameraHandler& aCameraHandler, + MLcAudioControl& aLcAudioControl ); + + private: // Data + + TFileName iFileName; + TMusEngCameraHandler& iCameraHandler; + }; + +#endif // MUSHENGLIVEVIDEOPLAYER_H diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/dummymusengineplugin/inc/musenglocalvideoplayer.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/dummymusengineplugin/inc/musenglocalvideoplayer.h Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,47 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + + +#ifndef MUSHENGLOCALVIDEOPLAYER_H +#define MUSHENGLOCALVIDEOPLAYER_H + +// INCLUDES +#include "musengvideoplayerbase.h" + +// CLASS DECLARATION +class CMusEngLocalVideoPlayer : public CMusEngVideoPlayerBase + { + public: // Constructors and destructor + + ~CMusEngLocalVideoPlayer(); + + public: // from CMusEngVideoPlayerBase + + TLcVideoPlayerState LcVideoPlayerState() const; + + void SetLcWindowRectL( TRect aRect ); + + TRect LcWindowRect(); + + protected: // Constructors + + CMusEngLocalVideoPlayer( + MMusEngDisplayHandler& aDisplayHandler, + MLcAudioControl& aLcAudioControl ); + }; + +#endif // MUSHENGLOCALVIDEOPLAYER_H diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/dummymusengineplugin/inc/musenglogger.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/dummymusengineplugin/inc/musenglogger.h Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,301 @@ +/* +* Copyright (c) 2006 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: ?Description +* +*/ + + +#ifndef MUSENGLOGGER_H +#define MUSENGLOGGER_H + + +#include "muslogger.h" + +#if ( !_DEBUG || UNIT_TESTING ) // release or unit test build; no logs + +#define MUS_ENG_LOG_SESSION_STATE( aSession ) +#define MUS_ENG_LOG_SESSION_STATE_AND_STATUS( aSession, aStatusCode, aReasonPhrase ) +#define MUS_ENG_LOG_STREAM_STATE( aStream ) +#define MUS_ENG_LOG_SINK_STATES( aStream ) +#define MUS_ENG_LOG_SOURCE_STATE( aSource ) +#define MUS_ENG_LOG_SINK_STATE( aSink ) +#define MUS_ENG_LOG_STATUS( aStatusCode, aReasonPhrase ) + +#else // debug build; logs + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define MUS_ENG_LOG_SESSION_STATE( aSession )\ + {\ + TBuf<15> state;\ + switch ( (aSession).State() )\ + {\ + case CMceSession::EIdle:\ + {\ + state = _L("EIdle");\ + break;\ + }\ + case CMceSession::EOffering :\ + {\ + state = _L("EOffering");\ + break;\ + }\ + case CMceSession::EIncoming:\ + {\ + state = _L("EIncoming");\ + break;\ + }\ + case CMceSession::EReserving :\ + {\ + state = _L("EReserving");\ + break;\ + }\ + case CMceSession::EAnswering :\ + {\ + state = _L("EAnswering");\ + break;\ + }\ + case CMceSession::EProceeding :\ + {\ + state = _L("EProceeding");\ + break;\ + }\ + case CMceSession::EEstablished:\ + {\ + state = _L("EEstablished");\ + break;\ + }\ + case CMceSession::ECancelling:\ + {\ + state = _L("ECancelling");\ + break;\ + }\ + case CMceSession::ETerminating:\ + {\ + state = _L("ETerminating");\ + break;\ + }\ + case CMceSession::ETerminated:\ + {\ + state = _L("ETerminated");\ + break;\ + }\ + default:\ + {\ + state = _L("Unknown");\ + break;\ + }\ + }\ + MUS_LOG_TDESC( "mus: [ENGINE] Session state is ", state )\ + } + + +#define MUS_ENG_LOG_SESSION_STATE_AND_STATUS( aSession, aStatusCode, aReasonPhrase )\ + {\ + MUS_ENG_LOG_SESSION_STATE( aSession )\ + MUS_ENG_LOG_STATUS( aStatusCode, aReasonPhrase )\ + } + + +#define MUS_ENG_LOG_STREAM_STATE( aStream )\ + {\ + TBuf<20> streamState;\ + switch ( (aStream).State() )\ + {\ + case CMceMediaStream::EUninitialized:\ + {\ + streamState = _L("EIdle");\ + break;\ + }\ + case CMceMediaStream::EInitialized:\ + {\ + streamState = _L("EInitialized");\ + break;\ + }\ + case CMceMediaStream::EBuffering:\ + {\ + streamState = _L("EBuffering");\ + break;\ + }\ + case CMceMediaStream::EIdle:\ + {\ + streamState = _L("EIdle");\ + break;\ + }\ + case CMceMediaStream::EStreaming:\ + {\ + streamState = _L("EStreaming");\ + break;\ + }\ + case CMceMediaStream::EDisabled:\ + {\ + streamState = _L("EDisabled");\ + break;\ + }\ + case CMceMediaStream::ENoResources:\ + {\ + streamState = _L("ENoResources");\ + break;\ + }\ + case CMceMediaStream::ETranscodingRequired:\ + {\ + streamState = _L("ETranscodingRequired");\ + break;\ + }\ + case CMceMediaStream::ETranscoding:\ + {\ + streamState = _L("ETranscoding");\ + break;\ + }\ + default:\ + {\ + streamState = _L("Unknown");\ + break;\ + }\ + }\ + if ( (aStream).Type() == KMceAudio )\ + {\ + MUS_LOG_TDESC( "mus: [ENGINE] AudioStream state is ", streamState )\ + }\ + else\ + {\ + MUS_LOG_TDESC( "mus: [ENGINE] VideoStream state is ", streamState )\ + }\ + MUS_ENG_LOG_SOURCE_STATE( (aStream).Source() )\ + MUS_ENG_LOG_SINK_STATES( (aStream) )\ + } + + +#define MUS_ENG_LOG_SINK_STATES( aStream )\ + {\ + for ( TInt sinkIndex = 0; sinkIndex < aStream.Sinks().Count(); ++sinkIndex )\ + {\ + MUS_ENG_LOG_SINK_STATE( aStream.Sinks()[ sinkIndex ] )\ + }\ + } + + +#define MUS_ENG_LOG_SOURCE_STATE( aSource )\ + {\ + if ( aSource )\ + {\ + TBuf<10> sourceState;\ + if ( aSource->IsEnabled() )\ + {\ + sourceState = _L("enabled");\ + }\ + else\ + {\ + sourceState = _L("disabled");\ + }\ + switch ( aSource->Type() )\ + {\ + case KMceCameraSource:\ + {\ + MUS_LOG_TDESC( " CameraSource is ", sourceState )\ + break;\ + }\ + case KMceFileSource:\ + {\ + MUS_LOG_TDESC( " FileSource is ", sourceState )\ + break;\ + }\ + case KMceRTPSource:\ + {\ + MUS_LOG_TDESC( " RtpSource is ", sourceState )\ + break;\ + }\ + default:\ + {\ + MUS_LOG_TDESC( " UnknownSource is ", sourceState )\ + break;\ + }\ + }\ + }\ + else\ + {\ + MUS_LOG( " No source in stream" )\ + }\ + } + +#define MUS_ENG_LOG_SINK_STATE( aSink )\ + {\ + if ( aSink )\ + {\ + TBuf<10> sinkState;\ + if ( aSink->IsEnabled() )\ + {\ + sinkState = _L("enabled");\ + }\ + else\ + {\ + sinkState = _L("disabled");\ + }\ + switch ( aSink->Type() )\ + {\ + case KMceDisplaySink:\ + {\ + MUS_LOG_TDESC( " DisplaySink is ", sinkState )\ + break;\ + }\ + case KMceSpeakerSink:\ + {\ + MUS_LOG_TDESC( " SpeakerSink is ", sinkState )\ + break;\ + }\ + case KMceRTPSink:\ + {\ + MUS_LOG_TDESC( " RtpSink is ", sinkState )\ + break;\ + }\ + case KMceFileSink:\ + {\ + MUS_LOG_TDESC( " FileSink is ", sinkState )\ + break;\ + }\ + default:\ + {\ + MUS_LOG_TDESC( " UnknownSink is ", sinkState )\ + break;\ + }\ + }\ + }\ + } + + +#define MUS_ENG_LOG_STATUS( aStatusCode, aReasonPhrase )\ + {\ + MUS_LOG1( " StatusCode is %d", aStatusCode )\ + HBufC16* reasonPhrase = HBufC16::NewLC( aReasonPhrase.Length() );\ + reasonPhrase->Des().Copy( aReasonPhrase );\ + MUS_LOG_TDESC( " ReasonPhrase is ",(*reasonPhrase) )\ + CleanupStack::PopAndDestroy( reasonPhrase );\ + } + + + +#endif // _DEBUG + + +#endif // MUSENGLOGGER_H + +// End of File diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/dummymusengineplugin/inc/musengmcesession.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/dummymusengineplugin/inc/musengmcesession.h Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,285 @@ +/* +* 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: +* +*/ + + +#ifndef MUSENGMCESESSION_H +#define MUSENGMCESESSION_H + +// USER +#include "musengcamerahandler.h" +#include "musengdisplayhandler.h" +#include "lcsession.h" +#include "lcaudiocontrol.h" +#include "svptimerobserver.h" + +#include + + +// FORWARD DECLARATIONS +class CContactTextField; +class CPbkContactItem; +class CPbkContactEngine; +class MLcSessionObserver; +class CMusEngLiveVideoPlayer; +class CMusEngRemoteVideoPlayer; +class CSVPTimer; + + +// CONSTANTS + +_LIT8( KMusEngAcceptContactHeader, + "Accept-Contact: *;+g.3gpp.cs-voice; explicit" ); +_LIT8( KMusAcceptHeader, + "Accept: application/sdp" ); +_LIT8( KMusEngSessionSdpLineXApplication, "a=X-application:com.nokia.rtvs\r\n" ); +_LIT8( KMusEngSessionSdpLineApplication , "a=application:com.gsma.rts\r\n" ); +_LIT8( KMusEngSessionSdpLineType, "a=type:videolive\r\n" ); +_LIT8( KMusEngSessionSdpLineBandwidthLine , "b=AS:" ); +_LIT8( KMusEngSessionSdpLineBandwidthField , "b=AS:85\r\n" ); +_LIT8( KMusEngSessionSdpLineTiasLine , "b=TIAS:" ); +_LIT8( KMusPPreferredIdentity, "P-Preferred-Identity" ); +_LIT8( KMusEngNewLine , "\r\n" ); + +const TInt KMusTiasMultiplier = 1000; +const TUint8 KMusEngRtpKeepAliveTimer = 5; +const TUint8 KMusEngKeepAlivePayloadTypeVideoH263 = 96; +const TUint8 KMusEngKeepAlivePayloadTypeAudio = 97; +const TUint8 KMusEngKeepAlivePayloadTypeVideoAvc = 98; + +// CLASS DECLARATION + +/** +* Base class for Multimedia Sharing Engine MCE sessions, inherited by +* CMusEngLiveSession CMusEngClipSession and CMusEngReceiveSession. +* +* CMusEngMceSession encapsulates CMCESession and simplifies use of +* MCE Sessions to user interface. Also splits observers messy events +* to simplified function calls. +* +* @lib musengine.lib +*/ +class CMusEngMceSession : public CBase, + public MLcSession, + public MLcAudioControl, + public MMusEngDisplayHandler, + public MSVPTimerObserver + { + public: + + /** + * Destructor + */ + ~CMusEngMceSession(); + + void SetRemoteL( const TDesC& aRemote ); + + public: // from MSVPTimerObserver + + virtual void TimedOut( TInt aTimerId ); + + + public: // from MMusEngDisplayHandler + + /** + * Returns currently assigned drawing area + * + * @return TRect This session drawing area rectangle + */ + TRect Rect() const; + + /** + * Sets new drawing area + * + * @param TRect This session new drawing area rectangle + */ + void SetRectL( const TRect& aRect ); + + /** + * Sets secondary rect (e.g. viewfinder in twoway session) + * @param TRect This session new secondary drawing area rectangle + */ + void SetSecondaryRectL( const TRect& aSecondaryRect ); + + /** + * Gets secondary rect. + * @return TRect This session secondary drawing area rectangle + */ + virtual TRect SecondaryRect() const; + + /** + * Returns current display orientation. + * + * @pre Session is ongoing + * @return Current display orientation + * @leave KErrNotReady if precondition is not fullfilled + */ + TDisplayOrientation OrientationL(); + + /** + * Sets display orientation. + * + * @pre Session is ongoing + * @return Sets display orientation + * @leave KErrNotReady if precondition is not fullfilled + */ + void SetOrientationL( TDisplayOrientation aOrientation ); + + /** + * Permission to draw on screen device. + * + * @pre Session is ongoing + */ + void EnableDisplayL( TBool aEnable ); + + /** + * Implements virtual from MMusEngDisplayHandler + * + * @pre Session is ongoing + */ + TBool IsDisplayEnabled(); + + /** + * Implements virtual from MMusEngDisplayHandler + * + * @pre Session is ongoing + */ + TBool IsDisplayActive(); + + + public: // From MMusEngAudioRoutingObserver + + void AudioRoutingChanged(); + + + public: // From MLcSession + + virtual void UpdateLcSessionL(); + + virtual TLcSessionState LcSessionState() const; + + void SetLcSessionObserver( MLcSessionObserver* aObserver ); + + void SetLcUiProvider( MLcUiProvider* aUiProvider ); + + virtual MLcVideoPlayer* RemoteVideoPlayer(); + + virtual MLcVideoPlayer* LocalVideoPlayer(); + + virtual const TDesC& LocalDisplayName(); + + virtual const TDesC& RemoteDisplayName(); + + TInt SetParameter( TInt aId, TInt aValue ); + + TInt ParameterValue( TInt aId ); + + TBool IsBackgroundStartup(); + + TInt SetForegroundStatus( TBool aIsForeground ); + + const TDesC& RemoteDetails(); + + TBool SendDialTone( TChar aKey); + + public: // From MLcAudioControl + + TBool IsLcAudioMutedL(); + + void MuteLcAudioL( TBool aMute ); + + TBool IsLcMicMutedL(); + + void MuteLcMicL( TBool aMute ); + + TBool IsEnablingLcLoudspeakerAllowed(); + + void EnableLcLoudspeakerL( TBool aEnabled ); + + TBool IsLcLoudspeakerEnabled(); + + TInt LcVolumeL(); + + void SetLcVolumeL( TInt aValue ); + + void IncreaseLcVolumeL(); + + void DecreaseLcVolumeL(); + + + protected: // CONSTRUCTORS + + /** + * Constructor + * + */ + CMusEngMceSession(); + + /** + * Second-phase constructor + */ + void ConstructL(); + + protected: // Data + + /** + * Drawing area rect. + */ + TRect iRect; + + /** + * ETrue if operator specific behavior is expected + */ + TBool iOperatorVariant; + + /** + * Session state for MLcSession + */ + MLcSession::TLcSessionState iLcSessionState; + + TMusEngCameraHandler iCameraHandler; + + CMusEngLiveVideoPlayer* iLiveVideoPlayer; + CMusEngRemoteVideoPlayer* iRemoteVideoPlayer; + TRect iSetRemoteRect; + TRect iSetLocalRect; + CSVPTimer* iTimer; + TLcSessionState lLcSessionState; + HBufC* iRemoteAddress; + + private: // Data + + /** + * The session observer, if present. + */ + MLcSessionObserver* iLcSessionObserver; + + /** + * The UI provider, if present. + */ + MLcUiProvider* iLcUiProvider; + + /** + * Value indicates whether session was started in background mode. + * (see IsBackgroundStartup()). Once sending of video started, + * iBackground is set to EFalse + */ + TBool iBackground; + + + }; + +#endif // MUSENGMCESESSION_H diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/dummymusengineplugin/inc/musengremotevideoplayer.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/dummymusengineplugin/inc/musengremotevideoplayer.h Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,58 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + + +#ifndef MUSHENGREMOTEVIDEOPLAYER_H +#define MUSHENGREMOTEVIDEOPLAYER_H + +// INCLUDES +#include +#include "musengvideoplayerbase.h" + +// FORWARD DECLARATIONS +class CMceSession; +class MLcWindow; +class MLcAudioControl; + +// CLASS DECLARATION +class CMusEngRemoteVideoPlayer : public CMusEngVideoPlayerBase + { + public: // Constructors and destructor + + static CMusEngRemoteVideoPlayer* NewL( MMusEngDisplayHandler& aDisplayHandler, + MLcAudioControl& aLcAudioControl ); + + ~CMusEngRemoteVideoPlayer(); + + + public: // from CMusEngVideoPlayerBase + + TLcVideoPlayerState LcVideoPlayerState() const; + + TBool LcIsPlayingL(); + + private: // Constructors + + CMusEngRemoteVideoPlayer( MMusEngDisplayHandler& aDisplayHandler, + MLcAudioControl& aLcAudioControl ); + void ConstructL(); + + private: // Data + + }; + +#endif // MUSHENGREMOTEVIDEOPLAYER_H diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/dummymusengineplugin/inc/musengsessionmanager.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/dummymusengineplugin/inc/musengsessionmanager.h Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,61 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + +#ifndef CMUSENGSESSIONMANAGER_H +#define CMUSENGSESSIONMANAGER_H + +// INCLUDES +#include "lcengine.h" +#include "mccdatareceiverobserver.h" + +// FORWARD DECLARATIONS +class MLcSession; +class CMusEngMceSession; +class MLcUiProvider; +class CMccDataReceiver; +class CMccDataSender; + +class CMusEngSessionManager : public CLcEngine, public MMccDataReceiverObserver + { + public: + + static CMusEngSessionManager* NewL(); + ~CMusEngSessionManager(); + + void DataReceived( const TDataMessage& aData ); + + public: // From CLcEngine + + MLcSession& Session(); + + private: // Constructors + + CMusEngSessionManager(); + void ConstructL(); + + private: // Data + + CMusEngMceSession* iSession; + + CMccDataReceiver* iMsgReceiver; + CMccDataSender* iMsgSender; + + }; + +#endif // CMUSENGSESSIONMANAGER_H + +// end of file diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/dummymusengineplugin/inc/musengtwowayrecvsession.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/dummymusengineplugin/inc/musengtwowayrecvsession.h Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,141 @@ +/* +* 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: +* +*/ + + +#ifndef MUSHENGTWOWAYRECVSESSION_H +#define MUSHENGTWOWAYRECVSESSION_H + +// USER +#include "musengreceivesession.h" +#include "musunittesting.h" +#include "mussettings.h" +#include "musengcamerahandler.h" + +// SYSTEM +#include + +// FORWARD DECLARATIONS +class CMceDisplaySink; +class CMceStreamBundle; +class CMusEngLiveVideoPlayer; + + +class CMusEngTwoWayRecvSession : public CMusEngReceiveSession + { + MUS_UNITTEST( UT_CMusEngTwoWayRecvSession ) + + + public: + /** + * Creates new MultimediaSharing two-way receive session. + * @return CMusEngTwoWayRecvSession* New instanse of specified class + */ + static CMusEngTwoWayRecvSession* NewL(); + + public: + + /** + * Destructor + */ + ~CMusEngTwoWayRecvSession(); + + public: + + void EnableDisplayL( TBool aEnable ); + + CMusEngMceSession::TDisplayOrientation OrientationL(); + + void SetOrientationL( TDisplayOrientation aOrientation ); + + public: + + /** + * Sets both remote (receiving video) and local (viewfinder) rects. + * + */ + void SetRectsL( const TRect& aRemoteRect, + const TRect& aLocalRect ); + + /** + * Gets camera handler (can be used for zooming etc.) + */ + TMusEngCameraHandler& Camera(); + + public: // from MLcSession + + MLcVideoPlayer* LocalVideoPlayer(); + + protected: // From CMusEngReceiveSession + + /** + * Sets local rect (viewfinder). + * + */ + void SetSecondaryRectL( const TRect& aSecondaryRect ); + + /** + * Gets local rect (viewfinder). + * + */ + TRect SecondaryRect() const; + + void CompleteSessionStructureL(); + + void RectChangedL(); + + private: + + /** + * Constructor + */ + CMusEngTwoWayRecvSession(); + + /** + * Second-phase constructor + */ + void ConstructL(); + + private: + + void CompleteSessionStructureAudioPartL( + const RPointerArray& aStreams, + CMceStreamBundle& aLocalBundle, + CMceMediaStream* aVideoInStream, + CMceMediaStream* aVideoOutStream ); + + void CompleteSessionStructureInStreamL( CMceMediaStream& aVideoInStream, + CMceStreamBundle& aLocalBundle ); + + void CompleteSessionStructureOutStreamL( CMceMediaStream& aVideoOutStream ); + + + private: + + TRect iLocalRect; + + TMusEngCameraHandler iCameraHandler; + + /// The live video player implementing MLcVideoPlayer + CMusEngLiveVideoPlayer* iLiveVideoPlayer; + + TRect iSetRemoteRect; + TRect iSetLocalRect; + + }; + +#endif + diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/dummymusengineplugin/inc/musengtwowaysession.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/dummymusengineplugin/inc/musengtwowaysession.h Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,87 @@ +/* +* 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: +* +*/ + + +#ifndef MUSHENGTWOWAYSESSION_H +#define MUSHENGTWOWAYSESSION_H + +// USER +#include "musengmcesession.h" + +// SYSTEM +#include + +// FORWARD DECLARATIONS +class MMusEngLiveSessionObserver; +class CMceDisplaySink; +class MMusEngTwoWaySessionObserver; +class CMusEngRemoteVideoPlayer; + + +class CMusEngTwoWaySession : public CMusEngMceSession + { + public: + /** + * Creates new MultimediaSharing Live session. + * @return CMusEngTwoWaySession* New instanse of specified class + */ + static CMusEngTwoWaySession* NewL(); + + + public: + + /** + * Destructor + */ + ~CMusEngTwoWaySession(); + + public: + + void EnableDisplayL( TBool aEnable ); + + void SetOrientationL( MMusEngDisplayHandler::TDisplayOrientation aOrientation ); + + void EstablishLcSessionL(); + + void TerminateLcSessionL(); + + MLcVideoPlayer* RemoteVideoPlayer(); + public: + + /** + * Sets both remote (receiving video) and local (viewfinder) rects. + * + */ + void SetRectsL( const TRect& aRemoteRect, + const TRect& aLocalRect ); + + private: + + /** + * Constructor + */ + CMusEngTwoWaySession(); + + /** + * Second-phase constructor + */ + void ConstructL(); + + }; + +#endif + diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/dummymusengineplugin/inc/musengvideoplayerbase.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/dummymusengineplugin/inc/musengvideoplayerbase.h Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,87 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + + +#ifndef MUSHENGVIDEOPLAYERBASE_H +#define MUSHENGVIDEOPLAYERBASE_H + +// INCLUDES +#include +#include "lcvideoplayer.h" +#include "lcwindow.h" + +// FORWARD DECLARATIONS +class TMusEngCameraHandler; +class MMusEngDisplayHandler; + +// CLASS DECLARATION +class CMusEngVideoPlayerBase : + public CBase, public MLcVideoPlayer, public MLcWindow + { + public: // Constructors and destructor + + ~CMusEngVideoPlayerBase(); + + public: // From MLcVideoPlayer + + virtual void LcPlayL(MLcVideoPlayer::TLcVideoPlayerSource aSource); + + + virtual void LcPauseL(); + + MLcWindow* LcWindow(); + + virtual MLcCameraControl* LcCameraControl(); + + virtual MLcSourceFileControl* LcSourceFileControl(); + + virtual MLcDestinationFileControl* LcDestinationFileControl(); + + MLcAudioControl* LcAudioControl(); + + virtual MLcZoomControl* LcZoomControl(); + + virtual MLcBrightnessControl* LcBrightnessControl(); + + public: // from MLcWindow + + void EnableLcWindowL( TBool aEnable ); + + TBool IsLcWindowEnabled(); + + void SetLcWindowRectL( TRect aRect ); + + TRect LcWindowRect(); + + void SetLcWindowOrientationL( + TLcWindowOrientation aOrientation ); + + TLcWindowOrientation LcWindowOrientationL(); + + protected: // Constructors + + CMusEngVideoPlayerBase( + MMusEngDisplayHandler& aDisplayHandler, + MLcAudioControl& aLcAudioControl ); + + protected: // Data + + MMusEngDisplayHandler& iDisplayHandler; + MLcAudioControl& iLcAudioControl; + }; + +#endif // MUSHENGVIDEOPLAYERBASE_H diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/dummymusengineplugin/inc/svptimer.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/dummymusengineplugin/inc/svptimer.h Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,112 @@ +/* +* Copyright (c) 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: Timer services for SVP +* +*/ + + + +#ifndef SVPTIMER_H +#define SVPTIMER_H + +#include + +class MSVPTimerObserver; + +/** + * SVP timer + * + * Provides timer service for SVP + * + * @lib + * @since S60 3.2 + */ +class CSVPTimer : public CTimer + { + +public: + + /** + * Two-phased constructor. + */ + static CSVPTimer* NewL( MSVPTimerObserver& aObserver, + TInt aTimerId ); + + /** + * Destructor. + */ + virtual ~CSVPTimer(); + +public: // new methods + + /** + * Sets the timer to be fired after given number of milliseconds. + * @since Series 60 3.2 + * @param aMilliSeconds Time in milliseconds + * @return + */ + void SetTime( TInt aMilliSeconds ); + + /** + * Stops the timer. + * @since Series 60 3.2 + * @return + */ + void Stop(); + + /** + * Returns the Timer ID + * @since Series 60 3.2 + * @return TInt The timer ID. + */ + TInt Id() const; + +public: // methods from base classes + + /** + * From CActive Called when an aychronic request is completed. + * @since Series 60 3.0 + * @param None + * @return None + */ + void RunL(); + +private: + + /** + * C++ default constructor. + */ + CSVPTimer( MSVPTimerObserver& aObserver, TInt aTimerId ); + + /** + * By default Symbian 2nd phase constructor is private. + */ + void ConstructL(); + +private: // data + + /** + * Reference to the observer. + */ + MSVPTimerObserver& iObserver; + + /** + * The timer ID, given to observer when the timer fires. + * Timers can be identifies with this ID. + */ + TInt iId; + + }; + +#endif // SVPTIMER_H \ No newline at end of file diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/dummymusengineplugin/inc/svptimerobserver.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/dummymusengineplugin/inc/svptimerobserver.h Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,50 @@ +/* +* Copyright (c) 2006 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: Observer for SVP timer +* +*/ + + +#ifndef SVPTIMEROBSERVER_H +#define SVPTIMEROBSERVER_H + +#include + +/** + * SVP timer observer + * + * Observer for SVP timer + * + * @lib + * @since S60 3.2 + */ +class MSVPTimerObserver + { + +public: // New functions + + /** + * Notifies, that the previously set timer has now expired. + * Implemented by the class using the timer. + * @since Series 60 3.2 + * @param TInt aTimerId The ID of the timer. Observer can identify + * timers from each other with this ID. + * @return + */ + virtual void TimedOut( TInt aTimerId ) = 0; + + + }; + +#endif // SVPTIMEROBSERVER_H diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/dummymusengineplugin/install/lcui_update_udeb.pkg --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/dummymusengineplugin/install/lcui_update_udeb.pkg Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,46 @@ +; +; Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +; All rights reserved. +; This component and the accompanying materials are made available +; under the terms of "Eclipse Public License v1.0" +; which accompanies this distribution, and is available +; at the URL "http://www.eclipse.org/legal/epl-v10.html". +; +; Initial Contributors: +; Nokia Corporation - initial contribution. +; +; Contributors: +; +; Description: +; +; A package file for creating an installation file for Multimediasharing +; which updates Multimediasharing binaries from ROM (eclipsing) + +; Supported languages +&EN + +; Header +#{"MultimediaSharing"},(0x10282491),1,0,0,TYPE=PU + +; Localised Vendor name +%{"Symbian"} + +; Unique Vendor name +:"Symbian" + +; ----------------------------------------------------------------------------------- + +;Multimediasharing binaries + +; User interface DOCMLs +"\epoc32\data\z\data\others\lcidleview.docml"-"!:\data\others\lcidleview.docml" +"\epoc32\data\z\data\others\lcreceiveview.docml"-"!:\data\others\lcreceiveview.docml" +"\epoc32\data\z\data\others\lcsendview.docml"-"!:\data\others\lcsendview.docml" +"\epoc32\data\z\data\others\lctwowayview.docml"-"!:\data\others\lctwowayview.docml" +"\epoc32\data\z\data\others\lcvtview.docml"-"!:\data\others\lcvtview.docml" +"\epoc32\data\z\data\others\lcreceiveonlyview.docml"-"!:\data\others\lcreceiveonlyview.docml" + +; Engine +;"\epoc32\release\armv5\udeb\musengineplugin.dll"-"!:\sys\bin\musengineplugin.dll" +;"\epoc32\data\z\resource\plugins\musengineplugin.rsc"-"!:\resource\plugins\musengineplugin.rsc" + diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/dummymusengineplugin/install/lcui_update_urel.pkg --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/dummymusengineplugin/install/lcui_update_urel.pkg Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,46 @@ +; +; Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +; All rights reserved. +; This component and the accompanying materials are made available +; under the terms of "Eclipse Public License v1.0" +; which accompanies this distribution, and is available +; at the URL "http://www.eclipse.org/legal/epl-v10.html". +; +; Initial Contributors: +; Nokia Corporation - initial contribution. +; +; Contributors: +; +; Description: +; +; A package file for creating an installation file for Multimediasharing +; which updates Multimediasharing binaries from ROM (eclipsing) + +; Supported languages +&EN + +; Header +#{"MultimediaSharing"},(0x10282491),1,0,0,TYPE=PU + +; Localised Vendor name +%{"Symbian"} + +; Unique Vendor name +:"Symbian" + +; ----------------------------------------------------------------------------------- + +;Multimediasharing binaries + +; User interface XMLs +"\epoc32\data\z\data\others\lcidleview.docml"-"!:\data\others\lcidleview.docml" +"\epoc32\data\z\data\others\lcreceiveview.docml"-"!:\data\others\lcreceiveview.docml" +"\epoc32\data\z\data\others\lcsendview.docml"-"!:\data\others\lcsendview.docml" +"\epoc32\data\z\data\others\lctwowayview.docml"-"!:\data\others\lctwowayview.docml" +"\epoc32\data\z\data\others\lcvtview.docml"-"!:\data\others\lcvtview.docml" +"\epoc32\data\z\data\others\lcreceiveonlyview.docml"-"!:\data\others\lcreceiveonlyview.docml" + +; Engine +;"\epoc32\release\armv5\urel\musengineplugin.dll"-"!:\sys\bin\musengineplugin.dll" +;"\epoc32\data\z\resource\plugins\musengineplugin.rsc"-"!:\resource\plugins\musengineplugin.rsc" + diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/dummymusengineplugin/install/sis_update_udeb.bat --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/dummymusengineplugin/install/sis_update_udeb.bat Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,18 @@ +rem +rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +rem All rights reserved. +rem This component and the accompanying materials are made available +rem under the terms of "Eclipse Public License v1.0" +rem which accompanies this distribution, and is available +rem at the URL "http://www.eclipse.org/legal/epl-v10.html". +rem +rem Initial Contributors: +rem Nokia Corporation - initial contribution. +rem +rem Contributors: +rem +rem Description: +rem + +makesis lcui_update_udeb.pkg udeb_lcui_update.sis + diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/dummymusengineplugin/install/sis_update_urel.bat --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/dummymusengineplugin/install/sis_update_urel.bat Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,17 @@ +rem +rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +rem All rights reserved. +rem This component and the accompanying materials are made available +rem under the terms of "Eclipse Public License v1.0" +rem which accompanies this distribution, and is available +rem at the URL "http://www.eclipse.org/legal/epl-v10.html". +rem +rem Initial Contributors: +rem Nokia Corporation - initial contribution. +rem +rem Contributors: +rem +rem Description: +rem + +makesis lcui_update_urel.pkg urel_lcui_update.sis diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/dummymusengineplugin/src/mccdatareceiver.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/dummymusengineplugin/src/mccdatareceiver.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,107 @@ +/* +* Copyright (c) 2006 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: +* +*/ + + +// INCLUDE FILES +#include "mccdatareceiver.h" + + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CMccDataReceiver::CMccDataReceiver +// ----------------------------------------------------------------------------- +// +CMccDataReceiver::CMccDataReceiver( MMccDataReceiverObserver& aObserver ) + : CActive( EPriorityStandard ), iObserver( &aObserver ) + { + CActiveScheduler::Add(this); + } + +// ----------------------------------------------------------------------------- +// CMccDataReceiver::ConstructL +// ----------------------------------------------------------------------------- +// +void CMccDataReceiver::ConstructL() + { + + TInt err = iMsgQueue.CreateGlobal(_L("IP-VT-Queue2"), 5, EOwnerProcess ); + if ( err ) + { + User::LeaveIfError( iMsgQueue.OpenGlobal(_L("IP-VT-Queue2"))); + } + + iMsgQueue.ReceiveBlocking( iInitData ); + + iMsgQueue.NotifyDataAvailable( iStatus ); + SetActive(); + } + +// ----------------------------------------------------------------------------- +// CMccDataReceiver::NewL +// ----------------------------------------------------------------------------- +// +CMccDataReceiver* CMccDataReceiver::NewL( MMccDataReceiverObserver& aObserver ) + { + CMccDataReceiver* self = + new ( ELeave ) CMccDataReceiver( aObserver ); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + return self; + } + +// ----------------------------------------------------------------------------- +// CMccDataReceiver::~CMccDataReceiver +// ----------------------------------------------------------------------------- +// +CMccDataReceiver::~CMccDataReceiver() + { + Cancel(); + iMsgQueue.Close(); + } + +// ----------------------------------------------------------------------------- +// CMccDataReceiver::DoCancel +// ----------------------------------------------------------------------------- +// +void CMccDataReceiver::DoCancel() + { + iMsgQueue.CancelDataAvailable(); + } + +// ----------------------------------------------------------------------------- +// CMccDataReceiver::RunL +// ----------------------------------------------------------------------------- +// +void CMccDataReceiver::RunL() + { + TDataMessage buffer; + iMsgQueue.Receive( buffer ); + iObserver->DataReceived( buffer ); + iMsgQueue.NotifyDataAvailable( iStatus ); + SetActive(); + } + +// ----------------------------------------------------------------------------- +// CMccDataReceiver::RunError +// ----------------------------------------------------------------------------- +// +TInt CMccDataReceiver::RunError(TInt /*aError*/) + { + return KErrNone; + } diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/dummymusengineplugin/src/mccdatasender.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/dummymusengineplugin/src/mccdatasender.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,122 @@ +/* +* Copyright (c) 2006 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: +* +*/ + + +// INCLUDE FILES +#include "mccdatasender.h" + + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CMccDataSender::CMccDataSender +// ----------------------------------------------------------------------------- +// +CMccDataSender::CMccDataSender( ) + : CActive( EPriorityStandard ) + { + CActiveScheduler::Add(this); + } + +// ----------------------------------------------------------------------------- +// CMccDataSender::ConstructL +// ----------------------------------------------------------------------------- +// +void CMccDataSender::ConstructL() + { + TInt err = iMsgQueue.CreateGlobal(_L("IP-VT-Queue1"), 5, EOwnerProcess ); + if ( err ) + { + User::LeaveIfError( iMsgQueue.OpenGlobal(_L("IP-VT-Queue1"))); + } + } + +// ----------------------------------------------------------------------------- +// CMccDataSender::NewL +// ----------------------------------------------------------------------------- +// +CMccDataSender* CMccDataSender::NewL( ) + { + CMccDataSender* self = + new ( ELeave ) CMccDataSender(); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + return self; + } + +// ----------------------------------------------------------------------------- +// CMccDataSender::Send +// ----------------------------------------------------------------------------- +// +void CMccDataSender::Send( const TDataMessage& aData ) +{ + TInt err = iMsgQueue.Send( aData ); + + if ( err == KErrOverflow ) + { + if ( !IsActive() ) + { + iBuffer = aData; + iMsgQueue.NotifySpaceAvailable( iStatus ); + SetActive(); + } + else + { + // TODO + // BUFFER OR DROP + } + } + } + +// ----------------------------------------------------------------------------- +// CMccDataSender::~CMccDataSender +// ----------------------------------------------------------------------------- +// +CMccDataSender::~CMccDataSender() + { + Cancel(); + iMsgQueue.Close(); + } + +// ----------------------------------------------------------------------------- +// CMccDataSender::DoCancel +// ----------------------------------------------------------------------------- +// +void CMccDataSender::DoCancel() + { + iMsgQueue.CancelSpaceAvailable(); + } + +// ----------------------------------------------------------------------------- +// CMccDataSender::RunL +// ----------------------------------------------------------------------------- +// +void CMccDataSender::RunL() + { + iMsgQueue.Send( iBuffer ); + iBuffer.iDataId = EUninitialized; + } + +// ----------------------------------------------------------------------------- +// CMccDataSender::RunError +// ----------------------------------------------------------------------------- +// +TInt CMccDataSender::RunError(TInt /*aError*/) + { + return KErrNone; + } diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/dummymusengineplugin/src/musengcamerahandler.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/dummymusengineplugin/src/musengcamerahandler.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,227 @@ +/* +* 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: +* +*/ + + +// USER +#include "musengcamerahandler.h" +#include "musenglogger.h" + + +// SYSTEM +#include + +const TInt KMaxBrightness = 100; +const TInt KMinBrightness = -100; +const TInt KBrightnessStepSize = 10; + + +//Number of big and small zoom steps on Zoom scale +const TInt KZoomBigStepCount = 15; +const TInt KZoomSmallStepCount = KZoomBigStepCount*2; +const TInt KZoomStepMinSize = 1; + +const TInt64 KZoomFasterTime = 333333; // 1/3 second + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +TMusEngCameraHandler::TMusEngCameraHandler() : + iDefaultBrightness( 0 ), + iZoomInTime(0), + iZoomOutTime(0), + iSmallZoomStep( KZoomStepMinSize ), + iBigZoomStep( KZoomStepMinSize ), + iCurrentCamera( TMusEngCameraHandler::ECameraNotAvailable ) + { + } + +// ----------------------------------------------------------------------------- +// From MLcCameraControl +// ----------------------------------------------------------------------------- +// +TInt TMusEngCameraHandler::LcCameraCountL() + { + MUS_LOG( "mus: [ENGINE] -> TMusEngCameraHandler::LcCameraCountL()" ) + + return 2; + } + +// ----------------------------------------------------------------------------- +// From MLcCameraControl +// ----------------------------------------------------------------------------- +// +TInt TMusEngCameraHandler::CurrentLcCameraIndex() + { + return iCurrentCamera; + } + +// ----------------------------------------------------------------------------- +// From MLcCameraControl +// ----------------------------------------------------------------------------- +// +void TMusEngCameraHandler::ToggleLcCameraL() + { + MUS_LOG( "mus: [ENGINE] -> TMusEngCameraHandler::ToggleLcCamera()" ) + } + +// ----------------------------------------------------------------------------- +// From MLcBrightnessControl +// ----------------------------------------------------------------------------- +// +TInt TMusEngCameraHandler::MinLcBrightnessL() + { + MUS_LOG( "mus: [ENGINE] -> TMusEngCameraHandler::MinLcBrightnessL()" ) + + // minimum brightness is not in camera info, but a constant + + MUS_LOG1( "mus: [ENGINE] <- TMusEngCameraHandler::MinLcBrightnessL(): %d", + KMinBrightness ) + + return KMinBrightness; + } + +// ----------------------------------------------------------------------------- +// From MLcBrightnessControl +// ----------------------------------------------------------------------------- +// +TInt TMusEngCameraHandler::MaxLcBrightnessL() + { + MUS_LOG( "mus: [ENGINE] -> TMusEngCameraHandler::MaxLcBrightnessL()" ) + + // maximum brightness is not in camera info, but a constant + + MUS_LOG1( "mus: [ENGINE] <- TMusEngCameraHandler::MaxLcBrightnessL(): %d", + KMaxBrightness ) + + return KMaxBrightness; + } + +// ----------------------------------------------------------------------------- +// From MLcBrightnessControl +// ----------------------------------------------------------------------------- +// +TInt TMusEngCameraHandler::LcBrightnessL() + { + MUS_LOG( "mus: [ENGINE] -> TMusEngCameraHandler::LcBrightnessL()" ) + + return 5; + } + +// ----------------------------------------------------------------------------- +// From MLcBrightnessControl +// ----------------------------------------------------------------------------- +// +void TMusEngCameraHandler::SetLcBrightnessL( TInt aValue ) + { + MUS_LOG1( "mus: [ENGINE] -> TMusEngCameraHandler::SetLcBrightnessL( %d )", + aValue ) + + + MUS_LOG( "mus: [ENGINE] <- TMusEngCameraHandler::SetLcBrightnessL()" ) + } + +// ----------------------------------------------------------------------------- +// From MLcBrightnessControl +// ----------------------------------------------------------------------------- +// +void TMusEngCameraHandler::IncreaseLcBrightnessL() + { + MUS_LOG( "mus: [ENGINE] -> TMusEngCameraHandler::IncreaseLcBrightnessL()" ) + + MUS_LOG( "mus: [ENGINE] <- TMusEngCameraHandler::IncreaseLcBrightnessL()" ) + } + +// ----------------------------------------------------------------------------- +// From MLcBrightnessControl +// ----------------------------------------------------------------------------- +// +void TMusEngCameraHandler::DecreaseLcBrightnessL() + { + MUS_LOG( "mus: [ENGINE] -> TMusEngCameraHandler::DecreaseLcBrightnessL()" ) + + MUS_LOG( "mus: [ENGINE] <- TMusEngCameraHandler::DecreaseLcBrightnessL()" ) + } + +// ----------------------------------------------------------------------------- +// From MLcZoomControl +// ----------------------------------------------------------------------------- +// +TInt TMusEngCameraHandler::MinLcZoomL() + { + MUS_LOG( "mus: [ENGINE] -> TMusEngCameraHandler::MinLcZoomL()" ) + + return 1; + } + +// ----------------------------------------------------------------------------- +// From MLcZoomControl +// ----------------------------------------------------------------------------- +// +TInt TMusEngCameraHandler::MaxLcZoomL() + { + MUS_LOG( "mus: [ENGINE] -> TMusEngCameraHandler::MaxLcZoomL()" ) + + return 10; + } + +// ----------------------------------------------------------------------------- +// From MLcZoomControl +// ----------------------------------------------------------------------------- +// +TInt TMusEngCameraHandler::LcZoomValueL() + { + MUS_LOG( "mus: [ENGINE] -> TMusEngCameraHandler::LcZoomValueL" ) + + + return 5; + } + +// ----------------------------------------------------------------------------- +// From MLcZoomControl +// ----------------------------------------------------------------------------- +// +void TMusEngCameraHandler::SetLcZoomValueL( TInt aValue ) + { + MUS_LOG1( "mus: [ENGINE] -> TMusEngCameraHandler::SetLcZoomValueL( %d )", + aValue ) + + MUS_LOG( "mus: [ENGINE] <- MusEngCameraHandler::SetLcZoomValueL()" ) + } + +// ----------------------------------------------------------------------------- +// From MLcZoomControl +// ----------------------------------------------------------------------------- +// +void TMusEngCameraHandler::LcZoomInL() + { + MUS_LOG( "mus: [ENGINE] -> TMusEngCameraHandler::LcZoomInL()" ) + + MUS_LOG( "mus: [ENGINE] <- TMusEngCameraHandler::LcZoomInL()" ) + } + +// ----------------------------------------------------------------------------- +// From MLcZoomControl +// ----------------------------------------------------------------------------- +// +void TMusEngCameraHandler::LcZoomOutL() + { + MUS_LOG( "mus: [ENGINE] -> TMusEngCameraHandler::LcZoomOutL()" ) + + MUS_LOG( "mus: [ENGINE] <- TMusEngCameraHandler::LcZoomOutL()" ) + } diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/dummymusengineplugin/src/musengclipvideoplayer.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/dummymusengineplugin/src/musengclipvideoplayer.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,535 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + +// USER +#include "musengclipvideoplayer.h" +#include "musengcamerahandler.h" +#include "musengmceutils.h" +#include "musengdisplayhandler.h" +#include "muslogger.h" + +// SYSTEM +#include +#include +#include +#include + +// CONSTANTS +const TInt64 KMicroSecondsInOneSecond = 1000000; +const TInt KFastWindingFactor = 4; + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +CMusEngClipVideoPlayer* CMusEngClipVideoPlayer::NewL( + MMusEngDisplayHandler& aDisplayHandler, + MLcAudioControl& aLcAudioControl ) + { + return new( ELeave )CMusEngClipVideoPlayer( + aDisplayHandler, aLcAudioControl ); + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +CMusEngClipVideoPlayer::CMusEngClipVideoPlayer( + MMusEngDisplayHandler& aDisplayHandler, + MLcAudioControl& aLcAudioControl ) : + CMusEngLocalVideoPlayer( aDisplayHandler, aLcAudioControl ) + { + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +CMusEngClipVideoPlayer::~CMusEngClipVideoPlayer() + { + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +TBool CMusEngClipVideoPlayer::HasClipEnded() + { + MUS_LOG( "mus: [ENGINE] -> CMusEngClipVideoPlayer::HasClipEnded" ) + + TBool hasClipEnded( EFalse ); + + if ( iMceSession ) + { + CMceVideoStream* videoOut = NULL; + + TRAPD( err, + videoOut = MusEngMceUtils::GetVideoOutStreamL( *iMceSession ) ); + if ( err != KErrNone ) + { + MUS_LOG1( "mus: [ENGINE] Error in GetVideoOutStreamL %d", err ) + return EFalse; + } + + CMceFileSource* filesource = NULL; + TRAP( err, filesource = MusEngMceUtils::GetFileSourceL( *iMceSession ) ) + + if ( err == KErrNone ) + { + TTimeIntervalMicroSeconds position; + TTimeIntervalMicroSeconds duration; + TRAP( err, position = filesource->PositionL() ); + TRAPD( err2, duration = filesource->DurationL() ); + if ( err != KErrNone || err2 != KErrNone ) + { + return EFalse; + } + + MUS_LOG2( "mus: [ENGINE] position = %Ld, duration = %Ld", + position.Int64(), duration.Int64() ) + + hasClipEnded = + ( position.Int64() == 0 && + !filesource->IsEnabled() && + videoOut->State() == CMceMediaStream::EDisabled ); + } + } + + if ( hasClipEnded ) + { + iDelayFileEndingPos = 0; + } + + MUS_LOG( "mus: [ENGINE] <- CMusEngClipVideoPlayer::HasClipEnded" ) + + return hasClipEnded; + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusEngClipVideoPlayer::SetBufferingPeriod( + const TTimeIntervalMicroSeconds& aPeriod ) + { + iBufferingPeriod = aPeriod; + } + +// ----------------------------------------------------------------------------- +// From MLcVideoPlayer +// ----------------------------------------------------------------------------- +// +TBool CMusEngClipVideoPlayer::LcIsPlayingL() + { + __ASSERT_ALWAYS( iMceSession, User::Leave( KErrNotReady ) ); + return ( MusEngMceUtils::GetFileSourceL( *iMceSession )->IsEnabled() ); + } + +// ----------------------------------------------------------------------------- +// From MLcVideoPlayer +// ----------------------------------------------------------------------------- +// +void CMusEngClipVideoPlayer::LcPlayL() + { + MUS_LOG( "mus: [ENGINE] -> CMusEngClipVideoPlayer::LcPlayL" ) + + __ASSERT_ALWAYS( iMceSession, User::Leave( KErrNotReady ) ); + CMceFileSource* file = MusEngMceUtils::GetFileSourceL( *iMceSession ); + + if ( !file->IsEnabled() ) + { + file->EnableL(); + } + + MUS_LOG( "mus: [ENGINE] <- CMusEngClipVideoPlayer::LcPlayL" ) + } + +// ----------------------------------------------------------------------------- +// From MLcVideoPlayer +// ----------------------------------------------------------------------------- +// +void CMusEngClipVideoPlayer::LcPauseL() + { + MUS_LOG( "mus: [ENGINE] -> CMusEngClipVideoPlayer::LcPauseL" ) + + __ASSERT_ALWAYS( iMceSession, User::Leave( KErrNotReady ) ); + CMceFileSource* file = MusEngMceUtils::GetFileSourceL( *iMceSession ); + + if ( file->IsEnabled() ) + { + file->DisableL(); + } + + MUS_LOG( "mus: [ENGINE] <- CMusEngClipVideoPlayer::LcPauseL" ) + } + +// ----------------------------------------------------------------------------- +// From MLcVideoPlayer +// ----------------------------------------------------------------------------- +// +MLcSourceFileControl* CMusEngClipVideoPlayer::LcSourceFileControl() + { + return this; + } + +// ----------------------------------------------------------------------------- +// From MLcSourceFileControl +// ----------------------------------------------------------------------------- +// +void CMusEngClipVideoPlayer::SetLcFileNameL( const TFileName& aFileName ) + { + MUS_LOG( "mus: [ENGINE] -> CMusEngClipVideoPlayer::SetLcFileNameL" ) + + __ASSERT_ALWAYS( !IsProtectedFileL( aFileName ), + User::Leave( KErrPermissionDenied ) ); + + if ( iMceSession ) + { + CMceFileSource* file = MusEngMceUtils::GetFileSourceL( *iMceSession ); + file->UpdateL( aFileName ); + } + + iFileName = aFileName; + MUS_LOG( "mus: [ENGINE] <- CMusEngClipVideoPlayer::SetLcFileNameL" ) + } + +// ----------------------------------------------------------------------------- +// From MLcSourceFileControl +// ----------------------------------------------------------------------------- +// +TFileName& CMusEngClipVideoPlayer::LcFileName() + { + return iFileName; + } + +// ----------------------------------------------------------------------------- +// From MLcSourceFileControl +// Since MCE does not at the moment support SetFastForwardL function, this +// functionality is implemented by taking a timestamp when forwarding is +// started and calculating a new position when it is ended. +// ----------------------------------------------------------------------------- +// +void CMusEngClipVideoPlayer::LcFastForwardL( TBool aUseFFWD ) + { + MUS_LOG1( "mus: [ENGINE] -> CMusEngClipVideoPlayer::FastForward( %d )", + aUseFFWD ) + + __ASSERT_ALWAYS( iMceSession, User::Leave( KErrNotReady ) ); + + CMceFileSource* file = MusEngMceUtils::GetFileSourceL( *iMceSession ); + + if ( aUseFFWD ) + { + // Ignore if we are already fastforwarding + if ( iFFWDStartTime.Int64() > 0 ) + { + return; + } + + // Stop rewinding if ongoing, else just pause file source + if ( iFRWDStartTime.Int64() > 0 ) + { + LcFastRewindL( EFalse ); + } + else + { + file->DisableL(); + } + + // Get timestamp for starttime + iFFWDStartTime.HomeTime(); + } + else + { + // Leave if we are not fastforwarding + if ( iFFWDStartTime.Int64() == 0 ) + { + User::Leave( KErrAlreadyExists ); + } + + // Set new position + file->SetPositionL( PositionMicroSecondsL( ETrue ) ); + + // Reset timer + iFFWDStartTime = TTime( 0 ); + } + + MUS_LOG( "mus: [ENGINE] <- CMusEngClipVideoPlayer::FastForward" ) + } + +// ----------------------------------------------------------------------------- +// From MLcSourceFileControl +// Since MCE does not at the moment support SetFastRewindL function, this +// functionality is implemented by taking a timestamp when rewinding is +// started and calculating a new position when it is ended. +// ----------------------------------------------------------------------------- +// +void CMusEngClipVideoPlayer::LcFastRewindL( TBool aUseFRWD ) + { + MUS_LOG1( "mus: [ENGINE] -> CMusEngClipVideoPlayer::FastRewind( %d )", + aUseFRWD ) + + __ASSERT_ALWAYS( iMceSession, User::Leave( KErrNotReady ) ); + + CMceFileSource* file = MusEngMceUtils::GetFileSourceL( *iMceSession ); + + if ( aUseFRWD ) + { + // Ignore if we are already fastrewinding + if ( iFRWDStartTime.Int64() > 0 ) + { + return; + } + + // Stop fastforwarding if ongoing, else just pause file source + if ( iFFWDStartTime.Int64() > 0 ) + { + LcFastForwardL( EFalse ); + } + else + { + file->DisableL(); + } + + // Get timestamp for starttime + iFRWDStartTime.HomeTime(); + } + else + { + // Leave if we are not fastrewinding + if ( iFRWDStartTime.Int64() == 0 ) + { + User::Leave( KErrAlreadyExists ); + } + + // Set new position + file->SetPositionL( PositionMicroSecondsL( ETrue ) ); + + // Reset timer + iFRWDStartTime = TTime( 0 ); + } + + MUS_LOG( "mus: [ENGINE] <- CMusEngClipVideoPlayer::FastRewind" ) + } + +// ----------------------------------------------------------------------------- +// From MLcSourceFileControl +// ----------------------------------------------------------------------------- +// +TTimeIntervalSeconds CMusEngClipVideoPlayer::LcFileDurationL() + { + MUS_LOG( "mus: [ENGINE] -> CMusEngClipVideoPlayer::DurationL" ) + + __ASSERT_ALWAYS( iMceSession, User::Leave( KErrNotReady ) ); + + CMceFileSource* file = MusEngMceUtils::GetFileSourceL( *iMceSession ); + + TTimeIntervalMicroSeconds duration = file->DurationL(); + + MUS_LOG( "mus: [ENGINE] <- CMusEngClipVideoPlayer::DurationL" ) + + return TTimeIntervalSeconds( static_cast< TInt >( + duration.Int64() / KMicroSecondsInOneSecond ) ); + } + +// ----------------------------------------------------------------------------- +// From MLcSourceFileControl +// ----------------------------------------------------------------------------- +// +TTimeIntervalSeconds CMusEngClipVideoPlayer::LcFilePositionL() + { + MUS_LOG( "mus: [ENGINE] -> CMusEngClipVideoPlayer::LcFilePositionL" ) + + TTimeIntervalMicroSeconds currentPosition = PositionMicroSecondsL(); + + MUS_LOG1( "mus: [ENGINE] <- CMusEngClipVideoPlayer::LcFilePositionL, %d", + currentPosition.Int64() ) + + return TTimeIntervalSeconds( static_cast< TInt >( + currentPosition.Int64() / KMicroSecondsInOneSecond ) ); + } + +// ----------------------------------------------------------------------------- +// From MLcSourceFileControl +// ----------------------------------------------------------------------------- +// +void CMusEngClipVideoPlayer::SetLcFilePositionL( + const TTimeIntervalSeconds& aPosition ) + { + MUS_LOG1( "mus: [ENGINE] -> CMusEngClipVideoPlayer::SetPositionL ( %d )", + aPosition.Int() ) + + __ASSERT_ALWAYS( iMceSession, User::Leave( KErrNotReady ) ); + + CMceFileSource* file = MusEngMceUtils::GetFileSourceL( *iMceSession ); + + TTimeIntervalMicroSeconds position( + KMicroSecondsInOneSecond * static_cast< TInt64 >( aPosition.Int() ) ); + + if ( position == 0 ) + { + iRewindedToBeginning = ETrue; + } + + file->SetPositionL( position ); + + MUS_LOG( "mus: [ENGINE] <- CMusEngClipVideoPlayer::SetPositionL ()" ) + } + +// ----------------------------------------------------------------------------- +// Check is file DRM protected. +// ----------------------------------------------------------------------------- +// +TBool CMusEngClipVideoPlayer::IsProtectedFileL( const TDesC& aClipFile ) + { + MUS_LOG( "mus: [ENGINE] -> CMusEngClipVideoPlayer::IsProtectedFileL(...)" ) + + TBool isDRMProtected = EFalse; + DRMCommon* drmapi = DRMCommon::NewL(); + CleanupStack::PushL( drmapi ); + + User::LeaveIfError( drmapi->Connect() ); + //Check DRM file protection + User::LeaveIfError( drmapi->IsProtectedFile( aClipFile, isDRMProtected ) ); + drmapi->Disconnect(); + + CleanupStack::PopAndDestroy( drmapi ); + + MUS_LOG( "mus: [ENGINE] <- CMusEngClipVideoPlayer::IsProtectedFileL(...)" ) + return isDRMProtected; + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +TTimeIntervalMicroSeconds CMusEngClipVideoPlayer::PositionMicroSecondsL( + TBool aActualPosition ) + { + __ASSERT_ALWAYS( iMceSession, User::Leave( KErrNotReady ) ); + + CMceFileSource* file = MusEngMceUtils::GetFileSourceL( *iMceSession ); + + TTimeIntervalMicroSeconds position = file->PositionL(); + TTimeIntervalMicroSeconds duration = file->DurationL(); + + TTimeIntervalMicroSeconds calculatedPosition; + + // Adjust position if we are fastforwarding or -rewinding + if ( iFFWDStartTime.Int64() != 0 ) + { + TTime now; + now.HomeTime(); + calculatedPosition = KFastWindingFactor * + now.MicroSecondsFrom( iFFWDStartTime ).Int64() + + position.Int64(); + if ( calculatedPosition > duration ) + { + calculatedPosition = duration; + } + } + else if ( iFRWDStartTime.Int64() != 0 ) + { + TTime now; + now.HomeTime(); + calculatedPosition = position.Int64() - + KFastWindingFactor * + now.MicroSecondsFrom( iFRWDStartTime ).Int64(); + if ( calculatedPosition < 0 ) + { + calculatedPosition = 0; + } + + if ( calculatedPosition == 0 ) + { + iRewindedToBeginning = ETrue; + } + } + else + { + calculatedPosition = position; + } + + if ( !aActualPosition ) + { + calculatedPosition = + GetVideoSinkRelativeFilePos( calculatedPosition, duration ); + } + + return calculatedPosition; + } + +// ----------------------------------------------------------------------------- +// Modifies file position if position has reached end before clip has ended. +// File position is not going in sync with local video playback as playback +// buffers media before starting playing. +// ----------------------------------------------------------------------------- +// +TTimeIntervalMicroSeconds CMusEngClipVideoPlayer::GetVideoSinkRelativeFilePos( + const TTimeIntervalMicroSeconds& aActualPosition, + const TTimeIntervalMicroSeconds& aDuration ) + { + MUS_LOG1( "mus: [ENGINE] PositionMicroSecondsL, pos before mod:%d", + aActualPosition.Int64() ) + + TTimeIntervalMicroSeconds tempCalculatedPosition( aActualPosition ); + + if ( iDelayFileEndingPos != 0 ) + { + iDelayFileEndingPos = aDuration; + tempCalculatedPosition = iDelayFileEndingPos; + } + else + { + // FRWD can go to zero even if clip has not ended, do not modify + // time in such situation. + if ( aActualPosition == 0 && + !HasClipEnded() && + iFRWDStartTime.Int64() == 0 && + !iRewindedToBeginning ) + { + const TInt KMusDelayEndingModifier = 2; + iDelayFileEndingPos = aDuration.Int64() - + iBufferingPeriod.Int64() / KMusDelayEndingModifier; + tempCalculatedPosition = iDelayFileEndingPos; + if ( iPreviousPos > tempCalculatedPosition ) + { + tempCalculatedPosition = iPreviousPos; + } + } + else + { + iDelayFileEndingPos = 0; + } + + if ( iRewindedToBeginning && aActualPosition > 0 ) + { + iRewindedToBeginning = EFalse; + } + + if ( tempCalculatedPosition < 0 ) + { + tempCalculatedPosition = 0; + } + } + + iPreviousPos = tempCalculatedPosition; + + return tempCalculatedPosition; + } + +// End of file diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/dummymusengineplugin/src/musenginepluginentry.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/dummymusengineplugin/src/musenginepluginentry.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,42 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + +#include "musengsessionmanager.h" +#include +#include + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +const TImplementationProxy KMusEnginePluginImplementationTable[] = + { + IMPLEMENTATION_PROXY_ENTRY( 0x20021341, CMusEngSessionManager::NewL ) + }; + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +EXPORT_C const TImplementationProxy* ImplementationGroupProxy( TInt& aTableCount ) + { + aTableCount = sizeof( KMusEnginePluginImplementationTable ) / + sizeof( TImplementationProxy ); + + return KMusEnginePluginImplementationTable; + } diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/dummymusengineplugin/src/musenglivesession.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/dummymusengineplugin/src/musenglivesession.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,149 @@ +/* +* 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: +* +*/ + + +// USER +#include "musenglivesession.h" +#include "lcsessionobserver.h" +#include "musenglogger.h" +#include "musengremotevideoplayer.h" +#include "musenglivevideoplayer.h" +#include "svptimer.h" + + +const TInt KMusEngJitterBufferLength = 51; //Must be bigger than treshold +// Using following value increases treshold buffer to 1 second from +// default 100 ms +const TInt KMusEngJitterBufferTreshold = 50; + +const TUint32 KMusEngTwoWayReceivingActivityTimeout = 5000; // 5 seconds +// 6 seconds keepalive timer, needs to be more than receiving timeout +const TUint8 KMusEngTwoWayRtpKeepAliveTimer = 6; + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +CMusEngLiveSession* CMusEngLiveSession::NewL() + { + CMusEngLiveSession* self = new( ELeave )CMusEngLiveSession(); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + return self; + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +CMusEngLiveSession::~CMusEngLiveSession() + { + MUS_LOG( "mus: [ENGINE] -> CMusEngLiveSession::~CMusEngLiveSession()" ) + + MUS_LOG( "mus: [ENGINE] <- CMusEngLiveSession::~CMusEngLiveSession()" ) + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusEngLiveSession::EnableDisplayL( TBool aEnable ) + { + MUS_LOG1( "mus: [ENGINE] -> CMusEngLiveSession::EnableDisplayL() %d", + aEnable ) + + MUS_LOG( "mus: [ENGINE] <- CMusEngLiveSession::EnableDisplayL()") + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusEngLiveSession::SetOrientationL( TDisplayOrientation aOrientation ) + { + MUS_LOG1( "mus: [ENGINE] -> CMusEngLiveSession::SetOrientationL() %d", + aOrientation ) + + + MUS_LOG( "mus: [ENGINE] <- CMusEngLiveSession::SetOrientationL()" ) + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusEngLiveSession::SetRectsL( + const TRect& aRemoteRect, + const TRect& aLocalRect ) + { + MUS_LOG( "mus: [ENGINE] -> CMusEngLiveSession::SetRectsL()" ) + + MUS_LOG( "mus: [ENGINE] <- CMusEngLiveSession::SetRectsL()" ) + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +CMusEngLiveSession::CMusEngLiveSession() + : CMusEngMceSession() + { + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusEngLiveSession::ConstructL() + { + MUS_LOG( "mus: [ENGINE] -> CMusEngLiveSession::ConstructL()" ) + + CMusEngMceSession::ConstructL(); + + MUS_LOG( "mus: [ENGINE] <- CMusEngLiveSession::ConstructL()" ) + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusEngLiveSession::EstablishLcSessionL() + { + MUS_LOG( "mus: [ENGINE] -> CMusEngLiveSession::EstablishLcSessionL" ) + + iTimer = CSVPTimer::NewL( *this, 1 ); + iTimer->SetTime(2000); + + MUS_LOG( "mus: [ENGINE] <- CMusEngLiveSession::EstablishLcSessionL" ) + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusEngLiveSession::TerminateLcSessionL() + { + MUS_LOG( "mus: [ENGINE] -> CMusEngLiveSession::TerminateLcSessionL" ) + + MUS_LOG( "mus: [ENGINE] <- CMusEngLiveSession::TerminateLcSessionL" ) + } + + +// End of file diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/dummymusengineplugin/src/musenglivevideoplayer.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/dummymusengineplugin/src/musenglivevideoplayer.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,166 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + +// USER +#include "musenglivevideoplayer.h" +#include "musengcamerahandler.h" +#include "musengdisplayhandler.h" +#include "musenglogger.h" + +// SYSTEM +#include + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +CMusEngLiveVideoPlayer* CMusEngLiveVideoPlayer::NewL( + MMusEngDisplayHandler& aDisplayHandler, + TMusEngCameraHandler& aCameraHandler, + MLcAudioControl& aLcAudioControl ) + { + return new( ELeave )CMusEngLiveVideoPlayer( + aDisplayHandler, aCameraHandler, aLcAudioControl ); + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +CMusEngLiveVideoPlayer::CMusEngLiveVideoPlayer( + MMusEngDisplayHandler& aDisplayHandler, + TMusEngCameraHandler& aCameraHandler, + MLcAudioControl& aLcAudioControl ) : + CMusEngLocalVideoPlayer( aDisplayHandler, aLcAudioControl ), + iCameraHandler( aCameraHandler ) + { + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +CMusEngLiveVideoPlayer::~CMusEngLiveVideoPlayer() + { + } + +// ----------------------------------------------------------------------------- +// From MLcVideoPlayer +// ----------------------------------------------------------------------------- +// +TBool CMusEngLiveVideoPlayer::LcIsPlayingL() + { +// return iCameraHandler.IsPlayingL(); + return ETrue; + } + +// ----------------------------------------------------------------------------- +// From MLcVideoPlayer +// ----------------------------------------------------------------------------- +// +void CMusEngLiveVideoPlayer::LcPlayL() + { +// iCameraHandler.PlayL(); + } + +// ----------------------------------------------------------------------------- +// From MLcVideoPlayer +// ----------------------------------------------------------------------------- +// +void CMusEngLiveVideoPlayer::LcPauseL() + { +// iCameraHandler.PauseL(); + } + +// ----------------------------------------------------------------------------- +// From MLcVideoPlayer +// ----------------------------------------------------------------------------- +// +MLcCameraControl* CMusEngLiveVideoPlayer::LcCameraControl() + { + return &iCameraHandler; + } + +// ----------------------------------------------------------------------------- +// From MLcVideoPlayer +// ----------------------------------------------------------------------------- +// +MLcDestinationFileControl* CMusEngLiveVideoPlayer::LcDestinationFileControl() + { + return this; + } + +// ----------------------------------------------------------------------------- +// From MLcVideoPlayer +// ----------------------------------------------------------------------------- +// +MLcZoomControl* CMusEngLiveVideoPlayer::LcZoomControl() + { + return &iCameraHandler; + } + +// ----------------------------------------------------------------------------- +// From MLcVideoPlayer +// ----------------------------------------------------------------------------- +// +MLcBrightnessControl* CMusEngLiveVideoPlayer::LcBrightnessControl() + { + return &iCameraHandler; + } + +// ----------------------------------------------------------------------------- +// From MLcFileControl +// ----------------------------------------------------------------------------- +// +void CMusEngLiveVideoPlayer::SetLcFileNameL( const TFileName& aFileName ) + { + iFileName = aFileName; + } + +// ----------------------------------------------------------------------------- +// From MLcFileControl +// ----------------------------------------------------------------------------- +// +TFileName& CMusEngLiveVideoPlayer::LcFileName() + { + return iFileName; + } + +// ----------------------------------------------------------------------------- +// From MLcDestinationFileControl +// ----------------------------------------------------------------------------- +// +void CMusEngLiveVideoPlayer::LcRecordL( TBool aRecord ) + { + MUS_LOG1( "mus: [ENGINE] -> CMusEngLiveVideoPlayer::LcRecordL(( %d )", + aRecord ) + + MUS_LOG( "mus: [ENGINE] <- CMusEngLiveVideoPlayer::LcRecordL" ) + } + +// ----------------------------------------------------------------------------- +// From MLcDestinationFileControl +// ----------------------------------------------------------------------------- +// +TBool CMusEngLiveVideoPlayer::LcIsRecording() + { + MUS_LOG( "mus: [ENGINE] -> CMusEngLiveVideoPlayer::LcIsRecording()" ) + + TBool isEnabled( EFalse ); + + return isEnabled; + } diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/dummymusengineplugin/src/musenglocalvideoplayer.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/dummymusengineplugin/src/musenglocalvideoplayer.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,69 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + +// USER +#include "musenglocalvideoplayer.h" +#include "musengdisplayhandler.h" + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +CMusEngLocalVideoPlayer::CMusEngLocalVideoPlayer( + MMusEngDisplayHandler& aDisplayHandler, + MLcAudioControl& aLcAudioControl ) : + CMusEngVideoPlayerBase( aDisplayHandler, aLcAudioControl ) + { + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +CMusEngLocalVideoPlayer::~CMusEngLocalVideoPlayer() + { + } + +// ----------------------------------------------------------------------------- +// From MLcVideoPlayer +// ----------------------------------------------------------------------------- +// +MLcVideoPlayer::TLcVideoPlayerState +CMusEngLocalVideoPlayer::LcVideoPlayerState() const + { + return MLcVideoPlayer::EPlaying; + } + + +// ----------------------------------------------------------------------------- +// From MLcWindow +// ----------------------------------------------------------------------------- +// +void CMusEngLocalVideoPlayer::SetLcWindowRectL( TRect aRect ) + { + iDisplayHandler.SetSecondaryRectL( aRect ); + } + +// ----------------------------------------------------------------------------- +// From MLcWindow +// ----------------------------------------------------------------------------- +// +TRect CMusEngLocalVideoPlayer::LcWindowRect() + { + return iDisplayHandler.SecondaryRect(); + } diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/dummymusengineplugin/src/musengmcesession.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/dummymusengineplugin/src/musengmcesession.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,662 @@ +/* +* 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: +* +*/ + + +// USER +#include "musengmcesession.h" +#include "lcsessionobserver.h" +#include "musenglogger.h" +#include "lcuiprovider.h" +#include "lcvideoplayer.h" +#include "musengremotevideoplayer.h" +#include "musenglivevideoplayer.h" + +// SYSTEM +#include +#include + +#include +#include +#include + + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +CMusEngMceSession::CMusEngMceSession() + { + iBackground = IsBackgroundStartup(); + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusEngMceSession::ConstructL() + { + MUS_LOG( "mus: [ENGINE] -> CMusEngMceSession::ConstructL()" ) + + iLiveVideoPlayer = CMusEngLiveVideoPlayer::NewL( *this, iCameraHandler, *this ); + iLcSessionState = MLcSession::EUninitialized; + + MUS_LOG( "mus: [ENGINE] <- CMusEngMceSession::ConstructL()" ) + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +CMusEngMceSession::~CMusEngMceSession() + { + MUS_LOG( "mus: [ENGINE] -> CMusEngMceSession::~CMusEngMceSession()" ) + + delete iRemoteAddress; + delete iRemoteVideoPlayer; + delete iLiveVideoPlayer; + MUS_LOG( "mus: [ENGINE] <- CMusEngMceSession::~CMusEngMceSession()" ) + } + +// ----------------------------------------------------------------------------- +// From MMusEngDisplayHandler +// ----------------------------------------------------------------------------- +// +TRect CMusEngMceSession::Rect() const + { + MUS_LOG( "mus: [ENGINE] CMusEngMceSession::Rect()" ) + return iRect; + } + +// ----------------------------------------------------------------------------- +// From MMusEngDisplayHandler +// ----------------------------------------------------------------------------- +// +void CMusEngMceSession::SetRectL( const TRect& aRect ) + { + MUS_LOG( "mus: [ENGINE] CMusEngSession::SetRectL()" ) + iRect = aRect; + } + +// ----------------------------------------------------------------------------- +// From MMusEngDisplayHandler +// ----------------------------------------------------------------------------- +// +void CMusEngMceSession::SetSecondaryRectL( const TRect& aSecondaryRect ) + { + MUS_LOG( "mus: [ENGINE] CMusEngMceSession::SetSecondaryRectL()" ) + + // Same rect is set by primary and secondary setters + iRect = aSecondaryRect; + } + +// ----------------------------------------------------------------------------- +// From MMusEngDisplayHandler +// ----------------------------------------------------------------------------- +// +TRect CMusEngMceSession::SecondaryRect() const + { + MUS_LOG( "mus: [ENGINE] CMusEngMceSession::SecondaryRect()" ) + return iRect; + } + +#if 0 + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusEngTwoWaySession::SetSecondaryRectL( const TRect& aSecondaryRect ) + { + MUS_LOG( "mus: [ENGINE] -> CMusEngTwoWaySession::SetSecondaryRectL()" ) + + iLocalRect = aSecondaryRect; + + MUS_LOG( "mus: [ENGINE] <- CMusEngTwoWaySession::SetSecondaryRectL()" ) + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +TRect CMusEngTwoWaySession::SecondaryRect() const + { + MUS_LOG( "mus: [ENGINE] -> CMusEngTwoWaySession::SecondaryRect()" ) + MUS_LOG( "mus: [ENGINE] <- CMusEngTwoWaySession::SecondaryRect()" ) + return iLocalRect; + } + +#endif + +// ----------------------------------------------------------------------------- +// From MMusEngDisplayHandler +// ----------------------------------------------------------------------------- +// +MMusEngDisplayHandler::TDisplayOrientation CMusEngMceSession::OrientationL() + { + MUS_LOG( "mus: [ENGINE] -> CMusEngMceSession::RotationL()" ) + return MMusEngDisplayHandler::EPortrait; + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusEngMceSession::SetOrientationL( TDisplayOrientation aOrientation ) + { + MUS_LOG1( "mus: [ENGINE] -> CMusEngMceSession::SetOrientationL() %d", + aOrientation ) + + MUS_LOG( "mus: [ENGINE] <- CMusEngMceSession::SetOrientationL()" ) + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusEngMceSession::EnableDisplayL( TBool aEnable ) + { + MUS_LOG1( "mus: [ENGINE] -> CMusEngMceSession::EnableDisplay() %d", + aEnable ) + + MUS_LOG( "mus: [ENGINE] <- CMusEngMceSession::EnableDisplay()") + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +TBool CMusEngMceSession::IsDisplayEnabled() + { + TBool enabled( EFalse ); + return enabled; + } + +// ----------------------------------------------------------------------------- +// From MMusEngDisplayHandler +// ----------------------------------------------------------------------------- +// +TBool CMusEngMceSession::IsDisplayActive() + { + return ( IsDisplayEnabled() ); + } + +// ----------------------------------------------------------------------------- +// From MLcSession +// ----------------------------------------------------------------------------- +// +MLcSession::TLcSessionState CMusEngMceSession::LcSessionState() const + { + MUS_LOG( "mus: [ENGINE] <- CMusEngMceSession::LcSessionState()" ) + + TLcSessionState lcSessionState = MLcSession::EUninitialized; + +/* + if ( iSession ) + { + switch( iSession->State() ) + { + case CMceSession::EIdle: + { + lcSessionState = MLcSession::EInitialized; + break; + } + case CMceSession::EIncoming: + case CMceSession::EProceeding: + case CMceSession::EReserving: + { + lcSessionState = MLcSession::EReceived; + break; + } + + case CMceSession::EOffering: + case CMceSession::EAnswering: + { + lcSessionState = MLcSession::EOpening; + break; + } + case CMceSession::EEstablished: + { + lcSessionState = MLcSession::EOpen; + break; + } + case CMceSession::ECancelling: + case CMceSession::ETerminating: + { + lcSessionState = MLcSession::EClosing; + break; + } + case CMceSession::ETerminated: + { + lcSessionState = MLcSession::EClosed; + break; + } + default: + { + lcSessionState = MLcSession::EUninitialized; + break; + } + } + } +*/ + + return iLcSessionState; + } + +// ----------------------------------------------------------------------------- +// From MLcSession +// ----------------------------------------------------------------------------- +// +void CMusEngMceSession::SetLcSessionObserver( MLcSessionObserver* aObserver ) + { + iLcSessionObserver = aObserver; + } + +// ----------------------------------------------------------------------------- +// From MLcSession +// ----------------------------------------------------------------------------- +// +void CMusEngMceSession::SetLcUiProvider( MLcUiProvider* aUiProvider ) + { + iLcUiProvider = aUiProvider; + } + +// ----------------------------------------------------------------------------- +// From MLcSession +// ----------------------------------------------------------------------------- +// +MLcVideoPlayer* CMusEngMceSession::RemoteVideoPlayer() + { + return iRemoteVideoPlayer; + } + +// ----------------------------------------------------------------------------- +// From MLcSession +// ----------------------------------------------------------------------------- +// +MLcVideoPlayer* CMusEngMceSession::LocalVideoPlayer() + { + return iLiveVideoPlayer; + } + +// ----------------------------------------------------------------------------- +// From MLcSession +// ----------------------------------------------------------------------------- +// +const TDesC& CMusEngMceSession::LocalDisplayName() + { + return KNullDesC; + } + +// ----------------------------------------------------------------------------- +// From MLcSession +// ----------------------------------------------------------------------------- +// +const TDesC& CMusEngMceSession::RemoteDisplayName() + { + return *iRemoteAddress; + } + +// ----------------------------------------------------------------------------- +// From MLcSession +// ----------------------------------------------------------------------------- +// +TInt CMusEngMceSession::SetParameter( TInt /*aId*/, TInt /*aValue*/ ) + { + return KErrNotSupported; + } + +// ----------------------------------------------------------------------------- +// From MLcSession +// ----------------------------------------------------------------------------- +// +TInt CMusEngMceSession::ParameterValue( TInt /*aId*/ ) + { + return KErrNotSupported; + } + +// ----------------------------------------------------------------------------- +// From MLcSession +// ----------------------------------------------------------------------------- +// +TBool CMusEngMceSession::IsBackgroundStartup() + { + return EFalse; + } + +// ----------------------------------------------------------------------------- +// From MLcAudioControl +// ----------------------------------------------------------------------------- +// +TBool CMusEngMceSession::IsLcAudioMutedL() + { + return EFalse; + } + +// ----------------------------------------------------------------------------- +// From MLcAudioControl +// ----------------------------------------------------------------------------- +// +void CMusEngMceSession::MuteLcAudioL( TBool aMute ) + { + } + +// ----------------------------------------------------------------------------- +// From MLcAudioControl +// ----------------------------------------------------------------------------- +// +TBool CMusEngMceSession::IsLcMicMutedL() + { + return EFalse; + } + +// ----------------------------------------------------------------------------- +// From MLcAudioControl +// ----------------------------------------------------------------------------- +// +void CMusEngMceSession::MuteLcMicL( TBool aMute ) + { + } + +// ----------------------------------------------------------------------------- +// From MLcAudioControl +// ----------------------------------------------------------------------------- +// +TBool CMusEngMceSession::IsEnablingLcLoudspeakerAllowed() + { + return ETrue; + } + +// ----------------------------------------------------------------------------- +// From MLcAudioControl +// ----------------------------------------------------------------------------- +// +void CMusEngMceSession::EnableLcLoudspeakerL( TBool aEnabled ) + { + } + +// ----------------------------------------------------------------------------- +// From MLcAudioControl +// ----------------------------------------------------------------------------- +// +TBool CMusEngMceSession::IsLcLoudspeakerEnabled() + { + return ETrue; + } + +// ----------------------------------------------------------------------------- +// From MLcAudioControl +// ----------------------------------------------------------------------------- +// +TInt CMusEngMceSession::LcVolumeL() + { + return 5; + } + +// ----------------------------------------------------------------------------- +// From MLcAudioControl +// ----------------------------------------------------------------------------- +// +void CMusEngMceSession::SetLcVolumeL( TInt aValue ) + { + } + +// ----------------------------------------------------------------------------- +// From MLcAudioControl +// ----------------------------------------------------------------------------- +// +void CMusEngMceSession::IncreaseLcVolumeL() + { + } + +// ----------------------------------------------------------------------------- +// From MLcAudioControl +// ----------------------------------------------------------------------------- +// +void CMusEngMceSession::DecreaseLcVolumeL() + { + } + + +// ----------------------------------------------------------------------------- +// From MLcAudioControl +// ----------------------------------------------------------------------------- +// +void CMusEngMceSession::TimedOut( TInt aTimerId ) + { + MUS_LOG( "mus: [ENGINE] -> CMusEngMceSession::TimedOut()" ) + + iLcSessionState = MLcSession::EOpen; + + if ( iLcSessionObserver ) + { + MUS_LOG( "mus: [ENGINE] -> CMusEngMceSession::TimedOut(), StateChanged" ) + iLcSessionObserver->StateChanged( *this ); + } + +/* + switch( aTimerId ) + { + case CMceSession::EIdle: + { + lcSessionState = MLcSession::EInitialized; + break; + } + case CMceSession::EIncoming: + case CMceSession::EProceeding: + case CMceSession::EReserving: + { + lcSessionState = MLcSession::EReceived; + break; + } + + case CMceSession::EOffering: + case CMceSession::EAnswering: + { + lcSessionState = MLcSession::EOpening; + break; + } + case CMceSession::EEstablished: + { + lcSessionState = MLcSession::EOpen; + break; + } + case CMceSession::ECancelling: + case CMceSession::ETerminating: + { + lcSessionState = MLcSession::EClosing; + break; + } + case CMceSession::ETerminated: + { + lcSessionState = MLcSession::EClosed; + break; + } + default: + { + lcSessionState = MLcSession::EUninitialized; + break; + } + } +*/ + MUS_LOG( "mus: [ENGINE] <- CMusEngMceSession::TimedOut()" ) + } + + + +TInt CMusEngMceSession::SetForegroundStatus( TBool aIsForeground ) + { + MUS_LOG1( "mus: [ENGINE] -> CMusEngMceSession::SetForegroundStatus() %d", + aIsForeground ) + /* + if ( aIsForeground ) + { + // Only clear the bg info, do not ever enable it again + iBackground = EFalse; + } + */ + return KErrNone; + } + +_LIT( KIpVtEngStubRemoteDetails, "5556567844" ); + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +const TDesC& CMusEngMceSession::RemoteDetails() + { + return KIpVtEngStubRemoteDetails(); + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusEngMceSession::SetRemoteL( const TDesC& aRemote ) +{ + iRemoteAddress = aRemote.AllocL(); +} + +#if 0 + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusEngMceSession::InformObserverAboutSessionStateChange() + { + if ( iLcSessionObserver ) + { + iLcSessionObserver->StateChanged( *this ); + } + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusEngMceSession::InformObserverAboutSessionUpdate() + { + if ( iLcSessionObserver ) + { + iLcSessionObserver->Updated( *this ); + } + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusEngMceSession::InformObserverAboutSessionFailure( TInt aReason ) + { + if ( iLcSessionObserver ) + { + iLcSessionObserver->Failed( *this, aReason ); + } + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusEngMceSession::InformObserverAboutPlayerStateChange( + MLcVideoPlayer* aPlayer ) + { + if ( iLcSessionObserver && aPlayer ) + { + iLcSessionObserver->StateChanged( *aPlayer ); + } + + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusEngMceSession::InformUiProviderAboutReceivingStart() + { + MUS_LOG( "mus: [ENGINE] -> CMusEngMceSession::InformUiProviderAboutReceivingStart()" ) + if ( iBackground && iLcUiProvider ) + { + MUS_LOG( "mus: [ENGINE] receiving started in BG mode, switching to FG" ) + iLcUiProvider->HandleForegroundStatus( ETrue ); + iBackground = EFalse; + } + MUS_LOG( "mus: [ENGINE] <- CMusEngMceSession::InformUiProviderAboutReceivingStart()" ) + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusEngMceSession::InformObserverAboutPlayerUpdate( + MLcVideoPlayer* aPlayer ) + { + if ( iLcSessionObserver && aPlayer ) + { + iLcSessionObserver->Updated( *aPlayer ); + } + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusEngMceSession::InformObserverAboutPlayerFailure( + MLcVideoPlayer* aPlayer, + TInt aReason ) + { + if ( iLcSessionObserver && aPlayer ) + { + iLcSessionObserver->Failed( *aPlayer, aReason ); + } + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +MLcUiProvider& CMusEngMceSession::LcUiProviderL() + { + __ASSERT_ALWAYS( iLcUiProvider, User::Leave( KErrNotReady ) ); + return *iLcUiProvider; + } +#endif + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusEngMceSession::UpdateLcSessionL() + { + } + +// ----------------------------------------------------------------------------- +// From MLcSession +// ----------------------------------------------------------------------------- +// +TBool CMusEngMceSession::SendDialTone( TChar aKey ) + { + return ETrue; + } + + + +// End of file diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/dummymusengineplugin/src/musengmceutils.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/dummymusengineplugin/src/musengmceutils.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,594 @@ +/* +* Copyright (c) 2005-2006 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: Utilities to get and set profile used with SWIS. +* +*/ + + + +// USER + +#include "musengmceutils.h" +#include "muslogger.h" + +// SYSTEM + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + + + + + +// ----------------------------------------------------------------------------- +// Tells if parameter stream is a video stream with RTP source +// ----------------------------------------------------------------------------- +// +TBool MusEngMceUtils::IsVideoInStream( CMceMediaStream& aStream ) + { + return ( aStream.Type() == KMceVideo && + aStream.Source() && + aStream.Source()->Type() == KMceRTPSource ); + } + +// ----------------------------------------------------------------------------- +// Tells if parameter stream is a video stream with RTP sink +// ----------------------------------------------------------------------------- +// +TBool MusEngMceUtils::IsVideoOutStream( CMceMediaStream& aStream ) + { + TBool isOutStream( EFalse ); + if ( aStream.Type() == KMceVideo ) + { + CMceMediaSink* rtpSink = MusEngMceUtils::GetMediaSink( + aStream, + KMceRTPSink ); + + isOutStream = ( rtpSink != NULL ); + } + return isOutStream; + } + +// ----------------------------------------------------------------------------- +// Tells if parameter stream is an audio stream with RTP source +// ----------------------------------------------------------------------------- +// +TBool MusEngMceUtils::IsAudioInStream( CMceMediaStream& aStream ) + { + return ( aStream.Type() == KMceAudio && + aStream.Source() && + aStream.Source()->Type() == KMceRTPSource ); + } + + +// ----------------------------------------------------------------------------- +// Gets handle to video stream with RTP sink. +// ----------------------------------------------------------------------------- +// +CMceVideoStream* MusEngMceUtils::GetVideoOutStreamL( CMceSession& aSession ) + { + MUS_LOG( "mus: [ENGINE] -> MusEngMceUtils::GetVideoOutStreamL()" ) + + const RPointerArray& streams = aSession.Streams(); + + CMceVideoStream* videoOut = NULL; + + for ( TInt i = 0; i < streams.Count(); ++i ) + { + if ( MusEngMceUtils::IsVideoOutStream( *streams[i] ) ) + { + __ASSERT_ALWAYS( !videoOut, User::Leave( KErrOverflow ) ); + + videoOut = static_cast( streams[i] ); + } + + // Check if bound stream is a video stream with RTP sink. + if ( streams[i]->BoundStream() && + MusEngMceUtils::IsVideoOutStream( streams[i]->BoundStreamL() ) ) + { + __ASSERT_ALWAYS( !videoOut, User::Leave( KErrOverflow ) ); + + videoOut = static_cast( + &streams[i]->BoundStreamL() ); + } + } + + __ASSERT_ALWAYS( videoOut, User::Leave( KErrNotFound ) ); + + MUS_LOG( "mus: [ENGINE] <- MusEngMceUtils::GetVideoOutStreamL()" ) + + return videoOut; + } + + +// ----------------------------------------------------------------------------- +// Gets handle to video stream with RTP source. +// ----------------------------------------------------------------------------- +// +CMceVideoStream* MusEngMceUtils::GetVideoInStreamL( CMceSession& aSession ) + { + MUS_LOG( "mus: [ENGINE] -> MusEngMceUtils::GetVideoInStreamL()" ) + + const RPointerArray& streams = aSession.Streams(); + + CMceVideoStream* videoIn = NULL; + + for ( TInt i = 0; i < streams.Count(); ++i ) + { + if ( MusEngMceUtils::IsVideoInStream( *streams[i] ) ) + + { + __ASSERT_ALWAYS( !videoIn, User::Leave( KErrOverflow ) ); + + videoIn = static_cast( streams[i] ); + } + + // Check if bound stream is a video stream with RTP souce. + if ( streams[i]->BoundStream() && + MusEngMceUtils::IsVideoInStream( streams[i]->BoundStreamL() ) ) + { + __ASSERT_ALWAYS( !videoIn, User::Leave( KErrOverflow ) ); + + videoIn = static_cast( + &streams[i]->BoundStreamL() ); + } + } + + __ASSERT_ALWAYS( videoIn, User::Leave( KErrNotFound ) ); + + MUS_LOG( "mus: [ENGINE] <- MusEngMceUtils::GetVideoInStreamL()" ) + + return videoIn; + } + + +// ----------------------------------------------------------------------------- +// Gets handle to video stream with file sink +// ----------------------------------------------------------------------------- +// +CMceVideoStream* MusEngMceUtils::GetRecordingStream( CMceSession& aSession ) + { + MUS_LOG( "mus: [ENGINE] -> MusEngMceUtils::GetRecordingStreamL()" ) + + const RPointerArray& streams = aSession.Streams(); + + CMceVideoStream* recordingStream = NULL; + + for ( TInt i = 0; i < streams.Count(); ++i ) + { + if ( streams[i]->Type() == KMceVideo ) + { + if ( MusEngMceUtils::GetMediaSink( *streams[i], KMceFileSink ) ) + { + recordingStream = static_cast( streams[i] ); + } + } + } + + MUS_LOG( "mus: [ENGINE] <- MusEngMceUtils::GetRecordingStreamL()" ) + + return recordingStream; + } + + +// ----------------------------------------------------------------------------- +// Gets handle to a media sink of spesified type contained by a mediastream. +// ----------------------------------------------------------------------------- +// +CMceMediaSink* MusEngMceUtils::GetMediaSink( CMceMediaStream& aStream, + TMceSinkType aType, + TMceSourceType aAssociatedSourceType ) + { + const RPointerArray& sinks = aStream.Sinks(); + for ( TInt i = 0; i < sinks.Count(); ++i ) + { + if ( sinks[i]->Type() == aType && + ( aAssociatedSourceType == KMusEngNoAssociatedSourceType || + aStream.Source()->Type() == aAssociatedSourceType ) ) + { + return sinks[i]; + } + } + + return NULL; + } + + +// ----------------------------------------------------------------------------- +// Gets handle to a media sink of spesified type contained by a mediastream. +// ----------------------------------------------------------------------------- +// +CMceMediaSink* MusEngMceUtils::GetMediaSinkL( CMceMediaStream& aStream, + TMceSinkType aType, + TMceSourceType aAssociatedSourceType ) + { + + CMceMediaSink* sink = MusEngMceUtils::GetMediaSink( aStream, aType, aAssociatedSourceType ); + + __ASSERT_ALWAYS( sink, User::Leave( KErrNotFound ) ); + + return sink; + } + + +// ----------------------------------------------------------------------------- +// Gets handle to a media sink of spesified type contained by a session. +// ----------------------------------------------------------------------------- +// +CMceMediaSink* MusEngMceUtils::GetMediaSink( CMceSession& aSession, + TMceSinkType aType, + TMceSourceType aAssociatedSourceType, + TBool aStrictMatch ) + { + CMceMediaSink* sink = NULL; + + TRAP_IGNORE( sink = MusEngMceUtils::GetMediaSinkL( + aSession, aType, aAssociatedSourceType, aStrictMatch ) ) + + return sink; + } + + +// ----------------------------------------------------------------------------- +// Gets handle to a media sink of spesified type contained by a session. +// ----------------------------------------------------------------------------- +// +CMceMediaSink* MusEngMceUtils::GetMediaSinkL( CMceSession& aSession, + TMceSinkType aType, + TMceSourceType aAssociatedSourceType, + TBool aStrictMatch ) + { + CMceMediaSink* sink = NULL; + + const RPointerArray& streams = aSession.Streams(); + + for ( TInt i = 0; i < streams.Count(); ++i ) + { + sink = MusEngMceUtils::GetMediaSink( *streams[i], aType, aAssociatedSourceType ); + if ( sink ) + { + return sink; + } + + if ( streams[i]->BoundStream() ) + { + sink = MusEngMceUtils::GetMediaSink( streams[i]->BoundStreamL(), + aType, + aAssociatedSourceType ); + if ( sink ) + { + return sink; + } + } + } + + if ( !sink && aAssociatedSourceType != KMusEngNoAssociatedSourceType && !aStrictMatch ) + { + // No preferred match, try without source preference + sink = GetMediaSinkL( aSession, aType ); + } + + __ASSERT_ALWAYS( sink, User::Leave( KErrNotFound ) ); + + return sink; + } + + +// ----------------------------------------------------------------------------- +// Gets handle to a speaker sink contained by specified stream or bound stream. +// ----------------------------------------------------------------------------- +// +CMceSpeakerSink* MusEngMceUtils::GetSpeaker( CMceMediaStream& aStream ) + { + MUS_LOG( "mus: [ENGINE] -> MusEngMceUtils::GetSpeaker()" ) + + CMceSpeakerSink* speaker = NULL; + + if ( aStream.Type() == KMceAudio ) + { + speaker = static_cast( + MusEngMceUtils::GetMediaSink( aStream, KMceSpeakerSink ) ); + + if ( !speaker && aStream.BoundStream() ) + { + CMceMediaStream* boundStream = NULL; + TRAPD( error, boundStream = &aStream.BoundStreamL() ) + + if ( error == KErrNone ) + { + speaker = static_cast( + MusEngMceUtils::GetMediaSink( *boundStream, + KMceSpeakerSink ) ); + } + } + } + + MUS_LOG( "mus: [ENGINE] <- MusEngMceUtils::GetSpeaker()" ) + + return speaker; + } + + +// ----------------------------------------------------------------------------- +// Gets handle to a camera source. +// ----------------------------------------------------------------------------- +// +CMceCameraSource* MusEngMceUtils::GetCameraL( CMceSession& aSession ) + { + // Camera can be only in out stream + MUS_LOG( "mus: [ENGINE] -> MusEngMceUtils::GetCameraL()" ) + + CMceVideoStream* videoOut = MusEngMceUtils::GetVideoOutStreamL( aSession ); + + if ( !( videoOut->Source() && + videoOut->Source()->Type() == KMceCameraSource ) ) + { + User::Leave( KErrNotFound ); + } + + MUS_LOG( "mus: [ENGINE] <- MusEngMceUtils::GetCameraL()" ) + return static_cast( videoOut->Source() ); + } + + +// ----------------------------------------------------------------------------- +// Gets handle to a file source. +// ----------------------------------------------------------------------------- +// +CMceFileSource* MusEngMceUtils::GetFileSourceL( CMceSession& aSession ) + { + MUS_LOG( "mus: [ENGINE] -> MusEngMceUtils::GetFileSourceL()" ) + + CMceVideoStream* videoOut = MusEngMceUtils::GetVideoOutStreamL( aSession ); + + if ( !( videoOut->Source() && + videoOut->Source()->Type() == KMceFileSource ) ) + { + User::Leave( KErrNotFound ); + } + + MUS_LOG( "mus: [ENGINE] <- MusEngMceUtils::GetFileSourceL()" ) + return static_cast( videoOut->Source() ); + } + + +// ----------------------------------------------------------------------------- +// Gets handle to a display sink. +// ----------------------------------------------------------------------------- +// +CMceDisplaySink* MusEngMceUtils::GetDisplay( + CMceSession& aSession, TBool aPreferViewFinder ) + { + MUS_LOG( "mus: [ENGINE] -> MusEngMceUtils::GetDisplay()" ) + MUS_LOG( "mus: [ENGINE] <- MusEngMceUtils::GetDisplay()" ) + TMceSourceType preferredSource = + aPreferViewFinder ? KMceCameraSource : KMusEngNoAssociatedSourceType; + return static_cast( + MusEngMceUtils::GetMediaSink( aSession, KMceDisplaySink, preferredSource ) ); + + } + + +// ----------------------------------------------------------------------------- +// Gets handle to a display sink. +// ----------------------------------------------------------------------------- +// +CMceDisplaySink* MusEngMceUtils::GetDisplayL( + CMceSession& aSession, TBool aPreferViewFinder ) + { + MUS_LOG( "mus: [ENGINE] -> MusEngMceUtils::GetDisplayL()" ) + + CMceDisplaySink* display = MusEngMceUtils::GetDisplay( aSession, aPreferViewFinder ); + + __ASSERT_ALWAYS( display, User::Leave( KErrNotFound ) ); + + MUS_LOG( "mus: [ENGINE] <- MusEngMceUtils::GetDisplayL()" ) + return display; + } + +// ----------------------------------------------------------------------------- +// Gets handle to a display sink displaying received video. +// ----------------------------------------------------------------------------- +// +CMceDisplaySink* MusEngMceUtils::GetReceivingDisplay( CMceSession& aSession ) + { + MUS_LOG( "mus: [ENGINE] -> MusEngMceUtils::GetReceivingDisplay()" ) + MUS_LOG( "mus: [ENGINE] <- MusEngMceUtils::GetReceivingDisplay()" ) + + // Search display which is connected with rtp source + TMceSourceType preferredSource = KMceRTPSource; + return static_cast( MusEngMceUtils::GetMediaSink( + aSession, KMceDisplaySink, preferredSource, ETrue ) ); + } + +// ----------------------------------------------------------------------------- +// Gets handle to a display sink displaying received video. +// ----------------------------------------------------------------------------- +// +CMceDisplaySink* MusEngMceUtils::GetReceivingDisplayL( CMceSession& aSession ) + { + MUS_LOG( "mus: [ENGINE] -> MusEngMceUtils::GetReceivingDisplayL()" ) + + CMceDisplaySink* display = GetReceivingDisplay( aSession ); + __ASSERT_ALWAYS( display != NULL, User::Leave( KErrNotFound ) ); + + MUS_LOG( "mus: [ENGINE] <- MusEngMceUtils::GetReceivingDisplay()" ) + + return display; + } + +// ----------------------------------------------------------------------------- +// Gets handle to a display sink displaying viewfinder content. +// ----------------------------------------------------------------------------- +// +CMceDisplaySink* MusEngMceUtils::GetVfDisplay( CMceSession& aSession ) + { + MUS_LOG( "mus: [ENGINE] -> MusEngMceUtils::GetVfDisplay()" ) + MUS_LOG( "mus: [ENGINE] <- MusEngMceUtils::GetVfDisplay()" ) + + // Search display which is connected with camera + TMceSourceType preferredSource = KMceCameraSource; + return static_cast( MusEngMceUtils::GetMediaSink( + aSession, KMceDisplaySink, preferredSource, ETrue ) ); + } + +// ----------------------------------------------------------------------------- +// Adds display sink to specified stream if one does not exist already. +// Display rect is set in both cases. +// ----------------------------------------------------------------------------- +// +void MusEngMceUtils::AddDisplayL( CMceMediaStream& aStream, + CMceManager& aManager, + const TRect& aDisplayRect ) + { + MUS_LOG( "mus: [ENGINE] -> MusEngMceUtils::AddDisplayL()" ) + + __ASSERT_ALWAYS( aStream.Type() == KMceVideo, User::Leave( KErrArgument ) ); + + CMceDisplaySink* display = static_cast( + MusEngMceUtils::GetMediaSink( + aStream, + KMceDisplaySink ) ); + + if ( !display ) + { + display = CMceDisplaySink::NewLC( aManager ); + aStream.AddSinkL( display ); + CleanupStack::Pop( display ); + } + + display->SetDisplayRectL( aDisplayRect ); + + MUS_LOG( "mus: [ENGINE] <- MusEngMceUtils::AddDisplayL()" ) + } + + +// ----------------------------------------------------------------------------- +// Adds display sink to specified stream if one does not exist already. +// ----------------------------------------------------------------------------- +// +void MusEngMceUtils::AddSpeakerL( CMceMediaStream& aStream ) + { + MUS_LOG( "mus: [ENGINE] -> MusEngMceUtils::AddSpeakerL()" ) + + __ASSERT_ALWAYS( aStream.Type() == KMceAudio, User::Leave( KErrArgument ) ); + + CMceSpeakerSink* speaker = static_cast( + MusEngMceUtils::GetMediaSink( + aStream, + KMceSpeakerSink ) ); + + if ( !speaker ) + { + speaker = CMceSpeakerSink::NewLC(); + aStream.AddSinkL( speaker ); + CleanupStack::Pop( speaker ); + } + + MUS_LOG( "mus: [ENGINE] <- MusEngMceUtils::AddSpeakerL()" ) + } + + +// ----------------------------------------------------------------------------- +// Disables parameter stream, its' source and all the sinks. +// ----------------------------------------------------------------------------- +// +void MusEngMceUtils::DisableStreamL( CMceMediaStream& aStream ) + { + MUS_LOG( "mus: [ENGINE] -> MusEngMceUtils::DisableStreamL()" ) + + aStream.DisableL(); + + if ( aStream.Source() ) + { + aStream.Source()->DisableL(); + } + + for ( TInt sinkIndex = 0; sinkIndex < aStream.Sinks().Count(); ++sinkIndex ) + { + aStream.Sinks()[ sinkIndex ]->DisableL(); + } + + MUS_LOG( "mus: [ENGINE] -> MusEngMceUtils::DisableStreamL()" ) + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void MusEngMceUtils::DoEnableDisplayL( CMceDisplaySink& aDisplay, TBool aEnable ) + { + MUS_LOG1( "mus: [ENGINE] -> MusEngMceUtils::DoEnableDisplayL() %d", + aEnable ) + + if ( aEnable ) + { + if ( !aDisplay.IsEnabled() ) + { + aDisplay.EnableL(); + MUS_LOG( " Display enabled" ) + } + else + { + MUS_LOG( " Display already enabled, ignore" ) + } + } + else + { + if ( aDisplay.IsEnabled() ) + { + aDisplay.DisableL(); + MUS_LOG( " Display disabled" ) + } + else + { + MUS_LOG( " Display already disabled, ignore" ) + } + } + + MUS_LOG( "mus: [ENGINE] <- MusEngMceUtils::DoEnableDisplayL()") + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +TInt MusEngMceUtils::EnableInactivityTimer( + CMceSession& aSession, + TUint32 aInactivityTimeout ) + { + TInt err( KErrNotFound ); + CMceVideoStream* stream = NULL; + TRAP_IGNORE( stream = MusEngMceUtils::GetVideoInStreamL( aSession ) ) + if ( stream ) + { + // Instream has always RTP source + err = KErrNone; + CMceRtpSource* rtpSource = static_cast( stream->Source() ); + TRAP( err, rtpSource->EnableInactivityTimerL( aInactivityTimeout ) ) + } + + return err; + } + +// End of file diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/dummymusengineplugin/src/musengremotevideoplayer.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/dummymusengineplugin/src/musengremotevideoplayer.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,75 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + + +// USER +#include "musengremotevideoplayer.h" +#include "musengdisplayhandler.h" + +// SYSTEM +#include + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +CMusEngRemoteVideoPlayer* CMusEngRemoteVideoPlayer::NewL( + MMusEngDisplayHandler& aDisplayHandler, + MLcAudioControl& aLcAudioControl ) + { + return new( ELeave )CMusEngRemoteVideoPlayer( + aDisplayHandler, aLcAudioControl ); + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +CMusEngRemoteVideoPlayer::CMusEngRemoteVideoPlayer( + MMusEngDisplayHandler& aDisplayHandler, + MLcAudioControl& aLcAudioControl ) : + CMusEngVideoPlayerBase( aDisplayHandler, aLcAudioControl ) + { + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +CMusEngRemoteVideoPlayer::~CMusEngRemoteVideoPlayer() + { + } + +// ----------------------------------------------------------------------------- +// From MLcVideoPlayer +// ----------------------------------------------------------------------------- +// +MLcVideoPlayer::TLcVideoPlayerState +CMusEngRemoteVideoPlayer::LcVideoPlayerState() const + { + return MLcVideoPlayer::EPlaying; + } + +// ----------------------------------------------------------------------------- +// From MLcVideoPlayer +// ----------------------------------------------------------------------------- +// +TBool CMusEngRemoteVideoPlayer::LcIsPlayingL() + { + + return ETrue; + } diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/dummymusengineplugin/src/musengsessionmanager.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/dummymusengineplugin/src/musengsessionmanager.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,94 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + +#include "musengsessionmanager.h" +#include "musengmcesession.h" +#include "musengtwowaysession.h" +#include "musenglivesession.h" +#include "lcsession.h" +#include "mccdatasender.h" +#include "mccdatareceiver.h" +#include "musenglogger.h" +#include "mccdatastructures.h" + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +CMusEngSessionManager* CMusEngSessionManager::NewL() + { + CMusEngSessionManager* self = new( ELeave )CMusEngSessionManager(); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + return self; + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +CMusEngSessionManager::~CMusEngSessionManager() + { + delete iSession; + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +CMusEngSessionManager::CMusEngSessionManager() + { + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusEngSessionManager::ConstructL() + { + MUS_LOG( "mus: [ENGINE] -> CMusEngSessionManager::ConstructL()" ) + //iMsgReceiver = CMccDataReceiver::NewL(*this); + //iMsgSender = CMccDataSender::NewL(); + //iSession = CMusEngTwoWaySession::NewL(); + iSession = CMusEngLiveSession::NewL(); + _LIT(KDisplayName,"+358504871872"); + iSession->SetRemoteL( KDisplayName() ); + MUS_LOG( "mus: [ENGINE] <- CMusEngSessionManager::ConstructL()" ) + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +MLcSession& CMusEngSessionManager::Session() + { + return *iSession; + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusEngSessionManager::DataReceived( const TDataMessage& aData ) + { + } + + + +// End of File diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/dummymusengineplugin/src/musengtwowayrecvsession.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/dummymusengineplugin/src/musengtwowayrecvsession.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,521 @@ +/* +* 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: +* +*/ + + +// USER +#include "musengtwowayrecvsession.h" +#include "lcsessionobserver.h" +#include "musunittesting.h" +#include "musengmceutils.h" +#include "musenglogger.h" +#include "mussipprofilehandler.h" +#include "musenglivevideoplayer.h" +#include "musengremotevideoplayer.h" + +// SYSTEM +#include +#include +#include +#include +#include +#include +#include +#include +#include + +const TInt KMusEngJitterBufferLength = 51; //Must be bigger than treshold +// Using following value increases treshold buffer to 1 second from +// default 100 ms +const TInt KMusEngJitterBufferTreshold = 50; + +const TUint32 KMusEngTwoWayReceivingActivityTimeout = 5000; // 5 seconds +// 6 seconds keepalive timer, needs to be more than receiving timeout +const TUint8 KMusEngTwoWayRtpKeepAliveTimer = 6; + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +CMusEngTwoWayRecvSession* CMusEngTwoWayRecvSession::NewL() + { + CMusEngTwoWayRecvSession* self = new( ELeave )CMusEngTwoWayRecvSession(); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + return self; + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +CMusEngTwoWayRecvSession::~CMusEngTwoWayRecvSession() + { + MUS_LOG( "mus: [ENGINE] -> CMusEngTwoWayRecvSession::~CMusEngTwoWayRecvSession()" ) + + delete iLiveVideoPlayer; + + MUS_LOG( "mus: [ENGINE] <- CMusEngTwoWayRecvSession::~CMusEngTwoWayRecvSession()" ) + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusEngTwoWayRecvSession::EnableDisplayL( TBool aEnable ) + { + MUS_LOG1( "mus: [ENGINE] -> CMusEngTwoWayRecvSession::EnableDisplayL() %d", + aEnable ) + + __ASSERT_ALWAYS( iSession, User::Leave( KErrNotReady ) ); + + CMceDisplaySink* display = MusEngMceUtils::GetReceivingDisplayL( *iSession ); + MusEngMceUtils::DoEnableDisplayL( *display, aEnable ); + + CMceDisplaySink* vfDisplay = MusEngMceUtils::GetVfDisplay( *iSession ); + if ( vfDisplay ) + { + MusEngMceUtils::DoEnableDisplayL( *vfDisplay, aEnable ); + } + + MUS_LOG( "mus: [ENGINE] <- CMusEngTwoWayRecvSession::EnableDisplayL()") + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +CMusEngMceSession::TDisplayOrientation CMusEngTwoWayRecvSession::OrientationL() + { + MUS_LOG( "mus: [ENGINE] -> CMusEngTwoWayRecvSession::RotationL()" ) + + __ASSERT_ALWAYS( iSession, User::Leave( KErrNotReady ) ); + + CMceDisplaySink* display = MusEngMceUtils::GetReceivingDisplayL( *iSession ); + + TDisplayOrientation displayOrientation; + CMceDisplaySink::TRotation rotation( display->RotationL() ); + + MUS_LOG1( "mus: [ENGINE] MCE rotation is %d", rotation ) + + if ( rotation == CMceDisplaySink::ENone ) + { + displayOrientation = CMusEngMceSession::EPortrait; + } + else + { + displayOrientation = CMusEngMceSession::ELandscape; + } + + MUS_LOG1( "mus: [ENGINE] <- CMusEngTwoWayRecvSession::RotationL() %d", + displayOrientation ) + + return displayOrientation; + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusEngTwoWayRecvSession::SetOrientationL( TDisplayOrientation aOrientation ) + { + MUS_LOG1( "mus: [ENGINE] -> CMusEngTwoWayRecvSession::SetOrientationL() %d", + aOrientation ) + + __ASSERT_ALWAYS( iSession, User::Leave( KErrNotReady ) ); + + CMceDisplaySink* display = MusEngMceUtils::GetReceivingDisplayL( *iSession ); + + CMceDisplaySink* vfDisplay = MusEngMceUtils::GetVfDisplay( *iSession ); + + CMceDisplaySink::TRotation rotation = ( aOrientation == EPortrait ) ? + CMceDisplaySink::ENone : CMceDisplaySink::EClockwise90Degree; + + display->SetRotationL( rotation ); + if ( vfDisplay ) + { + vfDisplay->SetRotationL( rotation ); + } + + MUS_LOG( "mus: [ENGINE] <- CMusEngTwoWayRecvSession::SetOrientationL()" ) + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusEngTwoWayRecvSession::SetRectsL( + const TRect& aRemoteRect, + const TRect& aLocalRect ) + { + MUS_LOG( "mus: [ENGINE] -> CMusEngTwoWayRecvSession::SetRectsL()" ) + + iLocalRect = aLocalRect; + iRect = aRemoteRect; + RectChangedL(); + + MUS_LOG( "mus: [ENGINE] <- CMusEngTwoWayRecvSession::SetRectsL()" ) + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusEngTwoWayRecvSession::SetSecondaryRectL( const TRect& aSecondaryRect ) + { + MUS_LOG( "mus: [ENGINE] -> CMusEngTwoWayRecvSession::SetSecondaryRectL()" ) + + iLocalRect = aSecondaryRect; + RectChangedL(); + + MUS_LOG( "mus: [ENGINE] <- CMusEngTwoWayRecvSession::SetSecondaryRectL()" ) + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +TRect CMusEngTwoWayRecvSession::SecondaryRect() const + { + MUS_LOG( "mus: [ENGINE] -> CMusEngTwoWayRecvSession::SecondaryRect()" ) + MUS_LOG( "mus: [ENGINE] <- CMusEngTwoWayRecvSession::SecondaryRect()" ) + return iLocalRect; + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +TMusEngCameraHandler& CMusEngTwoWayRecvSession::Camera() + { + return iCameraHandler; + } + +// ----------------------------------------------------------------------------- +// From MLcSession +// ----------------------------------------------------------------------------- +// +MLcVideoPlayer* CMusEngTwoWayRecvSession::LocalVideoPlayer() + { + return iLiveVideoPlayer; + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// + +void CMusEngTwoWayRecvSession::RectChangedL() + { + MUS_LOG( "mus: [ENGINE] -> CMusEngTwoWayRecvSession::RectChangedL()" ) + + + // If session is not yet created, do nothing + if ( iSession && iSession->State() != CMceSession::ETerminated ) + { + TRect remoteRect( Rect() ); + MUS_LOG2( "mus: [ENGINE] remote tl.ix=%d tl.iy=%d", + remoteRect.iTl.iX, remoteRect.iTl.iY ) + MUS_LOG2( "mus: [ENGINE] remote brc%d br.iy=%d", + remoteRect.iBr.iX, remoteRect.iBr.iY ) + MUS_LOG2( "mus: [ENGINE] local tl.ix=%d tl.iy=%d", + iLocalRect.iTl.iX, iLocalRect.iTl.iY ) + MUS_LOG2( "mus: [ENGINE] local br.ix=%d br.iy=%d", + iLocalRect.iBr.iX, iLocalRect.iBr.iY ) + + if ( remoteRect != iSetRemoteRect ) + { + CMceDisplaySink* display = MusEngMceUtils::GetReceivingDisplayL( *iSession ); + display->SetDisplayRectL( remoteRect ); + iSetRemoteRect = remoteRect; + } + + if ( iLocalRect != iSetLocalRect ) + { + CMceDisplaySink* vfDisplay = MusEngMceUtils::GetVfDisplay( *iSession ); + if ( vfDisplay ) + { + vfDisplay->SetDisplayRectL( iLocalRect ); + } + iSetLocalRect = iLocalRect; + } + } + + MUS_LOG( "mus: [ENGINE] <- CMusEngTwoWayRecvSession::RectChangedL()" ) + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusEngTwoWayRecvSession::CompleteSessionStructureL() + { + MUS_LOG( "mus: [ENGINE] -> CMusEngTwoWayRecvSession::CompleteSessionStructureL()" ) + + __ASSERT_ALWAYS( iSession, User::Leave( KErrNotReady ) ); + + iCameraHandler.SetSession( iSession ); + + // Force bandwidth line usage in sdp as it is mandatory + // at MT side based on GSMA VS specification IR.74. Bandwidth is set to + // session or to media level based on sender's way of usage. If other end + // is not using bandwidth attribute at all, media level is preferred. + SetSessionSdpLinesL( *iSession, ETrue ); + + CMceStreamBundle* localBundle = + CMceStreamBundle::NewLC( CMceStreamBundle::ELS ); + + const RPointerArray& streams = iSession->Streams(); + + CMceMediaStream* videoInStream = NULL; + CMceMediaStream* videoOutStream = NULL; + + // Search interesting video streams, sendrecv is preferred + TBool sendRecvVideoFound( EFalse ); + for( TInt i = 0; i < streams.Count(); ++i ) + { + if ( MusEngMceUtils::IsVideoInStream( *streams[i] ) && + !sendRecvVideoFound ) + { + videoInStream = streams[i]; + + if ( streams[i]->BoundStream() ) + { + videoOutStream = &streams[i]->BoundStreamL(); + } + } + else if ( streams[i]->BoundStream() && + MusEngMceUtils::IsVideoInStream( streams[i]->BoundStreamL() ) && + !sendRecvVideoFound ) + { + videoInStream = &streams[i]->BoundStreamL(); + + videoOutStream = streams[i]; + } + else + { + // NOP + } + + sendRecvVideoFound = ( videoInStream && videoOutStream ); + } + + CompleteSessionStructureAudioPartL( streams, *localBundle, videoInStream, videoOutStream ); + + if ( videoInStream ) + { + CompleteSessionStructureInStreamL( *videoInStream, *localBundle ); + } + else + { + // At least receiving video stream is required + User::Leave( KErrCorrupt ); + } + + if ( videoOutStream ) + { + CompleteSessionStructureOutStreamL( *videoOutStream ); + } + + // Destroy bundle if it is not needed or transfer ownership + if ( localBundle->Streams().Count() > 1 ) + { + iSession->AddBundleL( localBundle ); + CleanupStack::Pop( localBundle ); + } + else + { + CleanupStack::PopAndDestroy( localBundle ); + } + + AdjustStreamsAndCodecsL(); + + iSession->UpdateL(); + + // Now session state is right to adjust volume + SetSpeakerVolumeL( LcVolumeL() ); + + iSipProfileHandler->CreateProfileL( iSession->Profile() ); + + iRemoteVideoPlayer->SetMceSession( iSession ); + + MUS_LOG( "mus: [ENGINE] <- CMusEngTwoWayRecvSession::CompleteSessionStructureL()" ) + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +CMusEngTwoWayRecvSession::CMusEngTwoWayRecvSession() + : CMusEngReceiveSession() + { + iMceManagerUid.iUid = CMusManager::ESipInviteDesired2WayVideo; + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusEngTwoWayRecvSession::ConstructL() + { + MUS_LOG( "mus: [ENGINE] -> CMusEngTwoWayRecvSession::ConstructL()" ) + + iCameraHandler.ReadCameraUsageKeyL(); + CMusEngReceiveSession::ConstructL(); + + iLiveVideoPlayer = + CMusEngLiveVideoPlayer::NewL( *this, iCameraHandler, *this ); + + // Override receiving timeout and keepalive values of + // normal one-way receiving session + // + iReceivingInactivityTimeout = KMusEngTwoWayReceivingActivityTimeout; + iKeepaliveTimer = KMusEngTwoWayRtpKeepAliveTimer; + + MUS_LOG( "mus: [ENGINE] <- CMusEngTwoWayRecvSession::ConstructL()" ) + } + +// ----------------------------------------------------------------------------- +// When checking audio streams also not interesting streams are removed from +// session. Stream if removed if one of following apply: +// 1. Is not and does not contain incoming video or audio +// 2. We already have one incoming video stream +// 3. Stream is audio and we run operator variant where audio is +// not allowed. +// 4. Two-way video exists and this one is audio +// ----------------------------------------------------------------------------- +// +void CMusEngTwoWayRecvSession::CompleteSessionStructureAudioPartL( + const RPointerArray& aStreams, + CMceStreamBundle& aLocalBundle, + CMceMediaStream* aVideoInStream, + CMceMediaStream* aVideoOutStream ) + { + MUS_LOG( "mus: [ENGINE] -> CMusEngTwoWayRecvSession::CompleteSessionStructureAudioPartL()" ) + + // Audio streams not allowed in two-way session or in operator variant + TBool audioAllowed( !( aVideoInStream && aVideoOutStream ) && !iOperatorVariant ); + + for( TInt i = 0; i < aStreams.Count(); ++i ) + { + // Audio supported currently only in recvonly case + if ( audioAllowed && + MusEngMceUtils::IsAudioInStream( *aStreams[i] ) ) + { + MusEngMceUtils::AddSpeakerL( *aStreams[i] ); + + aLocalBundle.AddStreamL( *aStreams[i] ); + + // Disable possible opposite stream to indicate that sendrecv audio is + // not allowed. + if ( aStreams[i]->BoundStream() ) + { + MusEngMceUtils::DisableStreamL( aStreams[i]->BoundStreamL() ); + } + } + else if ( audioAllowed && + aStreams[i]->BoundStream() && + MusEngMceUtils::IsAudioInStream( aStreams[i]->BoundStreamL() ) ) + { + MusEngMceUtils::AddSpeakerL( aStreams[i]->BoundStreamL() ); + + aLocalBundle.AddStreamL( aStreams[i]->BoundStreamL() ); + + // Disable opposite stream to indicate that sendrecv audio is not allowed. + MusEngMceUtils::DisableStreamL( *aStreams[i] ); + } + else if ( aStreams[ i ] != aVideoInStream && aStreams[ i ] != aVideoOutStream ) + { + iSession->RemoveStreamL( *aStreams[i] ); + + // Since succesfull removal of a stream has decreased the amount + // of streams in array by one, we have to modify the index + --i; + } + else + { + // NOP + } + } + + MUS_LOG( "mus: [ENGINE] <- CMusEngTwoWayRecvSession::CompleteSessionStructureAudioPartL()" ) + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusEngTwoWayRecvSession::CompleteSessionStructureInStreamL( + CMceMediaStream& aVideoInStream, CMceStreamBundle& aLocalBundle ) + { + MUS_LOG( "mus: [ENGINE] -> CMusEngTwoWayRecvSession::CompleteSessionStructureInStreamL()" ) + + SetMediaSdpLinesL( aVideoInStream, ETrue ); + + MusEngMceUtils::AddDisplayL( aVideoInStream, *iManager, Rect() ); + + static_cast(aVideoInStream.Source())->UpdateL( + KMusEngJitterBufferLength, + KMusEngJitterBufferTreshold, + KMusEngTwoWayReceivingActivityTimeout ); + + aLocalBundle.AddStreamL( aVideoInStream ); + + MUS_LOG( "mus: [ENGINE] <- CMusEngTwoWayRecvSession::CompleteSessionStructureInStreamL()" ) + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusEngTwoWayRecvSession::CompleteSessionStructureOutStreamL( + CMceMediaStream& aVideoOutStream ) + { + MUS_LOG( "mus: [ENGINE] -> CMusEngTwoWayRecvSession::CompleteSessionStructureOutStreamL()" ) + + SetMediaSdpLinesL( aVideoOutStream, ETrue ); + + CMceCameraSource* camera = NULL; + TRAP_IGNORE( camera = MusEngMceUtils::GetCameraL( *iSession ) ) + if ( !camera ) + { + camera = CMceCameraSource::NewLC( *iManager ); + aVideoOutStream.SetSourceL( camera ); + CleanupStack::Pop( camera ); + } + + camera->DisableL(); // Start session in pause mode. + + iCameraHandler.InitializeL( *camera ); + + CMceVideoStream* vfStream = CMceVideoStream::NewLC(); + + vfStream->SetSourceL( aVideoOutStream.Source() ); + + // Complete stream + MusEngMceUtils::AddDisplayL( *vfStream, *iManager, SecondaryRect() ); + + iSession->AddStreamL( vfStream ); + CleanupStack::Pop( vfStream ); + + iLiveVideoPlayer->SetMceSession( iSession ); + + MUS_LOG( "mus: [ENGINE] <- CMusEngTwoWayRecvSession::CompleteSessionStructureOutStreamL()" ) + } + + +// End of file diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/dummymusengineplugin/src/musengtwowaysession.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/dummymusengineplugin/src/musengtwowaysession.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,159 @@ +/* +* 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: +* +*/ + + +// USER +#include "musengtwowaysession.h" +#include "lcsessionobserver.h" +#include "musenglogger.h" +#include "musengremotevideoplayer.h" +#include "musenglivevideoplayer.h" +#include "svptimer.h" + + +const TInt KMusEngJitterBufferLength = 51; //Must be bigger than treshold +// Using following value increases treshold buffer to 1 second from +// default 100 ms +const TInt KMusEngJitterBufferTreshold = 50; + +const TUint32 KMusEngTwoWayReceivingActivityTimeout = 5000; // 5 seconds +// 6 seconds keepalive timer, needs to be more than receiving timeout +const TUint8 KMusEngTwoWayRtpKeepAliveTimer = 6; + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +CMusEngTwoWaySession* CMusEngTwoWaySession::NewL() + { + CMusEngTwoWaySession* self = new( ELeave )CMusEngTwoWaySession(); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + return self; + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +CMusEngTwoWaySession::~CMusEngTwoWaySession() + { + MUS_LOG( "mus: [ENGINE] -> CMusEngTwoWaySession::~CMusEngTwoWaySession()" ) + + MUS_LOG( "mus: [ENGINE] <- CMusEngTwoWaySession::~CMusEngTwoWaySession()" ) + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusEngTwoWaySession::EnableDisplayL( TBool aEnable ) + { + MUS_LOG1( "mus: [ENGINE] -> CMusEngTwoWaySession::EnableDisplayL() %d", + aEnable ) + + MUS_LOG( "mus: [ENGINE] <- CMusEngTwoWaySession::EnableDisplayL()") + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusEngTwoWaySession::SetOrientationL( TDisplayOrientation aOrientation ) + { + MUS_LOG1( "mus: [ENGINE] -> CMusEngTwoWaySession::SetOrientationL() %d", + aOrientation ) + + + MUS_LOG( "mus: [ENGINE] <- CMusEngTwoWaySession::SetOrientationL()" ) + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusEngTwoWaySession::SetRectsL( + const TRect& aRemoteRect, + const TRect& aLocalRect ) + { + MUS_LOG( "mus: [ENGINE] -> CMusEngTwoWaySession::SetRectsL()" ) + + MUS_LOG( "mus: [ENGINE] <- CMusEngTwoWaySession::SetRectsL()" ) + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +CMusEngTwoWaySession::CMusEngTwoWaySession() + : CMusEngMceSession() + { + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusEngTwoWaySession::ConstructL() + { + MUS_LOG( "mus: [ENGINE] -> CMusEngTwoWaySession::ConstructL()" ) + + CMusEngMceSession::ConstructL(); + + iRemoteVideoPlayer = CMusEngRemoteVideoPlayer::NewL( *this, *this ); + + MUS_LOG( "mus: [ENGINE] <- CMusEngTwoWaySession::ConstructL()" ) + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusEngTwoWaySession::EstablishLcSessionL() + { + MUS_LOG( "mus: [ENGINE] -> CMusEngTwoWaySession::EstablishLcSessionL" ) + + iTimer = CSVPTimer::NewL( *this, 1 ); + iTimer->SetTime(2000); + + MUS_LOG( "mus: [ENGINE] <- CMusEngTwoWaySession::EstablishLcSessionL" ) + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusEngTwoWaySession::TerminateLcSessionL() + { + MUS_LOG( "mus: [ENGINE] -> CMusEngTwoWaySession::TerminateLcSessionL" ) + + MUS_LOG( "mus: [ENGINE] <- CMusEngTwoWaySession::TerminateLcSessionL" ) + } + +// ----------------------------------------------------------------------------- +// From MLcSession +// ----------------------------------------------------------------------------- +// +MLcVideoPlayer* CMusEngTwoWaySession::RemoteVideoPlayer() + { + return iRemoteVideoPlayer; + } + +// End of file diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/dummymusengineplugin/src/musengvideoplayerbase.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/dummymusengineplugin/src/musengvideoplayerbase.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,199 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + +// USER +#include "musenglocalvideoplayer.h" +#include "musengcamerahandler.h" +#include "musengdisplayhandler.h" + +// SYSTEM +#include + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +CMusEngVideoPlayerBase::CMusEngVideoPlayerBase( + MMusEngDisplayHandler& aDisplayHandler, + MLcAudioControl& aLcAudioControl ) : + iDisplayHandler( aDisplayHandler ), + iLcAudioControl( aLcAudioControl ) + { + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +CMusEngVideoPlayerBase::~CMusEngVideoPlayerBase() + { + } + +// ----------------------------------------------------------------------------- +// From MLcVideoPlayer +// ----------------------------------------------------------------------------- +// +void CMusEngVideoPlayerBase::LcPlayL(MLcVideoPlayer::TLcVideoPlayerSource /*aSource*/) + { + // NOP + } + +// ----------------------------------------------------------------------------- +// From MLcVideoPlayer +// ----------------------------------------------------------------------------- +// +void CMusEngVideoPlayerBase::LcPauseL() + { + // NOP + } + +// ----------------------------------------------------------------------------- +// From MLcVideoPlayer +// ----------------------------------------------------------------------------- +// +MLcWindow* CMusEngVideoPlayerBase::LcWindow() + { + return this; + } + +// ----------------------------------------------------------------------------- +// From MLcVideoPlayer +// ----------------------------------------------------------------------------- +// +MLcCameraControl* CMusEngVideoPlayerBase::LcCameraControl() + { + return NULL; + } + +// ----------------------------------------------------------------------------- +// From MLcVideoPlayer +// ----------------------------------------------------------------------------- +// +MLcSourceFileControl* CMusEngVideoPlayerBase::LcSourceFileControl() + { + return NULL; + } + +// ----------------------------------------------------------------------------- +// From MLcVideoPlayer +// ----------------------------------------------------------------------------- +// +MLcDestinationFileControl* CMusEngVideoPlayerBase::LcDestinationFileControl() + { + return NULL; + } + +// ----------------------------------------------------------------------------- +// From MLcVideoPlayer +// ----------------------------------------------------------------------------- +// +MLcAudioControl* CMusEngVideoPlayerBase::LcAudioControl() + { + return &iLcAudioControl; + } + +// ----------------------------------------------------------------------------- +// From MLcVideoPlayer +// ----------------------------------------------------------------------------- +// +MLcZoomControl* CMusEngVideoPlayerBase::LcZoomControl() + { + return NULL; + } + +// ----------------------------------------------------------------------------- +// From MLcVideoPlayer +// ----------------------------------------------------------------------------- +// +MLcBrightnessControl* CMusEngVideoPlayerBase::LcBrightnessControl() + { + return NULL; + } + +// ----------------------------------------------------------------------------- +// From MLcWindow +// ----------------------------------------------------------------------------- +// +void CMusEngVideoPlayerBase::EnableLcWindowL( TBool aEnable ) + { + iDisplayHandler.EnableDisplayL( aEnable ); + } + +// ----------------------------------------------------------------------------- +// From MLcWindow +// ----------------------------------------------------------------------------- +// +TBool CMusEngVideoPlayerBase::IsLcWindowEnabled() + { + return iDisplayHandler.IsDisplayEnabled(); + } + +// ----------------------------------------------------------------------------- +// From MLcWindow +// ----------------------------------------------------------------------------- +// +void CMusEngVideoPlayerBase::SetLcWindowRectL( TRect aRect ) + { + iDisplayHandler.SetRectL( aRect ); + } + + +// ----------------------------------------------------------------------------- +// From MLcWindow +// ----------------------------------------------------------------------------- +// +TRect CMusEngVideoPlayerBase::LcWindowRect() + { + return iDisplayHandler.Rect(); + } + +// ----------------------------------------------------------------------------- +// From MLcWindow +// ----------------------------------------------------------------------------- +// +void CMusEngVideoPlayerBase::SetLcWindowOrientationL( + TLcWindowOrientation aOrientation ) + { + if ( aOrientation == MLcWindow::ELandscape ) + { + iDisplayHandler.SetOrientationL( MMusEngDisplayHandler::ELandscape ); + } + else + { + iDisplayHandler.SetOrientationL( MMusEngDisplayHandler::EPortrait ); + } + } + +// ----------------------------------------------------------------------------- +// From MLcWindow +// ----------------------------------------------------------------------------- +// +MLcWindow::TLcWindowOrientation CMusEngVideoPlayerBase::LcWindowOrientationL() + { + MLcWindow::TLcWindowOrientation orientation; + if ( iDisplayHandler.OrientationL() == MMusEngDisplayHandler::ELandscape ) + { + orientation = MLcWindow::ELandscape; + } + else + { + orientation = MLcWindow::EPortrait; + } + return orientation; + } diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/dummymusengineplugin/src/svptimer.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/dummymusengineplugin/src/svptimer.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,112 @@ +/* +* Copyright (c) 2006 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: Timer service for SVP +* +*/ + + +#include "svptimer.h" +#include "svptimerobserver.h" + + +const TInt KMicroSecondsCoefficient = 1000; + + +// --------------------------------------------------------------------------- +// CSVPTimer::CSVPTimer +// --------------------------------------------------------------------------- +// +CSVPTimer::CSVPTimer( MSVPTimerObserver& aObserver, TInt aTimerId ): + CTimer( EPriorityHigh ), + iObserver( aObserver ), + iId( aTimerId ) + { + CActiveScheduler::Add( this ); + } + +// --------------------------------------------------------------------------- +// CSVPTimer::CSVPTimer +// --------------------------------------------------------------------------- +// +void CSVPTimer::ConstructL() + { + CTimer::ConstructL(); + } + +// --------------------------------------------------------------------------- +// CSVPTimer::CSVPTimer +// --------------------------------------------------------------------------- +// +CSVPTimer* CSVPTimer::NewL( MSVPTimerObserver& aObserver, + TInt aTimerId ) + { + CSVPTimer* self = new (ELeave) CSVPTimer( aObserver, aTimerId ); + + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + + return self; + } + +// --------------------------------------------------------------------------- +// CSVPTimer::~CSVPTimer +// --------------------------------------------------------------------------- +// +CSVPTimer::~CSVPTimer() + { + Cancel(); + } + +// --------------------------------------------------------------------------- +// CSVPTimer::RunL +// --------------------------------------------------------------------------- +// +void CSVPTimer::RunL() + { + iObserver.TimedOut( iId ); + } + +// --------------------------------------------------------------------------- +// CSVPTimer::SetTime +// --------------------------------------------------------------------------- +// +void CSVPTimer::SetTime( TInt aMilliSeconds ) + { + // Milliseconds to microseconds conversion + const TTimeIntervalMicroSeconds32 time( + KMicroSecondsCoefficient * aMilliSeconds ); + + CTimer::After( time ); // NB, CTimer::After calls SetActive + } + +// --------------------------------------------------------------------------- +// CSVPTimer::Stop +// --------------------------------------------------------------------------- +// +void CSVPTimer::Stop() + { + Cancel(); + } + +// --------------------------------------------------------------------------- +// CSVPTimer::Id +// --------------------------------------------------------------------------- +// +TInt CSVPTimer::Id() const + { + return iId; + } + +// End of File diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/ipvtengine/data/20029876.rss --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/ipvtengine/data/20029876.rss Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,40 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + +#include "registryinfov2.rh" + +RESOURCE REGISTRY_INFO theInfo + { + resource_format_version = RESOURCE_FORMAT_VERSION_2; + dll_uid = 0x20029876; + interfaces = + { + INTERFACE_INFO + { + interface_uid = 0x20021340; + implementations = + { + IMPLEMENTATION_INFO + { + implementation_uid = 0x20029876; + version_no = 1; + default_data = "Videotelephony"; + } + }; + } + }; + } diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/ipvtengine/group/bld.inf --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/ipvtengine/group/bld.inf Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,23 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + +#include + +PRJ_MMPFILES +ipvtengineplugin.mmp + + diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/ipvtengine/group/ipvtengineplugin.mmp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/ipvtengine/group/ipvtengineplugin.mmp Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,65 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + +#include + +TARGET ipvtengineplugin.dll +TARGETTYPE PLUGIN +UID 0x10009D8D 0x20029876 +VENDORID VID_DEFAULT +CAPABILITY CAP_ECOM_PLUGIN + +SOURCEPATH ../data +START RESOURCE 20029876.rss +TARGET ipvtengineplugin.rsc +END + +SOURCEPATH ../src +SOURCE musenginepluginentry.cpp +SOURCE musengsessionmanager.cpp + + +SOURCE musengmcesession.cpp +SOURCE musengtwowaysession.cpp +SOURCE musengcamerahandler.cpp +SOURCE musengvideoplayerbase.cpp +SOURCE musenglocalvideoplayer.cpp +SOURCE musenglivevideoplayer.cpp +SOURCE musengremotevideoplayer.cpp +SOURCE svptimer.cpp +SOURCE mccdatasender.cpp +SOURCE mccdatareceiver.cpp +SOURCE mccscreen.cpp + +USERINCLUDE ../inc +USERINCLUDE ../../../../../../inc + + +APP_LAYER_SYSTEMINCLUDE +SYSTEMINCLUDE /epoc32/include/ecom + +LIBRARY euser.lib +LIBRARY bafl.lib +LIBRARY centralrepository.lib +LIBRARY charconv.lib +LIBRARY cntmodel.lib ecom.lib +LIBRARY ws32.lib +LIBRARY bitgdi.lib +LIBRARY fbscli.lib +LIBRARY cone.lib +LIBRARY lcvtindicatorcontroller.lib +DEBUGLIBRARY flogger.lib diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/ipvtengine/inc/lcvtindicatorcontroller.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/ipvtengine/inc/lcvtindicatorcontroller.h Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,39 @@ +/*! +* Copyright (c) 2010 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: Handles phone indicators. +*/ + +#ifndef LCVTINDICATORCONTROLLER_H_ +#define LCVTINDICATORCONTROLLER_H_ + +// FORWARD DECLARATION + +class LcVtIndicatorControllerImpl; + +class LcVtIndicatorController + { +public: + IMPORT_C explicit LcVtIndicatorController(); + IMPORT_C virtual ~LcVtIndicatorController(); + + IMPORT_C void enableActiveCallIndicator(); + IMPORT_C void disableActiveCallIndicator(); + +private: + LcVtIndicatorControllerImpl* mIndicatorimpl; + + friend class UT_LcVtIndicatorController; + }; + +#endif /* LCVTINDICATORCONTROLLER_H_ */ diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/ipvtengine/inc/mccdatareceiver.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/ipvtengine/inc/mccdatareceiver.h Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,63 @@ +/* +* Copyright (c) 2006 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: +* +*/ + + + + +#ifndef MCCDATARECEIVER_H +#define MCCDATARECEIVER_H +#include +#include + +#include "mccdatareceiverobserver.h" +#include "mccdatastructures.h" + + +// CLASS DECLARATION + +/** +* CMccDataReceiver class declaration +*/ +class CMccDataReceiver : public CActive + { + public: + + static CMccDataReceiver* NewL( MMccDataReceiverObserver& aObserver ); + + ~CMccDataReceiver(); + + TDataMessage iInitData; + + public: // From CActive + + void DoCancel(); + void RunL(); + TInt RunError(TInt aError); + + private: + CMccDataReceiver( MMccDataReceiverObserver& aObserver ); + void ConstructL(); // second construction phase + + private: + + RMsgQueue iMsgQueue; + MMccDataReceiverObserver* iObserver; + + }; + + +#endif \ No newline at end of file diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/ipvtengine/inc/mccdatareceiverobserver.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/ipvtengine/inc/mccdatareceiverobserver.h Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,41 @@ +/* +* Copyright (c) 2006 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: +* +*/ + + + + +#ifndef MCCDATARECEIVEROBSERVER_H +#define MCCDATARECEIVEROBSERVER_H + +#include +#include "mccdatastructures.h" + +// CLASS DECLARATION + +/** +* CMccDataReceiver class declaration +*/ +class MMccDataReceiverObserver + { + public: + + virtual void DataReceived( const TDataMessage& aData ) = 0; + + }; + + +#endif \ No newline at end of file diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/ipvtengine/inc/mccdatasender.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/ipvtengine/inc/mccdatasender.h Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,64 @@ +/* +* Copyright (c) 2006 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: +* +*/ + + + + +#ifndef MCCDATASENDER_H +#define MCCDATASENDER_H +#include +#include + +#include "mccdatastructures.h" + + +// CLASS DECLARATION + +/** +* CMccPeriodicRunner class declaration +*/ +class CMccDataSender : public CActive + { + public: + + static CMccDataSender* NewL(); + + ~CMccDataSender(); + + public: + + void Send( const TDataMessage& aData ); + + public: // From CActive + + void DoCancel(); + void RunL(); + TInt RunError(TInt aError); + + private: + CMccDataSender(); + void ConstructL(); // second construction phase + + private: + + RMsgQueue iMsgQueue; + TDataMessage iBuffer; + + }; + + +#endif \ No newline at end of file diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/ipvtengine/inc/mccdatastructures.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/ipvtengine/inc/mccdatastructures.h Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,48 @@ +/* +* Copyright (c) 2006 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: +* +*/ + + + + +#ifndef MCCDATASTRUCTURES_H +#define MCCDATASTRUCTURES_H + +#include + +enum TDataId +{ + EUninitialized, + EInitComplete, + EEstablish, + EProceeding, + EEstablished, + ETerminate, + ETerminated +}; + +class TDataMessage +{ +public: + TDataId iDataId; + TInt iDataIntValue; + TBuf<50> iDataBufValue; + +}; + + + +#endif \ No newline at end of file diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/ipvtengine/inc/mccscreen.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/ipvtengine/inc/mccscreen.h Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,282 @@ +/* +* Copyright (c) 2006 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: +* +*/ + + + +#ifndef MCCSCREEN_H +#define MCCSCREEN_H + +#include +#include "svptimerobserver.h" + +class CCamera; +class MCameraDirectViewFinder; +class CSVPTimer; + +/** +* Screen for viewfinder, may use bitmap viewfinder or direct viewfinder +* depending on supported camera vf modes. +* +*/ +class CMccScreen : public CBase + { + + public: + + enum TMccScreenType + { + EBitmapScreen, + EDirectScreen + }; + + public: + + static CMccScreen* NewL( CCamera* aCamera, + TPoint aPos, + TSize aArea, + TInt aIndex, + TInt aWindowOrdinalPosition, + TInt aWindowOrdinalPriority, + TBool aSecondary, + RDrawableWindow* aParentWindow = 0); + + ~CMccScreen(); + + + + public: + + virtual void StartL(); + + virtual void Stop(); + + virtual void Draw( CFbsBitmap& aFrame ); + + virtual TInt SetCamera( CCamera* aCamera ); + + void SetPrimaryRectL(TRect aRect); + void SetSecondaryRectL(TRect aRect); + + void Update(TBool aIsForeground); + + protected: + + void StopCamera(); + + TBool VfStartPossible(); + + void ConstructL(); + + CMccScreen( TMccScreenType aScreenType, + CCamera* aCamera, + TPoint aPos, + TSize aArea, + TInt aIndex, + TInt aWindowOrdinalPosition, + TInt aWindowOrdinalPriority, + TBool aSecondary = EFalse, + RDrawableWindow* aParentWindow = 0); + + protected: + + CCamera* iCamera; + TInt iDeviceIndex; + TPoint iPosition; + TSize iArea; + TInt iWindowOrdinalPosition; + TInt iWindowOrdinalPriority; + + RWsSession iRwSession; + RWindowGroup* iRwGroup; + RWindow* iRw; + CWsScreenDevice* iDev; + + CWindowGc* iGraphicsContext; + + TMccScreenType iScreenType; + + TBool iSecondary; + TRect iPrimaryRect; + TRect iSecondaryRect; + + RDrawableWindow* iParentWindow; + + + +#ifdef TEST_EUNIT + friend class UT_CMccCameraHandler; + friend class UT_CMccScreen; +#endif + +}; + +/** +* Bitamp viewfinder screen. Uses DSA to draw vf bitmaps. +* +*/ +class CMccScreenBitmap : public CMccScreen, + public MDirectScreenAccess, + public MSVPTimerObserver + { + + public: + + static CMccScreenBitmap* NewL( CCamera* aCamera, + TPoint aPos, + TSize aArea, + TInt aIndex, + TInt aWindowOrdinalPosition, + TInt aWindowOrdinalPriority, + TBool aSecondary, + RDrawableWindow* aParentWindow = 0); + + ~CMccScreenBitmap(); + + public: // From CMccScreen + + virtual void StartL(); + + virtual void Stop(); + + virtual void Draw( CFbsBitmap& aFrame ); + + void TimedOut( TInt aTimerId ); + + private: + + void ConstructL(); + + CMccScreenBitmap( CCamera* aCamera, + TPoint aPos, + TSize aArea, + TInt aIndex, + TInt aWindowOrdinalPosition, + TInt aWindowOrdinalPriority, + TBool aSecondary, + RDrawableWindow* aParentWindow = 0); + + void Restart( RDirectScreenAccess::TTerminationReasons aReason ); + + void AbortNow( RDirectScreenAccess::TTerminationReasons aReason ); + + void StartCameraL(); + + void StartDsaL(); + + TPoint UpdateViewFinderArea( TSize aViewFinderImageSize ); + + void DoDraw( CFbsBitmap& aFrame ); + + void DoScreenDeviceUpdate(); + + void AttachFrameL( CFbsBitmap* aFrame ); + + void DetachFrame(); + + void StoreFrameDataL( CFbsBitmap& aFrame ); + + CFbsBitmap* RestoreFrameLC(); + + void DrawBlackBorders(); + + private: + + CDirectScreenAccess* iDirectScreenAccess; + CFbsBitGc* iGc; + RRegion* iRegion; + CFbsScreenDevice* iFbsDev; + + TRect iViewFinderImageRect; + + TBool iFirstImageDrawn; + + CFbsBitmap* iAttachedFrame; + + TBool iAborted; + + TSize iPausedFrameSize; + TDisplayMode iPausedFrameDisplayMode; + HBufC8* iPausedFrameData; + + TBool iStopped; + + CSVPTimer* iTimer; + + +#ifdef TEST_EUNIT + friend class UT_CMccCameraHandler; + friend class UT_CMccScreen; +#endif + + }; + +/** +* Direct viewfinder screen. +* +*/ +class CMccScreenDirect : public CMccScreen + { + + public: + + static CMccScreenDirect* NewL( CCamera* aCamera, + TPoint aPos, + TSize aArea, + TInt aIndex, + TInt aWindowOrdinalPosition, + TInt aWindowOrdinalPriority ); + + ~CMccScreenDirect(); + + + + public: // From CMccScreen + + virtual void StartL(); + + virtual void Stop(); + + virtual TInt SetCamera( CCamera* aCamera ); + + private: + + void ConstructL(); + + CMccScreenDirect( + CCamera* aCamera, + TPoint aPos, + TSize aArea, + TInt aIndex, + TInt aWindowOrdinalPosition, + TInt aWindowOrdinalPriority ); + + void StartDirectViewFinderL(); + + TInt HandleDirectViewFinder(); + + private: + + MCameraDirectViewFinder* iDirectViewFinder; + +#ifdef TEST_EUNIT + friend class UT_CMccCameraHandler; + friend class UT_CMccScreen; +#endif + + }; + +#endif diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/ipvtengine/inc/musengcamerahandler.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/ipvtengine/inc/musengcamerahandler.h Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,122 @@ +/* +* 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: +* +*/ + + +#ifndef MUSHENGCAMERAHANDLER_H +#define MUSHENGCAMERAHANDLER_H + +// USER +#include "lccameracontrol.h" +#include "lcbrightnesscontrol.h" +#include "lczoomcontrol.h" + +// SYSTEM +#include +#include + +class CMusEngMceSession; + +// CLASS + +class TMusEngCameraHandler : + public MLcCameraControl, + public MLcBrightnessControl, + public MLcZoomControl + { + + public: // From MLcCameraControl + + TInt LcCameraCountL(); + + TInt CurrentLcCameraIndex(); + + void ToggleLcCameraL(); + + public: // From MLcBrightnessControl + + TInt MinLcBrightnessL(); + + TInt MaxLcBrightnessL(); + + TInt LcBrightnessL(); + + void SetLcBrightnessL( TInt aValue ); + + void IncreaseLcBrightnessL(); + + void DecreaseLcBrightnessL(); + + public: // From MLcZoomControl + + TInt MinLcZoomL(); + + TInt MaxLcZoomL(); + + TInt LcZoomValueL(); + + void SetLcZoomValueL( TInt aValue ); + + void LcZoomInL(); + + void LcZoomOutL(); + + public: + + TMusEngCameraHandler(); + + TInt ZoomStepSize( TInt64& aTime ); + + void SetSession( CMusEngMceSession* aSession ); + + TBool IsPlayingL(); + void PlayL(); + void PauseL(); + + + private: + + enum TCurrentCamera + { + ECameraNotAvailable = KErrNotFound, + EBackCamera = 0, + EFrontCamera = 1 + }; + + + private: // Data + + + TCameraInfo iCameraInfo; + + TInt iDefaultBrightness; + + TInt64 iZoomInTime; + + TInt64 iZoomOutTime; + + TInt iSmallZoomStep; + + TInt iBigZoomStep; + + TCurrentCamera iCurrentCamera; + + CMusEngMceSession* iMusSession; + TBool iPlaying; + }; + +#endif + diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/ipvtengine/inc/musengdisplayhandler.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/ipvtengine/inc/musengdisplayhandler.h Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,109 @@ +/* +* 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: +* +*/ + + +#ifndef MUSHENGDISPLAYHANDLER_H +#define MUSHENGDISPLAYHANDLER_H + + +#include + +// CLASS DECLARATION + +/** +* An Interface for display services +* +* @lib museng.lib +* @since S60 v3.2 +*/ +class MMusEngDisplayHandler + { + + public: + + /* + * Defines possible rotations + */ + enum TDisplayOrientation + { + EPortrait, // Normal + ELandscape // 90 degree's clockwise rotation + }; + + /** + * Returns currently assigned drawing area + * + * @return TRect This session drawing area rectangle + */ + virtual TRect Rect() const = 0; + + /** + * Sets new drawing area + * + * @param TRect This session new drawing area rectangle + */ + virtual void SetRectL( const TRect& aRect ) = 0; + + /** + * Sets secondary rect (e.g. viewfinder in twoway session) + * @param TRect This session new secondary drawing area rectangle + */ + virtual void SetSecondaryRectL( const TRect& aSecondaryRect ) = 0; + + /** + * Gets secondary rect. + * @return TRect This session secondary drawing area rectangle + */ + virtual TRect SecondaryRect() const = 0; + + /** + * Enables or disables display. Call to this function is considered + * as a permission or denial to draw to the display. + */ + virtual void EnableDisplayL( TBool aEnable ) = 0; + + /** + * Check whether display is enabled + */ + virtual TBool IsDisplayEnabled() = 0; + + /** + * Returns current display orientation. + * + * @pre Session is ongoing + * @return Current display orientation + * @leave KErrNotReady if precondition is not fullfilled + */ + virtual TDisplayOrientation OrientationL() = 0; + + /** + * Sets display orientation. + * + * @pre Session is ongoing + * @return Sets display orientation + * @leave KErrNotReady if precondition is not fullfilled + */ + virtual void SetOrientationL( TDisplayOrientation aOrientation ) = 0; + + /** + * Check if display is actively displaying content + * @return ETrue if is displaying content, otherwise EFalse + */ + virtual TBool IsDisplayActive() = 0; + }; + +#endif diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/ipvtengine/inc/musenglivevideoplayer.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/ipvtengine/inc/musenglivevideoplayer.h Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,83 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + + +#ifndef MUSHENGLIVEVIDEOPLAYER_H +#define MUSHENGLIVEVIDEOPLAYER_H + +// INCLUDES +#include "musenglocalvideoplayer.h" +#include "lcdestinationfilecontrol.h" + +// FORWARD DECLARATIONS +class CMceSession; +class TMusEngCameraHandler; + +// CLASS DECLARATION +class CMusEngLiveVideoPlayer : + public CMusEngLocalVideoPlayer, + public MLcDestinationFileControl + { + public: // Constructors and destructor + + static CMusEngLiveVideoPlayer* NewL( + MMusEngDisplayHandler& aDisplayHandler, + TMusEngCameraHandler& aCameraHandler, + MLcAudioControl& aLcAudioControl ); + + ~CMusEngLiveVideoPlayer(); + + public: // From MLcVideoPlayer + + TBool LcIsPlayingL(); + + void LcPlayL(); + + void LcPauseL(); + + MLcCameraControl* LcCameraControl(); + + MLcDestinationFileControl* LcDestinationFileControl(); + + MLcZoomControl* LcZoomControl(); + + MLcBrightnessControl* LcBrightnessControl(); + + public: // From MLcDestinationFileControl + + void SetLcFileNameL( const TFileName& aFileName ); + + TFileName& LcFileName(); + + void LcRecordL( TBool aRecord ); + + TBool LcIsRecording(); + + private: // Constructors + + CMusEngLiveVideoPlayer( + MMusEngDisplayHandler& aDisplayHandler, + TMusEngCameraHandler& aCameraHandler, + MLcAudioControl& aLcAudioControl ); + + private: // Data + + TFileName iFileName; + TMusEngCameraHandler& iCameraHandler; + }; + +#endif // MUSHENGLIVEVIDEOPLAYER_H diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/ipvtengine/inc/musenglocalvideoplayer.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/ipvtengine/inc/musenglocalvideoplayer.h Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,49 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + + +#ifndef MUSHENGLOCALVIDEOPLAYER_H +#define MUSHENGLOCALVIDEOPLAYER_H + +// INCLUDES +#include "musengvideoplayerbase.h" + +// CLASS DECLARATION +class CMusEngLocalVideoPlayer : public CMusEngVideoPlayerBase + { + public: // Constructors and destructor + + ~CMusEngLocalVideoPlayer(); + + public: // from CMusEngVideoPlayerBase + + TLcVideoPlayerState LcVideoPlayerState() const; + + void SetLcWindowRectL( TRect aRect ); + + TRect LcWindowRect(); + + TLcVideoPlayerState iState; + + protected: // Constructors + + CMusEngLocalVideoPlayer( + MMusEngDisplayHandler& aDisplayHandler, + MLcAudioControl& aLcAudioControl ); + }; + +#endif // MUSHENGLOCALVIDEOPLAYER_H diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/ipvtengine/inc/musenglogger.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/ipvtengine/inc/musenglogger.h Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,301 @@ +/* +* Copyright (c) 2006 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: ?Description +* +*/ + + +#ifndef MUSENGLOGGER_H +#define MUSENGLOGGER_H + + +#include "muslogger.h" + +#if ( !_DEBUG || UNIT_TESTING ) // release or unit test build; no logs + +#define MUS_ENG_LOG_SESSION_STATE( aSession ) +#define MUS_ENG_LOG_SESSION_STATE_AND_STATUS( aSession, aStatusCode, aReasonPhrase ) +#define MUS_ENG_LOG_STREAM_STATE( aStream ) +#define MUS_ENG_LOG_SINK_STATES( aStream ) +#define MUS_ENG_LOG_SOURCE_STATE( aSource ) +#define MUS_ENG_LOG_SINK_STATE( aSink ) +#define MUS_ENG_LOG_STATUS( aStatusCode, aReasonPhrase ) + +#else // debug build; logs + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define MUS_ENG_LOG_SESSION_STATE( aSession )\ + {\ + TBuf<15> state;\ + switch ( (aSession).State() )\ + {\ + case CMceSession::EIdle:\ + {\ + state = _L("EIdle");\ + break;\ + }\ + case CMceSession::EOffering :\ + {\ + state = _L("EOffering");\ + break;\ + }\ + case CMceSession::EIncoming:\ + {\ + state = _L("EIncoming");\ + break;\ + }\ + case CMceSession::EReserving :\ + {\ + state = _L("EReserving");\ + break;\ + }\ + case CMceSession::EAnswering :\ + {\ + state = _L("EAnswering");\ + break;\ + }\ + case CMceSession::EProceeding :\ + {\ + state = _L("EProceeding");\ + break;\ + }\ + case CMceSession::EEstablished:\ + {\ + state = _L("EEstablished");\ + break;\ + }\ + case CMceSession::ECancelling:\ + {\ + state = _L("ECancelling");\ + break;\ + }\ + case CMceSession::ETerminating:\ + {\ + state = _L("ETerminating");\ + break;\ + }\ + case CMceSession::ETerminated:\ + {\ + state = _L("ETerminated");\ + break;\ + }\ + default:\ + {\ + state = _L("Unknown");\ + break;\ + }\ + }\ + MUS_LOG_TDESC( "mus: [ENGINE] Session state is ", state )\ + } + + +#define MUS_ENG_LOG_SESSION_STATE_AND_STATUS( aSession, aStatusCode, aReasonPhrase )\ + {\ + MUS_ENG_LOG_SESSION_STATE( aSession )\ + MUS_ENG_LOG_STATUS( aStatusCode, aReasonPhrase )\ + } + + +#define MUS_ENG_LOG_STREAM_STATE( aStream )\ + {\ + TBuf<20> streamState;\ + switch ( (aStream).State() )\ + {\ + case CMceMediaStream::EUninitialized:\ + {\ + streamState = _L("EIdle");\ + break;\ + }\ + case CMceMediaStream::EInitialized:\ + {\ + streamState = _L("EInitialized");\ + break;\ + }\ + case CMceMediaStream::EBuffering:\ + {\ + streamState = _L("EBuffering");\ + break;\ + }\ + case CMceMediaStream::EIdle:\ + {\ + streamState = _L("EIdle");\ + break;\ + }\ + case CMceMediaStream::EStreaming:\ + {\ + streamState = _L("EStreaming");\ + break;\ + }\ + case CMceMediaStream::EDisabled:\ + {\ + streamState = _L("EDisabled");\ + break;\ + }\ + case CMceMediaStream::ENoResources:\ + {\ + streamState = _L("ENoResources");\ + break;\ + }\ + case CMceMediaStream::ETranscodingRequired:\ + {\ + streamState = _L("ETranscodingRequired");\ + break;\ + }\ + case CMceMediaStream::ETranscoding:\ + {\ + streamState = _L("ETranscoding");\ + break;\ + }\ + default:\ + {\ + streamState = _L("Unknown");\ + break;\ + }\ + }\ + if ( (aStream).Type() == KMceAudio )\ + {\ + MUS_LOG_TDESC( "mus: [ENGINE] AudioStream state is ", streamState )\ + }\ + else\ + {\ + MUS_LOG_TDESC( "mus: [ENGINE] VideoStream state is ", streamState )\ + }\ + MUS_ENG_LOG_SOURCE_STATE( (aStream).Source() )\ + MUS_ENG_LOG_SINK_STATES( (aStream) )\ + } + + +#define MUS_ENG_LOG_SINK_STATES( aStream )\ + {\ + for ( TInt sinkIndex = 0; sinkIndex < aStream.Sinks().Count(); ++sinkIndex )\ + {\ + MUS_ENG_LOG_SINK_STATE( aStream.Sinks()[ sinkIndex ] )\ + }\ + } + + +#define MUS_ENG_LOG_SOURCE_STATE( aSource )\ + {\ + if ( aSource )\ + {\ + TBuf<10> sourceState;\ + if ( aSource->IsEnabled() )\ + {\ + sourceState = _L("enabled");\ + }\ + else\ + {\ + sourceState = _L("disabled");\ + }\ + switch ( aSource->Type() )\ + {\ + case KMceCameraSource:\ + {\ + MUS_LOG_TDESC( " CameraSource is ", sourceState )\ + break;\ + }\ + case KMceFileSource:\ + {\ + MUS_LOG_TDESC( " FileSource is ", sourceState )\ + break;\ + }\ + case KMceRTPSource:\ + {\ + MUS_LOG_TDESC( " RtpSource is ", sourceState )\ + break;\ + }\ + default:\ + {\ + MUS_LOG_TDESC( " UnknownSource is ", sourceState )\ + break;\ + }\ + }\ + }\ + else\ + {\ + MUS_LOG( " No source in stream" )\ + }\ + } + +#define MUS_ENG_LOG_SINK_STATE( aSink )\ + {\ + if ( aSink )\ + {\ + TBuf<10> sinkState;\ + if ( aSink->IsEnabled() )\ + {\ + sinkState = _L("enabled");\ + }\ + else\ + {\ + sinkState = _L("disabled");\ + }\ + switch ( aSink->Type() )\ + {\ + case KMceDisplaySink:\ + {\ + MUS_LOG_TDESC( " DisplaySink is ", sinkState )\ + break;\ + }\ + case KMceSpeakerSink:\ + {\ + MUS_LOG_TDESC( " SpeakerSink is ", sinkState )\ + break;\ + }\ + case KMceRTPSink:\ + {\ + MUS_LOG_TDESC( " RtpSink is ", sinkState )\ + break;\ + }\ + case KMceFileSink:\ + {\ + MUS_LOG_TDESC( " FileSink is ", sinkState )\ + break;\ + }\ + default:\ + {\ + MUS_LOG_TDESC( " UnknownSink is ", sinkState )\ + break;\ + }\ + }\ + }\ + } + + +#define MUS_ENG_LOG_STATUS( aStatusCode, aReasonPhrase )\ + {\ + MUS_LOG1( " StatusCode is %d", aStatusCode )\ + HBufC16* reasonPhrase = HBufC16::NewLC( aReasonPhrase.Length() );\ + reasonPhrase->Des().Copy( aReasonPhrase );\ + MUS_LOG_TDESC( " ReasonPhrase is ",(*reasonPhrase) )\ + CleanupStack::PopAndDestroy( reasonPhrase );\ + } + + + +#endif // _DEBUG + + +#endif // MUSENGLOGGER_H + +// End of File diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/ipvtengine/inc/musengmcesession.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/ipvtengine/inc/musengmcesession.h Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,295 @@ +/* +* 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: +* +*/ + + +#ifndef MUSENGMCESESSION_H +#define MUSENGMCESESSION_H + +// USER +#include "musengcamerahandler.h" +#include "musengdisplayhandler.h" +#include "lcsession.h" +#include "lcaudiocontrol.h" +#include "svptimerobserver.h" + +#include + +#include + + +// FORWARD DECLARATIONS +class CContactTextField; +class CPbkContactItem; +class CPbkContactEngine; +class MLcSessionObserver; +class CMusEngLiveVideoPlayer; +class CMusEngRemoteVideoPlayer; +class CSVPTimer; +class CMccScreen; + + +// CONSTANTS + +_LIT8( KMusEngAcceptContactHeader, + "Accept-Contact: *;+g.3gpp.cs-voice; explicit" ); +_LIT8( KMusAcceptHeader, + "Accept: application/sdp" ); +_LIT8( KMusEngSessionSdpLineXApplication, "a=X-application:com.nokia.rtvs\r\n" ); +_LIT8( KMusEngSessionSdpLineApplication , "a=application:com.gsma.rts\r\n" ); +_LIT8( KMusEngSessionSdpLineType, "a=type:videolive\r\n" ); +_LIT8( KMusEngSessionSdpLineBandwidthLine , "b=AS:" ); +_LIT8( KMusEngSessionSdpLineBandwidthField , "b=AS:85\r\n" ); +_LIT8( KMusEngSessionSdpLineTiasLine , "b=TIAS:" ); +_LIT8( KMusPPreferredIdentity, "P-Preferred-Identity" ); +_LIT8( KMusEngNewLine , "\r\n" ); + +const TInt KMusTiasMultiplier = 1000; +const TUint8 KMusEngRtpKeepAliveTimer = 5; +const TUint8 KMusEngKeepAlivePayloadTypeVideoH263 = 96; +const TUint8 KMusEngKeepAlivePayloadTypeAudio = 97; +const TUint8 KMusEngKeepAlivePayloadTypeVideoAvc = 98; + +// CLASS DECLARATION + +/** +* Base class for Multimedia Sharing Engine MCE sessions, inherited by +* CMusEngLiveSession CMusEngClipSession and CMusEngReceiveSession. +* +* CMusEngMceSession encapsulates CMCESession and simplifies use of +* MCE Sessions to user interface. Also splits observers messy events +* to simplified function calls. +* +* @lib musengine.lib +*/ +class CMusEngMceSession : public CBase, + public MLcSession, + public MLcAudioControl, + public MMusEngDisplayHandler, + public MSVPTimerObserver + { + public: + + /** + * Destructor + */ + ~CMusEngMceSession(); + + void SetRemoteL( const TDesC& aRemote ); + void ToggleCameraL(); + void PlayCameraL(); + void PauseCameraL(); + void InformUiProviderAboutReceivingStart(); + + public: // from MSVPTimerObserver + + virtual void TimedOut( TInt aTimerId ); + + + public: // from MMusEngDisplayHandler + + /** + * Returns currently assigned drawing area + * + * @return TRect This session drawing area rectangle + */ + TRect Rect() const; + + /** + * Sets new drawing area + * + * @param TRect This session new drawing area rectangle + */ + void SetRectL( const TRect& aRect ); + + /** + * Sets secondary rect (e.g. viewfinder in twoway session) + * @param TRect This session new secondary drawing area rectangle + */ + void SetSecondaryRectL( const TRect& aSecondaryRect ); + + /** + * Gets secondary rect. + * @return TRect This session secondary drawing area rectangle + */ + virtual TRect SecondaryRect() const; + + /** + * Returns current display orientation. + * + * @pre Session is ongoing + * @return Current display orientation + * @leave KErrNotReady if precondition is not fullfilled + */ + TDisplayOrientation OrientationL(); + + /** + * Sets display orientation. + * + * @pre Session is ongoing + * @return Sets display orientation + * @leave KErrNotReady if precondition is not fullfilled + */ + void SetOrientationL( TDisplayOrientation aOrientation ); + + /** + * Permission to draw on screen device. + * + * @pre Session is ongoing + */ + void EnableDisplayL( TBool aEnable ); + + /** + * Implements virtual from MMusEngDisplayHandler + * + * @pre Session is ongoing + */ + TBool IsDisplayEnabled(); + + /** + * Implements virtual from MMusEngDisplayHandler + * + * @pre Session is ongoing + */ + TBool IsDisplayActive(); + + + public: // From MMusEngAudioRoutingObserver + + void AudioRoutingChanged(); + + + public: // From MLcSession + + virtual TLcSessionState LcSessionState() const; + + void SetLcSessionObserver( MLcSessionObserver* aObserver ); + + void SetLcUiProvider( MLcUiProvider* aUiProvider ); + + virtual MLcVideoPlayer* RemoteVideoPlayer(); + + virtual MLcVideoPlayer* LocalVideoPlayer(); + + virtual const TDesC& LocalDisplayName(); + + virtual const TDesC& RemoteDisplayName(); + + TInt SetParameter( TInt aId, TInt aValue ); + + TInt ParameterValue( TInt aId ); + + TBool IsBackgroundStartup(); + + TInt SetForegroundStatus( TBool aIsForeground ); + + const TDesC& RemoteDetails(); + + TBool SendDialTone( TChar aKey); + + + public: // From MLcAudioControl + + TBool IsLcAudioMutedL(); + + void MuteLcAudioL( TBool aMute ); + + TBool IsLcMicMutedL(); + + void MuteLcMicL( TBool aMute ); + + TBool IsEnablingLcLoudspeakerAllowed(); + + void EnableLcLoudspeakerL( TBool aEnabled ); + + TBool IsLcLoudspeakerEnabled(); + + TInt LcVolumeL(); + + void SetLcVolumeL( TInt aValue ); + + void IncreaseLcVolumeL(); + + void DecreaseLcVolumeL(); + + + protected: // CONSTRUCTORS + + /** + * Constructor + * + */ + CMusEngMceSession(); + + /** + * Second-phase constructor + */ + void ConstructL(); + + protected: // Data + + /** + * Drawing area rect. + */ + TRect iRect; + + /** + * ETrue if operator specific behavior is expected + */ + TBool iOperatorVariant; + + /** + * Session state for MLcSession + */ + MLcSession::TLcSessionState iLcSessionState; + + TMusEngCameraHandler iCameraHandler; + + CMusEngLiveVideoPlayer* iLiveVideoPlayer; + CMusEngRemoteVideoPlayer* iRemoteVideoPlayer; + TRect iSetRemoteRect; + TRect iSetLocalRect; + CSVPTimer* iTimer; + TLcSessionState lLcSessionState; + HBufC* iRemoteAddress; + CMccScreen* iScreen; + + private: // Data + + /** + * The session observer, if present. + */ + MLcSessionObserver* iLcSessionObserver; + + /** + * The UI provider, if present. + */ + MLcUiProvider* iLcUiProvider; + + /** + * Value indicates whether session was started in background mode. + * (see IsBackgroundStartup()). Once sending of video started, + * iBackground is set to EFalse + */ + TBool iBackground; + + // indicator control + LcVtIndicatorController* iIndicatorCtr; + + + }; + +#endif // MUSENGMCESESSION_H diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/ipvtengine/inc/musengremotevideoplayer.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/ipvtengine/inc/musengremotevideoplayer.h Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,60 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + + +#ifndef MUSHENGREMOTEVIDEOPLAYER_H +#define MUSHENGREMOTEVIDEOPLAYER_H + +// INCLUDES +#include +#include "musengvideoplayerbase.h" + +// FORWARD DECLARATIONS +class CMceSession; +class MLcWindow; +class MLcAudioControl; + +// CLASS DECLARATION +class CMusEngRemoteVideoPlayer : public CMusEngVideoPlayerBase + { + public: // Constructors and destructor + + static CMusEngRemoteVideoPlayer* NewL( MMusEngDisplayHandler& aDisplayHandler, + MLcAudioControl& aLcAudioControl ); + + ~CMusEngRemoteVideoPlayer(); + + + public: // from CMusEngVideoPlayerBase + + TLcVideoPlayerState LcVideoPlayerState() const; + + TBool LcIsPlayingL(); + + TLcVideoPlayerState iState; + + private: // Constructors + + CMusEngRemoteVideoPlayer( MMusEngDisplayHandler& aDisplayHandler, + MLcAudioControl& aLcAudioControl ); + void ConstructL(); + + private: // Data + + }; + +#endif // MUSHENGREMOTEVIDEOPLAYER_H diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/ipvtengine/inc/musengsessionmanager.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/ipvtengine/inc/musengsessionmanager.h Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,69 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + +#ifndef CMUSENGSESSIONMANAGER_H +#define CMUSENGSESSIONMANAGER_H + +// INCLUDES +#include "lcengine.h" +#include "mccdatareceiverobserver.h" + +// FORWARD DECLARATIONS +class MLcSession; +class CMusEngMceSession; +class MLcUiProvider; +class CMccDataReceiver; +class CMccDataSender; + +class CMusEngSessionManager : public CLcEngine, public MMccDataReceiverObserver + { + public: + + static CMusEngSessionManager* NewL(); + ~CMusEngSessionManager(); + + void DataReceived( const TDataMessage& aData ); + + public: // From CLcEngine + + MLcSession& Session(); + + TBool IsFeatureSupported( TLcFeature aLcFeature ); + + private: // Constructors + + CMusEngSessionManager(); + void ConstructL(); + + private: // Data + + CMusEngMceSession* iSession; + + CMccDataReceiver* iMsgReceiver; + CMccDataSender* iMsgSender; + + private: // Constants + + static const int VTSETTING_ALWAYS_ASK_FIRST = 0; + static const int VTSETTING_DO_NOT_SHOW = 1; + static const int VTSETTING_SHOW_AUTOMATICALLY = 2; + + }; + +#endif // CMUSENGSESSIONMANAGER_H + +// end of file diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/ipvtengine/inc/musengtwowayrecvsession.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/ipvtengine/inc/musengtwowayrecvsession.h Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,141 @@ +/* +* 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: +* +*/ + + +#ifndef MUSHENGTWOWAYRECVSESSION_H +#define MUSHENGTWOWAYRECVSESSION_H + +// USER +#include "musengreceivesession.h" +#include "musunittesting.h" +#include "mussettings.h" +#include "musengcamerahandler.h" + +// SYSTEM +#include + +// FORWARD DECLARATIONS +class CMceDisplaySink; +class CMceStreamBundle; +class CMusEngLiveVideoPlayer; + + +class CMusEngTwoWayRecvSession : public CMusEngReceiveSession + { + MUS_UNITTEST( UT_CMusEngTwoWayRecvSession ) + + + public: + /** + * Creates new MultimediaSharing two-way receive session. + * @return CMusEngTwoWayRecvSession* New instanse of specified class + */ + static CMusEngTwoWayRecvSession* NewL(); + + public: + + /** + * Destructor + */ + ~CMusEngTwoWayRecvSession(); + + public: + + void EnableDisplayL( TBool aEnable ); + + CMusEngMceSession::TDisplayOrientation OrientationL(); + + void SetOrientationL( TDisplayOrientation aOrientation ); + + public: + + /** + * Sets both remote (receiving video) and local (viewfinder) rects. + * + */ + void SetRectsL( const TRect& aRemoteRect, + const TRect& aLocalRect ); + + /** + * Gets camera handler (can be used for zooming etc.) + */ + TMusEngCameraHandler& Camera(); + + public: // from MLcSession + + MLcVideoPlayer* LocalVideoPlayer(); + + protected: // From CMusEngReceiveSession + + /** + * Sets local rect (viewfinder). + * + */ + void SetSecondaryRectL( const TRect& aSecondaryRect ); + + /** + * Gets local rect (viewfinder). + * + */ + TRect SecondaryRect() const; + + void CompleteSessionStructureL(); + + void RectChangedL(); + + private: + + /** + * Constructor + */ + CMusEngTwoWayRecvSession(); + + /** + * Second-phase constructor + */ + void ConstructL(); + + private: + + void CompleteSessionStructureAudioPartL( + const RPointerArray& aStreams, + CMceStreamBundle& aLocalBundle, + CMceMediaStream* aVideoInStream, + CMceMediaStream* aVideoOutStream ); + + void CompleteSessionStructureInStreamL( CMceMediaStream& aVideoInStream, + CMceStreamBundle& aLocalBundle ); + + void CompleteSessionStructureOutStreamL( CMceMediaStream& aVideoOutStream ); + + + private: + + TRect iLocalRect; + + TMusEngCameraHandler iCameraHandler; + + /// The live video player implementing MLcVideoPlayer + CMusEngLiveVideoPlayer* iLiveVideoPlayer; + + TRect iSetRemoteRect; + TRect iSetLocalRect; + + }; + +#endif + diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/ipvtengine/inc/musengtwowaysession.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/ipvtengine/inc/musengtwowaysession.h Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,88 @@ +/* +* 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: +* +*/ + + +#ifndef MUSHENGTWOWAYSESSION_H +#define MUSHENGTWOWAYSESSION_H + +// USER +#include "musengmcesession.h" + +// SYSTEM +#include + +// FORWARD DECLARATIONS +class MMusEngLiveSessionObserver; +class CMceDisplaySink; +class MMusEngTwoWaySessionObserver; +class CMusEngRemoteVideoPlayer; + + +class CMusEngTwoWaySession : public CMusEngMceSession + { + public: + /** + * Creates new MultimediaSharing Live session. + * @return CMusEngTwoWaySession* New instanse of specified class + */ + static CMusEngTwoWaySession* NewL(); + + + public: + + /** + * Destructor + */ + ~CMusEngTwoWaySession(); + + public: + + void EnableDisplayL( TBool aEnable ); + + void SetOrientationL( MMusEngDisplayHandler::TDisplayOrientation aOrientation ); + + void EstablishLcSessionL(); + + void TerminateLcSessionL(); + + void UpdateLcSessionL(); + + public: + + /** + * Sets both remote (receiving video) and local (viewfinder) rects. + * + */ + void SetRectsL( const TRect& aRemoteRect, + const TRect& aLocalRect ); + + private: + + /** + * Constructor + */ + CMusEngTwoWaySession(); + + /** + * Second-phase constructor + */ + void ConstructL(); + + }; + +#endif + diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/ipvtengine/inc/musengvideoplayerbase.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/ipvtengine/inc/musengvideoplayerbase.h Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,90 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + + +#ifndef MUSHENGVIDEOPLAYERBASE_H +#define MUSHENGVIDEOPLAYERBASE_H + +// INCLUDES +#include +#include "lcvideoplayer.h" +#include "lcwindow.h" + +// FORWARD DECLARATIONS +class TMusEngCameraHandler; +class MMusEngDisplayHandler; + +// CLASS DECLARATION +class CMusEngVideoPlayerBase : + public CBase, public MLcVideoPlayer, public MLcWindow + { + public: // Constructors and destructor + + ~CMusEngVideoPlayerBase(); + + public: // From MLcVideoPlayer + + virtual void LcPlayL(MLcVideoPlayer::TLcVideoPlayerSource aSource); + + virtual void LcPauseL(); + + MLcWindow* LcWindow(); + + virtual MLcCameraControl* LcCameraControl(); + + virtual MLcSourceFileControl* LcSourceFileControl(); + + virtual MLcDestinationFileControl* LcDestinationFileControl(); + + MLcAudioControl* LcAudioControl(); + + virtual MLcZoomControl* LcZoomControl(); + + virtual MLcBrightnessControl* LcBrightnessControl(); + + virtual MLcVideoPlayer::TLcVideoPlayerSource LcVideoPlayerSourceL(); + + + public: // from MLcWindow + + void EnableLcWindowL( TBool aEnable ); + + TBool IsLcWindowEnabled(); + + void SetLcWindowRectL( TRect aRect ); + + TRect LcWindowRect(); + + void SetLcWindowOrientationL( + TLcWindowOrientation aOrientation ); + + TLcWindowOrientation LcWindowOrientationL(); + + protected: // Constructors + + CMusEngVideoPlayerBase( + MMusEngDisplayHandler& aDisplayHandler, + MLcAudioControl& aLcAudioControl ); + + protected: // Data + + MMusEngDisplayHandler& iDisplayHandler; + MLcAudioControl& iLcAudioControl; + MLcVideoPlayer::TLcVideoPlayerSource iVideoPlayerSource; + }; + +#endif // MUSHENGVIDEOPLAYERBASE_H diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/ipvtengine/inc/svptimer.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/ipvtengine/inc/svptimer.h Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,112 @@ +/* +* Copyright (c) 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: Timer services for SVP +* +*/ + + + +#ifndef SVPTIMER_H +#define SVPTIMER_H + +#include + +class MSVPTimerObserver; + +/** + * SVP timer + * + * Provides timer service for SVP + * + * @lib + * @since S60 3.2 + */ +class CSVPTimer : public CTimer + { + +public: + + /** + * Two-phased constructor. + */ + static CSVPTimer* NewL( MSVPTimerObserver& aObserver, + TInt aTimerId ); + + /** + * Destructor. + */ + virtual ~CSVPTimer(); + +public: // new methods + + /** + * Sets the timer to be fired after given number of milliseconds. + * @since Series 60 3.2 + * @param aMilliSeconds Time in milliseconds + * @return + */ + void SetTime( TInt aMilliSeconds, TInt aTimerId ); + + /** + * Stops the timer. + * @since Series 60 3.2 + * @return + */ + void Stop(); + + /** + * Returns the Timer ID + * @since Series 60 3.2 + * @return TInt The timer ID. + */ + TInt Id() const; + +public: // methods from base classes + + /** + * From CActive Called when an aychronic request is completed. + * @since Series 60 3.0 + * @param None + * @return None + */ + void RunL(); + +private: + + /** + * C++ default constructor. + */ + CSVPTimer( MSVPTimerObserver& aObserver, TInt aTimerId ); + + /** + * By default Symbian 2nd phase constructor is private. + */ + void ConstructL(); + +private: // data + + /** + * Reference to the observer. + */ + MSVPTimerObserver& iObserver; + + /** + * The timer ID, given to observer when the timer fires. + * Timers can be identifies with this ID. + */ + TInt iId; + + }; + +#endif // SVPTIMER_H \ No newline at end of file diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/ipvtengine/inc/svptimerobserver.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/ipvtengine/inc/svptimerobserver.h Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,50 @@ +/* +* Copyright (c) 2006 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: Observer for SVP timer +* +*/ + + +#ifndef SVPTIMEROBSERVER_H +#define SVPTIMEROBSERVER_H + +#include + +/** + * SVP timer observer + * + * Observer for SVP timer + * + * @lib + * @since S60 3.2 + */ +class MSVPTimerObserver + { + +public: // New functions + + /** + * Notifies, that the previously set timer has now expired. + * Implemented by the class using the timer. + * @since Series 60 3.2 + * @param TInt aTimerId The ID of the timer. Observer can identify + * timers from each other with this ID. + * @return + */ + virtual void TimedOut( TInt aTimerId ) = 0; + + + }; + +#endif // SVPTIMEROBSERVER_H diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/ipvtengine/src/mccdatareceiver.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/ipvtengine/src/mccdatareceiver.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,107 @@ +/* +* Copyright (c) 2006 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: +* +*/ + + +// INCLUDE FILES +#include "mccdatareceiver.h" + + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CMccDataReceiver::CMccDataReceiver +// ----------------------------------------------------------------------------- +// +CMccDataReceiver::CMccDataReceiver( MMccDataReceiverObserver& aObserver ) + : CActive( EPriorityStandard ), iObserver( &aObserver ) + { + CActiveScheduler::Add(this); + } + +// ----------------------------------------------------------------------------- +// CMccDataReceiver::ConstructL +// ----------------------------------------------------------------------------- +// +void CMccDataReceiver::ConstructL() + { + + TInt err = iMsgQueue.CreateGlobal(_L("IP-VT-Queue2"), 5, EOwnerProcess ); + if ( err ) + { + User::LeaveIfError( iMsgQueue.OpenGlobal(_L("IP-VT-Queue2"))); + } + + iMsgQueue.ReceiveBlocking( iInitData ); + + iMsgQueue.NotifyDataAvailable( iStatus ); + SetActive(); + } + +// ----------------------------------------------------------------------------- +// CMccDataReceiver::NewL +// ----------------------------------------------------------------------------- +// +CMccDataReceiver* CMccDataReceiver::NewL( MMccDataReceiverObserver& aObserver ) + { + CMccDataReceiver* self = + new ( ELeave ) CMccDataReceiver( aObserver ); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + return self; + } + +// ----------------------------------------------------------------------------- +// CMccDataReceiver::~CMccDataReceiver +// ----------------------------------------------------------------------------- +// +CMccDataReceiver::~CMccDataReceiver() + { + Cancel(); + iMsgQueue.Close(); + } + +// ----------------------------------------------------------------------------- +// CMccDataReceiver::DoCancel +// ----------------------------------------------------------------------------- +// +void CMccDataReceiver::DoCancel() + { + iMsgQueue.CancelDataAvailable(); + } + +// ----------------------------------------------------------------------------- +// CMccDataReceiver::RunL +// ----------------------------------------------------------------------------- +// +void CMccDataReceiver::RunL() + { + TDataMessage buffer; + iMsgQueue.Receive( buffer ); + iObserver->DataReceived( buffer ); + iMsgQueue.NotifyDataAvailable( iStatus ); + SetActive(); + } + +// ----------------------------------------------------------------------------- +// CMccDataReceiver::RunError +// ----------------------------------------------------------------------------- +// +TInt CMccDataReceiver::RunError(TInt /*aError*/) + { + return KErrNone; + } diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/ipvtengine/src/mccdatasender.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/ipvtengine/src/mccdatasender.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,122 @@ +/* +* Copyright (c) 2006 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: +* +*/ + + +// INCLUDE FILES +#include "mccdatasender.h" + + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CMccDataSender::CMccDataSender +// ----------------------------------------------------------------------------- +// +CMccDataSender::CMccDataSender( ) + : CActive( EPriorityStandard ) + { + CActiveScheduler::Add(this); + } + +// ----------------------------------------------------------------------------- +// CMccDataSender::ConstructL +// ----------------------------------------------------------------------------- +// +void CMccDataSender::ConstructL() + { + TInt err = iMsgQueue.CreateGlobal(_L("IP-VT-Queue1"), 5, EOwnerProcess ); + if ( err ) + { + User::LeaveIfError( iMsgQueue.OpenGlobal(_L("IP-VT-Queue1"))); + } + } + +// ----------------------------------------------------------------------------- +// CMccDataSender::NewL +// ----------------------------------------------------------------------------- +// +CMccDataSender* CMccDataSender::NewL( ) + { + CMccDataSender* self = + new ( ELeave ) CMccDataSender(); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + return self; + } + +// ----------------------------------------------------------------------------- +// CMccDataSender::Send +// ----------------------------------------------------------------------------- +// +void CMccDataSender::Send( const TDataMessage& aData ) +{ + TInt err = iMsgQueue.Send( aData ); + + if ( err == KErrOverflow ) + { + if ( !IsActive() ) + { + iBuffer = aData; + iMsgQueue.NotifySpaceAvailable( iStatus ); + SetActive(); + } + else + { + // TODO + // BUFFER OR DROP + } + } + } + +// ----------------------------------------------------------------------------- +// CMccDataSender::~CMccDataSender +// ----------------------------------------------------------------------------- +// +CMccDataSender::~CMccDataSender() + { + Cancel(); + iMsgQueue.Close(); + } + +// ----------------------------------------------------------------------------- +// CMccDataSender::DoCancel +// ----------------------------------------------------------------------------- +// +void CMccDataSender::DoCancel() + { + iMsgQueue.CancelSpaceAvailable(); + } + +// ----------------------------------------------------------------------------- +// CMccDataSender::RunL +// ----------------------------------------------------------------------------- +// +void CMccDataSender::RunL() + { + iMsgQueue.Send( iBuffer ); + iBuffer.iDataId = EUninitialized; + } + +// ----------------------------------------------------------------------------- +// CMccDataSender::RunError +// ----------------------------------------------------------------------------- +// +TInt CMccDataSender::RunError(TInt /*aError*/) + { + return KErrNone; + } diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/ipvtengine/src/mccscreen.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/ipvtengine/src/mccscreen.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,921 @@ +/* +* Copyright (c) 2006 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: +* +*/ + +#include +#include +#include +#include +#include +#include +#include "MccScreen.h" +#include "svptimer.h" +#include "musenglogger.h" + +// EXTERNAL DATA STRUCTURES + +// EXTERNAL FUNCTION PROTOTYPES + +// CONSTANTS + +_LIT(KMccWindowGroupName,"MccVideoWindow"); + +// MACROS + +// LOCAL CONSTANTS AND MACROS + +// MODULE DATA STRUCTURES + +// LOCAL FUNCTION PROTOTYPES + +// FORWARD DECLARATIONS + +// ============================= LOCAL FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CMccScreen::NewL +// ----------------------------------------------------------------------------- +// +CMccScreen* CMccScreen::NewL( CCamera* aCamera, + TPoint aPos, + TSize aArea, + TInt aIndex, + TInt aWindowOrdinalPosition, + TInt aWindowOrdinalPriority, + TBool aSecondary, + RDrawableWindow* aParentWindow ) + { + // Resolve screen type based on ecam capabilities, asssume direct vf + // to be available if camera not present yet. + CMccScreen* screen = NULL; + TBool useDirectVf = EFalse; + + if ( aCamera ) + { + TCameraInfo info; + aCamera->CameraInfo( info ); + useDirectVf = ( info.iOptionsSupported & TCameraInfo::EViewFinderDirectSupported ); + } + + if ( useDirectVf ) + { + TRAPD( err, screen = CMccScreenDirect::NewL( + aCamera, aPos, aArea, aIndex, + aWindowOrdinalPosition, aWindowOrdinalPriority ) ); + // If creation failes for some reason, bitmap vf is tried to be + // created as a fallback + if ( err == KErrNoMemory ) + { + User::Leave( err ); + } + if ( err ) + { + } + } + + if ( !screen ) + { + screen = CMccScreenBitmap::NewL( + aCamera, aPos, aArea, aIndex, + aWindowOrdinalPosition, aWindowOrdinalPriority, aSecondary, aParentWindow ); + } + return screen; + } + +// ----------------------------------------------------------------------------- +// CMccScreen::~CMccScreen +// ----------------------------------------------------------------------------- +// +CMccScreen::~CMccScreen() + { + + StopCamera(); + + delete iGraphicsContext; + delete iDev; + delete iRw; + delete iRwGroup; + iRwSession.Close(); + + } + +// ----------------------------------------------------------------------------- +// CMccScreen::StartL +// ----------------------------------------------------------------------------- +// +void CMccScreen::StartL() + { + + } + +// ----------------------------------------------------------------------------- +// CMccScreen::Stop +// ----------------------------------------------------------------------------- +// +void CMccScreen::Stop() + { + + } + +// ----------------------------------------------------------------------------- +// CMccScreen::Draw +// ----------------------------------------------------------------------------- +// +void CMccScreen::Draw( CFbsBitmap& /*aFrame*/ ) + { + + } + +// ----------------------------------------------------------------------------- +// CMccScreen::SetCamera +// ----------------------------------------------------------------------------- +// +TInt CMccScreen::SetCamera( CCamera* aCamera ) + { + if ( !aCamera ) + { + StopCamera(); + } + + iCamera = aCamera; + + return KErrNone; + } + + +// ----------------------------------------------------------------------------- +// CMccScreen::StopCamera +// ----------------------------------------------------------------------------- +// +void CMccScreen::StopCamera() + { + + if ( iCamera ) + { + iCamera->StopViewFinder(); + } + + } + +// ----------------------------------------------------------------------------- +// CMccScreen::VfStartPossible +// ----------------------------------------------------------------------------- +// +TBool CMccScreen::VfStartPossible() + { + return ( iCamera && !iCamera->ViewFinderActive() && + iArea.iWidth > 0 && + iArea.iHeight > 0 ); + } + +void CMccScreen::SetPrimaryRectL(TRect aRect) + { + MUS_LOG2( "mus: [ENGINE] -> CMccScreen::SetPrimaryRectL() (%dx%d)", + aRect.Width(), aRect.Height() ); + MUS_LOG2( "mus: [ENGINE] -> CMccScreen::SetPrimaryRectL() (%d,%d)", + aRect.iTl.iX, aRect.iTl.iY ); + iPrimaryRect = aRect; + } +void CMccScreen::SetSecondaryRectL(TRect aRect) + { + MUS_LOG2( "mus: [ENGINE] -> CMccScreen::SetSecondaryRectL() (%dx%d)", + aRect.Width(), aRect.Height() ); + MUS_LOG2( "mus: [ENGINE] -> CMccScreen::SetSecondaryRectL() (%d,%d)", + aRect.iTl.iX, aRect.iTl.iY ); + iSecondaryRect = aRect; + } + +void CMccScreen::Update(TBool aIsForeground) + { + if ( aIsForeground ){ + + iRwGroup->SetOrdinalPosition( iWindowOrdinalPosition, iWindowOrdinalPriority ); + iRw->SetOrdinalPosition( iWindowOrdinalPosition, iWindowOrdinalPriority ); + iRw->HandleTransparencyUpdate(); + iRwSession.Flush(); + } else { + + } + + } + + +// ----------------------------------------------------------------------------- +// CMccScreen::ConstructL +// ----------------------------------------------------------------------------- +// +void CMccScreen::ConstructL() + { + User::LeaveIfError( iRwSession.Connect() ); + + // Create window group + + iRwGroup = new (ELeave) RWindowGroup( iRwSession ) ; + + RWindowGroup& rootWin = CCoeEnv::Static()->RootWin(); + rootWin.AllowProcessToCreateChildWindowGroups(TUid::Uid( 0x101F8681 )); + TUint32 groupId = rootWin.WindowGroupId(); //iRwSession.GetFocusWindowGroup(); + TUint32 focusGroupId = iRwSession.GetFocusWindowGroup(); + //User::LeaveIfError( iRwGroup->ConstructChildApp( groupId, (TUint32)iRwGroup, EFalse ) ); + User::LeaveIfError( iRwGroup->Construct( (TUint32)iRwGroup, EFalse ) ); + + TBuf<100> name; + name.Append(KMccWindowGroupName); + iRwGroup->SetName( name ); + + iRwGroup->SetOrdinalPosition( iWindowOrdinalPosition, iWindowOrdinalPriority ); + //iRwGroup->SetOrdinalPriorityAdjust(1); + iRwGroup->AutoForeground(EFalse); + + // Create screen device + iDev = new (ELeave) CWsScreenDevice( iRwSession ); + iDev->Construct( iDeviceIndex ); + + TInt currMode = iDev->CurrentScreenMode(); + MUS_LOG1( "mus: [ENGINE] -> CMccScreen::ConstructL() mode: %d", currMode ); + TPixelsTwipsAndRotation sizeAndRotation; + iDev->GetScreenModeSizeAndRotation( currMode, sizeAndRotation ); + + MUS_LOG3( "mus: [ENGINE] -> CMccScreen::ConstructL() (%dx%d) %d", + sizeAndRotation.iPixelSize.iWidth, sizeAndRotation.iPixelSize.iHeight, sizeAndRotation.iRotation ); + + // Create window + iRw = new (ELeave) RWindow( iRwSession ); + + User::LeaveIfError( iRw->Construct( *iRwGroup, (TUint32)iRw ) ); + + + iRw->SetPosition( iPosition ); + + iRw->SetSize( iArea ); + iRw->SetOrdinalPosition( iWindowOrdinalPosition, iWindowOrdinalPriority ); + iRw->EnableVisibilityChangeEvents(); + + User::LeaveIfError( iDev->CreateContext( iGraphicsContext ) ); + + iRw->Activate(); + iRwSession.Flush(); + } + +// ----------------------------------------------------------------------------- +// CMccScreen::CMccScreen +// ----------------------------------------------------------------------------- +// +CMccScreen::CMccScreen( + TMccScreenType aScreenType, + CCamera* aCamera, + TPoint aPos, + TSize aArea, + TInt aIndex, + TInt aWindowOrdinalPosition, + TInt aWindowOrdinalPriority, + TBool aSecondary, + RDrawableWindow* aParentWindow ) : + iCamera( aCamera ), + iDeviceIndex( aIndex ), + iPosition( aPos ), + iArea( aArea ), + iWindowOrdinalPosition( aWindowOrdinalPosition ), + iWindowOrdinalPriority( aWindowOrdinalPriority ), + iScreenType( aScreenType ), + iSecondary(aSecondary), + iParentWindow(aParentWindow)/*, + iRwSession(CCoeEnv::Static()->WsSession()), + iRwGroup(&CCoeEnv::Static()->RootWin()), + iDev(CCoeEnv::Static()->ScreenDevice())*/ + { + + } + + +// ----------------------------------------------------------------------------- +// CMccScreenBitmap::CMccScreenBitmap +// ----------------------------------------------------------------------------- +// +CMccScreenBitmap* CMccScreenBitmap::NewL( + CCamera* aCamera, + TPoint aPos, + TSize aArea, + TInt aIndex, + TInt aWindowOrdinalPosition, + TInt aWindowOrdinalPriority, + TBool aSecondary, + RDrawableWindow* aParentWindow) + { + CMccScreenBitmap* self = new ( ELeave ) CMccScreenBitmap( aCamera, + aPos, + aArea, + aIndex, + aWindowOrdinalPosition, + aWindowOrdinalPriority, + aSecondary, + aParentWindow); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + return self; + } + +// ----------------------------------------------------------------------------- +// CMccScreenBitmap::CMccScreenBitmap +// ----------------------------------------------------------------------------- +// +CMccScreenBitmap::CMccScreenBitmap( + CCamera* aCamera, + TPoint aPos, + TSize aArea, + TInt aIndex, + TInt aWindowOrdinalPosition, + TInt aWindowOrdinalPriority, + TBool aSecondary, + RDrawableWindow* aParentWindow) : + CMccScreen( EBitmapScreen, aCamera, aPos, aArea, aIndex, + aWindowOrdinalPosition, aWindowOrdinalPriority, aSecondary, aParentWindow ), + iAborted( ETrue ) + { + } + +// ----------------------------------------------------------------------------- +// CMccScreenBitmap::CMccScreenBitmap +// ----------------------------------------------------------------------------- +// +CMccScreenBitmap::~CMccScreenBitmap() + { + + DetachFrame(); // Must do bitmap detach before releasing window resources + delete iDirectScreenAccess; + + delete iPausedFrameData; + delete iTimer; + } + +// ----------------------------------------------------------------------------- +// CMccScreenBitmap::ConstructL +// ----------------------------------------------------------------------------- +// +void CMccScreenBitmap::ConstructL() + { + iTimer = CSVPTimer::NewL( *this, 1 ); + + CMccScreen::ConstructL(); + + // Create direct screen access + //iDirectScreenAccess = CDirectScreenAccess::NewL( iRwSession, *iDev, *iRw, *this ); + + UpdateViewFinderArea( iArea ); + + StartL(); // Simu HACK + iTimer->SetTime(500, 1); + } + +// ----------------------------------------------------------------------------- +// CMccScreenBitmap::StartL +// ----------------------------------------------------------------------------- +// +void CMccScreenBitmap::StartL() + { + iStopped = EFalse; + + if ( iCamera ) + { + StartCameraL(); + } + else if ( iPausedFrameData ) + { + + CFbsBitmap* frame = RestoreFrameLC(); + AttachFrameL( frame ); + CleanupStack::Pop( frame ); + } + else + { + // NOP + } + + StartDsaL(); + } + +// ----------------------------------------------------------------------------- +// CMccScreenBitmap::StartCameraL +// ----------------------------------------------------------------------------- +// +void CMccScreenBitmap::StartCameraL() + { + + __ASSERT_ALWAYS( iCamera, User::Leave( KErrNotReady ) ); + + // Camera may modify the size + TSize vfBitmapSize = iArea; + + if ( VfStartPossible() ) + { + iCamera->StartViewFinderBitmapsL( vfBitmapSize ); + } + + + UpdateViewFinderArea( vfBitmapSize ); + + } + +// ----------------------------------------------------------------------------- +// CMccScreenBitmap::StartDsaL +// ----------------------------------------------------------------------------- +// +void CMccScreenBitmap::StartDsaL() + { + /* + iAborted = EFalse; + iDirectScreenAccess->Cancel(); + iDirectScreenAccess->StartL(); + iGc = iDirectScreenAccess->Gc(); + iFbsDev = iDirectScreenAccess->ScreenDevice(); + iRegion = iDirectScreenAccess->DrawingRegion(); + + iGc->SetClippingRegion( iRegion ); + */ + // Fill with black areas which are not covered by viewfinder image. + // If viewfinder image has not been yet received and drawn, fill whole area. + // + + /* if ( !iFirstImageDrawn ) + { + // Whole area + iGc->SetBrushColor( KRgbBlue ); + iGc->SetBrushStyle( CGraphicsContext::ESolidBrush ); + TPoint pointTl( 0, 0 ); + TRect rect( pointTl, iArea ); + iGc->DrawRect( rect ); + } + else + { + DrawBlackBorders(); + } + + if ( iAttachedFrame ) + { + + TSize viewFinderImageSize = iAttachedFrame->SizeInPixels(); + + TPoint corner = UpdateViewFinderArea( viewFinderImageSize ); + + iGc->BitBlt( corner, iAttachedFrame ); + } + + DoScreenDeviceUpdate(); + */ + //iGc->SetBrushStyle( CGraphicsContext::ENullBrush ); + } + +// ----------------------------------------------------------------------------- +// CMccScreenBitmap::Stop +// ----------------------------------------------------------------------------- +// +void CMccScreenBitmap::Stop() + { + // Don't do anything yet, wait for next frame and then stop camera + iStopped = ETrue; + } + +// ----------------------------------------------------------------------------- +// CMccScreenBitmap::Restart +// ----------------------------------------------------------------------------- +// +void CMccScreenBitmap::Restart( RDirectScreenAccess::TTerminationReasons /*aReason*/ ) + { + + TRAP_IGNORE( StartDsaL() ); + } + +// ----------------------------------------------------------------------------- +// CMccScreenBitmap::AbortNow +// ----------------------------------------------------------------------------- +// +void CMccScreenBitmap::AbortNow( RDirectScreenAccess::TTerminationReasons /*aReason*/ ) + { + iDirectScreenAccess->Cancel(); + + iAborted = ETrue; + } + +// ----------------------------------------------------------------------------- +// CMccScreenBitmap::Draw +// ----------------------------------------------------------------------------- +// +void CMccScreenBitmap::Draw( CFbsBitmap& aFrame ) + { + if ( iStopped ) + { + + // Screen was waiting for freeze frame from camera, inform observer + // that camera is not needed anymore + StoreFrameDataL( aFrame ); + CFbsBitmap* frame = RestoreFrameLC(); + AttachFrameL( frame ); + CleanupStack::Pop( frame ); + + StopCamera(); + } + else + { + // When normal frame draw is requested, attached frame is not anymore drawn + DetachFrame(); + + DoDraw( aFrame ); + } + } + +void CMccScreenBitmap::TimedOut( TInt aTimerId ) + { + iGraphicsContext->Activate(*iRw); + iRw->Invalidate(); + iRw->BeginRedraw(); + TRgb color1(0,0,255,255); + iGraphicsContext->Clear(); + iGraphicsContext->SetBrushColor( color1 ); + iGraphicsContext->SetBrushStyle( CGraphicsContext::ESolidBrush ); + iGraphicsContext->DrawRect( iPrimaryRect ); + TRgb color2(0,255,0,255); + iGraphicsContext->SetBrushColor( color2 ); + iGraphicsContext->DrawRect( iSecondaryRect ); + iRw->EndRedraw(); + iGraphicsContext->Deactivate(); + iRwSession.Flush(); + + /* + if ( !iAborted && iGc ){ + iGc->SetBrushColor( KRgbBlue ); + iGc->SetBrushStyle( CGraphicsContext::ESolidBrush ); + iGc->DrawRect( iPrimaryRect ); + iGc->SetBrushColor( KRgbGreen ); + iGc->DrawRect( iSecondaryRect ); + DoScreenDeviceUpdate(); + } + */ + iTimer->SetTime(500, 1); + } + +// ----------------------------------------------------------------------------- +// CMccScreenBitmap::AttachFrameL +// ----------------------------------------------------------------------------- +// +void CMccScreenBitmap::AttachFrameL( CFbsBitmap* aFrame ) + { + + __ASSERT_ALWAYS( aFrame, User::Leave( KErrArgument ) ); + + DetachFrame(); + + iAttachedFrame = aFrame; + + DoDraw( *iAttachedFrame ); + + } + +// ----------------------------------------------------------------------------- +// CMccScreenBitmap::DetachFrame +// ----------------------------------------------------------------------------- +// +void CMccScreenBitmap::DetachFrame() + { + if ( iAttachedFrame ) + { + iAttachedFrame->Reset(); + delete iAttachedFrame; + } + + iAttachedFrame = NULL; + } + +// ----------------------------------------------------------------------------- +// CMccScreenBitmap::UpdateViewFinderArea +// ----------------------------------------------------------------------------- +// +TPoint CMccScreenBitmap::UpdateViewFinderArea( TSize aViewFinderImageSize ) + { + TPoint corner( 0, 0 ); + if ( aViewFinderImageSize.iWidth < iArea.iWidth ) + { + // Divide the subtraction by two (i.e. do centering) + corner.iX = ( iArea.iWidth - aViewFinderImageSize.iWidth ) >> 1; + } + + if ( aViewFinderImageSize.iHeight < iArea.iHeight ) + { + // Divide the subtraction by two (i.e. do centering) + corner.iY = ( iArea.iHeight - aViewFinderImageSize.iHeight ) >> 1; + } + + iViewFinderImageRect = TRect( corner, aViewFinderImageSize ); + + return corner; + } + +// ----------------------------------------------------------------------------- +// CMccScreenBitmap::DoDraw +// ----------------------------------------------------------------------------- +// +void CMccScreenBitmap::DoDraw( CFbsBitmap& aFrame ) + { + if ( !iAborted && iGc ) + { + iFirstImageDrawn = ETrue; + + TSize viewFinderImageSize = aFrame.SizeInPixels(); + + TBool imageSizeChanged = ( viewFinderImageSize != iViewFinderImageRect.Size() ); + + TPoint corner = UpdateViewFinderArea( viewFinderImageSize ); + + if ( imageSizeChanged ) + { + // Size of bitmap changed suddenly, borders need to be redrawn + DrawBlackBorders(); + } + + iGc->BitBlt( corner, &aFrame ); + + DoScreenDeviceUpdate(); + } + } + +// ----------------------------------------------------------------------------- +// CMccScreenBitmap::DoScreenDeviceUpdate +// ----------------------------------------------------------------------------- +// +void CMccScreenBitmap::DoScreenDeviceUpdate() + { + if ( iFbsDev ) + { + iFbsDev->Update(); + } + } + +// ----------------------------------------------------------------------------- +// CMccScreenBitmap::StoreFrameDataL +// ----------------------------------------------------------------------------- +// +void CMccScreenBitmap::StoreFrameDataL( CFbsBitmap& aFrame ) + { + + iPausedFrameSize = aFrame.SizeInPixels(); + iPausedFrameDisplayMode = aFrame.DisplayMode(); + TInt bitmapSizeInBytes = + CFbsBitmap::ScanLineLength( iPausedFrameSize.iWidth, iPausedFrameDisplayMode ) * + iPausedFrameSize.iHeight; + HBufC8* pausedFrameData = HBufC8::NewLC( bitmapSizeInBytes ); + aFrame.LockHeap(); + pausedFrameData->Des().Copy( (TUint8*)aFrame.DataAddress(), bitmapSizeInBytes ); + aFrame.UnlockHeap(); + delete iPausedFrameData; + iPausedFrameData = pausedFrameData; + CleanupStack::Pop( pausedFrameData ); + } + +// ----------------------------------------------------------------------------- +// CMccScreenBitmap::RestoreFrameLC +// ----------------------------------------------------------------------------- +// +CFbsBitmap* CMccScreenBitmap::RestoreFrameLC() + { + + __ASSERT_ALWAYS( iPausedFrameData, User::Leave( KErrNotReady ) ); + + CFbsBitmap* tempFrame = new ( ELeave ) CFbsBitmap; + CleanupStack::PushL( tempFrame ); + + User::LeaveIfError( tempFrame->Create( iPausedFrameSize, iPausedFrameDisplayMode ) ); + TInt bitmapSizeInBytes = + CFbsBitmap::ScanLineLength( iPausedFrameSize.iWidth, iPausedFrameDisplayMode ) * + iPausedFrameSize.iHeight; + + tempFrame->LockHeap(); + Mem::Copy( tempFrame->DataAddress(), + iPausedFrameData->Des().Ptr(), + bitmapSizeInBytes ); + tempFrame->UnlockHeap(); + + + return tempFrame; + } + +// ----------------------------------------------------------------------------- +// CMccScreenBitmap::DrawBlackBorders +// ----------------------------------------------------------------------------- +// +void CMccScreenBitmap::DrawBlackBorders() + { + iGc->SetBrushColor( KRgbBlue ); + iGc->SetBrushStyle( CGraphicsContext::ESolidBrush ); + + // Upper area + TPoint pointTl( 0, 0 ); + TPoint pointBr( iArea.iWidth, iViewFinderImageRect.iTl.iY ); + TRect rect( pointTl, pointBr ); + iGc->DrawRect( rect ); + + // Lower area + pointTl.SetXY( 0, iViewFinderImageRect.iBr.iY ); + pointBr.SetXY( iArea.iWidth, iArea.iHeight ); + rect.SetRect( pointTl, pointBr ); + iGc->DrawRect( rect ); + + // Left area + pointTl.SetXY( 0, iViewFinderImageRect.iTl.iY ); + pointBr.SetXY( iViewFinderImageRect.iTl.iX, iViewFinderImageRect.iBr.iY ); + rect.SetRect( pointTl, pointBr ); + iGc->DrawRect( rect ); + + // Right area + pointTl.SetXY( iViewFinderImageRect.iBr.iX, iViewFinderImageRect.iTl.iY ); + pointBr.SetXY( iArea.iWidth, iViewFinderImageRect.iBr.iY ); + rect.SetRect( pointTl, pointBr ); + iGc->DrawRect( rect ); + } + +// ----------------------------------------------------------------------------- +// CMccScreenDirect::NewL +// ----------------------------------------------------------------------------- +// +CMccScreenDirect* CMccScreenDirect::NewL( CCamera* aCamera, + TPoint aPos, + TSize aArea, + TInt aIndex, + TInt aWindowOrdinalPosition, + TInt aWindowOrdinalPriority ) + { + + CMccScreenDirect* self = new ( ELeave ) CMccScreenDirect( aCamera, + aPos, + aArea, + aIndex, + aWindowOrdinalPosition, + aWindowOrdinalPriority ); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + + return self; + } + +// ----------------------------------------------------------------------------- +// CMccScreenDirect::~CMccScreenDirect +// ----------------------------------------------------------------------------- +// +CMccScreenDirect::~CMccScreenDirect() + { + + if ( iDirectViewFinder ) + { + iDirectViewFinder->Release(); + iDirectViewFinder = NULL; + } + + } + +// ----------------------------------------------------------------------------- +// CMccScreenDirect::StartL +// ----------------------------------------------------------------------------- +// +void CMccScreenDirect::StartL() + { + + + if ( iDirectViewFinder && iDirectViewFinder->ViewFinderState() == + CCamera::CCameraDirectViewFinder::EViewFinderPause ) + { + + iDirectViewFinder->ResumeViewFinderDirectL(); + } + else if ( VfStartPossible() ) + { + + StartDirectViewFinderL(); + } + else + { + // NOP + } + } + +// ----------------------------------------------------------------------------- +// CMccScreenDirect::Stop +// ----------------------------------------------------------------------------- +// +void CMccScreenDirect::Stop() + { + + if ( iDirectViewFinder ) + { + // TBD: pausing disabled temporarily due problems in it + //TRAP_IGNORE( iDirectViewFinder->PauseViewFinderDirectL() ) + } + + } + +// ----------------------------------------------------------------------------- +// CMccScreenDirect::SetCamera +// ----------------------------------------------------------------------------- +// +TInt CMccScreenDirect::SetCamera( CCamera* aCamera ) + { + CMccScreen::SetCamera( aCamera ); + + return HandleDirectViewFinder(); + } + +// ----------------------------------------------------------------------------- +// CMccScreenDirect::ConstructL +// ----------------------------------------------------------------------------- +// +void CMccScreenDirect::ConstructL() + { + + CMccScreen::ConstructL(); + + User::LeaveIfError( HandleDirectViewFinder() ); + + } + +// ----------------------------------------------------------------------------- +// CMccScreenDirect::CMccScreenDirect +// ----------------------------------------------------------------------------- +// +CMccScreenDirect::CMccScreenDirect( + CCamera* aCamera, + TPoint aPos, + TSize aArea, + TInt aIndex, + TInt aWindowOrdinalPosition, + TInt aWindowOrdinalPriority ) : + CMccScreen( EDirectScreen, aCamera, aPos, aArea, aIndex, + aWindowOrdinalPosition, aWindowOrdinalPriority ) + { + + } + +// ----------------------------------------------------------------------------- +// CMccScreenDirect::StartDirectViewFinderL +// ----------------------------------------------------------------------------- +// +void CMccScreenDirect::StartDirectViewFinderL() + { + if ( VfStartPossible() ) + { + // Camera may modify the size + TSize vfBitmapSize = iArea; + + TPoint point( 0, 0 ); + TRect vfRect( point, vfBitmapSize ); + iCamera->StartViewFinderDirectL( iRwSession, *iDev, *iRw, vfRect ); + } + } + +// ----------------------------------------------------------------------------- +// CMccScreenDirect::HandleDirectViewFinder +// ----------------------------------------------------------------------------- +// +TInt CMccScreenDirect::HandleDirectViewFinder() + { + TInt err( KErrNone ); + if ( iCamera ) + { + if ( !iDirectViewFinder ) + { + + iDirectViewFinder = static_cast( + iCamera->CustomInterface( TUid::Uid( KECamMCameraDirectViewFinderUidValue ) ) ); + + if ( !iDirectViewFinder ) + { + err = KErrNotSupported; + } + } + } + else if ( iDirectViewFinder ) + { + iDirectViewFinder->Release(); + iDirectViewFinder = NULL; + } + else + { + // NOP + } + return err; + } + + +// End of file + diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/ipvtengine/src/musengcamerahandler.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/ipvtengine/src/musengcamerahandler.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,278 @@ +/* +* 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: +* +*/ + + +// USER +#include "musengcamerahandler.h" +#include "musenglogger.h" +#include "musengmcesession.h" + + +// SYSTEM +#include + +const TInt KMaxBrightness = 100; +const TInt KMinBrightness = -100; +const TInt KBrightnessStepSize = 10; + + +//Number of big and small zoom steps on Zoom scale +const TInt KZoomBigStepCount = 15; +const TInt KZoomSmallStepCount = KZoomBigStepCount*2; +const TInt KZoomStepMinSize = 1; + +const TInt64 KZoomFasterTime = 333333; // 1/3 second + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +TMusEngCameraHandler::TMusEngCameraHandler() : + iDefaultBrightness( 0 ), + iZoomInTime(0), + iZoomOutTime(0), + iSmallZoomStep( KZoomStepMinSize ), + iBigZoomStep( KZoomStepMinSize ), + iCurrentCamera( TMusEngCameraHandler::ECameraNotAvailable ) + { + iPlaying = ETrue; //Keep it true -> first play not reported up! + } + +// ----------------------------------------------------------------------------- +// From MLcCameraControl +// ----------------------------------------------------------------------------- +// +TInt TMusEngCameraHandler::LcCameraCountL() + { + MUS_LOG( "mus: [ENGINE] -> TMusEngCameraHandler::LcCameraCountL()" ) + + return 2; + } + +// ----------------------------------------------------------------------------- +// From MLcCameraControl +// ----------------------------------------------------------------------------- +// +TInt TMusEngCameraHandler::CurrentLcCameraIndex() + { + return iCurrentCamera; + } + +// ----------------------------------------------------------------------------- +// From MLcCameraControl +// ----------------------------------------------------------------------------- +// +void TMusEngCameraHandler::ToggleLcCameraL() + { + MUS_LOG( "mus: [ENGINE] -> TMusEngCameraHandler::ToggleLcCamera()" ) + iMusSession->ToggleCameraL(); + MUS_LOG( "mus: [ENGINE] <- TMusEngCameraHandler::ToggleLcCamera()" ) + } + +// ----------------------------------------------------------------------------- +// From MLcBrightnessControl +// ----------------------------------------------------------------------------- +// +TInt TMusEngCameraHandler::MinLcBrightnessL() + { + MUS_LOG( "mus: [ENGINE] -> TMusEngCameraHandler::MinLcBrightnessL()" ) + + // minimum brightness is not in camera info, but a constant + + MUS_LOG1( "mus: [ENGINE] <- TMusEngCameraHandler::MinLcBrightnessL(): %d", + KMinBrightness ) + + return KMinBrightness; + } + +// ----------------------------------------------------------------------------- +// From MLcBrightnessControl +// ----------------------------------------------------------------------------- +// +TInt TMusEngCameraHandler::MaxLcBrightnessL() + { + MUS_LOG( "mus: [ENGINE] -> TMusEngCameraHandler::MaxLcBrightnessL()" ) + + // maximum brightness is not in camera info, but a constant + + MUS_LOG1( "mus: [ENGINE] <- TMusEngCameraHandler::MaxLcBrightnessL(): %d", + KMaxBrightness ) + + return KMaxBrightness; + } + +// ----------------------------------------------------------------------------- +// From MLcBrightnessControl +// ----------------------------------------------------------------------------- +// +TInt TMusEngCameraHandler::LcBrightnessL() + { + MUS_LOG( "mus: [ENGINE] -> TMusEngCameraHandler::LcBrightnessL()" ) + + return 5; + } + +// ----------------------------------------------------------------------------- +// From MLcBrightnessControl +// ----------------------------------------------------------------------------- +// +void TMusEngCameraHandler::SetLcBrightnessL( TInt aValue ) + { + MUS_LOG1( "mus: [ENGINE] -> TMusEngCameraHandler::SetLcBrightnessL( %d )", + aValue ) + + + MUS_LOG( "mus: [ENGINE] <- TMusEngCameraHandler::SetLcBrightnessL()" ) + } + +// ----------------------------------------------------------------------------- +// From MLcBrightnessControl +// ----------------------------------------------------------------------------- +// +void TMusEngCameraHandler::IncreaseLcBrightnessL() + { + MUS_LOG( "mus: [ENGINE] -> TMusEngCameraHandler::IncreaseLcBrightnessL()" ) + + MUS_LOG( "mus: [ENGINE] <- TMusEngCameraHandler::IncreaseLcBrightnessL()" ) + } + +// ----------------------------------------------------------------------------- +// From MLcBrightnessControl +// ----------------------------------------------------------------------------- +// +void TMusEngCameraHandler::DecreaseLcBrightnessL() + { + MUS_LOG( "mus: [ENGINE] -> TMusEngCameraHandler::DecreaseLcBrightnessL()" ) + + MUS_LOG( "mus: [ENGINE] <- TMusEngCameraHandler::DecreaseLcBrightnessL()" ) + } + +// ----------------------------------------------------------------------------- +// From MLcZoomControl +// ----------------------------------------------------------------------------- +// +TInt TMusEngCameraHandler::MinLcZoomL() + { + MUS_LOG( "mus: [ENGINE] -> TMusEngCameraHandler::MinLcZoomL()" ) + + return 1; + } + +// ----------------------------------------------------------------------------- +// From MLcZoomControl +// ----------------------------------------------------------------------------- +// +TInt TMusEngCameraHandler::MaxLcZoomL() + { + MUS_LOG( "mus: [ENGINE] -> TMusEngCameraHandler::MaxLcZoomL()" ) + + return 10; + } + +// ----------------------------------------------------------------------------- +// From MLcZoomControl +// ----------------------------------------------------------------------------- +// +TInt TMusEngCameraHandler::LcZoomValueL() + { + MUS_LOG( "mus: [ENGINE] -> TMusEngCameraHandler::LcZoomValueL" ) + + + return 5; + } + +// ----------------------------------------------------------------------------- +// From MLcZoomControl +// ----------------------------------------------------------------------------- +// +void TMusEngCameraHandler::SetLcZoomValueL( TInt aValue ) + { + MUS_LOG1( "mus: [ENGINE] -> TMusEngCameraHandler::SetLcZoomValueL( %d )", + aValue ) + + MUS_LOG( "mus: [ENGINE] <- MusEngCameraHandler::SetLcZoomValueL()" ) + } + +// ----------------------------------------------------------------------------- +// From MLcZoomControl +// ----------------------------------------------------------------------------- +// +void TMusEngCameraHandler::LcZoomInL() + { + MUS_LOG( "mus: [ENGINE] -> TMusEngCameraHandler::LcZoomInL()" ) + + MUS_LOG( "mus: [ENGINE] <- TMusEngCameraHandler::LcZoomInL()" ) + } + +// ----------------------------------------------------------------------------- +// From MLcZoomControl +// ----------------------------------------------------------------------------- +// +void TMusEngCameraHandler::LcZoomOutL() + { + MUS_LOG( "mus: [ENGINE] -> TMusEngCameraHandler::LcZoomOutL()" ) + + MUS_LOG( "mus: [ENGINE] <- TMusEngCameraHandler::LcZoomOutL()" ) + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void TMusEngCameraHandler::SetSession(CMusEngMceSession* aSession ) + { + iMusSession = aSession; + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +TBool TMusEngCameraHandler::IsPlayingL() + { + return iPlaying; + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void TMusEngCameraHandler::PlayL() + { + MUS_LOG( "mus: [ENGINE] -> TMusEngCameraHandler::PlayL()" ) + if (!iPlaying) + { + iPlaying = ETrue; + iMusSession->PlayCameraL(); + } + MUS_LOG( "mus: [ENGINE] <- TMusEngCameraHandler::PlayL()" ) + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void TMusEngCameraHandler::PauseL() + { + MUS_LOG( "mus: [ENGINE] -> TMusEngCameraHandler::PauseL()" ) + iPlaying = EFalse; + iMusSession->PauseCameraL(); + MUS_LOG( "mus: [ENGINE] <- TMusEngCameraHandler::PauseL()" ) + } + diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/ipvtengine/src/musengclipvideoplayer.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/ipvtengine/src/musengclipvideoplayer.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,535 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + +// USER +#include "musengclipvideoplayer.h" +#include "musengcamerahandler.h" +#include "musengmceutils.h" +#include "musengdisplayhandler.h" +#include "muslogger.h" + +// SYSTEM +#include +#include +#include +#include + +// CONSTANTS +const TInt64 KMicroSecondsInOneSecond = 1000000; +const TInt KFastWindingFactor = 4; + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +CMusEngClipVideoPlayer* CMusEngClipVideoPlayer::NewL( + MMusEngDisplayHandler& aDisplayHandler, + MLcAudioControl& aLcAudioControl ) + { + return new( ELeave )CMusEngClipVideoPlayer( + aDisplayHandler, aLcAudioControl ); + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +CMusEngClipVideoPlayer::CMusEngClipVideoPlayer( + MMusEngDisplayHandler& aDisplayHandler, + MLcAudioControl& aLcAudioControl ) : + CMusEngLocalVideoPlayer( aDisplayHandler, aLcAudioControl ) + { + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +CMusEngClipVideoPlayer::~CMusEngClipVideoPlayer() + { + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +TBool CMusEngClipVideoPlayer::HasClipEnded() + { + MUS_LOG( "mus: [ENGINE] -> CMusEngClipVideoPlayer::HasClipEnded" ) + + TBool hasClipEnded( EFalse ); + + if ( iMceSession ) + { + CMceVideoStream* videoOut = NULL; + + TRAPD( err, + videoOut = MusEngMceUtils::GetVideoOutStreamL( *iMceSession ) ); + if ( err != KErrNone ) + { + MUS_LOG1( "mus: [ENGINE] Error in GetVideoOutStreamL %d", err ) + return EFalse; + } + + CMceFileSource* filesource = NULL; + TRAP( err, filesource = MusEngMceUtils::GetFileSourceL( *iMceSession ) ) + + if ( err == KErrNone ) + { + TTimeIntervalMicroSeconds position; + TTimeIntervalMicroSeconds duration; + TRAP( err, position = filesource->PositionL() ); + TRAPD( err2, duration = filesource->DurationL() ); + if ( err != KErrNone || err2 != KErrNone ) + { + return EFalse; + } + + MUS_LOG2( "mus: [ENGINE] position = %Ld, duration = %Ld", + position.Int64(), duration.Int64() ) + + hasClipEnded = + ( position.Int64() == 0 && + !filesource->IsEnabled() && + videoOut->State() == CMceMediaStream::EDisabled ); + } + } + + if ( hasClipEnded ) + { + iDelayFileEndingPos = 0; + } + + MUS_LOG( "mus: [ENGINE] <- CMusEngClipVideoPlayer::HasClipEnded" ) + + return hasClipEnded; + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusEngClipVideoPlayer::SetBufferingPeriod( + const TTimeIntervalMicroSeconds& aPeriod ) + { + iBufferingPeriod = aPeriod; + } + +// ----------------------------------------------------------------------------- +// From MLcVideoPlayer +// ----------------------------------------------------------------------------- +// +TBool CMusEngClipVideoPlayer::LcIsPlayingL() + { + __ASSERT_ALWAYS( iMceSession, User::Leave( KErrNotReady ) ); + return ( MusEngMceUtils::GetFileSourceL( *iMceSession )->IsEnabled() ); + } + +// ----------------------------------------------------------------------------- +// From MLcVideoPlayer +// ----------------------------------------------------------------------------- +// +void CMusEngClipVideoPlayer::LcPlayL() + { + MUS_LOG( "mus: [ENGINE] -> CMusEngClipVideoPlayer::LcPlayL" ) + + __ASSERT_ALWAYS( iMceSession, User::Leave( KErrNotReady ) ); + CMceFileSource* file = MusEngMceUtils::GetFileSourceL( *iMceSession ); + + if ( !file->IsEnabled() ) + { + file->EnableL(); + } + + MUS_LOG( "mus: [ENGINE] <- CMusEngClipVideoPlayer::LcPlayL" ) + } + +// ----------------------------------------------------------------------------- +// From MLcVideoPlayer +// ----------------------------------------------------------------------------- +// +void CMusEngClipVideoPlayer::LcPauseL() + { + MUS_LOG( "mus: [ENGINE] -> CMusEngClipVideoPlayer::LcPauseL" ) + + __ASSERT_ALWAYS( iMceSession, User::Leave( KErrNotReady ) ); + CMceFileSource* file = MusEngMceUtils::GetFileSourceL( *iMceSession ); + + if ( file->IsEnabled() ) + { + file->DisableL(); + } + + MUS_LOG( "mus: [ENGINE] <- CMusEngClipVideoPlayer::LcPauseL" ) + } + +// ----------------------------------------------------------------------------- +// From MLcVideoPlayer +// ----------------------------------------------------------------------------- +// +MLcSourceFileControl* CMusEngClipVideoPlayer::LcSourceFileControl() + { + return this; + } + +// ----------------------------------------------------------------------------- +// From MLcSourceFileControl +// ----------------------------------------------------------------------------- +// +void CMusEngClipVideoPlayer::SetLcFileNameL( const TFileName& aFileName ) + { + MUS_LOG( "mus: [ENGINE] -> CMusEngClipVideoPlayer::SetLcFileNameL" ) + + __ASSERT_ALWAYS( !IsProtectedFileL( aFileName ), + User::Leave( KErrPermissionDenied ) ); + + if ( iMceSession ) + { + CMceFileSource* file = MusEngMceUtils::GetFileSourceL( *iMceSession ); + file->UpdateL( aFileName ); + } + + iFileName = aFileName; + MUS_LOG( "mus: [ENGINE] <- CMusEngClipVideoPlayer::SetLcFileNameL" ) + } + +// ----------------------------------------------------------------------------- +// From MLcSourceFileControl +// ----------------------------------------------------------------------------- +// +TFileName& CMusEngClipVideoPlayer::LcFileName() + { + return iFileName; + } + +// ----------------------------------------------------------------------------- +// From MLcSourceFileControl +// Since MCE does not at the moment support SetFastForwardL function, this +// functionality is implemented by taking a timestamp when forwarding is +// started and calculating a new position when it is ended. +// ----------------------------------------------------------------------------- +// +void CMusEngClipVideoPlayer::LcFastForwardL( TBool aUseFFWD ) + { + MUS_LOG1( "mus: [ENGINE] -> CMusEngClipVideoPlayer::FastForward( %d )", + aUseFFWD ) + + __ASSERT_ALWAYS( iMceSession, User::Leave( KErrNotReady ) ); + + CMceFileSource* file = MusEngMceUtils::GetFileSourceL( *iMceSession ); + + if ( aUseFFWD ) + { + // Ignore if we are already fastforwarding + if ( iFFWDStartTime.Int64() > 0 ) + { + return; + } + + // Stop rewinding if ongoing, else just pause file source + if ( iFRWDStartTime.Int64() > 0 ) + { + LcFastRewindL( EFalse ); + } + else + { + file->DisableL(); + } + + // Get timestamp for starttime + iFFWDStartTime.HomeTime(); + } + else + { + // Leave if we are not fastforwarding + if ( iFFWDStartTime.Int64() == 0 ) + { + User::Leave( KErrAlreadyExists ); + } + + // Set new position + file->SetPositionL( PositionMicroSecondsL( ETrue ) ); + + // Reset timer + iFFWDStartTime = TTime( 0 ); + } + + MUS_LOG( "mus: [ENGINE] <- CMusEngClipVideoPlayer::FastForward" ) + } + +// ----------------------------------------------------------------------------- +// From MLcSourceFileControl +// Since MCE does not at the moment support SetFastRewindL function, this +// functionality is implemented by taking a timestamp when rewinding is +// started and calculating a new position when it is ended. +// ----------------------------------------------------------------------------- +// +void CMusEngClipVideoPlayer::LcFastRewindL( TBool aUseFRWD ) + { + MUS_LOG1( "mus: [ENGINE] -> CMusEngClipVideoPlayer::FastRewind( %d )", + aUseFRWD ) + + __ASSERT_ALWAYS( iMceSession, User::Leave( KErrNotReady ) ); + + CMceFileSource* file = MusEngMceUtils::GetFileSourceL( *iMceSession ); + + if ( aUseFRWD ) + { + // Ignore if we are already fastrewinding + if ( iFRWDStartTime.Int64() > 0 ) + { + return; + } + + // Stop fastforwarding if ongoing, else just pause file source + if ( iFFWDStartTime.Int64() > 0 ) + { + LcFastForwardL( EFalse ); + } + else + { + file->DisableL(); + } + + // Get timestamp for starttime + iFRWDStartTime.HomeTime(); + } + else + { + // Leave if we are not fastrewinding + if ( iFRWDStartTime.Int64() == 0 ) + { + User::Leave( KErrAlreadyExists ); + } + + // Set new position + file->SetPositionL( PositionMicroSecondsL( ETrue ) ); + + // Reset timer + iFRWDStartTime = TTime( 0 ); + } + + MUS_LOG( "mus: [ENGINE] <- CMusEngClipVideoPlayer::FastRewind" ) + } + +// ----------------------------------------------------------------------------- +// From MLcSourceFileControl +// ----------------------------------------------------------------------------- +// +TTimeIntervalSeconds CMusEngClipVideoPlayer::LcFileDurationL() + { + MUS_LOG( "mus: [ENGINE] -> CMusEngClipVideoPlayer::DurationL" ) + + __ASSERT_ALWAYS( iMceSession, User::Leave( KErrNotReady ) ); + + CMceFileSource* file = MusEngMceUtils::GetFileSourceL( *iMceSession ); + + TTimeIntervalMicroSeconds duration = file->DurationL(); + + MUS_LOG( "mus: [ENGINE] <- CMusEngClipVideoPlayer::DurationL" ) + + return TTimeIntervalSeconds( static_cast< TInt >( + duration.Int64() / KMicroSecondsInOneSecond ) ); + } + +// ----------------------------------------------------------------------------- +// From MLcSourceFileControl +// ----------------------------------------------------------------------------- +// +TTimeIntervalSeconds CMusEngClipVideoPlayer::LcFilePositionL() + { + MUS_LOG( "mus: [ENGINE] -> CMusEngClipVideoPlayer::LcFilePositionL" ) + + TTimeIntervalMicroSeconds currentPosition = PositionMicroSecondsL(); + + MUS_LOG1( "mus: [ENGINE] <- CMusEngClipVideoPlayer::LcFilePositionL, %d", + currentPosition.Int64() ) + + return TTimeIntervalSeconds( static_cast< TInt >( + currentPosition.Int64() / KMicroSecondsInOneSecond ) ); + } + +// ----------------------------------------------------------------------------- +// From MLcSourceFileControl +// ----------------------------------------------------------------------------- +// +void CMusEngClipVideoPlayer::SetLcFilePositionL( + const TTimeIntervalSeconds& aPosition ) + { + MUS_LOG1( "mus: [ENGINE] -> CMusEngClipVideoPlayer::SetPositionL ( %d )", + aPosition.Int() ) + + __ASSERT_ALWAYS( iMceSession, User::Leave( KErrNotReady ) ); + + CMceFileSource* file = MusEngMceUtils::GetFileSourceL( *iMceSession ); + + TTimeIntervalMicroSeconds position( + KMicroSecondsInOneSecond * static_cast< TInt64 >( aPosition.Int() ) ); + + if ( position == 0 ) + { + iRewindedToBeginning = ETrue; + } + + file->SetPositionL( position ); + + MUS_LOG( "mus: [ENGINE] <- CMusEngClipVideoPlayer::SetPositionL ()" ) + } + +// ----------------------------------------------------------------------------- +// Check is file DRM protected. +// ----------------------------------------------------------------------------- +// +TBool CMusEngClipVideoPlayer::IsProtectedFileL( const TDesC& aClipFile ) + { + MUS_LOG( "mus: [ENGINE] -> CMusEngClipVideoPlayer::IsProtectedFileL(...)" ) + + TBool isDRMProtected = EFalse; + DRMCommon* drmapi = DRMCommon::NewL(); + CleanupStack::PushL( drmapi ); + + User::LeaveIfError( drmapi->Connect() ); + //Check DRM file protection + User::LeaveIfError( drmapi->IsProtectedFile( aClipFile, isDRMProtected ) ); + drmapi->Disconnect(); + + CleanupStack::PopAndDestroy( drmapi ); + + MUS_LOG( "mus: [ENGINE] <- CMusEngClipVideoPlayer::IsProtectedFileL(...)" ) + return isDRMProtected; + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +TTimeIntervalMicroSeconds CMusEngClipVideoPlayer::PositionMicroSecondsL( + TBool aActualPosition ) + { + __ASSERT_ALWAYS( iMceSession, User::Leave( KErrNotReady ) ); + + CMceFileSource* file = MusEngMceUtils::GetFileSourceL( *iMceSession ); + + TTimeIntervalMicroSeconds position = file->PositionL(); + TTimeIntervalMicroSeconds duration = file->DurationL(); + + TTimeIntervalMicroSeconds calculatedPosition; + + // Adjust position if we are fastforwarding or -rewinding + if ( iFFWDStartTime.Int64() != 0 ) + { + TTime now; + now.HomeTime(); + calculatedPosition = KFastWindingFactor * + now.MicroSecondsFrom( iFFWDStartTime ).Int64() + + position.Int64(); + if ( calculatedPosition > duration ) + { + calculatedPosition = duration; + } + } + else if ( iFRWDStartTime.Int64() != 0 ) + { + TTime now; + now.HomeTime(); + calculatedPosition = position.Int64() - + KFastWindingFactor * + now.MicroSecondsFrom( iFRWDStartTime ).Int64(); + if ( calculatedPosition < 0 ) + { + calculatedPosition = 0; + } + + if ( calculatedPosition == 0 ) + { + iRewindedToBeginning = ETrue; + } + } + else + { + calculatedPosition = position; + } + + if ( !aActualPosition ) + { + calculatedPosition = + GetVideoSinkRelativeFilePos( calculatedPosition, duration ); + } + + return calculatedPosition; + } + +// ----------------------------------------------------------------------------- +// Modifies file position if position has reached end before clip has ended. +// File position is not going in sync with local video playback as playback +// buffers media before starting playing. +// ----------------------------------------------------------------------------- +// +TTimeIntervalMicroSeconds CMusEngClipVideoPlayer::GetVideoSinkRelativeFilePos( + const TTimeIntervalMicroSeconds& aActualPosition, + const TTimeIntervalMicroSeconds& aDuration ) + { + MUS_LOG1( "mus: [ENGINE] PositionMicroSecondsL, pos before mod:%d", + aActualPosition.Int64() ) + + TTimeIntervalMicroSeconds tempCalculatedPosition( aActualPosition ); + + if ( iDelayFileEndingPos != 0 ) + { + iDelayFileEndingPos = aDuration; + tempCalculatedPosition = iDelayFileEndingPos; + } + else + { + // FRWD can go to zero even if clip has not ended, do not modify + // time in such situation. + if ( aActualPosition == 0 && + !HasClipEnded() && + iFRWDStartTime.Int64() == 0 && + !iRewindedToBeginning ) + { + const TInt KMusDelayEndingModifier = 2; + iDelayFileEndingPos = aDuration.Int64() - + iBufferingPeriod.Int64() / KMusDelayEndingModifier; + tempCalculatedPosition = iDelayFileEndingPos; + if ( iPreviousPos > tempCalculatedPosition ) + { + tempCalculatedPosition = iPreviousPos; + } + } + else + { + iDelayFileEndingPos = 0; + } + + if ( iRewindedToBeginning && aActualPosition > 0 ) + { + iRewindedToBeginning = EFalse; + } + + if ( tempCalculatedPosition < 0 ) + { + tempCalculatedPosition = 0; + } + } + + iPreviousPos = tempCalculatedPosition; + + return tempCalculatedPosition; + } + +// End of file diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/ipvtengine/src/musenginepluginentry.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/ipvtengine/src/musenginepluginentry.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,42 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + +#include "musengsessionmanager.h" +#include +#include + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +const TImplementationProxy KMusEnginePluginImplementationTable[] = + { + IMPLEMENTATION_PROXY_ENTRY( 0x20029876, CMusEngSessionManager::NewL ) + }; + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +EXPORT_C const TImplementationProxy* ImplementationGroupProxy( TInt& aTableCount ) + { + aTableCount = sizeof( KMusEnginePluginImplementationTable ) / + sizeof( TImplementationProxy ); + + return KMusEnginePluginImplementationTable; + } diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/ipvtengine/src/musenglivevideoplayer.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/ipvtengine/src/musenglivevideoplayer.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,169 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + +// USER +#include "musenglivevideoplayer.h" +#include "musengcamerahandler.h" +#include "musengdisplayhandler.h" +#include "musenglogger.h" + +// SYSTEM +#include + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +CMusEngLiveVideoPlayer* CMusEngLiveVideoPlayer::NewL( + MMusEngDisplayHandler& aDisplayHandler, + TMusEngCameraHandler& aCameraHandler, + MLcAudioControl& aLcAudioControl ) + { + return new( ELeave )CMusEngLiveVideoPlayer( + aDisplayHandler, aCameraHandler, aLcAudioControl ); + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +CMusEngLiveVideoPlayer::CMusEngLiveVideoPlayer( + MMusEngDisplayHandler& aDisplayHandler, + TMusEngCameraHandler& aCameraHandler, + MLcAudioControl& aLcAudioControl ) : + CMusEngLocalVideoPlayer( aDisplayHandler, aLcAudioControl ), + iCameraHandler( aCameraHandler ) + { + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +CMusEngLiveVideoPlayer::~CMusEngLiveVideoPlayer() + { + } + +// ----------------------------------------------------------------------------- +// From MLcVideoPlayer +// ----------------------------------------------------------------------------- +// +TBool CMusEngLiveVideoPlayer::LcIsPlayingL() + { + return iCameraHandler.IsPlayingL(); + } + +// ----------------------------------------------------------------------------- +// From MLcVideoPlayer +// ----------------------------------------------------------------------------- +// +void CMusEngLiveVideoPlayer::LcPlayL() + { + MUS_LOG( "mus: [ENGINE] -> CMusEngLiveVideoPlayer::LcPlayL" ) + iCameraHandler.PlayL(); + MUS_LOG( "mus: [ENGINE] <- CMusEngLiveVideoPlayer::LcPlayL" ) + } + +// ----------------------------------------------------------------------------- +// From MLcVideoPlayer +// ----------------------------------------------------------------------------- +// +void CMusEngLiveVideoPlayer::LcPauseL() + { + MUS_LOG( "mus: [ENGINE] -> CMusEngLiveVideoPlayer::LcPauseL" ) + iCameraHandler.PauseL(); + MUS_LOG( "mus: [ENGINE] <> CMusEngLiveVideoPlayer::LcPauseL" ) + } + +// ----------------------------------------------------------------------------- +// From MLcVideoPlayer +// ----------------------------------------------------------------------------- +// +MLcCameraControl* CMusEngLiveVideoPlayer::LcCameraControl() + { + return &iCameraHandler; + } + +// ----------------------------------------------------------------------------- +// From MLcVideoPlayer +// ----------------------------------------------------------------------------- +// +MLcDestinationFileControl* CMusEngLiveVideoPlayer::LcDestinationFileControl() + { + return this; + } + +// ----------------------------------------------------------------------------- +// From MLcVideoPlayer +// ----------------------------------------------------------------------------- +// +MLcZoomControl* CMusEngLiveVideoPlayer::LcZoomControl() + { + return &iCameraHandler; + } + +// ----------------------------------------------------------------------------- +// From MLcVideoPlayer +// ----------------------------------------------------------------------------- +// +MLcBrightnessControl* CMusEngLiveVideoPlayer::LcBrightnessControl() + { + return &iCameraHandler; + } + +// ----------------------------------------------------------------------------- +// From MLcFileControl +// ----------------------------------------------------------------------------- +// +void CMusEngLiveVideoPlayer::SetLcFileNameL( const TFileName& aFileName ) + { + iFileName = aFileName; + } + +// ----------------------------------------------------------------------------- +// From MLcFileControl +// ----------------------------------------------------------------------------- +// +TFileName& CMusEngLiveVideoPlayer::LcFileName() + { + return iFileName; + } + +// ----------------------------------------------------------------------------- +// From MLcDestinationFileControl +// ----------------------------------------------------------------------------- +// +void CMusEngLiveVideoPlayer::LcRecordL( TBool aRecord ) + { + MUS_LOG1( "mus: [ENGINE] -> CMusEngLiveVideoPlayer::LcRecordL(( %d )", + aRecord ) + + MUS_LOG( "mus: [ENGINE] <- CMusEngLiveVideoPlayer::LcRecordL" ) + } + +// ----------------------------------------------------------------------------- +// From MLcDestinationFileControl +// ----------------------------------------------------------------------------- +// +TBool CMusEngLiveVideoPlayer::LcIsRecording() + { + MUS_LOG( "mus: [ENGINE] -> CMusEngLiveVideoPlayer::LcIsRecording()" ) + + TBool isEnabled( EFalse ); + + return isEnabled; + } diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/ipvtengine/src/musenglocalvideoplayer.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/ipvtengine/src/musenglocalvideoplayer.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,70 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + +// USER +#include "musenglocalvideoplayer.h" +#include "musengdisplayhandler.h" + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +CMusEngLocalVideoPlayer::CMusEngLocalVideoPlayer( + MMusEngDisplayHandler& aDisplayHandler, + MLcAudioControl& aLcAudioControl ) : + CMusEngVideoPlayerBase( aDisplayHandler, aLcAudioControl ) + { + iState = EInit; + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +CMusEngLocalVideoPlayer::~CMusEngLocalVideoPlayer() + { + } + +// ----------------------------------------------------------------------------- +// From MLcVideoPlayer +// ----------------------------------------------------------------------------- +// +MLcVideoPlayer::TLcVideoPlayerState +CMusEngLocalVideoPlayer::LcVideoPlayerState() const + { + return iState; + } + + +// ----------------------------------------------------------------------------- +// From MLcWindow +// ----------------------------------------------------------------------------- +// +void CMusEngLocalVideoPlayer::SetLcWindowRectL( TRect aRect ) + { + iDisplayHandler.SetSecondaryRectL( aRect ); + } + +// ----------------------------------------------------------------------------- +// From MLcWindow +// ----------------------------------------------------------------------------- +// +TRect CMusEngLocalVideoPlayer::LcWindowRect() + { + return iDisplayHandler.SecondaryRect(); + } diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/ipvtengine/src/musengmcesession.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/ipvtengine/src/musengmcesession.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,796 @@ +/* +* 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: +* +*/ + + +// USER +#include "musengmcesession.h" +#include "lcsessionobserver.h" +#include "musenglogger.h" +#include "lcuiprovider.h" +#include "lcvideoplayer.h" +#include "musengremotevideoplayer.h" +#include "musenglivevideoplayer.h" +#include "mccscreen.h" + +// SYSTEM +#include +#include + +#include +#include +#include +#include + + +#include "svptimer.h" + +RDrawableWindow* testWindow = 0; + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +CMusEngMceSession::CMusEngMceSession() + { + iBackground = IsBackgroundStartup(); + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusEngMceSession::ConstructL() + { + MUS_LOG( "mus: [ENGINE] -> CMusEngMceSession::ConstructL()" ) + + iRemoteVideoPlayer = CMusEngRemoteVideoPlayer::NewL( *this, *this ); + iLiveVideoPlayer = CMusEngLiveVideoPlayer::NewL( *this, iCameraHandler, *this ); + iLcSessionState = MLcSession::EUninitialized; + + iTimer = CSVPTimer::NewL( *this, 1 ); + iCameraHandler.SetSession( this ); + + // indicator control + iIndicatorCtr = new ( ELeave ) LcVtIndicatorController(); + + MUS_LOG( "mus: [ENGINE] <- CMusEngMceSession::ConstructL()" ) + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +CMusEngMceSession::~CMusEngMceSession() + { + MUS_LOG( "mus: [ENGINE] -> CMusEngMceSession::~CMusEngMceSession()" ) + + delete iRemoteAddress; + delete iRemoteVideoPlayer; + delete iLiveVideoPlayer; + delete iScreen; + + if (iIndicatorCtr) + { + iIndicatorCtr->disableActiveCallIndicator(); + delete iIndicatorCtr; + } + MUS_LOG( "mus: [ENGINE] <- CMusEngMceSession::~CMusEngMceSession()" ) + } + +// ----------------------------------------------------------------------------- +// From MMusEngDisplayHandler +// ----------------------------------------------------------------------------- +// +TRect CMusEngMceSession::Rect() const + { + MUS_LOG( "mus: [ENGINE] CMusEngMceSession::Rect()" ) + return iRect; + } + +// ----------------------------------------------------------------------------- +// From MMusEngDisplayHandler +// ----------------------------------------------------------------------------- +// +void CMusEngMceSession::SetRectL( const TRect& aRect ) + { + MUS_LOG( "mus: [ENGINE] CMusEngSession::SetRectL()" ) + if ( !iScreen ){ + iScreen = CMccScreen::NewL(0,TPoint(0,0), TSize(640,640), 0, 1, 0, EFalse, testWindow); + } + iRect = aRect; + if ( iScreen ) + { + iScreen->SetPrimaryRectL(iRect); + } + } + +// ----------------------------------------------------------------------------- +// From MMusEngDisplayHandler +// ----------------------------------------------------------------------------- +// +void CMusEngMceSession::SetSecondaryRectL( const TRect& aSecondaryRect ) + { + MUS_LOG( "mus: [ENGINE] CMusEngMceSession::SetSecondaryRectL()" ) + if ( !iScreen ){ + iScreen = CMccScreen::NewL(0,TPoint(0,0), TSize(640,640), 0, 1, 0, EFalse, testWindow); + } + // Same rect is set by primary and secondary setters + iSetLocalRect = aSecondaryRect; + if ( iScreen ) + { + iScreen->SetSecondaryRectL(iSetLocalRect); + } + } + +// ----------------------------------------------------------------------------- +// From MMusEngDisplayHandler +// ----------------------------------------------------------------------------- +// +TRect CMusEngMceSession::SecondaryRect() const + { + MUS_LOG( "mus: [ENGINE] CMusEngMceSession::SecondaryRect()" ) + return iSetLocalRect; + } + +#if 0 + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusEngTwoWaySession::SetSecondaryRectL( const TRect& aSecondaryRect ) + { + MUS_LOG( "mus: [ENGINE] -> CMusEngTwoWaySession::SetSecondaryRectL()" ) + + iLocalRect = aSecondaryRect; + + MUS_LOG( "mus: [ENGINE] <- CMusEngTwoWaySession::SetSecondaryRectL()" ) + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +TRect CMusEngTwoWaySession::SecondaryRect() const + { + MUS_LOG( "mus: [ENGINE] -> CMusEngTwoWaySession::SecondaryRect()" ) + MUS_LOG( "mus: [ENGINE] <- CMusEngTwoWaySession::SecondaryRect()" ) + return iLocalRect; + } + +#endif + +// ----------------------------------------------------------------------------- +// From MMusEngDisplayHandler +// ----------------------------------------------------------------------------- +// +MMusEngDisplayHandler::TDisplayOrientation CMusEngMceSession::OrientationL() + { + MUS_LOG( "mus: [ENGINE] -> CMusEngMceSession::RotationL()" ) + return MMusEngDisplayHandler::EPortrait; + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusEngMceSession::SetOrientationL( TDisplayOrientation aOrientation ) + { + MUS_LOG1( "mus: [ENGINE] -> CMusEngMceSession::SetOrientationL() %d", + aOrientation ) + + MUS_LOG( "mus: [ENGINE] <- CMusEngMceSession::SetOrientationL()" ) + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusEngMceSession::EnableDisplayL( TBool aEnable ) + { + MUS_LOG1( "mus: [ENGINE] -> CMusEngMceSession::EnableDisplay() %d", + aEnable ) + + MUS_LOG( "mus: [ENGINE] <- CMusEngMceSession::EnableDisplay()") + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +TBool CMusEngMceSession::IsDisplayEnabled() + { + TBool enabled( EFalse ); + return enabled; + } + +// ----------------------------------------------------------------------------- +// From MMusEngDisplayHandler +// ----------------------------------------------------------------------------- +// +TBool CMusEngMceSession::IsDisplayActive() + { + return ( IsDisplayEnabled() ); + } + +// ----------------------------------------------------------------------------- +// From MLcSession +// ----------------------------------------------------------------------------- +// +MLcSession::TLcSessionState CMusEngMceSession::LcSessionState() const + { + MUS_LOG( "mus: [ENGINE] <- CMusEngMceSession::LcSessionState()" ) + + TLcSessionState lcSessionState = MLcSession::EUninitialized; + +/* + if ( iSession ) + { + switch( iSession->State() ) + { + case CMceSession::EIdle: + { + lcSessionState = MLcSession::EInitialized; + break; + } + case CMceSession::EIncoming: + case CMceSession::EProceeding: + case CMceSession::EReserving: + { + lcSessionState = MLcSession::EReceived; + break; + } + + case CMceSession::EOffering: + case CMceSession::EAnswering: + { + lcSessionState = MLcSession::EOpening; + break; + } + case CMceSession::EEstablished: + { + lcSessionState = MLcSession::EOpen; + break; + } + case CMceSession::ECancelling: + case CMceSession::ETerminating: + { + lcSessionState = MLcSession::EClosing; + break; + } + case CMceSession::ETerminated: + { + lcSessionState = MLcSession::EClosed; + break; + } + default: + { + lcSessionState = MLcSession::EUninitialized; + break; + } + } + } +*/ + + return iLcSessionState; + } + +// ----------------------------------------------------------------------------- +// From MLcSession +// ----------------------------------------------------------------------------- +// +void CMusEngMceSession::SetLcSessionObserver( MLcSessionObserver* aObserver ) + { + iLcSessionObserver = aObserver; + } + +// ----------------------------------------------------------------------------- +// From MLcSession +// ----------------------------------------------------------------------------- +// +void CMusEngMceSession::SetLcUiProvider( MLcUiProvider* aUiProvider ) + { + iLcUiProvider = aUiProvider; + } + +// ----------------------------------------------------------------------------- +// From MLcSession +// ----------------------------------------------------------------------------- +// +MLcVideoPlayer* CMusEngMceSession::RemoteVideoPlayer() + { + return iRemoteVideoPlayer; + } + +// ----------------------------------------------------------------------------- +// From MLcSession +// ----------------------------------------------------------------------------- +// +MLcVideoPlayer* CMusEngMceSession::LocalVideoPlayer() + { + return iLiveVideoPlayer; + } + +// ----------------------------------------------------------------------------- +// From MLcSession +// ----------------------------------------------------------------------------- +// +const TDesC& CMusEngMceSession::LocalDisplayName() + { + return KNullDesC; + } + +// ----------------------------------------------------------------------------- +// From MLcSession +// ----------------------------------------------------------------------------- +// +const TDesC& CMusEngMceSession::RemoteDisplayName() + { + return *iRemoteAddress; + } + +// ----------------------------------------------------------------------------- +// From MLcSession +// ----------------------------------------------------------------------------- +// +TInt CMusEngMceSession::SetParameter( TInt aId, TInt aValue ) + { + if ( aId == 0 ){ + testWindow = reinterpret_cast(aValue); + } + return KErrNotSupported; + } + +// ----------------------------------------------------------------------------- +// From MLcSession +// ----------------------------------------------------------------------------- +// +TInt CMusEngMceSession::ParameterValue( TInt /*aId*/ ) + { + return KErrNotSupported; + } + +// ----------------------------------------------------------------------------- +// From MLcSession +// ----------------------------------------------------------------------------- +// +TBool CMusEngMceSession::IsBackgroundStartup() + { + return ETrue; + } + +// ----------------------------------------------------------------------------- +// From MLcSession +// ----------------------------------------------------------------------------- +// +TBool CMusEngMceSession::SendDialTone( TChar aKey ) + { + MUS_LOG1( "mus: [ENGINE] -> CMusEngMceSession::SendDialTone() key = %c",aKey ) + return ETrue; + } + + // ----------------------------------------------------------------------------- +// From MLcAudioControl +// ----------------------------------------------------------------------------- +// +TBool CMusEngMceSession::IsLcAudioMutedL() + { + return EFalse; + } + +// ----------------------------------------------------------------------------- +// From MLcAudioControl +// ----------------------------------------------------------------------------- +// +void CMusEngMceSession::MuteLcAudioL( TBool aMute ) + { + } + +// ----------------------------------------------------------------------------- +// From MLcAudioControl +// ----------------------------------------------------------------------------- +// +TBool CMusEngMceSession::IsLcMicMutedL() + { + return EFalse; + } + +// ----------------------------------------------------------------------------- +// From MLcAudioControl +// ----------------------------------------------------------------------------- +// +void CMusEngMceSession::MuteLcMicL( TBool aMute ) + { + } + +// ----------------------------------------------------------------------------- +// From MLcAudioControl +// ----------------------------------------------------------------------------- +// +TBool CMusEngMceSession::IsEnablingLcLoudspeakerAllowed() + { + return ETrue; + } + +// ----------------------------------------------------------------------------- +// From MLcAudioControl +// ----------------------------------------------------------------------------- +// +void CMusEngMceSession::EnableLcLoudspeakerL( TBool aEnabled ) + { + } + +// ----------------------------------------------------------------------------- +// From MLcAudioControl +// ----------------------------------------------------------------------------- +// +TBool CMusEngMceSession::IsLcLoudspeakerEnabled() + { + return ETrue; + } + +// ----------------------------------------------------------------------------- +// From MLcAudioControl +// ----------------------------------------------------------------------------- +// +TInt CMusEngMceSession::LcVolumeL() + { + return 5; + } + +// ----------------------------------------------------------------------------- +// From MLcAudioControl +// ----------------------------------------------------------------------------- +// +void CMusEngMceSession::SetLcVolumeL( TInt aValue ) + { + } + +// ----------------------------------------------------------------------------- +// From MLcAudioControl +// ----------------------------------------------------------------------------- +// +void CMusEngMceSession::IncreaseLcVolumeL() + { + } + +// ----------------------------------------------------------------------------- +// From MLcAudioControl +// ----------------------------------------------------------------------------- +// +void CMusEngMceSession::DecreaseLcVolumeL() + { + } + + +// ----------------------------------------------------------------------------- +// From MLcAudioControl +// ----------------------------------------------------------------------------- +// +void CMusEngMceSession::TimedOut( TInt aTimerId ) + { + MUS_LOG( "mus: [ENGINE] -> CMusEngMceSession::TimedOut()" ) + +/* + iLcSessionState = MLcSession::EOpen; + + if ( iLcSessionObserver ) + { + MUS_LOG( "mus: [ENGINE] -> CMusEngMceSession::TimedOut(), StateChanged" ) + iLcSessionObserver->StateChanged( *this ); + } +*/ + switch( aTimerId ) + { + case 1: + { + MUS_LOG( "mus: [ENGINE] -> CMusEngMceSession::TimedOut(), StateChanged -> Established" ) + + InformUiProviderAboutReceivingStart(); + + iLcSessionState = MLcSession::EOpen; + iLcSessionObserver->StateChanged( *this ); + + // starting remote playing timer + iTimer->SetTime(10000, 3); + + break; + } + case 2: + { + MUS_LOG( "mus: [ENGINE] -> CMusEngMceSession::TimedOut(), StateChanged -> RemotePlaying" ) + iRemoteVideoPlayer->iState = MLcVideoPlayer::EPlaying; + iLcSessionObserver->StateChanged( *iRemoteVideoPlayer ); + break; + } + case 3: + { + MUS_LOG( "mus: [ENGINE] -> CMusEngMceSession::TimedOut(), StateChanged -> LocalPlaying" ) + iLiveVideoPlayer->iState = MLcVideoPlayer::EPlaying; + iLcSessionObserver->StateChanged( *iLiveVideoPlayer ); + iTimer->SetTime(5000, 2); + break; + } + case 10: + { + MUS_LOG( "mus: [ENGINE] -> CMusEngMceSession::TimedOut(), Camera Toggle, StateChanged -> LocalPaused" ) + iLiveVideoPlayer->iState = MLcVideoPlayer::EPaused; + iLcSessionObserver->StateChanged( *iLiveVideoPlayer ); + iTimer->SetTime(10000, 11); + break; + } + case 11: + { + MUS_LOG( "mus: [ENGINE] -> CMusEngMceSession::TimedOut(), Camera Toggle, StateChanged -> LocalPlaying" ) + iLiveVideoPlayer->iState = MLcVideoPlayer::EPlaying; + iLcSessionObserver->StateChanged( *iLiveVideoPlayer ); + break; + } + case 12: + { + MUS_LOG( "mus: [ENGINE] -> CMusEngMceSession::TimedOut(), Camera Play, StateChanged -> LocalPlaying" ) + iLiveVideoPlayer->iState = MLcVideoPlayer::EPlaying; + iLcSessionObserver->StateChanged( *iLiveVideoPlayer ); + break; + } + case 13: + { + MUS_LOG( "mus: [ENGINE] -> CMusEngMceSession::TimedOut(), Camera Pause, StateChanged -> LocalIdle" ) + iLiveVideoPlayer->iState = MLcVideoPlayer::EPaused; + iLcSessionObserver->StateChanged( *iLiveVideoPlayer ); + break; + } + + + case 14: + { + MUS_LOG( "mus: [ENGINE] -> CMusEngMceSession::TimedOut(), StateChanged -> EReceived" ) + InformUiProviderAboutReceivingStart(); + iLcSessionState = MLcSession::EReceived; + iLcSessionObserver->StateChanged( *this ); + break; + } + + default: + { + iLcSessionState = MLcSession::EUninitialized; + break; + } + } +/* + switch( aTimerId ) + { + case CMceSession::EIdle: + { + lcSessionState = MLcSession::EInitialized; + break; + } + case CMceSession::EIncoming: + case CMceSession::EProceeding: + case CMceSession::EReserving: + { + lcSessionState = MLcSession::EReceived; + break; + } + + case CMceSession::EOffering: + case CMceSession::EAnswering: + { + lcSessionState = MLcSession::EOpening; + break; + } + case CMceSession::EEstablished: + { + lcSessionState = MLcSession::EOpen; + break; + } + case CMceSession::ECancelling: + case CMceSession::ETerminating: + { + lcSessionState = MLcSession::EClosing; + break; + } + case CMceSession::ETerminated: + { + lcSessionState = MLcSession::EClosed; + break; + } + default: + { + lcSessionState = MLcSession::EUninitialized; + break; + } + } +*/ + MUS_LOG( "mus: [ENGINE] <- CMusEngMceSession::TimedOut()" ) + } + + + +TInt CMusEngMceSession::SetForegroundStatus( TBool aIsForeground ) + { + MUS_LOG1( "mus: [ENGINE] -> CMusEngMceSession::SetForegroundStatus() %d", + aIsForeground ) + if ( iScreen ){ + iScreen->Update(aIsForeground); + } + + if ( aIsForeground ) + { + iIndicatorCtr->disableActiveCallIndicator(); + } + else { + iIndicatorCtr->enableActiveCallIndicator(); + } + return KErrNone; + } + +_LIT( KIpVtEngStubRemoteDetails, "5556567844" ); + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +const TDesC& CMusEngMceSession::RemoteDetails() + { + return KIpVtEngStubRemoteDetails(); + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusEngMceSession::SetRemoteL( const TDesC& aRemote ) +{ + iRemoteAddress = aRemote.AllocL(); +} + +#if 0 + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusEngMceSession::InformObserverAboutSessionStateChange() + { + if ( iLcSessionObserver ) + { + iLcSessionObserver->StateChanged( *this ); + } + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusEngMceSession::InformObserverAboutSessionUpdate() + { + if ( iLcSessionObserver ) + { + iLcSessionObserver->Updated( *this ); + } + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusEngMceSession::InformObserverAboutSessionFailure( TInt aReason ) + { + if ( iLcSessionObserver ) + { + iLcSessionObserver->Failed( *this, aReason ); + } + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusEngMceSession::InformObserverAboutPlayerStateChange( + MLcVideoPlayer* aPlayer ) + { + if ( iLcSessionObserver && aPlayer ) + { + iLcSessionObserver->StateChanged( *aPlayer ); + } + + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusEngMceSession::InformObserverAboutPlayerUpdate( + MLcVideoPlayer* aPlayer ) + { + if ( iLcSessionObserver && aPlayer ) + { + iLcSessionObserver->Updated( *aPlayer ); + } + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusEngMceSession::InformObserverAboutPlayerFailure( + MLcVideoPlayer* aPlayer, + TInt aReason ) + { + if ( iLcSessionObserver && aPlayer ) + { + iLcSessionObserver->Failed( *aPlayer, aReason ); + } + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +MLcUiProvider& CMusEngMceSession::LcUiProviderL() + { + __ASSERT_ALWAYS( iLcUiProvider, User::Leave( KErrNotReady ) ); + return *iLcUiProvider; + } +#endif + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusEngMceSession::InformUiProviderAboutReceivingStart() + { + MUS_LOG( "mus: [ENGINE] -> CMusEngMceSession::InformUiProviderAboutReceivingStart()" ) + if ( iBackground && iLcUiProvider ) + { + MUS_LOG( "mus: [ENGINE] receiving started in BG mode, switching to FG" ) + iBackground = EFalse; + iLcUiProvider->HandleForegroundStatus( ETrue ); + } + MUS_LOG( "mus: [ENGINE] <- CMusEngMceSession::InformUiProviderAboutReceivingStart()" ) + } + +void CMusEngMceSession::ToggleCameraL() + { + MUS_LOG( "mus: [ENGINE] -> CMusEngMceSession::ToggleCameraL()" ) + if( iLiveVideoPlayer->iState == MLcVideoPlayer::EPlaying ) + { + MUS_LOG( "mus: [ENGINE] -> CMusEngMceSession::ToggleCameraL(), start timer" ) + iTimer->SetTime(5000, 10); + } + MUS_LOG( "mus: [ENGINE] <- CMusEngMceSession::ToggleCameraL()" ) + } + +void CMusEngMceSession::PlayCameraL() + { + MUS_LOG( "mus: [ENGINE] -> CMusEngMceSession::PlayCameraL()" ) + iTimer->SetTime(5000, 12); + MUS_LOG( "mus: [ENGINE] <- CMusEngMceSession::PlayCameraL()" ) + } + +void CMusEngMceSession::PauseCameraL() + { + MUS_LOG( "mus: [ENGINE] -> CMusEngMceSession::PauseCameraL()" ) + iTimer->SetTime(5000, 13); + MUS_LOG( "mus: [ENGINE] <- CMusEngMceSession::PauseCameraL()" ) + } + + +// End of file diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/ipvtengine/src/musengmceutils.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/ipvtengine/src/musengmceutils.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,594 @@ +/* +* Copyright (c) 2005-2006 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: Utilities to get and set profile used with SWIS. +* +*/ + + + +// USER + +#include "musengmceutils.h" +#include "muslogger.h" + +// SYSTEM + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + + + + + +// ----------------------------------------------------------------------------- +// Tells if parameter stream is a video stream with RTP source +// ----------------------------------------------------------------------------- +// +TBool MusEngMceUtils::IsVideoInStream( CMceMediaStream& aStream ) + { + return ( aStream.Type() == KMceVideo && + aStream.Source() && + aStream.Source()->Type() == KMceRTPSource ); + } + +// ----------------------------------------------------------------------------- +// Tells if parameter stream is a video stream with RTP sink +// ----------------------------------------------------------------------------- +// +TBool MusEngMceUtils::IsVideoOutStream( CMceMediaStream& aStream ) + { + TBool isOutStream( EFalse ); + if ( aStream.Type() == KMceVideo ) + { + CMceMediaSink* rtpSink = MusEngMceUtils::GetMediaSink( + aStream, + KMceRTPSink ); + + isOutStream = ( rtpSink != NULL ); + } + return isOutStream; + } + +// ----------------------------------------------------------------------------- +// Tells if parameter stream is an audio stream with RTP source +// ----------------------------------------------------------------------------- +// +TBool MusEngMceUtils::IsAudioInStream( CMceMediaStream& aStream ) + { + return ( aStream.Type() == KMceAudio && + aStream.Source() && + aStream.Source()->Type() == KMceRTPSource ); + } + + +// ----------------------------------------------------------------------------- +// Gets handle to video stream with RTP sink. +// ----------------------------------------------------------------------------- +// +CMceVideoStream* MusEngMceUtils::GetVideoOutStreamL( CMceSession& aSession ) + { + MUS_LOG( "mus: [ENGINE] -> MusEngMceUtils::GetVideoOutStreamL()" ) + + const RPointerArray& streams = aSession.Streams(); + + CMceVideoStream* videoOut = NULL; + + for ( TInt i = 0; i < streams.Count(); ++i ) + { + if ( MusEngMceUtils::IsVideoOutStream( *streams[i] ) ) + { + __ASSERT_ALWAYS( !videoOut, User::Leave( KErrOverflow ) ); + + videoOut = static_cast( streams[i] ); + } + + // Check if bound stream is a video stream with RTP sink. + if ( streams[i]->BoundStream() && + MusEngMceUtils::IsVideoOutStream( streams[i]->BoundStreamL() ) ) + { + __ASSERT_ALWAYS( !videoOut, User::Leave( KErrOverflow ) ); + + videoOut = static_cast( + &streams[i]->BoundStreamL() ); + } + } + + __ASSERT_ALWAYS( videoOut, User::Leave( KErrNotFound ) ); + + MUS_LOG( "mus: [ENGINE] <- MusEngMceUtils::GetVideoOutStreamL()" ) + + return videoOut; + } + + +// ----------------------------------------------------------------------------- +// Gets handle to video stream with RTP source. +// ----------------------------------------------------------------------------- +// +CMceVideoStream* MusEngMceUtils::GetVideoInStreamL( CMceSession& aSession ) + { + MUS_LOG( "mus: [ENGINE] -> MusEngMceUtils::GetVideoInStreamL()" ) + + const RPointerArray& streams = aSession.Streams(); + + CMceVideoStream* videoIn = NULL; + + for ( TInt i = 0; i < streams.Count(); ++i ) + { + if ( MusEngMceUtils::IsVideoInStream( *streams[i] ) ) + + { + __ASSERT_ALWAYS( !videoIn, User::Leave( KErrOverflow ) ); + + videoIn = static_cast( streams[i] ); + } + + // Check if bound stream is a video stream with RTP souce. + if ( streams[i]->BoundStream() && + MusEngMceUtils::IsVideoInStream( streams[i]->BoundStreamL() ) ) + { + __ASSERT_ALWAYS( !videoIn, User::Leave( KErrOverflow ) ); + + videoIn = static_cast( + &streams[i]->BoundStreamL() ); + } + } + + __ASSERT_ALWAYS( videoIn, User::Leave( KErrNotFound ) ); + + MUS_LOG( "mus: [ENGINE] <- MusEngMceUtils::GetVideoInStreamL()" ) + + return videoIn; + } + + +// ----------------------------------------------------------------------------- +// Gets handle to video stream with file sink +// ----------------------------------------------------------------------------- +// +CMceVideoStream* MusEngMceUtils::GetRecordingStream( CMceSession& aSession ) + { + MUS_LOG( "mus: [ENGINE] -> MusEngMceUtils::GetRecordingStreamL()" ) + + const RPointerArray& streams = aSession.Streams(); + + CMceVideoStream* recordingStream = NULL; + + for ( TInt i = 0; i < streams.Count(); ++i ) + { + if ( streams[i]->Type() == KMceVideo ) + { + if ( MusEngMceUtils::GetMediaSink( *streams[i], KMceFileSink ) ) + { + recordingStream = static_cast( streams[i] ); + } + } + } + + MUS_LOG( "mus: [ENGINE] <- MusEngMceUtils::GetRecordingStreamL()" ) + + return recordingStream; + } + + +// ----------------------------------------------------------------------------- +// Gets handle to a media sink of spesified type contained by a mediastream. +// ----------------------------------------------------------------------------- +// +CMceMediaSink* MusEngMceUtils::GetMediaSink( CMceMediaStream& aStream, + TMceSinkType aType, + TMceSourceType aAssociatedSourceType ) + { + const RPointerArray& sinks = aStream.Sinks(); + for ( TInt i = 0; i < sinks.Count(); ++i ) + { + if ( sinks[i]->Type() == aType && + ( aAssociatedSourceType == KMusEngNoAssociatedSourceType || + aStream.Source()->Type() == aAssociatedSourceType ) ) + { + return sinks[i]; + } + } + + return NULL; + } + + +// ----------------------------------------------------------------------------- +// Gets handle to a media sink of spesified type contained by a mediastream. +// ----------------------------------------------------------------------------- +// +CMceMediaSink* MusEngMceUtils::GetMediaSinkL( CMceMediaStream& aStream, + TMceSinkType aType, + TMceSourceType aAssociatedSourceType ) + { + + CMceMediaSink* sink = MusEngMceUtils::GetMediaSink( aStream, aType, aAssociatedSourceType ); + + __ASSERT_ALWAYS( sink, User::Leave( KErrNotFound ) ); + + return sink; + } + + +// ----------------------------------------------------------------------------- +// Gets handle to a media sink of spesified type contained by a session. +// ----------------------------------------------------------------------------- +// +CMceMediaSink* MusEngMceUtils::GetMediaSink( CMceSession& aSession, + TMceSinkType aType, + TMceSourceType aAssociatedSourceType, + TBool aStrictMatch ) + { + CMceMediaSink* sink = NULL; + + TRAP_IGNORE( sink = MusEngMceUtils::GetMediaSinkL( + aSession, aType, aAssociatedSourceType, aStrictMatch ) ) + + return sink; + } + + +// ----------------------------------------------------------------------------- +// Gets handle to a media sink of spesified type contained by a session. +// ----------------------------------------------------------------------------- +// +CMceMediaSink* MusEngMceUtils::GetMediaSinkL( CMceSession& aSession, + TMceSinkType aType, + TMceSourceType aAssociatedSourceType, + TBool aStrictMatch ) + { + CMceMediaSink* sink = NULL; + + const RPointerArray& streams = aSession.Streams(); + + for ( TInt i = 0; i < streams.Count(); ++i ) + { + sink = MusEngMceUtils::GetMediaSink( *streams[i], aType, aAssociatedSourceType ); + if ( sink ) + { + return sink; + } + + if ( streams[i]->BoundStream() ) + { + sink = MusEngMceUtils::GetMediaSink( streams[i]->BoundStreamL(), + aType, + aAssociatedSourceType ); + if ( sink ) + { + return sink; + } + } + } + + if ( !sink && aAssociatedSourceType != KMusEngNoAssociatedSourceType && !aStrictMatch ) + { + // No preferred match, try without source preference + sink = GetMediaSinkL( aSession, aType ); + } + + __ASSERT_ALWAYS( sink, User::Leave( KErrNotFound ) ); + + return sink; + } + + +// ----------------------------------------------------------------------------- +// Gets handle to a speaker sink contained by specified stream or bound stream. +// ----------------------------------------------------------------------------- +// +CMceSpeakerSink* MusEngMceUtils::GetSpeaker( CMceMediaStream& aStream ) + { + MUS_LOG( "mus: [ENGINE] -> MusEngMceUtils::GetSpeaker()" ) + + CMceSpeakerSink* speaker = NULL; + + if ( aStream.Type() == KMceAudio ) + { + speaker = static_cast( + MusEngMceUtils::GetMediaSink( aStream, KMceSpeakerSink ) ); + + if ( !speaker && aStream.BoundStream() ) + { + CMceMediaStream* boundStream = NULL; + TRAPD( error, boundStream = &aStream.BoundStreamL() ) + + if ( error == KErrNone ) + { + speaker = static_cast( + MusEngMceUtils::GetMediaSink( *boundStream, + KMceSpeakerSink ) ); + } + } + } + + MUS_LOG( "mus: [ENGINE] <- MusEngMceUtils::GetSpeaker()" ) + + return speaker; + } + + +// ----------------------------------------------------------------------------- +// Gets handle to a camera source. +// ----------------------------------------------------------------------------- +// +CMceCameraSource* MusEngMceUtils::GetCameraL( CMceSession& aSession ) + { + // Camera can be only in out stream + MUS_LOG( "mus: [ENGINE] -> MusEngMceUtils::GetCameraL()" ) + + CMceVideoStream* videoOut = MusEngMceUtils::GetVideoOutStreamL( aSession ); + + if ( !( videoOut->Source() && + videoOut->Source()->Type() == KMceCameraSource ) ) + { + User::Leave( KErrNotFound ); + } + + MUS_LOG( "mus: [ENGINE] <- MusEngMceUtils::GetCameraL()" ) + return static_cast( videoOut->Source() ); + } + + +// ----------------------------------------------------------------------------- +// Gets handle to a file source. +// ----------------------------------------------------------------------------- +// +CMceFileSource* MusEngMceUtils::GetFileSourceL( CMceSession& aSession ) + { + MUS_LOG( "mus: [ENGINE] -> MusEngMceUtils::GetFileSourceL()" ) + + CMceVideoStream* videoOut = MusEngMceUtils::GetVideoOutStreamL( aSession ); + + if ( !( videoOut->Source() && + videoOut->Source()->Type() == KMceFileSource ) ) + { + User::Leave( KErrNotFound ); + } + + MUS_LOG( "mus: [ENGINE] <- MusEngMceUtils::GetFileSourceL()" ) + return static_cast( videoOut->Source() ); + } + + +// ----------------------------------------------------------------------------- +// Gets handle to a display sink. +// ----------------------------------------------------------------------------- +// +CMceDisplaySink* MusEngMceUtils::GetDisplay( + CMceSession& aSession, TBool aPreferViewFinder ) + { + MUS_LOG( "mus: [ENGINE] -> MusEngMceUtils::GetDisplay()" ) + MUS_LOG( "mus: [ENGINE] <- MusEngMceUtils::GetDisplay()" ) + TMceSourceType preferredSource = + aPreferViewFinder ? KMceCameraSource : KMusEngNoAssociatedSourceType; + return static_cast( + MusEngMceUtils::GetMediaSink( aSession, KMceDisplaySink, preferredSource ) ); + + } + + +// ----------------------------------------------------------------------------- +// Gets handle to a display sink. +// ----------------------------------------------------------------------------- +// +CMceDisplaySink* MusEngMceUtils::GetDisplayL( + CMceSession& aSession, TBool aPreferViewFinder ) + { + MUS_LOG( "mus: [ENGINE] -> MusEngMceUtils::GetDisplayL()" ) + + CMceDisplaySink* display = MusEngMceUtils::GetDisplay( aSession, aPreferViewFinder ); + + __ASSERT_ALWAYS( display, User::Leave( KErrNotFound ) ); + + MUS_LOG( "mus: [ENGINE] <- MusEngMceUtils::GetDisplayL()" ) + return display; + } + +// ----------------------------------------------------------------------------- +// Gets handle to a display sink displaying received video. +// ----------------------------------------------------------------------------- +// +CMceDisplaySink* MusEngMceUtils::GetReceivingDisplay( CMceSession& aSession ) + { + MUS_LOG( "mus: [ENGINE] -> MusEngMceUtils::GetReceivingDisplay()" ) + MUS_LOG( "mus: [ENGINE] <- MusEngMceUtils::GetReceivingDisplay()" ) + + // Search display which is connected with rtp source + TMceSourceType preferredSource = KMceRTPSource; + return static_cast( MusEngMceUtils::GetMediaSink( + aSession, KMceDisplaySink, preferredSource, ETrue ) ); + } + +// ----------------------------------------------------------------------------- +// Gets handle to a display sink displaying received video. +// ----------------------------------------------------------------------------- +// +CMceDisplaySink* MusEngMceUtils::GetReceivingDisplayL( CMceSession& aSession ) + { + MUS_LOG( "mus: [ENGINE] -> MusEngMceUtils::GetReceivingDisplayL()" ) + + CMceDisplaySink* display = GetReceivingDisplay( aSession ); + __ASSERT_ALWAYS( display != NULL, User::Leave( KErrNotFound ) ); + + MUS_LOG( "mus: [ENGINE] <- MusEngMceUtils::GetReceivingDisplay()" ) + + return display; + } + +// ----------------------------------------------------------------------------- +// Gets handle to a display sink displaying viewfinder content. +// ----------------------------------------------------------------------------- +// +CMceDisplaySink* MusEngMceUtils::GetVfDisplay( CMceSession& aSession ) + { + MUS_LOG( "mus: [ENGINE] -> MusEngMceUtils::GetVfDisplay()" ) + MUS_LOG( "mus: [ENGINE] <- MusEngMceUtils::GetVfDisplay()" ) + + // Search display which is connected with camera + TMceSourceType preferredSource = KMceCameraSource; + return static_cast( MusEngMceUtils::GetMediaSink( + aSession, KMceDisplaySink, preferredSource, ETrue ) ); + } + +// ----------------------------------------------------------------------------- +// Adds display sink to specified stream if one does not exist already. +// Display rect is set in both cases. +// ----------------------------------------------------------------------------- +// +void MusEngMceUtils::AddDisplayL( CMceMediaStream& aStream, + CMceManager& aManager, + const TRect& aDisplayRect ) + { + MUS_LOG( "mus: [ENGINE] -> MusEngMceUtils::AddDisplayL()" ) + + __ASSERT_ALWAYS( aStream.Type() == KMceVideo, User::Leave( KErrArgument ) ); + + CMceDisplaySink* display = static_cast( + MusEngMceUtils::GetMediaSink( + aStream, + KMceDisplaySink ) ); + + if ( !display ) + { + display = CMceDisplaySink::NewLC( aManager ); + aStream.AddSinkL( display ); + CleanupStack::Pop( display ); + } + + display->SetDisplayRectL( aDisplayRect ); + + MUS_LOG( "mus: [ENGINE] <- MusEngMceUtils::AddDisplayL()" ) + } + + +// ----------------------------------------------------------------------------- +// Adds display sink to specified stream if one does not exist already. +// ----------------------------------------------------------------------------- +// +void MusEngMceUtils::AddSpeakerL( CMceMediaStream& aStream ) + { + MUS_LOG( "mus: [ENGINE] -> MusEngMceUtils::AddSpeakerL()" ) + + __ASSERT_ALWAYS( aStream.Type() == KMceAudio, User::Leave( KErrArgument ) ); + + CMceSpeakerSink* speaker = static_cast( + MusEngMceUtils::GetMediaSink( + aStream, + KMceSpeakerSink ) ); + + if ( !speaker ) + { + speaker = CMceSpeakerSink::NewLC(); + aStream.AddSinkL( speaker ); + CleanupStack::Pop( speaker ); + } + + MUS_LOG( "mus: [ENGINE] <- MusEngMceUtils::AddSpeakerL()" ) + } + + +// ----------------------------------------------------------------------------- +// Disables parameter stream, its' source and all the sinks. +// ----------------------------------------------------------------------------- +// +void MusEngMceUtils::DisableStreamL( CMceMediaStream& aStream ) + { + MUS_LOG( "mus: [ENGINE] -> MusEngMceUtils::DisableStreamL()" ) + + aStream.DisableL(); + + if ( aStream.Source() ) + { + aStream.Source()->DisableL(); + } + + for ( TInt sinkIndex = 0; sinkIndex < aStream.Sinks().Count(); ++sinkIndex ) + { + aStream.Sinks()[ sinkIndex ]->DisableL(); + } + + MUS_LOG( "mus: [ENGINE] -> MusEngMceUtils::DisableStreamL()" ) + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void MusEngMceUtils::DoEnableDisplayL( CMceDisplaySink& aDisplay, TBool aEnable ) + { + MUS_LOG1( "mus: [ENGINE] -> MusEngMceUtils::DoEnableDisplayL() %d", + aEnable ) + + if ( aEnable ) + { + if ( !aDisplay.IsEnabled() ) + { + aDisplay.EnableL(); + MUS_LOG( " Display enabled" ) + } + else + { + MUS_LOG( " Display already enabled, ignore" ) + } + } + else + { + if ( aDisplay.IsEnabled() ) + { + aDisplay.DisableL(); + MUS_LOG( " Display disabled" ) + } + else + { + MUS_LOG( " Display already disabled, ignore" ) + } + } + + MUS_LOG( "mus: [ENGINE] <- MusEngMceUtils::DoEnableDisplayL()") + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +TInt MusEngMceUtils::EnableInactivityTimer( + CMceSession& aSession, + TUint32 aInactivityTimeout ) + { + TInt err( KErrNotFound ); + CMceVideoStream* stream = NULL; + TRAP_IGNORE( stream = MusEngMceUtils::GetVideoInStreamL( aSession ) ) + if ( stream ) + { + // Instream has always RTP source + err = KErrNone; + CMceRtpSource* rtpSource = static_cast( stream->Source() ); + TRAP( err, rtpSource->EnableInactivityTimerL( aInactivityTimeout ) ) + } + + return err; + } + +// End of file diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/ipvtengine/src/musengremotevideoplayer.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/ipvtengine/src/musengremotevideoplayer.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,75 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + + +// USER +#include "musengremotevideoplayer.h" +#include "musengdisplayhandler.h" + +// SYSTEM +#include + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +CMusEngRemoteVideoPlayer* CMusEngRemoteVideoPlayer::NewL( + MMusEngDisplayHandler& aDisplayHandler, + MLcAudioControl& aLcAudioControl ) + { + return new( ELeave )CMusEngRemoteVideoPlayer( + aDisplayHandler, aLcAudioControl ); + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +CMusEngRemoteVideoPlayer::CMusEngRemoteVideoPlayer( + MMusEngDisplayHandler& aDisplayHandler, + MLcAudioControl& aLcAudioControl ) : + CMusEngVideoPlayerBase( aDisplayHandler, aLcAudioControl ) + { + iState = EInit; + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +CMusEngRemoteVideoPlayer::~CMusEngRemoteVideoPlayer() + { + } + +// ----------------------------------------------------------------------------- +// From MLcVideoPlayer +// ----------------------------------------------------------------------------- +// +MLcVideoPlayer::TLcVideoPlayerState +CMusEngRemoteVideoPlayer::LcVideoPlayerState() const + { + return iState; + } + +// ----------------------------------------------------------------------------- +// From MLcVideoPlayer +// ----------------------------------------------------------------------------- +// +TBool CMusEngRemoteVideoPlayer::LcIsPlayingL() + { + return ETrue; + } diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/ipvtengine/src/musengsessionmanager.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/ipvtengine/src/musengsessionmanager.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,113 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + +#include "musengsessionmanager.h" +#include "musengmcesession.h" +#include "musengtwowaysession.h" +#include "lcsession.h" +#include "mccdatasender.h" +#include "mccdatareceiver.h" +#include "musenglogger.h" +#include "mccdatastructures.h" +#include +#include + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +CMusEngSessionManager* CMusEngSessionManager::NewL() + { + CMusEngSessionManager* self = new( ELeave )CMusEngSessionManager(); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + return self; + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +CMusEngSessionManager::~CMusEngSessionManager() + { + delete iSession; + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +CMusEngSessionManager::CMusEngSessionManager() + { + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusEngSessionManager::ConstructL() + { + MUS_LOG( "mus: [ENGINE] -> CMusEngSessionManager::ConstructL()" ) + //iMsgReceiver = CMccDataReceiver::NewL(*this); + MUS_LOG( "mus: [ENGINE] MsgQueue1 setup complete" ) + //iMsgSender = CMccDataSender::NewL(); + MUS_LOG( "mus: [ENGINE] MsgQueue2 setup complete" ) + iSession = CMusEngTwoWaySession::NewL(); + iSession->SetRemoteL( _L("Homer Simpson") ); + MUS_LOG( "mus: [ENGINE] <- CMusEngSessionManager::ConstructL()" ) + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +MLcSession& CMusEngSessionManager::Session() + { + return *iSession; + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusEngSessionManager::DataReceived( const TDataMessage& aData ) + { + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +TBool CMusEngSessionManager::IsFeatureSupported( TLcFeature aLcFeature ) + { + TBool ret = EFalse; + if ( ELcSendVideoQuery == aLcFeature ) + { + TInt videoSendingSetting; + CRepository* repository = CRepository::NewL( KCRUidTelephonySettings ); + if ( KErrNone == repository->Get(KSettingsVTVideoSending, videoSendingSetting) ) + { + if ( VTSETTING_ALWAYS_ASK_FIRST == videoSendingSetting ) + ret = ETrue; + } + delete repository; + } + return ret; + } + +// End of File diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/ipvtengine/src/musengtwowayrecvsession.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/ipvtengine/src/musengtwowayrecvsession.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,521 @@ +/* +* 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: +* +*/ + + +// USER +#include "musengtwowayrecvsession.h" +#include "lcsessionobserver.h" +#include "musunittesting.h" +#include "musengmceutils.h" +#include "musenglogger.h" +#include "mussipprofilehandler.h" +#include "musenglivevideoplayer.h" +#include "musengremotevideoplayer.h" + +// SYSTEM +#include +#include +#include +#include +#include +#include +#include +#include +#include + +const TInt KMusEngJitterBufferLength = 51; //Must be bigger than treshold +// Using following value increases treshold buffer to 1 second from +// default 100 ms +const TInt KMusEngJitterBufferTreshold = 50; + +const TUint32 KMusEngTwoWayReceivingActivityTimeout = 5000; // 5 seconds +// 6 seconds keepalive timer, needs to be more than receiving timeout +const TUint8 KMusEngTwoWayRtpKeepAliveTimer = 6; + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +CMusEngTwoWayRecvSession* CMusEngTwoWayRecvSession::NewL() + { + CMusEngTwoWayRecvSession* self = new( ELeave )CMusEngTwoWayRecvSession(); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + return self; + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +CMusEngTwoWayRecvSession::~CMusEngTwoWayRecvSession() + { + MUS_LOG( "mus: [ENGINE] -> CMusEngTwoWayRecvSession::~CMusEngTwoWayRecvSession()" ) + + delete iLiveVideoPlayer; + + MUS_LOG( "mus: [ENGINE] <- CMusEngTwoWayRecvSession::~CMusEngTwoWayRecvSession()" ) + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusEngTwoWayRecvSession::EnableDisplayL( TBool aEnable ) + { + MUS_LOG1( "mus: [ENGINE] -> CMusEngTwoWayRecvSession::EnableDisplayL() %d", + aEnable ) + + __ASSERT_ALWAYS( iSession, User::Leave( KErrNotReady ) ); + + CMceDisplaySink* display = MusEngMceUtils::GetReceivingDisplayL( *iSession ); + MusEngMceUtils::DoEnableDisplayL( *display, aEnable ); + + CMceDisplaySink* vfDisplay = MusEngMceUtils::GetVfDisplay( *iSession ); + if ( vfDisplay ) + { + MusEngMceUtils::DoEnableDisplayL( *vfDisplay, aEnable ); + } + + MUS_LOG( "mus: [ENGINE] <- CMusEngTwoWayRecvSession::EnableDisplayL()") + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +CMusEngMceSession::TDisplayOrientation CMusEngTwoWayRecvSession::OrientationL() + { + MUS_LOG( "mus: [ENGINE] -> CMusEngTwoWayRecvSession::RotationL()" ) + + __ASSERT_ALWAYS( iSession, User::Leave( KErrNotReady ) ); + + CMceDisplaySink* display = MusEngMceUtils::GetReceivingDisplayL( *iSession ); + + TDisplayOrientation displayOrientation; + CMceDisplaySink::TRotation rotation( display->RotationL() ); + + MUS_LOG1( "mus: [ENGINE] MCE rotation is %d", rotation ) + + if ( rotation == CMceDisplaySink::ENone ) + { + displayOrientation = CMusEngMceSession::EPortrait; + } + else + { + displayOrientation = CMusEngMceSession::ELandscape; + } + + MUS_LOG1( "mus: [ENGINE] <- CMusEngTwoWayRecvSession::RotationL() %d", + displayOrientation ) + + return displayOrientation; + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusEngTwoWayRecvSession::SetOrientationL( TDisplayOrientation aOrientation ) + { + MUS_LOG1( "mus: [ENGINE] -> CMusEngTwoWayRecvSession::SetOrientationL() %d", + aOrientation ) + + __ASSERT_ALWAYS( iSession, User::Leave( KErrNotReady ) ); + + CMceDisplaySink* display = MusEngMceUtils::GetReceivingDisplayL( *iSession ); + + CMceDisplaySink* vfDisplay = MusEngMceUtils::GetVfDisplay( *iSession ); + + CMceDisplaySink::TRotation rotation = ( aOrientation == EPortrait ) ? + CMceDisplaySink::ENone : CMceDisplaySink::EClockwise90Degree; + + display->SetRotationL( rotation ); + if ( vfDisplay ) + { + vfDisplay->SetRotationL( rotation ); + } + + MUS_LOG( "mus: [ENGINE] <- CMusEngTwoWayRecvSession::SetOrientationL()" ) + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusEngTwoWayRecvSession::SetRectsL( + const TRect& aRemoteRect, + const TRect& aLocalRect ) + { + MUS_LOG( "mus: [ENGINE] -> CMusEngTwoWayRecvSession::SetRectsL()" ) + + iLocalRect = aLocalRect; + iRect = aRemoteRect; + RectChangedL(); + + MUS_LOG( "mus: [ENGINE] <- CMusEngTwoWayRecvSession::SetRectsL()" ) + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusEngTwoWayRecvSession::SetSecondaryRectL( const TRect& aSecondaryRect ) + { + MUS_LOG( "mus: [ENGINE] -> CMusEngTwoWayRecvSession::SetSecondaryRectL()" ) + + iLocalRect = aSecondaryRect; + RectChangedL(); + + MUS_LOG( "mus: [ENGINE] <- CMusEngTwoWayRecvSession::SetSecondaryRectL()" ) + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +TRect CMusEngTwoWayRecvSession::SecondaryRect() const + { + MUS_LOG( "mus: [ENGINE] -> CMusEngTwoWayRecvSession::SecondaryRect()" ) + MUS_LOG( "mus: [ENGINE] <- CMusEngTwoWayRecvSession::SecondaryRect()" ) + return iLocalRect; + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +TMusEngCameraHandler& CMusEngTwoWayRecvSession::Camera() + { + return iCameraHandler; + } + +// ----------------------------------------------------------------------------- +// From MLcSession +// ----------------------------------------------------------------------------- +// +MLcVideoPlayer* CMusEngTwoWayRecvSession::LocalVideoPlayer() + { + return iLiveVideoPlayer; + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// + +void CMusEngTwoWayRecvSession::RectChangedL() + { + MUS_LOG( "mus: [ENGINE] -> CMusEngTwoWayRecvSession::RectChangedL()" ) + + + // If session is not yet created, do nothing + if ( iSession && iSession->State() != CMceSession::ETerminated ) + { + TRect remoteRect( Rect() ); + MUS_LOG2( "mus: [ENGINE] remote tl.ix=%d tl.iy=%d", + remoteRect.iTl.iX, remoteRect.iTl.iY ) + MUS_LOG2( "mus: [ENGINE] remote brc%d br.iy=%d", + remoteRect.iBr.iX, remoteRect.iBr.iY ) + MUS_LOG2( "mus: [ENGINE] local tl.ix=%d tl.iy=%d", + iLocalRect.iTl.iX, iLocalRect.iTl.iY ) + MUS_LOG2( "mus: [ENGINE] local br.ix=%d br.iy=%d", + iLocalRect.iBr.iX, iLocalRect.iBr.iY ) + + if ( remoteRect != iSetRemoteRect ) + { + CMceDisplaySink* display = MusEngMceUtils::GetReceivingDisplayL( *iSession ); + display->SetDisplayRectL( remoteRect ); + iSetRemoteRect = remoteRect; + } + + if ( iLocalRect != iSetLocalRect ) + { + CMceDisplaySink* vfDisplay = MusEngMceUtils::GetVfDisplay( *iSession ); + if ( vfDisplay ) + { + vfDisplay->SetDisplayRectL( iLocalRect ); + } + iSetLocalRect = iLocalRect; + } + } + + MUS_LOG( "mus: [ENGINE] <- CMusEngTwoWayRecvSession::RectChangedL()" ) + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusEngTwoWayRecvSession::CompleteSessionStructureL() + { + MUS_LOG( "mus: [ENGINE] -> CMusEngTwoWayRecvSession::CompleteSessionStructureL()" ) + + __ASSERT_ALWAYS( iSession, User::Leave( KErrNotReady ) ); + + iCameraHandler.SetSession( iSession ); + + // Force bandwidth line usage in sdp as it is mandatory + // at MT side based on GSMA VS specification IR.74. Bandwidth is set to + // session or to media level based on sender's way of usage. If other end + // is not using bandwidth attribute at all, media level is preferred. + SetSessionSdpLinesL( *iSession, ETrue ); + + CMceStreamBundle* localBundle = + CMceStreamBundle::NewLC( CMceStreamBundle::ELS ); + + const RPointerArray& streams = iSession->Streams(); + + CMceMediaStream* videoInStream = NULL; + CMceMediaStream* videoOutStream = NULL; + + // Search interesting video streams, sendrecv is preferred + TBool sendRecvVideoFound( EFalse ); + for( TInt i = 0; i < streams.Count(); ++i ) + { + if ( MusEngMceUtils::IsVideoInStream( *streams[i] ) && + !sendRecvVideoFound ) + { + videoInStream = streams[i]; + + if ( streams[i]->BoundStream() ) + { + videoOutStream = &streams[i]->BoundStreamL(); + } + } + else if ( streams[i]->BoundStream() && + MusEngMceUtils::IsVideoInStream( streams[i]->BoundStreamL() ) && + !sendRecvVideoFound ) + { + videoInStream = &streams[i]->BoundStreamL(); + + videoOutStream = streams[i]; + } + else + { + // NOP + } + + sendRecvVideoFound = ( videoInStream && videoOutStream ); + } + + CompleteSessionStructureAudioPartL( streams, *localBundle, videoInStream, videoOutStream ); + + if ( videoInStream ) + { + CompleteSessionStructureInStreamL( *videoInStream, *localBundle ); + } + else + { + // At least receiving video stream is required + User::Leave( KErrCorrupt ); + } + + if ( videoOutStream ) + { + CompleteSessionStructureOutStreamL( *videoOutStream ); + } + + // Destroy bundle if it is not needed or transfer ownership + if ( localBundle->Streams().Count() > 1 ) + { + iSession->AddBundleL( localBundle ); + CleanupStack::Pop( localBundle ); + } + else + { + CleanupStack::PopAndDestroy( localBundle ); + } + + AdjustStreamsAndCodecsL(); + + iSession->UpdateL(); + + // Now session state is right to adjust volume + SetSpeakerVolumeL( LcVolumeL() ); + + iSipProfileHandler->CreateProfileL( iSession->Profile() ); + + iRemoteVideoPlayer->SetMceSession( iSession ); + + MUS_LOG( "mus: [ENGINE] <- CMusEngTwoWayRecvSession::CompleteSessionStructureL()" ) + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +CMusEngTwoWayRecvSession::CMusEngTwoWayRecvSession() + : CMusEngReceiveSession() + { + iMceManagerUid.iUid = CMusManager::ESipInviteDesired2WayVideo; + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusEngTwoWayRecvSession::ConstructL() + { + MUS_LOG( "mus: [ENGINE] -> CMusEngTwoWayRecvSession::ConstructL()" ) + + iCameraHandler.ReadCameraUsageKeyL(); + CMusEngReceiveSession::ConstructL(); + + iLiveVideoPlayer = + CMusEngLiveVideoPlayer::NewL( *this, iCameraHandler, *this ); + + // Override receiving timeout and keepalive values of + // normal one-way receiving session + // + iReceivingInactivityTimeout = KMusEngTwoWayReceivingActivityTimeout; + iKeepaliveTimer = KMusEngTwoWayRtpKeepAliveTimer; + + MUS_LOG( "mus: [ENGINE] <- CMusEngTwoWayRecvSession::ConstructL()" ) + } + +// ----------------------------------------------------------------------------- +// When checking audio streams also not interesting streams are removed from +// session. Stream if removed if one of following apply: +// 1. Is not and does not contain incoming video or audio +// 2. We already have one incoming video stream +// 3. Stream is audio and we run operator variant where audio is +// not allowed. +// 4. Two-way video exists and this one is audio +// ----------------------------------------------------------------------------- +// +void CMusEngTwoWayRecvSession::CompleteSessionStructureAudioPartL( + const RPointerArray& aStreams, + CMceStreamBundle& aLocalBundle, + CMceMediaStream* aVideoInStream, + CMceMediaStream* aVideoOutStream ) + { + MUS_LOG( "mus: [ENGINE] -> CMusEngTwoWayRecvSession::CompleteSessionStructureAudioPartL()" ) + + // Audio streams not allowed in two-way session or in operator variant + TBool audioAllowed( !( aVideoInStream && aVideoOutStream ) && !iOperatorVariant ); + + for( TInt i = 0; i < aStreams.Count(); ++i ) + { + // Audio supported currently only in recvonly case + if ( audioAllowed && + MusEngMceUtils::IsAudioInStream( *aStreams[i] ) ) + { + MusEngMceUtils::AddSpeakerL( *aStreams[i] ); + + aLocalBundle.AddStreamL( *aStreams[i] ); + + // Disable possible opposite stream to indicate that sendrecv audio is + // not allowed. + if ( aStreams[i]->BoundStream() ) + { + MusEngMceUtils::DisableStreamL( aStreams[i]->BoundStreamL() ); + } + } + else if ( audioAllowed && + aStreams[i]->BoundStream() && + MusEngMceUtils::IsAudioInStream( aStreams[i]->BoundStreamL() ) ) + { + MusEngMceUtils::AddSpeakerL( aStreams[i]->BoundStreamL() ); + + aLocalBundle.AddStreamL( aStreams[i]->BoundStreamL() ); + + // Disable opposite stream to indicate that sendrecv audio is not allowed. + MusEngMceUtils::DisableStreamL( *aStreams[i] ); + } + else if ( aStreams[ i ] != aVideoInStream && aStreams[ i ] != aVideoOutStream ) + { + iSession->RemoveStreamL( *aStreams[i] ); + + // Since succesfull removal of a stream has decreased the amount + // of streams in array by one, we have to modify the index + --i; + } + else + { + // NOP + } + } + + MUS_LOG( "mus: [ENGINE] <- CMusEngTwoWayRecvSession::CompleteSessionStructureAudioPartL()" ) + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusEngTwoWayRecvSession::CompleteSessionStructureInStreamL( + CMceMediaStream& aVideoInStream, CMceStreamBundle& aLocalBundle ) + { + MUS_LOG( "mus: [ENGINE] -> CMusEngTwoWayRecvSession::CompleteSessionStructureInStreamL()" ) + + SetMediaSdpLinesL( aVideoInStream, ETrue ); + + MusEngMceUtils::AddDisplayL( aVideoInStream, *iManager, Rect() ); + + static_cast(aVideoInStream.Source())->UpdateL( + KMusEngJitterBufferLength, + KMusEngJitterBufferTreshold, + KMusEngTwoWayReceivingActivityTimeout ); + + aLocalBundle.AddStreamL( aVideoInStream ); + + MUS_LOG( "mus: [ENGINE] <- CMusEngTwoWayRecvSession::CompleteSessionStructureInStreamL()" ) + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusEngTwoWayRecvSession::CompleteSessionStructureOutStreamL( + CMceMediaStream& aVideoOutStream ) + { + MUS_LOG( "mus: [ENGINE] -> CMusEngTwoWayRecvSession::CompleteSessionStructureOutStreamL()" ) + + SetMediaSdpLinesL( aVideoOutStream, ETrue ); + + CMceCameraSource* camera = NULL; + TRAP_IGNORE( camera = MusEngMceUtils::GetCameraL( *iSession ) ) + if ( !camera ) + { + camera = CMceCameraSource::NewLC( *iManager ); + aVideoOutStream.SetSourceL( camera ); + CleanupStack::Pop( camera ); + } + + camera->DisableL(); // Start session in pause mode. + + iCameraHandler.InitializeL( *camera ); + + CMceVideoStream* vfStream = CMceVideoStream::NewLC(); + + vfStream->SetSourceL( aVideoOutStream.Source() ); + + // Complete stream + MusEngMceUtils::AddDisplayL( *vfStream, *iManager, SecondaryRect() ); + + iSession->AddStreamL( vfStream ); + CleanupStack::Pop( vfStream ); + + iLiveVideoPlayer->SetMceSession( iSession ); + + MUS_LOG( "mus: [ENGINE] <- CMusEngTwoWayRecvSession::CompleteSessionStructureOutStreamL()" ) + } + + +// End of file diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/ipvtengine/src/musengtwowaysession.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/ipvtengine/src/musengtwowaysession.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,169 @@ +/* +* 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: +* +*/ + + +// USER +#include "musengtwowaysession.h" +#include "lcsessionobserver.h" +#include "musenglogger.h" +#include "musengremotevideoplayer.h" +#include "musenglivevideoplayer.h" +#include "svptimer.h" + + +const TInt KMusEngJitterBufferLength = 51; //Must be bigger than treshold +// Using following value increases treshold buffer to 1 second from +// default 100 ms +const TInt KMusEngJitterBufferTreshold = 50; + +const TUint32 KMusEngTwoWayReceivingActivityTimeout = 5000; // 5 seconds +// 6 seconds keepalive timer, needs to be more than receiving timeout +const TUint8 KMusEngTwoWayRtpKeepAliveTimer = 6; + +//Uncomment this for MT Simulation. +//#define MT_Simulation + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +CMusEngTwoWaySession* CMusEngTwoWaySession::NewL() + { + CMusEngTwoWaySession* self = new( ELeave )CMusEngTwoWaySession(); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + return self; + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +CMusEngTwoWaySession::~CMusEngTwoWaySession() + { + MUS_LOG( "mus: [ENGINE] -> CMusEngTwoWaySession::~CMusEngTwoWaySession()" ) + + MUS_LOG( "mus: [ENGINE] <- CMusEngTwoWaySession::~CMusEngTwoWaySession()" ) + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusEngTwoWaySession::EnableDisplayL( TBool aEnable ) + { + MUS_LOG1( "mus: [ENGINE] -> CMusEngTwoWaySession::EnableDisplayL() %d", + aEnable ) + + MUS_LOG( "mus: [ENGINE] <- CMusEngTwoWaySession::EnableDisplayL()") + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusEngTwoWaySession::SetOrientationL( TDisplayOrientation aOrientation ) + { + MUS_LOG1( "mus: [ENGINE] -> CMusEngTwoWaySession::SetOrientationL() %d", + aOrientation ) + + + MUS_LOG( "mus: [ENGINE] <- CMusEngTwoWaySession::SetOrientationL()" ) + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusEngTwoWaySession::SetRectsL( + const TRect& aRemoteRect, + const TRect& aLocalRect ) + { + MUS_LOG( "mus: [ENGINE] -> CMusEngTwoWaySession::SetRectsL()" ) + + MUS_LOG( "mus: [ENGINE] <- CMusEngTwoWaySession::SetRectsL()" ) + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +CMusEngTwoWaySession::CMusEngTwoWaySession() + : CMusEngMceSession() + { + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusEngTwoWaySession::ConstructL() + { + MUS_LOG( "mus: [ENGINE] -> CMusEngTwoWaySession::ConstructL()" ) + + CMusEngMceSession::ConstructL(); + + MUS_LOG( "mus: [ENGINE] <- CMusEngTwoWaySession::ConstructL()" ) + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusEngTwoWaySession::EstablishLcSessionL() + { + MUS_LOG( "mus: [ENGINE] -> CMusEngTwoWaySession::EstablishLcSessionL" ) + + #ifdef MT_Simulation + if ( LcSessionState() != MLcSession::EReceived ) { + iTimer->SetTime(2000, 14); + } else { + iTimer->SetTime(2000, 1); + } + #else + + iTimer->SetTime(2000, 1); + #endif + MUS_LOG( "mus: [ENGINE] <- CMusEngTwoWaySession::EstablishLcSessionL" ) + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusEngTwoWaySession::TerminateLcSessionL() + { + MUS_LOG( "mus: [ENGINE] -> CMusEngTwoWaySession::TerminateLcSessionL" ) + + MUS_LOG( "mus: [ENGINE] <- CMusEngTwoWaySession::TerminateLcSessionL" ) + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusEngTwoWaySession::UpdateLcSessionL() + { + MUS_LOG( "mus: [ENGINE] -> CMusEngTwoWaySession::UpdateLcSessionL" ) + + MUS_LOG( "mus: [ENGINE] <- CMusEngTwoWaySession::UpdateLcSessionL" ) + } + +// End of file diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/ipvtengine/src/musengvideoplayerbase.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/ipvtengine/src/musengvideoplayerbase.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,208 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + +// USER +#include "musenglocalvideoplayer.h" +#include "musengcamerahandler.h" +#include "musengdisplayhandler.h" + +// SYSTEM +#include + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +CMusEngVideoPlayerBase::CMusEngVideoPlayerBase( + MMusEngDisplayHandler& aDisplayHandler, MLcAudioControl& aLcAudioControl ) + :iDisplayHandler( aDisplayHandler ), + iLcAudioControl( aLcAudioControl ) + { + iVideoPlayerSource = MLcVideoPlayer::ECameraSource ; + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +CMusEngVideoPlayerBase::~CMusEngVideoPlayerBase() + { + } + +// ----------------------------------------------------------------------------- +// From MLcVideoPlayer +// ----------------------------------------------------------------------------- +// +MLcVideoPlayer::TLcVideoPlayerSource CMusEngVideoPlayerBase::LcVideoPlayerSourceL() + { + return iVideoPlayerSource; + } + +// ----------------------------------------------------------------------------- +// From MLcVideoPlayer +// ----------------------------------------------------------------------------- +// +void CMusEngVideoPlayerBase::LcPlayL(MLcVideoPlayer::TLcVideoPlayerSource aSource) + { + iVideoPlayerSource = aSource; + } + +// ----------------------------------------------------------------------------- +// From MLcVideoPlayer +// ----------------------------------------------------------------------------- +// +void CMusEngVideoPlayerBase::LcPauseL() + { + // NOP + } + +// ----------------------------------------------------------------------------- +// From MLcVideoPlayer +// ----------------------------------------------------------------------------- +// +MLcWindow* CMusEngVideoPlayerBase::LcWindow() + { + return this; + } + +// ----------------------------------------------------------------------------- +// From MLcVideoPlayer +// ----------------------------------------------------------------------------- +// +MLcCameraControl* CMusEngVideoPlayerBase::LcCameraControl() + { + return NULL; + } + +// ----------------------------------------------------------------------------- +// From MLcVideoPlayer +// ----------------------------------------------------------------------------- +// +MLcSourceFileControl* CMusEngVideoPlayerBase::LcSourceFileControl() + { + return NULL; + } + +// ----------------------------------------------------------------------------- +// From MLcVideoPlayer +// ----------------------------------------------------------------------------- +// +MLcDestinationFileControl* CMusEngVideoPlayerBase::LcDestinationFileControl() + { + return NULL; + } + +// ----------------------------------------------------------------------------- +// From MLcVideoPlayer +// ----------------------------------------------------------------------------- +// +MLcAudioControl* CMusEngVideoPlayerBase::LcAudioControl() + { + return &iLcAudioControl; + } + +// ----------------------------------------------------------------------------- +// From MLcVideoPlayer +// ----------------------------------------------------------------------------- +// +MLcZoomControl* CMusEngVideoPlayerBase::LcZoomControl() + { + return NULL; + } + +// ----------------------------------------------------------------------------- +// From MLcVideoPlayer +// ----------------------------------------------------------------------------- +// +MLcBrightnessControl* CMusEngVideoPlayerBase::LcBrightnessControl() + { + return NULL; + } + +// ----------------------------------------------------------------------------- +// From MLcWindow +// ----------------------------------------------------------------------------- +// +void CMusEngVideoPlayerBase::EnableLcWindowL( TBool aEnable ) + { + iDisplayHandler.EnableDisplayL( aEnable ); + } + +// ----------------------------------------------------------------------------- +// From MLcWindow +// ----------------------------------------------------------------------------- +// +TBool CMusEngVideoPlayerBase::IsLcWindowEnabled() + { + return iDisplayHandler.IsDisplayEnabled(); + } + +// ----------------------------------------------------------------------------- +// From MLcWindow +// ----------------------------------------------------------------------------- +// +void CMusEngVideoPlayerBase::SetLcWindowRectL( TRect aRect ) + { + iDisplayHandler.SetRectL( aRect ); + } + + +// ----------------------------------------------------------------------------- +// From MLcWindow +// ----------------------------------------------------------------------------- +// +TRect CMusEngVideoPlayerBase::LcWindowRect() + { + return iDisplayHandler.Rect(); + } + +// ----------------------------------------------------------------------------- +// From MLcWindow +// ----------------------------------------------------------------------------- +// +void CMusEngVideoPlayerBase::SetLcWindowOrientationL( + TLcWindowOrientation aOrientation ) + { + if ( aOrientation == MLcWindow::ELandscape ) + { + iDisplayHandler.SetOrientationL( MMusEngDisplayHandler::ELandscape ); + } + else + { + iDisplayHandler.SetOrientationL( MMusEngDisplayHandler::EPortrait ); + } + } + +// ----------------------------------------------------------------------------- +// From MLcWindow +// ----------------------------------------------------------------------------- +// +MLcWindow::TLcWindowOrientation CMusEngVideoPlayerBase::LcWindowOrientationL() + { + MLcWindow::TLcWindowOrientation orientation; + if ( iDisplayHandler.OrientationL() == MMusEngDisplayHandler::ELandscape ) + { + orientation = MLcWindow::ELandscape; + } + else + { + orientation = MLcWindow::EPortrait; + } + return orientation; + } diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/ipvtengine/src/svptimer.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/ipvtengine/src/svptimer.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,120 @@ +/* +* Copyright (c) 2006 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: Timer service for SVP +* +*/ + + +#include "svptimer.h" +#include "svptimerobserver.h" + + +const TInt KMicroSecondsCoefficient = 1000; + + +// --------------------------------------------------------------------------- +// CSVPTimer::CSVPTimer +// --------------------------------------------------------------------------- +// +CSVPTimer::CSVPTimer( MSVPTimerObserver& aObserver, TInt aTimerId ): + CTimer( EPriorityHigh ), + iObserver( aObserver ), + iId( aTimerId ) + { + CActiveScheduler::Add( this ); + } + +// --------------------------------------------------------------------------- +// CSVPTimer::CSVPTimer +// --------------------------------------------------------------------------- +// +void CSVPTimer::ConstructL() + { + CTimer::ConstructL(); + } + +// --------------------------------------------------------------------------- +// CSVPTimer::CSVPTimer +// --------------------------------------------------------------------------- +// +CSVPTimer* CSVPTimer::NewL( MSVPTimerObserver& aObserver, + TInt aTimerId ) + { + CSVPTimer* self = new (ELeave) CSVPTimer( aObserver, aTimerId ); + + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + + return self; + } + +// --------------------------------------------------------------------------- +// CSVPTimer::~CSVPTimer +// --------------------------------------------------------------------------- +// +CSVPTimer::~CSVPTimer() + { + Cancel(); + } + +// --------------------------------------------------------------------------- +// CSVPTimer::RunL +// --------------------------------------------------------------------------- +// +void CSVPTimer::RunL() + { + iObserver.TimedOut( iId ); + } + +// --------------------------------------------------------------------------- +// CSVPTimer::SetTime +// --------------------------------------------------------------------------- +// +void CSVPTimer::SetTime( TInt aMilliSeconds, TInt aTimerId ) + { + if ( IsActive() ) + { + //iObserver.TimedOut( iId ); // Discard previous request + Cancel(); + } + + iId = aTimerId; + + // Milliseconds to microseconds conversion + const TTimeIntervalMicroSeconds32 time( + KMicroSecondsCoefficient * aMilliSeconds ); + + CTimer::After( time ); // NB, CTimer::After calls SetActive + } + +// --------------------------------------------------------------------------- +// CSVPTimer::Stop +// --------------------------------------------------------------------------- +// +void CSVPTimer::Stop() + { + Cancel(); + } + +// --------------------------------------------------------------------------- +// CSVPTimer::Id +// --------------------------------------------------------------------------- +// +TInt CSVPTimer::Id() const + { + return iId; + } + +// End of File diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/mustester/Stubs/mceclientstub/bwins/mceclientstubu.def --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/mustester/Stubs/mceclientstub/bwins/mceclientstubu.def Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,310 @@ +EXPORTS + ??0TMceTransactionDataContainer@@QAE@XZ @ 1 NONAME ; TMceTransactionDataContainer::TMceTransactionDataContainer(void) + ??1CMceAmrCodec@@UAE@XZ @ 2 NONAME ; CMceAmrCodec::~CMceAmrCodec(void) + ??1CMceAudioStream@@UAE@XZ @ 3 NONAME ; CMceAudioStream::~CMceAudioStream(void) + ??1CMceAvcCodec@@UAE@XZ @ 4 NONAME ; CMceAvcCodec::~CMceAvcCodec(void) + ??1CMceCameraSource@@UAE@XZ @ 5 NONAME ; CMceCameraSource::~CMceCameraSource(void) + ??1CMceDisplaySink@@UAE@XZ @ 6 NONAME ; CMceDisplaySink::~CMceDisplaySink(void) + ??1CMceFileSink@@UAE@XZ @ 7 NONAME ; CMceFileSink::~CMceFileSink(void) + ??1CMceFileSource@@UAE@XZ @ 8 NONAME ; CMceFileSource::~CMceFileSource(void) + ??1CMceH263Codec@@UAE@XZ @ 9 NONAME ; CMceH263Codec::~CMceH263Codec(void) + ??1CMceInSession@@UAE@XZ @ 10 NONAME ; CMceInSession::~CMceInSession(void) + ??1CMceManager@@UAE@XZ @ 11 NONAME ; CMceManager::~CMceManager(void) + ??1CMceMediaSink@@UAE@XZ @ 12 NONAME ; CMceMediaSink::~CMceMediaSink(void) + ??1CMceMediaSource@@UAE@XZ @ 13 NONAME ; CMceMediaSource::~CMceMediaSource(void) + ??1CMceMediaStream@@UAE@XZ @ 14 NONAME ; CMceMediaStream::~CMceMediaStream(void) + ??1CMceOutSession@@UAE@XZ @ 15 NONAME ; CMceOutSession::~CMceOutSession(void) + ??1CMceRtpSink@@UAE@XZ @ 16 NONAME ; CMceRtpSink::~CMceRtpSink(void) + ??1CMceRtpSource@@UAE@XZ @ 17 NONAME ; CMceRtpSource::~CMceRtpSource(void) + ??1CMceSession@@UAE@XZ @ 18 NONAME ; CMceSession::~CMceSession(void) + ??1CMceSpeakerSink@@UAE@XZ @ 19 NONAME ; CMceSpeakerSink::~CMceSpeakerSink(void) + ??1CMceStreamBundle@@UAE@XZ @ 20 NONAME ; CMceStreamBundle::~CMceStreamBundle(void) + ??1CMceVideoStream@@UAE@XZ @ 21 NONAME ; CMceVideoStream::~CMceVideoStream(void) + ??1CMusTestSessionSimulator@@QAE@XZ @ 22 NONAME ; CMusTestSessionSimulator::~CMusTestSessionSimulator(void) + ??1CSIP@@UAE@XZ @ 23 NONAME ; CSIP::~CSIP(void) + ??1CSIPManagedProfile@@UAE@XZ @ 24 NONAME ; CSIPManagedProfile::~CSIPManagedProfile(void) + ??1CSIPManagedProfileRegistry@@UAE@XZ @ 25 NONAME ; CSIPManagedProfileRegistry::~CSIPManagedProfileRegistry(void) + ??1CSIPProfile@@UAE@XZ @ 26 NONAME ; CSIPProfile::~CSIPProfile(void) + ??1CSIPProfileRegistry@@UAE@XZ @ 27 NONAME ; CSIPProfileRegistry::~CSIPProfileRegistry(void) + ??1CSIPProfileRegistryBase@@UAE@XZ @ 28 NONAME ; CSIPProfileRegistryBase::~CSIPProfileRegistryBase(void) + ?AcceptL@CMceInSession@@QAEXABVTDesC8@@KPAVCDesC8Array@@PAVHBufC8@@2@Z @ 29 NONAME ; void CMceInSession::AcceptL(class TDesC8 const &, unsigned long, class CDesC8Array *, class HBufC8 *, class HBufC8 *) + ?AcceptL@CMceInSession@@QAEXXZ @ 30 NONAME ; void CMceInSession::AcceptL(void) + ?AddBundleL@CMceSession@@QAEXPAVCMceStreamBundle@@@Z @ 31 NONAME ; void CMceSession::AddBundleL(class CMceStreamBundle *) + ?AddCodecL@CMceAudioStream@@QAEXPAVCMceAudioCodec@@@Z @ 32 NONAME ; void CMceAudioStream::AddCodecL(class CMceAudioCodec *) + ?AddCodecL@CMceVideoStream@@QAEXPAVCMceVideoCodec@@@Z @ 33 NONAME ; void CMceVideoStream::AddCodecL(class CMceVideoCodec *) + ?AddSinkL@CMceMediaStream@@QAEXPAVCMceMediaSink@@@Z @ 34 NONAME ; void CMceMediaStream::AddSinkL(class CMceMediaSink *) + ?AddStreamL@CMceOutSession@@UAEXPAVCMceMediaStream@@@Z @ 35 NONAME ; void CMceOutSession::AddStreamL(class CMceMediaStream *) + ?AddStreamL@CMceSession@@UAEXPAVCMceMediaStream@@@Z @ 36 NONAME ; void CMceSession::AddStreamL(class CMceMediaStream *) + ?AddStreamL@CMceStreamBundle@@QAEXAAVCMceMediaStream@@@Z @ 37 NONAME ; void CMceStreamBundle::AddStreamL(class CMceMediaStream &) + ?AllowedBitrates@CMceCodec@@QBEIXZ @ 38 NONAME ; unsigned int CMceCodec::AllowedBitrates(void) const + ?AllowedFrameRates@CMceVideoCodec@@QBEIXZ @ 39 NONAME ; unsigned int CMceVideoCodec::AllowedFrameRates(void) const + ?AllowedResolutions@CMceVideoCodec@@QBEIXZ @ 40 NONAME ; unsigned int CMceVideoCodec::AllowedResolutions(void) const + ?BindL@CMceMediaStream@@QAEXPAV1@@Z @ 41 NONAME ; void CMceMediaStream::BindL(class CMceMediaStream *) + ?Bitrate@CMceCodec@@QBEIXZ @ 42 NONAME ; unsigned int CMceCodec::Bitrate(void) const + ?BoundStream@CMceMediaStream@@QBEHXZ @ 43 NONAME ; int CMceMediaStream::BoundStream(void) const + ?BoundStreamL@CMceMediaStream@@QBEAAV1@XZ @ 44 NONAME ; class CMceMediaStream & CMceMediaStream::BoundStreamL(void) const + ?BrightnessL@CMceCameraSource@@QAEHXZ @ 45 NONAME ; int CMceCameraSource::BrightnessL(void) + ?Bundles@CMceSession@@QBEABV?$RPointerArray@VCMceStreamBundle@@@@XZ @ 46 NONAME ; class RPointerArray const & CMceSession::Bundles(void) const + ?CamerasAvailable@CMceCameraSource@@QBEHXZ @ 47 NONAME ; int CMceCameraSource::CamerasAvailable(void) const + ?CancelL@CMceOutSession@@QAEXXZ @ 48 NONAME ; void CMceOutSession::CancelL(void) + ?CancelTranscodeL@CMceFileSource@@QAEXXZ @ 49 NONAME ; void CMceFileSource::CancelTranscodeL(void) + ?Clear@TMceTransactionDataContainer@@QAEXXZ @ 50 NONAME ; void TMceTransactionDataContainer::Clear(void) + ?CloneL@CMceAmrCodec@@UBEPAVCMceAudioCodec@@XZ @ 51 NONAME ; class CMceAudioCodec * CMceAmrCodec::CloneL(void) const + ?CloneL@CMceAvcCodec@@UBEPAVCMceVideoCodec@@XZ @ 52 NONAME ; class CMceVideoCodec * CMceAvcCodec::CloneL(void) const + ?CloneL@CMceH263Codec@@UBEPAVCMceVideoCodec@@XZ @ 53 NONAME ; class CMceVideoCodec * CMceH263Codec::CloneL(void) const + ?CodecMode@CMceCodec@@QBEIXZ @ 54 NONAME ; unsigned int CMceCodec::CodecMode(void) const + ?Codecs@CMceAudioStream@@QAEABV?$RPointerArray@VCMceAudioCodec@@@@XZ @ 55 NONAME ; class RPointerArray const & CMceAudioStream::Codecs(void) + ?Codecs@CMceVideoStream@@QAEABV?$RPointerArray@VCMceVideoCodec@@@@XZ @ 56 NONAME ; class RPointerArray const & CMceVideoStream::Codecs(void) + ?ConfigKeyL@CMceVideoCodec@@QBEPAVHBufC8@@XZ @ 57 NONAME ; class HBufC8 * CMceVideoCodec::ConfigKeyL(void) const + ?Connection@CSIP@@QBEPAVCSIPConnection@@K@Z @ 58 NONAME ; class CSIPConnection * CSIP::Connection(unsigned long) const + ?ConnectionActive@CMceSession@@QBEHXZ @ 59 NONAME ; int CMceSession::ConnectionActive(void) const + ?ContrastL@CMceCameraSource@@QAEHXZ @ 60 NONAME ; int CMceCameraSource::ContrastL(void) + ?CurrentMediaElement@CMceFileSource@@QAEHI@Z @ 61 NONAME ; int CMceFileSource::CurrentMediaElement(unsigned int) + ?DefaultHeadersL@CMceManager@@QBEPAVCDesC8Array@@ABVTDesC8@@@Z @ 62 NONAME ; class CDesC8Array * CMceManager::DefaultHeadersL(class TDesC8 const &) const + ?DefaultProfileL@CSIPProfileRegistryBase@@QAEPAVCSIPProfile@@XZ @ 63 NONAME ; class CSIPProfile * CSIPProfileRegistryBase::DefaultProfileL(void) + ?DigitalZoomFactorL@CMceCameraSource@@QAEHXZ @ 64 NONAME ; int CMceCameraSource::DigitalZoomFactorL(void) + ?Disable@CSIPProfileRegistry@@QAEHAAVCSIPProfile@@@Z @ 65 NONAME ; int CSIPProfileRegistry::Disable(class CSIPProfile &) + ?DisableInactivityTimerL@CMceRtpSource@@QAEXXZ @ 66 NONAME ; void CMceRtpSource::DisableInactivityTimerL(void) + ?DisableL@CMceCameraSource@@UAEXXZ @ 67 NONAME ; void CMceCameraSource::DisableL(void) + ?DisableL@CMceDisplaySink@@UAEXXZ @ 68 NONAME ; void CMceDisplaySink::DisableL(void) + ?DisableL@CMceFileSink@@UAEXXZ @ 69 NONAME ; void CMceFileSink::DisableL(void) + ?DisableL@CMceFileSource@@UAEXXZ @ 70 NONAME ; void CMceFileSource::DisableL(void) + ?DisableL@CMceMediaStream@@UAEXXZ @ 71 NONAME ; void CMceMediaStream::DisableL(void) + ?DisableL@CMceRtpSink@@UAEXXZ @ 72 NONAME ; void CMceRtpSink::DisableL(void) + ?DisableL@CMceRtpSource@@UAEXXZ @ 73 NONAME ; void CMceRtpSource::DisableL(void) + ?DisableL@CMceSpeakerSink@@UAEXXZ @ 74 NONAME ; void CMceSpeakerSink::DisableL(void) + ?DisableSsrcL@CMceRtpSource@@QAEXI@Z @ 75 NONAME ; void CMceRtpSource::DisableSsrcL(unsigned int) + ?DisplayRectL@CMceDisplaySink@@QAE?BVTRect@@XZ @ 76 NONAME ; class TRect const CMceDisplaySink::DisplayRectL(void) + ?DisplaysAvailable@CMceDisplaySink@@QBEHXZ @ 77 NONAME ; int CMceDisplaySink::DisplaysAvailable(void) const + ?DurationL@CMceFileSource@@QBE?AVTTimeIntervalMicroSeconds@@XZ @ 78 NONAME ; class TTimeIntervalMicroSeconds CMceFileSource::DurationL(void) const + ?EnableInactivityTimerL@CMceRtpSource@@QAEXK@Z @ 79 NONAME ; void CMceRtpSource::EnableInactivityTimerL(unsigned long) + ?EnableL@CMceCameraSource@@UAEXXZ @ 80 NONAME ; void CMceCameraSource::EnableL(void) + ?EnableL@CMceDisplaySink@@UAEXXZ @ 81 NONAME ; void CMceDisplaySink::EnableL(void) + ?EnableL@CMceFileSink@@UAEXXZ @ 82 NONAME ; void CMceFileSink::EnableL(void) + ?EnableL@CMceFileSource@@UAEXXZ @ 83 NONAME ; void CMceFileSource::EnableL(void) + ?EnableL@CMceMediaStream@@UAEXXZ @ 84 NONAME ; void CMceMediaStream::EnableL(void) + ?EnableL@CMceRtpSink@@UAEXXZ @ 85 NONAME ; void CMceRtpSink::EnableL(void) + ?EnableL@CMceRtpSource@@UAEXXZ @ 86 NONAME ; void CMceRtpSource::EnableL(void) + ?EnableL@CMceSpeakerSink@@UAEXXZ @ 87 NONAME ; void CMceSpeakerSink::EnableL(void) + ?EnableL@CSIPProfileRegistry@@QAEXAAVCSIPProfile@@AAVMSIPConnectionObserver@@@Z @ 88 NONAME ; void CSIPProfileRegistry::EnableL(class CSIPProfile &, class MSIPConnectionObserver &) + ?EnableSsrcL@CMceRtpSource@@QAEXI@Z @ 89 NONAME ; void CMceRtpSource::EnableSsrcL(unsigned int) + ?EnableVAD@CMceAmrCodec@@UAEHH@Z @ 90 NONAME ; int CMceAmrCodec::EnableVAD(int) + ?EstablishL@CMceOutSession@@QAEXKPAVCDesC8Array@@PAVHBufC8@@10@Z @ 91 NONAME ; void CMceOutSession::EstablishL(unsigned long, class CDesC8Array *, class HBufC8 *, class HBufC8 *, class CDesC8Array *) + ?ExposureL@CMceCameraSource@@QAE?AW4TExposure@CCamera@@XZ @ 92 NONAME ; enum CCamera::TExposure CMceCameraSource::ExposureL(void) + ?FourCC@CMceCodec@@QBEKXZ @ 93 NONAME ; unsigned long CMceCodec::FourCC(void) const + ?FrameRate@CMceVideoCodec@@QBENXZ @ 94 NONAME ; double CMceVideoCodec::FrameRate(void) const + ?FrameSize@CMceCodec@@QBEIXZ @ 95 NONAME ; unsigned int CMceCodec::FrameSize(void) const + ?GetCameraInfo@CMceCameraSource@@QBEXAAVTCameraInfo@@@Z @ 96 NONAME ; void CMceCameraSource::GetCameraInfo(class TCameraInfo &) const + ?GetContent@TMceTransactionDataContainer@@QAEPAVHBufC8@@XZ @ 97 NONAME ; class HBufC8 * TMceTransactionDataContainer::GetContent(void) + ?GetContentHeaders@TMceTransactionDataContainer@@QAEPAVCDesC8Array@@XZ @ 98 NONAME ; class CDesC8Array * TMceTransactionDataContainer::GetContentHeaders(void) + ?GetContentType@TMceTransactionDataContainer@@QAEPAVHBufC8@@XZ @ 99 NONAME ; class HBufC8 * TMceTransactionDataContainer::GetContentType(void) + ?GetHeaders@TMceTransactionDataContainer@@QAEPAVCDesC8Array@@XZ @ 100 NONAME ; class CDesC8Array * TMceTransactionDataContainer::GetHeaders(void) + ?GetModifierL@CMceSession@@QBEXKAAI@Z @ 101 NONAME ; void CMceSession::GetModifierL(unsigned long, unsigned int &) const + ?GetParameter@CSIPProfile@@QBEHKAAH@Z @ 102 NONAME ; int CSIPProfile::GetParameter(unsigned long, int &) const + ?GetParameter@CSIPProfile@@QBEHKAAK@Z @ 103 NONAME ; int CSIPProfile::GetParameter(unsigned long, unsigned long &) const + ?GetParameter@CSIPProfile@@QBEHKAAPBVMDesC8Array@@@Z @ 104 NONAME ; int CSIPProfile::GetParameter(unsigned long, class MDesC8Array const * &) const + ?GetParameter@CSIPProfile@@QBEHKAAPBVTDesC8@@@Z @ 105 NONAME ; int CSIPProfile::GetParameter(unsigned long, class TDesC8 const * &) const + ?GetReasonPhrase@TMceTransactionDataContainer@@QAEPAVHBufC8@@XZ @ 106 NONAME ; class HBufC8 * TMceTransactionDataContainer::GetReasonPhrase(void) + ?GetStatusCode@TMceTransactionDataContainer@@QAEHXZ @ 107 NONAME ; int TMceTransactionDataContainer::GetStatusCode(void) + ?IsEnabled@CMceMediaSink@@QBEHXZ @ 108 NONAME ; int CMceMediaSink::IsEnabled(void) const + ?IsEnabled@CMceMediaSource@@QBEHXZ @ 109 NONAME ; int CMceMediaSource::IsEnabled(void) const + ?IsEnabled@CMceMediaStream@@QBEHXZ @ 110 NONAME ; int CMceMediaStream::IsEnabled(void) const + ?IsEnabled@CSIPProfileRegistry@@QBEHABVCSIPProfile@@@Z @ 111 NONAME ; int CSIPProfileRegistry::IsEnabled(class CSIPProfile const &) const + ?IsSigCompSupportedL@CSIP@@QBEHXZ @ 112 NONAME ; int CSIP::IsSigCompSupportedL(void) const + ?IsSsrcEnabledL@CMceRtpSource@@QAEHI@Z @ 113 NONAME ; int CMceRtpSource::IsSsrcEnabledL(unsigned int) + ?KeepAliveData@CMceCodec@@QBEABVTDesC8@@XZ @ 114 NONAME ; class TDesC8 const & CMceCodec::KeepAliveData(void) const + ?KeepAlivePayloadType@CMceCodec@@QBEEXZ @ 115 NONAME ; unsigned char CMceCodec::KeepAlivePayloadType(void) const + ?KeepAliveTimer@CMceCodec@@QBEEXZ @ 116 NONAME ; unsigned char CMceCodec::KeepAliveTimer(void) const + ?LastPacket@CMceRtpSink@@QBEKXZ @ 117 NONAME ; unsigned long CMceRtpSink::LastPacket(void) const + ?LastRegistrationError@CSIPProfileRegistryBase@@QBEHABVCSIPProfile@@@Z @ 118 NONAME ; int CSIPProfileRegistryBase::LastRegistrationError(class CSIPProfile const &) const + ?LocalMediaPort@CMceMediaStream@@QBEIXZ @ 119 NONAME ; unsigned int CMceMediaStream::LocalMediaPort(void) const + ?MMFPriority@CMceCodec@@QBEHXZ @ 120 NONAME ; int CMceCodec::MMFPriority(void) const + ?MMFPriorityPreference@CMceCodec@@QBEHXZ @ 121 NONAME ; int CMceCodec::MMFPriorityPreference(void) const + ?MaxBitRate@CMceVideoCodec@@QBEIXZ @ 122 NONAME ; unsigned int CMceVideoCodec::MaxBitRate(void) const + ?MaxVolumeL@CMceSpeakerSink@@QBEHXZ @ 123 NONAME ; int CMceSpeakerSink::MaxVolumeL(void) const + ?MediaAttributeLinesL@CMceMediaStream@@QAEPAVMDesC8Array@@XZ @ 124 NONAME ; class MDesC8Array * CMceMediaStream::MediaAttributeLinesL(void) + ?MediaElementCountL@CMceFileSource@@QBEHI@Z @ 125 NONAME ; int CMceFileSource::MediaElementCountL(unsigned int) const + ?NegotiatedSecurityMechanismL@CSIP@@QAEPAVHBufC8@@ABVTDesC8@@@Z @ 126 NONAME ; class HBufC8 * CSIP::NegotiatedSecurityMechanismL(class TDesC8 const &) + ?NewL@CMceAudioStream@@SAPAV1@XZ @ 127 NONAME ; class CMceAudioStream * CMceAudioStream::NewL(void) + ?NewL@CMceAvcCodec@@SAPAV1@V?$TBuf8@$0BE@@@@Z @ 128 NONAME ; class CMceAvcCodec * CMceAvcCodec::NewL(class TBuf8<20>) + ?NewL@CMceCameraSource@@SAPAV1@AAVCMceManager@@@Z @ 129 NONAME ; class CMceCameraSource * CMceCameraSource::NewL(class CMceManager &) + ?NewL@CMceCameraSource@@SAPAV1@XZ @ 130 NONAME ; class CMceCameraSource * CMceCameraSource::NewL(void) + ?NewL@CMceDisplaySink@@SAPAV1@AAVCMceManager@@@Z @ 131 NONAME ; class CMceDisplaySink * CMceDisplaySink::NewL(class CMceManager &) + ?NewL@CMceDisplaySink@@SAPAV1@XZ @ 132 NONAME ; class CMceDisplaySink * CMceDisplaySink::NewL(void) + ?NewL@CMceFileSink@@SAPAV1@ABV?$TBuf@$0BAA@@@@Z @ 133 NONAME ; class CMceFileSink * CMceFileSink::NewL(class TBuf<256> const &) + ?NewL@CMceFileSource@@SAPAV1@AAVCMceManager@@ABV?$TBuf@$0BAA@@@@Z @ 134 NONAME ; class CMceFileSource * CMceFileSource::NewL(class CMceManager &, class TBuf<256> const &) + ?NewL@CMceH263Codec@@SAPAV1@V?$TBuf8@$0BE@@@@Z @ 135 NONAME ; class CMceH263Codec * CMceH263Codec::NewL(class TBuf8<20>) + ?NewL@CMceInSession@@SAPAV1@AAVCMceManager@@ABVTDesC8@@@Z @ 136 NONAME ; class CMceInSession * CMceInSession::NewL(class CMceManager &, class TDesC8 const &) + ?NewL@CMceInSession@@SAPAV1@XZ @ 137 NONAME ; class CMceInSession * CMceInSession::NewL(void) + ?NewL@CMceManager@@SAPAV1@ABVTUid@@PAVTMceTransactionDataContainer@@@Z @ 138 NONAME ; class CMceManager * CMceManager::NewL(class TUid const &, class TMceTransactionDataContainer *) + ?NewL@CMceOutSession@@SAPAV1@AAVCMceEvent@@@Z @ 139 NONAME ; class CMceOutSession * CMceOutSession::NewL(class CMceEvent &) + ?NewL@CMceOutSession@@SAPAV1@AAVCMceManager@@AAVCSIPProfile@@ABVTDesC8@@PAVHBufC8@@@Z @ 140 NONAME ; class CMceOutSession * CMceOutSession::NewL(class CMceManager &, class CSIPProfile &, class TDesC8 const &, class HBufC8 *) + ?NewL@CMceOutSession@@SAPAV1@AAVCMceRefer@@@Z @ 141 NONAME ; class CMceOutSession * CMceOutSession::NewL(class CMceRefer &) + ?NewL@CMceOutSession@@SAPAV1@XZ @ 142 NONAME ; class CMceOutSession * CMceOutSession::NewL(void) + ?NewL@CMceRtpSink@@SAPAV1@HPAVHBufC8@@@Z @ 143 NONAME ; class CMceRtpSink * CMceRtpSink::NewL(int, class HBufC8 *) + ?NewL@CMceRtpSink@@SAPAV1@XZ @ 144 NONAME ; class CMceRtpSink * CMceRtpSink::NewL(void) + ?NewL@CMceRtpSource@@SAPAV1@IIKPAVHBufC8@@@Z @ 145 NONAME ; class CMceRtpSource * CMceRtpSource::NewL(unsigned int, unsigned int, unsigned long, class HBufC8 *) + ?NewL@CMceSpeakerSink@@SAPAV1@XZ @ 146 NONAME ; class CMceSpeakerSink * CMceSpeakerSink::NewL(void) + ?NewL@CMceStreamBundle@@SAPAV1@W4TMceStreamBundleType@1@@Z @ 147 NONAME ; class CMceStreamBundle * CMceStreamBundle::NewL(enum CMceStreamBundle::TMceStreamBundleType) + ?NewL@CMceVideoStream@@SAPAV1@XZ @ 148 NONAME ; class CMceVideoStream * CMceVideoStream::NewL(void) + ?NewL@CSIP@@SAPAV1@ABVTUid@@AAVMSIPObserver@@@Z @ 149 NONAME ; class CSIP * CSIP::NewL(class TUid const &, class MSIPObserver &) + ?NewL@CSIPManagedProfileRegistry@@SAPAV1@AAVMSIPProfileRegistryObserver@@@Z @ 150 NONAME ; class CSIPManagedProfileRegistry * CSIPManagedProfileRegistry::NewL(class MSIPProfileRegistryObserver &) + ?NewL@CSIPProfileRegistry@@SAPAV1@AAVCSIP@@AAVMSIPProfileRegistryObserver@@@Z @ 151 NONAME ; class CSIPProfileRegistry * CSIPProfileRegistry::NewL(class CSIP &, class MSIPProfileRegistryObserver &) + ?NewLC@CMceAudioStream@@SAPAV1@XZ @ 152 NONAME ; class CMceAudioStream * CMceAudioStream::NewLC(void) + ?NewLC@CMceAvcCodec@@SAPAV1@V?$TBuf8@$0BE@@@@Z @ 153 NONAME ; class CMceAvcCodec * CMceAvcCodec::NewLC(class TBuf8<20>) + ?NewLC@CMceCameraSource@@SAPAV1@AAVCMceManager@@@Z @ 154 NONAME ; class CMceCameraSource * CMceCameraSource::NewLC(class CMceManager &) + ?NewLC@CMceCameraSource@@SAPAV1@XZ @ 155 NONAME ; class CMceCameraSource * CMceCameraSource::NewLC(void) + ?NewLC@CMceDisplaySink@@SAPAV1@AAVCMceManager@@@Z @ 156 NONAME ; class CMceDisplaySink * CMceDisplaySink::NewLC(class CMceManager &) + ?NewLC@CMceDisplaySink@@SAPAV1@XZ @ 157 NONAME ; class CMceDisplaySink * CMceDisplaySink::NewLC(void) + ?NewLC@CMceFileSink@@SAPAV1@ABV?$TBuf@$0BAA@@@@Z @ 158 NONAME ; class CMceFileSink * CMceFileSink::NewLC(class TBuf<256> const &) + ?NewLC@CMceFileSource@@SAPAV1@AAVCMceManager@@ABV?$TBuf@$0BAA@@@@Z @ 159 NONAME ; class CMceFileSource * CMceFileSource::NewLC(class CMceManager &, class TBuf<256> const &) + ?NewLC@CMceH263Codec@@SAPAV1@V?$TBuf8@$0BE@@@@Z @ 160 NONAME ; class CMceH263Codec * CMceH263Codec::NewLC(class TBuf8<20>) + ?NewLC@CMceRtpSink@@SAPAV1@XZ @ 161 NONAME ; class CMceRtpSink * CMceRtpSink::NewLC(void) + ?NewLC@CMceRtpSource@@SAPAV1@IIKPAVHBufC8@@@Z @ 162 NONAME ; class CMceRtpSource * CMceRtpSource::NewLC(unsigned int, unsigned int, unsigned long, class HBufC8 *) + ?NewLC@CMceSpeakerSink@@SAPAV1@XZ @ 163 NONAME ; class CMceSpeakerSink * CMceSpeakerSink::NewLC(void) + ?NewLC@CMceStreamBundle@@SAPAV1@W4TMceStreamBundleType@1@@Z @ 164 NONAME ; class CMceStreamBundle * CMceStreamBundle::NewLC(enum CMceStreamBundle::TMceStreamBundleType) + ?NewLC@CMceVideoStream@@SAPAV1@XZ @ 165 NONAME ; class CMceVideoStream * CMceVideoStream::NewLC(void) + ?NewLC@CSIP@@SAPAV1@ABVTUid@@AAVMSIPObserver@@@Z @ 166 NONAME ; class CSIP * CSIP::NewLC(class TUid const &, class MSIPObserver &) + ?NewLC@CSIPManagedProfileRegistry@@SAPAV1@AAVMSIPProfileRegistryObserver@@@Z @ 167 NONAME ; class CSIPManagedProfileRegistry * CSIPManagedProfileRegistry::NewLC(class MSIPProfileRegistryObserver &) + ?NewLC@CSIPProfileRegistry@@SAPAV1@AAVCSIP@@AAVMSIPProfileRegistryObserver@@@Z @ 168 NONAME ; class CSIPProfileRegistry * CSIPProfileRegistry::NewLC(class CSIP &, class MSIPProfileRegistryObserver &) + ?Originator@CMceSession@@QBEABVTDesC8@@XZ @ 169 NONAME ; class TDesC8 const & CMceSession::Originator(void) const + ?PayloadType@CMceCodec@@QBEEXZ @ 170 NONAME ; unsigned char CMceCodec::PayloadType(void) const + ?PositionL@CMceFileSource@@QBE?AVTTimeIntervalMicroSeconds@@XZ @ 171 NONAME ; class TTimeIntervalMicroSeconds CMceFileSource::PositionL(void) const + ?Preference@CMceCodec@@QBEHXZ @ 172 NONAME ; int CMceCodec::Preference(void) const + ?PriorityL@CMceDisplaySink@@QAEIXZ @ 173 NONAME ; unsigned int CMceDisplaySink::PriorityL(void) + ?Profile@CMceSession@@QBEKXZ @ 174 NONAME ; unsigned long CMceSession::Profile(void) const + ?ProfileL@CSIPProfileRegistryBase@@QAEPAVCSIPProfile@@K@Z @ 175 NONAME ; class CSIPProfile * CSIPProfileRegistryBase::ProfileL(unsigned long) + ?ProfilesL@CSIPProfileRegistryBase@@QAEXAAV?$RPointerArray@VCSIPProfile@@@@@Z @ 176 NONAME ; void CSIPProfileRegistryBase::ProfilesL(class RPointerArray &) + ?ProfilesL@CSIPProfileRegistryBase@@QAEXABVTDesC8@@AAV?$RPointerArray@VCSIPProfile@@@@@Z @ 177 NONAME ; void CSIPProfileRegistryBase::ProfilesL(class TDesC8 const &, class RPointerArray &) + ?ProfilesL@CSIPProfileRegistryBase@@QAEXABVTSIPProfileTypeInfo@@AAV?$RPointerArray@VCSIPProfile@@@@@Z @ 178 NONAME ; void CSIPProfileRegistryBase::ProfilesL(class TSIPProfileTypeInfo const &, class RPointerArray &) + ?Recipient@CMceSession@@QBEABVTDesC8@@XZ @ 179 NONAME ; class TDesC8 const & CMceSession::Recipient(void) const + ?RejectL@CMceInSession@@QAEXABVTDesC8@@KPAVCDesC8Array@@PAVHBufC8@@2@Z @ 180 NONAME ; void CMceInSession::RejectL(class TDesC8 const &, unsigned long, class CDesC8Array *, class HBufC8 *, class HBufC8 *) + ?RejectL@CMceInSession@@QAEXXZ @ 181 NONAME ; void CMceInSession::RejectL(void) + ?RemoveBundleL@CMceSession@@QAEXAAVCMceStreamBundle@@@Z @ 182 NONAME ; void CMceSession::RemoveBundleL(class CMceStreamBundle &) + ?RemoveCodecL@CMceAudioStream@@QAEXAAVCMceAudioCodec@@@Z @ 183 NONAME ; void CMceAudioStream::RemoveCodecL(class CMceAudioCodec &) + ?RemoveCodecL@CMceVideoStream@@QAEXAAVCMceVideoCodec@@@Z @ 184 NONAME ; void CMceVideoStream::RemoveCodecL(class CMceVideoCodec &) + ?RemoveSinkL@CMceMediaStream@@QAEXAAVCMceMediaSink@@@Z @ 185 NONAME ; void CMceMediaStream::RemoveSinkL(class CMceMediaSink &) + ?RemoveStreamL@CMceSession@@QAEXAAVCMceMediaStream@@@Z @ 186 NONAME ; void CMceSession::RemoveStreamL(class CMceMediaStream &) + ?RemoveStreamL@CMceStreamBundle@@QAEXAAVCMceMediaStream@@@Z @ 187 NONAME ; void CMceStreamBundle::RemoveStreamL(class CMceMediaStream &) + ?ReplaceCodecsL@CMceVideoStream@@QAEXPAV?$RPointerArray@VCMceVideoCodec@@@@@Z @ 188 NONAME ; void CMceVideoStream::ReplaceCodecsL(class RPointerArray *) + ?Resolution@CMceVideoCodec@@QBE?AVTSize@@XZ @ 189 NONAME ; class TSize CMceVideoCodec::Resolution(void) const + ?RingL@CMceInSession@@QAEXPAVCDesC8Array@@PAVHBufC8@@1@Z @ 190 NONAME ; void CMceInSession::RingL(class CDesC8Array *, class HBufC8 *, class HBufC8 *) + ?RotationL@CMceDisplaySink@@QAE?AW4TRotation@1@XZ @ 191 NONAME ; enum CMceDisplaySink::TRotation CMceDisplaySink::RotationL(void) + ?RoutingL@CMceSpeakerSink@@QBEHXZ @ 192 NONAME ; int CMceSpeakerSink::RoutingL(void) const + ?SIP@CSIPProfileRegistry@@QBEAAVCSIP@@XZ @ 193 NONAME ; class CSIP & CSIPProfileRegistry::SIP(void) const + ?SaveL@CSIPManagedProfileRegistry@@QAEXAAVCSIPProfile@@@Z @ 194 NONAME ; void CSIPManagedProfileRegistry::SaveL(class CSIPProfile &) + ?SdpName@CMceCodec@@QBEABVTDesC8@@XZ @ 195 NONAME ; class TDesC8 const & CMceCodec::SdpName(void) const + ?SendRRL@CMceRtpSource@@QAEXXZ @ 196 NONAME ; void CMceRtpSource::SendRRL(void) + ?SendSRL@CMceRtpSink@@QAEXXZ @ 197 NONAME ; void CMceRtpSink::SendSRL(void) + ?Session@CMceMediaStream@@QBEPAVCMceSession@@XZ @ 198 NONAME ; class CMceSession * CMceMediaStream::Session(void) const + ?SessionSDPLinesL@CMceSession@@QAEPAVMDesC8Array@@XZ @ 199 NONAME ; class MDesC8Array * CMceSession::SessionSDPLinesL(void) + ?SessionTimer@CMceSession@@QBEKXZ @ 200 NONAME ; unsigned long CMceSession::SessionTimer(void) const + ?Sessions@CMceManager@@QBEABV?$RPointerArray@VCMceSession@@@@XZ @ 201 NONAME ; class RPointerArray const & CMceManager::Sessions(void) const + ?SetAllowedBitrates@CMceAmrCodec@@UAEHI@Z @ 202 NONAME ; int CMceAmrCodec::SetAllowedBitrates(unsigned int) + ?SetAllowedBitrates@CMceAvcCodec@@UAEHI@Z @ 203 NONAME ; int CMceAvcCodec::SetAllowedBitrates(unsigned int) + ?SetAllowedBitrates@CMceH263Codec@@UAEHI@Z @ 204 NONAME ; int CMceH263Codec::SetAllowedBitrates(unsigned int) + ?SetAllowedFrameRatesL@CMceAvcCodec@@UAEXI@Z @ 205 NONAME ; void CMceAvcCodec::SetAllowedFrameRatesL(unsigned int) + ?SetAllowedFrameRatesL@CMceH263Codec@@UAEXI@Z @ 206 NONAME ; void CMceH263Codec::SetAllowedFrameRatesL(unsigned int) + ?SetAllowedResolutionsL@CMceAvcCodec@@UAEXI@Z @ 207 NONAME ; void CMceAvcCodec::SetAllowedResolutionsL(unsigned int) + ?SetAllowedResolutionsL@CMceH263Codec@@UAEXI@Z @ 208 NONAME ; void CMceH263Codec::SetAllowedResolutionsL(unsigned int) + ?SetBitrate@CMceAmrCodec@@UAEHI@Z @ 209 NONAME ; int CMceAmrCodec::SetBitrate(unsigned int) + ?SetBitrate@CMceAvcCodec@@UAEHI@Z @ 210 NONAME ; int CMceAvcCodec::SetBitrate(unsigned int) + ?SetBitrate@CMceH263Codec@@UAEHI@Z @ 211 NONAME ; int CMceH263Codec::SetBitrate(unsigned int) + ?SetBrightnessL@CMceCameraSource@@QAEXH@Z @ 212 NONAME ; void CMceCameraSource::SetBrightnessL(int) + ?SetCameraIndexL@CMceCameraSource@@QAEXH@Z @ 213 NONAME ; void CMceCameraSource::SetCameraIndexL(int) + ?SetCodecMode@CMceAmrCodec@@UAEHI@Z @ 214 NONAME ; int CMceAmrCodec::SetCodecMode(unsigned int) + ?SetCodecMode@CMceAvcCodec@@UAEHI@Z @ 215 NONAME ; int CMceAvcCodec::SetCodecMode(unsigned int) + ?SetCodecMode@CMceH263Codec@@UAEHI@Z @ 216 NONAME ; int CMceH263Codec::SetCodecMode(unsigned int) + ?SetConfigKeyL@CMceAvcCodec@@UAEXABVTDesC8@@@Z @ 217 NONAME ; void CMceAvcCodec::SetConfigKeyL(class TDesC8 const &) + ?SetConfigKeyL@CMceH263Codec@@UAEXABVTDesC8@@@Z @ 218 NONAME ; void CMceH263Codec::SetConfigKeyL(class TDesC8 const &) + ?SetContent@TMceTransactionDataContainer@@QAEXPAVHBufC8@@@Z @ 219 NONAME ; void TMceTransactionDataContainer::SetContent(class HBufC8 *) + ?SetContentHeaders@TMceTransactionDataContainer@@QAEXPAVCDesC8Array@@@Z @ 220 NONAME ; void TMceTransactionDataContainer::SetContentHeaders(class CDesC8Array *) + ?SetContentType@TMceTransactionDataContainer@@QAEXPAVHBufC8@@@Z @ 221 NONAME ; void TMceTransactionDataContainer::SetContentType(class HBufC8 *) + ?SetContrastL@CMceCameraSource@@QAEXH@Z @ 222 NONAME ; void CMceCameraSource::SetContrastL(int) + ?SetCurrentMediaElementL@CMceFileSource@@QAEXIH@Z @ 223 NONAME ; void CMceFileSource::SetCurrentMediaElementL(unsigned int, int) + ?SetDefaultHeadersL@CMceManager@@QAEXPAVCDesC8Array@@0@Z @ 224 NONAME ; void CMceManager::SetDefaultHeadersL(class CDesC8Array *, class CDesC8Array *) + ?SetDigitalZoomFactorL@CMceCameraSource@@QAEXH@Z @ 225 NONAME ; void CMceCameraSource::SetDigitalZoomFactorL(int) + ?SetDisplay@CMceDisplaySink@@QAEXAAVRWindow@@AAVCWindowGc@@@Z @ 226 NONAME ; void CMceDisplaySink::SetDisplay(class RWindow &, class CWindowGc &) + ?SetDisplayIndexL@CMceDisplaySink@@QAEXH@Z @ 227 NONAME ; void CMceDisplaySink::SetDisplayIndexL(int) + ?SetDisplayRectL@CMceDisplaySink@@QAEXABVTRect@@@Z @ 228 NONAME ; void CMceDisplaySink::SetDisplayRectL(class TRect const &) + ?SetEventObserver@CMceManager@@QAEXPAVMMceEventObserver@@@Z @ 229 NONAME ; void CMceManager::SetEventObserver(class MMceEventObserver *) + ?SetExposureL@CMceCameraSource@@QAEXW4TExposure@CCamera@@@Z @ 230 NONAME ; void CMceCameraSource::SetExposureL(enum CCamera::TExposure) + ?SetFastForwardL@CMceFileSource@@QAEXH@Z @ 231 NONAME ; void CMceFileSource::SetFastForwardL(int) + ?SetFastRewindL@CMceFileSource@@QAEXH@Z @ 232 NONAME ; void CMceFileSource::SetFastRewindL(int) + ?SetFrameRateL@CMceAvcCodec@@UAEXN@Z @ 233 NONAME ; void CMceAvcCodec::SetFrameRateL(double) + ?SetFrameRateL@CMceH263Codec@@UAEXN@Z @ 234 NONAME ; void CMceH263Codec::SetFrameRateL(double) + ?SetHeaders@TMceTransactionDataContainer@@QAEXPAVCDesC8Array@@@Z @ 235 NONAME ; void TMceTransactionDataContainer::SetHeaders(class CDesC8Array *) + ?SetInEventObserver@CMceManager@@QAEXPAVMMceInEventObserver@@@Z @ 236 NONAME ; void CMceManager::SetInEventObserver(class MMceInEventObserver *) + ?SetInReferObserver@CMceManager@@QAEXPAVMMceInReferObserver@@@Z @ 237 NONAME ; void CMceManager::SetInReferObserver(class MMceInReferObserver *) + ?SetInSessionObserver@CMceManager@@QAEXPAVMMceInSessionObserver@@@Z @ 238 NONAME ; void CMceManager::SetInSessionObserver(class MMceInSessionObserver *) + ?SetKeepAliveDataL@CMceCodec@@QAEXABVTDesC8@@@Z @ 239 NONAME ; void CMceCodec::SetKeepAliveDataL(class TDesC8 const &) + ?SetKeepAlivePayloadTypeL@CMceCodec@@QAEXE@Z @ 240 NONAME ; void CMceCodec::SetKeepAlivePayloadTypeL(unsigned char) + ?SetKeepAliveTimerL@CMceCodec@@QAEXE@Z @ 241 NONAME ; void CMceCodec::SetKeepAliveTimerL(unsigned char) + ?SetLocalMediaPortL@CMceMediaStream@@QAEXI@Z @ 242 NONAME ; void CMceMediaStream::SetLocalMediaPortL(unsigned int) + ?SetMMFPriorityL@CMceCodec@@QAEXH@Z @ 243 NONAME ; void CMceCodec::SetMMFPriorityL(int) + ?SetMMFPriorityPreferenceL@CMceCodec@@QAEXH@Z @ 244 NONAME ; void CMceCodec::SetMMFPriorityPreferenceL(int) + ?SetMaxBitrateL@CMceAvcCodec@@UAEXI@Z @ 245 NONAME ; void CMceAvcCodec::SetMaxBitrateL(unsigned int) + ?SetMaxBitrateL@CMceH263Codec@@UAEXI@Z @ 246 NONAME ; void CMceH263Codec::SetMaxBitrateL(unsigned int) + ?SetMaxPTime@CMceAmrCodec@@UAEHI@Z @ 247 NONAME ; int CMceAmrCodec::SetMaxPTime(unsigned int) + ?SetMediaAttributeLinesL@CMceMediaStream@@QAEXPAVCDesC8Array@@@Z @ 248 NONAME ; void CMceMediaStream::SetMediaAttributeLinesL(class CDesC8Array *) + ?SetMediaObserver@CMceManager@@QAEXPAVMMceStreamObserver@@@Z @ 249 NONAME ; void CMceManager::SetMediaObserver(class MMceStreamObserver *) + ?SetModifierL@CMceSession@@QAEXKI@Z @ 250 NONAME ; void CMceSession::SetModifierL(unsigned long, unsigned int) + ?SetPTime@CMceAmrCodec@@UAEHI@Z @ 251 NONAME ; int CMceAmrCodec::SetPTime(unsigned int) + ?SetParameter@CSIPManagedProfile@@QAEHKABVMDesC8Array@@@Z @ 252 NONAME ; int CSIPManagedProfile::SetParameter(unsigned long, class MDesC8Array const &) + ?SetPayloadType@CMceAmrCodec@@UAEHE@Z @ 253 NONAME ; int CMceAmrCodec::SetPayloadType(unsigned char) + ?SetPayloadType@CMceAvcCodec@@UAEHE@Z @ 254 NONAME ; int CMceAvcCodec::SetPayloadType(unsigned char) + ?SetPayloadType@CMceH263Codec@@UAEHE@Z @ 255 NONAME ; int CMceH263Codec::SetPayloadType(unsigned char) + ?SetPositionL@CMceFileSource@@QAEXABVTTimeIntervalMicroSeconds@@@Z @ 256 NONAME ; void CMceFileSource::SetPositionL(class TTimeIntervalMicroSeconds const &) + ?SetPreferenceL@CMceCodec@@QAEXH@Z @ 257 NONAME ; void CMceCodec::SetPreferenceL(int) + ?SetPreferredEncodingDecodingDeviceL@CMceAvcCodec@@UAEXVTUid@@@Z @ 258 NONAME ; void CMceAvcCodec::SetPreferredEncodingDecodingDeviceL(class TUid) + ?SetPreferredEncodingDecodingDeviceL@CMceH263Codec@@UAEXVTUid@@@Z @ 259 NONAME ; void CMceH263Codec::SetPreferredEncodingDecodingDeviceL(class TUid) + ?SetPriorityL@CMceDisplaySink@@QAEXI@Z @ 260 NONAME ; void CMceDisplaySink::SetPriorityL(unsigned int) + ?SetReasonPhrase@TMceTransactionDataContainer@@QAEXPAVHBufC8@@@Z @ 261 NONAME ; void TMceTransactionDataContainer::SetReasonPhrase(class HBufC8 *) + ?SetReferObserver@CMceManager@@QAEXPAVMMceReferObserver@@@Z @ 262 NONAME ; void CMceManager::SetReferObserver(class MMceReferObserver *) + ?SetResolutionL@CMceAvcCodec@@UAEXVTSize@@@Z @ 263 NONAME ; void CMceAvcCodec::SetResolutionL(class TSize) + ?SetResolutionL@CMceH263Codec@@UAEXVTSize@@@Z @ 264 NONAME ; void CMceH263Codec::SetResolutionL(class TSize) + ?SetRotationL@CMceDisplaySink@@QAEXW4TRotation@1@@Z @ 265 NONAME ; void CMceDisplaySink::SetRotationL(enum CMceDisplaySink::TRotation) + ?SetRoutingL@CMceSpeakerSink@@QAEXH@Z @ 266 NONAME ; void CMceSpeakerSink::SetRoutingL(int) + ?SetRtpObserver@CMceManager@@QAEXPAVMMceRtpObserver@@@Z @ 267 NONAME ; void CMceManager::SetRtpObserver(class MMceRtpObserver *) + ?SetSamplingFreq@CMceAmrCodec@@UAEHI@Z @ 268 NONAME ; int CMceAmrCodec::SetSamplingFreq(unsigned int) + ?SetSessionObserver@CMceManager@@QAEXPAVMMceSessionObserver@@@Z @ 269 NONAME ; void CMceManager::SetSessionObserver(class MMceSessionObserver *) + ?SetSessionSDPLinesL@CMceSession@@QAEXPAVCDesC8Array@@@Z @ 270 NONAME ; void CMceSession::SetSessionSDPLinesL(class CDesC8Array *) + ?SetSourceL@CMceMediaStream@@QAEXPAVCMceMediaSource@@@Z @ 271 NONAME ; void CMceMediaStream::SetSourceL(class CMceMediaSource *) + ?SetStandByTimerL@CMceCodec@@QAEXK@Z @ 272 NONAME ; void CMceCodec::SetStandByTimerL(unsigned long) + ?SetStateL@CMceCodec@@QAEXW4TState@1@@Z @ 273 NONAME ; void CMceCodec::SetStateL(enum CMceCodec::TState) + ?SetStatusCode@TMceTransactionDataContainer@@QAEXH@Z @ 274 NONAME ; void TMceTransactionDataContainer::SetStatusCode(int) + ?SetVolumeL@CMceSpeakerSink@@QAEXH@Z @ 275 NONAME ; void CMceSpeakerSink::SetVolumeL(int) + ?SetWhiteBalanceL@CMceCameraSource@@QAEXW4TWhiteBalance@CCamera@@@Z @ 276 NONAME ; void CMceCameraSource::SetWhiteBalanceL(enum CCamera::TWhiteBalance) + ?SetZoomFactorL@CMceCameraSource@@QAEXH@Z @ 277 NONAME ; void CMceCameraSource::SetZoomFactorL(int) + ?Sinks@CMceMediaStream@@QBEABV?$RPointerArray@VCMceMediaSink@@@@XZ @ 278 NONAME ; class RPointerArray const & CMceMediaStream::Sinks(void) const + ?Source@CMceMediaStream@@QBEPAVCMceMediaSource@@XZ @ 279 NONAME ; class CMceMediaSource * CMceMediaStream::Source(void) const + ?Ssrc@CMceRtpSink@@QBEKXZ @ 280 NONAME ; unsigned long CMceRtpSink::Ssrc(void) const + ?Ssrc@CMceRtpSource@@QBEKXZ @ 281 NONAME ; unsigned long CMceRtpSource::Ssrc(void) const + ?Ssrcs@CMceRtpSource@@QBEABV?$RArray@I@@XZ @ 282 NONAME ; class RArray const & CMceRtpSource::Ssrcs(void) const + ?State@CMceCodec@@QBE?AW4TState@1@XZ @ 283 NONAME ; enum CMceCodec::TState CMceCodec::State(void) const + ?State@CMceMediaStream@@QBE?AW4TState@1@XZ @ 284 NONAME ; enum CMceMediaStream::TState CMceMediaStream::State(void) const + ?State@CMceSession@@QBE?AW4TState@1@XZ @ 285 NONAME ; enum CMceSession::TState CMceSession::State(void) const + ?Streams@CMceSession@@QBEABV?$RPointerArray@VCMceMediaStream@@@@XZ @ 286 NONAME ; class RPointerArray const & CMceSession::Streams(void) const + ?Streams@CMceStreamBundle@@QAEABV?$RPointerArray@VCMceMediaStream@@@@XZ @ 287 NONAME ; class RPointerArray const & CMceStreamBundle::Streams(void) + ?SupportedAudioCodecs@CMceManager@@QBEABV?$RPointerArray@$$CBVCMceAudioCodec@@@@XZ @ 288 NONAME ; class RPointerArray const & CMceManager::SupportedAudioCodecs(void) const + ?SupportedProfileTypesL@CSIPProfileRegistryBase@@QAEXAAV?$RArray@VTSIPProfileTypeInfo@@@@@Z @ 289 NONAME ; void CSIPProfileRegistryBase::SupportedProfileTypesL(class RArray &) + ?SupportedSecurityMechanismsL@CSIP@@QBEPAVCDesC8Array@@XZ @ 290 NONAME ; class CDesC8Array * CSIP::SupportedSecurityMechanismsL(void) const + ?SupportedVideoCodecs@CMceManager@@QBEABV?$RPointerArray@$$CBVCMceVideoCodec@@@@XZ @ 291 NONAME ; class RPointerArray const & CMceManager::SupportedVideoCodecs(void) const + ?SupportedVideoCodecs@CMceVideoStream@@QBEABV?$RPointerArray@$$CBVCMceVideoCodec@@@@XZ @ 292 NONAME ; class RPointerArray const & CMceVideoStream::SupportedVideoCodecs(void) const + ?TerminateL@CMceSession@@QAEXPAVCDesC8Array@@PAVHBufC8@@1@Z @ 293 NONAME ; void CMceSession::TerminateL(class CDesC8Array *, class HBufC8 *, class HBufC8 *) + ?TranscodeL@CMceFileSource@@QAEXABV?$TBuf@$0BAA@@@@Z @ 294 NONAME ; void CMceFileSource::TranscodeL(class TBuf<256> const &) + ?TranscodingProgressL@CMceFileSource@@QBEHXZ @ 295 NONAME ; int CMceFileSource::TranscodingProgressL(void) const + ?Type@CMceCodec@@QBEIXZ @ 296 NONAME ; unsigned int CMceCodec::Type(void) const + ?Type@CMceMediaSink@@QBEIXZ @ 297 NONAME ; unsigned int CMceMediaSink::Type(void) const + ?Type@CMceMediaSource@@QBEIXZ @ 298 NONAME ; unsigned int CMceMediaSource::Type(void) const + ?Type@CMceMediaStream@@QBEIXZ @ 299 NONAME ; unsigned int CMceMediaStream::Type(void) const + ?Type@CMceStreamBundle@@QBE?AW4TMceStreamBundleType@1@XZ @ 300 NONAME ; enum CMceStreamBundle::TMceStreamBundleType CMceStreamBundle::Type(void) const + ?Type@CSIPProfile@@QBEABVTSIPProfileTypeInfo@@XZ @ 301 NONAME ; class TSIPProfileTypeInfo const & CSIPProfile::Type(void) const + ?UpdateL@CMceFileSource@@QAEXABV?$TBuf@$0BAA@@@@Z @ 302 NONAME ; void CMceFileSource::UpdateL(class TBuf<256> const &) + ?UpdateL@CMceRtpSink@@QAEXHPAVHBufC8@@@Z @ 303 NONAME ; void CMceRtpSink::UpdateL(int, class HBufC8 *) + ?UpdateL@CMceRtpSource@@QAEXIIKPAVHBufC8@@@Z @ 304 NONAME ; void CMceRtpSource::UpdateL(unsigned int, unsigned int, unsigned long, class HBufC8 *) + ?UpdateL@CMceSession@@QAEXKPAVCDesC8Array@@PAVHBufC8@@10@Z @ 305 NONAME ; void CMceSession::UpdateL(unsigned long, class CDesC8Array *, class HBufC8 *, class HBufC8 *, class CDesC8Array *) + ?VolumeL@CMceSpeakerSink@@QBEHXZ @ 306 NONAME ; int CMceSpeakerSink::VolumeL(void) const + ?WhiteBalanceL@CMceCameraSource@@QAE?AW4TWhiteBalance@CCamera@@XZ @ 307 NONAME ; enum CCamera::TWhiteBalance CMceCameraSource::WhiteBalanceL(void) + ?ZoomFactorL@CMceCameraSource@@QAEHXZ @ 308 NONAME ; int CMceCameraSource::ZoomFactorL(void) + diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/mustester/Stubs/mceclientstub/group/mceclient.mmp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/mustester/Stubs/mceclientstub/group/mceclient.mmp Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,91 @@ +/* +* Copyright (c) 2006-2006 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: Definition of project MceClientStub +* +*/ + + +// To get the APP_LAYER_SYSTEMINCLUDE-definition +#include + +#include + +TARGET mceclient.dll +TARGETTYPE dll +UID 0x1000008d 0x00000111 // Experimental UID + +CAPABILITY CAP_GENERAL_DLL +VENDORID VID_DEFAULT + +SOURCEPATH ../src +SOURCE mcemanager.cpp +SOURCE mcesession.cpp +SOURCE mceoutsession.cpp +SOURCE mceinsession.cpp +SOURCE mcestreambundle.cpp +SOURCE mcemediastream.cpp +SOURCE mcevideostream.cpp +SOURCE mceaudiostream.cpp +SOURCE mcemediasource.cpp +SOURCE mcecamerasource.cpp +SOURCE mcefilesource.cpp +SOURCE mcefilesink.cpp +SOURCE mcertpsource.cpp +SOURCE mcemediasink.cpp +SOURCE mcedisplaysink.cpp +SOURCE mcertpsink.cpp +SOURCE mcespeakersink.cpp +SOURCE mcecodec.cpp +SOURCE mceaudiocodec.cpp +SOURCE mceamrcodec.cpp +SOURCE mcevideocodec.cpp +SOURCE mceh263codec.cpp +SOURCE mceavccodec.cpp +SOURCE mcetransactiondatacontainer.cpp +SOURCE staticdllentry.cpp + +SOURCEPATH ../../sipprofilestub/src +SOURCE sipprofileregistrybasestub.cpp +SOURCE sipprofileregistrystub.cpp +SOURCE sipprofilestub.cpp sipmanagedprofileregistrystub.cpp sipmanagedprofilestub.cpp sipstub.cpp + + +USERINCLUDE ../inc +USERINCLUDE ../../sipprofilestub/inc +USERINCLUDE ../../../../../../inc /Mush/inc + + +// to replace SIP profiles with a stub +SYSTEMINCLUDE ../../sipprofilestub/inc +SYSTEMINCLUDE /epoc32/include + +// Default system include paths for application layer modules. +APP_LAYER_SYSTEMINCLUDE + +LIBRARY euser.lib +LIBRARY bafl.lib +LIBRARY ws32.lib +LIBRARY bitgdi.lib +LIBRARY fbscli.lib + + + +EXPORTUNFROZEN + +SOURCEPATH ../src +SOURCE mussessionsimulator.cpp +SOURCEPATH ../../sipprofilestub/src +SOURCE sipprofilealrcontroller.cpp +SOURCEPATH ../src +SOURCE mccscreen.cpp diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/mustester/Stubs/mceclientstub/inc/mccscreen.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/mustester/Stubs/mceclientstub/inc/mccscreen.h Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,105 @@ +/* +* Copyright (c) 2006 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: +* +*/ + + + +#ifndef MCCSCREEN_H +#define MCCSCREEN_H + +#include + +class CMccScreen : public CBase, + public MDirectScreenAccess + { + + public: + + // Construction & destruction + static CMccScreen* NewL( TPoint aPos, + TSize aArea, + TInt aIndex, + TInt aWindowOrdinalPosition, + TInt aWindowOrdinalPriority, + TSize aViewFinderImageSize ); + + ~CMccScreen(); + + void ConstructL( TSize aViewFinderImageSize ); + + public: + + void StartL(); + + void Stop(); + + void Draw( CFbsBitmap& aFrame ); + + void AttachFrameL( CFbsBitmap* aFrame ); + + void DetachFrame(); + + private: + + CMccScreen( TPoint aPos, + TSize aArea, + TInt aIndex, + TInt aWindowOrdinalPosition, + TInt aWindowOrdinalPriority ); + + void Restart( RDirectScreenAccess::TTerminationReasons aReason ); + + void AbortNow( RDirectScreenAccess::TTerminationReasons aReason ); + + TPoint UpdateViewFinderArea( TSize aViewFinderImageSize ); + + void DoDraw( CFbsBitmap& aFrame ); + + void DoScreenDeviceUpdate(); + + private: + + RWsSession iRwSession; + RWindowGroup* iRwGroup; + RWindow* iRw; + CWsScreenDevice* iDev; + TInt iDeviceIndex; + CDirectScreenAccess* iDirectScreenAccess; + CFbsBitGc* iGc; + RRegion* iRegion; + CFbsScreenDevice* iFbsDev; + + TPoint iPosition; + TSize iArea; + + TInt iWindowOrdinalPosition; + TInt iWindowOrdinalPriority; + + TRect iViewFinderImageRect; + + TBool iFirstImageDrawn; + + CFbsBitmap* iAttachedFrame; + + TBool iAborted; + + #ifdef TEST_EUNIT + friend class UT_CMccCameraHandler; + #endif + + }; + +#endif diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/mustester/Stubs/mceclientstub/inc/mceamrcodec.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/mustester/Stubs/mceclientstub/inc/mceamrcodec.h Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,182 @@ +/* +* 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: +* +*/ + + +#ifndef CMCEAMRCODEC_H +#define CMCEAMRCODEC_H + +// INCLUDES +#include +#include + +// CONSTANTS +const TInt KMceAmrNbBitrate475 = 4750; +const TInt KMceAmrNbBitrate515 = 5150; +const TInt KMceAmrNbBitrate590 = 5900; +const TInt KMceAmrNbBitrate670 = 6700; +const TInt KMceAmrNbBitrate740 = 7400; +const TInt KMceAmrNbBitrate795 = 7950; +const TInt KMceAmrNbBitrate102 = 10200; +const TInt KMceAmrNbBitrate122 = 12200; + +const TUint KMceAllowedAmrNbBitrate475 = 0x0001; +const TUint KMceAllowedAmrNbBitrate515 = 0x0002; +const TUint KMceAllowedAmrNbBitrate590 = 0x0004; +const TUint KMceAllowedAmrNbBitrate670 = 0x0008; +const TUint KMceAllowedAmrNbBitrate740 = 0x0010; +const TUint KMceAllowedAmrNbBitrate795 = 0x0020; +const TUint KMceAllowedAmrNbBitrate102 = 0x0040; +const TUint KMceAllowedAmrNbBitrate122 = 0x0080; +const TUint KMceAllowedAmrNbBitrateAll = 0x00FF; + +const TUint KMceAmrNbSamplingFreq = 8000; +const TUint KMceAmrWbSamplingFreq = 16000; + +const TUint KMceDefaultMaxPtime = 400; +const TUint KMceDefaultPtime = 20; + +// DATA TYPES +enum TAmrCodecMode + { + EMceBandwidthEfficient = 4, + EMceOctetAligned + }; + +// CLASS DECLARATION + +/** +* Class for the AMR codec information. +* +* It checks the validity of inserted values for AMR. +* +* @lib mceclient.lib +*/ +class CMceAmrCodec : public CMceAudioCodec + { + public: // Constructors and destructor + + /** + * Destructor. + */ + IMPORT_C ~CMceAmrCodec(); + + public: // From base class + + /** + * Enable / Disable Voice Activity Detection. + * @param aEnableVAD, Boolean indicating whether to enable Voice Activity Detection + * @return KErrNotSupported if codec doesn't support VAD; otherwise KErrNone. + */ + IMPORT_C TInt EnableVAD(TBool aEnableVAD); + + /** + * Sets bitrate used with codec for encoding. + * @param aBitrate, bitrate value for encoding + * @return KErrNotSupported if codec doesn't support bitrate value issued; otherwise KErrNone. + */ + IMPORT_C TInt SetBitrate(TUint aBitrate); + + /** + * Sets bitrates allowed with codec. + * @param aBitrates, allowed bitrate values (like KMceAmrNbBitrate590|KMceAmrNbBitrate670) + * @return KErrNotSupported if codec doesn't support bitrate value issued; otherwise KErrNone. + */ + IMPORT_C TInt SetAllowedBitrates(TUint aBitrates); + + /** + * Sets the sampling frequency. + * @param aSamplingFreq, Sampling frequency to be used + * @return KErrNotSupported if codec doesn't support sampling frequency issued; otherwise KErrNone. + */ + IMPORT_C TInt SetSamplingFreq(TUint aSamplingFreq); + + /** + * Sets the packetization rate. + * @param aPTime, Packetization rate, must be multiple of audio frame size. + * @return KErrNotSupported if codec doesn't support packetrate value issued; otherwise KErrNone. + */ + IMPORT_C TInt SetPTime(TUint aPTime); + + /** + * Sets the maximum packetization rate. + * @param aMaxPTime, maximum allowed packetization rate, must be multiple of audio frame size. + * @return KErrNotSupported if codec doesn't support packetrate value issued; otherwise KErrNone. + */ + IMPORT_C TInt SetMaxPTime(TUint aMaxPTime); + + /** + * Sets the payload type identifier. + * @param aPayloadType payload type identifier. + * @return One of the standard system-wide error codes. + */ + IMPORT_C TInt SetPayloadType(TUint8 aPayloadType); + + /** + * Sets the codec mode. + * @param aCodecMode Codec mode ( Bandwidth efficient / octet aligned ) + * @return KErrNotSupported if codec doesnt' support codec mode value issued; otherwise KErrNone. + */ + IMPORT_C TInt SetCodecMode(TUint aCodecMode); + + /** + * Clones codec, ownership is transferred. + * @return cloned codec + */ + IMPORT_C CMceAudioCodec* CloneL() const; + + public: + + /** + * Two-phased constructor. + * @param aSdpName sdp name + */ + static CMceAmrCodec* NewL( TBuf8 aSdpName); + + /** + * Two-phased constructor. + * @param aSdpName sdp name + */ + static CMceAmrCodec* NewLC(TBuf8 aSdpName); + + + private: + + /** + * C++ default constructor. + */ + CMceAmrCodec(); + + /** + * By default Symbian 2nd phase constructor is private. + */ + void ConstructL( TBuf8 aSdpName); + + /** + * Sets the sdp name. + * @param aSdpName the sdp name + */ + void SetSdpNameL( const TDesC8& aSdpName ); + + //for testing + + MCE_UNIT_TEST_DEFS + }; + + +#endif + +// End of File diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/mustester/Stubs/mceclientstub/inc/mceaudiocodec.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/mustester/Stubs/mceclientstub/inc/mceaudiocodec.h Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,161 @@ +/* +* 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: +* +*/ + + +#ifndef CMCEAUDIOCODEC_H +#define CMCEAUDIOCODEC_H + +// INCLUDES +#include +#include +#include + +// FORWARD DECLARATIONS +class RReadStream; +class RWriteStream; +class CMceComAudioCodec; +class CMceMediaStream; +class TMceIds; +class TMceEvent; +class TMceMediaId; +class TMceFactory; +class TMceAudioCodecFactory; + +// CLASS DECLARATION + +/** +* Container class for audio codecs. +* +* It defines attributes that can be set and get from audio codec. +* These attributes are used in single audio stream and they +* are negotiated with remote terminal. +* +* @lib mceclient.lib +*/ +class CMceAudioCodec : public CMceCodec + { + public: // Constructors and destructor + + /** + * Destructor. + */ + virtual ~CMceAudioCodec(); + + public: // New functions + + /** + * Enable / Disable Voice Activity Detection. + * @param aEnableVAD, Boolean indicating whether to enable Voice Activity Detection + * @return KErrNotSupported if codec doesn't support VAD; otherwise KErrNone. + */ + virtual TInt EnableVAD(TBool aEnableVAD) = 0; + + /** + * Sets the sampling frequency. + * @param aSamplingFreq, Sampling frequency to be used + * @return KErrNotSupported if codec doesn't support sampling frequency issued; otherwise KErrNone. + */ + virtual TInt SetSamplingFreq(TUint aSamplingFreq) = 0; + + /** + * Sets the packetization rate. + * @param aPTime, Packetization rate, must be multiple of audio frame size. + * @return KErrNotSupported if codec doesn't support packetrate value issued; otherwise KErrNone. + */ + virtual TInt SetPTime(TUint aPTime) = 0; + + /** + * Sets the maximum packetization rate. + * @param aMaxPTime, maximum allowed packetization rate, must be multiple of audio frame size. + * @return KErrNotSupported if codec doesn't support packetrate value issued; otherwise KErrNone. + */ + virtual TInt SetMaxPTime(TUint aMaxPTime) = 0; + + /** + * Clones codec, ownership is transferred. + * @return cloned codec + */ + virtual CMceAudioCodec* CloneL() const = 0; + + /** + * Gets sampling frequency used currently. + * @return Sampling frequency + */ + virtual TUint SamplingFreq() const; + + /** + * Get VAD status. + * @return Boolean indicating is VAD activated + */ + virtual TBool VAD() const; + + /** + * Gets the packetization rate. + * @return packetization rate. + */ + virtual TUint PTime() const; + + /** + * Gets max packetization rate. + * @return Max packetization rate. + */ + virtual TUint MaxPTime() const; + + public: + + /** + * Initializes + * @param aParent the parent + */ + virtual void InitializeL( CMceMediaStream& aParent ); + + + protected: // New functions + + /** + * C++ default constructor. + */ + CMceAudioCodec(); + + + public: // stub data + + /** + * Enables or disables VAD + */ + TBool iEnableVAD; + + /** + * Sampling frequency used with codec + */ + TUint iSamplingFreq; + + /** + * Stream's packet time + */ + TUint iPTime; + + /** + * Stream's max packet time + */ + TUint iMaxPTime; + }; + + +#endif + +// End of File diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/mustester/Stubs/mceclientstub/inc/mceaudiostream.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/mustester/Stubs/mceclientstub/inc/mceaudiostream.h Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,122 @@ +/* +* 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: +* +*/ + + +#ifndef CMCEAUDIOSTREAM_H +#define CMCEAUDIOSTREAM_H + +// INCLUDES +#include +#include + +// CONSTANTS +const TMceMediaType KMceAudio = 1; + +// FORWARD DECLARATIONS +class CMceAudioCodec; + +// CLASS DECLARATION + +/** +* Class for representing unidirectional audio stream. +* +* It defines the used audio codecs for the stream. +* In order to be complete structure, at least one codec is required. +* +* @lib mceclient.lib +*/ +class CMceAudioStream: public CMceMediaStream + { + public: // Constructors and destructor + + /** + * Two-phased constructor. + */ + IMPORT_C static CMceAudioStream* NewL(); + + /** + * Two-phased constructor. + */ + IMPORT_C static CMceAudioStream* NewLC(); + + /** + * Destructor. + */ + IMPORT_C ~CMceAudioStream(); + + public: // Functions + + /** + * Returns the available codecs to the session. + * For CMEOutSession, array contains all codecs supported by + * terminal in default. For CMEInSession, array contains codecs + * that were offered by remote terminal, and supported by local terminal. + * @return codecs available for the session. + */ + IMPORT_C const RPointerArray& Codecs(); + + /** + * Adds codec to the stream, ownership is transferred. + * @param aCodec codec added to the stream + */ + IMPORT_C void AddCodecL( CMceAudioCodec* aCodec ); + + /** + * Removes codec from the stream + * @param aCodec codec removed from stream + */ + IMPORT_C void RemoveCodecL( CMceAudioCodec& aCodec ); + + + public: //from CMceMediaStream + + /** + * Initializes + * @param aParent the parent + */ + void InitializeL( CMceSession& aParent ); + + /** + * Initializes + * @param aManager the manager. Ownership is NOT transferred + */ + void InitializeL( CMceManager* aManager ); + + + private: //methods + + /** + * C++ default constructor. + */ + CMceAudioStream(); + + /** + * Second-phase constructor. + */ + void ConstructL(); + + + private: // Owned data + + /** + * codecs + */ + RPointerArray iCodecs; + + }; + +#endif diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/mustester/Stubs/mceclientstub/inc/mceavccodec.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/mustester/Stubs/mceclientstub/inc/mceavccodec.h Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,243 @@ +/* +* 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: +* +*/ + + +#ifndef MCEAVCCODEC_H +#define MCEAVCCODEC_H + +// INCLUDES +#include +#include + +// CONSTANTS + +const TUint KMceAvcClockRate = 90000; + +// Allowedbitrates bitfield combines avc profile-level-id information in +// similar manner as defined in RFC 3984. Most significant byte stores +// profile-id value, seconds significant byte contains profile-iop value and +// last two bytes contain profile-level information. +// +const TUint KMceAvcBitrateLevel1 = 0x0001; +const TUint KMceAvcBitrateLevel1b = 0x0002; +const TUint KMceAvcBitrateLevel1_1 = 0x0004; +const TUint KMceAvcBitrateLevel1_2 = 0x0008; +const TUint KMceAvcBitrateLevel1_3 = 0x0010; +const TUint KMceAvcBitrateLevel2 = 0x0020; + +const TUint KMceAvcCodecProfileIopConstraintSet = 0x0100; +const TUint KMceAvcCodecProfileIopConstraintSet1 = 0x0200; +const TUint KMceAvcCodecProfileIopConstraintSet2 = 0x0400; + +const TUint KMceAvcCodecProfileIdBaseline = 0x1000; +const TUint KMceAvcCodecProfileIdMain = 0x2000; +const TUint KMceAvcCodecProfileIdExtended = 0x4000; +const TUint KMceAvcCodecProfileIdHigh = 0x8000; + +const TUint KMceAllowedAvcBitrateAll = 0x00FF; + +// Different framerates may be supported depending on profile level. +// +const TUint KMceAvcFrameRate7_5 = 0x0001; +const TUint KMceAvcFrameRate12_5 = 0x0002; +const TUint KMceAvcFrameRate15 = 0x0004; +const TUint KMceAvcFrameRate30 = 0x0008; +const TUint KMceAvcFrameRate36 = 0x0010; + +const TUint KMceAllowedAvcFrameRateAll = 0x00FF; + +// Different resolutions may be supported depending on profile level. +// +const TUint KMceAvcResolution176x144 = 0x0001; +const TUint KMceAvcResolution320x240 = 0x0002; +const TUint KMceAvcResolution352x288 = 0x0004; + +const TUint KMceAllowedAvcResolutionAll = 0x000F; + + +// DATA TYPES +enum TAvcCodecMode + { + KMceAvcModeSingleNal, + KMceAvcModeNonInterleaved, + KMceAvcModeInterleaved + }; + + +// CLASS DECLARATION + +/** +* Class for the H264 codec information. +* +* It checks the validity of inserted values for H264 +* +* @lib mceclient.lib +*/ +class CMceAvcCodec : public CMceVideoCodec + { + + public: // Constructors and destructor + + /** + * Destructor. + */ + IMPORT_C ~CMceAvcCodec(); + + public: + + /** + * Two-phased constructor. + * @param aSdpName sdp name + */ + IMPORT_C static CMceAvcCodec* NewL( TBuf8 aSdpName); + + /** + * Two-phased constructor. + * @param aSdpName sdp name + */ + IMPORT_C static CMceAvcCodec* NewLC( TBuf8 aSdpName ); + + public: // From base classes + + /** + * Sets bitrate used with codec for encoding. + * @param aBitrate bitrate value for encoding + * @return KErrNotSupported if codec doesn't support bitrate + * value issued + */ + virtual TInt SetBitrate( TUint aBitrate ); + + /** + * Sets bitrates allowed with codec. + * @param aBitrates allowed bitrate values + * @return KErrNotSupported if codec doesn't support bitrate + * values issued + */ + virtual TInt SetAllowedBitrates( TUint aBitrates ); + + /** + * Sets the codec specific mode. + * @param aCodecMode mode of the codec + * @return KErrNotSupported if codec doesnt' support codec mode + * value issued + */ + virtual TInt SetCodecMode( TUint aCodecMode ); + + /** + * Sets the payload type. + * @param aPayloadType type identifier of the payload + * @return KErrNotSupported if codec doesn't support payload type issued + */ + virtual TInt SetPayloadType( TUint8 aPayloadType ); + + /** + * Clones the codec. + * @return cloned codec; ownership is transferred + */ + virtual CMceVideoCodec* CloneL() const; + + /** + * Sets maximum bitrate of the codec. + * @param aMaxBitrate value of maximum bitrate used for encoding + * @leave KErrNotSupported if codec doesn't support frame sizes issued + */ + virtual void SetMaxBitrateL( TUint aMaxBitrate ); + + /** + * Sets resolutions allowed with the codec. + * @param aResolutions bitfield of allowed resolutions + * @leave KErrNotSupported if codec doesn't support resolutions issued + */ + virtual void SetAllowedResolutionsL( TUint aResolutions ); + + /** + * Sets resolution of the video. + * @param aResolution resolution of the video in pixels + * @leave KErrNotSupported if codec doesn't support resolution issued + */ + virtual void SetResolutionL( TSize aResolution ); + + /** + * Sets frame rates allowed with the codec. + * @param aFrameRates allowed frame rate values as a bitfield + * @leave KErrNotSupported if codec doesn't support frame rates issued + */ + virtual void SetAllowedFrameRatesL( TUint aFrameRates ); + + /** + * Sets frame rate used with the codec for encoding. + * @param aFrameRate frame rate for encoding + * @leave KErrNotSupported if codec doesn't support frame rate value + * issued + */ + virtual void SetFrameRateL( TReal aFrameRate ); + + /** + * Sets preferred encoding device for uplink stream and preferred decoding + * device for downlink stream. + * @param aEncodingDecodingDevice + * @leave KErrNotSupported if setting preferred device is not possible + */ + virtual void SetPreferredEncodingDecodingDeviceL( + TUid aEncodingDecodingDevice ); + + /** + * Set config key (sprop-parameter-sets) + * @param aConfigKey, config key as Base64 encoded + * @leave KErrNotSupported if setting config key is not possible + */ + virtual void SetConfigKeyL( const TDesC8& aConfigKey ); + + + private: // Helper functions + + /** + * Sets the sdp name. + * @param aSdpName the sdp name + */ + void SetSdpNameL( const TDesC8& aSdpName ); + + private: // Constructors + + /** + * C++ default constructor. + */ + CMceAvcCodec(); + + /** + * By default Symbian 2nd phase constructor is private. + */ + void ConstructL( TBuf8 aSdpName); + + + public: // Stub data + + TUint8 iPacketizationMode; + + TUint8 iAllowedPacketizationModes; + + + //for testing + + MCE_UNIT_TEST_DEFS + + }; + + +#endif + +// End of File diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/mustester/Stubs/mceclientstub/inc/mcecamerasource.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/mustester/Stubs/mceclientstub/inc/mcecamerasource.h Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,248 @@ +/* +* Copyright (c) 2006 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: +* +*/ + + +#ifndef MCECAMERASOURCE_H +#define MCECAMERASOURCE_H + +// INCLUDES +#include +#include +#include "mcemediasource.h" + +// CONSTANTS +const TMceSourceType KMceCameraSource = 3; + +//FORWARD DECLARATIONS +class CMceManager; +class CMceItcSender; + +// CLASS DECLARATION + +/** +* Class representing camera in MCE. +* +* CMceCameraSource can be used to record video from camera. +* +* Enable (continue) and Disable (pause) operations to it are considered +* to be local, so they are not signalled to remote terminal. +* +* In common situation camera source is combined with display sink which acts +* as a viewfinder for the camera. +* +* @lib mceclient.lib +*/ +class CMceCameraSource : public CMceMediaSource + { + friend class UT_CMusEngLiveSession; + friend class UT_CMusEngTwoWaySession; + friend class UT_TMusEngCameraHandler; + + public: // Constructors and destructor + + /** + * Two-phased constructor. + * @param aManager reference to the manager + */ + IMPORT_C static CMceCameraSource* NewL( CMceManager& aManager ); + + /** + * Two-phased constructor. + * @param aManager reference to the manager + */ + IMPORT_C static CMceCameraSource* NewLC( CMceManager& aManager ); + + /// Not in the real implementation + IMPORT_C static CMceCameraSource* NewL(); + + /// Not in the real implementation + IMPORT_C static CMceCameraSource* NewLC(); + + /** + * Destructor. + */ + IMPORT_C ~CMceCameraSource(); + + public: // From CMceMediaSource + + /** + * Enables the source explicitly. + */ + IMPORT_C void EnableL(); + + /** + * Disables the source explicitly. + */ + IMPORT_C void DisableL(); + + public: // New functions + + /** + * Gets the number of cameras on the device. + * @return number of available cameras + */ + IMPORT_C TInt CamerasAvailable() const; + + /** + * Sets index of physical camera to be used. + * @param aCameraIndex, index of the camera to be used; First camera has + * index 0 and number of available cameras can be retrieved by + * calling CMceCameraSource::CamerasAvailable + */ + IMPORT_C void SetCameraIndexL( TInt aCameraIndex ); + + /** + * Gets information about the camera device. + * @param aInfo on return information about the camera device + */ + IMPORT_C void GetCameraInfo( TCameraInfo& aInfo ) const; + + /** + * Sets the zoom factor. + * This must be in the range of TCameraInfo::iMinZoom to + * TCameraInfo::iMaxZoom inclusive. + * @param aZoomFactor required zoom factor + * @leave KErrArgument if the specified zoom factor is out of range + */ + IMPORT_C void SetZoomFactorL( TInt aZoomFactor ); + + /** + * Gets the currently set zoom factor. + * @return current zoom factor + */ + IMPORT_C TInt ZoomFactorL(); + + /** + * Sets the digital zoom factor. + * This must be in the range of 0 to TCameraInfo::iMaxDigitalZoom + * inclusive. + * @param aDigitalZoomFactor The required digital zoom factor + * @leave KErrArgument if the zoom factor is out of range + */ + IMPORT_C void SetDigitalZoomFactorL( TInt aDigitalZoomFactor ); + + /** + * Gets the currently set digital zoom factor. + * @return current digital zoom factor + */ + IMPORT_C TInt DigitalZoomFactorL(); + + /** + * Sets the contrast adjustment of the device. + * @param aContrast required contrast value; This must be in the + * range of -100 to +100 or CCamera::EContrastAuto. + * @leave KErrNotSupported if contrast adjustment is not supported, + * see TCameraInfo::TOptions + * @leave KErrArgument if the specified contrast value is out of + * range + */ + IMPORT_C void SetContrastL( TInt aContrast ); + + /** + * Gets the current contrast value. + * @return current contrast value + */ + IMPORT_C TInt ContrastL(); + + /** + * Sets the brightness adjustment of the device. + * No effect if this is not supported, see TCameraInfo::TOptions. + * + * @param aBrightness required brightness adjustment; This must be + * in the range of -100 to +100 or CCamera::EBrightnessAuto + * @leave KErrNotSupported if brightness adjustment is not supported, + * see TCameraInfo::TOptions + * @leave KErrArgument if the brightness adjustment is out of range + */ + IMPORT_C void SetBrightnessL( TInt aBrightness ); + + /** + * Gets the currently set brightness adjustment value. + * @return current brightness adjustment value + */ + IMPORT_C TInt BrightnessL(); + + /** + * Sets the exposure adjustment of the device. + * @param aExposure required exposure adjustment + * @leave KErrNotSupported if the specified exposure adjustment is + * not supported, see CameraInfo::iExposureModesSupported + */ + IMPORT_C void SetExposureL( CCamera::TExposure aExposure ); + + /** + * Gets the currently set exposure setting value. + * @return current exposure setting value + */ + IMPORT_C CCamera::TExposure ExposureL(); + + /** + * Sets the white balance adjustment of the device. + * @param aWhiteBalance required white balance adjustment + * @leave KErrNotSupported if the specified white balance adjustment is + * not supported, see TCameraInfo::iWhiteBalanceModesSupported + */ + IMPORT_C void SetWhiteBalanceL( CCamera::TWhiteBalance aWhiteBalance ); + + /** + * Gets the currently set white balance adjustment value. + * @return current white balance adjustment value + */ + IMPORT_C CCamera::TWhiteBalance WhiteBalanceL(); + + public: // internal + + /** + * Initializes + * @param aManager the manager. Ownership is NOT transferred + */ + void InitializeL( CMceManager* aManager ); + + private: + + /** + * C++ constructor. + */ + CMceCameraSource(); + + private: // Owned data + + TCameraInfo iCameraInfo; + + private: // Not owned data + + //CMceManager* iManager; + + private: // Reserved for future use + + TAny* iReserved; + + + public: // stub data + + TInt iCameraIndex; + TInt iCameraCount; + TInt iZoomFactor; + TInt iDigitalZoomFactor; + TInt iContrast; + TInt iBrightness; + TInt iExposure; + TInt iWhiteBalance; + + }; + +#endif diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/mustester/Stubs/mceclientstub/inc/mcecodec.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/mustester/Stubs/mceclientstub/inc/mcecodec.h Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,412 @@ +/* +* Copyright (c) 2006 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: +* +*/ + + +#ifndef MCECODEC_H +#define MCECODEC_H + +// INCLUDES +#include +#include "mcedefs.h" + +// FORWARD DECLARATIONS +class RReadStream; +class RWriteStream; +class CMceComCodec; + +class CMceMediaStream; +class TMceEvent; +class TMceMediaId; +class TMceFactory; + +// DATA TYPES +typedef TUint TMceCodecType; + + +// CLASS DECLARATION + +/** +* Base class for codecs. +* +* It defines setters and getters for generic codec attributes. +* +* In some systems certain device resources cannot be shared. For example +* speaker of the device might not be able to play simultaneously several +* differently encoded audio streams. Or only one client at the time +* could use the camera of the device. Codec states can be used to overcome +* situations where single codec would occupy some resource for excessive +* period of time or permanently. +* +* Codec can be in one of the three states: +* +* When codec is in state EEnabled, resources, associated with the codec, +* are reserved for the codec and in some cases cannot be used by other +* software components. Precondition for reserving resources for the codec +* is that associated device resource (e.g. speaker sink of downlink or +* camera source of uplink) is also enabled. +* +* When codec is in state EStandby, resources are not reserved for the codec +* and therefore can be used by other software components. If the stream +* (uplink or downlink), into which this codec is attached, encounters data +* encoded with the codec, codec in state EStandby is tried to be enabled. +* If enabling succeeds, codec state changes to EEnabled and associated +* resources are reserved. +* +* When codec is in state EDisabled, resources are not reserved for the codec +* and are not even tried to be reserved. +* +* @lib mceclient.lib +*/ +class CMceCodec : public CBase + { + + public: // Codec states + + enum TState + { + EDisabled, + EStandby, + EEnabled + }; + + public: // Constructors and destructor + + /** + * Destructor. + */ + virtual ~CMceCodec(); + + public: // New functions + + /** + * Sets bitrate used with codec for encoding. + * @param aBitrate bitrate value for encoding + * @return KErrNotSupported if codec doesn't support bitrate + * value issued + */ + virtual TInt SetBitrate( TUint aBitrate ) = 0; + + /** + * Sets bitrates allowed with codec. + * @param aBitrates allowed bitrate values + * @return KErrNotSupported if codec doesn't support bitrate + * values issued + */ + virtual TInt SetAllowedBitrates( TUint aBitrates ) = 0; + + /** + * Sets the codec specific mode. + * @param aCodecMode mode of the codec + * @return KErrNotSupported if codec doesnt' support codec mode + * value issued + */ + virtual TInt SetCodecMode( TUint aCodecMode ) = 0; + + /** + * Sets the payload type. + * @param aPayloadType type identifier of the payload + * @return KErrNotSupported if codec doesn't support payload type issued + */ + virtual TInt SetPayloadType( TUint8 aPayloadType ) = 0; + + + public: // New functions + + /** + * Sets the state of the codec. + * @param aState desired codec state + */ + IMPORT_C void SetStateL( CMceCodec::TState aState ); + + /** + * Sets the timer period in seconds from starting of inactivity + * to automatically changing to state CMceCodec::EStandby . + * @param aTimerValue timer period in seconds + */ + IMPORT_C void SetStandByTimerL( TUint32 aTimerValue ); + + /** + * Sets MMF priority value for the codec. + * @param aPriority priority of the codec + */ + IMPORT_C void SetMMFPriorityL( TInt aPriority ); + + /** + * Sets MMF priority preference value for the codec. + * @param aPriorityPreference priority preference of the codec + */ + IMPORT_C void SetMMFPriorityPreferenceL( TInt aPriorityPreference ); + + /** + * Set keep alive packets send timer value. + * @param aTimerValue timer value in ms for keep alive packets + * @return One of the standard system-wide error codes. + */ + IMPORT_C void SetKeepAliveTimerL( TUint8 aTimerValue ); + + /** + * Set keep alive packets payload type. + * @param aKeepAlivePT payload type for keep alive packets + * @return One of the standard system-wide error codes. + */ + IMPORT_C void SetKeepAlivePayloadTypeL( TUint8 aKeepAlivePT ); + + /** + * Set keep alive packets payload data. + * @param aData payload data for keep alive packets + * @return One of the standard system-wide error codes. + */ + IMPORT_C void SetKeepAliveDataL( const TDesC8& aData ); + + + public: // Getters + + /** + * Gets the state of the codec + * @return state of the codec + */ + IMPORT_C CMceCodec::TState State() const; + + /** + * Media id of the codec. + * @return media id + */ + //IMPORT_C TMceMediaId Id() const; + + /** + * Type of the codec + * @return codec type + */ + IMPORT_C TMceCodecType Type() const; + + /** + * Gets codec fourCC. + * @return fourCC value + */ + IMPORT_C TUint32 FourCC() const; + + /** + * Gets current bitrate. + * @return bitrate value + */ + IMPORT_C TUint Bitrate() const; + + /** + * Gets allowed bitrate values. + * @return bitrate values + */ + IMPORT_C TUint AllowedBitrates() const; + + /** + * Gets current frame size of the codec. + * @return size of single frame used by the codec + */ + IMPORT_C TUint FrameSize() const; + + /** + * Gets the codec mode. + * @return codec mode + */ + IMPORT_C TUint CodecMode() const; + + /** + * Gets the payload type identifier. + * @return payload type used + */ + IMPORT_C TUint8 PayloadType() const; + + /** + * Gets the sdp name. + * @return sdp name of the codec + */ + IMPORT_C const TDesC8& SdpName() const; + + /** + * Gets MMF priority + * @return MMF priority + */ + IMPORT_C TInt MMFPriority() const; + + /** + * Gets MMF priority preference + * @return current MMFPriorityPreference + */ + IMPORT_C TInt MMFPriorityPreference() const; + + /** + * Gets keep alive packets send timer value. + * @return keep alive packets send timer value (ms). + */ + IMPORT_C TUint8 KeepAliveTimer() const; + + /** + * Gets keep alive packets payload type. + * @return keep alive packets payload type. + */ + IMPORT_C TUint8 KeepAlivePayloadType() const; + + /** + * Gets keep alive packets payload data. + * @return keep alive packets payload data. + */ + IMPORT_C const TDesC8& KeepAliveData() const; + + + public: // Preference manipulation + + /** + * Gets the preference value. + * @return preference value of the codec + */ + IMPORT_C TInt Preference() const; + + /** + * Sets the preference value used in media negotiation. + * Codec with preference value 0 is considered as the most preferenced + * codec. Preference of codecs with the same preference value is + * determined by order they were added to the stream. + * @param aPreference preference value of the codec + */ + IMPORT_C void SetPreferenceL( TInt aPeference ); + + + public: // Internal + + /** + * Initializes the codec. + * @param aParent the parent + */ + virtual void InitializeL( CMceMediaStream& aParent ); + + + + protected: // New functions + + /** + * Sets the sdp name. + * @param aSdpName sdp name for the codec + */ + virtual void SetSdpNameL( const TDesC8& aSdpName ) = 0; + + /** + * C++ default constructor. + */ + CMceCodec(); + + protected: // Data + + /** + * Codec type. + */ + TMceCodecType iType; + + protected: // NOT owned data + + /** + * Parent stream, not owned. + */ + CMceMediaStream* iStream; + + private: // Reserved for future use + + TAny* iReserved; + + public: // stub data + + /** + * type of session + */ + //TMceMediaId iID; + + /** + * Fmtp attribute + */ + HBufC8* iFmtpAttr; + + /** + * Sdp name used in SDP messages + */ + TBuf8 iSdpName; + + /** + * Payload type + */ + TUint8 iPayloadType; + + /** + * Is enabled + */ + TBool iIsEnabled; + + /** + * Stream's bit rate + */ + TUint iBitrate; + + /** + * Stream's allowed bit rates + */ + TUint32 iAllowedBitrates; + + /** + * Codec mode ( e.g. PCMU, PCMA, Bandwidth efficient, octet aligned ) + */ + TUint32 iCodecMode; + + /** + * Codec FourCC + */ + TUint32 iFourCC; + + /** + * Codecs frame size + */ + TUint iFrameSize; + + /** + * + */ + TInt iMMFPriority; + + /** + * + */ + TInt iMMFPriorityPreference; + + /** + * + */ + TUint8 iKeepAliveTimer; + + /** + * Codecs frame size + */ + TUint8 iKeepAlivePayloadType; + + /** + * + */ + TBuf8<10> iKeepAliveData; + + TInt iPreference; + + }; + + +#endif + +// End of File diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/mustester/Stubs/mceclientstub/inc/mcedefs.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/mustester/Stubs/mceclientstub/inc/mcedefs.h Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,97 @@ +/* +* 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: +* +*/ + + +#ifndef MCEDEFS_H +#define MCEDEFS_H + +#include + +const TInt KMceMaxSdpNameLength = 20; +const TUint8 KMceMaxPacketrate = 10; +const TInt KMcePTimeFactor = 1000; + +const TInt KMceMaxSizeInReadStream = 1000; +const TInt KMceExternalizeBufferExpandSize = 100; +const TInt KMceArrayGranularity = 5; + + +_LIT8( KMceSDPNamePCMU, "PCMU" ); +_LIT8( KMceSDPNamePCMA, "PCMA" ); +_LIT8( KMceSDPNameAMR, "AMR" ); + +_LIT8( KMceSDPNameH263, "H263" ); +_LIT8( KMceSDPNameH2632000, "H263-2000" ); +_LIT8( KMceSDPNameH2631998, "H263-1998" ); +_LIT8( KMceSDPNameH264, "H264" ); + +typedef TInt TMceReturnStatus; +const TMceReturnStatus KMceAsync = 1; +const TMceReturnStatus KMceReady = 0; + +// SESSION MODIFIERS + +/** +* Data type for session modifiers. +*/ +typedef TUint32 TMceSessionModifier; + + +/** +* Usage of QOS preconditions within session; +* This modifier can be set only when session is in state MceSession::EIdle. +* By default, session is in preconditions supported mode. +* +* KMcePreconditionsNotUsed indicates that preconditions are not used. +* KMcePreconditionsSupported indicates that preconditions are supported +*/ +// KEY +const TMceSessionModifier KMcePreconditions = 0; +// VALUES +const TUint KMcePreconditionsNotUsed = 0; +const TUint KMcePreconditionsSupported = 1; + +/** +* Usage of reliable provisional responses (aka 100rel) within session. +* This modifier can be set only when session is in state MceSession::EIdle +* or MceSession::EIncoming. +* By default, session is in 100rel supported mode. +* +* KMce100RelNotUsed indicates that 100rel is not used. +* KMce100RelSupported indicates that 100rel is supported. +* KMce100RelRequired indicates that 100rel is required. +*/ +// KEY +const TMceSessionModifier KMce100Rel = 1; +// VALUES +const TUint KMce100RelNotUsed = 0; +const TUint KMce100RelSupported = 1; +const TUint KMce100RelRequired = 2; + + + +#ifdef __MWERKS__ +#pragma warn_emptydecl off +#endif + +#ifdef MCE_UNIT_TEST +#include "mcetestdefs.h" +#else +#define MCE_UNIT_TEST_DEFS +#endif + +#endif diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/mustester/Stubs/mceclientstub/inc/mcedisplaysink.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/mustester/Stubs/mceclientstub/inc/mcedisplaysink.h Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,197 @@ +/* +* Copyright (c) 2006 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: +* +*/ + + +#ifndef MCEDISPLAYSINK_H +#define MCEDISPLAYSINK_H + +// INCLUDES +#include "mcemediasink.h" + +// FORWARD DECLARATIONS +class CMceManager; +class RWindow; +class CWindowGc; +class CMccScreen; + +// DATA TYPES +const TMceSinkType KMceDisplaySink = 3; + + +// CLASS DECLARATION + +/** +* Class representing display in MCE. +* +* CMceDisplaySink can be used to show video on screen or as a viewfinder +* of the camera. +* +* Enable and Disable operations to it are considered to be local, +* so they are not signalled to remote terminal. +* +* @lib mceclient.lib +*/ +class CMceDisplaySink : public CMceMediaSink + { + + public: + + enum TRotation + { + ENone, + EClockwise90Degree, + EClockwise180Degree, + EClockwise270Degree + }; + + public: // Constructors and destructor + + /** + * Two-phased constructor. + * @param aManager reference to the manager + */ + IMPORT_C static CMceDisplaySink* NewL( CMceManager& aManager ); + + /** + * Two-phased constructor. + * @param aManager reference to the manager + */ + IMPORT_C static CMceDisplaySink* NewLC( CMceManager& aManager ); + + /// Not in the real implementation + IMPORT_C static CMceDisplaySink* NewL(); + + /// Not in the real implementation + IMPORT_C static CMceDisplaySink* NewLC(); + + /** + * Destructor. + */ + IMPORT_C ~CMceDisplaySink(); + + + public: // From CMceMediaSink + + /** + * Enables the sink explicitly. + */ + IMPORT_C void EnableL(); + + /** + * Disables the sink explicitly. + */ + IMPORT_C void DisableL(); + + + public: // New functions + + /** + * Gets the number of available displays on the device. + * @return number of available displays + */ + IMPORT_C TInt DisplaysAvailable() const; + + /** + * Sets index of physical display to be used. + * @param aDisplayIndex, index of the display to be used; number of + * available displays can be retrieved by calling + * CMceDisplaySink::DisplaysAvailable + * @leave KErrNotSupported if requested display cannot be used + */ + IMPORT_C void SetDisplayIndexL( TInt aDisplayIndex ); + + /** + * Sets display resources. + * @param aWindow handle to the display window of the user + * @param aGc graphics context of the user + */ + IMPORT_C void SetDisplay( RWindow& aWindow, CWindowGc& aGc ); + + /** + * Sets display rectangle. Display data is drawn to the given area. + * @param aRect display area + */ + IMPORT_C void SetDisplayRectL( const TRect& aRect ); + + /** + * Gets current display rectagle. + * @return current display rectangle + */ + IMPORT_C const TRect DisplayRectL(); + + /* + * Sets display sink priority. Priority value 0 is the highest priority. + * Display sink with higher priority draws over less priority display + * if display rectangles overlap. + * @param aPriority priority value + */ + IMPORT_C void SetPriorityL( TUint aPriority ); + + /* + * Display sink's current priority. + * @return priority value + */ + IMPORT_C TUint PriorityL(); + + /* + * Sets display sink rotation. + * @param aRotation rotation value + */ + IMPORT_C void SetRotationL( TRotation aRotation ); + + /* + * Display sink's current rotation. + * @return rotation value + */ + IMPORT_C TRotation RotationL(); + + + public: // internal + + /** + * Initializes + * @param aManager the manager. Ownership is NOT transferred + */ + void InitializeL( CMceManager* aManager ); + + + private: + + /** + * C++ constructor. + */ + CMceDisplaySink(); + + private: // Reserved for future use + + TAny* iReserved; + + public: // stub data + + TInt iDisplayIndex; + + TRect iDisplayRect; + + TUint iDisplayPriority; + + TRotation iRotation; + + CMccScreen* iScreen; + + }; + +#endif diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/mustester/Stubs/mceclientstub/inc/mcefilesink.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/mustester/Stubs/mceclientstub/inc/mcefilesink.h Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,99 @@ +/* +* Copyright (c) 2006 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: +* +*/ + + +#ifndef MCEFILESINK_H +#define MCEFILESINK_H + +// INCLUDES +#include +#include + +// FORWARD DECLARATIONS + +// DATA TYPES +const TMceSinkType KMceFileSink = 4; + + +// CLASS DECLARATION + +/** +* Class representing file sink in Mce. +* +* CMceFileSink can be used to record a stream to the file. The file may consist of +* both audio and video data. If both media elements are available and should be +* recorded to the same file, the same file sink should be attached to audio stream +* and video stream. Recording only one of the media elements is possible as well. +* +* Enable (continue) and Disable (pause) operations to it are considered +* to be local, so they are not signalled to remote terminal. +* +* @lib mceclient.lib +*/ +class CMceFileSink : public CMceMediaSink + { + public: // Constructors and destructor + + /** + * Two-phased constructor. + * @param aFileName name of the file including full path info + */ + IMPORT_C static CMceFileSink* NewL( const TFileName& aFileName ); + + /** + * Two-phased constructor. + * @param aFileName name of the file including full path info + */ + IMPORT_C static CMceFileSink* NewLC( const TFileName& aFileName ); + + /** + * Destructor. + */ + IMPORT_C ~CMceFileSink(); + + + public: // From CMceMediaSink + + /** + * Enables the sink explicitly. + */ + IMPORT_C void EnableL(); + + /** + * Disables the sink explicitly. + */ + IMPORT_C void DisableL(); + + private: + + /** + * C++ default constructor. + */ + CMceFileSink(); + + /** + * Second-phase constructor. + */ + void ConstructL( const TFileName& aFileName ); + + public: // Stub data + + TFileName iFileName; + + }; + +#endif diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/mustester/Stubs/mceclientstub/inc/mcefilesource.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/mustester/Stubs/mceclientstub/inc/mcefilesource.h Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,262 @@ +/* +* Copyright (c) 2006 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: +* +*/ + + +#ifndef MCEFILESOURCE_H +#define MCEFILESOURCE_H + +// INCLUDES +#include "mcemediasource.h" +#include "mcemediastream.h" + +// CONSTANTS +const TMceSourceType KMceFileSource = 4; + +//FORWARD DECLARATIONS +class CMceManager; + +// CLASS DECLARATION + +/** +* Class representing file source in MCE. +* +* CMceFileSource can be used for streaming file contents. The file may contain +* both audio and video data. If the user wants to stream both media types, +* the same file source should be attached to audio stream and video stream. +* +* The file may contain also several elements of the same media type (e.g. +* 3 audio channels) and the user might want to use only some of those. +* This can be handled by defining index of the file's current media element: +* +* - Get number of audio media elements within the file (e.g. returns 3) +* - Set current audio element index to be 0 +* - Attach the file source to the audioStreamOne (audio element 0 is attached) +* - Set current audio element index to be 2 +* - Attach the file source to the audioStreamTwo (audio element 2 is attached) +* - Consequently, file's audio channel 0 would be streamed over the audioStreamOne +* and channel 2 over the audioStreamTwo. Channel 1 would be ignored. +* +* Enable (continue) and Disable (pause) operations to it are considered +* to be local, so they are not signalled to remote terminal. +* +* @lib mceclient.lib +*/ +class CMceFileSource : public CMceMediaSource + { + + public: // Constructors and destructor + + /** + * Two-phased constructor. + * @param aManager associated MCE manager + * @param aFileName name of the file including full path info + */ + IMPORT_C static CMceFileSource* NewL( CMceManager& aManager, + const TFileName& aFileName ); + + /** + * Two-phased constructor. + * @param aManager associated MCE manager + * @param aFileName name of the file including full path info + */ + IMPORT_C static CMceFileSource* NewLC( CMceManager& aManager, + const TFileName& aFileName ); + + /** + * Destructor. + */ + IMPORT_C ~CMceFileSource(); + + + public: // From CMceMediaSource + + /** + * Enables the source explicitly. + */ + IMPORT_C void EnableL(); + + /** + * Disables the source explicitly. + */ + IMPORT_C void DisableL(); + + + public: // Functions + + /** + * Updates file for the source. + * @param aFileName name of the file including full path info + */ + IMPORT_C void UpdateL ( const TFileName& aFileName ); + + /** + * Determines how many media elements of the spesified type the file + * source contains. E.g. audio file may contain N number of audio + * channels which has to be streamed over N number of audio streams. + * @param aType the type of media + * @return the number of media elements (of spesified type) + * the file contains + */ + IMPORT_C TInt MediaElementCountL( TMceMediaType aType ) const; + + /** + * Sets currently managed media element of the spesified media type. + * The setting is effective when the file source is attached to + * media stream of the spesified type. Current media element can be + * defined for each media type the file contains. By default, media + * element 0 of each media type is used. + * @param aType the type of media + * @param aIndex new index of the current media element + * @leave KErrArgument if media element spesified by input parameters + * does not exist + */ + IMPORT_C void SetCurrentMediaElementL( TMceMediaType aType, TInt aIndex ); + + /** + * Gets currently managed media element of the spesified media type. + * @param aType the type of media + * @return index of the current media element or KErrNotFound if no media + * elements of the spesified type exists + */ + IMPORT_C TInt CurrentMediaElement( TMceMediaType aType ); + + /** + * Sets the position within the file from where to start playback. + * @pre IsEnabled() == EFalse and contains audio/video + * @param aPosition from start of the file in microseconds + */ + IMPORT_C void SetPositionL( const TTimeIntervalMicroSeconds& aPosition ); + + /** + * Gets the current playback position in microseconds from the start of the file. + * @pre contains audio/video + * @return current position from start of the file in microseconds + */ + IMPORT_C TTimeIntervalMicroSeconds PositionL() const; + + /** + * Returns the duration of the file in microseconds. + * @pre contains audio/video + * @return duration of the file in microseconds. + */ + IMPORT_C TTimeIntervalMicroSeconds DurationL() const; + + /** + * Sets fast forward on/off. + * @pre contains video + * @param aUseFFWD ETrue if fast forward is enabled; otherwise EFalse + */ + IMPORT_C void SetFastForwardL( TBool aUseFFWD ); + + /** + * Sets fast rewind on/off. + * @pre contains video + * @param aUseFRWD ETrue if fast rewind is enabled; otherwise EFalse + */ + IMPORT_C void SetFastRewindL( TBool aUseFRWD ); + + /** + * Starts transcoding of file. After the transcoding is complete, + * file of this source is changed into the transcoded file. + * @pre CMceMediaStream::State() == ETranscodingRequired + * @post CMceMediaStream::State() == ETranscoding + * @param aFileName Name of the transcoding output file. + */ + IMPORT_C void TranscodeL( const TFileName& aFileName ); + + /** + * Cancels transcoding of file. + * @pre CMceMediaStream::State() == ETranscoding + * @post CMceMediaStream::State() == ETranscodingRequired + */ + IMPORT_C void CancelTranscodeL(); + + /** + * Gets the current transcoding progress in percentage. + * Value is updated with MMceStreamObserver::StreamStateChanged() event. + * @pre CMceMediaStream::State() == ETranscoding + * @return Transcoding progress in persentage (0-100). + */ + IMPORT_C TInt TranscodingProgressL() const; + + + public: // internal + + /** + * Initializes + * @param aManager the manager. Ownership is NOT transferred + */ + void InitializeL( CMceManager* aManager ); + + public: + + /** + * Two-phased constructor. + */ + static CMceFileSource* NewL(); + + /** + * Two-phased constructor. + */ + static CMceFileSource* NewLC(); + + private: + + /** + * C++ default constructor. + */ + CMceFileSource(); + + /** + * Second-phase constructor. + */ + void ConstructL( CMceManager* aManager, + const TFileName& aFileName ); + + + public: // Stub data + + TBool iFastForward; + TBool iFastRewind; + TTimeIntervalMicroSeconds iPosition; + + //TMceFileInfo iFileInfo; + //TBuf8<256> iFileName; + + TBool iInitialInfoRetrieved; + + TInt iCurrentAudioElement; + TInt iCurrentVideoElement; + + + TFileName iFileName; + TTimeIntervalMicroSeconds iDuration; + TInt iAudioElementCount; + TInt iVideoElementCount; + + TInt iTranscodingPercentage; + + // If this code is != KErrNone, next operation that can fail will fail + // (leave or return a value) with this code. Variable is reseted before + // failing. + // Obs! Check that wanted failing is really implemented in this stub + mutable TInt iFailWithCode; + + }; + + +#endif diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/mustester/Stubs/mceclientstub/inc/mceh263codec.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/mustester/Stubs/mceclientstub/inc/mceh263codec.h Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,199 @@ +/* +* 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: +* +*/ + + +#ifndef CMCEH263CODEC_H +#define CMCEH263CODEC_H + +// INCLUDES +#include "mcevideocodec.h" +#include "mcedefs.h" + +// CONSTANTS + +const TUint KMceH263FrameHeight = 176; +const TUint KMceH263FrameWidth = 144; +const TUint KMceH263ClockRate = 90000; +const TReal KMceH263FrameRate = 15; + +const TInt KMceH263Level10Bitrate = 64000; +const TInt KMceH263Level45Bitrate = 128000; + +const TUint KMceAllowedH263Bitrate10 = 0x0001; +const TUint KMceAllowedH263Bitrate45 = 0x0002; +const TUint KMceAllowedH263BitrateAll = 0x00FF; + +// CLASS DECLARATION + +/** +* Class for the H263 codec information. +* +* It checks the validity of inserted values for H263 +* +* @lib mceclient.lib +*/ +class CMceH263Codec : public CMceVideoCodec + { + + public: // Constructors and destructor + + /** + * Destructor. + */ + IMPORT_C ~CMceH263Codec(); + + public: + + /** + * Two-phased constructor. + * @param aSdpName sdp name + */ + IMPORT_C static CMceH263Codec* NewL( TBuf8 aSdpName); + + /** + * Two-phased constructor. + * @param aSdpName sdp name + */ + IMPORT_C static CMceH263Codec* NewLC( TBuf8 aSdpName ); + + public: // From base classes + + /** + * Sets bitrate used with codec for encoding. + * @param aBitrate bitrate value for encoding + * @return KErrNotSupported if codec doesn't support bitrate + * value issued + */ + virtual TInt SetBitrate( TUint aBitrate ); + + /** + * Sets bitrates allowed with codec. + * @param aBitrates allowed bitrate values + * @return KErrNotSupported if codec doesn't support bitrate + * values issued + */ + virtual TInt SetAllowedBitrates( TUint aBitrates ); + + /** + * Sets the codec specific mode. + * @param aCodecMode mode of the codec + * @return KErrNotSupported if codec doesnt' support codec mode + * value issued + */ + virtual TInt SetCodecMode( TUint aCodecMode ); + + /** + * Sets the payload type. + * @param aPayloadType type identifier of the payload + * @return KErrNotSupported if codec doesn't support payload type issued + */ + virtual TInt SetPayloadType( TUint8 aPayloadType ); + + /** + * Clones the codec. + * @return cloned codec; ownership is transferred + */ + virtual CMceVideoCodec* CloneL() const; + + /** + * Sets maximum bitrate of the codec. + * @param aMaxBitrate value of maximum bitrate used for encoding + * @leave KErrNotSupported if codec doesn't support frame sizes issued + */ + virtual void SetMaxBitrateL( TUint aMaxBitrate ); + + /** + * Sets resolutions allowed with the codec. + * @param aResolutions bitfield of allowed resolutions + * @leave KErrNotSupported if codec doesn't support resolutions issued + */ + virtual void SetAllowedResolutionsL( TUint aResolutions ); + + /** + * Sets resolution of the video. + * @param aResolution resolution of the video in pixels + * @leave KErrNotSupported if codec doesn't support resolution issued + */ + virtual void SetResolutionL( TSize aResolution ); + + /** + * Sets frame rates allowed with the codec. + * @param aFrameRates allowed frame rate values as a bitfield + * @leave KErrNotSupported if codec doesn't support frame rates issued + */ + virtual void SetAllowedFrameRatesL( TUint aFrameRates ); + + /** + * Sets frame rate used with the codec for encoding. + * @param aFrameRate frame rate for encoding + * @leave KErrNotSupported if codec doesn't support frame rate value + * issued + */ + virtual void SetFrameRateL( TReal aFrameRate ); + + /** + * Sets preferred encoding device for uplink stream and preferred decoding + * device for downlink stream. + * @param aEncodingDecodingDevice + * @leave KErrNotSupported if setting preferred device is not possible + */ + virtual void SetPreferredEncodingDecodingDeviceL( + TUid aEncodingDecodingDevice ); + + /** + * Set config key (sprop-parameter-sets) + * @param aConfigKey, config key as Base64 encoded + * @leave KErrNotSupported if setting config key is not possible + */ + virtual void SetConfigKeyL( const TDesC8& aConfigKey ); + + + private: // Helper functions + + /** + * Sets the sdp name. + * @param aSdpName the sdp name + */ + void SetSdpNameL( const TDesC8& aSdpName ); + + private: // Constructors + + /** + * C++ default constructor. + */ + CMceH263Codec(); + + /** + * By default Symbian 2nd phase constructor is private. + */ + void ConstructL( TBuf8 aSdpName); + + + + private: // Data + + private: // Reserved for future use + + TAny* iReserved; + + + }; + + +#endif + +// End of File diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/mustester/Stubs/mceclientstub/inc/mceinsession.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/mustester/Stubs/mceclientstub/inc/mceinsession.h Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,199 @@ +/* +* 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: +* +*/ + + +#ifndef CMCEINSESSION_H +#define CMCEINSESSION_H + +// INCLUDES +#include +#include + +// CLASS DECLARATION + +/** +* Class for mobile terminated MCE sessions. +* +* CMceInSession represents incoming invitation to join in a session. +* +* The characteristics of the session are defined by remote terminal. Theses charactereistics +* are defined using SDP and are turned by MCE server into structure of media streams attached +* into the session. The user of this class is then responsible to either reject accept +* the invitation. +* +* Accepting the invitation is executed in two steps. First after receiving the invitation +* the user must complete the media structure. Streams attached to the session are not complete, +* but they must be completed by the user. Those componens defined in SDP are put automatically +* into media structure (like streams and RTP sinks and sources), but other relations must +* be completed by user. When media structure is complete, UpdateL method is called and session +* establishement continues with second step. +* +* After all media resources are succesfully negotiated and reserved, session state is changed +* to Proceeding, and end used can be alarmed about incoming invitation. Typically, at this state +* 180 Ringing response is sent to network. If end user accepts the invitation, 200 OK is +* sent to network and session is established. +* +* After the session has been succesfylly established, it can be later updated and +* must be finally terminated. +* +* This class is never instantiated by user, but the ownership is in any case transferred +* to it. See class MMceInSessionObserver. +* +* If for any reason instance of this class is deleted while in established state, +* session is automatically terminated by MCE server. +* +* @lib mceclient.lib +*/ +class CMceInSession : public CMceSession + { + + public: // Constructors and destructor + + /** + * Destructor + */ + IMPORT_C ~CMceInSession(); + + public: // Functions + + /** + * Indicates to the server side, that 180(Ringing) response for the + * incoming INVITE request can be sent. Does not establish session. + * @pre State() == CMceSession::EProceeding + * @param aHeaders, SIP headers to be added. Ownership is + * transferred. + * @param aContentType, a type of content. Ownership + * is transferred. + * @param aContent, content to be added in body. Ownership is + * transferred. + + */ + IMPORT_C void RingL( CDesC8Array* aHeaders = 0, + HBufC8* aContentType = 0, + HBufC8* aContent = 0 ); + + /** + * Answers to an incoming session. Indicates to server side that the + * 200(OK) response for the incoming INVITE has to be sent. + * @pre State() == CMceSession::EProceeding + * @post State() == CMceSession::EAnswering + */ + IMPORT_C void AcceptL(); + + /** + * Answers to an incoming session. Indicates to server side that the + * given response for the incoming INVITE has to be sent. + * @pre State() == CMceSession::EProceeding && ( 200 <= aCode <= 300 ) + * @post State() == CMceSession::EAnswering + * @param aReason, reason phrase + * @param aCode, reason code + * @param aHeaders, SIP headers to be added. Ownership is + * transferred. + * @param aContentType, a type of content. Ownership + * is transferred. + * @param aContent, content to be added in body. Ownership is + * transferred. + */ + IMPORT_C void AcceptL( const TDesC8& aReason, + TUint32 aCode, + CDesC8Array* aHeaders = 0, + HBufC8* aContentType = 0, + HBufC8* aContent = 0 ); + + /** + * Rejects the incoming session. Indicates to server side that + * 603(Decline) response has to be sent. + * @pre State() == CMceSession::EIncoming || + * State() == CMceSession::EProceeding + * @post State() == CMceSession::ETerminated + */ + IMPORT_C void RejectL(); + + /** + * Rejects the incoming session. Indicates to server side that + * 603(Decline) response has to be sent. + * @pre ( State() == CMceSession::EIncoming || + * State() == CMceSession::EProceeding ) && + * ( 300 <= aCode < 700 ) + * @post State() == CMceSession::ETerminated + * @param aReason, reason phrase + * @param aCode, reason code + * @param aHeaders, SIP headers to be added. Ownership is + * transferred. + * @param aContentType, a type of content. Ownership + * is transferred. + * @param aContent, content to be added in body. Ownership is + * transferred. + */ + IMPORT_C void RejectL( const TDesC8& aReason, + TUint32 aCode, + CDesC8Array* aHeaders = 0, + HBufC8* aContentType = 0, + HBufC8* aContent = 0 ); + + public: // serialization + + /** + * Two-phased constructor. + * @param aReadStream, read stream + * @param aManager, reference to session manager. + * @param aProfileId, id of the sip profile used for the session. + */ + static CMceInSession* NewL( RReadStream& aReadStream, + CMceManager& aManager, + TUint32 aProfileId ); + /** + * Two-phased constructor. + * For temporay use only. + */ + IMPORT_C static CMceInSession* NewL(); + + /** + * C++ default constructor. + * @param aManager, reference to session manager. + * @param aProfileId, id of the sip profile used for the session. + */ + CMceInSession( CMceManager* aManager, TUint32 aProfileId ); + + + private://methods + + /** + * second-phase constructor + * @param aOriginator, the originator + * @param aRecipient, the recipient + */ + void ConstructL( const TDesC8& aOriginator, const TDesC8& aRecipient ); + + public: // Stub constructor + + /** + * Two-phased constructor. + * @param aManager, reference to session manager. + */ + IMPORT_C static CMceInSession* NewL( CMceManager& aManager, + const TDesC8& aOriginator ); + + + public: // Stub data + + TBool iRingingCalled; + + }; + + + #endif diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/mustester/Stubs/mceclientstub/inc/mceinsessionobserver.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/mustester/Stubs/mceclientstub/inc/mceinsessionobserver.h Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,74 @@ +/* +* 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: +* +*/ + + +#ifndef MMCEINSESSIONOBSERVER_H +#define MMCEINSESSIONOBSERVER_H + +// INCLUDES +#include + +// FORWARD DECLARATIONS +class CMceSession; +class CMceInSession; +class TMceTransactionDataContainer; + +// CLASS DECLARATION + +/** +* An interface to be implemented by users of MCE if they wish to receive +* invitations to session from network. +* +* This observer is set using CMceManager::SetInSessionObserver function. +* +* @lib mceclient.lib +*/ +class MMceInSessionObserver + { + + public: // Functions + + /** + * Incoming session invitation. The CMceInSession is given to the + * application as a callback. + * @param aSession, pointer to the incoming session. Ownership is + * transferred. + * @param aContainer, if present, holds details of + * transaction causing state change. + */ + virtual void IncomingSession( + CMceInSession* aSession, + TMceTransactionDataContainer* aContainer ) = 0; + + /** + * Incoming session update. The new updated CMceInSession is given to the + * application as a callback. + * @param aOrigSession, the original session to be updated. This instance + * cannot be used anymore, all actions done using aUpdatedSession instance. + * @param aUpdatedSession, pointer to the new updated session. Ownership is + * transferred. + * @param aContainer, if present, holds details of + * update transaction. + */ + virtual void IncomingUpdate( + CMceSession& aOrigSession, + CMceInSession* aUpdatedSession, + TMceTransactionDataContainer* aContainer ) = 0; + + }; + +#endif diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/mustester/Stubs/mceclientstub/inc/mcemanager.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/mustester/Stubs/mceclientstub/inc/mcemanager.h Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,271 @@ +/* +* 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: +* +*/ + + +#ifndef CMCEMANAGER_H +#define CMCEMANAGER_H + +// INCLUDES +#include +#include +//#include + +// FORWARD DECLARATIONS +class MMceInSessionObserver; +class MMceInEventObserver; +class MMceInReferObserver; +class MMceSessionObserver; +class MMceEventObserver; +class MMceReferObserver; +class MMceStreamObserver; +class MMceRtpObserver; +class CMceSession; +class CMceEvent; +class CMceRefer; +class TMceMediaId; +class CMceAudioCodec; +class CMceVideoCodec; +class TMceTransactionDataContainer; +class CMusTestSessionSimulator; + +// CLASS DECLARATION + +/** +* Class for connecting to MCE server. +* +* This class provides the connection to the MCE server and +* provides functions for setting observers for asynchronous +* events. +* +* The user should create only one instance of this class. +* +* @lib mceclient.lib +*/ +class CMceManager : public CBase + { + + public: // Constructors and destructor + + /** + * Two-phased constructor. + * @param aAppUid, uid of the application. + * @param aContainer, if set, detailed data provided in observers. + */ + IMPORT_C static CMceManager* NewL( + const TUid& aAppUid, + TMceTransactionDataContainer* aContainer = 0); + + /** + * Destructor. + */ + IMPORT_C ~CMceManager(); + + public: // Functions + + /** + * Set observer for incoming sessions. + * @param aInSessionObserver, observer of the sessions. + */ + IMPORT_C void SetInSessionObserver( + MMceInSessionObserver* aInSessionObserver ); + + /** + * Set observer for incoming events. + * @param aInEventObserver, observer of the events. + */ + IMPORT_C void SetInEventObserver( + MMceInEventObserver* aInEventObserver ); + + /** + * Set observer for incoming refers. + * @param aInReferObserver, observer of the refers. + */ + IMPORT_C void SetInReferObserver( + MMceInReferObserver* aInReferObserver ); + + /** + * Set observer for sessions. + * @param aSessionObserver, observer of the sessions. + */ + IMPORT_C void SetSessionObserver( + MMceSessionObserver* aSessionObserver ); + + /** + * Set observer for medias + * @param aMediaObserver, observer of medias. + */ + IMPORT_C void SetMediaObserver( + MMceStreamObserver* aMediaObserver ); + + /** + * Set observer for rtp + * @param aRtpObserver, observer of rtp + */ + IMPORT_C void SetRtpObserver( + MMceRtpObserver* aRtpObserver ); + + /** + * Sets observer for incoming events. + * @param aEventObserver, observer of the event. Ownership is + * not transferred. + */ + IMPORT_C void SetEventObserver( + MMceEventObserver* aEventObserver); + + /** + * Sets observer for incoming REFER events. + * @param aReferObserver, observer of the event. Ownership is + * not transferred. + */ + IMPORT_C void SetReferObserver( + MMceReferObserver* aReferObserver); + + /** + * Gets currently ongoing sessions + * @return RPointerArray array of sessions. + */ + IMPORT_C const RPointerArray< CMceSession >& Sessions() const; + + /** + * Gets currently ongoing events + * @return RPointerArray array of events. + */ + IMPORT_C const RPointerArray< CMceEvent >& Events() const; + + /** + * Sets observer for incoming SUBSCRIBE events. + * @param aObserver, observer of the event. Ownership is + * not transferred. + */ + IMPORT_C const RPointerArray< CMceRefer >& Refers() const; + + /** + * Returns supported audio codecs of the system. + * @return supported audio codecs of the system. + */ + IMPORT_C const RPointerArray& SupportedAudioCodecs() const; + + /** + * Returns supported video codecs of the system. + * @return supported video codecs of the system. + */ + IMPORT_C const RPointerArray& SupportedVideoCodecs() const; + + /* + * Set default headers for the method. The headers will always be added + * to the given SIP methods unless overwritten with + * headers given as parameter for the API method triggering the + * sending of request/response. + * @param aMethods, the SIP methods the headers are added to. + * @param aHeaders, the default headers, ownership is transferred. + */ + IMPORT_C void SetDefaultHeadersL( CDesC8Array* aMethods, CDesC8Array* aHeaders ); + + /* + * Get the default headers assigned for the given method. + * If none is assigned, and empty array is returned. + * @param aMethod, the method for which the headers are queried. + * @return the default headers, ownership is transfered. + */ + IMPORT_C CDesC8Array* DefaultHeadersL( const TDesC8& aMethod ) const; + + + public: // Functions + + /** + * Gets observer for incoming sessions + * @return incoming session observer + */ + MMceInSessionObserver* InSessionObserver() const; + + /** + * Gets session observer + * @return session observer + */ + MMceSessionObserver* SessionObserver() const; + + /** + * Gets media observer + * @return media observer + */ + MMceStreamObserver* MediaObserver() const; + + /** + * Gets rtp observer + * @return rtp observer + */ + MMceRtpObserver* RtpObserver() const; + + + /** + * Returs transaction container for detailed data. + * Returns NULL, if none exists. + */ + TMceTransactionDataContainer* TransactionContainer() const; + + private: + + /** + * C++ default constructor. + * @param aAppUid, uid of the application. + * @param aContainer, if set, detailed data provided in observers. + */ + CMceManager( const TUid& aAppUid, + TMceTransactionDataContainer* aContainer = 0); + + /** + * By default Symbian 2nd phase constructor is private. + */ + void ConstructL(); + + + public: // Stub data + + /** + * detailed callbacks wanted + */ + TBool iDetailedCallbacks; + + /** + * sessions + */ + RPointerArray iSessions; + + /** + * supported audio codecs + */ + RPointerArray iSupportedAudioCodecs; + + /** + * supported audio codecs + */ + RPointerArray iSupportedVideoCodecs; + + MMceSessionObserver* iSessionObserver; + MMceStreamObserver* iMediaObserver; + MMceRtpObserver* iRtpObserver; + MMceInSessionObserver* iInSessionObserver; + + TMceTransactionDataContainer* iContainer; + + private: // Data + CMusTestSessionSimulator* iSessionSimulator; + + friend class CMceSession; + }; + +#endif diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/mustester/Stubs/mceclientstub/inc/mcemediasink.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/mustester/Stubs/mceclientstub/inc/mcemediasink.h Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,143 @@ +/* +* 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: +* +*/ + + +#ifndef CMCEMEDIASINK_H +#define CMCEMEDIASINK_H + +// INCLUDES +#include +#include + +// DATA TYPES +typedef TUint TMceSinkType; + +// FORWARD DECLARATIONS +class TMceSinkFactory; +class CMceMediaStream; +class TMceIds; +class TMceEvent; +class TMceMediaId; +class CMceManager; + + +// CLASS DECLARATION + +/** +* Base class for the MCE media sinks. +* +* Media sinks represent the destination of data. +* CMceMediaSink gets it data from CMceMediaSource through +* CMceMediaStream. +* +* CMceMediaSink has a type that defines how it can connected to other +* sources and streams. +* +* Enable and Disable operations to sinks are considered to be local, +* so they are not signalled to remote terminal. +* +* @lib mceclient.lib +*/ +class CMceMediaSink: public CBase + { + + public: // Destructor + + IMPORT_C ~CMceMediaSink(); + + public: // Functions + + /** + * Returns the type of the sink. + * @return The type of the sink. + */ + IMPORT_C TMceSinkType Type() const; + + /** + * Enables streaming explicitly. + */ + virtual void EnableL() = 0; + + /** + * Disables streaming explicitly. + */ + virtual void DisableL() = 0; + + /** + * Returns the state of the sink. + * @return ETrue if enabled, EFalse if disabled. + */ + IMPORT_C TBool IsEnabled() const; + + public: //internal + + /** + * Initializes + * @param aParent the parent + */ + virtual void InitializeL( CMceMediaStream& aParent ); + + /** + * Initializes + * @param aManager the manager. Ownership is NOT transferred + */ + virtual void InitializeL( CMceManager* aManager ); + + /** + * Sets and gets reference count describing to how many + * streams sink is associated + * @return reference count reference + */ + TInt& ReferenceCount(); + + protected: + + /** + * C++ default constructor. + */ + CMceMediaSink(); + + /** + * Enables streaming explicitly. + */ + void DoEnableL(); + + /** + * Disables streaming explicitly. + */ + void DoDisableL(); + + + protected: // NOT owned data + + /** + * stream + */ + CMceMediaStream* iStream; + + public: // stub data + + TMceSinkType iType; + + TBool iIsEnabled; + + TInt iReferenceCount; + + }; + + +#endif diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/mustester/Stubs/mceclientstub/inc/mcemediasource.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/mustester/Stubs/mceclientstub/inc/mcemediasource.h Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,146 @@ +/* +* 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: +* +*/ + + +#ifndef CMCEMEDIASOURCE_H +#define CMCEMEDIASOURCE_H + +// INCLUDES +#include + +// DATA TYPES +typedef TUint TMceSourceType; + +// FORWARD DECLARATIONS +class RReadStream; +class RWriteStream; +class CMceComMediaSource; +class TMceSourceFactory; +class CMceMediaStream; +class TMceEvent; +class TMceMediaId; +class CMceManager; + +// CLASS DECLARATION + +/** +* Base class for the MCE media sources. +* +* Media sources represent the origin of data. +* CMceMediaSource puts it data through CMceMediaStream into +* CMceMediaSink. +* +* CMceMediaSource has a type that defines how it can connected to other +* sinks and streams. +* +* Enable and Disable operations to sinks are considered to be local, +* so they are not signalled to remote terminal. +* +* @lib mceclient.lib +*/ +class CMceMediaSource: public CBase + { + public: // Destructor + + IMPORT_C ~CMceMediaSource(); + + public: // Functions + + /** + * Returns the type of the source. + * @return The type of the source. + */ + IMPORT_C TMceSourceType Type() const; + + /** + * Enables streaming explicitly. + */ + virtual void EnableL() = 0; + + /** + * Disables streaming explicitly. + */ + virtual void DisableL() = 0; + + /** + * Returns the state of the source. + * @return ETrue if enabled, EFalse if disabled. + */ + IMPORT_C TBool IsEnabled() const; + + + + public: //internal + + /** + * Initializes + * @param aParent the parent + */ + virtual void InitializeL( CMceMediaStream& aParent ); + + /** + * Initializes + * @param aManager the manager. Ownership is NOT transferred + */ + virtual void InitializeL( CMceManager* aManager ); + + /** + * Sets and gets reference count describing to how many + * streams source is associated + * @return reference count reference + */ + TInt& ReferenceCount(); + + + protected: + + /** + * C++ default constructor. + */ + CMceMediaSource(); + + /** + * Enables streaming explicitly. + */ + void DoEnableL(); + + /** + * Disables streaming explicitly. + */ + void DoDisableL(); + + + protected: // NOT owned data + + /** + * stream + */ + RPointerArray iStreams; + + + public: // stub data + + TBool iIsEnabled; + + TMceSourceType iType; + + TInt iReferenceCount; + + }; + + +#endif diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/mustester/Stubs/mceclientstub/inc/mcemediastream.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/mustester/Stubs/mceclientstub/inc/mcemediastream.h Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,316 @@ +/* +* 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: +* +*/ + + +#ifndef CMCEMEDIASTREAM_H +#define CMCEMEDIASTREAM_H + +// INCLUDES +#include + +// DATA TYPES +typedef TUint TMceMediaType; + +// FORWARD DECLARATIONS +class CMceComMediaStream; +class TMceFactory; +class TMceMediaStreamFactory; +class RWriteStream; +class RReadStream; +class CDesC8Array; +class CMceSession; +class TMceIds; +class TMceEvent; +class TMceMediaId; +class CMceManager; +class CMceSession; +class CMceMediaSource; +class CMceMediaSink; +class MMceComSerializationContext; +class MDesC8Array; + +// CLASS DECLARATION + +/** +* Base class for MCE media streams. +* +* MCE Media stream represents stream of data negotiated between two terminals. +* Streams may transfer any data. +* +* Enabling or disabling of a stream is not a local operation, but it requires +* always signalling. Thus, these operation require always to be completed by +* calling CMceSession::UpdateL() function. +* +* @lib mceclient.lib +*/ +class CMceMediaStream : public CBase + { + public: // Stream states + + enum TState + { + EUninitialized, // Stream is created + EInitialized, // Stream is initialized + EBuffering, // Stream is buffering + EIdle, // Stream is not receiving RTP + EStreaming, // Stream is streaming + EDisabled, // Stream is explicitly disabled + ENoResources, // Stream has no needed resources to stream + ETranscodingRequired, // Stream requires non-realtime transcoding + ETranscoding // Stream is transcoding in non-realtime + }; + + public: // Destructor + + /** + * Destructor. + */ + IMPORT_C ~CMceMediaStream(); + + public: // Functions + + /** + * Gets the state of the stream. + * @return the current state of the stream + */ + IMPORT_C CMceMediaStream::TState State() const; + + /** + * Returns the type of the stream. + * @return The type of the stream. + */ + IMPORT_C TMceMediaType Type() const; + + /** + * Configures media stream by updating SDP media lines. + * In order to get complete update, whole session must be + * updated causing sending of re-invite. + * @param aMediaSDPLines, application specific SDP media lines for + * the stream. Ownership is transferred. + */ + IMPORT_C void SetMediaAttributeLinesL( CDesC8Array* aMediaSDPLines ); + + /** + * Gets attribute lines of the media. + * @return array of media attribute lines, owneship is transferred. + */ + IMPORT_C MDesC8Array* MediaAttributeLinesL(); + + /** + * Sets local media port + * @param aLocalMediaPort, local port for the media + */ + IMPORT_C void SetLocalMediaPortL(TUint aLocalMediaPort); + + /** + * Gets the local media port. + * @return Local port used for media. + */ + IMPORT_C TUint LocalMediaPort() const; + + /** + * Gets the session this stream belongs to, if exists. The + * ownership is not transfered. + * @return Session object + */ + IMPORT_C CMceSession* Session() const; + + + public: // Local stream control + + /** + * Enables streaming explicitly. + */ + virtual void EnableL(); + + /** + * Disables streaming explicitly. + */ + virtual void DisableL(); + + /** + * Returns the state of the stream. + * @return ETrue if enabled, EFalse if disabled. + */ + IMPORT_C TBool IsEnabled() const; + + + public: // Source and sink functions + + /** + * Adds source to the stream. CMceMediaStream can only + * have one source at a time. Ownership of passed source is transferred. + * However, the same source can be also passed to other streams resulting + * that streams share ownership of the source. Passing NULL source will + * remove source from stream. + * In some cases the source might contain a codec. The codec is derived + * to the stream when such source is added to the stream. + * Derived codec will get automatically highest preference. + * @param aSource source to be added to the stream; ownership is + * transferred + */ + IMPORT_C void SetSourceL( CMceMediaSource* aSource ); + + /** + * Adds sink to the stream. CMceMediaStream can have + * many sinks at a time. Ownership of passed sink is transferred. + * However, the same sink can be also passed to other streams resulting + * that streams share ownership of the sink. + * @param aSink sink to be added to the stream; ownership is transferred + */ + IMPORT_C void AddSinkL( CMceMediaSink* aSink ); + + /** + * Gets source of the stream. Returns NULL if source is not set. + * @return source of the stream; ownership is not transferred + */ + IMPORT_C CMceMediaSource* Source() const; + + /** + * Gets array of sinks of the stream. + * @return array of sinks + */ + IMPORT_C const RPointerArray& Sinks() const; + + /** + * Removes sink from the stream. + * @post aSink cannot be used anymore and contents of + * previously returned sink array (CMceMediaStream::Sinks()) + * are not anymore valid + * @param aSink sink to be removed from the stream + */ + IMPORT_C void RemoveSinkL( CMceMediaSink& aSink ); + + public: // Binding opposite way stream + + /** + * Binds opposite direction stream to this stream. + * @param aStream another stream to be bind to the stream; + * ownership is transferred + */ + IMPORT_C void BindL( CMceMediaStream* aStream ); + + /** + * Gets opposite direction stream of this stream. + * @return opposite direction stream + */ + IMPORT_C CMceMediaStream& BoundStreamL() const; + + /** + * Checks if opposite direction stream is set. + * @return ETrue if opposite direction stream is set; + * otherwise EFalse + */ + IMPORT_C TBool BoundStream() const; + + + public: //internal + + /** + * Checks if this is binder (biding owner) + * @return ETrue if this is binder (biding owner) + */ + TBool Binder() const; + + /** + * Initializes + * @param aParent the parent + */ + virtual void InitializeL( CMceSession& aParent ); + + /** + * Initializes + * @param aManager the manager. Ownership is NOT transferred + */ + virtual void InitializeL( CMceManager* aManager ); + + protected: + + /** + * C++ default constructor. + */ + CMceMediaStream(); + + private: + + /** + * Handles event + * @param aEvent the event + * @return status, if event was consumed or not or object needs update + */ + TInt HandleEvent( TMceEvent& aEvent ); + + /** + * one-way bind + * @param aStream another stream to be bind to the stream. + */ + void DoBindL( CMceMediaStream* aStream ); + + /** + * Deletes sink + * @param aIndex index of sink in the array + */ + void DeleteSink( TInt aIndex ); + + /** + * Deletes source + */ + void DeleteSource(); + + + protected: // NOT owned data + + /** + * session + */ + CMceSession* iSession; + + protected: // owned data + + + /** + * linked stream. Owned if iLinkOwner is ETrue + */ + CMceMediaStream* iLinkedStream; + + public: // stub data + + /** + * source + */ + CMceMediaSource* iSource; + + /** + * sinks + */ + RPointerArray iSinks; + + TState iState; + + TMceMediaType iType; + + TBool iLinkOwner; + + TBool iIsEnabled; + + TUint iLocalMediaPort; + + CDesC8Array* iMediaSDPLines; + }; + + +#endif diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/mustester/Stubs/mceclientstub/inc/mceoutsession.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/mustester/Stubs/mceclientstub/inc/mceoutsession.h Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,161 @@ +/* +* 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: +* +*/ + + +#ifndef CMCEOUTSESSION_H +#define CMCEOUTSESSION_H + +// INCLUDES +#include +#include + +// FORWARD DECLARATIONS +class CSIPProfile; +class CMceMediaStream; +class CMceManager; +class CMceEvent; +class CMceRefer; + +// CLASS DECLARATION + +/** +* Class for mobile originated MCE sessions. +* +* CMceOutSession represents outgoing invitation to remote terminal to join in a session. +* +* The characteristics of the session are defined by user of this class by attaching +* media streams into the session. Theses charactereistics are turned by MCE server into SDP +* and attached into sent invitation request. +* +* After the session has been succesfylly established, it can be later updated and +* must be finally terminated. +* +* If for any reason instance of this class is deleted while in established state, +* session is automatically terminated by MCE server. +* +* @lib mceclient.lib +*/ +class CMceOutSession : public CMceSession + { + + public: // Constructors and destructor + + /** + * Two-phased constructor. Should be used when session + * is established into new logical connection to remote terminal. + * @param aManager, reference to session manager. + * @param aProfile, sip profile used for the session. + * @param aRecipient, recipient of the session invitation. + * @param aOriginator, originator of the session invitation. + */ + IMPORT_C static CMceOutSession* NewL( + CMceManager& aManager, + CSIPProfile& aProfile, + const TDesC8& aRecipient, + HBufC8* aOriginator = 0); + + /** + * Two-phased constructor. Should be used when session is associated + * to existing event. This guarantees that session is established with + * same remote terminal with the event. + * @param aEvent, reference to existing event that is associated + * with this session. + */ + IMPORT_C static CMceOutSession* NewL(CMceEvent& aEvent); + + /** + * Two-phased constructor. Should be used when session is associated + * to existing refer. This guarantees that session is established with + * same remote terminal with the refer. + * @param aRefer, reference to existing refer that is associated + * with this session. + */ + IMPORT_C static CMceOutSession* NewL(CMceRefer& aRefer); + + /// Note: This function exists only in the stub + IMPORT_C static CMceOutSession* NewL(); + + /** + * Destructor. + */ + IMPORT_C ~CMceOutSession(); + + public: // from CMceSession + + /** + * Adds media stream into session. + * @pre State() == CMceSession::EIdle || + * State() == CMceSession::EIncoming || + * State() == CMceSession::EEstablished + * @pre aMediaStream != 0 + * @param aMediaStream, media stream to be added. + * ownership is transferred. + */ + IMPORT_C void AddStreamL( CMceMediaStream* aMediaStream ); + + public: // Functions + + /** + * Establishes a SIP session with the recipient. + * The streams in the stream array are offered in the + * SDP codec negotiation. + * @pre State() == CMceSession::EIdle + * @post State() == CMceSession::EOffering + * @param aTimeout, the session timer value in seconds + * @param aHeaders, SIP headers to be added. Ownership is + * transferred. + * @param aContentType, content type of the body. + * Ownership is transferred. + * @param aContent, content to be added in body. Ownership is + * transferred. + * @param aContentHeaders, content headers to be added. Ownership is + * transferred. + */ + IMPORT_C void EstablishL( + TUint32 aTimeout = 0, + CDesC8Array* aHeaders = 0, + HBufC8* aContentType = 0, + HBufC8* aContent = 0, + CDesC8Array* aContentHeaders = 0 ); + + /** + * Cancels a previously initialized MO session. + * @pre State() == CMceSession::EOffering + */ + IMPORT_C void CancelL(); + + private://methods + + /** + * C++ default constructor. + * @param aManager, reference to session manager. + * @param aProfileId, id of the sip profile used for the session. + */ + CMceOutSession( CMceManager* aManager, TUint32 aProfileId ); + + /** + * second-phase constructor + * @param aRecipient, the recipient + * @param aOriginator, the originator + */ + void ConstructL( const TDesC8& aRecipient, HBufC8* aOriginator ); + + + + }; + +#endif diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/mustester/Stubs/mceclientstub/inc/mcertpobserver.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/mustester/Stubs/mceclientstub/inc/mcertpobserver.h Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,98 @@ +/* +* 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: +* +*/ + + +#ifndef MMCERTPOBSERVER_H +#define MMCERTPOBSERVER_H + +// INCLUDES +#include + +// FORWARD DECLARATIONS +class CMceMediaStream; +class CMceRtpSource; + +// CLASS DECLARATION + +/** +* An interface to be implemented by users of MCE if they wish to receive +* events from CMceRtpSource. +* +* This observer is set using CMceManager::SetRtpObserver function. +* +* @lib mceclient.lib +*/ +class MMceRtpObserver + { + public: + /** + * Callback function to indicate that an RTCP sender report + * has been received. + * @param aSession the session that has changed + * @param aStream the stream that has changed + */ + virtual void SRReceived( + CMceSession& aSession, + CMceMediaStream& aStream) = 0; + + /** + * Callback function to indicate that an RTCP receiver report + * has been received. + * @param aSession the session that has changed + * @param aStream the stream that has changed + */ + virtual void RRReceived( + CMceSession& aSession, + CMceMediaStream& aStream) = 0; + + /** + * Callback function to indicate inactivity timer timeout + * has occurred. Timer is disabled after the timeout. + * @param aStream, the session that has changed. + * @param aSource, the source that the timeout occurred. + */ + virtual void InactivityTimeout( + CMceMediaStream& aStream, + CMceRtpSource& aSource) = 0; + + /** + * Callback function to indicate that spesified CMceRtpSource has + * received RTP from a new synchronization source (SSRC). + * @param aStream the stream that new SSRC was added to + * @param aSource the source that new SSRC was added to + * @param aSsrc added SSRC identifier + */ + virtual void SsrcAdded( + CMceMediaStream& aStream, + CMceRtpSource& aSource, + TUint aSsrc ) = 0; + + /** + * Callback function to indicate that spesified CMceRtpSource has + * received RTP BYE message from a spesified synchronization + * source (SSRC). + * @param aStream the stream that SSRC was removed from + * @param aSource the source that SSRC was removed from + * @param aSsrc removed SSRC identifier + */ + virtual void SsrcRemoved( + CMceMediaStream& aStream, + CMceRtpSource& aSource, + TUint aSsrc ) = 0; + }; + +#endif \ No newline at end of file diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/mustester/Stubs/mceclientstub/inc/mcertpsink.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/mustester/Stubs/mceclientstub/inc/mcertpsink.h Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,154 @@ +/* +* 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: +* +*/ + + +#ifndef CMCERTPSINK_H +#define CMCERTPSINK_H + +// INCLUDES +#include "mcemediasink.h" + +// CONSTANTS +const TMceSinkType KMceRTPSink = 1; + +// CLASS DECLARATION + +/** +* Class representing outgoing RTP stream in MCE. +* +* CMceRtpSink can be used to send media data to network. +* It can be configured not to use RTCP during play in order +* to save bandwith. +* +* CMceRtpSink allows also explicitly sending of RTP RR and SR +* messages. +* +* Enable and Disable operations to it are considered +* to be local, so they are not signalled to remote terminal. +* +* @lib mceclient.lib +*/ +class CMceRtpSink: public CMceMediaSink + { + public: // Constructors and destructor + + /** + * Two-phased constructor. + */ + IMPORT_C static CMceRtpSink* NewL(); + + /** + * Two-phased constructor. + */ + IMPORT_C static CMceRtpSink* NewLC(); + + /** + * Two-phased constructor. + * @param aSuppressRTCP, ETrue if RTCP not sent during play, + * EFalse otherwise + * @param aIdentity, identity of user placed in RTCP, + * ownership not transferred. + */ + IMPORT_C static CMceRtpSink* NewL( TBool aSuppressRTCP, + HBufC8* aIdentity = 0 ); + + /** + * Destructor. + */ + IMPORT_C ~CMceRtpSink(); + + public: // From base class + + /** + * Locally resumes sending of RTP packets. + */ + IMPORT_C void EnableL(); + + /** + * Locally pauses sending of RTP packets. + */ + IMPORT_C void DisableL(); + + public: // Functions + + /** + * Sends RTCP sender report to recipient. + */ + IMPORT_C void SendSRL(); + + /** + * Returns the sequence id of the last packet + * sent to network. The value is updated only + * when sink is disabled. + * @pre IsEnabled() == EFalse + * @return sequence number of last sent packet. + */ + IMPORT_C TUint32 LastPacket() const; + + /** + * Returns the RTP stream source identifier + * used in network (SSRC). + * @pre CMceSession::State() == CMceSession::EEstablished + * @return source identifier used in network (SSRC). + */ + IMPORT_C TUint32 Ssrc() const; + + /** + * Updates settings of rtp sink. + * @pre CMceSession::State() == CMceSession::EIncoming + * @param aSuppressRTCP, ETrue if RTCP not sent during play, + * EFalse otherwise + * @param aIdentity, identity of user placed in RTCP, + * ownership not transferred. + */ + IMPORT_C void UpdateL( TBool aSuppressRTCP, HBufC8* aIdentity = 0 ); + + private: + + /** + * C++ default constructor. + */ + CMceRtpSink(); + + /** + * second-phase constructor + * @param aSuppressRTCP, ETrue if RTCP not sent during play, + * EFalse otherwise + */ + void ConstructL( TBool aSuppressRTCP ); + + public: // stub data + + /** + * suppress RTCP + */ + TBool iSuppressRTCP; + + /** + * SSRC + */ + TUint32 iSSRC; + + /** + * last packet + */ + TUint32 iLastPacket; + + + }; + +#endif diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/mustester/Stubs/mceclientstub/inc/mcertpsource.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/mustester/Stubs/mceclientstub/inc/mcertpsource.h Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,217 @@ +/* +* 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: +* +*/ + + +#ifndef CMCERTPSOURCE_H +#define CMCERTPSOURCE_H + +// INCLUDES +#include +#include + +// CONSTANTS +const TMceSourceType KMceRTPSource = 1; +const TInt KMceJitterBufferLength = 10; +const TInt KMceJitterBufferTreshold = 5; + +//FORWARD DECLARATIONS +class TMceIds; + +// CLASS DECLARATION + +/** +* Class representing incoming RTP stream in MCE. +* +* CMceRtpSource can be used to receive media data from network. +* It can be configured with stream specific values to avoid +* jitter generated by network. It may also be configured to +* recognize separate media bursts instead of just receiving +* continuous flow of data. +* +* Events from this class can be received through class MMceRtpObserver. +* +* Enable and Disable operations to it are considered to be local, +* so they are not signalled to remote terminal. +* +* One CMceRTPSource may contain several RTP streams which are identified with +* synchronization source (SSRC) values. Disabling or enabling CMceRtpSource +* will affect to all SSRCs but streaming from specific SSRC can be also +* controlled with EnableSSRCL and Disable SSRCL methods. These are also +* local operations, thus not signalled to remote terminal. +* +* @lib mceclient.lib +*/ +class CMceRtpSource: public CMceMediaSource + { + + public: // Constructors and destructor + + /** + * Two-phased constructor. + * @param aBufferLength, length in packets of jitter buffer + * @param aBufferTreshold, treshold in packets of jitter buffer + * @param aInactivityTimer, timer (ms) to detect network inactivity. + * If 0, no activity detection, otherwise source is set to support + * talk bursts and report inactivity. + * @param aIdentity, identity of user placed in RTCP, ownership not transferred. + */ + IMPORT_C static CMceRtpSource* NewL( + TUint aBufferLength = KMceJitterBufferLength, + TUint aBufferTreshold = KMceJitterBufferTreshold, + TUint32 aInactivityTimer = 0, + HBufC8* aIdentity = 0 ); + + /** + * Two-phased constructor. + * @param aBufferLength, length in packets of jitter buffer + * @param aBufferTreshold, treshold in packets of jitter buffer + * @param aInactivityTimer, timer (ms) to detect network inactivity. + * If 0, no activity detection, otherwise source is set to support + * talk bursts and report inactivity. + * @param aIdentity, identity of user placed in RTCP, ownership not transferred. + */ + IMPORT_C static CMceRtpSource* NewLC( + TUint aBufferLength = KMceJitterBufferLength, + TUint aBufferTreshold = KMceJitterBufferTreshold, + TUint32 aInactivityTimer = 0, + HBufC8* aIdentity = 0 ); + + /** + * Destructor. + */ + IMPORT_C ~CMceRtpSource(); + + public: // From base class + + /** + * Enables streaming explicitly. + */ + IMPORT_C void EnableL(); + + /** + * Disables streaming explicitly. + */ + IMPORT_C void DisableL(); + + public: // Functions + + /** + * Enables RTP inactivity timer. + * @param aInactivityTimer, timer value (ms) that after inactivity + * of media from network is reported to client. + */ + IMPORT_C void EnableInactivityTimerL( TUint32 aInactivityTimer ); + + /** + * Disables RTP inactivity timer. + */ + IMPORT_C void DisableInactivityTimerL(); + + /** + * Updates settings for incoming session. + * @pre CMceSession::State() == CMceSession::EIncoming + * @param aBufferLength, length in packets of jitter buffer + * @param aBufferTreshold, treshold in packets of jitter buffer + * @param aInactivityTimer, timer (ms) to detect network inactivity. + * If 0, no activity detection, otherwise source is set to support + * talk bursts and report inactivity. + * @param aIdentity, identity of user placed in RTCP, ownership not transferred. + */ + IMPORT_C void UpdateL ( TUint aBufferLength = KMceJitterBufferLength, + TUint aBufferTreshold = KMceJitterBufferTreshold, + TUint32 aInactivityTimer = 0, + HBufC8* aIdentity = 0 ); + + /** + * Sends RTCP receiver report to recipient. + */ + IMPORT_C void SendRRL(); + + /** + * Returns the last RTP stream source identifier + * used in network (SSRC). + * @pre CMceSession::State() == CMceSession::EEstablished + * @return last source identifier used in network (SSRC). + */ + IMPORT_C TUint32 Ssrc() const; + + /** + * Gets an array of RTP synchronization source (SSRC) identifiers. + * Array includes all SSRC values this RtpSource has received RTP from. + * Changes in array are notified using MMceRtpObserver interface. + * @return array of synchronization source identifiers + */ + IMPORT_C const RArray& Ssrcs() const; + + /** + * Enables streaming from specified synchronization source (SSRC). + * @param aSsrc synchronization source to be enabled + */ + IMPORT_C void EnableSsrcL( TUint aSsrc ); + + /** + * Disables streaming from specified synchronization source (SSRC). + * @param aSsrc synchronization source to be disabled + */ + IMPORT_C void DisableSsrcL( TUint aSsrc ); + + /** + * Determines whether specific SSRC is enabled or not. + * @param aSsrc the SSRC identifier + * @return ETrue if specified SSRC is enabled; otherwise EFalse + */ + IMPORT_C TBool IsSsrcEnabledL( TUint aSsrc ); + + private: + + /** + * C++ default constructor. + */ + CMceRtpSource(); + + /** + * second-phase constructor + * @param aBufferLength, length in packets of jitter buffer + * @param aBufferTreshold, treshold in packets of jitter buffer + * @param aInactivityTimer, timer (ms) to detect network inactivity. + * If 0, no activity detection, otherwise source is set to support + * talk burts and report inactivity. + * @param aMediaBurstIndicator, indicator sound to be played before + * every new burst of media, if source in media burst mode. + */ + void ConstructL( TUint aBufferLength, + TUint aBufferTreshold, + TUint32 aInactivityTimer, + HBufC8* iMediaBurstIndicator ); + + + public: // Stub data + + RArray iSsrcs; + + TUint iBufferLength; + TUint iBufferTreshold; + TUint32 iInactivityTimer; + TUint32 iSilenceTimer; + TUint iToneFrequency; + TUint iToneLength; + HBufC8* iMediaBurstIndicator; + + }; + + +#endif diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/mustester/Stubs/mceclientstub/inc/mcesession.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/mustester/Stubs/mceclientstub/inc/mcesession.h Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,370 @@ +/* +* 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: +* +*/ + + +#ifndef CMCESESSION_H +#define CMCESESSION_H + +// INCLUDES +#include +#include + +// FORWARD DECLARATIONS +class CDesC8Array; +class TMceIds; +class CMceMediaStream; +class CMceManager; +class TMceFactory; +class RReadStream; +class RWriteStream; +class CMceItcSender; +class CMceSessionReceiver; +class MMceFcMsgObserver; +class CMceComSession; +class CMceMsgBase; +class TMceEvent; +class CMceInSession; +class MDesC8Array; +class CMceStreamBundle; + + +// CLASS DECLARATION + +/** +* Base class for MCE sessions, inherited by both CMceInSession and CMceOutSession. +* +* CMceSession represents peer-to-peer connection made with remote terminal. +* This connection is also known as dialog and it is set up using SIP INVITE +* method. +* +* The characteristics of the session are defined by user of this class by attaching +* media streams into the session. +* +* After the session has been succesfylly established, it can be later updated and +* must be finally terminated. +* +* If for any reason instance of this class is deleted while in established state, +* session is automatically terminated by MCE server. +* +* @lib mceclient.lib +*/ +class CMceSession : public CBase + { + public: // Session states + + enum TState + { + EIdle, // Idle + EOffering, // Outgoing session, or session update establishment in progress, + EIncoming, // Session received incoming call + EReserving, // UpdateL called to incoming session during session establishment + EAnswering, // Answering an incoming call + EProceeding, // Session media negotiations proceeding + EEstablished, // Session established + ECancelling, // Cancelling outgoing session establishment + ETerminating, // Terminating session + ETerminated, // Session terminated + }; + + public: // Session termination reasons + + enum TReason + { + EDeclined, + EBusy, + ECancelled, + EDisconnected + }; + + public: + + /** + * Destructor. + */ + virtual ~CMceSession(); + + public: // Functions + + /** + * Returns the state of the session. + * @return The current state of the session + */ + IMPORT_C TState State() const; + + /** + * Returns the state of network connection of the session. + * @return ETrue if connection active, EFalse if connection inactive. + */ + IMPORT_C TBool ConnectionActive() const; + + + /** + * Removes media stream from session. + * @pre State() == CMceSession::EIdle || + * State() == CMceSession::EIncoming || + * State() == CMceSession::EEstablished + * @post aMediaStream cannot be used anymore and contents of + * previously returned stream array (CMceSession::Streams()) + * are not anymore valid + * @param aMediaStream media stream to be removed + */ + IMPORT_C void RemoveStreamL( CMceMediaStream& aMediaStream ); + + /** + * Adds media stream into session. + * @pre State() == CMceSession::EIdle || + * State() == CMceSession::EIncoming || + * State() == CMceSession::EEstablished + * @pre aMediaStream != 0 + * @param aMediaStream, media stream to be added. + * ownership is transferred. + */ + virtual void AddStreamL( CMceMediaStream* aMediaStream ); + + /** + * Updates offered session parameters during session + * establishement phase for first answer. + * Updates established session using re-invite. + * In state EIncoming the timeout value must be smaller or equal to + * offered value obtained by SessionTimer(). + * @pre State() == CMceSession::EIncoming || + * State() == CMceSession::EEstablished + * @post State() == CMceSession::EReserving for incoming session || + * State() == CMceSession::EOffering for established session + * @param aTimeout, the session timer value in seconds + * @param aHeaders, SIP headers to be added. Ownership is + * transferred. + * @param aContentType, content type of the body. + * Ownership is transferred. + * @param aContent, content to be added in body. Ownership is + * transferred. + * @param aContentHeaders, content headers to be added. Ownership is + * transferred. + */ + IMPORT_C void UpdateL( + TUint32 aTimeout = 0, + CDesC8Array* aHeaders = 0, + HBufC8* aContentType = 0, + HBufC8* aContent = 0, + CDesC8Array* aContentHeaders = 0 ); + + /** + * Terminates established session. + * @pre State() == CMceSession::EEstablished + * @post State() == CMceSession::ETerminating + * @param aHeaders, SIP headers to be added. Ownership is + * transferred. + * @param aContentType, content type of the body. + * Ownership is transferred. + * @param aContent, content to be added in body. Ownership is + * transferred. + */ + IMPORT_C void TerminateL( CDesC8Array* aHeaders = 0, + HBufC8* aContentType = 0, + HBufC8* aContent = 0 ); + + /** + * Returns the streams belonging to the session. + * @return streams of the session. + */ + IMPORT_C const RPointerArray& Streams() const; + + /** + * Returns the recipient of the session. + * @pre State() == CMceSession::EIncoming || + * State() == CMceSession::EEstablished + * @return The recipients address. + */ + IMPORT_C const TDesC8& Recipient() const; + + /** + * Returns the originator of the session. + * @pre State() == CMceSession::EIdle || + * State() == CMceSession::EIncoming || + * State() == CMceSession::EEstablished + * @return the originators address. + */ + IMPORT_C const TDesC8& Originator() const; + + /** + * Configures session by updating SDP session lines. + * In order to get complete update, whole session must be + * updated causing sending of re-invite. + * @pre State() == CMceSession::EIdle || + * State() == CMceSession::EIncoming || + * State() == CMceSession::EEstablished + * @pre aSessionSDPLines != 0 + * @param aSessionSDPLines, application specific SDP lines for session. + * Ownership is transferred. + */ + IMPORT_C void SetSessionSDPLinesL( CDesC8Array* aSessionSDPLines ); + + /** + * Gets SDP lines of the session. + * @return array of session SDP lines, owneship is transferred. + */ + IMPORT_C MDesC8Array* SessionSDPLinesL(); + + /** + * Returns the session timer value of the session. + * @return the session timer value. + */ + IMPORT_C TUint32 SessionTimer() const; + + /** + * Adds grouped media streams to the session. Changes SDP + * of the session. In order to get complete update, whole + * session must be updated causing sending of re-invite. + * @pre State() == CMceSession::EIdle || + * State() == CMceSession::EIncoming || + * State() == CMceSession::EEstablished + * @pre aBundle != 0 + * @param aBundle group of media streams; + * ownership of the bundle is transferred + */ + IMPORT_C void AddBundleL( CMceStreamBundle* aBundle ); + + /** + * Removes grouped media stream from session. Changes SDP + * of the session. In order to get complete update, whole + * session must be updated causing sending of re-invite. + * @pre State() == CMceSession::EIdle || + * State() == CMceSession::EIncoming || + * State() == CMceSession::EEstablished + * @post aBundle cannot be used anymore and contents of + * previously returned bundle array (CMceSession::Bundles()) + * are not anymore valid + * @param aBundle bundle to be removed + */ + IMPORT_C void RemoveBundleL( CMceStreamBundle& aBundle ); + + /** + * Gets the grouped media streams of the session. + * @return bundles of the session + */ + IMPORT_C const RPointerArray< CMceStreamBundle >& Bundles() const; + + /** + * Gets session modifier of type TUint. + * @param aModifier is a modifier to be retrieved + * @param aValue on return will contain modifier value + * @leave KErrNotFound if modifier is not found + */ + IMPORT_C void GetModifierL( TMceSessionModifier aModifier, + TUint& aValue ) const; + + /** + * Sets session modifier of type TUint. + * @param aModifier is a modifier to be set + * @param aValue is a new value of a modifier + * @leave KErrNotFound if modifier is not found + */ + IMPORT_C void SetModifierL( TMceSessionModifier aModifier, + TUint aValue ); + + /** + * Returns the identifier of profile used by the sesison. + * @return TUint32 Identifier of the used profile. 0, + * if session is setup without profile. + */ + IMPORT_C TUint32 Profile() const; + + + public: + + CMceManager& Manager() const; + + // Restarts the simulator + void RestartSimulator(); + + protected: + + /** + * C++ default constructor. + * @param aManager, reference to session manager. + * @param aProfileId, id of the sip profile used for the session. + */ + CMceSession( CMceManager* aManager, TUint32 aProfileId ); + + /** + * second-phase constructor + */ + void ConstructL(); + + /** + * Initializes + */ + void InitializeL(); + + + protected: // Not owned data + + /** + * profile id + */ + TUint32 iProfileId; + + private: // Owned data + + /** + * media streams + */ + RPointerArray iMediaStreams; + + /** + * bundles + */ + RPointerArray iBundles; + + //for testing + + //friend class CMceManager; + + public: // stub data + + CMceManager* iManager; + + CMceSession::TState iState; + + TBool iIsConnectionActive; + + HBufC8* iOriginator; + + HBufC8* iRecipient; + + TUint32 iTimeout; + + CDesC8Array* iSessionSDPLines; + + CDesC8Array* iHeaders; + + TBool iForceInternetSignaling; + + TUint i100RelUsage; + + // If this code is != KErrNone, next operation that can fail will fail + // (leave or return a value) with this code. Variable is reseted before + // failing. + // Obs! Check that wanted failing is really implemented in this stub + TInt iFailWithCode; + + TBuf8<200> iReasonPhrase; + + TInt iReasonCode; + }; + +#endif diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/mustester/Stubs/mceclientstub/inc/mcesessionobserver.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/mustester/Stubs/mceclientstub/inc/mcesessionobserver.h Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,82 @@ +/* +* 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: +* +*/ + + +#ifndef MMCESESSIONOBSERVER_H +#define MMCESESSIONOBSERVER_H + +// INCLUDES +#include + +// FORWARD DECLARATIONS +class CMceSession; +class TMceTransactionDataContainer; + +// CLASS DECLARATION + +/** +* An interface to be implemented by users of MCE if they wish to use +* sessions. +* +* This observer is set using CMceManager::SetSessionObserver function. +* +* @lib mceclient.lib +*/ +class MMceSessionObserver + { + public: // Session control callbacks + + /** + * The state of the session has changed. + * @param aSession, the session that has changed. + * @param aContainer, if present, holds details of + * transaction causing state change. + */ + virtual void SessionStateChanged( + CMceSession& aSession, + TMceTransactionDataContainer* aContainer ) = 0; + + /** + * The state of the connection used by the session has changed. + * @param aSession, the session that has changed. + * @param aActive, ETrue if connection active, EFalse if connection inactive. + */ + virtual void SessionConnectionStateChanged( + CMceSession& aSession, + TBool aActive ) = 0; + + /** + * An error has occurred concerning a specific session. + * Note, that each error causes the session state to be ETerminated. + * @param aSession, The session raising the error. + * @param aError, Error code + */ + virtual void Failed( CMceSession& aSession, TInt aError ) = 0; + + /** + * An session update has been failed concerning a specific session. + * Note, that each error causes the session state to be ETerminated. + * @param aSession, The session raising the error. + * @param aContainer, if present, holds details of + * transaction causing update. + */ + virtual void UpdateFailed( + CMceSession& aSession, + TMceTransactionDataContainer* aContainer ) = 0; + }; + +#endif diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/mustester/Stubs/mceclientstub/inc/mcespeakersink.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/mustester/Stubs/mceclientstub/inc/mcespeakersink.h Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,130 @@ +/* +* 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: +* +*/ + + +#ifndef CMCESPEAKERSINK_H +#define CMCESPEAKERSINK_H + +// INCLUDES +#include +#include + +// DATA TYPES +const TMceSinkType KMceSpeakerSink = 2; + +// CLASS DECLARATION + +const TInt KMceAudioRoutePrivate = 3; +const TInt KMceAudioRoutePublic = 4; + +/** +* Class representing speaker in MCE. +* +* CMceSpeakerSink can be used to play out audio. +* +* Enable (un-mute) and Disable (mute) operations to it are considered +* to be local, so they are not signalled to remote terminal. +* +* @lib mceclient.lib +*/ +class CMceSpeakerSink: public CMceMediaSink + { + public: // Constructors and destructor + + /** + * Two-phased constructor. + */ + IMPORT_C static CMceSpeakerSink* NewL(); + + /** + * Two-phased constructor. + */ + IMPORT_C static CMceSpeakerSink* NewLC(); + + /** + * Destructor. + */ + IMPORT_C ~CMceSpeakerSink(); + + public: // Functions + + /** + * Enables streaming explicitly. + */ + IMPORT_C void EnableL(); + + /** + * Disables streaming explicitly. + */ + IMPORT_C void DisableL(); + + /** + * Sets volume + * @param aVolume, + */ + IMPORT_C void SetVolumeL( TInt aVolume ); + + /** + * Gets current volume + * @return value of current volume, + */ + IMPORT_C TInt VolumeL() const; + + /** + * Gets maximum volume + * @return value of mamimum volume, + */ + IMPORT_C TInt MaxVolumeL() const; + + /** + * Sets audio routing + * @param aRoute Required audio route, like KMceAudioRoutePublic. + */ + IMPORT_C void SetRoutingL( TInt aRoute ); + + /** + * Gets current audio routing. + * @return TInt Current audio routing. + */ + IMPORT_C TInt RoutingL() const; + + private: + + /** + * C++ default constructor. + */ + CMceSpeakerSink(); + + /** + * second-phase constructor + */ + void ConstructL(); + + + + + public: // stub data + + TInt iVolume; + + TInt iMaxVolume; + + TInt iAudioRouting; + + }; + +#endif diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/mustester/Stubs/mceclientstub/inc/mcestreambundle.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/mustester/Stubs/mceclientstub/inc/mcestreambundle.h Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,150 @@ +/* +* Copyright (c) 2006 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: +* +*/ + + +#ifndef MCESTREAMBUNDLE_H +#define MCESTREAMBUNDLE_H + +// INCLUDES +#include +#include + +// CONSTANTS + +// FORWARD DECLARATIONS +class CMceMediaStream; +class CMceSession; +class CMceMediaSink; +class MMceEndPointProxy; + + +/** +* Class for handling grouping of Mce streams (i.e. grouping of media lines). +* +* Can be used for example to synchronize audio and video streams. +* +* If streams are added to the bundle or removed from it after the bundle +* has been added to the session, the session has to be updated with +* CMceSEssion::UpdateL() function in order to complete the changes. +* +* @lib mceclient.lib +*/ +class CMceStreamBundle: public CBase + { + public: // Bundle types + + enum TMceStreamBundleType + { + ELS, + EFID + }; + + public: // Constructors and destructor + + /** + * Two-phased constructor. + */ + IMPORT_C static CMceStreamBundle* NewL( TMceStreamBundleType aType ); + + /** + * Two-phased constructor. + */ + IMPORT_C static CMceStreamBundle* NewLC( TMceStreamBundleType aType ); + + /** + * Destructor. + */ + IMPORT_C ~CMceStreamBundle(); + + public: + + /** + * Type of the bundle + * @param aParent the parent + */ + IMPORT_C TMceStreamBundleType Type() const; + + /** + * Adds stream to the bundle. + * @param aStream, stream to be added + */ + IMPORT_C void AddStreamL( CMceMediaStream& aStream ); + + /** + * Removes stream from the bundle. + * @param aStream, stream to be removed + */ + IMPORT_C void RemoveStreamL( CMceMediaStream& aStream ); + + /** + * Returns the streams belonging to the bundle. + * @return streams of the bundle. + */ + IMPORT_C const RPointerArray< CMceMediaStream >& Streams(); + + public: + + /** + * Initializes + * @param aParent the parent + */ + void InitializeL( CMceSession& aParent ); + + + private: //methods + + /** + * C++ default constructor. + */ + CMceStreamBundle(); + + /** + * second-phase constructor + */ + void ConstructL( TMceStreamBundleType aType ); + + void AddedSinkL( CMceMediaStream& aStream, + CMceMediaSink*& aCurrentSink, + MMceEndPointProxy*& aProxy ); + + + protected: // NOT owned data + + /** + * session + */ + CMceSession* iSession; + + public: // Stub data + + /** + * Bundled streams, streams are not owned + */ + RPointerArray< CMceMediaStream > iStreams; + + RPointerArray< CMceMediaStream > iTempStreams; + + /** + * type + */ + CMceStreamBundle::TMceStreamBundleType iBundleType; + + + + }; + +#endif diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/mustester/Stubs/mceclientstub/inc/mcestreamobserver.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/mustester/Stubs/mceclientstub/inc/mcestreamobserver.h Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,71 @@ +/* +* 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: +* +*/ + + +#ifndef MMCESTREAMOBSERVER_H +#define MMCESTREAMOBSERVER_H + +// INCLUDES +#include + +// FORWARD DECLARATIONS +class CMceMediaStream; +class CMceMediaSink; +class CMceMediaSource; + +// CLASS DECLARATION + +/** +* An interface to be implemented by users of MCE if they wish to receive +* media state events. +* +* This observer is set using CMceManager::SetMediaObserver function. +* +* @lib mceclient.lib +*/ +class MMceStreamObserver + { + public: + + /** + * The state of the stream has changed. + * @param aStream, the stream that has changed. + */ + virtual void StreamStateChanged( + CMceMediaStream& aStream) = 0; + + /** + * The state of the sink has changed. + * @param aStream, the stream that uses the sink. + * @param aSink, the sink that has changed. + */ + virtual void StreamStateChanged( + CMceMediaStream& aStream, + CMceMediaSink& aSink) = 0; + + /** + * The state of the source has changed. + * @param aStream, the stream that uses the source. + * @param aSource, the source that has changed. + */ + virtual void StreamStateChanged( + CMceMediaStream& aStream, + CMceMediaSource& aSource) = 0; + + }; + +#endif diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/mustester/Stubs/mceclientstub/inc/mcetransactiondatacontainer.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/mustester/Stubs/mceclientstub/inc/mcetransactiondatacontainer.h Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,120 @@ +/* +* 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: +* +*/ + + +#ifndef TMceTRANSACTIONDATACONTAINER_H +#define TMceTRANSACTIONDATACONTAINER_H + +// INCLUDES +#include +#include +//#include + +// CLASS DECLARATION + +/** +* Container class to hold detailed data of a transaction. +* +* It is assumed, that user has only one instance of this class. +* The same instance is passed between MCE and user, but the data +* inside of this container is just updated for each event. +* +* The data inside the container is valid only during the execution +* of the callback function. After this the remaining data in container +* is deleted. +* +* @lib mceclient.lib +*/ +class TMceTransactionDataContainer + { + public: + + /** + * Default constructor + */ + IMPORT_C TMceTransactionDataContainer(); + + /** + * Returns status code + * @returns status code of transaction, if any. + */ + IMPORT_C TInt GetStatusCode(); + + /** + * Returns reason phrase, ownership is transferred. + * @returns reason phrase of transaction, if any. + */ + IMPORT_C HBufC8* GetReasonPhrase(); + + /** + * Returns headers, ownership is transferred. + * @returns headers of transaction, if any. + */ + IMPORT_C CDesC8Array* GetHeaders(); + + /** + * Returns content type, ownership is transferred. + * @returns content type of transaction, if any. + */ + IMPORT_C HBufC8* GetContentType(); + + /** + * Returns content headers, ownership is transferred. + * @returns headers of content, if any. + */ + IMPORT_C CDesC8Array* GetContentHeaders(); + + /** + * Returns content, ownership is transferred. + * @returns content of transaction, if any. + */ + IMPORT_C HBufC8* GetContent(); + + public: // IMPORTED FOR STUBBING PURPOSES, NORMALLY NOT IMPORTED + + IMPORT_C void SetStatusCode( TInt aStatusCode ); + + IMPORT_C void SetReasonPhrase( HBufC8* aReasonPhrase ); + + IMPORT_C void SetHeaders( CDesC8Array* aHeaders ); + + IMPORT_C void SetContentType( HBufC8* aContentType ); + + IMPORT_C void SetContent( HBufC8* aContent ); + + IMPORT_C void SetContentHeaders( CDesC8Array* aHeaders ); + + IMPORT_C void Clear(); + + private: + + TUint32 iStatusCode; + + HBufC8* iReasonPhrase; + + CDesC8Array* iHeaders; + + HBufC8* iContentType; + + CDesC8Array* iContentHeaders; + + HBufC8* iContent; + + + }; + +#endif diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/mustester/Stubs/mceclientstub/inc/mcevideocodec.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/mustester/Stubs/mceclientstub/inc/mcevideocodec.h Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,190 @@ +/* +* 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: +* +*/ + + +#ifndef MCEVIDEOCODEC_H +#define MCEVIDEOCODEC_H + +// INCLUDES +#include +#include "mcecodec.h" +#include "mcedefs.h" + +// FORWARD DECLARATIONS +class CMceComVideoCodec; +class TMceVideoCodecFactory; +class TCCMRVideoCodingOptions; + +// CONSTANTS +const TMceCodecType KMceVideoCodec = 2; + + +// CLASS DECLARATION + +/** +* Base class for video codecs. +* +* It defines setters and getters for generic video codec attributes. +* These attributes are used in single video stream and they +* are negotiated with remote terminal. +* +* @lib mceclient.lib +*/ +class CMceVideoCodec : public CMceCodec + { + public: // Constructors and destructor + + /** + * Destructor. + */ + virtual ~CMceVideoCodec(); + + + public: // New functions + + /** + * Clones the codec. + * @return cloned codec; ownership is transferred + */ + virtual CMceVideoCodec* CloneL() const = 0; + + /** + * Sets maximum bitrate of the codec. + * @param aMaxBitrate value of maximum bitrate used for encoding + * @leave KErrNotSupported if codec doesn't support frame sizes issued + */ + virtual void SetMaxBitrateL( TUint aMaxBitrate ) = 0; + + /** + * Sets resolutions allowed with the codec. + * @param aResolutions bitfield of allowed resolutions + * @leave KErrNotSupported if codec doesn't support resolutions issued + */ + virtual void SetAllowedResolutionsL( TUint aResolutions ) = 0; + + /** + * Sets resolution of the video. + * @param aResolution resolution of the video in pixels + * @leave KErrNotSupported if codec doesn't support resolution issued + */ + virtual void SetResolutionL( TSize aResolution ) = 0; + + /** + * Sets frame rates allowed with the codec. + * @param aFrameRates allowed frame rate values as a bitfield + * @leave KErrNotSupported if codec doesn't support frame rates issued + */ + virtual void SetAllowedFrameRatesL( TUint aFrameRates ) = 0; + + /** + * Sets frame rate used with the codec for encoding. + * @param aFrameRate frame rate for encoding + * @leave KErrNotSupported if codec doesn't support frame rate value + * issued + */ + virtual void SetFrameRateL( TReal aFrameRate ) = 0; + + /** + * Sets preferred encoding device for uplink stream and preferred decoding + * device for downlink stream. + * @param aEncodingDecodingDevice + * @leave KErrNotSupported if setting preferred device is not possible + */ + virtual void SetPreferredEncodingDecodingDeviceL( + TUid aEncodingDecodingDevice ) = 0; + + /** + * Set config key (sprop-parameter-sets) + * @param aConfigKey, config key as Base64 encoded + * @leave KErrNotSupported if setting config key is not possible + */ + virtual void SetConfigKeyL( const TDesC8& aConfigKey ) = 0; + + + public: // Getters + + /** + * Gets maximum bit rate currently allowed + * @return maximum bit rate + */ + IMPORT_C TUint MaxBitRate() const; + + /** + * Gets currently allowed resolutions as a bitfield + * @return currently allowed resolutions as a bitfield + */ + IMPORT_C TUint AllowedResolutions() const; + + /** + * Gets current resolution + * @return current resolution + */ + IMPORT_C TSize Resolution() const; + + /** + * Gets frame rates currently allowed for encoding and decoding. + * @return allowed frame rate values as a bitfield + */ + IMPORT_C TUint AllowedFrameRates() const; + + /** + * Gets frame rate currently used for encoding and decoding. + * @return current frame rate value + */ + IMPORT_C TReal FrameRate() const; + + /** + * Get config key (sprop-parameter-sets) + * @return config key as Base64 encoded or NULL, ownership + * is transferred. + */ + IMPORT_C HBufC8* ConfigKeyL() const; + + + protected: // New functions + + /** + * C++ default constructor. + */ + CMceVideoCodec(); + + + + + private: // Reserved for future use + + TAny* iReserved; + + public: // stub data + + TReal iFrameRate; + TUint iMaxBitRate; + TUint iAllowedResolutions; + TInt iResolutionWidth; + TInt iResolutionHeight; + TUint iAllowedFrameRates; + TUint iClockRate; + + HBufC8* iConfigKey; + TUid iEncodingDecodingDevice; + + }; + + +#endif + +// End of File diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/mustester/Stubs/mceclientstub/inc/mcevideostream.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/mustester/Stubs/mceclientstub/inc/mcevideostream.h Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,176 @@ +/* +* 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: +* +*/ + + +#ifndef MCEVIDEOSTREAM_H +#define MCEVIDEOSTREAM_H + +// INCLUDES +#include +#include "mcemediastream.h" + +// CONSTANTS +const TMceMediaType KMceVideo = 2; + +// FORWARD DECLARATIONS +class CMceVideoCodec; + +// CLASS DECLARATION + +/** +* Class for representing unidirectional video stream. +* +* It defines the used video codecs for the stream. +* In order to be complete structure, at least one codec is required. +* +* @lib mceclient.lib +*/ +class CMceVideoStream : public CMceMediaStream + { + public: // Constructors and destructor + + /** + * Two-phased constructor. + */ + IMPORT_C static CMceVideoStream* NewL(); + + /** + * Two-phased constructor. + */ + IMPORT_C static CMceVideoStream* NewLC(); + + /** + * Destructor. + */ + IMPORT_C ~CMceVideoStream(); + + public: // Functions + + /** + * Returns the codecs available to the session. + * For CMceOutSession, array contains all codecs supported by + * terminal in default. For CMceInSession, array contains codecs + * that were offered by remote terminal, and supported by local terminal. + * Codecs are in preference order in the array. + * Codec in the first element of the array has highest preference. + * Adding, removing or replacing a codec or changing the preference + * of a codec causes the returned array to be in invalid state. + * @return codecs available for the session + */ + IMPORT_C const RPointerArray& Codecs(); + + /** + * Adds codec to the stream. The codec contains preference value + * which will define its preference when added to the stream. + * Preference of codecs with the same preference value is determined + * by order they were added to the stream. In case of bound streams, + * codec is also automatically added to the opposite direction stream. + * After adding a codec an array of codecs received with a call + * to Codecs() is not valid. + * @param aCodec codec added to the stream; ownership is transferred + */ + IMPORT_C void AddCodecL( CMceVideoCodec* aCodec ); + + /** + * Removes codec from the stream. In case of bound streams, codec is + * also automatically removed from the opposite direction stream. + * After removing a codec an array of codecs previously received with + * a call to Codecs() is not valid. + * @param aCodec codec removed from stream + */ + IMPORT_C void RemoveCodecL( CMceVideoCodec& aCodec ); + + /** + * Replaces codecs of the stream. Preference values of codecs will define + * the preference order. In case of bound streams, codecs are + * also automatically added to the opposite direction stream. + * After replacing codecs an array of codecs received with a call + * to Codecs() is not valid. + * @param aCodecs array of codecs which will replace existing codecs; + * ownership is transferred + */ + IMPORT_C void ReplaceCodecsL( RPointerArray* aCodecs ); + + /** + * Gets supported video codecs of the current stream configuration. + * Supported codecs for this video stream is affected by attached + * sinks and sources. + * @return supported video codecs of the current stream configuration + */ + IMPORT_C const RPointerArray& + SupportedVideoCodecs() const; + + + public: // From CMceMediaStream + + /** + * Initializes the stream. + * @param aParent the parent + */ + void InitializeL( CMceSession& aParent ); + + /** + * Initializes the stream. + * @param aManager the manager; ownership is not transferred + */ + void InitializeL( CMceManager* aManager ); + + + protected: // From CMceMediaStream + + /** + * Determine whether current combination of source and sinks + * is allowed for spesific stream type. + * @return ETrue is combination is allowed; otherwise EFalse + */ + virtual TBool IsAllowedCombination(); + + private: + + /** + * C++ default constructor. + */ + CMceVideoStream(); + + /** + * Second-phase constructor. + */ + void ConstructL(); + + + private: // Owned data + + /** + * Codecs. + */ + RPointerArray iCodecs; + + /** + * Supported video codecs. + */ + RPointerArray iSupportedVideoCodecs; + + private: // Reserved for future use + + TAny* iReserved; + + + public: // Stub data + + }; + +#endif diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/mustester/Stubs/mceclientstub/inc/mussessionsimulator.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/mustester/Stubs/mceclientstub/inc/mussessionsimulator.h Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,77 @@ +/* +* Copyright (c) 2005-2006 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: This interface is used by +* clients to get and availability setting for Video Charging +* +*/ + + +#ifndef MUSSESSIONSIMULATOR_H_ +#define MUSSESSIONSIMULATOR_H_ + +#include +#include + +class MMceSessionObserver; + +class MTimerNotify + { + public: + virtual void TimerExpired(TAny* aTimer,TInt aError) = 0; + }; + + class CMusTestTimer: public CActive + { + public: + static CMusTestTimer* NewL(const TInt aPriority,MTimerNotify& aNotify); + ~CMusTestTimer(); + public: + void At(const TTime& aTime); + void After(TTimeIntervalMicroSeconds32 aInterval); + void Inactivity(TTimeIntervalSeconds aSeconds); + protected: + void RunL(); + void DoCancel(); + private: + CMusTestTimer(const TInt aPriority,MTimerNotify& aNotify); + void ConstructL(void); + private: + RTimer iTimer; + MTimerNotify& iNotify; + }; + +class CMusTestSessionSimulator : public MTimerNotify + { + +public: + static CMusTestSessionSimulator* NewL( CMceManager& aObserver ); + CMusTestSessionSimulator( CMceManager& aObserver ); + ~CMusTestSessionSimulator(); + void StartL(); + void Stop(); + TBool IsRunning(); +private: + void ConstructL(); + void StateChangeL(); + void TimerExpired(TAny* aTimer,TInt aError); + void SimulateReceiveSession(); +private: + CMceManager& iManager; + +private : + CMusTestTimer* iTimer; + TBool ibIncoming; + }; + +#endif /* MUSSESSIONSIMULATOR_H_ */ diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/mustester/Stubs/mceclientstub/inc/mustestdrawer.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/mustester/Stubs/mceclientstub/inc/mustestdrawer.h Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,39 @@ +/* +* Copyright (c) 2003 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: The observer class for monitoring SIP profiles. +* +*/ + + +#ifndef MMUSTESTDRAWER_H +#define MMUSTESTDRAWER_H + +#include +#include + +class CMusTestDrawer : public CBase,MDirectScreenAccess + { +public: + CMusTestDrawer* NewL(); + CMusTestDrawer* NewLC(); + ~CMusTestDrawer(); + void DrawL( const TRect& aRect); + virtual void Restart(RDirectScreenAccess::TTerminationReasons aReason); +private: + CMusTestDrawer(); + void ConstructL(); + + }; + +#endif // MMUSTESTDRAWER_H diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/mustester/Stubs/mceclientstub/src/mccscreen.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/mustester/Stubs/mceclientstub/src/mccscreen.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,402 @@ +/* +* Copyright (c) 2006 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: +* +*/ + + + + +#include +#include +#include + +#include "MccScreen.h" +#include "muslogger.h" + +// EXTERNAL DATA STRUCTURES + +// EXTERNAL FUNCTION PROTOTYPES + +// CONSTANTS + +_LIT(KMccWindowGroupName,"32MccVideoWindow"); + +// MACROS + +// LOCAL CONSTANTS AND MACROS + +// MODULE DATA STRUCTURES + +// LOCAL FUNCTION PROTOTYPES + +// FORWARD DECLARATIONS + +// ============================= LOCAL FUNCTIONS =============================== + + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CMccScreen::CMccScreen +// ----------------------------------------------------------------------------- +// +CMccScreen* CMccScreen::NewL( + TPoint aPos, + TSize aArea, + TInt aIndex, + TInt aWindowOrdinalPosition, + TInt aWindowOrdinalPriority, + TSize aViewFinderImageSize ) + { + CMccScreen* self = new ( ELeave ) CMccScreen( aPos, + aArea, + aIndex, + aWindowOrdinalPosition, + aWindowOrdinalPriority ); + CleanupStack::PushL( self ); + self->ConstructL( aViewFinderImageSize ); + CleanupStack::Pop( self ); + return self; + } + +// ----------------------------------------------------------------------------- +// CMccScreen::CMccScreen +// ----------------------------------------------------------------------------- +// +CMccScreen::CMccScreen( + TPoint aPos, + TSize aArea, + TInt aIndex, + TInt aWindowOrdinalPosition, + TInt aWindowOrdinalPriority ) : + iDeviceIndex( aIndex ), + iPosition( aPos ), + iArea( aArea ), + iWindowOrdinalPosition( aWindowOrdinalPosition ), + iWindowOrdinalPriority( aWindowOrdinalPriority ), + iAborted( ETrue ) + { + } + +// ----------------------------------------------------------------------------- +// CMccScreen::CMccScreen +// ----------------------------------------------------------------------------- +// +CMccScreen::~CMccScreen() + { + MUS_LOG( "CMccScreen::~CMccScreen" ) + + DetachFrame(); // Must do bitmap detach before releasing window resources + delete iDirectScreenAccess; + delete iDev; + delete iRw; + delete iRwGroup; + iRwSession.Close(); + + MUS_LOG( "CMccScreen::~CMccScreen, exit" ) + } + +// ----------------------------------------------------------------------------- +// CMccScreen::CMccScreen +// ----------------------------------------------------------------------------- +// +void CMccScreen::ConstructL( TSize aViewFinderImageSize ) + { + MUS_LOG( "CMccScreen::ConstructL" ) + User::LeaveIfError( iRwSession.Connect() ); + + // Create window group + TInt groupId = iRwSession.GetFocusWindowGroup(); + iRwGroup = new (ELeave) RWindowGroup( iRwSession ) ; + //TInt handle = iRwSession.GetWindowGroupHandle( groupId ); + + MUS_LOG1( "CMccScreen::ConstructL, window ordinal pos", iWindowOrdinalPosition ) + MUS_LOG1( "CMccScreen::ConstructL, window ordinal priority", iWindowOrdinalPriority ) + + iRwGroup->Construct( groupId, EFalse ); + iRwGroup->SetName( KMccWindowGroupName ); + + iRwGroup->SetOrdinalPosition( iWindowOrdinalPosition, iWindowOrdinalPriority ); + + // Create screen device + iDev = new (ELeave) CWsScreenDevice( iRwSession ); + iDev->Construct( iDeviceIndex ); + + TInt currMode = iDev->CurrentScreenMode(); + MUS_LOG1( "CMccScreen::ConstructL, screen device mode = %d", currMode ) + + TPixelsTwipsAndRotation sizeAndRotation; + iDev->GetScreenModeSizeAndRotation( currMode, sizeAndRotation ); + MUS_LOG2( "CMccScreen::ConstructL, screen device size %d %d", + sizeAndRotation.iPixelSize.iWidth, + sizeAndRotation.iPixelSize.iHeight ) + + MUS_LOG1( "CMccScreen::ConstructL, screen device orientation %d", + sizeAndRotation.iRotation ) + + // Create window + iRw = new (ELeave) RWindow( iRwSession ); + + iRw->Construct( *iRwGroup, (TUint32) this + 2 ); + + MUS_LOG2( "CMccScreen::ConstructL, window pos %d %d", iPosition.iX, iPosition.iY ) + MUS_LOG2( "CMccScreen::ConstructL, window size %d %d", iArea.iWidth, iArea.iHeight ) + + iRw->SetPosition( iPosition ); + iRw->SetBackgroundColor( KRgbBlack ); + iRw->SetSize( iArea ); + iRw->SetOrdinalPosition( iWindowOrdinalPosition ); + iRw->Activate(); + iRwSession.Flush(); + + // Create direct screen access + iDirectScreenAccess = CDirectScreenAccess::NewL( iRwSession, *iDev, *iRw, *this ); + + UpdateViewFinderArea( aViewFinderImageSize ); + + MUS_LOG2( "CMccScreen::ConstructL, viewfinder pos %d %d", + iViewFinderImageRect.iTl.iX, iViewFinderImageRect.iTl.iY ) + MUS_LOG2( "CMccScreen::ConstructL, viewfinder size %d %d", + iViewFinderImageRect.Width(), iViewFinderImageRect.Height() ) + + MUS_LOG( "CMccScreen::ConstructL, exit" ) + } + +// ----------------------------------------------------------------------------- +// CMccScreen::CMccScreen +// ----------------------------------------------------------------------------- +// +void CMccScreen::StartL() + { + MUS_LOG( "CMccScreen::StartL" ) + + iAborted = EFalse; + + iDirectScreenAccess->StartL(); + iGc = iDirectScreenAccess->Gc(); + iFbsDev = iDirectScreenAccess->ScreenDevice(); + iRegion = iDirectScreenAccess->DrawingRegion(); + +#ifdef __MCC_CONTROLLER + if ( iRegion && !iRegion->IsEmpty() ) + { + for ( TInt i = 0; i < iRegion->Count(); i++ ) + { + const TRect& regionRect = (*iRegion)[ i ]; + MUS_LOG_INT2( "CMccScreen::StartL, rect tl", regionRect.iTl.iX, regionRect.iTl.iY ) + MUS_LOG_INT2( "CMccScreen::StartL, rect br", regionRect.iBr.iX, regionRect.iBr.iY ) + } + } +#endif + + iGc->SetClippingRegion( iRegion ); + + // Fill with black areas which are not covered by viewfinder image. + // If viewfinder image has not been yet received and drawn, fill whole area. + // + iGc->SetBrushColor( KRgbBlack ); + iGc->SetBrushStyle( CGraphicsContext::ESolidBrush ); + + if ( !iFirstImageDrawn ) + { + // Whole area + TPoint pointTl( 0, 0 ); + TRect rect( pointTl, iArea ); + iGc->DrawRect( rect ); + } + else + { + // Upper area + TPoint pointTl( 0, 0 ); + TPoint pointBr( iArea.iWidth, iViewFinderImageRect.iTl.iY ); + TRect rect( pointTl, pointBr ); + iGc->DrawRect( rect ); + + // Lower area + pointTl.SetXY( 0, iViewFinderImageRect.iBr.iY ); + pointBr.SetXY( iArea.iWidth, iArea.iHeight ); + rect.SetRect( pointTl, pointBr ); + iGc->DrawRect( rect ); + + // Left area + pointTl.SetXY( 0, iViewFinderImageRect.iTl.iY ); + pointBr.SetXY( iViewFinderImageRect.iTl.iX, iViewFinderImageRect.iBr.iY ); + rect.SetRect( pointTl, pointBr ); + iGc->DrawRect( rect ); + + // Right area + pointTl.SetXY( iViewFinderImageRect.iBr.iX, iViewFinderImageRect.iTl.iY ); + pointBr.SetXY( iArea.iWidth, iViewFinderImageRect.iBr.iY ); + rect.SetRect( pointTl, pointBr ); + iGc->DrawRect( rect ); + } + + if ( iAttachedFrame ) + { + MUS_LOG( "CMccScreen::StartL, draw attached frame" ) + + TSize viewFinderImageSize = iAttachedFrame->SizeInPixels(); + + TPoint corner = UpdateViewFinderArea( viewFinderImageSize ); + + iGc->BitBlt( corner, iAttachedFrame ); + } + + DoScreenDeviceUpdate(); + + iGc->SetBrushStyle( CGraphicsContext::ENullBrush ); + + MUS_LOG( "CMccScreen::StartL, exit" ) + } + +// ----------------------------------------------------------------------------- +// CMccScreen::CMccScreen +// ----------------------------------------------------------------------------- +// +void CMccScreen::Stop() + { + MUS_LOG( "CMccScreen::Stop" ) + iDirectScreenAccess->Cancel(); + MUS_LOG( "CMccScreen::Stop, exit" ) + } + +// ----------------------------------------------------------------------------- +// CMccScreen::CMccScreen +// ----------------------------------------------------------------------------- +// +void CMccScreen::Restart( RDirectScreenAccess::TTerminationReasons /*aReason*/ ) + { + MUS_LOG( "CMccScreen::Restart" ) + + TRAP_IGNORE( StartL() ); + } + +// ----------------------------------------------------------------------------- +// CMccScreen::CMccScreen +// ----------------------------------------------------------------------------- +// +void CMccScreen::AbortNow( RDirectScreenAccess::TTerminationReasons /*aReason*/ ) + { + MUS_LOG( "CMccScreen::AbortNow" ) + iDirectScreenAccess->Cancel(); + + iAborted = ETrue; + } + +// ----------------------------------------------------------------------------- +// CMccScreen::CMccScreen +// ----------------------------------------------------------------------------- +// +void CMccScreen::Draw( CFbsBitmap& aFrame ) + { + // When frame draw is requested, attached frame is not anymore drawn + DetachFrame(); + + DoDraw( aFrame ); + } + +// ----------------------------------------------------------------------------- +// CMccScreen::AttachFrameL +// ----------------------------------------------------------------------------- +// +void CMccScreen::AttachFrameL( CFbsBitmap* aFrame ) + { + MUS_LOG( "CMccScreen::AttachFrameL" ) + + __ASSERT_ALWAYS( aFrame, User::Leave( KErrArgument ) ); + + DetachFrame(); + + iAttachedFrame = aFrame; + + DoDraw( *iAttachedFrame ); + + MUS_LOG( "CMccScreen::AttachFrameL, exit" ) + } + +// ----------------------------------------------------------------------------- +// CMccScreen::DetachFrame +// ----------------------------------------------------------------------------- +// +void CMccScreen::DetachFrame() + { + if ( iAttachedFrame ) + { + MUS_LOG( "CMccScreen::DetachFrame, detaching" ) + iAttachedFrame->Reset(); + delete iAttachedFrame; + } + + iAttachedFrame = NULL; + } + +// ----------------------------------------------------------------------------- +// CMccScreen::UpdateViewFinderArea +// ----------------------------------------------------------------------------- +// +TPoint CMccScreen::UpdateViewFinderArea( TSize aViewFinderImageSize ) + { + TPoint corner( 0, 0 ); + if ( aViewFinderImageSize.iWidth < iArea.iWidth ) + { + // Divide the subtraction by two (i.e. do centering) + corner.iX = ( iArea.iWidth - aViewFinderImageSize.iWidth ) >> 1; + } + + if ( aViewFinderImageSize.iHeight < iArea.iHeight ) + { + // Divide the subtraction by two (i.e. do centering) + corner.iY = ( iArea.iHeight - aViewFinderImageSize.iHeight ) >> 1; + } + + iViewFinderImageRect = TRect( corner, aViewFinderImageSize ); + + return corner; + } + +// ----------------------------------------------------------------------------- +// CMccScreen::DoDraw +// ----------------------------------------------------------------------------- +// +void CMccScreen::DoDraw( CFbsBitmap& aFrame ) + { + if ( !iAborted && iGc ) + { + iFirstImageDrawn = ETrue; + + TSize viewFinderImageSize = aFrame.SizeInPixels(); + + TPoint corner = UpdateViewFinderArea( viewFinderImageSize ); + + iGc->BitBlt( corner, &aFrame ); + + DoScreenDeviceUpdate(); + } + } + +// ----------------------------------------------------------------------------- +// CMccScreen::DoScreenDeviceUpdate +// ----------------------------------------------------------------------------- +// +void CMccScreen::DoScreenDeviceUpdate() + { + if ( iFbsDev ) + { + iFbsDev->Update(); + } + } + +// End of file + diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/mustester/Stubs/mceclientstub/src/mceamrcodec.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/mustester/Stubs/mceclientstub/src/mceamrcodec.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,194 @@ +/* +* 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: +* +*/ + + +#include "mceamrcodec.h" + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CMceAmrCodec::~CMceAmrCodec +// ----------------------------------------------------------------------------- +// +EXPORT_C CMceAmrCodec::~CMceAmrCodec() + { + } + +// ----------------------------------------------------------------------------- +// CMceAmrCodec::CloneL +// ----------------------------------------------------------------------------- +// +EXPORT_C CMceAudioCodec* CMceAmrCodec::CloneL() const + { + CMceAmrCodec* clone = CMceAmrCodec::NewLC( iSdpName ); + + if ( iFmtpAttr ) + { + clone->iFmtpAttr = iFmtpAttr->AllocL(); + } + clone->iEnableVAD = iEnableVAD; + clone->iSamplingFreq = iSamplingFreq; + clone->iPTime = iPTime; + clone->iMaxPTime = iMaxPTime; + clone->iBitrate = iBitrate; + clone->iAllowedBitrates = iAllowedBitrates; + clone->iPayloadType = iPayloadType; + clone->iCodecMode = iCodecMode; + clone->iFourCC = iFourCC; + clone->iFrameSize = iFrameSize; + + CleanupStack::Pop( clone ); + + return clone; + } + +// ----------------------------------------------------------------------------- +// CMceAmrCodec::EnableVAD +// ----------------------------------------------------------------------------- +// +EXPORT_C TInt CMceAmrCodec::EnableVAD( TBool aEnableVAD ) + { + iEnableVAD = aEnableVAD; + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// CMceAmrCodec::SetBitrate +// ----------------------------------------------------------------------------- +// +EXPORT_C TInt CMceAmrCodec::SetBitrate(TUint aBitrate) + { + iBitrate = aBitrate; + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// CMceAmrCodec::SetAllowedBitrates +// ----------------------------------------------------------------------------- +// +EXPORT_C TInt CMceAmrCodec::SetAllowedBitrates(TUint aBitrates) + { + iAllowedBitrates = aBitrates; + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// CMceAmrCodec::SetSamplingFreq +// ----------------------------------------------------------------------------- +// +EXPORT_C TInt CMceAmrCodec::SetSamplingFreq(TUint aSamplingFreq) + { + iSamplingFreq = aSamplingFreq; + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// CMceAmrCodec::SetPTime +// ----------------------------------------------------------------------------- +// +EXPORT_C TInt CMceAmrCodec::SetPTime(TUint aPTime) + { + iPTime = aPTime; + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// CMceAmrCodec::SetMaxPTime +// ----------------------------------------------------------------------------- +// +EXPORT_C TInt CMceAmrCodec::SetMaxPTime(TUint aMaxPTime) + { + iMaxPTime = aMaxPTime; + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// CMceAmrCodec::SetPayloadType +// ----------------------------------------------------------------------------- +// +EXPORT_C TInt CMceAmrCodec::SetPayloadType(TUint8 aPayloadType) + { + iPayloadType = aPayloadType; + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// CMceAmrCodec::SetCodecMode +// ----------------------------------------------------------------------------- +// +EXPORT_C TInt CMceAmrCodec::SetCodecMode(TUint aCodecMode) + { + iCodecMode = aCodecMode; + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// CMceAmrCodec::NewL +// ----------------------------------------------------------------------------- +// +CMceAmrCodec* CMceAmrCodec::NewL( TBuf8 aSdpName ) + { + CMceAmrCodec* self = NewLC( aSdpName ); + CleanupStack::Pop( self ); + return self; + + } + +// ----------------------------------------------------------------------------- +// CMceAmrCodec::NewL +// ----------------------------------------------------------------------------- +// +CMceAmrCodec* CMceAmrCodec::NewLC( TBuf8 aSdpName ) + { + CMceAmrCodec* self = new (ELeave) CMceAmrCodec(); + CleanupStack::PushL( self ); + self->ConstructL( aSdpName ); + return self; + + } + +// ----------------------------------------------------------------------------- +// CMceAmrCodec::CMceAmrCodec +// ----------------------------------------------------------------------------- +// +CMceAmrCodec::CMceAmrCodec() + : CMceAudioCodec() + { + } + + +// ----------------------------------------------------------------------------- +// CMceAmrCodec::ConstructL +// ----------------------------------------------------------------------------- +// +void CMceAmrCodec::ConstructL( TBuf8 aSdpName ) + { + iSdpName = aSdpName; + } + + +// ----------------------------------------------------------------------------- +// CMceAmrCodec::SetSdpNameL +// ----------------------------------------------------------------------------- +// +void CMceAmrCodec::SetSdpNameL( const TDesC8& aSdpName ) + { + __ASSERT_ALWAYS( aSdpName.Length() <= KMceMaxSdpNameLength, + User::Leave( KErrArgument ) ); + iSdpName.Copy( aSdpName ); + } + diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/mustester/Stubs/mceclientstub/src/mceaudiocodec.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/mustester/Stubs/mceclientstub/src/mceaudiocodec.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,92 @@ +/* +* 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: +* +*/ + + +#include "mceaudiocodec.h" +#include "mcesession.h" +#include "mcemanager.h" +#include "mcemediastream.h" + + +#define _FLAT_DATA static_cast( iFlatData ) +#define FLAT_DATA( data ) _FLAT_DATA->data + +// ============================ MEMBER FUNCTIONS =============================== + + +// ----------------------------------------------------------------------------- +// CMceAudioCodec::InitializeL +// ----------------------------------------------------------------------------- +// +void CMceAudioCodec::InitializeL( CMceMediaStream& aParent ) + { + CMceCodec::InitializeL( aParent ); + } + +// ----------------------------------------------------------------------------- +// CMceAudioCodec::~CMceAudioCodec +// ----------------------------------------------------------------------------- +// +CMceAudioCodec::~CMceAudioCodec() + { + } + +// ----------------------------------------------------------------------------- +// CMceAudioCodec::SamplingFreq +// ----------------------------------------------------------------------------- +// +TUint CMceAudioCodec::SamplingFreq() const + { + return iSamplingFreq; + + } + +// ----------------------------------------------------------------------------- +// CMceAudioCodec::VAD +// ----------------------------------------------------------------------------- +// +TBool CMceAudioCodec::VAD() const + { + return iEnableVAD; + } + +// ----------------------------------------------------------------------------- +// CMceAudioCodec::PTime +// ----------------------------------------------------------------------------- +// +TUint CMceAudioCodec::PTime() const + { + return iPTime; + } + +// ----------------------------------------------------------------------------- +// CMceAudioCodec::MaxPTime +// ----------------------------------------------------------------------------- +// +TUint CMceAudioCodec::MaxPTime() const + { + return iMaxPTime; + } + +// ----------------------------------------------------------------------------- +// CMceAudioCodec::CMceAudioCodec +// ----------------------------------------------------------------------------- +// +CMceAudioCodec::CMceAudioCodec() : + CMceCodec() + { + } diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/mustester/Stubs/mceclientstub/src/mceaudiostream.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/mustester/Stubs/mceclientstub/src/mceaudiostream.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,155 @@ +/* +* 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: +* +*/ + + +#include "mceaudiostream.h" +#include "mcemanager.h" +#include "mceaudiocodec.h" +#include "mcesession.h" + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CMceAudioStream::NewL +// ----------------------------------------------------------------------------- +// +EXPORT_C CMceAudioStream* CMceAudioStream::NewL() + { + CMceAudioStream* self = NewLC(); + CleanupStack::Pop( self ); + return self; + } + +// ----------------------------------------------------------------------------- +// CMceAudioStream::NewLC +// ----------------------------------------------------------------------------- +// +EXPORT_C CMceAudioStream* CMceAudioStream::NewLC() + { + CMceAudioStream* self = new (ELeave) CMceAudioStream(); + CleanupStack::PushL( self ); + self->ConstructL(); + return self; + } + +// ----------------------------------------------------------------------------- +// CMceAudioStream::~CMceAudioStream +// ----------------------------------------------------------------------------- +// +EXPORT_C CMceAudioStream::~CMceAudioStream() + { + iCodecs.ResetAndDestroy(); + } + +// ----------------------------------------------------------------------------- +// CMceAudioStream::Codecs +// ----------------------------------------------------------------------------- +// +EXPORT_C const RPointerArray& CMceAudioStream::Codecs() + { + return iCodecs; + } + +// ----------------------------------------------------------------------------- +// CMceAudioStream::AddCodecL +// ----------------------------------------------------------------------------- +// +EXPORT_C void CMceAudioStream::AddCodecL(CMceAudioCodec* aCodec) + { + __ASSERT_ALWAYS(aCodec, User::Leave(KErrArgument)); + iCodecs.AppendL(aCodec); + } + +// ----------------------------------------------------------------------------- +// CMceAudioStream::RemoveCodecL +// ----------------------------------------------------------------------------- +// +EXPORT_C void CMceAudioStream::RemoveCodecL(CMceAudioCodec& aCodec) + { + for(int i = 0; i < iCodecs.Count(); i++ ) + { + if( iCodecs[i] == &aCodec ) + { + delete iCodecs[i]; + iCodecs.Remove( i ); + } + } + } + +// ----------------------------------------------------------------------------- +// CMceAudioStream::CMceAudioStream +// ----------------------------------------------------------------------------- +// +CMceAudioStream::CMceAudioStream() + :CMceMediaStream() + { + iType = KMceAudio; + } + + +// ----------------------------------------------------------------------------- +// CMceAudioStream::ConstructL +// ----------------------------------------------------------------------------- +// +void CMceAudioStream::ConstructL() + { + } + +// ----------------------------------------------------------------------------- +// CMceAudioStream::InitializeL +// ----------------------------------------------------------------------------- +// +void CMceAudioStream::InitializeL( CMceSession& aParent ) + { + + CMceMediaStream::InitializeL( aParent ); + + InitializeL( &aParent.Manager() ); + + for( TInt i = 0; i < iCodecs.Count(); i++ ) + { + iCodecs[i]->InitializeL( *this ); + } + } + + +// ----------------------------------------------------------------------------- +// CMceAudioStream::InitializeL +// ----------------------------------------------------------------------------- +// +void CMceAudioStream::InitializeL( CMceManager* aManager ) + { + CMceMediaStream::InitializeL( aManager ); + if ( aManager && iCodecs.Count() == 0 ) + { + const RPointerArray supportedCodes = + aManager->SupportedAudioCodecs(); + for( TInt i = 0; i < supportedCodes.Count(); i++ ) + { + CMceAudioCodec* codec = supportedCodes[i]->CloneL(); + CleanupStack::PushL( codec ); + iCodecs.AppendL( codec ); + CleanupStack::Pop( codec ); + } + + } + + } + + + + diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/mustester/Stubs/mceclientstub/src/mceavccodec.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/mustester/Stubs/mceclientstub/src/mceavccodec.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,286 @@ +/* +* Copyright (c) 2006 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: +* +*/ + + +#include "mceavccodec.h" + +// Stub constants +const TReal KMceAvcDefaultFrameRate = 15; +const TInt KMceAvcDefaultFrameSize = 10000; +const TInt KMceAvcDefaultAllowedBitrate = KMceAvcCodecProfileIdBaseline | + KMceAvcCodecProfileIopConstraintSet | + KMceAvcBitrateLevel1; +const TInt KMceAvcLevel1BitrateBps = 64000; + +const TUint KMceAvcDefaultFrameHeight = 176; +const TUint KMceAvcDefaultFrameWidth = 144; + + + + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CMceAvcCodec::~CMceAvcCodec +// ----------------------------------------------------------------------------- +// +EXPORT_C CMceAvcCodec::~CMceAvcCodec() + { + } + + +// ----------------------------------------------------------------------------- +// CMceAvcCodec::NewL +// ----------------------------------------------------------------------------- +// +EXPORT_C CMceAvcCodec* CMceAvcCodec::NewL( TBuf8 aSdpName ) + { + CMceAvcCodec* self = NewLC( aSdpName ); + CleanupStack::Pop( self ); + return self; + } + + +// ----------------------------------------------------------------------------- +// CMceAvcCodec::NewL +// ----------------------------------------------------------------------------- +// +EXPORT_C CMceAvcCodec* CMceAvcCodec::NewLC( TBuf8 aSdpName ) + { + CMceAvcCodec* self = new (ELeave) CMceAvcCodec(); + CleanupStack::PushL( self ); + self->ConstructL( aSdpName ); + return self; + } + + +// ----------------------------------------------------------------------------- +// CMceAvcCodec::SetBitrate +// ----------------------------------------------------------------------------- +// +EXPORT_C TInt CMceAvcCodec::SetBitrate( TUint aBitrate ) + { + iBitrate = aBitrate; + return KErrNone; + } + + +// ----------------------------------------------------------------------------- +// CMceAvcCodec::SetAllowedBitrates +// ----------------------------------------------------------------------------- +// +EXPORT_C TInt CMceAvcCodec::SetAllowedBitrates(TUint aBitrates) + { + iAllowedBitrates = aBitrates; + + delete iConfigKey; + iConfigKey = NULL; + + return KErrNone; + } + + +// ----------------------------------------------------------------------------- +// CMceAvcCodec::SetCodecMode +// ----------------------------------------------------------------------------- +// +EXPORT_C TInt CMceAvcCodec::SetCodecMode( TUint aCodecMode ) + { + if ( aCodecMode == KMceAvcModeSingleNal ) + { + iCodecMode = KMceAvcModeSingleNal; + return KErrNone; + } + return KErrNotSupported; + } + + +// ----------------------------------------------------------------------------- +// CMceAvcCodec::SetPayloadType +// ----------------------------------------------------------------------------- +// +EXPORT_C TInt CMceAvcCodec::SetPayloadType(TUint8 aPayloadType) + { + iPayloadType = aPayloadType; + return KErrNone; + } + + +// ----------------------------------------------------------------------------- +// CMceAvcCodec::CloneL +// ----------------------------------------------------------------------------- +// +EXPORT_C CMceVideoCodec* CMceAvcCodec::CloneL() const + { + CMceAvcCodec* clone = CMceAvcCodec::NewLC( iSdpName ); + + if ( iFmtpAttr ) + { + clone->iFmtpAttr = iFmtpAttr->AllocL(); + } + clone->iPayloadType = iPayloadType; + + clone->iBitrate = iBitrate; + clone->iAllowedBitrates = iAllowedBitrates; + clone->iCodecMode = iCodecMode; + clone->iFourCC = iFourCC; + clone->iFrameSize = iFrameSize; + + clone->iFrameRate = iFrameRate; + clone->iMaxBitRate = iMaxBitRate; + clone->iAllowedResolutions = iAllowedResolutions; + clone->iResolutionWidth = iResolutionWidth; + clone->iResolutionHeight = iResolutionHeight; + clone->iAllowedFrameRates = iAllowedFrameRates; + clone->iClockRate = iClockRate; + + clone->iPacketizationMode = iPacketizationMode; + clone->iAllowedPacketizationModes = iAllowedPacketizationModes; + + CleanupStack::Pop( clone ); + return clone; + } + + +// ----------------------------------------------------------------------------- +// CMceAvcCodec:: +// ----------------------------------------------------------------------------- +// +EXPORT_C void CMceAvcCodec::SetMaxBitrateL( TUint aMaxBitrate ) + { + delete HBufC::NewL( 1 ); // To cause leave in simulation + iMaxBitRate = aMaxBitrate; + } + + +// ----------------------------------------------------------------------------- +// CMceAvcCodec:: +// ----------------------------------------------------------------------------- +// +EXPORT_C void CMceAvcCodec::SetAllowedResolutionsL( TUint aResolutions ) + { + delete HBufC::NewL( 1 ); // To cause leave in simulation + iAllowedResolutions = aResolutions; + } + + +// ----------------------------------------------------------------------------- +// CMceAvcCodec:: +// ----------------------------------------------------------------------------- +// +EXPORT_C void CMceAvcCodec::SetResolutionL( TSize aResolution ) + { + delete HBufC::NewL( 1 ); // To cause leave in simulation + iResolutionWidth = aResolution.iWidth; + iResolutionHeight = aResolution.iHeight; + } + + +// ----------------------------------------------------------------------------- +// CMceAvcCodec:: +// ----------------------------------------------------------------------------- +// +EXPORT_C void CMceAvcCodec::SetAllowedFrameRatesL( TUint aFrameRates ) + { + delete HBufC::NewL( 1 ); // To cause leave in simulation + iAllowedFrameRates = aFrameRates; + } + + +// ----------------------------------------------------------------------------- +// CMceAvcCodec:: +// ----------------------------------------------------------------------------- +// +EXPORT_C void CMceAvcCodec::SetFrameRateL( TReal aFrameRate ) + { + delete HBufC::NewL( 1 ); // To cause leave in simulation + iFrameRate = aFrameRate; + } + + +// ----------------------------------------------------------------------------- +// CMceAvcCodec::SetPreferredEncodingDecodingDeviceL +// ----------------------------------------------------------------------------- +// +EXPORT_C void CMceAvcCodec::SetPreferredEncodingDecodingDeviceL( + TUid aEncodingDecodingDevice ) + { + delete HBufC::NewL( 1 ); // To cause leave in simulation + iEncodingDecodingDevice = aEncodingDecodingDevice; + } + + +// ----------------------------------------------------------------------------- +// CMceAvcCodec::SetEncodingKeyL +// ----------------------------------------------------------------------------- +// +EXPORT_C void CMceAvcCodec::SetConfigKeyL( const TDesC8& aConfigKey ) + { + HBufC8* configKey = aConfigKey.AllocL(); + delete iConfigKey; + iConfigKey = configKey; + } + + +// ----------------------------------------------------------------------------- +// CMceAvcCodec::SetSdpNameL +// ----------------------------------------------------------------------------- +// +void CMceAvcCodec::SetSdpNameL( const TDesC8& aSdpName ) + { + __ASSERT_ALWAYS( aSdpName.Length() <= KMceMaxSdpNameLength, + User::Leave( KErrArgument ) ); + delete HBufC::NewL( 1 ); // To cause leave in simulation + iSdpName.Copy( aSdpName ); + } + + +// ----------------------------------------------------------------------------- +// CMceAvcCodec::CMceAvcCodec +// ----------------------------------------------------------------------------- +// +CMceAvcCodec::CMceAvcCodec() + :CMceVideoCodec() + { + } + + +// ----------------------------------------------------------------------------- +// CMceAvcCodec::ConstructL +// ----------------------------------------------------------------------------- +// +void CMceAvcCodec::ConstructL( TBuf8 aSdpName ) + { + iSdpName = aSdpName; + iCodecMode = KMceAvcModeSingleNal; + iClockRate = KMceAvcDefaultFrameRate; + iFrameRate = KMceAvcDefaultFrameRate; + iResolutionWidth = KMceAvcDefaultFrameWidth; + iResolutionHeight = KMceAvcDefaultFrameHeight; + iBitrate = KMceAvcLevel1BitrateBps; + iMaxBitRate = KMceAvcLevel1BitrateBps; + iAllowedBitrates = KMceAvcDefaultAllowedBitrate; + iFrameSize = KMceAvcDefaultFrameSize; + // Defaults should be defined in MCE API + const TUint8 KMceDefaultAvcPayloadType = 98; + iPayloadType = KMceDefaultAvcPayloadType; + + } + + + + diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/mustester/Stubs/mceclientstub/src/mcecamerasource.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/mustester/Stubs/mceclientstub/src/mcecamerasource.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,356 @@ +/* +* Copyright (c) 2006 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: +* +*/ + + +#include "mcecamerasource.h" +#include "mcesession.h" +#include "mcemediastream.h" +#include "mcemanager.h" + + +const TInt KMinDigitalZoom = 0; +const TInt KMinContrast = -100; +const TInt KMaxContrast = 100; +const TInt KMinBrightness = -100; +const TInt KMaxBrightness = 100; + + +const TInt KInitialCameraIndex = 0; +const TInt KInitialZoomFactor = 1; +const TInt KInitialDigitalZoomFactor = 1; +const TInt KInitialContrast = 0; +const TInt KInitialBrightness = 0; +const TInt KInitialExposure = CCamera::EExposureAuto; +const TInt KInitialWhiteBalance = CCamera::EWBAuto; + +// ============================ MEMBER FUNCTIONS =============================== + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +EXPORT_C CMceCameraSource* CMceCameraSource::NewL( CMceManager& aManager ) + { + CMceCameraSource* self = CMceCameraSource::NewLC( aManager ); + CleanupStack::Pop( self ); + return self; + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +EXPORT_C CMceCameraSource* CMceCameraSource::NewLC( CMceManager& /*aManager*/ ) + { + CMceCameraSource* self = new( ELeave )CMceCameraSource(); + CleanupStack::PushL( self ); + return self; + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +EXPORT_C CMceCameraSource* CMceCameraSource::NewL() + { + CMceCameraSource* self = CMceCameraSource::NewLC(); + CleanupStack::Pop( self ); + return self; + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +EXPORT_C CMceCameraSource* CMceCameraSource::NewLC() + { + CMceCameraSource* self = new( ELeave )CMceCameraSource(); + CleanupStack::PushL( self ); + return self; + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +EXPORT_C CMceCameraSource::~CMceCameraSource() + { + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +EXPORT_C void CMceCameraSource::EnableL() + { + CMceMediaSource::DoEnableL(); + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +EXPORT_C void CMceCameraSource::DisableL() + { + CMceMediaSource::DoDisableL(); + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +EXPORT_C TInt CMceCameraSource::CamerasAvailable() const + { + return iCameraCount; + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +EXPORT_C void CMceCameraSource::SetCameraIndexL( TInt aCameraIndex ) + { + __ASSERT_ALWAYS( aCameraIndex >= 0 && + aCameraIndex < this->CamerasAvailable(), + User::Leave( KErrArgument ) ); + + + iCameraIndex = aCameraIndex; + + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +EXPORT_C void CMceCameraSource::GetCameraInfo( TCameraInfo& aInfo ) const + { + aInfo = iCameraInfo; + + aInfo.iMaxZoom += iCameraIndex*5; + aInfo.iMaxDigitalZoom += iCameraIndex*5; + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +EXPORT_C void CMceCameraSource::SetZoomFactorL( TInt aZoomFactor ) + { + __ASSERT_ALWAYS( aZoomFactor >= iCameraInfo.iMinZoom && + aZoomFactor <= iCameraInfo.iMaxZoom, + User::Leave( KErrArgument ) ); + + iZoomFactor = aZoomFactor; + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +EXPORT_C TInt CMceCameraSource::ZoomFactorL() + { + return iZoomFactor; + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +EXPORT_C void CMceCameraSource::SetDigitalZoomFactorL( TInt aDigitalZoomFactor ) + { + __ASSERT_ALWAYS( aDigitalZoomFactor >= KMinDigitalZoom && + aDigitalZoomFactor <= iCameraInfo.iMaxDigitalZoom, + User::Leave( KErrArgument ) ); + + iDigitalZoomFactor = aDigitalZoomFactor; + + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +EXPORT_C TInt CMceCameraSource::DigitalZoomFactorL() + { + return iDigitalZoomFactor; + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +EXPORT_C void CMceCameraSource::SetContrastL( TInt aContrast ) + { + + __ASSERT_ALWAYS( ( iCameraInfo.iOptionsSupported & + TCameraInfo::EContrastSupported ) == + TCameraInfo::EContrastSupported, + User::Leave( KErrNotSupported ) ); + + __ASSERT_ALWAYS( (( aContrast >= KMinContrast && + aContrast <= KMaxContrast ) || + aContrast == CCamera::EContrastAuto ), + User::Leave( KErrArgument ) ); + + + iContrast = aContrast; + + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +EXPORT_C TInt CMceCameraSource::ContrastL() + { + return iContrast; + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +EXPORT_C void CMceCameraSource::SetBrightnessL( TInt aBrightness ) + { + + __ASSERT_ALWAYS( ( iCameraInfo.iOptionsSupported & + TCameraInfo::EBrightnessSupported ) == + TCameraInfo::EBrightnessSupported, + User::Leave( KErrNotSupported ) ); + + __ASSERT_ALWAYS( (( aBrightness >= KMinBrightness && + aBrightness <= KMaxBrightness ) || + aBrightness == CCamera::EBrightnessAuto ), + User::Leave( KErrArgument ) ); + + iBrightness = aBrightness; + + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +EXPORT_C TInt CMceCameraSource::BrightnessL() + { + return iBrightness; + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +EXPORT_C void CMceCameraSource::SetExposureL( CCamera::TExposure aExposure ) + { + + __ASSERT_ALWAYS( ( iCameraInfo.iExposureModesSupported & aExposure ) == + aExposure, + User::Leave( KErrNotSupported ) ); + + iExposure = aExposure; + + } + + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +EXPORT_C CCamera::TExposure CMceCameraSource::ExposureL() + { + + + return static_cast( iExposure ); + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +EXPORT_C void CMceCameraSource::SetWhiteBalanceL( + CCamera::TWhiteBalance aWhiteBalance ) + { + __ASSERT_ALWAYS( + ( iCameraInfo.iWhiteBalanceModesSupported & aWhiteBalance ) == + aWhiteBalance, + User::Leave( KErrNotSupported ) ); + + iWhiteBalance = aWhiteBalance; + + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +EXPORT_C CCamera::TWhiteBalance CMceCameraSource::WhiteBalanceL() + { + + return static_cast( iWhiteBalance ); + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMceCameraSource::InitializeL( CMceManager* /*aManager*/ ) + { + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +CMceCameraSource::CMceCameraSource() + :CMceMediaSource(), + iCameraIndex( 0 ), + iZoomFactor( 1 ), + iDigitalZoomFactor( 0 ), + iContrast( 0 ), + iBrightness( 0 ), + iExposure( CCamera::EExposureAuto ), + iWhiteBalance( CCamera::EWBAuto ), + iCameraCount ( 2 ) + { + iType = KMceCameraSource; + iCameraInfo.iMinZoom = 1; + iCameraInfo.iMaxZoom = 3; + iCameraInfo.iMaxDigitalZoom = 10; + } diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/mustester/Stubs/mceclientstub/src/mcecodec.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/mustester/Stubs/mceclientstub/src/mcecodec.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,304 @@ +/* +* 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: +* +*/ + + +#include "mcecodec.h" +#include "mcesession.h" +#include "mcemanager.h" +#include "mcemediastream.h" +#include "mcestreamobserver.h" +#include "mcedefs.h" + + + +#define _FLAT_DATA static_cast( iFlatData ) +#define FLAT_DATA( data ) _FLAT_DATA->data + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CMceCodec::~CMceCodec +// ----------------------------------------------------------------------------- +// +CMceCodec::~CMceCodec() + { + } + +// ----------------------------------------------------------------------------- +// CMceCodec::InitializeL +// ----------------------------------------------------------------------------- +// +void CMceCodec::InitializeL( CMceMediaStream& aParent ) + { + iStream = &aParent; + } + +// ----------------------------------------------------------------------------- +// CMceCodec::SetStateL +// ----------------------------------------------------------------------------- +// +EXPORT_C void CMceCodec::SetStateL( CMceCodec::TState /*aState*/ ) + { + // NOT SUPPORTED YET + User::Leave( KErrNotSupported ); + } + + +// ----------------------------------------------------------------------------- +// CMceCodec::SetStandByTimerL +// ----------------------------------------------------------------------------- +// +EXPORT_C void CMceCodec::SetStandByTimerL( TUint32 /*aTimerValue*/ ) + { + // NOT SUPPORTED YET + User::Leave( KErrNotSupported ); + } + + +// ----------------------------------------------------------------------------- +// CMceCodec::SetMMFPriorityL +// ----------------------------------------------------------------------------- +// +EXPORT_C void CMceCodec::SetMMFPriorityL( TInt aPriority ) + { + iMMFPriority = aPriority; + } + + +// ----------------------------------------------------------------------------- +// CMceCodec::SetMMFPriorityPreferenceL +// ----------------------------------------------------------------------------- +// +EXPORT_C void CMceCodec::SetMMFPriorityPreferenceL( TInt aPriorityPreference ) + { + iMMFPriorityPreference = aPriorityPreference; + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +EXPORT_C void CMceCodec::SetKeepAliveTimerL( TUint8 aTimerValue ) + { + iKeepAliveTimer = aTimerValue; + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +EXPORT_C void CMceCodec::SetKeepAlivePayloadTypeL( TUint8 aKeepAlivePT ) + { + iKeepAlivePayloadType = aKeepAlivePT; + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +EXPORT_C void CMceCodec::SetKeepAliveDataL( const TDesC8& aData ) + { + iKeepAliveData = aData; + } + + +// ----------------------------------------------------------------------------- +// CMceCodec::State +// ----------------------------------------------------------------------------- +// +EXPORT_C CMceCodec::TState CMceCodec::State() const + { + return CMceCodec::EDisabled; + } + + +// ----------------------------------------------------------------------------- +// CMceCodec::Id +// ----------------------------------------------------------------------------- +// +/* +EXPORT_C TMceMediaId CMceCodec::Id() const + { + return; + } +*/ + +// ----------------------------------------------------------------------------- +// CMceCodec::Type +// ----------------------------------------------------------------------------- +// +EXPORT_C TMceCodecType CMceCodec::Type() const + { + return iType; + } + +// ----------------------------------------------------------------------------- +// CMceCodec::FourCC +// ----------------------------------------------------------------------------- +// +EXPORT_C TUint32 CMceCodec::FourCC() const + { + return iFourCC; + } + +// ----------------------------------------------------------------------------- +// CMceCodec::Bitrate +// ----------------------------------------------------------------------------- +// +EXPORT_C TUint CMceCodec::Bitrate() const + { + return iBitrate; + } + +// ----------------------------------------------------------------------------- +// CMceAudioCodec::AllowedBitrates +// ----------------------------------------------------------------------------- +// +EXPORT_C TUint CMceCodec::AllowedBitrates() const + { + return iAllowedBitrates; + } + +// ----------------------------------------------------------------------------- +// CMceCodec::FrameSize +// ----------------------------------------------------------------------------- +// +EXPORT_C TUint CMceCodec::FrameSize() const + { + return iFrameSize; + } + +// ----------------------------------------------------------------------------- +// CMceCodec::CodecMode +// ----------------------------------------------------------------------------- +// +EXPORT_C TUint CMceCodec::CodecMode() const + { + return iCodecMode; + } + +// ----------------------------------------------------------------------------- +// CMceCodec::PayloadType +// ----------------------------------------------------------------------------- +// +EXPORT_C TUint8 CMceCodec::PayloadType() const + { + return iPayloadType; + } + + +// ----------------------------------------------------------------------------- +// CMceCodec::SdpName +// ----------------------------------------------------------------------------- +// +EXPORT_C const TDesC8& CMceCodec::SdpName() const + { + return iSdpName; + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +EXPORT_C TInt CMceCodec::MMFPriority() const + { + return iMMFPriority; + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +EXPORT_C TInt CMceCodec::MMFPriorityPreference() const + { + return iMMFPriorityPreference; + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +EXPORT_C TUint8 CMceCodec::KeepAliveTimer() const + { + return iKeepAliveTimer; + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +EXPORT_C TUint8 CMceCodec::KeepAlivePayloadType() const + { + return iKeepAlivePayloadType; + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +EXPORT_C const TDesC8& CMceCodec::KeepAliveData() const + { + return iKeepAliveData; + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +EXPORT_C TInt CMceCodec::Preference() const + { + return iPreference; + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +EXPORT_C void CMceCodec::SetPreferenceL( TInt aPreference ) + { + iPreference = aPreference; + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMceCodec::SetSdpNameL( const TDesC8& aSdpName ) + { + iSdpName = aSdpName; + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +CMceCodec::CMceCodec() + { + } + diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/mustester/Stubs/mceclientstub/src/mcedisplaysink.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/mustester/Stubs/mceclientstub/src/mcedisplaysink.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,246 @@ +/* +* Copyright (c) 2006 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: +* +*/ + + +#include "mcedisplaysink.h" +#include "mcesession.h" +#include "mcemediastream.h" +#include "mcemanager.h" +#include "mccscreen.h" +#include "muslogger.h" + +#include +#include + + +#define _FLAT_DATA static_cast( iFlatData ) +#define FLAT_DATA( data ) _FLAT_DATA->data + +// ============================ MEMBER FUNCTIONS =============================== + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +EXPORT_C CMceDisplaySink* CMceDisplaySink::NewL( CMceManager& aManager ) + { + CMceDisplaySink* self = CMceDisplaySink::NewLC( aManager ); + CleanupStack::Pop( self ); + return self; + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +EXPORT_C CMceDisplaySink* CMceDisplaySink::NewLC( CMceManager& /*aManager*/ ) + { + CMceDisplaySink* self = new (ELeave) CMceDisplaySink(); + CleanupStack::PushL( self ); + return self; + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +EXPORT_C CMceDisplaySink* CMceDisplaySink::NewL() + { + CMceDisplaySink* self = CMceDisplaySink::NewLC(); + CleanupStack::Pop( self ); + return self; + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +EXPORT_C CMceDisplaySink* CMceDisplaySink::NewLC() + { + CMceDisplaySink* self = new( ELeave )CMceDisplaySink(); + CleanupStack::PushL( self ); + return self; + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +EXPORT_C CMceDisplaySink::~CMceDisplaySink() + { + delete iScreen; + iScreen = 0; + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +EXPORT_C void CMceDisplaySink::EnableL() + { + MUS_LOG("CMceDisplaySink::EnableL ->") + CMceMediaSink::DoEnableL(); + if ( !iScreen ) + { + TPoint pos (0,0); + TSize area = iDisplayRect.Size(); + TInt index = iDisplayIndex; + TInt windowOrdinalPosition = 2; + TInt windowOrdinalPriority = 1; + TSize viewFinderImageSize = iDisplayRect.Size(); + MUS_LOG2("CMceDisplaySink::EnableL display rect height=%d width=%d )",area.iHeight,area.iWidth) + iScreen = CMccScreen::NewL( pos,area,index,windowOrdinalPosition,windowOrdinalPriority,viewFinderImageSize); + } + + iScreen->StartL(); + MUS_LOG("CMceDisplaySink::EnableL <-") + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +EXPORT_C void CMceDisplaySink::DisableL() + { + MUS_LOG("CMceDisplaySink::DisableL ->") + CMceMediaSink::DoDisableL(); + if( iScreen ) iScreen->Stop(); + MUS_LOG("CMceDisplaySink::DisableL <-") + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +EXPORT_C TInt CMceDisplaySink::DisplaysAvailable() const + { + return 1; + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +EXPORT_C void CMceDisplaySink::SetDisplayIndexL( TInt aDisplayIndex ) + { + __ASSERT_ALWAYS( aDisplayIndex >= 0 && + aDisplayIndex < this->DisplaysAvailable(), + User::Leave( KErrArgument ) ); + + iDisplayIndex = aDisplayIndex; + + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +EXPORT_C void CMceDisplaySink::SetDisplay( RWindow& /*aWindow*/, + CWindowGc& /*aGc*/ ) + { + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +EXPORT_C void CMceDisplaySink::SetDisplayRectL( const TRect& aRect ) + { + iDisplayRect = aRect; + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +EXPORT_C const TRect CMceDisplaySink::DisplayRectL() + { + return iDisplayRect; + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +EXPORT_C void CMceDisplaySink::SetPriorityL( TUint aPriority ) + { + iDisplayPriority = aPriority; + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +EXPORT_C TUint CMceDisplaySink::PriorityL() + { + return iDisplayPriority; + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +EXPORT_C void CMceDisplaySink::SetRotationL( TRotation aRotation ) + { + iRotation = aRotation; + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +EXPORT_C CMceDisplaySink::TRotation CMceDisplaySink::RotationL() + { + return iRotation; + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMceDisplaySink::InitializeL( CMceManager* /*aManager*/ ) + { + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +CMceDisplaySink::CMceDisplaySink() + :CMceMediaSink(), + iDisplayIndex( 0 ), + iDisplayRect( TRect( 0, 0, 0, 0 ) ), + iDisplayPriority( 0 ), + iRotation( ENone ) + { + iType = KMceDisplaySink; + } diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/mustester/Stubs/mceclientstub/src/mcefilesink.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/mustester/Stubs/mceclientstub/src/mcefilesink.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,98 @@ +/* +* Copyright (c) 2006 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: +* +*/ + + + +#include "mcefilesink.h" + + + +// ============================ MEMBER FUNCTIONS =============================== + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +EXPORT_C CMceFileSink* CMceFileSink::NewL( + const TFileName& aFileName ) + { + CMceFileSink* self = CMceFileSink::NewLC( aFileName ); + CleanupStack::Pop( self ); + return self; + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +EXPORT_C CMceFileSink* CMceFileSink::NewLC( + const TFileName& aFileName ) + { + CMceFileSink* self = new (ELeave) CMceFileSink(); + CleanupStack::PushL( self ); + self->ConstructL( aFileName ); + return self; + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +EXPORT_C CMceFileSink::~CMceFileSink() + { + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +EXPORT_C void CMceFileSink::EnableL() + { + CMceMediaSink::DoEnableL(); + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +EXPORT_C void CMceFileSink::DisableL() + { + CMceMediaSink::DoDisableL(); + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +CMceFileSink::CMceFileSink() + { + iType = KMceFileSink; + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMceFileSink::ConstructL( const TFileName& aFileName ) + { + iFileName = aFileName; + } diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/mustester/Stubs/mceclientstub/src/mcefilesource.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/mustester/Stubs/mceclientstub/src/mcefilesource.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,387 @@ +/* +* Copyright (c) 2006 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: +* +*/ + + + +#include "mcefilesource.h" +#include "mcevideostream.h" +#include "mceaudiostream.h" +#include "mcemanager.h" +#include "mcesession.h" +#include "utf.h" + + +// ============================ MEMBER FUNCTIONS =============================== + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +EXPORT_C CMceFileSource* CMceFileSource::NewL( + CMceManager& aManager, + const TFileName& aFileName ) + { + CMceFileSource* self = CMceFileSource::NewLC( aManager, aFileName ); + CleanupStack::Pop( self ); + return self; + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +EXPORT_C CMceFileSource* CMceFileSource::NewLC( + CMceManager& aManager, + const TFileName& aFileName ) + { + CMceFileSource* self = new (ELeave) CMceFileSource(); + CleanupStack::PushL( self ); + self->ConstructL( &aManager, aFileName ); + return self; + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +EXPORT_C CMceFileSource::~CMceFileSource() + { + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +EXPORT_C void CMceFileSource::EnableL() + { + CMceMediaSource::DoEnableL(); + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +EXPORT_C void CMceFileSource::DisableL() + { + CMceMediaSource::DoDisableL(); + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +EXPORT_C void CMceFileSource::UpdateL ( const TFileName& aFileName ) + { + iFileName = aFileName; + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +EXPORT_C TInt CMceFileSource::MediaElementCountL( TMceMediaType aType ) const + { + if ( aType == KMceAudio ) + { + return iAudioElementCount; + } + else if ( aType == KMceVideo ) + { + return iVideoElementCount; + } + return 0; + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +EXPORT_C void CMceFileSource::SetCurrentMediaElementL( + TMceMediaType aType, + TInt aIndex ) + { + __ASSERT_ALWAYS( aIndex >= 0 && + aIndex < MediaElementCountL( aType ), + User::Leave( KErrArgument ) ); + + if ( aType == KMceAudio ) + { + iCurrentAudioElement = aIndex; + } + else if ( aType == KMceVideo ) + { + iCurrentVideoElement = aIndex; + } + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +EXPORT_C TInt CMceFileSource::CurrentMediaElement( TMceMediaType aType ) + { + if ( aType == KMceAudio ) + { + return iCurrentAudioElement; + } + else if ( aType == KMceVideo ) + { + return iCurrentVideoElement; + } + + return 0; + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +EXPORT_C void CMceFileSource::SetPositionL( + const TTimeIntervalMicroSeconds& aPosition ) + { + __ASSERT_ALWAYS( aPosition <= DurationL() && + aPosition >= TTimeIntervalMicroSeconds( 0 ), + User::Leave( KErrArgument ) ); + + iPosition = aPosition; + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +EXPORT_C TTimeIntervalMicroSeconds CMceFileSource::PositionL() const + { + return iPosition; + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +EXPORT_C TTimeIntervalMicroSeconds CMceFileSource::DurationL() const + { + return iDuration; + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +EXPORT_C void CMceFileSource::SetFastForwardL( TBool aUseFFWD ) + { + __ASSERT_ALWAYS( this->MediaElementCountL( KMceVideo ) > 0, + User::Leave( KErrNotSupported ) ); + + + iFastForward = aUseFFWD; + + + if ( iFastForward ) + { + iFastRewind = EFalse; + } + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +EXPORT_C void CMceFileSource::SetFastRewindL( TBool aUseFRWD ) + { + __ASSERT_ALWAYS( this->MediaElementCountL( KMceVideo ) > 0, + User::Leave( KErrNotSupported ) ); + + iFastRewind = aUseFRWD; + + if ( iFastRewind ) + { + iFastForward = EFalse; + } + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +EXPORT_C void CMceFileSource::TranscodeL( const TFileName& aFileName ) + { + __ASSERT_ALWAYS( aFileName != KNullDesC, User::Leave( KErrArgument ) ); + + TBool transcodingNeeded = EFalse; + for ( TInt i = 0; i < iStreams.Count(); ++i ) + { + if ( iStreams[i]->State() == CMceMediaStream::ETranscodingRequired ) + { + transcodingNeeded = ETrue; + if ( iStreams[i]->Type() == KMceAudio ) + { + CMceAudioStream* audio = + static_cast(iStreams[i]); + __ASSERT_ALWAYS( audio->Codecs().Count() > 0, + User::Leave( KErrNotReady ) ); + } + else + { + CMceVideoStream* video = + static_cast(iStreams[i]); + __ASSERT_ALWAYS( video->Codecs().Count() > 0, + User::Leave( KErrNotReady ) ); + } + + iStreams[i]->iState = CMceMediaStream::ETranscoding; + } + } + + __ASSERT_ALWAYS( transcodingNeeded, User::Leave( KErrNotReady ) ); + + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +EXPORT_C void CMceFileSource::CancelTranscodeL() + { + TBool transcodingOngoing = EFalse; + + for ( TInt i = 0; i < iStreams.Count(); ++i ) + { + if ( iStreams[i]->State() == CMceMediaStream::ETranscoding ) + { + transcodingOngoing = ETrue; + iStreams[i]->iState = CMceMediaStream::ETranscodingRequired; + } + } + + __ASSERT_ALWAYS( transcodingOngoing, User::Leave( KErrNotReady ) ); + + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +EXPORT_C TInt CMceFileSource::TranscodingProgressL() const + { + TBool transcodingOngoing = EFalse; + + if ( iFailWithCode != KErrNone ) + { + TInt failCode = iFailWithCode; + iFailWithCode = KErrNone; + User::Leave( failCode ); + } + + for ( TInt i = 0; i < iStreams.Count(); ++i ) + { + if ( iStreams[i]->State() == CMceMediaStream::ETranscoding ) + { + transcodingOngoing = ETrue; + } + } + + __ASSERT_ALWAYS( transcodingOngoing, User::Leave( KErrNotReady ) ); + + return iTranscodingPercentage; + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMceFileSource::InitializeL( CMceManager* aManager ) + { + iDuration = TTimeIntervalMicroSeconds( 100000000 ); + + iAudioElementCount = 1; + iVideoElementCount = 1; + + } + +// ----------------------------------------------------------------------------- +// Factory method for inner usage +// ----------------------------------------------------------------------------- +// +CMceFileSource* CMceFileSource::NewL() + { + CMceFileSource* self = CMceFileSource::NewLC(); + CleanupStack::Pop( self ); + return self; + } + + +// ----------------------------------------------------------------------------- +// Factory method for inner usage +// ----------------------------------------------------------------------------- +// +CMceFileSource* CMceFileSource::NewLC() + { + CMceFileSource* self = new (ELeave) CMceFileSource(); + CleanupStack::PushL( self ); + self->ConstructL( NULL, KNullDesC() ); + return self; + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +CMceFileSource::CMceFileSource() + { + iType = KMceFileSource; + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMceFileSource::ConstructL( CMceManager* aManager, + const TFileName& aFileName ) + { + + iFileName = aFileName; + + if ( aManager ) + { + InitializeL( aManager ); + } + + } + + + diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/mustester/Stubs/mceclientstub/src/mceh263codec.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/mustester/Stubs/mceclientstub/src/mceh263codec.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,244 @@ +/* +* Copyright (c) 2006 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: +* +*/ + + +#include "mceh263codec.h" + + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CMceH263Codec::~CMceH263Codec +// ----------------------------------------------------------------------------- +// +EXPORT_C CMceH263Codec::~CMceH263Codec() + { + } + + +// ----------------------------------------------------------------------------- +// CMceH263Codec::NewL +// ----------------------------------------------------------------------------- +// +EXPORT_C CMceH263Codec* CMceH263Codec::NewL( TBuf8 aSdpName ) + { + CMceH263Codec* self = NewLC( aSdpName ); + CleanupStack::Pop( self ); + return self; + } + + +// ----------------------------------------------------------------------------- +// CMceH263Codec::NewL +// ----------------------------------------------------------------------------- +// +EXPORT_C CMceH263Codec* CMceH263Codec::NewLC( TBuf8 aSdpName ) + { + CMceH263Codec* self = new (ELeave) CMceH263Codec(); + CleanupStack::PushL( self ); + self->ConstructL( aSdpName ); + return self; + } + + +// ----------------------------------------------------------------------------- +// CMceH263Codec::SetBitrate +// ----------------------------------------------------------------------------- +// +EXPORT_C TInt CMceH263Codec::SetBitrate(TUint aBitrate) + { + iBitrate = aBitrate; + return KErrNone; + } + + +// ----------------------------------------------------------------------------- +// CMceH263Codec::SetAllowedBitrates +// ----------------------------------------------------------------------------- +// +EXPORT_C TInt CMceH263Codec::SetAllowedBitrates(TUint aBitrates) + { + iAllowedBitrates = aBitrates; + return KErrNone; + } + + +// ----------------------------------------------------------------------------- +// CMceH263Codec::SetCodecMode +// ----------------------------------------------------------------------------- +// +EXPORT_C TInt CMceH263Codec::SetCodecMode(TUint aCodecMode) + { + iCodecMode = aCodecMode; + return KErrNone; + } + + +// ----------------------------------------------------------------------------- +// CMceH263Codec::SetPayloadType +// ----------------------------------------------------------------------------- +// +EXPORT_C TInt CMceH263Codec::SetPayloadType(TUint8 aPayloadType) + { + iPayloadType = aPayloadType; + return KErrNone; + } + + +// ----------------------------------------------------------------------------- +// CMceH263Codec::CloneL +// ----------------------------------------------------------------------------- +// +EXPORT_C CMceVideoCodec* CMceH263Codec::CloneL() const + { + CMceH263Codec* clone = CMceH263Codec::NewLC( iSdpName ); + + if ( iFmtpAttr ) + { + clone->iFmtpAttr = iFmtpAttr->AllocL(); + } + clone->iPayloadType = iPayloadType; + + clone->iBitrate = iBitrate; + clone->iAllowedBitrates = iAllowedBitrates; + clone->iCodecMode = iCodecMode; + clone->iFourCC = iFourCC; + clone->iFrameSize = iFrameSize; + + clone->iFrameRate = iFrameRate; + clone->iMaxBitRate = iMaxBitRate; + clone->iAllowedResolutions = iAllowedResolutions; + clone->iResolutionWidth = iResolutionWidth; + clone->iResolutionHeight = iResolutionHeight; + clone->iAllowedFrameRates = iAllowedFrameRates; + clone->iClockRate = iClockRate; + + CleanupStack::Pop( clone ); + return clone; + } + + +// ----------------------------------------------------------------------------- +// CMceH263Codec:: +// ----------------------------------------------------------------------------- +// +EXPORT_C void CMceH263Codec::SetMaxBitrateL( TUint aMaxBitrate ) + { + iMaxBitRate = aMaxBitrate; + } + + +// ----------------------------------------------------------------------------- +// CMceH263Codec:: +// ----------------------------------------------------------------------------- +// +EXPORT_C void CMceH263Codec::SetAllowedResolutionsL( TUint aResolutions ) + { + iAllowedResolutions = aResolutions; + } + + +// ----------------------------------------------------------------------------- +// CMceH263Codec:: +// ----------------------------------------------------------------------------- +// +EXPORT_C void CMceH263Codec::SetResolutionL( TSize aResolution ) + { + iResolutionWidth = aResolution.iWidth; + iResolutionHeight = aResolution.iHeight; + } + + +// ----------------------------------------------------------------------------- +// CMceH263Codec:: +// ----------------------------------------------------------------------------- +// +EXPORT_C void CMceH263Codec::SetAllowedFrameRatesL( TUint aFrameRates ) + { + iAllowedFrameRates = aFrameRates; + } + + +// ----------------------------------------------------------------------------- +// CMceH263Codec:: +// ----------------------------------------------------------------------------- +// +EXPORT_C void CMceH263Codec::SetFrameRateL( TReal aFrameRate ) + { + iFrameRate = aFrameRate; + } + + +// ----------------------------------------------------------------------------- +// CMceH263Codec::SetPreferredEncodingDecodingDeviceL +// ----------------------------------------------------------------------------- +// +EXPORT_C void CMceH263Codec::SetPreferredEncodingDecodingDeviceL( + TUid /*aEncodingDecodingDevice*/ ) + { + User::Leave( KErrNotSupported ); + } + + +// ----------------------------------------------------------------------------- +// CMceH263Codec::SetConfigKeyL +// ----------------------------------------------------------------------------- +// +EXPORT_C void CMceH263Codec::SetConfigKeyL( const TDesC8& /*aConfigKey*/ ) + { + User::Leave( KErrNotSupported ); + } + + +// ----------------------------------------------------------------------------- +// CMceH263Codec::SetSdpNameL +// ----------------------------------------------------------------------------- +// +void CMceH263Codec::SetSdpNameL( const TDesC8& aSdpName ) + { + __ASSERT_ALWAYS( aSdpName.Length() <= KMceMaxSdpNameLength, + User::Leave( KErrArgument ) ); + iSdpName.Copy( aSdpName ); + } + + +// ----------------------------------------------------------------------------- +// CMceH263Codec::CMceH263Codec +// ----------------------------------------------------------------------------- +// +CMceH263Codec::CMceH263Codec() + :CMceVideoCodec() + { + } + + +// ----------------------------------------------------------------------------- +// CMceH263Codec::ConstructL +// ----------------------------------------------------------------------------- +// +void CMceH263Codec::ConstructL( TBuf8 aSdpName ) + { + iSdpName = aSdpName; + iClockRate = KMceH263ClockRate; + iFrameRate = KMceH263FrameRate; + iResolutionWidth = KMceH263FrameWidth; + iResolutionHeight = KMceH263FrameHeight; + } + + + + diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/mustester/Stubs/mceclientstub/src/mceinsession.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/mustester/Stubs/mceclientstub/src/mceinsession.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,202 @@ +/* +* 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: +* +*/ + + +#include "mceinsession.h" +#include "mcemanager.h" + + + +// CONSTANTS +const TUint32 KMceMinAcceptable = 200; +const TUint32 KMceMaxAcceptable = 299; +const TUint32 KMceMinError = 300; +const TUint32 KMceMaxError = 699; +const TUint32 KMceRinging = 180; +_LIT8( KMcePhraseRinging, "Ringing" ); + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CMceInSession::NewL +// ----------------------------------------------------------------------------- +// +CMceInSession* CMceInSession::NewL( RReadStream& /*aReadStream*/, + CMceManager& aManager, + TUint32 aProfileId ) + { + CMceInSession* self = new (ELeave) CMceInSession( &aManager, aProfileId ); + CleanupStack::PushL( self ); + self->ConstructL( KNullDesC8, KNullDesC8 ); + CleanupStack::Pop(self); + return self; + + } + +// ----------------------------------------------------------------------------- +// CMceInSession::NewL +// ----------------------------------------------------------------------------- +// + +EXPORT_C CMceInSession* CMceInSession::NewL() + { + CMceInSession* self = new (ELeave) CMceInSession( NULL, 0 ); + CleanupStack::PushL( self ); + self->ConstructL( KNullDesC8, KNullDesC8 ); + CleanupStack::Pop( self ); + return self; + } + +// ----------------------------------------------------------------------------- +// CMceInSession::~CMceInSession +// ----------------------------------------------------------------------------- +// +EXPORT_C CMceInSession::~CMceInSession() + { + } + +// ----------------------------------------------------------------------------- +// CMceInSession::RingL +// ----------------------------------------------------------------------------- +// +EXPORT_C void CMceInSession::RingL( CDesC8Array* aHeaders, + HBufC8* aContentType, + HBufC8* aContent ) + { + User::LeaveIfError( + ( aContentType && aContent ) || !( aContentType || aContent ) ? + KErrNone : KErrArgument ); + + delete aHeaders; + delete aContentType; + delete aContent; + + iRingingCalled = ETrue; + } + +// ----------------------------------------------------------------------------- +// CMceInSession::AcceptL +// ----------------------------------------------------------------------------- +// +EXPORT_C void CMceInSession::AcceptL() + { + iState = CMceSession::EAnswering; + } + +// ----------------------------------------------------------------------------- +// CMceInSession::AcceptL +// ----------------------------------------------------------------------------- +// +EXPORT_C void CMceInSession::AcceptL( const TDesC8& /*aReason*/, + TUint32 /*aCode*/, + CDesC8Array* aHeaders, + HBufC8* aContentType, + HBufC8* aContent ) + { + iState = CMceSession::EAnswering; + + delete aHeaders; + delete aContentType; + delete aContent; + } + +// ----------------------------------------------------------------------------- +// CMceInSession::RejectL +// ----------------------------------------------------------------------------- +// +EXPORT_C void CMceInSession::RejectL() + { + if ( iFailWithCode != KErrNone ) + { + TInt failureCode = iFailWithCode; + iFailWithCode = KErrNone; + User::Leave( failureCode ); + } + + iState = CMceSession::ETerminated; + } + +// ----------------------------------------------------------------------------- +// CMceInSession::RejectL +// ----------------------------------------------------------------------------- +// +EXPORT_C void CMceInSession::RejectL( const TDesC8& aReason, + TUint32 aCode, + CDesC8Array* aHeaders, + HBufC8* aContentType, + HBufC8* aContent ) + { + + User::LeaveIfError( + ( aContentType && aContent ) || !( aContentType || aContent ) ? + KErrNone : KErrArgument ); + User::LeaveIfError( aCode >= KMceMinError && aCode <= KMceMaxError ? + KErrNone : KErrArgument ); + + RejectL(); + + iReasonPhrase = aReason; + iReasonCode = aCode; + + delete aHeaders; + delete aContentType; + delete aContent; + } + +// ----------------------------------------------------------------------------- +// CMceInSession::CMceInSession +// ----------------------------------------------------------------------------- +// +CMceInSession::CMceInSession( CMceManager* aManager, TUint32 aProfileId ) + : CMceSession( aManager, aProfileId ) + { + } + + +// ----------------------------------------------------------------------------- +// CMceInSession::ConstructL +// ----------------------------------------------------------------------------- +// +void CMceInSession::ConstructL( const TDesC8& aOriginator, const TDesC8& aRecipient ) + { + + delete iOriginator; + iOriginator = 0; + iOriginator = aOriginator.AllocL(); + + delete iRecipient; + iRecipient = 0; + iRecipient = aRecipient.AllocL(); + + CMceSession::ConstructL(); + + iState = EIncoming; + } + +// ----------------------------------------------------------------------------- +// Stub constructor +// ----------------------------------------------------------------------------- +// +EXPORT_C CMceInSession* CMceInSession::NewL( CMceManager& aManager, + const TDesC8& aOriginator ) + { + CMceInSession* self = new (ELeave) CMceInSession( &aManager, 0 ); + CleanupStack::PushL( self ); + self->ConstructL( aOriginator, KNullDesC8 ); + CleanupStack::Pop( self ); + return self; + } diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/mustester/Stubs/mceclientstub/src/mcemanager.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/mustester/Stubs/mceclientstub/src/mcemanager.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,309 @@ +/* +* 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: +* +*/ + + +#include "mcemanager.h" +#include "mceinsessionobserver.h" +#include "mcesessionobserver.h" +#include "mcesession.h" +#include "mcetransactiondatacontainer.h" +#include "mceamrcodec.h" +#include "mceh263codec.h" +#include "mceavccodec.h" +// Test simulator +#include "mussessionsimulator.h" + +// ============================ MEMBER FUNCTIONS =============================== + + +// ----------------------------------------------------------------------------- +// CMceManager::NewL +// ----------------------------------------------------------------------------- +// +EXPORT_C CMceManager* CMceManager::NewL( + const TUid& aAppUid, + TMceTransactionDataContainer* aContainer ) + { + + CMceManager* self = + new (ELeave) CMceManager( aAppUid, aContainer ); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + return self; + + } + + +// ----------------------------------------------------------------------------- +// CMceManager::~CMceManager +// ----------------------------------------------------------------------------- +// +EXPORT_C CMceManager::~CMceManager() + { + if (iContainer) + { + iContainer->Clear(); + iContainer = 0; + } + + iSessions.Reset(); + iSessions.Close(); + + iSupportedAudioCodecs.ResetAndDestroy(); + iSupportedVideoCodecs.ResetAndDestroy(); + + delete iSessionSimulator; + + } + +// ----------------------------------------------------------------------------- +// CMceManager::SetInSessionObserver +// ----------------------------------------------------------------------------- +// +EXPORT_C void CMceManager::SetInSessionObserver( + MMceInSessionObserver* aInSessionObserver ) + { + iInSessionObserver = aInSessionObserver; + } + +// ----------------------------------------------------------------------------- +// CMceManager::SetInEventObserver +// ----------------------------------------------------------------------------- +// +EXPORT_C void CMceManager::SetInEventObserver( + MMceInEventObserver* /*aInEventObserver*/ ) + { + // NOP + } + +// ----------------------------------------------------------------------------- +// CMceManager::SetInReferObserver +// ----------------------------------------------------------------------------- +// +EXPORT_C void CMceManager::SetInReferObserver( + MMceInReferObserver* /*aInReferObserver*/ ) + { + // NOP + } + +// ----------------------------------------------------------------------------- +// CMceManager::SetSessionObserver +// ----------------------------------------------------------------------------- +// +EXPORT_C void CMceManager::SetSessionObserver( + MMceSessionObserver* aSessionObserver ) + { + iSessionObserver = aSessionObserver; + } + +// ----------------------------------------------------------------------------- +// CMceManager::SetEventObserver +// ----------------------------------------------------------------------------- +// +EXPORT_C void CMceManager::SetEventObserver( + MMceEventObserver* /*aEventObserver*/ ) + { + // NOP + } + +// ----------------------------------------------------------------------------- +// CMceManager::SetReferObserver +// ----------------------------------------------------------------------------- +// +EXPORT_C void CMceManager::SetReferObserver( + MMceReferObserver* /*aReferObserver*/ ) + { + // NOP + } + +// ----------------------------------------------------------------------------- +// CMceManager::SetMediaObserver +// ----------------------------------------------------------------------------- +// +EXPORT_C void CMceManager::SetMediaObserver( + MMceStreamObserver* aMediaObserver ) + { + iMediaObserver = aMediaObserver; + } + + +// ----------------------------------------------------------------------------- +// CMceManager::SetRtpObserver +// ----------------------------------------------------------------------------- +// +EXPORT_C void CMceManager::SetRtpObserver( + MMceRtpObserver* aRtpObserver ) + { + iRtpObserver = aRtpObserver; + } + + +// ----------------------------------------------------------------------------- +// CMceManager::SupportedAudioCodecs +// ----------------------------------------------------------------------------- +// +EXPORT_C const RPointerArray& + CMceManager::SupportedAudioCodecs() const + { + return iSupportedAudioCodecs; + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +EXPORT_C const RPointerArray& + CMceManager::SupportedVideoCodecs() const + { + return iSupportedVideoCodecs; + } + + +// ----------------------------------------------------------------------------- +// CMceManager::Sessions +// ----------------------------------------------------------------------------- +// +EXPORT_C const RPointerArray& CMceManager::Sessions() const + { + return iSessions; + } + + +// ----------------------------------------------------------------------------- +// CMceManager::SetDefaultHeadersL +// ----------------------------------------------------------------------------- +// +EXPORT_C void CMceManager::SetDefaultHeadersL( CDesC8Array* aMethods, + CDesC8Array* aHeaders ) + { + delete aMethods; + delete aHeaders; + } + + +// ----------------------------------------------------------------------------- +// CMceManager::DefaultHeadersL +// ----------------------------------------------------------------------------- +// +EXPORT_C CDesC8Array* CMceManager::DefaultHeadersL( const TDesC8& /*aMethod*/ ) const + { + return NULL; + } + + +// ----------------------------------------------------------------------------- +// CMceManager::InSessionObserver +// ----------------------------------------------------------------------------- +// +MMceInSessionObserver* CMceManager::InSessionObserver() const + { + return iInSessionObserver; + } + + +// ----------------------------------------------------------------------------- +// CMceManager::SessionObserver +// ----------------------------------------------------------------------------- +// +MMceSessionObserver* CMceManager::SessionObserver() const + { + return iSessionObserver; + } + +// ----------------------------------------------------------------------------- +// CMceManager::MediaObserver +// ----------------------------------------------------------------------------- +// +MMceStreamObserver* CMceManager::MediaObserver() const + { + return iMediaObserver; + } + +// ----------------------------------------------------------------------------- +// CMceManager::RtpObserver +// ----------------------------------------------------------------------------- +// +MMceRtpObserver* CMceManager::RtpObserver() const + { + return iRtpObserver; + } + + +// ----------------------------------------------------------------------------- +// CMceManager::TransactionContainer +// ----------------------------------------------------------------------------- +// +TMceTransactionDataContainer* CMceManager::TransactionContainer() const + { + return iContainer; + } + + +// ----------------------------------------------------------------------------- +// CMceManager::CMceManager +// ----------------------------------------------------------------------------- +// +CMceManager::CMceManager( const TUid& /*aAppUid*/, + TMceTransactionDataContainer* aContainer ) + :iContainer( aContainer ) + { + + } + + +// ----------------------------------------------------------------------------- +// CMceManager::ConstructL +// ----------------------------------------------------------------------------- +// +void CMceManager::ConstructL() + { + // Fake having PCMU codec + iSupportedAudioCodecs.AppendL( CMceAmrCodec::NewLC( KMceSDPNamePCMU() ) ); + CleanupStack::Pop(); + + iSupportedAudioCodecs.AppendL( CMceAmrCodec::NewLC( KMceSDPNameAMR() ) ); + CleanupStack::Pop(); + + // Avc codec, level default 1 + iSupportedVideoCodecs.AppendL( CMceAvcCodec::NewLC( KMceSDPNameH264() ) ); + CleanupStack::Pop(); + + // Avc codec, level default 1, no profile id or constraint set defined + CMceVideoCodec* avc_2nd_Level_1 = CMceAvcCodec::NewLC( KMceSDPNameH264() ); + avc_2nd_Level_1->SetAllowedBitrates( KMceAvcBitrateLevel1 ); + iSupportedVideoCodecs.AppendL( avc_2nd_Level_1 ); + CleanupStack::Pop( avc_2nd_Level_1 ); + + // Avc codec, level 1_3 + CMceVideoCodec* avcLevel_1_3 = CMceAvcCodec::NewLC( KMceSDPNameH264() ); + avcLevel_1_3->SetAllowedBitrates( KMceAvcCodecProfileIdBaseline | + KMceAvcCodecProfileIopConstraintSet | + KMceAvcBitrateLevel1_3 ); + iSupportedVideoCodecs.AppendL( avcLevel_1_3 ); + CleanupStack::Pop( avcLevel_1_3 ); + + // H263 codec + iSupportedVideoCodecs.AppendL( CMceH263Codec::NewLC( KMceSDPNameH2632000() ) ); + CleanupStack::Pop(); + + // Test simulator + iSessionSimulator = CMusTestSessionSimulator::NewL( *this ); + } + + diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/mustester/Stubs/mceclientstub/src/mcemediasink.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/mustester/Stubs/mceclientstub/src/mcemediasink.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,117 @@ +/* +* 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: +* +*/ + + +#include "mcemediasink.h" +#include "mcestreamobserver.h" +#include "mcesession.h" +#include "mcemanager.h" + + + +// ============================ MEMBER FUNCTIONS =============================== + + +// ----------------------------------------------------------------------------- +// CMceMediaSink::~CMceMediaSink +// ----------------------------------------------------------------------------- +// +EXPORT_C CMceMediaSink::~CMceMediaSink() + { + } + +// ----------------------------------------------------------------------------- +// CMceMediaSink::Type +// ----------------------------------------------------------------------------- +// +EXPORT_C TMceSinkType CMceMediaSink::Type() const + { + return iType; + } + + + +// ----------------------------------------------------------------------------- +// CMceMediaSink::IsEnabled +// ----------------------------------------------------------------------------- +// +EXPORT_C TBool CMceMediaSink::IsEnabled() const + { + return iIsEnabled; + } + + +// ----------------------------------------------------------------------------- +// CMceMediaSink::CMceMediaSink +// ----------------------------------------------------------------------------- +// +CMceMediaSink::CMceMediaSink() + :iIsEnabled( ETrue ), + iReferenceCount( 0 ) + { + } + + +// ----------------------------------------------------------------------------- +// CMceMediaSink::DoEnableL +// ----------------------------------------------------------------------------- +// +void CMceMediaSink::DoEnableL() + { + iIsEnabled = ETrue; + } + + +// --------------------------------------- -------------------------------------- +// CMceMediaSink::DoDisableL +// ----------------------------------------------------------------------------- +// +void CMceMediaSink::DoDisableL() + { + iIsEnabled = EFalse; + } + + +// ----------------------------------------------------------------------------- +// CMceMediaSink::InitializeL +// ----------------------------------------------------------------------------- +// +void CMceMediaSink::InitializeL( CMceMediaStream& aParent ) + { + iStream = &aParent; + } + + +// ----------------------------------------------------------------------------- +// CMceMediaSink::InitializeL +// ----------------------------------------------------------------------------- +// +void CMceMediaSink::InitializeL( CMceManager* /*aManager*/ ) + { + // NOP + } + + +// ----------------------------------------------------------------------------- +// CMceMediaSink::ReferenceCount +// ----------------------------------------------------------------------------- +// +TInt& CMceMediaSink::ReferenceCount() + { + return iReferenceCount; + } + diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/mustester/Stubs/mceclientstub/src/mcemediasource.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/mustester/Stubs/mceclientstub/src/mcemediasource.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,118 @@ +/* +* 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: +* +*/ + + +#include "mcemediasource.h" +#include "mcesession.h" +#include "mcemanager.h" +#include "mcestreamobserver.h" + + + +#define _FLAT_DATA static_cast( iFlatData ) +#define FLAT_DATA( data ) _FLAT_DATA->data + +// ============================ MEMBER FUNCTIONS =============================== + + +// ----------------------------------------------------------------------------- +// CMceMediaSource::~CMceMediaSource +// ----------------------------------------------------------------------------- +// +EXPORT_C CMceMediaSource::~CMceMediaSource() + { + iStreams.Reset(); + } + +// ----------------------------------------------------------------------------- +// CMceMediaSource::Type +// ----------------------------------------------------------------------------- +// +EXPORT_C TMceSourceType CMceMediaSource::Type() const + { + return iType; + } + + +// ----------------------------------------------------------------------------- +// CMceMediaSource::IsEnabled +// ----------------------------------------------------------------------------- +// +EXPORT_C TBool CMceMediaSource::IsEnabled() const + { + return iIsEnabled; + } + +// ----------------------------------------------------------------------------- +// CMceMediaSource::ReferenceCount +// ----------------------------------------------------------------------------- +// +TInt& CMceMediaSource::ReferenceCount() + { + return iReferenceCount; + } + +// ----------------------------------------------------------------------------- +// CMceMediaSource::CMceMediaSource +// ----------------------------------------------------------------------------- +// +CMceMediaSource::CMceMediaSource() + :iIsEnabled( ETrue ) + { + } + + +// ----------------------------------------------------------------------------- +// CMceMediaSource::InitializeL +// ----------------------------------------------------------------------------- +// +void CMceMediaSource::InitializeL( CMceMediaStream& aParent ) + { + iStreams.AppendL( &aParent ); + + } + + +// ----------------------------------------------------------------------------- +// CMceMediaSource::InitializeL +// ----------------------------------------------------------------------------- +// +void CMceMediaSource::InitializeL( CMceManager* /*aManager*/ ) + { + // NOP + } + + +// ----------------------------------------------------------------------------- +// CMceMediaSource::DoEnableL +// ----------------------------------------------------------------------------- +// +void CMceMediaSource::DoEnableL() + { + iIsEnabled = ETrue; + } + +// ----------------------------------------------------------------------------- +// CMceMediaSource::DoDisableL +// ----------------------------------------------------------------------------- +// +void CMceMediaSource::DoDisableL() + { + + iIsEnabled = EFalse; + + } diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/mustester/Stubs/mceclientstub/src/mcemediastream.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/mustester/Stubs/mceclientstub/src/mcemediastream.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,401 @@ +/* +* 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: +* +*/ + + +#include "mcemediastream.h" +#include "mcesession.h" +#include "mcemanager.h" +#include "mcestreamobserver.h" +#include "mcemediasource.h" +#include "mcemediasink.h" + + + +// ============================ MEMBER FUNCTIONS =============================== + + +// ----------------------------------------------------------------------------- +// CMceMediaStream::~CMceMediaStream +// ----------------------------------------------------------------------------- +// +EXPORT_C CMceMediaStream::~CMceMediaStream() + { + delete iMediaSDPLines; + + if ( iSource ) + { + DeleteSource(); + } + + if ( iLinkOwner ) + { + delete iLinkedStream; + } + + while( iSinks.Count() > 0 ) + { + DeleteSink( 0 ); + } + + iSinks.Reset(); + iSinks.Close(); + + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +EXPORT_C CMceMediaStream::TState CMceMediaStream::State() const + { + return iState; + } + +// ----------------------------------------------------------------------------- +// CMceMediaStream::Type +// ----------------------------------------------------------------------------- +// +EXPORT_C TMceMediaType CMceMediaStream::Type() const + { + return iType; + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +EXPORT_C void CMceMediaStream::SetMediaAttributeLinesL( + CDesC8Array* aMediaSDPLines ) + { + delete iMediaSDPLines; + iMediaSDPLines = aMediaSDPLines; + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +EXPORT_C MDesC8Array* CMceMediaStream::MediaAttributeLinesL() + { + if ( iMediaSDPLines ) + { + CDesC8Array* array = new ( ELeave ) CDesC8ArrayFlat( 1 ); + CleanupStack::PushL( array ); + for ( TInt i = 0; i < iMediaSDPLines->Count(); ++i ) + { + array->AppendL( iMediaSDPLines->MdcaPoint(i) ); + } + CleanupStack::Pop( array ); + return array; + } + + return NULL; + } + +// ----------------------------------------------------------------------------- +// CMceMediaStream::SetStartMediaPort +// ----------------------------------------------------------------------------- +// +EXPORT_C void CMceMediaStream::SetLocalMediaPortL( TUint aLocalMediaPort ) + { + iLocalMediaPort = aLocalMediaPort; + } + +// ----------------------------------------------------------------------------- +// CMceMediaStream::StartMediaPort +// ----------------------------------------------------------------------------- +// +EXPORT_C TUint CMceMediaStream::LocalMediaPort() const + { + return iLocalMediaPort; + } + +// ----------------------------------------------------------------------------- +// CMceMediaStream::Session +// ----------------------------------------------------------------------------- +// +EXPORT_C CMceSession* CMceMediaStream::Session() const + { + return iSession; + } + +// ----------------------------------------------------------------------------- +// CMceMediaStream::EnableL +// ----------------------------------------------------------------------------- +// +EXPORT_C void CMceMediaStream::EnableL() + { + iIsEnabled = ETrue; + } + +// ----------------------------------------------------------------------------- +// CMceMediaStream::DisableL +// ----------------------------------------------------------------------------- +// +EXPORT_C void CMceMediaStream::DisableL() + { + iIsEnabled = EFalse; + } + +// ----------------------------------------------------------------------------- +// CMceMediaStream::IsEnabled +// ----------------------------------------------------------------------------- +// +EXPORT_C TBool CMceMediaStream::IsEnabled() const + { + return iIsEnabled; + } + +// ----------------------------------------------------------------------------- +// CMceMediaStream::SetSourceL +// ----------------------------------------------------------------------------- +// +EXPORT_C void CMceMediaStream::SetSourceL( CMceMediaSource* aSource ) + { + if ( aSource ) + { + aSource->ReferenceCount()++; + } + + if ( iSource ) + { + DeleteSource(); + } + iSource = aSource; + + } + + +// ----------------------------------------------------------------------------- +// CMceMediaStream::AddSinkL +// ----------------------------------------------------------------------------- +// +EXPORT_C void CMceMediaStream::AddSinkL( CMceMediaSink* aSink ) + { + __ASSERT_ALWAYS( aSink, User::Leave( KErrArgument ) ); + iSinks.AppendL( aSink ); + aSink->ReferenceCount()++; + } + + +// ----------------------------------------------------------------------------- +// CMceMediaStream::Source +// ----------------------------------------------------------------------------- +// +EXPORT_C CMceMediaSource* CMceMediaStream::Source() const + { + return iSource; + } + + +// ----------------------------------------------------------------------------- +// CMceMediaStream::Sinks +// ----------------------------------------------------------------------------- +// +EXPORT_C const RPointerArray& CMceMediaStream::Sinks() const + { + return iSinks; + } + + +// ----------------------------------------------------------------------------- +// CMceMediaStream::RemoveSinkL +// ----------------------------------------------------------------------------- +// +EXPORT_C void CMceMediaStream::RemoveSinkL( CMceMediaSink& aSink ) + { + for ( TInt i = 0; i < iSinks.Count(); i++ ) + { + if ( iSinks[i] == &aSink ) + { + DeleteSink( i ); + iSinks.Compress(); + return; + } + } + User::Leave( KErrNotFound ); + } + + + +// ----------------------------------------------------------------------------- +// CMceMediaStream::BindL +// ----------------------------------------------------------------------------- +// +EXPORT_C void CMceMediaStream::BindL( CMceMediaStream* aStream ) + { + + __ASSERT_ALWAYS( !(! iLinkOwner && + iLinkedStream ), + User::Leave( KErrArgument ) ); + + if ( aStream ) + { + iLinkOwner = ETrue; + aStream->DoBindL( this ); + DoBindL( aStream ); + } + else + { + iLinkOwner = EFalse; + delete iLinkedStream; + iLinkedStream = NULL; + } + + } + + +// ----------------------------------------------------------------------------- +// CMceMediaStream::BoundStreamL +// ----------------------------------------------------------------------------- +// +EXPORT_C CMceMediaStream& CMceMediaStream::BoundStreamL() const + { + __ASSERT_ALWAYS( iLinkedStream , User::Leave( KErrNotFound ) ); + + return *iLinkedStream; + + } + + +// ----------------------------------------------------------------------------- +// CMceMediaStream::BoundStream +// ----------------------------------------------------------------------------- +// +EXPORT_C TBool CMceMediaStream::BoundStream() const + { + return iLinkedStream != NULL; + } + +// ----------------------------------------------------------------------------- +// CMceMediaStream::Binder +// ----------------------------------------------------------------------------- +// +TBool CMceMediaStream::Binder() const + { + return iLinkOwner; + } + + +// ----------------------------------------------------------------------------- +// CMceMediaStream::InitializeL +// ----------------------------------------------------------------------------- +// +void CMceMediaStream::InitializeL( CMceSession& aParent ) + { + iSession = &aParent; + + if ( Binder() && BoundStream() ) + { + iLinkedStream->InitializeL( aParent ); + } + + if ( iSource ) + { + iSource->InitializeL( *this ); + } + + for( TInt i = 0; i < iSinks.Count();i++) + { + iSinks[i]->InitializeL( *this ); + } + + } + + +// ----------------------------------------------------------------------------- +// CMceMediaStream::InitializeL +// ----------------------------------------------------------------------------- +// +void CMceMediaStream::InitializeL( CMceManager* aManager ) + { + if ( Binder() && BoundStream() ) + { + iLinkedStream->InitializeL( aManager ); + } + + if ( iSource ) + { + iSource->InitializeL( aManager ); + } + + for( TInt i = 0; i < iSinks.Count();i++) + { + iSinks[i]->InitializeL( aManager ); + } + } + + +// ----------------------------------------------------------------------------- +// CMceMediaStream::CMceMediaStream +// ----------------------------------------------------------------------------- +// +CMceMediaStream::CMceMediaStream() + :iLinkedStream( NULL ), + iSource( NULL ), + iLinkOwner( EFalse ), + iIsEnabled( ETrue ), + iState( CMceMediaStream::EUninitialized ) + { + } + + +// ----------------------------------------------------------------------------- +// CMceMediaStream::DeleteSink +// ----------------------------------------------------------------------------- +// +void CMceMediaStream::DeleteSink( TInt aIndex ) + { + + iSinks[ aIndex ]->ReferenceCount()--; + if ( iSinks[ aIndex ]->ReferenceCount() == 0 ) + { + delete iSinks[ aIndex ]; + } + iSinks.Remove( aIndex ); + + } + +// ----------------------------------------------------------------------------- +// CMceMediaStream::DeleteSource +// ----------------------------------------------------------------------------- +// +void CMceMediaStream::DeleteSource() + { + iSource->ReferenceCount()--; + if ( iSource->ReferenceCount() == 0 ) + { + delete iSource; + } + iSource = NULL; + } + + + +// ----------------------------------------------------------------------------- +// CMceMediaStream::DoBindL +// ----------------------------------------------------------------------------- +// +void CMceMediaStream::DoBindL( CMceMediaStream* aStream ) + { + if ( Session() ) + { + aStream->InitializeL( *Session() ); + } + delete iLinkedStream; + iLinkedStream = aStream; + } diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/mustester/Stubs/mceclientstub/src/mceoutsession.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/mustester/Stubs/mceclientstub/src/mceoutsession.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,191 @@ +/* +* 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: +* +*/ + + +#include +#include +#include "mceoutsession.h" +#include "mcemediastream.h" +#include "mcemanager.h" + + + +// ============================ MEMBER FUNCTIONS =============================== + + +// ----------------------------------------------------------------------------- +// CMceOutSession::NewL +// ----------------------------------------------------------------------------- +// +EXPORT_C CMceOutSession* CMceOutSession::NewL( + CMceManager& aManager, + CSIPProfile& aProfile, + const TDesC8& aRecipient, + HBufC8* aOriginator ) + { + // Check that profile has been registered + TBool profileRegistered = EFalse; + + aProfile.GetParameter( KSIPProfileRegistered, profileRegistered ); + __ASSERT_ALWAYS( profileRegistered, User::Leave( KErrCouldNotConnect ) ); + + CMceOutSession* self = new (ELeave) CMceOutSession( &aManager, 0 ); + CleanupStack::PushL( self ); + self->ConstructL( aRecipient, aOriginator ); + CleanupStack::Pop( self ); + return self; + } + +// ----------------------------------------------------------------------------- +// CMceOutSession::NewL +// ----------------------------------------------------------------------------- +// +EXPORT_C CMceOutSession* CMceOutSession::NewL( CMceEvent& /*aEvent*/ ) + { + return NULL; + } + +// ----------------------------------------------------------------------------- +// CMceOutSession::NewL +// ----------------------------------------------------------------------------- +// +EXPORT_C CMceOutSession* CMceOutSession::NewL( CMceRefer& /*aRefer*/ ) + { + return NULL; + } + +// ----------------------------------------------------------------------------- +// CMceOutSession::NewL +// ----------------------------------------------------------------------------- +// +EXPORT_C CMceOutSession* CMceOutSession::NewL() + { + return new( ELeave )CMceOutSession( NULL, 0 ); + } + +// ----------------------------------------------------------------------------- +// CMceOutSession::~CMceOutSession +// ----------------------------------------------------------------------------- +// +EXPORT_C CMceOutSession::~CMceOutSession() + { + } + + +// ----------------------------------------------------------------------------- +// CMceOutSession::EstablishL +// ----------------------------------------------------------------------------- +// +EXPORT_C void CMceOutSession::EstablishL( + TUint32 aTimeout, + CDesC8Array* aHeaders, + HBufC8* aContentType, + HBufC8* aContent, + CDesC8Array* aContentHeaders ) + { + User::LeaveIfError( State() == EIdle ? KErrNone : KErrNotReady ); + User::LeaveIfError( + ( aContentType && aContent ) || + !( aContentType || aContent || aContentHeaders ) ? + KErrNone : KErrArgument ); + + if ( iFailWithCode != KErrNone ) + { + TInt failCode = iFailWithCode; + iFailWithCode = KErrNone; + User::Leave( failCode ); + } + + iTimeout = aTimeout; + + //start establishing the session + + delete iHeaders; + iHeaders = aHeaders; + delete aContentType; + delete aContent; + delete aContentHeaders; + + iState = CMceSession::EOffering; + } + + +// ----------------------------------------------------------------------------- +// CMceOutSession::AddStreamL +// ----------------------------------------------------------------------------- +// +EXPORT_C void CMceOutSession::AddStreamL( CMceMediaStream* aMediaStream ) + { + if ( iManager ) + { + //initialize stream (to get supported codecs) + aMediaStream->InitializeL( iManager ); + } + else + { + //internalizing => no initialize yet + } + + CMceSession::AddStreamL( aMediaStream ); + } + + +// ----------------------------------------------------------------------------- +// CMceOutSession::CancelL +// ----------------------------------------------------------------------------- +// +EXPORT_C void CMceOutSession::CancelL() + { + User::LeaveIfError( State() != EIdle ? KErrNone : KErrNotReady ); + + iState = CMceSession::ECancelling; + + } + + +// ----------------------------------------------------------------------------- +// CMceOutSession::CMceOutSession +// ----------------------------------------------------------------------------- +// +CMceOutSession::CMceOutSession( CMceManager* aManager, TUint32 aProfileId ) + : CMceSession( aManager, aProfileId ) + { + //NOP + } + +// ----------------------------------------------------------------------------- +// CMceOutSession::ConstructL +// ----------------------------------------------------------------------------- +// +void CMceOutSession::ConstructL( const TDesC8& aRecipient, HBufC8* aOriginator ) + { + delete iRecipient; + iRecipient = NULL; + iRecipient = aRecipient.AllocL(); + + delete iOriginator; + iOriginator = NULL; + if ( aOriginator ) + { + iOriginator = aOriginator->AllocL(); + delete aOriginator; + } + + CMceSession::ConstructL(); + iManager->iSessions.AppendL( this ); + + } diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/mustester/Stubs/mceclientstub/src/mcertpsink.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/mustester/Stubs/mceclientstub/src/mcertpsink.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,152 @@ +/* +* 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: +* +*/ + + +#include "mcertpsink.h" +#include "mcemediastream.h" +#include "mcesession.h" + + +// ============================ MEMBER FUNCTIONS =============================== + + +// ----------------------------------------------------------------------------- +// CMceRtpSink::NewL +// ----------------------------------------------------------------------------- +// +EXPORT_C CMceRtpSink* CMceRtpSink::NewL() + { + CMceRtpSink* self = NewLC(); + CleanupStack::Pop( self ); + return self; + } + + +// ----------------------------------------------------------------------------- +// CMceRtpSink::NewLC +// ----------------------------------------------------------------------------- +// +EXPORT_C CMceRtpSink* CMceRtpSink::NewLC() + { + CMceRtpSink* self = new (ELeave) CMceRtpSink(); + CleanupStack::PushL( self ); + self->ConstructL( EFalse ); + return self; + } + +// ----------------------------------------------------------------------------- +// CMceRtpSink::NewL +// ----------------------------------------------------------------------------- +// +EXPORT_C CMceRtpSink* CMceRtpSink::NewL( TBool aSuppressRTCP, + HBufC8* /*aIdentity*/ ) + { + + CMceRtpSink* self = new (ELeave) CMceRtpSink(); + CleanupStack::PushL( self ); + self->ConstructL( aSuppressRTCP ); + CleanupStack::Pop( self ); + return self; + + } + +// ----------------------------------------------------------------------------- +// CMceRtpSink::~CMceRtpSink +// ----------------------------------------------------------------------------- +// +EXPORT_C CMceRtpSink::~CMceRtpSink() + { + } + +// ----------------------------------------------------------------------------- +// CMceRtpSink::EnableL +// ----------------------------------------------------------------------------- +// +EXPORT_C void CMceRtpSink::EnableL() + { + CMceMediaSink::DoEnableL(); + } + +// ----------------------------------------------------------------------------- +// CMceRtpSink::DisableL +// ----------------------------------------------------------------------------- +// +EXPORT_C void CMceRtpSink::DisableL() + { + CMceMediaSink::DoDisableL(); + } + +// ----------------------------------------------------------------------------- +// CMceRtpSink::SendSRL +// ----------------------------------------------------------------------------- +// +EXPORT_C void CMceRtpSink::SendSRL() + { + __ASSERT_ALWAYS( iStream && + iStream->Session() && + iStream->Session()->State() != CMceSession::EIdle && + iStream->Session()->State() != CMceSession::EIncoming, + User::Leave( KErrNotReady ) ); + // NOP + } + +// ----------------------------------------------------------------------------- +// CMceRtpSink::LastPacket +// ----------------------------------------------------------------------------- +// +EXPORT_C TUint32 CMceRtpSink::LastPacket() const + { + return iLastPacket; + } + +// ----------------------------------------------------------------------------- +// CMceRtpSink::Ssrc +// ----------------------------------------------------------------------------- +// +EXPORT_C TUint32 CMceRtpSink::Ssrc() const + { + return iSSRC; + } + +// ----------------------------------------------------------------------------- +// CMceRtpSink::UpdateL +// ----------------------------------------------------------------------------- +// +EXPORT_C void CMceRtpSink::UpdateL( TBool aSuppressRTCP, + HBufC8* /*aIdentity*/ ) + { + iSuppressRTCP = aSuppressRTCP; + } + +// ----------------------------------------------------------------------------- +// CMceRtpSink::CMceRtpSink +// ----------------------------------------------------------------------------- +// +CMceRtpSink::CMceRtpSink() + : CMceMediaSink() + { + iType = KMceRTPSink; + } + +// ----------------------------------------------------------------------------- +// CMceRtpSink::ConstructL +// ----------------------------------------------------------------------------- +// +void CMceRtpSink::ConstructL( TBool aSuppressRTCP ) + { + iSuppressRTCP = aSuppressRTCP; + } diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/mustester/Stubs/mceclientstub/src/mcertpsource.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/mustester/Stubs/mceclientstub/src/mcertpsource.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,223 @@ +/* +* 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: +* +*/ + + +#include "mcertpsource.h" +#include "mcesession.h" +#include "mcemanager.h" +#include "mcemediastream.h" +#include "mcertpobserver.h" + +#define KMceTIMERDISABLED 0 + + +// ============================ MEMBER FUNCTIONS =============================== + + +// ----------------------------------------------------------------------------- +// CMceRtpSource::NewL +// ----------------------------------------------------------------------------- +// +EXPORT_C CMceRtpSource* CMceRtpSource::NewL( + TUint aBufferLength, + TUint aBufferTreshold, + TUint32 aInactivityTimer, + HBufC8* aIdentity ) + { + CMceRtpSource* self = NewLC( aBufferLength, aBufferTreshold, + aInactivityTimer, aIdentity ); + CleanupStack::Pop( self ); + return self; + } + +// ----------------------------------------------------------------------------- +// CMceRtpSource::NewLC +// ----------------------------------------------------------------------------- +// +EXPORT_C CMceRtpSource* CMceRtpSource::NewLC( + TUint aBufferLength, + TUint aBufferTreshold, + TUint32 aInactivityTimer, + HBufC8* /*aIdentity*/ ) + { + CMceRtpSource* self = new (ELeave) CMceRtpSource(); + CleanupStack::PushL( self ); + self->ConstructL( aBufferLength, aBufferTreshold, + aInactivityTimer, NULL ); + return self; + } + + +// ----------------------------------------------------------------------------- +// CMceRtpSource::~CMceRtpSource +// ----------------------------------------------------------------------------- +// +EXPORT_C CMceRtpSource::~CMceRtpSource() + { + delete iMediaBurstIndicator; + } + +// ----------------------------------------------------------------------------- +// CMceRtpSource::EnableL +// ----------------------------------------------------------------------------- +// +EXPORT_C void CMceRtpSource::EnableL() + { + CMceMediaSource::DoEnableL(); + } + +// ----------------------------------------------------------------------------- +// CMceRtpSource::DisableL +// ----------------------------------------------------------------------------- +// +EXPORT_C void CMceRtpSource::DisableL() + { + CMceMediaSource::DoDisableL(); + } + + +// ----------------------------------------------------------------------------- +// CMceRtpSource::EnableInactivityTimerL +// ----------------------------------------------------------------------------- +// +EXPORT_C void CMceRtpSource::EnableInactivityTimerL( TUint32 aInactivityTimer ) + { + // Simulate MCE's check + if ( iStreams[0] && + iStreams[0]->Session() && + iStreams[0]->Session()->State() != CMceSession::EIdle && + iStreams[0]->Session()->State() != CMceSession::EIncoming ) + { + iInactivityTimer = aInactivityTimer; + } + } + +// ----------------------------------------------------------------------------- +// CMceRtpSource::DisableInactivityTimer +// ----------------------------------------------------------------------------- +// +EXPORT_C void CMceRtpSource::DisableInactivityTimerL() + { + iInactivityTimer = KMceTIMERDISABLED; + } + +// ----------------------------------------------------------------------------- +// CMceRtpSource::UpdateL +// ----------------------------------------------------------------------------- +// +EXPORT_C void CMceRtpSource::UpdateL ( + TUint aBufferLength, + TUint aBufferTreshold, + TUint32 aInactivityTimer, + HBufC8* /*aIdentity*/ ) + { + iInactivityTimer = aInactivityTimer; + iBufferLength = aBufferLength; + iBufferTreshold = aBufferTreshold; + } + +// ----------------------------------------------------------------------------- +// CMceRtpSource::SendRRL +// ----------------------------------------------------------------------------- +// +EXPORT_C void CMceRtpSource::SendRRL() + { + __ASSERT_ALWAYS( iStreams[0] && + iStreams[0]->Session() && + iStreams[0]->Session()->State() != CMceSession::EIdle && + iStreams[0]->Session()->State() != CMceSession::EIncoming, + User::Leave( KErrNotReady ) ); + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +EXPORT_C TUint32 CMceRtpSource::Ssrc() const + { + return 0; + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +EXPORT_C const RArray& CMceRtpSource::Ssrcs() const + { + return iSsrcs; + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +EXPORT_C void CMceRtpSource::EnableSsrcL( TUint /*aSsrc*/ ) + { + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +EXPORT_C void CMceRtpSource::DisableSsrcL( TUint /*aSsrc*/ ) + { + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +EXPORT_C TBool CMceRtpSource::IsSsrcEnabledL( TUint /*aSsrc*/ ) + { + return ETrue; + } + + +// ----------------------------------------------------------------------------- +// CMceRtpSource::CMceRtpSource +// ----------------------------------------------------------------------------- +// +CMceRtpSource::CMceRtpSource() + : CMceMediaSource() + { + iType = KMceRTPSource; + } + + +// ----------------------------------------------------------------------------- +// CMceRtpSource::ConstructL +// ----------------------------------------------------------------------------- +// +void CMceRtpSource::ConstructL( + TUint aBufferLength, + TUint aBufferTreshold, + TUint32 aInactivityTimer, + HBufC8* aMediaBurstIndicator ) + { + + iInactivityTimer = aInactivityTimer; + iBufferLength = aBufferLength; + iBufferTreshold = aBufferTreshold; + iMediaBurstIndicator = aMediaBurstIndicator; + + } + diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/mustester/Stubs/mceclientstub/src/mcesession.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/mustester/Stubs/mceclientstub/src/mcesession.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,413 @@ +/* +* 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: +* +*/ + + +#include "mcesession.h" +//#include "mceinsession.h" +#include "mcemanager.h" +#include "mcestreambundle.h" +#include "mcemediastream.h" +#include "mceinsessionobserver.h" +#include "mcesessionobserver.h" +#include "mcestreamobserver.h" +#include "mcertpobserver.h" +#include "mcetransactiondatacontainer.h" +#include "mussessionsimulator.h" + + +// ============================ MEMBER FUNCTIONS =============================== + + +// ----------------------------------------------------------------------------- +// CMceSession::~CMceSession +// ----------------------------------------------------------------------------- +// +EXPORT_C CMceSession::~CMceSession() + { + delete iHeaders; + delete iSessionSDPLines; + + delete iOriginator; + delete iRecipient; + iMediaStreams.ResetAndDestroy(); + iBundles.ResetAndDestroy(); + + } + + +// ----------------------------------------------------------------------------- +// CMceSession::State +// ----------------------------------------------------------------------------- +// +EXPORT_C CMceSession::TState CMceSession::State() const + { + return iState; + } + + +// ----------------------------------------------------------------------------- +// CMceSession::ConnectionActive +// ----------------------------------------------------------------------------- +// +EXPORT_C TBool CMceSession::ConnectionActive() const + { + return iIsConnectionActive; + } + + +// ----------------------------------------------------------------------------- +// CMceSession::RemoveStreamL +// ----------------------------------------------------------------------------- +// +EXPORT_C void CMceSession::RemoveStreamL( CMceMediaStream& aMediaStream ) + { + for ( TInt i = 0; i < iMediaStreams.Count(); ++i ) + { + if ( &aMediaStream == iMediaStreams[i] ) + { + delete iMediaStreams[i]; + iMediaStreams.Remove( i ); + return; + } + } + + User::Leave( KErrNotFound ); + } + + +// ----------------------------------------------------------------------------- +// CMceSession::AddStreamL +// ----------------------------------------------------------------------------- +// +EXPORT_C void CMceSession::AddStreamL( CMceMediaStream* aMediaStream ) + { + User::LeaveIfError( iMediaStreams.Find( aMediaStream ) != KErrNotFound ? + KErrArgument : KErrNone ); + + aMediaStream->InitializeL( *this ); // Initialize before taking ownership + + iMediaStreams.AppendL( aMediaStream ); + + } + + +// ----------------------------------------------------------------------------- +// CMceSession::UpdateL +// ----------------------------------------------------------------------------- +// +EXPORT_C void CMceSession::UpdateL( + TUint32 aTimeout, + CDesC8Array* aHeaders, + HBufC8* aContentType, + HBufC8* aContent, + CDesC8Array* aContentHeaders ) + { + User::LeaveIfError( iState != EIdle ? KErrNone : KErrNotReady ); + User::LeaveIfError( + ( aContentType && aContent ) || + !( aContentType || aContent || aContentHeaders ) ? + KErrNone : KErrArgument ); + + // Leave if in incoming state givem too small timeout value + User::LeaveIfError( !( aTimeout > 0 && State() == CMceSession::EIncoming ) || + aTimeout <= SessionTimer() ? KErrNone : KErrArgument ); + + InitializeL(); + + iTimeout = aTimeout; + + delete iHeaders; + iHeaders = aHeaders; + delete aContentType; + delete aContentHeaders; + + if ( iState == EIncoming ) + { + iState = EReserving; + RestartSimulator(); + } + else + { + iState = EOffering; + } + } + +// ----------------------------------------------------------------------------- +// CMceSession::InitializeL +// ----------------------------------------------------------------------------- +// +/* +void CMceSession::InitializeL() + { + for(int i=0; iInitializeL( *this ); + } + } + */ + + +// ----------------------------------------------------------------------------- +// CMceSession::TerminateL +// ----------------------------------------------------------------------------- +// +EXPORT_C void CMceSession::TerminateL( CDesC8Array* aHeaders, + HBufC8* aContentType, + HBufC8* aContent ) + { + __ASSERT_ALWAYS( iState != CMceSession::EIdle, User::Leave( KErrNotReady ) ); + + delete iHeaders; + iHeaders = aHeaders; + delete aContentType; + delete aContent; + + iState = CMceSession::ETerminating; + RestartSimulator(); + + + } + + +// ----------------------------------------------------------------------------- +// CMceSession::Streams +// ----------------------------------------------------------------------------- +// +EXPORT_C const RPointerArray& CMceSession::Streams() const + { + return iMediaStreams; + } + + +// ----------------------------------------------------------------------------- +// CMceSession::Recipient +// ----------------------------------------------------------------------------- +// +EXPORT_C const TDesC8& CMceSession::Recipient() const + { + return *iRecipient; + } + +// ----------------------------------------------------------------------------- +// CMceSession::Originator +// ----------------------------------------------------------------------------- +// +EXPORT_C const TDesC8& CMceSession::Originator() const + { + return *iOriginator; + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +EXPORT_C void CMceSession::SetSessionSDPLinesL( CDesC8Array* aSessionSDPLines ) + { + delete iSessionSDPLines; + iSessionSDPLines = aSessionSDPLines; + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +EXPORT_C MDesC8Array* CMceSession::SessionSDPLinesL() + { + if ( iSessionSDPLines ) + { + CDesC8Array* array = new ( ELeave ) CDesC8ArrayFlat( 1 ); + CleanupStack::PushL( array ); + for ( TInt i = 0; i < iSessionSDPLines->Count(); ++i ) + { + array->AppendL( iSessionSDPLines->MdcaPoint(i) ); + } + CleanupStack::Pop( array ); + return array; + } + + return NULL; + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +EXPORT_C TUint32 CMceSession::SessionTimer() const + { + return iTimeout; + } + +// ----------------------------------------------------------------------------- +// CMceSession::AddBundleL +// ----------------------------------------------------------------------------- +// +EXPORT_C void CMceSession::AddBundleL( CMceStreamBundle* aBundle ) + { + iBundles.AppendL( aBundle ); + } + +// ----------------------------------------------------------------------------- +// CMceSession::RemoveBundleL +// ----------------------------------------------------------------------------- +// +EXPORT_C void CMceSession::RemoveBundleL( CMceStreamBundle& aBundle ) + { + TInt index = iBundles.Find( &aBundle ); + User::LeaveIfError( index ); + iBundles.Remove( index ); + } + +// ----------------------------------------------------------------------------- +// CMceSession::Bundles +// ----------------------------------------------------------------------------- +// +EXPORT_C const RPointerArray< CMceStreamBundle >& CMceSession::Bundles() const + { + return iBundles; + } + +// ----------------------------------------------------------------------------- +// CMceSession::GetModifierL +// ----------------------------------------------------------------------------- +// +EXPORT_C void CMceSession::GetModifierL( TMceSessionModifier aModifier, + TUint& aValue ) const + { + if ( aModifier == KMcePreconditions ) + { + if ( iForceInternetSignaling ) + { + aValue = KMcePreconditionsNotUsed; + } + else + { + aValue = KMcePreconditionsSupported; + } + return; + } + User::Leave( KErrNotFound ); + } + +// ----------------------------------------------------------------------------- +// CMceSession::SetModifierL +// ----------------------------------------------------------------------------- +// +EXPORT_C void CMceSession::SetModifierL( TMceSessionModifier aModifier, + TUint aValue ) + { + if ( aModifier == KMcePreconditions ) + { + if ( aValue == KMcePreconditionsNotUsed ) + { + iForceInternetSignaling = ETrue; + } + else + { + iForceInternetSignaling = EFalse; + } + return; + } + else if ( aModifier == KMce100Rel ) + { + if ( aValue >= 0 && aValue <= 2 ) + { + i100RelUsage = aValue; + return; + } + } + User::LeaveIfError( KErrNotSupported ); + } + +// ----------------------------------------------------------------------------- +// CMceSession::Profile +// ----------------------------------------------------------------------------- +// +EXPORT_C TUint32 CMceSession::Profile() const + { + return iProfileId; + } + +// ----------------------------------------------------------------------------- +// CMceSession::CMceSession +// ----------------------------------------------------------------------------- +// +CMceSession::CMceSession( CMceManager* aManager, TUint32 aProfileId ) + : iProfileId( aProfileId ), + iManager( aManager ), + iState( CMceSession::EIdle), + iIsConnectionActive( ETrue ), + iForceInternetSignaling( EFalse ), + i100RelUsage( 1 ), // MCE default + iFailWithCode( KErrNone ), + iReasonPhrase( KNullDesC8() ), + iReasonCode( 0 ) + { + } + + +// ----------------------------------------------------------------------------- +// CMceSession::Manager +// ----------------------------------------------------------------------------- +// +CMceManager& CMceSession::Manager() const + { + return *iManager; + } + + +// ----------------------------------------------------------------------------- +// CMceSession::ConstructL +// ----------------------------------------------------------------------------- +// +void CMceSession::ConstructL() + { + + } + +// ----------------------------------------------------------------------------- +// CMceSession::InitializeL +// ----------------------------------------------------------------------------- +// +void CMceSession::InitializeL() + { + for (int i=0; iInitializeL( *this ); + } + + /* + for(int i=0; iInitializeL( *this ); + } + */ + } + + +// ----------------------------------------------------------------------------- +// CMceSession::RestartSimulator +// ----------------------------------------------------------------------------- +// +void CMceSession::RestartSimulator() + { + if( iManager->iSessionSimulator->IsRunning()) + { + iManager->iSessionSimulator->Stop(); + } + iManager->iSessionSimulator->StartL(); + } + diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/mustester/Stubs/mceclientstub/src/mcespeakersink.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/mustester/Stubs/mceclientstub/src/mcespeakersink.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,175 @@ +/* +* 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: +* +*/ + + +#include "mcespeakersink.h" +#include "mcesession.h" +#include "mcemediastream.h" + + +// ============================ MEMBER FUNCTIONS =============================== + +const TInt KMceMaxVolume = 10; + +// ----------------------------------------------------------------------------- +// CMceSpeakerSink::NewL +// ----------------------------------------------------------------------------- +// +EXPORT_C CMceSpeakerSink* CMceSpeakerSink::NewL() + { + CMceSpeakerSink* self = NewLC(); + CleanupStack::Pop( self ); + return self; + + } + +// ----------------------------------------------------------------------------- +// CMceSpeakerSink::NewLC +// ----------------------------------------------------------------------------- +// +EXPORT_C CMceSpeakerSink* CMceSpeakerSink::NewLC() + { + CMceSpeakerSink* self = new (ELeave) CMceSpeakerSink(); + CleanupStack::PushL( self ); + self->ConstructL(); + return self; + + } + +// ----------------------------------------------------------------------------- +// CMceSpeakerSink::~CMceSpeakerSink +// ----------------------------------------------------------------------------- +// +EXPORT_C CMceSpeakerSink::~CMceSpeakerSink() + { + } + +// ----------------------------------------------------------------------------- +// CMceSpeakerSink::EnableL +// ----------------------------------------------------------------------------- +// +EXPORT_C void CMceSpeakerSink::EnableL() + { + CMceMediaSink::DoEnableL(); + } + +// ----------------------------------------------------------------------------- +// CMceSpeakerSink::Disable +// ----------------------------------------------------------------------------- +// +EXPORT_C void CMceSpeakerSink::DisableL() + { + CMceMediaSink::DoDisableL(); + } + +// ----------------------------------------------------------------------------- +// CMceSpeakerSink::SetVolumeL +// ----------------------------------------------------------------------------- +// +EXPORT_C void CMceSpeakerSink::SetVolumeL(TInt aVolume) + { + __ASSERT_ALWAYS( iStream && + iStream->Session() && + iStream->Session()->State() != CMceSession::EIdle && + iStream->Session()->State() != CMceSession::EIncoming, + User::Leave( KErrNotReady ) ); + + __ASSERT_ALWAYS( aVolume <= MaxVolumeL() && + aVolume > 0, + User::Leave( KErrArgument ) ); + iVolume = aVolume; + } + +// ----------------------------------------------------------------------------- +// CMceSpeakerSink::VolumeL +// ----------------------------------------------------------------------------- +// +EXPORT_C TInt CMceSpeakerSink::VolumeL() const + { + __ASSERT_ALWAYS( iStream && + iStream->Session() && + iStream->Session()->State() != CMceSession::EIdle && + iStream->Session()->State() != CMceSession::EIncoming, + User::Leave( KErrNotReady ) ); + + return iVolume; + } + +// ----------------------------------------------------------------------------- +// CMceSpeakerSink::MaxVolumeL +// ----------------------------------------------------------------------------- +// +EXPORT_C TInt CMceSpeakerSink::MaxVolumeL() const + { + __ASSERT_ALWAYS( iStream && + iStream->Session() && + iStream->Session()->State() != CMceSession::EIdle && + iStream->Session()->State() != CMceSession::EIncoming, + User::Leave( KErrNotReady ) ); + + return iMaxVolume; + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +EXPORT_C void CMceSpeakerSink::SetRoutingL( TInt aRoute ) + { + __ASSERT_ALWAYS( iStream && + iStream->Session() && + iStream->Session()->State() != CMceSession::EIdle && + iStream->Session()->State() != CMceSession::EIncoming, + User::Leave( KErrNotReady ) ); + + iAudioRouting = aRoute; + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +EXPORT_C TInt CMceSpeakerSink::RoutingL() const + { + __ASSERT_ALWAYS( iStream && + iStream->Session() && + iStream->Session()->State() != CMceSession::EIdle && + iStream->Session()->State() != CMceSession::EIncoming, + User::Leave( KErrNotReady ) ); + + return iAudioRouting; + } + +// ----------------------------------------------------------------------------- +// CMceSpeakerSink::CMceSpeakerSink +// ----------------------------------------------------------------------------- +// +CMceSpeakerSink::CMceSpeakerSink() + { + iType = KMceSpeakerSink; + iMaxVolume = KMceMaxVolume; + } + +// ----------------------------------------------------------------------------- +// CMceSpeakerSink::ConstructL +// ----------------------------------------------------------------------------- +// +void CMceSpeakerSink::ConstructL() + { + } + + diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/mustester/Stubs/mceclientstub/src/mcestreambundle.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/mustester/Stubs/mceclientstub/src/mcestreambundle.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,124 @@ +/* +* 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: +* +*/ + + +#include "mcestreambundle.h" +#include "mcesession.h" + + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CMceStreamBundle::NewL +// ----------------------------------------------------------------------------- +// +EXPORT_C CMceStreamBundle* CMceStreamBundle::NewL( TMceStreamBundleType aType ) + { + CMceStreamBundle* self = NewLC( aType ); + CleanupStack::Pop( self ); + return self; + + } + +// ----------------------------------------------------------------------------- +// CMceStreamBundle::NewLC +// ----------------------------------------------------------------------------- +// +EXPORT_C CMceStreamBundle* CMceStreamBundle::NewLC( TMceStreamBundleType aType ) + { + CMceStreamBundle* self = new (ELeave) CMceStreamBundle(); + CleanupStack::PushL( self ); + self->ConstructL( aType ); + return self; + } + +// ----------------------------------------------------------------------------- +// CMceStreamBundle::~CMceStreamBundle +// ----------------------------------------------------------------------------- +// +EXPORT_C CMceStreamBundle::~CMceStreamBundle() + { + iStreams.Close(); + iTempStreams.Close(); + } + +// ----------------------------------------------------------------------------- +// CMceStreamBundle::Type +// ----------------------------------------------------------------------------- +// +EXPORT_C CMceStreamBundle::TMceStreamBundleType CMceStreamBundle::Type() const + { + return iBundleType; + } + +// ----------------------------------------------------------------------------- +// CMceStreamBundle::AddStreamL +// ----------------------------------------------------------------------------- +// +EXPORT_C void CMceStreamBundle::AddStreamL( CMceMediaStream& aStream ) + { + iStreams.AppendL( &aStream ); + } + +// ----------------------------------------------------------------------------- +// CMceStreamBundle::RemoveStreamL +// ----------------------------------------------------------------------------- +// +EXPORT_C void CMceStreamBundle::RemoveStreamL( CMceMediaStream& aStream ) + { + TInt index = iStreams.Find( &aStream ); + User::LeaveIfError( index ); + iStreams.Remove( index ); + } + +// ----------------------------------------------------------------------------- +// CMceStreamBundle::Streams +// ----------------------------------------------------------------------------- +// +EXPORT_C const RPointerArray< CMceMediaStream >& CMceStreamBundle::Streams() + { + return iStreams; + } + + +// ----------------------------------------------------------------------------- +// CMceStreamBundle::InitializeL +// ----------------------------------------------------------------------------- +// +void CMceStreamBundle::InitializeL( CMceSession& aParent ) + { + iSession = &aParent; + } + +// ----------------------------------------------------------------------------- +// CMceStreamBundle::CMceStreamBundle +// ----------------------------------------------------------------------------- +// +CMceStreamBundle::CMceStreamBundle() + { + } + +// ----------------------------------------------------------------------------- +// CMceStreamBundle::ConstructL +// ----------------------------------------------------------------------------- +// +void CMceStreamBundle::ConstructL( CMceStreamBundle::TMceStreamBundleType aType ) + { + iBundleType = aType; + + } + diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/mustester/Stubs/mceclientstub/src/mcetransactiondatacontainer.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/mustester/Stubs/mceclientstub/src/mcetransactiondatacontainer.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,181 @@ +/* +* Copyright (c) 2002-2004 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: +* +*/ + + +#include "mcetransactiondatacontainer.h" + + +// ============================ MEMBER FUNCTIONS =============================== + + +// ----------------------------------------------------------------------------- +// TMceTransactionDataContainer::GetStatusCode +// ----------------------------------------------------------------------------- +// +EXPORT_C TMceTransactionDataContainer::TMceTransactionDataContainer() : + iStatusCode(0), + iReasonPhrase(0), + iHeaders(0), + iContentType(0), + iContentHeaders(0), + iContent(0) + { + } + +// ----------------------------------------------------------------------------- +// TMceTransactionDataContainer::GetStatusCode +// ----------------------------------------------------------------------------- +// +EXPORT_C TInt TMceTransactionDataContainer::GetStatusCode() + { + TInt tmpStatusCode = iStatusCode; + iStatusCode = 0; + return tmpStatusCode; + } + +// ----------------------------------------------------------------------------- +// TMceTransactionDataContainer::GetReasonPhrase +// ----------------------------------------------------------------------------- +// +EXPORT_C HBufC8* TMceTransactionDataContainer::GetReasonPhrase() + { + HBufC8* tmpReasonPhrase = iReasonPhrase; + iReasonPhrase = 0; + return tmpReasonPhrase; + } + +// ----------------------------------------------------------------------------- +// TMceTransactionDataContainer::GetHeaders +// ----------------------------------------------------------------------------- +// +EXPORT_C CDesC8Array* TMceTransactionDataContainer::GetHeaders() + { + CDesC8Array* tmpHeaders = iHeaders; + iHeaders = 0; + return tmpHeaders; + } + +// ----------------------------------------------------------------------------- +// TMceTransactionDataContainer::GetContentType +// ----------------------------------------------------------------------------- +// +EXPORT_C HBufC8* TMceTransactionDataContainer::GetContentType() + { + HBufC8* tmpContentType = iContentType; + iContentType = 0; + return tmpContentType; + } + +// ----------------------------------------------------------------------------- +// TMceTransactionDataContainer::GetHeaders +// ----------------------------------------------------------------------------- +// +EXPORT_C CDesC8Array* TMceTransactionDataContainer::GetContentHeaders() + { + CDesC8Array* tmpHeaders = iContentHeaders; + iContentHeaders = 0; + return tmpHeaders; + } + +// ----------------------------------------------------------------------------- +// TMceTransactionDataContainer::GetContent +// ----------------------------------------------------------------------------- +// +EXPORT_C HBufC8* TMceTransactionDataContainer::GetContent() + { + HBufC8* tmpContent = iContent; + iContent = 0; + return tmpContent; + } + +// ----------------------------------------------------------------------------- +// TMceTransactionDataContainer::SetStatusCode +// ----------------------------------------------------------------------------- +// +EXPORT_C void TMceTransactionDataContainer::SetStatusCode( TInt aStatusCode) + { + iStatusCode = aStatusCode; + } + +// ----------------------------------------------------------------------------- +// TMceTransactionDataContainer::SetReasonPhrase +// ----------------------------------------------------------------------------- +// +EXPORT_C void TMceTransactionDataContainer::SetReasonPhrase( HBufC8* aReasonPhrase ) + { + delete iReasonPhrase; + iReasonPhrase = aReasonPhrase; + } + +// ----------------------------------------------------------------------------- +// TMceTransactionDataContainer::SetHeaders +// ----------------------------------------------------------------------------- +// +EXPORT_C void TMceTransactionDataContainer::SetHeaders( CDesC8Array* aHeaders ) + { + delete iHeaders; + iHeaders = aHeaders; + } + +// ----------------------------------------------------------------------------- +// TMceTransactionDataContainer::SetContentType +// ----------------------------------------------------------------------------- +// +EXPORT_C void TMceTransactionDataContainer::SetContentType( HBufC8* aContentType ) + { + delete iContentType; + iContentType = aContentType; + } + +// ----------------------------------------------------------------------------- +// TMceTransactionDataContainer::SetContent +// ----------------------------------------------------------------------------- +// +EXPORT_C void TMceTransactionDataContainer::SetContent( HBufC8* aContent ) + { + delete iContent; + iContent = aContent; + } + +// ----------------------------------------------------------------------------- +// TMceTransactionDataContainer::SetContentHeaders +// ----------------------------------------------------------------------------- +// +EXPORT_C void TMceTransactionDataContainer::SetContentHeaders( CDesC8Array* aHeaders ) + { + delete iContentHeaders; + iContentHeaders = aHeaders; + } + +// ----------------------------------------------------------------------------- +// TMceTransactionDataContainer::Clear +// ----------------------------------------------------------------------------- +// +EXPORT_C void TMceTransactionDataContainer::Clear() + { + iStatusCode = 0; + delete iReasonPhrase; + iReasonPhrase = 0; + delete iHeaders; + iHeaders = 0; + delete iContentType; + iContentType = 0; + delete iContentHeaders; + iContentHeaders = 0; + delete iContent; + iContent = 0; + } diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/mustester/Stubs/mceclientstub/src/mcevideocodec.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/mustester/Stubs/mceclientstub/src/mcevideocodec.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,158 @@ +/* +* 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: +* +*/ + + +#include "mcevideocodec.h" + +// Avc config keys for all the . +// Getter is not virtual so keys must be returned from base class and +// the level values defined in mceavccodec.h are redefined. +_LIT8( KMceStubAvcBitrateLevel1ConfigKey, "TestTextForAvcBrL1Level" ); +_LIT8( KMceStubAvcBitrateLevel1bConfigKey, "TestTextForAvcBrL1bLevel" ); +_LIT8( KMceStubAvcBitrateLevel1_1ConfigKey, "TestTextForAvcBrL1_1Level" ); +_LIT8( KMceStubAvcBitrateLevel1_2ConfigKey, "TestTextForAvcBrL1_2Level" ); +_LIT8( KMceStubAvcBitrateLevel1_3ConfigKey, "TestTextForAvcBrL1_3Level" ); +_LIT8( KMceStubAvcBitrateLevel2ConfigKey, "TestTextForAvcBrL2Level" ); +const TUint KMceStubAvcBitrateLevel1 = 0x0001; +const TUint KMceStubAvcBitrateLevel1b = 0x0002; +const TUint KMceStubAvcBitrateLevel1_1 = 0x0004; +const TUint KMceStubAvcBitrateLevel1_2 = 0x0008; +const TUint KMceStubAvcBitrateLevel1_3 = 0x0010; +const TUint KMceStubAvcBitrateLevel2 = 0x0020; + +// ============================ MEMBER FUNCTIONS =============================== + + +// ----------------------------------------------------------------------------- +// CMceVideoCodec::~CMceVideoCodec +// ----------------------------------------------------------------------------- +// +CMceVideoCodec::~CMceVideoCodec() + { + delete iConfigKey; + } + + +// ----------------------------------------------------------------------------- +// CMceVideoCodec::AllowedFrameRates +// ----------------------------------------------------------------------------- +// +EXPORT_C TUint CMceVideoCodec::AllowedFrameRates() const + { + return iAllowedFrameRates; + } + + +// ----------------------------------------------------------------------------- +// CMceVideoCodec::FrameRate +// ----------------------------------------------------------------------------- +// +EXPORT_C TReal CMceVideoCodec::FrameRate() const + { + return iFrameRate; + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +EXPORT_C HBufC8* CMceVideoCodec::ConfigKeyL() const + { + HBufC8* configKey = NULL; + + if ( iConfigKey ) + { + configKey = iConfigKey->AllocL(); + } + + if ( !configKey && SdpName() == KMceSDPNameH264() ) + { + if ( AllowedBitrates() & KMceStubAvcBitrateLevel1 ) + { + configKey = KMceStubAvcBitrateLevel1ConfigKey().AllocL(); + } + else if ( AllowedBitrates() & KMceStubAvcBitrateLevel1b ) + { + configKey = KMceStubAvcBitrateLevel1bConfigKey().AllocL(); + } + else if ( AllowedBitrates() & KMceStubAvcBitrateLevel1_1 ) + { + configKey = KMceStubAvcBitrateLevel1_1ConfigKey().AllocL(); + } + else if ( AllowedBitrates() & KMceStubAvcBitrateLevel1_2 ) + { + configKey = KMceStubAvcBitrateLevel1_2ConfigKey().AllocL(); + } + else if ( AllowedBitrates() & KMceStubAvcBitrateLevel1_3 ) + { + configKey = KMceStubAvcBitrateLevel1_3ConfigKey().AllocL(); + } + else if ( AllowedBitrates() & KMceStubAvcBitrateLevel2 ) + { + configKey = KMceStubAvcBitrateLevel2ConfigKey().AllocL(); + } + else + { + User::Leave( KErrNotFound ); + } + } + + return configKey; + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +EXPORT_C TUint CMceVideoCodec::MaxBitRate() const + { + return iMaxBitRate; + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +EXPORT_C TUint CMceVideoCodec::AllowedResolutions() const + { + return iAllowedResolutions; + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +EXPORT_C TSize CMceVideoCodec::Resolution() const + { + return TSize( iResolutionWidth, + iResolutionHeight ); + } + + +// ----------------------------------------------------------------------------- +// CMceVideoCodec::CMceVideoCodec +// ----------------------------------------------------------------------------- +// +CMceVideoCodec::CMceVideoCodec() + { + iType = KMceVideoCodec; + } + diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/mustester/Stubs/mceclientstub/src/mcevideostream.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/mustester/Stubs/mceclientstub/src/mcevideostream.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,231 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ +#include "mcevideostream.h" +#include "mcevideocodec.h" +#include "mcesession.h" +#include "mcemanager.h" +#include "mcefilesource.h" +#include "mcemediasink.h" +#include "mcecamerasource.h" +//#include "mcertpsource.h" +#include "mcertpsink.h" +#include "mcedisplaysink.h" +#include "mceh263codec.h" + +#define _FLAT_DATA static_cast( iFlatData ) + + + + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// Factory method +// ----------------------------------------------------------------------------- +// +EXPORT_C CMceVideoStream* CMceVideoStream::NewL() + { + CMceVideoStream* self = CMceVideoStream::NewLC(); + CleanupStack::Pop( self ); + return self; + } + +// ----------------------------------------------------------------------------- +// Factory method +// Leaves instance on CleanupStack. +// ----------------------------------------------------------------------------- +// +EXPORT_C CMceVideoStream* CMceVideoStream::NewLC() + { + CMceVideoStream* self = new (ELeave) CMceVideoStream(); + CleanupStack::PushL( self ); + self->ConstructL(); + return self; + } + + +// ----------------------------------------------------------------------------- +// Destructor. +// ----------------------------------------------------------------------------- +// +EXPORT_C CMceVideoStream::~CMceVideoStream() + { + iCodecs.ResetAndDestroy(); + iSupportedVideoCodecs.ResetAndDestroy(); + } + + +// ----------------------------------------------------------------------------- +// Returns codec. +// Returns the codecs available to the session. +// ----------------------------------------------------------------------------- +// +EXPORT_C const RPointerArray& CMceVideoStream::Codecs() + { + return iCodecs; + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +EXPORT_C void CMceVideoStream::AddCodecL( CMceVideoCodec* aCodec ) + { + __ASSERT_ALWAYS(aCodec, User::Leave(KErrArgument)); + iCodecs.AppendL(aCodec); + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +EXPORT_C void CMceVideoStream::RemoveCodecL( CMceVideoCodec& aCodec ) + { + for(int i = 0; i < iCodecs.Count(); i++ ) + { + if( iCodecs[i] == &aCodec ) + { + delete iCodecs[i]; + iCodecs.Remove( i ); + } + } + } + + +// ----------------------------------------------------------------------------- +// NOT IMPLEMENTED YET +// ----------------------------------------------------------------------------- +// +EXPORT_C void CMceVideoStream::ReplaceCodecsL( RPointerArray* /*aCodecs*/ ) + { + User::Leave( KErrNotSupported ); + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +EXPORT_C const RPointerArray& + CMceVideoStream::SupportedVideoCodecs() const + { + return iSupportedVideoCodecs; + } + + +// ----------------------------------------------------------------------------- +// CMceVideoStream::InitializeL +// ----------------------------------------------------------------------------- +// +void CMceVideoStream::InitializeL( CMceSession& aParent ) + { + CMceMediaStream::InitializeL( aParent ); + + InitializeL( &aParent.Manager() ); + + for( TInt i = 0; i < iCodecs.Count(); i++ ) + { + iCodecs[i]->InitializeL( *this ); + } + } + + +// ----------------------------------------------------------------------------- +// CMceVideoStream::InitializeL +// ----------------------------------------------------------------------------- +// +void CMceVideoStream::InitializeL( CMceManager* aManager ) + { + CMceMediaStream::InitializeL( aManager ); + if ( aManager && iCodecs.Count() == 0 ) + { + const RPointerArray supportedCodecs = + aManager->SupportedVideoCodecs(); + + TBool fileCodecAdded( EFalse ); + for( TInt i = 0; i < supportedCodecs.Count() && !fileCodecAdded; i++ ) + { + if ( iSource && iSource->Type() == KMceFileSource ) + { + // Fake codec using file name + CMceFileSource* fileSource = + static_cast(iSource); + TBuf8<256*2> fileName; + fileName.Copy( fileSource->iFileName ); + const TDesC8& currentCodecName( supportedCodecs[i]->SdpName() ); + + if ( ( fileName.FindF( KMceSDPNameH264() ) >= 0 && + currentCodecName.FindF( KMceSDPNameH264() ) >= 0 || + ( fileName.FindF( KMceSDPNameH263() ) >= 0 && + currentCodecName.FindF( KMceSDPNameH263() ) >= 0 ) ) ) + { + CMceVideoCodec* codec = supportedCodecs[i]->CloneL(); + CleanupStack::PushL( codec ); + iCodecs.AppendL( codec ); + CleanupStack::Pop( codec ); + iState = EInitialized; + fileCodecAdded = ETrue; + } + else + { + iState = ETranscodingRequired; + } + + } + else + { + CMceVideoCodec* codec = supportedCodecs[i]->CloneL(); + CleanupStack::PushL( codec ); + iCodecs.AppendL( codec ); + CleanupStack::Pop( codec ); + } + } + } + } + + +// ----------------------------------------------------------------------------- +// CMceVideoStream::IsAllowedCombination +// ----------------------------------------------------------------------------- +// +TBool CMceVideoStream::IsAllowedCombination() + { + return ETrue; + } + + +// ----------------------------------------------------------------------------- +// Default C++ constructor. +// ----------------------------------------------------------------------------- +// +CMceVideoStream::CMceVideoStream() + :CMceMediaStream() + { + iType = KMceVideo; + } + + +// ----------------------------------------------------------------------------- +// Symbian 2nd phase constructor. +// ----------------------------------------------------------------------------- +// +void CMceVideoStream::ConstructL() + { + } + diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/mustester/Stubs/mceclientstub/src/mussessionsimulator.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/mustester/Stubs/mceclientstub/src/mussessionsimulator.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,330 @@ +/* +* 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: +* +*/ + +#include +#include +#include +#include +#include +#include +#include "mceinsessionobserver.h" +#include "mcesessionobserver.h" +#include "mussessionsimulator.h" +#include "muslogger.h" +#include +#include "mussessionproperties.h" + + + +TInt KDuration = 60*1; + +// ============================ MEMBER FUNCTIONS =============================== + + +// ----------------------------------------------------------------------------- +// CMceManager::NewL +// ----------------------------------------------------------------------------- +// +CMusTestSessionSimulator* CMusTestSessionSimulator::NewL( CMceManager& aManager) + { + + CMusTestSessionSimulator* self = + new (ELeave) CMusTestSessionSimulator( aManager ); + CleanupStack::PushL( self ); + self->ConstructL( ); + CleanupStack::Pop( self ); + return self; + } + +// ----------------------------------------------------------------------------- +// CMceManager::~CMceManager +// ----------------------------------------------------------------------------- +// + +CMusTestSessionSimulator::CMusTestSessionSimulator( CMceManager& aManager ) + :iManager(aManager) + { + + } + +// ----------------------------------------------------------------------------- +// CMceManager::~CMceManager +// ----------------------------------------------------------------------------- +// +void CMusTestSessionSimulator::ConstructL( ) + { + iTimer = CMusTestTimer::NewL(CActive::EPriorityStandard, *this); + SimulateReceiveSession(); + StartL(); + } + +// ----------------------------------------------------------------------------- +// Callback implementation when the timer activity happens in the CMusTestTimer class +// ----------------------------------------------------------------------------- +// +void CMusTestSessionSimulator::StartL() + { + TTimeIntervalMicroSeconds32 someInterVal(KDuration); //you can call After/At/Inactivity depending on what you want to do + iTimer->After(someInterVal); + } + +// ----------------------------------------------------------------------------- +// Callback implementation when the timer activity happens in the CMusTestTimer class +// ----------------------------------------------------------------------------- +// +TBool CMusTestSessionSimulator::IsRunning() + { + return iTimer->IsActive(); + } + +// ----------------------------------------------------------------------------- +// Callback implementation when the timer activity happens in the CMusTestTimer class +// ----------------------------------------------------------------------------- +// +void CMusTestSessionSimulator::Stop( ) + { + iTimer->Cancel(); + } + +// ----------------------------------------------------------------------------- +// Callback implementation when the timer activity happens in the CMusTestTimer class +// ----------------------------------------------------------------------------- +// +void CMusTestSessionSimulator::TimerExpired(TAny* aTimer,TInt aError) + { + if(aError == KErrNone) + { + // Timer successfully completed, handle it + CMusTestTimer* timer = (CMusTestTimer*)aTimer; + MUS_LOG("CMusTestSessionSimulator TimerExipired Change the state") + StateChangeL(); + if( (iManager.iSessions[0]->iState == CMceSession::EEstablished )|| + ( iManager.iSessions[0]->iState == CMceSession::EIncoming ) + ) + { + timer->Cancel(); + } + else + { + TTimeIntervalSeconds seconds(KDuration); + timer->Inactivity(seconds); //Notify inactivity after 10 seconds + } + } + } + +// ----------------------------------------------------------------------------- +// Simulates Receive Session +// ----------------------------------------------------------------------------- +// +void CMusTestSessionSimulator::SimulateReceiveSession() + { + MUS_LOG("CMusTestSessionSimulator::SimulateReceiveSession ->") + TInt usecase; + TInt err = RProperty::Get( NMusSessionApi::KCategoryUid, NMusSessionApi::KUseCase, usecase); + if( err == KErrNone ) + { + if( usecase == MultimediaSharing::EMusReceive || usecase == MultimediaSharing::EMusReceiveTwoWayVideo ) + { + MUS_LOG("CMusTestSessionSimulator::SimulateReceiveSession receive session ") + CMceInSession* inSession = CMceInSession::NewL(); + inSession->iState = CMceSession::EIncoming; + iManager.iSessions.AppendL( inSession ); + ibIncoming = ETrue; + } + else + { + ibIncoming = EFalse; + } + } + else + { + MUS_LOG1("CMusTestSessionSimulator::SimulateReceiveSession err = %d ",err) + } + MUS_LOG("CMusTestSessionSimulator::SimulateReceiveSession <-") + } +// ----------------------------------------------------------------------------- +// CMceManager::~CMceManager +// ----------------------------------------------------------------------------- +// +void CMusTestSessionSimulator::StateChangeL() + { + MUS_LOG("CMusTestSessionSimulator::StateChangeL ->") + TMceTransactionDataContainer* container = new TMceTransactionDataContainer(); + HBufC8* resonPharase = _L8("OK").AllocL(); ; + TInt statusCode = 200; + switch( iManager.iSessions[0]->iState ) + { + case CMceSession::EIdle : // offering + statusCode = 180; + delete resonPharase; + resonPharase = _L8("Ringing").AllocL(); + iManager.iSessions[0]->iState = CMceSession::EOffering; + MUS_LOG("CMusTestSessionSimulator Session state : Offering 180") + break; + case CMceSession::EOffering : // estabilished + case CMceSession::EAnswering : // estabilished + delete resonPharase; + resonPharase = _L8("OK").AllocL(); + iManager.iSessions[0]->iState = CMceSession::EEstablished; + MUS_LOG("CMusTestSessionSimulator Session state : Answering") + break; + case CMceSession::EEstablished : // estabilished + delete resonPharase; + resonPharase = _L8("OK").AllocL(); + MUS_LOG("CMusTestSessionSimulator Session state : Estabilished") + break; + case CMceSession::ETerminating : // estabilished + delete resonPharase; + resonPharase = _L8("OK").AllocL(); + iManager.iSessions[0]->iState = CMceSession::ETerminated; + MUS_LOG("CMusTestSessionSimulator Session state : Terminated") + break; + case CMceSession::EIncoming : // estabilished + // handled down + break; + case CMceSession::EProceeding : // estabilished + iManager.iSessions[0]->iState = CMceSession::EAnswering; + MUS_LOG("CMusTestSessionSimulator Session state : Proceeding"); + break; + case CMceSession::EReserving : // estabilished + iManager.iSessions[0]->iState = CMceSession::EProceeding; + MUS_LOG("CMusTestSessionSimulator Session state : Reserving") + default: + break; + } + if( iManager.iSessions[0]->iState == CMceSession::EIncoming ) + { + MUS_LOG("CMusTestSessionSimulator Session state : Incoming") + if( iManager.iSessionObserver && container ) + { + CMceInSession* session = ( CMceInSession* ) iManager.iSessions[0]; + if( session ) + { + MUS_LOG("CMusTestSessionSimulator Calling InComingSession") + iManager.iInSessionObserver->IncomingSession( session , container ); + iManager.iSessions[0]->iState = CMceSession::EReserving; + } + } + else + { + MUS_LOG("CMusTestSessionSimulator insessionobserver empty ") + } + } + else + { + MUS_LOG("CMusTestSessionSimulator Session state : Inform Session state") + container->SetStatusCode(statusCode); + container->SetReasonPhrase( resonPharase ); + if( iManager.iSessionObserver && container ) + { + MUS_LOG("CMusTestSessionSimulator Calling SessionStateChanged") + if( iManager.iSessions.Count() > 0 ) + { + CMceSession* session = iManager.iSessions[0]; + if( session ) + { + iManager.iSessionObserver->SessionStateChanged( *session ,container); + } + else + { + MUS_LOG("CMusTestSessionSimulator session empty ") + } + } + else + { + MUS_LOG("CMusTestSessionSimulator No Session found ") + } + } + else + { + MUS_LOG("CMusTestSessionSimulator Invalid pointer") + } + } + delete container; + MUS_LOG("CMusTestSessionSimulator::StateChangeL <-") + } + +// ----------------------------------------------------------------------------- +// CMceManager::~CMceManager +// ----------------------------------------------------------------------------- +// +EXPORT_C CMusTestSessionSimulator::~CMusTestSessionSimulator() + { + Stop(); + delete iTimer; + } + +//-------------------------------------------------------------------------------- +// Timer implementation +//-------------------------------------------------------------------------------- +// +CMusTestTimer::CMusTestTimer(const TInt aPriority,MTimerNotify& aNotify) +:CActive(aPriority),iNotify(aNotify) +{ +} + +CMusTestTimer::~CMusTestTimer() +{ + Cancel(); + iTimer.Close(); +} + +CMusTestTimer* CMusTestTimer::NewL(const TInt aPriority,MTimerNotify& aNotify) +{ + CMusTestTimer* me = new (ELeave) CMusTestTimer(aPriority,aNotify); + CleanupStack::PushL(me); + me->ConstructL(); + CleanupStack::Pop(); + return me; +} + +void CMusTestTimer::ConstructL(void) +{ + CActiveScheduler::Add(this); + iTimer.CreateLocal(); +} + +void CMusTestTimer::After(TTimeIntervalMicroSeconds32 aInterval) +{ + Cancel(); + iTimer.After(iStatus,aInterval); + SetActive(); +} + +void CMusTestTimer::At(const TTime& aTime) +{ + Cancel(); + iTimer.At(iStatus,aTime); + SetActive(); +} + +void CMusTestTimer::Inactivity(TTimeIntervalSeconds aSeconds) +{ + Cancel(); + iTimer.Inactivity(iStatus,aSeconds); + SetActive(); +} + +void CMusTestTimer::DoCancel() +{ + iTimer.Cancel(); +} + +void CMusTestTimer::RunL() +{ + iNotify.TimerExpired(this,iStatus.Int()); +} diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/mustester/Stubs/mceclientstub/src/staticdllentry.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/mustester/Stubs/mceclientstub/src/staticdllentry.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,37 @@ +/* +* 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: +* +*/ + + + +#include + + +// Bullseye reguires following entry point +#ifdef _BullseyeCoverage +GLDEF_C int __stdcall __E32Dll(void*, unsigned, void*) + { + return 0; + } +#else +#ifndef EKA2 +// Starting point of the DLL (Removed in EKA2) +GLDEF_C TInt E32Dll(TDllReason) + { + return(KErrNone); + } +#endif +#endif // _BullseyeCoverage diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/mustester/Stubs/sipclientstub/group/sipclient.mmp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/mustester/Stubs/sipclientstub/group/sipclient.mmp Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,50 @@ +/* +* Copyright (c) 2006-2006 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: Definition of project MceClientStub +* +*/ + + +// To get the APP_LAYER_SYSTEMINCLUDE-definition +#include + +#include + +TARGET sipclient.dll +TARGETTYPE dll +UID 0x1000008d 0x00000112 // Experimental UID + +CAPABILITY CAP_GENERAL_DLL +VENDORID VID_DEFAULT + +SOURCEPATH ../src +SOURCE Csipconnection.cpp + SOURCE CSIPMessageElements.cpp + SOURCE CSIPRequestElements.cpp + SOURCE CSIPResponseElements.cpp + SOURCE Csipservertransaction.cpp + SOURCE Csiptransactionbase.cpp + SOURCE CSipSseTestTls.cpp + + +USERINCLUDE ../inc + +// Default system include paths for application layer modules. +APP_LAYER_SYSTEMINCLUDE + +LIBRARY euser.lib +LIBRARY bafl.lib +LIBRARY sipcodec.lib + +EXPORTUNFROZEN \ No newline at end of file diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/mustester/Stubs/sipclientstub/inc/CSipSseTestTls.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/mustester/Stubs/sipclientstub/inc/CSipSseTestTls.h Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,180 @@ +/* +* 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: +* +*/ + + + +#ifndef CSIPSSETESTTLS_H +#define CSIPSSETESTTLS_H + +#include +#include +#include +#include + +#include +#include + +class CSIPMessageElements; +class CSIPResponseElements; +class RStringF; +class CSdpDocument; +class CSsfInvitation; +class TRequestStatus; +class CConnMonEventBase; +class CSIPRequestElements; + +//class CTelephony; +//class MSIPProfileRegistryObserver; + +// STUB stuff + +typedef TInt TSIPProfileBehavior; +const TSIPProfileBehavior KRegistryLeaveAtConstruct = 1; +const TSIPProfileBehavior KSIPProfileIdFetchFails = 2; +const TSIPProfileBehavior KSIPIapIdFetchFails = 3; +const TSIPProfileBehavior KSIPConnectionLeaveAtConstruct = 4; + +class CSipSseTestTls : public CBase + { + +public: + + static void OpenL(); + + static void Close(); + + static CSipSseTestTls* Storage(); + + ~CSipSseTestTls(); + + void Reset(); + + TInt Set(TUint32 aKey, TInt aValue); + + TInt Get(TUint32 aKey, TInt& aValue); + + void SetError( TInt aError ); + + TInt Error() const; + + void Clear(); + + void SetRequestStatus( TRequestStatus& iStatus ); + + TBool RegisterStatus(); + + void SetRegisterStatus( TBool aStatus ); + + TBool RegisterSent(); + + void StoreRegistry( MSIPProfileRegistryObserver& aRegistry ); + + //RCommMon + TInt ConnectionCount(); + + void SetConnectionCount( TInt aCount ); + + void ConnectionInfo( const TUint& aIndex, + TUint& aConnectionId, + TUint& aSubConnectionCount ); + + void SetConnectionInfo( TUint aConnectionId, + TUint aSubConnectionCount ); + + void GetUintAttribute( const TUint aConnectionId, + const TUint aSubConnectionId, + const TUint aAttribute, + TUint& aValue, + TRequestStatus& aStatus ); + + void SetUintAttribute( const TUint aConnectionId, + const TUint aSubConnectionId, + const TUint aAttribute, + TUint aValue, + TRequestStatus& aStatus ); + + void GetIntAttribute( const TUint aConnectionId, + const TUint aSubConnectionId, + const TUint aAttribute, + TInt& aValue, + TRequestStatus& aStatus ); + + void SetIntAttribute( const TUint aConnectionId, + const TUint aSubConnectionId, + const TUint aAttribute, + TInt aValue, + TRequestStatus& aStatus ); + + void SetEvent(const CConnMonEventBase& aConnMonEvent ); + + + const CConnMonEventBase& Event(); + + + void SetRegistrationStatus( RMobilePhone::TMobilePhoneRegistrationStatus aRegStatus ); + void SetRegistrationStatus( RMobilePhone::TMobilePhoneRegistrationStatus* aRegStatus ); + + void RegistrationStatus( RMobilePhone::TMobilePhoneRegistrationStatus& aReqStatus ); + + void SetPhoneNetworkModeStatus( RMobilePhone::TMobilePhoneNetworkMode aStatus ); + + RMobilePhone::TMobilePhoneNetworkMode& PhoneNetworkModeStatus(); + + void ClientRequest( CSIPRequestElements* aRequest ); + void ClientResponse( RStringF aMethod, CSIPResponseElements* aResponse ); + +private: + + CSipSseTestTls(); + +public://data + + // Stubs leave/return this error + TInt iError; + static TBool iSipRegisterStatus; + MSIPProfileRegistryObserver* iRegistry; + //RCommMon + TInt iConnectionCount; + //ConnectionInfo + TUint iConnectionId; + TUint iSubConnectionCount; + //UintAttribute + TUint iUintAttributeValue; + //UintAttribute + TUint iIntAttributeValue; + TRequestStatus iRequestStatus; + CConnMonEventBase* iConnMonEventBase; + + RMobilePhone::TMobilePhoneRegistrationStatus iPhoneRegistrationStatus; + RMobilePhone::TMobilePhoneRegistrationStatus* iPhoneRegistrationStatusPointer; + RMobilePhone::TMobilePhoneNetworkMode iPhoneNetworkMode; + + CSIPRequestElements* iClientRequest; + RStringF iResponseToRequest; + CSIPResponseElements* iClientResponse; + RArray iKeys; + RArray iValues; + TSIPProfileBehavior iRegistryBehavior; + TSIPProfileBehavior iProfileBehavior; + TSIPProfileBehavior iConnectionBehavior; + }; + + + +#endif + +// End of File diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/mustester/Stubs/sipclientstub/inc/sipconnection.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/mustester/Stubs/sipclientstub/inc/sipconnection.h Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,573 @@ +/* +* Copyright (c) 2003 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: +* +*/ + + +#ifndef CSIPCONNECTION_H +#define CSIPCONNECTION_H + +// INCLUDES +#include +#include + +// FORWARD DECLARATIONS +class CSIP; +class MSIPConnectionObserver; +class CSIPTransactionBase; +class CSIPClientTransaction; +class CSIPServerTransaction; +class MSIPRegistrationContext; +class CSIPRegistrationBinding; +class CRegistrationState; +class CSIPDialog; +class CDialogState; +class CSIPRefresh; +class CSIPMessageElements; +class CSIPRequestElements; +class CSIPResponseElements; +class CSIPClientConnectionObserver; +class CConnectionCallback; +class CSIPClientConnection; + + +//CONSTANTS +/** SIP minimum value for the expiration in seconds*/ +//const TUint KSIPMinExpirationValue=60; + + +// CLASS DECLARATION + +/** +* Class for monitoring connection's state and sending SIP requests outside +* the dialog associations.Class must not be used +* -for sending requests to which received non-failure response creates a dialog +* -for sending requests that must be sent within SIP dialog +* Note that the user can have only one instance of the class per same IAP-id +*/ +class CSIPConnection : + public CBase + { + public: + + /** Connection states */ + enum TState + { + /** Connection initializing */ + EInit=1, + /** Connection active */ + EActive, + /** Connection suspended */ + ESuspended, + /** Connection is inactive */ + EInactive, + /** Connection is permanently unavailable */ + EUnavailable + }; + + public: // Constructors and destructor + + /** + * Two-phased constructor. + * @param aSip a handle to the SIP server + * @param aIapId IAP-id + * @param aObserver a observer for receiving asynchonous events on this + * connection + * @return New object, ownership is transferred + */ + + IMPORT_C static CSIPConnection* + NewL(CSIP& aSIP, + TUint32 aIapId, + MSIPConnectionObserver& aObserver); + + + /** + * Two-phased constructor. + * Constructs an object and adds the pointer to the cleanup stack; + * @param aSip a handle to the SIP server + * @param aIapId IAP-id + * @param aObserver a observer for receiving asynchonous events on this + * connection + * @return New object, ownership is transferred + */ + + IMPORT_C static CSIPConnection* + NewLC(CSIP& aSIP, + TUint32 aIapId, + MSIPConnectionObserver& aObserver); + + + /** + * Destructor + */ + + IMPORT_C ~CSIPConnection(); + + public: // New functions + + /** + * Gets current state of the connection + * @return current state of the connection + */ + + IMPORT_C TState State() const; + + /** + * Creates SIP request and sends it to the given destination. + * The function must not be used with SIP requests that creates + * SIP dialog associations or must be sent within SIP dialog + * association. + * This provokes the Non-invite state machine. + * This function must be used if the user has created the + * registration binding. + * @pre State() == EActive. + * @pre aContext.IsContextActive()==ETrue + * @param aElements contains local and remote addresses, + * optional SIP message headers and body. + * The ownership is transferred. + * @param aContext defines outbound proxy to be used. If the user + * does not provide from-address it will be constucted using + * user's AOR used during the registration. + * @return SIP client transaction, ownership is transferred + */ + + IMPORT_C CSIPClientTransaction* + SendRequestL(CSIPRequestElements* aElements, + const MSIPRegistrationContext& aContext); + + + /** + * Creates SIP request and sends it to the given destination. + * The function must not be used with SIP request that creates + * SIP dialog associations or must be sent within SIP diallog + * association. + * This provokes the Non-invite state machine. + * This function must be used if the user has created the + * registration binding. + * @pre State() == EActive. + * @pre aContext.IsContextActive()==ETrue + * @param aElements contains local and remote addresses, + * optional SIP message headers and body. + * The ownership is transferred. + * @param aContext defines outbound proxy to be used. If the user + * does not provide from-address it will + * be constucted using user's AOR used during the registration. + * @param aRefresh defines the refresh interval for this transaction. + * @return SIP client transaction, ownership is transferred + */ + + IMPORT_C CSIPClientTransaction* + SendRequestL(CSIPRequestElements* aElements, + const MSIPRegistrationContext& aContext, + CSIPRefresh& aRefresh); + + + /** + * Creates SIP request and sends it to the given destination. + * The function must not be used with SIP request that creates SIP + * diallog associations or must be sent within SIP dialog association. + * This invokes the Non-invite state machine. + * @pre State() == EActive. + * @pre aElements.FromHeader() != 0 + * @param aElements contains local and remote addresses, + * optional SIP message headers and body. + * The ownership is transferred. + * @return SIP client transaction, ownership is transferred + */ + + IMPORT_C CSIPClientTransaction* + SendRequestL(CSIPRequestElements* aElements); + + + /** + * Creates SIP request and sends it to the given destination. + * The function must not be used with SIP request that creates SIP + * dialog associations or must be sent within SIP dialog association. + * This invokes the Non-invite state machine. + * @pre State() == EActive. + * @pre aElements.FromHeader() != 0 + * @param aElements contains local and remote addresses, + * optional SIP message headers and body. + * The ownership is transferred. + * @param aRefresh indicates that transaction will be refreshed + * @return SIP client transaction, ownership is transferred + */ + + IMPORT_C CSIPClientTransaction* + SendRequestL(CSIPRequestElements* aElements, + CSIPRefresh& aRefresh); + + + /** + * Creates SIP REGISTER request and sends it to the given destination. + * User must no define any Contact or Expires-headers + * in the provided elements. + * @pre State() == EActive + * @pre aElements != 0 + * @pre aElements->Method().DesC().Length()==0 + * @param aElements contains local and remote addresses, optional SIP + * message headers and body. User must not set any expires values + * to aElements. The ownership is transferred. + * @return SIP REGISTER client transaction, ownership is transferred + */ + + IMPORT_C CSIPClientTransaction* + FetchRegistrationsL(CSIPRequestElements* aElements); + + // Not in real SIP API: + IMPORT_C void SetState(TState aState); + + //TODO:SHOULD THIS NEW FUNCTION BE INCLUDED INTO STUB??? + /** + * Gets Iap-id used for this connection + * @return Iap-id + */ + + IMPORT_C TUint32 IapId() const; + + + /** + * Gets SIP server handle + * @return handle to SIP server, or 0-pointer if SIP server does not + * exist any more + */ + IMPORT_C CSIP* SIP(); + + /** + * Gets SIP server handle + * @return handle to SIP server, or 0-pointer if SIP server does not + * exist any more + */ + + IMPORT_C const CSIP* SIP() const; + //TODO:ENDS + + /** + * Incoming request outside dialog has been received. + * + * @param aTransaction Server transaction. Ownership is transferred. + */ + + void IncomingRequestL(CSIPServerTransaction* aTransaction) const; + + /** + * Gets the local IP address of this CSIPConnection + * that is used by the SIP implementation. + * The user should re-new the call whenever the connection state changes + * to the CSIPConnection::EActive in order to verify the correctness of + * the previously retrieved local IP address. The local IP address might + * be different as a result of the connection state change. + * @pre State() == CSIPConnection::EActive + * @param aAddr on return filled with local IP address + * @leave a system-wide error code + */ + IMPORT_C void GetLocalAddrL(TInetAddr& aAddr) const; + + + /** + * Incoming request within dialog has been received. + * + * @param aTransaction Server transaction. Ownership is transferred. + * @param aDialogId Identifies the dialog to which the transaction + * belongs to. + */ + + void IncomingDialogRequestL(CSIPServerTransaction* aTransaction, + TUint32 aDialogId); + + void IncomingResponseL(CSIPResponseElements* aElements, + TUint32 aRequestId) const; + + void IncomingRegistrationResponseL(CSIPResponseElements* aElements, + TUint32 aRequestId, + TUint32 aRegistrationId) const; + + void IncomingRefreshResponseL(CSIPResponseElements* aElements, + TUint32 aRequestId, + TUint32 aRefreshId); + + + void ErrorOccured(TInt aError, TUint32 aRequestId) const; + + void RefreshErrorOccured(TInt aError, TUint32 aRefreshId) const; + + void RegistrationErrorOccured(TInt aError, + TUint32 aRegistrationId, + TUint32 aRequestId) const; + + void DialogErrorOccured(TInt aError, + TUint32 aDialogId, + TUint32 aRequestId) const; + + void DialogErrorOccured(TInt aError, + TUint32 aDialogId, + TUint32 aRefreshId, + TUint32 aRequestId) const; + + void ConnectionStateChanged(CSIPConnection::TState aState); + + void InviteCompleted(TUint32 aRequestId) const; + + + /** + * Searches for a transaction with the matching aRequestId. + * @param aRequestId RequestId associated with the transaction + * @return Found transaction or NULL if not found. Ownership is not + * transferred. + */ + + CSIPTransactionBase* FindTransaction(TUint32 aRequestId) const; + + + TInt AddRegistration(CSIPRegistrationBinding* aRegistration); + void RemoveRegistration(const CSIPRegistrationBinding* aRegistration); + + + /** + * Searches for a registration binding, using aRegistrationId and + * aRequestId as keys. Registration might not yet have received + * RegistrationId from SIP client, so the aRequestId may be needed to + * locate the registration binding. + * @param aRegistrationId RegistrationId of the registration binding + * @param aRequestId RequestId of a transaction associated with the + * registration + * @return Found registration binding or NULL if not found. + * Ownership is not transferred. + */ + + CSIPRegistrationBinding* FindRegistration(TUint32 aRegistrationId, + TUint32 aRequestId) const; + + + TInt AddDialog(CSIPDialog* aDialog); + void RemoveDialog(const CSIPDialog* aDialog); + + + /** + * Searches for a dialog, using aRequestId as a key. + * @param aRequestId RequestId of a transaction associated with the + * dialog + * @return Found dialog or NULL if not found. Ownership is not + * transferred. + */ + + CSIPDialog* FindDialogByRequestId(TUint32 aRequestId) const; + + + /** + * Informs CSIPConnection that the associated CSIP instance has been + * deleted. After this the CSIPConnection object can't be used anymore. + */ + + void CSIPDeleted(); + + + /** + * Obtains the initial state for registration state machine. + * + * @return Initial registration state, ownership is not transferred + */ + + CRegistrationState* InitialRegisterStateL() const; + + + /** + * Obtains the initial state for dialog state machine. + * + * @return Initial dialog state, ownership is not transferred + */ + + CDialogState* InitialDialogStateL() const; + + + /** + * Response related to a dialog has been received. + * + * @param aElements SIP response elements. Ownership is transferred. + * @param aRequestId Identifies the transaction + * @param aDialogId DialogId + * @param aRefreshId NULL if the response is not related to a refresh, + * otherwise the RefreshId. Ownership is not transferred. + */ + + void IncomingResponseToDialogL(CSIPResponseElements* aElements, + TUint32 aRequestId, + TUint32 aDialogId, + TUint32* aRefreshId); + + private: + CSIPConnection(CSIP& aSIP, + TUint32 aIapId, + MSIPConnectionObserver& aObserver); + + void ConstructL(); + + + /** + * Send a SIP request. + * + * @param aElements SIP headers. Ownership is transferred. + * @param aRegistrationId If non-NULL, request will use the outbound + * proxy and some SIP headers from the registration identified by + * aRegistrationId. Ownership is not transferred. + * @param aRefresh If non-NULL, the request will be refreshed. Otherwise + * NULL. Ownership is not transferred. + * @return New transaction. Ownership is transferred. + */ + + CSIPClientTransaction* + SendRequestL(CSIPRequestElements* aElements, + TUint32* aRegistrationId, + CSIPRefresh* aRefresh); + + + /** + * Searches for a refresh and transaction, using aRequestId and + * aRefreshId as keys. + * @param aRequestId RequestId associated with the refreshed transaction + * @param aRefreshId RefreshId associated with the refresh instance + * @param aRefresh OUT: if refresh was found, this pointer is set to the + * refresh instance. Ownership is not transferred. + * @param aTransaction OUT: if transaction was found, this pointer is + * set to the refreshed client transaction. Ownership is not + * transferred. + * @return ETrue if found, EFalse otherwise + */ + + TBool FindRefresh(TUint32 aRequestId, + TUint32 aRefreshId, + CSIPRefresh** aRefresh, + CSIPClientTransaction** aTransaction) const; + + /** + * Searches for a registration binding, using aRequestId as a key. + * @param aRequestId RequestId of a transaction associated with the + * registration binding + * @return Found registration binding or NULL if not found. + * Ownership is not transferred. + */ + + CSIPRegistrationBinding* FindRegistration(TUint32 aRequestId) const; + + + /** + * Searches for a dialog, using aDialogId as a key. + * @param aDialogId DialogId of the dialog. + * @return Found dialog or NULL if not found. Ownership is not + * transferred. + */ + + CSIPDialog* FindDialog(TUint32 aDialogId) const; + + + /** + * A request has been received with a dialogId, but no matching dialog + * exists. + * If the request is NOTIFY, it is stored until a response with the same + * dialogId is received. Then the response is passed to dialog and after + * that all the stored NOTIFY are passed to the same dialog. + * This is needed since NOTIFY can be received before a sent SUBSCRIBE + * receives a response with dialogId. + * + * @param aTransaction Server transaction, ownership is transferred + * @param aDialogId DialogId + */ + + void IncomingRequestBeforeDialogExistsL( + CSIPServerTransaction* aTransaction, + TUint32 aDialogId); + + + /** + * Extracts the oldest stored transaction for the dialog identified by + * aDialogId. + * @param aDialogId DialogId + * @return Server transaction or NULL if no transaction is stored for + * the dialog. Ownership is transferred. + */ + + CSIPServerTransaction* GetStoredTransaction(TUint32 aDialogId); + + + /** + * Checks that CSIP is available for use (not NULL). If iSIP is NULL, + * it means user has deleted a resource needed by CSIPConnection, and + * this function leaves. + */ + + void CheckCSipL() const; + + + /** + * Connection is no longer available. All registrations, dialogs, + * transactions and refreshes using this connection are terminated, but + * not deleted. + */ + + void ConnectionLost(); + + + //The used CSIP instance. CSIPConnection doesn't own the CSIP. + //If this pointer is NULL; it means application has deleted the + //CSIP instance before deleting the CSIPConnection, and this + //CSIPConnection is now useless. + CSIP* iSIP; + + //IAP-id of this connection + TUint32 iIapId; + + //Callback to upper layer + MSIPConnectionObserver& iObserver; + + //Callback receiving events from client + CSIPClientConnectionObserver* iClientConnectionObserver; + + //Connection used by this CSIPConnection instance + CSIPClientConnection* iClientConnection; + + //CSIPConnection doesn't own CSIPRegistrationBindings + RPointerArray iRegistrations; + + //CSIPConnection doesn't delete the CSIPDialog objects. CSIPDialog + //deletes itself when its last dialog association is deleted. + //NOTE: When CSIPDialog has just been created and has no dialog + //associations yet, it must be stored in CleanupStack, otherwise it + //won't be freed if leave occurs! + RPointerArray iDialogs; + + //CSIPConnection has to know which transactions are attached to it, but + //it doesn't own the transactions. Transaction's ownership is passed + //to application. + RPointerArray iTransactions; + + //Standalone refreshes, application owns these + RPointerArray iRefreshes; + + //To avoid using callbacks to MSIPConnectionObserver from within + //CSIPRegistrationBinding and CSIPDialog, CConnectionCallback is passed to + //the methods which would need to use MSIPConnectionObserver calls. + //CSIPRegistrationBinding and CSIPDialog will fill CConnectionCallback with + //the selected callback method and its parameters, and by returning + //ETrue they tell to CSIPConnection that a callback has to be done. + CConnectionCallback* iCallbackInfo; + + + // Not in real SIP API + TState iState; + }; + +#endif + diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/mustester/Stubs/sipclientstub/inc/sipmessageelements.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/mustester/Stubs/sipclientstub/inc/sipmessageelements.h Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,173 @@ +/* +* 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: +* +*/ + + +#ifndef CSIPMESSAGEELEMENTS_H +#define CSIPMESSAGEELEMENTS_H + +// INCLUDES +#include +#include +#include +#include "_sipcodecdefs.h" + +#ifdef SWIS_UNIT_TEST +#undef IMPORT_C +#define IMPORT_C +#endif + +// FORWARD DECLARATIONS +class CSIPHeaderBase; +class CSIPContentTypeHeader; +class CSIPFromHeader; +class CSIPToHeader; +class CSIPCSeqHeader; +class CSIPExtensionHeader; + +// CLASS DECLARATION + +/** +* @publishedAll +* +* Class for creation and manipulation optional elements in a SIP message. +* +* Class provides functions for setting and getting optional elements in a +* SIP message. Optional elements include user SIP message headers, +* content and content type. +* Following headers are not considered to be user SIP message headers and +* cannot be set or retrieved using functions of this class: +* "Authentication-Info", "Call-Id", "CSeq", "From" +* "Max-Forwards", "Min-Expires", "Record-Route", +* "Security-Verify", "Service-Route", "To", "Via", "Security-Server", +* "Proxy-Authorization", "Proxy-Authenticate" and "WWW-Authenticate". +* +* @lib sipclient.lib +*/ +class CSIPMessageElements : public CBase + { + public: // Constructors and destructor + /** + * Two-phased constructor. + */ + IMPORT_C static CSIPMessageElements* NewL(); + + /** + * Two-phased constructor. + */ + IMPORT_C static CSIPMessageElements* NewLC(); + + /** + * Destructor. + */ + IMPORT_C ~CSIPMessageElements(); + + public: //new functions + /** + * Sets an array of user headers i.e. headers that user is allowed + * manipulate to a SIP message. An empty array resets the user headers. + * Note that the Content-Type header must be set using SetContentL. + * + * @param aHeaders an array of SIP headers. + * The ownership of objects in the array is transferred. + */ + IMPORT_C void SetUserHeadersL(RPointerArray& aHeaders); + + /** + * Gets all user SIP headers this class contains + * @return SIP headers. Ownership is not transferred. + */ + IMPORT_C const RPointerArray& UserHeaders() const; + + /** + * Sets the SIP message content and its type. + * A zero length content can be set by providing a pointer + * to a zero length HBufC8 instance (the ownership is transferred). + * @pre aContent != 0 && aContentType != 0 + * @param aContent the content of a SIP message, + * the ownership is transferred + * @param aContentType the SIP message content type, + * the ownership is transferred + * @leave KErrArgument if aContent == 0 or + * aContentType == 0 + */ + IMPORT_C void SetContentL(HBufC8* aContent, + CSIPContentTypeHeader* aContentType); + + /** + * Gets the SIP message content + * @return SIP message content. If content does not exist, an empty + * descriptor is returned. + */ + IMPORT_C const TDesC8& Content() const; + + /** + * Gets the content type + * @return Content-Type-header or a 0-pointer if not present; the ownership + * is not transferred. + */ + IMPORT_C const CSIPContentTypeHeader* ContentType() const; + + /* + * Removes the SIP message content and destroys + * Content-Type header as well. + * @return SIP message content; the ownership is transferred. + */ + IMPORT_C HBufC8* ExtractContent(); + + public: // New functions, for internal use + + static CSIPMessageElements* InternalizeL(RReadStream& aReadStream); + void ExternalizeL(RWriteStream& aWriteStream) const; + TInt UserHeaderCount(RStringF aName) const; + const RPointerArray UserHeadersL(RStringF aName) const; + TInt RemoveHeaders(RStringF aName); + void DetachUserHeader(CSIPHeaderBase* aHeader); + void AddHeaderL(CSIPHeaderBase* aHeader); + void SetToL(CSIPToHeader* aTo); + const CSIPToHeader* To() const; + void SetFromL (CSIPFromHeader* aFrom); + const CSIPFromHeader* From() const; + const CSIPCSeqHeader* CSeq() const; + void SetContent(HBufC8* aContent); + void DetachContent(); + + private: + + CSIPMessageElements(); + void ConstructL(); + void DoInternalizeL(RReadStream& aReadStream); + void CheckUserHeaderL(const CSIPHeaderBase* aHeader) const; + void ExternalizeUserHeadersL(RWriteStream& aWriteStream) const; + void ExternalizeL(const CSIPExtensionHeader* aHeader, + RWriteStream& aWriteStream) const; + + private: // Data + + RPointerArray iUserHeaders; + HBufC8* iContent; + CSIPFromHeader* iFromHeader; + CSIPToHeader* iToHeader; + CSIPCSeqHeader* iCSeqHeader; + CSIPContentTypeHeader* iContentTypeHeader; + TBool iHeaderLookupOpen; + + private: // For testing purposes + + UNIT_TEST(CSIPMessageElementsTest) + }; + +#endif diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/mustester/Stubs/sipclientstub/inc/siprequestelements.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/mustester/Stubs/sipclientstub/inc/siprequestelements.h Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,173 @@ +/* +* Copyright (c) 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: +* +*/ + + +#ifndef CSIPREQUESTELEMENTS_H +#define CSIPREQUESTELEMENTS_H + +// INCLUDES +#include +#include +#include +#include +#include "_sipcodecdefs.h" + +// FORWARD DECLARATIONS +class CSIPMessageElements; +class CSIPFromHeader; +class CSIPToHeader; +class CSIPCSeqHeader; + +// CLASS DECLARATION + +/** +* @publishedAll +* @released +* +* Class provides functions for creation and manipulation of originator's and +* recipient's addresses in a SIP request. It also provide functions for +* manipulation of SIP method for unknown SIP requests. +* @lib sipclient.lib +*/ +class CSIPRequestElements : public CBase + { + public: // Constructors and destructor + /** + * Two-phased constructor. + * If the URI is SIP URI, no SIP URI headers are allowed. + * @pre aRemoteURi != 0 + * @param aRemoteUri Remote target URI that identifies a resource that + * the request is addressed to. The ownership is transferred. + */ + IMPORT_C static CSIPRequestElements* NewL(CUri8* aRemoteUri); + + /** + * Two-phased constructor. + * If the URI is SIP URI, no SIP URI headers are allowed. + * @pre aRemoteURi != 0 + * @param aRemoteUri Remote target URI that identifies a resource that + * the request is addressed to. The ownership is transferred. + */ + IMPORT_C static CSIPRequestElements* NewLC(CUri8* aRemoteUri); + + /** + * Destructor. + */ + IMPORT_C ~CSIPRequestElements(); + + public: // New functions + /** + * Sets/resets the recipient's To-header + * To-header must not contain tag-parameter. + * @pre aTo != 0 + * @param aTo a To-header to be set, the ownership is transferred. + */ + IMPORT_C void SetToHeaderL(CSIPToHeader* aTo); + + /** + * Gets the recipient's To-header + * @return To-header or a 0-pointer if not present. Ownership is not + * transferred. + */ + IMPORT_C const CSIPToHeader* ToHeader() const; + + /** + * Sets/resets the originator's From-header. + * From-header must not contain tag-parameter. + * @pre aFrom != 0 + * @param aFrom a From-header to be set, the ownership is transferred. + * @leave KErrArgument if aFrom == 0 + */ + IMPORT_C void SetFromHeaderL(CSIPFromHeader* aFrom); + + /** + * Gets the originator's From-header + * @return From-header or a 0-pointer if not present. Ownership is not + * transferred. + */ + IMPORT_C const CSIPFromHeader* FromHeader() const; + + /** + * Gets CSeq-header. Available for only incoming requests. + * @return a CSeq-header or a 0-pointer if not present. + * Ownership is not transferred. + */ + IMPORT_C const CSIPCSeqHeader* CSeqHeader() const; + + /** + * Sets the remote URI. + * If the URI is a SIP URI, no SIP URI headers are allowed. + * @pre aRemoteUri != 0 + * @param aRemoteUri + * @leave KErrArgument if aRemoteUri==0 + */ + IMPORT_C void SetRemoteUriL(CUri8* aRemoteUri); + + /** + * Gets the remote target URI + * @return remote target URI + */ + IMPORT_C const CUri8& RemoteUri() const; + + /** + * Sets the SIP request method + * @param aMethod a SIP method name. + * @leave KErrArgument if method name given is syntactically + * incorrect + */ + IMPORT_C void SetMethodL(RStringF aMethod); + + /** + * Gets the SIP Method for a request + * @return a SIP method name or a an empty string if the method + * is not defined + */ + IMPORT_C RStringF Method() const; + + /** + * Gets message elements (contains all SIP user headers and content) + * @return message elements + */ + IMPORT_C const CSIPMessageElements& MessageElements() const; + + /** + * Gets message elements (contains all SIP user headers and content) + * The response elements can be populated with SIP user headers + * and content using returned reference to the message elements. + * @return message elements + */ + IMPORT_C CSIPMessageElements& MessageElements(); + + public: // New functions, for internal use + static CSIPRequestElements* InternalizeL (RReadStream& aReadStream); + void ExternalizeL (RWriteStream& aWriteStream) const; + + private: + CSIPRequestElements(); + void ConstructL(CUri8* aRemoteUri); + void DoInternalizeL(RReadStream& aReadStream); + + private: // Data + RStringF iMethod; + CUri8* iRemoteURI; + CSIPMessageElements* iMessageElements; + + private: // For testing purposes + UNIT_TEST(CSIPRequestElementsTest) + }; + +#endif diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/mustester/Stubs/sipclientstub/inc/sipresponseelements.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/mustester/Stubs/sipclientstub/inc/sipresponseelements.h Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,153 @@ +/* +* 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: +* +*/ + + +#ifndef CSIPRESPONSEELEMENTS_H +#define CSIPRESPONSEELEMENTS_H + +// INCLUDES + +#include +#include +#include +#include "_sipcodecdefs.h" + +// FORWARD DECLARATIONS +class CSIPMessageElements; +class CSIPFromHeader; +class CSIPToHeader; +class CSIPCSeqHeader; + +// CLASS DECLARATION + +/** +* @publishedAll +* +* Class provides services for creating and manipulating SIP responses +* This class is used for creating and manipulating SIP responses including +* status code, reason phrase and optional elements such user headers, +* content and its type. +* +* @lib sipclient.lib +*/ +class CSIPResponseElements : public CBase + { + public: // Constructors and destructor + /** + * Two-phased constructor. + * @pre aStatusCode > 100 && aStatusCode < 700 + * @param aStatusCode a known SIP response status code. Cannot be 100. + * @param aReasonPhrase a SIP response reason phrase. + */ + IMPORT_C static CSIPResponseElements* NewL(TUint aStatusCode, + RStringF aReasonPhrase); + + /** + * Two-phased constructor. + * @pre aStatusCode > 100 && aStatusCode < 700 + * @param aStatusCode a known SIP response status code. Cannot be 100. + * @param aReasonPhrase a SIP response reason phrase. + */ + IMPORT_C static CSIPResponseElements* NewLC(TUint aStatusCode, + RStringF aReasonPhrase); + + /** + * Destructor. + */ + IMPORT_C ~CSIPResponseElements(); + + public: // New functions + /** + * Sets a SIP Response extension status code. It is not possible to set + * value 100. + * @pre aStatusCode > 100 && aStatusCode < 700 + * @param aStatusCode extension status code + * @leave KErrArgument if aStatusCode < 100 or aStatusCode >= 700 + */ + IMPORT_C void SetStatusCodeL(TUint aStatusCode); + + /** + * Gets the SIP Response status code + * @return SIP Response status code + */ + IMPORT_C TUint StatusCode() const; + + /** + * Sets a SIP Response Reason Phrase. + * @param aReasonPhrase a SIP response reason phrase. + */ + IMPORT_C void SetReasonPhraseL(RStringF aReasonPhrase); + + /** + * Gets a SIP Response Reason Phrase. + * @return a SIP response reason phrase or an empty string if + * the reason phrase is not defined. + */ + IMPORT_C RStringF ReasonPhrase() const; + + /** + * Gets the originator's From-header + * @return a From-header or a 0-pointer if not present. Ownership is + * not transferred. + */ + IMPORT_C const CSIPFromHeader* FromHeader() const; + + /** + * Gets the recipient's To-header + * @return a To-header or a 0-pointer if not present. Ownership is + * not transferred. + */ + IMPORT_C const CSIPToHeader* ToHeader() const; + + /** + * Gets CSeq-header + * @return a CSeq-header or a 0-pointer if not present. Ownership is + * not transferred. + */ + IMPORT_C const CSIPCSeqHeader* CSeqHeader() const; + + /** + * Gets message elements (contains all SIP user headers and content) + * @return message elements + */ + IMPORT_C const CSIPMessageElements& MessageElements() const; + + /** + * Gets message elements (contains all SIP user headers and content) + * The response elements can be populated with SIP user headers + * and content using returned reference to the message elements. + * @return message elements + */ + IMPORT_C CSIPMessageElements& MessageElements(); + + public: // New functions, for internal use + static CSIPResponseElements* InternalizeL (RReadStream& aReadStream); + static CSIPResponseElements* InternalizeLC (RReadStream& aReadStream); + void ExternalizeL (RWriteStream& aWriteStream) const; + + private: + CSIPResponseElements(); + void ConstructL(TUint aStatusCode, RStringF aReasonPhrase); + void DoInternalizeL (RReadStream& aReadStream); + + private: // Data + TUint iStatusCode; + RStringF iReasonPhrase; + CSIPMessageElements* iMessageElements; + }; + +#endif // end of CSIPRESPONSEELEMENTS_H diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/mustester/Stubs/sipclientstub/inc/sipservertransaction.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/mustester/Stubs/sipclientstub/inc/sipservertransaction.h Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,182 @@ +/* +* Copyright (c) 2003 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: +* +*/ + + +#ifndef CSIPSERVERTRANSACTION_H +#define CSIPSERVERTRANSACTION_H + +// INCLUDES +#include "siptransactionbase.h" + +// FORWARD DECLARATIONS +class CSIPRequestElements; +class CSIPRefresh; +class MSIPResponseSender; +class CSIPConnection; + +/** +* Class for managing SIP server transactions. +* It provides services for creating, ending +* and getting SIP transaction parameters. +* Client cannot instantiate this class. +* +* @lib sipclient +*/ +class CSIPServerTransaction: public CSIPTransactionBase + { + public: + + /** + * Destructor + */ + + IMPORT_C ~CSIPServerTransaction(); + + public: // Not in real SIP API + + IMPORT_C static CSIPServerTransaction* NewL( RStringF aType ); + + IMPORT_C void SetRequestElements(CSIPRequestElements* aElements); + + + public: + + /** + * Sends response and ends the transaction; + * The user must not send 100 Trying response. Leaves on failure. + * @pre aElements!=0 + * @pre State()==ETrying || State()==EProceeding + * @pre CSIPConnection::State()==EActive + * @pre ResponseAllowed()==ETrue + * @param aElements contains Status Code, optional Reason Phrase and + * optional SIP message headers and body. Ownership is transferred. + * @leave KErrArgument if aElements == NULL + * @leave KErrGeneral if ResponseAllowed() == EFalse + */ + + IMPORT_C void SendResponseL(CSIPResponseElements *aElements); + + + /** + * Gets the request elements + * @return Request elements. Ownership is not transferred. + */ + + IMPORT_C const CSIPRequestElements* RequestElements() const; + + + /** + * Checks if the response sending is allowed for this server + * transaction. For instance response is not allowed in ACK transaction. + * @return ETrue if response sending is allowed, EFalse otherwise + */ + + IMPORT_C TBool ResponseAllowed() const; + + /** + * Sets a new respose sender, replacing the current sender. + * + * @param aSender Response sender to be used from now on. Ownership is + * transferred. + */ + + void SetResponseSender(MSIPResponseSender* aSender); + + + /** + * Obtains the associated CSIPConnection instance. If connection can't + * be accessed anymore, this function leaves. + * + * @return CSIPConnection + */ + + CSIPConnection& SIPConnectionL(); + + + /** + * Update the MTransactionAssociation to point to aAssociation. + * + * @param aAssociation Associated object + */ + + void ReAssociateL(MTransactionAssociation& aAssociation); + + + /** + * Removes, but does not delete, request elements from + * aServerTransaction. + * + * @param aServerTransaction Server transaction from which response + * elements are removed. Ownership is not transferred. + */ + + static void DetachRequestElements(TAny* aServerTransaction); + + public: + + /** + * Creates a server transaction. + * + * @param aRequestId RequestId for the transaction to use + * @param aAssociation Object with which the transaction is associated + * @param aElements Request elements. Ownership is transferred. + * @return New object. Ownership is transferred. + */ + + static CSIPServerTransaction* + NewL(TUint32 aRequestId, + MTransactionAssociation& aAssociation, + CSIPRequestElements* aElements); + + + /** + * Creates a server transaction and pushes it to cleanup stack. + * + * @param aRequestId RequestId for the transaction to use + * @param aAssociation Object with which the transaction is associated + * @param aElements Request elements. Ownership is transferred. + * @return New object. Ownership is transferred. + */ + + static CSIPServerTransaction* + NewLC(TUint32 aRequestId, + MTransactionAssociation& aAssociation, + CSIPRequestElements* aElements); + + + + private: + CSIPServerTransaction( RStringF aType ); + + + /** + * Second phase constructor. + * + * @param aElements Request elements. Ownership is transferred. + */ + void ConstructL(CSIPRequestElements* aElements); + + + CSIPRequestElements* iRequestElements; + + //This interface is used for sending the response. + //CSIPServerTransaction owns iResponseSender. + MSIPResponseSender* iResponseSender; + + }; + +#endif diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/mustester/Stubs/sipclientstub/inc/siptransactionbase.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/mustester/Stubs/sipclientstub/inc/siptransactionbase.h Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,228 @@ +/* +* Copyright (c) 2003 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: +* +*/ + + +#ifndef CSIPTRANSACTIONBASE_H +#define CSIPTRANSACTIONBASE_H + +// INCLUDES + +#include +#include + +// FORWARD DECLARATIONS +class CSIPResponseElements; +class MTransactionAssociation; + +/** +* Base class for managing SIP transactions. +* It provides services for quering transaction +* type and its state. +* +* This class is an abstract class and cannot be +* instantiated. +* @lib sipclient +*/ +class CSIPTransactionBase: public CBase + { + public: + /** SIP transaction state */ + enum TState + { + /** Trying state */ + ETrying, + /** Calling state */ + ECalling, + /** Proceeding state */ + EProceeding, + /** Completed state */ + ECompleted, + /** Confirmed state */ + EConfirmed, + /** Terminated state */ + ETerminated + }; + + public: + + /** + * Destructor + */ + + virtual ~CSIPTransactionBase(); + + + public: + /** + * Gets the SIP transaction type + * @return SIP transaction type + */ + + IMPORT_C RStringF Type() const; + + + /** + * Gets SIP transaction state + * @return SIP transaction state + */ + + IMPORT_C CSIPTransactionBase::TState StateL(); + + + /** + * Checks the if the actual object + * is of type CSIPClientTransaction. + * @return ETrue if object is of type CSIPClientTransaction and + * EFalse otherwise + */ + + IMPORT_C TBool IsSIPClientTransaction() const; + + + /** + * Compares this object to another object also having + * CSIPTransactionBase base class + * The function has to be implemented in each of the sub-classes. + * @param aTransaction a CSIPTransactionBase object to compare + * @return ETrue if the objects are equal otherwise EFalse + */ + + IMPORT_C TBool + operator==(const CSIPTransactionBase& aTransaction) const; + + /** + * Obtains the RequestId of the transaction. + * + * @return RequestId + */ + + TUint32 RequestId() const; + + + /** + * Clears the MTransactionAssociation. After this the object can't be + * used anymore and it is expected that user will delete it soon. + * + * @param aAssociation Object requesting the detach + */ + + virtual void Detach(const MTransactionAssociation& aAssociation); + + + /** + * Changes the transaction state. + * + * @param aNextState State into which transaction moves + */ + + void ChangeState(CSIPTransactionBase::TState aNextState); + + + /** + * Determines whether this transaction has an effect on the associated + * dialog's state. + * + * @return ETrue if transaction has an effect on the dialog's state, + * EFalse otherwise. + */ + + TBool AffectsDialogState() const; + + + /** + * Sets this transaction to affect the dialog state. + */ + + void SetAffectsDialogState(); + + + /** + * Determines whether the transaction type is a target refresh request. + * + * @param aType Type of transaction + * @return ETrue If the transaction is a target refresh request, EFalse + * otherwise. + */ + + static TBool IsTargetRefresh(RStringF aType); + + + /** + * Stores response elements. Depending on the status code, transaction + * may enter another state. + * + * @param aElements Response elements, ownership is transferred. + */ + + void SetResponseElements(CSIPResponseElements* aElements); + + + protected: + CSIPTransactionBase( RStringF aType, TBool aIsCliTrx ); + + void ConstructL(); + + + /** + * Checks that iAssociation is available (not NULL). If iAssociation is + * NULL, it means user has deleted a resource needed by + * CSIPTransactionBase, and this function leaves. + */ + + void CheckAssociationL() const; + + + /** + * Gets response elements. + * + * @return Response elements. Ownership isn't transferred. + */ + + const CSIPResponseElements* ResponseElements() const; + + + //RequestId received from SIP client + TUint32 iRequestId; + + //Every transaction is associated to exactly one other object: + //CSIP, CSIPConnection, CSIPRegistrationBinding or CSIPDialogAssocBase + MTransactionAssociation* iAssociation; + + public: + + RStringF iType; + + //ETrue is the transaction is a client transaction, EFalse otherwise + TBool iIsClientTransaction; + + + //ETrue if the transaction has an effect on the dialog state in case + //the transaction is associated with a dialog. + //EFalse otherwise. + TBool iAffectsDialogState; + + //SIP response elements + CSIPResponseElements* iResponseElements; + + public: + //Current transaction state + TState iState; + + + }; + +#endif diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/mustester/Stubs/sipclientstub/src/CSIPMessageElements.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/mustester/Stubs/sipclientstub/src/CSIPMessageElements.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,418 @@ +/* +* Copyright (c) 2004 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: +* +*/ + + +#include "SipMessageElements.h" +#include "SipHeaderBase.h" +#include "SipFromHeader.h" +#include "SipContactHeader.h" +#include "SipToHeader.h" +#include "SipCSeqHeader.h" +#include "SipContentTypeHeader.h" +#include "SipExtensionHeader.h" +#include "sipstrings.h" +#include "SipStrConsts.h" + + + +// ----------------------------------------------------------------------------- +// CSIPMessageElements::NewL +// ----------------------------------------------------------------------------- +// +EXPORT_C CSIPMessageElements* CSIPMessageElements::NewL() + { + CSIPMessageElements* self = CSIPMessageElements::NewLC(); + CleanupStack::Pop (self); + return self; + } + +// ----------------------------------------------------------------------------- +// CSIPMessageElements::NewLC +// ----------------------------------------------------------------------------- +// +EXPORT_C CSIPMessageElements* CSIPMessageElements::NewLC () + { + CSIPMessageElements* self = new(ELeave)CSIPMessageElements; + CleanupStack::PushL (self); + self->ConstructL (); + return self; + } + +// ----------------------------------------------------------------------------- +// CSIPMessageElements::CSIPMessageElements +// ----------------------------------------------------------------------------- +// +CSIPMessageElements::CSIPMessageElements () + : iHeaderLookupOpen(EFalse) + { + } + +// ----------------------------------------------------------------------------- +// CSIPMessageElements::ConstructL +// ----------------------------------------------------------------------------- +// +void CSIPMessageElements::ConstructL() + { +// SIPHeaderLookup::OpenL(); + iHeaderLookupOpen = ETrue; + iCSeqHeader = CSIPCSeqHeader::DecodeL( _L8("1 INVITE") ); + + } + +// ----------------------------------------------------------------------------- +// CSIPMessageElements::~CSIPMessageElements +// ----------------------------------------------------------------------------- +// +EXPORT_C CSIPMessageElements::~CSIPMessageElements () + { + /*if (iHeaderLookupOpen) + { + SIPHeaderLookup::Close(); + }*/ + delete iContent; + iUserHeaders.ResetAndDestroy(); + delete iFromHeader; + delete iToHeader; + delete iCSeqHeader; + delete iContentTypeHeader; + } + +// ----------------------------------------------------------------------------- +// CSIPMessageElements::SetUserHeadersL +// ----------------------------------------------------------------------------- +// +EXPORT_C void +CSIPMessageElements::SetUserHeadersL (RPointerArray& aHeaders) + { + RPointerArray tmpHeaders; + CleanupClosePushL(tmpHeaders); + for (TInt i=0; i& +CSIPMessageElements::UserHeaders() const + { + return iUserHeaders; + } + +// ----------------------------------------------------------------------------- +// CSIPMessageElements::SetContentL +// ----------------------------------------------------------------------------- +// +EXPORT_C void CSIPMessageElements::SetContentL (HBufC8* aContent, + CSIPContentTypeHeader* aType) + { + __ASSERT_ALWAYS (aContent != 0, User::Leave(KErrArgument)); + __ASSERT_ALWAYS (aContent->Length() > 0, User::Leave(KErrArgument)); + __ASSERT_ALWAYS (aType != 0, User::Leave(KErrArgument)); + + delete iContentTypeHeader; + iContentTypeHeader = aType; + delete iContent; + iContent = aContent; + } + +// ----------------------------------------------------------------------------- +// CSIPMessageElements::Content +// ----------------------------------------------------------------------------- +// +EXPORT_C const TDesC8& CSIPMessageElements::Content () const + { + if (iContent) + { + return *iContent; + } + return KNullDesC8; + } + +// ----------------------------------------------------------------------------- +// CSIPMessageElements::Content +// ----------------------------------------------------------------------------- +// +EXPORT_C const CSIPContentTypeHeader* CSIPMessageElements::ContentType() const + { + return iContentTypeHeader; + } + +// ----------------------------------------------------------------------------- +// CSIPMessageElements::ExtractContent +// ----------------------------------------------------------------------------- +// +EXPORT_C HBufC8* CSIPMessageElements::ExtractContent () + { + HBufC8* tmp = iContent; + iContent = 0; + delete iContentTypeHeader; + iContentTypeHeader = 0; + return tmp; + } + +// ----------------------------------------------------------------------------- +// CSIPMessageElements::InternalizeL +// ----------------------------------------------------------------------------- +// +CSIPMessageElements* +CSIPMessageElements::InternalizeL (RReadStream& aReadStream) + { + CSIPMessageElements* self = CSIPMessageElements::NewLC(); + self->DoInternalizeL(aReadStream); + CleanupStack::Pop(); // self + return self; + } + +// ----------------------------------------------------------------------------- +// CSIPMessageElements::DoInternalizeL +// ----------------------------------------------------------------------------- +// +void CSIPMessageElements::DoInternalizeL (RReadStream& /*aReadStream*/) + { + + } + +// ----------------------------------------------------------------------------- +// CSIPMessageElements::ExternalizeL +// ----------------------------------------------------------------------------- +// +void +CSIPMessageElements::ExternalizeL (RWriteStream& /*aWriteStream*/) const + { + + } + +// ----------------------------------------------------------------------------- +// CSIPMessageElements::UserHeaderCount +// ----------------------------------------------------------------------------- +// +TInt CSIPMessageElements::UserHeaderCount (RStringF aName) const + { + TInt headerCount = 0; + for (TInt i=0; i < iUserHeaders.Count(); i++) + { + if (iUserHeaders[i]->Name() == aName) + { + headerCount++; + } + } + return headerCount; + } + +// ----------------------------------------------------------------------------- +// CSIPMessageElements::UserHeadersL +// ----------------------------------------------------------------------------- +// +const RPointerArray +CSIPMessageElements::UserHeadersL (RStringF aName) const + { + RPointerArray headers; + CleanupClosePushL(headers); + for (TInt i=0; i < iUserHeaders.Count(); i++) + { + if (iUserHeaders[i]->Name() == aName) + { + User::LeaveIfError(headers.Append(iUserHeaders[i])); + } + } + CleanupStack::Pop(1); // headers + return headers; + } + +// ----------------------------------------------------------------------------- +// CSIPMessageElements::RemoveHeaders +// ----------------------------------------------------------------------------- +// +TInt CSIPMessageElements::RemoveHeaders (RStringF aName) + { + TInt err = KErrNotFound; + for (TInt i=iUserHeaders.Count()-1; i>=0; i--) + { + if (iUserHeaders[i]->Name() == aName) + { + CSIPHeaderBase* header = iUserHeaders[i]; + iUserHeaders.Remove(i); + delete header; + err = KErrNone; + } + } + return err; + } + +// ----------------------------------------------------------------------------- +// CSIPMessageElements::DetachUserHeader +// ----------------------------------------------------------------------------- +// +void CSIPMessageElements::DetachUserHeader (CSIPHeaderBase* aHeader) + { + for (TInt i=0; i < iUserHeaders.Count(); i++) + { + if (iUserHeaders[i] == aHeader) + { + iUserHeaders.Remove(i); + } + } + } + +// ----------------------------------------------------------------------------- +// CSIPMessageElements::AddHeaderL +// ----------------------------------------------------------------------------- +// +void CSIPMessageElements::AddHeaderL (CSIPHeaderBase* aHeader) + { + __ASSERT_ALWAYS (aHeader != 0, User::Leave(KErrArgument)); + + if (aHeader->Name() == SIPStrings::StringF(SipStrConsts::EFromHeader)) + { + delete iFromHeader; + iFromHeader = static_cast(aHeader); + } + else if (aHeader->Name() == SIPStrings::StringF(SipStrConsts::EToHeader)) + { + delete iToHeader; + iToHeader = static_cast(aHeader); + } + else if (aHeader->Name() == SIPStrings::StringF(SipStrConsts::ECSeqHeader)) + { + delete iCSeqHeader; + iCSeqHeader = static_cast(aHeader); + } + else if (aHeader->Name() == + SIPStrings::StringF(SipStrConsts::EContentTypeHeader)) + { + delete iContentTypeHeader; + iContentTypeHeader = static_cast(aHeader); + } + else + { + User::LeaveIfError(iUserHeaders.Append(aHeader)); + } + } + +// ----------------------------------------------------------------------------- +// CSIPMessageElements::SetToL +// ----------------------------------------------------------------------------- +// +void CSIPMessageElements::SetToL (CSIPToHeader* aTo) + { + __ASSERT_ALWAYS (aTo != 0, User::Leave(KErrArgument)); + __ASSERT_ALWAYS (!aTo->HasParam(SIPStrings::StringF(SipStrConsts::ETag)), + User::Leave(KErrArgument)); + + delete iToHeader; + iToHeader = aTo; + } + +// ----------------------------------------------------------------------------- +// CSIPMessageElements::To +// ----------------------------------------------------------------------------- +// +const CSIPToHeader* CSIPMessageElements::To() const + { + return iToHeader; + } + +// ----------------------------------------------------------------------------- +// CSIPMessageElements::SetFromL +// ----------------------------------------------------------------------------- +// +void CSIPMessageElements::SetFromL (CSIPFromHeader* aFrom) + { + __ASSERT_ALWAYS (aFrom != 0, User::Leave(KErrArgument)); + __ASSERT_ALWAYS (!aFrom->HasParam(SIPStrings::StringF(SipStrConsts::ETag)), + User::Leave(KErrArgument)); + + delete iFromHeader; + iFromHeader = aFrom; + } + +// ----------------------------------------------------------------------------- +// CSIPMessageElements::From +// ----------------------------------------------------------------------------- +// +const CSIPFromHeader* CSIPMessageElements::From() const + { + return iFromHeader; + } + +// ----------------------------------------------------------------------------- +// CSIPMessageElements::CSeq +// ----------------------------------------------------------------------------- +// +const CSIPCSeqHeader* CSIPMessageElements::CSeq() const + { + return iCSeqHeader; + } + +// ----------------------------------------------------------------------------- +// CSIPMessageElements::SetContent +// ----------------------------------------------------------------------------- +// +void CSIPMessageElements::SetContent (HBufC8* aContent) + { + delete iContent; + iContent = aContent; + } + +// ----------------------------------------------------------------------------- +// CSIPMessageElements::DetachContent +// ----------------------------------------------------------------------------- +// +void CSIPMessageElements::DetachContent () + { + iContent = 0; + } + +// ----------------------------------------------------------------------------- +// CSIPMessageElements::CheckUserHeaderL +// ----------------------------------------------------------------------------- +// +void CSIPMessageElements::CheckUserHeaderL (const CSIPHeaderBase* /*aHeader*/) const + { + + } + +// ----------------------------------------------------------------------------- +// CSIPMessageElements::ExternalizeUserHeadersL +// ----------------------------------------------------------------------------- +// +void +CSIPMessageElements::ExternalizeUserHeadersL (RWriteStream& /*aWriteStream*/) const + { + + } + +// ----------------------------------------------------------------------------- +// CSIPMessageElements::ExternalizeL +// ----------------------------------------------------------------------------- +// +void CSIPMessageElements::ExternalizeL (const CSIPExtensionHeader* /*aHeader*/, + RWriteStream& /*aWriteStream*/) const + { + + } + diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/mustester/Stubs/sipclientstub/src/CSIPRequestElements.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/mustester/Stubs/sipclientstub/src/CSIPRequestElements.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,237 @@ +/* +* Copyright (c) 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: +* +*/ + + +#include "siprequestelements.h" +#include "sipmessageelements.h" +#include "sipfromheader.h" +#include "siptoheader.h" +#include "sipstrings.h" +#include "sipstrconsts.h" +#include "_sipcodecdefs.h" + + +// ----------------------------------------------------------------------------- +// CSIPRequestElements::NewL +// ----------------------------------------------------------------------------- +// +EXPORT_C CSIPRequestElements* CSIPRequestElements::NewL(CUri8* aRemoteUri) + { + CSIPRequestElements* self = CSIPRequestElements::NewLC(aRemoteUri); + CleanupStack::Pop (self); + return self; + } + +// ----------------------------------------------------------------------------- +// CSIPRequestElements::NewLC +// ----------------------------------------------------------------------------- +// +EXPORT_C CSIPRequestElements* CSIPRequestElements::NewLC(CUri8* aRemoteUri) + { + CSIPRequestElements* self = new(ELeave)CSIPRequestElements; + CleanupStack::PushL (self); + self->ConstructL (aRemoteUri); + return self; + } + +// ----------------------------------------------------------------------------- +// CSIPRequestElements::CSIPRequestElements +// ----------------------------------------------------------------------------- +// +CSIPRequestElements::CSIPRequestElements() + { + } + +// ----------------------------------------------------------------------------- +// CSIPRequestElements::ConstructL +// ----------------------------------------------------------------------------- +// +void CSIPRequestElements::ConstructL(CUri8* aRemoteUri) + { + __ASSERT_ALWAYS (aRemoteUri != 0, User::Leave(KErrArgument)); + + iMessageElements = CSIPMessageElements::NewL(); + SetRemoteUriL(aRemoteUri); + } + +// ----------------------------------------------------------------------------- +// CSIPRequestElements::~CSIPRequestElements +// ----------------------------------------------------------------------------- +// +EXPORT_C CSIPRequestElements::~CSIPRequestElements() + { + delete iRemoteURI; + iMethod.Close(); + delete iMessageElements; + } + +// ----------------------------------------------------------------------------- +// CSIPRequestElements::SetToHeaderL +// ----------------------------------------------------------------------------- +// +EXPORT_C void CSIPRequestElements::SetToHeaderL(CSIPToHeader* aTo) + { + iMessageElements->SetToL(aTo); + } + +// ----------------------------------------------------------------------------- +// CSIPRequestElements::ToHeader +// ----------------------------------------------------------------------------- +// +EXPORT_C const CSIPToHeader* CSIPRequestElements::ToHeader() const + { + return iMessageElements->To(); + } + +// ----------------------------------------------------------------------------- +// CSIPRequestElements::SetFromHeaderL +// ----------------------------------------------------------------------------- +// +EXPORT_C void CSIPRequestElements::SetFromHeaderL(CSIPFromHeader* aFrom) + { + iMessageElements->SetFromL(aFrom); + } + +// ----------------------------------------------------------------------------- +// CSIPRequestElements::FromHeader +// ----------------------------------------------------------------------------- +// +EXPORT_C const CSIPFromHeader* CSIPRequestElements::FromHeader() const + { + return iMessageElements->From(); + } + +// ----------------------------------------------------------------------------- +// CSIPRequestElements::CSeqHeader +// ----------------------------------------------------------------------------- +// +EXPORT_C const CSIPCSeqHeader* CSIPRequestElements::CSeqHeader() const + { + return iMessageElements->CSeq(); + } + +// ----------------------------------------------------------------------------- +// CSIPRequestElements::SetRemoteURIL +// ----------------------------------------------------------------------------- +// +EXPORT_C void CSIPRequestElements::SetRemoteUriL(CUri8* aRemoteUri) + { + __ASSERT_ALWAYS (aRemoteUri != 0, User::Leave(KErrArgument)); + + delete iRemoteURI; + iRemoteURI = aRemoteUri; + } + +// ----------------------------------------------------------------------------- +// CSIPRequestElements::RemoteURI +// ----------------------------------------------------------------------------- +// +EXPORT_C const CUri8& CSIPRequestElements::RemoteUri() const + { + return *(iRemoteURI); + } + +// ----------------------------------------------------------------------------- +// CSIPRequestElements::SetMethodL +// ----------------------------------------------------------------------------- +// +EXPORT_C void CSIPRequestElements::SetMethodL(RStringF aMethod) + { + __ASSERT_ALWAYS (aMethod.DesC().Length() > 0, User::Leave(KErrArgument)); + + iMethod.Close(); + iMethod = aMethod.Copy(); + } + +// ----------------------------------------------------------------------------- +// CSIPRequestElements::Method +// ----------------------------------------------------------------------------- +// +EXPORT_C RStringF CSIPRequestElements::Method() const + { + return iMethod; + } + +// ----------------------------------------------------------------------------- +// CSIPRequestElements::MessageElements +// ----------------------------------------------------------------------------- +// +EXPORT_C const CSIPMessageElements& CSIPRequestElements::MessageElements() const + { + return *iMessageElements; + } + +// ----------------------------------------------------------------------------- +// CSIPRequestElements::MessageElements +// ----------------------------------------------------------------------------- +// +EXPORT_C CSIPMessageElements& CSIPRequestElements::MessageElements() + { + return *iMessageElements; + } + +// ----------------------------------------------------------------------------- +// CSIPRequestElements::InternalizeL +// ----------------------------------------------------------------------------- +// +CSIPRequestElements* CSIPRequestElements::InternalizeL(RReadStream& aReadStream) + { + CSIPRequestElements* self = new(ELeave)CSIPRequestElements; + CleanupStack::PushL(self); + self->DoInternalizeL(aReadStream); + CleanupStack::Pop(self); + return self; + } + +// ----------------------------------------------------------------------------- +// CSIPRequestElements::DoInternalizeL +// ----------------------------------------------------------------------------- +// +void CSIPRequestElements::DoInternalizeL(RReadStream& aReadStream) + { + // For incoming requests the method is always present +/* TUint32 methodLength = aReadStream.ReadUint32L(); + if (methodLength > 0) + { + HBufC8* methodBuf = HBufC8::NewLC(methodLength); + TPtr8 methodPtr(methodBuf->Des()); + aReadStream.ReadL(methodPtr,methodLength); + iMethod = SIPStrings::Pool().OpenFStringL(methodPtr); + CleanupStack::PopAndDestroy(methodBuf); + } + aReadStream.ReadUint8L(); // remote-URI always present + iRemoteURI = CURIContainer::InternalizeL(aReadStream); + iMessageElements = CSIPMessageElements::InternalizeL(aReadStream); +*/ } + +// ----------------------------------------------------------------------------- +// CSIPRequestElements::ExternalizeL +// ----------------------------------------------------------------------------- +// +void CSIPRequestElements::ExternalizeL(RWriteStream& aWriteStream) const + { +/* TPtrC8 method(iMethod.DesC()); + // For outgoing requests in some cases the method is filled in ServerCore + if (method.Length() > 0) + { + aWriteStream.WriteUint32L(method.Length()); + aWriteStream.WriteL(method); + } + aWriteStream.WriteUint8L(1); // remote-URI always present + iRemoteURI->ExternalizeL(aWriteStream); + iMessageElements->ExternalizeL(aWriteStream); +*/ } diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/mustester/Stubs/sipclientstub/src/CSIPResponseElements.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/mustester/Stubs/sipclientstub/src/CSIPResponseElements.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,217 @@ +/* +* Copyright (c) 2004 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: +* +*/ + +#include "SipResponseElements.h" +#include "SipMessageElements.h" +#include "sipstrings.h" +#include "SipStrConsts.h" + + +// ----------------------------------------------------------------------------- +// CSIPResponseElements::NewL +// ----------------------------------------------------------------------------- +// +EXPORT_C CSIPResponseElements* +CSIPResponseElements::NewL (TUint aStatusCode, RStringF aReasonPhrase) + { + CSIPResponseElements* self = + CSIPResponseElements::NewLC(aStatusCode,aReasonPhrase); + CleanupStack::Pop (self); + return self; + } + +// ----------------------------------------------------------------------------- +// CSIPResponseElements::NewLC +// ----------------------------------------------------------------------------- +// +EXPORT_C CSIPResponseElements* +CSIPResponseElements::NewLC (TUint aStatusCode, RStringF aReasonPhrase) + { + CSIPResponseElements* self = new(ELeave)CSIPResponseElements; + CleanupStack::PushL (self); + self->ConstructL (aStatusCode,aReasonPhrase); + return self; + } + +// ----------------------------------------------------------------------------- +// CSIPResponseElements::CSIPResponseElements +// ----------------------------------------------------------------------------- +// +CSIPResponseElements::CSIPResponseElements () + { + } + +// ----------------------------------------------------------------------------- +// CSIPResponseElements::ConstructL +// ----------------------------------------------------------------------------- +// +void CSIPResponseElements::ConstructL (TUint aStatusCode, + RStringF aReasonPhrase) + { + SetStatusCodeL (aStatusCode); + iReasonPhrase = aReasonPhrase.Copy(); + iMessageElements = CSIPMessageElements::NewL(); + } + +// ----------------------------------------------------------------------------- +// CSIPResponseElements::~CSIPResponseElements +// ----------------------------------------------------------------------------- +// +EXPORT_C CSIPResponseElements::~CSIPResponseElements () + { + delete iMessageElements; + iReasonPhrase.Close(); + } + +// ----------------------------------------------------------------------------- +// CSIPResponseElements::SetStatusCodeL +// ----------------------------------------------------------------------------- +// +EXPORT_C void CSIPResponseElements::SetStatusCodeL (TUint aStatusCode) + { + iStatusCode = aStatusCode; + } + +// ----------------------------------------------------------------------------- +// CSIPResponseElements::StatusCode +// ----------------------------------------------------------------------------- +// +EXPORT_C TUint CSIPResponseElements::StatusCode() const + { + return iStatusCode; + } + +// ----------------------------------------------------------------------------- +// CSIPResponseElements::SetReasonPhraseL +// ----------------------------------------------------------------------------- +// +EXPORT_C void +CSIPResponseElements::SetReasonPhraseL (RStringF aReasonPhrase) + { + iReasonPhrase.Close(); + iReasonPhrase = aReasonPhrase.Copy(); + } + +// ----------------------------------------------------------------------------- +// CSIPResponseElements::ReasonPhrase +// ----------------------------------------------------------------------------- +// +EXPORT_C RStringF CSIPResponseElements::ReasonPhrase () const + { + return iReasonPhrase; + } + +// ----------------------------------------------------------------------------- +// CSIPResponseElements::FromHeader +// ----------------------------------------------------------------------------- +// +EXPORT_C const CSIPFromHeader* CSIPResponseElements::FromHeader () const + { + return iMessageElements->From(); + } + +// ----------------------------------------------------------------------------- +// CSIPResponseElements::ToHeader +// ----------------------------------------------------------------------------- +// +EXPORT_C const CSIPToHeader* CSIPResponseElements::ToHeader () const + { + return iMessageElements->To(); + } + +// ----------------------------------------------------------------------------- +// CSIPResponseElements::CSeqHeader +// ----------------------------------------------------------------------------- +// +EXPORT_C const CSIPCSeqHeader* CSIPResponseElements::CSeqHeader() const + { + return iMessageElements->CSeq(); + } + +// ----------------------------------------------------------------------------- +// CSIPResponseElements::MessageElements +// ----------------------------------------------------------------------------- +// +EXPORT_C const CSIPMessageElements& +CSIPResponseElements::MessageElements () const + { + return *iMessageElements; + } + +// ----------------------------------------------------------------------------- +// CSIPResponseElements::MessageElements +// ----------------------------------------------------------------------------- +// +EXPORT_C CSIPMessageElements& CSIPResponseElements::MessageElements () + { + return *iMessageElements; + } + +// ----------------------------------------------------------------------------- +// CSIPResponseElements::InternalizeL +// ----------------------------------------------------------------------------- +// +CSIPResponseElements* +CSIPResponseElements::InternalizeL (RReadStream& aReadStream) + { + CSIPResponseElements* self = + CSIPResponseElements::InternalizeLC(aReadStream); + CleanupStack::Pop(); // self + return self; + } + +// ----------------------------------------------------------------------------- +// CSIPResponseElements::InternalizeLC +// ----------------------------------------------------------------------------- +// +CSIPResponseElements* +CSIPResponseElements::InternalizeLC (RReadStream& aReadStream) + { + CSIPResponseElements* self = new(ELeave)CSIPResponseElements; + CleanupStack::PushL (self); + self->DoInternalizeL(aReadStream); + return self; + } + +// ----------------------------------------------------------------------------- +// CSIPResponseElements::DoInternalizeL +// ----------------------------------------------------------------------------- +// +void CSIPResponseElements::DoInternalizeL (RReadStream& aReadStream) + { + iStatusCode = aReadStream.ReadUint16L(); + TUint32 reasonPhraseLength = aReadStream.ReadUint32L(); + HBufC8* reasonPhraseBuf = HBufC8::NewLC(reasonPhraseLength); + TPtr8 reasonPhrasePtr(reasonPhraseBuf->Des()); + aReadStream.ReadL(reasonPhrasePtr,reasonPhraseLength); + iReasonPhrase = SIPStrings::Pool().OpenFStringL(reasonPhrasePtr); + CleanupStack::PopAndDestroy(reasonPhraseBuf); + iMessageElements = CSIPMessageElements::InternalizeL(aReadStream); + } + +// ----------------------------------------------------------------------------- +// CSIPResponseElements::ExternalizeL +// ----------------------------------------------------------------------------- +// +void CSIPResponseElements::ExternalizeL (RWriteStream& aWriteStream) const + { + aWriteStream.WriteUint16L(iStatusCode); + TPtrC8 reasonPhrase(iReasonPhrase.DesC()); + aWriteStream.WriteUint32L(reasonPhrase.Length()); + aWriteStream.WriteL(reasonPhrase); + iMessageElements->ExternalizeL(aWriteStream); + } diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/mustester/Stubs/sipclientstub/src/CSipSseTestTls.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/mustester/Stubs/sipclientstub/src/CSipSseTestTls.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,334 @@ +/* +* Copyright (c) 2004 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: +* +*/ + + +#include "CSipSseTestTls.h" +#include +#include +#include +#include +#include "SipResponseElements.h" +#include "siprequestelements.h" +#include "mussettingskeys.h" + + +TBool CSipSseTestTls::iSipRegisterStatus = EFalse; + + +void CSipSseTestTls::OpenL () + { + CSipSseTestTls* self = new (ELeave) CSipSseTestTls(); + self->ClientRequest( NULL ); + self->ClientResponse( SIPStrings::StringF( SipStrConsts::EEmpty ), NULL ); + Dll::SetTls( self ); + + User::LeaveIfError( self->Set ( MusSettingsKeys::KActivation, + MusSettingsKeys::EAlwaysActive ) ); + User::LeaveIfError( self->Set ( MusSettingsKeys::KAuditoryNotification, + MusSettingsKeys::EAuditoryNotificationOff ) ); + User::LeaveIfError( self->Set ( MusSettingsKeys::KPopupNotification, + MusSettingsKeys::EPopupNotificationOff ) ); + User::LeaveIfError( self->Set ( MusSettingsKeys::KPopupNotificationType, + MusSettingsKeys::ENotificationTypeQueryUser ) ); + User::LeaveIfError( self->Set ( MusSettingsKeys::KEdgeDtmSupport, + MusSettingsKeys::EDtmModeNotAllowed ) ); + User::LeaveIfError( self->Set ( MusSettingsKeys::KForceInternetSignaling, + MusSettingsKeys::EFollowProfileConfiguration ) ); + User::LeaveIfError( self->Set ( MusSettingsKeys::KAutoRecord, + MusSettingsKeys::EAutoRecordOn ) ); + User::LeaveIfError( self->Set ( MusSettingsKeys::KSipProfileId, + 0 ) ); //default profile + User::LeaveIfError( self->Set ( MusSettingsKeys::KUiOrientation, + MusSettingsKeys::EPortrait ) ); + User::LeaveIfError( self->Set ( MusSettingsKeys::KCapabilityQuery, + MusSettingsKeys::ENoOptions ) ); + User::LeaveIfError( self->Set ( MusSettingsKeys::KAllowOnlyIn3GNetwork, + MusSettingsKeys::EAllowedAllBearers ) ); + + } + +void CSipSseTestTls::Close () + { + CSipSseTestTls* self = Storage(); + delete self; + Dll::SetTls( NULL ); + } + + +CSipSseTestTls* CSipSseTestTls::Storage() + { + return static_cast(Dll::Tls()); + } + +CSipSseTestTls::CSipSseTestTls() + : iError( KErrNone ) + { + } + +CSipSseTestTls::~CSipSseTestTls() + { + delete iClientRequest; + delete iClientResponse; + iKeys.Reset(); + iValues.Reset(); + } + +void CSipSseTestTls::Reset() + { + Storage()->Set ( MusSettingsKeys::KActivation, + MusSettingsKeys::EAlwaysActive ); + Storage()->Set ( MusSettingsKeys::KAuditoryNotification, + MusSettingsKeys::EAuditoryNotificationOff ); + Storage()->Set ( MusSettingsKeys::KPopupNotification, + MusSettingsKeys::EPopupNotificationOff ); + Storage()->Set ( MusSettingsKeys::KPopupNotificationType, + MusSettingsKeys::ENotificationTypeQueryUser ); + Storage()->Set ( MusSettingsKeys::KEdgeDtmSupport, + MusSettingsKeys::EDtmModeNotAllowed ); + Storage()->Set ( MusSettingsKeys::KForceInternetSignaling, + MusSettingsKeys::EFollowProfileConfiguration ); + Storage()->Set ( MusSettingsKeys::KAutoRecord, + MusSettingsKeys::EAutoRecordOn ); + Storage()->Set ( MusSettingsKeys::KSipProfileId, + 0 ); //default profile + Storage()->Set ( MusSettingsKeys::KUiOrientation, + MusSettingsKeys::EPortrait ); + Storage()->Set ( MusSettingsKeys::KCapabilityQuery, + MusSettingsKeys::ENoOptions ); + + Storage()->Set ( MusSettingsKeys::KAllowOnlyIn3GNetwork, + MusSettingsKeys::EAllowedAllBearers ); + + iRegistryBehavior = 0; + iProfileBehavior = 0; + iConnectionBehavior = 0; + } + +TInt CSipSseTestTls::Set(TUint32 aKey, TInt aValue) + { + // Setting of any other value + for ( TInt i = 0; i < iKeys.Count(); ++i ) + { + if ( iKeys[i] == aKey ) + { + iValues[i] = aValue; + return KErrNone; + } + } + + // No wise error handling implemented + TInt error = iKeys.Append( aKey ); + if ( error == KErrNone ) + { + error = iValues.Append( aValue ); + } + + return error; + } + +TInt CSipSseTestTls::Get(TUint32 aKey, TInt& aValue) + { + for ( TInt i = 0; i < iKeys.Count(); ++i ) + { + if ( iKeys[i] == aKey ) + { + aValue = iValues[i]; + return KErrNone; + } + } + + return KErrNotFound; + } + +void CSipSseTestTls::SetError( TInt aError ) + { + iError = aError; + } + +TInt CSipSseTestTls::Error() const + { + return iError; + } + + +void CSipSseTestTls::Clear() + { + iError = KErrNone; + iConnectionCount = 0; + iSubConnectionCount = 0; + iUintAttributeValue = 0; + iConnectionId = 0; + iIntAttributeValue = 0; + iRequestStatus = KErrNone; + iPhoneRegistrationStatus = RMobilePhone::ERegistrationUnknown; + iPhoneRegistrationStatusPointer = NULL; + iPhoneNetworkMode = RMobilePhone::ENetworkModeUnknown; + ClientRequest( NULL ); + //iResponseToRequest = SIPStrings::StringF( SipStrConsts::EEmpty ); + } + +void CSipSseTestTls::SetRequestStatus( TRequestStatus& aStatus ) + { + iRequestStatus = aStatus; + } + + +TBool CSipSseTestTls::RegisterStatus() + { + + return iSipRegisterStatus; + } +void CSipSseTestTls::SetRegisterStatus( TBool aStatus ) + { + iSipRegisterStatus = aStatus; + } +TBool CSipSseTestTls::RegisterSent() + { + if ( !iSipRegisterStatus ) + { + iSipRegisterStatus = ETrue; + } + return iSipRegisterStatus; + } + +void CSipSseTestTls::StoreRegistry( MSIPProfileRegistryObserver& aRegistry ) + { + iRegistry = &aRegistry; + } +/* +void CSipSseTestTls::ProfileRegistryEventOccurred(TUint32 aProfileId, MSIPProfileRegistryObserver::TEvent aEvent ) + { + iRegistry->ProfileRegistryEventOccurred( aProfileId,aEvent ); + } + + +void CSipSseTestTls::SetState( MMusAvaObserver::TAvailabilityStatus aStatus ) + { + iStatus = aStatus; + } + */ +TInt CSipSseTestTls::ConnectionCount() + { + return iConnectionCount; + } +void CSipSseTestTls::SetConnectionCount( TInt aCount ) + { + iConnectionCount = aCount; + } + +void CSipSseTestTls::ConnectionInfo( const TUint& aIndex, + TUint& aConnectionId, + TUint& aSubConnectionCount ) + { + aConnectionId = iConnectionId; + aSubConnectionCount = iSubConnectionCount; + } + +void CSipSseTestTls::SetConnectionInfo( TUint aConnectionId, + TUint aSubConnectionCount ) + { + iConnectionId = aConnectionId; + iSubConnectionCount = aSubConnectionCount; + } + +void CSipSseTestTls::GetUintAttribute( const TUint aConnectionId, + const TUint aSubConnectionId, + const TUint aAttribute, + TUint& aValue, + TRequestStatus& aStatus ) + { + aValue = iUintAttributeValue; + aStatus = iRequestStatus; + } +void CSipSseTestTls::SetUintAttribute( TUint aConnectionId, + TUint aSubConnectionId, + TUint aAttribute, + TUint aValue, + TRequestStatus& aStatus ) + { + iUintAttributeValue = aValue; + iRequestStatus = aStatus; + } + +void CSipSseTestTls::GetIntAttribute( const TUint aConnectionId, + const TUint aSubConnectionId, + const TUint aAttribute, + TInt& aValue, + TRequestStatus& aStatus ) + { + aValue = iIntAttributeValue; + aStatus = iRequestStatus; + } +void CSipSseTestTls::SetIntAttribute( TUint aConnectionId, + TUint aSubConnectionId, + TUint aAttribute, + TInt aValue, + TRequestStatus& aStatus ) + { + iIntAttributeValue = aValue; + iRequestStatus = aStatus; + } + +void CSipSseTestTls::SetEvent(const CConnMonEventBase& aConnMonEvent) + { + iConnMonEventBase = const_cast( &aConnMonEvent ); + } + +const CConnMonEventBase& CSipSseTestTls::Event() + { + return *iConnMonEventBase; + } + +void CSipSseTestTls::SetRegistrationStatus( RMobilePhone::TMobilePhoneRegistrationStatus aRegStatus ) + { + iPhoneRegistrationStatus = aRegStatus; + } + +void CSipSseTestTls::SetRegistrationStatus( RMobilePhone::TMobilePhoneRegistrationStatus* aRegStatus ) + { + iPhoneRegistrationStatusPointer = aRegStatus; + } + +void CSipSseTestTls::RegistrationStatus( RMobilePhone::TMobilePhoneRegistrationStatus& aReqStatus ) + { + aReqStatus = iPhoneRegistrationStatus; + } + +void CSipSseTestTls::SetPhoneNetworkModeStatus( RMobilePhone::TMobilePhoneNetworkMode aStatus ) + { + iPhoneNetworkMode = aStatus; + } + +RMobilePhone::TMobilePhoneNetworkMode& CSipSseTestTls::PhoneNetworkModeStatus() + { + return iPhoneNetworkMode; + } + + void CSipSseTestTls::ClientRequest( CSIPRequestElements* aRequest ) + { + delete iClientRequest; + iClientRequest = aRequest; + } + +void CSipSseTestTls::ClientResponse( RStringF aMethod, CSIPResponseElements* aResponse ) + { + iResponseToRequest = aMethod; + delete iClientResponse; + iClientResponse = aResponse; + } + +//end of file diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/mustester/Stubs/sipclientstub/src/Csipconnection.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/mustester/Stubs/sipclientstub/src/Csipconnection.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,85 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ +#include "sipconnection.h" +#include "sip.h" +#include "siperr.h" + +CSIPConnection::CSIPConnection(CSIP& aSIP, + TUint32 aIapId, + MSIPConnectionObserver& aObserver) + : iIapId(aIapId), iObserver(aObserver), iState(EActive) + { + iSIP = &aSIP; + } + +void CSIPConnection::ConstructL() + { + } + + +EXPORT_C CSIPConnection* CSIPConnection::NewL(CSIP& aSIP, + TUint32 aIapId, + MSIPConnectionObserver& aSIPConnectionObserver) + { + + CSIPConnection* self = new(ELeave) CSIPConnection(aSIP, aIapId, aSIPConnectionObserver); + CleanupStack::PushL(self); + self->ConstructL(); + CleanupStack::Pop(); + return self; + + } + + +EXPORT_C CSIPConnection::~CSIPConnection() + { + } + +EXPORT_C TUint32 CSIPConnection::IapId() const + { + return iIapId; + } + +EXPORT_C CSIPConnection::TState CSIPConnection::State() const + { + return iState; + } + +EXPORT_C void CSIPConnection::SetState(TState aState) + { + iState = aState; + } + +//TODO:Check if these new functions are needed in sip_stub + +// ----------------------------------------------------------------------------- +// CSIPConnection::SIP +// ----------------------------------------------------------------------------- +// +EXPORT_C CSIP* CSIPConnection::SIP() + { + return iSIP; + } + +// ----------------------------------------------------------------------------- +// CSIPConnection::SIP +// ----------------------------------------------------------------------------- +// +EXPORT_C const CSIP* CSIPConnection::SIP() const + { + return iSIP; + } diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/mustester/Stubs/sipclientstub/src/Csipservertransaction.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/mustester/Stubs/sipclientstub/src/Csipservertransaction.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,87 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + +#include "sipservertransaction.h" +#include "siprequestelements.h" +#include "sipresponseelements.h" +#include +#include +#include "CSipSseTestTls.h" + + +EXPORT_C CSIPServerTransaction::~CSIPServerTransaction() + { + delete iRequestElements; + } + + +CSIPServerTransaction::CSIPServerTransaction( RStringF aType ) + : CSIPTransactionBase( aType, EFalse ) + { + } + + +EXPORT_C CSIPServerTransaction* CSIPServerTransaction::NewL( RStringF aType ) + { + return new(ELeave)CSIPServerTransaction( aType ); + } + + +EXPORT_C void CSIPServerTransaction::SetRequestElements( + CSIPRequestElements* aElements) + { + if( iRequestElements ) + { + delete iRequestElements; + } + + iRequestElements = aElements; + } + + +EXPORT_C void CSIPServerTransaction::SendResponseL( + CSIPResponseElements *aElements) + { + CSipSseTestTls* tls = CSipSseTestTls::Storage(); + if ( tls ) + { + User::LeaveIfError( tls->Error() ); + // tls->SIPSends( Type(), aElements ); + } + else + { + delete aElements; + } + } + + +EXPORT_C const CSIPRequestElements* CSIPServerTransaction::RequestElements() const + { + return iRequestElements; + } + +EXPORT_C TBool CSIPServerTransaction::ResponseAllowed() const + { + if ( Type() == SIPStrings::StringF( SipStrConsts::EAck ) ) + { + return EFalse; + } + else + { + return ETrue; + } + } diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/mustester/Stubs/sipclientstub/src/Csiptransactionbase.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/mustester/Stubs/sipclientstub/src/Csiptransactionbase.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,68 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + +#include "siptransactionbase.h" +#include "sipresponseelements.h" +#include "sipstrings.h" +#include "SipStrConsts.h" + +CSIPTransactionBase::~CSIPTransactionBase() + { + delete iResponseElements; + } + +CSIPTransactionBase::CSIPTransactionBase( RStringF aType, TBool aIsCliTrx ) + : iType(aType), + iIsClientTransaction(aIsCliTrx), + iState(ETrying) + { + + if ( iIsClientTransaction && iType == SIPStrings::StringF( SipStrConsts::EInvite ) ) + { + iState = ECalling; + } + } + +EXPORT_C TBool CSIPTransactionBase::operator==(const CSIPTransactionBase& aTransactionBase) const + { + return (this == &aTransactionBase); + } + +EXPORT_C CSIPTransactionBase::TState CSIPTransactionBase::StateL() + { + return iState; + } + +EXPORT_C RStringF CSIPTransactionBase::Type() const + { + return iType; + } + +EXPORT_C TBool CSIPTransactionBase::IsSIPClientTransaction() const + { + return iIsClientTransaction; + } + +void CSIPTransactionBase::ChangeState( CSIPTransactionBase::TState aNextState ) + { + iState = aNextState; + } + +void CSIPTransactionBase::Detach(const MTransactionAssociation& /*aAssociation*/) + { + } + diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/mustester/Stubs/sipprofilestub/group/sipprofile.mmp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/mustester/Stubs/sipprofilestub/group/sipprofile.mmp Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,48 @@ +/* +* Copyright (c) 2006-2006 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: Definition of project MceClientStub +* +*/ + + +// To get the APP_LAYER_SYSTEMINCLUDE-definition +#include + +#include + +TARGET sipprofilecli.dll +TARGETTYPE dll +UID 0x1000008d 0x00000113 // Experimental UID + +CAPABILITY CAP_GENERAL_DLL +VENDORID VID_DEFAULT + +SOURCEPATH ../src +SOURCE sipmanagedprofileregistrystub.cpp +SOURCE sipmanagedprofilestub.cpp +SOURCE sipprofileregistrybasestub.cpp +SOURCE sipprofileregistrystub.cpp +SOURCE sipprofilestub.cpp +SOURCE sipstub.cpp sipprofilealrcontroller.cpp + + +USERINCLUDE ../inc + +// Default system include paths for application layer modules. +APP_LAYER_SYSTEMINCLUDE + +LIBRARY euser.lib +LIBRARY bafl.lib + +EXPORTUNFROZEN \ No newline at end of file diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/mustester/Stubs/sipprofilestub/inc/sipprofile.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/mustester/Stubs/sipprofilestub/inc/sipprofile.h Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,343 @@ +/* +* Copyright (c) 2003 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: The class providing profile data of SIP service provider +* +*/ + + +#ifndef CSIPPROFILE_H +#define CSIPPROFILE_H + +// INCLUDES +#include +#include +#include +#include "sipregistrationcontext.h" +#include "sipprofiletypeinfo.h" + +// FORWARD DECLARATIONS +class CSIPConcreteProfile; +class CSIPProfileRegistry; +class CSIPProfileRegistryBase; + +/** +* SIP Profile ID which value is type of TUint32 +*/ +const TUint32 KSIPProfileId = 1; + +/** +* SIP Provider Name which value is type of TDesC8 +*/ +const TUint32 KSIPProviderName = 2; + +/** +* Access Point ID which value is type of TUint32 +*/ +const TUint32 KSIPAccessPointId = 3; + +/** +* Signaling compression (SigComp) which value is type of TBool. +* ETrue indicates that SigComp is enabled +*/ +const TUint32 KSIPSigComp = 4; + +/** +* Security Negotiation which value is type of TBool. ETrue indicates that +* Security Negotiation is enabled +*/ +const TUint32 KSIPSecurityNegotiation = 5; + +/** +* Auto Registration which value is type of TBool. ETrue indicates that +* profile is enabled for auto registration +*/ +const TUint32 KSIPAutoRegistration = 6; + +/** +* Defined user's address-of-record which value is type of TDesC8 +*/ +const TUint32 KSIPUserAor = 7; + +/** +* Registration which value is type of TBool. ETrue indicates that +* profile is registered +*/ +const TUint32 KSIPProfileRegistered = 8; + +/** +* Uers's registered address-of-records which value is of type MDesC8Array. +* Note that array will contain AORs only in case the profile is registered. +*/ +const TUint32 KSIPRegisteredAors = 9; + +/** +* Negotiated security mechanism during registration procedure which value +* is of type TDesC8. +* Note that descriptor will contain value only in case the profile is +* registered. +*/ +const TUint32 KSIPNegotiatedSecurityMechanism = 10; + +/** +* Default profile which value is type of TBool. +* ETrue indicates that profile is default +*/ +const TUint32 KSIPDefaultProfile = 11; + +/** +* "Contact" header parameters used during registration which value +*is of type MDesC8Array. Array element contains one "Contact" header +* parameter. +*/ +const TUint32 KSIPContactHeaderParams = 12; + +/** +* SIP Registrar +*/ +const TUint32 KSIPRegistrar = 130; + +/** +* SIP Outbound Proxy +*/ +const TUint32 KSIPOutboundProxy = 131; + +/** +* HTTP Digest user name which value is type of TDesC8 +*/ +const TUint32 KSIPDigestUserName = 150; + +/** +* HTTP Digest realm which value is type of TDesC8 +*/ +const TUint32 KSIPDigestRealm = 151; + +/** +* SIP server's address which value is of type TDesC8 +*/ +const TUint32 KSIPServerAddress = 152; + +// CLASS DECLARATION +/** +* @publishedAll +* @released +* +* Class contains profile information of particular SIP service +* provider. Class provides functions for quering profile parameter +* values. +* @lib sipprofilecli.lib +*/ +class CSIPProfile: public CBase, public MSIPRegistrationContext + { + public: // Constructors and destructor + /** + * Destructor. + * @capability NetworkServices + */ + IMPORT_C ~CSIPProfile(); + + public: // New functions + /** + * Gets profile type information + * @return profile type information + */ + IMPORT_C const TSIPProfileTypeInfo& Type() const; + + /** + * Gets profile parameter + * @param aParam a parameter to get + * @param aVal on return will contain parameter value + * @return KErrNotFound if parameter was not found, KErrNone otherwise + */ + IMPORT_C TInt GetParameter(TUint32 aParam, TDesC8 const *& aVal) const; + + /** + * Gets profile parameter + * @param aParam a parameter to get + * @param aVal on return will contain parameter value + * @return KErrNotFound if parameter was not found, KErrNone otherwise + */ + IMPORT_C TInt GetParameter(TUint32 aParam, TUint32& aVal) const; + + /** + * Gets profile parameter + * @param aParam a parameter to get + * @param aVal on return will contain parameter value + * @return KErrNotFound if parameter was not found, KErrNone otherwise + */ + IMPORT_C TInt GetParameter(TUint32 aParam, TBool& aVal) const; + + /** + * Gets profile parameter + * @param aParam a parameter to get + * @param aVal on return will contain parameter value + * @return KErrNotFound if parameter was not found, KErrNone otherwise + */ + IMPORT_C TInt GetParameter(TUint32 aParam, MDesC8Array const *& aVal) const; + + /** + * Gets profile parameter that is defined for a particular SIP server + * @param aServer a SIP server type + * @param aParam a parameter to get + * @param aVal on return will contain parameter value + * @return KErrNotFound if parameter was not found, KErrNone otherwise + */ + IMPORT_C TInt GetParameter(TUint32 aServerType, TUint32 aParam, TDesC8 const *& aVal) const; + + public: //Functions from base class + /** + * Tests if the registration context can be + * used for creating SIP messages/dialogs + * Profile can be used, when CSIPProfileRegistry::IsEnabled() == ETrue + * and Status() == ERegistered. + * @return ETrue if can be used, EFalse otherwise + */ + TBool IsContextActive() const; + + /** + * + * For internal use only + * @return context id + */ + TUint32 ContextId() const; + + + public: //New functions + + /** + * Two-phased constructor. + * @param aSIPRegistry a SIP profile client providing connection to SIP + * profile server. + */ + + static CSIPProfile* NewL(CSIPProfileRegistry* aSIPRegistry); + + /** + * Two-phased constructor. + * @param aSIPRegistry a SIP profile client providing connection to SIP + * profile server. + * Constructs an object and adds the pointer to the cleanup stack; + */ + + static CSIPProfile* NewLC(CSIPProfileRegistry* aSIPRegistry); + + /** + * Sets profiles enabled state + * @param aEnabled ETrue if enabled + */ + + void SetEnabled(TBool aEnabled); + + /** + * Sets concrete profile that holds actual data + * @param aProfile profile instance containing data + */ + + void SetConcreteProfile(CSIPConcreteProfile* aProfile); + + /** + * Clears concrete profile that holds actual data + */ + + void ClearConcreteProfile(); + + /** + * Gets concrete profile that holds actual data + * @return concrete profile holding data + */ + + CSIPConcreteProfile& ConcreteProfile(); + + /** + * Gets concrete profile that holds actual data + * @return concrete profile holding data + */ + + const CSIPConcreteProfile& ConcreteProfile() const; + + /** + * Checks if the profile is enabled + * @return ETrue if enabled, EFalse otherwise + */ + + TBool IsEnabled() const; + + /** + * Gets last occurred error during registration + * @return last occurred error code, KErrNone if no error + */ + TInt LastRegistrationError() const; + + /** + * Checks if two profiles are equal + * @return ETrue if equal + */ + TBool operator==(const CSIPProfile& + aProfile) const; + + /** + * sets pointer to registry for profile + */ + void SetRegistry(CSIPProfileRegistryBase* aRegistry); + + /** + * Clears pointer to registry from profile + */ + void ClearRegistry(); + + protected: + + /** + * Constructor. + */ + CSIPProfile(CSIPProfileRegistryBase* aRegistry); + + /** + * 2nd phase constructor. + */ + void ConstructL(); + + protected: + + CSIPConcreteProfile* iSIPProfile; + CSIPProfileRegistryBase* iSIPProfileRegistry; + + // Stub data + + public: + + TBool iEnabled; + TBool iIsDefaultProfile; + + TSIPProfileTypeInfo iTypeInfo; + + // Value iTUint32Value is set to aVal when calling + // GetParameter(TUint32 aParam, TUint32& aVal) + // if iTUint32ValueError == KErrNone. + // iTUint32ValueError is returned in any case + TUint32 iTUint32Value; + TInt iTUint32ValueError; + + // Value iTBoolValue is set to aVal when calling + // GetParameter(TUint32 aParam, TBool& aVal) + // if iTBoolValueError == KErrNone. + // iTBoolValueError is returned in any case + TBool iTBoolValue; + TInt iTBoolValueError; + + CDesC8Array* iArray; + + // + }; + +#endif // CSIPPROFILE_H diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/mustester/Stubs/sipprofilestub/inc/sipprofileregistry.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/mustester/Stubs/sipprofilestub/inc/sipprofileregistry.h Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,185 @@ +/* +* Copyright (c) 2003 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: The class for using SIP profiles +* +*/ + + +#ifndef CSIPPROFILEREGISTRY_H +#define CSIPPROFILEREGISTRY_H + +// INCLUDES +#include +#include +#include +#include "sipprofileregistrybase.h" + +// FORWARD DECLARATIONS +class CSIP; +class CSIPConnection; +class CSIPProfile; +class MSIPProfileRegistryObserver; +class MSIPConnectionObserver; + +// STUB stuff + +typedef TInt TSIPProfileBehavior; +const TSIPProfileBehavior KRegistryLeaveAtConstruct = 1; +const TSIPProfileBehavior KSIPProfileIdFetchFails = 2; +const TSIPProfileBehavior KSIPIapIdFetchFails = 3; +const TSIPProfileBehavior KSIPConnectionLeaveAtConstruct = 4; + +class CSIPProfileBehaviorTls : public CBase + { +public: + static void OpenL(); + static void Close(); + + static CSIPProfileBehaviorTls* Storage(); + + void Reset(); + +private: + + CSIPProfileBehaviorTls(); + ~CSIPProfileBehaviorTls(); + +public: + + TSIPProfileBehavior iRegistryBehavior; + TSIPProfileBehavior iProfileBehavior; + TSIPProfileBehavior iConnectionBehavior; + }; + + + +// CLASS DECLARATION +/** +* @publishedAll +* @released +* +* The class for retrieving SIP profiles from permanent storage. +* This class provides services for retreiving SIP profiles +* and enabling/disabling them for the usage. +* +* The user can create only one instance of this class (a singleton class). +* +* @lib sipprofilecli.lib +*/ +class CSIPProfileRegistry: public CSIPProfileRegistryBase + { + public: // Constructors and destructor + /** + * Two-phased constructor. + * This constructor should be used if the client intends + * to use SIP services with profiles. + * @param aSip a SIP client providing connection to SIP stack. + * @param aObserver a observer for SIP profile change events. + */ + IMPORT_C static CSIPProfileRegistry* NewL( + CSIP& aSip, + MSIPProfileRegistryObserver& aObserver); + + /** + * Two-phased constructor. + * This constructor should be used if the client intends + * to use SIP services with profiles. + * Constructs an object and adds the pointer to the cleanup stack; + * @param aSip a SIP client providing connection to SIP stack. + * @param aObserver a observer for SIP profile change events. + */ + IMPORT_C static CSIPProfileRegistry* NewLC( + CSIP& aSip, + MSIPProfileRegistryObserver& aObserver); + + /** + * Destructor + */ + IMPORT_C ~CSIPProfileRegistry(); + + public: // New functions + /** + * Gets handle to the SIP server + * @return handle to the SIP server + */ + IMPORT_C CSIP& SIP() const; + + /** + * Gets the SIP connection to be used with this SIP profile. + * @pre IsEnabled() == ETrue + * @param aProfile a sip profile + * @return a SIP connection to be used; the owneship is transfered + * @leave KErrNoMemory if out of memory + * @capability NetworkServices + */ + IMPORT_C CSIPConnection* ConnectionL( + CSIPProfile& aProfile); + + /** + * Enables the SIP profile for use. + * Enabling the SIP profile will cause the SIP profile to + * be registered if its status was unregistered. + * The user must check the profile status after calling this + * function. In case the profile is not registered the user must + * wait until the it is notified about profile registration + * on MSIPProfileRegistryObserver-callback interface. + * @param aProfile a sip profile to enable + * @param aObserver a observer for SIP connection events + * @leave KErrNotFound if non-existing profile is provided + * @capability NetworkServices + */ + IMPORT_C void EnableL( + CSIPProfile& aProfile, + MSIPConnectionObserver &aObserver); + + /** + * Disables the usage of SIP profile + * @param aProfile a sip profile to disable + * @return KErrNone if SIP profile was successfully disabled; + * system wide error otherwise + * @capability NetworkServices + */ + IMPORT_C TInt Disable(CSIPProfile& aProfile); + + /** + * Tests is the SIP profile enabled for the use + * @param aProfile a SIP profile to be checked + * @return ETrue if SIP profile is enabled; EFalse otherwise + */ + IMPORT_C TBool IsEnabled(const CSIPProfile& aProfile) const; + + public: + + CSIPProfile* NewInstanceL(); + + private: + + CSIPProfileRegistry(); + CSIPProfileRegistry(CSIP& aSip, MSIPProfileRegistryObserver& aObserver); + + void ConstructL(); + + public: + + TBool iProfileDisabled; + mutable TBool iProfileEnabled; + + private: + + CSIP& iSip; + MSIPConnectionObserver* iConnectionObserver; + + }; + +#endif // CSIPPROFILEREGISTRY_H diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/mustester/Stubs/sipprofilestub/src/sipmanagedprofileregistrystub.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/mustester/Stubs/sipprofilestub/src/sipmanagedprofileregistrystub.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,164 @@ +/* +* Copyright (c) 2003 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 +* +*/ + + +// INCLUDE FILES + +#include "sip.h" +#include "sipconnection.h" +#include "sipprofileregistry.h" +#include "sipmanagedprofileregistry.h" +#include "sipprofileregistryobserver.h" +#include "sipprofile.h" +#include "sipmanagedprofile.h" +//#include "sipconcreteprofile.h" + +// ============================ MEMBER FUNCTIONS =============================== +EXPORT_C void CSIPManagedProfileRegistry::SaveL(CSIPProfile& /*aSIPProfile*/) + { + + } + +// ----------------------------------------------------------------------------- +// CSIPManagedProfileRegistry::NewL +// Two-phased constructor. +// ----------------------------------------------------------------------------- +// +EXPORT_C CSIPManagedProfileRegistry* CSIPManagedProfileRegistry::NewL( + MSIPProfileRegistryObserver& aObserver) + { + CSIPManagedProfileRegistry* self = CSIPManagedProfileRegistry::NewLC(aObserver); + CleanupStack::Pop(self); + return self; + } + +// ----------------------------------------------------------------------------- +// CSIPManagedProfileRegistry::NewLC +// Two-phased constructor. +// ----------------------------------------------------------------------------- +// +EXPORT_C CSIPManagedProfileRegistry* CSIPManagedProfileRegistry::NewLC( + MSIPProfileRegistryObserver& aObserver) + { + CSIPManagedProfileRegistry* self = new (ELeave) CSIPManagedProfileRegistry(aObserver); + CleanupStack::PushL(self); + self->ConstructL(); + return self; + } + +// ----------------------------------------------------------------------------- +// CSIPManagedProfileRegistry::~CSIPManagedProfileRegistry +// ----------------------------------------------------------------------------- +// +EXPORT_C CSIPManagedProfileRegistry::~CSIPManagedProfileRegistry() + { + + } +/* +// ----------------------------------------------------------------------------- +// CSIPManagedProfileRegistry::EnableL +// ----------------------------------------------------------------------------- +// +EXPORT_C void CSIPManagedProfileRegistry::EnableL(CSIPProfile& aSIPProfile, + MSIPConnectionObserver& aObserver) + { + //__ASSERT_ALWAYS (!aSIPProfile.IsEnabled(), User::Leave (KErrArgument)); + //aSIPProfile.ConcreteProfile().SetLastRegistrationError(KErrNone); + //iConnectionObserver = &aObserver; + + //EnableProfileL(aSIPProfile); + } + +// ----------------------------------------------------------------------------- +// CSIPManagedProfileRegistry::Disable +// ----------------------------------------------------------------------------- +// +EXPORT_C TInt CSIPManagedProfileRegistry::Disable(CSIPProfile& /*aProfile) + { + TInt err = KErrNone; + //aProfile.ConcreteProfile().SetLastRegistrationError(KErrNone); + //TRAPD(err, DisableProfileL(aProfile)); + return err; + } + +// ----------------------------------------------------------------------------- +// CSIPManagedProfileRegistry::SIP +// ----------------------------------------------------------------------------- +// +EXPORT_C CSIP& CSIPManagedProfileRegistry::SIP() const + { + return iSip; + } + +// ----------------------------------------------------------------------------- +// CSIPManagedProfileRegistry::ConnectionL +// ----------------------------------------------------------------------------- +// +//EXPORT_C CSIPConnection* CSIPManagedProfileRegistry::ConnectionL( +// /*CSIPProfile& aSIPProfile) +// { + //TUint32 apId(0); + //__ASSERT_ALWAYS (iConnectionObserver != 0, User::Leave (KErrArgument)); + //aSIPProfile.GetParameter(KSIPAccessPointId, apId); + //CSIPConnection* connection = iSip.Connection(apId); + //if (connection == 0) + // { + // connection = CSIPConnection::NewL(iSip, apId, + // *iConnectionObserver); + // } + //return connection; +// } + +// ----------------------------------------------------------------------------- +// CSIPManagedProfileRegistry::IsEnabled +// ----------------------------------------------------------------------------- +// +EXPORT_C TBool CSIPManagedProfileRegistry::IsEnabled(const CSIPProfile& /*aSIPProfile) const + { + //return aSIPProfile.IsEnabled(); + return ETrue; + } +*/ +// ----------------------------------------------------------------------------- +// CSIPManagedProfileRegistry::CSIPManagedProfileRegistry +// ----------------------------------------------------------------------------- +// +CSIPManagedProfileRegistry::CSIPManagedProfileRegistry( + MSIPProfileRegistryObserver& aObserver) + : CSIPProfileRegistryBase( aObserver ) + { + } + +// ----------------------------------------------------------------------------- +// CSIPManagedProfileRegistry::ConstructL +// ----------------------------------------------------------------------------- +// +void CSIPManagedProfileRegistry::ConstructL() + { +// BaseConstructL(); + + } + +// ----------------------------------------------------------------------------- +// CSIPManagedProfileRegistry::NewInstanceL +// ----------------------------------------------------------------------------- +// +CSIPProfile* CSIPManagedProfileRegistry::NewInstanceL() + { + return CSIPManagedProfile::NewL(this); + } + diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/mustester/Stubs/sipprofilestub/src/sipmanagedprofilestub.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/mustester/Stubs/sipprofilestub/src/sipmanagedprofilestub.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,141 @@ +/* +* 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: implementation +* +*/ + + +// INCLUDE FILES + +#include "sipprofile.h" +#include "sipmanagedprofile.h" +#include "sipprofileregistry.h" +#include "sipmanagedprofileregistry.h" + +/* + +//#include "sipconcreteprofile.h" +//#include "SIPProfileTypeInfo.h" +//_LIT8(KSIPProfileExtenstionParameter, "%u"); +//const TUint KProfileBufferSize = 25; + +_LIT8(KSIPProfileDefAOR, "user@aa"); + /** + * Sets profile parameter + * @param aParam a parameter to set + * @param aVal values to set; an empty array resets the value + * @return KErrNotFound if parameter was not found, + * KErrNoMemory if out of memory + * KErrNone otherwise + */ +EXPORT_C TInt CSIPManagedProfile::SetParameter( TUint32 /*aParam*/, + const MDesC8Array& /*aVal*/ ) + { + return KErrNone; + } + +// ============================ MEMBER FUNCTIONS =============================== + + +// ----------------------------------------------------------------------------- +// CSIPManagedProfile::NewL +// Two-phased constructor. +// ----------------------------------------------------------------------------- +// +CSIPManagedProfile* CSIPManagedProfile::NewL(CSIPManagedProfileRegistry* aSIPRegistry) + { + CSIPManagedProfile* self = CSIPManagedProfile::NewLC (aSIPRegistry); + CleanupStack::Pop(); + return self; + } + +// ----------------------------------------------------------------------------- +// CSIPManagedProfile::NewLC +// Two-phased constructor. +// ----------------------------------------------------------------------------- +// +CSIPManagedProfile* CSIPManagedProfile::NewLC(CSIPManagedProfileRegistry* aSIPRegistry) + { + CSIPManagedProfile* self = new(ELeave)CSIPManagedProfile(aSIPRegistry); + CleanupStack::PushL (self); + return self; + } + +// ----------------------------------------------------------------------------- +// CSIPManagedProfile::~CSIPManagedProfile +// ----------------------------------------------------------------------------- +// +EXPORT_C CSIPManagedProfile::~CSIPManagedProfile() + { + } +/* +// ----------------------------------------------------------------------------- +// CSIPManagedProfile::GetParameter +// ----------------------------------------------------------------------------- +// +EXPORT_C TInt CSIPManagedProfile::GetParameter(TUint32 aParam, TDesC8 const *& aVal ) const + { + const TDesC8& val= KSIPProfileDefAOR; + aVal = &val; + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// CSIPManagedProfile::GetParameter +// ----------------------------------------------------------------------------- +// +EXPORT_C TInt CSIPManagedProfile::GetParameter(TUint32 aParam, TUint32& aVal) const + { + aVal = 1; + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// CSIPManagedProfile::GetParameter +// ----------------------------------------------------------------------------- +// +EXPORT_C TInt CSIPManagedProfile::GetParameter(TUint32 aParam, TBool& aVal) const + { + aVal = ETrue; + return KErrNone; + } +*/ +// ----------------------------------------------------------------------------- +// CSIPManagedProfile::CSIPManagedProfile +// ----------------------------------------------------------------------------- +// +CSIPManagedProfile::CSIPManagedProfile(CSIPManagedProfileRegistry* aRegistry) : + CSIPProfile( aRegistry ) + { + } + +/* +// ----------------------------------------------------------------------------- +// CSIPManagedProfile::IsContextActive +// ----------------------------------------------------------------------------- +// +TBool CSIPManagedProfile::IsContextActive() const + { + return ETrue; + } + +// ----------------------------------------------------------------------------- +// CSIPManagedProfile::ContextId +// ----------------------------------------------------------------------------- +// +TUint32 CSIPManagedProfile::ContextId() const + { + return 1; + } +*/ \ No newline at end of file diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/mustester/Stubs/sipprofilestub/src/sipprofilealrcontroller.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/mustester/Stubs/sipprofilestub/src/sipprofilealrcontroller.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,64 @@ +/* +* 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: implementation +* +*/ + + +// INCLUDE FILES + +#include + + +// CSipProfileAlrController STUB +CSipProfileAlrController* CSipProfileAlrController::NewL( + CSIPProfileRegistryBase& aRegistry, + MSipProfileAlrObserver& /*aObserver*/ ) + { + return new( ELeave )CSipProfileAlrController( aRegistry ); + } + +CSipProfileAlrController::~CSipProfileAlrController() + { + } + +void CSipProfileAlrController::AllowMigrationL( + TUint32 /*aProfileId*/, + TUint32 aIapId ) + { + delete HBufC::NewL( 1 ); + //iAllowMigrationCalled = ETrue; + //iLastUsedIap = aIapId; + } + +void CSipProfileAlrController::DisallowMigrationL( + TUint32 /*aProfileId*/, + TUint32 aIapId ) + { + delete HBufC::NewL( 1 ); + //iDisallowMigrationCalled = ETrue; + //iLastUsedIap = aIapId; + } + +void CSipProfileAlrController::RefreshIapAvailabilityL( + TUint32 /*aProfileId*/ ) + { + delete HBufC::NewL( 1 ); + } + +CSipProfileAlrController::CSipProfileAlrController( + CSIPProfileRegistryBase& aRegistry ) + : iRegistry( aRegistry ) + { + } diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/mustester/Stubs/sipprofilestub/src/sipprofileregistrybasestub.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/mustester/Stubs/sipprofilestub/src/sipprofileregistrybasestub.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,383 @@ +/* +* Copyright (c) 2003 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 +* +*/ + + +// INCLUDE FILES + +#include "sipprofile.h" +#include "sip.h" +#include "sipprofileregistrybase.h" +#include "sipprofileregistryobserver.h" +#include "sipprofileregistry.h" +#include "sipprofileregistryobserver.h" +#include "sipmanagedprofile.h" + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CSIPProfileRegistryBase::~CSIPProfileRegistryBase +// ----------------------------------------------------------------------------- +// +EXPORT_C CSIPProfileRegistryBase::~CSIPProfileRegistryBase() + { + + + //iProfiles.ResetAndDestroy(); + //iProfiles.Close(); + + } + +// ----------------------------------------------------------------------------- +// CSIPProfileRegistryBase::ProfilesL +// ----------------------------------------------------------------------------- +// +EXPORT_C void CSIPProfileRegistryBase::ProfilesL( + RPointerArray& aProfiles) + { + // stubs + CSIPProfileRegistry* reg = (CSIPProfileRegistry*) this; + CSIPProfile* profile = CSIPProfile::NewLC(reg); + + aProfiles.AppendL ( profile ); + + CleanupStack::Pop( profile ); + + + } + +// ----------------------------------------------------------------------------- +// CSIPProfileRegistryBase::ProfilesL +// ----------------------------------------------------------------------------- +// +EXPORT_C void CSIPProfileRegistryBase::ProfilesL( + const TSIPProfileTypeInfo& /*aType*/, + RPointerArray& aProfiles) + { + // stubs + CSIPProfileRegistry* reg = (CSIPProfileRegistry*) this; + + CSIPProfile* profile = CSIPProfile::NewLC( reg ); + aProfiles.AppendL ( profile ); + + CleanupStack::Pop( profile ); + + } + +// ----------------------------------------------------------------------------- +// CSIPProfileRegistryBase::ProfilesL +// ----------------------------------------------------------------------------- +// +EXPORT_C void CSIPProfileRegistryBase::ProfilesL( + const TDesC8& /*aAOR*/, + RPointerArray& aProfiles) + { + // stubs + ProfilesL( aProfiles ); + } + +// ----------------------------------------------------------------------------- +// CSIPProfileRegistryBase::ProfilesCommonL +// ----------------------------------------------------------------------------- +// +void CSIPProfileRegistryBase::ProfilesCommonL( + RPointerArray& /*aProfiles*/, + CSIPConcreteProfileHolder* /*aHolder */) + { + User::Leave( KErrNotSupported ); + } + +// ----------------------------------------------------------------------------- +// CSIPProfileRegistryBase::ProfileL +// ----------------------------------------------------------------------------- +// +EXPORT_C CSIPProfile* CSIPProfileRegistryBase::ProfileL(TUint32 /*aId*/) + { + return NewInstanceL(); + } + + +// +// ----------------------------------------------------------------------------- +// CSIPProfileRegistryBase::DefaultProfileL +// ----------------------------------------------------------------------------- +// +EXPORT_C CSIPProfile* CSIPProfileRegistryBase::DefaultProfileL() + { + CSIPProfile* defaultProfile = NewInstanceL(); + defaultProfile->iIsDefaultProfile = ETrue; + return defaultProfile; + } + +// ----------------------------------------------------------------------------- +// CSIPProfileRegistryBase::SupportedProfileTypesL +// ----------------------------------------------------------------------------- +// +EXPORT_C void CSIPProfileRegistryBase::SupportedProfileTypesL( + RArray& /*aSupportedProfileTypes*/ ) + { + User::Leave( KErrNotSupported ); + } + +// ----------------------------------------------------------------------------- +// CSIPProfileRegistryBase::LastRegistrationError +// ----------------------------------------------------------------------------- +// +EXPORT_C TInt CSIPProfileRegistryBase::LastRegistrationError( + const CSIPProfile& /*aProfile*/) const + { + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// CSIPProfileRegistryBase::CSIPProfileRegistryBase +// ----------------------------------------------------------------------------- +// +CSIPProfileRegistryBase::CSIPProfileRegistryBase( + MSIPProfileRegistryObserver& aObserver): + iObserver(aObserver) + { + + } + +// ----------------------------------------------------------------------------- +// CSIPProfileRegistryBase::ProfileDeleted +// ----------------------------------------------------------------------------- +// +void CSIPProfileRegistryBase::ProfileDeleted(CSIPProfile& /*aProfile*/) + { + } + +// ----------------------------------------------------------------------------- +// CSIPProfileRegistryBase::EnableProfileL +// ----------------------------------------------------------------------------- +// +void CSIPProfileRegistryBase::EnableProfileL( + CSIPProfile& /*aProfile*/) + { + User::Leave( KErrNotSupported ); + } + +// ----------------------------------------------------------------------------- +// CSIPProfileRegistryBase::DisableProfileL +// ----------------------------------------------------------------------------- +// +void CSIPProfileRegistryBase::DisableProfileL(CSIPProfile& /*aProfile*/) + { + User::Leave( KErrNotSupported ); + } + +// ----------------------------------------------------------------------------- +// CSIPProfileRegistryBase::UsageL +// ----------------------------------------------------------------------------- +// +TInt CSIPProfileRegistryBase::UsageL(const CSIPProfile& /*aProfile*/) const + { + User::Leave( KErrNotSupported ); + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// CSIPProfileRegistryBase::AddProfileL +// ----------------------------------------------------------------------------- +// +void CSIPProfileRegistryBase::AddProfileL(CSIPProfile& /*aProfile*/) + { + User::Leave( KErrNotSupported ); + } + +// ----------------------------------------------------------------------------- +// CSIPProfileRegistryBase::UpdateProfileL +// ----------------------------------------------------------------------------- +// +void CSIPProfileRegistryBase::UpdateProfileL(CSIPProfile& /*aProfile*/) + { + User::Leave( KErrNotSupported ); + } + +// ----------------------------------------------------------------------------- +// CSIPProfileRegistryBase::RemoveProfileL +// ----------------------------------------------------------------------------- +// +void CSIPProfileRegistryBase::RemoveProfileL(CSIPProfile& /*aProfile*/) + { + User::Leave( KErrNotSupported ); + } + +// ----------------------------------------------------------------------------- +// CSIPProfileRegistryBase::IsDefaultProfileL +// ----------------------------------------------------------------------------- +// +TBool CSIPProfileRegistryBase::IsDefaultProfileL(const CSIPProfile& /*aProfile*/) + { + User::Leave( KErrNotSupported ); + return ETrue; + } + +// ----------------------------------------------------------------------------- +// CSIPProfileRegistryBase::RegistrationStatusChangedL +// ----------------------------------------------------------------------------- +// +void CSIPProfileRegistryBase::NegotiatedSecurityMechanismL( + CSIPConcreteProfile& /*aProfile*/) + { + User::Leave( KErrNotSupported ); + } + +// ----------------------------------------------------------------------------- +// CSIPProfileRegistryBase::RegisteredAORsL +// ----------------------------------------------------------------------------- +// +void CSIPProfileRegistryBase::RegisteredAORsL(CSIPConcreteProfile& /*aProfile*/) + { + User::Leave( KErrNotSupported ); + } + +// ----------------------------------------------------------------------------- +// CSIPProfileRegistryBase::SIPProfileL +// ----------------------------------------------------------------------------- +// +CSIPProfile* CSIPProfileRegistryBase::SIPProfileL(TUint32 aId, TInt /*aSize*/) + { + __ASSERT_ALWAYS (aId > 1, User::Leave (KErrArgument)); + return NULL; + } + +// ----------------------------------------------------------------------------- +// CSIPProfileRegistryBase::StoreProfileL +// ----------------------------------------------------------------------------- +// +void CSIPProfileRegistryBase::StoreProfileL(CSIPProfileCleanupItem* /*aCleanupItem*/) + { + User::Leave( KErrNotSupported ); + } + +// ----------------------------------------------------------------------------- +// CSIPProfileRegistryBase::StoreProfileL +// ----------------------------------------------------------------------------- +// +void CSIPProfileRegistryBase::StoreArrayL( + RPointerArray& /*aProfiles*/, + RPointerArray& /*aRetProfiles*/) + { + User::Leave( KErrNotSupported ); + } + +// ----------------------------------------------------------------------------- +// CSIPProfileRegistryBase::ProfileItemL +// ----------------------------------------------------------------------------- +// +/* +CSIPProfileItem* CSIPProfileRegistryBase::ProfileItemL(TUint aProfileId ) + { + User::Leave( KErrNotSupported ); + return NULL; + } +*/ + +// ----------------------------------------------------------------------------- +// CSIPProfileRegistryBase::ProfileIndex +// ----------------------------------------------------------------------------- +// +TInt CSIPProfileRegistryBase::ProfileIndex (TUint /*profileId*/) + { + return 0; + } + +// ----------------------------------------------------------------------------- +// CSIPProfileRegistryBase::ProfileItemByIndex +// ----------------------------------------------------------------------------- +// +CSIPProfileItem* CSIPProfileRegistryBase::ProfileItemByIndex(TUint /*aIndex*/) + { + return NULL; + } + + +// ----------------------------------------------------------------------------- +// CSIPProfileRegistryBase::RegistrationStatusChangedL +// ----------------------------------------------------------------------------- +// +void CSIPProfileRegistryBase::RegistrationStatusChangedL(TUint32 /*aProfileId*/, + TInt /*aStatus*/, + TUint32 /*aStatusId*/) + { + User::Leave( KErrNotSupported ); + } + +// ----------------------------------------------------------------------------- +// CSIPProfileRegistryBase::UpdatedL +// ----------------------------------------------------------------------------- +// +void CSIPProfileRegistryBase::UpdatedL(TUint32 /*aProfileId*/, TUint /*aSize*/) + { + User::Leave( KErrNotSupported ); + } + +// ----------------------------------------------------------------------------- +// CSIPProfileRegistryBase::AddedL +// ----------------------------------------------------------------------------- +// +void CSIPProfileRegistryBase::AddedL(TUint32 /*aProfileId*/) + { + User::Leave( KErrNotSupported ); + } + +// ----------------------------------------------------------------------------- +// CSIPProfileRegistryBase::RemovedL +// ----------------------------------------------------------------------------- +// +void CSIPProfileRegistryBase::RemovedL(TUint32 /*aProfileId*/) + { + User::Leave( KErrNotSupported ); + } + +// ----------------------------------------------------------------------------- +// CSIPProfileRegistryBase::ErrorOccurredL +// ----------------------------------------------------------------------------- +// +void CSIPProfileRegistryBase::ErrorOccurredL(TUint32 /*aProfileId*/, + TInt /*aStatus*/, + TInt /*aError*/ ) + { + User::Leave( KErrNotSupported ); + } + +// ----------------------------------------------------------------------------- +// CSIPProfileRegistryBase::BaseConstructL +// ----------------------------------------------------------------------------- +// +void CSIPProfileRegistryBase::BaseConstructL() + { + + } + +// ----------------------------------------------------------------------------- +// CSIPProfileRegistryBase::CrashRevert +// ----------------------------------------------------------------------------- +// +void CSIPProfileRegistryBase::CrashRevert (TAny* /*aItem*/) + { + } + +// ----------------------------------------------------------------------------- +// CSIPProfileRegistryBase::LocalCrashRevert +// ----------------------------------------------------------------------------- +// +void CSIPProfileRegistryBase::LocalCrashRevert (TAny* /*aItem*/) + { + } + diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/mustester/Stubs/sipprofilestub/src/sipprofileregistrystub.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/mustester/Stubs/sipprofilestub/src/sipprofileregistrystub.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,208 @@ +/* +* Copyright (c) 2003 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 +* +*/ + + +// INCLUDE FILES + +#include "sip.h" +#include "sipconnection.h" +#include "sipprofileregistry.h" +#include "sipprofileregistryobserver.h" +#include "sipprofile.h" +//#include "sipconcreteprofile.h" + +// STUB stuff + +void CSIPProfileBehaviorTls::OpenL() + { + CSIPProfileBehaviorTls* self = new (ELeave) CSIPProfileBehaviorTls(); + Dll::SetTls( self ); + } + +void CSIPProfileBehaviorTls::Close () + { + CSIPProfileBehaviorTls* self = Storage(); + delete self; + Dll::SetTls( NULL ); + } + + +CSIPProfileBehaviorTls* CSIPProfileBehaviorTls::Storage() + { + return static_cast(Dll::Tls()); + } + +void CSIPProfileBehaviorTls::Reset() + { + iRegistryBehavior = 0; + iProfileBehavior = 0; + iConnectionBehavior = 0; + } + +CSIPProfileBehaviorTls::CSIPProfileBehaviorTls() + { + } + +CSIPProfileBehaviorTls::~CSIPProfileBehaviorTls() + { + } + + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CSIPProfileRegistry::NewL +// Two-phased constructor. +// ----------------------------------------------------------------------------- +// +EXPORT_C CSIPProfileRegistry* CSIPProfileRegistry::NewL( + CSIP& aSip, + MSIPProfileRegistryObserver& aObserver) + { + CSIPProfileRegistry* self = CSIPProfileRegistry::NewLC(aSip, aObserver); + CleanupStack::Pop(self); + return self; + } + +// ----------------------------------------------------------------------------- +// CSIPProfileRegistry::NewLC +// Two-phased constructor. +// ----------------------------------------------------------------------------- +// +EXPORT_C CSIPProfileRegistry* CSIPProfileRegistry::NewLC( + CSIP& aSip, + MSIPProfileRegistryObserver& aObserver) + { + CSIPProfileRegistry* self = new (ELeave) CSIPProfileRegistry(aSip, aObserver); + CleanupStack::PushL(self); + self->ConstructL(); + return self; + } + +// ----------------------------------------------------------------------------- +// CSIPProfileRegistry::~CSIPProfileRegistry +// ----------------------------------------------------------------------------- +// +EXPORT_C CSIPProfileRegistry::~CSIPProfileRegistry() + { + + } + +// ----------------------------------------------------------------------------- +// CSIPProfileRegistry::EnableL +// ----------------------------------------------------------------------------- +// +EXPORT_C void CSIPProfileRegistry::EnableL(CSIPProfile& /*aSIPProfile*/, + MSIPConnectionObserver& /*&aObserver*/) + { + //__ASSERT_ALWAYS (!aSIPProfile.IsEnabled(), User::Leave (KErrArgument)); + //aSIPProfile.ConcreteProfile().SetLastRegistrationError(KErrNone); + //iConnectionObserver = &aObserver; + + //EnableProfileL(aSIPProfile); + } + +// ----------------------------------------------------------------------------- +// CSIPProfileRegistry::Disable +// ----------------------------------------------------------------------------- +// +EXPORT_C TInt CSIPProfileRegistry::Disable(CSIPProfile& /*aProfile*/) + { + TInt err = KErrNone; + iProfileDisabled = ETrue; + //aProfile.ConcreteProfile().SetLastRegistrationError(KErrNone); + //TRAPD(err, DisableProfileL(aProfile)); + return err; + } + +// ----------------------------------------------------------------------------- +// CSIPProfileRegistry::SIP +// ----------------------------------------------------------------------------- +// +EXPORT_C CSIP& CSIPProfileRegistry::SIP() const + { + return iSip; + } + +// ----------------------------------------------------------------------------- +// CSIPProfileRegistry::ConnectionL +// ----------------------------------------------------------------------------- +// +//EXPORT_C CSIPConnection* CSIPProfileRegistry::ConnectionL( +// /*CSIPProfile& aSIPProfile*/) +// { + //TUint32 apId(0); + //__ASSERT_ALWAYS (iConnectionObserver != 0, User::Leave (KErrArgument)); + //aSIPProfile.GetParameter(KSIPAccessPointId, apId); + //CSIPConnection* connection = iSip.Connection(apId); + //if (connection == 0) + // { + // connection = CSIPConnection::NewL(iSip, apId, + // *iConnectionObserver); + // } + //return connection; +// } + +// ----------------------------------------------------------------------------- +// CSIPProfileRegistry::IsEnabled +// ----------------------------------------------------------------------------- +// +EXPORT_C TBool CSIPProfileRegistry::IsEnabled(const CSIPProfile& /*aSIPProfile*/) const + { + //iProfileEnabled = ETrue; + return ETrue; + } + +// ----------------------------------------------------------------------------- +// CSIPProfileRegistry::CSIPProfileRegistry +// ----------------------------------------------------------------------------- +// +CSIPProfileRegistry::CSIPProfileRegistry( + CSIP& aSip, + MSIPProfileRegistryObserver& aObserver): + CSIPProfileRegistryBase(aObserver), iSip(aSip) + { + + } + +// ----------------------------------------------------------------------------- +// CSIPProfileRegistry::ConstructL +// ----------------------------------------------------------------------------- +// +void CSIPProfileRegistry::ConstructL() + { + CSIPProfileBehaviorTls* tls = CSIPProfileBehaviorTls::Storage(); + if ( tls ) + { + if ( tls->iRegistryBehavior == KRegistryLeaveAtConstruct ) + { + User::Leave( KErrGeneral ); + } + } + BaseConstructL(); + + } + +// ----------------------------------------------------------------------------- +// CSIPProfileRegistry::NewInstanceL +// ----------------------------------------------------------------------------- +// +CSIPProfile* CSIPProfileRegistry::NewInstanceL() + { + return CSIPProfile::NewL(this); + } + diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/mustester/Stubs/sipprofilestub/src/sipprofilestub.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/mustester/Stubs/sipprofilestub/src/sipprofilestub.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,198 @@ +/* +* 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: implementation +* +*/ + + +// INCLUDE FILES + +#include "sipprofile.h" +//#include "sipmanagedprofile.h" +#include "sipprofileregistry.h" +//#include "sipconcreteprofile.h" +//#include "SIPProfileTypeInfo.h" +//_LIT8(KSIPProfileExtenstionParameter, "%u"); +//const TUint KProfileBufferSize = 25; + +_LIT8(KSIPProfileDefAOR, "user@aa"); + +// ============================ MEMBER FUNCTIONS =============================== + + +// ----------------------------------------------------------------------------- +// CSIPProfile::NewL +// Two-phased constructor. +// ----------------------------------------------------------------------------- +// +CSIPProfile* CSIPProfile::NewL(CSIPProfileRegistry* aSIPRegistry) + { + CSIPProfile* self = CSIPProfile::NewLC (aSIPRegistry); + CleanupStack::Pop(); + return self; + } + +// ----------------------------------------------------------------------------- +// CSIPProfile::NewLC +// Two-phased constructor. +// ----------------------------------------------------------------------------- +// +CSIPProfile* CSIPProfile::NewLC(CSIPProfileRegistry* aSIPRegistry) + { + CSIPProfile* self = new(ELeave)CSIPProfile(aSIPRegistry); + CleanupStack::PushL (self); + self->ConstructL (); + return self; + } + +// ----------------------------------------------------------------------------- +// CSIPProfile::~CSIPProfile +// ----------------------------------------------------------------------------- +// +EXPORT_C CSIPProfile::~CSIPProfile() + { + delete iArray; + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +EXPORT_C const TSIPProfileTypeInfo& CSIPProfile::Type() const + { + return iTypeInfo; + } + +// ----------------------------------------------------------------------------- +// CSIPProfile::GetParameter +// ----------------------------------------------------------------------------- +// +EXPORT_C TInt CSIPProfile::GetParameter( TUint32 /*aParam*/, + TDesC8 const *& aVal ) const + { + const TDesC8& val= KSIPProfileDefAOR; + aVal = &val; + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// CSIPProfile::GetParameter +// ----------------------------------------------------------------------------- +// +EXPORT_C TInt CSIPProfile::GetParameter(TUint32 aParam, TUint32& aVal) const + { + CSIPProfileBehaviorTls* tls = CSIPProfileBehaviorTls::Storage(); + if ( tls ) + { + if ( tls->iProfileBehavior == KSIPProfileIdFetchFails && + aParam == KSIPProfileId ) + { + return KErrNotFound; + } + else if ( tls->iProfileBehavior == KSIPIapIdFetchFails && + aParam == KSIPAccessPointId ) + { + return KErrNotFound; + } + } + + if ( iTUint32ValueError == KErrNone ) + { + aVal = iTUint32Value; + } + return iTUint32ValueError; + } + +// ----------------------------------------------------------------------------- +// CSIPProfile::GetParameter +// ----------------------------------------------------------------------------- +// +EXPORT_C TInt CSIPProfile::GetParameter(TUint32 aParam, TBool& aVal) const + { + if ( iTBoolValueError == KErrNone ) + { + if ( aParam == KSIPDefaultProfile ) + { + aVal = iIsDefaultProfile; + } + else + { + aVal = iTBoolValue; + } + } + + return iTBoolValueError; + } + + +// ----------------------------------------------------------------------------- +// CSIPProfile::GetParameter +// ----------------------------------------------------------------------------- +// +EXPORT_C TInt CSIPProfile::GetParameter( TUint32 /*aParam*/, + MDesC8Array const *& aVal) const + { + if ( iArray ) + { + aVal = iArray; + } + else + { + aVal = NULL; + } + return KErrNone; + } + + +// ----------------------------------------------------------------------------- +// CSIPProfile::CSIPProfile +// ----------------------------------------------------------------------------- +// +CSIPProfile::CSIPProfile(CSIPProfileRegistryBase* aRegistry): + iSIPProfileRegistry(aRegistry), + iEnabled(EFalse), + iTUint32Value( 1 ), + iTUint32ValueError( KErrNone ), + iTBoolValue( ETrue ), + iTBoolValueError( KErrNone ), + iIsDefaultProfile( EFalse ) + { + iTypeInfo.iSIPProfileClass = TSIPProfileTypeInfo::EInternet; + } + +// ----------------------------------------------------------------------------- +// CSIPProfile::ConstructL +// ----------------------------------------------------------------------------- +// +void CSIPProfile::ConstructL() + { + } + +// ----------------------------------------------------------------------------- +// CSIPProfile::IsContextActive +// ----------------------------------------------------------------------------- +// +TBool CSIPProfile::IsContextActive() const + { + return ETrue; + } + +// ----------------------------------------------------------------------------- +// CSIPProfile::ContextId +// ----------------------------------------------------------------------------- +// +TUint32 CSIPProfile::ContextId() const + { + return 1; + } diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/mustester/Stubs/sipprofilestub/src/sipstub.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/mustester/Stubs/sipprofilestub/src/sipstub.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,83 @@ +/* +* 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: implementation +* +*/ + + +// INCLUDE FILES + +#include + + + +EXPORT_C CSIP* CSIP::NewL(const TUid& /*aUid*/, + MSIPObserver& /*aObserver*/) + { + return new ( ELeave ) CSIP; + } + + +EXPORT_C CSIP* CSIP::NewLC(const TUid& /*aUid*/, + MSIPObserver& /*aObserver*/) + { + CSIP* sip = new ( ELeave ) CSIP; + CleanupStack::PushL( sip ); + return sip; + } + + +EXPORT_C CSIP::~CSIP() + { + } + + + +EXPORT_C CDesC8Array* CSIP::SupportedSecurityMechanismsL() const + { + return NULL; + } + + +EXPORT_C TBool CSIP::IsSigCompSupportedL() const + { + return EFalse; + } + + +EXPORT_C HBufC8* CSIP::NegotiatedSecurityMechanismL(const TDesC8& /*aHop*/) + { + return NULL; + } + + +EXPORT_C CSIPConnection* CSIP::Connection(TUint32 /*aIapId*/) const + { + return NULL; + } + + +CSIPImplementation& CSIP::Implementation() + { + return *iImplementation; + } + + +CSIP::CSIP() + { + } + +void CSIP::ConstructL(const TUid& /*aUid*/, MSIPObserver& /*aObserver*/) + { + } \ No newline at end of file diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/mustester/app/lcapplication.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/mustester/app/lcapplication.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,106 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ +//USER +#include "lcapplication.h" +#include "mustestdirector.h" +#include + +//SYSTEM +#include +#include + +LcHbApplication* LcHbApplication::self = 0; + + +// ----------------------------------------------------------------------------- +// LcHbApplication::LcHbApplication +// ----------------------------------------------------------------------------- +// +LcHbApplication::LcHbApplication(int &argc, char *argv[], QString useCase) : + HbApplication(argc, argv) +{ + qDebug() << "LcHbApplication::LcHbApplication() ->"; + self = this; + iTestDirector = CMusTestDirector::NewL(); + setUseCase( useCase ); + qDebug() << "LcHbApplication::LcHbApplication() -<"; +} + +// ----------------------------------------------------------------------------- +// LcHbApplication::~LcHbApplication +// ----------------------------------------------------------------------------- +// +LcHbApplication::~LcHbApplication() +{ + self = 0; +} + + +// ----------------------------------------------------------------------------- +// LcHbApplication::quit +// ----------------------------------------------------------------------------- +// +void LcHbApplication::quit() +{ + qDebug() << "LcHbApplication::quit()"; + if (self) { + emit self->handleQuit(); + } +} + +// ----------------------------------------------------------------------------- +// LcHbApplication::quit +// ----------------------------------------------------------------------------- +// +void LcHbApplication::setUseCase( QString useCase ) +{ + qDebug() << "LcHbApplication::setUseCase()"; + if( useCase == "0") // live + { + qDebug() << "LcHbApplication::LiveUseCase()"; + iTestDirector->ConfigureLiveSharing(); + } + else if( useCase == "1") // clip + { + if (self) emit self->handleQuit(); + } + else if( useCase == "2") // stil + { + if (self) emit self->handleQuit(); + } + else if( useCase == "3") // EMusReceive + { + qDebug() << "LcHbApplication::ReceiveUseCase()"; + iTestDirector->ConfigureReceiveSharing(); + } + else if( useCase == "4") // EMusContinue + { + if (self) emit self->handleQuit(); + } + else if( useCase == "5") // EMusTwoWayVideo + { + if (self) emit self->handleQuit(); + } + else if( useCase == "6") // EMusReceiveTwoWayVideo + { + if (self) emit self->handleQuit(); + } + else + { + if (self) emit self->handleQuit(); + } +} diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/mustester/app/lcapplication.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/mustester/app/lcapplication.h Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,54 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ +#ifndef LCAPPLICATION_H +#define LCAPPLICATION_H + +#include +#include + +class CMusTestDirector; + +class LcHbApplication : public HbApplication +{ + Q_OBJECT + friend class UT_LcApplication; + +public: + + LcHbApplication(int &argc, char *argv[],QString useCase); + ~LcHbApplication(); + +signals: + + void handleQuit(); + +public slots: + + //from QCoreApplication + static void quit(); + +private: + void setUseCase( QString useCase ); + +private: //data + + static LcHbApplication* self; + CMusTestDirector* iTestDirector; +}; + + +#endif //LCAPPLICATION_H diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/mustester/app/main.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/mustester/app/main.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,42 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ +//USER +#include "lcapplication.h" + +//SYSTEM +#include +#include + +int main(int argc, char *argv[]) +{ + int err=-1; + QString useCase = "0"; // live case + QString engineName("MultimediaSharing"); + QString applicationName("Video Sharing"); + if (argc >= 2) + { + useCase = QString::fromUtf8( argv[2] ); + } + LcHbApplication app(argc,argv,useCase); + LcViewManager viewManager(engineName,applicationName); + QObject::connect( &app, SIGNAL( handleQuit() ), + &viewManager, SLOT( terminateSession() ), + Qt::QueuedConnection ); + + err = app.exec(); + return err; +} diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/mustester/app/moc_lcapplication.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/mustester/app/moc_lcapplication.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,83 @@ +/**************************************************************************** +** Meta object code from reading C++ file 'lcapplication.h' +** +** Created: Mon 14. Sep 11:48:03 2009 +** by: The Qt Meta Object Compiler version 61 (Qt 4.5.0-garden) +** +** WARNING! All changes made in this file will be lost! +*****************************************************************************/ + +#include "lcapplication.h" +#if !defined(Q_MOC_OUTPUT_REVISION) +#error "The header file 'lcapplication.h' doesn't include ." +#elif Q_MOC_OUTPUT_REVISION != 61 +#error "This file was generated using the moc from 4.5.0-garden. It" +#error "cannot be used with the include files from this version of Qt." +#error "(The moc has changed too much.)" +#endif + +QT_BEGIN_MOC_NAMESPACE +static const uint qt_meta_data_LcHbApplication[] = { + + // content: + 2, // revision + 0, // classname + 0, 0, // classinfo + 2, 12, // methods + 0, 0, // properties + 0, 0, // enums/sets + 0, 0, // constructors + + // signals: signature, parameters, type, tag, flags + 17, 16, 16, 16, 0x05, + + // slots: signature, parameters, type, tag, flags + 30, 16, 16, 16, 0x0a, + + 0 // eod +}; + +static const char qt_meta_stringdata_LcHbApplication[] = { + "LcHbApplication\0\0handleQuit()\0quit()\0" +}; + +const QMetaObject LcHbApplication::staticMetaObject = { + { &HbApplication::staticMetaObject, qt_meta_stringdata_LcHbApplication, + qt_meta_data_LcHbApplication, 0 } +}; + +const QMetaObject *LcHbApplication::metaObject() const +{ + return &staticMetaObject; +} + +void *LcHbApplication::qt_metacast(const char *_clname) +{ + if (!_clname) return 0; + if (!strcmp(_clname, qt_meta_stringdata_LcHbApplication)) + return static_cast(const_cast< LcHbApplication*>(this)); + return HbApplication::qt_metacast(_clname); +} + +int LcHbApplication::qt_metacall(QMetaObject::Call _c, int _id, void **_a) +{ + _id = HbApplication::qt_metacall(_c, _id, _a); + if (_id < 0) + return _id; + if (_c == QMetaObject::InvokeMetaMethod) { + switch (_id) { + case 0: handleQuit(); break; + case 1: quit(); break; + default: ; + } + _id -= 2; + } + return _id; +} + +// SIGNAL 0 +void LcHbApplication::handleQuit() +{ + QMetaObject::activate(this, &staticMetaObject, 0, 0); +} +QT_END_MOC_NAMESPACE diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/mustester/app/must.loc --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/mustester/app/must.loc Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,13 @@ +// ============================================================================ +// * Generated by qmake (2.01a) (Qt 4.5.0-garden) on: Mon 14. Sep 11:50:02 2009 +// * This file is generated by qmake and should not be modified by the +// * user. +// ============================================================================ + +#ifdef LANGUAGE_SC +#define STRING_r_short_caption "must" +#define STRING_r_caption "must" +#else +#define STRING_r_short_caption "must" +#define STRING_r_caption "must" +#endif diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/mustester/app/must.pro --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/mustester/app/must.pro Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,36 @@ +# +# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +# All rights reserved. +# This component and the accompanying materials are made available +# under the terms of "Eclipse Public License v1.0" +# which accompanies this distribution, and is available +# at the URL "http://www.eclipse.org/legal/epl-v10.html". +# +# Initial Contributors: +# Nokia Corporation - initial contribution. +# +# Contributors: +# +# Description: +# +# + +TEMPLATE = app +TARGET = must +CONFIG += hb + +# Input +HEADERS += lcapplication.h +HEADERS += mustestdirector.h +INCLUDEPATH += ..\..\..\..\..\inc\ + +SOURCES += main.cpp +SOURCES += lcapplication.cpp +SOURCES += mustestdirector.cpp + +symbian: { + TARGET.UID2 = 0x1000008d + TARGET.UID3 = 0x1028238D + TARGET.CAPABILITY = CAP_APPLICATION NetworkControl SwEvent Location MultimediaDD + LIBS += -llivecommsui -lcentralrepository +} diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/mustester/app/must.rss --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/mustester/app/must.rss Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,21 @@ +// ============================================================================ +// * Generated by qmake (2.01a) (Qt 4.5.0-garden) on: Mon 14. Sep 15:39:08 2009 +// * This file is generated by qmake and should not be modified by the +// * user. +// ============================================================================ + +#include +#include "must.loc" + +RESOURCE LOCALISABLE_APP_INFO r_localisable_app_info + { + short_caption = STRING_r_short_caption; + caption_and_icon = + CAPTION_AND_ICON_INFO + { + caption = STRING_r_caption; + number_of_icons = 0; + icon_file = ""; + }; + } + diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/mustester/app/must_reg.rss --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/mustester/app/must_reg.rss Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,18 @@ +// ============================================================================ +// * Generated by qmake (2.01a) (Qt 4.5.0-garden) on: Mon 14. Sep 15:39:08 2009 +// * This file is generated by qmake and should not be modified by the +// * user. +// ============================================================================ + +#include +#include + +UID2 KUidAppRegistrationResourceFile +UID3 0x1028238D + +RESOURCE APP_REGISTRATION_INFO + { + app_file="must"; + localisable_resource_file="\\resource\\apps\\must"; + + } diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/mustester/app/mustestdirector.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/mustester/app/mustestdirector.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,373 @@ +/* +* 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: +* +*/ + + +// USER +#include "mustestdirector.h" +#include +#include "mussessionproperties.h" +#include "musresourceproperties.h" +#include "mussesseioninformationapi.h" +#include "mussettingskeys.h" +#include "mussettings.inl" + +#include +#include +#include +#include + +_LIT(KTestTelNumber,"+358504869612"); +_LIT( KTestCallProvider,"MultimediaSharing" ); +_LIT( KTestRemoteSipAddress,"sip:siva@musworld.com" ); +_LIT( KTestRemoteSipAddressProposal,"sip:wondering@nokia.com,sip:package@gone.com" ); +_LIT( KTestContactName,"Michel Jackson" ); + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +CMusTestDirector::CMusTestDirector() + { + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// + +CMusTestDirector* CMusTestDirector::NewL() + { + CMusTestDirector* self = new( ELeave )CMusTestDirector(); + self->ConstructL(); + return self; + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// + +void CMusTestDirector::ConstructL() + { + DefinePropertiesL(); + } +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// + +CMusTestDirector::~CMusTestDirector() + { + DeleteProperties(); + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// + +void CMusTestDirector::ConfigureLiveSharing( ) + { + SetUseCase( MultimediaSharing::EMusLiveVideo ); + + TInt error = RProperty::Set( NMusResourceApi::KCategoryUid, NMusSessionInformationApi::KMusTelNumber, KTestTelNumber); + MUS_LOG1("mus: [TEST] return value = %d",error ) + + error = RProperty::Set( NMusResourceApi::KCategoryUid, NMusSessionInformationApi::KMusCallDirection, NMusSessionInformationApi::ECallOrginated); + MUS_LOG1("mus: [TEST] return value = %d",error ) + + error = RProperty::Set( NMusResourceApi::KCategoryUid, NMusSessionInformationApi::KMUSCallProvider, KTestCallProvider); + MUS_LOG1("mus: [TEST] return value = %d",error ) + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// + +void CMusTestDirector::ConfigureReceiveSharing( ) + { + SetUseCase( MultimediaSharing::EMusReceive ); + + TInt error = RProperty::Set( NMusResourceApi::KCategoryUid, NMusSessionInformationApi::KMusTelNumber, KTestTelNumber); + MUS_LOG1("mus: [TEST] return value = %d",error ) + + error = RProperty::Set( NMusResourceApi::KCategoryUid, NMusSessionInformationApi::KMusCallDirection, NMusSessionInformationApi::ECallOrginated); + MUS_LOG1("mus: [TEST] return value = %d",error ) + + error = RProperty::Set( NMusResourceApi::KCategoryUid, NMusSessionInformationApi::KMUSCallProvider, KTestCallProvider); + MUS_LOG1("mus: [TEST] return value = %d",error ) + } +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// + +void CMusTestDirector::SetUseCase( MultimediaSharing::TMusUseCase aUseCase ) + { + TInt err = RProperty::Set( NMusSessionApi::KCategoryUid, NMusSessionApi::KUseCase, ( TInt )aUseCase); + } + +// ----------------------------------------------------------------------------- +// CMusAoPlugin::DefineResourcePropertiesL() +// Note : Ignore Define Errors . Because if define fails for sure Set +// will fail too . But there are some cases in Define Error should +// be ignored like KErrAlreadyExists , KErrPersmissionDenied.So It +// could be better if we dont care Define Error but care about Set Err. +// ----------------------------------------------------------------------------- +// +void CMusTestDirector::DefinePropertiesL() + { + MUS_LOG( "mus: [TEST] -> CMusAoPlugin::DefineResourceProperties") ; + // define resource properties + // they need to be defined here to make them exist always + // Read from cenrep key about the availability of camera and keypad + // if the availability is dynamic then define a key else no. + MusSettingsKeys::TAvailability camera = MusSettingsKeys::EAvailabilityStatic; + MusSettingsKeys::TAvailability keypad = MusSettingsKeys::EAvailabilityStatic ; + MultimediaSharingSettings::ResourceAvailability(camera,keypad); + if( camera == MusSettingsKeys::EAvailabilityDynamic ) + { + DefinePropertyL(NMusResourceApi::KCameraAvailability, + RProperty::EInt,( TInt ) NMusResourceApi::ENotAvailable); + } + if( keypad == MusSettingsKeys::EAvailabilityDynamic ) + { + DefinePropertyL(NMusResourceApi::KKeypadAvailability, + RProperty::EInt,( TInt ) NMusResourceApi::ENotAvailable); + } + DefinePropertyL(NMusResourceApi::KCameraInformation, + RProperty::EInt,( TInt ) NMusResourceApi::EUsePrimaryCamera); + DefinePropertyL(NMusSessionInformationApi::KMusCallEvent, + RProperty::EInt,( TInt ) NMusSessionInformationApi::ENoCall); + DefinePropertyL(NMusSessionInformationApi::KMusCallCount,RProperty::EInt,0); + + DefinePropertyL(NMusSessionInformationApi::KMusTelNumber, + RProperty::EText,KTestTelNumber); + DefinePropertyL(NMusSessionInformationApi::KMUSForbidden, + RProperty::EInt,( TInt ) NMusSessionInformationApi::EMUSAllowed); + DefinePropertyL(NMusSessionInformationApi::KMusCallDirection, + RProperty::EInt,( TInt ) NMusSessionInformationApi::ENoDirection); + + DefinePropertyL(NMusSessionInformationApi::KMUSCallProvider, + RProperty::EText,KTestCallProvider); + + DefineSessionPropertyL(NMusSessionApi::KUseCase, + RProperty::EInt,MultimediaSharing::EMusLiveVideo); + + DefineSessionPropertyL(NMusSessionApi::KStatus, + RProperty::EInt,MultimediaSharing::EMultimediaSharingAvailable); + + DefineSessionPropertyL(NMusSessionApi::KTelNumber, + RProperty::EText,KTestTelNumber); + + DefineSessionPropertyL(NMusSessionApi::KRemoteSipAddress, + RProperty::EText,KTestRemoteSipAddress); + + DefineSessionPropertyL(NMusSessionApi::KRemoteSipAddressProposal, + RProperty::EText,KTestRemoteSipAddressProposal); + + DefineSessionPropertyL(NMusSessionApi::KContactId, + RProperty::EInt,1); + + DefineSessionPropertyL(NMusSessionApi::KContactName, + RProperty::EText,KTestContactName); + + DefineSessionPropertyL(NMusSessionApi::KSipProfileId, + RProperty::EInt,1); + + CRepository* repository = CRepository::NewL(MusSettingsKeys::KRepositoryUid); + TInt uid = 0; + TBool exist = (repository->Get(MusSettingsKeys::KEncodingDevice,uid) == KErrNone); + if( !exist ) + { + TInt uid = 1234; + repository->Create(MusSettingsKeys::KEncodingDevice,uid); + TUint32 modifiedKeyCount(0); + User::LeaveIfError(repository->CommitTransaction(modifiedKeyCount)); + } + delete repository; + + MUS_LOG( "mus: [TEST] <- CMusAoPlugin::DefineResourceProperties" ) + } + +// ----------------------------------------------------------------------------- +// CMusAoPlugin::DefineProperty() +// ----------------------------------------------------------------------------- +// +void CMusTestDirector::DefineSessionPropertyL(TInt aKey,RProperty::TType aType,TInt aVal) + { + MUS_LOG( "mus: [TEST] -> CMusTestDirector::DefineSessionPropertyL( intValue )" ) + + TInt error = RProperty::Define( NMusSessionApi::KCategoryUid, + aKey, + aType ); + MUS_LOG2( "mus: [TEST] Key=%d defining tried, return=%d", aKey, error ) + + if ( error == KErrNone ) + { + error = RProperty::Set( NMusSessionApi::KCategoryUid, aKey, aVal ); + MUS_LOG2( "mus: [TEST] RProperty value %d set, return = %d", + aVal, error ) + User::LeaveIfError( error ); + } + else + { + MUS_LOG( "mus: [TEST] Defining failed, do not set value" ) + } + + MUS_LOG( "mus: [TEST] <- CMusTestDirector::DefineSessionPropertyL( intValue )" ) + } + +// ----------------------------------------------------------------------------- +// CTESTPlugin::DefineProperty() +// ----------------------------------------------------------------------------- +// +void CMusTestDirector::DefineSessionPropertyL( TInt aKey, + RProperty::TType aType, + const TDesC& aVal ) + { + MUS_LOG( "mus: [TEST] -> CTESTPlugin::DefineSessionPropertyL( DesCValue )" ) + + TInt error = RProperty::Define( NMusSessionApi::KCategoryUid, + aKey, + aType ); + MUS_LOG2( "mus: [TEST] Key=%d defining tried, return=%d", aKey, error ) + + if ( error == KErrNone ) + { + error = RProperty::Set( NMusSessionApi::KCategoryUid, aKey, aVal); + MUS_LOG_TDESC( "mus: [TEST] Tried to set RProperty value: ", aVal ) + MUS_LOG1("mus: [TEST] return value = %d",error ) + User::LeaveIfError( error ); + } + else + { + MUS_LOG( "mus: [TEST] Defining failed, do not set value" ) + } + + MUS_LOG( "mus: [TEST] <- CTESTPlugin::DefineSessionPropertyL( DesCValue )" ) + } + +// ----------------------------------------------------------------------------- +// CMusAoPlugin::DefineProperty() +// ----------------------------------------------------------------------------- +// +void CMusTestDirector::DefinePropertyL(TInt aKey,RProperty::TType aType,TInt aVal) + { + MUS_LOG( "mus: [TEST] -> CMusAoPlugin::DefinePropertyL( intValue )" ) + + TInt error = RProperty::Define( NMusResourceApi::KCategoryUid, + aKey, + aType ); + MUS_LOG2( "mus: [TEST] Key=%d defining tried, return=%d", aKey, error ) + + if ( error == KErrNone ) + { + error = RProperty::Set( NMusResourceApi::KCategoryUid, aKey, aVal ); + MUS_LOG2( "mus: [TEST] RProperty value %d set, return = %d", + aVal, error ) + User::LeaveIfError( error ); + } + else + { + MUS_LOG( "mus: [TEST] Defining failed, do not set value" ) + } + + MUS_LOG( "mus: [TEST] <- CTESTPlugin::DefinePropertyL( intValue )" ) + } + +// ----------------------------------------------------------------------------- +// CTESTPlugin::DefineProperty() +// ----------------------------------------------------------------------------- +// +void CMusTestDirector::DefinePropertyL( TInt aKey, + RProperty::TType aType, + const TDesC& aVal ) + { + MUS_LOG( "mus: [TEST] -> CTESTPlugin::DefinePropertyL( DesCValue )" ) + + TInt error = RProperty::Define( NMusResourceApi::KCategoryUid, + aKey, + aType ); + MUS_LOG2( "mus: [TEST] Key=%d defining tried, return=%d", aKey, error ) + + if ( error == KErrNone ) + { + error = RProperty::Set( NMusResourceApi::KCategoryUid, aKey, aVal); + MUS_LOG_TDESC( "mus: [TEST] Tried to set RProperty value: ", aVal ) + MUS_LOG1("mus: [TEST] return value = %d",error ) + User::LeaveIfError( error ); + } + else + { + MUS_LOG( "mus: [TEST] Defining failed, do not set value" ) + } + + MUS_LOG( "mus: [TEST] <- CTESTPlugin::DefinePropertyL( DesCValue )" ) + } + +// ----------------------------------------------------------------------------- +// CTESTPlugin::DeleteSessionProperties() +// ----------------------------------------------------------------------------- +// +void CMusTestDirector::DeleteSessionProperties() + { + TInt retVal = RProperty::Delete( NMusSessionApi::KCategoryUid,NMusSessionApi::KStatus); + retVal = RProperty::Delete( NMusSessionApi::KCategoryUid,NMusSessionApi::KRemoteSipAddress); + retVal = RProperty::Delete( NMusSessionApi::KCategoryUid,NMusSessionApi::KRemoteSipAddressProposal); + retVal = RProperty::Delete( NMusSessionApi::KCategoryUid,NMusSessionApi::KContactId); + retVal = RProperty::Delete( NMusSessionApi::KCategoryUid,NMusSessionApi::KContactName); + } +// ----------------------------------------------------------------------------- +// CTESTPlugin::DeleteResourceProperties() +// Note : There is no need of caring the return value in deleting +// This will be called when AO Plugin destroyed which is rare to happen +// Any unwanted deletion of AO Plugin should leave some PS Keys open. +// But this is OK if we ignore KErrAlreadyExists while defining next time. +// ----------------------------------------------------------------------------- +// +void CMusTestDirector::DeleteProperties() + { + MUS_LOG( "mus: [TEST] -> CTESTPlugin::DeleteResourcePropertiesL" ) + // Delete resource properties + // they need to be defined here to make them exist always + DeleteProperty(NMusResourceApi::KCameraAvailability); + DeleteProperty(NMusResourceApi::KKeypadAvailability); + DeleteProperty(NMusResourceApi::KCameraInformation); + DeleteProperty(NMusSessionInformationApi::KMusCallEvent); + DeleteProperty(NMusSessionInformationApi::KMusCallCount); + DeleteProperty(NMusSessionInformationApi::KMusTelNumber); + DeleteProperty(NMusSessionInformationApi::KMUSCallProvider); + DeleteProperty(NMusSessionInformationApi::KMUSForbidden); + DeleteProperty(NMusSessionInformationApi::KMusCallDirection); + MUS_LOG( "mus: [TEST] <- CTESTPlugin::DeleteResourcePropertiesL" ) + } + +// ----------------------------------------------------------------------------- +// CTESTPlugin::DeleteProperty() +// ----------------------------------------------------------------------------- +// +void CMusTestDirector::DeleteProperty(TInt aKey) + { + TInt retVal = RProperty::Delete( NMusResourceApi::KCategoryUid,aKey); + MUS_LOG2( "mus: [TEST] RProperty::Delete Type=%d return=%d",\ + aKey, retVal ) + } diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/mustester/app/mustestdirector.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/mustester/app/mustestdirector.h Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,53 @@ +/* +* Copyright (c) 2003 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: +* +*/ + + +#ifndef CMUSTESTDIRECTOR_H +#define CMUSTESTDIRECTOR_H + +// INCLUDES +#include +#include +#include + + +class CMusTestDirector : public CBase + { + public: + CMusTestDirector(); + static CMusTestDirector* NewL(); + ~CMusTestDirector(); + public: + void SetUseCase( MultimediaSharing::TMusUseCase aUseCase ); + void ConfigureLiveSharing() ; + void ConfigureReceiveSharing(); + private: + void DeleteProperty(TInt aKey); + void DeleteProperties(); + void DefinePropertyL( TInt aKey, + RProperty::TType aType, + const TDesC& aVal ); + void DefinePropertyL(TInt aKey,RProperty::TType aType,TInt aVal); + void DefinePropertiesL(); + void DeleteSessionProperties(); + void DefineSessionPropertyL(TInt aKey,RProperty::TType aType,TInt aVal); + void DefineSessionPropertyL( TInt aKey,RProperty::TType aType,const TDesC& aVal ); + void ConstructL(); + }; + +#endif // CMUSTESTDIRECTOR_H + diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/mustester/group/bld.inf --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/mustester/group/bld.inf Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,24 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + +PRJ_MMPFILES +../Stubs/mceclientstub/group/mceclient.mmp +../Stubs/sipclientstub/group/sipclient.mmp +../Stubs/sipprofilestub/group/sipprofile.mmp +../../../../mmshengine/group/musengineplugin.mmp +../app/must_0x1028238D.mmp +gnumakefile ../app/Makefile_0x1028238D.mk diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/mustester/group/install.bat --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/mustester/group/install.bat Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,35 @@ +@rem +@rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +@rem All rights reserved. +@rem This component and the accompanying materials are made available +@rem under the terms of "Eclipse Public License v1.0" +@rem which accompanies this distribution, and is available +@rem at the URL "http://www.eclipse.org/legal/epl-v10.html". +@rem +@rem Initial Contributors: +@rem Nokia Corporation - initial contribution. +@rem +@rem Contributors: +@rem +@rem Description: +@rem +@echo off +echo Installing mustester application ... +echo Backup the original dlls ... +move \epoc32\release\winscw\udeb\mceclient.dll \epoc32\release\winscw\udeb\mcelclient.dll.orig +move \epoc32\release\winscw\udeb\sipclient.dll \epoc32\release\winscw\udeb\sipclient.dll.orig +move \epoc32\release\winscw\udeb\sipprofilecli.dll \epoc32\release\winscw\udeb\sipprofilecli.dll.orig +echo Building mustester ... +call cd ..\..\..\ +call qmake mmshlcui.pro +call bldmake bldfiles +call abld reallyclean winscw udeb +call abld build winscw udeb +call cd tsrc\mustester\group +call bldmake bldfiles +call abld reallyclean winscw udeb +call abld build winscw udeb +echo Starting emulator... +echo Goto eshell and execute "must.exe -r usecase_no" +echo usecase_no = MultimediaSharing::TMusUsecase defined in musmanagercommon.h +call \epoc32\release\winscw\udeb\epoc.exe diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/mustester/group/install_armv5.bat --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/mustester/group/install_armv5.bat Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,28 @@ +@rem +@rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +@rem All rights reserved. +@rem This component and the accompanying materials are made available +@rem under the terms of "Eclipse Public License v1.0" +@rem which accompanies this distribution, and is available +@rem at the URL "http://www.eclipse.org/legal/epl-v10.html". +@rem +@rem Initial Contributors: +@rem Nokia Corporation - initial contribution. +@rem +@rem Contributors: +@rem +@rem Description: +@rem +@echo off +echo Installing mustester application ... +echo Backup the original dlls ... +move \epoc32\release\winscw\udeb\mceclient.dll \epoc32\release\winscw\udeb\mcelclient.dll.orig +move \epoc32\release\winscw\udeb\sipclient.dll \epoc32\release\winscw\udeb\sipclient.dll.orig +move \epoc32\release\winscw\udeb\sipprofilecli.dll \epoc32\release\winscw\udeb\sipprofilecli.dll.orig +echo Building mustester ... +call bldmake bldfiles +call abld reallyclean winscw udeb +call abld build winscw udeb +echo Starting emulator.Goto eshell and execute must.exe -r usecase_no +echo usecase_no = MultimediaSharing::TMusUsecase defined in musmanagercommon.h +call \epoc32\release\winscw\udeb\epoc.exe diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/mustester/group/uninstall.bat --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/mustester/group/uninstall.bat Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,23 @@ +@rem +@rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +@rem All rights reserved. +@rem This component and the accompanying materials are made available +@rem under the terms of "Eclipse Public License v1.0" +@rem which accompanies this distribution, and is available +@rem at the URL "http://www.eclipse.org/legal/epl-v10.html". +@rem +@rem Initial Contributors: +@rem Nokia Corporation - initial contribution. +@rem +@rem Contributors: +@rem +@rem Description: +@rem +@echo off +move \epoc32\release\winscw\udeb\mcelclient.dll.orig \epoc32\release\winscw\udeb\mceclient.dll +move \epoc32\release\winscw\udeb\sipclient.dll.orig \epoc32\release\winscw\udeb\sipclient.dll +move \epoc32\release\winscw\udeb\sipprofilecli.dll.orig \epoc32\release\winscw\udeb\sipprofilecli.dll + +call abld reallyclean winscw udeb +call abld clean winscw udeb +del \epoc32\release\winscw\udeb\must.exe \ No newline at end of file diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/mustester/group/uninstall_armv5.bat --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/mustester/group/uninstall_armv5.bat Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,23 @@ +@rem +@rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +@rem All rights reserved. +@rem This component and the accompanying materials are made available +@rem under the terms of "Eclipse Public License v1.0" +@rem which accompanies this distribution, and is available +@rem at the URL "http://www.eclipse.org/legal/epl-v10.html". +@rem +@rem Initial Contributors: +@rem Nokia Corporation - initial contribution. +@rem +@rem Contributors: +@rem +@rem Description: +@rem +@echo off +move \epoc32\release\winscw\udeb\mcelclient.dll.orig \epoc32\release\winscw\udeb\mceclient.dll +move \epoc32\release\winscw\udeb\sipclient.dll.orig \epoc32\release\winscw\udeb\sipclient.dll +move \epoc32\release\winscw\udeb\sipprofilecli.dll.orig \epoc32\release\winscw\udeb\sipprofilecli.dll + +call abld reallyclean winscw udeb +call abld clean winscw udeb +del \epoc32\release\winscw\udeb\must.exe \ No newline at end of file diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/mustester/install/must_armv5_udeb.pkg --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/mustester/install/must_armv5_udeb.pkg Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,32 @@ +; must_armv5_udeb.pkg generated by qmake at Mon 14. Sep 11:50:02 2009 +; This file is generated by qmake and should not be modified by the user +; + +; Language +&EN + +; SIS header: name, uid, version +#{"must"},(0x1028238D),1,0,0 + +; Localised Vendor name +%{"Nokia, Qt Software"} + +; Unique Vendor name +:"Nokia, Qt Software" + +; Dependencies +[0x101F7961],0,0,0,{"S60ProductID"} +[0x102032BE],0,0,0,{"S60ProductID"} +[0x102752AE],0,0,0,{"S60ProductID"} +[0x1028315F],0,0,0,{"S60ProductID"} +(0x2001E61C), 4, 5, 0, {"QtLibs pre-release"} + +; Executable and default resource files +"\epoc32\release\armv5\udeb\must.exe" - "!:\sys\bin\must.exe" +"\epoc32\data\z\resource\apps\must.rsc" - "!:\resource\apps\must.rsc" +"\epoc32\data\z\private\10003a3f\import\apps\must_reg.rsc" - "!:\private\10003a3f\import\apps\must_reg.rsc" +"\epoc32\release\armv5\udeb\sipclient.dll" - "!:\sys\bin\sipclient.dll" +"\epoc32\release\armv5\udeb\mceclient.dll" - "!:\sys\bin\mceclient.dll" +"\epoc32\release\armv5\udeb\sipprofilecli.dll" - "!:\sys\bin\sipprofilecli.dll" +"\epoc32\release\armv5\udeb\musengineplugin.dll" - "!:\sys\bin\musengineplugin.dll" + diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/mustester/install/must_armv5_urel.pkg --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/mustester/install/must_armv5_urel.pkg Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,32 @@ +; must_armv5_urel.pkg generated by qmake at Mon 14. Sep 11:50:02 2009 +; This file is generated by qmake and should not be modified by the user +; + +; Language +&EN + +; SIS header: name, uid, version +#{"must"},(0x1028238D),1,0,0 + +; Localised Vendor name +%{"Nokia, Qt Software"} + +; Unique Vendor name +:"Nokia, Qt Software" + +; Dependencies +[0x101F7961],0,0,0,{"S60ProductID"} +[0x102032BE],0,0,0,{"S60ProductID"} +[0x102752AE],0,0,0,{"S60ProductID"} +[0x1028315F],0,0,0,{"S60ProductID"} +(0x2001E61C), 4, 5, 0, {"QtLibs pre-release"} + +; Executable and default resource files +"\epoc32\release\armv5\urel\must.exe" - "!:\sys\bin\must.exe" +"\epoc32\data\z\resource\apps\must.rsc" - "!:\resource\apps\must.rsc" +"\epoc32\data\z\private\10003a3f\import\apps\must_reg.rsc" - "!:\private\10003a3f\import\apps\must_reg.rsc" +"\epoc32\release\armv5\urel\sipclient.dll" - "!:\sys\bin\sipclient.dll" +"\epoc32\release\armv5\urel\mceclient.dll" - "!:\sys\bin\mceclient.dll" +"\epoc32\release\armv5\urel\sipprofilecli.dll" - "!:\sys\bin\sipprofilecli.dll" +"\epoc32\release\armv5\urel\musengineplugin.dll" - "!:\sys\bin\musengineplugin.dll" + diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/mustester/install/sis_udeb.bat --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/mustester/install/sis_udeb.bat Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,17 @@ +rem +rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +rem All rights reserved. +rem This component and the accompanying materials are made available +rem under the terms of "Eclipse Public License v1.0" +rem which accompanies this distribution, and is available +rem at the URL "http://www.eclipse.org/legal/epl-v10.html". +rem +rem Initial Contributors: +rem Nokia Corporation - initial contribution. +rem +rem Contributors: +rem +rem Description: +rem + +makesis must_armv5_udeb.pkg must.sis diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/ut_lcui/hbstubs/dialpad.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/ut_lcui/hbstubs/dialpad.h Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,64 @@ +/*! +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: Dialpad popup +* +*/ + +#ifndef DIALPAD_H +#define DIALPAD_H + +#include + +#include +#include + +class HbLineEdit; + +const int DialpadButtonCount = 13; + +class Dialpad : public HbWidget +{ + Q_OBJECT + +public: + explicit Dialpad(); + explicit Dialpad(const HbMainWindow& mainWindow); + + virtual ~Dialpad(); + + HbLineEdit& editor() const; + + bool isOpen() const {return mIsOpen;} + +public slots: + + void setTapOutsideDismiss( bool enable ); + + void openDialpad() { mIsOpen = true; } + + void closeDialpad() { mIsOpen = false; } + + void setCallButtonEnabled(bool enabled); + +signals: + void aboutToClose(); + +public: + HbLineEdit* mLineEdit; + bool mIsCallButtonEnabled; + bool mIsOpen; + bool mIsTabOutsideDismissEnabled; +}; + +#endif // DIALPAD_H diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/ut_lcui/hbstubs/dialpad_stub.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/ut_lcui/hbstubs/dialpad_stub.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,56 @@ +/* +* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + +#include +#include "dialpad.h" + +Dialpad::Dialpad() +{ + mLineEdit = new HbLineEdit(); + setVisible(false); + mIsCallButtonEnabled = true; + mIsOpen = false; +} + +Dialpad::Dialpad(const HbMainWindow& mainWindow) +{ + Q_UNUSED(mainWindow); + mLineEdit = new HbLineEdit(); + setVisible(false); + mIsCallButtonEnabled = true; + mIsOpen = false; +} + +Dialpad::~Dialpad() +{ + delete mLineEdit; +} + +HbLineEdit& Dialpad::editor() const +{ + return *mLineEdit; +} + +void Dialpad::setCallButtonEnabled(bool enabled) +{ + mIsCallButtonEnabled = enabled; +} + +void Dialpad::setTapOutsideDismiss( bool enable ) +{ + mIsTabOutsideDismissEnabled = enable ; +} diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/ut_lcui/hbstubs/dialpadvtkeyhandler.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/ut_lcui/hbstubs/dialpadvtkeyhandler.h Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,53 @@ +/*! +* Copyright (c) 2010 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: Dialpad key handler. +* +*/ + +#ifndef DIALPADVTKEYHANDLER_H +#define DIALPADVTKEYHANDLER_H + +#include + +class Dialpad; +class HbMainWindow; + +/*! + DialpadVtKeyHandler + Class provides key handling for dialpad component. + + @code + Dialpad *dialpad = new Dialpad(); + DialpadVtKeyHandler *keyhandler = new DialpadVtKeyHandler(dialpad, this); + @endcode + +*/ +class DialpadVtKeyHandler : public QObject +{ + Q_OBJECT + +public: + explicit DialpadVtKeyHandler(Dialpad *dialPad, HbMainWindow& mainWindow, QObject *parent = 0); + virtual ~DialpadVtKeyHandler(); + +private: + HbMainWindow& mMainWindow; + Dialpad* mDialPad; // not owned + +public: // helper + void contentChanged( QString chrs ); + +}; + +#endif // DIALPADVTKEYHANDLER_H diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/ut_lcui/hbstubs/dialpadvtkeyhandler_stub.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/ut_lcui/hbstubs/dialpadvtkeyhandler_stub.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,45 @@ +/*! +* Copyright (c) 2010 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: Dialpad key handler. +* +*/ + +#include +#include +#include + +#define EMERGENCY_NUMBER "112" + +DialpadVtKeyHandler::DialpadVtKeyHandler(Dialpad *dialPad, HbMainWindow& mainWindow, QObject * parent) + : mMainWindow( mainWindow ), + mDialPad( dialPad ) +{ + Q_UNUSED(parent); +} + +DialpadVtKeyHandler::~DialpadVtKeyHandler() +{ + +} + +void DialpadVtKeyHandler::contentChanged( QString chrs ) +{ + if( mDialPad ){ + if( chrs == EMERGENCY_NUMBER ){ + mDialPad->setCallButtonEnabled(true); + }else{ + mDialPad->setCallButtonEnabled(false); + } + } +} diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/ut_lcui/hbstubs/hbabstractbutton.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/ut_lcui/hbstubs/hbabstractbutton.h Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,37 @@ +/* +* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: HbAbstractButton class definition +* +*/ + + +#ifndef HBABSTRACTBUTTON_H +#define HBABSTRACTBUTTON_H + +#include +#include +#include + +class HbAbstractButton : public HbWidget +{ +public: + explicit HbAbstractButton( QGraphicsItem *parent = 0 ); + virtual ~HbAbstractButton(); + + +signals: + void clicked( bool checked = false ); +}; + +#endif // HBABSTRACTBUTTON_H diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/ut_lcui/hbstubs/hbaction.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/ut_lcui/hbstubs/hbaction.h Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,43 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: Orbit stubs for Live Comms UI unit tests +* +*/ +#ifndef HBACTION_H +#define HBACTION_H + +#include +#include +#include +#include + + +class HbAction : public QAction +{ +public: + explicit HbAction(QObject *parent = 0); + explicit HbAction(const QString &text, QObject *parent = 0); + explicit HbAction(Hb::NavigationAction action, QObject* parent = 0); + virtual ~HbAction(); + + using QAction::setIcon; + using QAction::icon; + void setIcon(const HbIcon &icon); + HbIcon icon() const; + +private: // Data added for the unit testing stub + HbIcon mIcon; +}; + +#endif // HBACTION_H diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/ut_lcui/hbstubs/hbdialog.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/ut_lcui/hbstubs/hbdialog.h Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,73 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: Orbit stubs for Live Comms UI unit tests +* +*/ +#ifndef HBDIALOG_H +#define HBDIALOG_H + +#include +#include + + +class HbAction; + + +class HbDialog : public HbWidget +{ +public: + + enum DefaultTimeout + { + NoTimeout, + ConfirmationNoteTimeout, + StandardTimeout, + ContextMenuTimeout, + }; + + enum DismissPolicy + { + NoDismiss = 0, + TapInside = 1, + TapOutside = 2, + TapAnywhere = TapInside | TapOutside + }; + + explicit HbDialog(QGraphicsItem *parent = 0); + virtual ~HbDialog(); + + int timeout() const; + void setTimeout(int timeout); + void setTimeout(HbDialog::DefaultTimeout timeout); + void setHeadingWidget(QGraphicsWidget *headingWidget); + void setContentWidget(QGraphicsWidget *contentWidget); + Hb::SceneItems unfadedItems() const; + void setUnfadedItems(Hb::SceneItems unfadedItems); + HbDialog::DismissPolicy dismissPolicy() const; + void setDismissPolicy(HbDialog::DismissPolicy dismissPolicy); + enum { Type = Hb::ItemType_Popup }; + +protected: + + QVariant itemChange ( GraphicsItemChange change, const QVariant & value ); + +private: // Data added for the unit testing stub + + Hb::SceneItems mUnfadedItems; + DismissPolicy mDismissPolicy; + int mTimeout; +}; + + +#endif // HBDIALOG_H diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/ut_lcui/hbstubs/hbdocumentloader.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/ut_lcui/hbstubs/hbdocumentloader.h Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,61 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: Orbit stubs for Live Comms UI unit tests +* +*/ +#ifndef HBDOCUMENTLOADER_H +#define HBDOCUMENTLOADER_H + +#include +#include +#include + +class QObject; +class QGraphicsWidget; +class HbLabel; +class HbAction; +class HbPushButton; + +class HbDocumentLoader +{ +public: + HbDocumentLoader(); + virtual ~HbDocumentLoader(); + + QObjectList load( const QString &fileName, const QString §ion , bool *ok = 0 ); + QObjectList load( const QString &fileName, bool *ok = 0 ); + QGraphicsWidget *findWidget(const QString &name); + QObject *findObject(const QString &name) const; + bool setObjectTree( QObjectList roots ); + void reset(); + +protected: + virtual QObject *createObject(const QString& type, const QString &name); + +public: // Data added for the unit testing stub + HbLabel* mLabel; + HbAction* mAction; + HbPushButton* mPushButton; + QList mWidgets; + bool mReturnSendVideo; + QString mLayoutSection; + + QList mActions; + + friend class UT_LcView; + friend class UT_LcUiComponentRepository; + +}; + +#endif // HBDOCUMENTLOADER_H diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/ut_lcui/hbstubs/hbeffect.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/ut_lcui/hbstubs/hbeffect.h Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,60 @@ +/* +* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + + +#ifndef HBEFFECT_H +#define HBEFFECT_H + +#include +#include +#include + +QT_BEGIN_NAMESPACE +class QGraphicsItem; +class QVariant; +QT_END_NAMESPACE + +class HbEffect +{ + +public: + + struct EffectStatus { + QGraphicsItem *item; + QString effectEvent; + Hb::EffectEvent reason; + QVariant userData; + }; + + static bool start(QGraphicsItem *item, + const QString &itemType, + const QString &effectEvent, + QObject *receiver = 0, + const char *member = 0, + const QVariant &userData = QVariant()); + + static bool add(const QString &itemType, const QString &filePath, const QString &effectEvent = QString() ); + + static bool effectRunning(QGraphicsItem *item, const QString &effectEvent = QString()); + + static bool mRunning; + +private: + HbEffect(); +}; + +#endif // HBEFFECT_H diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/ut_lcui/hbstubs/hbframedrawer.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/ut_lcui/hbstubs/hbframedrawer.h Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,49 @@ +/**************************************************************************** +** +** Copyright (C) 2008-2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (developer.feedback@nokia.com) +** +** This file is part of the HbCore module of the UI Extensions for Mobile. +** +** GNU Lesser General Public License Usage +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at developer.feedback@nokia.com. +** +****************************************************************************/ + +#ifndef HBFRAMEDRAWER_H +#define HBFRAMEDRAWER_H + + +class HbFrameDrawer +{ +public: + + enum FrameType + { + Undefined = 0, + OnePiece, + ThreePiecesHorizontal, + ThreePiecesVertical, + NinePieces + }; + + HbFrameDrawer(const QString &frameGraphicsName, FrameType type, bool cacheFlag = true); + + ~HbFrameDrawer(); + +}; + +#endif // HBFRAMEDRAWER_H diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/ut_lcui/hbstubs/hbgesture.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/ut_lcui/hbstubs/hbgesture.h Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,74 @@ +/* +* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: Defines a gesture that can be added to a gesture filter. +* +*/ + + +#ifndef HB_GESTURE_H +#define HB_GESTURE_H + +#include +#include + +class HbGesture; +class HbGesturePrivate; + +class HbGesture : public QObject +{ + +public: + + /** + * Direction of the gesture. + */ + enum Direction + { + /* empty gesture */ + none=0, + /** Left */ + left= 0x0000001, + /** Right */ + right= 0x0000002, + /** Up */ + up= 0x0000004, + /** Down */ + down= 0x0000008, + /** Pan */ + pan= 0x0000010, + /** Longpress */ + longpress= 0x0000020 + }; + + /* + * Defines that the default minimum pixel distance should be used for the gesture. + * The actual amount of pixels might vary based on the screen resolution. + */ + static const int HbGestureDefaultMinDistance = -1; + +public: + + explicit HbGesture( Direction direction, + int minDistance = HbGestureDefaultMinDistance, + QObject *parent = 0 ); + + virtual ~HbGesture(); + +signals: + + void longPress( QPointF delta ); + +}; + +#endif // HB_GESTURE_H diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/ut_lcui/hbstubs/hbgesturefilter.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/ut_lcui/hbstubs/hbgesturefilter.h Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,48 @@ +/* +* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: Gesture filter for implementing touch gesture actions. +* +*/ + + +#ifndef HB_GESTURE_FILTER_H +#define HB_GESTURE_FILTER_H + +#include + +#include +#include +#include + +class HbGesture; +class HbGestureFilterPrivate; +class HbGestureSceneFilterPrivate; +class HbLongPressVisualizer; + + +class HbGestureSceneFilter : public HbWidget +{ +public: + explicit HbGestureSceneFilter(Qt::MouseButton button = Qt::LeftButton, QGraphicsItem *parent = 0 ); + ~HbGestureSceneFilter(); + void addGesture( HbGesture *gesture ); + + public: + + // Stub stuff + QList gestures; +}; + +#endif // HB_GESTURE_FILTER_H + diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/ut_lcui/hbstubs/hbicon.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/ut_lcui/hbstubs/hbicon.h Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,35 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: Orbit stubs for Live Comms UI unit tests +* +*/ +#ifndef HBICON_H +#define HBICON_H + +#include + + +class HbIcon +{ +public: + HbIcon(const QString &iconName); + ~HbIcon(); + + bool operator==(const HbIcon &other) const; + +private: // Data added for the unit testing stub + QString mName; +}; + +#endif // HBICON_H diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/ut_lcui/hbstubs/hbinstance.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/ut_lcui/hbstubs/hbinstance.h Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,50 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: Orbit stubs for Live Comms UI unit tests +* +*/ +#ifndef HBINSTANCE_H +#define HBINSTANCE_H + +#include +#include +#include +#include + +class QGraphicsScene; + +#define hbInstance (HbInstance::instance()) + +class HbInstance +{ +public: + static HbInstance *instance(); + QList allMainWindows() const; + + Qt::Orientation orientation() const; + void setOrientation(Qt::Orientation orientation); + + QGraphicsScene* scene() const; + +private: + HbInstance(); + ~HbInstance(); + +private: // Data added for the unit testing stub + QList mAllMainWindows; + QGraphicsScene* mScene; + Qt::Orientation mOrientation; +}; + +#endif // HBINSTANCE_H diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/ut_lcui/hbstubs/hblabel.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/ut_lcui/hbstubs/hblabel.h Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,44 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: Orbit stubs for Live Comms UI unit tests +* +*/ +#ifndef HBLABEL_H +#define HBLABEL_H + +#include +#include +#include + +class QGraphicsItem; + + +class HbLabel : public HbWidget +{ +public: + explicit HbLabel (QGraphicsItem *parent = 0); + explicit HbLabel (const QString &displayText, QGraphicsItem *parent = 0); + ~HbLabel (); + + virtual void setGeometry(const QRectF &rect); + enum { Type = Hb::ItemType_Label }; + + void setIcon( const HbIcon &icon ); + void clear(); + +public slots: + void setPlainText(const QString &text); +}; + +#endif // HBLABEL_H diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/ut_lcui/hbstubs/hblineedit.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/ut_lcui/hbstubs/hblineedit.h Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,55 @@ +/**************************************************************************** +** +** Copyright (C) 2008-2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (developer.feedback@nokia.com) +** +** This file is part of the HbWidgets module of the UI Extensions for Mobile. +** +** GNU Lesser General Public License Usage +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at developer.feedback@nokia.com. +** +****************************************************************************/ + +#ifndef HBLINEEDIT_H +#define HBLINEEDIT_H + +#include +#include +#include + +class HbLineEdit : public QObject +{ +public: + explicit HbLineEdit(QGraphicsItem *parent = 0); + explicit HbLineEdit(const QString &text, QGraphicsItem *parent = 0); + virtual ~HbLineEdit(); + void setText(const QString &text); + QString text() const; +private: + QString mText; + +signals: + void editingFinished(); + void textChanged(const QString &text); + void selectionChanged(); + + // signals from the base class + void contentsChanged(); +}; + +//Q_DECLARE_METATYPE(HbLineEdit::EchoMode) + +#endif // HBLINEEDIT_H diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/ut_lcui/hbstubs/hbmainwindow.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/ut_lcui/hbstubs/hbmainwindow.h Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,64 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: Orbit stubs for Live Comms UI unit tests +* +*/ + +#ifndef HBMAINWINDOW_H +#define HBMAINWINDOW_H + +#include +#include +#include + +class QGraphicsWidget; +class QWindowSurface + { + }; +class HbAction; +class HbView; + + +class HbMainWindow : public QGraphicsView +{ +public: + explicit HbMainWindow(QWidget *parent = 0, Hb::WindowFlags windowFlags = Hb::WindowFlagNone); + ~HbMainWindow(); + + HbView *addView(QGraphicsWidget *widget = 0); + QGraphicsWidget *removeView(int index); + void removeView(QGraphicsWidget *widget); + HbView *currentView() const; + void setCurrentView(HbView *view, bool animate = false); + int viewCount() const; + void setOrientation(Qt::Orientation orientation, bool animate = true); + Qt::Orientation orientation() const; + void show(){}; + QList views() const; + QRectF sceneRect() const; + + //Overiding function for stub + QWindowSurface *windowSurface() const; + +private: // Data added for the unit testing stub + HbView* mCurrentView; // Not owned + int mViewCount; + Qt::Orientation mOrientation; + QList mTestViews; + +public : + QWindowSurface *mSurface; +}; + +#endif // HBMAINWINDOW_H diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/ut_lcui/hbstubs/hbmenu.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/ut_lcui/hbstubs/hbmenu.h Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,44 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: Orbit stubs for Live Comms UI unit tests +* +*/ +#ifndef HBMENU_H +#define HBMENU_H + +#include + + +class HbMenu : public HbDialog +{ +public: + + explicit HbMenu(QGraphicsItem *parent = 0); + ~HbMenu(); + + using HbDialog::addAction; + HbAction *addAction(const QString &text); + + bool isEmpty() const; + + enum { Type = Hb::ItemType_Menu }; + +public slots: + void open(QObject* receiver = 0, const char* member = 0); + +private: // Data added for the unit testing stub + bool mIsEmpty; +}; + +#endif // HBMENU_H diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/ut_lcui/hbstubs/hbmessagebox.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/ut_lcui/hbstubs/hbmessagebox.h Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,104 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: Orbit stubs for Live Comms UI unit tests +* +*/ + +#ifndef HBMESSAGEBOX_H +#define HBMESSAGEBOX_H + +#include +#include +#include + +class HbMessageBoxPrivate; +class HbStyleOptionMessageBox; + +class HB_WIDGETS_EXPORT HbMessageBox : public HbDialog +{ + +public: + enum MessageBoxType { + MessageTypeInformation, + MessageTypeQuestion, + MessageTypeWarning + }; + + enum StandardButton { + NoButton = 0x00000000, + Ok = 0x00000400, + Save = 0x00000800, + Open = 0x00001000, + Yes = 0x00002000, + Continue = 0x00004000, + Delete = 0x00008000, + No = 0x00010000, + Retry = 0x00020000, + Close = 0x00040000, + Cancel = 0x00080000, + Help = 0x00100000, + Apply = 0x00200000, + Reset = 0x00400000 + }; + + Q_DECLARE_FLAGS(StandardButtons, StandardButton) + + explicit HbMessageBox(MessageBoxType type=MessageTypeInformation,QGraphicsItem *parent = 0); + explicit HbMessageBox(const QString &text,MessageBoxType type =MessageTypeInformation, QGraphicsItem *parent = 0); + virtual ~HbMessageBox(); + + void setText(const QString &text); + QString text() const; + + void setIcon(const HbIcon &icon); + HbIcon icon() const; + + void setIconAlignment(Qt::Alignment align); + Qt::Alignment iconAlignment() const; + + enum { Type = Hb::ItemType_MessageBox }; + int type() const { return Type; } + + void setStandardButtons(int buttons); + int standardButtons() const; + +public: + static bool launchQuestionMessageBox(const QString &questionText, + const QString &primaryButtonText = tr("Yes"), + const QString &secondaryButtonText = tr("No"), + QGraphicsWidget *headWidget = 0, + QGraphicsScene *scene = 0, + QGraphicsItem *parent = 0 ); + + static void launchInformationMessageBox(const QString &informationText, + QGraphicsWidget *headWidget = 0, + QGraphicsScene *scene = 0, + QGraphicsItem *parent = 0 ); + + static void launchWarningMessageBox(const QString &warningText, + QGraphicsWidget *headWidget = 0, + QGraphicsScene *scene = 0, + QGraphicsItem *parent = 0 ); + +public slots: + void updatePrimitives(); + +protected: + HbMessageBox(HbMessageBoxPrivate &dd, QGraphicsItem *parent); + void initStyleOption(HbStyleOptionMessageBox *option) const; + void keyPressEvent(QKeyEvent *event); +}; + +#endif // HB_MESSAGEBOX_H + diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/ut_lcui/hbstubs/hbprogressdialog.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/ut_lcui/hbstubs/hbprogressdialog.h Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,37 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: Orbit stubs for Live Comms UI unit tests +* +*/ +#ifndef HBPROGRESSDIALOG_H +#define HBPROGRESSDIALOG_H + +#include + +class HbProgressDialog : public HbDialog +{ +public: + + enum ProgressDialogType { ProgressNote,WaitNote }; + explicit HbProgressDialog(QGraphicsItem *parent = 0); + + enum { Type = Hb::ItemType_ProgressDialog }; + + void setText(const QString &text); + +protected: + QVariant itemChange(GraphicsItemChange change, const QVariant& value); +}; + +#endif // HBPROGRESSDIALOG_H diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/ut_lcui/hbstubs/hbpushbutton.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/ut_lcui/hbstubs/hbpushbutton.h Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,37 @@ +/* +* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: HbPushButton class definition +* +*/ + + +#ifndef HBPUSHBUTTON_H +#define HBPUSHBUTTON_H + +#include +#include + +class HbFrameDrawer; + +class HbPushButton : public HbAbstractButton +{ + +public: + explicit HbPushButton( QGraphicsItem *parent = 0 ); + explicit HbPushButton( const QString &text, QGraphicsItem *parent = 0 ); + virtual ~HbPushButton( ); + void setFrameBackground( HbFrameDrawer *backgroundFrameDrawer ); +}; + +#endif // HBPUSHBUTTON_H diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/ut_lcui/hbstubs/hbstub_helper.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/ut_lcui/hbstubs/hbstub_helper.h Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,35 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + +#ifndef HBSTUB_HELPER_H +#define HBSTUB_HELPER_H + +/** +* Helper class to control logsdbconnector stub behavior +* +*/ +class HbStubHelper +{ + public: + static void reset(); + static void setGestureState(int state); + static void setGestureStyleHint(int style); + static bool isTitleBarVisible(); + static bool isStatusBarVisible(); +}; + +#endif diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/ut_lcui/hbstubs/hbstubs.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/ut_lcui/hbstubs/hbstubs.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,1313 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + +// Orbit classes +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +// Helper Class +#include "hbstub_helper.h" + +// LC UI +#include "lcuidefs.h" + + + +// Static data that simulates HbInstance and HbMainWindow +static HbInstance* hbInstanceSingleton = 0; + +// Static data for hbeffects +bool HbEffect::mRunning; + +// No Gesture default state. +Qt::GestureState testState = Qt::NoGesture; + +HbTapGesture::TapStyleHint testStyleHint = HbTapGesture::Tap; + +// Title Bar and Status Bar Flags +bool titlebarVisible = true; +bool statusBarVisible = true; + +// ----------------------------------------------------------------------------- +// QCoreApplication::quit +// ----------------------------------------------------------------------------- +// +void QCoreApplication::quit() +{ +} + +// ----------------------------------------------------------------------------- +// QCoreApplication::exit +// ----------------------------------------------------------------------------- +// +void QCoreApplication::exit(int /*retcode*/) +{ +} + + +// HbInstance + +// ----------------------------------------------------------------------------- +// HbInstance::instance +// ----------------------------------------------------------------------------- +// +HbInstance* HbInstance::instance() +{ + if (!hbInstanceSingleton) + hbInstanceSingleton = new HbInstance; + return hbInstanceSingleton; +} + +// ----------------------------------------------------------------------------- +// HbInstance::allMainWindows +// ----------------------------------------------------------------------------- +// +QList HbInstance::allMainWindows() const +{ + return mAllMainWindows; +} + + +// ----------------------------------------------------------------------------- +// HbInstance::HbInstance +// ----------------------------------------------------------------------------- +// +HbInstance::HbInstance() +{ + HbMainWindow *mainWindow = new HbMainWindow; + mAllMainWindows.append(mainWindow); + mScene = new QGraphicsScene; +} + +// ----------------------------------------------------------------------------- +// HbInstance::~HbInstance +// ----------------------------------------------------------------------------- +// +HbInstance::~HbInstance() +{ + mAllMainWindows.clear(); + delete mScene; +} + +// ----------------------------------------------------------------------------- +// HbInstance::HbInstance +// ----------------------------------------------------------------------------- +// +Qt::Orientation HbInstance::orientation() const +{ + return mOrientation; +} + +// ----------------------------------------------------------------------------- +// HbInstance::HbInstance +// ----------------------------------------------------------------------------- +// +void HbInstance::setOrientation(Qt::Orientation orientation) +{ + mOrientation = orientation; +} + +// ----------------------------------------------------------------------------- +// HbInstance::HbInstance +// ----------------------------------------------------------------------------- +// +QGraphicsScene* HbInstance::scene() const +{ + return mScene; +} + +// HbMainWindow + +// ----------------------------------------------------------------------------- +// HbMainWindow::HbMainWindow +// ----------------------------------------------------------------------------- +// +HbMainWindow::HbMainWindow(QWidget *parent,Hb::WindowFlags windowFlags) +: QGraphicsView(parent), mCurrentView(0), mViewCount(0) +{ + Q_UNUSED(windowFlags) +} + +// ----------------------------------------------------------------------------- +// HbMainWindow::~HbMainWindow +// ----------------------------------------------------------------------------- +// +HbMainWindow::~HbMainWindow() +{ +} + +// ----------------------------------------------------------------------------- +// HbMainWindow::addView +// ----------------------------------------------------------------------------- +// +HbView* HbMainWindow::addView(QGraphicsWidget *widget) +{ + Q_UNUSED(widget) + mTestViews.append(static_cast( widget ) ); + return 0; +} + +// ----------------------------------------------------------------------------- +// HbMainWindow::removeView +// ----------------------------------------------------------------------------- +// +QGraphicsWidget* HbMainWindow::removeView(int index) +{ + Q_UNUSED(index) + if ( index >= 0 && index < mTestViews.count() ){ + return mTestViews.takeAt(index); + } + return mCurrentView; +} + +// ----------------------------------------------------------------------------- +// HbMainWindow::removeView +// ----------------------------------------------------------------------------- +// +void HbMainWindow::removeView(QGraphicsWidget *widget) +{ + for(int i = 0; i < mTestViews.count(); i++ ){ + if ( mTestViews.at(i) == widget ){ + mTestViews.takeAt(i); + } + } +} + +// ----------------------------------------------------------------------------- +// HbMainWindow::currentView +// ----------------------------------------------------------------------------- +// +HbView* HbMainWindow::currentView() const +{ + return mCurrentView; +} + +// ----------------------------------------------------------------------------- +// HbMainWindow::setCurrentView +// ----------------------------------------------------------------------------- +// +void HbMainWindow::setCurrentView(HbView *view, bool animate) +{ + mCurrentView = view; + Q_UNUSED(animate) +} + +// ----------------------------------------------------------------------------- +// HbMainWindow::viewCount +// ----------------------------------------------------------------------------- +// +int HbMainWindow::viewCount() const +{ + return mTestViews.count(); +} + +// ----------------------------------------------------------------------------- +// HbMainWindow::viewCount +// ----------------------------------------------------------------------------- +// +void HbMainWindow::setOrientation(Qt::Orientation orientation, bool animate) +{ + Q_UNUSED(animate); + mOrientation = orientation; +} + +// ----------------------------------------------------------------------------- +// HbMainWindow::viewCount +// ----------------------------------------------------------------------------- +// +Qt::Orientation HbMainWindow::orientation() const +{ + return mOrientation; +} + +// ----------------------------------------------------------------------------- +// HbMainWindow::views +// ----------------------------------------------------------------------------- +// +QList HbMainWindow::views() const +{ + return mTestViews; +} + +// ----------------------------------------------------------------------------- +// HbMainWindow::sceneRect +// ----------------------------------------------------------------------------- +// +QRectF HbMainWindow::sceneRect() const +{ + return QRectF( 0, 0, 360, 640 ); +} + +// ----------------------------------------------------------------------------- +// HbMainWindow::windowSurface +// ----------------------------------------------------------------------------- +// +QWindowSurface* HbMainWindow::windowSurface() const +{ + return mSurface; +} + + + + +// HbWidget + +// ----------------------------------------------------------------------------- +// HbWidget::HbWidget +// ----------------------------------------------------------------------------- +// +HbWidget::HbWidget(QGraphicsItem *parent, Qt::WindowFlags wFlags) +: QGraphicsWidget(parent,wFlags) +{ + +} + +// ----------------------------------------------------------------------------- +// HbWidget::~HbWidget +// ----------------------------------------------------------------------------- +// +HbWidget::~HbWidget() +{ + +} + +// ----------------------------------------------------------------------------- +// HbWidget::clearActions +// ----------------------------------------------------------------------------- +// +void HbWidget::clearActions() +{ +} + +// ----------------------------------------------------------------------------- +// HbWidget::itemChange +// ----------------------------------------------------------------------------- +// +QVariant HbWidget::itemChange(GraphicsItemChange change, const QVariant& value) +{ + Q_UNUSED(change) + return QVariant(value); +} + +// ----------------------------------------------------------------------------- +// HbWidget::mainWindow +// ----------------------------------------------------------------------------- +// +HbMainWindow* HbWidget::mainWindow() const +{ + +} + +// HbDialog + +// ----------------------------------------------------------------------------- +// HbDialog::HbDialog +// ----------------------------------------------------------------------------- +// +HbDialog::HbDialog(QGraphicsItem *parent) : HbWidget(parent) +{ + resize(10,10); // Just some values for height and width + mDismissPolicy = NoDismiss; + mUnfadedItems = Hb::NoItem; +} + +// ----------------------------------------------------------------------------- +// HbDialog::~HbDialog +// ----------------------------------------------------------------------------- +// +HbDialog::~HbDialog() +{ +} + +// ----------------------------------------------------------------------------- +// HbDialog::timeout +// ----------------------------------------------------------------------------- +// +int HbDialog::timeout() const +{ + return mTimeout; +} + +// ----------------------------------------------------------------------------- +// HbDialog::setTimeout +// ----------------------------------------------------------------------------- +// +void HbDialog::setTimeout(int timeout) +{ + mTimeout = timeout; +} + +// ----------------------------------------------------------------------------- +// HbDialog::setTimeout +// ----------------------------------------------------------------------------- +// +void HbDialog::setTimeout(HbDialog::DefaultTimeout timeout) +{ + // Timeout Values from the current implementation of orbit. + switch (timeout) + { + case HbDialog::NoTimeout: + mTimeout = 0; + break; + case HbDialog::ConfirmationNoteTimeout: + mTimeout = 1500; + break; + case HbDialog::StandardTimeout: + mTimeout = 3000; + break; + case HbDialog::ContextMenuTimeout: + mTimeout = 6000; + break; + } +} + +// ----------------------------------------------------------------------------- +// HbDialog::setHeadingWidget +// ----------------------------------------------------------------------------- +// +void HbDialog::setHeadingWidget(QGraphicsWidget *headingWidget) +{ + Q_UNUSED(headingWidget) +} + +// ----------------------------------------------------------------------------- +// HbDialog::setContentWidget +// ----------------------------------------------------------------------------- +// +void HbDialog::setContentWidget(QGraphicsWidget *contentWidget) +{ + Q_UNUSED(contentWidget) +} + +// ----------------------------------------------------------------------------- +// HbDialog::unfadedItems +// ----------------------------------------------------------------------------- +// +Hb::SceneItems HbDialog::unfadedItems() const +{ + return mUnfadedItems; +} + +// ----------------------------------------------------------------------------- +// HbDialog::setUnfadedItems +// ----------------------------------------------------------------------------- +// +void HbDialog::setUnfadedItems(Hb::SceneItems unfadedItems) +{ + mUnfadedItems = unfadedItems; +} + +// ----------------------------------------------------------------------------- +// HbDialog::dismissPolicy +// ----------------------------------------------------------------------------- +// +HbDialog::DismissPolicy HbDialog::dismissPolicy() const +{ + return mDismissPolicy; +} + +// ----------------------------------------------------------------------------- +// HbDialog::setDismissPolicy +// ----------------------------------------------------------------------------- +// +void HbDialog::setDismissPolicy(HbDialog::DismissPolicy dismissPolicy) +{ + mDismissPolicy = dismissPolicy; +} + +// ----------------------------------------------------------------------------- +// HbDialog::itemChange +// ----------------------------------------------------------------------------- +// +QVariant HbDialog::itemChange(GraphicsItemChange change, const QVariant& value) +{ + Q_UNUSED(change) + return QVariant(value); +} + + +// HbMenu + +// ----------------------------------------------------------------------------- +// HbMenu::HbMenu +// ----------------------------------------------------------------------------- +// +HbMenu::HbMenu(QGraphicsItem *parent) : HbDialog(parent) +{ + mIsEmpty = true; +} + +// ----------------------------------------------------------------------------- +// HbMenu::~HbMenu +// ----------------------------------------------------------------------------- +// +HbMenu::~HbMenu() +{ +} + +// ----------------------------------------------------------------------------- +// HbMenu::open +// ----------------------------------------------------------------------------- +// +void HbMenu::open(QObject* receiver, const char* member) +{ + Q_UNUSED(receiver); + Q_UNUSED(member); +} + +// ----------------------------------------------------------------------------- +// HbMenu::addAction +// ----------------------------------------------------------------------------- +// +HbAction* HbMenu::addAction(const QString &text) +{ + Q_UNUSED(text) + mIsEmpty = false; + return 0; +} + +// ----------------------------------------------------------------------------- +// HbMenu::isEmpty +// ----------------------------------------------------------------------------- +// +bool HbMenu::isEmpty() const +{ + return mIsEmpty; +} + + +// HbAction + +// ----------------------------------------------------------------------------- +// HbAction::HbAction +// ----------------------------------------------------------------------------- +// +HbAction::HbAction(QObject *parent) +: QAction(parent), mIcon(QString()) +{ +} + +// ----------------------------------------------------------------------------- +// HbAction::HbAction +// ----------------------------------------------------------------------------- +// +HbAction::HbAction(const QString &text, QObject *parent) +: QAction(text,parent), mIcon(QString()) +{ +} + +// ----------------------------------------------------------------------------- +// HbAction::~HbAction +// ----------------------------------------------------------------------------- +// +HbAction::~HbAction() +{ +} + +// ----------------------------------------------------------------------------- +// HbAction::setIcon +// ----------------------------------------------------------------------------- +// +void HbAction::setIcon(const HbIcon &icon) +{ + mIcon = icon; +} + +// ----------------------------------------------------------------------------- +// HbAction::icon +// ----------------------------------------------------------------------------- +// +HbIcon HbAction::icon() const +{ + return mIcon; +} + +// ----------------------------------------------------------------------------- +// HbAction::HbAction +// ----------------------------------------------------------------------------- +// +HbAction::HbAction(Hb::NavigationAction action, QObject* parent) + : QAction ( parent ),mIcon(QString()) +{ + Q_UNUSED(action); +} + +// HbLabel + +// ----------------------------------------------------------------------------- +// HbLabel::HbLabel +// ----------------------------------------------------------------------------- +// +HbLabel::HbLabel(QGraphicsItem *parent) : HbWidget(parent) +{ +} + +// ----------------------------------------------------------------------------- +// HbLabel::HbLabel +// ----------------------------------------------------------------------------- +// +HbLabel::HbLabel(const QString &displayText, QGraphicsItem *parent) +: HbWidget(parent) +{ + Q_UNUSED(displayText) +} + +// ----------------------------------------------------------------------------- +// HbLabel::~HbLabel +// ----------------------------------------------------------------------------- +// +HbLabel::~HbLabel() +{ +} + +// ----------------------------------------------------------------------------- +// HbLabel::setGeometry +// ----------------------------------------------------------------------------- +// +void HbLabel::setGeometry(const QRectF &rect) +{ + Q_UNUSED(rect) +} + +// ----------------------------------------------------------------------------- +// HbLabel::clear +// ----------------------------------------------------------------------------- +// +void HbLabel::clear() +{ +} + +// ----------------------------------------------------------------------------- +// HbLabel::setPlainText +// ----------------------------------------------------------------------------- +// +void HbLabel::setPlainText(const QString &text) +{ + Q_UNUSED(text) +} + +// ----------------------------------------------------------------------------- +// HbLabel::setText +// ----------------------------------------------------------------------------- +// +void HbLabel::setIcon(const HbIcon &icon) +{ + Q_UNUSED(icon) +} + + +// HbIcon + +// ----------------------------------------------------------------------------- +// HbIcon::HbIcon +// ----------------------------------------------------------------------------- +// +HbIcon::HbIcon(const QString &iconName) +{ + mName = iconName; +} + +// ----------------------------------------------------------------------------- +// HbIcon::~HbIcon +// ----------------------------------------------------------------------------- +// +HbIcon::~HbIcon() +{ +} + +// ----------------------------------------------------------------------------- +// HbIcon::operator== +// ----------------------------------------------------------------------------- +// +bool HbIcon::operator==(const HbIcon &other) const +{ + return (other.mName == mName); +} + + +// HbProgressDialog + +// ----------------------------------------------------------------------------- +// HbProgressDialog::HbProgressDialog +// ----------------------------------------------------------------------------- +// +HbProgressDialog::HbProgressDialog(QGraphicsItem *parent) : HbDialog(parent) +{ +} + +// ----------------------------------------------------------------------------- +// HbProgressDialog::itemChange +// ----------------------------------------------------------------------------- +// +QVariant HbProgressDialog::itemChange(GraphicsItemChange change, const QVariant& value) +{ + Q_UNUSED(change) + return QVariant(value); +} + +// ----------------------------------------------------------------------------- +// HbProgressDialog::setText +// ----------------------------------------------------------------------------- +// +void HbProgressDialog::setText(const QString &text) +{ + Q_UNUSED(text) +} + +// ----------------------------------------------------------------------------- +// HbToolBar::HbToolBar +// ----------------------------------------------------------------------------- +// +HbToolBar::HbToolBar(QGraphicsItem *parent) : HbWidget(parent) +{ +} + +// ----------------------------------------------------------------------------- +// HbToolBar::~HbToolBar +// ----------------------------------------------------------------------------- +// +HbToolBar::~HbToolBar() +{ +} + + +// HbView + +// ----------------------------------------------------------------------------- +// HbView::HbView +// ----------------------------------------------------------------------------- +// +HbView::HbView(QGraphicsItem *parent) : HbWidget(parent) +{ + mMenu = new HbMenu(this); + mToolBar = new HbToolBar(this); + mDockWidgetVisible = true; +} + +// ----------------------------------------------------------------------------- +// HbView::~HbView +// ----------------------------------------------------------------------------- +// +HbView::~HbView() +{ +} + +// ----------------------------------------------------------------------------- +// HbView::menu +// ----------------------------------------------------------------------------- +// +HbMenu* HbView::menu() const +{ + return mMenu; +} + +// ----------------------------------------------------------------------------- +// HbView::toolBar +// ----------------------------------------------------------------------------- +// +HbToolBar* HbView::toolBar() const +{ + return mToolBar; +} + +// ----------------------------------------------------------------------------- +// HbView::setTitle +// ----------------------------------------------------------------------------- +// +void HbView::setTitle(const QString &title) +{ + Q_UNUSED(title) +} + +// ----------------------------------------------------------------------------- +// HbView::showItems +// ----------------------------------------------------------------------------- +// +void HbView::showItems(Hb::SceneItems items) +{ + if ( items == Hb::DockWidgetItem ) { + mDockWidgetVisible = true; + } +} + +// ----------------------------------------------------------------------------- +// HbView::hideItems +// ----------------------------------------------------------------------------- +// +void HbView::hideItems(Hb::SceneItems items) +{ + if ( items == Hb::DockWidgetItem ) { + mDockWidgetVisible = false; + } +} + + +// ----------------------------------------------------------------------------- +// HbView::isItemVisible +// ----------------------------------------------------------------------------- +// +bool HbView::isItemVisible(Hb::SceneItem items) const +{ + if ( items == Hb::DockWidgetItem ) { + return mDockWidgetVisible; + } + return false; +} + +// ----------------------------------------------------------------------------- +// HbView::setTitleBarVisible +// ----------------------------------------------------------------------------- +// +void HbView::setTitleBarVisible(bool visible) +{ + titlebarVisible = visible; +} + + +// ----------------------------------------------------------------------------- +// HbView::setStatusBarVisible +// ----------------------------------------------------------------------------- +// +void HbView::setStatusBarVisible(bool visible) +{ + statusBarVisible = visible; +} + + +// ----------------------------------------------------------------------------- +// HbView::setContentFullScreen +// ----------------------------------------------------------------------------- +// +void HbView::setContentFullScreen(bool /*enable*/) +{ +} + +// ----------------------------------------------------------------------------- +// HbView::navigationAction +// ----------------------------------------------------------------------------- +// +HbAction *HbView::navigationAction() const +{ + return 0; +} + +// ----------------------------------------------------------------------------- +// HbView::setNavigationAction +// ----------------------------------------------------------------------------- +// +void HbView::setNavigationAction(HbAction *action) +{ + Q_UNUSED(action); +} + +// HbDocumentLoader + +// ----------------------------------------------------------------------------- +// HbDocumentLoader::HbDocumentLoader +// ----------------------------------------------------------------------------- +// +HbDocumentLoader::HbDocumentLoader() +{ + mLabel = new HbLabel; + mAction = new HbAction; + mReturnSendVideo = true; + mPushButton = new HbPushButton(); + +} + +// ----------------------------------------------------------------------------- +// HbDocumentLoader::~HbDocumentLoader +// ----------------------------------------------------------------------------- +// +HbDocumentLoader::~HbDocumentLoader() +{ + delete mAction; + delete mLabel; + delete mPushButton; +} + +// ----------------------------------------------------------------------------- +// HbDocumentLoader::load +// ----------------------------------------------------------------------------- +// +QObjectList HbDocumentLoader::load( const QString &fileName, + const QString §ion , bool *ok ) +{ + Q_UNUSED(fileName) + if ( section == lcLayoutLandscapeDefaultId || + section == lcLayoutLandscapeSwappedId || + section == lcLayoutFullscreenId || + section == lcLayoutLandscapeDialpadId ) { + mLayoutSection = section; + *ok = true; + } else { + *ok = false; + } + return QObjectList(); +} + +// ----------------------------------------------------------------------------- +// HbDocumentLoader::load +// ----------------------------------------------------------------------------- +// +QObjectList HbDocumentLoader::load(const QString &fileName, bool *ok) +{ + *ok = true; + Q_UNUSED(fileName) + return QObjectList(); +} + +// ----------------------------------------------------------------------------- +// HbDocumentLoader::findWidget +// ----------------------------------------------------------------------------- +// +QGraphicsWidget* HbDocumentLoader::findWidget(const QString &name) +{ + if ( !mReturnSendVideo && name == lcWidgetSendVideoId ) { + return 0; + } + foreach(QGraphicsWidget* widget, mWidgets) { + if (widget->objectName() == name) + return widget; + } + if (name == lcLabelRecipientId || + name == lcLabelDurationId || + name == lcIconContactId || + name == lcWidgetSendVideoId2 || + name == lcWidgetRecvVideoId2 ) { + return mLabel; + } + QString dummy = ""; + QGraphicsWidget* createdWidget = + static_cast(createObject(dummy,name)); + if (createdWidget) { + createdWidget->setPos(QPointF(10,20)); + mWidgets.append(createdWidget); + } + return createdWidget; +} + +// ----------------------------------------------------------------------------- +// HbDocumentLoader::findObject +// ----------------------------------------------------------------------------- +// +QObject* HbDocumentLoader::findObject(const QString &name) const +{ + if (name == lcActMuteId || + name == lcActSpeakerId ) { + return mAction; + } + if( name == lcButtonEndCall ){ + return mPushButton; + } + foreach(HbAction* action, mActions) { + if (action->objectName() == name) + return action; + } + + return 0; +} + +// ----------------------------------------------------------------------------- +// HbDocumentLoader::setObjectTree +// ----------------------------------------------------------------------------- +// +bool HbDocumentLoader::setObjectTree( QObjectList roots ) +{ + Q_UNUSED(roots) + return true; +} + +// ----------------------------------------------------------------------------- +// HbDocumentLoader::reset +// ----------------------------------------------------------------------------- +// +void HbDocumentLoader::reset() +{ +} + +// ----------------------------------------------------------------------------- +// HbDocumentLoader::createObject +// ----------------------------------------------------------------------------- +// +QObject* HbDocumentLoader::createObject( + const QString& type, + const QString& name) +{ + Q_UNUSED(type) + Q_UNUSED(name) + return 0; +} + + +// HbTransparentWindow + +// ----------------------------------------------------------------------------- +// HbTransparentWindow::HbTransparentWindow +// ----------------------------------------------------------------------------- +// +HbTransparentWindow::HbTransparentWindow(QGraphicsItem *parent) +{ + Q_UNUSED(parent) +} + +// ----------------------------------------------------------------------------- +// HbTransparentWindow::~HbTransparentWindow +// ----------------------------------------------------------------------------- +// +HbTransparentWindow::~HbTransparentWindow() +{ +} + +// ----------------------------------------------------------------------------- +// HbGesture::HbGesture +// ----------------------------------------------------------------------------- +// +HbGesture::HbGesture( Direction direction, int minDistance, QObject *parent ) + : QObject(parent) +{ + Q_UNUSED(direction) + Q_UNUSED(minDistance) +} + +// ----------------------------------------------------------------------------- +// HbGesture::~HbGesture +// ----------------------------------------------------------------------------- +// +HbGesture::~HbGesture() +{ +} + +// ----------------------------------------------------------------------------- +// HbGesturSeceneFilter::HbGestureSceneFilter +// ----------------------------------------------------------------------------- +// +HbGestureSceneFilter::HbGestureSceneFilter( Qt::MouseButton button, QGraphicsItem *parent ) + : HbWidget(parent) +{ + Q_UNUSED(button) +} + +// ----------------------------------------------------------------------------- +// HbGestureSceneFilter::~HbGestureSceneFilter +// ----------------------------------------------------------------------------- +// +HbGestureSceneFilter::~HbGestureSceneFilter() +{ + qDeleteAll(gestures); + gestures.clear(); +} + +// ----------------------------------------------------------------------------- +// HbGestureSceneFilter::addGesture +// ----------------------------------------------------------------------------- +// +void HbGestureSceneFilter::addGesture( HbGesture *gesture ) +{ + gestures.append(gesture); +} + + +// ----------------------------------------------------------------------------- +// HbEffect::HbEffect +// ----------------------------------------------------------------------------- +// +HbEffect::HbEffect( ) +{ + mRunning = false; +} + +// ----------------------------------------------------------------------------- +// HbEffect::start +// ----------------------------------------------------------------------------- +// +bool HbEffect::start( QGraphicsItem *item, + const QString &itemType, + const QString &effectEvent, + QObject *receiver, + const char *member, + const QVariant &userData ) +{ + Q_UNUSED(item) + Q_UNUSED(itemType) + Q_UNUSED(effectEvent) + Q_UNUSED(receiver) + Q_UNUSED(member) + Q_UNUSED(userData) + return true; +} + +// ----------------------------------------------------------------------------- +// HbEffect::add +// ----------------------------------------------------------------------------- +// +bool HbEffect::add( const QString &itemType, const QString &filePath, const QString &effectEvent ) +{ + Q_UNUSED(itemType) + Q_UNUSED(filePath) + Q_UNUSED(effectEvent) + return true; +} + +// ----------------------------------------------------------------------------- +// HbEffect::effectRunning +// ----------------------------------------------------------------------------- +// +bool HbEffect::effectRunning(QGraphicsItem *item, const QString &effectEvent ) +{ + Q_UNUSED(item) + Q_UNUSED(effectEvent) + return mRunning; +} + + +// ----------------------------------------------------------------------------- +// HbPushButton::HbPushButton +// ----------------------------------------------------------------------------- +// +HbPushButton::HbPushButton(QGraphicsItem *parent) : HbAbstractButton(parent) +{ +} + + +// ----------------------------------------------------------------------------- +// HbPushButton::HbPushButton +// ----------------------------------------------------------------------------- +// +HbPushButton::HbPushButton(const QString &text, QGraphicsItem *parent) + : HbAbstractButton(parent) +{ + Q_UNUSED(text) +} + + + +// ----------------------------------------------------------------------------- +// HbPushButton::~HbPushButton +// ----------------------------------------------------------------------------- +// +HbPushButton::~HbPushButton() +{ +} + +// ----------------------------------------------------------------------------- +// HbPushButton::setFrameBackground +// ----------------------------------------------------------------------------- +// +void HbPushButton::setFrameBackground( HbFrameDrawer *backgroundFrameDrawer ) +{ + delete backgroundFrameDrawer; +} + +// ----------------------------------------------------------------------------- +// HbAbstractButton::HbAbstractButton +// ----------------------------------------------------------------------------- +// +HbAbstractButton::HbAbstractButton(QGraphicsItem *parent) : HbWidget(parent) +{ +} + +// ----------------------------------------------------------------------------- +// HbAbstractButton::~HbAbstractButton +// ----------------------------------------------------------------------------- +// +HbAbstractButton::~HbAbstractButton() +{ +} + +// ----------------------------------------------------------------------------- +// HbFrameDrawer::HbFrameDrawer +// ----------------------------------------------------------------------------- +// +HbFrameDrawer::HbFrameDrawer(const QString &frameGraphicsName, FrameType type, bool cacheFlag) +{ + Q_UNUSED(frameGraphicsName); + Q_UNUSED(type); + Q_UNUSED(cacheFlag); +} + +// ----------------------------------------------------------------------------- +// HbFrameDrawer::~HbFrameDrawer +// ----------------------------------------------------------------------------- +// +HbFrameDrawer::~HbFrameDrawer() +{ + +} + +// ----------------------------------------------------------------------------- +// HbLineEdit::HbLineEdit +// ----------------------------------------------------------------------------- +// +HbLineEdit::HbLineEdit(QGraphicsItem *parent) +{ + Q_UNUSED(parent); +} + +// ----------------------------------------------------------------------------- +// HbLineEdit::HbLineEdit +// ----------------------------------------------------------------------------- +// +HbLineEdit::HbLineEdit(const QString &text, QGraphicsItem *parent) +{ + Q_UNUSED(parent); + mText = text; +} + +// ----------------------------------------------------------------------------- +// HbLineEdit::~HbLineEdit +// ----------------------------------------------------------------------------- +// +HbLineEdit::~HbLineEdit() +{ + +} + +// ----------------------------------------------------------------------------- +// HbLineEdit::setText +// ----------------------------------------------------------------------------- +// +void HbLineEdit::setText(const QString &text) +{ + mText = text; +} + +// ----------------------------------------------------------------------------- +// HbLineEdit::text +// ----------------------------------------------------------------------------- +// +QString HbLineEdit::text() const +{ + return mText; +} + +// ----------------------------------------------------------------------------- +// QGesture +// ----------------------------------------------------------------------------- +// + +Qt::GestureState QGesture::state() const +{ + return testState; +} + + +// ----------------------------------------------------------------------------- +// HbTapGesture::HbTapGesture +// ----------------------------------------------------------------------------- +// + +HbTapGesture::HbTapGesture(QObject *paren) +{ + Q_UNUSED(paren); +} + + +// ----------------------------------------------------------------------------- +// HbTapGesture::~HbTapGesture +// ----------------------------------------------------------------------------- +// + +HbTapGesture::~HbTapGesture() +{ +} + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +HbTapGesture::TapStyleHint HbTapGesture::tapStyleHint() const +{ + return testStyleHint; +} + +// ----------------------------------------------------------------------------- +// HbMessageBox::setStandardButtons +// ----------------------------------------------------------------------------- +// +void HbMessageBox::setStandardButtons(int buttons) +{ + Q_UNUSED(buttons); +} + +// ----------------------------------------------------------------------------- +// HbMessageBox::standardButtons +// ----------------------------------------------------------------------------- +// +int HbMessageBox::standardButtons() const +{ + return HbMessageBox::NoButton; +} + +// ----------------------------------------------------------------------------- +// Stub Helper +// ----------------------------------------------------------------------------- +// +void HbStubHelper::setGestureState(int state) +{ + testState = static_cast (state); +} + + +void HbStubHelper::setGestureStyleHint(int style) +{ + testStyleHint = static_cast (style); +} + +void HbStubHelper::reset() +{ + testState = Qt::NoGesture; +} + +bool HbStubHelper::isTitleBarVisible() +{ + return titlebarVisible; +} + +bool HbStubHelper::isStatusBarVisible() +{ + return statusBarVisible; +} + + +// end of file diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/ut_lcui/hbstubs/hbtapgesture.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/ut_lcui/hbstubs/hbtapgesture.h Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,48 @@ +/**************************************************************************** +** +** Copyright (C) 2008-2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (developer.feedback@nokia.com) +** +** This file is part of the HbCore module of the UI Extensions for Mobile. +** +** GNU Lesser General Public License Usage +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at developer.feedback@nokia.com. +** +****************************************************************************/ +#ifndef HBTAPGESTURE_H +#define HBTAPGESTURE_H + +#include +#include + + +class HbTapGesture : public QTapGesture +{ + Q_OBJECT + +public: + enum TapStyleHint { + Tap, + TapAndHold + }; + + explicit HbTapGesture(QObject *parent = 0); + virtual ~HbTapGesture(); + + TapStyleHint tapStyleHint() const; +}; + +#endif // HBTAPGESTURE_H diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/ut_lcui/hbstubs/hbtoolbar.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/ut_lcui/hbstubs/hbtoolbar.h Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,34 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: Orbit stubs for Live Comms UI unit tests +* +*/ +#ifndef HBTOOLBAR_H +#define HBTOOLBAR_H + +#include +#include +#include + + +class HbToolBar : public HbWidget +{ +public: + explicit HbToolBar(QGraphicsItem *parent = 0); + virtual ~HbToolBar(); + + enum { Type = Hb::ItemType_ToolBar }; +}; + +#endif // HBTOOLBAR_H diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/ut_lcui/hbstubs/hbtransparentwindow.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/ut_lcui/hbstubs/hbtransparentwindow.h Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,34 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: Orbit stubs for Live Comms UI unit tests +* +*/ +#ifndef HBTRANSPARENTWINDOW_H +#define HBTRANSPARENTWINDOW_H + +#include +#include + + +class HbTransparentWindow : public HbWidget +{ +public: + + explicit HbTransparentWindow(QGraphicsItem *parent = 0); + ~HbTransparentWindow(); + + enum { Type = Hb::ItemType_TransparentWindow }; +}; + +#endif // HBTRANSPARENTWINDOW_H diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/ut_lcui/hbstubs/hbview.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/ut_lcui/hbstubs/hbview.h Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,59 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: Orbit stubs for Live Comms UI unit tests +* +*/ +#ifndef HBVIEW_H +#define HBVIEW_H + +#include +#include +#include + +class HbMenu; +class HbToolBar; +class HbAction; + +class HbView : public HbWidget +{ +public: + explicit HbView(QGraphicsItem *parent = 0); + virtual ~HbView(); + + HbMenu *menu() const; + HbToolBar *toolBar() const; + + void showItems(Hb::SceneItems items); + void hideItems(Hb::SceneItems items); + bool isItemVisible(Hb::SceneItem item) const; + void setTitleBarVisible(bool visible); + void setStatusBarVisible(bool visible); + + void setContentFullScreen(bool enable = true); + HbAction *navigationAction() const; + void setNavigationAction(HbAction *action); + +signals: + void contentFullScreenChanged(); + +public slots: + void setTitle(const QString &title); + +private: // Data added for the unit testing stub + HbMenu* mMenu; + HbToolBar* mToolBar; + bool mDockWidgetVisible; +}; + +#endif // HBVIEW_H diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/ut_lcui/hbstubs/hbwidget.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/ut_lcui/hbstubs/hbwidget.h Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,45 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: Orbit stubs for Live Comms UI unit tests +* +*/ + +#ifndef HBWIDGET_H +#define HBWIDGET_H + +#include +#include +#include +#include + +class HbEvent; + + +class HbWidget : public QGraphicsWidget +{ +public: + explicit HbWidget( QGraphicsItem *parent=0, Qt::WindowFlags wFlags=0 ); + virtual ~HbWidget(); + void clearActions(); + HbMainWindow *mainWindow() const; + +protected: + QVariant itemChange ( GraphicsItemChange change, const QVariant & value ); + +protected: + /* unit test storage */ + HbMainWindow* mMainWindow; +}; + +#endif // HBWIDGET_H diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/ut_lcui/inc/ut_lceffecthandler.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/ut_lcui/inc/ut_lceffecthandler.h Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,84 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + + +#ifndef UT_LCEFFECTHANDLER_H +#define UT_LCEFFECTHANDLER_H + +#include + +class LcEffectHandler; +class LcUiEngine; +class LcVideoWidget; +class HbMainWindow; + +class UT_LcEffectHandler : public QObject +{ + Q_OBJECT + +private slots: + +/* + * In addition, there are four private slots that are not treated as testfunctions. + * They will be executed by the testing framework and can be used to initialize and clean up + * either the entire test or the current test function. + * + * initTestCase() will be called before the first testfunction is executed. + * cleanupTestCase() will be called after the last testfunction was executed. + * init() will be called before each testfunction is executed. + * cleanup() will be called after every testfunction. +*/ + void initTestCase(); + void cleanupTestCase(); + void init(); + void cleanup(); + + +private slots: //test methods + + void testConstructor(); + void testSwap(); + void testShowSendWindow(); + void testHideSendWindow(); + void testShowReceiveWindow(); + void testHideReceiveWindow(); + void testEffectComplete(); + void testStartEffect(); + + void testSetVisibility(); + void testSetDissappearEffect(); + void testIsSharedVideoAtTop(); + void testVideosSideBySide(); + void testHandleSwapCompletion(); + void testIsSwapInProgress(); + +private: // Helpers + void clearWidgets(); + void setWidgets(); +private: + + HbMainWindow* mMainWindow; + LcUiEngine* mEngine; + LcEffectHandler* mEffectHandler; + LcVideoWidget* mSharedVideo; + LcVideoWidget* mSharedVideoOverlay; + LcVideoWidget* mReceivedVideo; + LcVideoWidget* mReceivedVideoOverlay; +}; + + +#endif //UT_LCEFFECTHANDLER_H diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/ut_lcui/inc/ut_lcuicomponentrepository.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/ut_lcui/inc/ut_lcuicomponentrepository.h Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,77 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + + +#ifndef UT_LCUICOMPONENTREPOSITORY_H +#define UT_LCUICOMPONENTREPOSITORY_H + +#include + +class LcUiEngine; +class LcUiComponentRepository; +class HbMainWindow; + + +class UT_LcUiComponentRepository : public QObject +{ + Q_OBJECT + +private slots: + +/* + * In addition, there are four private slots that are not treated as testfunctions. + * They will be executed by the testing framework and can be used to initialize and clean + * up either the entire test or the current test function. + * + * initTestCase() will be called before the first testfunction is executed. + * cleanupTestCase() will be called after the last testfunction was executed. + * init() will be called before each testfunction is executed. + * cleanup() will be called after every testfunction. +*/ + void initTestCase(); + void cleanupTestCase(); + void init(); + void cleanup(); + + +private slots: //test methods + + void testConstructor(); + void testIdleView(); + void testReceiveView(); + void testTwowayView(); + void testSendView(); + void testAllInOneView(); + void testReceiveOnlyView(); + void testAcceptQuery(); + void testInvitingNote(); + void testWaitingNote(); + void testRecipientQuery(); + void testShareOwnVideoQuery(); + void testSharedVideoContextMenu(); + void testLoadView_FileNotFound(); + void testConnect(); + void testLoadLayout(); + +private: + + LcUiEngine* mEngine; + LcUiComponentRepository* mRepository; +}; + + +#endif //UT_LCUICOMPONENTREPOSITORY_H diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/ut_lcui/inc/ut_lcuidefs.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/ut_lcui/inc/ut_lcuidefs.h Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,73 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + + +#ifndef UT_LCUIDEFS_H_ +#define UT_LCUIDEFS_H_ + +#include + +class HbView; + +const char lcutNoCall[] = "NOCALL"; +const char lcutStub_LcUiEngine_start[] = "LcUiEngine::start"; +const char lcutStub_LcUiEngine_setOrientation[] = "LcUiEngine::setOrientation"; +const char lcutStub_LcUiEngine_setContentAreas[] = "LcUiEngine::setContentAreas"; +const char lcutStub_LcUiEngine_mute[] = "LcUiEngine::mute"; +const char lcutStub_LcUiEngine_zoom[] = "LcUiEngine::zoom"; +const char lcutStub_LcUiEngine_enableCamera[] = "LcUiEngine::enableCamera"; +const char lcutStub_LcUiEngine_disableCamera[] = "LcUiEngine::disableCamera"; +const char lcutStub_LcUiEngine_toggleCamera[] = "LcUiEngine::toggleCamera"; +const char lcutStub_LcUiEngine_speaker[] = "LcUiEngine::speaker"; +const char lcutStub_LcUiEngine_stop[] = "LcUiEngine::stop"; +const char lcutStub_LcUiEngine_updateSession[] = "LcUiEngine::updateSession"; + + +const char lcEngineName[] = "engineName"; +const char lcDisplayName[] = "displayName"; + +static QStringList* lcutStub_LcUiEngine_calledMethods = 0; +static int lcutStub_LcUiEngine_failure = 0; +static int lcutStub_LcUiEngine_layout = -1; + +static bool lcutStub_LcUiEngine_cameraMain = false; +static bool lcutStub_LcUiEngine_muted = false; +static bool lcutStub_LcUiEngine_speakerOn = false; +static bool lcutStub_LcUiEngine_localplaying = true; +static bool lcutStub_LcUiEngine_remoteplaying = true; +static bool lcutStub_LcUiEngine_windowState_minimized = false; +static bool lcutStub_LcUiEngine_isImageShared = false; + +extern QStringList& lcutStub_LcUiEngine_calledMethodsInstance(); +extern bool lcutStub_LcUiEngine_expectCall( const QString& call, int callNdx = 0); +extern void lcutStub_LcUiEngine_reset(); +extern void lcutStub_LcUiEngine_setFailure( int failure ); +extern void lcutStub_LcUiEngine_setLayout( int layout ); +extern void lcutStub_LcUiEngine_setCameraMain( bool val ); +extern void lcutStub_LcUiEngine_setMuted( bool val ); +extern void lcutStub_LcUiEngine_setSpeaker( bool val ); +extern void lcutStub_LcUiEngine_setLocalPlaying( bool val ); +extern void lcutStub_LcUiEngine_setRemotePlaying( bool val ); +extern HbView* lcutStub_LcUiEngine_getCurrentView(); +extern QChar lcutStub_LcUiEngine_getDialToneChar(); + +// End of file + + + + +#endif /* UT_LCUIDEFS_H_ */ diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/ut_lcui/inc/ut_lcvideowidget.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/ut_lcui/inc/ut_lcvideowidget.h Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,61 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + + +#ifndef UT_LCVIDEOWIDGET_H +#define UT_LCVIDEOWIDGET_H + +#include + +class LcVideoWidget; + +class UT_LcVideoWidget : public QObject +{ + Q_OBJECT + +private slots: + +/* + * In addition, there are four private slots that are not treated as testfunctions. + * They will be executed by the testing framework and can be used to initialize and clean up + * either the entire test or the current test function. + * + * initTestCase() will be called before the first testfunction is executed. + * cleanupTestCase() will be called after the last testfunction was executed. + * init() will be called before each testfunction is executed. + * cleanup() will be called after every testfunction. +*/ + void initTestCase(); + void cleanupTestCase(); + void init(); + void cleanup(); + + +private slots: //test methods + + void testConstructor(); + void testSetShowVideo(); + void testPaint(); + +private: + + LcVideoWidget* mVideoWidget; + LcVideoWidget* mVideoWidget2; +}; + + +#endif //UT_LCVIDEOWIDGET_H diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/ut_lcui/inc/ut_lcview.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/ut_lcui/inc/ut_lcview.h Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,113 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + + +#ifndef UT_LCVIEW_H +#define UT_LCVIEW_H + +#include + +class LcView; +class LcUiEngine; +class HbLabel; +class LcUiComponentRepository; +class HbAction; +class HbPushButton; +class HbMainWindow; + +class UT_LcView : public QObject +{ + Q_OBJECT + +private slots: + +/* + * In addition, there are four private slots that are not treated as testfunctions. + * They will be executed by the testing framework and can be used to initialize and clean up + * either the entire test or the current test function. + * + * initTestCase() will be called before the first testfunction is executed. + * cleanupTestCase() will be called after the last testfunction was executed. + * init() will be called before each testfunction is executed. + * cleanup() will be called after every testfunction. +*/ + void initTestCase(); + void cleanupTestCase(); + void init(); + void cleanup(); + + +private slots: //test methods + + void testConstructor(); + void testActivated(); + void testInit(); + void testDeactivated(); + void testEndVideoSession(); + void testMute(); + void testChangeCamera(); + void testSwitchToVoiceCall(); + void testDisableCameraWhenOnFullScreenMode(); + void testDisableCameraWhenNotOnFullScreenMode(); + void testSpeaker(); + void testSwap(); + void testNotSupported(); + void testSetCameraActionToMain(); + void testSetCameraActionToSecondary(); + void testSetMuteActionToUnmute(); + void testSetMuteActionToMute(); + void testSetSpeakerActionToHandset(); + void testSetSpeakerActionToSpeaker(); + void testSetCameraActionToEnable(); + void testSetCameraActionToDisable(); + void testDisableControls(); + void testEnableControls(); + void testUpdateVideoRects(); + void testCurrentLayout(); + void testGestureEvent(); + void testContextMenu(); + void testGestureLongPress(); + void testGestureShortPress(); + void testShareImage(); + void testUpdateSwapLayout(); + void testMenuAboutToShow(); + void testTranslateRectForOrientation(); + void testTranslatePointForOrientation(); + void testOpenDialpad(); + void testDialpadOpened(); + void testDialpadClosed(); + void testDialpadEditorTextChanged(); + void testBack(); + void testAddOptionsMenuActions(); + void testToFullScreen(); + void testWatchInactivity(); + void testTimerEvent(); + void testIsVideoPositionedCorrectly(); + void testIsPositioned(); + +private: + + HbMainWindow* mMainWindow; + LcView* mView; + LcUiEngine* mEngine; + HbLabel* mRecipient; + LcUiComponentRepository* mRepository; + HbPushButton* mEndCallButton; +}; + + +#endif //UT_LCVIEW_H diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/ut_lcui/inc/ut_lcviewmanager.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/ut_lcui/inc/ut_lcviewmanager.h Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,65 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + + +#ifndef UT_LCVIEWMANAGER_H +#define UT_LCVIEWMANAGER_H + +#include +class LcViewManager; +class HbMainWindow; +class LcViewManagerPrivate; + +class UT_LcUiViewManager : public QObject +{ + Q_OBJECT + + +private slots: + +/* + * In addition, there are four private slots that are not treated as testfunctions. + * They will be executed by the testing framework and can be used to initialize and clean + * up either the entire test or the current test function. + * + * initTestCase() will be called before the first testfunction is executed. + * cleanupTestCase() will be called after the last testfunction was executed. + * init() will be called before each testfunction is executed. + * cleanup() will be called after every testfunction. +*/ + void initTestCase(); + void cleanupTestCase(); + void init(); + void cleanup(); + +private slots: //test methods + + void testConstructor(); + void testChangeView(); + void testTerminateSession(); + void testPrepareOrientationChange(); + void testMainWindowEvent(); + +private: + + LcViewManager* mViewManagerDecorator; + LcViewManagerPrivate* mViewManager; + +}; + + +#endif //UT_LCVIEWMANAGER_H diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/ut_lcui/lcuiengine_stub/symbian/stub_lcuiengine_p.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/ut_lcui/lcuiengine_stub/symbian/stub_lcuiengine_p.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,404 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + + +#include "lcuiengine_p.h" +#include "ut_lcuidefs.h" +#include "lcuidefs.h" +#include + +HbView* lcutStub_LcUiEngine_currentView = 0; +QChar lcStub_LcUiEngine_dialtone('0'); + +LcUiEnginePrivate::LcUiEnginePrivate( LcUiEngine& uiEngine, + const QString &engineName, + const QString &applicationDisplayName ) + : mUiEngine ( uiEngine ), + mEngineName( engineName.toUtf8() ), + mSessionTitle( applicationDisplayName ) + +{ + mViewLayout = Lc_NoViewLayout; + mLiveCommsEngine = 0; + mCloseTimer = 0; + mInvitingNote = 0; + mWaitingNote = 0; + mAcceptQuery = 0; + mRecipientQuery = 0; + mFullScreen = false; +} + +LcUiEnginePrivate::~LcUiEnginePrivate() +{ +} + +void LcUiEnginePrivate::start() +{ + lcutStub_LcUiEngine_calledMethodsInstance().insert(0,lcutStub_LcUiEngine_start ); +} + +void LcUiEnginePrivate::setContentAreas( const QRectF& /*sharedContent*/, + const QRectF& /*receivedContent*/ ) +{ + lcutStub_LcUiEngine_calledMethodsInstance().insert(0,lcutStub_LcUiEngine_setContentAreas ); + +} + +bool LcUiEnginePrivate::setOrientation( Qt::Orientation /*orientation*/ ) +{ + lcutStub_LcUiEngine_calledMethodsInstance().insert(0,lcutStub_LcUiEngine_setOrientation ); + return true; +} + +void LcUiEnginePrivate::zoom( int /*value*/ ) +{ + lcutStub_LcUiEngine_calledMethodsInstance().insert(0,lcutStub_LcUiEngine_zoom ); + +} + +void LcUiEnginePrivate::stop() +{ + lcutStub_LcUiEngine_calledMethodsInstance().insert(0,lcutStub_LcUiEngine_stop ); + +} + +void LcUiEnginePrivate::updateSession() +{ + lcutStub_LcUiEngine_calledMethodsInstance().insert(0,lcutStub_LcUiEngine_updateSession ); + +} + +bool LcUiEnginePrivate::isLocalPlayerPlaying() const +{ + return lcutStub_LcUiEngine_localplaying; +} + +bool LcUiEnginePrivate::isRemotePlayerPlaying() const +{ + return lcutStub_LcUiEngine_remoteplaying; +} + +const QString& LcUiEnginePrivate::sessionTitle() const +{ + return mSessionTitle; +} +const QString& LcUiEnginePrivate::recipient() const +{ + return mRecipient; +} + +const QString& LcUiEnginePrivate::phoneNumber() const +{ + return mPhoneNumber; +} + +LcViewLayoutHint LcUiEnginePrivate::viewLayout() const +{ + return (LcViewLayoutHint)lcutStub_LcUiEngine_layout; +} + +void LcUiEnginePrivate::setUiComponents(HbProgressDialog* invitingNote, + HbProgressDialog* waitingNote, + HbDialog* acceptQuery, + HbDialog* recipientQuery, + HbDialog* sharedVideoQuery) +{ + mInvitingNote = invitingNote; + mWaitingNote = waitingNote; + mAcceptQuery = acceptQuery; + mRecipientQuery = recipientQuery; + mShareOwnVideoQuery = sharedVideoQuery; + +} + +void LcUiEnginePrivate::startReceiving() +{ + +} + +void LcUiEnginePrivate::stopForcefully() +{ + +} + +void LcUiEnginePrivate::emitViewLayoutChanged() +{ + +} + +bool LcUiEnginePrivate::usingVideoTelephoneEngine() +{ + return mEngineName == "Videotelephony"; +} + +void LcUiEnginePrivate::setMainCamera(const bool aMainCamera) +{ + mMainCamera = aMainCamera; +} + +bool LcUiEnginePrivate::mainCamera() const +{ + return mMainCamera; +} + +bool LcUiEnginePrivate::isMuted() const +{ + return lcutStub_LcUiEngine_muted; +} + +bool LcUiEnginePrivate::isSpeakerOn() const +{ + return lcutStub_LcUiEngine_speakerOn; +} + +void LcUiEnginePrivate::toggleMute() +{ + lcutStub_LcUiEngine_muted = !lcutStub_LcUiEngine_muted; + lcutStub_LcUiEngine_calledMethodsInstance().insert(0,lcutStub_LcUiEngine_mute ); +} + +void LcUiEnginePrivate::toggleCamera() +{ + lcutStub_LcUiEngine_cameraMain = !lcutStub_LcUiEngine_cameraMain; + lcutStub_LcUiEngine_calledMethodsInstance().insert(0,lcutStub_LcUiEngine_toggleCamera ); +} + +void LcUiEnginePrivate::toggleDisableCamera() +{ + lcutStub_LcUiEngine_calledMethodsInstance().insert(0,lcutStub_LcUiEngine_disableCamera ); +} + +void LcUiEnginePrivate::toggleSpeaker() +{ + lcutStub_LcUiEngine_speakerOn = !lcutStub_LcUiEngine_speakerOn; + lcutStub_LcUiEngine_calledMethodsInstance().insert(0,lcutStub_LcUiEngine_speaker ); +} + +int LcUiEnginePrivate::zoomValues( LcControlValues& values ) const +{ + values.mMaxValue = 3; + values.mMinValue = 1; + values.mValue = 2; + return 0; +} + +void LcUiEnginePrivate::timerEvent(QTimerEvent */*event*/) +{ +} + +void LcUiEnginePrivate::StateChanged( MLcSession& /*aSession*/ ) +{ + +} + +void LcUiEnginePrivate::StateChanged( MLcVideoPlayer& /*aPlayer*/ ) +{ + +} + +void LcUiEnginePrivate::Updated( MLcSession& /*aSession*/ ) +{ + +} + +void LcUiEnginePrivate::Updated( MLcVideoPlayer& /*aPlayer*/ ) +{ + +} + + +void LcUiEnginePrivate::Failed( MLcSession& /*aSession*/, TInt /*aError*/ ) +{ + +} + +void LcUiEnginePrivate::Failed( MLcVideoPlayer& /*aPlayer*/, TInt /*aError*/ ) +{ + +} + +void LcUiEnginePrivate::SessionTimeChanged( MLcSession& /*aSession*/, + const TTimeIntervalSeconds& /*aSeconds*/ ) +{ + +} + +TBool LcUiEnginePrivate::SelectRecipient( MDesCArray& /*aRecipientAddresses*/, + TDes& /*aSelectedRecipientAddress*/ ) +{ + return true; +} + +TBool LcUiEnginePrivate::InputRecipient( TDes& /*aRecipientAddress*/ ) +{ + return true; + +} + +void LcUiEnginePrivate::HandleForegroundStatus( TBool /*aForeground*/ ) +{ + +} + +void LcUiEnginePrivate::BlockUi( TBool /*aBlocked*/ ) +{ + +} + + +bool LcUiEnginePrivate::fullScreenMode() +{ + return mFullScreen; +} + + +void LcUiEnginePrivate::setFullScreenMode(bool aMode) +{ + mFullScreen = aMode; +} + +bool LcUiEnginePrivate::isMinimized()const +{ + return lcutStub_LcUiEngine_windowState_minimized; +} + +void LcUiEnginePrivate::minimize() +{ + lcutStub_LcUiEngine_windowState_minimized = true; +} + +void LcUiEnginePrivate::maximize() +{ + lcutStub_LcUiEngine_windowState_minimized = false; +} + +void LcUiEnginePrivate::setCurrentView(HbView* view) +{ + lcutStub_LcUiEngine_currentView = view; +} + +void LcUiEnginePrivate::handleEngineForegroundStatus() +{ +} + +bool LcUiEnginePrivate::SendDialTone(const QChar aKey ) +{ + lcStub_LcUiEngine_dialtone = aKey; + return true; +} + +//stub control + +bool lcutStub_LcUiEngine_expectCall( const QString& call, int callNdx ) +{ + if ( callNdx >= lcutStub_LcUiEngine_calledMethodsInstance().count() ) { + return call == lcutNoCall; + } + return lcutStub_LcUiEngine_calledMethodsInstance().count() > 0 ? + lcutStub_LcUiEngine_calledMethodsInstance()[callNdx] == call : + call == lcutNoCall; +} + + +void lcutStub_LcUiEngine_reset() +{ + delete lcutStub_LcUiEngine_calledMethods; + lcutStub_LcUiEngine_calledMethods = 0; + lcutStub_LcUiEngine_failure = 0; + lcutStub_LcUiEngine_layout = -1; + lcutStub_LcUiEngine_cameraMain = false; + lcutStub_LcUiEngine_muted = false; + lcutStub_LcUiEngine_speakerOn = false; + lcutStub_LcUiEngine_localplaying = true; + lcutStub_LcUiEngine_remoteplaying = true; + lcutStub_LcUiEngine_currentView = 0; + lcStub_LcUiEngine_dialtone = '0'; +} + +void lcutStub_LcUiEngine_setFailure( int failure ) +{ + lcutStub_LcUiEngine_failure = failure; +} + +void lcutStub_LcUiEngine_setLayout( int layout ) +{ + lcutStub_LcUiEngine_layout = layout; +} + +QStringList& lcutStub_LcUiEngine_calledMethodsInstance() +{ + if ( !lcutStub_LcUiEngine_calledMethods ) { + lcutStub_LcUiEngine_calledMethods = new QStringList(); + } + return *lcutStub_LcUiEngine_calledMethods; +} + +void lcutStub_LcUiEngine_setCameraMain( bool val ) +{ + lcutStub_LcUiEngine_cameraMain = val; +} + +void lcutStub_LcUiEngine_setMuted( bool val ) +{ + lcutStub_LcUiEngine_muted = val; +} + +void lcutStub_LcUiEngine_setSpeaker( bool val ) +{ + lcutStub_LcUiEngine_speakerOn = val; +} + +void lcutStub_LcUiEngine_setLocalPlaying( bool val ) +{ + lcutStub_LcUiEngine_localplaying = val; +} + +void lcutStub_LcUiEngine_setRemotePlaying( bool val ) +{ + lcutStub_LcUiEngine_remoteplaying = val; +} + +HbView* lcutStub_LcUiEngine_getCurrentView() +{ + return lcutStub_LcUiEngine_currentView; +} + + +QChar lcutStub_LcUiEngine_getDialToneChar() +{ + return lcStub_LcUiEngine_dialtone; +} + + +void LcUiEnginePrivate::stopLocalVideo() +{ + lcutStub_LcUiEngine_localplaying = false; +} + +void LcUiEnginePrivate::startLocalVideo() +{ + lcutStub_LcUiEngine_localplaying = true; +} + +void LcUiEnginePrivate::volumeLevelChanged(const XQSettingsKey& /*aKey*/, const QVariant& /*aValue*/) +{ +} + +// End of file + + + diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/ut_lcui/lcuiengine_stub/win32/stub_lcuiengine_p.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/ut_lcui/lcuiengine_stub/win32/stub_lcuiengine_p.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,279 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + + +#include "lcuiengine_p.h" +#include "ut_lcuidefs.h" +#include "lcuidefs.h" + +LcUiEnginePrivate::LcUiEnginePrivate( LcUiEngine& uiEngine, + const QString &engineName, + const QString &applicationDisplayName ) + : mUiEngine ( uiEngine ), + mEngineName( engineName.toUtf8() ), + mSessionTitle( applicationDisplayName ) + +{ + mViewLayout = Lc_NoViewLayout; + mCloseTimer = 0; + mInvitingNote = 0; + mWaitingNote = 0; + mAcceptQuery = 0; + mRecipientQuery = 0; + mFullScreen = false; +} + +LcUiEnginePrivate::~LcUiEnginePrivate() +{ +} + +void LcUiEnginePrivate::start() +{ + lcutStub_LcUiEngine_calledMethodsInstance().insert(0,lcutStub_LcUiEngine_start ); +} + +void LcUiEnginePrivate::setContentAreas( const QRectF& /*sharedContent*/, + const QRectF& /*receivedContent*/ ) +{ + lcutStub_LcUiEngine_calledMethodsInstance().insert(0,lcutStub_LcUiEngine_setContentAreas ); + +} + +bool LcUiEnginePrivate::setOrientation( Qt::Orientation /*orientation*/ ) +{ + lcutStub_LcUiEngine_calledMethodsInstance().insert(0,lcutStub_LcUiEngine_setOrientation ); + return true; +} + +void LcUiEnginePrivate::zoom( int /*value*/ ) +{ + lcutStub_LcUiEngine_calledMethodsInstance().insert(0,lcutStub_LcUiEngine_zoom ); + +} + +void LcUiEnginePrivate::stop() +{ + lcutStub_LcUiEngine_calledMethodsInstance().insert(0,lcutStub_LcUiEngine_stop ); + +} + +void LcUiEnginePrivate::updateSession() +{ + lcutStub_LcUiEngine_calledMethodsInstance().insert(0,lcutStub_LcUiEngine_updateSession ); + +} + +bool LcUiEnginePrivate::isLocalPlayerPlaying() const +{ + return lcutStub_LcUiEngine_localplaying; +} + +bool LcUiEnginePrivate::isRemotePlayerPlaying() const +{ + return lcutStub_LcUiEngine_remoteplaying; +} + +const QString& LcUiEnginePrivate::sessionTitle() const +{ + return mSessionTitle; +} +const QString& LcUiEnginePrivate::recipient() const +{ + return mRecipient; +} + +const QString& LcUiEnginePrivate::phoneNumber() const +{ + return mPhoneNumber; +} + +LcViewLayoutHint LcUiEnginePrivate::viewLayout() const +{ + return (LcViewLayoutHint)lcutStub_LcUiEngine_layout; +} + +void LcUiEnginePrivate::setUiComponents(HbDialog* invitingNote, + HbDialog* waitingNote, + HbDialog* acceptQuery, + HbDialog* recipientQuery) +{ + mInvitingNote = invitingNote; + mWaitingNote = waitingNote; + mAcceptQuery = acceptQuery; + mRecipientQuery = recipientQuery; + +} + +void LcUiEnginePrivate::setMainCamera(const bool aMainCamera) +{ + mMainCamera = aMainCamera; +} + +bool LcUiEnginePrivate::mainCamera() const +{ + return mMainCamera; +} + +bool LcUiEnginePrivate::isMuted() const +{ + return lcutStub_LcUiEngine_muted; +} + +bool LcUiEnginePrivate::isSpeakerOn() const +{ + return lcutStub_LcUiEngine_speakerOn; +} + +void LcUiEnginePrivate::toggleMute() +{ + lcutStub_LcUiEngine_muted = !lcutStub_LcUiEngine_muted; + lcutStub_LcUiEngine_calledMethodsInstance().insert(0,lcutStub_LcUiEngine_mute ); +} + +void LcUiEnginePrivate::toggleCamera() +{ + lcutStub_LcUiEngine_cameraMain = !lcutStub_LcUiEngine_cameraMain; + lcutStub_LcUiEngine_calledMethodsInstance().insert(0,lcutStub_LcUiEngine_toggleCamera ); +} + +void LcUiEnginePrivate::toggleDisableCamera() +{ + lcutStub_LcUiEngine_calledMethodsInstance().insert(0,lcutStub_LcUiEngine_disableCamera ); +} + +void LcUiEnginePrivate::toggleSpeaker() +{ + lcutStub_LcUiEngine_speakerOn = !lcutStub_LcUiEngine_speakerOn; + lcutStub_LcUiEngine_calledMethodsInstance().insert(0,lcutStub_LcUiEngine_speaker ); +} + +int LcUiEnginePrivate::zoomValues( LcControlValues& values ) const +{ + values.mMaxValue = 3; + values.mMinValue = 1; + values.mValue = 2; + return 0; +} + +bool LcUiEnginePrivate::fullScreenMode() +{ + return mFullScreen; +} + + +void LcUiEnginePrivate::setFullScreenMode(bool aMode) +{ + mFullScreen = aMode; +} + +bool LcUiEnginePrivate::isMinimized()const +{ + return lcutStub_LcUiEngine_windowState_minimized; +} + +void LcUiEnginePrivate::minimize() +{ + lcutStub_LcUiEngine_windowState_minimized = true; +} + +void LcUiEnginePrivate::maximize() +{ + lcutStub_LcUiEngine_windowState_minimized = false; +} + +void LcUiEnginePrivate::shareImage(const QString& /*fileName*/) +{ + lcutStub_LcUiEngine_isImageShared = true; +} + +void LcUiEnginePrivate::shareCamera() +{ + lcutStub_LcUiEngine_isImageShared = false; +} + + +//stub control + +bool lcutStub_LcUiEngine_expectCall( const QString& call, int callNdx ) +{ + if ( callNdx >= lcutStub_LcUiEngine_calledMethodsInstance().count() ) { + return call == lcutNoCall; + } + return lcutStub_LcUiEngine_calledMethodsInstance().count() > 0 ? + lcutStub_LcUiEngine_calledMethodsInstance()[callNdx] == call : + call == lcutNoCall; +} + + +void lcutStub_LcUiEngine_reset() +{ + delete lcutStub_LcUiEngine_calledMethods; + lcutStub_LcUiEngine_calledMethods = 0; + lcutStub_LcUiEngine_failure = 0; + lcutStub_LcUiEngine_layout = -1; + lcutStub_LcUiEngine_cameraMain = false; + lcutStub_LcUiEngine_muted = false; + lcutStub_LcUiEngine_speakerOn = false; + lcutStub_LcUiEngine_localplaying = true; + lcutStub_LcUiEngine_remoteplaying = true; +} + +void lcutStub_LcUiEngine_setFailure( int failure ) +{ + lcutStub_LcUiEngine_failure = failure; +} + +void lcutStub_LcUiEngine_setLayout( int layout ) +{ + lcutStub_LcUiEngine_layout = layout; +} + +QStringList& lcutStub_LcUiEngine_calledMethodsInstance() +{ + if ( !lcutStub_LcUiEngine_calledMethods ) { + lcutStub_LcUiEngine_calledMethods = new QStringList(); + } + return *lcutStub_LcUiEngine_calledMethods; +} + +void lcutStub_LcUiEngine_setCameraMain( bool val ) +{ + lcutStub_LcUiEngine_cameraMain = val; +} + +void lcutStub_LcUiEngine_setMuted( bool val ) +{ + lcutStub_LcUiEngine_layout = val; +} + +void lcutStub_LcUiEngine_setSpeaker( bool val ) +{ + lcutStub_LcUiEngine_speakerOn = val; +} + +void lcutStub_LcUiEngine_setLocalPlaying( bool val ) +{ + lcutStub_LcUiEngine_localplaying = val; +} + +void lcutStub_LcUiEngine_setRemotePlaying( bool val ) +{ + lcutStub_LcUiEngine_remoteplaying = val; +} + + +// End of file diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/ut_lcui/runtest.cmd --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/ut_lcui/runtest.cmd Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,23 @@ +@rem +@rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +@rem All rights reserved. +@rem This component and the accompanying materials are made available +@rem under the terms of "Eclipse Public License v1.0" +@rem which accompanies this distribution, and is available +@rem at the URL "http://www.eclipse.org/legal/epl-v10.html". +@rem +@rem Initial Contributors: +@rem Nokia Corporation - initial contribution. +@rem +@rem Contributors: +@rem +@rem Description: +@rem + +call qmake +call bldmake clean +call bldmake bldfiles +call abld reallyclean winscw udeb +call abld export +call abld build winscw udeb +call \epoc32\release\winscw\udeb\ut_lcui.exe diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/ut_lcui/src/main.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/ut_lcui/src/main.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,86 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + + +#include "ut_lcviewmanager.h" +#include "ut_lcuicomponentrepository.h" +#include "ut_lcview.h" +#include "ut_lceffecthandler.h" +#include "ut_lcvideowidget.h" +#include "testresultxmlparser.h" +#include +#include +#include + +#include +#include + +#define UT_ARGS( args, file )\ + QStringList args( "ut_lcui");\ + args << "-silent" << "-xml" << "-o" << file + +int main(int argc, char *argv[]) +{ + bool promptOnExit(true); + for (int i=0; i +#include +#include + +#define UT_SET_ORIENTATION(orient) \ +HbInstance::instance()->allMainWindows().at(0)->setOrientation(orient); + +void UT_LcEffectHandler::initTestCase() +{ + lcutStub_LcUiEngine_reset(); + //must have main window, even if it not used + mMainWindow = new HbMainWindow(); +} + +void UT_LcEffectHandler::cleanupTestCase() +{ + lcutStub_LcUiEngine_reset(); + delete mMainWindow; +} + + +void UT_LcEffectHandler::init() +{ + mEngine = new LcUiEngine( lcEngineName, lcDisplayName ); + + mSharedVideo = new LcVideoWidget(); + mSharedVideoOverlay = new LcVideoWidget(0,false); + mReceivedVideo = new LcVideoWidget(); + mReceivedVideoOverlay = new LcVideoWidget(0,false); + mEffectHandler = new LcEffectHandler( + *mEngine,mSharedVideo,mSharedVideoOverlay, + mReceivedVideo,mReceivedVideoOverlay); + +} + +void UT_LcEffectHandler::cleanup() +{ + lcutStub_LcUiEngine_reset(); + delete mEffectHandler; + delete mEngine; + delete mSharedVideo; + delete mSharedVideoOverlay; + delete mReceivedVideoOverlay; + delete mReceivedVideo; +} + +void UT_LcEffectHandler::testConstructor() +{ + QVERIFY( mEffectHandler ); +} + +void UT_LcEffectHandler::testSwap() +{ + clearWidgets(); + QSignalSpy spy( mEffectHandler, SIGNAL(loadSwapLayout()) ); + QVERIFY( !mEffectHandler->mSharedVideo ); + QVERIFY( !mEffectHandler->mReceivedVideo ); + QVERIFY( !mEffectHandler->mSwapInProgress ); + QCOMPARE( spy.count(), 0 ); + + mEffectHandler->swap(); + setWidgets(); + + QVERIFY( mEffectHandler->mSwapInProgress ); + QCOMPARE( spy.count(), 1 ); + + HbWidget* sharedVideoWidget = mEffectHandler->mSharedVideo; + HbWidget* receivedVideoWidget = mEffectHandler->mReceivedVideo; + HbWidget* sharedVideoWidget2 = mEffectHandler->mSharedVideoOverlay; + HbWidget* receivedVideoWidget2 = mEffectHandler->mReceivedVideoOverlay; + QRectF sharedOrig = mEffectHandler->mSharedVideo->geometry(); + QRectF recvOrig = mEffectHandler->mReceivedVideo->geometry(); + + // Swapping not started because other widget missing + mEffectHandler->mSwapSharedCompleted = true; + mEffectHandler->mSwapReceivedCompleted = true; + mEffectHandler->mSharedVideo = 0; + mEffectHandler->swap(); + QCOMPARE( sharedVideoWidget->geometry(), sharedOrig ); + QCOMPARE( receivedVideoWidget->geometry(), recvOrig ); + QCOMPARE( mEffectHandler->mSwapSharedCompleted, true ); + QCOMPARE( mEffectHandler->mSwapReceivedCompleted, true ); + + // Swapping not started because other widget missing + mEffectHandler->mSharedVideo = sharedVideoWidget; + mEffectHandler->mReceivedVideo = 0; + mEffectHandler->swap(); + QCOMPARE( sharedVideoWidget->geometry(), sharedOrig ); + QCOMPARE( receivedVideoWidget->geometry(), recvOrig ); + QCOMPARE( mEffectHandler->mSwapSharedCompleted, true ); + QCOMPARE( mEffectHandler->mSwapReceivedCompleted, true ); + + // Swapping started, however geometry is change only once swapping completes + mEffectHandler->mSharedVideo = sharedVideoWidget; + mEffectHandler->mReceivedVideo = receivedVideoWidget; + mEffectHandler->swap(); + + QCOMPARE( sharedVideoWidget->geometry(), sharedOrig ); + QCOMPARE( receivedVideoWidget->geometry(), recvOrig ); + QCOMPARE( mEffectHandler->mSwapSharedCompleted, false ); + QCOMPARE( mEffectHandler->mSwapReceivedCompleted, false ); + + // Swapping started, however geometry is change only once swapping completes + mEffectHandler->mSwapSharedCompleted = true; + mEffectHandler->mSwapReceivedCompleted = true; + mEffectHandler->swap(); + QCOMPARE( sharedVideoWidget->geometry(), sharedOrig ); + QCOMPARE( receivedVideoWidget->geometry(), recvOrig ); + QCOMPARE( mEffectHandler->mSwapSharedCompleted, false ); + QCOMPARE( mEffectHandler->mSwapReceivedCompleted, false ); +} + +void UT_LcEffectHandler::testShowSendWindow() +{ + // Shared video widget does not exist + setWidgets(); + HbWidget* sharedVideoWidget = mEffectHandler->mSharedVideo; + QVERIFY( sharedVideoWidget != 0 ); + sharedVideoWidget->hide(); + QVERIFY( !sharedVideoWidget->isVisible() ); + mEffectHandler->mSharedVideo = 0; + mEffectHandler->showSendWindow(); + QVERIFY( !sharedVideoWidget->isVisible() ); + + // Shared video widget exists, effects running, dont show + HbEffect::mRunning = true; + mEffectHandler->mSharedVideo = sharedVideoWidget; + mEffectHandler->showSendWindow(); + QVERIFY( !mEffectHandler->mSharedVideo->isVisible() ); + + // Shared video widget exists, show + HbEffect::mRunning = false; + mEffectHandler->mSharedVideo = sharedVideoWidget; + mEffectHandler->showSendWindow(); + QVERIFY( mEffectHandler->mSharedVideo->isVisible() ); +} + +void UT_LcEffectHandler::testHideSendWindow() +{ + // Shared video widget does not exist + setWidgets(); + HbWidget* sharedVideoWidget = mEffectHandler->mSharedVideo; + QVERIFY( sharedVideoWidget != 0 ); + mEffectHandler->mSharedVideo = 0; + mEffectHandler->hideSendWindow(); + + // Shared video widget exists, show + mEffectHandler->mSharedVideo = sharedVideoWidget; + mEffectHandler->showSendWindow(); + QVERIFY( mEffectHandler->mSharedVideo->isVisible() ); + + // Shared video widget exists, hide + mEffectHandler->hideSendWindow(); + QVERIFY( !mEffectHandler->mSharedVideo->isVisible() ); +} + +void UT_LcEffectHandler::testShowReceiveWindow() +{ + // Shared video widget does not exist + setWidgets(); + HbWidget* receivedVideoWidget = mEffectHandler->mReceivedVideo; + QVERIFY( receivedVideoWidget != 0 ); + receivedVideoWidget->hide(); + QVERIFY( !receivedVideoWidget->isVisible() ); + mEffectHandler->mReceivedVideo = 0; + mEffectHandler->showReceiveWindow(); + QVERIFY( !receivedVideoWidget->isVisible() ); + + // Received video widget exists, show + mEffectHandler->mReceivedVideo = receivedVideoWidget; + mEffectHandler->showReceiveWindow(); + QVERIFY( mEffectHandler->mReceivedVideo->isVisible() ); +} + +void UT_LcEffectHandler::testHideReceiveWindow() +{ + // Shared video widget does not exist + setWidgets(); + HbWidget* receivedVideoWidget = mEffectHandler->mReceivedVideo; + QVERIFY( receivedVideoWidget != 0 ); + mEffectHandler->mReceivedVideo = 0; + mEffectHandler->hideReceiveWindow(); + + + // Received video widget exists, show + mEffectHandler->mReceivedVideo = receivedVideoWidget; + mEffectHandler->showReceiveWindow(); + QVERIFY( mEffectHandler->mReceivedVideo->isVisible() ); + + // Receive video widget exists, hide + mEffectHandler->hideReceiveWindow(); + QVERIFY( !mEffectHandler->mReceivedVideo->isVisible() ); +} + + +// windowFlipComplete +// windowDisappearToFlipComplete +// windowDisappearComplete +// windowAppearComplete +// WindowSwapSharedComplete +// WindowSwapReceivedComplete + +void UT_LcEffectHandler::testEffectComplete() +{ + clearWidgets(); + + // Video widgets does not exist + HbEffect::EffectStatus status; + mEffectHandler->windowAppearComplete( status ); + mEffectHandler->windowDisappearComplete( status ); + mEffectHandler->windowDisappearToFlipComplete( status ); + mEffectHandler->windowFlipComplete( status ); + + setWidgets(); + + HbWidget* sharedVideoWidget = mEffectHandler->mSharedVideo; + HbWidget* receivedVideoWidget = mEffectHandler->mReceivedVideo; + sharedVideoWidget->hide(); + receivedVideoWidget->hide(); + + mEffectHandler->showSendWindow(); + mEffectHandler->windowAppearComplete( status ); + QVERIFY( sharedVideoWidget->isVisible() ); + + mEffectHandler->windowDisappearComplete( status ); + QVERIFY( sharedVideoWidget->isVisible() ); + + mEffectHandler->windowDisappearToFlipComplete( status ); + QVERIFY( !sharedVideoWidget->isVisible() ); + + lcutStub_LcUiEngine_setLocalPlaying( false ); + mEffectHandler->windowFlipComplete( status ); + QVERIFY( !sharedVideoWidget->isVisible() ); + + lcutStub_LcUiEngine_setLocalPlaying( true ); + mEffectHandler->windowFlipComplete( status ); + QVERIFY( sharedVideoWidget->isVisible() ); + + sharedVideoWidget->hide(); + receivedVideoWidget->hide(); + lcutStub_LcUiEngine_setLocalPlaying( true ); + mEffectHandler->windowFlipComplete( status ); + QVERIFY( sharedVideoWidget->isVisible() ); + + // Swapping, real video widgets are set visible only after + // both swap effects have completeded swapping completes and completion + // is also signal + + // Geomerty changes are handled by the view using DoCML's + // when swapping completes and completion is also signal + + QRectF pos1 = QRectF(5,100, 200, 200); + QRectF pos2 = QRectF(5,300, 400, 400); + mEffectHandler->mSharedVideo->setGeometry(pos1); + mEffectHandler->mReceivedVideo->setGeometry(pos2); + QSignalSpy spy( mEffectHandler, SIGNAL(swapCompleted()) ); + sharedVideoWidget->hide(); + receivedVideoWidget->hide(); + lcutStub_LcUiEngine_setLocalPlaying( true ); + mEffectHandler->windowSwapSharedComplete( status ); + QVERIFY( !sharedVideoWidget->isVisible() ); + QCOMPARE( spy.count(), 0 ); + + sharedVideoWidget->hide(); + receivedVideoWidget->hide(); + lcutStub_LcUiEngine_setRemotePlaying( true ); + mEffectHandler->windowSwapReceivedComplete( status ); + QVERIFY( receivedVideoWidget->isVisible() ); + QVERIFY( sharedVideoWidget->isVisible() ); + QCOMPARE( spy.count(), 1 ); + + // Players are disabled so even when swap completes, widgets are not set + // visible + sharedVideoWidget->hide(); + receivedVideoWidget->hide(); + lcutStub_LcUiEngine_setLocalPlaying( false ); + mEffectHandler->windowSwapSharedComplete( status ); + QVERIFY( !sharedVideoWidget->isVisible() ); + + sharedVideoWidget->hide(); + receivedVideoWidget->hide(); + lcutStub_LcUiEngine_setRemotePlaying( false ); + mEffectHandler->windowSwapReceivedComplete( status ); + QVERIFY( !receivedVideoWidget->isVisible() ); + QVERIFY( !sharedVideoWidget->isVisible() ); +} + +void UT_LcEffectHandler::testStartEffect() +{ + clearWidgets(); + + const char *effectId = "myeffect"; + const char *callBack = "mycallback"; + + QVERIFY( !mEffectHandler->mSharedVideo ); + QVERIFY( !mEffectHandler->mSharedVideoOverlay ); + mEffectHandler->startEffect( mEffectHandler->mSharedVideoOverlay,effectId, callBack); + + setWidgets(); + + QVERIFY( mEffectHandler->mSharedVideo ); + QVERIFY( mEffectHandler->mSharedVideoOverlay ); + + HbWidget* sharedVideoWidget = mEffectHandler->mSharedVideo; + HbWidget* sharedVideoWidget2 = mEffectHandler->mSharedVideoOverlay; + QRectF sharedOrig = mEffectHandler->mSharedVideo->geometry(); + + mEffectHandler->mSharedVideo = 0; + mEffectHandler->startEffect( mEffectHandler->mSharedVideoOverlay,effectId, callBack); + + mEffectHandler->mSharedVideo = sharedVideoWidget; + mEffectHandler->mSharedVideoOverlay = 0; + mEffectHandler->startEffect( mEffectHandler->mSharedVideoOverlay,effectId, callBack); + + mEffectHandler->mSharedVideo = sharedVideoWidget; + mEffectHandler->mSharedVideoOverlay = sharedVideoWidget2; + mEffectHandler->startEffect( mEffectHandler->mSharedVideoOverlay,effectId, callBack); + + QCOMPARE( sharedVideoWidget->geometry(), sharedVideoWidget2->geometry() ); +} + +void UT_LcEffectHandler::testSetVisibility() +{ + setWidgets(); + + QVERIFY( mEffectHandler->mSharedVideo ); + HbWidget* sharedVideoWidget = mEffectHandler->mSharedVideo; + sharedVideoWidget->setVisible(false); + + //If Effects are not running than we can set the visibility of widget + mEffectHandler->setVisibility(sharedVideoWidget,true); + // TODO: setvisibility temporarily NOP + /*QVERIFY( mEffectHandler->mSharedVideo->isVisible() ); + + //If Effects are running we can not set the visibility of widget. + HbEffect::mRunning = true; + mEffectHandler->setVisibility(sharedVideoWidget,false); + QVERIFY( mEffectHandler->mSharedVideo->isVisible() );*/ +} + +void UT_LcEffectHandler::testSetDissappearEffect() +{ + QCOMPARE( mEffectHandler->mEffectCallBack, + QString::fromAscii(lcEffectWinDefaultCallback )); + mEffectHandler->setDissappearEffect(LcEffectHandler::DissappearToFlip ); + QCOMPARE( mEffectHandler->mEffectCallBack, + QString::fromAscii("windowDisappearToFlipComplete" )); + mEffectHandler->setDissappearEffect(LcEffectHandler::NormalDissappear ); + QCOMPARE( mEffectHandler->mEffectCallBack, + QString::fromAscii("windowDisappearComplete" )); +} + +void UT_LcEffectHandler::testIsSharedVideoAtTop() +{ + setWidgets(); + + QRectF pos1 = QRectF(5,100, 200, 200); + QRectF pos2 = QRectF(5,300, 400, 400); + mEffectHandler->mSharedVideo->setGeometry(pos1); + mEffectHandler->mReceivedVideo->setGeometry(pos2); + + QVERIFY( mEffectHandler->isSharedVideoAtTop() ); + + mEffectHandler->mSharedVideo->setGeometry(pos2); + mEffectHandler->mReceivedVideo->setGeometry(pos1); + QVERIFY( !mEffectHandler->isSharedVideoAtTop() ); + +} + +void UT_LcEffectHandler::testVideosSideBySide() +{ + setWidgets(); + QRectF pos1 = QRectF(5,100, 200, 200); + QRectF pos2 = QRectF(5,300, 400, 400); + QRectF pos3 = QRectF(5,100, 400, 400); + + mEffectHandler->mSharedVideo->setGeometry(pos1); + mEffectHandler->mReceivedVideo->setGeometry(pos2); + + QVERIFY( !mEffectHandler->videosSideBySide() ); + mEffectHandler->mReceivedVideo->setGeometry(pos3); + QVERIFY( mEffectHandler->videosSideBySide() ); +} + +void UT_LcEffectHandler::testHandleSwapCompletion() +{ + QSignalSpy spy( mEffectHandler, SIGNAL(swapCompleted()) ); + mEffectHandler->mSwapInProgress = true; + mEffectHandler->mSwapSharedCompleted = false; + mEffectHandler->mSwapReceivedCompleted = false; + + // Test1: Swap is not completed. + mEffectHandler->handleSwapCompletion(); + QVERIFY( mEffectHandler->mSwapInProgress ); + QCOMPARE( spy.count(), 0 ); + + // Test2: Swap is partially completed. + mEffectHandler->mSwapSharedCompleted = true; + mEffectHandler->handleSwapCompletion(); + QVERIFY( mEffectHandler->mSwapInProgress ); + QCOMPARE( spy.count(), 0 ); + + // Test 3. Swap Completed completely. + mEffectHandler->mSwapSharedCompleted = true; + mEffectHandler->mSwapReceivedCompleted = true; + mEffectHandler->handleSwapCompletion(); + QVERIFY( !mEffectHandler->mSwapInProgress ); + QCOMPARE( spy.count(), 1 ); + + //Test 4. Local & Remote are player are availble. + lcutStub_LcUiEngine_setLocalPlaying( true ); + lcutStub_LcUiEngine_setRemotePlaying( true ); + + mEffectHandler->handleSwapCompletion(); + QVERIFY( mEffectHandler->mSharedVideo->isVisible() ); + QVERIFY( mEffectHandler->mReceivedVideo->isVisible() ); +} + +void UT_LcEffectHandler::testIsSwapInProgress() +{ + QVERIFY( !mEffectHandler->isSwapInProgress() ); + mEffectHandler->swap(); + QVERIFY( mEffectHandler->isSwapInProgress() ); +} + + +// Helper Utility Function for the Unit Test. +void UT_LcEffectHandler::clearWidgets() +{ + mEffectHandler->mReceivedVideo = 0; + mEffectHandler->mReceivedVideoOverlay = 0; + mEffectHandler->mSharedVideo = 0; + mEffectHandler->mSharedVideoOverlay = 0; +} + +void UT_LcEffectHandler::setWidgets() +{ + mEffectHandler->mReceivedVideo = mReceivedVideo; + mEffectHandler->mReceivedVideoOverlay = mReceivedVideoOverlay; + mEffectHandler->mSharedVideo = mSharedVideo; + mEffectHandler->mSharedVideoOverlay = mSharedVideoOverlay; +} + + + diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/ut_lcui/src/ut_lcuicomponentrepository.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/ut_lcui/src/ut_lcuicomponentrepository.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,322 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + +#include "ut_lcuicomponentrepository.h" +#include "ut_lcuidefs.h" +#include "lcuicomponentrepository.h" +#include "lcuidefs.h" +#include "lcview.h" +#include "lcuiengine.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define UT_SET_ORIENTATION(orient) \ +HbInstance::instance()->allMainWindows().at(0)->setOrientation(orient); + +void UT_LcUiComponentRepository::initTestCase() +{ +} + +void UT_LcUiComponentRepository::cleanupTestCase() +{ +} + + +void UT_LcUiComponentRepository::init() +{ + mEngine = new LcUiEngine( lcEngineName, lcDisplayName ); + mRepository = new LcUiComponentRepository( *mEngine ); +} + +void UT_LcUiComponentRepository::cleanup() +{ + delete mRepository; + delete mEngine; +} + +void UT_LcUiComponentRepository::testConstructor() +{ + QVERIFY( mRepository ); + QVERIFY( !mRepository->mIdleView ); + QVERIFY( !mRepository->mReceiveView ); + QVERIFY( !mRepository->mReceiveOnlyView ); + QVERIFY( !mRepository->mTwowayView ); + QVERIFY( !mRepository->mSendView ); + QVERIFY( !mRepository->mAllInOneView ); + QVERIFY( !mRepository->mAcceptQuery ); + QVERIFY( !mRepository->mInvitingNote ); + QVERIFY( !mRepository->mWaitingNote ); + QVERIFY( !mRepository->mRecipientQuery ); + +} + +void UT_LcUiComponentRepository::testIdleView() +{ + // View not yet loaded + UT_SET_ORIENTATION( Qt::Horizontal ); + QVERIFY( !mRepository->mIdleView ); + LcView* view = mRepository->idleView(); + QVERIFY( mRepository->mIdleView ); + QCOMPARE( view->objectName(), QString( lcViewIdleId ) ); + + // View loaded + LcView* view2 = mRepository->idleView(); + QVERIFY( view == view2 ); +} + +void UT_LcUiComponentRepository::testReceiveView() +{ + // View not yet loaded + // Landscape layout + UT_SET_ORIENTATION( Qt::Horizontal ); + QVERIFY( !mRepository->mReceiveView ); + LcView* view = mRepository->receiveView(); + QVERIFY( mRepository->mReceiveView ); + QCOMPARE( view->objectName(), QString( lcViewReceiveId ) ); + + // View loaded + LcView* view2 = mRepository->receiveView(); + QVERIFY( view == view2 ); +} + + +void UT_LcUiComponentRepository::testReceiveOnlyView() +{ + // View not yet loaded + QVERIFY( !mRepository->mReceiveOnlyView ); + LcView* view = mRepository->receiveOnlyView(); + QVERIFY( mRepository->mReceiveOnlyView ); + QCOMPARE( view->objectName(), QString( lcViewReceiveOnlyId ) ); + + // View loaded + LcView* view2 = mRepository->receiveOnlyView(); + QVERIFY( view == view2 ); +} + + +void UT_LcUiComponentRepository::testTwowayView() +{ + // View not yet loaded + QVERIFY( !mRepository->mTwowayView ); + LcView* view = mRepository->twowayView(); + QVERIFY( mRepository->mTwowayView ); + QCOMPARE( view->objectName(), QString( lcViewTwowayId ) ); + + // View loaded + LcView* view2 = mRepository->twowayView(); + QVERIFY( view == view2 ); +} + +void UT_LcUiComponentRepository::testSendView() +{ + // View not yet loaded + QVERIFY( !mRepository->mSendView ); + LcView* view = mRepository->sendView(); + QVERIFY( mRepository->mSendView ); + QCOMPARE( view->objectName(), QString( lcViewSendId ) ); + + // View loaded + LcView* view2 = mRepository->sendView(); + QVERIFY( view == view2 ); +} + +void UT_LcUiComponentRepository::testAllInOneView() +{ + // View not yet loaded + UT_SET_ORIENTATION( Qt::Horizontal ); + QVERIFY( !mRepository->mAllInOneView ); + LcView* view = mRepository->allInOneView(); + QVERIFY( mRepository->mAllInOneView ); + QCOMPARE( view->objectName(), QString( lcViewAllInOneId ) ); + QCOMPARE( mRepository->mLayoutSection, QString( lcLayoutLandscapeDefaultId ) ); + // View loaded + LcView* view2 = mRepository->allInOneView(); + QVERIFY( view == view2 ); +} + +void UT_LcUiComponentRepository::testAcceptQuery() +{ + // Query created and returned + QVERIFY( !mRepository->mAcceptQuery ); + HbDialog* query = mRepository->acceptQuery(); + QVERIFY( query ); + QCOMPARE( query, mRepository->mAcceptQuery ); + QVERIFY( !query->isVisible() ); + + // Existing query returned + HbDialog* query2 = mRepository->acceptQuery(); + QVERIFY( query2 ); + QVERIFY( query2 == query ); +} + +void UT_LcUiComponentRepository::testInvitingNote() +{ + // Note created and returned + QVERIFY( !mRepository->mInvitingNote ); + HbDialog* note = mRepository->invitingNote(); + QVERIFY( note ); + QVERIFY( note == mRepository->mInvitingNote ); + QVERIFY( !note->isVisible() ); + + // Existing note returned + HbDialog* note2 = mRepository->invitingNote(); + QVERIFY( note2 ); + QVERIFY( note2 == note ); +} + +void UT_LcUiComponentRepository::testWaitingNote() +{ + // Note created and returned + QVERIFY( !mRepository->mWaitingNote ); + HbDialog* note = mRepository->waitingNote(); + QVERIFY( note ); + QVERIFY( note == mRepository->mWaitingNote ); + QVERIFY( !note->isVisible() ); + + // Existing note returned + HbDialog* note2 = mRepository->waitingNote(); + QVERIFY( note2 ); + QVERIFY( note2 == note ); +} + +void UT_LcUiComponentRepository::testRecipientQuery() +{ + // Query created and returned + QVERIFY( !mRepository->mRecipientQuery ); + HbDialog* query = mRepository->recipientQuery(); + QVERIFY( mRepository->mRecipientQuery ); + QCOMPARE( query, mRepository->mRecipientQuery ); + QVERIFY( !query->isVisible() ); + + // Existing query returned + HbDialog* query2 = mRepository->recipientQuery(); + QVERIFY( query2 == query ); +} + +void UT_LcUiComponentRepository::testShareOwnVideoQuery() +{ + // Query created and returned + QVERIFY( !mRepository->mShareOwnVideoQuery ); + HbDialog* query = mRepository->shareOwnVideoQuery(); + QVERIFY( mRepository->mShareOwnVideoQuery ); + QCOMPARE( query, (HbDialog*)mRepository->mShareOwnVideoQuery ); + QVERIFY( !query->isVisible() ); + + // Existing query returned + HbDialog* query2 = mRepository->shareOwnVideoQuery(); + QVERIFY( query2 ); + QVERIFY( query2 == query ); +} + +void UT_LcUiComponentRepository::testSharedVideoContextMenu() +{ + HbMenu* menu = new HbMenu(); + QVERIFY( menu->isEmpty() ); + + QVERIFY( !mRepository->mAllInOneView ); + LcView* view = mRepository->allInOneView(); + QVERIFY( mRepository->mAllInOneView ); + QCOMPARE( view->objectName(), QString( lcViewAllInOneId ) ); + + HbAction changeCamera( lcActChangeCameraId ); + HbAction disableCam( lcActMenuDisableCameraId ); + HbAction enableCam( lcActEnableCameraId ); + HbAction changeCam( lcActMenuChangeCameraId ); + + mRepository->mActions.append( &changeCamera ); + mRepository->mActions.append( &disableCam ); + mRepository->mActions.append( &enableCam ); + mRepository->mActions.append( &changeCam ); + + mRepository->sharedVideoContextMenuActions( menu, *view ); + //TODO: stub implementation of void QGraphicsWidget::addAction(QAction *action); + //QVERIFY( !menu->isEmpty() ); +} + + +void UT_LcUiComponentRepository::testLoadView_FileNotFound() +{ + QObjectList viewR; + const QString vid( "view"); + const QString file( "file not found" ); + QVERIFY( !mRepository->loadView( viewR, vid, file ) ); +} + +void UT_LcUiComponentRepository::testConnect() +{ + LcView* view = mRepository->idleView(); + QVERIFY( view ); + HbAction action; + + // Existing action + action.setObjectName( QString( lcActMuteId ) ); + QVERIFY( mRepository->connect( action, *view ) ); + + // Action not found + action.setObjectName( QString( "Action not defined" ) ); + QVERIFY( !mRepository->connect( action, *view ) ); +} + + +void UT_LcUiComponentRepository::testLoadLayout() +{ + bool ok( false ); + + // View not yet loaded + QVERIFY( mRepository->mLastLoadedView.length() == 0 ); + ok = mRepository->loadLayout( lcLayoutLandscapeDefaultId ); + QVERIFY( !ok ); + + // View is loaded + mRepository->mLastLoadedView = lcIdleViewFile; + ok = mRepository->loadLayout( lcLayoutLandscapeDefaultId ); + QVERIFY( ok ); + + // Changing layout + ok = mRepository->loadLayout( lcLayoutLandscapeSwappedId ); + QVERIFY( ok ); + ok = mRepository->loadLayout( lcLayoutFullscreenId ); + QVERIFY( ok ); + + // Loading non-existing section + ok = mRepository->loadLayout( QString("dummy_layout") ); + QVERIFY( !ok ); + + // Check for current and previously loaded layout name + mRepository->mLastLoadedView = lcIdleViewFile; + ok = mRepository->loadLayout( lcLayoutLandscapeDefaultId ); + QVERIFY( ok ); + QVERIFY( mRepository->layout() == lcLayoutLandscapeDefaultId ); + ok = mRepository->loadLayout( lcLayoutLandscapeDialpadId ); + QVERIFY( ok ); + QVERIFY( mRepository->layout() == lcLayoutLandscapeDialpadId ); + QVERIFY( mRepository->previousLayout() == lcLayoutLandscapeDefaultId ); + ok = mRepository->loadLayout( mRepository->previousLayout() ); + QVERIFY( ok ); + QVERIFY( mRepository->layout() == lcLayoutLandscapeDefaultId ); + QVERIFY( mRepository->previousLayout() == lcLayoutLandscapeDialpadId ); + +} diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/ut_lcui/src/ut_lcvideowidget.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/ut_lcui/src/ut_lcvideowidget.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,73 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + + +#include "ut_lcvideowidget.h" +#include "ut_lcuidefs.h" +#include "lcvideowidget.h" +#include +#include +#include +#include + +void UT_LcVideoWidget::initTestCase() +{ +} + +void UT_LcVideoWidget::cleanupTestCase() +{ +} + + +void UT_LcVideoWidget::init() +{ + mVideoWidget = new LcVideoWidget(); + mVideoWidget2 = new LcVideoWidget(0,false); +} + +void UT_LcVideoWidget::cleanup() +{ + delete mVideoWidget; + delete mVideoWidget2; +} + +void UT_LcVideoWidget::testConstructor() +{ + QVERIFY( mVideoWidget ); + QVERIFY( mVideoWidget->isShowingVideo() ); + QVERIFY( mVideoWidget2 ); + QVERIFY( !mVideoWidget2->isShowingVideo() ); +} + +void UT_LcVideoWidget::testSetShowVideo() +{ + QVERIFY( mVideoWidget->isShowingVideo() ); + mVideoWidget->setShowVideo(false); + QVERIFY( !mVideoWidget->isShowingVideo() ); + mVideoWidget->setShowVideo(true); + QVERIFY( mVideoWidget->isShowingVideo() ); +} + +void UT_LcVideoWidget::testPaint() +{ + QPainter painter; + QStyleOptionGraphicsItem style; + mVideoWidget->setPos(QPointF(10,100)); + mVideoWidget->paint(&painter,&style,0); + mVideoWidget2->paint(&painter,&style,0); +} + diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/ut_lcui/src/ut_lcview.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/ut_lcui/src/ut_lcview.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,911 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + + +#include "ut_lcview.h" +#include "ut_lcuidefs.h" +#include "lcview.h" +#include "lcuiengine.h" +#include "lcuicomponentrepository.h" +#include "lcuidefs.h" +#include "lcvideowidget.h" +#include "lceffecthandler.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +// Stub Helper +#include + +#define UT_SET_ORIENTATION(orient) \ +HbInstance::instance()->allMainWindows().at(0)->setOrientation(orient); + +void UT_LcView::initTestCase() +{ + lcutStub_LcUiEngine_reset(); + //must have main window, even if it not used + mMainWindow = new HbMainWindow(); +} + +void UT_LcView::cleanupTestCase() +{ + lcutStub_LcUiEngine_reset(); + delete mMainWindow; +} + + +void UT_LcView::init() +{ + lcutStub_LcUiEngine_reset(); + mRecipient = new HbLabel(); + mEndCallButton = new HbPushButton(); + mEngine = new LcUiEngine( lcEngineName, lcDisplayName ); + mRepository = new LcUiComponentRepository( *mEngine ); + mView = new LcView( *mEngine, *mRepository ); + mView->mRecipient = mRecipient; + mView->mEndCallButton = mEndCallButton; + mView->mChangeCameraAction = new HbAction(); + mView->mMuteAction = new HbAction(); + mView->mSpeakerAction = new HbAction(); + mView->mDisableCameraAction = new HbAction(); + mView->mDisableCameraMenuAction = new HbAction(); +} + +void UT_LcView::cleanup() +{ + lcutStub_LcUiEngine_reset(); + delete mRecipient; + delete mView; + delete mEngine; + delete mRepository; + delete mEndCallButton; +} + +void UT_LcView::testConstructor() +{ + QVERIFY( mView ); +} + +void UT_LcView::testActivated() +{ + mView->init(); + lcutStub_LcUiEngine_reset(); + QVERIFY( lcutStub_LcUiEngine_getCurrentView() == 0 ); + mView->activated(); + QVERIFY( lcutStub_LcUiEngine_expectCall( lcutStub_LcUiEngine_updateSession, 0 ) ); + QVERIFY( lcutStub_LcUiEngine_expectCall( lcutStub_LcUiEngine_setOrientation, 1 ) ); + QVERIFY( lcutStub_LcUiEngine_getCurrentView() == mView ); + QVERIFY( lcutStub_LcUiEngine_expectCall( lcutStub_LcUiEngine_setContentAreas, 2 ) ); + + lcutStub_LcUiEngine_reset(); + mView->activated(); + QVERIFY( lcutStub_LcUiEngine_expectCall( lcutStub_LcUiEngine_updateSession, 0 ) ); + QVERIFY( lcutStub_LcUiEngine_expectCall( lcutStub_LcUiEngine_setOrientation, 1 ) ); + QVERIFY( lcutStub_LcUiEngine_expectCall( lcutStub_LcUiEngine_setContentAreas, 2 ) ); + + lcutStub_LcUiEngine_reset(); + lcutStub_LcUiEngine_setCameraMain( true); + lcutStub_LcUiEngine_setMuted( true); + lcutStub_LcUiEngine_setSpeaker( true ); + + mView->activated(); + QVERIFY( lcutStub_LcUiEngine_expectCall( lcutStub_LcUiEngine_updateSession, 0 ) ); + QVERIFY( lcutStub_LcUiEngine_expectCall( lcutStub_LcUiEngine_setOrientation, 1 ) ); + QVERIFY( lcutStub_LcUiEngine_expectCall( lcutStub_LcUiEngine_setContentAreas, 2 ) ); + + // normal scenario + lcutStub_LcUiEngine_reset(); + mView->mChangeCameraAction = new HbAction(); + mView->mMuteAction = new HbAction(); + mView->mSpeakerAction = new HbAction(); + mView->mDisableCameraAction = new HbAction(); + + mView->mEngine.setMainCamera( true ); + lcutStub_LcUiEngine_setMuted( true); + lcutStub_LcUiEngine_setSpeaker( true ); + lcutStub_LcUiEngine_setLocalPlaying( true ); + mView->activated(); + QVERIFY( mView->mChangeCameraAction ); + QVERIFY( mView->mChangeCameraAction->icon() == HbIcon( lcIconNameSecondaryCamera ) ); + QVERIFY( mView->mMuteAction ); + QVERIFY( mView->mMuteAction->icon() == HbIcon( lcIconNameUnmuteMic ) ); + QVERIFY( mView->mSpeakerAction ); + QVERIFY( mView->mSpeakerAction->icon() == HbIcon( lcIconNameHandset ) ); + QVERIFY( mView->mDisableCameraAction ); + QVERIFY( mView->mDisableCameraAction->icon() == HbIcon( lcIconNameDisableCamera ) ); + + // dude trust me , ofcourse not everything normal everytime + mView->mEngine.setMainCamera( false ); + lcutStub_LcUiEngine_setMuted( false ); + lcutStub_LcUiEngine_setSpeaker( false ); + lcutStub_LcUiEngine_setLocalPlaying( false ); + mView->activated(); + QVERIFY( mView->mChangeCameraAction ); + QVERIFY( mView->mChangeCameraAction->icon() == HbIcon( lcIconNameMainCamera ) ); + QVERIFY( mView->mMuteAction ); + QVERIFY( mView->mMuteAction->icon() == HbIcon( lcIconNameMuteMic ) ); + QVERIFY( mView->mSpeakerAction ); + QVERIFY( mView->mSpeakerAction->icon() == HbIcon( lcIconNameLoudspeaker ) ); + QVERIFY( mView->mDisableCameraAction ); + QVERIFY( mView->mDisableCameraAction->icon() == HbIcon( lcIconNameEnableCamera ) ); +} + +void UT_LcView::testInit() +{ + mRepository->mReturnSendVideo = false; + mView->init(); + QVERIFY( mView->mRecipient ); + QVERIFY( !mView->mSharedVideoWidget ); + QVERIFY( mView->mDialpad ); + QVERIFY( mView->mDialpadVtKeyHandler ); + + mRepository->mReturnSendVideo = true; + mView->init(); + QVERIFY( mView->mRecipient ); + QVERIFY( mView->mSharedVideoWidget ); + QVERIFY( mView->menu()); + QVERIFY( mView->mDialpad ); + QVERIFY( mView->mDialpadVtKeyHandler ); + + // emergency call + mView->mDialpadVtKeyHandler->contentChanged("112"); + QVERIFY( mView->mDialpad->mIsCallButtonEnabled ); + mView->mDialpadVtKeyHandler->contentChanged("100"); + QVERIFY( !mView->mDialpad->mIsCallButtonEnabled ); +} + +void UT_LcView::testDeactivated() +{ + mView->deactivated(); + QVERIFY( lcutStub_LcUiEngine_expectCall( lcutStub_LcUiEngine_setContentAreas ) ); +} + +void UT_LcView::testSetCameraActionToMain() +{ + mView->setCameraActionToMain(); + QVERIFY( mView->mChangeCameraAction->text().isEmpty() ); + QCOMPARE( mView->mChangeCameraAction->icon(), HbIcon(lcIconNameMainCamera) ); +} + +void UT_LcView::testSetCameraActionToSecondary() +{ + mView->setCameraActionToSecondary(); + QVERIFY( mView->mChangeCameraAction->text().isEmpty() ); + QCOMPARE( mView->mChangeCameraAction->icon(), HbIcon(lcIconNameSecondaryCamera) ); +} + +void UT_LcView::testSetMuteActionToUnmute() +{ + mView->setMuteActionToUnmute(); + QVERIFY( mView->mMuteAction->text().isEmpty() ); + QCOMPARE (mView->mMuteAction->icon(), HbIcon(lcIconNameUnmuteMic)); +} + +void UT_LcView::testSetMuteActionToMute() +{ + mView->setMuteActionToMute(); + QVERIFY( mView->mMuteAction->text().isEmpty() ); + QCOMPARE (mView->mMuteAction->icon(), HbIcon(lcIconNameMuteMic)); +} + +void UT_LcView::testSetSpeakerActionToHandset() +{ + mView->setSpeakerActionToHandset(); + QVERIFY( mView->mSpeakerAction->text().isEmpty() ); + QCOMPARE( mView->mSpeakerAction->icon(), HbIcon(lcIconNameHandset) ); +} + +void UT_LcView::testSetSpeakerActionToSpeaker() +{ + mView->setSpeakerActionToSpeaker(); + QVERIFY( mView->mSpeakerAction->text().isEmpty() ); + QCOMPARE( mView->mSpeakerAction->icon(), HbIcon(lcIconNameLoudspeaker) ); +} + +void UT_LcView::testSetCameraActionToEnable() +{ + mView->setCameraActionToEnable(); + QVERIFY( mView->mDisableCameraAction->text().isEmpty() ); + QCOMPARE( mView->mDisableCameraAction->icon(), HbIcon(lcIconNameEnableCamera) ); + QCOMPARE( mView->mDisableCameraMenuAction->text(), hbTrId( "txt_vt_menu_enable_camera" ) ); +} + +void UT_LcView::testSetCameraActionToDisable() +{ + mView->setCameraActionToDisable(); + QVERIFY( mView->mDisableCameraAction->text().isEmpty() ); + QCOMPARE( mView->mDisableCameraAction->icon(), HbIcon(lcIconNameDisableCamera) ); + QCOMPARE( mView->mDisableCameraMenuAction->text(), hbTrId( "txt_vt_menu_disable_camera" ) ); +} + + +void UT_LcView::testDisableControls() +{ + mView->disableControls(); + QVERIFY( !mView->menu()->isEnabled() ); + QVERIFY( !mView->toolBar()->isEnabled() ); +} + +void UT_LcView::testEnableControls() +{ + mView->menu()->setEnabled( false ); + mView->toolBar()->setEnabled( false ); + + mView->enableControls(); + QVERIFY( mView->menu()->isEnabled() ); + QVERIFY( mView->toolBar()->isEnabled() ); +} + + +void UT_LcView::testEndVideoSession() +{ + mView->endVideoSession(); + QVERIFY( lcutStub_LcUiEngine_expectCall( lcutStub_LcUiEngine_stop ) ); +} + +void UT_LcView::testMute() +{ + mView->mute(); + QVERIFY( lcutStub_LcUiEngine_expectCall( lcutStub_LcUiEngine_mute ) ); + QVERIFY( !mView->timerId ); + QVERIFY( !mEngine->fullScreenMode()); +} + +void UT_LcView::testChangeCamera() +{ + mView->init(); + mView->changeCamera(); + QVERIFY( lcutStub_LcUiEngine_expectCall( lcutStub_LcUiEngine_toggleCamera ) ); + QVERIFY( !mEngine->fullScreenMode() ); +} + +void UT_LcView::testSwitchToVoiceCall() +{ + mView->switchToVoiceCall(); + QVERIFY( lcutStub_LcUiEngine_expectCall( lcutStub_LcUiEngine_stop ) ); +} + +void UT_LcView::testDisableCameraWhenOnFullScreenMode() +{ + mView->init(); + mEngine->setFullScreenMode(true); + mView->disableCamera(); + QVERIFY( lcutStub_LcUiEngine_expectCall( lcutStub_LcUiEngine_disableCamera ) ); + QVERIFY( mEngine->fullScreenMode() ); +} + +void UT_LcView::testDisableCameraWhenNotOnFullScreenMode() +{ + mView->init(); + mEngine->setFullScreenMode(false); + mView->disableCamera(); + QVERIFY( lcutStub_LcUiEngine_expectCall( lcutStub_LcUiEngine_disableCamera ) ); + QVERIFY( !mEngine->fullScreenMode() ); +} + +void UT_LcView::testSpeaker() +{ + mView->init(); + mView->speaker(); + QVERIFY( lcutStub_LcUiEngine_expectCall( lcutStub_LcUiEngine_speaker ) ); + QVERIFY( !mEngine->fullScreenMode() ); +} + +void UT_LcView::testSwap() +{ + QVERIFY( !mView->mSharedVideoWidget ); + QVERIFY( !mView->mReceivedVideoWidget ); + mView->swap(); + QVERIFY( lcutStub_LcUiEngine_expectCall( lcutNoCall ) ); + + lcutStub_LcUiEngine_reset(); + mView->init(); + mView->swap(); + QVERIFY( lcutStub_LcUiEngine_expectCall( lcutNoCall ) ); +} + +void UT_LcView::testNotSupported() +{ + HbMainWindow mainWin; + QVERIFY( mView->mNotSupportedNote ); + QVERIFY( !mView->mNotSupportedNote->isVisible() ); + mView->notSupported(); + QVERIFY( mView->mNotSupportedNote->isVisible() ); +} + +void UT_LcView::testUpdateVideoRects() +{ + mView->init(); + LcVideoWidget* sharedVideoWidget = mView->mSharedVideoWidget; + LcVideoWidget* receivedVideoWidget = mView->mReceivedVideoWidget; + + mView->mSharedVideoWidget = 0; + mView->mReceivedVideoWidget = 0; + mView->updateVideoRects(); + QVERIFY( lcutStub_LcUiEngine_expectCall( lcutStub_LcUiEngine_updateSession, 0 ) ); + QVERIFY( lcutStub_LcUiEngine_expectCall( lcutStub_LcUiEngine_setOrientation, 1 ) ); + QVERIFY( lcutStub_LcUiEngine_expectCall( lcutStub_LcUiEngine_setContentAreas, 2 ) ); + + mView->mSharedVideoWidget = sharedVideoWidget; + mView->mReceivedVideoWidget = 0; + mView->updateVideoRects(); + QVERIFY( lcutStub_LcUiEngine_expectCall( lcutStub_LcUiEngine_updateSession, 0 ) ); + QVERIFY( lcutStub_LcUiEngine_expectCall( lcutStub_LcUiEngine_setOrientation, 1 ) ); + QVERIFY( lcutStub_LcUiEngine_expectCall( lcutStub_LcUiEngine_setContentAreas, 2 ) ); + + mView->mSharedVideoWidget = 0; + mView->mReceivedVideoWidget = receivedVideoWidget; + mView->updateVideoRects(); + QVERIFY( lcutStub_LcUiEngine_expectCall( lcutStub_LcUiEngine_updateSession, 0 ) ); + QVERIFY( lcutStub_LcUiEngine_expectCall( lcutStub_LcUiEngine_setOrientation, 1 ) ); + QVERIFY( lcutStub_LcUiEngine_expectCall( lcutStub_LcUiEngine_setContentAreas, 2 ) ); + + mView->mSharedVideoWidget = sharedVideoWidget; + mView->mReceivedVideoWidget = receivedVideoWidget; + sharedVideoWidget->hide(); + receivedVideoWidget->hide(); + lcutStub_LcUiEngine_setLocalPlaying( false ); + lcutStub_LcUiEngine_setRemotePlaying( false ); + mView->updateVideoRects(); + QVERIFY( lcutStub_LcUiEngine_expectCall( lcutStub_LcUiEngine_updateSession, 0 ) ); + QVERIFY( lcutStub_LcUiEngine_expectCall( lcutStub_LcUiEngine_setOrientation, 1 ) ); + QVERIFY( lcutStub_LcUiEngine_expectCall( lcutStub_LcUiEngine_setContentAreas, 2 ) ); + QVERIFY( !sharedVideoWidget->isVisible() ); + QVERIFY( !receivedVideoWidget->isVisible() ); + + sharedVideoWidget->hide(); + receivedVideoWidget->hide(); + lcutStub_LcUiEngine_setLocalPlaying( true ); + lcutStub_LcUiEngine_setRemotePlaying( true ); + mView->updateVideoRects(); + QVERIFY( lcutStub_LcUiEngine_expectCall( lcutStub_LcUiEngine_updateSession, 0 ) ); + QVERIFY( lcutStub_LcUiEngine_expectCall( lcutStub_LcUiEngine_setOrientation, 1 ) ); + QVERIFY( lcutStub_LcUiEngine_expectCall( lcutStub_LcUiEngine_setContentAreas, 2 ) ); + + //Test: Shared video widgets and received video wigts are positioned at (0,0) + //It does not update. + lcutStub_LcUiEngine_reset(); + mView->isViewReady = false; + mView->mSharedVideoWidget = sharedVideoWidget; + mView->mSharedVideoWidget->setPos(QPointF(0,0)); + mView->mReceivedVideoWidget = receivedVideoWidget; + mView->mReceivedVideoWidget->setPos(QPointF(0,0)); + mView->updateVideoRects(); + QVERIFY( !lcutStub_LcUiEngine_expectCall( lcutStub_LcUiEngine_updateSession, 0 ) ); + QVERIFY( !lcutStub_LcUiEngine_expectCall( lcutStub_LcUiEngine_setOrientation, 1 ) ); + QVERIFY( !lcutStub_LcUiEngine_expectCall( lcutStub_LcUiEngine_setContentAreas, 2 ) ); + + + //Test2: Shared video widgets positioned at (0,0) and other widgets is null + //It does not update. + lcutStub_LcUiEngine_reset(); + mView->mSharedVideoWidget = sharedVideoWidget; + mView->mSharedVideoWidget->setPos(QPointF(0,0)); + mView->mReceivedVideoWidget = 0; + mView->isViewReady = false; + mView->updateVideoRects(); + QVERIFY( !lcutStub_LcUiEngine_expectCall( lcutStub_LcUiEngine_updateSession, 0 ) ); + QVERIFY( !lcutStub_LcUiEngine_expectCall( lcutStub_LcUiEngine_setOrientation, 1 ) ); + QVERIFY( !lcutStub_LcUiEngine_expectCall( lcutStub_LcUiEngine_setContentAreas, 2 ) ); + + //Test3: Shared video widgets positioned correctly and other widgets is null + //It update. + lcutStub_LcUiEngine_reset(); + mView->mSharedVideoWidget = sharedVideoWidget; + mView->mSharedVideoWidget->setPos(QPointF(10,10)); + mView->mReceivedVideoWidget = 0; + mView->isViewReady = false; + mView->updateVideoRects(); + QVERIFY( lcutStub_LcUiEngine_expectCall( lcutStub_LcUiEngine_updateSession, 0 ) ); + QVERIFY( lcutStub_LcUiEngine_expectCall( lcutStub_LcUiEngine_setOrientation, 1 ) ); + QVERIFY( lcutStub_LcUiEngine_expectCall( lcutStub_LcUiEngine_setContentAreas, 2 ) ); +} + +void UT_LcView::testCurrentLayout() +{ + mView->init(); + QString layout; + + //1. Landscape layout + UT_SET_ORIENTATION( Qt::Horizontal ); + layout = mView->currentLayout(); + QVERIFY( layout == lcLayoutLandscapeDefaultId ); + + //2. Landscape swapped layout + // Shared window x coordinate is higher than Received windows x coordinate. + + QRectF pos1 = QRectF(100,300, 400, 400); + QRectF pos2 = QRectF(5,100, 200, 200); + + UT_SET_ORIENTATION( Qt::Horizontal ); + mView->mEffectHandler->mSwapInProgress = true; + mView->mSharedVideoWidget->setGeometry(pos1); + mView->mReceivedVideoWidget->setGeometry(pos2); + + layout = mView->currentLayout(); + QVERIFY( layout == lcLayoutLandscapeSwappedId ); + + //3. If it's already swapped, change to the normal landscape mode + mView->mSharedVideoWidget->setGeometry(pos2); + mView->mReceivedVideoWidget->setGeometry(pos1); + layout = mView->currentLayout(); + QVERIFY( layout == lcLayoutLandscapeDefaultId ); +} + + +void UT_LcView::testToFullScreen() +{ + QString layout; + UT_SET_ORIENTATION( Qt::Horizontal ); + + // Test1: to full screen + mView->init(); + mView->menu()->setVisible( false ); + mView->toFullScreen( true ); + QVERIFY( mEngine->fullScreenMode() ); + // Use the helper function do not invent new one + QVERIFY( !HbStubHelper::isTitleBarVisible() ); + QVERIFY( !HbStubHelper::isStatusBarVisible() ); + QVERIFY( !mView->toolBar()->isVisible() ); + QVERIFY( !mView->mEndCallButton->isVisible() ); + QVERIFY( !mView->mDuration->isVisible() ); + QVERIFY( !mView->mRecipient->isVisible() ); + + // Test2 : not in full screen + mView->init(); + mView->menu()->setVisible( false ); + mView->toFullScreen( false ); + QVERIFY( !mEngine->fullScreenMode() ); + QVERIFY( HbStubHelper::isTitleBarVisible() ); + QVERIFY( HbStubHelper::isStatusBarVisible() ); + QVERIFY( mView->toolBar()->isVisible() ); + QVERIFY( mView->mEndCallButton->isVisible() ); + QVERIFY( mView->mDuration->isVisible() ); + QVERIFY( mView->mRecipient->isVisible() ); + int tId = mView->timerId; + mView->watchInactivity(); + QVERIFY( mView->timerId != tId ); + + // Test3 : menu visible + mView->init(); + mView->menu()->setVisible( false ); + mView->toFullScreen( false ); + mView->menu()->setVisible( true ); + mView->toFullScreen( true ); + QVERIFY( !mEngine->fullScreenMode() ); + QVERIFY( HbStubHelper::isTitleBarVisible() ); + QVERIFY( HbStubHelper::isStatusBarVisible() ); + QVERIFY( mView->toolBar()->isVisible() ); + QVERIFY( mView->mEndCallButton->isVisible() ); + QVERIFY( mView->mDuration->isVisible() ); + QVERIFY( mView->mRecipient->isVisible() ); + tId = mView->timerId; + mView->watchInactivity(); + QVERIFY( mView->timerId != tId ); + + // Test3 : dialpad visible + mView->init(); + delete mView->mDialpad; + mView->mDialpad = new Dialpad(); + mView->toFullScreen( true ); + QVERIFY( !mEngine->fullScreenMode() ); + QVERIFY( HbStubHelper::isTitleBarVisible() ); + QVERIFY( HbStubHelper::isStatusBarVisible() ); + QVERIFY( mView->toolBar()->isVisible() ); + QVERIFY( mView->mEndCallButton->isVisible() ); + QVERIFY( mView->mDuration->isVisible() ); + QVERIFY( mView->mRecipient->isVisible() ); + tId = mView->timerId; + mView->watchInactivity(); + QVERIFY( mView->timerId == tId ); +} + +void UT_LcView::testGestureEvent() +{ + mView->init(); + mView->menu()->setVisible(false); + UT_SET_ORIENTATION( Qt::Horizontal ); + + mView->mSharedVideoWidget->setGeometry(QRectF(5,50, 100, 100)); + mView->mReceivedVideoWidget->setGeometry(QRectF(5,200, 200, 400)); + QList list; + + // Test1: Short tap Event toggle the full screen mode + mEngine->setFullScreenMode(true); + QPointF sharedVideoPos(10,60); + QTapGesture *tapGesture = new QTapGesture(); + tapGesture->setPosition(sharedVideoPos); + HbStubHelper::setGestureStyleHint(HbTapGesture::Tap); + HbStubHelper::setGestureState(Qt::GestureFinished); + list.append(tapGesture); + QGestureEvent event1(list); + mView->gestureEvent(&event1); + QVERIFY( !mEngine->fullScreenMode()); + list.clear(); + + // Test2: Long tap event does not affect full screen mode. + QTapGesture *tapGesture2 = new QTapGesture(); + QPointF receivedVideoPos(10,210); + tapGesture2->setPosition(receivedVideoPos); + HbStubHelper::setGestureState(Qt::GestureUpdated); + HbStubHelper::setGestureStyleHint(HbTapGesture::TapAndHold); + list.append(tapGesture2); + QGestureEvent event3(list); + mEngine->setFullScreenMode(true); + mView->gestureEvent(&event3); + // Ensure it does not affect full screen mode. + QVERIFY( mEngine->fullScreenMode()); + + //Test3: Not Handled States. + HbStubHelper::setGestureState(Qt::GestureStarted); + mEngine->setFullScreenMode(true); + mView->gestureEvent(&event3); + // Ensure its not handled everything remains same + QVERIFY( mEngine->fullScreenMode()); + list.clear(); + + //Test4: Not Handled Event + QSwipeGesture *swipeGesture = new QSwipeGesture(); + list.append(swipeGesture); + QGestureEvent event4(list); + mEngine->setFullScreenMode(true); + mView->gestureEvent(&event4); + // Ensure it does not affect full screen mode. + QVERIFY( mEngine->fullScreenMode()); +} + +void UT_LcView::testContextMenu() +{ + QVERIFY( !mView->mItemContextMenu ); + mView->createContextMenu(); + QVERIFY( mView->mItemContextMenu ); + QVERIFY( mView->mItemContextMenu->isEmpty() ); +} + +void UT_LcView::testGestureLongPress() +{ + QVERIFY( !mView->mItemContextMenu ); + QPointF coordsNoHit(10,10); + mView->gestureLongPress( coordsNoHit ); + QVERIFY( !mView->mItemContextMenu ); + + mView->init(); + HbTransparentWindow* sharedVideoWidget = mView->mSharedVideoWidget; + QVERIFY( sharedVideoWidget != NULL ); + mView->mSharedVideoWidget->setGeometry(QRectF(5,100, 200, 200)); + + QPointF coordsHitSharedVideo(20,150); + mView->gestureLongPress( coordsHitSharedVideo ); + QVERIFY( mView->mItemContextMenu ); + + delete mView->mItemContextMenu; + mView->mItemContextMenu = 0; + + QPointF coordsNoHit2(10,400); + mView->gestureLongPress( coordsNoHit2 ); + QVERIFY( !mView->mItemContextMenu ); + + HbTransparentWindow* receivedVideoWidget = mView->mReceivedVideoWidget; + QVERIFY( receivedVideoWidget != NULL ); + mView->mReceivedVideoWidget->setGeometry(QRectF(5,350, 200, 200)); + + QPointF coordsHitRecievedVideo(10,400); + mView->gestureLongPress( coordsHitRecievedVideo ); + QVERIFY( !mView->mItemContextMenu ); +} + + +void UT_LcView::testGestureShortPress() +{ + mView->init(); + mView->menu()->setVisible(false); + mView->mSharedVideoWidget->setGeometry(QRectF(5,50, 100, 100)); + mView->mReceivedVideoWidget->setGeometry(QRectF(5,200, 200, 400)); + + UT_SET_ORIENTATION( Qt::Horizontal ); + mEngine->setFullScreenMode(true); + mView->gestureShortPress(); + QVERIFY( !mEngine->fullScreenMode()); + + // toggled + mView->gestureShortPress(); + QVERIFY( mEngine->fullScreenMode()); +} + + +void UT_LcView::testTimerEvent() +{ + mView->init(); + // timer time out + QTimerEvent* event = new QTimerEvent( mView->timerId ); + mView->menu()->setVisible(false); + mView->timerEvent( event ); + QVERIFY( mEngine->fullScreenMode()); + QVERIFY( !HbStubHelper::isTitleBarVisible() ); + QVERIFY( !HbStubHelper::isStatusBarVisible() ); + QVERIFY( !mView->toolBar()->isVisible() ); + QVERIFY( !mView->mEndCallButton->isVisible()); + QVERIFY( !mView->mDuration->isVisible()); + QVERIFY( !mView->mRecipient->isVisible()); + delete event; + + // not a timer we want + mView->toFullScreen( false ); + event = new QTimerEvent( 22222 ); // some number + mView->timerEvent( event ); + QVERIFY( !mEngine->fullScreenMode() ); + QVERIFY( HbStubHelper::isTitleBarVisible() ); + QVERIFY( HbStubHelper::isStatusBarVisible() ); + QVERIFY( mView->toolBar()->isVisible() ); + QVERIFY( mView->mEndCallButton->isVisible()); + QVERIFY( mView->mDuration->isVisible()); + QVERIFY( mView->mRecipient->isVisible()); + delete event; +} + +void UT_LcView::testShareImage() +{ + QVERIFY( !lcutStub_LcUiEngine_isImageShared ); + mView->shareImage(); + //QVERIFY( lcutStub_LcUiEngine_isImageShared() ); +} + +void UT_LcView::testUpdateSwapLayout() +{ + mView->init(); + mView->menu()->setVisible(false); + mView->mEndCallButton = mEndCallButton; + UT_SET_ORIENTATION( Qt::Horizontal ); + mEngine->setFullScreenMode(true); + mView->updateSwapLayout(); + QVERIFY( mEngine->fullScreenMode()); + QVERIFY( !HbStubHelper::isTitleBarVisible() ); + QVERIFY( !HbStubHelper::isStatusBarVisible() ); + QVERIFY( !mView->isItemVisible(Hb::DockWidgetItem ) ); + QVERIFY( !mView->mEndCallButton->isVisible()); + QVERIFY( !mView->mDuration->isVisible()); + QVERIFY( !mView->mRecipient->isVisible()); +} + +void UT_LcView::testMenuAboutToShow() +{ + mView->init(); + mView->menu()->setVisible(false); + mView->toFullScreen( true ); + mView->menuAboutToShow(); + QVERIFY( !mEngine->fullScreenMode()); + QVERIFY( HbStubHelper::isTitleBarVisible() ); + QVERIFY( HbStubHelper::isStatusBarVisible() ); + QVERIFY( mView->toolBar()->isVisible() ); + QVERIFY( mView->mEndCallButton->isVisible()); + QVERIFY( mView->mDuration->isVisible()); + QVERIFY( mView->mRecipient->isVisible()); + int tId = mView->timerId; + mView->watchInactivity(); + QVERIFY( mView->timerId != tId ); + +} + +void UT_LcView::testTranslateRectForOrientation() +{ + UT_SET_ORIENTATION( Qt::Horizontal ); + QRectF origRect( 10, 10, 100, 200 ); + QRectF modRect = mView->translateRectForOrientation(origRect); + QVERIFY( modRect.height() == origRect.width() ); + QVERIFY( modRect.width() == origRect.height() ); +} + +void UT_LcView::testTranslatePointForOrientation() +{ + UT_SET_ORIENTATION( Qt::Horizontal ); + QPointF origPoint( 10, 20 ); + QPointF modPoint = mView->translatePointForOrientation(origPoint); + QVERIFY( origPoint != modPoint ); +} + +void UT_LcView::testOpenDialpad() +{ + delete mView; + mView = mRepository->twowayView(); + HbMainWindow& window = *(HbInstance::instance()->allMainWindows().at(0)); + QPointF pos = window.pos(); + window.setOrientation(Qt::Horizontal); + + // init + mView->mRepository.mLayoutSection = lcLayoutLandscapeDefaultId; + mView->menu()->setVisible(true); + + mView->openDialpad(); + + QVERIFY(mView->mDialpad->isOpen()); + QVERIFY(!mView->mDialpad->mIsCallButtonEnabled); + QVERIFY(mView->mRepository.mLayoutSection == lcLayoutLandscapeDialpadId); + QVERIFY( HbStubHelper::isTitleBarVisible() ); + QVERIFY( HbStubHelper::isStatusBarVisible() ); + QCOMPARE(mView->menu()->actions().size(), 0); + QVERIFY(!mView->mEngine.fullScreenMode()); +} + +void UT_LcView::testDialpadOpened() +{ + // no implementation +} + +void UT_LcView::testDialpadClosed() +{ + delete mView; + mView = mRepository->twowayView(); + + // test : no fullscreen,landscape , open and close dialpad scenario + HbMainWindow& window = *(HbInstance::instance()->allMainWindows().at(0)); + window.setOrientation( Qt::Horizontal ); + mView->openDialpad(); + + // Enter some dummy text + mView->mDialpad->editor().setText( QString("1") ); + mView->dialpadClosed(); + // Ensure text is cleared. + + QCOMPARE(mView->mDialpad->editor().text(), QString::fromAscii("")); + QVERIFY(!mView->mDialpad->editor().text().length()); + + // check that layout has changed + QVERIFY(mView->mRepository.layout()!= lcLayoutLandscapeDialpadId); + QVERIFY( HbStubHelper::isTitleBarVisible() ); + QVERIFY( HbStubHelper::isStatusBarVisible() ); + QVERIFY(mView->toolBar()->isVisible()); + QVERIFY(mView->mEndCallButton->isVisible()); + QVERIFY(mView->mRecipient->isVisible()); + QVERIFY(mView->mDuration->isVisible()); + QVERIFY(mView->menu()->isVisible()); + QVERIFY(!mView->mEngine.fullScreenMode()); + + // test : swapped,fullscreen,landscape,open and close dialpad scenario + mView->mRepository.loadLayout( lcLayoutLandscapeSwappedId ); + mView->openDialpad(); + mView->dialpadClosed(); + // check for swapped view appears + QVERIFY( mView->mRepository.layout()== lcLayoutLandscapeSwappedId ); + // check titlebar invisible + QVERIFY( HbStubHelper::isTitleBarVisible() ); + QVERIFY( HbStubHelper::isStatusBarVisible() ); + // check toolbar invisible + QVERIFY( mView->toolBar()->isVisible() ); + QVERIFY(!mView->mEngine.fullScreenMode()); + +} + + +void UT_LcView::testDialpadEditorTextChanged() +{ + delete mView; + mView = mRepository->twowayView(); + + mView->openDialpad(); + //text editor is one character long + QVERIFY( lcutStub_LcUiEngine_getDialToneChar() == '0'); + mView->mDialpad->editor().setText( QString("1") ); + mView->dialpadEditorTextChanged(); + QVERIFY( lcutStub_LcUiEngine_getDialToneChar() == '1' ); + + // We transmit dial tone character sepretly. + mView->mDialpad->editor().setText( QString("12345") ); + mView->dialpadEditorTextChanged(); + QVERIFY( lcutStub_LcUiEngine_getDialToneChar() == '5' ); +} + +void UT_LcView::testBack() +{ + delete mView; + mView = mRepository->twowayView(); + mView->openDialpad(); + mView->back(); + QVERIFY( !mView->mDialpad->isOpen() ); +} + +void UT_LcView::testAddOptionsMenuActions() +{ + delete mView; + mView = mRepository->twowayView(); + + mView->addOptionsMenuActions(); + //TODO: stub implementation of void QGraphicsWidget::addAction(QAction *action); + //QCOMPARE(mView->menu()->actions().size(), 2); +} + +void UT_LcView::testWatchInactivity() +{ + mView->init(); + + // test : in fullscreen mode already, dont start timer again + int tid = mView->timerId ; + mView->mEngine.setFullScreenMode( true ); + mView->watchInactivity(); + QVERIFY( tid==mView->timerId ); + + // test : not in full screen but dialpad view. dont start timer + mView->mEngine.setFullScreenMode( false ); + QVERIFY( mView->mDialpad ); + mView->openDialpad(); + mView->watchInactivity(); + QVERIFY( tid==mView->timerId ); + + // test : not in full screen and no dialpad , start timer + mView->mEngine.setFullScreenMode( false ); + QVERIFY( mView->mDialpad ); + mView->mDialpad->closeDialpad(); + mView->watchInactivity(); + QVERIFY( tid!=mView->timerId ); + +} + + + +void UT_LcView::testIsVideoPositionedCorrectly() +{ + //Test1: Null video Widget returns true + mRepository->mReturnSendVideo = false; + mView->init(); + QVERIFY( !mView->mSharedVideoWidget ); + QVERIFY(mView->isVideoPositionedCorrectly(mView->mSharedVideoWidget)); + + //Test2: Valid Video widgets with correct position returns true: + mRepository->mReturnSendVideo = true; + mView->init(); + QVERIFY( mView->mSharedVideoWidget ); + QVERIFY( mView->isVideoPositionedCorrectly(mView->mSharedVideoWidget )); + + //Test3: Vaild video widgets withi co-ordinates returns false. + mView->mSharedVideoWidget->setPos(QPointF(0,0)); + QVERIFY( mView->mSharedVideoWidget ); + QVERIFY( !mView->isVideoPositionedCorrectly(mView->mSharedVideoWidget )); +} + + +void UT_LcView::testIsPositioned() +{ + //Test: isViewReady is true and proper co-ordinates + mRepository->mReturnSendVideo = true; + mView->init(); + QVERIFY( !mView->isViewReady ); + QVERIFY( mView->mSharedVideoWidget ); + QVERIFY( mView->isVideoPositionedCorrectly(mView->mSharedVideoWidget )); + mView->isPositioned(); + QVERIFY( mView->isViewReady ); + + //Test: isViewReady is false and its first time and co ordinates are 0,0 + mView->isViewReady = false; + mView->mSharedVideoWidget->setPos(QPointF(0,0)); + QVERIFY( mView->mSharedVideoWidget ); + QVERIFY( !mView->isVideoPositionedCorrectly(mView->mSharedVideoWidget )); + mView->isPositioned(); + QVERIFY( !mView->isViewReady ); +} diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/ut_lcui/src/ut_lcviewmanager.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/ut_lcui/src/ut_lcviewmanager.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,195 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + +#include +#include +#include +#include +#include +#include "ut_lcviewmanager.h" +#include "lcviewmanager.h" +#include "lcviewmanager_p.h" +#include "ut_lcuidefs.h" +#include "lcuiengine.h" +#include "lcuidefs.h" + +// Simulate completion of queued view change +#define LC_VIEW_CHANGE_COMPLETE( startup ) \ +mViewManager->activateCurrentView( startup ); + +void UT_LcUiViewManager::initTestCase() +{ + lcutStub_LcUiEngine_reset(); + +} + +void UT_LcUiViewManager::cleanupTestCase() +{ + lcutStub_LcUiEngine_reset(); + +} + +void UT_LcUiViewManager::init() +{ + lcutStub_LcUiEngine_reset(); + + mViewManagerDecorator = new LcViewManager( lcEngineName, lcDisplayName ); + mViewManager = mViewManagerDecorator->d_ptr; +} + +void UT_LcUiViewManager::cleanup() +{ + lcutStub_LcUiEngine_reset(); + delete mViewManagerDecorator; +} + +void UT_LcUiViewManager::testConstructor() +{ + QVERIFY( mViewManager ); + QVERIFY( mViewManager->mRepository ); + QVERIFY( mViewManager->mEngine ); + QVERIFY( mViewManager->mMainWindow.viewCount() == 1 ); + QVERIFY( lcutStub_LcUiEngine_expectCall( lcutNoCall ) ); + +} + +void UT_LcUiViewManager::testChangeView() +{ + QVERIFY( mViewManager ); + QVERIFY( mViewManager->mMainWindow.viewCount() == 1 ); + + mViewManager->changeView(); + LC_VIEW_CHANGE_COMPLETE( false ) + QVERIFY( mViewManager->mMainWindow.viewCount() == 1 ); + QVERIFY( mViewManager->mMainWindow.currentView()->objectName() == lcViewIdleId ); + + QVERIFY( lcutStub_LcUiEngine_expectCall( lcutStub_LcUiEngine_updateSession, 0 ) ); + QVERIFY( lcutStub_LcUiEngine_expectCall( lcutStub_LcUiEngine_setOrientation, 1 ) ); + QVERIFY( lcutStub_LcUiEngine_expectCall( lcutStub_LcUiEngine_setContentAreas, 2 ) ); + lcutStub_LcUiEngine_reset(); + + LC_VIEW_CHANGE_COMPLETE( true ) + QVERIFY( mViewManager->mMainWindow.viewCount() == 1 ); + QVERIFY( lcutStub_LcUiEngine_expectCall( lcutStub_LcUiEngine_start ) ); + lcutStub_LcUiEngine_reset(); + + lcutStub_LcUiEngine_setLayout( Lc_ReceivedViewLayout ); + mViewManager->changeView(); + LC_VIEW_CHANGE_COMPLETE( false ) + QVERIFY( mViewManager->mMainWindow.viewCount() == 2 ); + QVERIFY( mViewManager->mMainWindow.currentView()->objectName() == lcViewReceiveId ); + QVERIFY( lcutStub_LcUiEngine_expectCall( lcutStub_LcUiEngine_updateSession, 0 ) ); + QVERIFY( lcutStub_LcUiEngine_expectCall( lcutStub_LcUiEngine_setOrientation, 1 ) ); + QVERIFY( lcutStub_LcUiEngine_expectCall( lcutStub_LcUiEngine_setContentAreas, 2 ) ); + lcutStub_LcUiEngine_reset(); + + lcutStub_LcUiEngine_setLayout( Lc_SharedViewLayout ); + mViewManager->changeView(); + LC_VIEW_CHANGE_COMPLETE( false ) + QVERIFY( mViewManager->mMainWindow.viewCount() == 3 ); + QVERIFY( mViewManager->mMainWindow.currentView()->objectName() == lcViewSendId ); + QVERIFY( lcutStub_LcUiEngine_expectCall( lcutStub_LcUiEngine_updateSession, 0 ) ); + QVERIFY( lcutStub_LcUiEngine_expectCall( lcutStub_LcUiEngine_setOrientation, 1 ) ); + QVERIFY( lcutStub_LcUiEngine_expectCall( lcutStub_LcUiEngine_setContentAreas, 2 ) ); + lcutStub_LcUiEngine_reset(); + + lcutStub_LcUiEngine_setLayout( Lc_TwowayViewLayout ); + mViewManager->changeView(); + QVERIFY( mViewManager->mMainWindow.viewCount() == 4 ); + QVERIFY( mViewManager->mMainWindow.currentView()->objectName() == lcViewTwowayId ); + QVERIFY( lcutStub_LcUiEngine_expectCall( lcutStub_LcUiEngine_setContentAreas ) ); + lcutStub_LcUiEngine_reset(); + + lcutStub_LcUiEngine_setLayout( Lc_ReceivedOnlyViewLayout ); + mViewManager->changeView(); + QVERIFY( mViewManager->mMainWindow.viewCount() == 5 ); + QVERIFY( mViewManager->mMainWindow.currentView()->objectName() == lcViewReceiveOnlyId ); + QVERIFY( lcutStub_LcUiEngine_expectCall( lcutStub_LcUiEngine_setContentAreas ) ); + lcutStub_LcUiEngine_reset(); + + lcutStub_LcUiEngine_setLayout( Lc_AllInOneViewLayout ); + mViewManager->changeView(); + LC_VIEW_CHANGE_COMPLETE( false ) + QVERIFY( mViewManager->mMainWindow.viewCount() == 6 ); + QVERIFY( mViewManager->mMainWindow.currentView()->objectName() == lcViewAllInOneId ); + QVERIFY( lcutStub_LcUiEngine_expectCall( lcutStub_LcUiEngine_updateSession, 0 ) ); + QVERIFY( lcutStub_LcUiEngine_expectCall( lcutStub_LcUiEngine_setOrientation, 1 ) ); + QVERIFY( lcutStub_LcUiEngine_expectCall( lcutStub_LcUiEngine_setContentAreas, 2 ) ); + lcutStub_LcUiEngine_reset(); + + lcutStub_LcUiEngine_setLayout( (LcViewLayoutHint)777 ); + mViewManager->changeView(); + LC_VIEW_CHANGE_COMPLETE( false ) + QVERIFY( mViewManager->mMainWindow.viewCount() == 6 ); + QVERIFY( mViewManager->mMainWindow.currentView()->objectName() == lcViewIdleId ); + QVERIFY( lcutStub_LcUiEngine_expectCall( lcutStub_LcUiEngine_updateSession, 0 ) ); + QVERIFY( lcutStub_LcUiEngine_expectCall( lcutStub_LcUiEngine_setOrientation, 1 ) ); + QVERIFY( lcutStub_LcUiEngine_expectCall( lcutStub_LcUiEngine_setContentAreas, 2 ) ); + lcutStub_LcUiEngine_reset(); + +} + +void UT_LcUiViewManager::testTerminateSession() +{ + QVERIFY( lcutStub_LcUiEngine_expectCall( lcutNoCall ) ); + mViewManager->terminateSession(); + QVERIFY( lcutStub_LcUiEngine_expectCall( lcutStub_LcUiEngine_stop ) ); + + + lcutStub_LcUiEngine_reset(); + QVERIFY( lcutStub_LcUiEngine_expectCall( lcutNoCall ) ); + mViewManagerDecorator->terminateSession(); + QVERIFY( lcutStub_LcUiEngine_expectCall( lcutStub_LcUiEngine_stop ) ); +} + +void UT_LcUiViewManager::testPrepareOrientationChange() +{ + mViewManager->prepareOrientationChange(); +} + +void UT_LcUiViewManager::testMainWindowEvent() +{ + QSignalSpy spy( &mViewManager->mMainWindow, SIGNAL(appFocusGained()) ); + // Not interesting event + QEvent event(QEvent::MaxUser); + mViewManager->mMainWindow.eventFilter(0, &event); + QVERIFY( spy.count() == 0 ); + + // Focus in event + QEvent event2(QEvent::ApplicationActivate); + mViewManager->mMainWindow.eventFilter(0, &event2); + QVERIFY( spy.count() == 1 ); + + // test: Complete focus lost + QSignalSpy spy2( &mViewManager->mMainWindow, SIGNAL(appFocusLost()) ); + // Focus in event + QEvent event3(QEvent::ApplicationDeactivate); + mViewManager->mMainWindow.mSurface = 0; + mViewManager->mMainWindow.eventFilter(0, &event3); + QVERIFY( spy2.count() == 1 ); + + // test: partial focus lost i.e. in case of golbal popup. + QSignalSpy spy3( &mViewManager->mMainWindow, SIGNAL(appFocusLost()) ); + // Partial focus in event i.e. Global popup + QEvent event4(QEvent::ApplicationDeactivate); + QWindowSurface surf; + mViewManager->mMainWindow.mSurface = &surf; + mViewManager->mMainWindow.eventFilter(0, &event4); + QVERIFY( spy3.count() == 0 ); +} + +// end of file diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcui/tsrc/ut_lcui/ut_lcui.pro --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcui/tsrc/ut_lcui/ut_lcui.pro Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,101 @@ +# +# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +# All rights reserved. +# This component and the accompanying materials are made available +# under the terms of "Eclipse Public License v1.0" +# which accompanies this distribution, and is available +# at the URL "http://www.eclipse.org/legal/epl-v10.html". +# +# Initial Contributors: +# Nokia Corporation - initial contribution. +# +# Contributors: +# +# Description: +# +# + +TEMPLATE = app +TARGET = + +QT += testlib xml +CONFIG += hb qtestlib dll + +MUS_DIR = ../../../../.. +LCUI_DIR = ../.. +LCUIENGINE_DIR = ../../../lcuiengine + +RESOURCES += $$LCUI_DIR/livecommsui.qrc + +DEFINES += UNIT_TESTING +DEFINES += QT_NO_DEBUG_OUTPUT + +DEPENDPATH += . +INCLUDEPATH = hbstubs $$INCLUDEPATH +INCLUDEPATH += . +INCLUDEPATH += $$LCUI_DIR/inc +INCLUDEPATH += $$MUS_DIR/tsrc/qtestutils/inc +INCLUDEPATH += $$MUS_DIR/mmsharinguis_plat/live_comms_plugin_api/inc +INCLUDEPATH += /epoc32/include/ecom +INCLUDEPATH += /epoc32/include/platform/app + +# Input +HEADERS += inc/ut_lcviewmanager.h +HEADERS += $$LCUI_DIR/inc/lcviewmanager.h +HEADERS += $$LCUI_DIR/inc/lcviewmanager_p.h +HEADERS += inc/ut_lcuicomponentrepository.h +HEADERS += $$LCUI_DIR/inc/lcuicomponentrepository.h +HEADERS += inc/ut_lcview.h +HEADERS += $$LCUI_DIR/inc/lcview.h +HEADERS += inc/ut_lceffecthandler.h +HEADERS += $$LCUI_DIR/inc/lceffecthandler.h +HEADERS += inc/ut_lcvideowidget.h +HEADERS += $$LCUI_DIR/inc/lcvideowidget.h +HEADERS += $$LCUIENGINE_DIR/inc/lcuiengine.h +HEADERS += ./hbstubs/dialpad.h +HEADERS += ./hbstubs/dialpadvtkeyhandler.h +HEADERS += ./hbstubs/hblineedit.h + +SOURCES += src/main.cpp +SOURCES += hbstubs/hbstubs.cpp +SOURCES += hbstubs/dialpad_stub.cpp +SOURCES += hbstubs/dialpadvtkeyhandler_stub.cpp +SOURCES += src/ut_lcviewmanager.cpp +SOURCES += $$LCUI_DIR/src/lcviewmanager.cpp +SOURCES += $$LCUI_DIR/src/lcviewmanager_p.cpp +SOURCES += src/ut_lcuicomponentrepository.cpp +SOURCES += $$LCUI_DIR/src/lcuicomponentrepository.cpp +SOURCES += src/ut_lcview.cpp +SOURCES += $$LCUI_DIR/src/lcview.cpp +SOURCES += src/ut_lceffecthandler.cpp +SOURCES += $$LCUI_DIR/src/lceffecthandler.cpp +SOURCES += src/ut_lcvideowidget.cpp +SOURCES += $$LCUI_DIR/src/lcvideowidget.cpp +SOURCES += $$LCUIENGINE_DIR/src/lcuiengine.cpp +SOURCES += $$MUS_DIR/tsrc/qtestutils/src/testresultxmlparser.cpp + + +symbian: { + DEFINES += BUILD_SYMBIAN + + INCLUDEPATH += $$LCUIENGINE_DIR/inc + + SOURCES += lcuiengine_stub/symbian/stub_lcuiengine_p.cpp + HEADERS += $$LCUIENGINE_DIR/inc/lcuiengine_p.h + + LIBS += -lecom -lflogger -lws32 -lbafl + + TARGET.CAPABILITY = ALL -TCB + TARGET.EPOCALLOWDLLDATA = 1 + TARGET.EPOCHEAPSIZE = 0x020000 0x800000 +} + +win32: { + INCLUDEPATH += $$LCUI_DIR/mmshlcuiengine/win32 + INCLUDEPATH += inc + INCLUDEPATH += $$LCUIENGINE_DIR/tsrc/win32 + INCLUDEPATH += $$LCUIENGINE_DIR/inc + + SOURCES += lcuiengine_stub/win32/stub_lcuiengine_p.cpp + HEADERS += $$LCUIENGINE_DIR/tsrc/win32/lcuiengine_p.h +} diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcuiengine/inc/lcactivitymanager.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcuiengine/inc/lcactivitymanager.h Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,69 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + +#ifndef LCACTIVITYMANAGER_H +#define LCACTIVITYMANAGER_H + +// INCLUDES +#include + +// FORWARD DECLARATION + +// CLASS DECLARATION + +/** + * + */ +class LcActivityManager : public QObject +{ + friend class UT_LcActivityManager; + Q_OBJECT + +public: + + explicit LcActivityManager(); + ~LcActivityManager(); + +public slots: + + void enableActivitySimulation(bool enable); + +public: + + bool isActivitySimulationEnabled(); + + +private: + + int initInactivityTimeout(); + void stopTimer(); + void restartTimer(); + + //from QObject + void timerEvent(QTimerEvent *event); + +private: + + int mTimerId; + int mInactivityTimeout; + +}; + +#endif // LCACTIVITYMANAGER_H + + +// End of File diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcuiengine/inc/lcuiengine.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcuiengine/inc/lcuiengine.h Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,182 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ +#ifndef LCUIENGINE_H +#define LCUIENGINE_H + +//USER + +//SYSTEM +#include +#include +#include + +class QTimer; +class HbProgressDialog; +class HbDialog; +class QRectF; +class LcUiEnginePrivate; +class HbView; + +const char lcEngSignalNameMuted[] = "muted"; +const char lcEngSignalNameUnmuted[] = "unmuted"; +const char lcEngSignalNameSpeakerEnabled[] = "speakerEnabled"; +const char lcEngSignalNameSpeakerDisabled[] = "speakerDisabled"; +const char lcEngSignalNameCameraChangedToMain[] = "cameraChangedToMain"; +const char lcEngSignalNameCameraChangedToSecondary[] = "cameraChangedToSecondary"; +const char lcEngSignalNameCameraEnabled[] = "cameraEnabled"; +const char lcEngSignalNameCameraDisabled[] = "cameraDisabled"; + + +/* + * Supported views + */ +enum LcViewLayoutHint { + Lc_NoViewLayout = -1, + Lc_IdleViewLayout, + Lc_SharedViewLayout, + Lc_ReceivedViewLayout, + Lc_ReceivedOnlyViewLayout, + Lc_TwowayViewLayout, + Lc_AllInOneViewLayout +}; + + +/* + * Struct of values for control + */ +class LcControlValues { +public: + int mMaxValue; + int mMinValue; + int mValue; +}; + +/* + * Live Comms UI Engine + */ +class LcUiEngine : public QObject +{ + Q_OBJECT + friend class UT_LcUiEngine; + +public: + //constructor + explicit LcUiEngine(const QString &engineName, + const QString &applicationDisplayName); + //destructor + ~LcUiEngine(); + +signals: + + //signaled when engine is stopped + void stopped(); + //signaled when layout is changed + void layoutChanged(); + //signaled when camera changes to main + void cameraChangedToMain(); + //signaled when camera changes to secondary + void cameraChangedToSecondary(); + //signaled when mic is muted + void muted(); + //signaled when mic is unmuted + void unmuted(); + //signaled when speaker is enabled + void speakerEnabled(); + //signaled when speaker is disabled + void speakerDisabled(); + //signaled when camera is disabled + void cameraDisabled(); + //signaled when camera is enabled + void cameraEnabled(); + //signaled when engine is blocked, + //no calls expected until signaled unblocked + void blocked(); + //signaled when engine is free + void unblocked(); + //signaled continuously while session is up and running + //carries current session duration + void sessionDurationChanged(const QString &duration); + void recipientChanged(const QString &recipient); + void phoneNumberChanged(const QString &number); + //signaled when player state changed + void localPlayerPlaying(); + void remotePlayerPlaying(); + void localPlayerPreparing(); + void remotePlayerPreparing(); + void localPlayerBuffering(); + void remotePlayerBuffering(); + void localPlayerPaused(); + void remotePlayerPaused(); + void localPlayerUnavailable(); + void remotePlayerUnavailable(); + void volumeChanged(int aVolumeLevel); + + +public slots: + + void zoom( int value ); + void stop(); + void minimize(); + void maximize(); + +public: // API + + void start(); + const QString& sessionTitle() const; + const QString& recipient() const; + const QString& phoneNumber() const; + LcViewLayoutHint viewLayout() const; + void setContentAreas(const QRectF& sharedContent, + const QRectF& receivedContent); + bool setOrientation(Qt::Orientation orientation); + void setUiComponents(HbProgressDialog* invitingNote, + HbProgressDialog* waitingNote, + HbDialog* acceptQuery, + HbDialog* recipientQuery, + HbDialog* shareOwnVideoQuery); + void toggleMute(); + bool isMuted() const; + void toggleSpeaker(); + bool isSpeakerOn() const; + int zoomValues(LcControlValues& values) const; + void toggleDisableCamera(); + void setMainCamera(const bool aMainCamera); + bool mainCamera() const; + void toggleCamera(); + bool fullScreenMode(); + void setFullScreenMode(bool aMode); + void updateSession(); + bool isLocalPlayerPlaying() const; + bool isRemotePlayerPlaying() const; + bool isMinimized()const; + bool isMaximized()const{return !isMinimized();}; + void shareImage(const QString&); + void shareCamera(); + void setCurrentView(HbView* view); + bool SendDialTone( const QChar aKey ); + +private: + + LcUiEnginePrivate* d; + +friend class LcUiEnginePrivate; // access to signals +}; + +#endif // LCUIENGINE_H + + +// End of file diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcuiengine/inc/lcuiengine_p.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcuiengine/inc/lcuiengine_p.h Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,215 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ +#ifndef LCUIENGINEPRIVATE_H +#define LCUIENGINEPRIVATE_H + +//USER +#include "lcsessionobserver.h" +#include "lcuiprovider.h" + +//SYSTEM +#include +#include +#include +#include +#include +#include +#include +#include + + +class MLcSession; +class MLcAudioControl; +class MLcZoomControl; +class HbDialog; +class HbMessageBox; +class QTimer; +class QRectF; +class LcUiEngine; +class HbView; +class LcActivityManager; + +/* + * Live Comms UI Engine + */ +class LcUiEnginePrivate : public QObject, + public MLcSessionObserver, + public MLcUiProvider +{ + Q_OBJECT + friend class UT_LcUiEngine; + +public: + + explicit LcUiEnginePrivate(LcUiEngine& uiEngine, + const QString &engineName, + const QString &applicationDisplayName); + ~LcUiEnginePrivate(); + +public slots: + + void zoom( int value ); + void stop(); + void stopLocalVideo(); + void startLocalVideo(); + +public: // API + + void start(); + const QString& sessionTitle() const; + const QString& recipient() const; + const QString& phoneNumber() const; + LcViewLayoutHint viewLayout() const; + void setContentAreas(const QRectF& sharedContent, + const QRectF& receivedContent); + bool setOrientation(Qt::Orientation orientation ); + void setUiComponents(HbProgressDialog* invitingNote, + HbProgressDialog* waitingNote, + HbDialog* acceptQuery, + HbDialog* recipientQuery, + HbDialog* shareOwnVideoQuery ); + void toggleMute(); + bool isMuted() const; + void toggleSpeaker(); + bool isSpeakerOn() const; + int zoomValues( LcControlValues& values ) const; + void toggleDisableCamera(); + void setMainCamera(const bool aMainCamera); + bool mainCamera() const; + void toggleCamera(); + bool fullScreenMode(); + void setFullScreenMode(bool aMode); + void updateSession(); + bool isLocalPlayerPlaying() const; + bool isRemotePlayerPlaying() const; + bool isMinimized()const; + void minimize(); + void maximize(); + void shareImage(const QString&){}; + void shareCamera(){}; + void setCurrentView(HbView* view); + bool SendDialTone(const QChar aKey ); + +protected: // From QObject + + void timerEvent(QTimerEvent *event); + +private slots: + + void startReceiving(); + void stopForcefully(); + void handleEngineForegroundStatus(); + void volumeLevelChanged(const XQSettingsKey& aKey, const QVariant& aValue); + +private: // From MLcSessionObserver + + void StateChanged( MLcSession& aSession ); + void StateChanged( MLcVideoPlayer& aPlayer ); + void Updated( MLcSession& aSession ); + void Updated( MLcVideoPlayer& aPlayer ); + void Failed( MLcSession& aSession, TInt aError ); + void Failed( MLcVideoPlayer& aPlayer, TInt aError ); + void SessionTimeChanged( MLcSession& aSession, const TTimeIntervalSeconds& aSeconds ); + +private: // From MLcUiProvider + + TBool SelectRecipient( MDesCArray& aRecipientAddresses, TDes& aSelectedRecipientAddress ); + TBool InputRecipient( TDes& aRecipientAddress ); + void HandleForegroundStatus( TBool aForeground ); + void BlockUi( TBool aBlocked ); + +private: // New functions + + LcViewLayoutHint setViewLayout(); + void emitViewLayoutChanged(); + void startLiveContent(); + void startPlayback(); + void startRemoteVideo(); + void startCloseTimer(); + void cancelCloseTimer(); + void hideNotes( bool hideWaitingNote ); + void completeAction( const char* actionMethod ); + void setPendingAction( const char* actionMethod ); + void completePendingAction(); + bool usingVideoTelephoneEngine(); + MLcSession& session() const; + MLcVideoPlayer* visibleLocalPlayer() const; + MLcVideoPlayer* visibleRemotePlayer() const; + MLcAudioControl* audioControl() const; + MLcZoomControl* zoomControl() const; + bool featureSupported( CLcEngine::TLcFeature feature ); + void startSessionDurationTimer(); + void stopSessionDurationTimer(); + void fillRemoteInfo(bool informChanges); + void startStopGuardTimer(); + void showSendVideoQueryWhenNecessary(); + + void subscribeVolumeEvents(); + void unSubscribeVolumeEvents(); + void doUpdate( MLcVideoPlayer& aPlayer ); + void doUpdate( MLcSession& aSession ); + +private: // New functions wrapping the leaving functions in LC plug-in API + + int establishSession(); + int terminateSession(); + int setWindowRect( MLcVideoPlayer* player, TRect rect ); + int enableWindow( MLcVideoPlayer* player, bool enable ); + int play( MLcVideoPlayer* player ); + int pause( MLcVideoPlayer* player ); + int enableSpeaker( bool enable ); + int muteMic( bool mute ); + +private: // Data + + QByteArray mEngineName; + QString mSessionTitle; + QString mRecipient; + QString mPhoneNumber; + LcViewLayoutHint mViewLayout; + CLcEngine* mLiveCommsEngine; + QTimer* mCloseTimer; + HbProgressDialog* mInvitingNote; // Not owned + HbProgressDialog* mWaitingNote; // Not owned + HbDialog* mAcceptQuery; // Not owned + HbDialog* mRecipientQuery; // Not owned + HbDialog* mShareOwnVideoQuery; // Not Owned + QString mPendingAction; + bool mBlocked; + bool mFullScreen; + int mSessionDurationTimerId; + QTime mSessionDurationStartTime; + bool mMainCamera; + LcUiEngine& mUiEngine; + bool mIsMinimized; + bool mFirstForegroundSwitch; + HbView* mCurrentView; // Not owned + TRect mLocalRect; + TRect mRemoteRect; + LcActivityManager* mActivityManager; + + XQSettingsManager* mSettingsMgr; + XQSettingsKey* mEarVolumeKey; + XQSettingsKey* mLoudSpeakerKey; + +friend class LcUiEngine; +}; + +#endif // LCUIENGINEPRIVATE_H + + +// End of file diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcuiengine/src/lcactivitymanager.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcuiengine/src/lcactivitymanager.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,138 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + +// INCLUDES +#include +#include +#include +#include +#include "lcactivitymanager.h" +#include "lclogger.h" + + +const int lcDefaultInactivityTimeout = 5; //timeout in seconds, used if fetching + //value from cenrep fails +const int lcInvalidTimerId = -1; + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +LcActivityManager::LcActivityManager() : + mTimerId(lcInvalidTimerId) +{ + if (initInactivityTimeout() != 0) { + mInactivityTimeout = lcDefaultInactivityTimeout; + } +} + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +LcActivityManager::~LcActivityManager() +{ + stopTimer(); +} + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void LcActivityManager::enableActivitySimulation(bool enable) +{ + if (enable) { + restartTimer(); + } else { + stopTimer(); + } +} + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +bool LcActivityManager::isActivitySimulationEnabled() +{ + return (mTimerId != lcInvalidTimerId); +} + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +int LcActivityManager::initInactivityTimeout() +{ + CRepository* repository = 0; + TRAPD(err, repository = CRepository::NewL(KCRUidLightSettings)); + if (err == KErrNone) { + // Let's fetching display light timeout value (in seconds ) + TInt displayTimeOut(0); + err = repository->Get(KDisplayLightsTimeout, displayTimeOut); + if (displayTimeOut > 2) { + //taking away 2 seconds just in case, to ensure we keep + //simulating user activity frequently enough + displayTimeOut -= 2; + } + mInactivityTimeout = displayTimeOut; + } + delete repository; + return err; +} + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void LcActivityManager::stopTimer() +{ + if (mTimerId != lcInvalidTimerId) { + killTimer(mTimerId); + mTimerId = lcInvalidTimerId; + } +} + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void LcActivityManager::restartTimer() +{ + stopTimer(); + + int timeLeftInSeconds = mInactivityTimeout - User::InactivityTime().Int(); + if ( timeLeftInSeconds < 1 ) { + User::ResetInactivityTime(); + timeLeftInSeconds = mInactivityTimeout; + } + + LC_QDEBUG_2( "livecomms [UI] -> LcActivityManager::startTimer(), interval: ", timeLeftInSeconds); + + mTimerId = startTimer(timeLeftInSeconds*1000); +} + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void LcActivityManager::timerEvent(QTimerEvent* event) +{ + if (event->timerId() == mTimerId) { + LC_QDEBUG( "livecomms [UI] -> LcActivityManager::timerEvent()" ); + restartTimer(); + } +} diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcuiengine/src/lcuiengine.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcuiengine/src/lcuiengine.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,382 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + +//USER +#include "lcuiengine_p.h" +#include "lcuiengine.h" +#include "lclogger.h" + + +// ----------------------------------------------------------------------------- +// LcUiEngine::LcUiEngine +// ----------------------------------------------------------------------------- +// +LcUiEngine::LcUiEngine( const QString& engineName, + const QString& applicationDisplayName ) +{ + LC_QDEBUG( "livecomms [UI] -> LcUiEngine::LcUiEngine()" ) + d = new LcUiEnginePrivate( *this,engineName,applicationDisplayName ); + LC_QDEBUG( "livecomms [UI] <- LcUiEngine::LcUiEngine()" ) +} + +// ----------------------------------------------------------------------------- +// LcUiEngine::~LcUiEngine +// ----------------------------------------------------------------------------- +// +LcUiEngine::~LcUiEngine() +{ + LC_QDEBUG( "livecomms [UI] -> LcUiEngine::~LcUiEngine()" ) + delete d; + LC_QDEBUG( "livecomms [UI] <- LcUiEngine::~LcUiEngine()" ) +} + +// ----------------------------------------------------------------------------- +// LcUiEngine::zoom +// ----------------------------------------------------------------------------- +// +void LcUiEngine::zoom( int value ) +{ + LC_QDEBUG( "livecomms [UI] -> LcUiEngine::zoom()" ) + d->zoom(value); + LC_QDEBUG( "livecomms [UI] <- LcUiEngine::zoom()" ) +} + +// ----------------------------------------------------------------------------- +// LcUiEngine::stop +// ----------------------------------------------------------------------------- +// +void LcUiEngine::stop() +{ + LC_QDEBUG( "livecomms [UI] -> LcUiEngine::stop()" ) + d->stop(); + LC_QDEBUG( "livecomms [UI] <- LcUiEngine::stop()" ) +} + +// ----------------------------------------------------------------------------- +// LcUiEngine::start +// ----------------------------------------------------------------------------- +// +void LcUiEngine::start() +{ + LC_QDEBUG( "livecomms [UI] -> LcUiEngine::start()" ) + d->start(); + LC_QDEBUG( "livecomms [UI] <- LcUiEngine::start()" ) +} + +// ----------------------------------------------------------------------------- +// LcUiEngine::sessionTitle +// ----------------------------------------------------------------------------- +// +const QString& LcUiEngine::sessionTitle() const +{ + LC_QDEBUG( "livecomms [UI] <-> LcUiEngine::sessionTitle()" ) + return d->sessionTitle(); +} + +// ----------------------------------------------------------------------------- +// LcUiEngine::recipient +// ----------------------------------------------------------------------------- +// +const QString& LcUiEngine::recipient() const +{ + LC_QDEBUG( "livecomms [UI] <-> LcUiEngine::recipient()" ) + return d->recipient(); +} + +// ----------------------------------------------------------------------------- +// LcUiEngine::phoneNumber +// ----------------------------------------------------------------------------- +// +const QString& LcUiEngine::phoneNumber() const +{ + LC_QDEBUG( "livecomms [UI] <-> LcUiEngine::phoneNumber()" ) + return d->phoneNumber(); +} + +// ----------------------------------------------------------------------------- +// LcUiEngine::viewLayout +// ----------------------------------------------------------------------------- +// +LcViewLayoutHint LcUiEngine::viewLayout() const +{ + LC_QDEBUG( "livecomms [UI] <-> LcUiEngine::viewLayout()" ) + return d->viewLayout(); +} + +// ----------------------------------------------------------------------------- +// LcUiEngine::setContentAreas +// ----------------------------------------------------------------------------- +// +void LcUiEngine::setContentAreas( const QRectF& sharedContent, + const QRectF& receivedContent ) +{ + LC_QDEBUG( "livecomms [UI] -> LcUiEngine::setContentAreas()" ) + d->setContentAreas( sharedContent,receivedContent ); + LC_QDEBUG( "livecomms [UI] <- LcUiEngine::setContentAreas()" ) +} + +// ----------------------------------------------------------------------------- +// LcUiEngine::setOrientation +// ----------------------------------------------------------------------------- +// +bool LcUiEngine::setOrientation( Qt::Orientation orientation ) +{ + LC_QDEBUG( "livecomms [UI] -> LcUiEngine::setOrientation()" ) + bool ret = d->setOrientation( orientation ); + LC_QDEBUG( "livecomms [UI] <- LcUiEngine::setOrientation()" ) + return ret; +} + +// ----------------------------------------------------------------------------- +// LcUiEngine::setUiComponents +// ----------------------------------------------------------------------------- +// +void LcUiEngine::setUiComponents( HbProgressDialog* invitingNote, + HbProgressDialog* waitingNote, + HbDialog* acceptQuery, + HbDialog* recipientQuery, + HbDialog* shareOwnVideoQuery ) +{ + LC_QDEBUG( "livecomms [UI] -> LcUiEngine::setUiComponents()" ) + d->setUiComponents( invitingNote,waitingNote,acceptQuery,recipientQuery, + shareOwnVideoQuery ); + LC_QDEBUG( "livecomms [UI] <- LcUiEngine::setUiComponents()" ) +} + +// ----------------------------------------------------------------------------- +// LcUiEngine::toggleMute +// ----------------------------------------------------------------------------- +// +void LcUiEngine::toggleMute() +{ + LC_QDEBUG( "livecomms [UI] -> LcUiEngine::toggleMute()" ) + d->toggleMute(); + LC_QDEBUG( "livecomms [UI] <- LcUiEngine::toggleMute()" ) +} + +// ----------------------------------------------------------------------------- +// LcUiEngine::isMuted +// ----------------------------------------------------------------------------- +// +bool LcUiEngine::isMuted() const +{ + LC_QDEBUG( "livecomms [UI] <-> LcUiEngine::isMuted()" ) + return d->isMuted(); +} + +// ----------------------------------------------------------------------------- +// LcUiEngine::toggleSpeaker +// ----------------------------------------------------------------------------- +// +void LcUiEngine::toggleSpeaker() +{ + LC_QDEBUG( "livecomms [UI] -> LcUiEngine::toggleSpeaker()" ) + d->toggleSpeaker(); + LC_QDEBUG( "livecomms [UI] <- LcUiEngine::toggleSpeaker()" ) +} + +// ----------------------------------------------------------------------------- +// LcUiEngine::isSpeakerOn +// ----------------------------------------------------------------------------- +// +bool LcUiEngine::isSpeakerOn() const +{ + LC_QDEBUG( "livecomms [UI] <-> LcUiEngine::isSpeakerOn()" ) + return d->isSpeakerOn(); +} + +// ----------------------------------------------------------------------------- +// LcUiEngine::zoomValues +// ----------------------------------------------------------------------------- +// +int LcUiEngine::zoomValues( LcControlValues& values ) const +{ + LC_QDEBUG( "livecomms [UI] <-> LcUiEngine::zoomValues()" ) + return d->zoomValues(values); +} + +// ----------------------------------------------------------------------------- +// LcUiEngine::toggleEnableCamera +// ----------------------------------------------------------------------------- +// +void LcUiEngine::toggleDisableCamera() +{ + LC_QDEBUG( "livecomms [UI] -> LcUiEngine::toggleDisableCamera()" ) + d->toggleDisableCamera(); + LC_QDEBUG( "livecomms [UI] <- LcUiEngine::toggleDisableCamera()" ) +} + +// ----------------------------------------------------------------------------- +// LcUiEngine::setCameraMain +// ----------------------------------------------------------------------------- +// +void LcUiEngine::setMainCamera(const bool aMainCamera) +{ + LC_QDEBUG_2( "livecomms [UI] -> LcUiEngine::setCameraMain()", aMainCamera ) + d->setMainCamera( aMainCamera ); + LC_QDEBUG( "livecomms [UI] <- LcUiEngine::setCameraMain()" ) +} + +// ----------------------------------------------------------------------------- +// LcUiEngine::cameraIndex +// ----------------------------------------------------------------------------- +// +bool LcUiEngine::mainCamera() const +{ + LC_QDEBUG( "livecomms [UI] <-> LcUiEngine::mainCamera()" ) + return d->mainCamera(); +} + +// ----------------------------------------------------------------------------- +// LcUiEngine::toggleCamera +// ----------------------------------------------------------------------------- +// +void LcUiEngine::toggleCamera() +{ + LC_QDEBUG( "livecomms [UI] -> LcUiEngine::toggleCamera()" ) + d->toggleCamera(); + LC_QDEBUG( "livecomms [UI] <- LcUiEngine::toggleCamera()" ) +} + +// ----------------------------------------------------------------------------- +// LcUiEngine::fullScreenMode +// ----------------------------------------------------------------------------- +// +bool LcUiEngine::fullScreenMode() +{ + LC_QDEBUG( "livecomms [UI] <-> LcUiEngine::fullScreenMode()" ) + return d->fullScreenMode(); +} + +// ----------------------------------------------------------------------------- +// LcUiEngine::setFullScreenMode +// ----------------------------------------------------------------------------- +// +void LcUiEngine::setFullScreenMode(bool aMode) +{ + LC_QDEBUG( "livecomms [UI] -> LcUiEngine::setFullScreenMode()" ) + d->setFullScreenMode( aMode ); + LC_QDEBUG( "livecomms [UI] <- LcUiEngine::setFullScreenMode()" ) +} + + +// ----------------------------------------------------------------------------- +// LcUiEngine::updateSession +// ----------------------------------------------------------------------------- +// +void LcUiEngine::updateSession() +{ + LC_QDEBUG( "livecomms [UI] -> LcUiEngine::updateSession()" ) + d->updateSession(); + LC_QDEBUG( "livecomms [UI] <- LcUiEngine::updateSession()" ) +} + +// ----------------------------------------------------------------------------- +// LcUiEngine::isLocalPlayerPlaying +// ----------------------------------------------------------------------------- +// +bool LcUiEngine::isLocalPlayerPlaying() const +{ + LC_QDEBUG( "livecomms [UI] <-> LcUiEngine::isLocalPlayerPlaying()" ) + return d->isLocalPlayerPlaying(); +} + +// ----------------------------------------------------------------------------- +// LcUiEngine::isRemotePlayerPlaying +// ----------------------------------------------------------------------------- +// +bool LcUiEngine::isRemotePlayerPlaying() const +{ + LC_QDEBUG( "livecomms [UI] <-> LcUiEngine::isRemotePlayerPlaying()" ) + return d->isRemotePlayerPlaying(); +} + +// ----------------------------------------------------------------------------- +// LcUiEngine::isMinimized +// ----------------------------------------------------------------------------- +// +bool LcUiEngine::isMinimized() const +{ + LC_QDEBUG( "livecomms [UI] <-> LcUiEngine::isMinimized()" ) + return d->isMinimized(); +} + +// ----------------------------------------------------------------------------- +// LcUiEngine::minimize +// ----------------------------------------------------------------------------- +// +void LcUiEngine::minimize() +{ + LC_QDEBUG( "livecomms [UI] <-> LcUiEngine::minimize()" ) + // TODO : Remove this function when XqServiceUtil taken into use compleatly + d->minimize(); +} + +// ----------------------------------------------------------------------------- +// LcUiEngine::maximize +// ----------------------------------------------------------------------------- +// +void LcUiEngine::maximize() +{ + LC_QDEBUG( "livecomms [UI] <-> LcUiEngine::maximize()" ) + // TODO : Remove this function when XqServiceUtil taken into use compleatly + d->maximize(); +} + +// ----------------------------------------------------------------------------- +// LcUiEngine::shareImage +// ----------------------------------------------------------------------------- +// +void LcUiEngine::shareImage(const QString& fileName) +{ + LC_QDEBUG( "livecomms [UI] <-> LcUiEngine::shareImage()" ) + d->shareImage(fileName); +} + +// ----------------------------------------------------------------------------- +// LcUiEngine::shareCamera +// ----------------------------------------------------------------------------- +// +void LcUiEngine::shareCamera() +{ + LC_QDEBUG( "livecomms [UI] <-> LcUiEngine::shareCamera()" ) + d->shareCamera(); +} + +// ----------------------------------------------------------------------------- +// LcUiEngine::setCurrentView +// ----------------------------------------------------------------------------- +// +void LcUiEngine::setCurrentView(HbView* view) +{ + LC_QDEBUG( "livecomms [UI] <-> LcUiEngine::setCurrentView()" ) + d->setCurrentView(view); +} + + +// ----------------------------------------------------------------------------- +// LcUiEngine::SendDialTone +// ----------------------------------------------------------------------------- +// + +bool LcUiEngine::SendDialTone( const QChar aKey ) +{ + return d->SendDialTone(aKey); +} + + +// End of File diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcuiengine/src/lcuiengine_p.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcuiengine/src/lcuiengine_p.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,1547 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + +//USER +#include "lcuiengine_p.h" +#include "lcuidefs.h" +#include "lclogger.h" +#include "lcactivitymanager.h" + +//SYSTEM +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define LC_VTPLUGIN_NAME "Videotelephony"; + +// ----------------------------------------------------------------------------- +// LcUiEnginePrivate::LcUiEnginePrivate +// ----------------------------------------------------------------------------- +// +LcUiEnginePrivate::LcUiEnginePrivate(LcUiEngine& uiEngine, + const QString& engineName, + const QString& applicationDisplayName) + : mEngineName( engineName.toUtf8() ), + mSessionTitle( applicationDisplayName ), + mViewLayout( Lc_IdleViewLayout ), + mLiveCommsEngine( 0 ), + mCloseTimer(0), + mInvitingNote(0), + mWaitingNote(0), + mAcceptQuery(0), + mRecipientQuery(0), + mShareOwnVideoQuery(0), + mBlocked(false), + mFullScreen(false), + mSessionDurationTimerId(0), + mMainCamera(true), + mUiEngine( uiEngine ), + mIsMinimized(false), + mFirstForegroundSwitch(true), + mCurrentView(0), + mActivityManager(0), + mSettingsMgr(0), + mEarVolumeKey(0), + mLoudSpeakerKey(0) +{ + LC_QDEBUG( "livecomms [UI] -> LcUiEnginePrivate::LcUiEnginePrivate()" ) + + mPendingAction.clear(); + + TPtrC8 name( reinterpret_cast< const TUint8* >( mEngineName.constData() ) ); + // TODO: + // Replace the TRAPs with QT_TRANSLATE_SYMBIAN_LEAVE_TO_EXCEPTION (Qt4.5.2) + TRAPD( err, mLiveCommsEngine = CLcEngine::NewL( name ) ); + if ( err != KErrNone ) { + // Cannot proceed with the execution, exit the application + LC_QDEBUG_2( "livecomms [UI] <- LcUiEnginePrivate::LcUiEnginePrivate(), failed:", err ) + qApp->exit(err); + return; + } + + mLiveCommsEngine->Session().SetLcSessionObserver( this ); + mLiveCommsEngine->Session().SetLcUiProvider( this ); + + fillRemoteInfo( false ); + + if ( usingVideoTelephoneEngine() ) { + mViewLayout = Lc_AllInOneViewLayout; + } + + LC_QDEBUG( "livecomms [UI] Setting window for plug-in" ) + CCoeControl* coeControl = + reinterpret_cast( + HbInstance::instance()->allMainWindows().at(0)->winId()); + if ( coeControl ) { + TInt windowPtr = reinterpret_cast(coeControl->DrawableWindow()); + // Return value ignored as plugin may not be interested about window + mLiveCommsEngine->Session().SetParameter(0,windowPtr); + } + + mActivityManager = new LcActivityManager; + + mSettingsMgr = new XQSettingsManager(this); + mEarVolumeKey = new XQSettingsKey(XQSettingsKey::TargetCentralRepository, + KCRUidInCallVolume.iUid, KTelIncallEarVolume); + mLoudSpeakerKey = new XQSettingsKey(XQSettingsKey::TargetCentralRepository, + KCRUidInCallVolume.iUid,KTelIncallLoudspeakerVolume); + + subscribeVolumeEvents(); + + LC_QDEBUG( "livecomms [UI] <- LcUiEnginePrivate::LcUiEnginePrivate()" ) +} + +// ----------------------------------------------------------------------------- +// LcUiEnginePrivate::~LcUiEnginePrivate +// ----------------------------------------------------------------------------- +// +LcUiEnginePrivate::~LcUiEnginePrivate() +{ + LC_QDEBUG( "livecomms [UI] -> LcUiEnginePrivate::~LcUiEnginePrivate()" ) + + unSubscribeVolumeEvents(); + delete mEarVolumeKey; + delete mLoudSpeakerKey; + + delete mLiveCommsEngine; + delete mCloseTimer; + delete mActivityManager; + LC_QDEBUG( "livecomms [UI] <- LcUiEnginePrivate::~LcUiEnginePrivate()" ) +} + +// ----------------------------------------------------------------------------- +// LcUiEnginePrivate::zoom +// ----------------------------------------------------------------------------- +// +void LcUiEnginePrivate::zoom( int value ) +{ + LC_QDEBUG( "livecomms [UI] -> LcUiEnginePrivate::zoom()" ) + + // TODO: Replace TRAP with QT_TRANSLATE_SYMBIAN_LEAVE_TO_EXCEPTION (Qt4.5.2) + MLcZoomControl* zoom = zoomControl(); + if ( zoom ) { + TRAP_IGNORE( zoom->SetLcZoomValueL( value ) ); + } + + LC_QDEBUG( "livecomms [UI] <- LcUiEnginePrivate::zoom()" ) +} + +// ----------------------------------------------------------------------------- +// LcUiEnginePrivate::stop +// ----------------------------------------------------------------------------- +// +void LcUiEnginePrivate::stop() +{ + LC_QDEBUG( "livecomms [UI] -> LcUiEnginePrivate::stop()" ) + + mActivityManager->enableActivitySimulation(false); + + stopSessionDurationTimer(); + cancelCloseTimer(); + hideNotes( true ); + + // Start guard timer already before terminate call just in case + // something goes horribly wrong in termination + startStopGuardTimer(); + + int err = terminateSession(); + LC_QDEBUG_2( "livecomms [UI] terminateSession error = ", err ) + // if there is an error in terminating session + // or session state is already closed , stop ui + // else wait for session state events. + if( err || session().LcSessionState() == MLcSession::EClosed ){ + LC_QDEBUG( "livecomms [UI] closing ui... ") + emit mUiEngine.stopped(); + } + LC_QDEBUG( "livecomms [UI] <- LcUiEnginePrivate::stop()" ) +} + +// ----------------------------------------------------------------------------- +// LcUiEnginePrivate::start +// ----------------------------------------------------------------------------- +// +void LcUiEnginePrivate::start() +{ + LC_QDEBUG( "livecomms [UI] -> LcUiEnginePrivate::start()" ) + + mActivityManager->enableActivitySimulation(true); + + if ( session().LcSessionState() != MLcSession::EReceived ) { + startLiveContent(); + } else { + //wait callback + LC_QDEBUG( "livecomms [UI] MT start waiting callback" ) + } + + LC_QDEBUG( "livecomms [UI] <- LcUiEnginePrivate::start()" ) +} + +// ----------------------------------------------------------------------------- +// LcUiEnginePrivate::sessionTitle +// ----------------------------------------------------------------------------- +// +const QString& LcUiEnginePrivate::sessionTitle() const +{ + return mSessionTitle; +} + +// ----------------------------------------------------------------------------- +// LcUiEnginePrivate::recipient +// ----------------------------------------------------------------------------- +// +const QString& LcUiEnginePrivate::recipient() const +{ + return ( mRecipient.isEmpty() ) ? mPhoneNumber : mRecipient; +} + +// ----------------------------------------------------------------------------- +// LcUiEnginePrivate::phoneNumber +// ----------------------------------------------------------------------------- +// +const QString& LcUiEnginePrivate::phoneNumber() const +{ + return mPhoneNumber; +} + +// ----------------------------------------------------------------------------- +// LcUiEnginePrivate::viewLayout +// ----------------------------------------------------------------------------- +// +LcViewLayoutHint LcUiEnginePrivate::viewLayout() const +{ + return mViewLayout; +} + +// ----------------------------------------------------------------------------- +// LcUiEnginePrivate::setContentAreas +// ----------------------------------------------------------------------------- +// +void LcUiEnginePrivate::setContentAreas( const QRectF& sharedContent, + const QRectF& receivedContent ) +{ + LC_QDEBUG( "livecomms [UI] -> LcUiEnginePrivate::setContentAreas()" ) + LC_QDEBUG_2( "livecomms [UI] shared window: ", sharedContent ) + LC_QDEBUG_2( "livecomms [UI] received window: ", receivedContent ) + + mLocalRect = TRect(); + mRemoteRect = TRect(); + + if ( sharedContent.height() != 0 ) { + mLocalRect.SetRect( sharedContent.topLeft().x(), + sharedContent.topLeft().y(), + sharedContent.bottomRight().x(), + sharedContent.bottomRight().y() ); + } + + if ( receivedContent.height() != 0 ) { + mRemoteRect.SetRect( receivedContent.topLeft().x(), + receivedContent.topLeft().y(), + receivedContent.bottomRight().x(), + receivedContent.bottomRight().y() ); + } + + setWindowRect( session().LocalVideoPlayer(), mLocalRect ); + setWindowRect( session().RemoteVideoPlayer(), mRemoteRect ); + + LC_QDEBUG( "livecomms [UI] <- LcUiEnginePrivate::setContentAreas()" ) +} + +// ----------------------------------------------------------------------------- +// LcUiEnginePrivate::setOrientation +// Currently the only supported orientation is landscape. +// ----------------------------------------------------------------------------- +// +bool LcUiEnginePrivate::setOrientation( Qt::Orientation orientation ) +{ + bool ok( false ); + TInt error1( KErrNone ); + TInt error2( KErrNone ); + MLcVideoPlayer* localPlayer = session().LocalVideoPlayer(); + MLcVideoPlayer* remotePlayer = session().RemoteVideoPlayer(); + + Q_UNUSED(orientation); + + if ( localPlayer && localPlayer->LcWindow() ) { + TRAP(error1, localPlayer->LcWindow()->SetLcWindowOrientationL( MLcWindow::ELandscape ) ); + } + if ( remotePlayer && remotePlayer->LcWindow() ) { + TRAP(error2, remotePlayer->LcWindow()->SetLcWindowOrientationL( MLcWindow::ELandscape )); + } + + if ( (error1 == KErrNone) && (error2 == KErrNone) ) { + ok = true; + } + + return ok; +} + +// ----------------------------------------------------------------------------- +// LcUiEnginePrivate::setUiComponents +// ----------------------------------------------------------------------------- +// +void LcUiEnginePrivate::setUiComponents( + HbProgressDialog* invitingNote, + HbProgressDialog* waitingNote, + HbDialog* acceptQuery, + HbDialog* recipientQuery, + HbDialog* shareOwnVideoQuery ) +{ + mInvitingNote = invitingNote; + mWaitingNote = waitingNote; + mAcceptQuery = acceptQuery; + mRecipientQuery = recipientQuery; + mShareOwnVideoQuery = shareOwnVideoQuery; + + if (mAcceptQuery && (mAcceptQuery->actions().size() == 2)) { + connect(mAcceptQuery->actions().at(0), SIGNAL(triggered()), + this, SLOT(startReceiving()) ); + connect(mAcceptQuery->actions().at(1), SIGNAL(triggered()), + this, SLOT(stop()) ); + } + + if (mInvitingNote && (mInvitingNote->actions().size() == 1)) { + connect(mInvitingNote->actions().at(0), SIGNAL(triggered()), + this, SLOT(stop()) ); + } + if (mWaitingNote && (mWaitingNote->actions().size() == 1)) { + connect(mWaitingNote->actions().at(0), SIGNAL(triggered()), + this, SLOT(stop()) ); + } + if(mShareOwnVideoQuery && (mShareOwnVideoQuery->actions().size() == 2)) { + connect(mShareOwnVideoQuery->actions().at(0), SIGNAL(triggered()), + this, SLOT(startLocalVideo()) ); + connect(mShareOwnVideoQuery->actions().at(1), SIGNAL(triggered()), + this, SLOT(stopLocalVideo()) ); + + } +} + +// ----------------------------------------------------------------------------- +// LcUiEnginePrivate::toggleMute +// ----------------------------------------------------------------------------- +// +void LcUiEnginePrivate::toggleMute() +{ + LC_QDEBUG( "livecomms [UI] -> LcUiEnginePrivate::toggleMute()" ) + + bool mute( !isMuted() ); + muteMic( mute ); + + // Muting / unmuting the microphone is an asynchronous operation. + // Assuming here that the operation will eventually succeed. + if ( mute ) { + completeAction( lcEngSignalNameMuted ); + } else { + completeAction( lcEngSignalNameUnmuted ); + } + LC_QDEBUG( "livecomms [UI] <- LcUiEnginePrivate::toggleMute()" ) +} + +// ----------------------------------------------------------------------------- +// LcUiEnginePrivate::isMuted +// ----------------------------------------------------------------------------- +// +bool LcUiEnginePrivate::isMuted() const +{ + bool micMuted( false ); + MLcAudioControl* audio = audioControl(); + // TODO: Replace TRAP with QT_TRANSLATE_SYMBIAN_LEAVE_TO_EXCEPTION (Qt4.5.2) + if ( audio ) { + TRAP_IGNORE( micMuted = audio->IsLcMicMutedL() ); + } + return micMuted; +} + +// ----------------------------------------------------------------------------- +// LcUiEnginePrivate::toggleSpeaker +// ----------------------------------------------------------------------------- +// +void LcUiEnginePrivate::toggleSpeaker() +{ + LC_QDEBUG( "livecomms [UI] -> LcUiEnginePrivate::toggleSpeaker()" ) + + bool enable( !isSpeakerOn() ); + enableSpeaker( enable ); + + // Enabling / disabling the speaker is an asynchronous operation. + // Assuming here that the operation will eventually succeed. + if ( enable ) { + completeAction( lcEngSignalNameSpeakerEnabled ); + } else { + completeAction( lcEngSignalNameSpeakerDisabled ); + } + LC_QDEBUG( "livecomms [UI] <- LcUiEnginePrivate::toggleSpeaker()" ) +} + +// ----------------------------------------------------------------------------- +// LcUiEnginePrivate::isSpeakerOn +// ----------------------------------------------------------------------------- +// +bool LcUiEnginePrivate::isSpeakerOn() const +{ + return audioControl()->IsLcLoudspeakerEnabled(); +} + +// ----------------------------------------------------------------------------- +// LcUiEnginePrivate::zoomValues +// ----------------------------------------------------------------------------- +// +int LcUiEnginePrivate::zoomValues( LcControlValues& values ) const +{ + int err( -1 ); + // TODO: Replace TRAP with QT_TRANSLATE_SYMBIAN_LEAVE_TO_EXCEPTION (Qt4.5.2) + MLcZoomControl* zoom = zoomControl(); + if ( zoom ) { + TRAP( err, + values.mMaxValue = zoom->MaxLcZoomL(); + values.mMinValue = zoom->MinLcZoomL(); + values.mValue = zoom->LcZoomValueL(); ); + } + return err; +} + +// ----------------------------------------------------------------------------- +// LcUiEnginePrivate::toggleEnableCamera +// ----------------------------------------------------------------------------- +// +void LcUiEnginePrivate::toggleDisableCamera() +{ + LC_QDEBUG( "livecomms [UI] -> LcUiEnginePrivate::toggleDisableCamera()" ) + MLcVideoPlayer* player = visibleLocalPlayer(); + if( player ) { + pause( session().LocalVideoPlayer() ); + completeAction( lcEngSignalNameCameraDisabled ); + } else { + play( session().LocalVideoPlayer() ); + completeAction( lcEngSignalNameCameraEnabled ); + } + emitViewLayoutChanged(); + LC_QDEBUG( "livecomms [UI] <- LcUiEnginePrivate::toggleDisableCamera()" ) +} + +// ----------------------------------------------------------------------------- +// LcUiEnginePrivate::setCameraMain +// ----------------------------------------------------------------------------- +// +void LcUiEnginePrivate::setMainCamera(const bool aMainCamera) +{ + LC_QDEBUG_2( "livecomms [UI] -> LcUiEnginePrivate::setCameraMain()", aMainCamera ) + mMainCamera = aMainCamera; + LC_QDEBUG( "livecomms [UI] <- LcUiEnginePrivate::setCameraMain()" ) +} + +// ----------------------------------------------------------------------------- +// LcUiEnginePrivate::cameraIndex +// ----------------------------------------------------------------------------- +// +bool LcUiEnginePrivate::mainCamera() const +{ + LC_QDEBUG( "livecomms [UI] -> LcUiEnginePrivate::mainCamera()" ) + LC_QDEBUG_2( "livecomms [UI] <- LcUiEnginePrivate::mainCamera()", mMainCamera ) + return mMainCamera; +} + +// ----------------------------------------------------------------------------- +// LcUiEnginePrivate::toggleCamera +// ----------------------------------------------------------------------------- +// +void LcUiEnginePrivate::toggleCamera() +{ + LC_QDEBUG( "livecomms [UI] -> LcUiEnginePrivate::toggleCamera()" ) + + MLcVideoPlayer* localPlayer = session().LocalVideoPlayer(); + + // TODO: Replace TRAP with QT_TRANSLATE_SYMBIAN_LEAVE_TO_EXCEPTION (Qt4.5.2) + if ( localPlayer && localPlayer->LcCameraControl() ) { + TRAP_IGNORE( localPlayer->LcCameraControl()->ToggleLcCameraL() ); + } + + setMainCamera( !mMainCamera ); + + // Enabling / disabling the camera is an asynchronous operation. + // Assuming here that the operation will eventually succeed. + if ( mMainCamera ) { + completeAction( lcEngSignalNameCameraChangedToMain ); + } else { + completeAction( lcEngSignalNameCameraChangedToSecondary ); + } + + LC_QDEBUG_2( "livecomms [UI] <- LcUiEnginePrivate::toggleCamera(), mainCamera:", mMainCamera ) +} + +// ----------------------------------------------------------------------------- +// LcUiEnginePrivate::fullScreenMode +// ----------------------------------------------------------------------------- +// +bool LcUiEnginePrivate::fullScreenMode() +{ + LC_QDEBUG( "livecomms [UI] -> LcUiEnginePrivate::fullScreenMode()" ) + LC_QDEBUG( "livecomms [UI] <- LcUiEnginePrivate::fullScreenMode()" ) + return mFullScreen; +} + +// ----------------------------------------------------------------------------- +// LcUiEnginePrivate::setFullScreenMode +// ----------------------------------------------------------------------------- +// +void LcUiEnginePrivate::setFullScreenMode(bool aMode) +{ + LC_QDEBUG( "livecomms [UI] -> LcUiEnginePrivate::setFullScreenMode()" ) + mFullScreen = aMode; + LC_QDEBUG( "livecomms [UI] <- LcUiEnginePrivate::setFullScreenMode()" ) +} + + +// ----------------------------------------------------------------------------- +// LcUiEnginePrivate::updateSession +// ----------------------------------------------------------------------------- +// +void LcUiEnginePrivate::updateSession() +{ + LC_QDEBUG( "livecomms [UI] -> LcUiEnginePrivate::updateSession()" ) + // TODO: Replace TRAP with QT_TRANSLATE_SYMBIAN_LEAVE_TO_EXCEPTION (Qt4.5.2) + TRAP_IGNORE( session().UpdateLcSessionL() ); + + LC_QDEBUG( "livecomms [UI] <- LcUiEnginePrivate::updateSession()" ) +} + +// ----------------------------------------------------------------------------- +// LcUiEnginePrivate::isLocalPlayerPlaying +// ----------------------------------------------------------------------------- +// +bool LcUiEnginePrivate::isLocalPlayerPlaying() const +{ + MLcVideoPlayer* player = session().LocalVideoPlayer(); + return ( player && + player->LcVideoPlayerState() == MLcVideoPlayer::EPlaying ); +} + +// ----------------------------------------------------------------------------- +// LcUiEnginePrivate::isRemotePlayerPlaying +// ----------------------------------------------------------------------------- +// +bool LcUiEnginePrivate::isRemotePlayerPlaying() const +{ + MLcVideoPlayer* player = session().RemoteVideoPlayer(); + return ( player && + player->LcVideoPlayerState() == MLcVideoPlayer::EPlaying ); +} + +// ----------------------------------------------------------------------------- +// LcUiEnginePrivate::timerEvent +// ----------------------------------------------------------------------------- +// +void LcUiEnginePrivate::timerEvent(QTimerEvent *event) +{ + if ( event->timerId() == mSessionDurationTimerId ) { + QTime curr(0, 0, 0, 0); + curr = curr.addSecs( + mSessionDurationStartTime.secsTo( QTime::currentTime() ) ); + emit mUiEngine.sessionDurationChanged(curr.toString()); + } +} + +// ----------------------------------------------------------------------------- +// LcUiEnginePrivate::startReceiving +// ----------------------------------------------------------------------------- +// +void LcUiEnginePrivate::startReceiving() +{ + LC_QDEBUG( "livecomms [UI] -> LcUiEnginePrivate::startReceiving()" ) + + if ( mAcceptQuery ) { + mAcceptQuery->hide(); + } + + establishSession(); + + if ( mWaitingNote && featureSupported( CLcEngine::ELcShowWaitingNote ) ) { + mWaitingNote->show(); + } + + LC_QDEBUG( "livecomms [UI] <- LcUiEnginePrivate::startReceiving()" ) +} + +// ----------------------------------------------------------------------------- +// LcUiEnginePrivate::stopForcefully +// ----------------------------------------------------------------------------- +// +void LcUiEnginePrivate::stopForcefully() +{ + LC_QDEBUG( "livecomms [UI] -> LcUiEnginePrivate::stopForcefully()" ) + + // This is only way to force exit in case CActiveScheduler is blocked + // by engine plugin. + User::Exit(0); + + LC_QDEBUG( "livecomms [UI] <- LcUiEnginePrivate::stopForcefully()" ) +} + +// ----------------------------------------------------------------------------- +// LcUiEnginePrivate::StateChanged +// ----------------------------------------------------------------------------- +// +void LcUiEnginePrivate::StateChanged( MLcSession& aSession ) +{ + LC_QDEBUG( "livecomms [UI] -> LcUiEnginePrivate::StateChanged( session )" ) + doUpdate( aSession ); + LC_QDEBUG( "livecomms [UI] <- LcUiEnginePrivate::StateChanged( session )" ) +} + +// ----------------------------------------------------------------------------- +// LcUiEnginePrivate::StateChanged +// ----------------------------------------------------------------------------- +// +void LcUiEnginePrivate::StateChanged( MLcVideoPlayer& aPlayer ) +{ + LC_QDEBUG( "livecomms [UI] -> LcUiEnginePrivate::StateChanged( player )" ) + emitViewLayoutChanged(); + doUpdate( aPlayer ); + LC_QDEBUG( "livecomms [UI] <- LcUiEnginePrivate::StateChanged( player )" ) +} + +// ----------------------------------------------------------------------------- +// LcUiEnginePrivate::Updated +// ----------------------------------------------------------------------------- +// +void LcUiEnginePrivate::Updated( MLcSession& aSession ) +{ + LC_QDEBUG( "livecomms [UI] -> LcUiEnginePrivate::Updated( session )" ) + emitViewLayoutChanged(); + doUpdate( aSession ); + LC_QDEBUG( "livecomms [UI] <- LcUiEnginePrivate::Updated( session )" ) +} + +// ----------------------------------------------------------------------------- +// LcUiEnginePrivate::Updated +// ----------------------------------------------------------------------------- +// +void LcUiEnginePrivate::Updated( MLcVideoPlayer& aPlayer ) +{ + LC_QDEBUG( "livecomms [UI] -> LcUiEnginePrivate::Updated( player )" ) + emitViewLayoutChanged(); + doUpdate( aPlayer ); + LC_QDEBUG( "livecomms [UI] <- LcUiEnginePrivate::Updated( player )" ) +} + +// ----------------------------------------------------------------------------- +// LcUiEnginePrivate::Failed +// ----------------------------------------------------------------------------- +// +void LcUiEnginePrivate::Failed( MLcSession& /*aSession*/, TInt /*aError*/ ) +{ + LC_QDEBUG( "livecomms [UI] -> LcUiEnginePrivate::Failed( session )" ) + stop(); + LC_QDEBUG( "livecomms [UI] <- LcUiEnginePrivate::Failed( session )" ) +} + +// ----------------------------------------------------------------------------- +// LcUiEnginePrivate::Failed +// ----------------------------------------------------------------------------- +// +void LcUiEnginePrivate::Failed( MLcVideoPlayer& /*aPlayer*/, TInt /*aError*/ ) +{ + LC_QDEBUG( "livecomms [UI] -> LcUiEnginePrivate::Failed( player )" ) + stop(); + LC_QDEBUG( "livecomms [UI] <- LcUiEnginePrivate::Failed( player )" ) +} + +// ----------------------------------------------------------------------------- +// LcUiEnginePrivate::SessionTimeChanged +// ----------------------------------------------------------------------------- +// +void LcUiEnginePrivate::SessionTimeChanged( MLcSession& /*aSession*/, + const TTimeIntervalSeconds& /*aSeconds*/ ) +{ + LC_QDEBUG( "livecomms [UI] -> LcUiEnginePrivate::SessionTimeChanged()" ) + LC_QDEBUG( "livecomms [UI] <- LcUiEnginePrivate::SessionTimeChanged()" ) +} + +// ----------------------------------------------------------------------------- +// LcUiEnginePrivate::SelectRecipient +// ----------------------------------------------------------------------------- +// +TBool LcUiEnginePrivate::SelectRecipient( MDesCArray& aRecipientAddresses, + TDes& aSelectedRecipientAddress ) +{ + LC_QDEBUG( "livecomms [UI] -> LcUiEnginePrivate::SelectRecipient()" ) + aSelectedRecipientAddress = aRecipientAddresses.MdcaPoint(0); + mRecipient = DESC_TO_QSTRING( aSelectedRecipientAddress ); + LC_QDEBUG( "livecomms [UI] <- LcUiEnginePrivate::SelectRecipient()" ) + return ETrue; +} + +// ----------------------------------------------------------------------------- +// LcUiEnginePrivate::SelectRecipient +// ----------------------------------------------------------------------------- +// +TBool LcUiEnginePrivate::InputRecipient( TDes& aRecipientAddress ) +{ + LC_QDEBUG( "livecomms [UI] -> LcUiEnginePrivate::InputRecipient()" ) + + TBool answered( EFalse ); + + if ( mRecipientQuery ) { + mRecipient = DESC_TO_QSTRING( aRecipientAddress ); + HbLineEdit* lineEdit = new HbLineEdit( mRecipient ); + mRecipientQuery->setContentWidget( lineEdit ); + mRecipientQuery->open(); + TPtrC16 textPtr( + reinterpret_cast< const TUint16* >( mRecipient.utf16() ) ); + aRecipientAddress.Copy( textPtr ); + answered = ETrue; + } + + LC_QDEBUG( "livecomms [UI] <- LcUiEnginePrivate::InputRecipient()" ) + return answered; +} + +// ----------------------------------------------------------------------------- +// LcUiEnginePrivate::HandleForegroundStatus +// ----------------------------------------------------------------------------- +// +void LcUiEnginePrivate::HandleForegroundStatus( TBool aForeground ) +{ + LC_QDEBUG_2( "livecomms [UI] -> LcUiEnginePrivate::HandleForegroundStatus(), fg:", + aForeground ) + + mActivityManager->enableActivitySimulation(aForeground); + + if ( aForeground && !HbInstance::instance()->allMainWindows().isEmpty() ){ + HbInstance::instance()->allMainWindows().at(0)->show(); + } + XQServiceUtil::toBackground(!aForeground); + + mIsMinimized = !aForeground; + + handleEngineForegroundStatus(); + + LC_QDEBUG( "livecomms [UI] <- LcUiEnginePrivate::HandleForegroundStatus()" ) +} + +// ----------------------------------------------------------------------------- +// LcUiEnginePrivate::BlockUi +// ----------------------------------------------------------------------------- +// +void LcUiEnginePrivate::BlockUi( TBool aBlocked ) +{ + LC_QDEBUG_2( "livecomms [UI] -> LcUiEnginePrivate::BlockUi, blocked:", aBlocked ) + mBlocked = aBlocked; + + if ( mBlocked ){ + emit mUiEngine.blocked(); + } + else{ + emit mUiEngine.unblocked(); + completePendingAction(); + } + LC_QDEBUG( "livecomms [UI] <- LcUiEnginePrivate::BlockUi()" ) +} + +// ----------------------------------------------------------------------------- +// LcUiEnginePrivate::setViewLayout +// ----------------------------------------------------------------------------- +// +LcViewLayoutHint LcUiEnginePrivate::setViewLayout() +{ + LC_QDEBUG( "livecomms [UI] -> LcUiEnginePrivate::setViewLayout()" ) + + LcViewLayoutHint hint = (LcViewLayoutHint)Lc_NoViewLayout; + + MLcVideoPlayer* localPlayer = visibleLocalPlayer(); + MLcVideoPlayer* remotePlayer = visibleRemotePlayer(); + + if ( usingVideoTelephoneEngine() ) { + hint = Lc_AllInOneViewLayout; + LC_QDEBUG( "livecomms [UI] use Lc_AllInOneViewLayout" ) + } else if ( localPlayer && remotePlayer ) { + hint = Lc_TwowayViewLayout; + LC_QDEBUG( "livecomms [UI] use Lc_TwowayViewLayout" ) + } else if ( localPlayer ) { + hint = Lc_SharedViewLayout; + LC_QDEBUG( "livecomms [UI] use Lc_SharedViewLayout" ) + } else if ( remotePlayer && !session().LocalVideoPlayer() ) { + hint = Lc_ReceivedOnlyViewLayout; + LC_QDEBUG( "livecomms [UI] use Lc_ReceivedOnlyViewLayout" ) + } else if ( remotePlayer ) { + hint = Lc_ReceivedViewLayout; + LC_QDEBUG( "livecomms [UI] use Lc_ReceivedViewLayout" ) + } else { + hint = Lc_IdleViewLayout; + LC_QDEBUG( "livecomms [UI] ! no players ! use Lc_IdleViewLayout" ) + } + + mViewLayout = hint; + + LC_QDEBUG( "livecomms [UI] <- LcUiEnginePrivate::setViewLayout()" ) + + return viewLayout(); +} + +// ----------------------------------------------------------------------------- +// LcUiEnginePrivate::emitViewLayoutChanged +// ----------------------------------------------------------------------------- +// +void LcUiEnginePrivate::emitViewLayoutChanged() +{ + LC_QDEBUG( "livecomms [UI] -> LcUiEnginePrivate::emitViewLayoutChanged()" ) + + LcViewLayoutHint oldLayout = viewLayout(); + LcViewLayoutHint layout = setViewLayout(); + + if ( layout != oldLayout ) { + LC_QDEBUG( "livecomms [UI] layout has changed. signal" ) + emit mUiEngine.layoutChanged(); + } + LC_QDEBUG( "livecomms [UI] <- LcUiEnginePrivate::emitViewLayoutChanged()" ) +} + +// ----------------------------------------------------------------------------- +// LcUiEnginePrivate::startLiveContent +// ----------------------------------------------------------------------------- +// +void LcUiEnginePrivate::startLiveContent() +{ + LC_QDEBUG( "livecomms [UI] -> LcUiEnginePrivate::startLiveContent()" ) + + if ( mInvitingNote && featureSupported( CLcEngine::ELcShowInvitingNote ) ) { + mInvitingNote->show(); + } + enableSpeaker( true ); + establishSession(); + + LC_QDEBUG( "livecomms [UI] <- LcUiEnginePrivate::startLiveContent()" ) +} + +// ----------------------------------------------------------------------------- +// LcUiEnginePrivate::startPlayback +// Utility style function to start both local and remote players if available. +// ----------------------------------------------------------------------------- +// +void LcUiEnginePrivate::startPlayback() +{ + LC_QDEBUG( "livecomms [UI] -> LcUiEnginePrivate::startPlayback()" ) + startLocalVideo(); + startRemoteVideo(); + LC_QDEBUG( "livecomms [UI] <- LcUiEnginePrivate::startPlayback()" ) +} + +// ----------------------------------------------------------------------------- +// LcUiEnginePrivate::startRemoteVideo +// ----------------------------------------------------------------------------- +// +void LcUiEnginePrivate::startRemoteVideo() +{ + LC_QDEBUG( "livecomms [UI] -> LcUiEnginePrivate::startRemotePlayback()" ) + MLcVideoPlayer* remotePlayer = session().RemoteVideoPlayer(); + if ( remotePlayer ) { + LC_QDEBUG( "livecomms [UI] enable remote player window" ) + enableWindow( remotePlayer, true ); + } + LC_QDEBUG( "livecomms [UI] <- LcUiEnginePrivate::startRemotePlayback()" ) +} +// ----------------------------------------------------------------------------- +// LcUiEnginePrivate::startCloseTimer +// ----------------------------------------------------------------------------- +// +void LcUiEnginePrivate::startCloseTimer() +{ + LC_QDEBUG( "livecomms [UI] -> LcUiEnginePrivate::startCloseTimer()" ) + delete mCloseTimer; + mCloseTimer = 0; + mCloseTimer = new QTimer(this); + mCloseTimer->setSingleShot(true); + connect(mCloseTimer, SIGNAL(timeout()), this, SLOT(stop())); + mCloseTimer->start(60000); + LC_QDEBUG( "livecomms [UI] <- LcUiEnginePrivate::startCloseTimer()" ) +} + +// ----------------------------------------------------------------------------- +// LcUiEnginePrivate::cancelCloseTimer +// ----------------------------------------------------------------------------- +// +void LcUiEnginePrivate::cancelCloseTimer() +{ + if ( mCloseTimer && mCloseTimer->isActive()) { + mCloseTimer->stop(); + } +} + +// ----------------------------------------------------------------------------- +// LcUiEnginePrivate::hideNotes +// ----------------------------------------------------------------------------- +// +void LcUiEnginePrivate::hideNotes( bool hideWaitingNote ) +{ + LC_QDEBUG( "livecomms [UI] -> LcUiEnginePrivate::hideNotes()" ) + if ( mAcceptQuery ) { + mAcceptQuery->hide(); + } + if ( mWaitingNote && hideWaitingNote ) { + mWaitingNote->hide(); + } + if ( mInvitingNote ) { + mInvitingNote->hide(); + } + if ( mRecipientQuery ) { + mRecipientQuery->hide(); + } + LC_QDEBUG( "livecomms [UI] <- LcUiEnginePrivate::hideNotes()" ) +} + +// ----------------------------------------------------------------------------- +// LcUiEnginePrivate::completeAction +// Completes method passed as argument. If engine is in blocked state +// action completion will be delayed until unblock occurs. +// ----------------------------------------------------------------------------- +// +void LcUiEnginePrivate::completeAction( const char* actionMethod ) +{ + LC_QDEBUG_2( "livecomms [UI] -> LcUiEnginePrivate::completeAction :", actionMethod ) + if ( mBlocked ) { + LC_QDEBUG( "livecomms [UI] Blocked, invoke later" ) + // store action and invoke it once unblocked + setPendingAction( actionMethod ); + } + else { + QMetaObject::invokeMethod( &mUiEngine, actionMethod ); + } + LC_QDEBUG( "livecomms [UI] <- LcUiEnginePrivate::completeAction" ) +} + +// ----------------------------------------------------------------------------- +// LcUiEnginePrivate::setPendingAction +// ----------------------------------------------------------------------------- +// +void LcUiEnginePrivate::setPendingAction( const char* actionMethod ) +{ + mPendingAction = actionMethod; +} + +// ----------------------------------------------------------------------------- +// LcUiEnginePrivate::completePendingAction +// ----------------------------------------------------------------------------- +// +void LcUiEnginePrivate::completePendingAction() +{ + if ( !mPendingAction.isEmpty() ) { + completeAction( mPendingAction.toAscii().constData() ); + mPendingAction.clear(); + } +} + +// ----------------------------------------------------------------------------- +// LcUiEnginePrivate::videoTelephoneLayout +// ----------------------------------------------------------------------------- +// +bool LcUiEnginePrivate::usingVideoTelephoneEngine() +{ + return mEngineName == LC_VTPLUGIN_NAME; +} + +// ----------------------------------------------------------------------------- +// LcUiEnginePrivate::session +// ----------------------------------------------------------------------------- +// +MLcSession& LcUiEnginePrivate::session() const +{ + return mLiveCommsEngine->Session(); +} + +// ----------------------------------------------------------------------------- +// LcUiEnginePrivate::visibleLocalPlayer +// ----------------------------------------------------------------------------- +// +MLcVideoPlayer* LcUiEnginePrivate::visibleLocalPlayer() const +{ + // TODO: Replace TRAP with QT_TRANSLATE_SYMBIAN_LEAVE_TO_EXCEPTION (Qt4.5.2) + MLcVideoPlayer* localPlayer = session().LocalVideoPlayer(); + if ( localPlayer ) { + bool playing( true ); + TRAP_IGNORE( playing = localPlayer->LcIsPlayingL() ); + if ( !playing ) { + localPlayer = 0; + } + } + return localPlayer; +} + +// ----------------------------------------------------------------------------- +// LcUiEnginePrivate::visibleRemotePlayer +// ----------------------------------------------------------------------------- +// +MLcVideoPlayer* LcUiEnginePrivate::visibleRemotePlayer() const +{ + MLcVideoPlayer* remotePlayer = session().RemoteVideoPlayer(); + if ( remotePlayer && + remotePlayer->LcVideoPlayerState() == MLcVideoPlayer::EPaused ) { + remotePlayer = 0; + } + return remotePlayer; +} + +// ----------------------------------------------------------------------------- +// LcUiEnginePrivate::audioControl +// ----------------------------------------------------------------------------- +// +MLcAudioControl* LcUiEnginePrivate::audioControl() const +{ + MLcAudioControl* audioControl( 0 ); + if ( session().LocalVideoPlayer() ) { + audioControl = session().LocalVideoPlayer()->LcAudioControl(); + } + if ( !audioControl && session().RemoteVideoPlayer() ) { + audioControl = session().RemoteVideoPlayer()->LcAudioControl(); + } + return audioControl; +} + +// ----------------------------------------------------------------------------- +// LcUiEnginePrivate::zoomControl +// ----------------------------------------------------------------------------- +// +MLcZoomControl* LcUiEnginePrivate::zoomControl() const +{ + MLcZoomControl* zoomControl( 0 ); + if ( session().LocalVideoPlayer() ) { + zoomControl = session().LocalVideoPlayer()->LcZoomControl(); + } + return zoomControl; +} + +// ----------------------------------------------------------------------------- +// LcUiEnginePrivate::isFeatureSupported +// ----------------------------------------------------------------------------- +// +bool LcUiEnginePrivate::featureSupported( CLcEngine::TLcFeature feature ) +{ + bool isSupported( false ); + if ( mLiveCommsEngine ) { + isSupported = mLiveCommsEngine->IsFeatureSupported( feature ); + } + return isSupported; +} + +// ----------------------------------------------------------------------------- +// LcUiEnginePrivate::startSessionDurationTimer +// ----------------------------------------------------------------------------- +// +void LcUiEnginePrivate::startSessionDurationTimer() +{ + const int sessionDurationTimerIntervalInMs = 1000; + if ( !mSessionDurationTimerId ){ + mSessionDurationTimerId = startTimer( sessionDurationTimerIntervalInMs ); + LC_QDEBUG_2( "livecomms [UI] -> duration timer id:", mSessionDurationTimerId ) + mSessionDurationStartTime = QTime::currentTime(); + } +} + +// ----------------------------------------------------------------------------- +// LcUiEnginePrivate::stopSessionDurationTimer +// ----------------------------------------------------------------------------- +// +void LcUiEnginePrivate::stopSessionDurationTimer() +{ + if ( mSessionDurationTimerId ){ + killTimer( mSessionDurationTimerId ); + mSessionDurationTimerId = 0; + } +} + +// ----------------------------------------------------------------------------- +// LcUiEnginePrivate::establishSession +// ----------------------------------------------------------------------------- +// +int LcUiEnginePrivate::establishSession() +{ + // TODO: Replace TRAP with QT_TRANSLATE_SYMBIAN_LEAVE_TO_EXCEPTION (Qt4.5.2) + TRAPD( err, mLiveCommsEngine->Session().EstablishLcSessionL() ); + if ( !err ) { + startCloseTimer(); + } + LC_QDEBUG_2( "livecomms [UI] LcUiEnginePrivate::establishSession, err", err ) + return err; +} + +// ----------------------------------------------------------------------------- +// LcUiEnginePrivate::terminateSession +// ----------------------------------------------------------------------------- +// +int LcUiEnginePrivate::terminateSession() +{ + // TODO: Replace TRAP with QT_TRANSLATE_SYMBIAN_LEAVE_TO_EXCEPTION (Qt4.5.2) + TRAPD( err, mLiveCommsEngine->Session().TerminateLcSessionL() ); + LC_QDEBUG_2( "livecomms [UI] LcUiEnginePrivate::terminateSession, err", err ) + return err; +} + +// ----------------------------------------------------------------------------- +// LcUiEnginePrivate::setWindowRect +// ----------------------------------------------------------------------------- +// +int LcUiEnginePrivate::setWindowRect( MLcVideoPlayer* player, TRect rect ) +{ + // TODO: Replace TRAP with QT_TRANSLATE_SYMBIAN_LEAVE_TO_EXCEPTION (Qt4.5.2) + int err( -1 ); + if ( player && + player->LcWindow() && + player->LcWindow()->LcWindowRect() != rect ) { + TRAP( err, player->LcWindow()->SetLcWindowRectL( rect ) ); + } + LC_QDEBUG_2( "livecomms [UI] LcUiEnginePrivate::setWindowRect, err", err ) + return err; +} + +// ----------------------------------------------------------------------------- +// LcUiEnginePrivate::enableWindow +// ----------------------------------------------------------------------------- +// +int LcUiEnginePrivate::enableWindow( MLcVideoPlayer* player, bool enable ) +{ + // TODO: Replace TRAP with QT_TRANSLATE_SYMBIAN_LEAVE_TO_EXCEPTION (Qt4.5.2) + int err( -1 ); + if ( player && + player->LcWindow() ) { + TRAP( err, player->LcWindow()->EnableLcWindowL( enable ) ); + } + LC_QDEBUG_2( "livecomms [UI] LcUiEnginePrivate::enableWindow, err", err ) + return err; +} + +// ----------------------------------------------------------------------------- +// LcUiEnginePrivate::play +// ----------------------------------------------------------------------------- +// +int LcUiEnginePrivate::play( MLcVideoPlayer* player ) +{ + // TODO: Replace TRAP with QT_TRANSLATE_SYMBIAN_LEAVE_TO_EXCEPTION (Qt4.5.2) + int err( -1 ); + if ( player ) { + TRAP( err, player->LcPlayL() ); + } + LC_QDEBUG_2( "livecomms [UI] LcUiEnginePrivate::play, err", err ) + return err; +} + +// ----------------------------------------------------------------------------- +// LcUiEnginePrivate::pause +// ----------------------------------------------------------------------------- +// +int LcUiEnginePrivate::pause( MLcVideoPlayer* player ) +{ + // TODO: Replace TRAP with QT_TRANSLATE_SYMBIAN_LEAVE_TO_EXCEPTION (Qt4.5.2) + int err( -1 ); + if ( player ) { + TRAP( err, player->LcPauseL() ); + } + LC_QDEBUG_2( "livecomms [UI] LcUiEnginePrivate::pause, err", err ) + return err; +} + +// ----------------------------------------------------------------------------- +// LcUiEnginePrivate::enableSpeaker +// ----------------------------------------------------------------------------- +// +int LcUiEnginePrivate::enableSpeaker( bool enable ) +{ + int err( -1 ); + // TODO: Replace TRAP with QT_TRANSLATE_SYMBIAN_LEAVE_TO_EXCEPTION (Qt4.5.2) + MLcAudioControl* audio = audioControl(); + if ( audio ) { + TRAP( err, audio->EnableLcLoudspeakerL( enable ) ); + } + LC_QDEBUG_2( "livecomms [UI] LcUiEnginePrivate::enableSpeaker, err", err ) + return err; +} + +// ----------------------------------------------------------------------------- +// LcUiEnginePrivate::muteMic +// ----------------------------------------------------------------------------- +// +int LcUiEnginePrivate::muteMic( bool mute ) +{ + int err( -1 ); + // TODO: Replace TRAP with QT_TRANSLATE_SYMBIAN_LEAVE_TO_EXCEPTION (Qt4.5.2) + MLcAudioControl* audio = audioControl(); + if ( audio ) { + TRAP( err, audio->MuteLcMicL( mute ) ); + } + return err; +} + +// ----------------------------------------------------------------------------- +// LcUiEnginePrivate::fillRemoteInfo +// ----------------------------------------------------------------------------- +// +void LcUiEnginePrivate::fillRemoteInfo(bool informChanges) +{ + LC_QDEBUG( "livecomms [UI] -> LcUiEnginePrivate::fillRemoteInfo()" ) + + QString phoneNum = DESC_TO_QSTRING( session().RemoteDetails() ); + if ( phoneNum != mPhoneNumber) { + LC_QDEBUG_2( "remote number:", phoneNum ) + mPhoneNumber = phoneNum; + if ( informChanges ) { + emit mUiEngine.phoneNumberChanged(mPhoneNumber); + } + } + // If no recipient even at opened state and no phonenum, use unknown recipient + QString recipient = DESC_TO_QSTRING( session().RemoteDisplayName() ); + if ( recipient.isEmpty() ){ + recipient = mPhoneNumber; + } + if ( session().LcSessionState() == MLcSession::EOpen && recipient.isEmpty() ) { + recipient = hbTrId("txt_vt_custom_unknown_number"); + } + if ( recipient != mRecipient ){ + LC_QDEBUG_2( "remote name:", recipient ) + mRecipient = recipient; + if ( informChanges ) { + emit mUiEngine.recipientChanged(mRecipient); + } + } + LC_QDEBUG( "livecomms [UI] <- LcUiEnginePrivate::fillRemoteInfo()" ) +} + +// ----------------------------------------------------------------------------- +// LcUiEnginePrivate::isMinimized +// ----------------------------------------------------------------------------- +// +bool LcUiEnginePrivate::isMinimized() const +{ + return mIsMinimized; +} + +// ----------------------------------------------------------------------------- +// LcUiEnginePrivate::minimize +// ----------------------------------------------------------------------------- +// +void LcUiEnginePrivate::minimize() +{ + LC_QDEBUG( "livecomms [UI] -> LcUiEnginePrivate::minimize()" ) + + if ( !isMinimized() ){ + TRect emptyRect; + setWindowRect( session().LocalVideoPlayer(), emptyRect ); + setWindowRect( session().RemoteVideoPlayer(), emptyRect ); + HandleForegroundStatus(EFalse); + } + LC_QDEBUG( "livecomms [UI] <- LcUiEnginePrivate::minimize()" ) +} + +// ----------------------------------------------------------------------------- +// LcUiEnginePrivate::maximize +// ----------------------------------------------------------------------------- +// +void LcUiEnginePrivate::maximize() +{ + LC_QDEBUG( "livecomms [UI] -> LcUiEnginePrivate::maximize()" ) + if ( isMinimized() ){ + setWindowRect( session().LocalVideoPlayer(), mLocalRect ); + setWindowRect( session().RemoteVideoPlayer(), mRemoteRect ); + HandleForegroundStatus(ETrue); + } + LC_QDEBUG( "livecomms [UI] <- LcUiEnginePrivate::maximize()" ) +} + +// ----------------------------------------------------------------------------- +// LcUiEnginePrivate::setCurrentView +// ----------------------------------------------------------------------------- +// +void LcUiEnginePrivate::setCurrentView(HbView* view) +{ + LC_QDEBUG( "livecomms [UI] <-> LcUiEnginePrivate::setCurrentView()" ) + mCurrentView = view; +} + +// ----------------------------------------------------------------------------- +// LcUiEnginePrivate::startStopGuardTimer +// ----------------------------------------------------------------------------- +// +void LcUiEnginePrivate::startStopGuardTimer() +{ + LC_QDEBUG( "livecomms [UI] -> LcUiEnginePrivate::startStopGuardTimer()" ) + const int stoppingGuardTimerInMs = 5000; + QTimer::singleShot(stoppingGuardTimerInMs, this, SLOT(stopForcefully())); + LC_QDEBUG( "livecomms [UI] <- LcUiEnginePrivate::startStopGuardTimer()" ) +} + +// ----------------------------------------------------------------------------- +// LcUiEnginePrivate::handleEngineForegroundStatus +// ----------------------------------------------------------------------------- +// +void LcUiEnginePrivate::handleEngineForegroundStatus() +{ + bool foreground = !mIsMinimized; + LC_QDEBUG_2( "livecomms [UI] -> LcUiEnginePrivate::handleEngineForegroundStatus(), fg:", + foreground ) + HbMainWindow *mainWindow = HbInstance::instance()->allMainWindows().at(0); + + if ( mLiveCommsEngine ){ + bool setStatusToEngine(true); + if ( foreground && mFirstForegroundSwitch ){ + // Have to wait that first paint has occured, otherwise video + // windows are shown too early. + // TODO: wk8 does not yet have viewReady signal so simulate it + // by using timer. Timer can be removed later. + if ( mCurrentView ){ + LC_QDEBUG( "livecomms [UI] Wait for first paint" ) + connect( mainWindow, SIGNAL(viewReady()), + this, SLOT(handleEngineForegroundStatus()) ); + setStatusToEngine = false; + } + + } + if ( setStatusToEngine ) { + LC_QDEBUG( "livecomms [UI] Set fg status to engine plugin" ) + session().SetForegroundStatus(foreground); + disconnect( mainWindow, SIGNAL(viewReady()), + this, SLOT(handleEngineForegroundStatus()) ); + } + mFirstForegroundSwitch = false; + } + LC_QDEBUG( "livecomms [UI] <- LcUiEnginePrivate::handleEngineForegroundStatus()" ) +} + + +// ----------------------------------------------------------------------------- +// LcUiEnginePrivate::SendDialTone +// ----------------------------------------------------------------------------- +// +bool LcUiEnginePrivate::SendDialTone(const QChar aKey) +{ + if ( mLiveCommsEngine ){ + const TChar dialChar = static_cast(aKey.unicode()); + return mLiveCommsEngine->Session().SendDialTone(dialChar); + } + return false; +} + +// ----------------------------------------------------------------------------- +// LcUiEnginePrivate::isAllowedToShareVideo +// ----------------------------------------------------------------------------- +// +void LcUiEnginePrivate::showSendVideoQueryWhenNecessary() +{ + LC_QDEBUG( "livecomms [UI] -> LcUiEnginePrivate::showSendVideoQueryWhenNecessary()" ) + if (featureSupported( CLcEngine::ELcSendVideoQuery )) { + if (mShareOwnVideoQuery) + mShareOwnVideoQuery->show(); + } + LC_QDEBUG( "livecomms [UI] <- LcUiEnginePrivate::showSendVideoQueryWhenNecessary()" ) +} + +// ----------------------------------------------------------------------------- +// LcUiEnginePrivate::stopLocalVideo +// ----------------------------------------------------------------------------- +// +void LcUiEnginePrivate::stopLocalVideo() +{ + LC_QDEBUG( "livecomms [UI] -> LcUiEnginePrivate::stopLocalVideo()" ) + MLcVideoPlayer* localPlayer = session().LocalVideoPlayer(); + if( localPlayer ) { + pause( localPlayer ); + enableWindow( localPlayer, false ); + completeAction( lcEngSignalNameCameraDisabled ); + } + LC_QDEBUG( "livecomms [UI] <- LcUiEnginePrivate::stopLocalVideo()" ) +} + +// ----------------------------------------------------------------------------- +// LcUiEnginePrivate::startLocalVideo +// ----------------------------------------------------------------------------- +// +void LcUiEnginePrivate::startLocalVideo() +{ + LC_QDEBUG( "livecomms [UI] -> LcUiEnginePrivate::startLocalVideo()" ) + MLcVideoPlayer* localPlayer = session().LocalVideoPlayer(); + if( localPlayer ){ + play( localPlayer ); + enableWindow( localPlayer, true ); + } + LC_QDEBUG( "livecomms [UI] <- LcUiEnginePrivate::startLocalVideo()" ) +} + +// ----------------------------------------------------------------------------- +// LcUiEnginePrivate::subscribeVolumeEvents +// ----------------------------------------------------------------------------- +// + +void LcUiEnginePrivate::subscribeVolumeEvents() +{ + LC_QDEBUG( "livecomms [UI] -> LcUiEnginePrivate::subscribeVolumeEvents()" ) + mSettingsMgr->startMonitoring( *mEarVolumeKey, XQSettingsManager::TypeInt ); + mSettingsMgr->startMonitoring( *mLoudSpeakerKey, XQSettingsManager::TypeInt ); + connect(mSettingsMgr, + SIGNAL(valueChanged(const XQSettingsKey&, const QVariant&)), + this, SLOT(volumeLevelChanged(const XQSettingsKey&, const QVariant&))); + LC_QDEBUG( "livecomms [UI] <- LcUiEnginePrivate::subscribeVolumeEvents()" ) +} + + +// ----------------------------------------------------------------------------- +// LcUiEnginePrivate::unSubscribeVolumeEvents +// ----------------------------------------------------------------------------- +// +void LcUiEnginePrivate::unSubscribeVolumeEvents() +{ + LC_QDEBUG( "livecomms [UI] -> LcUiEnginePrivate::unSubscribeVolumeEvents()") + mSettingsMgr->stopMonitoring( *mEarVolumeKey ); + mSettingsMgr->stopMonitoring( *mLoudSpeakerKey ); + disconnect(mSettingsMgr, + SIGNAL( valueChanged(const XQSettingsKey&, const QVariant& ) ), + this, SLOT(volumeLevelChanged(const XQSettingsKey&, const QVariant&))); + LC_QDEBUG( "livecomms [UI] <- LcUiEnginePrivate::unSubscribeVolumeEvents()" ) +} + + +// ----------------------------------------------------------------------------- +// LcUiEnginePrivate::volumeLevelChanged +// ----------------------------------------------------------------------------- +// + +void LcUiEnginePrivate::volumeLevelChanged( const XQSettingsKey& aKey, + const QVariant& aValue ) +{ + LC_QDEBUG( "livecomms [UI] -> LcUiEnginePrivate::volumeLevelChanged()" ) + + // Ensure We only send value for the valid keys. + if ((aKey.key() == mEarVolumeKey->key() && aKey.uid() == mEarVolumeKey->uid()) || + (aKey.key() == mLoudSpeakerKey->key() && aKey.uid() == mLoudSpeakerKey->uid()) ) { + + emit mUiEngine.volumeChanged( aValue.toInt() ); + } + LC_QDEBUG( "livecomms [UI] <- LcUiEnginePrivate::volumeLevelChanged()" ) +} + +// ----------------------------------------------------------------------------- +// LcUiEnginePrivate::doUpdate( MLcVideoPlayer& aPlayer ) +// ----------------------------------------------------------------------------- +// + +void LcUiEnginePrivate::doUpdate( MLcVideoPlayer& aPlayer ) +{ + LC_QDEBUG( "livecomms [UI] -> LcUiEnginePrivate::doUpdate(), videoplayer" ) + if ( aPlayer.LcVideoPlayerState() == MLcVideoPlayer::EPlaying ) { + if ( &aPlayer == session().RemoteVideoPlayer() ) { + if ( mWaitingNote ) { + mWaitingNote->hide(); + } + emit mUiEngine.remotePlayerPlaying(); + } + if ( &aPlayer == session().LocalVideoPlayer() ) { + emit mUiEngine.localPlayerPlaying(); + } + } else if ( aPlayer.LcVideoPlayerState() == MLcVideoPlayer::EPreparing ) { + if ( &aPlayer == session().RemoteVideoPlayer() ) { + emit mUiEngine.remotePlayerPreparing(); + } + if ( &aPlayer == session().LocalVideoPlayer() ) { + emit mUiEngine.localPlayerPreparing(); + } + } else if ( aPlayer.LcVideoPlayerState() == MLcVideoPlayer::EBuffering ) { + if ( &aPlayer == session().RemoteVideoPlayer() ) { + emit mUiEngine.remotePlayerBuffering(); + } + if ( &aPlayer == session().LocalVideoPlayer() ) { + emit mUiEngine.localPlayerBuffering(); + } + } else if ( aPlayer.LcVideoPlayerState() == MLcVideoPlayer::EPaused ) { + if ( &aPlayer == session().RemoteVideoPlayer() ) { + emit mUiEngine.remotePlayerPaused(); + } + if ( &aPlayer == session().LocalVideoPlayer() ) { + emit mUiEngine.localPlayerPaused(); + } + } else if ( aPlayer.LcVideoPlayerState() == MLcVideoPlayer::EUnavailable ) { + if ( &aPlayer == session().RemoteVideoPlayer() ) { + emit mUiEngine.remotePlayerUnavailable(); + } + if ( &aPlayer == session().LocalVideoPlayer() ) { + emit mUiEngine.localPlayerUnavailable(); + } + } + LC_QDEBUG( "livecomms [UI] <- LcUiEnginePrivate::doUpdate(),videoplayer" ) +} + +// ----------------------------------------------------------------------------- +// LcUiEnginePrivate::doUpdate( MLcSession& aSession ) +// ----------------------------------------------------------------------------- +// + +void LcUiEnginePrivate::doUpdate( MLcSession& aSession ) +{ + LC_QDEBUG( "livecomms [UI] -> LcUiEnginePrivate::doUpdate(),session" ) + MLcSession::TLcSessionState newState = MLcSession::EUninitialized; + newState = aSession.LcSessionState(); + LC_QDEBUG_2( "livecomms [UI] session state = ", newState ) + if ( newState == MLcSession::EOpen ) { + LC_QDEBUG( "livecomms [UI] session state is MLcSession::EOpen" ) + cancelCloseTimer(); + hideNotes( false ); + showSendVideoQueryWhenNecessary(); + startRemoteVideo(); + fillRemoteInfo( true ); + emitViewLayoutChanged(); + startSessionDurationTimer(); + + } else if ( newState == MLcSession::EReceived ) { + LC_QDEBUG( "livecomms [UI] state state is MLcSession::EReceived" ) + mRecipient = DESC_TO_QSTRING( session().RemoteDisplayName() ); + if ( mAcceptQuery && + featureSupported( CLcEngine::ELcShowAcceptQuery ) ) { + mAcceptQuery->show(); + } else { + startReceiving(); + } + } else if ( newState == MLcSession::EClosed ) { + LC_QDEBUG( "livecomms [UI] state state is MLcSession::EClosed, closing UI..." ) + emit mUiEngine.stopped(); + + } else if ( newState == MLcSession::EOpening ){ + LC_QDEBUG( "livecomms [UI] state state is MLcSession::EOpening" ) + } + LC_QDEBUG( "livecomms [UI] <- LcUiEnginePrivate::doUpdate(),session" ) +} +// End of File diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcuiengine/tsrc/ut_lcuieng/hbstubs/hbaction.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcuiengine/tsrc/ut_lcuieng/hbstubs/hbaction.h Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,37 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: Orbit stubs for Live Comms UI unit tests +* +*/ +#ifndef HBACTION_H +#define HBACTION_H + +#include +#include +#include +#include + + +class HbAction : public QAction +{ +public: + explicit HbAction(QObject *parent = 0); + explicit HbAction(const QString &text, QObject *parent = 0); + virtual ~HbAction(); + +private: // Data added for the unit testing stub + HbIcon mIcon; +}; + +#endif // HBACTION_H diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcuiengine/tsrc/ut_lcuieng/hbstubs/hbdialog.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcuiengine/tsrc/ut_lcuieng/hbstubs/hbdialog.h Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,61 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: Orbit stubs for Live Comms UI unit tests +* +*/ +#ifndef HBDIALOG_H +#define HBDIALOG_H + +#include +#include + + +class HbAction; + + +class HbDialog : public HbWidget +{ +public: + enum DismissPolicy + { + NoDismiss = 0, + TapInside = 1, + TapOutside = 2, + TapAnywhere = TapInside | TapOutside + }; + enum DefaultTimeout + { + NoTimeout, + ConfirmationNoteTimeout, + StandardTimeout, + ContextMenuTimeout + }; + + explicit HbDialog(QGraphicsItem *parent = 0); + virtual ~HbDialog(); + + void setContentWidget(QGraphicsWidget *contentWidget); + enum { Type = Hb::ItemType_Popup }; + void setTimeout( int timeout ) ; + void setDismissPolicy( HbDialog::DismissPolicy dismissPolicy ); + +public slots: + void open(QObject* receiver = 0, const char* member = 0); +protected: + + QVariant itemChange ( GraphicsItemChange change, const QVariant & value ); +}; + + +#endif // HBDIALOG_H diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcuiengine/tsrc/ut_lcuieng/hbstubs/hbinstance.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcuiengine/tsrc/ut_lcuieng/hbstubs/hbinstance.h Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,40 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: Orbit stubs for Live Comms UI unit tests +* +*/ +#ifndef HBINSTANCE_H +#define HBINSTANCE_H + +#include +#include +#include + +#define hbInstance (HbInstance::instance()) + +class HbInstance +{ +public: + static HbInstance *instance(); + QList allMainWindows() const; + +private: + HbInstance(); + ~HbInstance(); + +private: // Data added for the unit testing stub + QList mAllMainWindows; +}; + +#endif // HBINSTANCE_H diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcuiengine/tsrc/ut_lcuieng/hbstubs/hblabel.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcuiengine/tsrc/ut_lcuieng/hbstubs/hblabel.h Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,37 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: Orbit stubs for Live Comms UI unit tests +* +*/ +#ifndef HBLABEL_H +#define HBLABEL_H + +#include +#include +#include + +class QGraphicsItem; + + +class HbLabel : public HbWidget +{ +public: + explicit HbLabel (QGraphicsItem *parent = 0); + explicit HbLabel (const QString &displayText, QGraphicsItem *parent = 0); + ~HbLabel (); + + enum { Type = Hb::ItemType_Label }; +}; + +#endif // HBLABEL_H diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcuiengine/tsrc/ut_lcuieng/hbstubs/hblineedit.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcuiengine/tsrc/ut_lcuieng/hbstubs/hblineedit.h Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,39 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: Orbit stubs for Live Comms UI unit tests +* +*/ + +#ifndef HBLINEEDIT_H +#define HBLINEEDIT_H + +#include +#include +#include + + +class HbLineEdit: public HbWidget +{ +public: + + explicit HbLineEdit(const QString &text, QGraphicsItem *parent = 0); + virtual ~HbLineEdit(); + + enum { + Type = Hb::ItemType_LineEdit + }; + +}; + +#endif // HBLINEEDIT_H diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcuiengine/tsrc/ut_lcuieng/hbstubs/hbmainwindow.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcuiengine/tsrc/ut_lcuieng/hbstubs/hbmainwindow.h Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,37 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: Orbit stubs for Live Comms UI unit tests +* +*/ + +#ifndef HBMAINWINDOW_H +#define HBMAINWINDOW_H + +#include +#include +#include + +class QGraphicsWidget; +class HbAction; +class HbView; + + +class HbMainWindow : public QGraphicsView +{ +public: + explicit HbMainWindow(QWidget *parent = 0, Hb::WindowFlags windowFlags = Hb::WindowFlagNone); + ~HbMainWindow(); +}; + +#endif // HBMAINWINDOW_H diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcuiengine/tsrc/ut_lcuieng/hbstubs/hbmessagebox.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcuiengine/tsrc/ut_lcuieng/hbstubs/hbmessagebox.h Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,81 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: Orbit stubs for Live Comms UI unit tests +* +*/ + +#ifndef HBMESSAGEBOX_H +#define HBMESSAGEBOX_H + +#include +#include +#include + +class HbMessageBoxPrivate; +class HbStyleOptionMessageBox; + +class HB_WIDGETS_EXPORT HbMessageBox : public HbDialog +{ + +public: + enum MessageBoxType { + MessageTypeInformation, + MessageTypeQuestion, + MessageTypeWarning + }; + explicit HbMessageBox(MessageBoxType type=MessageTypeInformation,QGraphicsItem *parent = 0); + explicit HbMessageBox(const QString &text,MessageBoxType type =MessageTypeInformation, QGraphicsItem *parent = 0); + virtual ~HbMessageBox(); + + void setText(const QString &text); + QString text() const; + + void setIcon(const HbIcon &icon); + HbIcon icon() const; + + void setIconAlignment(Qt::Alignment align); + Qt::Alignment iconAlignment() const; + + enum { Type = Hb::ItemType_MessageBox }; + int type() const { return Type; } + +public: + static bool launchQuestionMessageBox(const QString &questionText, + const QString &primaryButtonText = tr("Yes"), + const QString &secondaryButtonText = tr("No"), + QGraphicsWidget *headWidget = 0, + QGraphicsScene *scene = 0, + QGraphicsItem *parent = 0 ); + + static void launchInformationMessageBox(const QString &informationText, + QGraphicsWidget *headWidget = 0, + QGraphicsScene *scene = 0, + QGraphicsItem *parent = 0 ); + + static void launchWarningMessageBox(const QString &warningText, + QGraphicsWidget *headWidget = 0, + QGraphicsScene *scene = 0, + QGraphicsItem *parent = 0 ); + +public slots: + void updatePrimitives(); + +protected: + HbMessageBox(HbMessageBoxPrivate &dd, QGraphicsItem *parent); + void initStyleOption(HbStyleOptionMessageBox *option) const; + void keyPressEvent(QKeyEvent *event); +}; + +#endif // HB_MESSAGEBOX_H + diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcuiengine/tsrc/ut_lcuieng/hbstubs/hbnote.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcuiengine/tsrc/ut_lcuieng/hbstubs/hbnote.h Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,37 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: Orbit stubs for Live Comms UI unit tests +* +*/ +#ifndef HBNOTE_H +#define HBNOTE_H + +#include +#include + + +class HbNote : public HbPopup +{ +public: + explicit HbNote(QGraphicsItem *parent = 0); + HbNote(const QString &text, QGraphicsItem *parent = 0); + virtual ~HbNote(); + + enum { Type = Hb::ItemType_Note }; + +protected: + QVariant itemChange(GraphicsItemChange change, const QVariant &value); +}; + +#endif // HBNOTE_H diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcuiengine/tsrc/ut_lcuieng/hbstubs/hbprogressdialog.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcuiengine/tsrc/ut_lcuieng/hbstubs/hbprogressdialog.h Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,35 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: Orbit stubs for Live Comms UI unit tests +* +*/ +#ifndef HBPROGRESSDIALOG_H +#define HBPROGRESSDIALOG_H + +#include + +class HbProgressDialog : public HbDialog +{ +public: + + enum ProgressDialogType { ProgressNote,WaitNote }; + explicit HbProgressDialog(QGraphicsItem *parent = 0); + + enum { Type = Hb::ItemType_ProgressDialog }; + +protected: + QVariant itemChange(GraphicsItemChange change, const QVariant& value); +}; + +#endif // HBPROGRESSDIALOG_H diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcuiengine/tsrc/ut_lcuieng/hbstubs/hbstubs.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcuiengine/tsrc/ut_lcuieng/hbstubs/hbstubs.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,377 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + +// Orbit classes +#include +#include +#include +#include +#include +#include +#include +#include +#include + +// Static data that simulates HbInstance and HbMainWindow +static HbInstance* hbInstanceSingleton = 0; + +// HbInstance + +// ----------------------------------------------------------------------------- +// HbInstance::instance +// ----------------------------------------------------------------------------- +// +HbInstance* HbInstance::instance() +{ + if (!hbInstanceSingleton) + hbInstanceSingleton = new HbInstance; + return hbInstanceSingleton; +} + +// ----------------------------------------------------------------------------- +// HbInstance::allMainWindows +// ----------------------------------------------------------------------------- +// +QList HbInstance::allMainWindows() const +{ + return mAllMainWindows; +} + +// ----------------------------------------------------------------------------- +// HbInstance::HbInstance +// ----------------------------------------------------------------------------- +// +HbInstance::HbInstance() +{ + HbMainWindow *mainWindow = new HbMainWindow; + mAllMainWindows.append(mainWindow); +} + +// ----------------------------------------------------------------------------- +// HbInstance::~HbInstance +// ----------------------------------------------------------------------------- +// +HbInstance::~HbInstance() +{ + mAllMainWindows.clear(); +} + + +// HbMainWindow + +// ----------------------------------------------------------------------------- +// HbMainWindow::HbMainWindow +// ----------------------------------------------------------------------------- +// +HbMainWindow::HbMainWindow(QWidget *parent,Hb::WindowFlags windowFlags) +: QGraphicsView(parent) +{ + Q_UNUSED(windowFlags) +} + +// ----------------------------------------------------------------------------- +// HbMainWindow::~HbMainWindow +// ----------------------------------------------------------------------------- +// +HbMainWindow::~HbMainWindow() +{ +} + +// HbDialog + +// ----------------------------------------------------------------------------- +// HbDialog::HbDialog +// ----------------------------------------------------------------------------- +// +HbDialog::HbDialog(QGraphicsItem *parent) : HbWidget(parent) +{ +} + +// ----------------------------------------------------------------------------- +// HbDialog::~HbDialog +// ----------------------------------------------------------------------------- +// +HbDialog::~HbDialog() +{ +} + +// ----------------------------------------------------------------------------- +// HbDialog::open() +// ----------------------------------------------------------------------------- +// +void HbDialog::open(QObject* receiver, const char* member) +{ + Q_UNUSED(receiver); + Q_UNUSED(member); +} + +// ----------------------------------------------------------------------------- +// HbDialog::setContentWidget +// ----------------------------------------------------------------------------- +// +void HbDialog::setContentWidget(QGraphicsWidget *contentWidget) +{ + Q_UNUSED(contentWidget) +} + +// ----------------------------------------------------------------------------- +// HbDialog::itemChange +// ----------------------------------------------------------------------------- +// +QVariant HbDialog::itemChange(GraphicsItemChange change, const QVariant& value) +{ + Q_UNUSED(change) + return QVariant(value); +} + +// ----------------------------------------------------------------------------- +// HbDialog::setTimeout +// ----------------------------------------------------------------------------- +// +void HbDialog::setTimeout(int timeout ) +{ + Q_UNUSED(timeout) +} + +// ----------------------------------------------------------------------------- +// HbDialog::setDismissPolicy +// ----------------------------------------------------------------------------- +// +void HbDialog::setDismissPolicy( HbDialog::DismissPolicy dismissPolicy ) +{ + Q_UNUSED(dismissPolicy) +} + +// HbAction + +// ----------------------------------------------------------------------------- +// HbAction::HbAction +// ----------------------------------------------------------------------------- +// +HbAction::HbAction(QObject *parent) +: QAction(parent), mIcon(QString()) +{ +} + +// ----------------------------------------------------------------------------- +// HbAction::HbAction +// ----------------------------------------------------------------------------- +// +HbAction::HbAction(const QString &text, QObject *parent) +: QAction(text,parent), mIcon(QString()) +{ +} + +// ----------------------------------------------------------------------------- +// HbAction::~HbAction +// ----------------------------------------------------------------------------- +// +HbAction::~HbAction() +{ +} + + +// HbLabel + +// ----------------------------------------------------------------------------- +// HbLabel::HbLabel +// ----------------------------------------------------------------------------- +// +HbLabel::HbLabel(QGraphicsItem *parent) : HbWidget(parent) +{ +} + +// ----------------------------------------------------------------------------- +// HbLabel::HbLabel +// ----------------------------------------------------------------------------- +// +HbLabel::HbLabel(const QString &displayText, QGraphicsItem *parent) +: HbWidget(parent) +{ + Q_UNUSED(displayText) +} + +// ----------------------------------------------------------------------------- +// HbLabel::~HbLabel +// ----------------------------------------------------------------------------- +// +HbLabel::~HbLabel() +{ +} + + +// ----------------------------------------------------------------------------- +// HbProgressDialog + +// ----------------------------------------------------------------------------- +// HbProgressDialog::HbProgressDialog +// ----------------------------------------------------------------------------- +// +HbProgressDialog::HbProgressDialog(QGraphicsItem *parent) : HbDialog(parent) +{ +} + +// ----------------------------------------------------------------------------- +// HbProgressDialog::itemChange +// ----------------------------------------------------------------------------- +// +QVariant HbProgressDialog::itemChange(GraphicsItemChange change, const QVariant& value) +{ + Q_UNUSED(change) + return QVariant(value); +} + + +// HbLineEdit + +// ----------------------------------------------------------------------------- +// HbLineEdit::HbLineEdit +// ----------------------------------------------------------------------------- +// +HbLineEdit::HbLineEdit(const QString &text, QGraphicsItem *parent) +: HbWidget(parent) +{ + Q_UNUSED(text) +} + +// ----------------------------------------------------------------------------- +// HbLineEdit::~HbLineEdit +// ----------------------------------------------------------------------------- +// +HbLineEdit::~HbLineEdit() +{ +} + +// HbWidget + +// ----------------------------------------------------------------------------- +// HbWidget::HbWidget +// ----------------------------------------------------------------------------- +// +HbWidget::HbWidget(QGraphicsItem *parent, Qt::WindowFlags wFlags) +: QGraphicsWidget(parent,wFlags) +{ +} + +// ----------------------------------------------------------------------------- +// HbWidget::~HbWidget +// ----------------------------------------------------------------------------- +// +HbWidget::~HbWidget() +{ +} + +// ----------------------------------------------------------------------------- +// HbWidget::clearActions +// ----------------------------------------------------------------------------- +// +void HbWidget::clearActions() +{ +} + +// ----------------------------------------------------------------------------- +// HbWidget::itemChange +// ----------------------------------------------------------------------------- +// +QVariant HbWidget::itemChange(GraphicsItemChange change, const QVariant& value) +{ + Q_UNUSED(change) + return QVariant(value); +} + + +// HbView + +// ----------------------------------------------------------------------------- +// HbView::HbView +// ----------------------------------------------------------------------------- +// +HbView::HbView(QGraphicsItem *parent) : HbWidget(parent) +{ +} + +// ----------------------------------------------------------------------------- +// HbView::~HbView +// ----------------------------------------------------------------------------- +// +HbView::~HbView() +{ +} + +// ----------------------------------------------------------------------------- +// HbView::menu +// ----------------------------------------------------------------------------- +// +HbMenu* HbView::menu() const +{ + return 0; +} + +// ----------------------------------------------------------------------------- +// HbView::toolBar +// ----------------------------------------------------------------------------- +// +HbToolBar* HbView::toolBar() const +{ + return 0; +} + +// ----------------------------------------------------------------------------- +// HbView::setTitle +// ----------------------------------------------------------------------------- +// +void HbView::setTitle(const QString &title) +{ + Q_UNUSED(title) +} + +// ----------------------------------------------------------------------------- +// HbView::setContentFullScreen +// ----------------------------------------------------------------------------- +// +void HbView::setContentFullScreen(bool /*enable*/) +{ +} + +// ----------------------------------------------------------------------------- +// HbView::navigationAction +// ----------------------------------------------------------------------------- +// +HbAction *HbView::navigationAction() const +{ + return 0; +} + +// ----------------------------------------------------------------------------- +// HbView::setNavigationAction +// ----------------------------------------------------------------------------- +// +void HbView::setNavigationAction(HbAction *action) +{ + Q_UNUSED(action); +} + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +QString hbTrId(const char *id, int n) +{ + Q_UNUSED(n); + return QString(id); +} diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcuiengine/tsrc/ut_lcuieng/hbstubs/hbview.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcuiengine/tsrc/ut_lcuieng/hbstubs/hbview.h Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,52 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: Orbit stubs for Live Comms UI unit tests +* +*/ +#ifndef HBVIEW_H +#define HBVIEW_H + +#include +#include +#include + +class HbMenu; +class HbToolBar; +class HbAction; + +class HbView : public HbWidget +{ +public: + explicit HbView(QGraphicsItem *parent = 0); + virtual ~HbView(); + + HbMenu *menu() const; + HbToolBar *toolBar() const; + + void setContentFullScreen(bool enable = true); + HbAction *navigationAction() const; + void setNavigationAction(HbAction *action); + +public slots: + void setTitle(const QString &title); + +private: // Data added for the unit testing stub + HbMenu* mMenu; + HbToolBar* mToolBar; + bool mTitlePaneItem; + bool mIndicatorItems; + bool mSecondarySoftKeyItem; +}; + +#endif // HBVIEW_H diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcuiengine/tsrc/ut_lcuieng/hbstubs/hbwidget.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcuiengine/tsrc/ut_lcuieng/hbstubs/hbwidget.h Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,40 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: Orbit stubs for Live Comms UI unit tests +* +*/ + +#ifndef HBWIDGET_H +#define HBWIDGET_H + +#include +#include +#include +#include + +class HbEvent; + + +class HbWidget : public QGraphicsWidget +{ +public: + explicit HbWidget( QGraphicsItem *parent=0, Qt::WindowFlags wFlags=0 ); + virtual ~HbWidget(); + void clearActions(); + +protected: + QVariant itemChange ( GraphicsItemChange change, const QVariant & value ); +}; + +#endif // HBWIDGET_H diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcuiengine/tsrc/ut_lcuieng/hbstubs/qthighway_stub.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcuiengine/tsrc/ut_lcuieng/hbstubs/qthighway_stub.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,139 @@ +/* +* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + +#include +#include +#include +#include +#include "qthighway_stub_helper.h" + +QString qtHighwayStubService; +QString qtHighwayStubMessage; +bool qtHighwayStubIsBg; + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// + +void QtHighwayStubHelper::reset() +{ + qtHighwayStubService.clear(); + qtHighwayStubMessage.clear(); + qtHighwayStubIsBg = false; +} + +QString QtHighwayStubHelper::service() +{ + return qtHighwayStubService; +} + +QString QtHighwayStubHelper::message() +{ + return qtHighwayStubMessage; +} + +bool QtHighwayStubHelper::isAtBg() +{ + return qtHighwayStubIsBg; +} + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +XQServiceProvider::XQServiceProvider( const QString& service, QObject *parent ) +{ + Q_UNUSED(service); + Q_UNUSED(parent); +} + +XQServiceProvider::~XQServiceProvider() +{ + +} + +void XQServiceProvider::SetPlugin(QObject* impl_plugin) +{ + Q_UNUSED(impl_plugin); +} + +void XQServiceProvider::publishAll() +{ + +} + +int XQServiceProvider::setCurrentRequestAsync() +{ + return 0; +} + +bool XQServiceProvider::completeRequest(int index, const QVariant& retValue) +{ + Q_UNUSED(index); + Q_UNUSED(retValue); + return true; +} + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +XQServiceRequest::XQServiceRequest( + const QString& service, const QString& message, const bool& synchronous) +{ + qtHighwayStubService = service; + qtHighwayStubMessage = message; +} + +XQServiceRequest::~XQServiceRequest() +{ + +} + + +void XQServiceRequest::setArguments(const QList &arguments) +{ + Q_UNUSED(arguments) +} + +QString XQServiceRequest::service() const +{ + return qtHighwayStubService; +} + +QString XQServiceRequest::message() const +{ + return qtHighwayStubMessage; +} + +bool XQServiceRequest::send(QVariant& retValue) +{ + Q_UNUSED(retValue); + return true; +} +void XQServiceRequest::addArg(const QVariant& v) +{ + Q_UNUSED(v); +} + +void XQServiceUtil::toBackground(bool value) +{ + qtHighwayStubIsBg = value; +} diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcuiengine/tsrc/ut_lcuieng/hbstubs/qthighway_stub_helper.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcuiengine/tsrc/ut_lcuieng/hbstubs/qthighway_stub_helper.h Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,28 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + +/** +* Helper class to control logcli stub behavior +* +*/ +class QtHighwayStubHelper{ + public: + static void reset(); + static QString service(); + static QString message(); + static bool isAtBg(); +}; diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcuiengine/tsrc/ut_lcuieng/inc/ut_lcactivitymanager.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcuiengine/tsrc/ut_lcuieng/inc/ut_lcactivitymanager.h Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,61 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ +#ifndef UT_LCACTIVITYMANAGER_H +#define UT_LCACTIVITYMANAGER_H + +#include +class LcActivityManager; + + +class UT_LcActivityManager : public QObject +{ + Q_OBJECT + +private slots: + +/* + * In addition, there are four private slots that are not treated as testfunctions. + * They will be executed by the testing framework and can be used to initialize and clean up + * either the entire test or the current test function. + * + * initTestCase() will be called before the first testfunction is executed. + * cleanupTestCase() will be called after the last testfunction was executed. + * init() will be called before each testfunction is executed. + * cleanup() will be called after every testfunction. +*/ + void initTestCase(); + void cleanupTestCase(); + void init(); + void cleanup(); + +private slots: //test methods + + void testConstructor(); + void testInitInactivityTimeout(); + void testEnableActivitySimulation(); + void testIsActivitySimulationEnabled(); + void testTimerEvent(); + +private: + + LcActivityManager* mActivityManager; +}; + + + + +#endif //UT_LCACTIVITYMANAGER_H diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcuiengine/tsrc/ut_lcuieng/inc/ut_lcuiengine.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcuiengine/tsrc/ut_lcuieng/inc/ut_lcuiengine.h Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,110 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ +#ifndef UT_LCUIENGINE_H +#define UT_LCUIENGINE_H + +#include +class LcUiEngine; +class HbProgressDialog; +class HbDialog; +class HbMainWindow; +class LcSignalSink; + + +class UT_LcUiEngine : public QObject +{ + Q_OBJECT + +private slots: + +/* + * In addition, there are four private slots that are not treated as testfunctions. + * They will be executed by the testing framework and can be used to initialize and clean up + * either the entire test or the current test function. + * + * initTestCase() will be called before the first testfunction is executed. + * cleanupTestCase() will be called after the last testfunction was executed. + * init() will be called before each testfunction is executed. + * cleanup() will be called after every testfunction. +*/ + void initTestCase(); + void cleanupTestCase(); + void init(); + void cleanup(); + +private slots: //test methods + + void testConstructor(); + void testFeatureSupported(); + void testEstablishSession(); + void testTerminateSession(); + void testSetWindowRect(); + void testEnableWindow(); + void testPlay(); + void testPause(); + void testEnableSpeaker(); + void testMuteMic(); + void testStartLiveContent(); + void testStart(); + void testSetContentAreas(); + void testSetOrientation(); + void testToggleMute(); + void testToggleSpeaker(); + void testToggleDisableCamera(); + void testToggleCamera(); + void testSessionStateChanged(); + void testPlayerStateChanged(); + void testStartReceiving(); + void testStartPlayback(); + void testStop(); + void testSetViewLayout(); + void testHideNotes(); + void testSetUiComponents(); + void testZoom(); + void testBlockUi(); + void testCloseTimer(); + void testfullScreenMode(); + void testsetFullScreenMode(); + void testTimerEvent(); + void testFillRemoteInfo(); + void testUpdateSession(); + void testIsLocalPlayerPlaying(); + void testIsRemotePlayerPlaying(); + void testMinimized(); + void testMaximized(); + void testIsMinimized(); + void testHandleForegroundStatus(); + void testSendDialTone(); + void testShareVideoIsAllowedShownAutomatically(); + void testShareVideoIsNotAllowedShown(); + void testShareVideoPermissionAskedAlways(); + void testVolumeLevelChanged(); + +private: + + LcUiEngine* mEngine; + HbProgressDialog* mInvitingNote; + HbProgressDialog* mWaitingNote; + HbDialog* mAcceptQuery; + HbDialog* mRecipientQuery; + HbDialog* mShareOwnVideoQuery; +}; + + + + +#endif //UT_LCUIENGINE_H diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcuiengine/tsrc/ut_lcuieng/lcstub/data/10203399.rss --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcuiengine/tsrc/ut_lcuieng/lcstub/data/10203399.rss Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,40 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + +#include "registryinfov2.rh" + +RESOURCE REGISTRY_INFO theInfo + { + resource_format_version = RESOURCE_FORMAT_VERSION_2; + dll_uid = 0x10203399; + interfaces = + { + INTERFACE_INFO + { + interface_uid = 0x20021340; + implementations = + { + IMPLEMENTATION_INFO + { + implementation_uid = 0x10203399; + version_no = 1; + default_data = "MultimediaSharing"; + } + }; + } + }; + } diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcuiengine/tsrc/ut_lcuieng/lcstub/group/bld.inf --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcuiengine/tsrc/ut_lcuieng/lcstub/group/bld.inf Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,23 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + +#include + +PRJ_MMPFILES +lcenginepluginstub.mmp + + diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcuiengine/tsrc/ut_lcuieng/lcstub/group/lcenginepluginstub.mmp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcuiengine/tsrc/ut_lcuieng/lcstub/group/lcenginepluginstub.mmp Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,55 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + + + +#include + +TARGET lcenginepluginstub.dll +TARGETTYPE PLUGIN +UID 0x10009d8d 0x10203399 +VENDORID VID_DEFAULT +CAPABILITY CAP_ECOM_PLUGIN + + +SOURCEPATH ../data +START RESOURCE 10203399.rss +TARGET lcenginepluginstub.rsc +END + +SOURCEPATH ../src +SOURCE dllentry.cpp +SOURCE lcvideoplayerstub.cpp +SOURCE lcenginestub.cpp +SOURCE lcsessionstub.cpp + +USERINCLUDE ../inc +USERINCLUDE ../../../../../../mmsharing/inc +USERINCLUDE ../../../../../../inc + + + +APP_LAYER_SYSTEMINCLUDE +SYSTEMINCLUDE /epoc32/include/ecom + +LIBRARY euser.lib +LIBRARY ecom.lib +LIBRARY insock.lib + + + + diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcuiengine/tsrc/ut_lcuieng/lcstub/inc/centralrepository_stub_helper.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcuiengine/tsrc/ut_lcuieng/lcstub/inc/centralrepository_stub_helper.h Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,33 @@ +/* +* Copyright (c) 2004-2006 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: +* +*/ + + +#ifndef __CENTRALREPOSITORYHELPER_H__ +#define __CENTRALREPOSITORYHELPER_H__ + +class CentralRepositoryStubHelper{ + +public: // Stub data + + static void reset(); + static void setFailCode(TInt err); + static void setCurrentVal(TInt val); + static TInt currentVal(); + +}; + +#endif // __CENTRALREPOSITORYHELPER_H__ diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcuiengine/tsrc/ut_lcuieng/lcstub/inc/lcenginestub.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcuiengine/tsrc/ut_lcuieng/lcstub/inc/lcenginestub.h Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,62 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + +#ifndef LCENGINESTUB_H +#define LCENGINESTUB_H + + +extern void lcutStub_LcEngine_reset(); +extern void lcutStub_LcEngine_setFailure( int failure ); +extern int lcutStub_LcEngine_failure(); +extern void lcutStub_LcEngine_setLcFeatureSupported( bool supported ); + +// INCLUDES +#include "lcengine.h" + +// FORWARD DECLARATIONS +class CLcSession; +class MLcUiProvider; + +class CLcEngineStub : public CLcEngine + { + public: + + static CLcEngineStub* NewL(); + ~CLcEngineStub(); + + public: // From CLcEngine + + MLcSession& Session(); + + TBool IsFeatureSupported( TLcFeature aLcFeature ); + + private: // Constructors + + CLcEngineStub(); + void ConstructL(); + + private: // New functions + + CLcSession* CreateMusSessionL( int aUseCase ); + + public: // Data + + CLcSession* iSession; + }; +#endif // LCENGINESTUB_H + +// end of file diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcuiengine/tsrc/ut_lcuieng/lcstub/inc/lcsessionstub.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcuiengine/tsrc/ut_lcuieng/lcstub/inc/lcsessionstub.h Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,222 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + +#ifndef LCSESSIONSTUB_H +#define LCSESSIONSTUB_H + +#include +#include +#include + +class MLcUiProvider; + +extern bool lcutStub_LcSession_expectCall( const QString& call, int callNdx = 0); +extern void lcutStub_LcSession_reset(); +extern MLcUiProvider* lcutStub_LcSession_lcUiProvider(); + +const char lcutStub_LcSession_NoCall[] = "NOCALL"; +const char lcutStub_LcSession_establishSession[] = "LcEngine::EstablishLcSessionL"; +const char lcutStub_LcSession_terminateSession[] = "LcEngine::TerminateLcSessionL"; +const char lcutStub_LcSession_updateSession[] = "LcEngine::UpdateLcSessionL"; + +_LIT( KLcStubLocalDisplayName, "local"); +_LIT( KLcStubRemoteDisplayName, "remote"); +_LIT( KLcStubRemoteDetails, "112233459"); + +// INCLUDES +#include "lcsession.h" + +#include +#include + +// FORWARD DECLARATIONS +class MLcSessionObserver; +class MLcUiProvider; +class CLcVideoPlayer; + + +// CLASS DECLARATION +/** +* A class representing a Live Comms session. +*/ +class CLcSession : public CBase, + public MLcSession + { +public: + /** + * Creates new CLcSession. + * + * @return CLcSession* New instanse of specified class + */ + static CLcSession* NewL(); + + +public: + + /** + * Destructor + */ + ~CLcSession(); + +public: // from MLcSession + + /** + * Returns the current session state. + * @return the session state + */ + TLcSessionState LcSessionState() const; + + /** + * Sets the observer for the session related events. + * @param aObserver the observer + */ + void SetLcSessionObserver( MLcSessionObserver* aObserver ); + + /** + * Sets the callback for the UI prompts. + * @param aUiProvider callback for UI prompts + */ + void SetLcUiProvider( MLcUiProvider* aUiProvider ); + + /** + * Establishes the session. + * In case of a MO session initiates the session negotiation. + * In case of a MT session accepts the incoming session. + */ + void EstablishLcSessionL(); + + /** + * Terminates the session. + * Can be used for terminating an existing session as well as + * cancelling a MO session that has not yet been established. + * Can also be used for rejecting an incoming session. + */ + void TerminateLcSessionL(); + + /** + * Returns the video player for the received media. + * Is present if the session contains video + * received from the remote participant. + * @return the remote video player or NULL if not present + */ + MLcVideoPlayer* RemoteVideoPlayer(); + + /** + * Returns the video player for the media that is being sent. + * Is present if the session contains outgoing video. + * @return the local video player or NULL if not present + */ + MLcVideoPlayer* LocalVideoPlayer(); + + /** + * Returns the own display name for the session. + * @return the local display name + */ + const TDesC& LocalDisplayName(); + + /** + * Returns the remote party's display name for the session. + * @return the remote display name + */ + const TDesC& RemoteDisplayName(); + + /** + * Sets a parameter for the session. + * The parameters can be plug-in specific. + * @param aId the identifier for the parameter + * @param aValue the value for the parameter + */ + TInt SetParameter( TInt aId, TInt aValue ); + + /** + * Returns a value for a session parameter. + * @param aId the identifier for the parameter + * @return the value for the parameter or an error if not present + */ + TInt ParameterValue( TInt aId ); + + /** + * Checks whether application should be started in background mode. + * In background mode session will be pre-set up without user + * interaction and will be in paused state. + * @return ETrue if background mode should be used + */ + TBool IsBackgroundStartup(); + + /** + * Engine can be informed about application foreground status via + * this method. + * @param aIsForeground ETrue if application is at foreground, EFalse + * if at background + * @return KErrNone if succesfully handled + */ + TInt SetForegroundStatus( TBool aIsForeground ); + + /** + * Returns remote party details for the session + * @return remote party details or KNullDesC if those are not known + */ + const TDesC& RemoteDetails(); + + /** + * Updates established session. + * All the changes, if they are not yet delivered, to players, windows + * and session parameters has been commited after the call. + */ + void UpdateLcSessionL(); + + /** + * Send DTMF signals. + * @param aKey Key pressed from dialpad. Key can be [0-9],*,#,A,B,C,D. + * which is 16 key combination of DTMF. + * Send DTMF signals to remote party. + * @return ETrue upon success else EFalse. + */ + TBool SendDialTone( TChar aKey); + + +protected: + + /** + * Constructor + */ + CLcSession( ); + + /** + * Second-phase constructor + */ + void ConstructL(); +public: + + MLcSessionObserver* iSessionObserver; + MLcUiProvider* iLcUiProvider; + HBufC* iLocalDisplayName; + HBufC* iRemoteDisplayName; + HBufC* iRemoteDetails; + CLcVideoPlayer* iLocalPlayer; + CLcVideoPlayer* iRemotePlayer; + TBool iIsForeground; + TBool iForegroundChange; + TLcSessionState iState; + + QMap mParams; + + }; + +#endif // LCSESSIONSTUB_H + +// end of file diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcuiengine/tsrc/ut_lcuieng/lcstub/inc/lcvideoplayerstub.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcuiengine/tsrc/ut_lcuieng/lcstub/inc/lcvideoplayerstub.h Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,217 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + +#ifndef LCVIDEOPLAYERSTUB_H +#define LCVIDEOPLAYERSTUB_H + +#include // CBase + +// USER +#include "lcvideoplayer.h" +#include "lcaudiocontrol.h" +#include "lcwindow.h" +#include "lccameracontrol.h" +#include "lczoomcontrol.h" +#include "lcbrightnesscontrol.h" + +class MLcSourceFileControl; +class MLcDestinationFileControl; + + +#include + +extern bool lcutStub_LcPlayer_expectCall( const QString& call, int callNdx = 0); +extern void lcutStub_LcPlayer_reset(); +extern void lcutStub_LcPlayer_asyncCompletion( bool async ); + +const char lcutStub_LcPlayer_NoCall[] = "NOCALL"; +const char lcutStub_LcPlayer_LcPlayL[] = "LcPlayer::LcPlayL"; +const char lcutStub_LcPlayer_LcPauseL[] = "LcPlayer::LcPauseL"; +const char lcutStub_LcPlayer_SetLcWindowRectL[] = "LcWindow::SetLcWindowRectL"; +const char lcutStub_LcPlayer_EnableLcWindowL[] = "LcPlayer::EnableLcWindowL"; +const char lcutStub_LcPlayer_DecreaseLcBrightnessL[] = "LcPlayer::DecreaseLcBrightnessL"; +const char lcutStub_LcPlayer_EnableLcLoudspeakerL[] = "LcPlayer::EnableLcLoudspeakerL"; +const char lcutStub_LcPlayer_LcZoomInL[] = "LcPlayer::LcZoomInL"; +const char lcutStub_LcPlayer_LcZoomOutL[] = "LcPlayer::LcZoomOutL"; +const char lcutStub_LcPlayer_MuteLcAudioL[] = "LcPlayer::MuteLcAudioL"; +const char lcutStub_LcPlayer_MuteLcMicL[] = "LcPlayer::MuteLcMicL"; +const char lcutStub_LcPlayer_SetLcBrightnessL[] = "LcPlayer::SetLcBrightnessL"; +const char lcutStub_LcPlayer_IncreaseLcBrightnessL[] = "LcPlayer::IncreaseLcBrightnessL"; +const char lcutStub_LcPlayer_SetLcZoomValueL[] = "LcPlayer::SetLcZoomValueL"; +const char lcutStub_LcPlayer_ToggleLcCameraL[] = "LcPlayer::ToggleLcCameraL"; +const char lcutStub_LcPlayer_SetLcWindowOrientationL[] = "LcWindow::SetLcWindowOrientationL"; + + +// CLASS DECLARATION +/** +* +*/ +class CLcVideoPlayer : public CBase, + public MLcVideoPlayer, + public MLcAudioControl, + public MLcWindow, + public MLcCameraControl, + public MLcZoomControl, + public MLcBrightnessControl + { + public: + /** + * Creates new CLcSession. + * + * @return CLcSession* New instanse of specified class + */ + static CLcVideoPlayer* NewL(); + + public: + + /** + * Destructor + */ + ~CLcVideoPlayer(); + + + public: // from MLcVideoPlayer + + TLcVideoPlayerState LcVideoPlayerState() const; + + TBool LcIsPlayingL(); + + void LcPlayL(TLcVideoPlayerSource aSource=ECameraSource ); + + void LcPauseL(); + + MLcWindow* LcWindow(); + + MLcCameraControl* LcCameraControl(); + + MLcSourceFileControl* LcSourceFileControl(); + + MLcDestinationFileControl* LcDestinationFileControl(); + + MLcAudioControl* LcAudioControl(); + + MLcZoomControl* LcZoomControl(); + + MLcBrightnessControl* LcBrightnessControl(); + +public: // from MLcWindow + + void EnableLcWindowL( TBool aEnable ); + + TBool IsLcWindowEnabled(); + + void SetLcWindowRectL( TRect aRect ); + + TRect LcWindowRect(); + + void SetLcWindowOrientationL( + TLcWindowOrientation aOrientation ); + + TLcWindowOrientation LcWindowOrientationL(); + +public: // from MLcAudioControl + + TBool IsLcAudioMutedL(); + + void MuteLcAudioL( TBool aMute ); + + TBool IsLcMicMutedL(); + + void MuteLcMicL( TBool aMute ); + + TBool IsLcLoudspeakerEnabled(); + + void EnableLcLoudspeakerL( TBool aEnabled ); + + TBool IsEnablingLcLoudspeakerAllowed(); + + TInt LcVolumeL(); + + void SetLcVolumeL( TInt aValue ); + + void IncreaseLcVolumeL(); + + void DecreaseLcVolumeL(); + + +public: //from MLcCameraControl + + TInt LcCameraCountL(); + TInt CurrentLcCameraIndex(); + void ToggleLcCameraL(); + +public: //from MLcZoomControl + + TInt MinLcZoomL(); + TInt MaxLcZoomL(); + TInt LcZoomValueL(); + void SetLcZoomValueL( TInt aValue ); + void LcZoomInL(); + void LcZoomOutL(); + +public: //from MLcBrightnessControl + + TInt MinLcBrightnessL(); + TInt MaxLcBrightnessL(); + TInt LcBrightnessL(); + void SetLcBrightnessL( TInt aValue ); + void IncreaseLcBrightnessL(); + void DecreaseLcBrightnessL(); + + protected: // CONSTRUCTORS + + /** + * Constructor + * + */ + CLcVideoPlayer( ); + + /** + * Second-phase constructor + * + */ + void ConstructL(); + + + public: + + /** + * Drawing area rect. + */ + TRect iRect; + + MLcWindow::TLcWindowOrientation iOrientation; + + TBool iWindowEnabled; + + TBool iMuted; + + TBool iMicMuted; + + TBool iLoudspeakerEnabled; + + TBool iEnablingLoudspeakerAllowed; + + TInt iVolume; + + MLcVideoPlayer::TLcVideoPlayerState iState; + TBool iPlaying; + + + }; + +#endif //LCVIDEOPLAYERSTUB_H diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcuiengine/tsrc/ut_lcuieng/lcstub/src/DllEntry.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcuiengine/tsrc/ut_lcuieng/lcstub/src/DllEntry.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,42 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + +#include "lcenginestub.h" +#include +#include + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +const TImplementationProxy KMusEnginePluginImplementationTableStub[] = + { + IMPLEMENTATION_PROXY_ENTRY( 0x20021340, CLcEngineStub::NewL ) + }; + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +EXPORT_C const TImplementationProxy* ImplementationGroupProxy( TInt& aTableCount ) + { + aTableCount = sizeof( KMusEnginePluginImplementationTableStub ) / + sizeof( TImplementationProxy ); + + return KMusEnginePluginImplementationTableStub; + } diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcuiengine/tsrc/ut_lcuieng/lcstub/src/centralrepository_stub.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcuiengine/tsrc/ut_lcuieng/lcstub/src/centralrepository_stub.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,102 @@ +/* +* 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: +* +*/ + + +#include +#include "centralrepository_stub_helper.h" + +TInt mFailCode = KErrNone; +TInt mCurrentVal = 0; + +void CentralRepositoryStubHelper::reset() +{ + mFailCode = KErrNone; + mCurrentVal = 0; +} +void CentralRepositoryStubHelper::setFailCode(TInt err) +{ + mFailCode = err; +} +void CentralRepositoryStubHelper::setCurrentVal(TInt val) +{ + mCurrentVal = val; +} +TInt CentralRepositoryStubHelper::currentVal() +{ + return mCurrentVal; +} + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +EXPORT_C CRepository* CRepository::NewL( TUid aRepositoryUid ) + { + CRepository* self = CRepository::NewLC( aRepositoryUid ); + CleanupStack::Pop( self ); + return self; + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +CRepository* CRepository::NewLC( TUid /*aRepositoryUid*/ ) + { + CRepository* self = new (ELeave) CRepository(); + if (mFailCode == KErrNoMemory) { + User::Leave(KErrNoMemory); + } + CleanupStack::PushL( self ); + return self; + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +CRepository::~CRepository() + { + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +TInt CRepository::Get(TUint32 /*aKey*/, TInt& aValue) + { + aValue = mCurrentVal; + return mFailCode; + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +TInt CRepository::Set(TUint32 /*aKey*/, TInt aValue) + { + if ( mFailCode == KErrNone ) + { + mCurrentVal = aValue; + } + return mFailCode; + } + + diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcuiengine/tsrc/ut_lcuieng/lcstub/src/lcenginestub.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcuiengine/tsrc/ut_lcuieng/lcstub/src/lcenginestub.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,158 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ +#include "lcenginestub.h" +#include "lcsessionstub.h" +#include "mussessionproperties.h" +#include "lcsessionobserver.h" +#include "lcuiprovider.h" +#include "lcvideoplayerstub.h" +#include "musmanagercommon.h" + +static int lcutStub_LcEngine_failureValue = 0; +static bool lcutStub_LcEngine_lcFeatureSupported = false; + + +TAny* REComSession::CreateImplementationL( TUid /*aInterfaceUid*/, + TInt32 /*aKeyOffset*/, + const TEComResolverParams& /*aResolutionParameters*/ ) +{ + User::LeaveIfError( lcutStub_LcEngine_failureValue ); + return CLcEngineStub::NewL(); +} + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +CLcEngineStub* CLcEngineStub::NewL() + { + + CLcEngineStub* self = new( ELeave )CLcEngineStub(); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + return self; + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +CLcEngineStub::~CLcEngineStub() + { + delete iSession; + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +CLcEngineStub::CLcEngineStub( ) + { + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CLcEngineStub::ConstructL() + { + iSession = CLcSession::NewL(); + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +MLcSession& CLcEngineStub::Session() + { + return *iSession; + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +TBool CLcEngineStub::IsFeatureSupported( TLcFeature aLcFeature ) + { + return lcutStub_LcEngine_lcFeatureSupported; + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +CLcSession* CLcEngineStub::CreateMusSessionL( int aUseCase ) + { + CLcSession* session; + switch ( aUseCase ) + { + case MultimediaSharing::EMusReceive: + { + session = CLcSession::NewL(); + session->iRemotePlayer = CLcVideoPlayer::NewL(); + break; + } + + case MultimediaSharing::EMusLiveVideo: + { + session = CLcSession::NewL(); + session->iLocalPlayer = CLcVideoPlayer::NewL(); + break; + } + case MultimediaSharing::EMusTwoWayVideo: + case MultimediaSharing::EMusReceiveTwoWayVideo: + { + session = CLcSession::NewL(); + session->iLocalPlayer = CLcVideoPlayer::NewL(); + session->iRemotePlayer = CLcVideoPlayer::NewL(); + break; + } + + default: + User::Leave( KErrNotSupported ); + break; + } + return session; + } + + +//stub control + + +void lcutStub_LcEngine_reset() + { + lcutStub_LcEngine_failureValue = 0; + lcutStub_LcEngine_lcFeatureSupported = false; + } + +void lcutStub_LcEngine_setFailure( int failure ) + { + lcutStub_LcEngine_failureValue = failure; + } + +int lcutStub_LcEngine_failure() + { + return lcutStub_LcEngine_failureValue; + } + +void lcutStub_LcEngine_setLcFeatureSupported( bool supported ) + { + lcutStub_LcEngine_lcFeatureSupported = supported; + } + +// End of File diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcuiengine/tsrc/ut_lcuieng/lcstub/src/lcsessionstub.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcuiengine/tsrc/ut_lcuieng/lcstub/src/lcsessionstub.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,260 @@ +/* +* 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: +* +*/ + + +// USER +#include "lcenginestub.h" +#include "lcsessionstub.h" +#include "lcvideoplayer.h" +#include "lcsessionobserver.h" +#include "lcuiprovider.h" +#include "lcvideoplayerstub.h" + +// SYSTEM +#include + + +static QStringList lcutStub_LcSession_calledMethods; +static MLcUiProvider* lcutStub_LcSession_uiProvider = 0; + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +CLcSession* CLcSession::NewL( ) + { + CLcSession* self = new( ELeave ) CLcSession( ); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + return self; + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +CLcSession::~CLcSession() + { + //delete iRemoteDisplayName; + delete iRemotePlayer; + delete iLocalPlayer; + delete iLocalDisplayName; + delete iRemoteDisplayName; + delete iRemoteDetails; + } + +// ----------------------------------------------------------------------------- +// From MLcSession +// ----------------------------------------------------------------------------- +// + + MLcSession::TLcSessionState CLcSession::LcSessionState() const + { + return iState; + } + +// ----------------------------------------------------------------------------- +// From MLcSession +// ----------------------------------------------------------------------------- +// +void CLcSession::SetLcSessionObserver( MLcSessionObserver* aObserver ) + { + iSessionObserver = aObserver; + } + +// ----------------------------------------------------------------------------- +// From MLcSession +// ----------------------------------------------------------------------------- +// +void CLcSession::SetLcUiProvider( MLcUiProvider* aUiProvider ) + { + iLcUiProvider = aUiProvider; + lcutStub_LcSession_uiProvider = aUiProvider; + } + +// ----------------------------------------------------------------------------- +// From MLcSession +// ----------------------------------------------------------------------------- +// +void CLcSession::EstablishLcSessionL( ) + { + User::LeaveIfError( lcutStub_LcEngine_failure() ); + lcutStub_LcSession_calledMethods.insert(0,lcutStub_LcSession_establishSession ); + } + +// ----------------------------------------------------------------------------- +// From MLcSession +// ----------------------------------------------------------------------------- +// +void CLcSession::TerminateLcSessionL( ) + { + User::LeaveIfError( lcutStub_LcEngine_failure() ); + lcutStub_LcSession_calledMethods.insert(0,lcutStub_LcSession_terminateSession ); + } + +// ----------------------------------------------------------------------------- +// From MLcSession +// ----------------------------------------------------------------------------- +// +void CLcSession::UpdateLcSessionL( ) + { + User::LeaveIfError( lcutStub_LcEngine_failure() ); + lcutStub_LcSession_calledMethods.insert(0,lcutStub_LcSession_updateSession ); + } + +// ----------------------------------------------------------------------------- +// From MLcSession +// ----------------------------------------------------------------------------- +// + +TBool CLcSession::SendDialTone( TChar /*aKey*/) + { + return ETrue; + } + + +// ----------------------------------------------------------------------------- +// From MLcSession +// ----------------------------------------------------------------------------- +// +MLcVideoPlayer* CLcSession::RemoteVideoPlayer( ) + { + return iRemotePlayer; + } + +// ----------------------------------------------------------------------------- +// From MLcSession +// ----------------------------------------------------------------------------- +// +MLcVideoPlayer* CLcSession::LocalVideoPlayer( ) + { + return iLocalPlayer; + } + +// ----------------------------------------------------------------------------- +// From MLcSession +// ----------------------------------------------------------------------------- +// +const TDesC& CLcSession::LocalDisplayName( ) + { + return *iLocalDisplayName; + } + +// ----------------------------------------------------------------------------- +// From MLcSession +// ----------------------------------------------------------------------------- +// +const TDesC& CLcSession::RemoteDisplayName( ) + { + return *iRemoteDisplayName; + } +// ----------------------------------------------------------------------------- +// From MLcSession +// ----------------------------------------------------------------------------- +// + TInt CLcSession::SetParameter( TInt aId, TInt aValue ) + { + mParams.insert( aId, aValue ); + return 0; + } + +// ----------------------------------------------------------------------------- +// From MLcSession +// ----------------------------------------------------------------------------- +// +TInt CLcSession::ParameterValue( TInt /*aId*/ ) + { + return 0; + } + + +// ----------------------------------------------------------------------------- +// From MLcSession +// ----------------------------------------------------------------------------- +// + TBool CLcSession::IsBackgroundStartup() + { + return iIsForeground; + } + + // ----------------------------------------------------------------------------- + // From MLcSession + // ----------------------------------------------------------------------------- + // +TInt CLcSession::SetForegroundStatus( TBool aIsForeground ) + { + iIsForeground = aIsForeground; + return iForegroundChange; + } + + // ----------------------------------------------------------------------------- + // From MLcSession + // ----------------------------------------------------------------------------- + // +const TDesC& CLcSession::RemoteDetails() + { + return *iRemoteDetails; + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +CLcSession::CLcSession( ) + { + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CLcSession::ConstructL() + { + iLocalDisplayName = KLcStubLocalDisplayName().AllocL(); + iRemoteDisplayName = KLcStubRemoteDisplayName().AllocL(); + iLocalPlayer = CLcVideoPlayer::NewL(); + iRemotePlayer = CLcVideoPlayer::NewL(); + iRemoteDetails = KLcStubRemoteDetails().AllocL(); + } + + +//stub control + +bool lcutStub_LcSession_expectCall( const QString& call, int callNdx ) +{ + if ( callNdx >= lcutStub_LcSession_calledMethods.count() ) { + return call == lcutStub_LcSession_NoCall; + } + + return lcutStub_LcSession_calledMethods.count() > 0 ? + lcutStub_LcSession_calledMethods[callNdx] == call : + call == lcutStub_LcSession_NoCall; +} + + +void lcutStub_LcSession_reset() +{ + lcutStub_LcSession_calledMethods.clear(); +} + +MLcUiProvider* lcutStub_LcSession_lcUiProvider() +{ + return lcutStub_LcSession_uiProvider; +} diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcuiengine/tsrc/ut_lcuieng/lcstub/src/lcvideoplayerstub.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcuiengine/tsrc/ut_lcuieng/lcstub/src/lcvideoplayerstub.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,485 @@ +/* +* 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: +* +*/ + + +// USER +#include "lcenginestub.h" +#include "lcvideoplayerstub.h" +#include "lcvideoplayer.h" +#include "lcaudiocontrol.h" +#include "lccameracontrol.h" +#include "lczoomcontrol.h" +#include "lcbrightnesscontrol.h" +#include "lcsessionstub.h" +#include "lcuiprovider.h" + +#include + +static QStringList lcutStub_LcPlayer_calledMethods; +static bool lcutStub_LcPlayer_asyncCompletionEnabled = false; + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +CLcVideoPlayer* CLcVideoPlayer::NewL() + { + CLcVideoPlayer* self = new( ELeave )CLcVideoPlayer(); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + return self; + } +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +CLcVideoPlayer::CLcVideoPlayer() + : iRect( TRect(10,10,50,100)) + { + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CLcVideoPlayer::ConstructL() + { + + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +CLcVideoPlayer::~CLcVideoPlayer() + { + } + +// ----------------------------------------------------------------------------- +// From MLcVideoPlayer +// ----------------------------------------------------------------------------- +// +MLcVideoPlayer::TLcVideoPlayerState CLcVideoPlayer::LcVideoPlayerState() const + { + return iState; + } +// ----------------------------------------------------------------------------- +// From MLcVideoPlayer +// ----------------------------------------------------------------------------- +// +TBool CLcVideoPlayer::LcIsPlayingL() + { + User::LeaveIfError( lcutStub_LcEngine_failure() ); + return iPlaying; + } + +// ----------------------------------------------------------------------------- +// From MLcVideoPlayer +// ----------------------------------------------------------------------------- +// +void CLcVideoPlayer::LcPlayL(TLcVideoPlayerSource /*aSource*/) + { + User::LeaveIfError( lcutStub_LcEngine_failure() ); + iPlaying = ETrue; + iState = MLcVideoPlayer::EPlaying; + lcutStub_LcPlayer_calledMethods.insert(0,lcutStub_LcPlayer_LcPlayL ); + } + +// ----------------------------------------------------------------------------- +// From MLcVideoPlayer +// ----------------------------------------------------------------------------- +// +void CLcVideoPlayer::LcPauseL() + { + User::LeaveIfError( lcutStub_LcEngine_failure() ); + iPlaying = EFalse; + iState = MLcVideoPlayer::EPaused; + lcutStub_LcPlayer_calledMethods.insert(0,lcutStub_LcPlayer_LcPauseL ); + } + +// ----------------------------------------------------------------------------- +// From MLcVideoPlayer +// ----------------------------------------------------------------------------- +// +MLcWindow* CLcVideoPlayer::LcWindow() + { + return this; + } + +// ----------------------------------------------------------------------------- +// From MLcVideoPlayer +// ----------------------------------------------------------------------------- +// +MLcCameraControl* CLcVideoPlayer::LcCameraControl() + { + return this; + } + +// ----------------------------------------------------------------------------- +// From MLcVideoPlayer +// ----------------------------------------------------------------------------- +// +MLcSourceFileControl* CLcVideoPlayer::LcSourceFileControl() + { + return NULL; + } + +// ----------------------------------------------------------------------------- +// From MLcVideoPlayer +// ----------------------------------------------------------------------------- +// +MLcDestinationFileControl* CLcVideoPlayer::LcDestinationFileControl() + { + return NULL; + } +// ----------------------------------------------------------------------------- +// From MLcVideoPlayer +// ----------------------------------------------------------------------------- +// +MLcAudioControl* CLcVideoPlayer::LcAudioControl() + { + return this; + } + +// ----------------------------------------------------------------------------- +// From MLcVideoPlayer +// ----------------------------------------------------------------------------- +// +MLcZoomControl* CLcVideoPlayer::LcZoomControl() + { + return this; + } + +// ----------------------------------------------------------------------------- +// From MLcVideoPlayer +// ----------------------------------------------------------------------------- +// +MLcBrightnessControl* CLcVideoPlayer::LcBrightnessControl() + { + return this; + } + +//----------------------------------------------------------------------------- +// From MLcWindow +// ----------------------------------------------------------------------------- +// +void CLcVideoPlayer::EnableLcWindowL( TBool aEnable ) + { + User::LeaveIfError( lcutStub_LcEngine_failure() ); + iWindowEnabled = aEnable; + lcutStub_LcPlayer_calledMethods.insert(0,lcutStub_LcPlayer_EnableLcWindowL ); + } + +// ----------------------------------------------------------------------------- +// From MLcWindow +// ----------------------------------------------------------------------------- +// +TBool CLcVideoPlayer::IsLcWindowEnabled() + { + return iWindowEnabled; + } + +// ----------------------------------------------------------------------------- +// From MLcWindow +// ----------------------------------------------------------------------------- +// +void CLcVideoPlayer::SetLcWindowRectL( TRect aRect ) + { + User::LeaveIfError( lcutStub_LcEngine_failure() ); + iRect = aRect; + lcutStub_LcPlayer_calledMethods.insert(0,lcutStub_LcPlayer_SetLcWindowRectL ); + } + +// ----------------------------------------------------------------------------- +// From MLcWindow +// ----------------------------------------------------------------------------- +// +TRect CLcVideoPlayer::LcWindowRect() + { + return iRect; + } + +// ----------------------------------------------------------------------------- +// From MLcWindow +// ----------------------------------------------------------------------------- +// +void CLcVideoPlayer::SetLcWindowOrientationL( + TLcWindowOrientation aOrientation ) + { + User::LeaveIfError( lcutStub_LcEngine_failure() ); + iOrientation = aOrientation; + lcutStub_LcPlayer_calledMethods.insert(0,lcutStub_LcPlayer_SetLcWindowOrientationL ); + } + +// ----------------------------------------------------------------------------- +// From MLcWindow +// ----------------------------------------------------------------------------- +// +MLcWindow::TLcWindowOrientation CLcVideoPlayer::LcWindowOrientationL() + { + User::LeaveIfError( lcutStub_LcEngine_failure() ); + MLcWindow::TLcWindowOrientation orientation; + if ( iOrientation == ELandscape ) + { + orientation = MLcWindow::ELandscape; + } + else + { + orientation = MLcWindow::EPortrait; + } + return orientation; + } +// ----------------------------------------------------------------------------- +// From MLcAudioControl +// ----------------------------------------------------------------------------- +// +TBool CLcVideoPlayer::IsLcAudioMutedL() + { + User::LeaveIfError( lcutStub_LcEngine_failure() ); + return iMuted; + } + +// ----------------------------------------------------------------------------- +// From MLcAudioControl +// ----------------------------------------------------------------------------- +// +void CLcVideoPlayer::MuteLcAudioL( TBool aMute ) + { + User::LeaveIfError( lcutStub_LcEngine_failure() ); + lcutStub_LcPlayer_calledMethods.insert(0,lcutStub_LcPlayer_MuteLcAudioL ); + iMuted = aMute; + } + +// ----------------------------------------------------------------------------- +// From MLcAudioControl +// ----------------------------------------------------------------------------- +// +TBool CLcVideoPlayer::IsEnablingLcLoudspeakerAllowed() + { + return iEnablingLoudspeakerAllowed; + } + +// ----------------------------------------------------------------------------- +// From MLcAudioControl +// ----------------------------------------------------------------------------- +// +TBool CLcVideoPlayer::IsLcMicMutedL() + { + User::LeaveIfError( lcutStub_LcEngine_failure() ); + return iMicMuted; + } + +// ----------------------------------------------------------------------------- +// From MLcAudioControl +// ----------------------------------------------------------------------------- +// +void CLcVideoPlayer::MuteLcMicL( TBool aMute ) + { + User::LeaveIfError( lcutStub_LcEngine_failure() ); + lcutStub_LcPlayer_calledMethods.insert(0,lcutStub_LcPlayer_MuteLcMicL ); + iMicMuted = aMute; + + if ( lcutStub_LcPlayer_asyncCompletionEnabled && + lcutStub_LcSession_lcUiProvider() ) + { + lcutStub_LcSession_lcUiProvider()->BlockUi( ETrue ); + } + } + +// ----------------------------------------------------------------------------- +// From MLcAudioControl +// ----------------------------------------------------------------------------- +// +TBool CLcVideoPlayer::IsLcLoudspeakerEnabled() + { + return iLoudspeakerEnabled; + } + +// ----------------------------------------------------------------------------- +// From MLcAudioControl +// ----------------------------------------------------------------------------- +// +void CLcVideoPlayer::EnableLcLoudspeakerL( TBool aEnabled ) + { + User::LeaveIfError( lcutStub_LcEngine_failure() ); + lcutStub_LcPlayer_calledMethods.insert(0,lcutStub_LcPlayer_EnableLcLoudspeakerL ); + iLoudspeakerEnabled = aEnabled; + + if ( lcutStub_LcPlayer_asyncCompletionEnabled && + lcutStub_LcSession_lcUiProvider() ) + { + lcutStub_LcSession_lcUiProvider()->BlockUi( ETrue ); + } + } + +// ----------------------------------------------------------------------------- +// From MLcAudioControl +// ----------------------------------------------------------------------------- +// +TInt CLcVideoPlayer::LcVolumeL() + { + User::LeaveIfError( lcutStub_LcEngine_failure() ); + return iVolume; + } + +// ----------------------------------------------------------------------------- +// From MLcAudioControl +// ----------------------------------------------------------------------------- +// +void CLcVideoPlayer::SetLcVolumeL( TInt aValue ) + { + User::LeaveIfError( lcutStub_LcEngine_failure() ); + iVolume = aValue; + } + +// ----------------------------------------------------------------------------- +// From MLcAudioControl +// ----------------------------------------------------------------------------- +// +void CLcVideoPlayer::IncreaseLcVolumeL() + { + User::LeaveIfError( lcutStub_LcEngine_failure() ); + iVolume++; + } + +// ----------------------------------------------------------------------------- +// From MLcAudioControl +// ----------------------------------------------------------------------------- +// +void CLcVideoPlayer::DecreaseLcVolumeL() + { + User::LeaveIfError( lcutStub_LcEngine_failure() ); + iVolume--; + } + +TInt CLcVideoPlayer::LcCameraCountL() + { + User::LeaveIfError( lcutStub_LcEngine_failure() ); + return 2; + } + +TInt CLcVideoPlayer::CurrentLcCameraIndex() + { + return 0; + } + +void CLcVideoPlayer::ToggleLcCameraL() + { + User::LeaveIfError( lcutStub_LcEngine_failure() ); + lcutStub_LcPlayer_calledMethods.insert(0,lcutStub_LcPlayer_ToggleLcCameraL ); + } + +TInt CLcVideoPlayer::MinLcZoomL() + { + User::LeaveIfError( lcutStub_LcEngine_failure() ); + return 0; + } + +TInt CLcVideoPlayer::MaxLcZoomL() + { + User::LeaveIfError( lcutStub_LcEngine_failure() ); + return 10; + } + +TInt CLcVideoPlayer::LcZoomValueL() + { + User::LeaveIfError( lcutStub_LcEngine_failure() ); + return 0; + } + +void CLcVideoPlayer::SetLcZoomValueL( TInt /*aValue*/ ) + { + User::LeaveIfError( lcutStub_LcEngine_failure() ); + lcutStub_LcPlayer_calledMethods.insert(0,lcutStub_LcPlayer_SetLcZoomValueL ); + } + +void CLcVideoPlayer::LcZoomInL() + { + User::LeaveIfError( lcutStub_LcEngine_failure() ); + lcutStub_LcPlayer_calledMethods.insert(0,lcutStub_LcPlayer_LcZoomInL ); + } + +void CLcVideoPlayer::LcZoomOutL() + { + User::LeaveIfError( lcutStub_LcEngine_failure() ); + lcutStub_LcPlayer_calledMethods.insert(0,lcutStub_LcPlayer_LcZoomOutL ); + } + +TInt CLcVideoPlayer::MinLcBrightnessL() + { + User::LeaveIfError( lcutStub_LcEngine_failure() ); + return 0; + } + +TInt CLcVideoPlayer::MaxLcBrightnessL() + { + User::LeaveIfError( lcutStub_LcEngine_failure() ); + return 20; + } + +TInt CLcVideoPlayer::LcBrightnessL() + { + User::LeaveIfError( lcutStub_LcEngine_failure() ); + return 10; + } + +void CLcVideoPlayer::SetLcBrightnessL( TInt /*aValue*/ ) + { + User::LeaveIfError( lcutStub_LcEngine_failure() ); + lcutStub_LcPlayer_calledMethods.insert(0,lcutStub_LcPlayer_SetLcBrightnessL ); + } + +void CLcVideoPlayer::IncreaseLcBrightnessL() + { + User::LeaveIfError( lcutStub_LcEngine_failure() ); + lcutStub_LcPlayer_calledMethods.insert(0,lcutStub_LcPlayer_IncreaseLcBrightnessL ); + } + +void CLcVideoPlayer::DecreaseLcBrightnessL() + { + User::LeaveIfError( lcutStub_LcEngine_failure() ); + lcutStub_LcPlayer_calledMethods.insert(0,lcutStub_LcPlayer_DecreaseLcBrightnessL ); + } + + +//stub control + +bool lcutStub_LcPlayer_expectCall( const QString& call, int callNdx ) +{ + if ( callNdx >= lcutStub_LcPlayer_calledMethods.count() ) { + return call == lcutStub_LcPlayer_NoCall; + } + return lcutStub_LcPlayer_calledMethods.count() > 0 ? + lcutStub_LcPlayer_calledMethods[callNdx] == call : + call == lcutStub_LcPlayer_NoCall; +} + + +void lcutStub_LcPlayer_reset() +{ + lcutStub_LcPlayer_calledMethods.clear(); + lcutStub_LcPlayer_asyncCompletion( false ); +} + +void lcutStub_LcPlayer_asyncCompletion( bool async ) +{ + lcutStub_LcPlayer_asyncCompletionEnabled = async; +} + +// End of File diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcuiengine/tsrc/ut_lcuieng/runtest.cmd --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcuiengine/tsrc/ut_lcuieng/runtest.cmd Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,22 @@ +@rem +@rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +@rem All rights reserved. +@rem This component and the accompanying materials are made available +@rem under the terms of "Eclipse Public License v1.0" +@rem which accompanies this distribution, and is available +@rem at the URL "http://www.eclipse.org/legal/epl-v10.html". +@rem +@rem Initial Contributors: +@rem Nokia Corporation - initial contribution. +@rem +@rem Contributors: +@rem +@rem Description: +@rem + +#call qmake +#call bldmake bldfiles +#call abld build winscw udeb +call \epoc32\release\winscw\udeb\ut_lcuieng.exe -xml -o c:\ut_lcuieng.xml +call copy R:\epoc32\winscw\c\ut_lcuieng.xml . +call type ut_lcuieng.xml \ No newline at end of file diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcuiengine/tsrc/ut_lcuieng/src/main.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcuiengine/tsrc/ut_lcuieng/src/main.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,65 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + + +#include + +#include "ut_lcuiengine.h" +#include "testresultxmlparser.h" + +#if defined(Q_OS_SYMBIAN) +#include "ut_lcactivitymanager.h" +#endif + +int main(int argc, char *argv[]) +{ + bool promptOnExit(true); + for (int i=0; i + +const int utDisplayTimeout = 10; + +////////////////////////////////////////////////////////////////////////////// +// Stub of User::InactivityTime() and User::ResetInactivityTime() +TTimeIntervalSeconds utInactivityInterval = 0; + +TTimeIntervalSeconds User::InactivityTime() +{ + return utInactivityInterval; +} + +void User::ResetInactivityTime() +{ + utInactivityInterval = 0; +} +////////////////////////////////////////////////////////////////////////////// + + + +void UT_LcActivityManager::initTestCase() +{ +} + +void UT_LcActivityManager::cleanupTestCase() +{ +} + + +void UT_LcActivityManager::init() +{ + CentralRepositoryStubHelper::reset(); + CentralRepositoryStubHelper::setCurrentVal(utDisplayTimeout); + mActivityManager = new LcActivityManager; +} + +void UT_LcActivityManager::cleanup() +{ + delete mActivityManager; +} + +void UT_LcActivityManager::testConstructor() +{ + // Inactivity timeout initialized with value from cenrep + QVERIFY( mActivityManager ); + QVERIFY( mActivityManager->mTimerId == -1 ); + QVERIFY( mActivityManager->mInactivityTimeout == utDisplayTimeout - 2 ); + + // Fetching value from cenrep failed, timeout initialized with default value + delete mActivityManager; + mActivityManager = 0; + CentralRepositoryStubHelper::setFailCode(-1); + mActivityManager = new LcActivityManager; + QVERIFY( mActivityManager->mTimerId == -1 ); + QVERIFY( mActivityManager->mInactivityTimeout == 5 ); //see lcDefaultInactivityTimeout + QVERIFY( mActivityManager->mInactivityTimeout != utDisplayTimeout - 2 ); +} + +void UT_LcActivityManager::testInitInactivityTimeout() +{ + // Creation of cenrep failed, timeout value not changed + QVERIFY( mActivityManager->mTimerId == -1 ); + QVERIFY( mActivityManager->mInactivityTimeout == utDisplayTimeout - 2 ); + CentralRepositoryStubHelper::setFailCode(KErrNoMemory); + CentralRepositoryStubHelper::setCurrentVal(2); + QVERIFY( mActivityManager->initInactivityTimeout() == KErrNoMemory ); + QVERIFY( mActivityManager->mTimerId == -1 ); + QVERIFY( mActivityManager->mInactivityTimeout + != CentralRepositoryStubHelper::currentVal() - 2 ); + QVERIFY( mActivityManager->mInactivityTimeout == utDisplayTimeout - 2 ); + + // Fetching value from cenrep failed + CentralRepositoryStubHelper::setFailCode(KErrNotFound); + CentralRepositoryStubHelper::setCurrentVal(3); + QVERIFY( mActivityManager->initInactivityTimeout() == KErrNotFound ); + QVERIFY( mActivityManager->mTimerId == -1 ); + QVERIFY( mActivityManager->mInactivityTimeout + == CentralRepositoryStubHelper::currentVal() - 2 ); + + // Timeout initialized with cenrep value + CentralRepositoryStubHelper::reset(); + CentralRepositoryStubHelper::setCurrentVal(2); + QVERIFY( mActivityManager->initInactivityTimeout() == KErrNone ); + QVERIFY( mActivityManager->mTimerId == -1 ); + QVERIFY( mActivityManager->mInactivityTimeout + == CentralRepositoryStubHelper::currentVal() ); +} + +void UT_LcActivityManager::testEnableActivitySimulation() +{ + // Starting activity simulation for the 1st time + QVERIFY( mActivityManager->mTimerId == -1 ); + mActivityManager->mInactivityTimeout = 5; + utInactivityInterval = 1; + QVERIFY( User::InactivityTime().Int() == 1 ); + mActivityManager->enableActivitySimulation(true); + QVERIFY( mActivityManager->mTimerId > 0 ); + QVERIFY( User::InactivityTime().Int() == 1 ); + + // Starting activity simulation again, user inactivity reached threshold + utInactivityInterval = mActivityManager->mInactivityTimeout = 5; + QVERIFY( User::InactivityTime().Int() == 5 ); + mActivityManager->enableActivitySimulation(true); + QVERIFY( mActivityManager->mTimerId > 0 ); + QVERIFY( User::InactivityTime().Int() == 0 ); + + // Disabling ongoing activity simulation + QVERIFY( mActivityManager->mTimerId > 0 ); + mActivityManager->enableActivitySimulation(false); + QVERIFY( mActivityManager->mTimerId == -1 ); + + // Disabling when no activity simulation running + QVERIFY( mActivityManager->mTimerId == -1 ); + mActivityManager->enableActivitySimulation(false); + QVERIFY( mActivityManager->mTimerId == -1 ); +} + +void UT_LcActivityManager::testIsActivitySimulationEnabled() +{ + QVERIFY( mActivityManager->mTimerId == -1 ); + QVERIFY( !mActivityManager->isActivitySimulationEnabled() ); + + mActivityManager->mTimerId = 1; + QVERIFY( mActivityManager->isActivitySimulationEnabled() ); +} + +void UT_LcActivityManager::testTimerEvent() +{ + // Time event for some other timer, nothing to do + mActivityManager->mTimerId = 10; + QTimerEvent dummyTimerEvent(5); + mActivityManager->timerEvent(&dummyTimerEvent); + QVERIFY( mActivityManager->mTimerId == 10 ); + + // Time event for inactivity timer, timer is restarted + QTimerEvent inactivityTimerEvent(mActivityManager->mTimerId); + mActivityManager->timerEvent(&inactivityTimerEvent); + QVERIFY( mActivityManager->mTimerId != 10 ); +} diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcuiengine/tsrc/ut_lcuieng/src/ut_lcuiengine.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcuiengine/tsrc/ut_lcuieng/src/ut_lcuiengine.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,1276 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ +#include "ut_lcuiengine.h" +#include "lcuiengine.h" +#include "lcuiengine_p.h" +#include "lcactivitymanager.h" + +#include "lcenginestub.h" +#include "lcsessionstub.h" +#include "lcvideoplayerstub.h" +#include "lcuidefs.h" +#include "qthighway_stub_helper.h" + +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +const char lcutMultimediaSharingEng[] = "MultimediaSharing"; +const char lcutVideotelephonyEng[] = "Videotelephony"; + +const char lcutMultimediaSharingApp[] = "Multimedia Sharing"; +const char lcutVideotelephonyApp[] = "Videotelephony"; + +#define LC_ENGINE( uiengine )\ + (static_cast( uiengine->d->mLiveCommsEngine ) ) + +#define LC_SESSION( uiengine )\ + (LC_ENGINE(uiengine)->iSession) + +void UT_LcUiEngine::initTestCase() +{ + lcutStub_LcEngine_reset(); + lcutStub_LcSession_reset(); + lcutStub_LcPlayer_reset(); + +} + +void UT_LcUiEngine::cleanupTestCase() +{ + lcutStub_LcEngine_reset(); + lcutStub_LcSession_reset(); + lcutStub_LcPlayer_reset(); +} + + +void UT_LcUiEngine::init() +{ + lcutStub_LcEngine_reset(); + lcutStub_LcSession_reset(); + lcutStub_LcPlayer_reset(); + mEngine = new LcUiEngine( lcutMultimediaSharingEng, + lcutMultimediaSharingApp ); + mInvitingNote = new HbProgressDialog(); + mWaitingNote = new HbProgressDialog(); + mAcceptQuery = new HbDialog(); + mRecipientQuery = new HbDialog(); + mShareOwnVideoQuery = new HbDialog(); + +} + +void UT_LcUiEngine::cleanup() +{ + lcutStub_LcEngine_reset(); + lcutStub_LcSession_reset(); + lcutStub_LcPlayer_reset(); + delete mEngine; + delete mInvitingNote; + delete mWaitingNote; + delete mAcceptQuery; + delete mRecipientQuery; + delete mShareOwnVideoQuery; +} + +void UT_LcUiEngine::testConstructor() +{ + // "MuS plug-in" loaded + QVERIFY( mEngine ); + QCOMPARE( mEngine->d->mViewLayout, Lc_IdleViewLayout ); + QVERIFY( !mEngine->d->mInvitingNote ); + QVERIFY( !mEngine->d->mWaitingNote ); + QVERIFY( !mEngine->d->mAcceptQuery ); + QVERIFY( !mEngine->d->mRecipientQuery ); + QVERIFY( !mEngine->d->mCloseTimer ); + QVERIFY( mEngine->d->mLiveCommsEngine ); + QCOMPARE( mEngine->d->mEngineName, QByteArray( lcutMultimediaSharingEng ) ); + QVERIFY( mEngine->d->recipient() != hbTrId("txt_vt_custom_unknown_number") ); + QCOMPARE( mEngine->d->sessionTitle(), QString( lcutMultimediaSharingApp ) ); + int engineWindowParam = 0; + QVERIFY( LC_SESSION( mEngine )->mParams.contains( engineWindowParam ) ); + QVERIFY( mEngine->d->mActivityManager ); + QVERIFY( !mEngine->d->mActivityManager->isActivitySimulationEnabled() ); + QVERIFY( !mEngine->d->mShareOwnVideoQuery ); + + // "VT plug-in" loaded + lcutStub_LcEngine_reset(); + lcutStub_LcSession_reset(); + delete mEngine; + mEngine = 0; + mEngine = new LcUiEngine( lcutVideotelephonyEng, + lcutVideotelephonyApp ); + QVERIFY( mEngine ); + QCOMPARE( mEngine->d->mViewLayout, Lc_AllInOneViewLayout ); + QVERIFY( !mEngine->d->mInvitingNote ); + QVERIFY( !mEngine->d->mWaitingNote ); + QVERIFY( !mEngine->d->mAcceptQuery ); + QVERIFY( !mEngine->d->mRecipientQuery ); + QVERIFY( !mEngine->d->mCloseTimer ); + QVERIFY( mEngine->d->mLiveCommsEngine ); + QCOMPARE( mEngine->d->mEngineName, QByteArray( lcutVideotelephonyEng ) ); + QVERIFY( mEngine->d->recipient() != hbTrId("txt_vt_custom_unknown_number") ); + QCOMPARE( mEngine->d->sessionTitle(), QString( lcutVideotelephonyApp ) ); + QVERIFY( LC_SESSION( mEngine )->mParams.contains( engineWindowParam ) ); + QVERIFY( !mEngine->d->mFullScreen ); + QVERIFY( mEngine->d->mActivityManager ); + QVERIFY( !mEngine->d->mActivityManager->isActivitySimulationEnabled() ); + QVERIFY( !mEngine->d->mShareOwnVideoQuery ); +} + +void UT_LcUiEngine::testFeatureSupported() +{ + // Engine not loaded + CLcEngine* enginePtr = mEngine->d->mLiveCommsEngine; + mEngine->d->mLiveCommsEngine = 0; + QVERIFY( !mEngine->d->featureSupported( CLcEngine::ELcShowAcceptQuery ) ); + + // Engine loaded, feature not supported + mEngine->d->mLiveCommsEngine = enginePtr; + QVERIFY( !mEngine->d->featureSupported( CLcEngine::ELcShowAcceptQuery ) ); + + // Feature supported + lcutStub_LcEngine_setLcFeatureSupported( true ); + QVERIFY( mEngine->d->featureSupported( CLcEngine::ELcShowAcceptQuery ) ); +} + +void UT_LcUiEngine::testEstablishSession() +{ + // Leave + lcutStub_LcEngine_setFailure( -1 ); + QCOMPARE( mEngine->d->establishSession(), -1 ); + QVERIFY( !mEngine->d->mCloseTimer ); + + // No leave + lcutStub_LcEngine_reset(); + QCOMPARE( mEngine->d->establishSession(), 0 ); + QVERIFY( mEngine->d->mCloseTimer ); +} + +void UT_LcUiEngine::testTerminateSession() +{ + // Leave + lcutStub_LcEngine_setFailure( -1 ); + QCOMPARE( mEngine->d->terminateSession(), -1 ); + + // No leave + lcutStub_LcEngine_reset(); + QCOMPARE( mEngine->d->establishSession(), 0 ); +} + +void UT_LcUiEngine::testSetWindowRect() +{ + TRect rect; + MLcVideoPlayer* player = + mEngine->d->mLiveCommsEngine->Session().LocalVideoPlayer(); + + // No player + QCOMPARE( mEngine->d->setWindowRect( 0, rect ), -1 ); + + // Leave + lcutStub_LcEngine_setFailure( -2 ); + QCOMPARE( mEngine->d->setWindowRect( player, rect ), -2 ); + + // No leave + lcutStub_LcEngine_reset(); + QCOMPARE( mEngine->d->setWindowRect( player, rect ), 0 ); +} + +void UT_LcUiEngine::testEnableWindow() +{ + MLcVideoPlayer* player = + mEngine->d->mLiveCommsEngine->Session().LocalVideoPlayer(); + + // No player + QCOMPARE( mEngine->d->enableWindow( 0, true ), -1 ); + + // Leave + lcutStub_LcEngine_setFailure( -2 ); + QCOMPARE( mEngine->d->enableWindow( player, true ), -2 ); + + // No leave + lcutStub_LcEngine_reset(); + QCOMPARE( mEngine->d->enableWindow( player, true ), 0 ); +} + +void UT_LcUiEngine::testPlay() +{ + MLcVideoPlayer* player = + mEngine->d->mLiveCommsEngine->Session().LocalVideoPlayer(); + + // No player + QCOMPARE( mEngine->d->play( 0 ), -1 ); + + // Leave + lcutStub_LcEngine_setFailure( -2 ); + QCOMPARE( mEngine->d->play( player ), -2 ); + + // No leave + lcutStub_LcEngine_reset(); + QVERIFY( !player->LcIsPlayingL() ); + QCOMPARE( mEngine->d->play( player ), 0 ); + QVERIFY( player->LcIsPlayingL() ); +} + +void UT_LcUiEngine::testPause() +{ + MLcVideoPlayer* player = + mEngine->d->mLiveCommsEngine->Session().LocalVideoPlayer(); + + // No player + QCOMPARE( mEngine->d->pause( 0 ), -1 ); + + // Leave + lcutStub_LcEngine_setFailure( -2 ); + QCOMPARE( mEngine->d->pause( player ), -2 ); + + // No leave + lcutStub_LcEngine_reset(); + QCOMPARE( mEngine->d->play( player ), 0 ); + QVERIFY( player->LcIsPlayingL() ); + QCOMPARE( mEngine->d->pause( player ), 0 ); + QVERIFY( !player->LcIsPlayingL() ); +} + +void UT_LcUiEngine::testEnableSpeaker() +{ + // Leave + lcutStub_LcEngine_setFailure( -1 ); + QCOMPARE( mEngine->d->enableSpeaker( true ), -1 ); + QVERIFY( !mEngine->d->isSpeakerOn() ); + + // No leave + lcutStub_LcEngine_reset(); + QCOMPARE( mEngine->d->enableSpeaker( true ), 0 ); + QVERIFY( mEngine->d->isSpeakerOn() ); +} + +void UT_LcUiEngine::testMuteMic() +{ + // Leave + lcutStub_LcEngine_setFailure( -1 ); + QCOMPARE( mEngine->d->muteMic( true ), -1 ); + lcutStub_LcEngine_reset(); + QVERIFY( !mEngine->d->isMuted() ); + + // No leave + QCOMPARE( mEngine->d->muteMic( true ), 0 ); + QVERIFY( mEngine->d->isMuted() ); +} + +void UT_LcUiEngine::testStartLiveContent() +{ + // mInvitingNote not set + mInvitingNote->hide(); + mEngine->d->startLiveContent(); + QVERIFY( !mInvitingNote->isVisible() ); + QVERIFY( lcutStub_LcSession_expectCall( lcutStub_LcSession_establishSession ) ); + + // mInvitingNote set, but the engine does not support the feature + lcutStub_LcSession_reset(); + mEngine->d->mInvitingNote = mInvitingNote; + mEngine->d->startLiveContent(); + QVERIFY( !mInvitingNote->isVisible() ); + QVERIFY( lcutStub_LcSession_expectCall( lcutStub_LcSession_establishSession ) ); + + // mInvitingNote set and the engine supports the feature + lcutStub_LcSession_reset(); + lcutStub_LcEngine_setLcFeatureSupported( true ); + mEngine->d->startLiveContent(); + QVERIFY( mInvitingNote->isVisible() ); + QVERIFY( lcutStub_LcSession_expectCall( lcutStub_LcSession_establishSession ) ); +} + +void UT_LcUiEngine::testStart() +{ + LC_SESSION( mEngine )->iState = MLcSession::EReceived; + mEngine->d->start(); + QVERIFY( mEngine->d->mActivityManager->isActivitySimulationEnabled() ); + QVERIFY( lcutStub_LcSession_expectCall( lcutStub_LcSession_NoCall ) ); + + lcutStub_LcSession_reset(); + lcutStub_LcPlayer_reset(); + + LC_SESSION( mEngine )->iState = MLcSession::EInitialized; + mEngine->d->start(); + QVERIFY( lcutStub_LcSession_expectCall( lcutStub_LcSession_establishSession ) ); + + lcutStub_LcSession_reset(); + lcutStub_LcPlayer_reset(); + + mEngine->d->setUiComponents( mInvitingNote, mWaitingNote, + mAcceptQuery, mRecipientQuery,mShareOwnVideoQuery ); + LC_SESSION( mEngine )->iState = MLcSession::EInitialized; + mEngine->d->start(); + QVERIFY( lcutStub_LcSession_expectCall( lcutStub_LcSession_establishSession ) ); +} + +void UT_LcUiEngine::testSetUiComponents() +{ + QVERIFY( !mEngine->d->mInvitingNote ); + QVERIFY( !mEngine->d->mWaitingNote ); + QVERIFY( !mEngine->d->mAcceptQuery ); + QVERIFY( !mEngine->d->mRecipientQuery ); + + mEngine->d->setUiComponents(0,0,0,0,0); + + QVERIFY( !mEngine->d->mInvitingNote ); + QVERIFY( !mEngine->d->mWaitingNote ); + QVERIFY( !mEngine->d->mAcceptQuery ); + QVERIFY( !mEngine->d->mRecipientQuery ); + + mEngine->d->setUiComponents(mInvitingNote,mWaitingNote,mAcceptQuery,mRecipientQuery,mShareOwnVideoQuery); + QVERIFY( mEngine->d->mInvitingNote ); + QVERIFY( mEngine->d->mWaitingNote ); + QVERIFY( mEngine->d->mAcceptQuery ); + QVERIFY( mEngine->d->mRecipientQuery ); +} + +void UT_LcUiEngine::testSessionStateChanged() +{ + LC_SESSION( mEngine )->iState = MLcSession::EUninitialized; + mEngine->d->StateChanged( *LC_SESSION( mEngine ) ); + QVERIFY( lcutStub_LcSession_expectCall( lcutStub_LcSession_NoCall ) ); + + lcutStub_LcSession_reset(); + lcutStub_LcPlayer_reset(); + + QVERIFY( mEngine->d->mSessionDurationTimerId == 0 ); + LC_SESSION( mEngine )->iState = MLcSession::EOpen; + mEngine->d->StateChanged( *LC_SESSION( mEngine ) ); + QVERIFY( lcutStub_LcSession_expectCall( lcutStub_LcSession_NoCall ) ); + QVERIFY( lcutStub_LcPlayer_expectCall( lcutStub_LcPlayer_EnableLcWindowL ) ); + // Session duration is started when session opened + QVERIFY( mEngine->d->mSessionDurationTimerId != 0 ); + + lcutStub_LcSession_reset(); + lcutStub_LcPlayer_reset(); + + LC_SESSION( mEngine )->iState = MLcSession::EClosed; + QSignalSpy spy(mEngine, SIGNAL(stopped())); + mEngine->d->StateChanged( *LC_SESSION( mEngine ) ); + QVERIFY( lcutStub_LcSession_expectCall( lcutStub_LcSession_NoCall ) ); + QVERIFY( lcutStub_LcPlayer_expectCall( lcutStub_LcPlayer_NoCall ) ); + QCOMPARE( spy.count(), 1 ); + + // mAcceptQuery not set + lcutStub_LcSession_reset(); + lcutStub_LcPlayer_reset(); + mAcceptQuery->hide(); + LC_SESSION( mEngine )->iState = MLcSession::EReceived; + mEngine->d->StateChanged( *LC_SESSION( mEngine ) ); + QVERIFY( !mAcceptQuery->isVisible() ); + QVERIFY( lcutStub_LcSession_expectCall( lcutStub_LcSession_establishSession ) ); + QVERIFY( lcutStub_LcPlayer_expectCall( lcutStub_LcPlayer_NoCall ) ); + + // mAcceptQuery set, but the engine does not support the feature + lcutStub_LcSession_reset(); + lcutStub_LcPlayer_reset(); + LC_SESSION( mEngine )->iState = MLcSession::EReceived; + mEngine->d->mAcceptQuery = mAcceptQuery; + mEngine->d->StateChanged( *LC_SESSION( mEngine ) ); + QVERIFY( !mAcceptQuery->isVisible() ); + QVERIFY( lcutStub_LcSession_expectCall( lcutStub_LcSession_establishSession ) ); + QVERIFY( lcutStub_LcPlayer_expectCall( lcutStub_LcPlayer_NoCall ) ); + + // mAcceptQuery set and the engine supports the feature + lcutStub_LcSession_reset(); + lcutStub_LcPlayer_reset(); + LC_SESSION( mEngine )->iState = MLcSession::EReceived; + lcutStub_LcEngine_setLcFeatureSupported( true ); + mEngine->d->StateChanged( *LC_SESSION( mEngine ) ); + QVERIFY( mAcceptQuery->isVisible() ); + QVERIFY( lcutStub_LcSession_expectCall( lcutStub_LcSession_NoCall ) ); + QVERIFY( lcutStub_LcPlayer_expectCall( lcutStub_LcPlayer_NoCall ) ); + + // MT call and sharing own video not allowed by default , popup query shown + lcutStub_LcSession_reset(); + lcutStub_LcPlayer_reset(); + mShareOwnVideoQuery->hide(); + mEngine->d->setUiComponents(mInvitingNote,mWaitingNote,mAcceptQuery,mRecipientQuery,mShareOwnVideoQuery); + LC_SESSION( mEngine )->iState = MLcSession::EOpen; + lcutStub_LcEngine_setLcFeatureSupported( true ); + mEngine->d->StateChanged( *LC_SESSION( mEngine ) ); + QVERIFY( mEngine->d->mShareOwnVideoQuery ); + QVERIFY( mEngine->d->mShareOwnVideoQuery->isVisible() ); + CLcVideoPlayer* localPlayer = LC_SESSION( mEngine )->iLocalPlayer; + localPlayer = 0; + + // MO call and sharing own video allowed by default , popup query not shown + lcutStub_LcSession_reset(); + lcutStub_LcPlayer_reset(); + mShareOwnVideoQuery->hide(); + mEngine->d->setUiComponents(mInvitingNote,mWaitingNote,mAcceptQuery,mRecipientQuery,mShareOwnVideoQuery); + LC_SESSION( mEngine )->iState = MLcSession::EOpen; + lcutStub_LcEngine_setLcFeatureSupported( false ); + mEngine->d->StateChanged( *LC_SESSION( mEngine ) ); + QVERIFY( mEngine->d->mShareOwnVideoQuery ); + QVERIFY( !mEngine->d->mShareOwnVideoQuery->isVisible() ); + +} + +void UT_LcUiEngine::testPlayerStateChanged() +{ + CLcVideoPlayer* localPlayer = LC_SESSION( mEngine )->iLocalPlayer; + QVERIFY( localPlayer != NULL ); + QSignalSpy localPlayerSignalSpy( mEngine, SIGNAL( localPlayerPlaying() ) ); + QSignalSpy localPlayerSignalSpy2( mEngine, SIGNAL( localPlayerPreparing() ) ); + QSignalSpy localPlayerSignalSpy3( mEngine, SIGNAL( localPlayerBuffering() ) ); + QSignalSpy localPlayerSignalSpy4( mEngine, SIGNAL( localPlayerPaused() ) ); + QSignalSpy localPlayerSignalSpy5( mEngine, SIGNAL( localPlayerUnavailable() ) ); + + CLcVideoPlayer* remotePlayer = LC_SESSION( mEngine )->iRemotePlayer; + QVERIFY( remotePlayer != NULL ); + QSignalSpy remotePlayerSignalSpy( mEngine, SIGNAL( remotePlayerPlaying() ) ); + QSignalSpy remotePlayerSignalSpy2( mEngine, SIGNAL( remotePlayerPreparing() ) ); + QSignalSpy remotePlayerSignalSpy3( mEngine, SIGNAL( remotePlayerBuffering() ) ); + QSignalSpy remotePlayerSignalSpy4( mEngine, SIGNAL( remotePlayerPaused() ) ); + QSignalSpy remotePlayerSignalSpy5( mEngine, SIGNAL( remotePlayerUnavailable() ) ); + + // Use local player, player not playing + mEngine->d->StateChanged( *localPlayer ); + QCOMPARE( localPlayerSignalSpy.count(), 0 ); + QCOMPARE( localPlayerSignalSpy2.count(), 0 ); + QCOMPARE( localPlayerSignalSpy3.count(), 0 ); + QCOMPARE( localPlayerSignalSpy4.count(), 0 ); + QCOMPARE( localPlayerSignalSpy5.count(), 0 ); + + // Use local player, player preparing + localPlayer->iState = MLcVideoPlayer::EPreparing; + mEngine->d->StateChanged( *localPlayer ); + QCOMPARE( localPlayerSignalSpy2.count(), 1 ); + + // Use local player, player buffering + localPlayer->iState = MLcVideoPlayer::EBuffering; + mEngine->d->StateChanged( *localPlayer ); + QCOMPARE( localPlayerSignalSpy3.count(), 1 ); + + // Use local player, player playing + localPlayer->iState = MLcVideoPlayer::EPlaying; + mEngine->d->StateChanged( *localPlayer ); + QCOMPARE( localPlayerSignalSpy.count(), 1 ); + + // Use local player, player paused + localPlayer->iState = MLcVideoPlayer::EPaused; + mEngine->d->StateChanged( *localPlayer ); + QCOMPARE( localPlayerSignalSpy4.count(), 1 ); + + // Use local player, player unavailable + localPlayer->iState = MLcVideoPlayer::EUnavailable; + mEngine->d->StateChanged( *localPlayer ); + QCOMPARE( localPlayerSignalSpy5.count(), 1 ); + + // Use remote player, no waiting note + mEngine->d->StateChanged( *remotePlayer ); + QVERIFY( mWaitingNote->isVisible() ); + QCOMPARE( remotePlayerSignalSpy.count(), 0 ); + QCOMPARE( remotePlayerSignalSpy2.count(), 0 ); + QCOMPARE( remotePlayerSignalSpy3.count(), 0 ); + QCOMPARE( remotePlayerSignalSpy4.count(), 0 ); + QCOMPARE( remotePlayerSignalSpy5.count(), 0 ); + + // Use remote player, waiting note present, player not playing + mEngine->d->mWaitingNote = mWaitingNote; + mEngine->d->StateChanged( *remotePlayer ); + QVERIFY( mWaitingNote->isVisible() ); + QCOMPARE( remotePlayerSignalSpy.count(), 0 ); + QCOMPARE( remotePlayerSignalSpy2.count(), 0 ); + QCOMPARE( remotePlayerSignalSpy3.count(), 0 ); + QCOMPARE( remotePlayerSignalSpy4.count(), 0 ); + QCOMPARE( remotePlayerSignalSpy5.count(), 0 ); + + // Use remote player, player preparing + remotePlayer->iState = MLcVideoPlayer::EPreparing; + mEngine->d->StateChanged( *remotePlayer ); + QVERIFY( mWaitingNote->isVisible() ); + QCOMPARE( remotePlayerSignalSpy2.count(), 1 ); + + // Use remote player, player buffering + remotePlayer->iState = MLcVideoPlayer::EBuffering; + mEngine->d->StateChanged( *remotePlayer ); + QVERIFY( mWaitingNote->isVisible() ); + QCOMPARE( remotePlayerSignalSpy3.count(), 1 ); + + // Use remote player, waiting note present, player playing + remotePlayer->iState = MLcVideoPlayer::EPlaying; + mEngine->d->StateChanged( *remotePlayer ); + QVERIFY( !mWaitingNote->isVisible() ); + QCOMPARE( remotePlayerSignalSpy.count(), 1 ); + + // Use remote player, waiting note present, player playing + remotePlayer->iState = MLcVideoPlayer::EUnavailable; + mEngine->d->StateChanged( *remotePlayer ); + QVERIFY( !mWaitingNote->isVisible() ); + QCOMPARE( remotePlayerSignalSpy5.count(), 1 ); + + // Use remote player, player paused + remotePlayer->iState = MLcVideoPlayer::EPaused; + mEngine->d->StateChanged( *remotePlayer ); + QVERIFY( !mWaitingNote->isVisible() ); + QCOMPARE( remotePlayerSignalSpy4.count(), 1 ); + + QCOMPARE( localPlayerSignalSpy.count(), 1 ); + QCOMPARE( localPlayerSignalSpy2.count(), 1 ); + QCOMPARE( localPlayerSignalSpy3.count(), 1 ); + QCOMPARE( localPlayerSignalSpy4.count(), 1 ); + QCOMPARE( localPlayerSignalSpy5.count(), 1 ); + + QCOMPARE( remotePlayerSignalSpy.count(), 1 ); + QCOMPARE( remotePlayerSignalSpy2.count(), 1 ); + QCOMPARE( remotePlayerSignalSpy3.count(), 1 ); + QCOMPARE( remotePlayerSignalSpy4.count(), 1 ); + QCOMPARE( remotePlayerSignalSpy5.count(), 1 ); + +} + +void UT_LcUiEngine::testSetContentAreas() +{ + QRectF shared; + QRectF received; + + QVERIFY( LC_SESSION( mEngine )->iLocalPlayer ); + QVERIFY( LC_SESSION( mEngine )->iRemotePlayer ); + QVERIFY( LC_SESSION( mEngine )->iLocalPlayer->iRect.iTl.iX != 0); + QVERIFY( LC_SESSION( mEngine )->iRemotePlayer->iRect.iTl.iX != 0); + + mEngine->d->setContentAreas( shared, received ); + QVERIFY( lcutStub_LcPlayer_expectCall( lcutStub_LcPlayer_SetLcWindowRectL ) ); + QVERIFY( LC_SESSION( mEngine )->iLocalPlayer->iRect.iTl.iX == 0); + QVERIFY( LC_SESSION( mEngine )->iRemotePlayer->iRect.iTl.iX == 0); + + lcutStub_LcSession_reset(); + lcutStub_LcPlayer_reset(); + + mEngine->d->setContentAreas( shared, received ); + QVERIFY( lcutStub_LcPlayer_expectCall( lcutStub_LcPlayer_NoCall ) ); + + lcutStub_LcSession_reset(); + lcutStub_LcPlayer_reset(); + + shared.setHeight(100); + received.setHeight(100); + + mEngine->d->setContentAreas( shared, received ); + QVERIFY( lcutStub_LcPlayer_expectCall( lcutStub_LcPlayer_SetLcWindowRectL ) ); + + lcutStub_LcSession_reset(); + lcutStub_LcPlayer_reset(); + + delete LC_SESSION( mEngine )->iLocalPlayer; + LC_SESSION( mEngine )->iLocalPlayer = 0; + delete LC_SESSION( mEngine )->iRemotePlayer; + LC_SESSION( mEngine )->iRemotePlayer = 0; + + mEngine->d->setContentAreas( shared, received ); + QVERIFY( lcutStub_LcPlayer_expectCall( lcutStub_LcPlayer_NoCall ) ); +} + +void UT_LcUiEngine::testSetOrientation() +{ + bool ok( false ); + + //1. setting landscape + QVERIFY( LC_SESSION( mEngine )->iLocalPlayer ); + QVERIFY( LC_SESSION( mEngine )->iRemotePlayer ); + + ok = mEngine->d->setOrientation( Qt::Horizontal ); + QVERIFY( ok ); + QVERIFY( lcutStub_LcPlayer_expectCall( lcutStub_LcPlayer_SetLcWindowOrientationL ) ); + QVERIFY( LC_SESSION( mEngine )->iLocalPlayer->iOrientation == MLcWindow::ELandscape ); + QVERIFY( LC_SESSION( mEngine )->iRemotePlayer->iOrientation == MLcWindow::ELandscape ); + + //2. setting layout failed + // Leave + lcutStub_LcEngine_setFailure( -1 ); + lcutStub_LcPlayer_reset(); + ok = mEngine->d->setOrientation( Qt::Horizontal ); + QVERIFY( !ok ); + QVERIFY( lcutStub_LcPlayer_expectCall( lcutStub_LcPlayer_NoCall ) ); + + //3. setting layout with no players + lcutStub_LcEngine_reset(); + lcutStub_LcPlayer_reset(); + delete LC_SESSION( mEngine )->iLocalPlayer; + LC_SESSION( mEngine )->iLocalPlayer = 0; + delete LC_SESSION( mEngine )->iRemotePlayer; + LC_SESSION( mEngine )->iRemotePlayer = 0; + + ok = mEngine->d->setOrientation( Qt::Horizontal ); + QVERIFY( ok ); + QVERIFY( lcutStub_LcPlayer_expectCall( lcutStub_LcPlayer_NoCall ) ); +} + + +void UT_LcUiEngine::testToggleMute() +{ + QSignalSpy mutedSpy(mEngine, SIGNAL(muted())); + QSignalSpy unmutedSpy(mEngine, SIGNAL(unmuted())); + + + // Leave from isMuted + mEngine->d->toggleMute(); + QVERIFY( mEngine->d->isMuted() ); + lcutStub_LcEngine_setFailure( -2 ); + QVERIFY( !mEngine->d->isMuted() ); + + // No leave + lcutStub_LcEngine_reset(); + lcutStub_LcSession_reset(); + lcutStub_LcPlayer_reset(); + mutedSpy.clear(); + unmutedSpy.clear(); + + mEngine->d->toggleMute(); + QVERIFY( !mEngine->d->isMuted() ); + mutedSpy.clear(); + unmutedSpy.clear(); + + mEngine->d->toggleMute(); + QVERIFY( lcutStub_LcPlayer_expectCall( lcutStub_LcPlayer_MuteLcMicL ) ); + QVERIFY( mEngine->d->isMuted() ); + QCOMPARE(mutedSpy.count(), 1); // make sure the signal was emitted exactly one time + lcutStub_LcSession_reset(); + lcutStub_LcPlayer_reset(); + mutedSpy.clear(); + unmutedSpy.clear(); + + mEngine->d->toggleMute(); + QVERIFY( lcutStub_LcPlayer_expectCall( lcutStub_LcPlayer_MuteLcMicL ) ); + QVERIFY( !mEngine->d->isMuted() ); + QCOMPARE(unmutedSpy.count(), 1); // make sure the signal was emitted exactly one time + + lcutStub_LcSession_reset(); + lcutStub_LcPlayer_reset(); + mutedSpy.clear(); + unmutedSpy.clear(); + + // test async mute + lcutStub_LcPlayer_asyncCompletion( true ); + mEngine->d->toggleMute(); + QVERIFY( lcutStub_LcPlayer_expectCall( lcutStub_LcPlayer_MuteLcMicL ) ); + QVERIFY( mEngine->d->isMuted() ); + QVERIFY( mEngine->d->mBlocked ); + QVERIFY( mEngine->d->mPendingAction == "muted" ); + + // nothing yet signaled as completion is pending + QCOMPARE(mutedSpy.count(), 0); + QCOMPARE(unmutedSpy.count(), 0); + + + lcutStub_LcPlayer_asyncCompletion( false ); +} + +void UT_LcUiEngine::testToggleSpeaker() +{ + QSignalSpy speakerEnabledSpy(mEngine, SIGNAL(speakerEnabled())); + QSignalSpy speakerDisabledSpy(mEngine, SIGNAL(speakerDisabled())); + + QVERIFY( !mEngine->d->isSpeakerOn() ); + + mEngine->d->toggleSpeaker(); + QVERIFY( lcutStub_LcPlayer_expectCall( lcutStub_LcPlayer_EnableLcLoudspeakerL ) ); + QVERIFY( mEngine->d->isSpeakerOn() ); + QCOMPARE(speakerEnabledSpy.count(), 1); + + + lcutStub_LcSession_reset(); + lcutStub_LcPlayer_reset(); + speakerEnabledSpy.clear(); + speakerDisabledSpy.clear(); + + mEngine->d->toggleSpeaker(); + QVERIFY( lcutStub_LcPlayer_expectCall( lcutStub_LcPlayer_EnableLcLoudspeakerL ) ); + QVERIFY( !mEngine->d->isSpeakerOn() ); + QCOMPARE(speakerDisabledSpy.count(), 1); + + lcutStub_LcSession_reset(); + lcutStub_LcPlayer_reset(); + speakerEnabledSpy.clear(); + speakerDisabledSpy.clear(); + + // test asynch speaker functionality. + + lcutStub_LcPlayer_asyncCompletion( true ); + mEngine->d->toggleSpeaker(); + QVERIFY( lcutStub_LcPlayer_expectCall( lcutStub_LcPlayer_EnableLcLoudspeakerL ) ); + QVERIFY( mEngine->d->isSpeakerOn() ); + QVERIFY( mEngine->d->mBlocked ); + QVERIFY( mEngine->d->mPendingAction == "speakerEnabled" ); + + // nothing yet signaled as completion is pending + QCOMPARE(speakerEnabledSpy.count(), 0); + QCOMPARE(speakerDisabledSpy.count(), 0); + + lcutStub_LcPlayer_asyncCompletion( false ); +} + +void UT_LcUiEngine::testToggleDisableCamera() +{ + QSignalSpy enabledSpy(mEngine, SIGNAL(cameraEnabled())); + QSignalSpy disabledSpy(mEngine, SIGNAL(cameraDisabled())); + + QVERIFY( LC_SESSION( mEngine )->iLocalPlayer ); + LC_SESSION( mEngine )->iLocalPlayer->iPlaying = ETrue; + LC_SESSION( mEngine )->iRemotePlayer->iState = MLcVideoPlayer::EPlaying; + QVERIFY( LC_SESSION( mEngine )->iLocalPlayer->iPlaying ); + + mEngine->d->toggleDisableCamera(); + QVERIFY( lcutStub_LcPlayer_expectCall( lcutStub_LcPlayer_LcPauseL ) ); + QVERIFY( !LC_SESSION( mEngine )->iLocalPlayer->iPlaying ); + QVERIFY( LC_SESSION( mEngine )->iLocalPlayer->iState == MLcVideoPlayer::EPaused ); + QCOMPARE(enabledSpy.count(), 0); + QCOMPARE(disabledSpy.count(), 1); + + mEngine->d->toggleDisableCamera(); + QVERIFY( lcutStub_LcPlayer_expectCall( lcutStub_LcPlayer_LcPlayL ) ); + QVERIFY( LC_SESSION( mEngine )->iLocalPlayer->iPlaying ); + QVERIFY( LC_SESSION( mEngine )->iLocalPlayer->iState == MLcVideoPlayer::EPlaying ); + QCOMPARE(enabledSpy.count(), 1); + QCOMPARE(disabledSpy.count(), 1); +} + +void UT_LcUiEngine::testToggleCamera() +{ + // Leave + lcutStub_LcEngine_setFailure( -1 ); + mEngine->d->toggleCamera(); + QVERIFY( lcutStub_LcPlayer_expectCall( lcutStub_LcPlayer_NoCall ) ); + + // No leave + lcutStub_LcEngine_reset(); + mEngine->d->toggleCamera(); + QVERIFY( lcutStub_LcPlayer_expectCall( lcutStub_LcPlayer_ToggleLcCameraL ) ); +} + +void UT_LcUiEngine::testStartReceiving() +{ + // mAcceptQuery not set, mWaitingNote not set + mAcceptQuery->show(); + mWaitingNote->hide(); + mEngine->d->startReceiving(); + QVERIFY( mAcceptQuery->isVisible() ); + QVERIFY( !mWaitingNote->isVisible() ); + QVERIFY( lcutStub_LcSession_expectCall( lcutStub_LcSession_establishSession ) ); + + // mAcceptQuery set, mWaitingNote not set + lcutStub_LcSession_reset(); + mEngine->d->mAcceptQuery = mAcceptQuery; + mEngine->d->startReceiving(); + QVERIFY( !mAcceptQuery->isVisible() ); + QVERIFY( !mWaitingNote->isVisible() ); + QVERIFY( lcutStub_LcSession_expectCall( lcutStub_LcSession_establishSession ) ); + + // mWaitingNote set, but the engine does not support the feature + lcutStub_LcSession_reset(); + mEngine->d->mWaitingNote = mWaitingNote; + mEngine->d->startReceiving(); + QVERIFY( !mAcceptQuery->isVisible() ); + QVERIFY( !mWaitingNote->isVisible() ); + QVERIFY( lcutStub_LcSession_expectCall( lcutStub_LcSession_establishSession ) ); + + // mWaitingNote set and the engine supports the feature + lcutStub_LcSession_reset(); + lcutStub_LcEngine_setLcFeatureSupported( true ); + mEngine->d->startReceiving(); + QVERIFY( !mAcceptQuery->isVisible() ); + QVERIFY( mWaitingNote->isVisible() ); + QVERIFY( lcutStub_LcSession_expectCall( lcutStub_LcSession_establishSession ) ); +} + +void UT_LcUiEngine::testStartPlayback() +{ + mEngine->d->startPlayback(); + QVERIFY( lcutStub_LcSession_expectCall( lcutStub_LcSession_NoCall ) ); + QVERIFY( lcutStub_LcPlayer_expectCall( lcutStub_LcPlayer_EnableLcWindowL,0 ) ); + QVERIFY( lcutStub_LcPlayer_expectCall( lcutStub_LcPlayer_EnableLcWindowL,1 ) ); + + lcutStub_LcSession_reset(); + lcutStub_LcPlayer_reset(); + + delete LC_SESSION( mEngine )->iLocalPlayer; + LC_SESSION( mEngine )->iLocalPlayer = 0; + mEngine->d->startPlayback(); + QVERIFY( lcutStub_LcSession_expectCall( lcutStub_LcSession_NoCall ) ); + QVERIFY( lcutStub_LcPlayer_expectCall( lcutStub_LcPlayer_EnableLcWindowL,0 ) ); + QVERIFY( lcutStub_LcPlayer_expectCall( lcutStub_LcPlayer_NoCall,1 ) ); + + lcutStub_LcSession_reset(); + lcutStub_LcPlayer_reset(); + + delete LC_SESSION( mEngine )->iRemotePlayer; + LC_SESSION( mEngine )->iRemotePlayer = 0; + + mEngine->d->startPlayback(); + QVERIFY( lcutStub_LcSession_expectCall( lcutStub_LcSession_NoCall ) ); + QVERIFY( lcutStub_LcPlayer_expectCall( lcutStub_LcPlayer_NoCall,0 ) ); + QVERIFY( lcutStub_LcPlayer_expectCall( lcutStub_LcPlayer_NoCall,1 ) ); +} + +void UT_LcUiEngine::testStop() +{ + // Ensure that in MLcSession::EOpen state, "stopped" signal won't be emited + // Check also that session duration timer is stopped + LC_SESSION( mEngine )->iState = MLcSession::EOpen; + mEngine->d->startSessionDurationTimer(); + QVERIFY( mEngine->d->mSessionDurationTimerId != 0 ); + QSignalSpy spy(mEngine, SIGNAL(stopped())); + mEngine->d->mActivityManager->enableActivitySimulation(true); + mEngine->d->stop(); + QVERIFY( !mEngine->d->mActivityManager->isActivitySimulationEnabled() ); + QVERIFY( lcutStub_LcSession_expectCall( lcutStub_LcSession_terminateSession ) ); + QVERIFY( lcutStub_LcPlayer_expectCall( lcutStub_LcPlayer_NoCall ) ); + QCOMPARE( spy.count(), 0 ); + QVERIFY( mEngine->d->mSessionDurationTimerId == 0 ); + + // Ensure that MLcSession::EClosed, will cause emition of "stopped" signal + lcutStub_LcSession_reset(); + lcutStub_LcPlayer_reset(); + LC_SESSION( mEngine )->iState = MLcSession::EClosed; + mEngine->d->stop(); + QVERIFY( lcutStub_LcSession_expectCall( lcutStub_LcSession_terminateSession ) ); + QVERIFY( lcutStub_LcPlayer_expectCall( lcutStub_LcPlayer_NoCall ) ); + QCOMPARE( spy.count(), 1 ); +} + +void UT_LcUiEngine::testSetViewLayout() +{ + QVERIFY( LC_SESSION( mEngine )->iLocalPlayer ); + QVERIFY( LC_SESSION( mEngine )->iRemotePlayer ); + QVERIFY( !LC_SESSION( mEngine )->iLocalPlayer->iPlaying ); + QVERIFY( !LC_SESSION( mEngine )->iRemotePlayer->iPlaying ); + LC_SESSION( mEngine )->iRemotePlayer->iState = MLcVideoPlayer::EPaused; + QVERIFY( !mEngine->d->usingVideoTelephoneEngine() ); + + mEngine->d->setViewLayout(); + QVERIFY( mEngine->d->viewLayout() == Lc_IdleViewLayout ); + + LC_SESSION( mEngine )->iLocalPlayer->iPlaying = ETrue; + + mEngine->d->setViewLayout(); + QVERIFY( mEngine->d->viewLayout() == Lc_SharedViewLayout ); + + LC_SESSION( mEngine )->iLocalPlayer->iPlaying = EFalse; + LC_SESSION( mEngine )->iRemotePlayer->iState = MLcVideoPlayer::EPlaying; + + mEngine->d->setViewLayout(); + QVERIFY( mEngine->d->viewLayout() == Lc_ReceivedViewLayout ); + + LC_SESSION( mEngine )->iLocalPlayer->iPlaying = ETrue; + LC_SESSION( mEngine )->iRemotePlayer->iState = MLcVideoPlayer::EPlaying; + + mEngine->d->setViewLayout(); + QVERIFY( mEngine->d->viewLayout() == Lc_TwowayViewLayout ); + + delete LC_SESSION( mEngine )->iLocalPlayer; + LC_SESSION( mEngine )->iLocalPlayer = 0; + + mEngine->d->setViewLayout(); + QVERIFY( mEngine->d->viewLayout() == Lc_ReceivedOnlyViewLayout ); + + delete LC_SESSION( mEngine )->iRemotePlayer; + LC_SESSION( mEngine )->iRemotePlayer = 0; + + mEngine->d->setViewLayout(); + QVERIFY( mEngine->d->viewLayout() == Lc_IdleViewLayout ); + + mEngine->d->mEngineName = lcutVideotelephonyApp; + QVERIFY( mEngine->d->usingVideoTelephoneEngine() ); + + mEngine->d->setViewLayout(); + QVERIFY( mEngine->d->viewLayout() == Lc_AllInOneViewLayout ); +} + +void UT_LcUiEngine::testHideNotes() +{ + // Notes not set + mEngine->d->hideNotes( true ); + QVERIFY( lcutStub_LcSession_expectCall( lcutStub_LcSession_NoCall ) ); + QVERIFY( lcutStub_LcPlayer_expectCall( lcutStub_LcPlayer_NoCall ) ); + QVERIFY( mInvitingNote->isVisible() ); + QVERIFY( mWaitingNote->isVisible() ); + QVERIFY( mAcceptQuery->isVisible() ); + QVERIFY( mRecipientQuery->isVisible() ); + + // Notes set, hide all + mEngine->d->setUiComponents( mInvitingNote, mWaitingNote, + mAcceptQuery, mRecipientQuery,mShareOwnVideoQuery ); + mEngine->d->hideNotes( true ); + QVERIFY( lcutStub_LcSession_expectCall( lcutStub_LcSession_NoCall ) ); + QVERIFY( lcutStub_LcPlayer_expectCall( lcutStub_LcPlayer_NoCall ) ); + QVERIFY( !mInvitingNote->isVisible() ); + QVERIFY( !mWaitingNote->isVisible() ); + QVERIFY( !mAcceptQuery->isVisible() ); + QVERIFY( !mRecipientQuery->isVisible() ); + + // Notes not set, do not hide waiting note + mInvitingNote->show(); + mWaitingNote->show(); + mAcceptQuery->show(); + mRecipientQuery->show(); + mEngine->d->hideNotes( false ); + QVERIFY( lcutStub_LcSession_expectCall( lcutStub_LcSession_NoCall ) ); + QVERIFY( lcutStub_LcPlayer_expectCall( lcutStub_LcPlayer_NoCall ) ); + QVERIFY( !mInvitingNote->isVisible() ); + QVERIFY( mWaitingNote->isVisible() ); + QVERIFY( !mAcceptQuery->isVisible() ); + QVERIFY( !mRecipientQuery->isVisible() ); +} + +void UT_LcUiEngine::testZoom() +{ + LcControlValues zoomData; + + // Leave + lcutStub_LcEngine_setFailure( -1 ); + mEngine->d->zoom( 1 ); + QVERIFY( lcutStub_LcPlayer_expectCall( lcutStub_LcPlayer_NoCall ) ); + QCOMPARE( mEngine->d->zoomValues( zoomData ), -1 ); + QVERIFY( lcutStub_LcPlayer_expectCall( lcutStub_LcPlayer_NoCall ) ); + + // No leave + lcutStub_LcEngine_reset(); + lcutStub_LcPlayer_reset(); + QCOMPARE( mEngine->d->zoomValues( zoomData ), 0 ); + mEngine->d->zoom( 2 ); + mEngine->d->zoom( 1 ); + mEngine->d->zoom( 3 ); + + QVERIFY( lcutStub_LcPlayer_expectCall( lcutStub_LcPlayer_SetLcZoomValueL, 0 ) ); + QVERIFY( lcutStub_LcPlayer_expectCall( lcutStub_LcPlayer_SetLcZoomValueL, 1 ) ); + QVERIFY( lcutStub_LcPlayer_expectCall( lcutStub_LcPlayer_SetLcZoomValueL, 2 ) ); + QVERIFY( lcutStub_LcPlayer_expectCall( lcutStub_LcSession_NoCall, 3 ) ); +} + +void UT_LcUiEngine::testBlockUi() +{ + QSignalSpy blockedSpy(mEngine, SIGNAL(blocked())); + QSignalSpy unblockedSpy(mEngine, SIGNAL(unblocked())); + QSignalSpy mutedSpy(mEngine, SIGNAL(muted())); + + mEngine->d->BlockUi( ETrue ); + + QCOMPARE(blockedSpy.count(), 1); + QCOMPARE(unblockedSpy.count(), 0); + QCOMPARE(mutedSpy.count(), 0); + + // no pending action once unblocked + blockedSpy.clear(); + + mEngine->d->BlockUi( EFalse ); + QCOMPARE(blockedSpy.count(), 0); + QCOMPARE(unblockedSpy.count(), 1); + QCOMPARE(mutedSpy.count(), 0); + + + // pending action once unblocked + unblockedSpy.clear(); + mEngine->d->setPendingAction( "muted" ); + mEngine->d->BlockUi( EFalse ); + QCOMPARE(blockedSpy.count(), 0); + QCOMPARE(unblockedSpy.count(), 1); + QCOMPARE(mutedSpy.count(), 1); + QVERIFY( mEngine->d->mPendingAction.isEmpty() ); +} + +void UT_LcUiEngine::testCloseTimer() +{ + // Try to cancel without timer + mEngine->d->cancelCloseTimer(); + QVERIFY( !mEngine->d->mCloseTimer ); + + // Try to cancel without timer being active + mEngine->d->startCloseTimer(); + QVERIFY( mEngine->d->mCloseTimer ); + QVERIFY( mEngine->d->mCloseTimer->isActive() ); + mEngine->d->mCloseTimer->stop(); + QVERIFY( !mEngine->d->mCloseTimer->isActive() ); + mEngine->d->cancelCloseTimer(); + QVERIFY( mEngine->d->mCloseTimer ); + QVERIFY( !mEngine->d->mCloseTimer->isActive() ); + + // Cancel an active timer + mEngine->d->startCloseTimer(); + QVERIFY( mEngine->d->mCloseTimer ); + QVERIFY( mEngine->d->mCloseTimer->isActive() ); + mEngine->d->cancelCloseTimer(); + QVERIFY( mEngine->d->mCloseTimer ); + QVERIFY( !mEngine->d->mCloseTimer->isActive() ); +} + + +void UT_LcUiEngine::testfullScreenMode() +{ + QVERIFY( !mEngine->d->fullScreenMode() ); +} + + +void UT_LcUiEngine::testsetFullScreenMode() +{ + mEngine->d->setFullScreenMode(true); + QVERIFY( mEngine->d->fullScreenMode() ); +} + +void UT_LcUiEngine::testTimerEvent() +{ + mEngine->d->startSessionDurationTimer(); + QSignalSpy spy(mEngine, SIGNAL(sessionDurationChanged(const QString &))); + + QTimerEvent wrongTimerEvent(9999); + mEngine->d->timerEvent(&wrongTimerEvent); + QVERIFY( spy.count() == 0 ); + + QTimerEvent correctTimerEvent(mEngine->d->mSessionDurationTimerId); + mEngine->d->timerEvent(&correctTimerEvent); + QVERIFY( spy.count() == 1 ); + QVERIFY( spy.at(0).count() == 1 ); // one arg which is duration as string + QTime currDuration = QTime::fromString(spy.at(0).at(0).toString()); + QVERIFY( currDuration.isValid() ); +} + +void UT_LcUiEngine::testFillRemoteInfo() +{ + QSignalSpy recipientSpy(mEngine, SIGNAL(recipientChanged(const QString &))); + QSignalSpy numberSpy(mEngine, SIGNAL(phoneNumberChanged(const QString &))); + + // test filling without signal emitting + + // number and name changed + mEngine->d->mRecipient = ""; + mEngine->d->mPhoneNumber = ""; + mEngine->d->fillRemoteInfo( false ); + QVERIFY( mEngine->d->mRecipient.length() > 0 ); + QVERIFY( mEngine->d->mPhoneNumber.length() > 0 ); + QVERIFY( recipientSpy.count() == 0 ); + QVERIFY( numberSpy.count() == 0 ); + + // nothing changed + QString prevRecipient = mEngine->d->mRecipient; + QString prevNumber = mEngine->d->mPhoneNumber; + mEngine->d->fillRemoteInfo( false ); + QVERIFY( mEngine->d->mRecipient == prevRecipient ); + QVERIFY( mEngine->d->mPhoneNumber == prevNumber ); + QVERIFY( recipientSpy.count() == 0 ); + QVERIFY( numberSpy.count() == 0 ); + + // test filling with signal emitting + + // number and name changed + mEngine->d->mRecipient = ""; + mEngine->d->mPhoneNumber = ""; + mEngine->d->fillRemoteInfo( true ); + QVERIFY( mEngine->d->mRecipient == prevRecipient ); + QVERIFY( mEngine->d->mPhoneNumber == prevNumber ); + QVERIFY( recipientSpy.count() == 1 ); + QVERIFY( numberSpy.count() == 1 ); + + // state is opened and name not found and no number, unknown name is used + LC_SESSION( mEngine )->iState = MLcSession::EOpen; + delete LC_SESSION( mEngine )->iRemoteDisplayName; + LC_SESSION( mEngine )->iRemoteDisplayName = NULL; + LC_SESSION( mEngine )->iRemoteDisplayName = KNullDesC().AllocL(); + delete LC_SESSION( mEngine )->iRemoteDetails; + LC_SESSION( mEngine )->iRemoteDetails = NULL; + LC_SESSION( mEngine )->iRemoteDetails = KNullDesC().AllocL(); + mEngine->d->mPhoneNumber = ""; + mEngine->d->fillRemoteInfo( true ); + QVERIFY( mEngine->d->mRecipient == hbTrId("txt_vt_custom_unknown_number") ); + QVERIFY( mEngine->d->mPhoneNumber.isEmpty() ); + QVERIFY( recipientSpy.count() == 2 ); + QVERIFY( numberSpy.count() == 1 ); + + // name not found but number exists, number is used at opened state as recipient + mEngine->d->mRecipient = ""; + mEngine->d->mPhoneNumber = ""; + delete LC_SESSION( mEngine )->iRemoteDetails; + LC_SESSION( mEngine )->iRemoteDetails = NULL; + LC_SESSION( mEngine )->iRemoteDetails = _L("123445").AllocL(); + mEngine->d->fillRemoteInfo( true ); + QVERIFY( mEngine->d->mRecipient == "123445" ); + QVERIFY( mEngine->d->mPhoneNumber == "123445" ); + QVERIFY( recipientSpy.count() == 3 ); + QVERIFY( numberSpy.count() == 2 ); + +} + +void UT_LcUiEngine::testUpdateSession() +{ + mEngine->d->updateSession(); + QVERIFY( lcutStub_LcSession_expectCall( lcutStub_LcSession_updateSession ) ); +} + +void UT_LcUiEngine::testIsLocalPlayerPlaying() +{ + // Not playing + QVERIFY( !mEngine->d->isLocalPlayerPlaying() ); + + // Playing + LC_SESSION( mEngine )->iLocalPlayer->LcPlayL(); + QVERIFY( mEngine->d->isLocalPlayerPlaying() ); +} + +void UT_LcUiEngine::testIsRemotePlayerPlaying() +{ + // Not playing + QVERIFY( !mEngine->d->isRemotePlayerPlaying() ); + + // Playing + LC_SESSION( mEngine )->iRemotePlayer->LcPlayL(); + QVERIFY( mEngine->d->isRemotePlayerPlaying() ); +} + +void UT_LcUiEngine::testMinimized() +{ + mEngine->minimize(); + QVERIFY( mEngine->isMinimized() ); + mEngine->minimize(); // Doing nothing + QVERIFY( mEngine->isMinimized() ); +} + +void UT_LcUiEngine::testMaximized() +{ + mEngine->maximize(); + QVERIFY(mEngine->isMaximized() ); + mEngine->maximize(); // Doing nothing + QVERIFY(mEngine->isMaximized() ); +} + +void UT_LcUiEngine::testIsMinimized() +{ + mEngine->minimize(); + QVERIFY( mEngine->isMinimized() ); +} + +void UT_LcUiEngine::testHandleForegroundStatus() +{ + QtHighwayStubHelper::reset(); + + // First time to foreground, engine is not set to foreground until viewReady signal + HbView currView; + mEngine->d->setCurrentView(&currView); + QVERIFY( mEngine->d->mFirstForegroundSwitch ); + QVERIFY( !mEngine->d->mActivityManager->isActivitySimulationEnabled() ); + + mEngine->d->HandleForegroundStatus(ETrue); + QVERIFY( mEngine->d->mActivityManager->isActivitySimulationEnabled() ); + QVERIFY( !mEngine->d->session().IsBackgroundStartup() ); // Stub returns fg status in this + QVERIFY( !QtHighwayStubHelper::isAtBg() ); + QVERIFY( !mEngine->d->mFirstForegroundSwitch ); + + //Simulate viewReady signal happens, funciton will be called again. + mEngine->d->HandleForegroundStatus(ETrue); + QVERIFY( mEngine->d->session().IsBackgroundStartup() ); // Stub returns fg status in this + QVERIFY( !mEngine->d->mFirstForegroundSwitch ); + + // Bg switch + QtHighwayStubHelper::reset(); + QVERIFY( mEngine->d->mActivityManager->isActivitySimulationEnabled() ); + mEngine->d->HandleForegroundStatus(EFalse); + QVERIFY( !mEngine->d->mActivityManager->isActivitySimulationEnabled() ); + QVERIFY( QtHighwayStubHelper::isAtBg() ); + QVERIFY( !mEngine->d->session().IsBackgroundStartup() ); // Stub returns fg status in this + +} + + +void UT_LcUiEngine::testSendDialTone() +{ + //Dumy test: Ensure Conversion does not cause any problem. + QVERIFY( mEngine->d->SendDialTone('3') ); +} + + +void UT_LcUiEngine::testShareVideoIsAllowedShownAutomatically() +{ + lcutStub_LcEngine_setLcFeatureSupported( false ); + mShareOwnVideoQuery->hide(); + mEngine->d->setUiComponents(mInvitingNote,mWaitingNote,mAcceptQuery,mRecipientQuery,mShareOwnVideoQuery); + mEngine->d->showSendVideoQueryWhenNecessary(); + QVERIFY(mEngine->d->mShareOwnVideoQuery && !mEngine->d->mShareOwnVideoQuery->isVisible()); +} + + +void UT_LcUiEngine::testShareVideoIsNotAllowedShown() +{ + lcutStub_LcEngine_setLcFeatureSupported( false ); + mShareOwnVideoQuery->hide(); + mEngine->d->setUiComponents(mInvitingNote,mWaitingNote,mAcceptQuery,mRecipientQuery,mShareOwnVideoQuery); + mEngine->d->showSendVideoQueryWhenNecessary(); + QVERIFY(mEngine->d->mShareOwnVideoQuery && !mEngine->d->mShareOwnVideoQuery->isVisible()); +} + + +void UT_LcUiEngine::testShareVideoPermissionAskedAlways() +{ + lcutStub_LcEngine_setLcFeatureSupported( true ); + mShareOwnVideoQuery->hide(); + mEngine->d->setUiComponents(mInvitingNote,mWaitingNote,mAcceptQuery,mRecipientQuery,mShareOwnVideoQuery); + mEngine->d->showSendVideoQueryWhenNecessary(); + QVERIFY(mEngine->d->mShareOwnVideoQuery && mEngine->d->mShareOwnVideoQuery->isVisible()); +} + + +void UT_LcUiEngine::testVolumeLevelChanged() +{ + // Subscribe to the events. + mEngine->d->subscribeVolumeEvents(); + + QSignalSpy spy(mEngine, SIGNAL(volumeChanged(int))); + QCOMPARE( spy.count(), 0 ); + + + //Test1: Known Key Event handled + QVariant value; + value.setValue(5); + + XQSettingsKey validKey1(XQSettingsKey::TargetCentralRepository, + KCRUidInCallVolume.iUid, KTelIncallEarVolume); + mEngine->d->volumeLevelChanged(validKey1, value); + QCOMPARE( spy.count(), 1 ); + spy.clear(); + + + //Test2: Known Key Event-2 handled + XQSettingsKey validKey2(XQSettingsKey::TargetCentralRepository, + KCRUidInCallVolume.iUid,KTelIncallLoudspeakerVolume); + mEngine->d->volumeLevelChanged(validKey2, value); + QCOMPARE( spy.count(), 1 ); + spy.clear(); + + //Test3: Unknow Key Event Ignored. + XQSettingsKey unKnownKey(XQSettingsKey::TargetCentralRepository, + 787,899); + mEngine->d->volumeLevelChanged(unKnownKey, value); + QCOMPARE( spy.count(), 0 ); + + // Un-Subscribe Events. + mEngine->d->unSubscribeVolumeEvents(); +} + + + +// End of file diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcuiengine/tsrc/ut_lcuieng/ut_lcuieng.pro --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcuiengine/tsrc/ut_lcuieng/ut_lcuieng.pro Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,65 @@ +###################################################################### +# Automatically generated by qmake (2.01a) Fri May 22 10:46:25 2009 +###################################################################### + +TEMPLATE = app +TARGET = + +QT += testlib xml +CONFIG += qtestlib + +MUS_DIR = ../../../../.. +LCUI_DIR = ../../../lcui +LCUIENGINE_DIR = ../.. + +DEPENDPATH += . + +INCLUDEPATH += . +INCLUDEPATH += hbstubs +INCLUDEPATH += /epoc32/include +INCLUDEPATH += /epoc32/include/platform/app +INCLUDEPATH += /epoc32/include/ecom +INCLUDEPATH += inc +INCLUDEPATH += $$LCUIENGINE_DIR +INCLUDEPATH += $$LCUIENGINE_DIR/inc +INCLUDEPATH += $$LCUI_DIR/mmshlcuiengine/tsrc/lcstub/inc +INCLUDEPATH += $$LCUI_DIR/inc +INCLUDEPATH += $$LCUI_DIR/../inc +INCLUDEPATH += lcstub/inc +INCLUDEPATH += $$MUS_DIR/tsrc/qtestutils/inc +INCLUDEPATH += $$MUS_DIR/inc + +CONFIG += hb + +DEFINES += QT_NO_DEBUG_OUTPUT + +# Input +HEADERS += inc/ut_lcuiengine.h +HEADERS += $$LCUIENGINE_DIR/inc/lcuiengine.h + +SOURCES += src/main.cpp +SOURCES += src/ut_lcuiengine.cpp +SOURCES += $$LCUIENGINE_DIR/src/lcuiengine.cpp +SOURCES += hbstubs/hbstubs.cpp +SOURCES += hbstubs/qthighway_stub.cpp +SOURCES += lcstub/src/lcsessionstub.cpp +SOURCES += lcstub/src/lcvideoplayerstub.cpp +SOURCES += lcstub/src/lcenginestub.cpp +SOURCES += $$MUS_DIR/tsrc/qtestutils/src/testresultxmlparser.cpp + +symbian: { + INCLUDEPATH += $$LCUIENGINE_DIR/inc + HEADERS += inc/ut_lcactivitymanager.h + HEADERS += $$LCUIENGINE_DIR/inc/lcuiengine_p.h + HEADERS += $$LCUIENGINE_DIR/inc/lcactivitymanager.h + SOURCES += src/ut_lcactivitymanager.cpp + SOURCES += $$LCUIENGINE_DIR/src/lcuiengine_p.cpp + SOURCES += $$LCUIENGINE_DIR/src/lcactivitymanager.cpp + SOURCES += lcstub/src/centralrepository_stub.cpp + + TARGET.UID2 = 0x100039CE + TARGET.UID3 = 0xEfa329b2 + TARGET.CAPABILITY = ALL -TCB + LIBS += -lecom -lflogger -lws32 -lbafl -lxqservice -lxqserviceutil -lcone -lxqsettingsmanager + TARGET.EPOCALLOWDLLDATA = 1 +} diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcuiengine/tsrc/win32/launch.bat --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcuiengine/tsrc/win32/launch.bat Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,17 @@ +@rem +@rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +@rem All rights reserved. +@rem This component and the accompanying materials are made available +@rem under the terms of "Eclipse Public License v1.0" +@rem which accompanies this distribution, and is available +@rem at the URL "http://www.eclipse.org/legal/epl-v10.html". +@rem +@rem Initial Contributors: +@rem Nokia Corporation - initial contribution. +@rem +@rem Contributors: +@rem +@rem Description: +@rem + +musui.exe -1 -2 -3 \ No newline at end of file diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcuiengine/tsrc/win32/lcconfig.xml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcuiengine/tsrc/win32/lcconfig.xml Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,3 @@ + + +in seconds diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcuiengine/tsrc/win32/lcconfiguration.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcuiengine/tsrc/win32/lcconfiguration.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,92 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + +#include "LcConfiguration.h" +#include + +// File name +const char fileName[] = "c:\\data\\lcconfig.xml"; + +// XML configuration elements +const char setupElement[] = "setup"; +const char timerElement[] = "timer"; + +// XML configuration attriputes +const char layoutAttr[] = "layout"; +const char sessionNameAttr[] = "sessionname"; +const char phoneNoAttr[] = "phoneno"; +const char remoteAttr[] = "remote"; +const char durationAttr[] = "duration"; + + +// ----------------------------------------------------------------------------- +// LcConfiguration::LcConfiguration +// ----------------------------------------------------------------------------- +// +LcConfiguration::LcConfiguration() + :mLayout(5), + mSessionTitle(QString::fromAscii("Homer Simpson")), + mRecipient(QString::fromAscii("sip:march@simpsons.com")), + mPhoneNumber(QString::fromAscii("+35850898282")), + mTimerDuration(4*1000) +{ +} + +// ----------------------------------------------------------------------------- +// LcConfiguration::LcConfiguration +// ----------------------------------------------------------------------------- +// +LcConfiguration::~LcConfiguration() +{ +} + +// ----------------------------------------------------------------------------- +// TestResultXmlParser::parse +// ----------------------------------------------------------------------------- +// +int LcConfiguration::parse() +{ + QFile file(fileName); + QXmlInputSource inputSource(&file); + QXmlSimpleReader reader; + reader.setContentHandler(this); + return reader.parse(inputSource); +} + +// ----------------------------------------------------------------------------- +// LcConfiguration::startElement +// ----------------------------------------------------------------------------- +// +bool LcConfiguration::startElement( + const QString& /*namespaceURI*/, + const QString& /*localName*/, + const QString& qName, + const QXmlAttributes& atts) +{ + if( qName == setupElement) { + mLayout = atts.value(layoutAttr).toInt(); + mSessionTitle = atts.value(sessionNameAttr); + mRecipient = atts.value(phoneNoAttr); + mPhoneNumber = atts.value(durationAttr); + } + else if (qName == timerElement) { + mTimerDuration = atts.value(durationAttr).toInt()*1000;// ms to s + } + return true; +} + +// End of File. diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcuiengine/tsrc/win32/lcconfiguration.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcuiengine/tsrc/win32/lcconfiguration.h Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,54 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + +#ifndef LCCONFIGURATION_H +#define LCCONFIGURATION_H + +#include + + +class LcConfiguration : public QXmlDefaultHandler +{ +public: // Constructors and destructor + LcConfiguration(); + ~LcConfiguration(); + +public: + int parse(); + +protected: // From QXmlContentHandler + bool startElement( + const QString& namespaceURI, + const QString& localName, + const QString& qName, + const QXmlAttributes& atts); + +public: // Data + int mLayout; + QString mSessionTitle; + QString mRecipient; + QString mPhoneNumber; + int mTimerDuration; +}; + + +#endif // LCCONFIGURATION_H + + + + + diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcuiengine/tsrc/win32/lcuiengine_p.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcuiengine/tsrc/win32/lcuiengine_p.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,480 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + +//USER +#include "lcuiengine_p.h" +#include "lcuidefs.h" +#include "lclogger.h" +#include "lcuienginesimulator.h" + +//SYSTEM +#include +#include +#include +#include + + +#define LC_VTPLUGIN_NAME "Videotelephony"; + +const char localMovieName[] = "c:\\data\\local.3gp"; +const char local2MovieName[] = "c:\\data\\local2.mpeg"; +const char remoteMovieName[] = "c:\\data\\remote.3gp"; +const char mPlayer[] = "c:\\data\\mplayer.exe"; +const char msPaint[] = "mspaint"; + +// ----------------------------------------------------------------------------- +// LcUiEnginePrivate::LcUiEnginePrivate +// ----------------------------------------------------------------------------- +// +LcUiEnginePrivate::LcUiEnginePrivate( LcUiEngine& uiEngine, + const QString& engineName, + const QString& applicationDisplayName) + :mUiEngine( uiEngine ) +{ + LC_QDEBUG( "livecomms [UI] -> LcUiEnginePrivate::LcUiEnginePrivate()" ) + mSimulator = new LcUiEngineSimulator( *this ); + mViewLayout = (LcViewLayoutHint)mSimulator->layout(); + mSessionTitle = mSimulator->sessionTitle(); + mRecipient = mSimulator->remoteAddress(); + mPhoneNumber = mSimulator->phoneNo(); + mLocalPlayerProcess = new QProcess(); + mRemotePlayerProcess = new QProcess(); + mProgram = QString::fromAscii(mPlayer); + mProgramImage = QString::fromAscii(msPaint); + mLocalMovieName = QString::fromAscii(localMovieName); + LC_QDEBUG( "livecomms [UI] <- LcUiEnginePrivate::LcUiEnginePrivate()" ) +} + +// ----------------------------------------------------------------------------- +// LcUiEnginePrivate::~LcUiEnginePrivate +// ----------------------------------------------------------------------------- +// +LcUiEnginePrivate::~LcUiEnginePrivate() +{ + LC_QDEBUG( "livecomms [UI] -> LcUiEnginePrivate::~LcUiEnginePrivate()" ) + delete mSimulator; + delete mLocalPlayerProcess; + delete mRemotePlayerProcess; + LC_QDEBUG( "livecomms [UI] <- LcUiEnginePrivate::~LcUiEnginePrivate()" ) +} + +// ----------------------------------------------------------------------------- +// LcUiEnginePrivate::zoom +// ----------------------------------------------------------------------------- +// +void LcUiEnginePrivate::zoom( int value ) +{ + LC_QDEBUG( "livecomms [UI] -> LcUiEnginePrivate::zoom()" ) + + LC_QDEBUG( "livecomms [UI] <- LcUiEnginePrivate::zoom()" ) +} + +// ----------------------------------------------------------------------------- +// LcUiEnginePrivate::stop +// ----------------------------------------------------------------------------- +// +void LcUiEnginePrivate::stop() +{ + LC_QDEBUG( "livecomms [UI] -> LcUiEnginePrivate::stop()" ) + mSimulator->stop(); + LC_QDEBUG( "livecomms [UI] <- LcUiEnginePrivate::stop()" ) +} + +// ----------------------------------------------------------------------------- +// LcUiEnginePrivate::start +// ----------------------------------------------------------------------------- +// +void LcUiEnginePrivate::start() +{ + LC_QDEBUG( "livecomms [UI] -> LcUiEnginePrivate::start()" ) + mSimulator->start(); + LC_QDEBUG( "livecomms [UI] <- LcUiEnginePrivate::start()" ) +} + +// ----------------------------------------------------------------------------- +// LcUiEnginePrivate::sessionTitle +// ----------------------------------------------------------------------------- +// +const QString& LcUiEnginePrivate::sessionTitle() const +{ + return mSessionTitle; +} + +// ----------------------------------------------------------------------------- +// LcUiEnginePrivate::recipient +// ----------------------------------------------------------------------------- +// +const QString& LcUiEnginePrivate::recipient() const +{ + return mRecipient; +} + +// ----------------------------------------------------------------------------- +// LcUiEnginePrivate::phoneNumber +// ----------------------------------------------------------------------------- +// +const QString& LcUiEnginePrivate::phoneNumber() const +{ + return mPhoneNumber; +} + +// ----------------------------------------------------------------------------- +// LcUiEnginePrivate::viewLayout +// ----------------------------------------------------------------------------- +// +LcViewLayoutHint LcUiEnginePrivate::viewLayout() const +{ + return mViewLayout; +} + +// ----------------------------------------------------------------------------- +// LcUiEnginePrivate::setContentAreas +// ----------------------------------------------------------------------------- +// +void LcUiEnginePrivate::setContentAreas( const QRectF& sharedContent, + const QRectF& receivedContent ) +{ + LC_QDEBUG( "livecomms [UI] -> LcUiEnginePrivate::setContentAreas()" ) + LC_QDEBUG_2( "livecomms [UI] shared window: ", sharedContent ) + LC_QDEBUG_2( "livecomms [UI] received window: ", receivedContent ) + LC_QDEBUG( "livecomms [UI] <- LcUiEnginePrivate::setContentAreas()" ) +} + +// ----------------------------------------------------------------------------- +// LcUiEnginePrivate::setOrientation +// ----------------------------------------------------------------------------- +// +bool LcUiEnginePrivate::setOrientation( Qt::Orientation orientation ) +{ + bool ok( false ); + return ok; +} + +// ----------------------------------------------------------------------------- +// LcUiEnginePrivate::setUiComponents +// ----------------------------------------------------------------------------- +// +void LcUiEnginePrivate::setUiComponents( + HbDialog* invitingNote, + HbDialog* waitingNote, + HbDialog* acceptQuery, + HbDialog* recipientQuery ) +{ + mInvitingNote = invitingNote; + mWaitingNote = waitingNote; + mAcceptQuery = acceptQuery; + mRecipientQuery = recipientQuery; + + +} + +// ----------------------------------------------------------------------------- +// LcUiEnginePrivate::toggleMute +// ----------------------------------------------------------------------------- +// +void LcUiEnginePrivate::toggleMute() +{ + LC_QDEBUG( "livecomms [UI] -> LcUiEnginePrivate::toggleMute()" ) + if( mMuteState ){ + unmuted(); + }else{ + muted(); + } + LC_QDEBUG( "livecomms [UI] <- LcUiEnginePrivate::toggleMute()" ) +} + +// ----------------------------------------------------------------------------- +// LcUiEnginePrivate::isMuted +// ----------------------------------------------------------------------------- +// +bool LcUiEnginePrivate::isMuted() const +{ + return mMuteState; +} + +// ----------------------------------------------------------------------------- +// LcUiEnginePrivate::toggleSpeaker +// ----------------------------------------------------------------------------- +// +void LcUiEnginePrivate::toggleSpeaker() +{ + LC_QDEBUG( "livecomms [UI] -> LcUiEnginePrivate::toggleSpeaker()" ) + if ( mSpeakerState ){ + speakerDisabled(); + }else{ + speakerEnabled(); + } + LC_QDEBUG( "livecomms [UI] <- LcUiEnginePrivate::toggleSpeaker()" ) +} + +// ----------------------------------------------------------------------------- +// LcUiEnginePrivate::isSpeakerOn +// ----------------------------------------------------------------------------- +// +bool LcUiEnginePrivate::isSpeakerOn() const +{ + return mSpeakerState; +} + +// ----------------------------------------------------------------------------- +// LcUiEnginePrivate::zoomValues +// ----------------------------------------------------------------------------- +// +int LcUiEnginePrivate::zoomValues( LcControlValues& values ) const +{ + int err( 1 ); + return err; +} + +// ----------------------------------------------------------------------------- +// LcUiEnginePrivate::toggleEnableCamera +// ----------------------------------------------------------------------------- +// +void LcUiEnginePrivate::toggleDisableCamera() +{ + LC_QDEBUG( "livecomms [UI] -> LcUiEnginePrivate::toggleDisableCamera()" ) + if( mPlayerStateLocal == EPlaying ){ + localPlayerPaused(); + cameraDisabled(); + }else if( mPlayerStateLocal == EPaused){ + localPlayerPlaying(); + cameraEnabled(); + } + LC_QDEBUG( "livecomms [UI] <- LcUiEnginePrivate::toggleDisableCamera()" ) +} + +// ----------------------------------------------------------------------------- +// LcUiEnginePrivate::setCameraMain +// ----------------------------------------------------------------------------- +// +void LcUiEnginePrivate::setMainCamera(const bool aMainCamera) +{ + LC_QDEBUG_2( "livecomms [UI] -> LcUiEnginePrivate::setCameraMain()", aMainCamera ) + if(aMainCamera){ + cameraChangedToMain(); + }else{ + cameraChangedToSecondary(); + } + LC_QDEBUG( "livecomms [UI] <- LcUiEnginePrivate::setCameraMain()" ) +} + +// ----------------------------------------------------------------------------- +// LcUiEnginePrivate::cameraIndex +// ----------------------------------------------------------------------------- +// +bool LcUiEnginePrivate::mainCamera() const +{ + LC_QDEBUG( "livecomms [UI] -> LcUiEnginePrivate::mainCamera()" ) + LC_QDEBUG_2( "livecomms [UI] <- LcUiEnginePrivate::mainCamera()", mMainCamera ) + return mMainCamera; +} + +// ----------------------------------------------------------------------------- +// LcUiEnginePrivate::toggleCamera +// ----------------------------------------------------------------------------- +// +void LcUiEnginePrivate::toggleCamera() +{ + LC_QDEBUG( "livecomms [UI] -> LcUiEnginePrivate::toggleCamera()" ) + if( mMainCamera ){ + cameraChangedToSecondary(); + }else{ + cameraChangedToMain(); + } + if( mPlayerStateLocal==EPlaying ){ + localPlayerPaused(); + mSimulator->setSimulation(2); + mSimulator->start(); + } + LC_QDEBUG_2( "livecomms [UI] <- LcUiEnginePrivate::toggleCamera(), mainCamera:", mMainCamera ) +} + +// ----------------------------------------------------------------------------- +// LcUiEnginePrivate::fullScreenMode +// ----------------------------------------------------------------------------- +// +bool LcUiEnginePrivate::fullScreenMode() +{ + LC_QDEBUG( "livecomms [UI] -> LcUiEnginePrivate::fullScreenMode()" ) + LC_QDEBUG( "livecomms [UI] <- LcUiEnginePrivate::fullScreenMode()" ) + return mFullScreen; +} + +// ----------------------------------------------------------------------------- +// LcUiEnginePrivate::setFullScreenMode +// ----------------------------------------------------------------------------- +// +void LcUiEnginePrivate::setFullScreenMode(bool aMode) +{ + LC_QDEBUG( "livecomms [UI] -> LcUiEnginePrivate::setFullScreenMode()" ) + mFullScreen = aMode; + LC_QDEBUG( "livecomms [UI] <- LcUiEnginePrivate::setFullScreenMode()" ) +} + + +// ----------------------------------------------------------------------------- +// LcUiEnginePrivate::updateSession +// ----------------------------------------------------------------------------- +// +void LcUiEnginePrivate::updateSession() +{ + LC_QDEBUG( "livecomms [UI] -> LcUiEnginePrivate::updateSession()" ) + + LC_QDEBUG( "livecomms [UI] <- LcUiEnginePrivate::updateSession()" ) +} + +// ----------------------------------------------------------------------------- +// LcUiEnginePrivate::isLocalPlayerPlaying +// ----------------------------------------------------------------------------- +// +bool LcUiEnginePrivate::isLocalPlayerPlaying() const +{ + return ( mPlayerStateLocal == EPlaying )? true : false; +} + +// ----------------------------------------------------------------------------- +// LcUiEnginePrivate::isRemotePlayerPlaying +// ----------------------------------------------------------------------------- +// +bool LcUiEnginePrivate::isRemotePlayerPlaying() const +{ + return ( mSimulatorRemote == EPlaying )? true : false; +} + +// ----------------------------------------------------------------------------- +// LcUiEnginePrivate::localPlayerPlaying +// ----------------------------------------------------------------------------- +// +void LcUiEnginePrivate::localPlayerPlaying() +{ + QStringList args; + args << mLocalMovieName; + mLocalPlayerProcess->start(mProgram,args); + mPlayerStateLocal=EPlaying; + emit mUiEngine.localPlayerPlaying(); +} + + +// ----------------------------------------------------------------------------- +// LcUiEnginePrivate::remotePlayerPlaying +// ----------------------------------------------------------------------------- +// +void LcUiEnginePrivate::remotePlayerPlaying() +{ + QStringList args; + args << QString::fromAscii(remoteMovieName); + mRemotePlayerProcess->start(mProgram,args); + mSimulatorRemote=EPlaying; + emit mUiEngine.remotePlayerPlaying(); +} + +// ----------------------------------------------------------------------------- +// LcUiEnginePrivate::localPlayerPaused +// ----------------------------------------------------------------------------- +// +void LcUiEnginePrivate::localPlayerPaused() +{ + mLocalPlayerProcess->close(); + mPlayerStateLocal=EPaused; + emit mUiEngine.localPlayerPaused(); +} + +// ----------------------------------------------------------------------------- +// LcUiEnginePrivate::remotePlayerPaused +// ----------------------------------------------------------------------------- +// +void LcUiEnginePrivate::remotePlayerPaused() +{ + mRemotePlayerProcess->close(); + mSimulatorRemote=EPaused; + emit mUiEngine.remotePlayerPaused(); +} + +// ----------------------------------------------------------------------------- +// LcUiEnginePrivate::cameraChangedToSecondary +// ----------------------------------------------------------------------------- +// +void LcUiEnginePrivate::cameraChangedToSecondary() +{ + mLocalMovieName= QString::fromAscii(local2MovieName); + mMainCamera=false; + emit mUiEngine.cameraChangedToSecondary(); +} + + +// ----------------------------------------------------------------------------- +// LcUiEnginePrivate::cameraChangedToSecondary +// ----------------------------------------------------------------------------- +// +void LcUiEnginePrivate::cameraChangedToMain() +{ + mLocalMovieName= QString::fromAscii(localMovieName); + mMainCamera=true; + emit mUiEngine.cameraChangedToMain(); +} + +// ----------------------------------------------------------------------------- +// LcUiEnginePrivate::isMinimized +// ----------------------------------------------------------------------------- +// +bool LcUiEnginePrivate::isMinimized() const +{ + return (QApplication::activeWindow()->windowState()==Qt::WindowMinimized); +} + +// ----------------------------------------------------------------------------- +// LcUiEnginePrivate::minimize +// ----------------------------------------------------------------------------- +// +void LcUiEnginePrivate::minimize() +{ + QApplication::activeWindow()->setWindowState(Qt::WindowMinimized); +} + +// ----------------------------------------------------------------------------- +// LcUiEnginePrivate::maximize +// ----------------------------------------------------------------------------- +// +void LcUiEnginePrivate::maximize() +{ + QApplication::activeWindow()->setWindowState(Qt::WindowMaximized); +} + +// ----------------------------------------------------------------------------- +// LcUiEnginePrivate::shareImage +// ----------------------------------------------------------------------------- +// +void LcUiEnginePrivate::shareImage(const QString& fileName) +{ + localPlayerPaused(); + QStringList args; + args << fileName; + mLocalPlayerProcess->start(mProgramImage,args); + mPlayerStateLocal=EPlaying; + emit mUiEngine.localPlayerPlaying(); +} + +// ----------------------------------------------------------------------------- +// LcUiEnginePrivate::shareCamera +// ----------------------------------------------------------------------------- +// +void LcUiEnginePrivate::shareCamera() +{ + localPlayerPaused(); + localPlayerPlaying(); +} +// End of File diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcuiengine/tsrc/win32/lcuiengine_p.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcuiengine/tsrc/win32/lcuiengine_p.h Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,180 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ +#ifndef LCUIENGINEPRIVATE_H +#define LCUIENGINEPRIVATE_H + +//SYSTEM +#include +#include +#include +#include +#include + +class QTimer; +class QRectF; +class HbDialog; +class LcUiEngine; +class LcUiEngineSimulator; + +enum simulationState { + ENone, + EPreparing, + EBuffering, + EPlaying, + EPaused, + EStopped, + EUnavailable +}; + +/* + * Live Comms UI Engine + */ +class LcUiEnginePrivate + +{ + +public: + + LcUiEnginePrivate ( LcUiEngine& uiEngine, + const QString &engineName, + const QString &applicationDisplayName ); + ~LcUiEnginePrivate (); + +public : + + void zoom( int value ); + void stop(); + +private: + + //signaled when engine is stopped + void stopped(){ emit mUiEngine.stopped();}; + //signaled when layout is changed + void layoutChanged(){ emit mUiEngine.layoutChanged();}; + //signaled when camera changes to main + void cameraChangedToMain(); + //signaled when camera changes to secondary + void cameraChangedToSecondary(); + //signaled when mic is muted + void muted(){ mMuteState = true; emit mUiEngine.muted();}; + //signaled when mic is unmuted + void unmuted(){ mMuteState = false; emit mUiEngine.unmuted();}; + //signaled when speaker is enabled + void speakerEnabled(){ mSpeakerState = true; emit mUiEngine.speakerEnabled();}; + //signaled when speaker is disabled + void speakerDisabled(){ mSpeakerState = false; emit mUiEngine.speakerDisabled();}; + //signaled when camera is disabled + void cameraDisabled(){ mPlayerStateLocal = EPaused; emit mUiEngine.cameraDisabled();}; + //signaled when camera is enabled + void cameraEnabled(){ mPlayerStateLocal = EPlaying; emit mUiEngine.cameraEnabled();}; + //signaled when engine is blocked, + //no calls expected until signaled unblocked + void blocked(){ emit mUiEngine.blocked();}; + //signaled when engine is free + void unblocked(){ emit mUiEngine.unblocked();}; + //signaled continuously while session is up and running + //carries current session duration + void sessionDurationChanged(const QString &duration){ emit mUiEngine.sessionDurationChanged(duration);}; + void recipientChanged(const QString &recipient){ emit mUiEngine.recipientChanged(recipient);}; + void phoneNumberChanged(const QString &number){ emit mUiEngine.phoneNumberChanged(number);}; + //signaled when player state changed + void localPlayerPlaying(); + void remotePlayerPlaying(); + void localPlayerPreparing(){ mPlayerStateLocal=EPreparing;emit mUiEngine.localPlayerPreparing();}; + void remotePlayerPreparing(){ mSimulatorRemote=EPreparing;emit mUiEngine.remotePlayerPreparing();}; + void localPlayerBuffering(){ mPlayerStateLocal=EBuffering;emit mUiEngine.localPlayerBuffering();}; + void remotePlayerBuffering(){ mSimulatorRemote=EBuffering;emit mUiEngine.remotePlayerBuffering();}; + void localPlayerPaused(); + void remotePlayerPaused(); + void localPlayerUnavailable(){ mPlayerStateLocal=EUnavailable;emit mUiEngine.localPlayerUnavailable();}; + void remotePlayerUnavailable(){ mSimulatorRemote=EUnavailable;emit mUiEngine.remotePlayerUnavailable();}; + +public: + + void start(); + const QString& sessionTitle() const; + const QString& recipient() const; + const QString& phoneNumber() const; + LcViewLayoutHint viewLayout() const; + void setContentAreas( const QRectF& sharedContent, + const QRectF& receivedContent ); + bool setOrientation( Qt::Orientation orientation ); + void setUiComponents(HbDialog* invitingNote, + HbDialog* waitingNote, + HbDialog* acceptQuery, + HbDialog* recipientQuery); + void toggleMute(); + bool isMuted() const; + void toggleSpeaker(); + bool isSpeakerOn() const; + int zoomValues( LcControlValues& values ) const; + void toggleDisableCamera(); + void setMainCamera(const bool aMainCamera); + bool mainCamera() const; + void toggleCamera(); + bool fullScreenMode(); + void setFullScreenMode(bool aMode); + void updateSession(); + bool isLocalPlayerPlaying() const; + bool isRemotePlayerPlaying() const; + bool isMinimized()const; + void minimize(); + void maximize(); + void shareImage(const QString&); + void shareCamera(); + +public: // Data + + QByteArray mEngineName; + QString mSessionTitle; + QString mRecipient; + QString mPhoneNumber; + LcViewLayoutHint mViewLayout; + QTimer* mCloseTimer; + HbDialog* mInvitingNote; // Not owned + HbDialog* mWaitingNote; // Not owned + HbDialog* mAcceptQuery; // Not owned + HbDialog* mRecipientQuery; // Not owned + QString mPendingAction; + bool mBlocked; + bool mFullScreen; + int mSessionDurationTimerId; + QTime mSessionDurationStartTime; + LcUiEngine& mUiEngine; + +public: + simulationState mPlayerStateLocal; + simulationState mSimulatorRemote; + bool mSpeakerState; + bool mMuteState; + bool mMainCamera; + QProcess *mLocalPlayerProcess; + QProcess *mRemotePlayerProcess; + QString mProgram; + QString mProgramImage; + QString mLocalMovieName; + +private: + LcUiEngineSimulator* mSimulator; + +friend class LcUiEngineSimulator; +}; + +#endif // LCUIENGINEPRIVATE_H + + +// End of file diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcuiengine/tsrc/win32/lcuienginesimulator.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcuiengine/tsrc/win32/lcuienginesimulator.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,281 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + +//USER +#include "lcconfiguration.h" +#include "LcUiEngine_p.h" +#include "lcuidefs.h" +#include "lclogger.h" +#include "lcuienginesimulator.h" + + +//SYSTEM +#include +#include +#include +#include +#include +#include +#include + + +#define LC_VTPLUGIN_NAME "Videotelephony"; + +// ----------------------------------------------------------------------------- +// LcUiEngineSimulator::LcUiEngineSimulator +// ----------------------------------------------------------------------------- +// +LcUiEngineSimulator::LcUiEngineSimulator( LcUiEnginePrivate& uiEngine) + :mUiEngine( uiEngine ) +{ + mConfig = new LcConfiguration(); + mConfig->parse(); + mTimer = new QTimer( this ); + connect( mTimer, SIGNAL(timeout()), this, SLOT(timerEvent()) ); + iSimulatorCount = 0; +} + +// ----------------------------------------------------------------------------- +// LcUiEngineSimulator::~LcUiEngineSimulator +// ----------------------------------------------------------------------------- +// +LcUiEngineSimulator::~LcUiEngineSimulator() +{ + LC_QDEBUG( "livecomms [UI] -> LcUiEngineSimulator::~LcUiEngineSimulator()" ) + delete mConfig; + delete mTimer; + LC_QDEBUG( "livecomms [UI] <- LcUiEngineSimulator::~LcUiEngineSimulator()" ) +} + +// ----------------------------------------------------------------------------- +// LcUiEngineSimulator::~LcUiEngineSimulator +// ----------------------------------------------------------------------------- +// +void LcUiEngineSimulator::start() +{ + mTimer->start(mConfig->mTimerDuration); +} + +// ----------------------------------------------------------------------------- +// LcUiEngineSimulator::~LcUiEngineSimulator +// ----------------------------------------------------------------------------- +// +void LcUiEngineSimulator::stop() +{ + mTimer->stop(); + mUiEngine.stopped(); +} + +// ----------------------------------------------------------------------------- +// LcUiEngineSimulator::~LcUiEngineSimulator +// ----------------------------------------------------------------------------- +// +int LcUiEngineSimulator::layout() +{ + return mConfig->mLayout; +} + +// ----------------------------------------------------------------------------- +// LcUiEngineSimulator::~LcUiEngineSimulator +// ----------------------------------------------------------------------------- +// +QString LcUiEngineSimulator::phoneNo() +{ + return mConfig->mPhoneNumber; +} + +// ----------------------------------------------------------------------------- +// LcUiEngineSimulator::~LcUiEngineSimulator +// ----------------------------------------------------------------------------- +// +QString LcUiEngineSimulator::sessionTitle() +{ + return mConfig->mSessionTitle; +} + +// ----------------------------------------------------------------------------- +// LcUiEngineSimulator::~LcUiEngineSimulator +// ----------------------------------------------------------------------------- +// +QString LcUiEngineSimulator::remoteAddress() +{ + return mConfig->mRecipient; +} + +// ----------------------------------------------------------------------------- +// LcUiEngineSimulator::zoom +// ----------------------------------------------------------------------------- +// +void LcUiEngineSimulator::timerEvent() +{ + switch( mConfig->mLayout ){ + case 0 : { + break; + } + case 1:{ + simulateLiveSharingSend(); + break; + } + case 2:{ + simulateLiveSharingReceive(); + break; + } + case 3:{ + // TODO : Add simulation + break; + } + case 4:{ + simulateTwoWaySharing(); + break; + } + case 5:{ + simulateVideoTelephony(); + break; + } + default:{ + + break; + } + } + + iSimulatorCount++; +} + +// ----------------------------------------------------------------------------- +// LcUiEngineSimulator::zoom +// ----------------------------------------------------------------------------- +// +void LcUiEngineSimulator::simulateLiveSharingSend() +{ + switch ( iSimulatorCount ){ + case 0:{ + mUiEngine.mInvitingNote->show(); + mUiEngine.localPlayerPreparing(); + break; + } + case 1:{ + mUiEngine.mInvitingNote->hide();; + mUiEngine.localPlayerBuffering(); + break; + } + case 2:{ + mUiEngine.localPlayerPlaying(); + break; + } + default:{ + mUiEngine.sessionDurationChanged(QString::number(iSimulatorCount)); + break; + } + } +} + +// ----------------------------------------------------------------------------- +// LcUiEngineSimulator::zoom +// ----------------------------------------------------------------------------- +// +void LcUiEngineSimulator::simulateLiveSharingReceive() +{ + switch ( iSimulatorCount ){ + case 0:{ + mUiEngine.mAcceptQuery->show(); + mUiEngine.remotePlayerPreparing(); + break; + } + case 1:{ + mUiEngine.mAcceptQuery->hide(); + mUiEngine.mWaitingNote->show(); + mUiEngine.remotePlayerBuffering(); + break; + } + case 2:{ + mUiEngine.mWaitingNote->hide(); + mUiEngine.remotePlayerPlaying(); + break; + } + default:{ + mUiEngine.sessionDurationChanged(QString::number(iSimulatorCount)); + break; + } + } +} + +// ----------------------------------------------------------------------------- +// LcUiEngineSimulator::zoom +// ----------------------------------------------------------------------------- +// +void LcUiEngineSimulator::simulateTwoWaySharing() +{ + switch ( iSimulatorCount ){ + case 0:{ + mUiEngine.localPlayerPreparing(); + mUiEngine.remotePlayerPreparing(); + break; + } + case 1:{ + mUiEngine.localPlayerBuffering(); + mUiEngine.remotePlayerBuffering(); + break; + } + case 2:{ + mUiEngine.localPlayerPlaying(); + mUiEngine.remotePlayerPlaying(); + break; + } + default:{ + mUiEngine.sessionDurationChanged(QString::number(iSimulatorCount)); + break; + } + } +} + +// ----------------------------------------------------------------------------- +// LcUiEngineSimulator::zoom +// ----------------------------------------------------------------------------- +// +void LcUiEngineSimulator::simulateVideoTelephony() +{ + switch ( iSimulatorCount ){ + case 0:{ + mUiEngine.localPlayerPreparing(); + mUiEngine.remotePlayerPreparing(); + break; + } + case 1:{ + mUiEngine.localPlayerBuffering(); + mUiEngine.remotePlayerBuffering(); + break; + } + case 2:{ + if( !mUiEngine.isRemotePlayerPlaying() ){ + mUiEngine.remotePlayerPlaying(); + } + break; + } + case 3:{ + if( !mUiEngine.isLocalPlayerPlaying() ){ + mUiEngine.localPlayerPlaying(); + } + break; + } + default:{ + mUiEngine.sessionDurationChanged(QString::number(iSimulatorCount)); + break; + } + } +} + +// End of File diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcuiengine/tsrc/win32/lcuienginesimulator.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcuiengine/tsrc/win32/lcuienginesimulator.h Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,72 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ +#ifndef LCUIENGINESIMULATOR_H +#define LCUIENGINESIMULATOR_H + +//SYSTEM +#include +#include +#include + +class QTimer; +class LcUiEnginePrivate; +class LcConfiguration; + +/* + * Live Comms simulator + */ +class LcUiEngineSimulator : public QObject +{ + Q_OBJECT + +public: + + LcUiEngineSimulator ( LcUiEnginePrivate& uiEngine ); + ~LcUiEngineSimulator (); + int layout(); + QString sessionTitle(); + QString remoteAddress(); + QString phoneNo(); + void setSimulation(int index){iSimulatorCount = index;}; + int simulation(){return iSimulatorCount;}; +public: + void start(); + void stop(); + +public slots: + + void timerEvent(); + +private: + void simulateLiveSharingSend(); + void simulateLiveSharingReceive(); + void simulateTwoWaySharing(); + void simulateVideoTelephony(); + +private: // Data + + QTimer* mTimer; + LcConfiguration* mConfig; + LcUiEnginePrivate& mUiEngine; + int iSimulatorCount; + +}; + +#endif // LCUIENGINESIMULATOR_H + + +// End of file diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcuiengine/tsrc/win32/lcvideowidget.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcuiengine/tsrc/win32/lcvideowidget.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,91 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + +//USER +#include "lcvideowidget.h" + +//SYSTEM +#include + +const qreal lcVideoWidgetCornerRounding = 10.0; + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +LcVideoWidget::LcVideoWidget(QGraphicsItem *parent, bool showVideo) : + HbTransparentWindow(parent), + mShowVideo(showVideo) +{ +} + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +LcVideoWidget::~LcVideoWidget() +{ +} + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void LcVideoWidget::paint( + QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) +{ + Q_UNUSED(widget) + if ( mShowVideo ){ + QPainter::CompositionMode origCompositionMode = painter->compositionMode(); + QPoint point(10,10); + QString str = QString::fromAscii("Playing..."); + if( mLocalPlayer ){ + painter->setBrush( Qt::red ); + }else{ + painter->setBrush( Qt::green ); + } + painter->setPen( Qt::white ); + painter->drawRoundedRect( option->exposedRect, + lcVideoWidgetCornerRounding, lcVideoWidgetCornerRounding); + painter->drawText(option->exposedRect.center(),str); + painter->setCompositionMode(origCompositionMode); // restore + } else { + painter->setBrush(QColor(0,0,0,255)); + painter->drawRoundedRect( option->exposedRect, + lcVideoWidgetCornerRounding, lcVideoWidgetCornerRounding); + } +} + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void LcVideoWidget::setShowVideo(bool showVideo) +{ + mShowVideo = showVideo; +} + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +bool LcVideoWidget::isShowingVideo() +{ + return mShowVideo; +} + +// End of file diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/lcuiengine/tsrc/win32/package.bat --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/lcuiengine/tsrc/win32/package.bat Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,65 @@ +@rem +@rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +@rem All rights reserved. +@rem This component and the accompanying materials are made available +@rem under the terms of "Eclipse Public License v1.0" +@rem which accompanies this distribution, and is available +@rem at the URL "http://www.eclipse.org/legal/epl-v10.html". +@rem +@rem Initial Contributors: +@rem Nokia Corporation - initial contribution. +@rem +@rem Contributors: +@rem +@rem Description: +@rem + +@goto invoke_perl + +#!perl +#line 5 + +################################################################################################################ +# This Script will package livecomms ui compoenents to run in windows environment +################################################################################################################ + +# Packages needed +use File::Find; # File operations +File::Spec::Win32; # File operartions +use Getopt::Long; # parameter handling +use Cwd; # Directory operations +Getopt::Long::Configure( "bundling_override","ignore_case_always" ); + +# Global variables +my $orbit_bin_dir = "c:\\hb\\bin"; +my $qt_bin_dir = "C:\\Qt\\4.6.0-beta1\\bin"; +my $mingw_dll = "C:\\MinGW\\bin\\mingwm10.dll"; +my $livecomms_ui_exe = "$qt_bin_dir\\musui.exe"; +my $livecomms_ui_dll = "$qt_bin_dir\\livecommsui.dll"; +my $package_name = "livecommsui_win"; +my $launch_bat = "launch.bat"; +my $config_file = "lcconfig.xml"; + + +opendir(DIR,$orbit_bin_dir) or die "Can't find dir: $!\n"; +closedir(DIR); +opendir(DIR,$qt_bin_dir) or die "Can't find dir: $!\n"; +closedir(DIR); +die "$livecomms_ui_exe Doesn't Exist!" unless (-e $livecomms_ui_exe) ; +die "$livecomms_ui_dll Doesn't Exist!" unless (-e $livecomms_ui_dll); +die "$mingw_dll Doesn't Exist!" unless (-e $mingw_dll); +opendir(DIR,$package_name) or system("mkdir $package_name"); +closedir(DIR); +system("copy $orbit_bin_dir $package_name\\*"); +system("copy $qt_bin_dir $package_name\\*"); +system("copy $mingw_dll $package_name\\*"); +system("copy $launch_bat $package_name\\*"); +system("copy $config_file $package_name\\*"); +system("del $package_name\.zip") if( -e "$package_name\.zip" ); +system("zip $package_name $package_name\\*"); +system("rmdir /s/q $package_name"); + +__END__ + +:invoke_perl +@perl -x -S C:\SynergyWorkArea\Mercurial\mmsharinguis\mmsharing\mmshlcui\mmshlcuiengine\win32\package.bat %1 %2 %3 %4 %5 %6 %7 %8 %9 diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/livecommsui.pro --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/livecommsui.pro Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,97 @@ +# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +# All rights reserved. +# This component and the accompanying materials are made available +# under the terms of "Eclipse Public License v1.0" +# which accompanies this distribution, and is available +# at the URL "http://www.eclipse.org/legal/epl-v10.html". +# Initial Contributors: +# Nokia Corporation - initial contribution. +# Contributors: +# Description: + +TEMPLATE = lib +TARGET = livecommsui +CONFIG += hb \ + dll \ + svg + +QT += xml + +DEFINES += LIVECOMMSUI_LIB +TRANSLATIONS = dialer.ts + +LCUI_DIR = lcui +LCUIENGINE_DIR = lcuiengine +DOCML_DIR = lcui/resources/lcviews + +DOCML += $$DOCML_DIR/lcidleview.docml +DOCML += $$DOCML_DIR/lcreceiveview.docml +DOCML += $$DOCML_DIR/lcreceiveonlyview.docml +DOCML += $$DOCML_DIR/lcsendview.docml +DOCML += $$DOCML_DIR/lctwowayview.docml +DOCML += $$DOCML_DIR/lcvtview.docml + +RESOURCES += $$LCUI_DIR/livecommsui.qrc + +INCLUDEPATH += $$LCUI_DIR/inc +INCLUDEPATH += $$LCUIENGINE_DIR/inc +INCLUDEPATH += ../inc + +# Input +HEADERS += $$LCUI_DIR/inc/lcviewmanager.h +HEADERS += $$LCUI_DIR/inc/lcviewmanager_p.h +HEADERS += $$LCUI_DIR/inc/lcview.h +HEADERS += $$LCUI_DIR/inc/lcuicomponentrepository.h +HEADERS += $$LCUI_DIR/inc/lceffecthandler.h +HEADERS += $$LCUI_DIR/inc/lcvideowidget.h +HEADERS += $$LCUIENGINE_DIR/inc/lcuiengine.h + +SOURCES += $$LCUI_DIR/src/lcviewmanager.cpp +SOURCES += $$LCUI_DIR/src/lcviewmanager_p.cpp +SOURCES += $$LCUI_DIR/src/lcview.cpp +SOURCES += $$LCUI_DIR/src/lcuicomponentrepository.cpp +SOURCES += $$LCUI_DIR/src/lceffecthandler.cpp +SOURCES += $$LCUIENGINE_DIR/src/lcuiengine.cpp + +libFiles.sources = livecommsui.dll +DEPLOYMENT += libFiles + +symbian: { + + INCLUDEPATH += /epoc32/include/ecom + INCLUDEPATH += $$APP_LAYER_SYSTEMINCLUDE + + HEADERS += $$LCUIENGINE_DIR/inc/lcuiengine_p.h + HEADERS += $$LCUIENGINE_DIR/inc/lcactivitymanager.h + + SOURCES += $$LCUIENGINE_DIR/src/lcuiengine_p.cpp + SOURCES += $$LCUIENGINE_DIR/src/lcactivitymanager.cpp + SOURCES += $$LCUI_DIR/src/lcvideowidget.cpp + + TARGET.UID2 = 0x1000008d + TARGET.UID3 = 0x2002434D + TARGET.CAPABILITY = CAP_GENERAL_DLL + TARGET.EPOCALLOWDLLDATA = 1 + + libFiles.path = "!:/sys/bin" + LIBS += -lecom \ + -lflogger \ + -lws32 \ + -lbafl \ + -lcone \ + -lcentralrepository \ + -lxqserviceutil \ + -ldialpad \ + -lxqsettingsmanager + + defFiles = "$${LITERAL_HASH}ifdef WINS" \ + "DEFFILE bwins/livecommsui.def" \ + "$${LITERAL_HASH}else" \ + "DEFFILE eabi/livecommsui.def" \ + "$${LITERAL_HASH}endif" + MMP_RULES += defFiles + + :BLD_INF_RULES.prj_exports += "$$LCUI_DIR/inc/lcviewmanager.h /epoc32/include/lcviewmanager.h" + :BLD_INF_RULES.prj_exports += "$$LCUI_DIR/inc/lcexport.h /epoc32/include/lcexport.h" +} + diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/livecommsui/tsrc/win32/livecommsui.pro --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/livecommsui/tsrc/win32/livecommsui.pro Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,61 @@ +# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +# All rights reserved. +# This component and the accompanying materials are made available +# under the terms of "Eclipse Public License v1.0" +# which accompanies this distribution, and is available +# at the URL "http://www.eclipse.org/legal/epl-v10.html". +# Initial Contributors: +# Nokia Corporation - initial contribution. +# Contributors: +# Description: + +TEMPLATE = lib +TARGET = livecommsui +CONFIG += hb \ + dll \ + svg + +QT += xml + +DEFINES += LIVECOMMSUI_LIB + +LCUI_DIR = ../../lcui +LCUIENGINE_DIR = ../../lcuiengine +LCUIENGINE_WIN32_DIR = $$LCUIENGINE_DIR/tsrc/win32 + +RESOURCES += $$LCUI_DIR/livecommsui.qrc + +INCLUDEPATH += $$LCUI_DIR/inc +INCLUDEPATH += $$LCUIENGINE_WIN32_DIR +INCLUDEPATH += $$LCUIENGINE_DIR/inc + +# Input +HEADERS += $$LCUI_DIR/inc/lcviewmanager.h +HEADERS += $$LCUI_DIR/inc/lcviewmanager_p.h +HEADERS += $$LCUI_DIR/inc/lcview.h +HEADERS += $$LCUI_DIR/inc/lcuicomponentrepository.h +HEADERS += $$LCUI_DIR/inc/lceffecthandler.h +HEADERS += $$LCUI_DIR/inc/lcvideowidget.h +HEADERS += $$LCUIENGINE_DIR/inc/lcuiengine.h + +SOURCES += $$LCUI_DIR/src/lcviewmanager.cpp +SOURCES += $$LCUI_DIR/src/lcviewmanager_p.cpp +SOURCES += $$LCUI_DIR/src/lcview.cpp +SOURCES += $$LCUI_DIR/src/lcuicomponentrepository.cpp +SOURCES += $$LCUI_DIR/src/lceffecthandler.cpp +SOURCES += $$LCUIENGINE_DIR/src/lcuiengine.cpp + +libFiles.sources = livecommsui.dll +DEPLOYMENT += libFiles + +win32: { + INCLUDEPATH += $$LCUIENGINE_WIN32_DIR + + HEADERS += $$LCUIENGINE_WIN32_DIR/lcuiengine_p.h + HEADERS += $$LCUIENGINE_WIN32_DIR/lcuienginesimulator.h + HEADERS += $$LCUIENGINE_WIN32_DIR/lcconfiguration.h + SOURCES += $$LCUIENGINE_WIN32_DIR/lcuiengine_p.cpp + SOURCES += $$LCUIENGINE_WIN32_DIR/lcuienginesimulator.cpp + SOURCES += $$LCUIENGINE_WIN32_DIR/lcconfiguration.cpp + SOURCES += $$LCUIENGINE_WIN32_DIR/lcvideowidget.cpp +} diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshapp/help/data/xhtml.zip Binary file mmsharing/mmshapp/help/data/xhtml.zip has changed diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshapp/help/group/bld.inf --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/mmshapp/help/group/bld.inf Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,26 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - Initial contribution +* +* Contributors: +* +* +* Description: +* Export help related files. +* +*/ + +#include +PRJ_EXPORTS +:zip ../data/xhtml.zip /epoc32/data/z/resource/ overwrite +:zip ../data/xhtml.zip /epoc32/winscw/c/resource/ overwrite + +../inc/msh.hlp.hrh MW_LAYER_PLATFORM_EXPORT_PATH(csxhelp/msh.hlp.hrh) +../rom/mmshuihelps_variant.iby CUSTOMER_APP_LAYER_IBY_EXPORT_PATH(mmshuihelps_variant.iby) diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshapp/help/inc/msh.hlp.hrh --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/mmshapp/help/inc/msh.hlp.hrh Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,17 @@ +// +// msh.hlp.hrh +// + +// +// File generated by CSXHelp Utilities on 2009-04-17 +// + +#ifndef __MSH_HLP_HRH__ +#define __MSH_HLP_HRH__ + +_LIT(KMSH_HLP_LIVE, "MSH_HLP_LIVE"); // +_LIT(KMSH_HLP_CLIP, "MSH_HLP_CLIP"); // +_LIT(KMSH_HLP_SETTINGS, "MSH_HLP_SETTINGS"); // +_LIT(KMSH_HLP_RECEIVE, "MSH_HLP_RECEIVE"); // + +#endif \ No newline at end of file diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshapp/help/rom/mmshuihelps_variant.iby --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/mmshapp/help/rom/mmshuihelps_variant.iby Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,28 @@ +/* +* 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: +* +*/ + +#ifndef __MMSHUIHELPS_VARIANT_IBY__ +#define __MMSHUIHELPS_VARIANT_IBY__ + +#if defined(FF_S60_HELPS_IN_USE) && defined(__MULTIMEDIA_SHARING) + data=LOCALISE(DATAZ_\resource\xhtml\%02d\0x10282391\contents.zip, RESOURCE_FILES_DIR\xhtml\%02d\0x10282391\contents.zip) + data=LOCALISE(DATAZ_\resource\xhtml\%02d\0x10282391\index.xml, RESOURCE_FILES_DIR\xhtml\%02d\0x10282391\index.xml) + data=LOCALISE(DATAZ_\resource\xhtml\%02d\0x10282391\keywords.xml, RESOURCE_FILES_DIR\xhtml\%02d\0x10282391\keywords.xml) + data=LOCALISE(DATAZ_\resource\xhtml\%02d\0x10282391\meta.xml, RESOURCE_FILES_DIR\xhtml\%02d\0x10282391\meta.xml) +#endif + +#endif \ No newline at end of file diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshapp/inc/lcapplication.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/mmshapp/inc/lcapplication.h Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,47 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ +#ifndef LCAPPLICATION_H +#define LCAPPLICATION_H + +#include + +class LcHbApplication : public HbApplication +{ + Q_OBJECT + friend class UT_LcApplication; + +public: + + LcHbApplication(int &argc, char *argv[]); + ~LcHbApplication(); + +signals: + + void handleQuit(); + +public slots: + + //from QCoreApplication + static void quit(); + +private: //data + + static LcHbApplication* self; +}; + + +#endif //LCAPPLICATION_H diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshapp/mmshapp.pro --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/mmshapp/mmshapp.pro Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,35 @@ +# +# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +# All rights reserved. +# This component and the accompanying materials are made available +# under the terms of "Eclipse Public License v1.0" +# which accompanies this distribution, and is available +# at the URL "http://www.eclipse.org/legal/epl-v10.html". +# +# Initial Contributors: +# Nokia Corporation - initial contribution. +# +# Contributors: +# +# Description: +# +# + +TEMPLATE = app +TARGET = musui +CONFIG += hb + +# Input +HEADERS += inc/lcapplication.h + +SOURCES += src/main.cpp +SOURCES += src/lcapplication.cpp + +LIBS += -llivecommsui + +symbian: { + TARGET.UID2 = 0x100039CE + TARGET.UID3 = 0x10282391 + TARGET.CAPABILITY = CAP_APPLICATION NetworkControl SwEvent Location MultimediaDD + RSS_RULES += "hidden = KAppIsHidden;" +} diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshapp/src/lcapplication.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/mmshapp/src/lcapplication.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,56 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ +//USER +#include "lcapplication.h" + +//SYSTEM +#include + +LcHbApplication* LcHbApplication::self = 0; + + +// ----------------------------------------------------------------------------- +// LcHbApplication::LcHbApplication +// ----------------------------------------------------------------------------- +// +LcHbApplication::LcHbApplication(int &argc, char *argv[]) : + HbApplication(argc, argv) +{ + self = this; +} + +// ----------------------------------------------------------------------------- +// LcHbApplication::~LcHbApplication +// ----------------------------------------------------------------------------- +// +LcHbApplication::~LcHbApplication() +{ + self = 0; +} + + +// ----------------------------------------------------------------------------- +// LcHbApplication::quit +// ----------------------------------------------------------------------------- +// +void LcHbApplication::quit() +{ + qDebug() << "LcHbApplication::quit()"; + if (self) { + emit self->handleQuit(); + } +} diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshapp/src/main.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/mmshapp/src/main.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,42 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ +//USER +#include "lcapplication.h" + +//SYSTEM +#include +#include +#include + +int main(int argc, char *argv[]) +{ + int err=-1; + if (argc >= 2) + { + LcHbApplication app(argc, argv); + QString engineName(QString::fromUtf8(argv[1])); + QString applicationName("Video Sharing"); + LcViewManager viewManager(engineName,applicationName); + + QObject::connect( &app, SIGNAL( handleQuit() ), + &viewManager, SLOT( terminateSession() ), + Qt::QueuedConnection ); + + err = app.exec(); + } + return err; +} diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshapp/tsrc/ut_mmshapp/inc/ut_lcapplication.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/mmshapp/tsrc/ut_mmshapp/inc/ut_lcapplication.h Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,58 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ +#ifndef UT_LCAPPLICATION_H +#define UT_LCAPPLICATION_H + + +#include + +class LcHbApplication; + +class UT_LcApplication : public QObject +{ + Q_OBJECT + +private slots: + +/* + * In addition, there are four private slots that are not treated as testfunctions. + * They will be executed by the testing framework and can be used to initialize and clean up + * either the entire test or the current test function. + * + * initTestCase() will be called before the first testfunction is executed. + * cleanupTestCase() will be called after the last testfunction was executed. + * init() will be called before each testfunction is executed. + * cleanup() will be called after every testfunction. +*/ + void initTestCase(); + void cleanupTestCase(); + void init(); + void cleanup(); + + +private slots: //test methods + + void testConstructorDestructor(); + void testQuit(); + +private: + + LcHbApplication* mLcApplication; + int mArgc; +}; + +#endif //UT_LCAPPLICATION_H diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshapp/tsrc/ut_mmshapp/src/main.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/mmshapp/tsrc/ut_mmshapp/src/main.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,48 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + +#include + +#include "ut_lcapplication.h" +#include "testresultxmlparser.h" + + +int main(int argc, char *argv[]) +{ + bool promptOnExit(true); + for (int i=0; i + + +void UT_LcApplication::initTestCase() +{ +} + +void UT_LcApplication::cleanupTestCase() +{ +} + + +void UT_LcApplication::init() +{ + mArgc = 0; + mLcApplication = new LcHbApplication( mArgc, 0 ); +} + +void UT_LcApplication::cleanup() +{ + delete mLcApplication; +} + +void UT_LcApplication::testConstructorDestructor() + { + QVERIFY( mLcApplication ); + QVERIFY( LcHbApplication::self == mLcApplication ); + + delete mLcApplication; + mLcApplication = 0; + QVERIFY( !LcHbApplication::self ); + } + +void UT_LcApplication::testQuit() +{ + QSignalSpy spy( mLcApplication, SIGNAL(handleQuit()) ); + LcHbApplication::quit(); + QCOMPARE( spy.count(), 1 ); + + mLcApplication->self = 0; + spy.clear(); + LcHbApplication::quit(); + QCOMPARE( spy.count(), 0 ); +} diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshapp/tsrc/ut_mmshapp/stubs/hbapplication.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/mmshapp/tsrc/ut_mmshapp/stubs/hbapplication.h Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,30 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ +#ifndef HBAPPLICATION_H +#define HBAPPLICATION_H + +#include +#include + +class HbApplication : public QObject +{ +public: + HbApplication(int &/*argc*/, char */*argv*/[]){}; + ~HbApplication(){}; +}; + +#endif//HBAPPLICATION_H diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshapp/tsrc/ut_mmshapp/ut_mmshapp.pro --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/mmshapp/tsrc/ut_mmshapp/ut_mmshapp.pro Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,50 @@ +# +# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +# All rights reserved. +# This component and the accompanying materials are made available +# under the terms of "Eclipse Public License v1.0" +# which accompanies this distribution, and is available +# at the URL "http://www.eclipse.org/legal/epl-v10.html". +# +# Initial Contributors: +# Nokia Corporation - initial contribution. +# +# Contributors: +# +# Description: +# +# + +TEMPLATE = app +TARGET = + +CONFIG += hb +QT += testlib xml +#CONFIG += qtestlib + +MUSAPP_DIR = ../.. +MUS_DIR = ../../../.. + +DEPENDPATH += . + +INCLUDEPATH += inc +INCLUDEPATH += stubs +INCLUDEPATH += $$MUSAPP_DIR/inc +INCLUDEPATH += $$MUS_DIR/tsrc/qtestutils/inc + +# Input +HEADERS += inc/ut_lcapplication.h +HEADERS += $$MUSAPP_DIR/inc/lcapplication.h + +SOURCES += src/main.cpp +SOURCES += src/ut_lcapplication.cpp +SOURCES += $$MUSAPP_DIR/src/lcapplication.cpp +SOURCES += $$MUS_DIR/tsrc/qtestutils/src/testresultxmlparser.cpp + + +symbian: { + TARGET.UID2 = 0x100039CE + TARGET.UID3 = 0xE5923aef + TARGET.CAPABILITY = ALL -TCB + TARGET.EPOCALLOWDLLDATA = 1 +} diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshavailability/group/musavailabilityplugin.mmp --- a/mmsharing/mmshavailability/group/musavailabilityplugin.mmp Thu Aug 19 09:51:39 2010 +0300 +++ b/mmsharing/mmshavailability/group/musavailabilityplugin.mmp Tue Aug 31 15:12:07 2010 +0300 @@ -91,8 +91,6 @@ LIBRARY sipprofile.lib LIBRARY sipprofilecli.lib LIBRARY centralrepository.lib -LIBRARY pbkeng.lib -LIBRARY phoneengine.lib LIBRARY cntmodel.lib // Contact Model LIBRARY sipcodec.lib LIBRARY sdpcodec.lib // SDP Codec @@ -104,6 +102,6 @@ LIBRARY inetprotutil.lib LIBRARY estor.lib DEBUGLIBRARY flogger.lib -LIBRARY insock.lib +LIBRARY insock.lib PAGED diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshavailability/inc/mmusavacapabilityqueryobserver.h --- a/mmsharing/mmshavailability/inc/mmusavacapabilityqueryobserver.h Thu Aug 19 09:51:39 2010 +0300 +++ b/mmsharing/mmshavailability/inc/mmusavacapabilityqueryobserver.h Tue Aug 31 15:12:07 2010 +0300 @@ -20,6 +20,7 @@ #include #include +#include class CMusAvaCapabilityQueryBase; @@ -67,6 +68,10 @@ virtual TBool CapabilityQueryAnswered( TBool aAnswered = EFalse ) = 0; + /** + * Advertise about fast mode capability + */ + virtual void FastModeResolved( MusSettingsKeys::TFastMode aMode ) = 0; }; diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshavailability/inc/musavaavailability.h --- a/mmsharing/mmshavailability/inc/musavaavailability.h Thu Aug 19 09:51:39 2010 +0300 +++ b/mmsharing/mmshavailability/inc/musavaavailability.h Tue Aug 31 15:12:07 2010 +0300 @@ -147,16 +147,7 @@ } MUS_LOG( "mus: [MUSAVA] <- CMusAvaAvailability::SetState" ) } - - /** - * Calculate the availabilited to decide to show the toolbar or not. - * - */ - void AvailabilitiesAbleToShowIndicator() - { - iObserver.AvailabilitiesAbleToShowIndicator(); - } - + /** * Returns specific availability state. * @@ -167,7 +158,14 @@ return iObserver.Available( aAvailability ); } - + /** + * Invitation has been received. + */ + virtual void PrepareForReceivedInviteL() + { + MUS_LOG( "mus: [MUSAVA] <-> CMusAvaAvailability::PrepareForReceivedInviteL" ) + } + virtual ~CMusAvaAvailability() {}; protected: @@ -189,4 +187,4 @@ }; -#endif // __CMUSAVAAVAILABILITY_H__ \ No newline at end of file +#endif // __CMUSAVAAVAILABILITY_H__ diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshavailability/inc/musavaavailabilityobserver.h --- a/mmsharing/mmshavailability/inc/musavaavailabilityobserver.h Thu Aug 19 09:51:39 2010 +0300 +++ b/mmsharing/mmshavailability/inc/musavaavailabilityobserver.h Tue Aug 31 15:12:07 2010 +0300 @@ -57,8 +57,6 @@ virtual MMusAvaObserver::TAvailabilityStatus AvailabilityPluginState() = 0; - - virtual void AvailabilitiesAbleToShowIndicator() = 0; }; diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshavailability/inc/musavacalleventmonitor.h --- a/mmsharing/mmshavailability/inc/musavacalleventmonitor.h Thu Aug 19 09:51:39 2010 +0300 +++ b/mmsharing/mmshavailability/inc/musavacalleventmonitor.h Tue Aug 31 15:12:07 2010 +0300 @@ -49,16 +49,9 @@ * @return call direction */ TInt CallDirectionL(); - - /** - * get call Privacy - * - * @return call privacy - */ - TInt CallPrivacyL(); - void GetTelNumberL( TDes& aTelNumber ); + void GetTelNumberL( TDes& aTelNumber, TBool& aIsSipUri ); /** * Start to monitoring call state events @@ -117,6 +110,7 @@ */ void ConstructL(); + TBool IsSipUri( const TDesC& aTelNumber ) const; private: // data diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshavailability/inc/musavacapability.h --- a/mmsharing/mmshavailability/inc/musavacapability.h Thu Aug 19 09:51:39 2010 +0300 +++ b/mmsharing/mmshavailability/inc/musavacapability.h Tue Aug 31 15:12:07 2010 +0300 @@ -25,7 +25,7 @@ #include #include #include "musunittesting.h" - +#include "mussettingskeys.h" class CMusAvaCapabilityExchange; class CSIPServerTransaction; @@ -47,6 +47,7 @@ _LIT8( KCapabilitySwisFormatList, "98 96" ); _LIT8( KCapabilitySwisFormatListH263Only, "96" ); _LIT8( KCapabilitySDPAttributeCodecH264, "H264" ); +_LIT8( KCapabilitySDPAttributeFastMode, "fastmode" ); //a=keywds:fastmode, see RFC 4566 const TUint64 KCapabilitySDPAttributeClockrate = 90000; const TUint64 KCapabilitySDPAttributePayloadType = 96; @@ -169,6 +170,18 @@ static const CSdpAttributeField* Attribute( const RStringF& aMedia, const RStringF& aAttribute, CSdpDocument& aSDP ); + + /** + * Finds fast mode value from the SDP document + */ + static MusSettingsKeys::TFastMode ResolveFastModeL( CSdpDocument& aSdp ); + + /** + * Add fast mode related attribute to SDP, if fast mode is supported + */ + static void AddFastModeL( CSdpDocument& aSdp ); + + public://new functions /** diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshavailability/inc/musavacapabilityquerybase.h --- a/mmsharing/mmshavailability/inc/musavacapabilityquerybase.h Thu Aug 19 09:51:39 2010 +0300 +++ b/mmsharing/mmshavailability/inc/musavacapabilityquerybase.h Tue Aug 31 15:12:07 2010 +0300 @@ -44,7 +44,7 @@ const TInt KCapabilityCapabilitesReady = 1; const TInt KCapabilityCapabilitesNotFound = 2; const TInt KCapabilityCapabilitiesForbidden = 3; -const TInt KMaxRemoteUriLength = 512; + /** * Sent capability query (OPTIONS) @@ -113,12 +113,6 @@ */ HBufC8* ContentLC(); - /** - * Check if Recipient address is same as that in profile. - * - */ - TBool ValidateUri(); - public: // new functions @@ -220,18 +214,10 @@ CUri8* iRegisteredContact; CUri8* iOriginator; CSIPClientTransaction* iTrx; - TBuf8 iRemoteUri; //for unit testing CAPABILITY_UT_DEFINITIONS -private: // Friend classes - -#ifdef EUNIT_TEST - friend class UT_CMusAvaCapabilityQuery; - friend class UT_CMusAvaCapabilityQueryBase; -#endif - }; diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshavailability/inc/musavacapabilitytimer.h --- a/mmsharing/mmshavailability/inc/musavacapabilitytimer.h Thu Aug 19 09:51:39 2010 +0300 +++ b/mmsharing/mmshavailability/inc/musavacapabilitytimer.h Tue Aug 31 15:12:07 2010 +0300 @@ -45,10 +45,6 @@ protected: // From CTimer void RunL(); - -protected: // from CActive - - TInt RunError( TInt aError ); private: diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshavailability/inc/musavaconnectionavailability.h --- a/mmsharing/mmshavailability/inc/musavaconnectionavailability.h Thu Aug 19 09:51:39 2010 +0300 +++ b/mmsharing/mmshavailability/inc/musavaconnectionavailability.h Tue Aug 31 15:12:07 2010 +0300 @@ -25,7 +25,6 @@ #include "musavatelephonystatusobserver.h" #include "musavaconnectionmonitorobserver.h" #include "musunittesting.h" - #include #include @@ -51,10 +50,9 @@ class CMusAvaConnectionAvailability : public CMusAvaAvailability, public MMusAvaTelephonyStatusObserver, public MMusAvaConnectionMonitorObserver - { -public: - - /** + { + public: + /** * Two-phased constructor * * @since S60 v3.2 @@ -64,26 +62,27 @@ * @return Returns pointer to CMusAvaInterface object */ static CMusAvaConnectionAvailability* NewL( MMusAvaAvailabilityObserver& aObserver, - CMusAvaSettingsImp& aSettings ); + CMusAvaSettingsImp& aSettings ); - static CMusAvaConnectionAvailability* NewLC( MMusAvaAvailabilityObserver& aObserver, - CMusAvaSettingsImp& aSettings ); + static CMusAvaConnectionAvailability* NewLC( MMusAvaAvailabilityObserver& aObserver, + CMusAvaSettingsImp& aSettings ); - /** + /** * Destructor */ + ~CMusAvaConnectionAvailability(); protected: - CMusAvaConnectionAvailability( MMusAvaAvailabilityObserver& aObserver, - CMusAvaSettingsImp& aSettings ); + CMusAvaConnectionAvailability( MMusAvaAvailabilityObserver& aObserver, + CMusAvaSettingsImp& aSettings ); - void ConstructL(); - + void ConstructL(); -public:// from base class CMusAvaAvailability +// from base class CMusAvaAvailability +public: /** * Executes for the availability. @@ -109,15 +108,14 @@ public: // from MMusAvaTelephonyStatusObserver - /** - * Current Network Mode Status - * - * @since S60 v3.2 - * @return - */ + /** + * Current Network Mode Status + * + * @since S60 v3.2 + * @return + */ void PhoneNetworkModeStatus( - RMobilePhone::TMobilePhoneNetworkMode aStatus ); - + RMobilePhone::TMobilePhoneNetworkMode aStatus ); /** * Current Network Registration Status * @@ -125,25 +123,27 @@ * @return */ void NetworkRegistrationStatus( - RMobilePhone::TMobilePhoneRegistrationStatus aRegStatus ); + RMobilePhone::TMobilePhoneRegistrationStatus aRegStatus ); public: //from MMusAvaConnectionMonitorObserver - /** - * Event from connection monitor server - * - */ + /** + * Event from connection monitor server + * + */ void EventL(const CConnMonEventBase& aConnMonEvent); + + private: - /** - * Check needs to have manual activation - * - * @since S60 v3.2 - * @return TAvailabilityStatus is returned - */ - MMusAvaObserver::TAvailabilityStatus ManualActivationL(); + /** + * Check needs to have manual activation + * + * @since S60 v3.2 + * @return TAvailabilityStatus is returned + */ + MMusAvaObserver::TAvailabilityStatus ManualActivationL(); /** * Current test network registration agains the settings @@ -153,8 +153,6 @@ */ MMusAvaObserver::TAvailabilityStatus NetworkRegistrationAndSettingsL(); - static TBool OperatorVariant(); - private: // data /** @@ -187,7 +185,6 @@ */ CMusAvaSettingsImp& iSettings; - MUS_UNITTEST( UT_CMusAvaConnectionAvailability ) }; diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshavailability/inc/musavacontactavailability.h --- a/mmsharing/mmshavailability/inc/musavacontactavailability.h Thu Aug 19 09:51:39 2010 +0300 +++ b/mmsharing/mmshavailability/inc/musavacontactavailability.h Tue Aug 31 15:12:07 2010 +0300 @@ -22,19 +22,16 @@ #include "musavaavailability.h" #include "musunittesting.h" #include "mussettingskeys.h" -#include "muscallmonitorobserver.h" + #include -#include class MMusAvaAvailabilityObserver; class MMusAvaObserver; class CMusAvaSharedObject; -class CPbkContactEngine; class CContactIdArray; -class CPbkContactItem; class CContactItem; class CMusAvaSettingsImp; -class CMusAvaCallEventMonitor; + /** * Implemets register vailability. @@ -43,8 +40,7 @@ * * @lib musavailabilityplugin.lib */ -class CMusAvaContactAvailability : public CMusAvaAvailability, - public MMusCallMonitorObserver +class CMusAvaContactAvailability : public CMusAvaAvailability { public: @@ -99,118 +95,23 @@ * @return Name of *this* availability. */ virtual MMusAvaObserver::TAvailabilityName Name(); - // from class MMusCallMonitorObserver - /** - * Call connected - * - * @since S60 v3.2 - * @return - */ - virtual void CallConnectedL( const TDesC& aTelNumber ); - - /** - * Call on hold - * - * @since S60 v3.2 - * @return - */ - virtual void CallHoldL( const TDesC& aTelNumber ); - - /** - * Call disconnected - * - * @since S60 v3.2 - * @return - */ - virtual void NoActiveCallL(); - - /** - * Call on hold - * - * @since S60 v3.2 - * @return - */ - virtual void ConferenceCallL(); - - - virtual void ConferenceCallLTerminated(); private: /** * */ - TBool ActiveCallL( CDesCArrayFlat*& aContactsArray ); - - /** - * - */ - TBool ContactL( CContactIdArray*& aContactIdArray, - CPbkContactEngine& aPbkContactEngine ); - - /** - * - */ - void UpdateContactNameL( CContactItem& aContactItem ); - - /** - * - */ - TInt ContactArrayL( CContactIdArray*& aContactIdArray, - CPbkContactEngine& aPbkContactEngine ); - - /** - * - */ - TInt ContactItem( CContactIdArray& aContactIdArray, - CPbkContactItem*& aPbkContactItem, - CPbkContactEngine& aPbkContactEngine ); - - /** - * - */ - TBool ContactId( CPbkContactItem& aPbkItem, - TPbkFieldId aTPbkFieldId ); - /** - * - */ - TPbkFieldId ContactIdSearch( CContactIdArray& aContactIdArray, - CPbkContactEngine& aPbkContactEngine ); - - /** - * - */ - TBool PhoneResolutionL( CPbkContactItem& aPbkItem, - CDesCArrayFlat*& aContactsArray ); + TBool ActiveCallL( CDesCArrayFlat*& aContactsArray ); /** * */ - TBool ResolveAddressesL( CPbkContactItem& aPbkItem, - CDesCArrayFlat*& aContactsArray, - TPbkFieldId aTPbkFieldId ); - - /** - * - */ - TBool ResolvePhoneContactL( CPbkContactItem& aPbkItem, - CDesCArrayFlat*& aContactsArray ); + TBool ResolveAddressesL( const TDesC& aContactId, + CDesCArrayFlat*& aContactsArray ); - /* ------------------------------------------------------------------------- - * Checks that whether aDesItem present in aDesArray. - * Utility function used to avoid dublication. - * ------------------------------------------------------------------------- - */ - TBool IsExistAlready(const MDesCArray& aDesArray, - const TDesC& aDesItem); - + private: - /** - * iPhoneStatus subscribe property resource. When the resource - * changed somewhere,availability will get notification. - */ - CMusAvaCallEventMonitor* iPhoneStatus; /** * resolved contact name @@ -236,4 +137,4 @@ }; -#endif // __MUSAVACONTACTAVAILABILITY_H__ \ No newline at end of file +#endif // __MUSAVACONTACTAVAILABILITY_H__ diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshavailability/inc/musavadefaultimp.h --- a/mmsharing/mmshavailability/inc/musavadefaultimp.h Thu Aug 19 09:51:39 2010 +0300 +++ b/mmsharing/mmshavailability/inc/musavadefaultimp.h Tue Aug 31 15:12:07 2010 +0300 @@ -162,7 +162,8 @@ virtual TBool MandatoryAvailability(); virtual TBool ExtensionAvailability(); virtual MMusAvaObserver::TAvailabilityStatus AvailabilityState( MMusAvaObserver::TAvailabilityName aAvailability ); - + virtual void PrepareForReceivedInviteL(); + public: // from base class MMusAvaAvailabilityObserver /** @@ -189,8 +190,6 @@ virtual MMusAvaObserver::TAvailabilityStatus AvailabilityPluginState(); - virtual void AvailabilitiesAbleToShowIndicator(); - private: // data diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshavailability/inc/musavanetworkavailability.h --- a/mmsharing/mmshavailability/inc/musavanetworkavailability.h Thu Aug 19 09:51:39 2010 +0300 +++ b/mmsharing/mmshavailability/inc/musavanetworkavailability.h Tue Aug 31 15:12:07 2010 +0300 @@ -21,7 +21,6 @@ #include "musavaavailability.h" #include "muscallmonitorobserver.h" -#include "musunittesting.h" #include #include @@ -46,8 +45,6 @@ class CMusAvaNetworkAvailability : public CMusAvaAvailability, public MMusCallMonitorObserver { - MUS_UNITTEST( UT_CMusAvaNetworkAvailability ) - public: /** * Two-phased constructor @@ -126,7 +123,7 @@ * @since S60 v3.2 * @return */ - void CallConnectedL( const TDesC& aTelNumber ); + void CallConnectedL( const TDesC& aTelNumber, TBool aIsSipUri ); /** * Call on hold @@ -134,7 +131,7 @@ * @since S60 v3.2 * @return */ - virtual void CallHoldL( const TDesC& aTelNumber ); + virtual void CallHoldL( const TDesC& aTelNumber, TBool aIsSipUri ); /** * Call disconnected @@ -151,15 +148,10 @@ * @return */ virtual void ConferenceCallL(); - - - /** - * Call on conf Terminated - * - * @since S60 v3.2 - * @return - */ - virtual void ConferenceCallLTerminated(); + +private: + + void SetRemoteHostL( const TDesC& aTelNumber, TBool aIsSipUri ); private: // data @@ -178,8 +170,8 @@ */ CMusAvaSettingsImp& iSettings; - TBool iConfcall; + MUS_UNITTEST( UT_CMusAvaNetworkAvailability ) }; -#endif // __MUSAVANETWORKAVAILABILITY_H__ \ No newline at end of file +#endif // __MUSAVANETWORKAVAILABILITY_H__ diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshavailability/inc/musavaoptionhandler.h --- a/mmsharing/mmshavailability/inc/musavaoptionhandler.h Thu Aug 19 09:51:39 2010 +0300 +++ b/mmsharing/mmshavailability/inc/musavaoptionhandler.h Tue Aug 31 15:12:07 2010 +0300 @@ -124,6 +124,11 @@ */ virtual MMusAvaObserver::TAvailabilityName Name(); + /** + * Invitation has been received. + */ + virtual void PrepareForReceivedInviteL(); + public: // functions from base class MMusAvaCapabilityQueryObserver @@ -158,9 +163,45 @@ */ void VideoCodecsResolvedL( const MDesCArray& aVideoCodecs ); - TBool CapabilityQueryAnswered( TBool aAnswered ); + void FastModeResolved( MusSettingsKeys::TFastMode aMode ); + +private: + + /** + * Change state. + * @param aNewState, proposed new state + * @return KErrNone if successfull + */ + TInt DoSetState( MMusAvaObserver::TAvailabilityStatus aNewState ); + + /** + * Handle state change in fast mode, state change may be modified + * based on fast mode session setup progress. + * @param aNewState, proposed new state + * @param aCouldNotProceed, ETrue if state change occured because + * couldn't proceed (e.g. missing information) + * @return new state to set + */ + MMusAvaObserver::TAvailabilityStatus HandleFastModeL( + MMusAvaObserver::TAvailabilityStatus aNewState ); + + MMusAvaObserver::TAvailabilityStatus HandleFastModeAvailableL( + MMusAvaObserver::TAvailabilityStatus aNewState ); + + MMusAvaObserver::TAvailabilityStatus HandleFastModeOptionsNotSentL( + MMusAvaObserver::TAvailabilityStatus aNewState ); + + MMusAvaObserver::TAvailabilityStatus HandleFastModeOptionNotAvailableL( + MMusAvaObserver::TAvailabilityStatus aNewState ); + + void HandleFastModeQueryAnswered(); + + TBool FastModeNegotiatedByAnswerMT(); + + TBool FastModeNegotiationFailedMO(); + private: /** @@ -179,6 +220,9 @@ TBool iCapabilitiesRequestAnswered; TBool iCapabilityQueryAnswered; + TBool iFastModeCapable; + TBool iFastModeAvailabilityDelayed; + MUS_UNITTEST ( UT_CMusAvaOptionHandler ) MUS_UNITTEST ( UT_CMusAvaCapabilityExchange ) MUS_UNITTEST ( UT_CMusAvaCapability ) @@ -187,4 +231,4 @@ MUS_UNITTEST ( UT_CMusAvaCapabilityQuery ) }; -#endif // __MUSAVAOPTIONHANDLER_H__ \ No newline at end of file +#endif // __MUSAVAOPTIONHANDLER_H__ diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshavailability/inc/musavaregisteravailability.h --- a/mmsharing/mmshavailability/inc/musavaregisteravailability.h Thu Aug 19 09:51:39 2010 +0300 +++ b/mmsharing/mmshavailability/inc/musavaregisteravailability.h Tue Aug 31 15:12:07 2010 +0300 @@ -5,7 +5,7 @@ * 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". -* Version : %version: 15.1.4 % << Don't touch! Updated by Synergy at check-out. +* Version : %version: 15.1.5 % << Don't touch! Updated by Synergy at check-out. * * Initial Contributors: * Nokia Corporation - initial contribution. @@ -26,7 +26,6 @@ #include "musavaavailability.h" #include "musavasipconnectionadapter.h" #include "musavasipprofileregistryadapter.h" -#include "mussettingskeys.h" #include #include @@ -204,7 +203,7 @@ * EFalse otherwise */ TBool RegistrationStatusL(); - + private: // Data /** @@ -227,9 +226,9 @@ */ CSIPConnection* iConnection; - MusSettingsKeys::TOperatorVariant iOperatorVariant; + MUS_UNITTEST( UT_CMusAvaRegisterAvailability ) }; -#endif // __MUSAVAREGISTERAVAILABILITY_H__ +#endif // __MUSAVAREGISTERAVAILABILITY_H__ \ No newline at end of file diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshavailability/inc/musavasettingsimp.h --- a/mmsharing/mmshavailability/inc/musavasettingsimp.h Thu Aug 19 09:51:39 2010 +0300 +++ b/mmsharing/mmshavailability/inc/musavasettingsimp.h Tue Aug 31 15:12:07 2010 +0300 @@ -61,7 +61,13 @@ public: // from MMusAvaSettings - /** + /** + * Returns the fast mode value. + */ + + virtual MusSettingsKeys::TFastMode FastMode() const; + + /** * Returns the manual activation * */ @@ -129,22 +135,18 @@ * @param aObserver Pointer to observer intercase */ virtual void SetObserver( MMusAvaSettingsObserver& aObserver ); + + /* + * Gets the settings observer pointer + * + */ + virtual MMusAvaSettingsObserver* Observer(); /** * Sets the for the manual activation * */ virtual void SetManualActivation( TManualActivation aManualActivation ); - - - /** - * Returns the direction of the mobile call. - * - * @return 0, if the direction of the call is unknown. - * 1, call is from public number. - * 2, call is from private number - */ - virtual TInt CallPrivacy(); public: @@ -242,15 +244,6 @@ * @param aProfileId the SIP profile id. */ void SetSipProfileId( TInt aProfileId ); - - - /** - * Sets the call privacy e.g. current call number is from private number, - * should be shown on MT. - * - * @param aPrivacy the SIP profile id. - */ - void SetCallPrivacy( TInt aPrivacy ); /** * Returns the id of the preferable SIP profile. @@ -258,15 +251,21 @@ * @return The SIP profile id. */ CMusAvaSip& Sip(); - - void SetOptionSentNumber( const TDesC& aTelNumber ); - - const TDesC& OptionSentTelNumber() const; + + /** + * Sets the fast mode value + */ + void SetFastMode( MusSettingsKeys::TFastMode aMode ); - void ReleaseOptionSentNumber(); + /** + * Sets contact resolving uri + */ + void SetUriForContactResolvingL( const TDesC& aRemoteUri ); - - + /** + * Gets contact resolving uri + */ + TPtrC ContactResolvingUri(); private: @@ -297,9 +296,6 @@ * Owns. */ HBufC* iTelNumber; - - HBufC* iOptionSentTelNumber; - /** * Current Call Direction @@ -358,15 +354,17 @@ TManualActivation iManualActivation; /** - * Call privacy indicator - * - */ - - TInt iCallPrivacy; + * Fast mode + */ + MusSettingsKeys::TFastMode iFastMode; + + /** + * Contact resolving + */ + HBufC* iContactResolvingUri; MUS_UNITTEST( UT_CMusAvaSettingsImp ) MUS_UNITTEST( UT_CMusAvaOptionHandler ) - MUS_UNITTEST( UT_CMusAvaTerminal ) }; #endif __MUSAVASETTINGSIMP_H__ diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshavailability/inc/musavasip.h --- a/mmsharing/mmshavailability/inc/musavasip.h Thu Aug 19 09:51:39 2010 +0300 +++ b/mmsharing/mmshavailability/inc/musavasip.h Tue Aug 31 15:12:07 2010 +0300 @@ -12,7 +12,7 @@ * Contributors: * * Description: This is client interface class for SIP-server -* Version : %version: 23 % << Don't touch! Updated by Synergy at check-out. +* Version : %version: 24 % << Don't touch! Updated by Synergy at check-out. * */ @@ -223,11 +223,6 @@ * that this pointer is NULL. */ CMusAvaClientResolverUtil* ClientResolverUtil() const; - - /** - * Deletes unnecessary CSIPConnection - */ - void DeleteSIPConnection(); private: diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshavailability/inc/musavasipheaderutil.h --- a/mmsharing/mmshavailability/inc/musavasipheaderutil.h Thu Aug 19 09:51:39 2010 +0300 +++ b/mmsharing/mmshavailability/inc/musavasipheaderutil.h Tue Aug 31 15:12:07 2010 +0300 @@ -115,14 +115,6 @@ static void AddAcceptSdpHeaderL(RPointerArray& aRequestHeaders ); - /** - * Utility class to add SIP privacy header when the PS key - * NMusSessionInformationApi::KMusClirSetting PS indicates so. - * @lib AlwaysOnlinePlugin.dll - */ - static void AddPrivacyHeaderL( - RPointerArray& aRequestHeaders ); - }; diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshavailability/src/musavacalleventmonitor.cpp --- a/mmsharing/mmshavailability/src/musavacalleventmonitor.cpp Thu Aug 19 09:51:39 2010 +0300 +++ b/mmsharing/mmshavailability/src/musavacalleventmonitor.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -117,66 +117,39 @@ CallDirectionL" ) return direction; } - + // -------------------------------------------------------------------------- -// Returns the direction of connected call. +// aTelNumber will be filled with telephone number or SIP URI of current +// connected call // -------------------------------------------------------------------------- // -TInt CMusAvaCallEventMonitor::CallPrivacyL() - { - MUS_LOG( "mus: [CMusAvaCallEventMonitor] -> CMusAvaCallEventMonitor::\ - CallPrivacyL" ) - // retrieve call count - TInt privacy( 0 ); - User::LeaveIfError( RProperty::Get( - NMusSessionInformationApi::KCategoryUid, - NMusSessionInformationApi::KMUSPrivacy, - privacy ) ); +void +CMusAvaCallEventMonitor::GetTelNumberL( TDes& aTelNumber, TBool& aIsSipUri ) - MUS_LOG1( "mus: [CMusAvaCallEventMonitor] Call privacy = %d ", - privacy ) - MUS_LOG( "mus: [CMusAvaCallEventMonitor] <- CMusAvaCallEventMonitor::\ - CallPrivacyL" ) - return privacy; - } - -// -------------------------------------------------------------------------- -// aTelNumber will be filled with telephone number of current connected call -// -------------------------------------------------------------------------- -// -void CMusAvaCallEventMonitor::GetTelNumberL( TDes& aTelNumber ) { MUS_LOG( "mus: [CMusAvaCallEventMonitor] -> CMusAvaCallEventMonitor::\ GetTelNumberL" ) - TBuf telNumber; - MUS_LOG( "mus: [CMusAvaCallEventMonitor] CMusAvaCallEventMonitor::\ - GetTelNumberL - a" ) - TInt error = RProperty::Get( - NMusSessionInformationApi::KCategoryUid, - NMusSessionInformationApi::KMusTelNumber, - telNumber ); + TInt error = RProperty::Get( NMusSessionInformationApi::KCategoryUid, + NMusSessionInformationApi::KMusTelNumber, + aTelNumber ); MUS_LOG1( "mus: [CMusAvaCallEventMonitor] CMusAvaCallEventMonitor::\ GetTelNumberL (%d)", error ) - if ( error != KErrOverflow ) - { - User::LeaveIfError( error ); - } - - TInt length = telNumber.Length(); - TInt maxLength = aTelNumber.MaxLength(); - if ( maxLength < length ) + if ( error == KErrOverflow ) { - // buffer is too small for returned tel number. - MUS_LOG2( "mus: [CMusAvaCallEventMonitor] CMusAvaCallEventMonitor::\ - GetTelNumberL - Buffer too small (%d, %d), leave", - maxLength, length ) - User::Leave( KErrOverflow ); + MUS_LOG1( "mus: [CMusAvaCallEventMonitor] CMusAvaCallEventMonitor::\ + GetTelNumberL - Buffer too small (%d), leave", + aTelNumber.MaxLength() ) + User::Leave( error ); } - - aTelNumber.Copy( telNumber ); + User::LeaveIfError( error ); + + aIsSipUri = IsSipUri( aTelNumber ); + MUS_LOG1( "mus: [CMusAvaCallEventMonitor] CMusAvaCallEventMonitor::\ + GetTelNumberL (is SIP URI=%d)", aIsSipUri ) + MUS_LOG( "mus: [CMusAvaCallEventMonitor] <- CMusAvaCallEventMonitor::\ GetTelNumberL" ) } @@ -248,38 +221,19 @@ case NMusSessionInformationApi::ECallConnected: { - // retrieve telnumber - TInt error; TBuf telNumber; - error = RProperty::Get( - NMusSessionInformationApi::KCategoryUid, - NMusSessionInformationApi::KMusTelNumber, - telNumber ); - - if ( error != KErrOverflow ) - { - User::LeaveIfError( error ); - } - - iObserver.CallConnectedL( telNumber ); + TBool isSipUri( EFalse ); + GetTelNumberL( telNumber, isSipUri ); + iObserver.CallConnectedL( telNumber, isSipUri ); break; } case NMusSessionInformationApi::ECallHold: { - // retrieve telnumber - TInt error; TBuf telNumber; - error = RProperty::Get( - NMusSessionInformationApi::KCategoryUid, - NMusSessionInformationApi::KMusTelNumber, - telNumber ); - - if ( error != KErrOverflow ) - { - User::LeaveIfError( error ); - } - iObserver.CallHoldL( telNumber ); + TBool isSipUri( EFalse ); + GetTelNumberL( telNumber, isSipUri ); + iObserver.CallHoldL( telNumber, isSipUri ); break; } @@ -288,11 +242,6 @@ iObserver.ConferenceCallL(); break; } - case NMusSessionInformationApi::EConferenceTerminated: - { - iObserver.ConferenceCallLTerminated(); - break; - } default: { @@ -322,3 +271,15 @@ MUS_LOG( "mus: [MUSAOP] <- CMusAvaCallEventMonitor::RunError" ) return aError; } + + +// -------------------------------------------------------------------------- +// CMusAvaCallEventMonitor::IsSipUri() +// -------------------------------------------------------------------------- +// +TBool CMusAvaCallEventMonitor::IsSipUri( const TDesC& aTelNumber ) const + { + _LIT( KSipPrefix, "sip:" ); + TPtrC prefix = aTelNumber.Left( KSipPrefix().Length() ); + return prefix.Compare( KSipPrefix ) == 0; + } diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshavailability/src/musavacapability.cpp --- a/mmsharing/mmshavailability/src/musavacapability.cpp Thu Aug 19 09:51:39 2010 +0300 +++ b/mmsharing/mmshavailability/src/musavacapability.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -23,14 +23,11 @@ #include "musavacapabilitycontext.h" #include "mmusavacapabilityqueryobserver.h" #include "mussettings.h" -#include "mussettingskeys.h" #include #include #include -//#include #include -//#include #include #include #include @@ -209,6 +206,9 @@ aResponseContent.AttributeFields().AppendL( type ); CleanupStack::Pop( type ); + //Add fast startup mode, if supported + AddFastModeL( aResponseContent ); + MUS_LOG( "mus: [MUSAVA] Adding media line to SDP" ) //media line CSdpMediaField* mediaLine = MediaLineLC( @@ -340,6 +340,54 @@ return codecs; } +// ----------------------------------------------------------------------------- +// CMusAvaCapability::ResolveFastModeL +// ----------------------------------------------------------------------------- +// +MusSettingsKeys::TFastMode CMusAvaCapability::ResolveFastModeL( + CSdpDocument& aSDP ) + { + MUS_LOG( "mus: [MUSAVA]: -> CMusAvaCapability::ResolveFastModeL" ) + MusSettingsKeys::TFastMode mode = MusSettingsKeys::EFastModeOff; + if ( MultimediaSharingSettings::FastStartupModeL() == + MusSettingsKeys::EFastModeOn ) + { + MUS_LOG( "mus: [MUSAVA] Checking if a=keywds:fastmode present..." ) + const CSdpAttributeField* keywds = CMusAvaCapability::Attribute( + MusAvaCapabilityContext::SDPStringL( + SdpCodecStringConstants::EAttributeKeywds ), + aSDP ); + if ( keywds && + keywds->Value().Compare( KCapabilitySDPAttributeFastMode ) == 0 ) + { + mode = MusSettingsKeys::EFastModeOn; + } + } + MUS_LOG( "mus: [MUSAVA]: <- CMusAvaCapability::ResolveFastModeL" ) + return mode; + } + +// ----------------------------------------------------------------------------- +// CMusAvaCapability::ResolveFastModeL +// ----------------------------------------------------------------------------- +// +void CMusAvaCapability::AddFastModeL( CSdpDocument& aSdp ) + { + MUS_LOG( "mus: [MUSAVA]: -> CMusAvaCapability::AddFastModeL" ) + if ( MultimediaSharingSettings::FastStartupModeL() == + MusSettingsKeys::EFastModeOn ) + { + CSdpAttributeField* fastmode = CSdpAttributeField::NewLC( + MusAvaCapabilityContext::SDPStringL( + SdpCodecStringConstants::EAttributeKeywds ), + KCapabilitySDPAttributeFastMode ); + + aSdp.AttributeFields().AppendL( fastmode ); + CleanupStack::Pop( fastmode ); + } + MUS_LOG( "mus: [MUSAVA]: <- CMusAvaCapability::AddFastModeL" ) + } + // ----------------------------------------------------------------------------- // CMusAvaCapability::Attribute diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshavailability/src/musavacapabilityquery.cpp --- a/mmsharing/mmshavailability/src/musavacapabilityquery.cpp Thu Aug 19 09:51:39 2010 +0300 +++ b/mmsharing/mmshavailability/src/musavacapabilityquery.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -366,7 +366,10 @@ type->Value().Compare( KCapabilitySDPAttributeType ) == 0 ) ; } - + + MusSettingsKeys::TFastMode mode = CMusAvaCapability::ResolveFastModeL( aSDP ); + Capability().Exchange().QueryObserver().FastModeResolved( mode ); + return valid; } diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshavailability/src/musavacapabilityquerybase.cpp --- a/mmsharing/mmshavailability/src/musavacapabilityquerybase.cpp Thu Aug 19 09:51:39 2010 +0300 +++ b/mmsharing/mmshavailability/src/musavacapabilityquerybase.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -32,14 +32,13 @@ #include #include #include -#include #include #include #include #include #include #include -#include + #include "mussettings.h" #include "muslogger.h" @@ -49,14 +48,6 @@ #include "musavaterminal.h" #include "musavacapabilitycontext.h" #include "musavasipheaderutil.h" -#include "mussesseioninformationapi.h" - -_LIT8( KMusSipPrefix, "sip:" ); -_LIT8( KMusTelPrefix, "tel:" ); -_LIT8( KMusPlusSign, "+" ); -_LIT8( KMusAtSign, "@" ); - -const TInt KMusMinDigitCountInTelNumber = 7; // -------------------------------------------------------------------------- // C++ constructor @@ -161,7 +152,6 @@ CleanupStack::PopAndDestroy(sipAddress); HBufC8* sipAddress8 = EscapeUtils::ConvertFromUnicodeToUtf8L( aSipAddress ); - iRemoteUri.Copy( sipAddress8->Des() ) ; CleanupStack::PushL( sipAddress8 ); iTerminal = &Capability().Exchange().TerminalL( sipAddress8->Des() ); CleanupStack::PopAndDestroy( sipAddress8 ) ; @@ -240,24 +230,7 @@ iOriginator->Uri().UriDes()); MUS_LOG( "mus: [MUSAVA] AddPreferredIdentityHeaderL -> Success ") AddContactHeaderL( headers ); - MUS_LOG( "mus: [MUSAVA] AddContactHeaderL -> Success ") - - TBool usePrivacy = MultimediaSharingSettings::PrivacySetting(); - if ( usePrivacy ) - { - NMusSessionInformationApi::TMusClirSetting clir = - NMusSessionInformationApi::ESendOwnNumber; - RProperty::Get( NMusSessionInformationApi::KCategoryUid, - NMusSessionInformationApi::KMusClirSetting, - reinterpret_cast( clir ) ); - usePrivacy = ( clir == NMusSessionInformationApi::EDoNotSendOwnNumber ); - } - - if (usePrivacy) - { - CMusAvaSipheaderUtil::AddPrivacyHeaderL( headers ); - MUS_LOG( "mus: [MUSAVA] AddPrivacyHeaderL -> Success ") - } + MUS_LOG( "mus: [MUSAVA] AddContactHeaderL -> Success ") //terminal ID if ( Capability().Exchange().TerminalId().Length() > 0 ) { @@ -278,16 +251,6 @@ CleanupStack::Pop( remoteUri ); CleanupStack::PushL( request ); - if (usePrivacy) - { - _LIT8( KAnonymous, - "\"Anonymous\" " ); - CSIPFromHeader* from = CSIPFromHeader::DecodeL( KAnonymous ); - CleanupStack::PushL( from ); - request->SetFromHeaderL( from ); - CleanupStack::Pop( from ); - } - request->SetMethodL( SIPStrings::StringF( SipStrConsts::EOptions ) ); @@ -507,7 +470,7 @@ //application CSdpAttributeField* application = CSdpAttributeField::NewLC( MusAvaCapabilityContext::SDPStringL( - SdpCodecStringConstants::EMediaApplication ), + SdpCodecStringConstants::EMediaApplication ), KCapabilitySwisApplication ); aResponseContent.AttributeFields().AppendL( application ); @@ -526,13 +489,16 @@ aResponseContent.AttributeFields().AppendL( type ); CleanupStack::Pop( type ); + // Fast startup mode + CMusAvaCapability::AddFastModeL( aResponseContent ); + MUS_LOG( "mus: [MUSAVA] Adding media line to SDP" ) //media line - CSdpMediaField* mediaLine=CSdpMediaField::NewLC( - MusAvaCapabilityContext::SDPStringL + CSdpMediaField* mediaLine = CSdpMediaField::NewLC( + MusAvaCapabilityContext::SDPStringL (SdpCodecStringConstants::EMediaVideo ), NULL, - MusAvaCapabilityContext::SDPStringL + MusAvaCapabilityContext::SDPStringL (SdpCodecStringConstants::EProtocolRtpAvp ), KCapabilitySwisFormatListH263Only ); @@ -572,111 +538,7 @@ aResponseContent.MediaFields().AppendL( mediaLine ); CleanupStack::Pop( mediaLine ); - MUS_LOG( "mus: [MUSAVA] <- CMusAvaCapabilityQueryBase::OtherSDPHeadersL" ) } -// -------------------------------------------------------------------------- -// CMusAvaCapabilityQueryBase::ValidateUri -// -------------------------------------------------------------------------- -// -TBool CMusAvaCapabilityQueryBase::ValidateUri() - { - MUS_LOG( "mus: [MUSAVA] -> CMusAvaCapabilityQueryBase::ValidateUri" ) - - TBool valid = ETrue; - - const TDesC8& originator = iOriginator->Uri().UriDes(); - MUS_LOG_TDESC8( "mus: [MUSAVA] originator uri: ", originator ) - TBuf8 sipUri; - TBuf8 telUri; - - if ( iRemoteUri.FindF( KMusSipPrefix ) != KErrNotFound ) - { - sipUri.Copy( iRemoteUri ); - MUS_LOG_TDESC8( "mus: [MUSAVA] sip uri: ", sipUri ) - } - else if ( iRemoteUri.FindF( KMusTelPrefix ) != KErrNotFound ) - { - telUri.Copy( iRemoteUri ); - MUS_LOG_TDESC8( "mus: [MUSAVA] tel uri: ", telUri ) - } - - // Tel Uri case - if ( telUri.Length() > 0 ) - { - telUri.Trim(); - - // Remove prefix and plus sign from remote uri if there is - TPtrC8 telUriWithoutPrefix = - telUri.Right( telUri.Length() - KMusTelPrefix().Length() ); - MUS_LOG_TDESC8( "mus: [MUSAVA] telUriWithoutPrefix: ", telUriWithoutPrefix ) - - TPtrC8 numberPartOfTelUri = - telUriWithoutPrefix.Find( KMusPlusSign ) == 0 ? - telUriWithoutPrefix.Right( telUriWithoutPrefix.Length() - 1 ) : - telUriWithoutPrefix; - MUS_LOG_TDESC8( "mus: [MUSAVA] numberPartOfTelUri: ", numberPartOfTelUri ) - - // Remove prefix and domain part from uri in profile - TPtrC8 originatorWithoutPrefix = - originator.Right( originator.Length() - KMusSipPrefix().Length() ); - MUS_LOG_TDESC8( "mus: [MUSAVA] originatorWithoutPrefix: ", originatorWithoutPrefix ) - - TPtrC8 usernameOfOriginator = - originatorWithoutPrefix.Find( KMusPlusSign ) == 0 ? - originatorWithoutPrefix.Right( originatorWithoutPrefix.Length() - 1 ) : - originatorWithoutPrefix; - - TInt posOfAtSign = originatorWithoutPrefix.Find( KMusAtSign ); - - if ( posOfAtSign >= KMusMinDigitCountInTelNumber ) - { - usernameOfOriginator.Set( - originatorWithoutPrefix.Mid( (originatorWithoutPrefix.Find( KMusAtSign ) - - KMusMinDigitCountInTelNumber), KMusMinDigitCountInTelNumber ) ); - MUS_LOG_TDESC8( "mus: [MUSAVA] usernameOfOriginator: ", usernameOfOriginator ) - } - - else - { - usernameOfOriginator.Set( originatorWithoutPrefix.Left( posOfAtSign ) ); - MUS_LOG_TDESC8( "mus: [MUSAVA] usernameOfOriginator: ", usernameOfOriginator ) - } - - if ( numberPartOfTelUri.Length() >= KMusMinDigitCountInTelNumber ) - { - numberPartOfTelUri.Set( numberPartOfTelUri.Right( KMusMinDigitCountInTelNumber ) ); - MUS_LOG_TDESC8( "mus: [MUSAVA] numberPartOfTelUri: ", numberPartOfTelUri ) - } - - - if ( numberPartOfTelUri == usernameOfOriginator ) - { - MUS_LOG( "mus: Recipient address is evaluated to be same as in profile.\ - We do not send OPTIONS") - valid = EFalse; - MUS_LOG( "mus: [MUSAVA] <- CMusAvaCapabilityQueryBase::ValidateUri" ) - return valid; - } - } - - // SIP Uri case - if ( sipUri.Length() > 0 ) - { - if ( !originator.Compare( sipUri ) ) - { - MUS_LOG( "mus: Recipient address is evaluated to be same as in profile.\ - We do not send OPTIONS") - valid = EFalse; - MUS_LOG( "mus: [MUSAVA] <- CMusAvaCapabilityQueryBase::ValidateUri" ) - return valid; - } - } - - MUS_LOG( "mus: [MUSAVA] <- CMusAvaCapabilityQueryBase::ValidateUri" ) - return valid; - } - - diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshavailability/src/musavacapabilitysipagent.cpp --- a/mmsharing/mmshavailability/src/musavacapabilitysipagent.cpp Thu Aug 19 09:51:39 2010 +0300 +++ b/mmsharing/mmshavailability/src/musavacapabilitysipagent.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -30,7 +30,6 @@ #include #include -#include "mussettings.h" #include "muslogger.h" #include "musavacapabilityexchange.h" #include "musavacapabilityquery.h" @@ -165,25 +164,12 @@ { MUS_LOG( "mus: [MUSAVA] -> CMusAvaCapabilitySipAgent::IncomingRequest" ) TInt retval = KErrNone; - MusSettingsKeys::TOperatorVariant variantValue = MusSettingsKeys::EStandard; - TRAPD( error, variantValue = - MultimediaSharingSettings::OperatorVariantSettingL() ); - if( error ) - { - MUS_LOG("CMusAvaCapabilitySipAgent::IncomingRequest\ - Get OperatorVariantSettingL worng"); - } - if ( aTransaction->Type() == SIPStrings::StringF( SipStrConsts::EOptions ) ) { - // Answer 200OK when CS call remain at Availability States - //or at EMusAvaOptionNotAvailable State in operatorspecific mode + // Answer 200OK only when CS call remain at Availability States if ( MMusAvaObserver::EMusAvaStatusNotExecuted <= - iAvailabilityObserver.AvailabilityPluginState() - ||( ( iAvailabilityObserver.AvailabilityPluginState() == - MMusAvaObserver::EMusAvaOptionNotAvailable ) - && ( variantValue == MusSettingsKeys::EOperatorSpecific ))) + iAvailabilityObserver.AvailabilityPluginState() ) { retval = iCapabilityExchange.QueryObserver().CapabilityQueryAnswered() ? diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshavailability/src/musavacapabilitytimer.cpp --- a/mmsharing/mmshavailability/src/musavacapabilitytimer.cpp Thu Aug 19 09:51:39 2010 +0300 +++ b/mmsharing/mmshavailability/src/musavacapabilitytimer.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -56,18 +56,6 @@ { iNotify->OnExpiredL( iStatus.Int() ); } - -// ------------------------------------------------------------------------- -// If RunL() leaves,It should be handled here. -// ------------------------------------------------------------------------- -// -TInt CMusAvaCapabilityTimer::RunError( TInt aError ) - { - // Nothing can be done here. - aError = KErrNone; - - return aError; - } // --------------------------------------------------------------------------- diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshavailability/src/musavaconnectionavailability.cpp --- a/mmsharing/mmshavailability/src/musavaconnectionavailability.cpp Thu Aug 19 09:51:39 2010 +0300 +++ b/mmsharing/mmshavailability/src/musavaconnectionavailability.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -30,6 +30,7 @@ #include "mussettings.h" #include "mussettingskeys.h" #include "muslogger.h" +#include "musfactorysettings.h" #include #include @@ -126,9 +127,10 @@ // --------------------------------------------------------------------------- // From CMusAvaAvailability. -// Executes for the availability. +// Executes for the availability // --------------------------------------------------------------------------- // + void CMusAvaConnectionAvailability::DoExecuteL() { MUS_LOG( "mus: [MUSAVA] -> CMusAvaConnectionAvailability::DoExecuteL()" ) @@ -136,36 +138,23 @@ MUS_LOG( "mus: [MUSAVA] Check network mode" ) RMobilePhone::TMobilePhoneNetworkMode networkmode = iNetworkModeStatus->PhoneNetworkMode(); - if ( networkmode == RMobilePhone::ENetworkModeWcdma|| - networkmode == RMobilePhone::ENetworkModeTdcdma || - networkmode == RMobilePhone::ENetworkModeCdma95 || - networkmode == RMobilePhone::ENetworkModeCdma2000 ) + + TBool SupportedNetwork = EFalse; + + TRAPD( err, SupportedNetwork = MusFactorySettings::IsSupportedL(networkmode) ); + + + if ( err != KErrNone ) + { + MUS_LOG1( "mus: [MUSAVA] Reading activation setting error:%d", err ) + SetState( MMusAvaObserver::EMusActivationError ); + } + + else if ( SupportedNetwork ) { - status = NetworkRegistrationAndSettingsL(); - if ( status == MMusAvaObserver::EMusAvaStatusAvailable ) - { - MUS_LOG( "mus: [MUSAVA] Network available" ) - SetState( status ); - } - else - { - MUS_LOG1( "mus: [MUSAVA] Activation error: %d", status ) - SetState( status ); - } - } - else if( networkmode == RMobilePhone::ENetworkModeGsm) - { - TInt edgeDtmSupport = KErrNone; - TRAPD( err, edgeDtmSupport = - MultimediaSharingSettings::EdgeDtmSupportSettingL() ); - if( err != KErrNone ) - { - MUS_LOG1( "mus: [MUSAVA] Reading activation setting error:%d", err ) - SetState( MMusAvaObserver::EMusActivationError ); - } - else if( edgeDtmSupport == MusSettingsKeys::EDtmModeAllowed ) - { - MUS_LOG( "mus: [MUSAVA] Edge Network Mode allowed in settings " ) + if ( networkmode == RMobilePhone::ENetworkModeGsm ) + { + MUS_LOG( "mus: [MUSAVA] Edge Network Mode allowed in settings " ) if( iConnectionMonitor->ConnectionCount() > 0) { MUS_LOG( "mus: [MUSAVA] Atlease one packect connection exists " ) @@ -175,39 +164,27 @@ { MUS_LOG( "mus: [MUSAVA] No Packet connection exists now." ) SetState( MMusAvaObserver::EMusAvaEdgeDtmStatusUnknown ); - } - } - else - { - MUS_LOG( "mus: [MUSAVA] Edge Network Mode Not allowed in settings " ) - SetState( MMusAvaObserver::EMusAvaNetworkType ); - } - } - else - { + } + } + + else + { + status = NetworkRegistrationAndSettingsL(); + MUS_LOG1( "mus: [MUSAVA] Activation Status: %d", status ) + SetState( status ); + } + } + else + { MUS_LOG( "mus: [MUSAVA] Network not available" ) SetState( MMusAvaObserver::EMusAvaNetworkType ); - } - + } + MUS_LOG( "mus: [MUSAVA] <- CMusAvaConnectionAvailability::DoExecuteL()" ) } // --------------------------------------------------------------------------- -// --------------------------------------------------------------------------- -// -TBool CMusAvaConnectionAvailability::OperatorVariant() - { - MusSettingsKeys::TOperatorVariant variantValue = MusSettingsKeys::EStandard; - TRAPD( error, variantValue = - MultimediaSharingSettings::OperatorVariantSettingL() ); - - return ( variantValue == MusSettingsKeys::EOperatorSpecific && - error == KErrNone ); - - } - -// --------------------------------------------------------------------------- // From CMusAvaAvailability. // Stops execution. // --------------------------------------------------------------------------- @@ -235,9 +212,8 @@ return MMusAvaObserver::EMusAvaBearerStatus; } - // --------------------------------------------------------------------------- -// CMusAvaConnectionAvailability::PhoneNetworkModeStatus +// CMusAvaConnectionAvailability::PhoneNetworkModeStatus // // --------------------------------------------------------------------------- // @@ -247,51 +223,28 @@ MUS_LOG( "mus: [MUSAVA] -> CMusAvaConnectionAvailability::\ PhoneNetworkModeStatus()" ) MUS_LOG1( "mus: [MUSAVA] Mobile Phone Network Status = ", aStatus ) + + TBool SupportedNetwork = EFalse; + + TRAPD( err, SupportedNetwork = MusFactorySettings::IsSupportedL(aStatus) ); + + if ( err != KErrNone || !SupportedNetwork ) + { + MUS_LOG( "mus: [MUSAVA] Network not available" ) + SetState( MMusAvaObserver::EMusAvaNetworkType ); + } + else + { + MMusAvaObserver::TAvailabilityStatus status = + MMusAvaObserver::EMusActivationError; + TRAP_IGNORE( status = NetworkRegistrationAndSettingsL() ); + SetState( status ); + } - switch ( aStatus ) - { - case RMobilePhone::ENetworkModeWcdma : - case RMobilePhone::ENetworkModeTdcdma : - case RMobilePhone::ENetworkModeCdma95: - case RMobilePhone::ENetworkModeCdma2000: - { - MMusAvaObserver::TAvailabilityStatus status = - MMusAvaObserver::EMusActivationError; - TRAP_IGNORE( status = NetworkRegistrationAndSettingsL() ); - SetState( status ); - break; - } - case RMobilePhone::ENetworkModeGsm : // For EDGE /DTM support - { - TInt edgeDtmSupport = 0; - TRAPD( err, edgeDtmSupport = - MultimediaSharingSettings::EdgeDtmSupportSettingL() ); - if( err != KErrNone ) - { - MUS_LOG1( "mus: [MUSAVA] Reading activation setting error:%d", err ) - SetState( MMusAvaObserver::EMusActivationError ); - } - else if( edgeDtmSupport == MusSettingsKeys::EDtmModeAllowed ) - { - MUS_LOG( "mus: [MUSAVA] Edge Network supported " ) - SetState( MMusAvaObserver::EMusAvaEdgeDtmStatusUnknown ); - } - else - { - SetState( MMusAvaObserver::EMusAvaNetworkType ); - } - break; - } - default : - { - SetState( MMusAvaObserver::EMusAvaNetworkType ); - } - } MUS_LOG( "mus: [MUSAVA] <- CMusAvaConnectionAvailability::\ PhoneNetworkModeStatus()" ) } - // --------------------------------------------------------------------------- // CMusAvaConnectionAvailability::NetworkRegistrationStatus // @@ -301,18 +254,30 @@ RMobilePhone::TMobilePhoneRegistrationStatus aRegStatus ) { MUS_LOG( "mus: [MUSAVA] -> CMusAvaConnectionAvailability::\ -NetworkRegistrationStatus()" ) + NetworkRegistrationStatus()" ) MUS_LOG1( "Mobile Phone Network Status = ", aRegStatus ) - - if( OperatorVariant() && + + MusSettingsKeys::TActivation activation = MusSettingsKeys::ENever; + + TRAPD( err, activation = MultimediaSharingSettings::ActivationSettingL() ); + if( err != KErrNone ) + { + MUS_LOG1( "mus: [MUSAVA] Reading activation setting error:%d", err ) + SetState( MMusAvaObserver::EMusActivationError ); + } + else + { + if( activation == MusSettingsKeys::EActiveInHomeNetworks && aRegStatus != RMobilePhone::ERegisteredOnHomeNetwork ) - { - MUS_LOG( "mus: [MUSAVA] Roaming not allowed" ) - SetState( MMusAvaObserver::EMusAvaRoamingError ); + { + MUS_LOG( "mus: [MUSAVA] -> CMusAvaConnectionAvailability::\ + NetworkRegistrationStatus()" ) + SetState( MMusAvaObserver::EMusAvaRoamingError ); + } } MUS_LOG( "mus: [MUSAVA] <- CMusAvaConnectionAvailability::\ -NetworkRegistrationStatus()" ) + NetworkRegistrationStatus()" ) } @@ -349,9 +314,9 @@ SetState( MMusAvaObserver::EMusAvaConnectionErr ); } else - { - iConnectionMonitor->SetConnectionID( connectionId ); - } + { + iConnectionMonitor->SetConnectionID( connectionId ); + } } break; } @@ -362,12 +327,13 @@ { SetState( MMusAvaObserver::EMusAvaConnectionErr ); } - break; - } - case EConnMonConnectionStatusChange: + break; + } + + case EConnMonConnectionStatusChange: { MUS_LOG( "mus: [MUSAVA] Event type = \ -EConnMonConnectionStatusChange" ) + EConnMonConnectionStatusChange" ) const CConnMonConnectionStatusChange* connectionStatusChange = (const CConnMonConnectionStatusChange*)(&aConnMonEvent); TInt connStatus = connectionStatusChange->ConnectionStatus(); @@ -391,7 +357,7 @@ } break; } - case EConnMonNetworkStatusChange: + case EConnMonNetworkStatusChange: { MUS_LOG( "mus: [MUSAVA] Event type = EConnMonNetworkStatusChange" ) const CConnMonNetworkStatusChange* networkStatusChange @@ -402,36 +368,36 @@ { if( EConnMonStatusAttached == networkStatus || EConnMonStatusActive == networkStatus ) - { - SetState( NetworkRegistrationAndSettingsL() ); - } + { + SetState( NetworkRegistrationAndSettingsL() ); + } else - { - SetState( MMusAvaObserver::EMusAvaConnectionErr ); - } + { + SetState( MMusAvaObserver::EMusAvaConnectionErr ); + } } break; } case EConnMonNetworkRegistrationChange: { MUS_LOG( "mus: [MUSAVA] Event type = \ -EConnMonNetworkRegistrationChange" ) + EConnMonNetworkRegistrationChange" ) const CConnMonNetworkRegistrationChange* registrationChange = (const CConnMonNetworkRegistrationChange*)(&aConnMonEvent); TInt registrationStatus = registrationChange->RegistrationStatus(); MUS_LOG1( "mus: [MUSAVA] RegistrationStatus = %d", registrationStatus ) - if( connId == EBearerIdWCDMA || connId == EBearerIdWcdmaCSD ) - { - if ( ENetworkRegistrationRoaming == registrationStatus ) - { - SetState( MMusAvaObserver::EMusAvaRoamingError ); + if( connId == EBearerIdWCDMA || connId == EBearerIdWcdmaCSD ) + { + if ( ENetworkRegistrationRoaming == registrationStatus ) + { + SetState( MMusAvaObserver::EMusAvaRoamingError ); + } + else + { + SetState( NetworkRegistrationAndSettingsL() ); + } } - else - { - SetState( NetworkRegistrationAndSettingsL() ); - } - } break; } case EConnMonBearerChange: @@ -467,8 +433,17 @@ case EConnMonPacketDataUnavailable: { - SetState( MMusAvaObserver::EMusAvaNetworkType ); - MUS_LOG( "mus: [MUSAVA] EConnMonPacketDataUnavailable" ) + if( connId == musConnID ) + { + SetState( MMusAvaObserver::EMusAvaNetworkType ); + MUS_LOG( "mus: [MUSAVA] EConnMonPacketDataUnavailable" ) + } + else + { + MUS_LOG2( +"mus: [MUSAVA] different connId (%d,%d) ignore EConnMonPacketDataUnavailable", + musConnID, connId ) + } break; } @@ -495,44 +470,48 @@ // MMusAvaObserver::TAvailabilityStatus CMusAvaConnectionAvailability:: ManualActivationL() - { + { MUS_LOG( "mus: [MUSAVA] -> CMusAvaConnectionAvailability::\ -ManualActivationL()" ) + ManualActivationL()" ) - if( OperatorVariant() ) + MusSettingsKeys::TOperatorVariant operatorVariant = + MusSettingsKeys::EStandard; + operatorVariant = MultimediaSharingSettings::OperatorVariantSettingL(); + + if( operatorVariant == MusSettingsKeys::EOperatorSpecific ) { MUS_LOG( "mus: [MUSAVA] Operator Specific No Manual query" ) MUS_LOG( "mus: [MUSAVA] <- CMusAvaConnectionAvailability::\ -NetworkRegistrationAndSettingsL()" ) + NetworkRegistrationAndSettingsL()" ) return MMusAvaObserver::EMusActivationError; } - else - { - if ( iSettings.ManualActivation() == - MMusAvaSettings::EActivationAllowed ) - { - MUS_LOG( "mus: [MUSAVA] Manual activation allowed" ) - MUS_LOG( "mus: [MUSAVA] <- CMusAvaConnectionAvailability::\ -ManualActivationL()" ) - return MMusAvaObserver::EMusAvaStatusAvailable; - } - else if ( iSettings.ManualActivation() == - MMusAvaSettings::EActivationNotExecuted ) - { - MUS_LOG( "mus: [MUSAVA] Manual activation is not executed" ) - MUS_LOG( "mus: [MUSAVA] <- CMusAvaConnectionAvailability::\ -ManualActivationL()" ) - return MMusAvaObserver::EMusAvaManualActivation; - } - else - { - MUS_LOG( "mus: [MUSAVA] Activation error" ) - MUS_LOG( "mus: [MUSAVA] <- CMusAvaConnectionAvailability::\ -ManualActivationL()" ) - return MMusAvaObserver::EMusActivationError; - } - } - } + else + { + if ( iSettings.ManualActivation() == + MMusAvaSettings::EActivationAllowed ) + { + MUS_LOG( "mus: [MUSAVA] Manual activation allowed" ) + MUS_LOG( "mus: [MUSAVA] <- CMusAvaConnectionAvailability::\ + ManualActivationL()" ) + return MMusAvaObserver::EMusAvaStatusAvailable; + } + else if ( iSettings.ManualActivation() == + MMusAvaSettings::EActivationNotExecuted ) + { + MUS_LOG( "mus: [MUSAVA] Manual activation is not executed" ) + MUS_LOG( "mus: [MUSAVA] <- CMusAvaConnectionAvailability::\ + ManualActivationL()" ) + return MMusAvaObserver::EMusAvaManualActivation; + } + else + { + MUS_LOG( "mus: [MUSAVA] Activation error" ) + MUS_LOG( "mus: [MUSAVA] <- CMusAvaConnectionAvailability::\ + ManualActivationL()" ) + return MMusAvaObserver::EMusActivationError; + } + } + } // ------------------------------------------------------------------------- // CMusAvaConnectionAvailability::NetworkRegistrationAndSettingsL @@ -543,7 +522,7 @@ NetworkRegistrationAndSettingsL() { MUS_LOG( "mus: [MUSAVA] -> CMusAvaConnectionAvailability::\ -NetworkRegistrationAndSettingsL()" ) + NetworkRegistrationAndSettingsL()" ) MUS_LOG( "mus: [MUSAVA] Check registration network status" ) MUS_LOG( "mus: [MUSAVA] Check roaming" ) @@ -556,35 +535,33 @@ MusSettingsKeys::TActivation activation = MusSettingsKeys::EAlwaysActive; activation = MultimediaSharingSettings::ActivationSettingL(); - TBool operatorVariant = OperatorVariant(); - + MUS_LOG1( "mus: [MUSAVA] ActivationSetting returned %d", activation ) - - //VS off - if ( activation != MusSettingsKeys::EAlwaysActive ) + + if ( activation == MusSettingsKeys::EAlwaysActive ) + { + status = MMusAvaObserver::EMusAvaStatusAvailable; + } + else if ( activation == MusSettingsKeys::EActiveInHomeNetworks && + regStatus == RMobilePhone::ERegisteredOnHomeNetwork ) + { + status = MMusAvaObserver::EMusAvaStatusAvailable; + } + else if( activation == MusSettingsKeys::EActiveInHomeNetworks && + regStatus == RMobilePhone::ERegisteredRoaming ) + { + status = ManualActivationL(); + } + else { status = MMusAvaObserver::EMusActivationError; } - //VS on - else - { - //roaming - if( regStatus == RMobilePhone::ERegisteredRoaming ) - { - status = ManualActivationL(); - } - //other states including also not registered states, thus - //failing of PDP context activation will be detected elsewhere - else - { - status = MMusAvaObserver::EMusAvaStatusAvailable; - } - } MUS_LOG( "mus: [MUSAVA] <- CMusAvaConnectionAvailability::\ -NetworkRegistrationAndSettingsL()" ) + NetworkRegistrationAndSettingsL()" ) return status; } +// End of File diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshavailability/src/musavacontactavailability.cpp --- a/mmsharing/mmshavailability/src/musavacontactavailability.cpp Thu Aug 19 09:51:39 2010 +0300 +++ b/mmsharing/mmshavailability/src/musavacontactavailability.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -16,36 +16,22 @@ */ - #include "musavacontactavailability.h" #include "musavaavailabilityobserver.h" #include "musavasettingsimp.h" #include "musavaobserver.h" #include "muslogger.h" #include "mussettings.h" -#include "musavacalleventmonitor.h" -#include -#include -#include -#include #include #ifdef UNIT_TESTING // if unit testing #include #endif // UNIT_TESTING -const TInt KNumberMatchingDigitsRequired = 7; const TInt KContactsArraySize = 10; - -_LIT( KMusAvaSip, "sip:" ); _LIT( KMusAvaTel, "tel:" ); _LIT( KMusAvaPlus, "+" ); -_LIT( KMusAvaAtSign , "@" ); -_LIT( KMusEmptyStringSymbol, "" ); -_LIT( KMusSpaceSymbol, " " ); -_LIT( KMusAvaTestString, "*#" ); - CMusAvaContactAvailability* CMusAvaContactAvailability::NewL( MMusAvaAvailabilityObserver& aObserver, @@ -87,12 +73,6 @@ ~CMusAvaContactAvailability()" ) delete iContactName; iContactName = NULL; - if ( iPhoneStatus ) - { - iPhoneStatus->Cancel(); - } - delete iPhoneStatus; - iPhoneStatus = NULL; MUS_LOG( "mus: [MUSAVA] <- CMusAvaContactAvailability::\ ~CMusAvaContactAvailability()" ) } @@ -112,7 +92,6 @@ { MUS_LOG( "mus: [MUSAVA] -> CMusAvaContactAvailability::ConstructL()" ) iOperatorVariant = MultimediaSharingSettings::OperatorVariantSettingL(); - iPhoneStatus = CMusAvaCallEventMonitor::NewL( *this ); MUS_LOG( "mus: [MUSAVA] <- CMusAvaContactAvailability::ConstructL()" ) } @@ -124,94 +103,12 @@ void CMusAvaContactAvailability::DoExecuteL() { MUS_LOG( "mus: [MUSAVA] -> CMusAvaContactAvailability::DoExecuteL()" ) - iPhoneStatus->StartMonitoringL(); - - CContactIdArray* idArray = NULL; - - #ifdef UNIT_TESTING // if unit testing - EUNIT_DISABLE_ALLOC_DECORATOR; - #endif // UNIT_TESTING - CPbkContactEngine* pbkContactEngine = CPbkContactEngine::NewL(); - CleanupStack::PushL( pbkContactEngine ); - - // resolve the name order - CContactViewBase& contactView = pbkContactEngine->AllContactsView(); - const RContactViewSortOrder& sortOrder = contactView.SortOrderL(); - #ifdef UNIT_TESTING // if unit testing - EUNIT_ENABLE_ALLOC_DECORATOR; - #endif // UNIT_TESTING - - iBeginWithFirstName = ETrue; - TBool foundOrder = EFalse; - for( TInt i = 0; i < sortOrder.Count() && !foundOrder; ++i ) - { - if ( sortOrder[i] == KUidContactFieldFamilyName ) - { - iBeginWithFirstName = EFalse; - foundOrder = ETrue; - } - else if ( sortOrder[i] == KUidContactFieldGivenName ) - { - iBeginWithFirstName = ETrue; - foundOrder = ETrue; - } - } CDesCArrayFlat* contactsArray = new ( ELeave ) CDesCArrayFlat( KContactsArraySize ); CleanupStack::PushL( contactsArray ); - if ( ContactL( idArray, *pbkContactEngine ) ) - { - CleanupStack::PushL( idArray ); - - TInt idArrayCount = idArray->Count(); - MUS_LOG1( "mus: [MUSAVA] idArray->Count %d", idArrayCount ) - CPbkContactItem* pbkItem = NULL; - TPbkFieldId fieldId = ContactIdSearch( *idArray, *pbkContactEngine ); - - for ( TInt i = 0; i < idArrayCount; i++ ) - { - MUS_LOG1( "mus: [MUSAVA] i %d", i ) - TContactItemId itemId( KErrNotFound ); - itemId = ( *idArray )[i]; - - TRAPD( error, pbkItem = pbkContactEngine->ReadContactL( itemId ) ); - - if ( !error ) - { - TBool found = EFalse; - if ( fieldId == EPbkFieldIdShareView ) - { - found = ResolveAddressesL( - *pbkItem, contactsArray, EPbkFieldIdShareView ); - } - else if( fieldId == EPbkFieldIdSIPID) - { - found = ResolveAddressesL( - *pbkItem, contactsArray, EPbkFieldIdSIPID ); - } - - if ( !found ) - { - PhoneResolutionL( *pbkItem, contactsArray ); - } - - // tbd: causes test case to fail - // break; - } - - delete pbkItem; - pbkItem = NULL; - } - - idArray->Reset(); - CleanupStack::PopAndDestroy( idArray ); - } - else - { - ActiveCallL( contactsArray ); - } + ActiveCallL( contactsArray ); iSettings.SetSipAddressesL( *contactsArray ); @@ -219,55 +116,11 @@ CleanupStack::PopAndDestroy( contactsArray ); - CleanupStack::PopAndDestroy( pbkContactEngine ); - SetState( MMusAvaObserver::EMusAvaStatusAvailable ); MUS_LOG( "mus: [MUSAVA] <- CMusAvaContactAvailability::DoExecuteL()" ) } -// ------------------------------------------------------------------------- -// This function is called when a cs call is connected. -// ------------------------------------------------------------------------- -// -void CMusAvaContactAvailability::CallConnectedL( const TDesC& aTelNumber ) - { - MUS_LOG( "mus: [MUSAVA] \ - -> CMusAvaContactAvailability::CallConnectedL()" ) - - iSettings.SetTelNumberL(aTelNumber); - DoExecuteL(); - - MUS_LOG( "mus: [MUSAVA] \ - <- CMusAvaContactAvailability::CallConnectedL()" ) - } -void CMusAvaContactAvailability::ConferenceCallL() - { - } - - -// ------------------------------------------------------------------------- -// This function is called when a cs call goes hold -// ------------------------------------------------------------------------- -// -void CMusAvaContactAvailability::CallHoldL( const TDesC& /*aTelNumber*/ ) - { - } - - -// ------------------------------------------------------------------------- -// This function is called when a cs call goes into a state -// that is not connected. -// ------------------------------------------------------------------------- -// -void CMusAvaContactAvailability::NoActiveCallL() - { - } - - -void CMusAvaContactAvailability::ConferenceCallLTerminated () - { - } // ------------------------------------------------------------------------- // @@ -279,6 +132,8 @@ const TDesC& phoneNumber = iSettings.TelNumber(); TInt retval = EFalse; + const MDesCArray& addresses = iSettings.SipAddresses(); + TInt addressesCount = addresses.MdcaCount(); if ( phoneNumber.Length() > 0 && ( iOperatorVariant == MusSettingsKeys::EOperatorSpecific || @@ -299,9 +154,19 @@ CleanupStack::PopAndDestroy( tmpDescriptor ); retval = ETrue; } + else if ( addressesCount > 0 ) + { + MUS_LOG1( "mus: [MUSAVA] addresses.MdcaCount() %d", + addressesCount ) + const TDesC& sipAddress = addresses.MdcaPoint( 0 ); + MUS_LOG_TDESC( "mus: [MUSAVA] SIP Address: ", + sipAddress ) + aContactsArray->AppendL( sipAddress ); + retval = ETrue; + } else { - MUS_LOG( "mus: [MUSAVA] Phone number not found " ) + MUS_LOG( "mus: [MUSAVA] Phone number or SIP URL not found " ) retval = EFalse; } MUS_LOG1( "mus: [MUSAVA] <- CMusAvaContactAvailability::\ @@ -310,575 +175,12 @@ return retval; } - -// ------------------------------------------------------------------------- -// -// ------------------------------------------------------------------------- -// -TBool CMusAvaContactAvailability::ContactL( - CContactIdArray*& aContactIdArray, - CPbkContactEngine& aPbkContactEngine ) - { - MUS_LOG( "mus: [MUSAVA] -> CMusAvaContactAvailability::ContactL()" ) - CPbkContactItem* pbkContactItem = NULL; - - TInt conRes = EFalse; - - TInt err = ContactArrayL( aContactIdArray, aPbkContactEngine ); - if ( !err ) - { - err = ContactItem( *aContactIdArray, pbkContactItem, aPbkContactEngine ); - // NOTE: KErrNotSupported means there is more than one contact id. - if ( err == KErrNotSupported ) - { - iSettings.SetContactId( KErrNotSupported ); - conRes = ETrue; - } - else if( err != KErrNone ) - { - MUS_LOG( "mus: [MUSAVA] No contact item found; contact id = \ - KErrNotFound" ) - conRes = EFalse; - } - else - { - TContactItemId itemId = pbkContactItem->Id(); - MUS_LOG1( "mus: [MUSAVA] Setting contact id to be %d", - itemId ) - CleanupStack::PushL( pbkContactItem ); - iSettings.SetContactId( itemId ); - UpdateContactNameL( pbkContactItem->ContactItem() ); - CleanupStack::Pop( pbkContactItem ); - conRes = ETrue; - } - } - MUS_LOG1( "mus: [MUSAVA] <- CMusAvaContactAvailability::\ - ContactL return %d", conRes ) - - delete pbkContactItem; - pbkContactItem = NULL; - - return conRes; - } - - -// ------------------------------------------------------------------------- -// -// ------------------------------------------------------------------------- -// -void CMusAvaContactAvailability::UpdateContactNameL( - CContactItem& aContactItem ) - { - MUS_LOG( "mus: [MUSAVA ] -> CMusAvaContactAvailability::\ - UpdateContactName" ) - //TBuf givenName; - //TBuf familyName; - - HBufC* givenName = NULL; - HBufC* familyName = NULL; - - delete iContactName; - iContactName = NULL; - iContactName = HBufC::NewL( 0 ); - - CContactItemFieldSet& fieldSet = aContactItem.CardFields(); - - TInt pos = fieldSet.Find( KUidContactFieldGivenName ); - if ( pos != KErrNotFound ) - { - CContactItemField& itemField = fieldSet[pos]; - //givenName = HBufC::NewL( itemField.TextStorage()->Text().Length() ); - - //givenName.Copy( itemField.TextStorage()->Text().Alloc() ); - givenName = itemField.TextStorage()->Text().AllocLC(); - - } - else - { - //givenName = KMusEmptyStringSymbol; - givenName = KMusEmptyStringSymbol().AllocLC(); - } - - pos = fieldSet.Find( KUidContactFieldFamilyName ); - if ( pos != KErrNotFound ) - { - CContactItemField& itemField = fieldSet[pos]; - //familyName = HBufC::NewL( itemField.TextStorage()->Text().Length() ); - //familyName.Copy( field.TextStorage()->Text() ); - familyName = itemField.TextStorage()->Text().AllocLC(); - } - else - { - familyName = KMusEmptyStringSymbol().AllocLC(); - } - - TInt strLength = NULL; - TBool bothNames = givenName->Length() > 0 && familyName->Length() > 0; - - if ( bothNames ) - { - strLength = givenName->Length() + - KMusSpaceSymbol().Length() + - familyName->Length(); - } - else - { - strLength = givenName->Length() + familyName->Length(); - } - - if ( strLength > iContactName->Length() ) - { - iContactName = iContactName->ReAllocL( strLength ); - } - - if ( strLength > 0 ) - { - TPtr ptr = iContactName->Des(); - if ( iBeginWithFirstName ) - { - if ( bothNames ) - { - ptr.Append( givenName->Des() ); - ptr.Append( KMusSpaceSymbol ); - ptr.Append( familyName->Des() ); - } - else - { - ptr.Append( givenName->Des() ); - ptr.Append( familyName->Des() ); - } - } - else - { - if ( bothNames ) - { - ptr.Append( familyName->Des() ); - ptr.Append( KMusSpaceSymbol ); - ptr.Append( givenName->Des() ); - } - else - { - ptr.Append( familyName->Des() ); - ptr.Append( givenName->Des() ); - } - } - } - - CleanupStack::PopAndDestroy( familyName ); - CleanupStack::PopAndDestroy( givenName ); - - TRAP_IGNORE( iSettings.SetContactNameL( iContactName->Des() ) ) - - MUS_LOG( "mus: [MUSAVA ] <- CMusAvaContactAvailability::\ - UpdateContactName" ) - } - - -// ------------------------------------------------------------------------- -// -// ------------------------------------------------------------------------- -// -TInt CMusAvaContactAvailability::ContactArrayL( - CContactIdArray*& aContactIdArray, - CPbkContactEngine& aPbkContactEngine ) - { - MUS_LOG( "mus: [MUSAVA] -> CMusAvaContactAvailability::ContactArrayL()" ) - - const TDesC& phoneNumber = iSettings.TelNumber(); - TInt retval = KErrNotFound; - - if ( phoneNumber.Length() > 0 ) - { - MUS_LOG( "mus: [MUSAVA] Phone number found " ) - // Instantiate a PhonebookContactEngine object, which represents a - // connection to the Phonebook contact database: - #ifdef UNIT_TESTING // if unit testing - EUNIT_DISABLE_ALLOC_DECORATOR; - #endif // UNIT_TESTING - CContactIdArray* tmpContactIdArray = - aPbkContactEngine.MatchPhoneNumberL( - phoneNumber, - KNumberMatchingDigitsRequired ); - #ifdef UNIT_TESTING // if unit testing - EUNIT_ENABLE_ALLOC_DECORATOR; - #endif // UNIT_TESTING - if ( tmpContactIdArray->Count() > 0 ) - { - aContactIdArray = tmpContactIdArray; - retval = KErrNone; - } - else - { - tmpContactIdArray->Reset(); - delete tmpContactIdArray; - MUS_LOG( - "mus: [MUSAVA] Phone number not found in CPbkContactEngine" ) - } - } - else - { - MUS_LOG( "mus: [MUSAVA] Phone number not found " ) - } - - MUS_LOG1( "mus: [MUSAVA] <- CMusAvaContactAvailability::\ - ContactArrayL return %d", retval ) - - return retval; - } - - -// ------------------------------------------------------------------------- -// -// ------------------------------------------------------------------------- -// -TInt CMusAvaContactAvailability::ContactItem( - CContactIdArray& aContactIdArray, - CPbkContactItem*& aPbkContactItem, - CPbkContactEngine& aPbkContactEngine ) - { - MUS_LOG( "mus: [MUSAVA] -> CMusAvaContactAvailability::ContactItem()" ) - CPbkContactItem* pbkItem = NULL; - TInt retval = KErrNotFound; - TInt contactIdsCount = aContactIdArray.Count(); - - if( contactIdsCount > 1 ) - { - // NOTE: KErrNotSupported means there is more than one contact id. - MUS_LOG( "mus: [MUSAVA] More than one Contact ID found." ) - retval = KErrNotSupported; - } - else if ( contactIdsCount == 1 ) - { - // Contact card whose phone number matches that of the other party - // was found. The ID(s) of the contacts are recorded in iIdArray. - MUS_LOG( "mus: [MUSAVA] Contact ID found." ) - - TContactItemId itemId( KErrNotFound ); - - MUS_LOG1( "mus: [MUSAVA] ID array has <%d> elements", - contactIdsCount ) - // iterate through the contact cards we consider as belonging to - // the other party, that is, those saved in iIdArray: - for ( TInt i = 0; i < contactIdsCount; i++ ) - { - itemId = ( aContactIdArray )[i]; - MUS_LOG2( "mus: [MUSAVA] Current array index == <%d>, \ - contact ID == <%d>", i, itemId ) - TRAPD( pbkFailure, pbkItem = - aPbkContactEngine.ReadContactL( itemId ) ); - - if ( pbkFailure ) - { - // Contact lookup failed. - MUS_LOG1( "mus: [MUSAVA] Leave code <%d> occurred at call \ - of ReadContactL.", pbkFailure ) - } - else - { - aPbkContactItem = pbkItem; - retval = KErrNone; - } - } - } - else - { - MUS_LOG( "mus: [MUSAVA] No contact card whose phone number\ - matches that of the other party" ) - } - - MUS_LOG1( "mus: [MUSAVA] <- CMusAvaContactAvailability::\ - ContactItem() return %d", retval ) - - return retval; - } - -// ------------------------------------------------------------------------- -// -// ------------------------------------------------------------------------- -// -TBool CMusAvaContactAvailability::PhoneResolutionL( CPbkContactItem& aPbkItem, - CDesCArrayFlat*& aContactsArray ) - { - MUS_LOG( "mus: [MUSAVA] -> CMusAvaContactAvailability::PhoneResolutionL()" ) - TInt retval = ETrue; - if ( ResolvePhoneContactL( aPbkItem, aContactsArray ) ) - { - MUS_LOG( "mus: [MUSAVA] Stop Execution" ) - } - else - { - if ( ActiveCallL( aContactsArray ) ) - { - MUS_LOG( "mus: [MUSAVA] Stop Execution" ) - } - else - { - MUS_LOG( "mus: [MUSAVA] Stop Execution" ) - retval = EFalse; - } - } - - MUS_LOG1( "mus: [MUSAVA] <- CMusAvaContactAvailability::\ - PhoneResolutionL() return %d", retval ) - return retval; - } - - -// ------------------------------------------------------------------------- -// -// ------------------------------------------------------------------------- -// -TBool CMusAvaContactAvailability::ContactId( CPbkContactItem& aPbkItem, - TPbkFieldId aTPbkFieldId ) - { - MUS_LOG( "mus: [MUSAVA] -> CMusAvaContactAvailability::ContactId()" ) - - CPbkFieldArray& fieldArray = aPbkItem.CardFields(); - TPbkContactItemField itemField; - TBool returnValue = EFalse; - - // Get the number of detail fields of the phonebook contact item. - const TInt fieldCount( fieldArray.Count() ); - - for ( TInt index = 0; index < fieldCount && returnValue == EFalse; - index++ ) - { - itemField = fieldArray.At( index ); - - if ( itemField.FieldInfo().Match( aTPbkFieldId ) && - itemField.Text().Find( KMusAvaAtSign() ) != KErrNotFound ) - { - returnValue = ETrue; - MUS_LOG( "mus: [MUSAVA] Contact id found" ) - } - } - MUS_LOG1( "mus: [MUSAVA] <- CMusAvaContactAvailability::\ - ContactId() return %d", returnValue ) - return returnValue; - } - - -// ------------------------------------------------------------------------- -// -// ------------------------------------------------------------------------- -// -TPbkFieldId CMusAvaContactAvailability::ContactIdSearch( - CContactIdArray& aContactIdArray, - CPbkContactEngine& aPbkContactEngine ) - { - MUS_LOG( "mus: [MUSAVA] -> CMusAvaContactAvailability::\ - ContactIdSearch()" ) - - TInt contactIdsCount = aContactIdArray.Count(); - MUS_LOG1( "mus: [MUSAVA] aContactIdArray.Count %d", \ - contactIdsCount ) - - CPbkContactItem* pbkItem = NULL; - TPbkFieldId retFieldId = EPbkFieldIdNone; - - for ( TInt i = 0; - i < contactIdsCount && retFieldId == EPbkFieldIdNone; - i++ ) - { - MUS_LOG1( "mus: [MUSAVA] i %d", i ) - TContactItemId itemId( KErrNotFound ); - itemId = ( aContactIdArray )[i]; - - #ifdef UNIT_TESTING // if unit testing - EUNIT_DISABLE_ALLOC_DECORATOR; - #endif // UNIT_TESTING - TRAPD( error, pbkItem = aPbkContactEngine.ReadContactL( itemId ) ) - #ifdef UNIT_TESTING // if unit testing - EUNIT_ENABLE_ALLOC_DECORATOR; - #endif // UNIT_TESTING - if ( error != KErrNone ) - { - return retFieldId; - } - if ( ContactId( *pbkItem, EPbkFieldIdShareView ) ) - { - MUS_LOG( "mus: [MUSAVA] Contact have a prefix = \ - EPbkFieldIdShareView" ) - delete pbkItem; - retFieldId = EPbkFieldIdShareView; - } - else if ( ContactId( *pbkItem, EPbkFieldIdSIPID ) ) - { - MUS_LOG( "mus: [MUSAVA] Contact have a prefix = \ - EPbkFieldIdSIPID" ) - delete pbkItem; - retFieldId = EPbkFieldIdSIPID; - } - else if ( ContactId( *pbkItem, EPbkFieldIdPhoneNumberGeneral ) ) - { - // this part never run!!!! - MUS_LOG( "mus: [MUSAVA] Contact have a prefix = \ - EPbkFieldIdPhoneNumberGeneral" ) - delete pbkItem; - retFieldId = EPbkFieldIdPhoneNumberGeneral; - } - else - { - MUS_LOG( "mus: [MUSAVA] Contact have no prefix " ) - delete pbkItem; - } - } - return retFieldId; - } - - -// ------------------------------------------------------------------------- -// -// ------------------------------------------------------------------------- -// -TBool CMusAvaContactAvailability::ResolveAddressesL( CPbkContactItem& aPbkItem, - CDesCArrayFlat*& aContactsArray, - TPbkFieldId aTPbkFieldId ) - { - MUS_LOG( "mus: [MUSAVA] -> CMusAvaContactAvailability::\ - ResolveAddressesL()" ) - - CPbkFieldArray& fieldArray = aPbkItem.CardFields(); - TPbkContactItemField itemField; - HBufC* tmpDescriptor( NULL ); - TBool returnValue( EFalse ); - - // Get the number of detail fields of the phonebook contact item. - const TInt fieldCount( fieldArray.Count() ); - - for ( TInt index = 0; index < fieldCount; index++ ) - { - itemField = fieldArray.At( index ); - - if ( itemField.FieldInfo().Match( aTPbkFieldId ) && - itemField.Text().Find( KMusAvaAtSign() ) != KErrNotFound && - ( iOperatorVariant != MusSettingsKeys::EOperatorSpecific || - itemField.Text().Find( KMusAvaTestString() ) != KErrNotFound ) ) - { - returnValue = ETrue; - MUS_LOG( "mus: [MUSAVA] Contact id found" ) - - HBufC* sipAddress; - if ( iOperatorVariant == MusSettingsKeys::EOperatorSpecific ) - { - sipAddress = HBufC::NewLC( itemField.Text().Length() - - KMusAvaTestString().Length() ); - TInt pos = itemField.Text().Find( KMusAvaTestString() ); - sipAddress->Des().Append( itemField.Text().Left( pos ) ); - sipAddress->Des().Append( itemField.Text().Right( - itemField.Text().Length() - - pos - KMusAvaTestString().Length() ) ); - } - else - { - sipAddress = itemField.Text().AllocLC(); - } - - if ( sipAddress->Find( KMusAvaSip() ) == KErrNotFound ) - { - // No, it doesn't, so add the prefix to the new address. - MUS_LOG( "mus: [MUSAVA] Prefix to the new address is added" ) - tmpDescriptor = HBufC::NewLC( KMusAvaSip().Length() + - sipAddress->Length() ); - tmpDescriptor->Des().Append( KMusAvaSip() ); - tmpDescriptor->Des().Append( *sipAddress ); - // if multiple contact have same phone number then - // sip address can be repeated . To avoid this check - // whether sip address exist already in array - // it not exist then add it to array. - if(! IsExistAlready(*aContactsArray,*tmpDescriptor)) - { - aContactsArray->AppendL( *tmpDescriptor ); - } - CleanupStack::PopAndDestroy( tmpDescriptor ); - } - else - { - MUS_LOG( "mus: [MUSAVA] Contact have a prefix" ) - // if multiple contact have same phone number then - // sip address can be repeated . To avoid this check - // whether sip address exist already in array - // it not exist then add it to array. - if(! IsExistAlready(*aContactsArray,*sipAddress)) - { - aContactsArray->AppendL( *sipAddress ); - } - } - - CleanupStack::PopAndDestroy( sipAddress ); - } - } - MUS_LOG1( "mus: [MUSAVA] <- CMusAvaContactAvailability::\ - ResolveAddressesL() return %d", returnValue ) - return returnValue; - } - - -// ------------------------------------------------------------------------- -// -// ------------------------------------------------------------------------- -// -TBool CMusAvaContactAvailability::ResolvePhoneContactL( - CPbkContactItem& aPbkItem, - CDesCArrayFlat*& aContactsArray ) - { - MUS_LOG( "mus: [MUSAVA] -> CMusAvaContactAvailability::\ - ResolvePhoneContactL()" ) - CPbkFieldArray& fieldArray = aPbkItem.CardFields(); - TPbkContactItemField itemField; - HBufC* tmpDescriptor( NULL ); - TBool returnValue = EFalse; - - // Get the number of detail fields of the phonebook contact item. - const TInt fieldCount( fieldArray.Count() ); - - for ( TInt index = 0; index < fieldCount; index++ ) - { - itemField = fieldArray.At( index ); - - if ( itemField.FieldInfo().IsPhoneNumberField() && - ( iOperatorVariant == MusSettingsKeys::EOperatorSpecific || - itemField.Text().Left(1) == KMusAvaPlus() ) ) - { - MUS_LOG( "mus: [MUSAVA] Contact id found" ) - // No, it doesn't, so add the prefix to the new address. - MUS_LOG( "mus: [MUSAVA] Prefix to the new address is added" ) - tmpDescriptor = HBufC::NewLC( KMusAvaTel().Length() + - itemField.Text().Length() ); - tmpDescriptor->Des().Append( KMusAvaTel() ); - tmpDescriptor->Des().Append( itemField.Text() ); - aContactsArray->AppendL( *tmpDescriptor ); - CleanupStack::PopAndDestroy( tmpDescriptor ); - returnValue = ETrue; - } - } - - MUS_LOG( "mus: [MUSAVA] <- CMusAvaContactAvailability::\ - ResolvePhoneContactL()" ) - return returnValue; - } - - MMusAvaObserver::TAvailabilityName CMusAvaContactAvailability::Name() { return MMusAvaObserver::EMusAvaNameContactStatus; } -// ------------------------------------------------------------------------- -// Checks that whether aDesItem present in aDesArray. -// Utility function used to avoid dublication. -// ------------------------------------------------------------------------- -// -TBool CMusAvaContactAvailability::IsExistAlready(const MDesCArray& aDesArray, - const TDesC& aDesItem) - { - for ( TInt i=0;iAvailabilitiesAbleToShowIndicator(); - } - // ----------------------------------------------------------------------------- // Availability error. // ----------------------------------------------------------------------------- @@ -516,3 +511,17 @@ retval ) return retval; } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusAvaDefaultImp::PrepareForReceivedInviteL() + { + for ( TInt i = 0; i < iAvailabilities.Count(); i++ ) + { + iAvailabilities[i]->PrepareForReceivedInviteL(); + } + } + +// End of file diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshavailability/src/musavadefaultoptionhandler.cpp --- a/mmsharing/mmshavailability/src/musavadefaultoptionhandler.cpp Thu Aug 19 09:51:39 2010 +0300 +++ b/mmsharing/mmshavailability/src/musavadefaultoptionhandler.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -26,6 +26,7 @@ #include "musavacapability.h" #include "musavacapabilitycontext.h" #include "musavanetworkmodestatus.h" + #include #include #include @@ -419,9 +420,6 @@ LocalHostL( aTransaction,localHost,hostType); CSdpOriginField* originField = CreateOriginFieldL(localHost,hostType); sdpDocument->SetOriginField(originField); - //session name - _LIT8(KSessionName, "-"); - sdpDocument->SetSessionNameL(KSessionName); // Connection field CSdpConnectionField* connectionField = CSdpConnectionField::NewL( netType, hostType, localHost ); @@ -449,6 +447,8 @@ sdpDocument->AttributeFields().AppendL( type ); CleanupStack::Pop( type ); + // Fast startup mode + CMusAvaCapability::AddFastModeL( *sdpDocument ); MUS_LOG( "mus: [MUSAVA] Adding media line to SDP" ) //media line diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshavailability/src/musavanetworkavailability.cpp --- a/mmsharing/mmshavailability/src/musavanetworkavailability.cpp Thu Aug 19 09:51:39 2010 +0300 +++ b/mmsharing/mmshavailability/src/musavanetworkavailability.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -29,6 +29,7 @@ #include +const TInt KSipUriArrayGranularity = 1; CMusAvaNetworkAvailability* CMusAvaNetworkAvailability::NewL( MMusAvaAvailabilityObserver& aObserver, @@ -74,8 +75,7 @@ MMusAvaAvailabilityObserver& aObserver, CMusAvaSettingsImp& aSettings ) :CMusAvaAvailability( aObserver ), - iSettings( aSettings ), - iConfcall( EFalse ) + iSettings( aSettings ) { } @@ -101,14 +101,13 @@ { case NMusSessionInformationApi::ECallConnected: { - TBuf telNumber; - iPhoneStatus->GetTelNumberL( telNumber ); - iSettings.SetTelNumberL( telNumber ); - iSettings.SetCallDirection( iPhoneStatus->CallDirectionL() ); - iSettings.SetCallPrivacy( iPhoneStatus->CallPrivacyL() ); - - SetState( MMusAvaObserver::EMusAvaStatusAvailable ); - break; + TBuf telNumber; + TBool isSipUri( EFalse ); + iPhoneStatus->GetTelNumberL( telNumber, isSipUri ); + SetRemoteHostL( telNumber, isSipUri ); + iSettings.SetCallDirection( iPhoneStatus->CallDirectionL() ); + SetState( MMusAvaObserver::EMusAvaStatusAvailable ); + break; } case NMusSessionInformationApi::ECallHold: SetState( MMusAvaObserver::EMusAvaStatusCallOnHold ); @@ -148,31 +147,15 @@ // This function is called when a cs call is connected. // ------------------------------------------------------------------------- // -void CMusAvaNetworkAvailability::CallConnectedL( const TDesC& aTelNumber ) +void CMusAvaNetworkAvailability::CallConnectedL( const TDesC& aTelNumber, + TBool aIsSipUri) { MUS_LOG( "mus: [MUSAVA] \ -> CMusAvaNetworkAvailability::CallConnectedL()" ) - -// try to resolve to contact information of the remote host - iSettings.SetTelNumberL( aTelNumber ); - iSettings.SetCallDirection( iPhoneStatus->CallDirectionL() ); - iSettings.SetCallPrivacy( iPhoneStatus->CallPrivacyL() ); - - //isn't the phone sent option successfully - if ( ( aTelNumber != iSettings.OptionSentTelNumber() - || iSettings.OptionSentTelNumber() == KNullDesC() ) - && iConfcall ) - { - MUS_LOG("CMusAvaNetworkAvailability::CallConnectedL EMusAvaStatusInProgress"); - iSettings.ReleaseOptionSentNumber(); - SetState( MMusAvaObserver::EMusAvaStatusInProgress ); - } - else - { - SetState( MMusAvaObserver::EMusAvaStatusAvailable ); - MUS_LOG("CMusAvaNetworkAvailability::CallConnectedL EMusAvaStatusAvailable"); - - } + // try to resolve to contact information of the remote host + SetRemoteHostL( aTelNumber, aIsSipUri ); + iSettings.SetCallDirection( iPhoneStatus->CallDirectionL() ); + SetState( MMusAvaObserver::EMusAvaStatusAvailable ); MUS_LOG( "mus: [MUSAVA] \ <- CMusAvaNetworkAvailability::CallConnectedL()" ) @@ -189,7 +172,6 @@ MUS_LOG( "mus: [MUSAVA] \ -> CMusAvaNetworkAvailability::ConferenceCallL()" ) //Report line status - iConfcall = ETrue; SetState( MMusAvaObserver::EMusAvaStatusConferenceCall ); MUS_LOG( "mus: [MUSAVA] \ <- CMusAvaNetworkAvailability::ConferenceCallL()" ) @@ -200,13 +182,13 @@ // This function is called when a cs call goes hold // ------------------------------------------------------------------------- // -void CMusAvaNetworkAvailability::CallHoldL( const TDesC& aTelNumber ) +void CMusAvaNetworkAvailability::CallHoldL( const TDesC& aTelNumber, + TBool aIsSipUri) { MUS_LOG( "mus: [MUSAVA] -> CMusAvaNetworkAvailability::CallHoldL()" ) //Report line status - iSettings.SetTelNumberL( aTelNumber ); + SetRemoteHostL( aTelNumber, aIsSipUri ); iSettings.SetCallDirection( iPhoneStatus->CallDirectionL() ); - iSettings.SetCallPrivacy( iPhoneStatus->CallPrivacyL() ); SetState( MMusAvaObserver::EMusAvaStatusCallOnHold ); MUS_LOG( "mus: [MUSAVA] <- CMusAvaNetworkAvailability::CallHoldL()" ) } @@ -222,6 +204,11 @@ MUS_LOG( "mus: [MUSAVA] -> CMusAvaNetworkAvailability::NoActiveCallL()" ) iSettings.SetTelNumberL( KNullDesC() ); + CDesCArrayFlat* sipUris = + new ( ELeave ) CDesCArrayFlat( KSipUriArrayGranularity ); + CleanupStack::PushL( sipUris ); + iSettings.SetSipAddressesL( sipUris ); + CleanupStack::Pop( sipUris ); //Report line status //Availability status @@ -230,19 +217,28 @@ MUS_LOG( "mus: [MUSAVA] <- CMusAvaNetworkAvailability::NoActiveCallL()" ) } -// ------------------------------------------------------------------------- -//This function is called when conference call terminted -// -// ------------------------------------------------------------------------- -// -void CMusAvaNetworkAvailability::ConferenceCallLTerminated() + +void CMusAvaNetworkAvailability::SetRemoteHostL( const TDesC& aTelNumber, + TBool aIsSipUri ) { - MUS_LOG( "mus: [MUSAVA] -> CMusAvaNetworkAvailability::ConferenceCallLTerminated()" ) - if ( iConfcall ) - { - iConfcall = EFalse; - } - AvailabilitiesAbleToShowIndicator(); + MUS_LOG1( "mus: [MUSAVA] -> CMusAvaNetworkAvailability::SetRemoteHostL(%d)", + aIsSipUri ) + + if ( aIsSipUri ) + { + CDesCArrayFlat* sipUris = + new ( ELeave ) CDesCArrayFlat( KSipUriArrayGranularity ); + CleanupStack::PushL( sipUris ); + sipUris->AppendL( aTelNumber ); + iSettings.SetSipAddressesL( sipUris ); + CleanupStack::Pop( sipUris ); + + iSettings.SetUriForContactResolvingL( aTelNumber ); + } + else + { + iSettings.SetTelNumberL( aTelNumber ); + } - MUS_LOG( "mus: [MUSAVA] <- CMusAvaNetworkAvailability::ConferenceCallLTerminated()" ) + MUS_LOG( "mus: [MUSAVA] <- CMusAvaNetworkAvailability::SetRemoteHostL()" ) } diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshavailability/src/musavanetworkmodestatus.cpp --- a/mmsharing/mmshavailability/src/musavanetworkmodestatus.cpp Thu Aug 19 09:51:39 2010 +0300 +++ b/mmsharing/mmshavailability/src/musavanetworkmodestatus.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -54,11 +54,8 @@ iObserver.Reset(); iObserver.Close(); iPhone.Close(); - if( iTelServer.Handle() ) - { - iTelServer.UnloadPhoneModule( KMmTsyModuleName ); - iTelServer.Close(); - } + iTelServer.UnloadPhoneModule( KMmTsyModuleName ); + iTelServer.Close(); } diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshavailability/src/musavanetworkregistrationstatus.cpp --- a/mmsharing/mmshavailability/src/musavanetworkregistrationstatus.cpp Thu Aug 19 09:51:39 2010 +0300 +++ b/mmsharing/mmshavailability/src/musavanetworkregistrationstatus.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -51,11 +51,8 @@ iObserver.Reset(); iObserver.Close(); iPhone.Close(); - if( iTelServer.Handle() ) - { - iTelServer.UnloadPhoneModule( KMmTsyModuleName ); - iTelServer.Close(); - } + iTelServer.UnloadPhoneModule( KMmTsyModuleName ); + iTelServer.Close(); } diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshavailability/src/musavaoptionhandler.cpp --- a/mmsharing/mmshavailability/src/musavaoptionhandler.cpp Thu Aug 19 09:51:39 2010 +0300 +++ b/mmsharing/mmshavailability/src/musavaoptionhandler.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -33,6 +33,7 @@ #include "musavaterminal.h" #include "mussettingskeys.h" #include "mussettings.h" +#include "mussesseioninformationapi.h" _LIT( KMusSipPrefix, "sip:" ); @@ -141,6 +142,21 @@ ( MMusAvaSipAdapter& ) *iSipAgent, KMusOptionsHandlerIndex ); + MUS_LOG( "mus: [MUSAVA] Check fast mode capability" ) + + TRAPD( err, + iFastModeCapable = + MultimediaSharingSettings::FastStartupModeL() == MusSettingsKeys::EFastModeOn && + MultimediaSharingSettings::VideoDirectionL() == MusSettingsKeys::ETwoWayVideo && + MultimediaSharingSettings::CapabilityQuerySettingL() == MusSettingsKeys::EParallel ); + if ( err == KErrNoMemory ) + { + User::Leave( err ); + } + + MUS_LOG2( "mus: [MUSAVA] Fast mode check, err:%d, capable:%d", + err, iFastModeCapable ) + MUS_LOG( "mus: [MUSAVA] <- CMusAvaOptionHandler::ConstructL()" ) } @@ -151,8 +167,13 @@ // TBool CMusAvaOptionHandler::CapabilityQueryAnswered( TBool aAnswered ) { + MUS_LOG1( "mus: [MUSAVA] <-> CMusAvaOptionHandler::CapabilityQueryAnswered():%d", + aAnswered ) + iCapabilityQueryAnswered = aAnswered ? aAnswered : iCapabilityQueryAnswered; + HandleFastModeQueryAnswered(); + return iCapabilityQueryAnswered; } @@ -231,13 +252,13 @@ if ( variantSetting == MusSettingsKeys::EOperatorSpecific && iSettings.CallDirection() == 2 && !iCapabilitiesRequestAnswered ) { // terminated party - SetState( MMusAvaObserver::EMusAvaStatusOptionsNotSent ); + DoSetState( MMusAvaObserver::EMusAvaStatusOptionsNotSent ); } else if ( MusSettingsKeys::ESequential == MultimediaSharingSettings::CapabilityQuerySettingL() && iSettings.CallDirection() == 2 && !iCapabilitiesRequestAnswered ) { // terminated party - SetState( MMusAvaObserver::EMusAvaStatusOptionsNotSent ); + DoSetState( MMusAvaObserver::EMusAvaStatusOptionsNotSent ); } else { @@ -268,11 +289,11 @@ if ( iCapabilityExchange-> TerminalL( sipAddress8->Des() ).QueryExecuting() ) { - SetState( MMusAvaObserver::EMusAvaStatusOptionsSent ); + DoSetState( MMusAvaObserver::EMusAvaStatusOptionsSent ); } else { - SetState( MMusAvaObserver::EMusAvaStatusAvailable ); + DoSetState( MMusAvaObserver::EMusAvaStatusAvailable ); } CleanupStack::PopAndDestroy( sipAddress8 ); } @@ -281,24 +302,24 @@ // since we did not send any options set the state EMusAvaStatusNotExecuted. else if( err == KErrSIPInvalidRegistrationState ) { - SetState( MMusAvaObserver::EMusAvaStatusNotExecuted ); + DoSetState( MMusAvaObserver::EMusAvaStatusNotExecuted ); } // anything other than this should be considered default , means options sent // and was not successful. else { - SetState( MMusAvaObserver::EMusAvaOptionNotAvailable ); + DoSetState( MMusAvaObserver::EMusAvaOptionNotAvailable ); } } else { - SetState( MMusAvaObserver::EMusAvaStatusOptionsNotSent ); + DoSetState( MMusAvaObserver::EMusAvaStatusOptionsNotSent ); } } else { // option sending not needed - SetState( MMusAvaObserver::EMusAvaStatusOptionsNotSent ); + DoSetState( MMusAvaObserver::EMusAvaStatusOptionsNotSent ); } } @@ -327,6 +348,23 @@ return MMusAvaObserver::EMusAvaOptionHandler; } +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusAvaOptionHandler::PrepareForReceivedInviteL() + { + MUS_LOG( "mus: [MUSAVA] -> CMusAvaOptionHandler::PrepareForReceivedInviteL()" ) + + if ( iFastModeAvailabilityDelayed ) + { + MUS_LOG( "mus: [MUSAVA] Set delayed availability" ) + SetState( MMusAvaObserver::EMusAvaStatusAvailable ); + iFastModeAvailabilityDelayed = EFalse; + } + + MUS_LOG( "mus: [MUSAVA] <- CMusAvaOptionHandler::PrepareForReceivedInviteL()" ) + } // ----------------------------------------------------------------------------- // @@ -341,19 +379,17 @@ { // tell the upper layer that // query was succesfull. VS is available - //record the number - iSettings.SetOptionSentNumber( iSettings.TelNumber() ); - SetState( MMusAvaObserver::EMusAvaStatusAvailable ); + DoSetState( MMusAvaObserver::EMusAvaStatusAvailable ); } else if ( aSentQuery.Result() == KCapabilityCapabilitiesForbidden ) { // query returned with response "403 Forbidden". VS is NOT available - SetState( MMusAvaObserver::EMusAvaFailureCode ); + DoSetState( MMusAvaObserver::EMusAvaFailureCode ); } else { //query failed. VS is NOT available - SetState( MMusAvaObserver::EMusAvaOptionNotAvailable ); + DoSetState( MMusAvaObserver::EMusAvaOptionNotAvailable ); } MUS_LOG( @@ -400,6 +436,7 @@ "mus: [MUSAVA] -> CMusAvaOptionHandler::\ SetCapabilitiesResolvedForCingular()" ) iCapabilitiesRequestAnswered = ETrue; + TRAPD( error, DoExecuteL() ); if ( error ) { @@ -534,8 +571,214 @@ { MUS_LOG("mus: [MUSAVA] -> CMusAvaOptionHandler::VideoCodecsResolvedL()" ) - iSettings.SetVideoCodecsL(aVideoCodecs); + iSettings.SetVideoCodecsL( aVideoCodecs ); MUS_LOG("mus: [MUSAVA] <- CMusAvaOptionHandler::VideoCodecsResolvedL()" ) } + +// ----------------------------------------------------------------------------- +// If MO side fast mode negotiation has failed, cannot change the value anymore +// as it is very likely that automatic invitation fails as well. +// ----------------------------------------------------------------------------- +// +void CMusAvaOptionHandler::FastModeResolved( MusSettingsKeys::TFastMode aMode ) + { + MUS_LOG1("mus: [MUSAVA] -> CMusAvaOptionHandler::FastModeResolved():%d", + aMode ) + + if ( FastModeNegotiationFailedMO() ) + { + MUS_LOG("mus: [MUSAVA] Ignore setting as failed already" ) + } + else + { + iSettings.SetFastMode( aMode ); + } + + MUS_LOG("mus: [MUSAVA] <- CMusAvaOptionHandler::FastModeResolved()" ) + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +TInt CMusAvaOptionHandler::DoSetState( MMusAvaObserver::TAvailabilityStatus aNewState ) + { + MUS_LOG1( "mus: [MUSAVA] -> CMusAvaOptionHandler::DoSetState() state:%d", + aNewState ) + TInt err( KErrNone ); + + if ( iFastModeCapable ) + { + TRAP( err, aNewState = HandleFastModeL( aNewState ) ); + } + + SetState( aNewState ); + + MUS_LOG1("mus: [MUSAVA] <- CMusAvaOptionHandler::DoSetState(), err:%d", err ) + + return err; + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +MMusAvaObserver::TAvailabilityStatus CMusAvaOptionHandler::HandleFastModeL( + MMusAvaObserver::TAvailabilityStatus aNewState ) + { + MUS_LOG("mus: [MUSAVA] -> CMusAvaOptionHandler::HandleFastModeL()" ) + + switch ( aNewState ) + { + case MMusAvaObserver::EMusAvaOptionNotAvailable: + { + aNewState = HandleFastModeOptionNotAvailableL( aNewState ); + break; + } + case MMusAvaObserver::EMusAvaStatusOptionsNotSent: + { + aNewState = HandleFastModeOptionsNotSentL( aNewState ); + break; + } + case MMusAvaObserver::EMusAvaStatusAvailable: + { + aNewState = HandleFastModeAvailableL( aNewState ); + break; + } + default: + { + break; + } + } + + MUS_LOG("mus: [MUSAVA] <- CMusAvaOptionHandler::HandleFastModeL()" ) + + return aNewState; + } + +// ----------------------------------------------------------------------------- +// If fast mode and call originator, application is started +// automatically at background with two-way MO use case. If fast mode is +// negotiated, availability publishing is delayed at MT side until invitation +// is received (as MO will send invite automatically). +// ----------------------------------------------------------------------------- +// +MMusAvaObserver::TAvailabilityStatus CMusAvaOptionHandler::HandleFastModeAvailableL( + MMusAvaObserver::TAvailabilityStatus aNewState ) + { + MUS_LOG("mus: [MUSAVA] -> CMusAvaOptionHandler::HandleFastModeAvailableL()" ) + + __ASSERT_ALWAYS( iSettings.Observer(), User::Leave( KErrNotReady ) ); + + if ( State() != MMusAvaObserver::EMusAvaStatusAvailable && + iSettings.FastMode() == MusSettingsKeys::EFastModeOn ) + { + if ( iSettings.CallDirection() == NMusSessionInformationApi::ECallOrginated ) + { + MUS_LOG("mus: [MUSAVA] Starting application at background" ) + iSettings.Observer()->StartApplicationL( MultimediaSharing::EMusTwoWayVideo ); + } + else + { + MUS_LOG("mus: [MUSAVA] Delay availability publishing" ) + iFastModeAvailabilityDelayed = ETrue; + aNewState = State(); + } + } + + MUS_LOG("mus: [MUSAVA] <- CMusAvaOptionHandler::HandleFastModeAvailableL()" ) + + return aNewState; + } + +// ----------------------------------------------------------------------------- +// If fast mode and call terminated side, answering to 200 ok is already enough +// to set us available in delayed manner as other end can start sending +// invitation already after getting fast mode information in answer. +// ----------------------------------------------------------------------------- +// +void CMusAvaOptionHandler::HandleFastModeQueryAnswered() + { + if ( FastModeNegotiatedByAnswerMT() ) + { + MUS_LOG( "mus: [MUSAVA] Set fastmode available already as answered" ) + + // Will result delayed availability handling + DoSetState( MMusAvaObserver::EMusAvaStatusOptionsNotSent ); + } + } + +// ----------------------------------------------------------------------------- +// If options wasn't sent because of missing information, state can be set to +// available immediately as MT cannot start waiting for invite unless it is +// sure that other end is about to send it. +// ----------------------------------------------------------------------------- +// +MMusAvaObserver::TAvailabilityStatus +CMusAvaOptionHandler::HandleFastModeOptionsNotSentL( + MMusAvaObserver::TAvailabilityStatus aNewState ) + { + MUS_LOG("mus: [MUSAVA] -> CMusAvaOptionHandler::HandleFastModeOptionsNotSentL()" ) + + if ( FastModeNegotiatedByAnswerMT() ) + { + MUS_LOG("mus: [MUSAVA] Answered already, set available" ) + // Make available but start waiting for invitation + aNewState = HandleFastModeAvailableL( MMusAvaObserver::EMusAvaStatusAvailable ); + } + + MUS_LOG("mus: [MUSAVA] <- CMusAvaOptionHandler::HandleFastModeOptionsNotSentL()" ) + + return aNewState; + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +MMusAvaObserver::TAvailabilityStatus +CMusAvaOptionHandler::HandleFastModeOptionNotAvailableL( + MMusAvaObserver::TAvailabilityStatus aNewState ) + { + MUS_LOG("mus: [MUSAVA] -> CMusAvaOptionHandler::HandleFastModeOptionNotAvailableL()" ) + + if ( iFastModeAvailabilityDelayed || + State() == MMusAvaObserver::EMusAvaStatusAvailable ) + { + MUS_LOG("mus: [MUSAVA] In delayed mode or available, ignore" ) + aNewState = State(); + } + + MUS_LOG("mus: [MUSAVA] <- CMusAvaOptionHandler::HandleFastModeOptionNotAvailableL()" ) + + return aNewState; + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +TBool CMusAvaOptionHandler::FastModeNegotiatedByAnswerMT() + { + return ( iFastModeCapable && + iCapabilityQueryAnswered && + iSettings.FastMode() == MusSettingsKeys::EFastModeOn && + iSettings.CallDirection() == NMusSessionInformationApi::ECallTerminated ); + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +TBool CMusAvaOptionHandler::FastModeNegotiationFailedMO() + { + return ( iFastModeCapable && + iSettings.FastMode() != MusSettingsKeys::EFastModeOn && + iSettings.CallDirection() == NMusSessionInformationApi::ECallOrginated && + State() != MMusAvaObserver::EMusAvaStatusAvailable && + State() != MMusAvaObserver::EMusAvaStatusOptionsSent ); + } + +// End of file diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshavailability/src/musavaregisteravailability.cpp --- a/mmsharing/mmshavailability/src/musavaregisteravailability.cpp Thu Aug 19 09:51:39 2010 +0300 +++ b/mmsharing/mmshavailability/src/musavaregisteravailability.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -5,7 +5,6 @@ * 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". -* Version : %version: be1sipx1#42.1.4.1.4 % << Don't touch! Updated by Synergy at check-out. * * Initial Contributors: * Nokia Corporation - initial contribution. @@ -95,7 +94,6 @@ { iSharedObj = CMusAvaSharedObject::GetSingletonL(); iSharedObj->MusAvaSip().AddAdapterL( *this ); - iOperatorVariant = MultimediaSharingSettings::OperatorVariantSettingL(); } @@ -120,11 +118,7 @@ { MUS_LOG( "mus: [MUSAVA] -> CMusAvaRegisterAvailability::DoExecuteL " ) SetState( MMusAvaObserver::EMusAvaStatusInProgress ); - TRAPD( err, RegisterL() ); - if( err != KErrNone ) - { - SetState( MMusAvaObserver::EMusAvaStatusNotRegistered ); - } + RegisterL(); // TBD: SetState( MMusAvaObserver::EMusAvaNameRegistration ); MUS_LOG( "mus: [MUSAVA] <- CMusAvaRegisterAvailability::DoExecuteL " ) @@ -284,7 +278,6 @@ { MUS_LOG( "mus: [MUSAVA] Profile is deregistered" ) SetState( MMusAvaObserver::EMusAvaStatusNotRegistered ); - iSharedObj->MusAvaSip().DeleteSIPConnection(); } break; @@ -317,7 +310,7 @@ // void CMusAvaRegisterAvailability::ProfileRegistryErrorOccurred( TUint32 aProfileId, - TInt aError ) + TInt /* aError */ ) { MUS_LOG( "mus: [MUSAVA] -> CMusAvaRegisterAvailability::\ ProfileRegistryErrorOccurred" ) @@ -334,17 +327,7 @@ if( profileId == aProfileId ) { - if ( iOperatorVariant == MusSettingsKeys::EOperatorSpecific && - aError == KErrGeneral ) - { - MUS_LOG( "SIP profile is disabled by the user" ) - SetState( MMusAvaObserver::EMusActivationError ); - } - else - { - MUS_LOG1("Error %d",aError ) - SetState( MMusAvaObserver::EMusAvaStatusNotRegistered ); - } + SetState( MMusAvaObserver::EMusAvaStatusNotRegistered ); } MUS_LOG( "mus: [MUSAVA] <- CMusAvaRegisterAvailability::\ @@ -503,29 +486,29 @@ MUS_LOG( "mus: [MUSAVA] -> CMusAvaRegisterAvailability::EnableRegisterL " ) MUS_LOG( "mus: [MUSAVA] Fetch SIP ProfileRegistry" ) - CSIPProfileRegistry& registry = iSharedObj->MusAvaSip().ProfileRegistryL(); + CSIPProfileRegistry& registry = iSharedObj->MusAvaSip().ProfileRegistryL(); MUS_LOG( "mus: [MUSAVA] Profile status" ) if ( !registry.IsEnabled( *iSharedObj->MusAvaSip().Profile() ) ) - { - MUS_LOG("mus: [MUSAVA] Calling EnableL()" ) - registry.EnableL( *iSharedObj->MusAvaSip().Profile(), - iSharedObj->MusAvaSip().ConnectionObserver() ); - } - + { + MUS_LOG("mus: [MUSAVA] Calling EnableL()" ) + registry.EnableL( *iSharedObj->MusAvaSip().Profile(), + iSharedObj->MusAvaSip().ConnectionObserver() ); + } + // Try to write client information to CenRep of client resolver. // This functionality is needed in __VOIP enabled terminals. // In __VOIP disabled builds this will fail because of a lack of needed // CenRep UID. To avoid branching, we just try to do this and let it fail // in normal build. CMusAvaClientResolverUtil* resolver = - iSharedObj->MusAvaSip().ClientResolverUtil(); + iSharedObj->MusAvaSip().ClientResolverUtil(); if ( resolver ) - { - TRAP_IGNORE( resolver->RegisterClientWithUserL( - *iSharedObj->MusAvaSip().Profile() ) ) - } - - MUS_LOG( "mus: [MUSAVA] <- CMusAvaRegisterAvailability::EnableRegisterL " ) + { + TRAP_IGNORE( resolver->RegisterClientWithUserL( + *iSharedObj->MusAvaSip().Profile() ) ) + } + + MUS_LOG( "mus: [MUSAVA] <- CMusAvaRegisterAvailability::EnableRegisterL " ) } @@ -601,3 +584,4 @@ } } + diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshavailability/src/musavasettingavailability.cpp --- a/mmsharing/mmshavailability/src/musavasettingavailability.cpp Thu Aug 19 09:51:39 2010 +0300 +++ b/mmsharing/mmshavailability/src/musavasettingavailability.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -131,10 +131,10 @@ switch( activation ) { case MusSettingsKeys::ENever: - case MusSettingsKeys::EActiveInHomeNetworks: iState = MMusAvaObserver::EMusActivationError ; break; - case MusSettingsKeys::EAlwaysActive: + case MusSettingsKeys::EAlwaysActive: + case MusSettingsKeys::EActiveInHomeNetworks: default: if ( !IsForbiddenByOptionsResponse()) { diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshavailability/src/musavasettingsimp.cpp --- a/mmsharing/mmshavailability/src/musavasettingsimp.cpp Thu Aug 19 09:51:39 2010 +0300 +++ b/mmsharing/mmshavailability/src/musavasettingsimp.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -56,9 +56,6 @@ delete iContactName; iContactName = NULL; - - delete iOptionSentTelNumber; - iOptionSentTelNumber = NULL ; delete iSipAddressProposal; iSipAddressProposal = NULL ; @@ -84,7 +81,8 @@ iAudioCodecs = NULL ; } - + delete iContactResolvingUri; + MUS_LOG( "mus: [MUSAVA] <- CMusAvaSettingsImp::~CMusAvaSettingsImp()" ) } @@ -92,9 +90,9 @@ // C++ Constructor // ----------------------------------------------------------------------------- // -CMusAvaSettingsImp::CMusAvaSettingsImp() +CMusAvaSettingsImp::CMusAvaSettingsImp() : + iFastMode( MusSettingsKeys::EFastModeOff ) { - } // ----------------------------------------------------------------------------- @@ -105,8 +103,6 @@ { MUS_LOG( "mus: [MUSAVA] -> CMusAvaSettingsImp::ConstructL()" ) iTelNumber = HBufC::NewL( 0 ); - - iOptionSentTelNumber = HBufC::NewL( 0 ); iContactName = HBufC::NewL( 0 ); @@ -123,8 +119,7 @@ iAudioCodecs = new( ELeave ) CDesCArrayFlat( 1 ); MUS_LOG( "mus: [MUSAVA] <- CMusAvaSettingsImp::ConstructL()" ) - } - + } // ----------------------------------------------------------------------------- // // ----------------------------------------------------------------------------- @@ -133,7 +128,6 @@ { return iManualActivation; } - // ----------------------------------------------------------------------------- // // ----------------------------------------------------------------------------- @@ -149,51 +143,6 @@ // // ----------------------------------------------------------------------------- // -void CMusAvaSettingsImp::SetOptionSentNumber( const TDesC& aTelNumber ) - { - MUS_LOG( "mus: [MUSAVA] -> CMusAvaSettingsImp::SetOptionSentNumber() " ) - MUS_LOG_TDESC( "mus: [MUSAVA] aTelNumber = ", aTelNumber ) - delete iOptionSentTelNumber; - iOptionSentTelNumber = NULL ; - TRAPD ( error , iOptionSentTelNumber = aTelNumber.AllocL() ); - if ( error ) - { - MUS_LOG1("CMusAvaSettingsImp::SetOptionSentNumber() leave code: %d ", error); - } - MUS_LOG( "mus: [MUSAVA] <- CMusAvaSettingsImp::SetOptionSentNumber() " ) - } - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -const TDesC& CMusAvaSettingsImp::OptionSentTelNumber() const - { - MUS_LOG( "mus: [MUSAVA] -> CMusAvaSettingsImp::OptionSentTelNumber() " ) - return *iOptionSentTelNumber; - } - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusAvaSettingsImp::ReleaseOptionSentNumber () - { - MUS_LOG( "mus: [MUSAVA] -> CMusAvaSettingsImp::ReleaseOptionSentNumber() " ) - delete iOptionSentTelNumber; - iOptionSentTelNumber = NULL; - TRAPD ( err , iOptionSentTelNumber = HBufC::NewL( 0 ) ); - if ( err ) - { - MUS_LOG1("CMusAvaSettingsImp::ReleaseOptionSentNumber() leave code: %d ", err); - } - MUS_LOG( "mus: [MUSAVA] <- CMusAvaSettingsImp::ReleaseOptionSentNumber() " ) - } - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// const TDesC& CMusAvaSettingsImp::ContactName() const { MUS_LOG( "mus: [MUSAVA] -> CMusAvaSettingsImp::ContactName()" ) @@ -445,6 +394,15 @@ // // ----------------------------------------------------------------------------- // +MMusAvaSettingsObserver* CMusAvaSettingsImp::Observer() + { + return iObserver; + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// void CMusAvaSettingsImp::SetManualActivation( TManualActivation aManualActivation ) { MUS_LOG( "mus: [MUSAVA] -> CMusAvaSettingsImp::SetManualActivation" ) @@ -471,6 +429,7 @@ return state; } + // ----------------------------------------------------------------------------- // // ----------------------------------------------------------------------------- @@ -488,23 +447,48 @@ { iCallDirection = aDirection; } - + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusAvaSettingsImp::SetFastMode( MusSettingsKeys::TFastMode aMode ) + { + iFastMode = aMode; + } + // ----------------------------------------------------------------------------- // // ----------------------------------------------------------------------------- // -TInt CMusAvaSettingsImp::CallPrivacy() - { - return iCallPrivacy; - } - +MusSettingsKeys::TFastMode CMusAvaSettingsImp::FastMode() const + { + return iFastMode; + } + +// ----------------------------------------------------------------------------- +// In case of not having tel number, contact for remote end may be searched +// based on sip uri // ----------------------------------------------------------------------------- // +void CMusAvaSettingsImp::SetUriForContactResolvingL( + const TDesC& aRemoteUri ) + { + HBufC* tempResolvingUri = aRemoteUri.AllocL(); + delete iContactResolvingUri; + iContactResolvingUri = tempResolvingUri; + } + +// ----------------------------------------------------------------------------- +// // ----------------------------------------------------------------------------- // -void CMusAvaSettingsImp:: SetCallPrivacy( TInt aPrivacy ) - { - iCallPrivacy = aPrivacy; - } - -// end of file +TPtrC CMusAvaSettingsImp::ContactResolvingUri() + { + TPtrC resolvingUri( KNullDesC ); + if ( iContactResolvingUri ) + { + resolvingUri.Set( iContactResolvingUri->Des() ); + } + return resolvingUri; + } diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshavailability/src/musavasip.cpp --- a/mmsharing/mmshavailability/src/musavasip.cpp Thu Aug 19 09:51:39 2010 +0300 +++ b/mmsharing/mmshavailability/src/musavasip.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -5,7 +5,7 @@ * 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". -* Version : %version: 30.1.4 % << Don't touch! Updated by Synergy at check-out. +* Version : %version: 30.1.5 % << Don't touch! Updated by Synergy at check-out. * * Initial Contributors: * Nokia Corporation - initial contribution. @@ -406,15 +406,6 @@ { return iClientResolverUtil; } -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -void CMusAvaSip::DeleteSIPConnection() - { - MUS_LOG( "mus: [MUSAVA] -> CMusAvaSip::DeleteSIPConnection()" ) - delete iSipConnection; iSipConnection = NULL; - MUS_LOG( "mus: [MUSAVA] <- CMusAvaSip::DeleteSIPConnection()" ) - } // ----------------------------------------------------------------------------- diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshavailability/src/musavasipheaderutil.cpp --- a/mmsharing/mmshavailability/src/musavasipheaderutil.cpp Thu Aug 19 09:51:39 2010 +0300 +++ b/mmsharing/mmshavailability/src/musavasipheaderutil.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -19,8 +19,6 @@ #include "musavasipheaderutil.h" #include "muscleanupresetanddestroy.h" -#include "mussesseioninformationapi.h" -#include #include #include #include @@ -228,29 +226,6 @@ "mus: [MUSAVA] <- CMusAvaSipheaderUtil::AddAcceptSDPHeaderL" ) } -// -------------------------------------------------------------------------- -// CMusAvaSipheaderUtil::AddPrivacyHeaderL -// -------------------------------------------------------------------------- -// -void CMusAvaSipheaderUtil::AddPrivacyHeaderL( - RPointerArray& aRequestHeaders ) - { - MUS_LOG( "mus: [MUSAVA] -> AddPrivacyHeaderL()" ) - NMusSessionInformationApi::TMusClirSetting clir = - NMusSessionInformationApi::ESendOwnNumber; - // Ignore RProperty::Get return value.Incase of error it should behave default. - RProperty::Get( NMusSessionInformationApi::KCategoryUid, - NMusSessionInformationApi::KMusClirSetting, - reinterpret_cast( clir ) ); - MUS_LOG1( "mus: [MUSAVA] - clir setting = %d", clir ) - if ( clir == NMusSessionInformationApi::EDoNotSendOwnNumber ) - { - _LIT8( KMusPrivacyHeader, "Privacy" ); - _LIT8( KMusPrivacyHeaderValue, "id" ); - CSIPExtensionHeader* header = CSIPExtensionHeader::NewLC( - KMusPrivacyHeader, KMusPrivacyHeaderValue ); - aRequestHeaders.AppendL( header ); - CleanupStack::Pop( header ); - } - MUS_LOG( "mus: [MUSAVA] <- AddPrivacyHeaderL()" ) - } + + + diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshavailability/src/musavaterminal.cpp --- a/mmsharing/mmshavailability/src/musavaterminal.cpp Thu Aug 19 09:51:39 2010 +0300 +++ b/mmsharing/mmshavailability/src/musavaterminal.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -189,15 +189,7 @@ ResetAndDestroyQuery(); - if( aQuery->ValidateUri() ) - { - aQuery->ExecuteL(); - } - - else - { - User::Leave( KErrNotSupported ); - } + aQuery->ExecuteL(); iQuery = aQuery; @@ -521,7 +513,12 @@ CleanupStack::PushL( videoCodecs ); capability->Exchange().QueryObserver().VideoCodecsResolvedL( *videoCodecs ); CleanupStack::PopAndDestroy( videoCodecs ); - + + //store fast startup mode if present + MusSettingsKeys::TFastMode mode = + CMusAvaCapability::ResolveFastModeL( *sdp ); + capability->Exchange().QueryObserver().FastModeResolved( mode ); + CleanupStack::PopAndDestroy( sdp ); capability->PopulateResponseL( aQuery, diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshavailability/tsrc/ut_availability/Group/bld.inf --- a/mmsharing/mmshavailability/tsrc/ut_availability/Group/bld.inf Thu Aug 19 09:51:39 2010 +0300 +++ b/mmsharing/mmshavailability/tsrc/ut_availability/Group/bld.inf Tue Aug 31 15:12:07 2010 +0300 @@ -24,5 +24,5 @@ PRJ_EXPORTS -PRJ_TESTMMPFILES +PRJ_MMPFILES ut_availability.mmp diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshavailability/tsrc/ut_availability/Group/ut_availability.mmp --- a/mmsharing/mmshavailability/tsrc/ut_availability/Group/ut_availability.mmp Thu Aug 19 09:51:39 2010 +0300 +++ b/mmsharing/mmshavailability/tsrc/ut_availability/Group/ut_availability.mmp Tue Aug 31 15:12:07 2010 +0300 @@ -27,8 +27,8 @@ MACRO UNIT_TESTING //epocallowdlldata -CAPABILITY EUNIT_CAPS +CAPABILITY EUNIT_CAPS VENDORID VID_DEFAULT // Test sources @@ -59,7 +59,8 @@ SOURCE UT_CMusAvaSipprofileAvailability.cpp SOURCE UT_CMusAvaSipProfileRegistryObserver.cpp SOURCE UT_CMusAvaNetworkAvailability.cpp -SOURCE UT_CMusAvaSettingAvailability.cpp +SOURCE UT_CMusAvaSettingAvailability.cpp +SOURCE UT_CMusAvaCallEventMonitor.cpp SOURCE UT_CMusAvaSipheaderUtil.cpp SOURCE ut_cmusavaclientresolverutil.cpp SOURCE musavacapabilitytesthelper.cpp @@ -126,7 +127,8 @@ SOURCE centralrepositorystub.cpp SOURCE sipprofileregistrystub.cpp SOURCE sipprofilestub.cpp -SOURCE csipcontactheaderstub.cpp +SOURCE csipcontactheaderstub.cpp +SOURCE musavacallmonitorobserver.cpp SOURCE muscallmonitorstub.cpp SOURCEPATH ../../../../../tsrc/sipprofilestub/src @@ -147,7 +149,6 @@ SOURCEPATH ../../../../../mmshplugins/mmshaoplugin/src SOURCE muscalleventmonitor.cpp SOURCE muscallmonitor.cpp -SOURCE musclirmonitor.cpp //SOURCE musconferencecallmonitor.cpp // Using RProperty Stubs @@ -168,12 +169,16 @@ USERINCLUDE ../../../../../mmshplugins/mmshaoplugin/inc USERINCLUDE ../../../../../tsrc/propertystub/inc USERINCLUDE ../../../../../tsrc/sipclientstub/inc +USERINCLUDE ../../../../../tsrc/musavaailabilitystub/inc +USERINCLUDE ../../../../../tsrc/centralrepositorystub/inc +USERINCLUDE ../../../../../tsrc/sipprofilestub/inc SYSTEMINCLUDE ../../../../../tsrc/sipprofilestub/inc SYSTEMINCLUDE ../../../../../tsrc/sipclientstub/inc SYSTEMINCLUDE ../../../../../tsrc/musavaailabilitystub/inc SYSTEMINCLUDE ../../../../../tsrc/centralrepositorystub/inc SYSTEMINCLUDE ../../../../../tsrc/propertystub/inc +SYSTEMINCLUDE /epoc32/include/platform/digia/eunit APP_LAYER_SYSTEMINCLUDE @@ -194,7 +199,6 @@ LIBRARY insock.lib LIBRARY sdpcodec.lib LIBRARY sipcodec.lib -LIBRARY PbkEng.lib LIBRARY connmon.lib LIBRARY etelmm.lib LIBRARY etel.lib diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshavailability/tsrc/ut_availability/Group/ut_availability.pkg --- a/mmsharing/mmshavailability/tsrc/ut_availability/Group/ut_availability.pkg Thu Aug 19 09:51:39 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,33 +0,0 @@ -; -; Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). -; All rights reserved. -; This component and the accompanying materials are made available -; under the terms of "Eclipse Public License v1.0" -; which accompanies this distribution, and is available -; at the URL "http://www.eclipse.org/legal/epl-v10.html". -; -; Initial Contributors: -; Nokia Corporation - initial contribution. -; -; Contributors: -; -; Description: -; - -;Languages -&EN - -;Header -#{"EUnit: MMSHAvail"},(0x01700000),1,0,0 - -(0x101F7961), 0, 0, 0, {"Series60ProductID"} - -;Localised Vendor name -%{"Nokia"} - -;Unique vendor name -:"Nokia" - -;DLL files -"\epoc32\release\armv5\urel\ut_availability.dll"-"c:\sys\bin\ut_availability.dll" - diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshavailability/tsrc/ut_availability/Stubs/inc/musavaavailabilityobserverimp.h --- a/mmsharing/mmshavailability/tsrc/ut_availability/Stubs/inc/musavaavailabilityobserverimp.h Thu Aug 19 09:51:39 2010 +0300 +++ b/mmsharing/mmshavailability/tsrc/ut_availability/Stubs/inc/musavaavailabilityobserverimp.h Tue Aug 31 15:12:07 2010 +0300 @@ -118,9 +118,6 @@ virtual MMusAvaObserver::TAvailabilityStatus AvailabilityPluginState(); - - - virtual void AvailabilitiesAbleToShowIndicator(); /** diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshavailability/tsrc/ut_availability/Stubs/inc/musavacallmonitorobserver.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/mmshavailability/tsrc/ut_availability/Stubs/inc/musavacallmonitorobserver.h Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,81 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: Unit test stub of MMusCallMonitorObserver +* +*/ + + +#ifndef __MUSAVACALLMONITOROBSERVER_H__ +#define __MUSAVACALLMONITOROBSERVER_H__ + +#include "musavaavailabilityobserver.h" +#include "muscallmonitorobserver.h" +#include + +/** + * Test stub of MMusCallMonitorObserver + */ +class CMusAvaCallMonitorObserverStub : + public CBase, + public MMusCallMonitorObserver + { +public: + + /** + * Two-phased constructor + * + * @return New CMusAvaCallMonitorObserverStub instance + */ + static CMusAvaCallMonitorObserverStub* NewL(); + + /** + * Destructor + */ + ~CMusAvaCallMonitorObserverStub(); + +public: // From MMusCallMonitorObserver + + void CallConnectedL( const TDesC& aTelNumber, TBool aIsSipUri ); + + void CallHoldL( const TDesC& aTelNumber, TBool aIsSipUri ); + + void ConferenceCallL(); + + void NoActiveCallL(); + +private: + /** + * Constructor + */ + CMusAvaCallMonitorObserverStub(); + + /** + * Perform the second phase construction + */ + void ConstructL(); + + void CopyDescriptorL( const TDesC& aSource ); + +public: + + // Most recently received tel number. Owned. + HBufC* iTelNumber; + + // Contains the most recent value a of aIsSipUri parameter, from + // CallConnectedL or CallHoldL. + TBool iIsSipUri; + }; + + +#endif // __MUSAVACALLMONITOROBSERVER_H__ diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshavailability/tsrc/ut_availability/Stubs/inc/musavacapabilityqueryobserverimp.h --- a/mmsharing/mmshavailability/tsrc/ut_availability/Stubs/inc/musavacapabilityqueryobserverimp.h Thu Aug 19 09:51:39 2010 +0300 +++ b/mmsharing/mmshavailability/tsrc/ut_availability/Stubs/inc/musavacapabilityqueryobserverimp.h Tue Aug 31 15:12:07 2010 +0300 @@ -20,6 +20,7 @@ #define __MUSAVACAPABQUERYOBSERVERIMP_H__ #include +#include #include "mmusavacapabilityqueryobserver.h" class CMusAvaCapabilityQueryObserverImp : public CBase, @@ -47,6 +48,7 @@ TBool CapabilityQueryAnswered( TBool aAnswered = EFalse ); + void FastModeResolved( MusSettingsKeys::TFastMode aMode ); }; diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshavailability/tsrc/ut_availability/Stubs/inc/musavaobserverimp.h --- a/mmsharing/mmshavailability/tsrc/ut_availability/Stubs/inc/musavaobserverimp.h Thu Aug 19 09:51:39 2010 +0300 +++ b/mmsharing/mmshavailability/tsrc/ut_availability/Stubs/inc/musavaobserverimp.h Tue Aug 31 15:12:07 2010 +0300 @@ -108,8 +108,6 @@ virtual void AvailabilityError( MMusAvaObserver::TAvailabilityName aName, MMusAvaObserver::TAvailabilityStatus aStatus ); - - virtual void AvailabilitiesAbleToShowIndicator(); public: diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshavailability/tsrc/ut_availability/Stubs/inc/musavasettingsobserverimp.h --- a/mmsharing/mmshavailability/tsrc/ut_availability/Stubs/inc/musavasettingsobserverimp.h Thu Aug 19 09:51:39 2010 +0300 +++ b/mmsharing/mmshavailability/tsrc/ut_availability/Stubs/inc/musavasettingsobserverimp.h Tue Aug 31 15:12:07 2010 +0300 @@ -96,9 +96,13 @@ TBool OptionAllowed(); + void StartApplicationL( MultimediaSharing::TMusUseCase aUseCase ); + public: //data TBool iOptionAllowed; + + TBool iApplicationStarted; }; diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshavailability/tsrc/ut_availability/Stubs/src/CMusAvaAvailabilityObserverImp.cpp --- a/mmsharing/mmshavailability/tsrc/ut_availability/Stubs/src/CMusAvaAvailabilityObserverImp.cpp Thu Aug 19 09:51:39 2010 +0300 +++ b/mmsharing/mmshavailability/tsrc/ut_availability/Stubs/src/CMusAvaAvailabilityObserverImp.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -113,8 +113,3 @@ && MMusAvaObserver::EMusAvaStatusAvailable == iStatus ); } -void CMusAvaAvailabilityObserverImp::AvailabilitiesAbleToShowIndicator() - { - //nothing to do - } - diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshavailability/tsrc/ut_availability/Stubs/src/CSipSseTestTls.cpp --- a/mmsharing/mmshavailability/tsrc/ut_availability/Stubs/src/CSipSseTestTls.cpp Thu Aug 19 09:51:39 2010 +0300 +++ b/mmsharing/mmshavailability/tsrc/ut_availability/Stubs/src/CSipSseTestTls.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -36,7 +36,7 @@ self->ClientRequest( NULL ); self->ClientResponse( SIPStrings::StringF( SipStrConsts::EEmpty ), NULL ); Dll::SetTls( self ); - + User::LeaveIfError( self->Set ( MusSettingsKeys::KActivation, MusSettingsKeys::EAlwaysActive ) ); User::LeaveIfError( self->Set ( MusSettingsKeys::KAuditoryNotification, @@ -57,7 +57,9 @@ MusSettingsKeys::EPortrait ) ); User::LeaveIfError( self->Set ( MusSettingsKeys::KCapabilityQuery, MusSettingsKeys::ENoOptions ) ); - + User::LeaveIfError( self->Set ( MusSettingsKeys::KAllowOnlyIn3GNetwork, + MusSettingsKeys::EAllowedAllBearers ) ); + } void CSipSseTestTls::Close () @@ -108,6 +110,9 @@ MusSettingsKeys::EPortrait ); Storage()->Set ( MusSettingsKeys::KCapabilityQuery, MusSettingsKeys::ENoOptions ); + + Storage()->Set ( MusSettingsKeys::KAllowOnlyIn3GNetwork, + MusSettingsKeys::EAllowedAllBearers ); iRegistryBehavior = 0; iProfileBehavior = 0; diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshavailability/tsrc/ut_availability/Stubs/src/musavacallmonitorobserver.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/mmshavailability/tsrc/ut_availability/Stubs/src/musavacallmonitorobserver.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,109 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: Unit test stub of MMusCallMonitorObserver +* +*/ + + +#include "musavacallmonitorobserver.h" +#include + + +// ----------------------------------------------------------------------------- +// CMusAvaCallMonitorObserverStub::NewL() +// ----------------------------------------------------------------------------- +// +CMusAvaCallMonitorObserverStub* CMusAvaCallMonitorObserverStub::NewL() + { + CMusAvaCallMonitorObserverStub* self = + new ( ELeave ) CMusAvaCallMonitorObserverStub(); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + return self; + } + +// ----------------------------------------------------------------------------- +// CMusAvaCallMonitorObserverStub::~CMusAvaCallMonitorObserverStub() +// ----------------------------------------------------------------------------- +// +CMusAvaCallMonitorObserverStub::~CMusAvaCallMonitorObserverStub() + { + delete iTelNumber; + } + +// ----------------------------------------------------------------------------- +// CMusAvaCallMonitorObserverStub::CallConnectedL() +// ----------------------------------------------------------------------------- +// +void CMusAvaCallMonitorObserverStub::CallConnectedL( const TDesC& aTelNumber, + TBool aIsSipUri ) + { + CopyDescriptorL( aTelNumber ); + iIsSipUri = aIsSipUri; + } + +// ----------------------------------------------------------------------------- +// CMusAvaCallMonitorObserverStub::CallHoldL() +// ----------------------------------------------------------------------------- +// +void CMusAvaCallMonitorObserverStub::CallHoldL( const TDesC& aTelNumber, + TBool aIsSipUri ) + { + CopyDescriptorL( aTelNumber ); + iIsSipUri = aIsSipUri; + } + +// ----------------------------------------------------------------------------- +// CMusAvaCallMonitorObserverStub::ConferenceCallL() +// ----------------------------------------------------------------------------- +// +void CMusAvaCallMonitorObserverStub::ConferenceCallL() + { + } + +// ----------------------------------------------------------------------------- +// CMusAvaCallMonitorObserverStub::NoActiveCallL() +// ----------------------------------------------------------------------------- +// +void CMusAvaCallMonitorObserverStub::NoActiveCallL() + { + } + +// ----------------------------------------------------------------------------- +// CMusAvaCallMonitorObserverStub::CMusAvaCallMonitorObserverStub() +// ----------------------------------------------------------------------------- +// +CMusAvaCallMonitorObserverStub::CMusAvaCallMonitorObserverStub() + { + } + +// ----------------------------------------------------------------------------- +// CMusAvaCallMonitorObserverStub::ConstructL() +// ----------------------------------------------------------------------------- +// +void CMusAvaCallMonitorObserverStub::ConstructL() + { + } + +// ----------------------------------------------------------------------------- +// CMusAvaCallMonitorObserverStub::CopyDescriptorL() +// ----------------------------------------------------------------------------- +// +void CMusAvaCallMonitorObserverStub::CopyDescriptorL( const TDesC& aSource ) + { + HBufC* newDescriptor = aSource.AllocL(); + delete iTelNumber; + iTelNumber = newDescriptor; + } diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshavailability/tsrc/ut_availability/Stubs/src/musavacapabilityqueryobserverimp.cpp --- a/mmsharing/mmshavailability/tsrc/ut_availability/Stubs/src/musavacapabilityqueryobserverimp.cpp Thu Aug 19 09:51:39 2010 +0300 +++ b/mmsharing/mmshavailability/tsrc/ut_availability/Stubs/src/musavacapabilityqueryobserverimp.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -77,3 +77,9 @@ { return EFalse; } + +void CMusAvaCapabilityQueryObserverImp::FastModeResolved( + MusSettingsKeys::TFastMode /*aMode*/ ) + { + + } diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshavailability/tsrc/ut_availability/Stubs/src/musavaobserverimp.cpp --- a/mmsharing/mmshavailability/tsrc/ut_availability/Stubs/src/musavaobserverimp.cpp Thu Aug 19 09:51:39 2010 +0300 +++ b/mmsharing/mmshavailability/tsrc/ut_availability/Stubs/src/musavaobserverimp.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -93,8 +93,4 @@ } - void CMusAvaObserverImp::AvailabilitiesAbleToShowIndicator() - { - //nothing to do - } diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshavailability/tsrc/ut_availability/Stubs/src/musavasettingsobserverimp.cpp --- a/mmsharing/mmshavailability/tsrc/ut_availability/Stubs/src/musavasettingsobserverimp.cpp Thu Aug 19 09:51:39 2010 +0300 +++ b/mmsharing/mmshavailability/tsrc/ut_availability/Stubs/src/musavasettingsobserverimp.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -97,6 +97,15 @@ MUS_LOG( " [MUSAVA ] -> CMusAvaSettingsObserverImp::OptionAllowed" ); MUS_LOG( " [MUSAVA ] <- CMusAvaSettingsObserverImp::OptionAllowed" ); return iOptionAllowed; - } + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusAvaSettingsObserverImp::StartApplicationL( MultimediaSharing::TMusUseCase /*aUseCase*/ ) + { + iApplicationStarted = ETrue; + } diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshavailability/tsrc/ut_availability/Stubs/src/muscallmonitorstub.cpp --- a/mmsharing/mmshavailability/tsrc/ut_availability/Stubs/src/muscallmonitorstub.cpp Thu Aug 19 09:51:39 2010 +0300 +++ b/mmsharing/mmshavailability/tsrc/ut_availability/Stubs/src/muscallmonitorstub.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -35,8 +35,10 @@ // C++ constructor. // ----------------------------------------------------------------------------- // -CMusCallMonitorBase::CMusCallMonitorBase(const RMobileCall& aCall, MMusTsyPropertyObserver& aObserver ) - : CActive( EPriorityNormal ),iCall(aCall),iTsyObserver( aObserver ) +CMusCallMonitorBase::CMusCallMonitorBase(const RMobileCall& aCall, + MMusTsyPropertyObserver& aObserver, + MMusCallStateObserver& aCallStateObserver ) + : CActive( EPriorityNormal ),iCall(aCall),iTsyObserver( aObserver ),iCallStateObserver( aCallStateObserver ) { } @@ -72,7 +74,14 @@ { } -CMusCallStatusMonitor* CMusCallStatusMonitor::NewL(const RMobileCall&, MMusTsyPropertyObserver& ) + +// ----------------------------------------------------------------------------- +// MusCallStatusMonitor +// ----------------------------------------------------------------------------- +// + +CMusCallStatusMonitor* CMusCallStatusMonitor::NewL(const RMobileCall&, MMusTsyPropertyObserver&, + MMusCallStateObserver& ) { return NULL; } diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshavailability/tsrc/ut_availability/inc/UT_CMusAvaCallEventMonitor.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/mmshavailability/tsrc/ut_availability/inc/UT_CMusAvaCallEventMonitor.h Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,94 @@ +/* +* Copyright (c) 2004 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: +* +*/ + + +#ifndef __UT_CMUSAVACALLEVENTMONITOR_H__ +#define __UT_CMUSAVACALLEVENTMONITOR_H__ + +#ifdef __MWERKS__ +#pragma warn_emptydecl off +#pragma warn_illtokenpasting off +#endif + +// EXTERNAL INCLUDES +#include + +// INTERNAL INCLUDES + +// FORWARD DECLARATIONS +class CMusAvaCallEventMonitor; +class CMusAvaCallMonitorObserverStub; + + +#include +#ifndef NONSHARABLE_CLASS + #define NONSHARABLE_CLASS(x) class x +#endif + +// CLASS DEFINITION +/** + * + * EUnitWizard generated test class. + * + */ +NONSHARABLE_CLASS( UT_CMusAvaCallEventMonitor ) + : public CEUnitTestSuiteClass + { + public: // Constructors and destructors + + /** + * Two phase construction + */ + static UT_CMusAvaCallEventMonitor* NewL(); + static UT_CMusAvaCallEventMonitor* NewLC(); + /** + * Destructor + */ + ~UT_CMusAvaCallEventMonitor(); + + private: // Constructors and destructors + + UT_CMusAvaCallEventMonitor(); + void ConstructL(); + + public: // From observer interface + + + + private: // New methods + + void SetupL(); + + void Teardown(); + + void UT_CMusAvaCallEventMonitor_GetTelNumberLL(); + + + private: // Data + + EUNIT_DECLARE_TEST_TABLE; + + // Owned + CMusAvaCallEventMonitor* iCallEventMonitor; + + // Owned + CMusAvaCallMonitorObserverStub* iObserver; + }; + +#endif // __UT_CMUSAVACALLEVENTMONITOR_H__ + +// End of file diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshavailability/tsrc/ut_availability/inc/UT_CMusAvaCapability.h --- a/mmsharing/mmshavailability/tsrc/ut_availability/inc/UT_CMusAvaCapability.h Thu Aug 19 09:51:39 2010 +0300 +++ b/mmsharing/mmshavailability/tsrc/ut_availability/inc/UT_CMusAvaCapability.h Tue Aug 31 15:12:07 2010 +0300 @@ -43,6 +43,7 @@ class CMusAvaSettingsImp; class CMusAvaAvailabilityObserverImp; class CMusAvaCapabilityQueryObserverImp; +class CSipSseTestTls; #include #ifndef NONSHARABLE_CLASS @@ -101,13 +102,19 @@ void UT_CMusAvaCapability_PopulateResponseL_OpSpecificL(); + void UT_CMusAvaCapability_ResolveFastModeLL(); + + void UT_CMusAvaCapability_AddFastModeLL(); + + private: // Data EUNIT_DECLARE_TEST_TABLE; CMusAvaCapabilityExchange* iExchange; - + CSipSseTestTls* iStorage; + CSIP* iSIP; CSIPConnection* iSIPConnection; CSIPProfile* iProfile; diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshavailability/tsrc/ut_availability/inc/UT_CMusAvaCapabilityQuery.h --- a/mmsharing/mmshavailability/tsrc/ut_availability/inc/UT_CMusAvaCapabilityQuery.h Thu Aug 19 09:51:39 2010 +0300 +++ b/mmsharing/mmshavailability/tsrc/ut_availability/inc/UT_CMusAvaCapabilityQuery.h Tue Aug 31 15:12:07 2010 +0300 @@ -82,8 +82,6 @@ void UT_CMusAvaCapabilityQuery_ExecuteLL(); - void UT_CMusAvaCapabilityQuery_ValidateUriL(); - void UT_CMusAvaCapabilityQuery_CanceledL(); void UT_CMusAvaCapabilityQuery_CompletedLL(); @@ -104,8 +102,6 @@ void UT_CMusAvaCapabilityQuery_DoCompleted200OKLL(); - void UT_CMusAvaCapabilityOtherSDPHeadersLL(); - EUNIT_DECLARE_TEST_TABLE; CMusAvaOptionHandler* iOptionHandler; diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshavailability/tsrc/ut_availability/inc/UT_CMusAvaConnectionAvailability.h --- a/mmsharing/mmshavailability/tsrc/ut_availability/inc/UT_CMusAvaConnectionAvailability.h Thu Aug 19 09:51:39 2010 +0300 +++ b/mmsharing/mmshavailability/tsrc/ut_availability/inc/UT_CMusAvaConnectionAvailability.h Tue Aug 31 15:12:07 2010 +0300 @@ -72,6 +72,7 @@ void UT_CMusAvaConnectionAvailability_NewLL(); void UT_CMusAvaConnectionAvailability_DoExecuteLL(); + void UT_CMusAvaConnectionAvailability_DoExecuteLL2(); void UT_CMusAvaConnectionAvailability_NameL(); diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshavailability/tsrc/ut_availability/inc/UT_CMusAvaContactAvailability.h --- a/mmsharing/mmshavailability/tsrc/ut_availability/inc/UT_CMusAvaContactAvailability.h Thu Aug 19 09:51:39 2010 +0300 +++ b/mmsharing/mmshavailability/tsrc/ut_availability/inc/UT_CMusAvaContactAvailability.h Tue Aug 31 15:12:07 2010 +0300 @@ -26,7 +26,7 @@ // INTERNAL INCLUDES #include -#include +#include // FORWARD DECLARATIONS class CMusAvaAvailabilityObserverImp; @@ -36,6 +36,8 @@ class CContactTextField; class CPbkContactItem; class CPbkContactEngine; + + // CLASS DEFINITION /** * @@ -81,6 +83,8 @@ void UT_CMusAvaController_DoExecuteL1_L(); void UT_CMusAvaController_DoExecuteL2_L(); + + void UT_CMusAvaController_DoExecuteL3_L(); void UT_CMusAvaController_NameL(); @@ -116,23 +120,6 @@ void UT_CMusAvaController_UpdateContactNameLL(); - void UT_CMusAvaController_CallConnectedLL(); - CContactTextField* EditableContactFieldL( CPbkContactEngine& aContactEngine, - CPbkContactItem& aContact, - TPbkFieldId aFieldId ); - - void AddFields(CPbkContactEngine& aContactEngine, - CPbkContactItem& contact, - const TDesC& aText, - TPbkFieldId aFieldId); - - void AddToMyContact( CPbkContactEngine& aContactEngine, - const TDesC& aText, - TPbkFieldId aFieldId, - const TDesC& aText2, - TPbkFieldId aFieldId2 ); - - private: // Data EUNIT_DECLARE_TEST_TABLE; diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshavailability/tsrc/ut_availability/inc/UT_CMusAvaNetworkAvailability.h --- a/mmsharing/mmshavailability/tsrc/ut_availability/inc/UT_CMusAvaNetworkAvailability.h Thu Aug 19 09:51:39 2010 +0300 +++ b/mmsharing/mmshavailability/tsrc/ut_availability/inc/UT_CMusAvaNetworkAvailability.h Tue Aug 31 15:12:07 2010 +0300 @@ -80,6 +80,8 @@ void UT_CMusAvaNetworkAvailability_DoExecuteLL(); + void UT_CMusAvaNetworkAvailability_DoExecuteL_SipUriL(); + void UT_CMusAvaNetworkAvailability_StopL(); void UT_CMusAvaNetworkAvailability_NameL(); @@ -91,6 +93,8 @@ void UT_CMusAvaNetworkAvailability_CallHoldLL(); void UT_CMusAvaNetworkAvailability_NoActiveCallLL(); + + void UT_CMusAvaNetworkAvailability_SetRemoteHostLL(); private: // Data diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshavailability/tsrc/ut_availability/inc/UT_CMusAvaOptionHandler.h --- a/mmsharing/mmshavailability/tsrc/ut_availability/inc/UT_CMusAvaOptionHandler.h Thu Aug 19 09:51:39 2010 +0300 +++ b/mmsharing/mmshavailability/tsrc/ut_availability/inc/UT_CMusAvaOptionHandler.h Tue Aug 31 15:12:07 2010 +0300 @@ -35,6 +35,7 @@ class CMusAvaSettingsImp; class CMusAvaSharedObject; class CMusAvaAvailabilityObserverImp; +class CMusAvaSettingsObserverImp; // CLASS DEFINITION /** @@ -89,6 +90,14 @@ void UT_CMusAvaOptionHandler_SipHeadersL(); void UT_CMusAvaOptionHandler_VideoCodecsResolvedLL(); + + void UT_CMusAvaOptionHandler_DoSetStateL(); + + void UT_CMusAvaOptionHandler_DoSetStateFastModeL(); + + void UT_CMusAvaOptionHandler_FastModeResolvedL(); + + void UT_CMusAvaOptionHandler_CapabilityQueryAnsweredL(); EUNIT_DECLARE_TEST_TABLE; @@ -104,6 +113,8 @@ CSIPProfile* iProfile; + CMusAvaSettingsObserverImp* iSettingsObserver; + }; #endif // __UT_CMUSAVAOPTIONHANDLER_H__ diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshavailability/tsrc/ut_availability/inc/UT_CMusAvaRegisterAvailability.h --- a/mmsharing/mmshavailability/tsrc/ut_availability/inc/UT_CMusAvaRegisterAvailability.h Thu Aug 19 09:51:39 2010 +0300 +++ b/mmsharing/mmshavailability/tsrc/ut_availability/inc/UT_CMusAvaRegisterAvailability.h Tue Aug 31 15:12:07 2010 +0300 @@ -24,7 +24,6 @@ // INTERNAL INCLUDES #include -#include // FORWARD DECLARATIONS class CMusAvaAvailabilityObserverImp; diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshavailability/tsrc/ut_availability/inc/UT_CMusAvaSettingsImp.h --- a/mmsharing/mmshavailability/tsrc/ut_availability/inc/UT_CMusAvaSettingsImp.h Thu Aug 19 09:51:39 2010 +0300 +++ b/mmsharing/mmshavailability/tsrc/ut_availability/inc/UT_CMusAvaSettingsImp.h Tue Aug 31 15:12:07 2010 +0300 @@ -111,11 +111,6 @@ void UT_CMusAvaSettingsImp_CopyDescArrayLL(); - void UT_CMusAvaSettingsImp_SetOptionSentNumber(); - - const UT_CMusAvaSettingsImp_OptionSentTelNumber(); - - void UT_CMusAvaSettingsImp_ReleaseOptionSentNumber(); EUNIT_DECLARE_TEST_TABLE; diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshavailability/tsrc/ut_availability/inc/UT_CMusAvaTerminal.h --- a/mmsharing/mmshavailability/tsrc/ut_availability/inc/UT_CMusAvaTerminal.h Thu Aug 19 09:51:39 2010 +0300 +++ b/mmsharing/mmshavailability/tsrc/ut_availability/inc/UT_CMusAvaTerminal.h Tue Aug 31 15:12:07 2010 +0300 @@ -41,6 +41,7 @@ class CMusAvaObserverImp; class CMusAvaSettingsImp; class CMusAvaAvailabilityObserverImp; +class CSipSseTestTls; #include #ifndef NONSHARABLE_CLASS @@ -117,6 +118,7 @@ private: // NOT owned CMusAvaCapability* iCapability; + CSipSseTestTls* iStorage; }; diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshavailability/tsrc/ut_availability/inc/musavacapabilitytesthelper.h --- a/mmsharing/mmshavailability/tsrc/ut_availability/inc/musavacapabilitytesthelper.h Thu Aug 19 09:51:39 2010 +0300 +++ b/mmsharing/mmshavailability/tsrc/ut_availability/inc/musavacapabilitytesthelper.h Tue Aug 31 15:12:07 2010 +0300 @@ -194,6 +194,18 @@ a=rtpmap:96 H263-2000/90000\r\n\ a=rtpmap:99 MPEG4/90000\r\n"); +_LIT8( KCapabilityTestSDPFastMode,"v=0\r\n\ +o=- 452027953 452027953 IN IP4 foobar.com\r\n\ +s=-\r\n\ +c=IN IP4 foobar.com\r\n\ +t=0 0\r\n\ +a=application:com.gsma.rts\r\n\ +a=type:videolive\r\n\ +a=keywds:fastmode\r\n\ +m=video 0 RTP/AVP 96\r\n\ +a=rtpmap:96 H263-2000/90000\r\n"); + + _LIT8( KCapabilityTestContentTypeOther, "application/text"); _LIT8( KRegisteredContact, "sip:registeredcontact@domain.com" ); @@ -241,7 +253,7 @@ const TDesC8& aAcceptContact, const TDesC8& aContact, const TDesC8& aAccept, - const TDesC8& aUserAgent); + const TDesC8& aUserAgent ); static CSIPServerTransaction* OptionsRequestL( const TDesC8& aRequestUri, const TDesC8& aFrom, @@ -249,8 +261,7 @@ const TDesC8& aContact, const TDesC8& aAccept, const TDesC8& aUserAgent, - const TDesC8& aAssertId, - const TDesC8& aSdp = KNullDesC8); + const TDesC8& aAssertId); static CSIPClientTransaction* OptionsResponseL( TUint aResponse, diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshavailability/tsrc/ut_availability/src/UT_CMusAvaCallEventMonitor.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/mmshavailability/tsrc/ut_availability/src/UT_CMusAvaCallEventMonitor.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,146 @@ +/* +* Copyright (c) 2004 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: +* +*/ + + +// CLASS HEADER +#include "UT_CMusAvaCallEventMonitor.h" + +// EXTERNAL INCLUDES +#include + +// INTERNAL INCLUDES +#include "musavacalleventmonitor.h" +#include "musavacallmonitorobserver.h" +#include "mussesseioninformationapi.h" + + +// CONSTRUCTION +UT_CMusAvaCallEventMonitor* UT_CMusAvaCallEventMonitor::NewL() + { + UT_CMusAvaCallEventMonitor* self = UT_CMusAvaCallEventMonitor::NewLC(); + CleanupStack::Pop( self ); + return self; + } + +UT_CMusAvaCallEventMonitor* UT_CMusAvaCallEventMonitor::NewLC() + { + UT_CMusAvaCallEventMonitor* self = new( ELeave ) UT_CMusAvaCallEventMonitor(); + CleanupStack::PushL( self ); + self->ConstructL(); + return self; + } + +// Destructor (virtual by CBase) +UT_CMusAvaCallEventMonitor::~UT_CMusAvaCallEventMonitor() + { + } + +// Default constructor +UT_CMusAvaCallEventMonitor::UT_CMusAvaCallEventMonitor() + { + } + +// Second phase construct +void UT_CMusAvaCallEventMonitor::ConstructL() + { + // The ConstructL from the base class CEUnitTestSuiteClass must be called. + // It generates the test case table. + CEUnitTestSuiteClass::ConstructL(); + } + + +// METHODS + + +void UT_CMusAvaCallEventMonitor::SetupL() + { + iObserver = CMusAvaCallMonitorObserverStub::NewL(); + iCallEventMonitor = CMusAvaCallEventMonitor::NewL( *iObserver ); + } + +void UT_CMusAvaCallEventMonitor::Teardown() + { + delete iObserver; + iObserver = NULL; + delete iCallEventMonitor; + iCallEventMonitor = NULL; + } + +void UT_CMusAvaCallEventMonitor::UT_CMusAvaCallEventMonitor_GetTelNumberLL() + { + // Test tel number + _LIT( KTelNbr, "12345678" ); + User::LeaveIfError( RProperty::Set( NMusSessionInformationApi::KCategoryUid, + NMusSessionInformationApi::KMusTelNumber, + KTelNbr ) ); + + TBuf telNumber; + TBool isSipUri( ETrue ); + + iCallEventMonitor->GetTelNumberL( telNumber, isSipUri ); + + EUNIT_ASSERT( !isSipUri ); + EUNIT_ASSERT_EQUALS( telNumber, KTelNbr ); + + + // Test SIP URI + _LIT( KSipUri, "sip:12345678@host" ); + User::LeaveIfError( RProperty::Set( NMusSessionInformationApi::KCategoryUid, + NMusSessionInformationApi::KMusTelNumber, + KSipUri) ); + iCallEventMonitor->GetTelNumberL( telNumber, isSipUri ); + EUNIT_ASSERT( isSipUri ); + EUNIT_ASSERT_EQUALS( telNumber, KSipUri ); + + +#if 0 + // This case can't be run since Unit tests use a stub of RProperty::Get + // and the stub doesn't return KErrOverflow, but results USER 11 panic + // if the value does not fit into given buffer. + + + // Test with a SIP URI that is too long to fit into telNumber buffer + _LIT( KLongSipUri, + "sip:567890@domain.9012345678901234567890123456789012345678901234567890\ +1234567890123456789012345678901" ); + + User::LeaveIfError( RProperty::Set( NMusSessionInformationApi::KCategoryUid, + NMusSessionInformationApi::KMusTelNumber, + KLongSipUri) ); + EUNIT_ASSERT_SPECIFIC_LEAVE( + iCallEventMonitor->GetTelNumberL( telNumber, isSipUri ), KErrOverflow ); +#endif + } + + +// TEST TABLE + +EUNIT_BEGIN_TEST_TABLE( + UT_CMusAvaCallEventMonitor, + "CMusAvaCallEventMonitor", + "UNIT" ) + +EUNIT_TEST( + "GetTelNumberL - test ", + "CMusAvaCapability", + "GetTelNumberL", + "FUNCTIONALITY", + SetupL, UT_CMusAvaCallEventMonitor_GetTelNumberLL, Teardown ) + +EUNIT_END_TEST_TABLE + +// END OF FILE diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshavailability/tsrc/ut_availability/src/UT_CMusAvaCapability.cpp --- a/mmsharing/mmshavailability/tsrc/ut_availability/src/UT_CMusAvaCapability.cpp Thu Aug 19 09:51:39 2010 +0300 +++ b/mmsharing/mmshavailability/tsrc/ut_availability/src/UT_CMusAvaCapability.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -22,6 +22,7 @@ // EXTERNAL INCLUDES #include #include +#include // INTERNAL INCLUDES @@ -110,7 +111,9 @@ iCapability = iOptionHandler->iSwisCapability; CSipSseTestTls::OpenL(); - + iStorage = CSipSseTestTls::Storage(); + iStorage->Set( MusSettingsKeys::KFastStartupMode, + MusSettingsKeys::EFastModeOff ); } void UT_CMusAvaCapability::Teardown( ) @@ -118,8 +121,13 @@ delete iOptionHandler; delete iAvailabilityObserver; delete iConcreteSettings; - CSipSseTestTls::Close(); - + if ( iStorage ) + { + iStorage->Clear(); + CSipSseTestTls::Close(); + iStorage = NULL; + } + delete iSIPConnection; delete iProfile; delete iSIP; @@ -173,11 +181,9 @@ KCapabilityTestTerminalID_B ); CleanupStack::PushL( options ); - // Test : AVC enabled => H263 & H264 - TInt32 KMusDisableAVC = 0x0ffffff1; // some value other than disable magic value - MultimediaSharingSettings::SetPropertyValueL(MusSettingsKeys::KEncodingDevice, - KMusDisableAVC ); - CSdpDocument* sdpContent = CMusAvaCapability::ResponseContentLC( *options ); + CSdpDocument* sdpContent = + CMusAvaCapability::ResponseContentLC( *options ); + RPointerArray responseHeaders; CSIPHeaderBase::PushLC( &responseHeaders ); @@ -187,20 +193,7 @@ EUNIT_ASSERT( sdpContent->AttributeFields().Count() == 2 ); EUNIT_ASSERT( sdpContent->MediaFields().Count() == 1 ); EUNIT_ASSERT( sdpContent->MediaFields()[0]->FormatAttributeFields().Count() == 2 ); - CleanupStack::PopAndDestroy( &responseHeaders ); - CleanupStack::PopAndDestroy( sdpContent ); - - // Test : AVC disabled => H263 - KMusDisableAVC = 0x0fffffff; // disable magic value - MultimediaSharingSettings::SetPropertyValueL(MusSettingsKeys::KEncodingDevice, - KMusDisableAVC ); - sdpContent = CMusAvaCapability::ResponseContentLC( *options ); - CSIPHeaderBase::PushLC( &responseHeaders ); - iCapability->PopulateResponseL( *options, responseHeaders, *sdpContent ); - EUNIT_ASSERT( responseHeaders.Count() == 1 ); - EUNIT_ASSERT( sdpContent->AttributeFields().Count() == 2 ); - EUNIT_ASSERT( sdpContent->MediaFields().Count() == 1 ); - EUNIT_ASSERT( sdpContent->MediaFields()[0]->FormatAttributeFields().Count() == 1 ); + CleanupStack::PopAndDestroy( &responseHeaders ); CleanupStack::PopAndDestroy( sdpContent ); CleanupStack::PopAndDestroy( options ); @@ -216,11 +209,19 @@ iExchange = CMusAvaCapabilityExchange::NewL( KTestTerminalId, *iCapabQueryObserver ); iCapability = CMusAvaCapability::NewL( *iExchange ); CSipSseTestTls::OpenL(); + iStorage = CSipSseTestTls::Storage(); + iStorage->Set( MusSettingsKeys::KFastStartupMode, + MusSettingsKeys::EFastModeOff ); } void UT_CMusAvaCapability::Teardown1( ) { - CSipSseTestTls::Close(); + if ( iStorage ) + { + iStorage->Clear(); + CSipSseTestTls::Close(); + iStorage = NULL; + } delete iCapability; delete iExchange; delete iCapabQueryObserver; @@ -344,6 +345,49 @@ } +void UT_CMusAvaCapability::UT_CMusAvaCapability_ResolveFastModeLL() + { + // Fast mode feature is disabled in cenrep, fast mode is present in SDP + CSdpDocument* sdpContent = CSdpDocument::DecodeLC( KCapabilityTestSDPFastMode ); + MusSettingsKeys::TFastMode mode = iCapability->ResolveFastModeL( *sdpContent ); + EUNIT_ASSERT( mode == MusSettingsKeys::EFastModeOff ); + CleanupStack::PopAndDestroy( sdpContent ); + + // Fast mode feature is enabled in cenrep, fast mode is present in SDP + iStorage->Set( MusSettingsKeys::KFastStartupMode, MusSettingsKeys::EFastModeOn ); + sdpContent = CSdpDocument::DecodeLC( KCapabilityTestSDPFastMode ); + mode = iCapability->ResolveFastModeL( *sdpContent ); + EUNIT_ASSERT( mode == MusSettingsKeys::EFastModeOn ); + CleanupStack::PopAndDestroy( sdpContent ); + + // Fast mode feature is enabled in cenrep, fast mode isn't present in SDP + sdpContent = CSdpDocument::DecodeLC( KCapabilityTestSDP ); + mode = iCapability->ResolveFastModeL( *sdpContent ); + EUNIT_ASSERT( mode == MusSettingsKeys::EFastModeOff ); + CleanupStack::PopAndDestroy( sdpContent ); + } + +void UT_CMusAvaCapability::UT_CMusAvaCapability_AddFastModeLL() + { + // Fast mode feature is disabled in cenrep + CSdpDocument* sdpContent = CSdpDocument::DecodeLC( KCapabilityTestSDP ); + EUNIT_ASSERT( sdpContent->AttributeFields().Count() == 2 ); + iCapability->AddFastModeL( *sdpContent ); + EUNIT_ASSERT( sdpContent->AttributeFields().Count() == 2 ); + + // Fast mode feature is enabled in cenrep, a=keywds:fastmode added + iStorage->Set( MusSettingsKeys::KFastStartupMode, MusSettingsKeys::EFastModeOn ); + iCapability->AddFastModeL( *sdpContent ); + EUNIT_ASSERT( sdpContent->AttributeFields().Count() == 3 ); + const CSdpAttributeField* field = sdpContent->AttributeFields()[2]; + RStringF keywds = MusAvaCapabilityContext::SDPStringL( + SdpCodecStringConstants::EAttributeKeywds ); + EUNIT_ASSERT( field->Attribute() == keywds ); + EUNIT_ASSERT( field->Value().Compare( KCapabilitySDPAttributeFastMode ) == 0 ); + CleanupStack::PopAndDestroy( sdpContent ); + } + + // TEST TABLE EUNIT_BEGIN_TEST_TABLE( @@ -392,7 +436,20 @@ "PopulateResponseL", "FUNCTIONALITY", Setup1L, UT_CMusAvaCapability_PopulateResponseL_OpSpecificL, Teardown1 ) + +EUNIT_TEST( + "ResolveFastModeL - test ", + "CMusAvaCapability", + "ResolveFastModeL", + "FUNCTIONALITY", + SetupL, UT_CMusAvaCapability_ResolveFastModeLL, Teardown) +EUNIT_TEST( + "AddFastModeL - test ", + "CMusAvaCapability", + "AddFastModeL", + "FUNCTIONALITY", + SetupL, UT_CMusAvaCapability_AddFastModeLL, Teardown) EUNIT_END_TEST_TABLE diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshavailability/tsrc/ut_availability/src/UT_CMusAvaCapabilityExchange.cpp --- a/mmsharing/mmshavailability/tsrc/ut_availability/src/UT_CMusAvaCapabilityExchange.cpp Thu Aug 19 09:51:39 2010 +0300 +++ b/mmsharing/mmshavailability/tsrc/ut_availability/src/UT_CMusAvaCapabilityExchange.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -41,7 +41,6 @@ #include "CSipSseTestTls.h" #include "musavaoptionhandler.h" #include "musavasettingsimp.h" -#include "CSipSseTestTls.h" #include "musavacapabilityquery.h" #include "mussettings.h" #include "mussettingskeys.h" @@ -120,6 +119,8 @@ CSipSseTestTls::OpenL(); iStorage = CSipSseTestTls::Storage(); + iStorage->Set( MusSettingsKeys::KFastStartupMode, + MusSettingsKeys::EFastModeOff ); } void UT_CMusAvaCapabilityExchange::Teardown( ) diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshavailability/tsrc/ut_availability/src/UT_CMusAvaCapabilityQuery.cpp --- a/mmsharing/mmshavailability/tsrc/ut_availability/src/UT_CMusAvaCapabilityQuery.cpp Thu Aug 19 09:51:39 2010 +0300 +++ b/mmsharing/mmshavailability/tsrc/ut_availability/src/UT_CMusAvaCapabilityQuery.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -33,12 +33,6 @@ #include #include #include -#include -#include -#include - -#include - // INTERNAL INCLUDES #include "musavaoptionhandler.h" #include "musavacapabilitytesthelper.h" @@ -54,12 +48,6 @@ #include "musavasip.h" #include "musavacapabilityqueryobserverimp.h" -_LIT8( KRTPCapabilitySDPAttributeClockrate, "90000" ); -_LIT8( KRTPCapabilitySDPAttributePayloadTypeH264, "98" ); -_LIT8( KRTPCapabilitySDPAttributeCodec, "H264" ); - -_LIT8( KRTPCapabilitySDPAttributePayloadTypeH263, "96" ); -_LIT8( KRTPCapabilitySDPAttributeCodecH263, "H263-2000" ); // CONSTRUCTION UT_CMusAvaCapabilityQuery* UT_CMusAvaCapabilityQuery::NewL() @@ -142,6 +130,8 @@ CSipSseTestTls::OpenL(); iStorage = CSipSseTestTls::Storage(); + iStorage->Set( MusSettingsKeys::KFastStartupMode, + MusSettingsKeys::EFastModeOff ); iOpVariantSetting = MultimediaSharingSettings::OperatorVariantSettingL(); } @@ -392,62 +382,6 @@ CleanupStack::PopAndDestroy( capabQueryObserver ); } - -void UT_CMusAvaCapabilityQuery::UT_CMusAvaCapabilityQuery_ValidateUriL() - { - if( iQuery->iOriginator ) - { - delete iQuery->iOriginator; - } - - //SIP Uri case, identical - CSIPAddress* iOriginatorSipAddress = CSIPAddress::DecodeL( _L8("sip:username111@domain.com") ); - CleanupStack::PushL( iOriginatorSipAddress ); - - iQuery->iOriginator = CUri8::NewL( iOriginatorSipAddress->Uri8().Uri() ); - iQuery->iRemoteUri.Copy( _L8("sip:username111@domain.com") ); - - EUNIT_ASSERT( iQuery->ValidateUri() == EFalse ); - - CleanupStack::PopAndDestroy(iOriginatorSipAddress); - - delete iQuery->iOriginator; - - //SIP Uri case, not identical - iOriginatorSipAddress = CSIPAddress::DecodeL( _L8("sip:username111@domain.com") ); - CleanupStack::PushL( iOriginatorSipAddress ); - - iQuery->iOriginator = CUri8::NewL( iOriginatorSipAddress->Uri8().Uri() ); - iQuery->iRemoteUri.Copy( _L8("sip:username222@domain.com") ); - - EUNIT_ASSERT( iQuery->ValidateUri() == ETrue ); - CleanupStack::PopAndDestroy(iOriginatorSipAddress); - - delete iQuery->iOriginator; - - //TEL Uri, identical - iOriginatorSipAddress = CSIPAddress::DecodeL( _L8("sip:18586037801@domain.com") ); - CleanupStack::PushL( iOriginatorSipAddress ); - - iQuery->iOriginator = CUri8::NewL( iOriginatorSipAddress->Uri8().Uri() ); - iQuery->iRemoteUri.Copy( _L8("tel:8586037801") ); - - EUNIT_ASSERT( iQuery->ValidateUri() == EFalse ); - CleanupStack::PopAndDestroy(iOriginatorSipAddress); - - delete iQuery->iOriginator; - - //TEL Uri, not identical - iOriginatorSipAddress = CSIPAddress::DecodeL( _L8("sip:18586037801@domain.com") ); - CleanupStack::PushL( iOriginatorSipAddress ); - - iQuery->iOriginator = CUri8::NewL( iOriginatorSipAddress->Uri8().Uri() ); - iQuery->iRemoteUri.Copy( _L8("tel:9876543210") ); - - EUNIT_ASSERT( iQuery->ValidateUri() == ETrue ); - CleanupStack::PopAndDestroy(iOriginatorSipAddress); - } - void UT_CMusAvaCapabilityQuery::UT_CMusAvaCapabilityQuery_CanceledL( ) { @@ -1130,76 +1064,6 @@ } -void UT_CMusAvaCapabilityQuery::UT_CMusAvaCapabilityOtherSDPHeadersLL() - { - CSdpDocument* content = CSdpDocument::NewLC(); - //AVC Disabled - MultimediaSharingSettings::SetPropertyValueL(MusSettingsKeys::KEncodingDevice, - KMusDisableAVC ); - iQuery->OtherSDPHeadersL(*content); - - RStringF media = MusAvaCapabilityContext::SDPStringL( - SdpCodecStringConstants::EMediaVideo ); - RStringF rtpmap = MusAvaCapabilityContext::SDPStringL( - SdpCodecStringConstants::EAttributeRtpmap ); - - RPointerArray& mediaFields = content->MediaFields(); - - for ( TInt i=0; i < mediaFields.Count(); i++ ) - { - if ( mediaFields[ i ]->Media() == media ) - { - EUNIT_ASSERT( mediaFields[ i ]->FormatList().Find( KCapabilitySwisFormatListH263Only ) >= KErrNone ); - RPointerArray& fmtLines = - mediaFields[ i ]->FormatAttributeFields(); - EUNIT_ASSERT( fmtLines.Count() == 1 ); - for ( TInt j=0; j < fmtLines.Count(); j++ ) - { - if ( fmtLines[ j ]->Attribute() == rtpmap ) - { - EUNIT_ASSERT(fmtLines[ j ]->Value().Find( KRTPCapabilitySDPAttributeCodecH263 ) == 0 ); - EUNIT_ASSERT(fmtLines[ j ]->Format().Find( KRTPCapabilitySDPAttributePayloadTypeH263 ) == 0 ); - } - } - } - } - CleanupStack::PopAndDestroy(content ); - //AVC Enabled - content = CSdpDocument::NewLC(); - MultimediaSharingSettings::SetPropertyValueL(MusSettingsKeys::KEncodingDevice, - KMusDisableAVC - 1 ); - iQuery->OtherSDPHeadersL(*content); - - mediaFields = content->MediaFields(); - - for ( TInt i=0; i < mediaFields.Count(); i++ ) - { - if ( mediaFields[ i ]->Media() == media ) - { - EUNIT_ASSERT( mediaFields[ i ]->FormatList().Find( KCapabilitySwisFormatList ) >= KErrNone ); - RPointerArray& fmtLines = - mediaFields[ i ]->FormatAttributeFields(); - EUNIT_ASSERT( fmtLines.Count() == 2 ) - for ( TInt j=0; j < fmtLines.Count(); j++ ) - { - if ( fmtLines[ j ]->Attribute() == rtpmap ) - { - if ( j == 0 ) //AVC first i.e. prefered - { - EUNIT_ASSERT(fmtLines[ j ]->Value().Find( KRTPCapabilitySDPAttributeCodec ) == 0 ); - EUNIT_ASSERT(fmtLines[ j ]->Format().Find( KRTPCapabilitySDPAttributePayloadTypeH264 ) == 0 ); - } - else - { - EUNIT_ASSERT(fmtLines[ j ]->Value().Find( KRTPCapabilitySDPAttributeCodecH263 ) == 0 ); - EUNIT_ASSERT(fmtLines[ j ]->Format().Find( KRTPCapabilitySDPAttributePayloadTypeH263 ) == 0 ); - } - } - } - } - } - CleanupStack::PopAndDestroy(content ); - } // TEST TABLE EUNIT_BEGIN_TEST_TABLE( @@ -1220,14 +1084,7 @@ "ExecuteL", "FUNCTIONALITY", SetupL,UT_CMusAvaCapabilityQuery_ExecuteLL, Teardown) - -EUNIT_TEST( - "ValidateUri - test ", - "CMusAvaCapabilityQuery", - "ValidateUri", - "FUNCTIONALITY", - SetupL,UT_CMusAvaCapabilityQuery_ValidateUriL, Teardown) - + EUNIT_TEST( "Canceled - test ", "CMusAvaCapabilityQuery", @@ -1298,14 +1155,6 @@ "FUNCTIONALITY", SetupL,UT_CMusAvaCapabilityQuery_DoCompleted200OKLL, Teardown) -EUNIT_TEST( - "OtherSDPHeadersL - test ", - "CMusAvaCapabilityQuery", - "OtherSDPHeadersL", - "FUNCTIONALITY", - SetupL,UT_CMusAvaCapabilityOtherSDPHeadersLL, Teardown) - - EUNIT_END_TEST_TABLE // END OF FILE diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshavailability/tsrc/ut_availability/src/UT_CMusAvaCapabilitySipAgent.cpp --- a/mmsharing/mmshavailability/tsrc/ut_availability/src/UT_CMusAvaCapabilitySipAgent.cpp Thu Aug 19 09:51:39 2010 +0300 +++ b/mmsharing/mmshavailability/tsrc/ut_availability/src/UT_CMusAvaCapabilitySipAgent.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -125,13 +125,11 @@ { iProfile->iRegisteredContact = KRegisteredContact().AllocL(); } - if ( !iProfile->iRegisteredContact ) - { - iProfile->iRegisteredContact = KRegisteredContact().AllocL(); - } CSipSseTestTls::OpenL(); iStorage = CSipSseTestTls::Storage(); + iStorage->Set( MusSettingsKeys::KFastStartupMode, + MusSettingsKeys::EFastModeOff ); iProfileId = MultimediaSharingSettings::SipProfileSettingL(); } diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshavailability/tsrc/ut_availability/src/UT_CMusAvaConnectionAvailability.cpp --- a/mmsharing/mmshavailability/tsrc/ut_availability/src/UT_CMusAvaConnectionAvailability.cpp Thu Aug 19 09:51:39 2010 +0300 +++ b/mmsharing/mmshavailability/tsrc/ut_availability/src/UT_CMusAvaConnectionAvailability.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -135,28 +135,14 @@ void UT_CMusAvaConnectionAvailability::UT_CMusAvaConnectionAvailability_DoExecuteLL() { - TInt ret = 0; - iStorage->SetPhoneNetworkModeStatus( RMobilePhone::ENetworkModeGsm ); - iStorage->SetRegistrationStatus( RMobilePhone::ERegisteredOnHomeNetwork ); - MultimediaSharingSettings::SetActivationSettingL( MusSettingsKeys::EAlwaysActive ); - MultimediaSharingSettings::SetEdgeDtmSupportSettingL( MusSettingsKeys::EDtmModeNotAllowed ); - TRAPD( error, iConnectionAvailability->DoExecuteL() ); - if ( error == KErrNoMemory ) User::Leave( error ); - EUNIT_ASSERT ( error == KErrNone ); + // Test: VS is allowed in All Netwoks by Default. - TInt count = 0; - EUNIT_GET_ALLOC_DECORATOR_FAILCOUNT( count ); - if ( count > 0 && iConnectionAvailability->State() - == MMusAvaObserver::EMusActivationError ) - { - User::Leave( KErrNoMemory ); - } - EUNIT_ASSERT( iConnectionAvailability->State() == MMusAvaObserver::EMusAvaNetworkType ); + // Test1: VS in 3G Always Allowed. + TInt error = KErrArgument; + TInt count = KErrNone; iStorage->SetPhoneNetworkModeStatus( RMobilePhone::ENetworkModeWcdma ); iStorage->SetRegistrationStatus( RMobilePhone::ERegisteredOnHomeNetwork ); - MultimediaSharingSettings::SetActivationSettingL( MusSettingsKeys::EAlwaysActive ); - MultimediaSharingSettings::SetOperatorVariantSettingL( MusSettingsKeys::EStandard ); - + MultimediaSharingSettings::SetActivationSettingL( MusSettingsKeys::EActiveInHomeNetworks ); TRAP( error, iConnectionAvailability->DoExecuteL() ); if ( error == KErrNoMemory ) User::Leave( error ); EUNIT_ASSERT ( error == KErrNone ); @@ -169,27 +155,131 @@ } EUNIT_ASSERT( iConnectionAvailability->State() == MMusAvaObserver::EMusAvaStatusAvailable ); - // No roaming for operator variant + + //Test2 : VS is even allowed when Network type is Unknown + iStorage->SetPhoneNetworkModeStatus( RMobilePhone::ENetworkModeUnknown ); + iStorage->SetRegistrationStatus( RMobilePhone::ERegisteredOnHomeNetwork ); MultimediaSharingSettings::SetActivationSettingL( MusSettingsKeys::EAlwaysActive ); - MultimediaSharingSettings::SetOperatorVariantSettingL( MusSettingsKeys::EOperatorSpecific ); - iStorage->SetRegistrationStatus( RMobilePhone::ERegisteredRoaming ); + CMusAvaConnectionMonitor& avaConnectionMonitor = iSharedObject->ConnectionMonitor(); + avaConnectionMonitor.iConnectionMonitor.iConnectionId = 1; + avaConnectionMonitor.iConnectionMonitor.iConnectionCounter = 1; + avaConnectionMonitor.iConnectionMonitor.iUintAttributeValue = 1; + avaConnectionMonitor.iConnectionMonitor.iConnectionInfoError = KErrNone; + + //EUNIT_DISABLE_ALLOC_DECORATOR; TRAP( error, iConnectionAvailability->DoExecuteL() ); if ( error == KErrNoMemory ) User::Leave( error ); + + //EUNIT_DISABLE_ALLOC_DECORATOR; + EUNIT_ASSERT ( error == KErrNone ); EUNIT_GET_ALLOC_DECORATOR_FAILCOUNT( count ); + + //HKK Define own error condition in which it can fil. + + + if ( count > 0 && ( iConnectionAvailability->State() + == MMusAvaObserver::EMusActivationError) || + (iConnectionAvailability->State() == MMusAvaObserver::EMusAvaNetworkType )) + { + User::Leave( KErrNoMemory ); + } + EUNIT_ASSERT( iConnectionAvailability->State() == MMusAvaObserver::EMusAvaStatusAvailable ); + + // Test3: VS in GSM Network is Allowed Ensure, PDP Context Need to be up to ensure network does + // support data connection; Note DTM Flag is not needed anymore since VS is allowed in all network. + iStorage->SetPhoneNetworkModeStatus( RMobilePhone::ENetworkModeGsm ); + iStorage->SetRegistrationStatus( RMobilePhone::ERegisteredOnHomeNetwork ); + + MultimediaSharingSettings::SetActivationSettingL( MusSettingsKeys::EAlwaysActive ); + avaConnectionMonitor.iConnectionMonitor.iConnectionId = 1; + avaConnectionMonitor.iConnectionMonitor.iConnectionCounter = 1; + avaConnectionMonitor.iConnectionMonitor.iUintAttributeValue = 1; + avaConnectionMonitor.iConnectionMonitor.iConnectionInfoError = KErrNone; + TRAP( error, iConnectionAvailability->DoExecuteL() ); + if ( error == KErrNoMemory ) User::Leave( error ); + EUNIT_ASSERT ( error == KErrNone ); + EUNIT_GET_ALLOC_DECORATOR_FAILCOUNT( count ); + if ( count > 0 && ( iConnectionAvailability->State() + == MMusAvaObserver::EMusActivationError ) || + (iConnectionAvailability->State() == MMusAvaObserver::EMusAvaNetworkType )) + + { + User::Leave( KErrNoMemory ); + } + EUNIT_ASSERT( iConnectionAvailability->State() == MMusAvaObserver::EMusAvaStatusAvailable ); + + + // Test4: VS in GSM Network is dis-allowed if PDP context is not up. + iStorage->SetPhoneNetworkModeStatus( RMobilePhone::ENetworkModeGsm ); + iStorage->SetRegistrationStatus( RMobilePhone::ERegisteredOnHomeNetwork ); + MultimediaSharingSettings::SetActivationSettingL( MusSettingsKeys::EAlwaysActive ); + avaConnectionMonitor.iConnectionMonitor.iConnectionId = 1; + avaConnectionMonitor.iConnectionMonitor.iConnectionCounter = 0; + avaConnectionMonitor.iConnectionMonitor.iUintAttributeValue = 1; + avaConnectionMonitor.iConnectionMonitor.iConnectionInfoError = KErrNone; + TRAP( error, iConnectionAvailability->DoExecuteL() ); + if ( error == KErrNoMemory ) User::Leave( error ); + EUNIT_ASSERT ( error == KErrNone ); + EUNIT_GET_ALLOC_DECORATOR_FAILCOUNT( count ); + if ( count > 0 && ( iConnectionAvailability->State() + == MMusAvaObserver::EMusActivationError ) || + (iConnectionAvailability->State() == MMusAvaObserver::EMusAvaNetworkType )) + + { + User::Leave( KErrNoMemory ); + } + EUNIT_ASSERT( iConnectionAvailability->State() == MMusAvaObserver::EMusAvaEdgeDtmStatusUnknown ); + } + + +void UT_CMusAvaConnectionAvailability::UT_CMusAvaConnectionAvailability_DoExecuteLL2() + { + // Restrict VS to be only Used in 3G mode, + + iStorage->Set ( MusSettingsKeys::KAllowOnlyIn3GNetwork, + MusSettingsKeys::EAllowed3GOnly ); + + // Test: In GSM VS is not Allowed when its restricted to be only used in 3G + + TInt ret = 0; + iStorage->SetPhoneNetworkModeStatus( RMobilePhone::ENetworkModeGsm ); + iStorage->SetRegistrationStatus( RMobilePhone::ERegisteredOnHomeNetwork ); + MultimediaSharingSettings::SetActivationSettingL( MusSettingsKeys::EAlwaysActive ); + MultimediaSharingSettings::SetEdgeDtmSupportSettingL( MusSettingsKeys::EDtmModeNotAllowed ); + TRAPD( error, iConnectionAvailability->DoExecuteL() ); + if ( error == KErrNoMemory ) User::Leave( error ); + EUNIT_ASSERT ( error == KErrNone ); + + TInt count = 0; + EUNIT_GET_ALLOC_DECORATOR_FAILCOUNT( count ); + if ( count > 0 && + iConnectionAvailability->State() != MMusAvaObserver::EMusAvaNetworkType ) + { + User::Leave( KErrNoMemory ); + } + EUNIT_ASSERT( iConnectionAvailability->State() == MMusAvaObserver::EMusAvaNetworkType ); + + // Test2: In 3G VS is allowed. + + iStorage->SetPhoneNetworkModeStatus( RMobilePhone::ENetworkModeWcdma ); + iStorage->SetRegistrationStatus( RMobilePhone::ERegisteredOnHomeNetwork ); + MultimediaSharingSettings::SetActivationSettingL( MusSettingsKeys::EActiveInHomeNetworks ); + TRAP( error, iConnectionAvailability->DoExecuteL() ); + if ( error == KErrNoMemory ) User::Leave( error ); + EUNIT_ASSERT ( error == KErrNone ); + + EUNIT_GET_ALLOC_DECORATOR_FAILCOUNT( count ); if ( count > 0 && iConnectionAvailability->State() == MMusAvaObserver::EMusActivationError ) { User::Leave( KErrNoMemory ); } - EUNIT_ASSERT( iConnectionAvailability->State() == MMusAvaObserver::EMusActivationError ); + EUNIT_ASSERT( iConnectionAvailability->State() == MMusAvaObserver::EMusAvaStatusAvailable ); - // operator variant OK - MultimediaSharingSettings::SetActivationSettingL( MusSettingsKeys::EAlwaysActive ); - MultimediaSharingSettings::SetOperatorVariantSettingL( MusSettingsKeys::EOperatorSpecific ); - iStorage->SetRegistrationStatus( RMobilePhone::ERegisteredOnHomeNetwork ); - + // Test3: Active in home networks + MultimediaSharingSettings::SetActivationSettingL( MusSettingsKeys::EActiveInHomeNetworks ); TRAP( error, iConnectionAvailability->DoExecuteL() ); if ( error == KErrNoMemory ) User::Leave( error ); EUNIT_ASSERT ( error == KErrNone ); @@ -200,9 +290,8 @@ User::Leave( KErrNoMemory ); } EUNIT_ASSERT( iConnectionAvailability->State() == MMusAvaObserver::EMusAvaStatusAvailable ); - MultimediaSharingSettings::SetOperatorVariantSettingL( MusSettingsKeys::EStandard ); - // activation set off + //Test4: activation set off iStorage->SetPhoneNetworkModeStatus( RMobilePhone::ENetworkModeWcdma ); iStorage->SetRegistrationStatus( RMobilePhone::ERegisteredOnHomeNetwork ); MultimediaSharingSettings::SetActivationSettingL( MusSettingsKeys::ENever ); @@ -211,7 +300,7 @@ EUNIT_ASSERT ( error == KErrNone ); EUNIT_ASSERT( iConnectionAvailability->State() == MMusAvaObserver::EMusActivationError ); - //Edge/Dtm activation settings + // Test5: Edge/Dtm activation settings // case 1 Dtm mode allowed and atleast one pdp context exist iStorage->SetPhoneNetworkModeStatus( RMobilePhone::ENetworkModeGsm ); iStorage->SetRegistrationStatus( RMobilePhone::ERegisteredOnHomeNetwork ); @@ -233,6 +322,7 @@ } EUNIT_ASSERT( iConnectionAvailability->State() == MMusAvaObserver::EMusAvaStatusAvailable ); + // Test5: Edge DTM is allowed but no pdp context // case 2 Dtm mode allowed and no pdp context exist iStorage->SetPhoneNetworkModeStatus( RMobilePhone::ENetworkModeGsm ); iStorage->SetRegistrationStatus( RMobilePhone::ERegisteredOnHomeNetwork ); @@ -253,7 +343,7 @@ } EUNIT_ASSERT( iConnectionAvailability->State() == MMusAvaObserver::EMusAvaEdgeDtmStatusUnknown ); - // case 2 Dtm mode not allowed + // Test6: case 2 Dtm mode not allowed iStorage->SetPhoneNetworkModeStatus( RMobilePhone::ENetworkModeGsm ); iStorage->SetRegistrationStatus( RMobilePhone::ERegisteredOnHomeNetwork ); MultimediaSharingSettings::SetActivationSettingL( MusSettingsKeys::EAlwaysActive ); @@ -268,6 +358,12 @@ User::Leave( KErrNoMemory ); } EUNIT_ASSERT( iConnectionAvailability->State() == MMusAvaObserver::EMusAvaNetworkType ); + + // Reset the Central Reppository to the default value to avoid + // poluting common storage. + + iStorage->Set ( MusSettingsKeys::KAllowOnlyIn3GNetwork, + MusSettingsKeys::EAllowedAllBearers ); } void UT_CMusAvaConnectionAvailability::UT_CMusAvaConnectionAvailability_NameL() @@ -283,26 +379,80 @@ void UT_CMusAvaConnectionAvailability::UT_CMusAvaConnectionAvailability_PhoneNetworkModeStatusL() { + //Test1: VS by default would allow all type of Networks. + // Unknow Network Type : Allowed iConnectionAvailability->PhoneNetworkModeStatus( RMobilePhone::ENetworkModeUnknown ); - EUNIT_ASSERT( iConnectionAvailability->iState == MMusAvaObserver::EMusAvaNetworkType ); + TInt count = 0; + EUNIT_GET_ALLOC_DECORATOR_FAILCOUNT( count ); + if ( count > 0 && ( iConnectionAvailability->State() == MMusAvaObserver::EMusActivationError ) || + (iConnectionAvailability->State() == MMusAvaObserver::EMusAvaNetworkType )) + { + User::Leave( KErrNoMemory ); + } + EUNIT_ASSERT( iConnectionAvailability->iState == MMusAvaObserver::EMusAvaStatusAvailable ); + + //GSM Network is Allowed: + iConnectionAvailability->PhoneNetworkModeStatus( RMobilePhone::ENetworkModeGsm ); + + count = 0; + EUNIT_GET_ALLOC_DECORATOR_FAILCOUNT( count ); + if ( count > 0 && ( iConnectionAvailability->State() == MMusAvaObserver::EMusActivationError ) || + (iConnectionAvailability->State() == MMusAvaObserver::EMusAvaNetworkType )) + { + User::Leave( KErrNoMemory ); + } + + EUNIT_ASSERT( iConnectionAvailability->iState == MMusAvaObserver::EMusAvaStatusAvailable ); + + //WCDMA: 3G is Allowed iConnectionAvailability->PhoneNetworkModeStatus( RMobilePhone::ENetworkModeWcdma ); MMusAvaObserver::TAvailabilityStatus state = MMusAvaObserver::EMusAvaStatusNotExecuted; state = iConnectionAvailability->State(); - TInt count = 0; + count = 0; EUNIT_GET_ALLOC_DECORATOR_FAILCOUNT( count ); - if ( count > 0 && state == MMusAvaObserver::EMusActivationError ) + if ( count > 0 && (state == MMusAvaObserver::EMusActivationError ) || + ( state == MMusAvaObserver::EMusAvaNetworkType )) { User::Leave( KErrNoMemory ); } EUNIT_ASSERT( state == MMusAvaObserver::EMusAvaStatusAvailable ); + + //Test2: Restrict VS to be only used in 3G + iStorage->Set ( MusSettingsKeys::KAllowOnlyIn3GNetwork, + MusSettingsKeys::EAllowed3GOnly ); + + //Unknown Network DisAllowed + iConnectionAvailability->PhoneNetworkModeStatus( RMobilePhone::ENetworkModeUnknown ); + EUNIT_ASSERT( iConnectionAvailability->iState == MMusAvaObserver::EMusAvaNetworkType ); + + //GSM Network is Dis-Allowed: + iConnectionAvailability->PhoneNetworkModeStatus( RMobilePhone::ENetworkModeGsm ); + EUNIT_ASSERT( iConnectionAvailability->iState == MMusAvaObserver::EMusAvaNetworkType ); + + + //3G is Allowed: + iConnectionAvailability->PhoneNetworkModeStatus( RMobilePhone::ENetworkModeWcdma ); + MMusAvaObserver::TAvailabilityStatus state1 = MMusAvaObserver::EMusAvaStatusNotExecuted; + state1 = iConnectionAvailability->State(); + TInt count1 = 0; + EUNIT_GET_ALLOC_DECORATOR_FAILCOUNT( count ); + if ( count1 > 0 && state1 == MMusAvaObserver::EMusActivationError ) + { + User::Leave( KErrNoMemory ); + } + EUNIT_ASSERT( state1 == MMusAvaObserver::EMusAvaStatusAvailable ); + + //Reset the key to the default value. + iStorage->Set ( MusSettingsKeys::KAllowOnlyIn3GNetwork, + MusSettingsKeys::EAllowedAllBearers ); } void UT_CMusAvaConnectionAvailability::UT_CMusAvaConnectionAvailability_NetworkRegistrationStatusL() { - MultimediaSharingSettings::SetOperatorVariantSettingL( MusSettingsKeys::EOperatorSpecific ); - MultimediaSharingSettings::SetActivationSettingL( MusSettingsKeys::EAlwaysActive ); + MultimediaSharingSettings::SetActivationSettingL( MusSettingsKeys::EActiveInHomeNetworks ); iConnectionAvailability->iState = MMusAvaObserver::EMusAvaStatusAvailable; iConnectionAvailability->NetworkRegistrationStatus( RMobilePhone::ERegistrationUnknown ); + MultimediaSharingSettings::SetActivationSettingL( MusSettingsKeys::EAlwaysActive ); TInt count = 0; EUNIT_GET_ALLOC_DECORATOR_FAILCOUNT( count ); if ( count > 0 && iConnectionAvailability->iState @@ -312,8 +462,7 @@ } EUNIT_ASSERT( iConnectionAvailability->iState == MMusAvaObserver::EMusAvaRoamingError ); iConnectionAvailability->iState = MMusAvaObserver::EMusAvaStatusAvailable; - MultimediaSharingSettings::SetOperatorVariantSettingL( MusSettingsKeys::EStandard ); - MultimediaSharingSettings::SetActivationSettingL( MusSettingsKeys::EAlwaysActive ); + MultimediaSharingSettings::SetActivationSettingL( MusSettingsKeys::EActiveInHomeNetworks ); iConnectionAvailability->NetworkRegistrationStatus( RMobilePhone::ERegisteredOnHomeNetwork ); EUNIT_GET_ALLOC_DECORATOR_FAILCOUNT( count ); if ( count > 0 && iConnectionAvailability->iState @@ -586,6 +735,12 @@ == MMusAvaObserver::EMusAvaStatusAvailable ); iStorage->SetPhoneNetworkModeStatus( RMobilePhone::ENetworkModeWcdma ); + iStorage->SetRegistrationStatus( RMobilePhone::ERegistrationUnknown ); + MultimediaSharingSettings::SetActivationSettingL( MusSettingsKeys::EActiveInHomeNetworks ); + EUNIT_ASSERT( iConnectionAvailability->NetworkRegistrationAndSettingsL() + == MMusAvaObserver::EMusActivationError ); + + iStorage->SetPhoneNetworkModeStatus( RMobilePhone::ENetworkModeWcdma ); iStorage->SetRegistrationStatus( RMobilePhone::ERegisteredOnHomeNetwork ); MultimediaSharingSettings::SetActivationSettingL( MusSettingsKeys::ENever ); EUNIT_ASSERT( iConnectionAvailability->NetworkRegistrationAndSettingsL() @@ -593,7 +748,7 @@ iStorage->SetPhoneNetworkModeStatus( RMobilePhone::ENetworkModeWcdma ); iStorage->SetRegistrationStatus( RMobilePhone::ERegisteredOnHomeNetwork ); - MultimediaSharingSettings::SetActivationSettingL( MusSettingsKeys::EAlwaysActive ); + MultimediaSharingSettings::SetActivationSettingL( MusSettingsKeys::EActiveInHomeNetworks ); EUNIT_ASSERT( iConnectionAvailability->NetworkRegistrationAndSettingsL() == MMusAvaObserver::EMusAvaStatusAvailable ); @@ -608,7 +763,7 @@ iConcreteSettings->SetManualActivation( MMusAvaSettings::EActivationAllowed); MultimediaSharingSettings::SetActivationSettingL( MusSettingsKeys::EAlwaysActive ); EUNIT_ASSERT( iConnectionAvailability->NetworkRegistrationAndSettingsL() - == MMusAvaObserver::EMusActivationError ); + == MMusAvaObserver::EMusAvaStatusAvailable ); iStorage->SetPhoneNetworkModeStatus( RMobilePhone::ENetworkModeWcdma ); iStorage->SetRegistrationStatus( RMobilePhone::ERegisteredOnHomeNetwork ); @@ -618,7 +773,6 @@ == MMusAvaObserver::EMusAvaStatusAvailable ); - MultimediaSharingSettings::SetOperatorVariantSettingL( MusSettingsKeys::EStandard ); iStorage->SetPhoneNetworkModeStatus( RMobilePhone::ENetworkModeWcdma ); iStorage->SetRegistrationStatus( RMobilePhone::ERegisteredRoaming ); MultimediaSharingSettings::SetActivationSettingL( MusSettingsKeys::EAlwaysActive ); @@ -637,12 +791,20 @@ iConcreteSettings->SetManualActivation( MMusAvaSettings::EActivationExecuted); MultimediaSharingSettings::SetActivationSettingL( MusSettingsKeys::EAlwaysActive ); EUNIT_ASSERT( iConnectionAvailability->NetworkRegistrationAndSettingsL() - == MMusAvaObserver::EMusActivationError ); + == MMusAvaObserver::EMusAvaStatusAvailable ); iStorage->SetPhoneNetworkModeStatus( RMobilePhone::ENetworkModeWcdma ); iStorage->SetRegistrationStatus( RMobilePhone::ERegisteredRoaming ); + iConcreteSettings->SetManualActivation( MMusAvaSettings::EActivationExecuted); + MultimediaSharingSettings::SetActivationSettingL( MusSettingsKeys::EActiveInHomeNetworks ); + EUNIT_ASSERT( iConnectionAvailability->NetworkRegistrationAndSettingsL() + == MMusAvaObserver::EMusActivationError ); + + MultimediaSharingSettings::SetOperatorVariantSettingL( MusSettingsKeys::EStandard ); + iStorage->SetPhoneNetworkModeStatus( RMobilePhone::ENetworkModeWcdma ); + iStorage->SetRegistrationStatus( RMobilePhone::ERegisteredRoaming ); iConcreteSettings->SetManualActivation( MMusAvaSettings::EActivationNotExecuted); - MultimediaSharingSettings::SetActivationSettingL( MusSettingsKeys::EAlwaysActive ); + MultimediaSharingSettings::SetActivationSettingL( MusSettingsKeys::EActiveInHomeNetworks ); EUNIT_ASSERT( iConnectionAvailability->NetworkRegistrationAndSettingsL() == MMusAvaObserver::EMusAvaManualActivation ); @@ -660,13 +822,21 @@ iConcreteSettings->SetManualActivation( MMusAvaSettings::EActivationNotAllowed); MultimediaSharingSettings::SetActivationSettingL( MusSettingsKeys::EAlwaysActive ); EUNIT_ASSERT( iConnectionAvailability->NetworkRegistrationAndSettingsL() + == MMusAvaObserver::EMusAvaStatusAvailable ); + + MultimediaSharingSettings::SetOperatorVariantSettingL( MusSettingsKeys::EStandard ); + iStorage->SetPhoneNetworkModeStatus( RMobilePhone::ENetworkModeWcdma ); + iStorage->SetRegistrationStatus( RMobilePhone::ERegisteredRoaming ); + iConcreteSettings->SetManualActivation( MMusAvaSettings::EActivationNotAllowed); + MultimediaSharingSettings::SetActivationSettingL( MusSettingsKeys::EActiveInHomeNetworks ); + EUNIT_ASSERT( iConnectionAvailability->NetworkRegistrationAndSettingsL() == MMusAvaObserver::EMusActivationError ); MultimediaSharingSettings::SetOperatorVariantSettingL( MusSettingsKeys::EStandard ); iStorage->SetPhoneNetworkModeStatus( RMobilePhone::ENetworkModeWcdma ); iStorage->SetRegistrationStatus( RMobilePhone::ERegisteredRoaming ); iConcreteSettings->SetManualActivation( MMusAvaSettings::EActivationNotExecuted); - MultimediaSharingSettings::SetActivationSettingL( MusSettingsKeys::EAlwaysActive ); + MultimediaSharingSettings::SetActivationSettingL( MusSettingsKeys::EActiveInHomeNetworks ); EUNIT_ASSERT( iConnectionAvailability->NetworkRegistrationAndSettingsL() == MMusAvaObserver::EMusAvaManualActivation ); @@ -674,7 +844,7 @@ iStorage->SetPhoneNetworkModeStatus( RMobilePhone::ENetworkModeWcdma ); iStorage->SetRegistrationStatus( RMobilePhone::ERegisteredRoaming ); iConcreteSettings->SetManualActivation( MMusAvaSettings::EActivationAllowed); - MultimediaSharingSettings::SetActivationSettingL( MusSettingsKeys::EAlwaysActive ); + MultimediaSharingSettings::SetActivationSettingL( MusSettingsKeys::EActiveInHomeNetworks ); EUNIT_ASSERT( iConnectionAvailability->NetworkRegistrationAndSettingsL() == MMusAvaObserver::EMusAvaStatusAvailable ); } @@ -718,6 +888,14 @@ SetupL, UT_CMusAvaConnectionAvailability_DoExecuteLL, Teardown) EUNIT_TEST( + "DoExecuteL - test 3G Restricted", + "CMusAvaConnectionAvailability", + "DoExecuteL", + "FUNCTIONALITY", + SetupL, UT_CMusAvaConnectionAvailability_DoExecuteLL2, Teardown) + + +EUNIT_TEST( "Name - test ", "CMusAvaConnectionAvailability", "Name", diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshavailability/tsrc/ut_availability/src/UT_CMusAvaContactAvailability.cpp --- a/mmsharing/mmshavailability/tsrc/ut_availability/src/UT_CMusAvaContactAvailability.cpp Thu Aug 19 09:51:39 2010 +0300 +++ b/mmsharing/mmshavailability/tsrc/ut_availability/src/UT_CMusAvaContactAvailability.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -30,13 +30,8 @@ // EXTERNAL INCLUDES #include -#include -#include -#include #include #include -#include -#include #include #include @@ -52,7 +47,6 @@ _LIT(KLastName,"Meikalainen"); _LIT(KFirstLastName,"Matti Meikalainen"); _LIT(KLastFirstName,"Meikalainen Matti"); -_LIT( KTelNumber, "12345" ); // CONSTRUCTION UT_CMusAvaContactAvailability* UT_CMusAvaContactAvailability::NewL() @@ -180,73 +174,11 @@ void UT_CMusAvaContactAvailability::UT_CMusAvaController_DoExecuteL1_L() { - CContactIdArray* contactIdArray = NULL; - CPbkContactItem* contactItem = NULL; - CPbkContactItem* contactItemTmp = NULL; - - EUNIT_DISABLE_ALLOC_DECORATOR; - CPbkContactEngine* contactEngine = CPbkContactEngine::NewL(); - CleanupStack::PushL( contactEngine ); - - // dummy initialization, other ways CPbkContactEngine leaks memory - CPbkContactItem* pbkItem = NULL; - TRAP_IGNORE( pbkItem = contactEngine->ReadContactL( 1 ) ); - delete pbkItem; - - contactItem= contactEngine->CreateEmptyContactL(); - CleanupStack::PushL( contactItem ); - - //contact - TPbkContactItemField* fieldMobile = contactItem->FindField(EPbkFieldIdPhoneNumberMobile); - fieldMobile->TextStorage()->SetTextL( KPlusNumber() ); - - contactEngine->AddNewContactL( *contactItem ); - EUNIT_ENABLE_ALLOC_DECORATOR; - - iConcreteSettings->SetTelNumberL( KPlusNumber() ); - - TRAPD( error, iContactAvailability->DoExecuteL() ); - if ( error == KErrNoMemory ) User::Leave( error ); - TInt count; - EUNIT_GET_ALLOC_DECORATOR_FAILCOUNT( count ); - if ( count > 0 && error != KErrNone ) - { - User::Leave( KErrNoMemory ); - } - CleanupStack::PopAndDestroy( contactItem ); - CleanupStack::PopAndDestroy( contactEngine ); } void UT_CMusAvaContactAvailability::UT_CMusAvaController_DoExecuteL2_L() { - CContactIdArray* contactIdArray = NULL; - CPbkContactItem* contactItem = NULL; - CPbkContactItem* contactItemTmp = NULL; - - EUNIT_DISABLE_ALLOC_DECORATOR; - CPbkContactEngine* contactEngine = CPbkContactEngine::NewL(); - CleanupStack::PushL( contactEngine ); - - // dummy initialization, other ways CPbkContactEngine leaks memory - CPbkContactItem* pbkItem = NULL; - TRAP_IGNORE( pbkItem = contactEngine->ReadContactL( 1 ) ); - delete pbkItem; - - contactItem= contactEngine->CreateEmptyContactL(); - CleanupStack::PushL( contactItem ); - - CContactTextField* urlAtSignField = - EditableContactFieldL( *contactEngine, *contactItem, EPbkFieldIdSIPID ); - if ( urlAtSignField ) - { - urlAtSignField->SetTextL( _L("sip:test@10.21.30.50") ); - } - else - { - EUNIT_ASSERT( !urlAtSignField ); - } - EUNIT_ENABLE_ALLOC_DECORATOR; iConcreteSettings->SetTelNumberL( KPlusNumber ); @@ -269,20 +201,35 @@ { User::Leave( KErrNoMemory ); } + } - CleanupStack::PopAndDestroy( contactItem ); - CleanupStack::PopAndDestroy( contactEngine ); - } -void UT_CMusAvaContactAvailability::UT_CMusAvaController_CallConnectedLL() +void UT_CMusAvaContactAvailability::UT_CMusAvaController_DoExecuteL3_L() { - TRAPD( error, iContactAvailability->CallConnectedL( KTelNumber ) ); - if ( error == KErrNone ) - { - EUNIT_ASSERT_EQUALS( iContactAvailability->State(), - MMusAvaObserver::EMusAvaStatusAvailable ); - EUNIT_ASSERT_EQUALS( iConcreteSettings->TelNumber(), KTelNumber ); - } + iConcreteSettings->SetTelNumberL( KPlusNumber ); + + TRAPD( error, iContactAvailability->DoExecuteL() ); + EUNIT_ASSERT( error == KErrNoMemory || error == KErrNone ); + if ( error == KErrNoMemory ) User::Leave( error ); + TInt count; + EUNIT_GET_ALLOC_DECORATOR_FAILCOUNT( count ); + if ( count > 0 && error != KErrNone ) + { + User::Leave( KErrNoMemory ); + } + + iConcreteSettings->SetTelNumberL( KPlusNumber ); + + TRAP( error, iContactAvailability->DoExecuteL() ); + if ( error == KErrNoMemory ) User::Leave( error ); + EUNIT_GET_ALLOC_DECORATOR_FAILCOUNT( count ); + if ( count > 0 && error != KErrNone ) + { + User::Leave( KErrNoMemory ); + } + } + + void UT_CMusAvaContactAvailability::UT_CMusAvaController_NameL() { EUNIT_ASSERT( iContactAvailability->Name() == MMusAvaObserver::EMusAvaNameContactStatus ); @@ -349,1138 +296,52 @@ void UT_CMusAvaContactAvailability::UT_CMusAvaController_ContactLL() { - CContactIdArray* contactIdArray = NULL; - CPbkContactItem* contactItem = NULL; + } - EUNIT_DISABLE_ALLOC_DECORATOR; - CPbkContactEngine* contactEngine = CPbkContactEngine::NewL(); - EUNIT_ENABLE_ALLOC_DECORATOR; - CleanupStack::PushL( contactEngine ); - - // Non cont or phone number added to contact DB - TBool ret; - TRAPD( error, ret = iContactAvailability->ContactL( contactIdArray, *contactEngine ) ); - if ( error == KErrNoMemory ) User::Leave( error ); - EUNIT_ASSERT( !ret ); - EUNIT_ASSERT( contactIdArray == NULL ); - - EUNIT_DISABLE_ALLOC_DECORATOR; - contactItem= contactEngine->CreateEmptyContactL(); - CleanupStack::PushL( contactItem ); - - //contact - TPbkContactItemField* fieldMobile = contactItem->FindField(EPbkFieldIdPhoneNumberMobile); - fieldMobile->TextStorage()->SetTextL( KPlusNumber() ); - - contactEngine->AddNewContactL( *contactItem ); - EUNIT_ENABLE_ALLOC_DECORATOR; - - iConcreteSettings->SetTelNumberL( KPlusNumber ); - - TRAP( error, ret = iContactAvailability->ContactL( contactIdArray, *contactEngine ) ); - if ( error == KErrNoMemory ) User::Leave( error ); - EUNIT_ASSERT( ret ); - EUNIT_ASSERT( contactIdArray != NULL ); - - delete contactIdArray; - contactIdArray = NULL; - - CleanupStack::PopAndDestroy( contactItem ); - CleanupStack::PopAndDestroy( contactEngine ); - - } void UT_CMusAvaContactAvailability::UT_CMusAvaController_ContactArrayLL() { - CContactIdArray* array = NULL; - - EUNIT_DISABLE_ALLOC_DECORATOR; - CPbkContactEngine* pbkContactEngine = CPbkContactEngine::NewL(); - EUNIT_ENABLE_ALLOC_DECORATOR; - CleanupStack::PushL( pbkContactEngine ); - - //No number found - TInt ret = NULL; - TRAPD( error, ret = iContactAvailability->ContactArrayL( array, - *pbkContactEngine ) ); - if ( error == KErrNoMemory ) User::Leave( error ); - EUNIT_ASSERT( error == KErrNone ); - EUNIT_ASSERT( ret == KErrNotFound ); - EUNIT_ASSERT( array == NULL ); - //Number length 0 - iConcreteSettings->SetTelNumberL( _L("") ); - TRAP( error, ret = iContactAvailability->ContactArrayL( array, - *pbkContactEngine ) ); - if ( error == KErrNoMemory ) User::Leave( error ); - EUNIT_ASSERT( error == KErrNone ); - EUNIT_ASSERT( ret == KErrNotFound ); - EUNIT_ASSERT( array == NULL ); - //Number found - iConcreteSettings->SetTelNumberL( KNumber ); - TRAP( error, ret = iContactAvailability->ContactArrayL( array, - *pbkContactEngine ) ); - if ( error == KErrNoMemory ) User::Leave( error ); - EUNIT_ASSERT( ret == KErrNone ); - EUNIT_ASSERT( array != NULL ); - EUNIT_ASSERT( array->Count() > 0 ); + } - CleanupStack::PopAndDestroy( pbkContactEngine ); - - delete array; - array = NULL; - } void UT_CMusAvaContactAvailability::UT_CMusAvaController_ContactItemL() { - CPbkContactItem* tmpItem = NULL; - CContactIdArray* tmpContactIdArray = NULL; - - EUNIT_DISABLE_ALLOC_DECORATOR; - CPbkContactEngine* contactEngine = CPbkContactEngine::NewL(); - CleanupStack::PushL( contactEngine ); - - CPbkContactItem* contactItem= contactEngine->CreateEmptyContactL(); - CleanupStack::PushL( contactItem ); - - // CContactIdArray == 0 - //tmpContactIdArray = CContactIdArray::NewLC(); - //EUNIT_ASSERT_EQUALS( KErrNotFound, iContactAvailability->ContactItem( - //*tmpContactIdArray, tmpItem ) ); - //CleanupStack::PopAndDestroy( ); - - - // CContactIdArray > 0 - TPbkContactItemField* fieldMobile = contactItem->FindField(EPbkFieldIdPhoneNumberMobile); - fieldMobile->TextStorage()->SetTextL( KPlusNumber() ); - contactEngine->AddNewContactL( *contactItem ); + } - CContactDatabase* contactDatabase = CContactDatabase::OpenL(); - CleanupStack::PushL( contactDatabase ); - CCntFilter* newFilter = CCntFilter::NewL(); - CleanupStack::PushL( newFilter ); - newFilter->Reset(); - newFilter->SetContactFilterTypeALL( ETrue ); - contactDatabase->FilterDatabaseL( *newFilter ); - EUNIT_ENABLE_ALLOC_DECORATOR; - - //CContactIdArray* tmpaArray = newFilter->iIds; - //Item found - - TInt err = iContactAvailability->ContactItem( *( newFilter->iIds ), tmpItem, *contactEngine ); - // NOTE: Multiple contact id's could be in database and KErrNotSupported is - // returned if more than one. Maybe first run could get result KErrNone and - // then KErrNotSupported - EUNIT_ASSERT( ( KErrNotSupported == err ) || ( KErrNone == err ) ); - - //EUNIT_ASSERT( tmpItem != NULL ); - //delete tmpaArray; - //contactDatabase->CommitContactL( *tmpItem ); - delete tmpItem; - //tmpItem = NULL; - //End test - - CleanupStack::PopAndDestroy( newFilter ); - - contactDatabase->CloseTables(); - - CleanupStack::PopAndDestroy( contactDatabase ); - CleanupStack::PopAndDestroy( contactItem ); - CleanupStack::PopAndDestroy( contactEngine ); - - - - } void UT_CMusAvaContactAvailability::UT_CMusAvaController_PhoneResulutionLL() { - CDesCArrayFlat* array = new ( ELeave ) CDesCArrayFlat( 10 ); - CleanupStack::PushL( array ); - EUNIT_DISABLE_ALLOC_DECORATOR; - CPbkContactEngine* contactEngine = CPbkContactEngine::NewL(); - CleanupStack::PushL( contactEngine ); - CPbkContactItem* contactItem = contactEngine->CreateEmptyContactL(); - CleanupStack::PushL( contactItem ); - - // dummy initialization, other ways CPbkContactEngine leaks memory - CPbkContactItem* pbkItem = NULL; - TRAP_IGNORE( pbkItem = contactEngine->ReadContactL( 1 ) ); - delete pbkItem; - - //No prefix - contactItem->RemoveDefaultPhoneNumberField(); - EUNIT_ENABLE_ALLOC_DECORATOR; - iConcreteSettings->SetTelNumberL( KNumber ); - TBool ret; - TRAPD( error, ret = iContactAvailability->PhoneResolutionL( *contactItem, array ) ); - if ( error == KErrNoMemory ) User::Leave( error ); - EUNIT_ASSERT ( !ret ); - - EUNIT_ASSERT( array->MdcaCount() == 0); - - //Prefix - iConcreteSettings->SetTelNumberL( KPlusNumber ); - - TRAP( error, ret = iContactAvailability->PhoneResolutionL( *contactItem, array ) ); - if ( error == KErrNoMemory ) User::Leave( error ); - EUNIT_ASSERT ( ret ); - EUNIT_ASSERT( array->MdcaCount() > 0 ); - //remove object from the array - array->Reset(); - - ///Number plan is in national mode - EUNIT_DISABLE_ALLOC_DECORATOR; - TPbkContactItemField* fieldMobile = contactItem->FindField(EPbkFieldIdPhoneNumberMobile); - fieldMobile->TextStorage()->SetTextL( KNumber() ); - contactEngine->AddNewContactL( *contactItem ); - EUNIT_ENABLE_ALLOC_DECORATOR; - - iConcreteSettings->ReleseTelNumberL(); - TRAP( error, ret = iContactAvailability->PhoneResolutionL( *contactItem, array ) ); - if ( error == KErrNoMemory ) User::Leave( error ); - EUNIT_ASSERT ( !ret ); - EUNIT_ASSERT( array->MdcaCount() == 0 ); - - - //Number plan is in internatiolan mode - EUNIT_DISABLE_ALLOC_DECORATOR; - contactItem->RemoveDefaultPhoneNumberField(); - fieldMobile = contactItem->FindField( EPbkFieldIdPhoneNumberMobile ); - fieldMobile->TextStorage()->SetTextL( KPlusNumber() ); - contactEngine->AddNewContactL( *contactItem ); - EUNIT_ENABLE_ALLOC_DECORATOR; - iConcreteSettings->ReleseTelNumberL(); - TRAP( error, ret = iContactAvailability->PhoneResolutionL( *contactItem, array ) ); - if ( error == KErrNoMemory ) User::Leave( error ); - EUNIT_ASSERT ( ret ); - EUNIT_ASSERT( array->MdcaCount() > 0 ); - - CleanupStack::PopAndDestroy( contactItem ); - CleanupStack::PopAndDestroy( contactEngine ); - CleanupStack::PopAndDestroy( array ); } - - - - void UT_CMusAvaContactAvailability::UT_CMusAvaController_ContactIdL() { - EUNIT_DISABLE_ALLOC_DECORATOR; - CPbkContactEngine* contactEngine = CPbkContactEngine::NewL(); - CleanupStack::PushL( contactEngine ); - - CPbkContactItem* contactItem = NULL; - - // dummy initialization, other ways CPbkContactEngine leaks memory - TRAP_IGNORE( contactItem = contactEngine->ReadContactL( 1 ) ); - delete contactItem; - - contactItem = contactEngine->CreateEmptyContactL(); - CleanupStack::PushL( contactItem ); - EUNIT_ENABLE_ALLOC_DECORATOR; - - //Contact field not created - EUNIT_ASSERT( !iContactAvailability->ContactId( *contactItem, EPbkFieldIdSIPID ) ); - - //Contact URi not defined - CContactTextField* urlFieldNotDefined = - EditableContactFieldL( *contactEngine, *contactItem, EPbkFieldIdShareView ); - if ( urlFieldNotDefined ) - { - urlFieldNotDefined->SetTextL( _L("sip:10.21.32.51") ); - } - else - { - EUNIT_ASSERT( !urlFieldNotDefined ); - } - - EUNIT_ASSERT( !iContactAvailability->ContactId( *contactItem, EPbkFieldIdShareView ) ); - - //Contact field not found - CContactTextField* urlField = - EditableContactFieldL( *contactEngine, *contactItem, EPbkFieldIdShareView ); - if ( urlField ) - { - urlField->SetTextL( _L("test@10.21.32.51") ); - } - else - { - EUNIT_ASSERT( !urlField ); - } - - EUNIT_ASSERT( !iContactAvailability->ContactId( *contactItem, EPbkFieldIdSIPID ) ); - - //Contact field found - EUNIT_ASSERT( iContactAvailability->ContactId( *contactItem, EPbkFieldIdShareView ) ); - - CleanupStack::PopAndDestroy( contactItem ); - CleanupStack::PopAndDestroy( contactEngine ); } void UT_CMusAvaContactAvailability::UT_CMusAvaController_ContactIdSearchL() { - CPbkContactItem* contactItem = NULL; - CContactIdArray* contactIdArray = NULL; - CContactTextField* phoneNumberMobiled = NULL; - CContactTextField* country = NULL; - CContactTextField* urlFieldNotDefined = NULL; - CPbkContactEngine* contactEngine = NULL; - - - //No contact ////////////////////////////////////////////////////////////// - //General info - EUNIT_DISABLE_ALLOC_DECORATOR; - contactEngine = CPbkContactEngine::NewL(); - CleanupStack::PushL( contactEngine ); - - //Clear contacts - contactIdArray = contactEngine->MatchPhoneNumberL( - KNumber(), - KNumberMatchingDigitsRequired ); - CleanupStack::PushL( contactIdArray ); - contactEngine->DeleteContactsL( *contactIdArray ); - - CleanupStack::PopAndDestroy( contactIdArray ); - - - // dummy initialization, other ways CPbkContactEngine leaks memory - TRAP_IGNORE( contactItem = contactEngine->ReadContactL( 1 ) ); - delete contactItem; - - AddToMyContact( *contactEngine, - KNumber(), - EPbkFieldIdPhoneNumberMobile, - _L("nokia"), - EPbkFieldIdCompanyName ); - - contactIdArray = contactEngine->MatchPhoneNumberL( - KNumber(), - KNumberMatchingDigitsRequired ); - CleanupStack::PushL( contactIdArray ); - EUNIT_ENABLE_ALLOC_DECORATOR; - - EUNIT_ASSERT( - iContactAvailability->ContactIdSearch( *contactIdArray, *contactEngine ) == - EPbkFieldIdNone ); - - contactEngine->DeleteContactsL( *contactIdArray ); - CleanupStack::PopAndDestroy( contactIdArray ); - - // Field Phone number general found ///////////////////////////////////////////////////////// - - //Clear contacts - EUNIT_DISABLE_ALLOC_DECORATOR; - contactIdArray = contactEngine->MatchPhoneNumberL( - KNumber(), - KNumberMatchingDigitsRequired ); - CleanupStack::PushL( contactIdArray ); - contactEngine->DeleteContactsL( *contactIdArray ); - - CleanupStack::PopAndDestroy( contactIdArray ); - - AddToMyContact( *contactEngine, - KNumber(), - EPbkFieldIdPhoneNumberMobile, - _L("+35805123456789"), - EPbkFieldIdPhoneNumberGeneral ); - - contactIdArray = contactEngine->MatchPhoneNumberL( - KNumber(), - KNumberMatchingDigitsRequired ); - - CleanupStack::PushL( contactIdArray ); - EUNIT_ENABLE_ALLOC_DECORATOR; - - EUNIT_ASSERT( - iContactAvailability->ContactIdSearch( *contactIdArray, *contactEngine ) == - EPbkFieldIdNone ); - //EUNIT_ASSERT( ret == EPbkFieldIdPhoneNumberGeneral ); - contactEngine->DeleteContactsL( *contactIdArray ); - CleanupStack::PopAndDestroy( contactIdArray ); - - // Field SIP id found ///////////////////////////////////////////////////////// - - //Clear contacts - EUNIT_DISABLE_ALLOC_DECORATOR; - contactIdArray = contactEngine->MatchPhoneNumberL( - KNumber(), - KNumberMatchingDigitsRequired ); - CleanupStack::PushL( contactIdArray ); - contactEngine->DeleteContactsL( *contactIdArray ); - - CleanupStack::PopAndDestroy( contactIdArray ); - - AddToMyContact( *contactEngine, - KNumber(), - EPbkFieldIdPhoneNumberMobile, - _L("test@10.21.32.51"), - EPbkFieldIdSIPID ); - - contactIdArray = contactEngine->MatchPhoneNumberL( - KNumber(), - KNumberMatchingDigitsRequired ); - - CleanupStack::PushL( contactIdArray ); - EUNIT_ENABLE_ALLOC_DECORATOR; - - TPbkFieldId ret = iContactAvailability->ContactIdSearch( *contactIdArray, *contactEngine ); - if ( ret == EPbkFieldIdNone ) - { - User::Leave( KErrNoMemory ); - } - EUNIT_ASSERT( ret == EPbkFieldIdSIPID ); - contactEngine->DeleteContactsL( *contactIdArray ); - CleanupStack::PopAndDestroy( contactIdArray ); - - // Share View found - //Clear contacts - EUNIT_DISABLE_ALLOC_DECORATOR; - contactIdArray = contactEngine->MatchPhoneNumberL( - KNumber(), - KNumberMatchingDigitsRequired ); - CleanupStack::PushL( contactIdArray ); - contactEngine->DeleteContactsL( *contactIdArray ); - - CleanupStack::PopAndDestroy( contactIdArray ); - - AddToMyContact( *contactEngine, - KNumber(), - EPbkFieldIdPhoneNumberMobile, - _L("test@10.21.32.51"), - EPbkFieldIdShareView ); - - contactIdArray = contactEngine->MatchPhoneNumberL( - KNumber(), - KNumberMatchingDigitsRequired ); - - CleanupStack::PushL( contactIdArray ); - EUNIT_ENABLE_ALLOC_DECORATOR; - - ret = iContactAvailability->ContactIdSearch( *contactIdArray, *contactEngine ); - if ( ret == EPbkFieldIdNone ) - { - User::Leave( KErrNoMemory ); - } - EUNIT_ASSERT( ret == EPbkFieldIdShareView ); - - contactEngine->DeleteContactsL( *contactIdArray ); - CleanupStack::PopAndDestroy( contactIdArray ); - CleanupStack::PopAndDestroy( contactEngine ); } void UT_CMusAvaContactAvailability::UT_CMusAvaController_ResolveAddressesLL() { - CDesCArrayFlat* array = new ( ELeave ) CDesCArrayFlat( 10 ); - CleanupStack::PushL( array ); - EUNIT_DISABLE_ALLOC_DECORATOR; - CPbkContactEngine* contactEngine = CPbkContactEngine::NewL(); - CleanupStack::PushL( contactEngine ); - - // dummy initialization, other ways CPbkContactEngine leaks memory - CPbkContactItem* pbkItem = NULL; - TRAP_IGNORE( pbkItem = contactEngine->ReadContactL( 1 ) ); - delete pbkItem; - - CPbkContactItem* contactItem= contactEngine->CreateEmptyContactL(); - CleanupStack::PushL( contactItem ); - EUNIT_ENABLE_ALLOC_DECORATOR; - - //Test cases - //Sip Uri without At sign - CContactTextField* urlSipField = - EditableContactFieldL( *contactEngine, *contactItem, EPbkFieldIdSIPID ); - - - if ( urlSipField ) - { - urlSipField->SetTextL( _L("sip:10.21.32.51") ); - } - else - { - EUNIT_ASSERT( !urlSipField ); - } - - TBool ret; - TRAPD( error, ret = iContactAvailability->ResolveAddressesL( *contactItem, - array, - EPbkFieldIdSIPID ) ); - if ( error == KErrNoMemory ) User::Leave( error ); - EUNIT_ASSERT ( !ret ); - EUNIT_ASSERT( array->Count() == 0 ); - - - //Undefined Uri - CContactTextField* urlUndefinedField = - EditableContactFieldL( *contactEngine, *contactItem, EPbkFieldIdPushToTalk ); - if ( urlUndefinedField ) - { - urlUndefinedField->SetTextL( _L("test@10.21.32.51") ); - } - else - { - EUNIT_ASSERT( !urlUndefinedField ); - } - contactEngine->AddNewContactL( *contactItem ); - TRAP( error, ret = iContactAvailability->ResolveAddressesL( *contactItem, - array, - EPbkFieldIdSIPID ) ); - if ( error == KErrNoMemory ) User::Leave( error ); - EUNIT_ASSERT ( !ret ); - - EUNIT_ASSERT( array->Count() == 0 ); - - //Sip Uri - CContactTextField* urlAtSignField = - EditableContactFieldL( *contactEngine, *contactItem, EPbkFieldIdSIPID ); - if ( urlAtSignField ) - { - urlAtSignField->SetTextL( _L("sip:test@10.21.32.51") ); - } - else - { - EUNIT_ASSERT( !urlAtSignField ); - } - contactEngine->AddNewContactL( *contactItem ); - TRAP( error, ret = iContactAvailability->ResolveAddressesL( *contactItem, - array, - EPbkFieldIdSIPID ) ); - if ( error == KErrNoMemory ) User::Leave( error ); - EUNIT_ASSERT ( ret ); - EUNIT_ASSERT( array->Count() > 0 ); - - //Clear array - array->Reset(); - - //ShareView Uri - CContactTextField* urlShareViewField = - EditableContactFieldL( *contactEngine, *contactItem, EPbkFieldIdShareView ); - if ( urlShareViewField ) - { - urlShareViewField->SetTextL( _L("test@10.21.32.51") ); - } - else - { - EUNIT_ASSERT( !urlShareViewField ); - } - - TRAP( error, ret = iContactAvailability->ResolveAddressesL( *contactItem, - array, - EPbkFieldIdShareView ) ); - if ( error == KErrNoMemory ) User::Leave( error ); - EUNIT_ASSERT ( ret ); - EUNIT_ASSERT( array != NULL ); - EUNIT_ASSERT( array->Count() > 0 ); - array->Reset(); - - - //End test - CleanupStack::PopAndDestroy( contactItem ); - CleanupStack::PopAndDestroy( contactEngine ); - CleanupStack::PopAndDestroy( array ); - } void UT_CMusAvaContactAvailability::UT_CMusAvaController_ResolveAddressesLOpSpecificL() { - CDesCArrayFlat* array = new ( ELeave ) CDesCArrayFlat( 10 ); - CleanupStack::PushL( array ); - EUNIT_DISABLE_ALLOC_DECORATOR; - CPbkContactEngine* contactEngine = CPbkContactEngine::NewL(); - CleanupStack::PushL( contactEngine ); - - // dummy initialization, other ways CPbkContactEngine leaks memory - CPbkContactItem* pbkItem = NULL; - TRAP_IGNORE( pbkItem = contactEngine->ReadContactL( 1 ) ); - delete pbkItem; - - CPbkContactItem* contactItem= contactEngine->CreateEmptyContactL(); - CleanupStack::PushL( contactItem ); - EUNIT_ENABLE_ALLOC_DECORATOR; - - //Test cases - //Sip Uri without test string - CContactTextField* urlAtSignField = - EditableContactFieldL( *contactEngine, *contactItem, EPbkFieldIdSIPID ); - if ( urlAtSignField ) - { - urlAtSignField->SetTextL( _L("sip:test@10.21.32.51") ); - } - else - { - EUNIT_ASSERT( !urlAtSignField ); - } - contactEngine->AddNewContactL( *contactItem ); - TBool ret; - TRAPD( error, ret = iContactAvailability->ResolveAddressesL( *contactItem, - array, - EPbkFieldIdSIPID ) ); - if ( error == KErrNoMemory ) User::Leave( error ); - EUNIT_ASSERT ( !ret ); - EUNIT_ASSERT_EQUALS( array->Count(), 0 ); - - //Clear array - array->Reset(); - - //Sip Uri with test string (*#) - urlAtSignField = - EditableContactFieldL( *contactEngine, *contactItem, EPbkFieldIdSIPID ); - if ( urlAtSignField ) - { - urlAtSignField->SetTextL( _L("sip:test*#@10.21.32.51") ); - } - else - { - EUNIT_ASSERT( !urlAtSignField ); - } - contactEngine->AddNewContactL( *contactItem ); - TRAP( error, ret = iContactAvailability->ResolveAddressesL( *contactItem, - array, - EPbkFieldIdSIPID ) ); - if ( error == KErrNoMemory ) User::Leave( error ); - EUNIT_ASSERT ( ret ); - EUNIT_ASSERT( array->Count() > 0 ); - - //Clear array - array->Reset(); - - //End test - CleanupStack::PopAndDestroy( contactItem ); - CleanupStack::PopAndDestroy( contactEngine ); - CleanupStack::PopAndDestroy( array ); - } void UT_CMusAvaContactAvailability::UT_CMusAvaController_ResolvePhoneContactLL() { - CDesCArrayFlat* array = new ( ELeave ) CDesCArrayFlat( 10 ); - CleanupStack::PushL( array ); - EUNIT_DISABLE_ALLOC_DECORATOR; - CPbkContactEngine* contactEngine = CPbkContactEngine::NewL(); - CleanupStack::PushL( contactEngine ); - - CPbkContactItem* contactItem= contactEngine->CreateEmptyContactL(); - CleanupStack::PushL( contactItem ); - ///Number plan is in national mode - TPbkContactItemField* fieldMobile = contactItem->FindField(EPbkFieldIdPhoneNumberMobile); - fieldMobile->TextStorage()->SetTextL(_L("0401234567")); - EUNIT_ENABLE_ALLOC_DECORATOR; - - iContactAvailability->ResolvePhoneContactL( *contactItem, array ); - EUNIT_ASSERT( array->MdcaCount() == 0 ); - //Number plan is in internatiolan mode - EUNIT_DISABLE_ALLOC_DECORATOR; - contactItem->RemoveDefaultPhoneNumberField(); - fieldMobile = contactItem->FindField(EPbkFieldIdPhoneNumberMobile); - fieldMobile->TextStorage()->SetTextL(_L("+358401234567")); - EUNIT_ENABLE_ALLOC_DECORATOR; - iContactAvailability->ResolvePhoneContactL( *contactItem, array ); - EUNIT_ASSERT( array->MdcaCount() > 0 ); - array->Reset(); - - //tel uri - EUNIT_DISABLE_ALLOC_DECORATOR; - contactItem->RemoveDefaultPhoneNumberField(); - fieldMobile = contactItem->FindField(EPbkFieldIdPhoneNumberMobile); - fieldMobile->TextStorage()->SetTextL(_L("tel:+358401234567")); - EUNIT_ENABLE_ALLOC_DECORATOR; - iContactAvailability->ResolvePhoneContactL( *contactItem, array ); - EUNIT_ASSERT( array->Count() == 0 ); - - //End test - CleanupStack::PopAndDestroy( contactItem ); - CleanupStack::PopAndDestroy( contactEngine ); - CleanupStack::PopAndDestroy( array ); } void UT_CMusAvaContactAvailability::UT_CMusAvaController_ResolvePhoneContactLOpSpecificL() { - CDesCArrayFlat* array = new ( ELeave ) CDesCArrayFlat( 10 ); - CleanupStack::PushL( array ); - EUNIT_DISABLE_ALLOC_DECORATOR; - CPbkContactEngine* contactEngine = CPbkContactEngine::NewL(); - CleanupStack::PushL( contactEngine ); - - CPbkContactItem* contactItem= contactEngine->CreateEmptyContactL(); - CleanupStack::PushL( contactItem ); - ///Number plan is in national mode - TPbkContactItemField* fieldMobile = contactItem->FindField(EPbkFieldIdPhoneNumberMobile); - fieldMobile->TextStorage()->SetTextL(_L("0401234567")); - EUNIT_ENABLE_ALLOC_DECORATOR; - - iContactAvailability->ResolvePhoneContactL( *contactItem, array ); - EUNIT_ASSERT( array->MdcaCount() > 0 ); - //Number plan is in internatiolan mode - EUNIT_DISABLE_ALLOC_DECORATOR; - contactItem->RemoveDefaultPhoneNumberField(); - fieldMobile = contactItem->FindField(EPbkFieldIdPhoneNumberMobile); - fieldMobile->TextStorage()->SetTextL(_L("+358401234567")); - EUNIT_ENABLE_ALLOC_DECORATOR; - iContactAvailability->ResolvePhoneContactL( *contactItem, array ); - EUNIT_ASSERT( array->MdcaCount() > 0 ); - array->Reset(); - - //tel uri - EUNIT_DISABLE_ALLOC_DECORATOR; - contactItem->RemoveDefaultPhoneNumberField(); - fieldMobile = contactItem->FindField(EPbkFieldIdPhoneNumberMobile); - fieldMobile->TextStorage()->SetTextL(_L("tel:+358401234567")); - EUNIT_ENABLE_ALLOC_DECORATOR; - iContactAvailability->ResolvePhoneContactL( *contactItem, array ); - EUNIT_ASSERT( array->Count() > 0 ); - - //End test - CleanupStack::PopAndDestroy( contactItem ); - CleanupStack::PopAndDestroy( contactEngine ); - CleanupStack::PopAndDestroy( array ); - } - -CContactTextField* UT_CMusAvaContactAvailability::EditableContactFieldL( - CPbkContactEngine& aContactEngine, - CPbkContactItem& aContact, - TPbkFieldId aFieldId ) - { - /* CContactDatabase* contactDatabase = NULL; - contactDatabase = CContactDatabase::OpenL(); - CleanupStack::PushL( contactDatabase ); - CCntFilter* newFilter = CCntFilter::NewLC(); - newFilter->Reset(); - newFilter->SetContactFilterTypeALL( ETrue ); - contactDatabase->FilterDatabaseL( *newFilter ); - - CContactIdArray* contactsId = newFilter->iIds; - if ( contactsId->Count() ) - { - aContactEngine.DeleteContactsL( *contactsId ); - } - //contactDatabase->CommitContactL(): - - CleanupStack::PopAndDestroy( 2 ); - CleanupStack::PopAndDestroy( contactDatabase );*/ - - EUNIT_DISABLE_ALLOC_DECORATOR; - const CPbkFieldsInfo& fieldsInfo = aContactEngine.FieldsInfo(); - // Try to get the SIP URI storage field for this contact - TPbkContactItemField* itemField = aContact.FindField( aFieldId ); - - if ( !itemField ) - { - CPbkFieldInfo* fieldInfo = fieldsInfo.Find( aFieldId ); - // Add field to this contact - if ( fieldInfo ) - { - CleanupStack::PushL( fieldInfo ); - // Contact takes ownership of the field. - aContact.AddFieldL( *fieldInfo ); - CleanupStack::Pop( fieldInfo ); - itemField = aContact.FindField( aFieldId ); - if ( itemField ) - { - return itemField->TextStorage(); - } - else - { - EUNIT_ASSERT( !itemField ); - } - } - else - { - EUNIT_ASSERT( !fieldInfo ); - } - } - else - { - return itemField->TextStorage(); - } - EUNIT_ENABLE_ALLOC_DECORATOR; - return NULL; // Should never reach here, just to avoid warnings. } -void UT_CMusAvaContactAvailability::AddFields( CPbkContactEngine& aContactEngine, - CPbkContactItem& contact, - const TDesC& aText, - TPbkFieldId aFieldId ) - { - const CPbkFieldsInfo& fieldsInfo = aContactEngine.FieldsInfo(); - // Try to get the storage field for this contact - TPbkContactItemField* itemField = contact.FindField( aFieldId ); - - if ( itemField == NULL ) - { - CPbkFieldInfo* fieldInfo = fieldsInfo.Find( aFieldId ); - // Add field to this contact - if ( fieldInfo ) - { - CleanupStack::PushL( fieldInfo ); - // Contact takes ownership of the field. - contact.AddFieldL( *fieldInfo ); - CleanupStack::Pop( fieldInfo ); - itemField = contact.FindField( aFieldId ); - if ( itemField ) - { - itemField->TextStorage()->SetTextL( aText ); - } - else - { - EUNIT_ASSERT( !itemField ); - } - } - else - { - EUNIT_ASSERT( !fieldInfo ); - } - } - else - { - // Set some default fields - itemField->TextStorage()->SetTextL(aText ); - } - } - -void UT_CMusAvaContactAvailability::AddToMyContact( CPbkContactEngine& aContactEngine, - const TDesC& aText, - TPbkFieldId aFieldId, - const TDesC& aText2, - TPbkFieldId aFieldId2 ) - { - // Create a contact with few default fields - // All the default fields are empty and won't be displayed - // until some information is stored in them - /*CPbkContactItem* contact = aContactEngine.CreateEmptyContactL(); - CleanupStack::PushL( contact ); - - // Set some default fields - contact->FindField( aFieldId )->TextStorage()->SetTextL(aText ); - // Set some default fields - contact->FindField( aFieldId2 )->TextStorage()->SetTextL(aText2 ); - - // Store the contact to the phonebook - aContactEngine.AddNewContactL( *contact ); - CleanupStack::PopAndDestroy( contact );*/ - - /*CPbkContactItem* contact = aContactEngine.CreateEmptyContactL(); - CleanupStack::PushL( contact ); - - const CPbkFieldsInfo& fieldsInfo = aContactEngine.FieldsInfo(); - // Try to get the storage field for this contact - TPbkContactItemField* itemField = contact->FindField( aFieldId ); - - if ( itemField == NULL ) - { - CPbkFieldInfo* fieldInfo = fieldsInfo.Find( aFieldId ); - // Add field to this contact - if ( fieldInfo ) - { - CleanupStack::PushL( fieldInfo ); - // Contact takes ownership of the field. - contact->AddFieldL( *fieldInfo ); - CleanupStack::Pop( fieldInfo ); - itemField = contact->FindField( aFieldId ); - if ( itemField ) - { - itemField->TextStorage()->SetTextL( aText ); - } - else - { - EUNIT_ASSERT( !itemField ); - } - } - else - { - EUNIT_ASSERT( !fieldInfo ); - } - } - else - { - // Set some default fields - itemField->TextStorage()->SetTextL(aText ); - } - // Store the contact to the phonebook - aContactEngine.AddNewContactL( *contact ); - CleanupStack::PopAndDestroy( contact );*/ - - CPbkContactItem* contact = aContactEngine.CreateEmptyContactL(); - CleanupStack::PushL( contact ); - - AddFields( aContactEngine, *contact, aText, aFieldId ); - AddFields( aContactEngine, *contact, aText2, aFieldId2 ); - // Store the contact to the phonebook - aContactEngine.AddNewContactL( *contact ); - CleanupStack::PopAndDestroy( contact ); - - } - void UT_CMusAvaContactAvailability::UT_CMusAvaController_IsExistAlreadyL() { - _LIT( KTestUri1, "sip:1@test.net"); - _LIT( KTestUri2, "sip:2@test.net"); - _LIT( KTestUri3, "sip:3@test.net"); - _LIT( KTestUri5, "sip:5@test.net"); - - TBufC16<16> str1(KTestUri1); - HBufC16* ptr1; - ptr1 = str1.AllocLC(); - - TBufC16<16> str2(KTestUri2); - HBufC16* ptr2; - ptr2 = str2.AllocLC(); - - TBufC16<16> str3(KTestUri3); - HBufC16* ptr3; - ptr3 = str3.AllocLC(); - - CDesCArrayFlat* array = new( ELeave ) CDesCArrayFlat(1); - CleanupStack::PushL(array); - array->AppendL(*ptr1); - array->AppendL(*ptr2); - array->AppendL(*ptr3); - - TBool exist = EFalse; - - // Test 1 : - exist = iContactAvailability->IsExistAlready(*array,KTestUri1); - EUNIT_ASSERT(exist); - // Test 2 : - exist = iContactAvailability->IsExistAlready(*array,KTestUri5); - EUNIT_ASSERT(!exist); - - array->Reset(); - CleanupStack::PopAndDestroy(array); - CleanupStack::PopAndDestroy(ptr3); - CleanupStack::PopAndDestroy(ptr2); - CleanupStack::PopAndDestroy(ptr1); } void UT_CMusAvaContactAvailability::UT_CMusAvaController_UpdateContactNameLL() { - CPbkContactItem* contactItem = NULL; - - EUNIT_DISABLE_ALLOC_DECORATOR; - CPbkContactEngine* contactEngine = CPbkContactEngine::NewL(); - CleanupStack::PushL( contactEngine ); - - // dummy initialization, other ways CPbkContactEngine leaks memory - CPbkContactItem* pbkItem = NULL; - TRAP_IGNORE( pbkItem = contactEngine->ReadContactL( 1 ) ); - delete pbkItem; - - contactItem= contactEngine->CreateEmptyContactL(); - CleanupStack::PushL( contactItem ); - - //contact firstname && iBeginWithFirstName = ETrue - TPbkContactItemField* fieldMobile = contactItem->FindField(EPbkFieldIdPhoneNumberMobile); - fieldMobile->TextStorage()->SetTextL( KPlusNumber() ); - - TPbkContactItemField* fieldMobile1 = contactItem->FindField(EPbkFieldIdFirstName); - fieldMobile1->TextStorage()->SetTextL( KFirstName() ); - - contactEngine->AddNewContactL( *contactItem ); - EUNIT_ENABLE_ALLOC_DECORATOR; - - iConcreteSettings->SetTelNumberL( KPlusNumber() ); - - iContactAvailability->iBeginWithFirstName = ETrue; - TRAPD( error, - iContactAvailability->UpdateContactNameL( contactItem->ContactItem() ) ); - if ( error == KErrNoMemory ) User::Leave( error ); - EUNIT_ASSERT( error == KErrNone ); - EUNIT_ASSERT( iContactAvailability->iContactName->Compare( KFirstName ) == NULL ); - - CleanupStack::PopAndDestroy( contactItem ); - CContactIdArray* array = NULL; - iContactAvailability->ContactArrayL( array, *contactEngine ); - CleanupStack::PushL( array ); - contactEngine->DeleteContactsL( *array, ETrue ); - CleanupStack::PopAndDestroy( array ); - - //contact firstname && iBeginWithFirstName = EFalse - EUNIT_DISABLE_ALLOC_DECORATOR; - contactItem= contactEngine->CreateEmptyContactL(); - CleanupStack::PushL( contactItem ); - - fieldMobile = contactItem->FindField(EPbkFieldIdPhoneNumberMobile); - fieldMobile->TextStorage()->SetTextL( KPlusNumber() ); - - fieldMobile1 = contactItem->FindField(EPbkFieldIdFirstName); - fieldMobile1->TextStorage()->SetTextL( KFirstName() ); - - contactEngine->AddNewContactL( *contactItem ); - EUNIT_ENABLE_ALLOC_DECORATOR; - - iConcreteSettings->SetTelNumberL( KPlusNumber() ); - - iContactAvailability->iBeginWithFirstName = EFalse; - TRAP( error, - iContactAvailability->UpdateContactNameL( contactItem->ContactItem() ) ); - if ( error == KErrNoMemory ) User::Leave( error ); - EUNIT_ASSERT( error == KErrNone ); - EUNIT_ASSERT( iContactAvailability->iContactName->Compare( KFirstName ) == NULL ); - - CleanupStack::PopAndDestroy( contactItem ); - array = NULL; - iContactAvailability->ContactArrayL( array, *contactEngine ); - CleanupStack::PushL( array ); - contactEngine->DeleteContactsL( *array, ETrue ); - CleanupStack::PopAndDestroy( array ); - - //contact lastname && iBeginWithFirstName = ETrue - EUNIT_DISABLE_ALLOC_DECORATOR; - contactItem= contactEngine->CreateEmptyContactL(); - CleanupStack::PushL( contactItem ); - - fieldMobile = contactItem->FindField(EPbkFieldIdPhoneNumberMobile); - fieldMobile->TextStorage()->SetTextL( KPlusNumber() ); - - fieldMobile1 = contactItem->FindField(EPbkFieldIdLastName); - fieldMobile1->TextStorage()->SetTextL( KLastName() ); - - contactEngine->AddNewContactL( *contactItem ); - EUNIT_ENABLE_ALLOC_DECORATOR; - - iConcreteSettings->SetTelNumberL( KPlusNumber() ); - - iContactAvailability->iBeginWithFirstName = ETrue; - TRAP( error, - iContactAvailability->UpdateContactNameL( contactItem->ContactItem() ) ); - if ( error == KErrNoMemory ) User::Leave( error ); - EUNIT_ASSERT( error == KErrNone ); - EUNIT_ASSERT( iContactAvailability->iContactName->Compare( KLastName ) == NULL ); - - CleanupStack::PopAndDestroy( contactItem ); - array = NULL; - iContactAvailability->ContactArrayL( array, *contactEngine ); - CleanupStack::PushL( array ); - contactEngine->DeleteContactsL( *array, ETrue ); - CleanupStack::PopAndDestroy( array ); - - //contact lastname && iBeginWithFirstName = EFalse - EUNIT_DISABLE_ALLOC_DECORATOR; - contactItem= contactEngine->CreateEmptyContactL(); - CleanupStack::PushL( contactItem ); + } - fieldMobile = contactItem->FindField(EPbkFieldIdPhoneNumberMobile); - fieldMobile->TextStorage()->SetTextL( KPlusNumber() ); - - fieldMobile1 = contactItem->FindField(EPbkFieldIdLastName); - fieldMobile1->TextStorage()->SetTextL( KLastName() ); - - contactEngine->AddNewContactL( *contactItem ); - EUNIT_ENABLE_ALLOC_DECORATOR; - - iConcreteSettings->SetTelNumberL( KPlusNumber() ); - - iContactAvailability->iBeginWithFirstName = EFalse; - TRAP( error, - iContactAvailability->UpdateContactNameL( contactItem->ContactItem() ) ); - if ( error == KErrNoMemory ) User::Leave( error ); - EUNIT_ASSERT( error == KErrNone ); - EUNIT_ASSERT( iContactAvailability->iContactName->Compare( KLastName ) == NULL ); - - CleanupStack::PopAndDestroy( contactItem ); - array = NULL; - iContactAvailability->ContactArrayL( array, *contactEngine ); - CleanupStack::PushL( array ); - contactEngine->DeleteContactsL( *array, ETrue ); - CleanupStack::PopAndDestroy( array ); - - //contact firstname && lastname && iBeginWithFirstName = ETrue - EUNIT_DISABLE_ALLOC_DECORATOR; - contactItem= contactEngine->CreateEmptyContactL(); - CleanupStack::PushL( contactItem ); - - fieldMobile = contactItem->FindField(EPbkFieldIdPhoneNumberMobile); - fieldMobile->TextStorage()->SetTextL( KPlusNumber() ); - - fieldMobile1 = contactItem->FindField(EPbkFieldIdFirstName); - fieldMobile1->TextStorage()->SetTextL( KFirstName() ); - - TPbkContactItemField* fieldMobile2 = contactItem->FindField(EPbkFieldIdLastName); - fieldMobile2->TextStorage()->SetTextL( KLastName() ); - - contactEngine->AddNewContactL( *contactItem ); - EUNIT_ENABLE_ALLOC_DECORATOR; - - iConcreteSettings->SetTelNumberL( KPlusNumber() ); - - iContactAvailability->iBeginWithFirstName = ETrue; - TRAP( error, - iContactAvailability->UpdateContactNameL( contactItem->ContactItem() ) ); - if ( error == KErrNoMemory ) User::Leave( error ); - EUNIT_ASSERT( error == KErrNone ); - EUNIT_ASSERT( iContactAvailability->iContactName->Compare( KFirstLastName ) == NULL ); -// - CleanupStack::PopAndDestroy( contactItem ); - array = NULL; - iContactAvailability->ContactArrayL( array, *contactEngine ); - CleanupStack::PushL( array ); - contactEngine->DeleteContactsL( *array, ETrue ); - CleanupStack::PopAndDestroy( array ); - - //contact firstname && lastname && iBeginWithFirstName = EFalse - EUNIT_DISABLE_ALLOC_DECORATOR; - contactItem= contactEngine->CreateEmptyContactL(); - CleanupStack::PushL( contactItem ); - - fieldMobile = contactItem->FindField(EPbkFieldIdPhoneNumberMobile); - fieldMobile->TextStorage()->SetTextL( KPlusNumber() ); - - fieldMobile1 = contactItem->FindField(EPbkFieldIdFirstName); - fieldMobile1->TextStorage()->SetTextL( KFirstName() ); - - fieldMobile2 = contactItem->FindField(EPbkFieldIdLastName); - fieldMobile2->TextStorage()->SetTextL( KLastName() ); - - contactEngine->AddNewContactL( *contactItem ); - EUNIT_ENABLE_ALLOC_DECORATOR; - - iConcreteSettings->SetTelNumberL( KPlusNumber() ); - - iContactAvailability->iBeginWithFirstName = EFalse; - TRAP( error, - iContactAvailability->UpdateContactNameL( contactItem->ContactItem() ) ); - if ( error == KErrNoMemory ) User::Leave( error ); - EUNIT_ASSERT( error == KErrNone ); - EUNIT_ASSERT( iContactAvailability->iContactName->Compare( KLastFirstName ) == NULL ); - - CleanupStack::PopAndDestroy( contactItem ); - array = NULL; - iContactAvailability->ContactArrayL( array, *contactEngine ); - CleanupStack::PushL( array ); - contactEngine->DeleteContactsL( *array, ETrue ); - CleanupStack::PopAndDestroy( array ); - - // contact name only contain 1 character - _LIT(KNameWithOneChar,"M"); - for (int i = 0; i < 1; ++i ) - { - EUNIT_DISABLE_ALLOC_DECORATOR; - contactItem= contactEngine->CreateEmptyContactL(); - CleanupStack::PushL( contactItem ); - - fieldMobile = contactItem->FindField(EPbkFieldIdPhoneNumberMobile); - fieldMobile->TextStorage()->SetTextL( KPlusNumber() ); - - fieldMobile1 = contactItem->FindField(EPbkFieldIdFirstName); - fieldMobile1->TextStorage()->SetTextL( KNameWithOneChar() ); - - contactEngine->AddNewContactL( *contactItem ); - EUNIT_ENABLE_ALLOC_DECORATOR; - - iConcreteSettings->SetTelNumberL( KPlusNumber() ); - - iContactAvailability->iBeginWithFirstName = i; - TRAP( error, - iContactAvailability->UpdateContactNameL( contactItem->ContactItem() ) ); - if ( error == KErrNoMemory ) User::Leave( error ); - EUNIT_ASSERT( error == KErrNone ); - EUNIT_ASSERT( iContactAvailability->iContactName->Compare( KNameWithOneChar ) == 0 ); - - CleanupStack::PopAndDestroy( contactItem ); - array = NULL; - iContactAvailability->ContactArrayL( array, *contactEngine ); - CleanupStack::PushL( array ); - contactEngine->DeleteContactsL( *array, ETrue ); - CleanupStack::PopAndDestroy( array ); - } - - CleanupStack::PopAndDestroy( contactEngine ); - } // TEST TABLE EUNIT_BEGIN_TEST_TABLE( @@ -1515,6 +376,13 @@ "DoExecuteL_2", "FUNCTIONALITY", SetupL, UT_CMusAvaController_DoExecuteL2_L, Teardown) + +EUNIT_TEST( + "DoExecuteL_3 - test ", + "CMusAvaContactAvailability", + "DoExecuteL_3", + "FUNCTIONALITY", + SetupL, UT_CMusAvaController_DoExecuteL3_L, Teardown) EUNIT_TEST( "Name - test ", @@ -1635,12 +503,6 @@ "FUNCTIONALITY", SetupL, UT_CMusAvaController_UpdateContactNameLL, Teardown) -EUNIT_TEST( - "UpdateContactNameL - test ", - "CMusAvaContactAvailability", - "UpdateContactNameL", - "FUNCTIONALITY", - SetupL, UT_CMusAvaController_CallConnectedLL, Teardown) EUNIT_END_TEST_TABLE // END OF FILE diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshavailability/tsrc/ut_availability/src/UT_CMusAvaDefaultImp.cpp --- a/mmsharing/mmshavailability/tsrc/ut_availability/src/UT_CMusAvaDefaultImp.cpp Thu Aug 19 09:51:39 2010 +0300 +++ b/mmsharing/mmshavailability/tsrc/ut_availability/src/UT_CMusAvaDefaultImp.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -33,8 +33,6 @@ // EXTERNAL INCLUDES #include -#include -#include #include #include @@ -385,26 +383,13 @@ } EUNIT_DISABLE_ALLOC_DECORATOR; - CPbkContactEngine* contactEngine = CPbkContactEngine::NewL(); EUNIT_ENABLE_ALLOC_DECORATOR; - CleanupStack::PushL( contactEngine ); // dummy initialization, other ways CPbkContactEngine leaks memory - CPbkContactItem* pbkItem = NULL; - TRAP_IGNORE( pbkItem = contactEngine->ReadContactL( 1 ) ); - delete pbkItem; - - CPbkContactItem* contactItem= contactEngine->CreateEmptyContactL(); - CleanupStack::PushL( contactItem ); //contact - TPbkContactItemField* fieldMobile = contactItem->FindField(EPbkFieldIdPhoneNumberMobile); - fieldMobile->TextStorage()->SetTextL( KPlusNumber() ); - EUNIT_DISABLE_ALLOC_DECORATOR; - contactEngine->AddNewContactL( *contactItem ); EUNIT_ENABLE_ALLOC_DECORATOR; - CleanupStack::PopAndDestroy( contactItem ); iConcreteSettings->SetTelNumberL( KPlusNumber() ); @@ -415,7 +400,6 @@ EUNIT_ASSERT( iDefaultImp->AvailabilityState( MMusAvaObserver::EMusAvaInviteHandler) == MMusAvaObserver::EMusAvaStatusAvailable ); - CleanupStack::PopAndDestroy( contactEngine ); } diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshavailability/tsrc/ut_availability/src/UT_CMusAvaDefaultOptionHandler.cpp --- a/mmsharing/mmshavailability/tsrc/ut_availability/src/UT_CMusAvaDefaultOptionHandler.cpp Thu Aug 19 09:51:39 2010 +0300 +++ b/mmsharing/mmshavailability/tsrc/ut_availability/src/UT_CMusAvaDefaultOptionHandler.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -93,6 +93,11 @@ TRAP_IGNORE( SIPStrings::OpenL() ) CSipSseTestTls::OpenL(); iStorage = CSipSseTestTls::Storage(); + iStorage->Set( MusSettingsKeys::KFastStartupMode, + MusSettingsKeys::EFastModeOff ); + + iStorage->Set( MusSettingsKeys::KFastStartupMode, + MusSettingsKeys::EFastModeOff ); MultimediaSharingSettings::SetOperatorVariantSettingL( MusSettingsKeys::EStandard ); MultimediaSharingSettings::SetEdgeDtmSupportSettingL( MusSettingsKeys::EDtmModeAllowed ); iAvailabilityObserver = CMusAvaAvailabilityObserverImp::NewL(); @@ -110,6 +115,9 @@ TRAP_IGNORE( SIPStrings::OpenL() ) CSipSseTestTls::OpenL(); iStorage = CSipSseTestTls::Storage(); + iStorage->Set( MusSettingsKeys::KFastStartupMode, + MusSettingsKeys::EFastModeOff ); + MultimediaSharingSettings::SetOperatorVariantSettingL( MusSettingsKeys::EOperatorSpecific ); MultimediaSharingSettings::SetEdgeDtmSupportSettingL( MusSettingsKeys::EDtmModeAllowed ); iAvailabilityObserver = CMusAvaAvailabilityObserverImp::NewL(); diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshavailability/tsrc/ut_availability/src/UT_CMusAvaNetworkAvailability.cpp --- a/mmsharing/mmshavailability/tsrc/ut_availability/src/UT_CMusAvaNetworkAvailability.cpp Thu Aug 19 09:51:39 2010 +0300 +++ b/mmsharing/mmshavailability/tsrc/ut_availability/src/UT_CMusAvaNetworkAvailability.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -32,7 +32,7 @@ #include "mussesseioninformationapi.h" _LIT( KTelNumber, "12345" ); -_LIT( KAnotherTelNumber, "54321" ); +_LIT( KSipUri, "sip:uri@host" ); // CONSTRUCTION UT_CMusAvaNetworkAvailability* UT_CMusAvaNetworkAvailability::NewL() @@ -86,12 +86,6 @@ NMusSessionInformationApi::KMusCallDirection, RProperty::EInt, 0 ); - - - RProperty::Define( NMusSessionInformationApi::KCategoryUid, - NMusSessionInformationApi::KMUSPrivacy, - RProperty::EInt, - 0 ); } @@ -123,10 +117,6 @@ User::LeaveIfError( RProperty::Set( NMusSessionInformationApi::KCategoryUid, NMusSessionInformationApi::KMusCallEvent, 0 )); - - User::LeaveIfError( RProperty::Set( NMusSessionInformationApi::KCategoryUid, - NMusSessionInformationApi::KMUSPrivacy, - 0 )); iNetworkAvailability->DoExecuteL(); EUNIT_ASSERT_EQUALS( iNetworkAvailability->State(), @@ -138,22 +128,50 @@ NMusSessionInformationApi::KMusCallEvent, 1 )); - User::LeaveIfError( RProperty::Set( NMusSessionInformationApi::KCategoryUid, - NMusSessionInformationApi::KMusTelNumber, - KTelNumber )); - - User::LeaveIfError( RProperty::Set( NMusSessionInformationApi::KCategoryUid, - NMusSessionInformationApi::KMusCallDirection, - 0 )); + User::LeaveIfError( RProperty::Set( NMusSessionInformationApi::KCategoryUid, + NMusSessionInformationApi::KMusTelNumber, + KTelNumber )); + + User::LeaveIfError( RProperty::Set( NMusSessionInformationApi::KCategoryUid, + NMusSessionInformationApi::KMusCallDirection, + 0 )); iNetworkAvailability->DoExecuteL(); EUNIT_ASSERT_EQUALS( iNetworkAvailability->State(), MMusAvaObserver::EMusAvaStatusAvailable ); EUNIT_ASSERT_EQUALS( iSettings->TelNumber(), KTelNumber ); + const MDesCArray& sipAddresses = iSettings->SipAddresses(); + EUNIT_ASSERT_EQUALS( sipAddresses.MdcaCount(), 0 ); EUNIT_ASSERT_EQUALS( iSettings->CallDirection(), 0 ); - } +void UT_CMusAvaNetworkAvailability::UT_CMusAvaNetworkAvailability_DoExecuteL_SipUriL() + { + // one call, SIP URI given + User::LeaveIfError( RProperty::Set( NMusSessionInformationApi::KCategoryUid, + NMusSessionInformationApi::KMusCallEvent, + 1 )); + + User::LeaveIfError( RProperty::Set( NMusSessionInformationApi::KCategoryUid, + NMusSessionInformationApi::KMusTelNumber, + KSipUri )); + + User::LeaveIfError( RProperty::Set( NMusSessionInformationApi::KCategoryUid, + NMusSessionInformationApi::KMusCallDirection, + 0 )); + + iNetworkAvailability->DoExecuteL(); + EUNIT_ASSERT_EQUALS( iNetworkAvailability->State(), + MMusAvaObserver::EMusAvaStatusAvailable ); + EUNIT_ASSERT_EQUALS( iSettings->TelNumber(), KNullDesC ); + + const MDesCArray& sipAddresses = iSettings->SipAddresses(); + EUNIT_ASSERT_EQUALS( sipAddresses.MdcaCount(), 1 ); + EUNIT_ASSERT_EQUALS( sipAddresses.MdcaPoint( 0 ), KSipUri ); + + EUNIT_ASSERT_EQUALS( iSettings->CallDirection(), 0 ); + } + void UT_CMusAvaNetworkAvailability::UT_CMusAvaNetworkAvailability_StopL() { iNetworkAvailability->Stop(); @@ -172,26 +190,20 @@ User::LeaveIfError( RProperty::Set( NMusSessionInformationApi::KCategoryUid, NMusSessionInformationApi::KMusCallDirection, 0 )); - - User::LeaveIfError( RProperty::Set( NMusSessionInformationApi::KCategoryUid, - NMusSessionInformationApi::KMUSPrivacy, - 0 )); - - iNetworkAvailability->iConfcall = ETrue; - iNetworkAvailability->iSettings.SetOptionSentNumber( KTelNumber ); - iNetworkAvailability->CallConnectedL( KTelNumber ); + + iNetworkAvailability->CallConnectedL( KTelNumber, EFalse ); EUNIT_ASSERT_EQUALS( iNetworkAvailability->State(), MMusAvaObserver::EMusAvaStatusAvailable ); - + EUNIT_ASSERT_EQUALS( iSettings->TelNumber(), KTelNumber ); - iNetworkAvailability->iSettings.SetOptionSentNumber( KAnotherTelNumber ); - iNetworkAvailability->CallConnectedL( KTelNumber ); - EUNIT_ASSERT_EQUALS( iNetworkAvailability->State(), - MMusAvaObserver::EMusAvaStatusInProgress ); - EUNIT_ASSERT( iNetworkAvailability->iSettings.OptionSentTelNumber().Length() == 0 ); - - - EUNIT_ASSERT_EQUALS( iSettings->TelNumber(), KTelNumber ); + + // Test SIP URI + iNetworkAvailability->CallConnectedL( KSipUri, ETrue ); + // Tel number should not have been modified + EUNIT_ASSERT_EQUALS( iSettings->TelNumber(), KTelNumber ); + const MDesCArray& sipAddresses = iSettings->SipAddresses(); + EUNIT_ASSERT_EQUALS( sipAddresses.MdcaCount(), 1 ); + EUNIT_ASSERT_EQUALS( sipAddresses.MdcaPoint( 0 ), KSipUri ); } void UT_CMusAvaNetworkAvailability::UT_CMusAvaNetworkAvailability_ConferenceCallLL() @@ -206,17 +218,21 @@ User::LeaveIfError( RProperty::Set( NMusSessionInformationApi::KCategoryUid, NMusSessionInformationApi::KMusCallDirection, 0 )); - User::LeaveIfError( RProperty::Set( NMusSessionInformationApi::KCategoryUid, - NMusSessionInformationApi::KMUSPrivacy, - 0 )); - - iNetworkAvailability->CallHoldL( KTelNumber ); + iNetworkAvailability->CallHoldL( KTelNumber, EFalse ); EUNIT_ASSERT_EQUALS( iNetworkAvailability->State(), MMusAvaObserver::EMusAvaStatusCallOnHold ); - EUNIT_ASSERT_EQUALS( iSettings->TelNumber(), KTelNumber ); + EUNIT_ASSERT_EQUALS( iSettings->TelNumber(), KTelNumber ); + + // Test SIP URI + iNetworkAvailability->CallConnectedL( KSipUri, ETrue ); + // Tel number should not have been modified + EUNIT_ASSERT_EQUALS( iSettings->TelNumber(), KTelNumber ); + const MDesCArray& sipAddresses = iSettings->SipAddresses(); + EUNIT_ASSERT_EQUALS( sipAddresses.MdcaCount(), 1 ); + EUNIT_ASSERT_EQUALS( sipAddresses.MdcaPoint( 0 ), KSipUri ); } - + void UT_CMusAvaNetworkAvailability::UT_CMusAvaNetworkAvailability_NoActiveCallLL() { iNetworkAvailability->NoActiveCallL(); @@ -225,6 +241,17 @@ EUNIT_ASSERT_EQUALS( iSettings->TelNumber(), KNullDesC ); } +void UT_CMusAvaNetworkAvailability::UT_CMusAvaNetworkAvailability_SetRemoteHostLL() + { + _LIT( KMusTestPhoneNum, "12341234" ); + iNetworkAvailability->SetRemoteHostL( KMusTestPhoneNum(), EFalse ); + EUNIT_ASSERT_EQUALS( iSettings->TelNumber(), KMusTestPhoneNum ); + EUNIT_ASSERT_EQUALS( iSettings->ContactResolvingUri(), KNullDesC ); + + _LIT( KMusTestSipUri, "sip:12341234@1.2.3.4" ); + iNetworkAvailability->SetRemoteHostL( KMusTestSipUri(), ETrue ); + EUNIT_ASSERT_EQUALS( iSettings->ContactResolvingUri(), KMusTestSipUri ); + } // TEST TABLE @@ -242,6 +269,13 @@ SetupL, UT_CMusAvaNetworkAvailability_DoExecuteLL, Teardown) EUNIT_TEST( + "DoExecuteL - test SIP URI ", + "CMusAvaNetworkAvailability", + "DoExecuteL", + "FUNCTIONALITY", + SetupL, UT_CMusAvaNetworkAvailability_DoExecuteL_SipUriL, Teardown) + +EUNIT_TEST( "Stop - test ", "CMusAvaNetworkAvailability", "Stop", @@ -282,6 +316,13 @@ "NoActiveCallL", "FUNCTIONALITY", SetupL, UT_CMusAvaNetworkAvailability_NoActiveCallLL, Teardown ) + +EUNIT_TEST( + "SetRemoteHostL - test ", + "CMusAvaNetworkAvailability", + "SetRemoteHostL", + "FUNCTIONALITY", + SetupL, UT_CMusAvaNetworkAvailability_SetRemoteHostLL, Teardown ) EUNIT_END_TEST_TABLE diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshavailability/tsrc/ut_availability/src/UT_CMusAvaOptionHandler.cpp --- a/mmsharing/mmshavailability/tsrc/ut_availability/src/UT_CMusAvaOptionHandler.cpp Thu Aug 19 09:51:39 2010 +0300 +++ b/mmsharing/mmshavailability/tsrc/ut_availability/src/UT_CMusAvaOptionHandler.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -42,6 +42,7 @@ #include "musavasip.h" #include "CSipSseTestTls.h" #include "musavacapabilitytesthelper.h" +#include "musavasettingsobserverimp.h" // CONSTRUCTION @@ -86,7 +87,9 @@ { iSharedObject = CMusAvaSharedObject::GetSingletonL(); iAvailabilityObserver = CMusAvaAvailabilityObserverImp::NewL(); + iSettingsObserver = CMusAvaSettingsObserverImp::NewL(); iConcreteSettings = CMusAvaSettingsImp::NewL(); + iConcreteSettings->SetObserver( *iSettingsObserver ); iOptionHandler = CMusAvaOptionHandler::NewL( *iAvailabilityObserver, *iConcreteSettings ); @@ -95,6 +98,9 @@ CSIP& sip = iSharedObject->MusAvaSip().Sip(); CSipSseTestTls::OpenL(); iStorage = CSipSseTestTls::Storage(); + iStorage->Set( MusSettingsKeys::KFastStartupMode, + MusSettingsKeys::EFastModeOff ); + iSharedObject->MusAvaSip().CreateProfileL(); iProfile = iSharedObject->MusAvaSip().Profile(); iSharedObject->MusAvaSip().ConnectionL( ); @@ -125,6 +131,9 @@ iStorage = NULL; } delete iOptionHandler; + delete iSettingsObserver; + + PropertyHelper::Close(); } void UT_CMusAvaOptionHandler::UT_CMusAvaOptionHandler_NewLL( ) @@ -322,6 +331,143 @@ } +void UT_CMusAvaOptionHandler::UT_CMusAvaOptionHandler_DoSetStateL() + { + // Set some state which does not cause special handling + iOptionHandler->iFastModeCapable = EFalse; + iOptionHandler->DoSetState( MMusAvaObserver::EMusAvaStatusOptionsSent ); + EUNIT_ASSERT( iOptionHandler->iState == MMusAvaObserver::EMusAvaStatusOptionsSent ); + + // Set special handling state, but fast mode is not enabled + iOptionHandler->DoSetState( MMusAvaObserver::EMusAvaStatusAvailable ); + EUNIT_ASSERT( iOptionHandler->iState == MMusAvaObserver::EMusAvaStatusAvailable ); + EUNIT_ASSERT( !iSettingsObserver->iApplicationStarted ); + + // Set special handling state, fast capable but mode is not enabled + iOptionHandler->iFastModeCapable = ETrue; + iConcreteSettings->SetFastMode( MusSettingsKeys::EFastModeOff ); + iOptionHandler->DoSetState( MMusAvaObserver::EMusAvaStatusAvailable ); + EUNIT_ASSERT( iOptionHandler->iState == MMusAvaObserver::EMusAvaStatusAvailable ); + EUNIT_ASSERT( !iSettingsObserver->iApplicationStarted ); + } + +void UT_CMusAvaOptionHandler::UT_CMusAvaOptionHandler_DoSetStateFastModeL() + { + iOptionHandler->iFastModeCapable = ETrue; + iConcreteSettings->SetFastMode( MusSettingsKeys::EFastModeOn ); + iOptionHandler->iSettings.SetCallDirection( 1 ); + + // State which does not have special handling + iOptionHandler->DoSetState( MMusAvaObserver::EMusAvaFailureCode ); + EUNIT_ASSERT( iOptionHandler->iState == MMusAvaObserver::EMusAvaFailureCode ); + EUNIT_ASSERT( !iOptionHandler->iFastModeAvailabilityDelayed ); + + // OptionsNotSent handling + // + + // MT, not answered + iOptionHandler->iSettings.SetCallDirection( 2 ); + iOptionHandler->iCapabilityQueryAnswered = EFalse; + iOptionHandler->DoSetState( MMusAvaObserver::EMusAvaStatusOptionsNotSent ); + EUNIT_ASSERT( iOptionHandler->iState == MMusAvaObserver::EMusAvaStatusOptionsNotSent ); + EUNIT_ASSERT( !iOptionHandler->iFastModeAvailabilityDelayed ); + + // MT, answered (makes state available delayed) + iOptionHandler->iCapabilityQueryAnswered = ETrue; + iOptionHandler->DoSetState( MMusAvaObserver::EMusAvaStatusOptionsNotSent ); + EUNIT_ASSERT( iOptionHandler->iState == MMusAvaObserver::EMusAvaStatusOptionsNotSent ); + EUNIT_ASSERT( iOptionHandler->iFastModeAvailabilityDelayed ); + + // Available handling + // + + // MO, start app + iOptionHandler->iSettings.SetCallDirection( 1 ); + iSettingsObserver->iApplicationStarted = EFalse; + iOptionHandler->iFastModeAvailabilityDelayed = EFalse; + iOptionHandler->DoSetState( MMusAvaObserver::EMusAvaStatusAvailable ); + EUNIT_ASSERT( iOptionHandler->iState == MMusAvaObserver::EMusAvaStatusAvailable ); + EUNIT_ASSERT( !iOptionHandler->iFastModeAvailabilityDelayed ); + EUNIT_ASSERT( iSettingsObserver->iApplicationStarted ); + + // App already started by going to available state, do not do twice + iSettingsObserver->iApplicationStarted = EFalse; + iOptionHandler->DoSetState( MMusAvaObserver::EMusAvaStatusAvailable ); + EUNIT_ASSERT( iOptionHandler->iState == MMusAvaObserver::EMusAvaStatusAvailable ); + EUNIT_ASSERT( !iOptionHandler->iFastModeAvailabilityDelayed ); + EUNIT_ASSERT( !iSettingsObserver->iApplicationStarted ); + + // MT, delayed availability publishing (state not changed yet) + iOptionHandler->iSettings.SetCallDirection( 2 ); + iOptionHandler->iFastModeAvailabilityDelayed = EFalse; + iSettingsObserver->iApplicationStarted = EFalse; + iOptionHandler->iState = MMusAvaObserver::EMusAvaStatusOptionsNotSent; + iOptionHandler->DoSetState( MMusAvaObserver::EMusAvaStatusAvailable ); + EUNIT_ASSERT( iOptionHandler->iState == MMusAvaObserver::EMusAvaStatusOptionsNotSent ); + EUNIT_ASSERT( iOptionHandler->iFastModeAvailabilityDelayed ); + EUNIT_ASSERT( !iSettingsObserver->iApplicationStarted ); + + // Invite ends availability delaying + iOptionHandler->PrepareForReceivedInviteL(); + EUNIT_ASSERT( iOptionHandler->iState == MMusAvaObserver::EMusAvaStatusAvailable ); + EUNIT_ASSERT( !iOptionHandler->iFastModeAvailabilityDelayed ); + + // No effect if no delay pending + iOptionHandler->iState = MMusAvaObserver::EMusAvaStatusOptionsNotSent; + iOptionHandler->PrepareForReceivedInviteL(); + EUNIT_ASSERT( iOptionHandler->iState == MMusAvaObserver::EMusAvaStatusOptionsNotSent ); + + // OptionNotAvailable handling + // + + // Normal handling when no pending availabilty publishing nor state is + // not already available + iOptionHandler->iFastModeAvailabilityDelayed = EFalse; + iOptionHandler->DoSetState( MMusAvaObserver::EMusAvaOptionNotAvailable ); + EUNIT_ASSERT( iOptionHandler->iState == MMusAvaObserver::EMusAvaOptionNotAvailable ); + + // If already set to available by succesfull answer, sending failure + // does not clear availability + iOptionHandler->iState = MMusAvaObserver::EMusAvaStatusAvailable; + iOptionHandler->DoSetState( MMusAvaObserver::EMusAvaOptionNotAvailable ); + EUNIT_ASSERT( iOptionHandler->iState == MMusAvaObserver::EMusAvaStatusAvailable ); + } + +void UT_CMusAvaOptionHandler::UT_CMusAvaOptionHandler_FastModeResolvedL() + { + iOptionHandler->iFastModeCapable = ETrue; + + // Normal case + iOptionHandler->iSettings.SetFastMode( MusSettingsKeys::EFastModeOff ); + iOptionHandler->FastModeResolved( MusSettingsKeys::EFastModeOn ); + EUNIT_ASSERT( iOptionHandler->iSettings.FastMode() == MusSettingsKeys::EFastModeOn ) + + // MO side fast mode negotiation has failed, value is not set + iOptionHandler->iSettings.SetFastMode( MusSettingsKeys::EFastModeOff ); + iOptionHandler->iSettings.SetCallDirection( 1 ); + iOptionHandler->iState = MMusAvaObserver::EMusAvaOptionNotAvailable; + iOptionHandler->FastModeResolved( MusSettingsKeys::EFastModeOn ); + EUNIT_ASSERT( iOptionHandler->iSettings.FastMode() == MusSettingsKeys::EFastModeOff ) + } + +void UT_CMusAvaOptionHandler::UT_CMusAvaOptionHandler_CapabilityQueryAnsweredL() + { + iOptionHandler->iFastModeCapable = ETrue; + + // If fast mode MO side, no special handling for answer + iOptionHandler->CapabilityQueryAnswered( ETrue ); + EUNIT_ASSERT( iOptionHandler->iCapabilityQueryAnswered ) + EUNIT_ASSERT( !iOptionHandler->iFastModeAvailabilityDelayed ); + + // If fast mode MT side, MT can start waiting for invite already after answering + iOptionHandler->iCapabilityQueryAnswered = EFalse; + iOptionHandler->iSettings.SetFastMode( MusSettingsKeys::EFastModeOn ); + iOptionHandler->iSettings.SetCallDirection( 2 ); + iOptionHandler->CapabilityQueryAnswered( ETrue ); + EUNIT_ASSERT( iOptionHandler->iCapabilityQueryAnswered ) + EUNIT_ASSERT( iOptionHandler->iFastModeAvailabilityDelayed ); + } + // TEST TABLE EUNIT_BEGIN_TEST_TABLE( @@ -396,6 +542,38 @@ SetupL,UT_CMusAvaOptionHandler_VideoCodecsResolvedLL, Teardown) +EUNIT_TEST( + "DoSetState - test ", + "CMusAvaOptionHandler", + "DoSetState", + "FUNCTIONALITY", + SetupL,UT_CMusAvaOptionHandler_DoSetStateL, + Teardown) + +EUNIT_TEST( + "DoSetState - fastmode test ", + "CMusAvaOptionHandler", + "DoSetState", + "FUNCTIONALITY", + SetupL,UT_CMusAvaOptionHandler_DoSetStateFastModeL, + Teardown) + +EUNIT_TEST( + "FastModeResolved - test ", + "CMusAvaOptionHandler", + "FastModeResolved", + "FUNCTIONALITY", + SetupL,UT_CMusAvaOptionHandler_FastModeResolvedL, + Teardown) + +EUNIT_TEST( + "CapabilityQueryAnswered - test ", + "CMusAvaOptionHandler", + "CapabilityQueryAnswered", + "FUNCTIONALITY", + SetupL,UT_CMusAvaOptionHandler_CapabilityQueryAnsweredL, + Teardown) + EUNIT_END_TEST_TABLE // END OF FILE diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshavailability/tsrc/ut_availability/src/UT_CMusAvaRegisterAvailability.cpp --- a/mmsharing/mmshavailability/tsrc/ut_availability/src/UT_CMusAvaRegisterAvailability.cpp Thu Aug 19 09:51:39 2010 +0300 +++ b/mmsharing/mmshavailability/tsrc/ut_availability/src/UT_CMusAvaRegisterAvailability.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -219,12 +219,6 @@ EUNIT_ASSERT( iAvailabilityObserver->iStatus == MMusAvaObserver::EMusAvaStatusNotRegistered ); EUNIT_ASSERT( iAvailabilityObserver->iName == MMusAvaObserver::EMusAvaNameRegistration ); - EUNIT_ASSERT( iSharedObj->MusAvaSip().iSipConnection == NULL ); - - iRegisterAvailability->ProfileRegistryEventOccurred( 1, MSIPProfileRegistryObserver::EProfileRegistered ); - EUNIT_ASSERT( iAvailabilityObserver->iStatus == MMusAvaObserver::EMusAvaStatusAvailable ); - EUNIT_ASSERT( iAvailabilityObserver->iName == MMusAvaObserver::EMusAvaNameRegistration ); - EUNIT_ASSERT( iSharedObj->MusAvaSip().iSipConnection != NULL ); iRegisterAvailability->ProfileRegistryEventOccurred( 1, MSIPProfileRegistryObserver::EProfileDestroyed ); EUNIT_ASSERT( iRegisterAvailability->State() == MMusAvaObserver::EMusAvaStatusNotRegistered ); @@ -276,45 +270,19 @@ void UT_CMusAvaRegisterAvailability::UT_CMusAvaRegisterAvailability_ProfileRegistryErrorOccurredL() { - iRegisterAvailability->iOperatorVariant = MusSettingsKeys::EOperatorSpecific; iRegisterAvailability->ProfileRegistryErrorOccurred(5, -5 ); - EUNIT_ASSERT( iRegisterAvailability->State() == MMusAvaObserver::EMusAvaStatusNotExecuted ); - iRegisterAvailability->ProfileRegistryErrorOccurred(5, KErrGeneral ); - EUNIT_ASSERT( iRegisterAvailability->State() == MMusAvaObserver::EMusAvaStatusNotExecuted ); - - iRegisterAvailability->iOperatorVariant = MusSettingsKeys::EStandard; - iRegisterAvailability->ProfileRegistryErrorOccurred(5, -5 ); - EUNIT_ASSERT( iRegisterAvailability->State() == MMusAvaObserver::EMusAvaStatusNotExecuted ); - iRegisterAvailability->ProfileRegistryErrorOccurred(5, KErrGeneral ); - EUNIT_ASSERT( iRegisterAvailability->State() == MMusAvaObserver::EMusAvaStatusNotExecuted ); - + // Test Profile TRAPD( error, iSharedObj->MusAvaSip().CreateProfileL() ); if ( error == KErrNoMemory ) User::Leave( error ); EUNIT_ASSERT ( error == KErrNone ); //Profile created iRegisterAvailability->ProfileRegistryErrorOccurred(5, -5 ); - EUNIT_ASSERT( iRegisterAvailability->State() == MMusAvaObserver::EMusAvaStatusNotExecuted ); - - iRegisterAvailability->iOperatorVariant = MusSettingsKeys::EOperatorSpecific; - iRegisterAvailability->ProfileRegistryErrorOccurred(5, KErrGeneral ); - EUNIT_ASSERT( iRegisterAvailability->State() == MMusAvaObserver::EMusAvaStatusNotExecuted ); - - iRegisterAvailability->iOperatorVariant = MusSettingsKeys::EStandard; - iRegisterAvailability->ProfileRegistryErrorOccurred(5, KErrGeneral ); - EUNIT_ASSERT( iRegisterAvailability->State() == MMusAvaObserver::EMusAvaStatusNotExecuted ); MultimediaSharingSettings::SetSipProfileSettingL( 1 ); iRegisterAvailability->ProfileRegistryErrorOccurred(1, -5 ); EUNIT_ASSERT( iRegisterAvailability->State() == MMusAvaObserver::EMusAvaStatusNotRegistered ); - - iRegisterAvailability->ProfileRegistryErrorOccurred(1, KErrGeneral ); - EUNIT_ASSERT( iRegisterAvailability->State() == MMusAvaObserver::EMusAvaStatusNotRegistered ); - //Operator variant. SIP profile disabled. - iRegisterAvailability->iOperatorVariant = MusSettingsKeys::EOperatorSpecific; - iRegisterAvailability->ProfileRegistryErrorOccurred(1, KErrGeneral ); - EUNIT_ASSERT( iRegisterAvailability->State() == MMusAvaObserver::EMusActivationError ); } diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshavailability/tsrc/ut_availability/src/UT_CMusAvaSettingAvailability.cpp --- a/mmsharing/mmshavailability/tsrc/ut_availability/src/UT_CMusAvaSettingAvailability.cpp Thu Aug 19 09:51:39 2010 +0300 +++ b/mmsharing/mmshavailability/tsrc/ut_availability/src/UT_CMusAvaSettingAvailability.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -132,7 +132,13 @@ MultimediaSharingSettings::SetActivationSettingL(MusSettingsKeys::EActiveInHomeNetworks); iSettingAvailability->CheckActivationState(); - EUNIT_ASSERT( iSettingAvailability->iState == MMusAvaObserver::EMusActivationError ); + EUNIT_GET_ALLOC_DECORATOR_FAILCOUNT( count ); + if ( count > 0 && iSettingAvailability->iState + == MMusAvaObserver::EMusActivationError ) + { + User::Leave( KErrNoMemory ); + } + EUNIT_ASSERT( iSettingAvailability->iState == MMusAvaObserver::EMusAvaStatusAvailable ); MultimediaSharingSettings::SetActivationSettingL(MusSettingsKeys::ENever); iSettingAvailability->CheckActivationState(); diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshavailability/tsrc/ut_availability/src/UT_CMusAvaSettingsImp.cpp --- a/mmsharing/mmshavailability/tsrc/ut_availability/src/UT_CMusAvaSettingsImp.cpp Thu Aug 19 09:51:39 2010 +0300 +++ b/mmsharing/mmshavailability/tsrc/ut_availability/src/UT_CMusAvaSettingsImp.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -197,28 +197,6 @@ EUNIT_ASSERT( iSettingsImp->iTelNumber->Compare( KNumber ) == 0 ); } - -void UT_CMusAvaSettingsImp::UT_CMusAvaSettingsImp_SetOptionSentNumber() - { - _LIT( KNumber , "123456789" ); - iSettingsImp->SetOptionSentNumber( KNumber ); - EUNIT_ASSERT( iSettingsImp->iOptionSentTelNumber->Compare( KNumber ) == 0 ); - } - -const UT_CMusAvaSettingsImp::UT_CMusAvaSettingsImp_OptionSentTelNumber() - { - EUNIT_ASSERT( iSettingsImp->OptionSentTelNumber().Length() == 0 ); - } - -void UT_CMusAvaSettingsImp::UT_CMusAvaSettingsImp_ReleaseOptionSentNumber() - { - _LIT( KNumber , "123456789" ); - iSettingsImp->SetOptionSentNumber( KNumber ); - EUNIT_ASSERT( iSettingsImp->iOptionSentTelNumber->Compare( KNumber ) == 0 ); - iSettingsImp->ReleaseOptionSentNumber(); - EUNIT_ASSERT( iSettingsImp->iOptionSentTelNumber->Length() == 0 ) - } - void UT_CMusAvaSettingsImp::UT_CMusAvaSettingsImp_SetSipAddressProposalLL( ) { _LIT( KNumber , "123456789" ); @@ -536,28 +514,6 @@ "Sip", "FUNCTIONALITY", SetupL, UT_CMusAvaSettingsImp_CopyDescArrayLL, Teardown) - -EUNIT_TEST( - "SetOptionSentNumber - test ", - "CMusAvaSettingsImp", - "SetOptionSentNumber", - "FUNCTIONALITY", - SetupL, UT_CMusAvaSettingsImp_SetOptionSentNumber, Teardown) - -EUNIT_TEST( - "OptionSentTelNumber - test ", - "CMusAvaSettingsImp", - "OptionSentTelNumber", - "FUNCTIONALITY", - SetupL, UT_CMusAvaSettingsImp_OptionSentTelNumber, Teardown) - -EUNIT_TEST( - "ReleaseOptionSentNumber - test ", - "CMusAvaSettingsImp", - "ReleaseOptionSentNumber", - "FUNCTIONALITY", - SetupL, UT_CMusAvaSettingsImp_ReleaseOptionSentNumber, Teardown) - EUNIT_END_TEST_TABLE diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshavailability/tsrc/ut_availability/src/UT_CMusAvaTerminal.cpp --- a/mmsharing/mmshavailability/tsrc/ut_availability/src/UT_CMusAvaTerminal.cpp Thu Aug 19 09:51:39 2010 +0300 +++ b/mmsharing/mmshavailability/tsrc/ut_availability/src/UT_CMusAvaTerminal.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -40,7 +40,6 @@ #include "musavasharedobject.h" #include "mussettings.h" -_LIT8( KCapabilityTestOriginatorSIPAddressUri8, "sip:user@domain.com"); // CONSTRUCTION UT_CMusAvaTerminal* UT_CMusAvaTerminal::NewL() @@ -118,13 +117,21 @@ } CSipSseTestTls::OpenL(); + iStorage = CSipSseTestTls::Storage(); + iStorage->Set( MusSettingsKeys::KFastStartupMode, + MusSettingsKeys::EFastModeOff ); } void UT_CMusAvaTerminal::Teardown( ) { + if ( iStorage ) + { + iStorage->Clear(); + CSipSseTestTls::Close(); + iStorage = NULL; + } - CSipSseTestTls::Close(); delete iTerminal; delete iOptionHandler; delete iConcreteSettings; @@ -219,7 +226,7 @@ if ( !iProfile->iArray ) { iProfile->iArray = new ( ELeave ) CDesC8ArrayFlat( 1 ); - iProfile->iArray->AppendL( KCapabilityTestOriginatorSIPAddressUri8 ); + iProfile->iArray->AppendL( _L8("sip:user@domain.com") ); } EUNIT_ASSERT( iExchange->Terminals().Count() == 0 ); @@ -258,8 +265,6 @@ EUNIT_ASSERT( terminal.iQueries == 1 ); EUNIT_ASSERT( terminal.iQuery == query ); - - CMusAvaCapabilityQuery* tmpQuery = query; query = CMusAvaCapabilityQuery::NewL( *iCapability, *iSIPConnection, *iProfile, @@ -267,22 +272,12 @@ CleanupStack::PushL( query ); EUNIT_ASSERT( iExchange->Terminals().Count() == 1 ); EUNIT_ASSERT( terminal.iQueries == 2 ); - - + //Second query cannot be executed EUNIT_ASSERT_SPECIFIC_LEAVE( terminal.ExecuteQueryL( query ), KErrAlreadyExists ) EUNIT_ASSERT( terminal.iQuery != query ); - - - //Uri identical case - terminal.iQuery = NULL; - query->iRemoteUri.Copy( KCapabilityTestOriginatorSIPAddressUri8 ); - EUNIT_ASSERT_SPECIFIC_LEAVE( terminal.ExecuteQueryL( query ), - KErrNotSupported ) - CleanupStack::PopAndDestroy( query ); - delete tmpQuery; } @@ -459,7 +454,7 @@ CleanupStack::PopAndDestroy( options ); - // with Asserted Identity, check also that SDP of received request is used + // with Asserted Identity options = CapabilityTestHelper::OptionsRequestL( KCapabilityTestAddress_A, KCapabilityTestAddress_B, @@ -467,41 +462,15 @@ KCapabilitySwisFeature, KCapabilityTestAcceptHeader, KCapabilityTestTerminalID_B, - KCapabilityPAssertedIdentity, - KCapabilityTestSDP); + KCapabilityPAssertedIdentity ); CleanupStack::PushL( options ); - iTerminal->QueryRequestedL( *options ); - - + iTerminal->QueryRequestedL( *options ); EUNIT_ASSERT( iConcreteSettings->SipAddresses().MdcaCount() == 1 ); - EUNIT_ASSERT_EQUALS( iConcreteSettings->iVideoCodecs->MdcaCount(), 1 ); - EUNIT_ASSERT_EQUALS( iConcreteSettings->iVideoCodecs->MdcaPoint(0), _L("H263-2000/90000") ); CleanupStack::PopAndDestroy( options ); + CSipSseTestTls* server = CSipSseTestTls::Storage(); CSipSseTestTls::Storage()->Clear(); - iTerminal->iRequestedQuery = NULL; - EUNIT_ASSERT( iTerminal->RequestedQuery() == NULL ); - - // with Asserted Identity, check also that SDP of received request is used - options = - CapabilityTestHelper::OptionsRequestL( KCapabilityTestAddress_A, - KCapabilityTestAddress_B, - KCapabilitySwisFeature, - KCapabilitySwisFeature, - KCapabilityTestAcceptHeader, - KCapabilityTestTerminalID_B, - KCapabilityPAssertedIdentity, - KCapabilityTestSDP264And263); - CleanupStack::PushL( options ); - iTerminal->QueryRequestedL( *options ); - EUNIT_ASSERT( iConcreteSettings->SipAddresses().MdcaCount() == 1 ); - EUNIT_ASSERT_EQUALS( iConcreteSettings->iVideoCodecs->MdcaCount(), 2 ); - EUNIT_ASSERT_EQUALS( iConcreteSettings->iVideoCodecs->MdcaPoint(0), _L("H264/90000") ); - EUNIT_ASSERT_EQUALS( iConcreteSettings->iVideoCodecs->MdcaPoint(1), _L("H263-2000/90000") ); - CleanupStack::PopAndDestroy( options ); - - CSipSseTestTls::Storage()->Clear(); iTerminal->iRequestedQuery = NULL; EUNIT_ASSERT( iTerminal->RequestedQuery() == NULL ); @@ -512,7 +481,7 @@ KCapabilityTestDataFeature, KCapabilitySwisFeature, KCapabilityTestAcceptHeader, - KCapabilityTestTerminalID_B); + KCapabilityTestTerminalID_B ); CleanupStack::PushL( options ); iTerminal->QueryRequestedL( *options ); diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshavailability/tsrc/ut_availability/src/UT_availabilityDllMain.cpp --- a/mmsharing/mmshavailability/tsrc/ut_availability/src/UT_availabilityDllMain.cpp Thu Aug 19 09:51:39 2010 +0300 +++ b/mmsharing/mmshavailability/tsrc/ut_availability/src/UT_availabilityDllMain.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -46,6 +46,7 @@ #include "UT_CMusAvaSipProfileRegistryObserver.h" #include "UT_CMusAvaSipheaderUtil.h" #include "UT_CMusAvaClientResolverUtil.h" +#include "UT_CMusAvaCallEventMonitor.h" // EXTERNAL INCLUDES @@ -138,18 +139,13 @@ rootSuite->AddL( UT_CMusAvaClientResolverUtil::NewLC() ); CleanupStack::Pop(); - + + rootSuite->AddL( UT_CMusAvaCallEventMonitor::NewLC() ); + CleanupStack::Pop(); + CleanupStack::Pop(); // rootSuite return rootSuite; } - - // END OF FILE - - - - - - diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshavailability/tsrc/ut_availability/src/musavacapabilitytesthelper.cpp --- a/mmsharing/mmshavailability/tsrc/ut_availability/src/musavacapabilitytesthelper.cpp Thu Aug 19 09:51:39 2010 +0300 +++ b/mmsharing/mmshavailability/tsrc/ut_availability/src/musavacapabilitytesthelper.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -26,7 +26,7 @@ const TDesC8& aAcceptContact, const TDesC8& aContact, const TDesC8& aAccept, - const TDesC8& aUserAgent) + const TDesC8& aUserAgent ) { CSIPServerTransaction* srvtransaction = @@ -113,7 +113,8 @@ CleanupStack::Pop( fromheader ); requestelements->SetToHeaderL(toheader); CleanupStack::Pop( toheader ); - + + requestelements->SetMethodL( SIPStrings::StringF( SipStrConsts::EOptions ) ); srvtransaction->SetRequestElements( requestelements ); @@ -132,8 +133,7 @@ const TDesC8& aContact, const TDesC8& aAccept, const TDesC8& aUserAgent, - const TDesC8& aAssertId, - const TDesC8& aSdp) + const TDesC8& aAssertId ) { CSIPServerTransaction* srvtransaction = @@ -233,19 +233,6 @@ requestelements->SetMethodL( SIPStrings::StringF( SipStrConsts::EOptions ) ); - CSIPMessageElements& message = requestelements->MessageElements(); - if ( aSdp.Length() > 0 ) - { - CSIPContentTypeHeader* contenttype = - CSIPContentTypeHeader::NewLC( KMUSAVASIPMediaTypeApplication, - KMUSAVASIPMediaSubTypeSDP ); - HBufC8* content = aSdp.AllocLC(); - - message.SetContentL( content, contenttype ); - CleanupStack::Pop( content ); - CleanupStack::Pop( contenttype ); - } - srvtransaction->SetRequestElements( requestelements ); CleanupStack::Pop( requestelements ); CleanupStack::Pop( srvtransaction ); diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshengine/bwins/musengineu.def --- a/mmsharing/mmshengine/bwins/musengineu.def Thu Aug 19 09:51:39 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,75 +0,0 @@ -EXPORTS - ?SetAudioRoutingObserver@CMusEngSession@@QAEXPAVMMusEngAudioRoutingObserver@@@Z @ 1 NONAME ; void CMusEngSession::SetAudioRoutingObserver(class MMusEngAudioRoutingObserver *) - ?ParseUriL@TMusEngUriParser@@QAEXXZ @ 2 NONAME ; void TMusEngUriParser::ParseUriL(void) - ?EnableLoudspeakerL@CMusEngSession@@QAEXHH@Z @ 3 NONAME ; void CMusEngSession::EnableLoudspeakerL(int, int) - ?CancelInviteL@CMusEngMceOutSession@@QAEXXZ @ 4 NONAME ; void CMusEngMceOutSession::CancelInviteL(void) - ?SetClipL@CMusEngClipSession@@QAEXABVTDesC16@@@Z @ 5 NONAME ; void CMusEngClipSession::SetClipL(class TDesC16 const &) - ?VolumeL@CMusEngSession@@QBEHXZ @ 6 NONAME ; int CMusEngSession::VolumeL(void) const - ?IsMicMutedL@CMusEngSession@@QAEHXZ @ 7 NONAME ; int CMusEngSession::IsMicMutedL(void) - ?FastRewindL@CMusEngClipSession@@QAEXH@Z @ 8 NONAME ; void CMusEngClipSession::FastRewindL(int) - ?ZoomDefaultL@CMusEngLiveSession@@QAEXXZ @ 9 NONAME ; void CMusEngLiveSession::ZoomDefaultL(void) - ?GetUri16L@TMusEngUriParser@@QAEPAVHBufC16@@H@Z @ 10 NONAME ; class HBufC16 * TMusEngUriParser::GetUri16L(int) - ?VolumeUpL@CMusEngSession@@UAEXXZ @ 11 NONAME ; void CMusEngSession::VolumeUpL(void) - ?SetVolumeChangeObserver@CMusEngSession@@QAEXPAVMMusEngVolumeChangeObserver@@@Z @ 12 NONAME ; void CMusEngSession::SetVolumeChangeObserver(class MMusEngVolumeChangeObserver *) - ?UriType@TMusEngUriParser@@QAE?AW4TMusEngUriType@1@XZ @ 13 NONAME ; enum TMusEngUriParser::TMusEngUriType TMusEngUriParser::UriType(void) - ?IsMutedL@CMusEngMceSession@@QAEHXZ @ 14 NONAME ; int CMusEngMceSession::IsMutedL(void) - ?DurationL@CMusEngClipSession@@QAE?AVTTimeIntervalSeconds@@XZ @ 15 NONAME ; class TTimeIntervalSeconds CMusEngClipSession::DurationL(void) - ??0TMusEngUriParser@@QAE@ABVTDesC16@@@Z @ 16 NONAME ; TMusEngUriParser::TMusEngUriParser(class TDesC16 const &) - ?AcceptInvitationL@CMusEngReceiveSession@@QAEXABH@Z @ 17 NONAME ; void CMusEngReceiveSession::AcceptInvitationL(int const &) - ?CurrentZoomL@CMusEngLiveSession@@QBEHXZ @ 18 NONAME ; int CMusEngLiveSession::CurrentZoomL(void) const - ?MinBrightnessL@CMusEngLiveSession@@QBEHXZ @ 19 NONAME ; int CMusEngLiveSession::MinBrightnessL(void) const - ?GetUri8L@TMusEngUriParser@@QAEPAVHBufC8@@XZ @ 20 NONAME ; class HBufC8 * TMusEngUriParser::GetUri8L(void) - ?NewL@CMusEngLiveSession@@SAPAV1@ABVTRect@@AAVMMusEngSessionObserver@@AAVMMusEngOutSessionObserver@@AAVMMusEngLiveSessionObserver@@I@Z @ 21 NONAME ; class CMusEngLiveSession * CMusEngLiveSession::NewL(class TRect const &, class MMusEngSessionObserver &, class MMusEngOutSessionObserver &, class MMusEngLiveSessionObserver &, unsigned int) - ?UnmuteL@CMusEngMceSession@@UAEXXZ @ 22 NONAME ; void CMusEngMceSession::UnmuteL(void) - ?MaxBrightnessL@CMusEngLiveSession@@QBEHXZ @ 23 NONAME ; int CMusEngLiveSession::MaxBrightnessL(void) const - ?MinZoomL@CMusEngLiveSession@@QBEHXZ @ 24 NONAME ; int CMusEngLiveSession::MinZoomL(void) const - ?VolumeDownL@CMusEngSession@@UAEXXZ @ 25 NONAME ; void CMusEngSession::VolumeDownL(void) - ?OrientationL@CMusEngMceSession@@QAE?AW4TDisplayOrientation@1@XZ @ 26 NONAME ; enum CMusEngMceSession::TDisplayOrientation CMusEngMceSession::OrientationL(void) - ?SetSupportedVideoCodecListL@CMusEngMceOutSession@@QAEXABVTDesC16@@@Z @ 27 NONAME ; void CMusEngMceOutSession::SetSupportedVideoCodecListL(class TDesC16 const &) - ?MuteL@CMusEngMceSession@@UAEXXZ @ 28 NONAME ; void CMusEngMceSession::MuteL(void) - ?IsRecording@CMusEngLiveSession@@QAEHXZ @ 29 NONAME ; int CMusEngLiveSession::IsRecording(void) - ?SetVolumeL@CMusEngSession@@UAEXH@Z @ 30 NONAME ; void CMusEngSession::SetVolumeL(int) - ?DecreaseBrightnessL@CMusEngLiveSession@@QAEXXZ @ 31 NONAME ; void CMusEngLiveSession::DecreaseBrightnessL(void) - ?CancelTranscodeL@CMusEngClipSession@@QAEXXZ @ 32 NONAME ; void CMusEngClipSession::CancelTranscodeL(void) - ?IsAudioRoutingHeadset@CMusEngSession@@QBEHXZ @ 33 NONAME ; int CMusEngSession::IsAudioRoutingHeadset(void) const - ?PauseL@CMusEngClipSession@@UAEXXZ @ 34 NONAME ; void CMusEngClipSession::PauseL(void) - ?BrightnessDefaultL@CMusEngLiveSession@@QAEXXZ @ 35 NONAME ; void CMusEngLiveSession::BrightnessDefaultL(void) - ?FastForwardL@CMusEngClipSession@@QAEXH@Z @ 36 NONAME ; void CMusEngClipSession::FastForwardL(int) - ?SetZoomL@CMusEngLiveSession@@QAEXH@Z @ 37 NONAME ; void CMusEngLiveSession::SetZoomL(int) - ?SetRectL@CMusEngSession@@QAEXABVTRect@@@Z @ 38 NONAME ; void CMusEngSession::SetRectL(class TRect const &) - ?NewL@CMusEngClipSession@@SAPAV1@ABVTRect@@AAVMMusEngSessionObserver@@AAVMMusEngOutSessionObserver@@AAVMMusEngClipSessionObserver@@I@Z @ 39 NONAME ; class CMusEngClipSession * CMusEngClipSession::NewL(class TRect const &, class MMusEngSessionObserver &, class MMusEngOutSessionObserver &, class MMusEngClipSessionObserver &, unsigned int) - ?BrightnessAutoL@CMusEngLiveSession@@QAEXXZ @ 40 NONAME ; void CMusEngLiveSession::BrightnessAutoL(void) - ?IncreaseBrightnessL@CMusEngLiveSession@@QAEXXZ @ 41 NONAME ; void CMusEngLiveSession::IncreaseBrightnessL(void) - ?InviteL@CMusEngMceOutSession@@QAEXABVTDesC16@@@Z @ 42 NONAME ; void CMusEngMceOutSession::InviteL(class TDesC16 const &) - ?SetOrientationL@CMusEngMceSession@@QAEXW4TDisplayOrientation@1@@Z @ 43 NONAME ; void CMusEngMceSession::SetOrientationL(enum CMusEngMceSession::TDisplayOrientation) - ?IsLoudSpeakerEnabled@CMusEngSession@@QBEHXZ @ 44 NONAME ; int CMusEngSession::IsLoudSpeakerEnabled(void) const - ?ContainsAudioL@CMusEngMceSession@@QAEHXZ @ 45 NONAME ; int CMusEngMceSession::ContainsAudioL(void) - ?NewL@CMusEngReceiveSession@@SAPAV1@ABVTRect@@AAVMMusEngSessionObserver@@AAVMMusEngReceiveSessionObserver@@@Z @ 46 NONAME ; class CMusEngReceiveSession * CMusEngReceiveSession::NewL(class TRect const &, class MMusEngSessionObserver &, class MMusEngReceiveSessionObserver &) - ?VolumeUpL@CMusEngMceSession@@UAEXXZ @ 47 NONAME ; void CMusEngMceSession::VolumeUpL(void) - ?IsPlayingL@CMusEngClipSession@@UAEHXZ @ 48 NONAME ; int CMusEngClipSession::IsPlayingL(void) - ?PlayL@CMusEngClipSession@@UAEXXZ @ 49 NONAME ; void CMusEngClipSession::PlayL(void) - ?ZoomInL@CMusEngLiveSession@@QAEXXZ @ 50 NONAME ; void CMusEngLiveSession::ZoomInL(void) - ?PauseL@CMusEngLiveSession@@UAEXXZ @ 51 NONAME ; void CMusEngLiveSession::PauseL(void) - ?GetSessionTime@CMusEngMceSession@@QBE?AVTTimeIntervalSeconds@@XZ @ 52 NONAME ; class TTimeIntervalSeconds CMusEngMceSession::GetSessionTime(void) const - ?SetVolumeL@CMusEngMceSession@@UAEXH@Z @ 53 NONAME ; void CMusEngMceSession::SetVolumeL(int) - ?Rect@CMusEngSession@@QBE?AVTRect@@XZ @ 54 NONAME ; class TRect CMusEngSession::Rect(void) const - ?IsDisplayEnabledL@CMusEngMceSession@@QAEHXZ @ 55 NONAME ; int CMusEngMceSession::IsDisplayEnabledL(void) - ?IsAudioRoutingLoudSpeaker@CMusEngSession@@QBEHXZ @ 56 NONAME ; int CMusEngSession::IsAudioRoutingLoudSpeaker(void) const - ?SetBrightnessL@CMusEngLiveSession@@QBEXH@Z @ 57 NONAME ; void CMusEngLiveSession::SetBrightnessL(int) const - ?TranscodeL@CMusEngClipSession@@QAEXABV?$TBuf@$0BAA@@@@Z @ 58 NONAME ; void CMusEngClipSession::TranscodeL(class TBuf<256> const &) - ?MaxZoomL@CMusEngLiveSession@@QBEHXZ @ 59 NONAME ; int CMusEngLiveSession::MaxZoomL(void) const - ?VolumeDownL@CMusEngMceSession@@UAEXXZ @ 60 NONAME ; void CMusEngMceSession::VolumeDownL(void) - ?ZoomOutL@CMusEngLiveSession@@QAEXXZ @ 61 NONAME ; void CMusEngLiveSession::ZoomOutL(void) - ?ConnectionActive@CMusEngMceSession@@QBEHXZ @ 62 NONAME ; int CMusEngMceSession::ConnectionActive(void) const - ?PositionL@CMusEngClipSession@@QAE?AVTTimeIntervalSeconds@@XZ @ 63 NONAME ; class TTimeIntervalSeconds CMusEngClipSession::PositionL(void) - ?AudioRoutingCanBeChanged@CMusEngSession@@QBEHXZ @ 64 NONAME ; int CMusEngSession::AudioRoutingCanBeChanged(void) const - ?MuteMicL@CMusEngSession@@QAEXH@Z @ 65 NONAME ; void CMusEngSession::MuteMicL(int) - ?NewL@CMusEngLiveSession@@SAPAV1@ABVTDesC16@@ABVTRect@@AAVMMusEngSessionObserver@@AAVMMusEngOutSessionObserver@@AAVMMusEngLiveSessionObserver@@I@Z @ 66 NONAME ; class CMusEngLiveSession * CMusEngLiveSession::NewL(class TDesC16 const &, class TRect const &, class MMusEngSessionObserver &, class MMusEngOutSessionObserver &, class MMusEngLiveSessionObserver &, unsigned int) - ?EnableDisplayL@CMusEngMceSession@@UAEXH@Z @ 67 NONAME ; void CMusEngMceSession::EnableDisplayL(int) - ?CurrentBrightnessL@CMusEngLiveSession@@QBEHXZ @ 68 NONAME ; int CMusEngLiveSession::CurrentBrightnessL(void) const - ?RecordL@CMusEngLiveSession@@QAEXH@Z @ 69 NONAME ; void CMusEngLiveSession::RecordL(int) - ?IsPlayingL@CMusEngLiveSession@@UAEHXZ @ 70 NONAME ; int CMusEngLiveSession::IsPlayingL(void) - ?TerminateL@CMusEngMceSession@@QAEXXZ @ 71 NONAME ; void CMusEngMceSession::TerminateL(void) - ?PlayL@CMusEngLiveSession@@UAEXXZ @ 72 NONAME ; void CMusEngLiveSession::PlayL(void) - ?SetPositionL@CMusEngClipSession@@QAEXABVTTimeIntervalSeconds@@@Z @ 73 NONAME ; void CMusEngClipSession::SetPositionL(class TTimeIntervalSeconds const &) - diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshengine/data/20021341.rss --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/mmshengine/data/20021341.rss Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,40 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + +#include "registryinfov2.rh" + +RESOURCE REGISTRY_INFO theInfo + { + resource_format_version = RESOURCE_FORMAT_VERSION_2; + dll_uid = 0x20021341; + interfaces = + { + INTERFACE_INFO + { + interface_uid = 0x20021340; + implementations = + { + IMPLEMENTATION_INFO + { + implementation_uid = 0x20021341; + version_no = 1; + default_data = "MultimediaSharing"; + } + }; + } + }; + } diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshengine/eabi/musengineu.def --- a/mmsharing/mmshengine/eabi/musengineu.def Thu Aug 19 09:51:39 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,94 +0,0 @@ -EXPORTS - _ZN14CMusEngSession10SetVolumeLEi @ 1 NONAME - _ZN14CMusEngSession11IsMicMutedLEv @ 2 NONAME - _ZN14CMusEngSession11VolumeDownLEv @ 3 NONAME - _ZN14CMusEngSession18EnableLoudspeakerLEii @ 4 NONAME - _ZN14CMusEngSession23SetAudioRoutingObserverEP27MMusEngAudioRoutingObserver @ 5 NONAME - _ZN14CMusEngSession23SetVolumeChangeObserverEP27MMusEngVolumeChangeObserver @ 6 NONAME - _ZN14CMusEngSession8MuteMicLEi @ 7 NONAME - _ZN14CMusEngSession8SetRectLERK5TRect @ 8 NONAME - _ZN14CMusEngSession9VolumeUpLEv @ 9 NONAME - _ZN16TMusEngUriParser7UriTypeEv @ 10 NONAME - _ZN16TMusEngUriParser8GetUri8LEv @ 11 NONAME - _ZN16TMusEngUriParser9GetUri16LEi @ 12 NONAME - _ZN16TMusEngUriParser9ParseUriLEv @ 13 NONAME - _ZN16TMusEngUriParserC1ERK7TDesC16 @ 14 NONAME - _ZN16TMusEngUriParserC2ERK7TDesC16 @ 15 NONAME - _ZN17CMusEngMceSession10SetVolumeLEi @ 16 NONAME - _ZN17CMusEngMceSession10TerminateLEv @ 17 NONAME - _ZN17CMusEngMceSession11VolumeDownLEv @ 18 NONAME - _ZN17CMusEngMceSession12OrientationLEv @ 19 NONAME - _ZN17CMusEngMceSession14ContainsAudioLEv @ 20 NONAME - _ZN17CMusEngMceSession14EnableDisplayLEi @ 21 NONAME - _ZN17CMusEngMceSession15SetOrientationLENS_19TDisplayOrientationE @ 22 NONAME - _ZN17CMusEngMceSession17IsDisplayEnabledLEv @ 23 NONAME - _ZN17CMusEngMceSession5MuteLEv @ 24 NONAME - _ZN17CMusEngMceSession7UnmuteLEv @ 25 NONAME - _ZN17CMusEngMceSession8IsMutedLEv @ 26 NONAME - _ZN17CMusEngMceSession9VolumeUpLEv @ 27 NONAME - _ZN18CMusEngClipSession10IsPlayingLEv @ 28 NONAME - _ZN18CMusEngClipSession10TranscodeLERK4TBufILi256EE @ 29 NONAME - _ZN18CMusEngClipSession11FastRewindLEi @ 30 NONAME - _ZN18CMusEngClipSession12FastForwardLEi @ 31 NONAME - _ZN18CMusEngClipSession12SetPositionLERK20TTimeIntervalSeconds @ 32 NONAME - _ZN18CMusEngClipSession16CancelTranscodeLEv @ 33 NONAME - _ZN18CMusEngClipSession4NewLERK5TRectR22MMusEngSessionObserverR25MMusEngOutSessionObserverR26MMusEngClipSessionObserverj @ 34 NONAME - _ZN18CMusEngClipSession5PlayLEv @ 35 NONAME - _ZN18CMusEngClipSession6PauseLEv @ 36 NONAME - _ZN18CMusEngClipSession8SetClipLERK7TDesC16 @ 37 NONAME - _ZN18CMusEngClipSession9DurationLEv @ 38 NONAME - _ZN18CMusEngClipSession9PositionLEv @ 39 NONAME - _ZN18CMusEngLiveSession10IsPlayingLEv @ 40 NONAME - _ZN18CMusEngLiveSession11IsRecordingEv @ 41 NONAME - _ZN18CMusEngLiveSession12ZoomDefaultLEv @ 42 NONAME - _ZN18CMusEngLiveSession15BrightnessAutoLEv @ 43 NONAME - _ZN18CMusEngLiveSession18BrightnessDefaultLEv @ 44 NONAME - _ZN18CMusEngLiveSession19DecreaseBrightnessLEv @ 45 NONAME - _ZN18CMusEngLiveSession19IncreaseBrightnessLEv @ 46 NONAME - _ZN18CMusEngLiveSession4NewLERK5TRectR22MMusEngSessionObserverR25MMusEngOutSessionObserverR26MMusEngLiveSessionObserverj @ 47 NONAME - _ZN18CMusEngLiveSession4NewLERK7TDesC16RK5TRectR22MMusEngSessionObserverR25MMusEngOutSessionObserverR26MMusEngLiveSessionObserverj @ 48 NONAME - _ZN18CMusEngLiveSession5PlayLEv @ 49 NONAME - _ZN18CMusEngLiveSession6PauseLEv @ 50 NONAME - _ZN18CMusEngLiveSession7RecordLEi @ 51 NONAME - _ZN18CMusEngLiveSession7ZoomInLEv @ 52 NONAME - _ZN18CMusEngLiveSession8SetZoomLEi @ 53 NONAME - _ZN18CMusEngLiveSession8ZoomOutLEv @ 54 NONAME - _ZN20CMusEngMceOutSession13CancelInviteLEv @ 55 NONAME - _ZN20CMusEngMceOutSession27SetSupportedVideoCodecListLERK7TDesC16 @ 56 NONAME - _ZN20CMusEngMceOutSession7InviteLERK7TDesC16 @ 57 NONAME - _ZN21CMusEngReceiveSession17AcceptInvitationLERKi @ 58 NONAME - _ZN21CMusEngReceiveSession4NewLERK5TRectR22MMusEngSessionObserverR29MMusEngReceiveSessionObserver @ 59 NONAME - _ZNK14CMusEngSession20IsLoudSpeakerEnabledEv @ 60 NONAME - _ZNK14CMusEngSession21IsAudioRoutingHeadsetEv @ 61 NONAME - _ZNK14CMusEngSession24AudioRoutingCanBeChangedEv @ 62 NONAME - _ZNK14CMusEngSession4RectEv @ 63 NONAME - _ZNK14CMusEngSession7VolumeLEv @ 64 NONAME - _ZNK17CMusEngMceSession14GetSessionTimeEv @ 65 NONAME - _ZNK17CMusEngMceSession16ConnectionActiveEv @ 66 NONAME - _ZNK18CMusEngLiveSession12CurrentZoomLEv @ 67 NONAME - _ZNK18CMusEngLiveSession14MaxBrightnessLEv @ 68 NONAME - _ZNK18CMusEngLiveSession14MinBrightnessLEv @ 69 NONAME - _ZNK18CMusEngLiveSession14SetBrightnessLEi @ 70 NONAME - _ZNK18CMusEngLiveSession18CurrentBrightnessLEv @ 71 NONAME - _ZNK18CMusEngLiveSession8MaxZoomLEv @ 72 NONAME - _ZNK18CMusEngLiveSession8MinZoomLEv @ 73 NONAME - _ZTI14CMusEngSession @ 74 NONAME - _ZTI17CMusEngMceSession @ 75 NONAME - _ZTI18CMusEngClipSession @ 76 NONAME - _ZTI18CMusEngLiveSession @ 77 NONAME - _ZTI20CMusEngMceOutSession @ 78 NONAME - _ZTI21CMusEngReceiveSession @ 79 NONAME - _ZTI21CMusEngTelephoneUtils @ 80 NONAME - _ZTI21CMusSipProfileHandler @ 81 NONAME - _ZTI27CMusEngSessionDurationTimer @ 82 NONAME - _ZTV14CMusEngSession @ 83 NONAME - _ZTV17CMusEngMceSession @ 84 NONAME - _ZTV18CMusEngClipSession @ 85 NONAME - _ZTV18CMusEngLiveSession @ 86 NONAME - _ZTV20CMusEngMceOutSession @ 87 NONAME - _ZTV21CMusEngReceiveSession @ 88 NONAME - _ZTV21CMusEngTelephoneUtils @ 89 NONAME - _ZTV21CMusSipProfileHandler @ 90 NONAME - _ZTV27CMusEngSessionDurationTimer @ 91 NONAME - _ZNK14CMusEngSession25IsAudioRoutingLoudSpeakerEv @ 92 NONAME - diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshengine/group/bld.inf --- a/mmsharing/mmshengine/group/bld.inf Thu Aug 19 09:51:39 2010 +0300 +++ b/mmsharing/mmshengine/group/bld.inf Tue Aug 31 15:12:07 2010 +0300 @@ -18,4 +18,6 @@ #include PRJ_MMPFILES -musengine.mmp +musengineplugin.mmp + + diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshengine/group/musengine.mmp --- a/mmsharing/mmshengine/group/musengine.mmp Thu Aug 19 09:51:39 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,80 +0,0 @@ -/* -* Copyright (c) 2006 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: -* -*/ - -// using relative paths for sourcepath and user includes -// exports are unfrozen - -#include - -#include "../../../inc/musuid.hrh" - -// Capability assignment. -CAPABILITY CAP_GENERAL_DLL - -// Vendor ID assignment. -VENDORID VID_DEFAULT - - -TARGET musengine.dll -TARGETTYPE dll -UID 0x1000008d KMusEngineUid // 0x10282392 - -//DOCUMENT Generic_Symbian_DLL_ReadMe.txt - -SOURCEPATH ../src -SOURCE musengsession.cpp -SOURCE musengmcesession.cpp -SOURCE musengmceoutsession.cpp -SOURCE musenglivesession.cpp -SOURCE musengreceivesession.cpp -SOURCE musengtelephoneutils.cpp -SOURCE musengsessiondurationtimer.cpp -SOURCE musengclipsession.cpp -SOURCE musenguriparser.cpp -SOURCE musengmceutils.cpp -SOURCE musengorientationhandler.cpp - -// SIP API -SOURCE mussipprofilehandler.cpp - - -USERINCLUDE ../inc -USERINCLUDE ../../mmshshared/inc -USERINCLUDE ../../inc -USERINCLUDE ../../../inc - -APP_LAYER_SYSTEMINCLUDE - -LIBRARY euser.lib -LIBRARY bafl.lib -LIBRARY inetprotutil.lib -LIBRARY phoneclient.lib -LIBRARY centralrepository.lib - -LIBRARY sipprofilecli.lib -LIBRARY sipclient.lib -LIBRARY sipcodec.lib -LIBRARY mceclient.lib -LIBRARY drmcommon.lib -LIBRARY charconv.lib -LIBRARY telephonyaudiorouting.lib -LIBRARY efsrv.lib -LIBRARY cenrepnotifhandler.lib - -DEBUGLIBRARY flogger.lib - -PAGED diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshengine/group/musengineplugin.mmp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/mmshengine/group/musengineplugin.mmp Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,77 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + +#include + +TARGET musengineplugin.dll +TARGETTYPE PLUGIN +UID 0x10009D8D 0x20021341 +VENDORID VID_DEFAULT +CAPABILITY CAP_ECOM_PLUGIN + +SOURCEPATH ../data +START RESOURCE 20021341.rss +TARGET musengineplugin.rsc +END + +SOURCEPATH ../src +SOURCE musenginepluginentry.cpp +SOURCE musengsessionmanager.cpp +SOURCE musengmcesession.cpp +SOURCE musengmceoutsession.cpp +SOURCE musenglivesession.cpp +SOURCE musengreceivesession.cpp +SOURCE musengtwowaysession.cpp +SOURCE musengtwowayrecvsession.cpp +SOURCE musengtelephoneutils.cpp +SOURCE musengsessiondurationtimer.cpp +SOURCE musengclipsession.cpp +SOURCE musenguriparser.cpp +SOURCE musengmceutils.cpp +SOURCE mussipprofilehandler.cpp +SOURCE musengcamerahandler.cpp +SOURCE musengvideoplayerbase.cpp +SOURCE musenglocalvideoplayer.cpp +SOURCE musenglivevideoplayer.cpp +SOURCE musengremotevideoplayer.cpp +SOURCE musengclipvideoplayer.cpp + +SOURCEPATH ../../mmshshared/src +SOURCE muspropertywatch.cpp + +USERINCLUDE ../inc +USERINCLUDE ../../mmshshared/inc +USERINCLUDE ../../inc +USERINCLUDE ../../../inc + +APP_LAYER_SYSTEMINCLUDE +SYSTEMINCLUDE /epoc32/include/ecom + +LIBRARY euser.lib +LIBRARY bafl.lib +LIBRARY inetprotutil.lib +LIBRARY phoneclient.lib +LIBRARY centralrepository.lib +LIBRARY sipprofilecli.lib +LIBRARY sipclient.lib +LIBRARY sipcodec.lib +LIBRARY mceclient.lib +LIBRARY drmcommon.lib +LIBRARY charconv.lib +LIBRARY telephonyaudiorouting.lib +LIBRARY cntmodel.lib ecom.lib +DEBUGLIBRARY flogger.lib diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshengine/inc/musengaudioroutingobserver.h --- a/mmsharing/mmshengine/inc/musengaudioroutingobserver.h Thu Aug 19 09:51:39 2010 +0300 +++ b/mmsharing/mmshengine/inc/musengaudioroutingobserver.h Tue Aug 31 15:12:07 2010 +0300 @@ -19,13 +19,13 @@ #ifndef MUSENGAUDIOROUTINGOBSERVER_H #define MUSENGAUDIOROUTINGOBSERVER_H +// INCLUDES +#include // CLASS DECLARATION /** -* An interface to be implemented by users of Multimedia Sharing Engine if -* they wish to be notified about changes in audio routing. -* +* An interface to get notifcations when the audio routing changes */ class MMusEngAudioRoutingObserver { @@ -33,21 +33,10 @@ public: /** - * Indicates that some other application has changed audio routing. - * @param aShowNote ETrue if notification of current change should be - * shown. - * + * The audio routing has changed. */ - virtual void AudioRoutingChanged( TBool aShowNote ) = 0; - - /** - * Observer is required to give information whether audio route change - * is allowed currently. - * @param ETrue if change is allowed, otherwise EFalse - * - */ - virtual TBool AudioRouteChangeAllowed() const = 0; + virtual void AudioRoutingChanged() = 0; }; -#endif // INCLUDE GUARD \ No newline at end of file +#endif // MUSENGAUDIOROUTINGOBSERVER_H diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshengine/inc/musengcamerahandler.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/mmshengine/inc/musengcamerahandler.h Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,159 @@ +/* +* 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: +* +*/ + + +#ifndef MUSHENGCAMERAHANDLER_H +#define MUSHENGCAMERAHANDLER_H + +// USER +#include "musunittesting.h" +#include "mussettings.h" + +// SYSTEM +#include +#include +#include +#include + +// FORWARD DECLARATIONS +class CMceCameraSource; +class CMceSession; + +// CLASS + +class TMusEngCameraHandler : + public MLcCameraControl, + public MLcBrightnessControl, + public MLcZoomControl + { + MUS_UNITTEST( UT_CMusEngOutSession ) + MUS_UNITTEST( UT_CMusEngLiveSession ) + MUS_UNITTEST( UT_CMusEngTwoWaySession ) + MUS_UNITTEST( UT_CMusEngTwoWayRecvSession ) + MUS_UNITTEST( UT_TMusEngCameraHandler ) + + public: // From MLcCameraControl + + TInt LcCameraCountL(); + + TInt CurrentLcCameraIndex(); + + void ToggleLcCameraL(); + + public: // From MLcBrightnessControl + + TInt MinLcBrightnessL(); + + TInt MaxLcBrightnessL(); + + TInt LcBrightnessL(); + + void SetLcBrightnessL( TInt aValue ); + + void IncreaseLcBrightnessL(); + + void DecreaseLcBrightnessL(); + + public: // From MLcZoomControl + + TInt MinLcZoomL(); + + TInt MaxLcZoomL(); + + TInt LcZoomValueL(); + + void SetLcZoomValueL( TInt aValue ); + + void LcZoomInL(); + + void LcZoomOutL(); + + public: + + /** + * Resumes previously paused session. + * Continues using viewfinder and enables streaming video. + * + */ + void PlayL(); + + /** + * Pauses session. + * Holds display and disables streaming video to network. + * + */ + void PauseL(); + + /** + * Tells whether session is paused or not + */ + TBool IsPlayingL(); + + public: + + TMusEngCameraHandler(); + + void SetSession( CMceSession* aSession ); + + void InitializeL( CMceCameraSource& aCamera ); + + void InitializeZoomStepSize(); + + void ReadCameraUsageKeyL(); + + TInt ZoomStepSize( TInt64& aTime ); + + private: + + enum TCurrentCamera + { + ECameraNotAvailable = KErrNotFound, + EBackCamera = 0, + EFrontCamera = 1 + }; + + private: // New functions + + TInt CamerasAvailableL( TCurrentCamera& aCurrentCamera ); + + void ChangeCameraL( TCurrentCamera aCurrentCamera ); + + void ChangeActiveCameraL( TCurrentCamera aNewCamera ); + + private: // Data + + CMceSession* iSession; // Not owned + + TCameraInfo iCameraInfo; + + TInt iDefaultBrightness; + + TInt64 iZoomInTime; + + TInt64 iZoomOutTime; + + TInt iSmallZoomStep; + + TInt iBigZoomStep; + + TCurrentCamera iCurrentCamera; + + MusSettingsKeys::TUseCamera iCameraUsage; + }; + +#endif + diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshengine/inc/musengclipsession.h --- a/mmsharing/mmshengine/inc/musengclipsession.h Thu Aug 19 09:51:39 2010 +0300 +++ b/mmsharing/mmshengine/inc/musengclipsession.h Tue Aug 31 15:12:07 2010 +0300 @@ -23,116 +23,35 @@ #include "musengmceoutsession.h" #include "musunittesting.h" - class MMusEngClipSessionObserver; class CMusEngLiveSession; class CMceFileSource; class CMceAudioStream; class CMceVideoStream; class CMceAudioCodec; +class CMusEngClipVideoPlayer; + class CMusEngClipSession : public CMusEngMceOutSession { MUS_UNITTEST( UT_CMusEngClipSession ) + MUS_UNITTEST( UT_CMusEngMceSession ) - public: + public: // Constructors and destructor /** - * + * Constructor */ - IMPORT_C static CMusEngClipSession* NewL( - const TRect& aRect, - MMusEngSessionObserver& aSessionObserver, - MMusEngOutSessionObserver& aOutSessionObserver, - MMusEngClipSessionObserver& aClipSessionObserver, - TUint aSipProfileId = 0 ); + static CMusEngClipSession* NewL(); /** - * + * Destructor */ ~CMusEngClipSession(); - - public: // new API - - /** - * Sets file to be shared during session. - * @pre File cannot be DRM protected - * @post InviteL can be called - * @leave One of the system wide error codes - * @param aFileName Name of the file to be shared - */ - IMPORT_C void SetClipL( const TDesC& aFileName ); - - /** - * Starts or stops fast forwarding the clip. Clip is left paused after - * stopping the fast forwarding. - * @pre Session is ongoing - * @param aUseFFWD ETrue to start FFWD, EFalse to stop it. - */ - IMPORT_C void FastForwardL( TBool aUseFFWD ); - - /** - * Starts or stops fast rewinding the clip. Clip is left paused after - * stopping the fast rewinding. - * @pre Session is ongoing - * @param aUseFRWD ETrue to start FRWD, EFalse to stop it. - */ - IMPORT_C void FastRewindL( TBool aUseFRWD ); - - /** - * Returns current position as time interval. - */ - IMPORT_C TTimeIntervalSeconds PositionL(); - - /** - * Returns duration of current clip as time interval - */ - IMPORT_C TTimeIntervalSeconds DurationL(); - - /** - * - */ - IMPORT_C void SetPositionL (const TTimeIntervalSeconds &aPosition); - - /** - * Starts transcoding of file. After the transcoding is complete, - * file to be shared is changed into the transcoded file. - * @pre MMusEngClipSessionObserver::TranscodingNeeded is called - * @param aFileName Name of the transcoding output file. - */ - IMPORT_C void TranscodeL( const TFileName& aFileName ); - - /** - * Cancels transcoding of file. - * @pre TranscodeL has been called succesfully and transcoding - * is not completed - */ - IMPORT_C void CancelTranscodeL(); - - - public: // implementation of virtual API from CMusEngMceOutSession - - /** - * Resumes previously paused session. - * Continues showing file on display, resumes clip's audio, continues - * playing file and enables streaming to network. - * @leave KErrNotReady if called during FFWD or FRWD - */ - IMPORT_C void PlayL(); - - /** - * Pauses session. - * Holds display, mutes clip's audio, pauses file and - * disables all streaming to network. - * @leave KErrNotReady if called during FFWD or FRWD - */ - IMPORT_C void PauseL(); - - /** - * Tells whether session is paused or not - */ - IMPORT_C TBool IsPlayingL(); + public: // from MLcSession + + MLcVideoPlayer* LocalVideoPlayer(); protected: // implementation of virtual helper from CMusEngMceOutSession @@ -173,86 +92,26 @@ private: - /** - * - */ - CMusEngClipSession( MMusEngSessionObserver& aSessionObserver, - MMusEngOutSessionObserver& aOutSessionObserver, - MMusEngClipSessionObserver& aClipSessionObserver, - const TRect& aRect ); + CMusEngClipSession(); - /** - * @leave KErrPermissionDenied if file is DRM protected - */ - void ConstructL( TUint aSipProfileId ); + void ConstructL(); private: // HELPERS - - /** - * - */ - TBool IsProtectedFileL( const TDesC& aClipFile ); void AddAmrCodecL( CMceAudioStream& aAudioStream ); - void AddVideoCodecL( CMceVideoStream& aVideoStream, TBool aIgnoreNegotiated = EFalse ); - - TBool HasClipEnded(); + void AddVideoCodecL( CMceVideoStream& aVideoStream ); - TBool IsRewindFromEnd(); - - /** - * Returns current position as microseconds. - */ - TTimeIntervalMicroSeconds PositionMicroSecondsL(); - - /** - * Constructs audio stream structure during session completion and adds - * it to session. - * @param aLocalBundle All local streams are supposed to be added to - * this bundle - * @pre iSession != NULL - */ void ConstructAudioStructureL( CMceStreamBundle& aLocalBundle ); - void DetermineBufferingPeriod( CMceMediaStream& aStream ); - - TBool IsH264Supported() const; - - void HandleTranscodingFailureL( TInt aError ); - - TInt DoCompleteTranscoding(); - - void DeleteTranscodingDestinationFileL(); + void DetermineBufferingPeriod( CMceMediaStream& aStream ); private: // Data - - /** - * Reference to live session observer interface. - */ - MMusEngClipSessionObserver& iClipSessionObserver; - TFileName iFileName; - - TBool iTranscodingOngoing; - - TTime iFFWDStartTime; - TTime iFRWDStartTime; - + CMusEngClipVideoPlayer* iClipVideoPlayer; TTime iBufferingStartedTime; - TTimeIntervalMicroSeconds iBufferingPeriod; - - TTimeIntervalMicroSeconds iDelayFileEndingPos; - TTimeIntervalMicroSeconds iPreviousPos; - TBool iClipEnded; - - TFileName iTranscodingDestFileName; - TBool iRewindedToBeginning; - TBool iTranscodingRequiredDueMissingOptions; - TBool iPause; - }; -#endif +#endif // MUSHENGCLIPSESSION_H diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshengine/inc/musengclipsessionobserver.h --- a/mmsharing/mmshengine/inc/musengclipsessionobserver.h Thu Aug 19 09:51:39 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,79 +0,0 @@ -/* -* 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: -* -*/ - - -#ifndef MUSENGCLIPSESSIONOBSERVER_H -#define MUSENGCLIPSESSIONOBSERVER_H - -// INCLUDES -#include - -// CLASS DECLARATION - -/** -* An interface to be implemented by users of Multimedia Sharing Engine -* if they wish to receive clip sharing specific events. -* -* This observer is set using CMusEngClipSession::SetSessionObserver function. -* -*/ -class MMusEngClipSessionObserver - { - public: - - /** - * Indicates that shared clip has ended. - */ - virtual void EndOfClip() = 0; - - /** - * Indicates that chosen clip must be transcoded before sharing. - * @param aDueUnknownRemoteCapabilities, ETrue if transcoding is needed because - * it is unknown whether remote end can support current format of clip. - */ - virtual void TranscodingNeeded(TBool aDueUnknownRemoteCapabilities) = 0; - - /** - * Indicates that transcoding has progressed. - * @param aPercentage Percentage of completion - */ - virtual void TranscodingProgressed( TInt aPercentage ) = 0; - - /** - * Indicates that transcoding has successfully complited - * but session establishment is not yet proceeding. - */ - virtual void TranscodingCompletedInit() = 0; - - /** - * Indicates that transcoding has successfully complited - * and session establishment continues. - */ - virtual void TranscodingCompletedFinalize() = 0; - - /** - * Indicates that transcoding has failed. - */ - virtual void TranscodingFailed() = 0; - - /** - * Handle specific case that rewinding from end of file. - */ - virtual void RewindFromEndL() = 0; - }; - -#endif diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshengine/inc/musengclipvideoplayer.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/mmshengine/inc/musengclipvideoplayer.h Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,105 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + + +#ifndef MUSHENGCLIPVIDEOPLAYER_H +#define MUSHENGCLIPVIDEOPLAYER_H + +// INCLUDES +#include "musenglocalvideoplayer.h" +#include "musunittesting.h" +#include + +// CLASS DECLARATION +class CMusEngClipVideoPlayer : + public CMusEngLocalVideoPlayer, + public MLcSourceFileControl + { + MUS_UNITTEST( UT_CMusEngClipVideoPlayer ) + + public: // Constructors and destructor + + static CMusEngClipVideoPlayer* NewL( + MMusEngDisplayHandler& aDisplayHandler, + MLcAudioControl& aLcAudioControl ); + + ~CMusEngClipVideoPlayer(); + + public: // New functions + + TBool HasClipEnded(); + + void SetBufferingPeriod( const TTimeIntervalMicroSeconds& aPeriod ); + + public: // From MLcVideoPlayer + + TBool LcIsPlayingL(); + + void LcPlayL(); + + void LcPauseL(); + + MLcSourceFileControl* LcSourceFileControl(); + + public: // From MLcSourceFileControl + + void SetLcFileNameL( const TFileName& aFileName ); + + TFileName& LcFileName(); + + void LcFastForwardL( TBool aUseFFWD ); + + void LcFastRewindL( TBool aUseFRWD ); + + TTimeIntervalSeconds LcFileDurationL(); + + TTimeIntervalSeconds LcFilePositionL(); + + void SetLcFilePositionL( const TTimeIntervalSeconds& aPosition ); + + private: // Constructors + + CMusEngClipVideoPlayer( + MMusEngDisplayHandler& aDisplayHandler, + MLcAudioControl& aLcAudioControl ); + + private: // Helper functions + + TBool IsProtectedFileL( const TDesC& aClipFile ); + + TTimeIntervalMicroSeconds PositionMicroSecondsL( + TBool aActualPosition = EFalse ); + + TTimeIntervalMicroSeconds GetVideoSinkRelativeFilePos( + const TTimeIntervalMicroSeconds& aActualPosition, + const TTimeIntervalMicroSeconds& aDuration ); + + private: // Data + + TFileName iFileName; + TTime iFFWDStartTime; + TTime iFRWDStartTime; + TTimeIntervalMicroSeconds iBufferingPeriod; + TTimeIntervalMicroSeconds iDelayFileEndingPos; + TTimeIntervalMicroSeconds iPreviousPos; + TBool iRewindedToBeginning; + }; + +#endif // MUSHENGCLIPVIDEOPLAYER_H + +// End of file + diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshengine/inc/musengdisplayhandler.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/mmshengine/inc/musengdisplayhandler.h Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,109 @@ +/* +* 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: +* +*/ + + +#ifndef MUSHENGDISPLAYHANDLER_H +#define MUSHENGDISPLAYHANDLER_H + + +#include + +// CLASS DECLARATION + +/** +* An Interface for display services +* +* @lib museng.lib +* @since S60 v3.2 +*/ +class MMusEngDisplayHandler + { + + public: + + /* + * Defines possible rotations + */ + enum TDisplayOrientation + { + EPortrait, // Normal + ELandscape // 90 degree's clockwise rotation + }; + + /** + * Returns currently assigned drawing area + * + * @return TRect This session drawing area rectangle + */ + virtual TRect Rect() const = 0; + + /** + * Sets new drawing area + * + * @param TRect This session new drawing area rectangle + */ + virtual void SetRectL( const TRect& aRect ) = 0; + + /** + * Sets secondary rect (e.g. viewfinder in twoway session) + * @param TRect This session new secondary drawing area rectangle + */ + virtual void SetSecondaryRectL( const TRect& aSecondaryRect ) = 0; + + /** + * Gets secondary rect. + * @return TRect This session secondary drawing area rectangle + */ + virtual TRect SecondaryRect() const = 0; + + /** + * Enables or disables display. Call to this function is considered + * as a permission or denial to draw to the display. + */ + virtual void EnableDisplayL( TBool aEnable ) = 0; + + /** + * Check whether display is enabled + */ + virtual TBool IsDisplayEnabled() = 0; + + /** + * Returns current display orientation. + * + * @pre Session is ongoing + * @return Current display orientation + * @leave KErrNotReady if precondition is not fullfilled + */ + virtual TDisplayOrientation OrientationL() = 0; + + /** + * Sets display orientation. + * + * @pre Session is ongoing + * @return Sets display orientation + * @leave KErrNotReady if precondition is not fullfilled + */ + virtual void SetOrientationL( TDisplayOrientation aOrientation ) = 0; + + /** + * Check if display is actively displaying content + * @return ETrue if is displaying content, otherwise EFalse + */ + virtual TBool IsDisplayActive() = 0; + }; + +#endif diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshengine/inc/musenglivesession.h --- a/mmsharing/mmshengine/inc/musenglivesession.h Thu Aug 19 09:51:39 2010 +0300 +++ b/mmsharing/mmshengine/inc/musenglivesession.h Tue Aug 31 15:12:07 2010 +0300 @@ -16,66 +16,37 @@ */ -#ifndef MUSHENGLIVESESSION_H -#define MUSHENGLIVESESSION_H +#ifndef MUSENGLIVESESSION_H +#define MUSENGLIVESESSION_H // USER #include "musengmceoutsession.h" #include "musunittesting.h" +#include "mussettings.h" +#include "musengcamerahandler.h" // SYSTEM -#include +#include // FORWARD DECLARATIONS class MMusEngLiveSessionObserver; -class CMusEngOrientationHandler; +class CMusEngLiveVideoPlayer; + -class CMusEngLiveSession : public CMusEngMceOutSession +class CMusEngLiveSession : + public CMusEngMceOutSession { + MUS_UNITTEST( UT_CMusEngMceSession ) MUS_UNITTEST( UT_CMusEngOutSession ) MUS_UNITTEST( UT_CMusEngLiveSession ) - MUS_UNITTEST( UT_CMusEngOrientationHandler ) - + public: - - /** - * Creates new MultimediaSharing Live session. - * - * @param aFileName Media filename - * @param aRect UI drawing area. It is allowed handle from engine - * @param aSessionObserver Interface for session specific callbacks - * @param aOutSessionObserver Interface for outsession specific callbacks - * @param aLiveSessionObserver interface for live session specific - * callbacks - * @param aSipProfileId SIP profile to be used, 0 is default profile - * @return CMusEngLiveSession* New instanse of specified class - */ - IMPORT_C static CMusEngLiveSession* NewL( - const TDesC& aFileName, - const TRect& aRect, - MMusEngSessionObserver& aSessionObserver, - MMusEngOutSessionObserver& aOutSessionObserver, - MMusEngLiveSessionObserver& aLiveSessionObserver, - TUint aSipProfileId = 0); /** * Creates new MultimediaSharing Live session. - * - * @param aRect UI drawing area. It is allowed handle from engine - * @param aSessionObserver Interface for session specific callbacks - * @param aOutSessionObserver Interface for outsession specific callbacks - * @param aLiveSessionObserver interface for live session specific - * callbacks - * @param aSipProfileId SIP profile to be used, 0 is default profile * @return CMusEngLiveSession* New instanse of specified class */ - IMPORT_C static CMusEngLiveSession* NewL( - const TRect& aRect, - MMusEngSessionObserver& aSessionObserver, - MMusEngOutSessionObserver& aOutSessionObserver, - MMusEngLiveSessionObserver& aLiveSessionObserver, - TUint aSipProfileId = 0 ); - + static CMusEngLiveSession* NewL(); public: @@ -84,169 +55,10 @@ */ ~CMusEngLiveSession(); - - - public: // NEW LIVE SESSION SPECIFIC API FUNCTIONS - - /** - * Gets current zoom factor - * - * @pre Session is established - * @leave KErrNotReady if precondition not fullfilled - */ - IMPORT_C TInt CurrentZoomL() const; - - /** - * Sets new zoom factor - * - * @pre Session is established - * @pre MinZoomL <= aNewZoomFactor <= MaxZoomL - * @leave KErrNotReady if session is not established - */ - IMPORT_C void SetZoomL( TInt aNewZoomFactor ); - - /** - * Gets minimum zoom factor - * - * @pre Session is established - * @leave KErrNotReady if precondition not fullfilled - */ - IMPORT_C TInt MinZoomL() const; - - /** - * Gets maximum zoom factor - * - * @pre Session is established - * @leave KErrNotReady if precondition not fullfilled - */ - IMPORT_C TInt MaxZoomL() const; + public: // from MLcSession + + MLcVideoPlayer* LocalVideoPlayer(); - /** - * Increases zoom factor by one. - * - * @pre Session is established - * @leave KErrNotReady if precondition not fullfilled - */ - IMPORT_C void ZoomInL(); - - /** - * Decreases zoom factor by one. - * - * @pre Session is established - * @leave KErrNotReady if precondition not fullfilled - */ - IMPORT_C void ZoomOutL(); - - /** - * Sets zoom factor to default. - * - * @pre Session is established - * @leave KErrNotReady if precondition not fullfilled - */ - IMPORT_C void ZoomDefaultL(); - - /** - * Sets current brightness - * - * @pre Session is established - * @leave KErrNotReady if precondition not fullfilled - */ - IMPORT_C void SetBrightnessL( TInt aBrightness ) const; - - - /** - * Gets current brightness - * - * @pre Session is established - * @leave KErrNotReady if precondition not fullfilled - */ - IMPORT_C TInt CurrentBrightnessL() const; - - /** - * Gets maximum brightness - * - * @pre Session is established - * @leave KErrNotReady if precondition not fullfilled - */ - IMPORT_C TInt MaxBrightnessL() const; - - /** - * Gets minimum brightness - * - * @pre Session is established - * @leave KErrNotReady if precondition not fullfilled - */ - IMPORT_C TInt MinBrightnessL() const; - - /** - * Increases brightness by one. - * - * @pre Session is established - * @leave KErrNotReady if precondition not fullfilled - */ - IMPORT_C void IncreaseBrightnessL(); - - /** - * Decreases brightness by one. - * - * @pre Session is established - * @leave KErrNotReady if precondition not fullfilled - */ - IMPORT_C void DecreaseBrightnessL(); - - /** - * Sets brightness factor to default. - * - * @pre Session is established - * @leave KErrNotReady if precondition not fullfilled - */ - IMPORT_C void BrightnessDefaultL(); - - /** - * Sets brightness to automatic. - * - * @pre Session is established - * @leave KErrNotReady if precondition not fullfilled - */ - IMPORT_C void BrightnessAutoL(); - - /** - * Starts or pauses recording - */ - IMPORT_C void RecordL( TBool aRecord ); - - /** - * Tells whether recording is paused or not - */ - IMPORT_C TBool IsRecording(); - - - public: // implementation of virtual API from CMusEngMceOutSession - - /** - * Resumes previously paused session. - * Continues using viewfinder and enables streaming video. - * - */ - IMPORT_C void PlayL(); - - /** - * Pauses session. - * Holds display and disables streaming video to network. - * - */ - IMPORT_C void PauseL(); - - /** - * Tells whether session is paused or not - */ - IMPORT_C TBool IsPlayingL(); - - void EnableDisplayL( TBool aEnable ); - - void RefreshOrientationL(); - - protected: // inherited from CMusEngMceOutSession /** @@ -256,15 +68,7 @@ void CompleteSessionStructureL( CMceStreamBundle& aLocalBundle ); - private: // overrides ancestor class versions - - /** - * The state of the session has changed - * @param aSession, the session that has changed. - */ - virtual void HandleSessionStateChanged( CMceSession& aSession, - TInt aStatusCode, - const TDesC8& aReasonPhrase ); + protected: // overrides ancestor class versions /** * Sets Multimediasharing specific video codec settings like video @@ -272,7 +76,8 @@ * in session. This function overrides function in ancestor classes. * Function calls also overridden version. */ - virtual void AdjustVideoCodecL( CMceVideoCodec& aVideoCodec ); + virtual void AdjustVideoCodecL( CMceVideoCodec& aVideoCodec, + TMceSourceType aSourceType ); /** * Sets Multimediasharing specific audio codec settings. This functions @@ -287,7 +92,7 @@ virtual void DoCodecSelectionL( CMceVideoStream& aVideoStream ); - private: // from MMceStreamObserver, + protected: // from MMceStreamObserver, // overrides the function in CMusEngMceSession /** @@ -300,124 +105,24 @@ CMceMediaSink& aSink ); - private: + protected: /** * Constructor */ - CMusEngLiveSession( MMusEngSessionObserver& aSessionObserver, - MMusEngOutSessionObserver& aOutSessionObserver, - MMusEngLiveSessionObserver& aLiveSessionObserver, - const TRect& aRect, - const TDesC& aRecordedFile = KNullDesC ); + CMusEngLiveSession(); /** * Second-phase constructor */ - void ConstructL( TUint aSipProfileId ); - - - private: // Helpers - - /** - * Reads from CenRep and sets encoding device for a codec. - */ - void SetEncodingDeviceL( CMceVideoCodec& aVideoCodec ); + void ConstructL(); - /** - * Sets configuration key for a codec - */ - void SetCodecConfigKeyL( CMceVideoCodec& aVideoCodec ); - - /** - * Reads proper configuration key for a codec. NULL if not available. - * Ownership is transferred. - */ - HBufC8* ReadCodecConfigKeyL( const CMceVideoCodec& aVideoCodec ) const; - - /** - * Constructs and stores to cenrep a concatenation of all AVC config keys. - */ - void StoreEncoderConfigInfoL() const; - - /** - * Returns config key id for the provided codec. Ownership is transferred - */ - const TPtrC8 ConfigKeyIdL( const CMceVideoCodec& aVideoCodec ) const; - - - /** - * Calculate the zoom step size based time escaped. - * - * @param aTime, start time. pass iZoomInTime or iZoomOutTime as parameter - * @return TInt, return calculate result of the step size - */ - TInt ZoomStepSize( TInt64& aTime ); - - /** - * Calculates iMinZoomStep and iMaxZoomStep zoom step sizes, - * should be called before first ZoomIn()/ZoomOut() call - */ - void InitializeZoomStepSize(); - - - private: - /** - * Reference to live session observer interface. - */ - MMusEngLiveSessionObserver& iLiveSessionObserver; - - /** - * - */ - TCameraInfo iCameraInfo; - - /** - * - */ - TInt iDefaultZoomFactor; - - /** - * - */ - TInt iDefaultBrightness; - - /** - * File name for recording. If KNullDesC no recording performed. - */ - TFileName iRecordedFile; + protected: - /** - * If true, configuration key of current AVC codec must be written to - * CenRep after session establishment. - */ - TBool iStoreEncoderConfigInfo; - - /** - * latest Zoomin time - */ - - TInt64 iZoomInTime; - - /** - * latest Zoomout time - */ - TInt64 iZoomOutTime; - - /** - * - */ - TInt iSmallZoomStep; - - /** - * - */ - TInt iBigZoomStep; - - CMusEngOrientationHandler* iOrientationHandler; - + TMusEngCameraHandler iCameraHandler; + CMusEngLiveVideoPlayer* iLiveVideoPlayer; }; -#endif +#endif // MUSENGLIVESESSION_H diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshengine/inc/musenglivesessionobserver.h --- a/mmsharing/mmshengine/inc/musenglivesessionobserver.h Thu Aug 19 09:51:39 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,47 +0,0 @@ -/* -* Copyright (c) 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: -* -*/ - - -#ifndef MUSHENGLIVESESSIONOBSERVER_H -#define MUSHENGLIVESESSIONOBSERVER_H - - - -// CLASS DECLARATION - -/** -* An interface to be implemented by clients of Multimedia Sharing Engine if -* they wish to receive events about live sharing specific event. -*/ -class MMusEngLiveSessionObserver - { - - public: - - /** - * Indicates that disk has run out of space during recording. - */ - virtual void DiskFull() = 0; - - /** - * Orientation refresh ended. - */ - virtual void OrientationRefreshEnded() = 0; - - }; - -#endif diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshengine/inc/musenglivevideoplayer.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/mmshengine/inc/musenglivevideoplayer.h Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,83 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + + +#ifndef MUSHENGLIVEVIDEOPLAYER_H +#define MUSHENGLIVEVIDEOPLAYER_H + +// INCLUDES +#include "musenglocalvideoplayer.h" +#include + +// FORWARD DECLARATIONS +class CMceSession; +class TMusEngCameraHandler; + +// CLASS DECLARATION +class CMusEngLiveVideoPlayer : + public CMusEngLocalVideoPlayer, + public MLcDestinationFileControl + { + public: // Constructors and destructor + + static CMusEngLiveVideoPlayer* NewL( + MMusEngDisplayHandler& aDisplayHandler, + TMusEngCameraHandler& aCameraHandler, + MLcAudioControl& aLcAudioControl ); + + ~CMusEngLiveVideoPlayer(); + + public: // From MLcVideoPlayer + + TBool LcIsPlayingL(); + + void LcPlayL( TLcVideoPlayerSource aSource=ECameraSource ); + + void LcPauseL(); + + MLcCameraControl* LcCameraControl(); + + MLcDestinationFileControl* LcDestinationFileControl(); + + MLcZoomControl* LcZoomControl(); + + MLcBrightnessControl* LcBrightnessControl(); + + public: // From MLcDestinationFileControl + + void SetLcFileNameL( const TFileName& aFileName ); + + TFileName& LcFileName(); + + void LcRecordL( TBool aRecord ); + + TBool LcIsRecording(); + + private: // Constructors + + CMusEngLiveVideoPlayer( + MMusEngDisplayHandler& aDisplayHandler, + TMusEngCameraHandler& aCameraHandler, + MLcAudioControl& aLcAudioControl ); + + private: // Data + + TFileName iFileName; + TMusEngCameraHandler& iCameraHandler; + }; + +#endif // MUSHENGLIVEVIDEOPLAYER_H diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshengine/inc/musenglocalvideoplayer.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/mmshengine/inc/musenglocalvideoplayer.h Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,47 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + + +#ifndef MUSHENGLOCALVIDEOPLAYER_H +#define MUSHENGLOCALVIDEOPLAYER_H + +// INCLUDES +#include "musengvideoplayerbase.h" + +// CLASS DECLARATION +class CMusEngLocalVideoPlayer : public CMusEngVideoPlayerBase + { + public: // Constructors and destructor + + ~CMusEngLocalVideoPlayer(); + + public: // from CMusEngVideoPlayerBase + + TLcVideoPlayerState LcVideoPlayerState() const; + + void SetLcWindowRectL( TRect aRect ); + + TRect LcWindowRect(); + + protected: // Constructors + + CMusEngLocalVideoPlayer( + MMusEngDisplayHandler& aDisplayHandler, + MLcAudioControl& aLcAudioControl ); + }; + +#endif // MUSHENGLOCALVIDEOPLAYER_H diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshengine/inc/musengmceoutsession.h --- a/mmsharing/mmshengine/inc/musengmceoutsession.h Thu Aug 19 09:51:39 2010 +0300 +++ b/mmsharing/mmshengine/inc/musengmceoutsession.h Tue Aug 31 15:12:07 2010 +0300 @@ -23,9 +23,8 @@ #include "musengmcesession.h" #include "musunittesting.h" - // FORWARD DECLARATIONS -class MMusEngOutSessionObserver; +class MLcUiProvider; class CMceStreamBundle; // CLASS DECLARATION @@ -46,54 +45,14 @@ */ ~CMusEngMceOutSession(); - - public: // NEW API FUNCTIONS - - /** - * Sends invite to specified address. Session establishment is done in - * pause mode meaning that no RTP will be sent to network as a - * consequence of established session. PlayL() can be called any time - * during session establishment or after that in order to allow - * RTP sending. - * @leave KErrAlreadyExists if session establishment is already - * in progress - */ - IMPORT_C void InviteL( const TDesC& aRecipient ); - - /** - * Cancels Invite. - * @pre Invite is sent - */ - IMPORT_C void CancelInviteL( ); + public: // From MLcSession + + const TDesC& RemoteDisplayName(); - /** - * If codecs supported by recipient are known e.g. because of OPTIONS - * query, they can be communicated to engine via this function - * @param aVideoCodecs Comma separated list of supported codecs - */ - IMPORT_C void SetSupportedVideoCodecListL( const TDesC& aVideoCodecs ); - - - public: // VIRTUAL API - - /** - * Resumes previously paused session. Exact behavior depends on - * exact session type. - */ - virtual void PlayL() = 0; - - /** - * Pauses session. Exact behavior depends on exact session type. - */ - virtual void PauseL() = 0; - - /** - * Tells whether session is paused or not - * @pre Call of InviteL has been completed - */ - virtual TBool IsPlayingL() = 0; - - + void EstablishLcSessionL(); + + void TerminateLcSessionL(); + protected: // Must be implemented in derived class /** @@ -103,6 +62,7 @@ virtual void CompleteSessionStructureL( CMceStreamBundle& aLocalBundle ) = 0; + virtual void AddDisplayL( CMceMediaStream& aStream ); protected: // May be overridden in derived classes @@ -115,7 +75,15 @@ */ virtual void EstablishSessionL(); + TBool IsH264Supported() const; + /** + * + */ + virtual void CreateMceSessionStructureL( TBool aForceSdpBandwidth = + EFalse ); + + protected: // helper function inherited from CMusEngMceSession /** @@ -129,7 +97,8 @@ * session. This function overrides function in base class and may * be further overridden. Function calls also overridden version. */ - void AdjustVideoCodecL( CMceVideoCodec& aVideoCodec ); + void AdjustVideoCodecL( CMceVideoCodec& aVideoCodec, + TMceSourceType aSourceType ); /** * Sets Multimediasharing specific audio codec settings like audio and @@ -145,60 +114,66 @@ /** * Constructor */ - CMusEngMceOutSession( const TRect& aRect, - MMusEngSessionObserver& aSessionObserver, - MMusEngOutSessionObserver& aOutSessionObserver ); + CMusEngMceOutSession(); /** * Second-phase constructor */ - void ConstructL( TUint aSipProfileId ); - - - private: + void ConstructL(); - /** - * - */ - void CreateMceSessionStructureL(); + + private: // from MMusSipProfileUser, overrides base class definition + + virtual void ProfileRegistered(); + - /** - * Add privacy sip header if call privacy is switched on else otherwise. - */ - void AddPrivacyHeaderL( CDesC8Array& aHeaders ); + private: + void DoInviteL( const TDesC& aRecipient = KNullDesC ); + + HBufC* ResolveRecipientLC(); + + static TInt AsyncBrakeCompleted( TAny* aPtr ); - protected: // DATA + static TInt RegistrationTimerExpired( TAny* aPtr ); - /** - * Callback reference to outsession observer interface. - */ - MMusEngOutSessionObserver& iOutSessionObserver; + static TInt InvitationResponseTimerExpired( TAny* aPtr ); + + void InitRecipientNotFoundHandling(); + + void HandleRecipientNotFound(); - /** - * ETrue if operator specific behavior is expected - */ - TBool iPrivate; + TBool DoSyncRetryL(); + + void SplitL( const TDesC& aDes, const TDesC& aChar, CDesCArray* aArray ); - /** - * ETrue if private number is turn on - */ - TBool iPrivateNumber; + HBufC* ReadDescPropertyL( TUint aKey ); + + TBool IgnoreErrorNote(); + HBufC* RemoteAddressL() const; + + void InputRecipientL( TDes& aRecipientAddress ); protected: // DATA - /** - * Recipient of session to be constructed - */ - HBufC8* iRecipient; - + HBufC* iRemoteDisplayName; + HBufC8* iRecipient; HBufC8* iVideoCodecList; - + TInt iTriedInvitations; + HBufC* iRemoteSipAddressProposal; + CDeltaTimer* iDeltaTimer; + TCallBack iAsyncBrakeCallBack; + TDeltaTimerEntry iAsyncBrakeEntry; + TCallBack iRegistrationCallBack; + TCallBack iInvitationResponseCallBack; + TDeltaTimerEntry iRegistrationEntry; + TDeltaTimerEntry iInvitationResponseEntry; + TBool iRegistrationPending; + TBool iAddressQueried; private: MUS_UNITTEST ( UT_CMusEngOutSession ) - }; #endif //MUSHENGMCESESSION_H diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshengine/inc/musengmcesession.h --- a/mmsharing/mmshengine/inc/musengmcesession.h Thu Aug 19 09:51:39 2010 +0300 +++ b/mmsharing/mmshengine/inc/musengmcesession.h Tue Aug 31 15:12:07 2010 +0300 @@ -16,22 +16,27 @@ */ -#ifndef MUSHENGMCESESSION_H -#define MUSHENGMCESESSION_H +#ifndef MUSENGMCESESSION_H +#define MUSENGMCESESSION_H // USER -#include "musengsession.h" #include "musengsessiondurationtimerobserver.h" #include "musunittesting.h" #include "mussipprofileuser.h" +#include "musengdisplayhandler.h" +#include "musengaudioroutingobserver.h" // SYSTEM +#include +#include #include #include #include #include #include +#include +// FORWARD DECLARATIONS class CMceManager; class CMceSession; class CMceVideoStream; @@ -39,8 +44,10 @@ class CMceVideoCodec; class CMceAudioCodec; class CMusEngSessionDurationTimer; -class MMusEngSessionObserver; class CMusSipProfileHandler; +class CMusEngTelephoneUtils; +class MMusEngAudioRoutingObserver; +class MLcSessionObserver; // CONSTANTS @@ -51,14 +58,20 @@ _LIT8( KMusEngSessionSdpLineXApplication, "a=X-application:com.nokia.rtvs\r\n" ); _LIT8( KMusEngSessionSdpLineApplication , "a=application:com.gsma.rts\r\n" ); _LIT8( KMusEngSessionSdpLineType, "a=type:videolive\r\n" ); -_LIT8( KMusEngSessionSdpLineBandwidthLine , "b=AS" ); +_LIT8( KMusEngSessionSdpLineBandwidthLine , "b=AS:" ); _LIT8( KMusEngSessionSdpLineBandwidthField , "b=AS:85\r\n" ); +_LIT8( KMusEngSessionSdpLineTiasLine , "b=TIAS:" ); _LIT8( KMusPPreferredIdentity, "P-Preferred-Identity" ); -_LIT8( KMusPrivacyHeader, "Privacy" ); -_LIT8( KMusAnonymousHeader, "\"Anonymous\" " ); +_LIT8( KMusEngNewLine , "\r\n" ); -const TInt KMusEngMaxVolume = 10; -const TInt KMusEngMinVolume = 0; +const TInt KMusTiasMultiplier = 1000; +const TUint8 KMusEngRtpKeepAliveTimer = 5; +const TUint8 KMusEngKeepAlivePayloadTypeVideoH263 = 96; +const TUint8 KMusEngKeepAlivePayloadTypeAudio = 97; +const TUint8 KMusEngKeepAlivePayloadTypeVideoAvc = 98; + +// Value for uninitialized rect +const TInt KMusEngRectNotInit = 1000; // CLASS DECLARATION @@ -72,26 +85,18 @@ * * @lib musengine.lib */ -class CMusEngMceSession : public CMusEngSession, +class CMusEngMceSession : public CBase, + public MLcSession, + public MLcAudioControl, public MMceSessionObserver, public MMceInSessionObserver, public MMceStreamObserver, public MMceRtpObserver, public MMusEngSessionDurationTimerObserver, - public MMusSipProfileUser + public MMusSipProfileUser, + public MMusEngDisplayHandler, + public MMusEngAudioRoutingObserver { - - public: - - /* - * Defines possible rotations - */ - enum TDisplayOrientation - { - EPortrait, // Normal - ELandscape // 90 degree's clockwise rotation - }; - public: /** @@ -99,51 +104,35 @@ */ ~CMusEngMceSession(); - - public: // API FUNCTIONS - - /** - * Terminates session. - * - * @pre Session is established - * @post Session is ready to be deleted - * @leave KErrNotReady if precondition is not fullfilled - */ - IMPORT_C void TerminateL(); - - /** - * Get session time return estabilished session time - * - * @return TTime returns time if connection established else < 0 - */ - IMPORT_C TTimeIntervalSeconds GetSessionTime() const; + + public: // from MMusEngDisplayHandler /** - * Returns current connection state + * Returns currently assigned drawing area * - * @return TBool returns current connection state + * @return TRect This session drawing area rectangle */ - IMPORT_C TBool ConnectionActive() const; - - /** - * Returns presence or absence of audio in session. - * - * @pre Session is ongoing - * @return ETrue if session contains audio. - * @leave KErrNotReady if precondition is not fullfilled - */ - IMPORT_C TBool ContainsAudioL(); + TRect Rect() const; /** - * Returns state of local playback meaning if playback is muted or not. + * Sets new drawing area * - * @pre Session is ongoing - * @return ETrue if session does not contain audio or contained - * audio is muted. - * @leave KErrNotReady if precondition is not fullfilled + * @param TRect This session new drawing area rectangle + */ + void SetRectL( const TRect& aRect ); + + /** + * Sets secondary rect (e.g. viewfinder in twoway session) + * @param TRect This session new secondary drawing area rectangle */ - IMPORT_C TBool IsMutedL(); - + void SetSecondaryRectL( const TRect& aSecondaryRect ); + + /** + * Gets secondary rect. + * @return TRect This session secondary drawing area rectangle + */ + virtual TRect SecondaryRect() const; + /** * Returns current display orientation. * @@ -151,7 +140,7 @@ * @return Current display orientation * @leave KErrNotReady if precondition is not fullfilled */ - IMPORT_C TDisplayOrientation OrientationL(); + TDisplayOrientation OrientationL(); /** * Sets display orientation. @@ -160,79 +149,106 @@ * @return Sets display orientation * @leave KErrNotReady if precondition is not fullfilled */ - IMPORT_C void SetOrientationL( TDisplayOrientation aOrientation ); - - /** - * Returns state of the screen device. - * - * @pre Session is ongoing - */ - IMPORT_C TBool IsDisplayEnabledL(); - - public: // VIRTUAL API - - // No virtual api - - - public: // from CMusEngSession - - /** - * Increases volume level by one - * - * @pre Session is ongoing - */ - IMPORT_C void VolumeUpL(); - - /** - * Decreases volume level by one - * - * @pre Session is ongoing - */ - IMPORT_C void VolumeDownL(); - - /** - * Set volume value - * @pre Session is ongoing - * @param aVal the value of volume - */ - IMPORT_C void SetVolumeL( TInt aVal ); + void SetOrientationL( TDisplayOrientation aOrientation ); /** * Permission to draw on screen device. * * @pre Session is ongoing */ - IMPORT_C void EnableDisplayL( TBool aEnable ); - + void EnableDisplayL( TBool aEnable ); + /** - * Implements virtual from CMusEngSession + * Implements virtual from MMusEngDisplayHandler + * + * @pre Session is ongoing + */ + TBool IsDisplayEnabled(); + + /** + * Implements virtual from MMusEngDisplayHandler * * @pre Session is ongoing */ - IMPORT_C void MuteL(); + TBool IsDisplayActive(); + + + public: // From MMusEngAudioRoutingObserver + + void AudioRoutingChanged(); + + + public: // From MLcSession + + virtual TLcSessionState LcSessionState() const; + + void SetLcSessionObserver( MLcSessionObserver* aObserver ); + + void SetLcUiProvider( MLcUiProvider* aUiProvider ); + + virtual MLcVideoPlayer* RemoteVideoPlayer(); + + virtual MLcVideoPlayer* LocalVideoPlayer(); + + virtual const TDesC& LocalDisplayName(); + + virtual const TDesC& RemoteDisplayName(); + + TInt SetParameter( TInt aId, TInt aValue ); - /** - * Implements virtual from CMusEngSession - * - * @pre Session is ongoing - */ - IMPORT_C void UnmuteL(); + TInt ParameterValue( TInt aId ); + + TBool IsBackgroundStartup(); + + TInt SetForegroundStatus( TBool aIsForeground ); + + const TDesC& RemoteDetails(); + + void UpdateLcSessionL(); + + TBool SendDialTone( TChar aKey); + + + public: // From MLcAudioControl - void RefreshOrientationL(); + TBool IsLcAudioMutedL(); + + void MuteLcAudioL( TBool aMute ); + + TBool IsLcMicMutedL(); + + void MuteLcMicL( TBool aMute ); + + TBool IsEnablingLcLoudspeakerAllowed(); + + void EnableLcLoudspeakerL( TBool aEnabled ); + TBool IsLcLoudspeakerEnabled(); + TInt LcVolumeL(); + + void SetLcVolumeL( TInt aValue ); + + void IncreaseLcVolumeL(); + + void DecreaseLcVolumeL(); + + public: + + MLcSessionObserver* LcSessionObserver(); + + MLcUiProvider* LcUiProvider(); + protected: // CONSTRUCTORS /** * Constructor * */ - CMusEngMceSession( const TRect& aRect, - MMusEngSessionObserver& aSessionObserver ); + CMusEngMceSession(); /** * Second-phase constructor - * */ void ConstructL(); @@ -258,7 +274,8 @@ * gets called for every video codec in session. To be overridden in * sibling classes if needed. */ - virtual void AdjustVideoCodecL( CMceVideoCodec& aVideoCodec ); + virtual void AdjustVideoCodecL( CMceVideoCodec& aVideoCodec, + TMceSourceType aSourceType ); /** * Sets Multimediasharing specific audio codec settings like audio MMF @@ -274,13 +291,27 @@ */ virtual void DoCodecSelectionL( CMceVideoStream& aVideoStream ); + virtual void RectChangedL(); protected: // HELPER FUNCTIONS - /** - * - */ - void RectChangedL(); + void InformObserverAboutSessionStateChange(); + + void InformObserverAboutSessionUpdate(); + + void InformObserverAboutSessionFailure( TInt aReason ); + + void InformObserverAboutPlayerStateChange( MLcVideoPlayer* aPlayer ); + + void InformObserverAboutPlayerUpdate( MLcVideoPlayer* aPlayer ); + + void InformObserverAboutPlayerFailure( + MLcVideoPlayer* aPlayer, + TInt aReason ); + + void InformUiProviderAboutReceivingStart(); + + MLcUiProvider& LcUiProviderL(); /** * Sets session specific SDP lines to a session. @@ -323,15 +354,9 @@ void Reject( CMceInSession& aSession, const TDesC8& aReason = KNullDesC8(), TUint32 aCode = 0 ); - - protected: // from CMusEngSession - - /** - * - */ - void VolumeChanged( TInt aVolume, TBool aAudioRouteChanged ); - - + + void SaveContactL( const TDesC8& aAddress ); + protected: // from MMceInSessionObserver /** @@ -485,14 +510,30 @@ void SsrcRemoved( CMceMediaStream& aStream, CMceRtpSource& aSource, TUint aSsrc ); - - private: // from MMusSipProfileUser + + + private: // from MMusSipProfileUser + + virtual TBool IsRoamingBetweenAPsAllowed(); + + virtual void ProfileRegistered(); + - TBool IsRoamingBetweenAPsAllowed(); - private: // HELPER FUNCTIONS /** + * Adds b=AS and b=TIAS lines to the array + */ + void AddSdpBandwidthAttributesL( CDesC8Array& aSdpLinesArray, + TInt aBandwidthAs ); + + /** + * Checks whether AS or TIAS bandwidth attributes present in the array + */ + TBool IsBandwidthAttributeSet( MDesC8Array* aSdpLinesArray ); + + + /** * Callback */ void UpdateTimerEvent(); @@ -518,19 +559,58 @@ const CMceVideoCodec& aBestBitrateVideoCodec ); void DoCodecModeBasedRemovalL( CMceVideoStream& aVideoStream ); + /** - * This function currently used to remove the AVC codec support based on - * cenrep encoder device uid value. - */ - void DoCodecConfigurationBasedRemovalL( CMceVideoStream& aVideoStream ); - - - protected: // MEMBERS + * Get session time return estabilished session time + * @return TTime returns time if connection established else < 0 + */ + TTimeIntervalSeconds GetSessionTime() const; + + protected: + + /** + * Reads from CenRep and sets encoding device for a codec. + */ + void SetEncodingDeviceL( CMceVideoCodec& aVideoCodec ); /** - * Callback reference to session observer interface. + * Sets configuration key for a codec + */ + void SetCodecConfigKeyL( CMceVideoCodec& aVideoCodec ); + + /** + * Reads proper configuration key for a codec. NULL if not available. + * Ownership is transferred. + */ + HBufC8* ReadCodecConfigKeyL( const CMceVideoCodec& aVideoCodec ) const; + + /** + * Constructs and stores to cenrep a concatenation of all AVC config keys. + */ + void StoreEncoderConfigInfoL() const; + + /** + * Returns config key id for the provided codec. Ownership is transferred */ - MMusEngSessionObserver& iSessionObserver; + const TPtrC8 ConfigKeyIdL( const CMceVideoCodec& aVideoCodec ) const; + + + protected: // Data + + /** + * Drawing area rect. + */ + TRect iRect; + + /** + * Telephone utilities. + */ + CMusEngTelephoneUtils* iTelephoneUtils; + + /** + * UID used to identify application, needed to create MCE manager + */ + TUid iMceManagerUid; /** * Class for connecting to MCE server. @@ -559,14 +639,44 @@ */ TBool iOperatorVariant; - /** + /** * The handler for the SIP profile related to this session */ CMusSipProfileHandler* iSipProfileHandler; - private: + /** + * Session state for MLcSession + */ + MLcSession::TLcSessionState iLcSessionState; + + /** + * If true, configuration key of current AVC codec must be written to + * CenRep after session establishment. + */ + TBool iStoreEncoderConfigInfo; + + /** + * Remote details + */ + HBufC* iRemoteDetails; + + private: // New functions + + void StreamStreaming( CMceMediaStream& aStream ); + + private: // Data /** + * The session observer, if present. + */ + MLcSessionObserver* iLcSessionObserver; + + /** + * The UI provider, if present. + */ + MLcUiProvider* iLcUiProvider; + + /** * It is assumed, that user has only one instance of this class. * The same instance is passed between MCE and user, but the data * inside of this container is just updated for each event. @@ -578,7 +688,7 @@ */ TTime iStartTime; - CMusEngSessionDurationTimer* iUpdateTimer; + CMusEngSessionDurationTimer* iUpdateTimer; /** * Value indicating seconds gone since last received RTCP sender or @@ -591,11 +701,18 @@ * muted as part of disabling bundled display sink */ TBool iExplicitlyMuted; - - + + /** + * Value indicates whether session was started in background mode. + * (see IsBackgroundStartup()). Once application comes to foreground, + * iBackground is set to EFalse + */ + TBool iBackground; + MUS_UNITTEST( UT_CMusEngSession ) MUS_UNITTEST( UT_CMusEngMceSession ) MUS_UNITTEST( UT_CMusEngReceiveSession ) + MUS_UNITTEST( UT_CMusEngSessionManager ) }; -#endif //MUSHENGMCESESSION_H +#endif // MUSENGMCESESSION_H diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshengine/inc/musengmceutils.h --- a/mmsharing/mmshengine/inc/musengmceutils.h Thu Aug 19 09:51:39 2010 +0300 +++ b/mmsharing/mmshengine/inc/musengmceutils.h Tue Aug 31 15:12:07 2010 +0300 @@ -24,6 +24,7 @@ #include #include +#include class CMceSession; @@ -33,6 +34,7 @@ class CMceVideoStream; class CMceSpeakerSink; +const TUint KMusEngNoAssociatedSourceType = KMaxTUint; /** * Static class including utility methods to locate and manipulate MCE @@ -53,6 +55,14 @@ static TBool IsVideoInStream( CMceMediaStream& aStream ); /** + * Tells if a stream is a video stream with rtp sink. + * + * @param aStream Stream to be investigated + * @return ETrue if parameter is a video stream with a RTP sink + */ + static TBool IsVideoOutStream( CMceMediaStream& aStream ); + + /** * Tells if a stream is an audio stream with rtp source. * * @param aStream Stream to be investigated @@ -93,44 +103,62 @@ /** * Gets handle to a media sink of spesified type contained by * a mediastream. If there are several sink instances, first one is - * returned. Ownership is not transferred. + * returned. If associated source type is defined, sink in stream having + * the source is tried to be searched. If no such match, first matching + * sink is returned. Ownership is not transferred. * * @return Media sink of the spesified type. NULL if none exists */ - static CMceMediaSink* GetMediaSink( CMceMediaStream& aStream, - TMceSinkType aType ); + static CMceMediaSink* GetMediaSink( + CMceMediaStream& aStream, + TMceSinkType aType, + TMceSourceType aAssociatedSourceType = KMusEngNoAssociatedSourceType ); /** * Gets handle to a media sink of spesified type contained by * a mediastream. If there are several sink instances, first one is - * returned. Ownership is not transferred. + * returned. If associated source type is defined, sink in stream having + * the source is tried to be searched. If no such match, first matching + * sink is returned. Ownership is not transferred. * * @return Media sink of the spesified type. * @leave KErrNotFound if there is no sink of spesified type */ - static CMceMediaSink* GetMediaSinkL( CMceMediaStream& aStream, - TMceSinkType aType ); + static CMceMediaSink* GetMediaSinkL( + CMceMediaStream& aStream, + TMceSinkType aType, + TMceSourceType aAssociatedSourceType = KMusEngNoAssociatedSourceType ); /** * Gets handle to a media sink of spesified type contained by * a session. If there are several sink instances, first one is - * returned. Ownership is not transferred. + * returned. If associated source type is defined, sink in stream having + * the source is tried to be searched. If no such match, first matching + * sink is returned. Ownership is not transferred. * * @return Media sink of the spesified type. NULL if none exists */ - static CMceMediaSink* GetMediaSink( CMceSession& aSession, - TMceSinkType aType ); + static CMceMediaSink* GetMediaSink( + CMceSession& aSession, + TMceSinkType aType, + TMceSourceType aAssociatedSourceType = KMusEngNoAssociatedSourceType, + TBool aStrictMatch = EFalse ); /** * Gets handle to a media sink of spesified type contained by * a session. If there are several sink instances, first one is - * returned. Ownership is not transferred. + * returned. If associated source type is defined, sink in stream having + * the source is tried to be searched. If no such match, first matching + * sink is returned. Ownership is not transferred. * * @return Media sink of the spesified type. * @leave KErrNotFound if there is no sink of spesified type */ - static CMceMediaSink* GetMediaSinkL( CMceSession& aSession, - TMceSinkType aType ); + static CMceMediaSink* GetMediaSinkL( + CMceSession& aSession, + TMceSinkType aType, + TMceSourceType aAssociatedSourceType = KMusEngNoAssociatedSourceType, + TBool aStrictMatch = EFalse ); /** * Gets handle to a speaker sink contained by specified stream @@ -161,19 +189,44 @@ * * @return Display sink, NULL if none exists */ - static CMceDisplaySink* GetDisplay( CMceSession& aSession ); + static CMceDisplaySink* GetDisplay( CMceSession& aSession, + TBool aPreferViewFinder = ETrue ); /** * Gets handle to a display sink. If there are several display - * sink instances, first one is returned. + * sink instances view finder is preferred with default arguments. * Ownership is not transferred. * * @return Display sink * @leave KErrNotFound if there is no display */ - static CMceDisplaySink* GetDisplayL( CMceSession& aSession ); + static CMceDisplaySink* GetDisplayL( CMceSession& aSession, + TBool aPreferViewFinder = ETrue ); /** + * Gets handle to a display sink. Ownership is not transferred. + * + * @return Display sink, NULL if none exists + */ + static CMceDisplaySink* GetReceivingDisplay( CMceSession& aSession ); + + /** + * Gets handle to a receiving display sink. Ownership is not transferred. + * + * @return Display sink + * @leave KErrNotFound if there is no display + */ + static CMceDisplaySink* GetReceivingDisplayL( CMceSession& aSession ); + + /** + * Gets handle to a viewfinder display sink. Ownership is not transferred. + * + * @return Display sink + * @leave KErrNotFound if there is no display + */ + static CMceDisplaySink* GetVfDisplay( CMceSession& aSession ); + + /** * Adds display sink to specified stream if one does not exist already. * Display rect is set in both cases to a specified one. * Display is disabled by default. @@ -185,7 +238,8 @@ */ static void AddDisplayL( CMceMediaStream& aStream, CMceManager& aManager, - const TRect& aDisplayRect ); + const TRect& aDisplayRect, + TBool aDisable = EFalse ); /** * Adds speaker sink to specified stream if one does not exist already. @@ -203,6 +257,18 @@ */ static void DisableStreamL( CMceMediaStream& aStream ); + /** + * Enables or disables display sink. If the state is already correct, + * nothing is done. + */ + static void DoEnableDisplayL( CMceDisplaySink& aDisplay, TBool aEnable ); + + /** + * Enables inactivity timer if possible. + */ + static TInt EnableInactivityTimer( CMceSession& aSession, + TUint32 aInactivityTimeout ); + }; diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshengine/inc/musengorientationhandler.h --- a/mmsharing/mmshengine/inc/musengorientationhandler.h Thu Aug 19 09:51:39 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,83 +0,0 @@ -/* -* Copyright (c) 2005-2006 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: -* -*/ - - -#ifndef MUSENGORIENTATIONHANDLER_H -#define MUSENGORIENTATIONHANDLER_H - - -// INTERNAL INCLUDE -#include "musunittesting.h" - -// SYSTEM INCLUDE -#include - -class CMusEngLiveSession; -class MMusEngLiveSessionObserver; - -/** -* -* @lib musengine.lib -*/ -NONSHARABLE_CLASS(CMusEngOrientationHandler) : public CTimer - - { - MUS_UNITTEST( UT_CMusEngOrientationHandler ) - - public: - - /** - * Creates new instance of CMusEngOrientationHandler - */ - static CMusEngOrientationHandler* NewL( CMusEngLiveSession& aSession, - MMusEngLiveSessionObserver& aSessionObserver ); - - /** - * Destructor - * - */ - ~CMusEngOrientationHandler(); - - - public: // API - - void RefreshOrientationL(); - void UpdateL(); - - protected: - - void RunL(); - TInt RunError( TInt aError ); - - private: - - CMusEngOrientationHandler( CMusEngLiveSession& aSession, - MMusEngLiveSessionObserver& aSessionObserver ); - void ConstructL(); - - void DoDelayedResumeL(); - - private: // DATA - - CMusEngLiveSession& iSession; - MMusEngLiveSessionObserver& iSessionObserver; - TBool iRefreshBeginStateCamera; - TBool iRefreshBeginStateDisplay; - - }; - -#endif // MUSENGORIENTATIONHANDLER_H diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshengine/inc/musengoutsessionobserver.h --- a/mmsharing/mmshengine/inc/musengoutsessionobserver.h Thu Aug 19 09:51:39 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,57 +0,0 @@ -/* -* 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: -* -*/ - - -#ifndef MUSENGOUTSESSIONOBSERVER_H -#define MUSENGOUTSESSIONOBSERVER_H - -// INCLUDES - -// CLASS DECLARATION - -/** -* An interface to be implemented by users of Multimedia Sharing Engine if they -* wish to receive feedback from outsent INVITE. All the callback functions -* represent an answer from network to sent INVITE. -*/ -class MMusEngOutSessionObserver - { - public: - - /** - * Indicates that MT has rejected session. ( e.g. 603 DECLINE ). - */ - virtual void SessionRejected() = 0; - - /** - * The following functions represent a specific reason in answer - * to sent INVITE. - */ - - virtual void SessionBadRequest() = 0; // 400 - virtual void SessionUnauthorized() = 0; // 401 - virtual void SessionPaymentRequired() = 0; // 402 - virtual void SessionRecipientNotFound() = 0; // 404 - virtual void SessionProxyAuthenticationRequired() = 0; // 407 - virtual void SessionRequestTimeOut() = 0; // 408 - virtual void SessionUnsupportedMediaType() = 0; // 415 - virtual void SessionBusyHere() = 0; // 486 - virtual void SessionRequestCancelled() = 0; // 487 - virtual void SessionTemporarilyNotAvailable() = 0; // 480 - }; - -#endif \ No newline at end of file diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshengine/inc/musengreceivesession.h --- a/mmsharing/mmshengine/inc/musengreceivesession.h Thu Aug 19 09:51:39 2010 +0300 +++ b/mmsharing/mmshengine/inc/musengreceivesession.h Tue Aug 31 15:12:07 2010 +0300 @@ -19,18 +19,20 @@ #ifndef MUSHENGREVEIVESESSION_H #define MUSHENGREVEIVESESSION_H - - +// INCLUDES #include "musengmcesession.h" #include "musenguriparser.h" #include "musunittesting.h" - #include +// FORWARD DECLARATIONS class MMusEngReceiveSessionObserver; class CMceInSession; +class CMusEngRemoteVideoPlayer; -class CMusEngReceiveSession : public CMusEngMceSession + +class CMusEngReceiveSession : + public CMusEngMceSession { MUS_UNITTEST( UT_CMusEngMceSession ) MUS_UNITTEST( UT_CMusEngReceiveSession ) @@ -39,36 +41,30 @@ /** * Creates new MultimediaSharing Receive session. - * - * @param aRect UI drawing area. It is allowed handle from engine - * @param aEngObserver Engine specific callbacks - * @param aSessionObserver Session specific callbacks * @return CMusEngReceiveSession* New instanse of specified class */ - IMPORT_C static CMusEngReceiveSession* NewL( - const TRect& aRect, - MMusEngSessionObserver& aSessionObserver, - MMusEngReceiveSessionObserver& aReceiveSessionObserver ); + static CMusEngReceiveSession* NewL(); + /** * Destructor * * @since S60 v3.2 */ ~CMusEngReceiveSession(); - + + public: // From MLcSession + + TLcSessionState LcSessionState() const; + + void EstablishLcSessionL(); - public: // API - - /** - * Accept or deny processed invitation - * - * @param aAccept ETrue if session is to be accepted and EFalse if - * to be rejected. - */ - IMPORT_C void AcceptInvitationL(const TBool& aAccept); - - - private: // Overrides function in CMusEngMceSession + void TerminateLcSessionL(); + + MLcVideoPlayer* RemoteVideoPlayer(); + + const TDesC& RemoteDisplayName(); + + protected: // Overrides function in CMusEngMceSession /** * The state of the session has changed. @@ -86,7 +82,8 @@ * session. This function overrides function in base class. * Function calls also overridden version. */ - virtual void AdjustVideoCodecL( CMceVideoCodec& aVideoCodec ); + virtual void AdjustVideoCodecL( CMceVideoCodec& aVideoCodec, + TMceSourceType aSourceType ); /** * Sets Multimediasharing specific audio codec settings like keepalive @@ -104,10 +101,9 @@ * @param aVideoStream */ virtual void DoCodecSelectionL( CMceVideoStream& aVideoStream ); - - - private: // from MMceInSessionObserver - // overrides the function in CMusEngMceSession + + protected: // from MMceInSessionObserver + // overrides the function in CMusEngMceSession /** * Incoming session invitation. The CMCEInSession is given to the @@ -138,7 +134,7 @@ TMceTransactionDataContainer* aContainer ); - private: // from MMceStreamObserver, + protected: // from MMceStreamObserver, // overrides the function in CMusEngMceSession /** @@ -148,25 +144,28 @@ * @param aStream, the stream that uses the source. */ void StreamStateChanged( CMceMediaStream& aStream ); + + protected: // from MMceRtpObserver + + void InactivityTimeout( CMceMediaStream& aStream, + CMceRtpSource& aSource ); - private: // CONSTRUCTORS + + protected: // CONSTRUCTORS - CMusEngReceiveSession( - MMusEngSessionObserver& aSessionObserver, - MMusEngReceiveSessionObserver& aReceiveSessionObserver, - const TRect& aRect ); + CMusEngReceiveSession(); void ConstructL(); - private: // HELPERS + protected: // HELPERS CMceInSession* InSession(); void PrepareToRequire100RelL( - TMceTransactionDataContainer* aContainer); + TMceTransactionDataContainer* aContainer ); - void CompleteSessionStructureL(); + virtual void CompleteSessionStructureL(); /** * Parse P-Asserted-Identity header. @@ -174,18 +173,50 @@ * if tel uri not found it suppose that telephone number * is in sip url. */ - void ParseAssertedIdentity( - TMceTransactionDataContainer* aContainer ); + void ParseAssertedIdentity( TMceTransactionDataContainer* aContainer ); + /* + * Checks for buffering event happened & receiving already not started + * If yes, start the RTP inactivity timer and indicate to observer + * about videoplayer state change. + * else will not do anything. Bascially ignores the event. + */ + void ReceivingStarted(); - private: // DATA - - MMusEngReceiveSessionObserver& iReceiveSessionObserver; + /** + * Checks for receiving already started and display sink is enabled + * If yes ETrue else otherwise. + */ + TBool IsDisplayActive(); + + protected: // DATA // Set to ETrue if CMceInSession::RingL has already been called TBool iRingLCalled; // identity of originator parsed form P-Asserted-Identity field TBuf8 iIdentity; + + HBufC8* iOriginator; + + HBufC* iRemoteDisplayName; + + /// The remote video player implementing MLcVideoPlayer + CMusEngRemoteVideoPlayer* iRemoteVideoPlayer; + + TUint32 iReceivingInactivityTimeout; + + TUint8 iKeepaliveTimer; + + private: + /* Flag for whether receiving started. It will go EFalse + * when RTP inactivity timeout happen. + */ + TBool iReceiving; + /* Flag to indicate buffering event happened. This flag is for + * optimization purpose since buffering event is the only place + * we can be sure about some packets were received. + */ + TBool iBuffered; }; #endif diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshengine/inc/musengreceivesessionobserver.h --- a/mmsharing/mmshengine/inc/musengreceivesessionobserver.h Thu Aug 19 09:51:39 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,58 +0,0 @@ -/* -* 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: -* -*/ - - -#ifndef MUSHENGRECEIVESESSIONOBSERVER_H -#define MUSHENGRECEIVESESSIONOBSERVER_H - -// INCLUDES - -#include - -// CLASS DECLARATION - -/** -* Observer interface to be implemented by clients interested about notifications -* of receiving (MT) side session specific events. -*/ -class MMusEngReceiveSessionObserver - { - - public: - - /** - * There is new incoming session. - * Session is not yet handled in any way and cannot yet be accepted - * or rejected. User should not be notified at this stage. - */ - virtual void IncomingSessionPreNotification() = 0; - - /** - * There is new incoming session ready to be accepted or rejected. - * User can be notified. - */ - virtual void IncomingSession( const TDesC& aOriginator, - const TDesC& aOriginatorIdentity ) = 0; - - /** - * Current receiving session is buffering received RTP. - */ - virtual void StreamBuffering() = 0; - - }; - -#endif \ No newline at end of file diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshengine/inc/musengremotevideoplayer.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/mmshengine/inc/musengremotevideoplayer.h Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,58 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + + +#ifndef MUSHENGREMOTEVIDEOPLAYER_H +#define MUSHENGREMOTEVIDEOPLAYER_H + +// INCLUDES +#include +#include "musengvideoplayerbase.h" + +// FORWARD DECLARATIONS +class CMceSession; +class MLcWindow; +class MLcAudioControl; + +// CLASS DECLARATION +class CMusEngRemoteVideoPlayer : public CMusEngVideoPlayerBase + { + public: // Constructors and destructor + + static CMusEngRemoteVideoPlayer* NewL( MMusEngDisplayHandler& aDisplayHandler, + MLcAudioControl& aLcAudioControl ); + + ~CMusEngRemoteVideoPlayer(); + + + public: // from CMusEngVideoPlayerBase + + TLcVideoPlayerState LcVideoPlayerState() const; + + TBool LcIsPlayingL(); + + private: // Constructors + + CMusEngRemoteVideoPlayer( MMusEngDisplayHandler& aDisplayHandler, + MLcAudioControl& aLcAudioControl ); + void ConstructL(); + + private: // Data + + }; + +#endif // MUSHENGREMOTEVIDEOPLAYER_H diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshengine/inc/musengsession.h --- a/mmsharing/mmshengine/inc/musengsession.h Thu Aug 19 09:51:39 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,231 +0,0 @@ -/* -* 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: -* -*/ - - -#ifndef MUSENGSESSION_H -#define MUSENGSESSION_H - -// USER INCLUDES -#include "musunittesting.h" -#include "musengvolumechangeobserver.h" - -//SYSTEM INCLUDES -#include - - -// FORWARD DECLARATIONS -class CMusEngTelephoneUtils; -class CMusSipProfileHandler; -class CRepository; -class MMusEngAudioRoutingObserver; -class MMusEngVolumeChangeObserver; - -// CLASS DECLARATION - -/** -* Base class for Multimedia Sharing Engine sessions, inherited by -* CMusEngMceSession. -* -* CMusEngSession encapsulates all common activities example using -* resources. -* -* @lib musengine.lib -*/ -class CMusEngSession : public CBase, - public MMusEngVolumeChangeObserver - { - MUS_UNITTEST( UT_CMusEngSession ) - - public: - - /** - * Desctructor, finalize session - * - */ - ~CMusEngSession(); - - - public: // API FUNCTIONS - - /** - * Returns currently assigned drawing area - * - * @return TRect This session drawing area recttangle - */ - IMPORT_C TRect Rect() const; - - /** - * Sets new drawing area - * - * @param TRect This session new drawing area rectangle - */ - IMPORT_C void SetRectL( const TRect& aRect ); - - /** - * Checks if audio routing can be changed using EnableLoudspeakerL - * - * @return ETrue if audio routing can be changed using EnableLoudspeakerL - */ - IMPORT_C TBool AudioRoutingCanBeChanged() const; - - /** - * Checks if audio routing is headset - * - * @return ETrue if audio routing is headset - */ - IMPORT_C TBool IsAudioRoutingHeadset() const; - - /** - * Checks if audio routing is LoudSpeaker - * - * @return ETrue if audio routing is LoudSpeaker and - * currentMode != iAudioOutputAtStartup - */ - IMPORT_C TBool IsAudioRoutingLoudSpeaker() const; - /** - * Activates/deactivates loadspeaker - * - * @param TBool Enable or disable loudspeaker - * @param TBool Show activation dialog - */ - IMPORT_C void EnableLoudspeakerL( TBool aEnable, TBool aShowDialog ); - - /** - * Checks is loudspeaker enabled or disabled. - * - * @return TBool true if enabled - */ - IMPORT_C TBool IsLoudSpeakerEnabled() const; - - /** - * Returns current volume level - */ - IMPORT_C TInt VolumeL() const; - - /** - * Mutes CS call microphone. - */ - IMPORT_C void MuteMicL( TBool aMute ); - - /** - * Returns current CS call mic mute state. - */ - IMPORT_C TBool IsMicMutedL(); - - /** - * Sets audio routing observer. Can be set to NULL in order to indicate - * ending of observing changes in audio routing. - */ - IMPORT_C void SetAudioRoutingObserver( - MMusEngAudioRoutingObserver* aObserver ); - - /** - * Sets volume level change observer. Can be set to NULL in order to indicate - * ending of observing changes in volume level. - */ - IMPORT_C void SetVolumeChangeObserver( - MMusEngVolumeChangeObserver* aObserver ); - - public: // VIRTUAL API FUNCTIONS - - /** - * Increases volume level by one. - */ - IMPORT_C virtual void VolumeUpL(); - - /** - * Decreases volume level by one. - */ - IMPORT_C virtual void VolumeDownL(); - - /** - * Set volume value - * @param aVal the value of volume - */ - IMPORT_C virtual void SetVolumeL( TInt aVal ); - - /** - * Enables or disables display. Call to this function is considered - * as a permission or denial to draw to the display. - */ - virtual void EnableDisplayL( TBool aEnable ) = 0; - - /** - * Mutes current audio stream meaning that any audio is not played or - * sent to network. - */ - virtual void MuteL() = 0; - - /** - * Unmute current audio stream meaning that all the audio is played - * and if needed also sent to network. - */ - virtual void UnmuteL() = 0; - - /** - * - */ - virtual void RefreshOrientationL() = 0; - - - protected: // INTERNAL - - virtual void RectChangedL() = 0; - - - //from MMusEngVolumeChangeObserver - virtual void VolumeChanged( TInt aVolume, TBool aAudioRouteChanged ); - - protected: - - /** - * Constructor, private cannot be instantiate - * - * @param aRect reserved drawing area for this session - */ - CMusEngSession( const TRect& aRect ); - - - protected: - - /** - * second-phase constructor, called by those session specific - * constructors - */ - void ConstructL(); - - - private: // MEMBERS - - /** - * Drawing area rect. - */ - TRect iRect; - - /** - * Telephone utilities. - */ - CMusEngTelephoneUtils* iTelephoneUtils; - - /** - * Volume change observer - */ - MMusEngVolumeChangeObserver* iVolumeObserver; - - }; - -#endif //MUSENGSESSION_H diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshengine/inc/musengsessiondurationtimer.h --- a/mmsharing/mmshengine/inc/musengsessiondurationtimer.h Thu Aug 19 09:51:39 2010 +0300 +++ b/mmsharing/mmshengine/inc/musengsessiondurationtimer.h Tue Aug 31 15:12:07 2010 +0300 @@ -87,12 +87,6 @@ * @since S60 v3.2 */ void DoCancel(); - - /** - * - * @since S60 v3.2 - */ - TInt RunError( TInt aError ); private: // DATA diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshengine/inc/musengsessionmanager.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/mmshengine/inc/musengsessionmanager.h Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,76 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + +#ifndef CMUSENGSESSIONMANAGER_H +#define CMUSENGSESSIONMANAGER_H + +// INCLUDES +#include "musunittesting.h" +#include "muspropertyobserver.h" +#include +#include + +// FORWARD DECLARATIONS +class MLcSession; +class CMusEngMceSession; +class MLcUiProvider; +class CMusPropertyWatch; + + +class CMusEngSessionManager : public CLcEngine, public MMusPropertyObserver + { + public: + + static CMusEngSessionManager* NewL(); + ~CMusEngSessionManager(); + + public: // From CLcEngine + + MLcSession& Session(); + + TBool IsFeatureSupported( TLcFeature aLcFeature ); + + public: // From MMusPropertyObserver + + virtual void PropertyChanged( const TUint aKey, const TInt aValue ); + + virtual void HandlePropertyError( const TInt aReason ); + + private: // Constructors + + CMusEngSessionManager(); + void ConstructL(); + + private: // New functions + + CMusEngMceSession* CreateMusSessionL( + MultimediaSharing::TMusUseCase aUseCase ); + + private: // Data + + CMusEngMceSession* iSession; + + CMusPropertyWatch* iUseCaseWatch; + + MultimediaSharing::TMusUseCase iCurrentUseCase; + + MUS_UNITTEST( UT_CMusEngSessionManager ) + }; + +#endif // CMUSENGSESSIONMANAGER_H + +// end of file diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshengine/inc/musengsessionobserver.h --- a/mmsharing/mmshengine/inc/musengsessionobserver.h Thu Aug 19 09:51:39 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,102 +0,0 @@ -/* -* 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: -* -*/ - - -#ifndef MUSHENGSESSIONOBSERVER_H -#define MUSHENGSESSIONOBSERVER_H - - -#include - -// CLASS DECLARATION - -/** -* An interface to be implemented by users of Multimedia Sharing Engine if -* they wish to receive events from session and streaming state changes. -* -* @lib museng.lib -* @since S60 v3.2 -*/ -class MMusEngSessionObserver - { - - public: - - /** - * Indicates that incoming or outgoing session has been established. - * - * @since S60 v3.2 - */ - virtual void SessionEstablished() = 0; - - /** - * Indicates that session has been terminated. - * After this function call session object must deleted. - * Function is synchronous, use active object which actives - * delete. - * - * @since S60 v3.2 - */ - virtual void SessionTerminated() = 0; - - /** - * Current session has lost network connection. - * - * @since S60 v3.2 - */ - virtual void SessionConnectionLost() = 0; - - /** - * Undefined exception has occurred. Session is useless and must be - * deleted. Function is synchronous, use active object which actives - * delete. - * - * @since S60 v3.2 - */ - virtual void SessionFailed() = 0; - - /** - * Current stream state is changed to idle meaning that - * we are not sending or receiving RTP. - * - * @since S60 v3.2 - */ - virtual void StreamIdle() = 0; - - /** - * Current session state is changed to idle. - * - * @since S60 v3.2 - */ - virtual void StreamStreaming() = 0; - - /** - * Update time information of this session - * - * @since S60 v3.2 - */ - virtual void SessionTimeChanged( const TTimeIntervalSeconds& aSeconds ) = 0; - - /** - * RTCP inactivity timeout has occurred. - * - * @since S60 v3.2 - */ - virtual void InactivityTimeout() = 0; - }; - -#endif \ No newline at end of file diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshengine/inc/musengtelephoneutils.h --- a/mmsharing/mmshengine/inc/musengtelephoneutils.h Thu Aug 19 09:51:39 2010 +0300 +++ b/mmsharing/mmshengine/inc/musengtelephoneutils.h Tue Aug 31 15:12:07 2010 +0300 @@ -27,22 +27,19 @@ #include #include #include -#include // FORWARD DECLARATIONS class CRepository; class CTelephonyAudioRouting; class CPhCltCommandHandler; class MMusEngAudioRoutingObserver; -class MMusEngVolumeChangeObserver; /** * Utility class to handle all phone related requests: * Audio routing, volume control and microphone muting. */ class CMusEngTelephoneUtils : public CActive, - public MTelephonyAudioRoutingObserver, - public MCenRepNotifyHandlerCallback + public MTelephonyAudioRoutingObserver { MUS_UNITTEST( UT_CMusEngTelephoneUtils ) MUS_UNITTEST( UT_CMusEngSession ) @@ -52,14 +49,14 @@ /** * */ - static CMusEngTelephoneUtils* NewL(); + static CMusEngTelephoneUtils* NewL( + MMusEngAudioRoutingObserver& aAudioRoutingObserver ); /** * */ ~CMusEngTelephoneUtils(); - public: // API /** @@ -67,29 +64,12 @@ * * @return ETrue if audio routing can be changed using LoudspeakerL */ - TBool AudioRoutingCanBeChanged() const; - - /** - * Checks if audio routing is headset - * - * @return ETrue if audio routing is headset - */ - TBool IsAudioRoutingHeadset() const; - - /** - * Checks if audio routing is LoudSpeaker - * - * @return ETrue if audio routing is LoudSpeaker and - * currentMode != iAudioOutputAtStartup - */ - TBool IsAudioRoutingLoudSpeaker() const; - + TBool AudioRoutingCanBeChanged(); + /** * Changes the audio routing between loudspeaker and handset. - * - * @param aShowDialog if ETrue, user is notified about new audio routing */ - void LoudspeakerL( TBool aEnable, TBool aShowDialog ); + void LoudspeakerL( TBool aEnable ); /** * @@ -97,15 +77,10 @@ TBool IsLoudSpeakerEnabled() const; /** - * Returns current CS call volume level from central repository + * */ TInt GetVolumeL() const; - /** - * Returns locally cached CS call volume level - */ - TInt GetVolume() const; - /** * */ @@ -119,19 +94,7 @@ /** * Returns current CS call mic mute state. */ - TBool IsMicMutedL(); - - /** - * Sets audio routing observer. Can be set to NULL in order to indicate - * ending of observing changes in audio routing. - */ - void SetAudioRoutingObserver( MMusEngAudioRoutingObserver* aObserver ); - - /** - * Sets volume level observer. Can be set to NULL in order to indicate - * ending of observing changes in volume level. - */ - void SetVolumeChangeObserver( MMusEngVolumeChangeObserver* aObserver ); + TBool IsMicMutedL(); private: // inherited from CActive @@ -139,7 +102,6 @@ * */ void RunL(); - TInt RunError( TInt aError ); /** * Cancels outstanding request to phone client @@ -153,37 +115,28 @@ * Available outputs have changed */ void AvailableOutputsChanged( - CTelephonyAudioRouting& aTelephonyAudioRouting ); + CTelephonyAudioRouting& aTelephonyAudioRouting ); /** * Some other application has changed audio output routing */ void OutputChanged( - CTelephonyAudioRouting& aTelephonyAudioRouting ); + CTelephonyAudioRouting& aTelephonyAudioRouting ); /** * Our request to change audio output routing has completed */ void SetOutputComplete( - CTelephonyAudioRouting& aTelephonyAudioRouting, - TInt aError ); - - /** - * Set output if setting is currently allowed. Leaves with KErrAccessDenied - * if setting is not allowed. - */ - void DoSetOutputL( CTelephonyAudioRouting::TAudioOutput aAudioOutput ); - - private:// From MCenRepNotifyHandlerCallback - - void HandleNotifyGeneric( TUint32 aId ); + CTelephonyAudioRouting& aTelephonyAudioRouting, + TInt aError ); private: /** * Default C++ constructor */ - CMusEngTelephoneUtils(); + CMusEngTelephoneUtils( + MMusEngAudioRoutingObserver& aAudioRoutingObserver ); /** * 2nd phase constructor @@ -200,14 +153,10 @@ */ TInt ValidateVolume( const TInt aVolume ) const; - /** - * Checks current volume level and notifies observer, if volume changed - * @param aAudioRouteChanged, ETrue if volume check should be done - * because of audio route change - */ - void UpdateCurrentVolume( TBool aAudioRouteChanged ); - + private: // DATA + + MMusEngAudioRoutingObserver& iAudioRoutingObserver; /** * Stores the audio routing state at startup. @@ -228,27 +177,6 @@ * Command handler for muting the microphone */ CPhCltCommandHandler* iPhoneCommandHandler; - - /** - * Not owned. - */ - MMusEngAudioRoutingObserver* iAudioRoutingObserver; - - TBool iShowDialog; - - /** - * Central repository notifier instance. Owned. - */ - CCenRepNotifyHandler* iNotifier; - - /** - * Volume change observer - * Used to inform session about volume updates - */ - MMusEngVolumeChangeObserver* iVolumeObserver; - - TInt iCurrentVolume; }; - -#endif // MUSENGTELEPHONEUTILS_H \ No newline at end of file +#endif // MUSENGTELEPHONEUTILS_H diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshengine/inc/musengtwowayrecvsession.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/mmshengine/inc/musengtwowayrecvsession.h Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,143 @@ +/* +* 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: +* +*/ + + +#ifndef MUSHENGTWOWAYRECVSESSION_H +#define MUSHENGTWOWAYRECVSESSION_H + +// USER +#include "musengreceivesession.h" +#include "musunittesting.h" +#include "mussettings.h" +#include "musengcamerahandler.h" + +// SYSTEM +#include + +// FORWARD DECLARATIONS +class CMceDisplaySink; +class CMceStreamBundle; +class CMusEngLiveVideoPlayer; + + +class CMusEngTwoWayRecvSession : public CMusEngReceiveSession + { + MUS_UNITTEST( UT_CMusEngTwoWayRecvSession ) + + + public: + /** + * Creates new MultimediaSharing two-way receive session. + * @return CMusEngTwoWayRecvSession* New instanse of specified class + */ + static CMusEngTwoWayRecvSession* NewL(); + + public: + + /** + * Destructor + */ + ~CMusEngTwoWayRecvSession(); + + public: + + void EnableDisplayL( TBool aEnable ); + + TBool IsDisplayEnabled(); + + CMusEngMceSession::TDisplayOrientation OrientationL(); + + void SetOrientationL( TDisplayOrientation aOrientation ); + + public: + + /** + * Sets both remote (receiving video) and local (viewfinder) rects. + * + */ + void SetRectsL( const TRect& aRemoteRect, + const TRect& aLocalRect ); + + /** + * Gets camera handler (can be used for zooming etc.) + */ + TMusEngCameraHandler& Camera(); + + public: // from MLcSession + + MLcVideoPlayer* LocalVideoPlayer(); + + protected: // From CMusEngReceiveSession + + /** + * Sets local rect (viewfinder). + * + */ + void SetSecondaryRectL( const TRect& aSecondaryRect ); + + /** + * Gets local rect (viewfinder). + * + */ + TRect SecondaryRect() const; + + void CompleteSessionStructureL(); + + void RectChangedL(); + + private: + + /** + * Constructor + */ + CMusEngTwoWayRecvSession(); + + /** + * Second-phase constructor + */ + void ConstructL(); + + private: + + void CompleteSessionStructureAudioPartL( + const RPointerArray& aStreams, + CMceStreamBundle& aLocalBundle, + CMceMediaStream* aVideoInStream, + CMceMediaStream* aVideoOutStream ); + + void CompleteSessionStructureInStreamL( CMceMediaStream& aVideoInStream, + CMceStreamBundle& aLocalBundle ); + + void CompleteSessionStructureOutStreamL( CMceMediaStream& aVideoOutStream ); + + + private: + + TRect iLocalRect; + + TMusEngCameraHandler iCameraHandler; + + /// The live video player implementing MLcVideoPlayer + CMusEngLiveVideoPlayer* iLiveVideoPlayer; + + TRect iSetRemoteRect; + TRect iSetLocalRect; + + }; + +#endif + diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshengine/inc/musengtwowaysession.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/mmshengine/inc/musengtwowaysession.h Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,179 @@ +/* +* 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: +* +*/ + + +#ifndef MUSHENGTWOWAYSESSION_H +#define MUSHENGTWOWAYSESSION_H + +// USER +#include "musenglivesession.h" +#include "musunittesting.h" +#include "mussettings.h" + +// SYSTEM +#include + +// FORWARD DECLARATIONS +class MMusEngLiveSessionObserver; +class CMceDisplaySink; +class MMusEngTwoWaySessionObserver; +class CMusEngRemoteVideoPlayer; + + +class CMusEngTwoWaySession : public CMusEngLiveSession + { + MUS_UNITTEST( UT_CMusEngOutSession ) + MUS_UNITTEST( UT_CMusEngTwoWaySession ) + + + public: + /** + * Creates new MultimediaSharing Live session. + * @return CMusEngTwoWaySession* New instanse of specified class + */ + static CMusEngTwoWaySession* NewL(); + + + public: + + /** + * Destructor + */ + ~CMusEngTwoWaySession(); + + public: + + void EnableDisplayL( TBool aEnable ); + + void SetOrientationL( TDisplayOrientation aOrientation ); + + public: + + /** + * Sets both remote (receiving video) and local (viewfinder) rects. + * + */ + void SetRectsL( const TRect& aRemoteRect, + const TRect& aLocalRect ); + + public: // From MLcSession + + MLcVideoPlayer* RemoteVideoPlayer(); + + public: // from MLcFileControl + + void EnableLcFileL( TBool aEnable ); + + protected: // inherited from CMusEngMceOutSession + + /** + * Sets local rect (viewfinder). + * + */ + void SetSecondaryRectL( const TRect& aSecondaryRect ); + + /** + * Gets local rect (viewfinder). + * + */ + TRect SecondaryRect() const; + + /** + * + */ + TBool IsDisplayEnabled(); + + /** + * Checks if displaying remote video. + * + */ + TBool IsDisplayActive(); + + void RectChangedL(); + + /** + * @param aLocalBundle All local streams are supposed to be added to + * this bundle + */ + void CompleteSessionStructureL( CMceStreamBundle& aLocalBundle ); + + void AddDisplayL( CMceMediaStream& aStream ); + + void CreateMceSessionStructureL( TBool aForceSdpBandwidth = + EFalse ); + + + protected: // overrides ancestor class versions + + /** + * The state of the session has changed + * @param aSession, the session that has changed. + */ + virtual void HandleSessionStateChanged( CMceSession& aSession, + TInt aStatusCode, + const TDesC8& aReasonPhrase ); + + /** + * Sets Multimediasharing specific video codec settings like video + * bitrate maxbitrate. This functions gets called for every video codec + * in session. This function overrides function in ancestor classes. + * Function calls also overridden version. + */ + virtual void AdjustVideoCodecL( CMceVideoCodec& aVideoCodec, + TMceSourceType aSourceType ); + + private: // from MMceStreamObserver, + // overrides the function in CMusEngMceSession + + void StreamStateChanged( CMceMediaStream& aStream ); + + void InactivityTimeout( CMceMediaStream& aStream, + CMceRtpSource& aSource ); + + private: + + /** + * Constructor + */ + CMusEngTwoWaySession(); + + /** + * Second-phase constructor + */ + void ConstructL(); + + private: + + void ReceivingStarted(); + + private: // Data + + TRect iLocalRect; + + TBool iReceiving; + + TBool iBuffered; + + /// The remote video player implementing MLcVideoPlayer + CMusEngRemoteVideoPlayer* iRemoteVideoPlayer; + + TRect iSetRemoteRect; + TRect iSetLocalRect; + }; + +#endif + diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshengine/inc/musenguriparser.h --- a/mmsharing/mmshengine/inc/musenguriparser.h Thu Aug 19 09:51:39 2010 +0300 +++ b/mmsharing/mmshengine/inc/musenguriparser.h Tue Aug 31 15:12:07 2010 +0300 @@ -54,12 +54,12 @@ /** * Default constructor */ - IMPORT_C TMusEngUriParser( const TDesC16& aUri ); + TMusEngUriParser( const TDesC16& aUri ); /** * @returns Uri type */ - IMPORT_C TMusEngUriType UriType(); + TMusEngUriType UriType(); /** * @returns Parsed and validated 8-bit version of contained URI @@ -67,7 +67,7 @@ * @pre UriType() != ENotParsed * @leave KErrNotReady if precondition is not fulfilled */ - IMPORT_C HBufC8* GetUri8L(); + HBufC8* GetUri8L(); /** * @param aPrefix if ETrue, also sip: or tel:prefix is returned @@ -76,14 +76,14 @@ * @pre UriType() != ENotParsed * @leave KErrNotReady if precondition is not fulfilled */ - IMPORT_C HBufC16* GetUri16L( TBool aPrefix ); + HBufC16* GetUri16L( TBool aPrefix ); /** * Parses and validates contained URI * @leave KErrCorrupt if URI is not valid SIP or TEL URI * @post UriType() != ENotParsed */ - IMPORT_C void ParseUriL(); + void ParseUriL(); private: @@ -92,11 +92,10 @@ void HandleTelUriL(); void HandleLocalTelUriL(); - + private: // Data + TBuf8 iUri; - - TMusEngUriType iUriType; - + TMusEngUriType iUriType; }; -#endif +#endif // MUSENGURIPARSER_H diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshengine/inc/musengvideoplayerbase.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/mmshengine/inc/musengvideoplayerbase.h Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,93 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + + +#ifndef MUSHENGVIDEOPLAYERBASE_H +#define MUSHENGVIDEOPLAYERBASE_H + +// INCLUDES +#include +#include +#include + +// FORWARD DECLARATIONS +class CMceSession; +class TMusEngCameraHandler; +class MMusEngDisplayHandler; + +// CLASS DECLARATION +class CMusEngVideoPlayerBase : + public CBase, public MLcVideoPlayer, public MLcWindow + { + public: // Constructors and destructor + + ~CMusEngVideoPlayerBase(); + + public: // New functions + + void SetMceSession( CMceSession* aMceSession ); + + public: // From MLcVideoPlayer + + virtual void LcPlayL( TLcVideoPlayerSource aSource=ECameraSource ); + + virtual void LcPauseL(); + + MLcWindow* LcWindow(); + + virtual MLcCameraControl* LcCameraControl(); + + virtual MLcSourceFileControl* LcSourceFileControl(); + + virtual MLcDestinationFileControl* LcDestinationFileControl(); + + MLcAudioControl* LcAudioControl(); + + virtual MLcZoomControl* LcZoomControl(); + + virtual MLcBrightnessControl* LcBrightnessControl(); + + public: // from MLcWindow + + void EnableLcWindowL( TBool aEnable ); + + TBool IsLcWindowEnabled(); + + void SetLcWindowRectL( TRect aRect ); + + TRect LcWindowRect(); + + void SetLcWindowOrientationL( + TLcWindowOrientation aOrientation ); + + TLcWindowOrientation LcWindowOrientationL(); + + protected: // Constructors + + CMusEngVideoPlayerBase( + MMusEngDisplayHandler& aDisplayHandler, + MLcAudioControl& aLcAudioControl ); + + protected: // Data + + MMusEngDisplayHandler& iDisplayHandler; + MLcAudioControl& iLcAudioControl; + + CMceSession* iMceSession; // Not owned + }; + +#endif // MUSHENGVIDEOPLAYERBASE_H diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshengine/inc/musengvolumechangeobserver.h --- a/mmsharing/mmshengine/inc/musengvolumechangeobserver.h Thu Aug 19 09:51:39 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,46 +0,0 @@ -/* -* 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: -* -*/ - - -#ifndef MUSENGVOLUMECHANGEOBSERVER_H -#define MUSENGVOLUMECHANGEOBSERVER_H - -// INCLUDES -#include - -// CLASS DECLARATION - -/** -* An interface to be implemented by users of Multimedia Sharing Engine if -* they wish to be notified about volume level CenRep keys change -* -*/ -class MMusEngVolumeChangeObserver - { - public: - - /** - * Indicates that volume level was changed either by some other - * application or due to audio route change - * @param aVolume new volume level - * @param aAudioRouteChanged indicates whether volume level changed due - * to audio route change - */ - virtual void VolumeChanged( TInt aVolume, TBool aAudioRouteChanged ) = 0; - }; - -#endif diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshengine/inc/mussipprofilehandler.h --- a/mmsharing/mmshengine/inc/mussipprofilehandler.h Thu Aug 19 09:51:39 2010 +0300 +++ b/mmsharing/mmshengine/inc/mussipprofilehandler.h Tue Aug 31 15:12:07 2010 +0300 @@ -12,10 +12,12 @@ * Contributors: * * Description: +* Version : %version: 6.1.4 % << Don't touch! Updated by Synergy at check-out. * */ + #ifndef MUSSIPPROFILEHANDLER_H #define MUSSIPPROFILEHANDLER_H @@ -45,14 +47,13 @@ public MSIPProfileRegistryObserver, public MSIPObserver, public MSIPConnectionObserver, - public MSipProfileAlrObserver - + public MSipProfileAlrObserver { MUS_UNITTEST( UT_CMusEngSipProfileHandler ) public: - /** + /** * Creates new instance of CMusSipProfileHandler * @param aSipProfileId profile id of requested profile */ @@ -66,8 +67,8 @@ public: // API - - /** + + /** * Creates the SIP profile used. * @param aSipProfileId profile ID of requested SIP profile */ @@ -94,22 +95,25 @@ * Should be called when a MuS session terminates. */ void RefreshIapAvailabilities(); + + /** + * @return ETrue if SIP profile returned by Profile() is registered + */ + TBool IsRegistered(); + private: /** * Constructor - * */ CMusSipProfileHandler( MMusSipProfileUser& aUser ); /** * Second-phase constructor - * */ void ConstructL(); - private: // From MSIPProfileRegistryObserver /** @@ -134,15 +138,15 @@ TUint32 aProfileId, TInt aError ); - private: // From MSIPObserver - + private: // From MSIPObserver + void IncomingRequest( TUint32 aIapId, CSIPServerTransaction* aTransaction ); void TimedOut( CSIPServerTransaction& aTransaction ); - private: // MSIPConnectionObserver must be implemented to enable SIP profile - + private: // MSIPConnectionObserver must be implemented to enable SIP profile + void IncomingRequest (CSIPServerTransaction* aTransaction ); void IncomingRequest (CSIPServerTransaction* aTransaction, @@ -168,10 +172,10 @@ void ErrorOccured( TInt aError, CSIPTransactionBase& aTransaction, CSIPDialogAssocBase& aDialogAssoc ); - + void ErrorOccured( TInt aError, CSIPRefresh& aSIPRefresh ); - void ErrorOccured( TInt aError, + void ErrorOccured( TInt aError, CSIPRegistrationBinding& aRegistration ); void ErrorOccured( TInt aError, CSIPDialogAssocBase& aDialogAssoc ); @@ -179,10 +183,10 @@ void InviteCompleted( CSIPClientTransaction& aTransaction ); void InviteCanceled( CSIPServerTransaction& aTransaction ); - - void ConnectionStateChanged( CSIPConnection::TState aState ); - - private: // From MSipProfileAlrObserver + + void ConnectionStateChanged( CSIPConnection::TState aState ); + + private: // From MSipProfileAlrObserver void AlrEvent( MSipProfileAlrObserver::TEvent aEvent, TUint32 aProfileId, @@ -192,19 +196,20 @@ void AlrError( TInt aError, TUint32 aProfileId, TUint32 aSnapId, - TUint32 aIapId ); - - private: // New functions + TUint32 aIapId ); + + private: // New functions TUint32 ProfileId() const; - + private: // DATA - - MMusSipProfileUser& iUser; + + MMusSipProfileUser& iUser; CSIP* iSip; CSIPProfileRegistry* iProfileRegistry; CSipProfileAlrController* iProfileAlrController; CSIPProfile* iSipProfile; }; + #endif // MUSSIPPROFILEHANDLER_H diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshengine/inc/mussipprofileuser.h --- a/mmsharing/mmshengine/inc/mussipprofileuser.h Thu Aug 19 09:51:39 2010 +0300 +++ b/mmsharing/mmshengine/inc/mussipprofileuser.h Tue Aug 31 15:12:07 2010 +0300 @@ -1,5 +1,5 @@ /* -* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* 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" @@ -11,7 +11,7 @@ * * Contributors: * -* Description: +* Description: * */ @@ -35,7 +35,13 @@ * Checks whether roaming between access points is allowed. * @return ETrue is roaming is allowed, otherwise EFalse. */ - virtual TBool IsRoamingBetweenAPsAllowed() = 0; + virtual TBool IsRoamingBetweenAPsAllowed() = 0; + + /** + * Indicates that SIP profile has been registered. + */ + virtual void ProfileRegistered() = 0; + }; diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshengine/src/musengcamerahandler.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/mmshengine/src/musengcamerahandler.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,681 @@ +/* +* 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: +* +*/ + + +// USER +#include "musengcamerahandler.h" +#include "musunittesting.h" +#include "musengmceutils.h" +#include "musenglogger.h" + +// SYSTEM +#include +#include +#include +#include +#include +#include +#include + +const TInt KMaxBrightness = 100; +const TInt KMinBrightness = -100; +const TInt KBrightnessStepSize = 10; + + +//Number of big and small zoom steps on Zoom scale +const TInt KZoomBigStepCount = 15; +const TInt KZoomSmallStepCount = KZoomBigStepCount*2; +const TInt KZoomStepMinSize = 1; + +const TInt64 KZoomFasterTime = 333333; // 1/3 second + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +TMusEngCameraHandler::TMusEngCameraHandler() : + iSession( NULL ), + iDefaultBrightness( 0 ), + iZoomInTime(0), + iZoomOutTime(0), + iSmallZoomStep( KZoomStepMinSize ), + iBigZoomStep( KZoomStepMinSize ), + iCurrentCamera( TMusEngCameraHandler::ECameraNotAvailable ), + iCameraUsage( MusSettingsKeys::EUseCameraSwapping ) + { + } + +// ----------------------------------------------------------------------------- +// From MLcCameraControl +// ----------------------------------------------------------------------------- +// +TInt TMusEngCameraHandler::LcCameraCountL() + { + MUS_LOG( "mus: [ENGINE] -> TMusEngCameraHandler::LcCameraCountL()" ) + __ASSERT_ALWAYS( iSession != NULL, User::Leave( KErrNotReady ) ); + + CMceCameraSource* camera = MusEngMceUtils::GetCameraL( *iSession ); + __ASSERT_ALWAYS( camera != NULL, User::Leave( KErrNotReady ) ); + TInt camerasAvailable = camera->CamerasAvailable(); + + if ( camerasAvailable > 1 && + iCameraUsage != MusSettingsKeys::EUseCameraSwapping ) + { + camerasAvailable = 1; + } + + MUS_LOG1( "mus: [ENGINE] <- TMusEngCameraHandler::LcCameraCountL()", + camerasAvailable ); + return camerasAvailable; + } + +// ----------------------------------------------------------------------------- +// From MLcCameraControl +// ----------------------------------------------------------------------------- +// +TInt TMusEngCameraHandler::CurrentLcCameraIndex() + { + return iCurrentCamera; + } + +// ----------------------------------------------------------------------------- +// From MLcCameraControl +// ----------------------------------------------------------------------------- +// +void TMusEngCameraHandler::ToggleLcCameraL() + { + TCurrentCamera newCamera( TMusEngCameraHandler::EBackCamera ); + if ( iCurrentCamera == TMusEngCameraHandler::EBackCamera ) + { + newCamera = TMusEngCameraHandler::EFrontCamera; + } + ChangeCameraL( newCamera ); + } + +// ----------------------------------------------------------------------------- +// From MLcBrightnessControl +// ----------------------------------------------------------------------------- +// +TInt TMusEngCameraHandler::MinLcBrightnessL() + { + MUS_LOG( "mus: [ENGINE] -> TMusEngCameraHandler::MinLcBrightnessL()" ) + + // minimum brightness is not in camera info, but a constant + + MUS_LOG1( "mus: [ENGINE] <- TMusEngCameraHandler::MinLcBrightnessL(): %d", + KMinBrightness ) + + return KMinBrightness; + } + +// ----------------------------------------------------------------------------- +// From MLcBrightnessControl +// ----------------------------------------------------------------------------- +// +TInt TMusEngCameraHandler::MaxLcBrightnessL() + { + MUS_LOG( "mus: [ENGINE] -> TMusEngCameraHandler::MaxLcBrightnessL()" ) + + // maximum brightness is not in camera info, but a constant + + MUS_LOG1( "mus: [ENGINE] <- TMusEngCameraHandler::MaxLcBrightnessL(): %d", + KMaxBrightness ) + + return KMaxBrightness; + } + +// ----------------------------------------------------------------------------- +// From MLcBrightnessControl +// ----------------------------------------------------------------------------- +// +TInt TMusEngCameraHandler::LcBrightnessL() + { + MUS_LOG( "mus: [ENGINE] -> TMusEngCameraHandler::LcBrightnessL()" ) + + __ASSERT_ALWAYS( iSession, User::Leave( KErrNotReady ) ); + + CMceCameraSource* camera = MusEngMceUtils::GetCameraL( *iSession ); + TInt brightness = camera->BrightnessL(); + + MUS_LOG1( "mus: [ENGINE] <- TMusEngCameraHandler::LcBrightnessL(): %d", + brightness ) + + return brightness; + } + +// ----------------------------------------------------------------------------- +// From MLcBrightnessControl +// ----------------------------------------------------------------------------- +// +void TMusEngCameraHandler::SetLcBrightnessL( TInt aValue ) + { + MUS_LOG1( "mus: [ENGINE] -> TMusEngCameraHandler::SetLcBrightnessL( %d )", + aValue ) + + __ASSERT_ALWAYS( iSession, User::Leave( KErrNotReady ) ); + + CMceCameraSource* camera = MusEngMceUtils::GetCameraL( *iSession ); + camera->SetBrightnessL( aValue ); + + MUS_LOG( "mus: [ENGINE] <- TMusEngCameraHandler::SetLcBrightnessL()" ) + } + +// ----------------------------------------------------------------------------- +// From MLcBrightnessControl +// ----------------------------------------------------------------------------- +// +void TMusEngCameraHandler::IncreaseLcBrightnessL() + { + MUS_LOG( "mus: [ENGINE] -> TMusEngCameraHandler::IncreaseLcBrightnessL()" ) + __ASSERT_ALWAYS( iSession, User::Leave( KErrNotReady ) ); + + CMceCameraSource* camera = MusEngMceUtils::GetCameraL( *iSession ); + + TInt newBrightness = camera->BrightnessL() + KBrightnessStepSize; + + if ( newBrightness < KMaxBrightness ) + { + camera->SetBrightnessL( newBrightness ); + } + else + { + camera->SetBrightnessL( KMaxBrightness ); + } + + MUS_LOG( "mus: [ENGINE] <- TMusEngCameraHandler::IncreaseLcBrightnessL()" ) + } + +// ----------------------------------------------------------------------------- +// From MLcBrightnessControl +// ----------------------------------------------------------------------------- +// +void TMusEngCameraHandler::DecreaseLcBrightnessL() + { + MUS_LOG( "mus: [ENGINE] -> TMusEngCameraHandler::DecreaseLcBrightnessL()" ) + __ASSERT_ALWAYS( iSession, User::Leave( KErrNotReady ) ); + + CMceCameraSource* camera = MusEngMceUtils::GetCameraL( *iSession ); + + TInt newBrightness = camera->BrightnessL() - KBrightnessStepSize; + + if ( newBrightness > KMinBrightness ) + { + camera->SetBrightnessL( newBrightness ); + } + else + { + camera->SetBrightnessL( KMinBrightness ); + } + + MUS_LOG( "mus: [ENGINE] <- TMusEngCameraHandler::DecreaseLcBrightnessL()" ) + } + +// ----------------------------------------------------------------------------- +// From MLcZoomControl +// ----------------------------------------------------------------------------- +// +TInt TMusEngCameraHandler::MinLcZoomL() + { + MUS_LOG( "mus: [ENGINE] -> TMusEngCameraHandler::MinLcZoomL()" ) + __ASSERT_ALWAYS( iSession, User::Leave( KErrNotReady ) ); + + // Although we do not need camera for return value, we have to have it in + // order to have proper iCameraInfo + MusEngMceUtils::GetCameraL( *iSession ); + + MUS_LOG1( "mus: [ENGINE] <- TMusEngCameraHandler::MinLcZoomL( %d )", + iCameraInfo.iMinZoom ) + + return iCameraInfo.iMinZoom; + } + +// ----------------------------------------------------------------------------- +// From MLcZoomControl +// ----------------------------------------------------------------------------- +// +TInt TMusEngCameraHandler::MaxLcZoomL() + { + MUS_LOG( "mus: [ENGINE] -> TMusEngCameraHandler::MaxLcZoomL()" ) + __ASSERT_ALWAYS( iSession, User::Leave( KErrNotReady ) ); + + // Although we do not need camera for return value, we have to have it in + // order to have proper iCameraInfo + MusEngMceUtils::GetCameraL( *iSession ); + + TInt maxZoom = iCameraInfo.iMaxZoom + iCameraInfo.iMaxDigitalZoom; + + MUS_LOG1( "mus: [ENGINE] Max optical zoom( %d )", + iCameraInfo.iMaxZoom ) + MUS_LOG1( "mus: [ENGINE] Max digital zoom( %d )", + iCameraInfo.iMaxDigitalZoom ) + MUS_LOG1( "mus: [ENGINE] <- TMusEngCameraHandler::MaxLcZoomL( %d )", + maxZoom ) + + return maxZoom; + } + +// ----------------------------------------------------------------------------- +// From MLcZoomControl +// ----------------------------------------------------------------------------- +// +TInt TMusEngCameraHandler::LcZoomValueL() + { + MUS_LOG( "mus: [ENGINE] -> TMusEngCameraHandler::LcZoomValueL" ) + __ASSERT_ALWAYS( iSession, User::Leave( KErrNotReady ) ); + + CMceCameraSource* camera = MusEngMceUtils::GetCameraL( *iSession ); + + TInt currentZoom = camera->ZoomFactorL() + camera->DigitalZoomFactorL(); + + MUS_LOG1( "mus: [ENGINE] <- TMusEngCameraHandler::LcZoomValueL( %d )", + currentZoom ) + + return currentZoom; + } + +// ----------------------------------------------------------------------------- +// From MLcZoomControl +// ----------------------------------------------------------------------------- +// +void TMusEngCameraHandler::SetLcZoomValueL( TInt aValue ) + { + MUS_LOG1( "mus: [ENGINE] -> TMusEngCameraHandler::SetLcZoomValueL( %d )", + aValue ) + + __ASSERT_ALWAYS( iSession, User::Leave( KErrNotReady ) ); + __ASSERT_ALWAYS( aValue <= MaxLcZoomL() && aValue >= MinLcZoomL(), + User::Leave( KErrArgument ) ); + + CMceCameraSource* camera = MusEngMceUtils::GetCameraL( *iSession ); + + if ( aValue <= iCameraInfo.iMaxZoom ) + { + MUS_LOG( "mus: [ENGINE] Optical zoom factor increased" ) + camera->SetZoomFactorL( aValue ); + } + + if ( aValue - iCameraInfo.iMaxZoom > 0 ) + { + camera->SetDigitalZoomFactorL( aValue - iCameraInfo.iMaxZoom ); + MUS_LOG1( "mus: [ENGINE] Digital zoom factor increased to %d", + aValue - iCameraInfo.iMaxZoom ) + } + + MUS_LOG( "mus: [ENGINE] <- MusEngCameraHandler::SetLcZoomValueL()" ) + } + +// ----------------------------------------------------------------------------- +// From MLcZoomControl +// ----------------------------------------------------------------------------- +// +void TMusEngCameraHandler::LcZoomInL() + { + MUS_LOG( "mus: [ENGINE] -> TMusEngCameraHandler::LcZoomInL()" ) + __ASSERT_ALWAYS( iSession, User::Leave( KErrNotReady ) ); + + CMceCameraSource* camera = MusEngMceUtils::GetCameraL( *iSession ); + + // First try to increase optical zoom factor. If in maximum value, try to + // increase digital zoom factor. + TInt stepSize = ZoomStepSize( iZoomInTime ); + TInt zoomFactor = camera->ZoomFactorL(); + TInt zoomDigitalFactor = camera->DigitalZoomFactorL(); + + //increate optical zoom factor + if ( zoomFactor + stepSize <= iCameraInfo.iMaxZoom ) + { + //optical zoom factor is enough + camera->SetZoomFactorL( zoomFactor + stepSize ); + stepSize = 0; + } + else if (zoomFactor < iCameraInfo.iMaxZoom) + { + stepSize -= iCameraInfo.iMaxZoom - zoomFactor; + camera->SetZoomFactorL( iCameraInfo.iMaxZoom ); + } + + //increate digital zoom factor + if (stepSize > 0) + { + if ( zoomDigitalFactor + stepSize <= iCameraInfo.iMaxDigitalZoom ) + { + camera->SetDigitalZoomFactorL( zoomDigitalFactor + stepSize ); + } + else + { + camera->SetDigitalZoomFactorL( iCameraInfo.iMaxDigitalZoom ); + MUS_LOG( "mus: [ENGINE] TMusEngCameraHandler::ZoomInL(): \ + Optical and digital zoom factors are in maximum value" ) + } + } + + MUS_LOG( "mus: [ENGINE] <- TMusEngCameraHandler::LcZoomInL()" ) + } + +// ----------------------------------------------------------------------------- +// From MLcZoomControl +// ----------------------------------------------------------------------------- +// +void TMusEngCameraHandler::LcZoomOutL() + { + MUS_LOG( "mus: [ENGINE] -> TMusEngCameraHandler::LcZoomOutL()" ) + __ASSERT_ALWAYS( iSession, User::Leave( KErrNotReady ) ); + + CMceCameraSource* camera = MusEngMceUtils::GetCameraL( *iSession ); + + // First try to decrease digital zoom factor. If already zero, try to + // decrease optical zoom factor. + TInt stepSize = ZoomStepSize( iZoomOutTime ); + TInt zoomFactor = camera->ZoomFactorL(); + TInt zoomDigitalFactor = camera->DigitalZoomFactorL(); + + //decreate digital zoom factor firstly + if ( zoomDigitalFactor - stepSize >= 0 ) + { + //digital zoom factor is enough + camera->SetDigitalZoomFactorL( zoomDigitalFactor - stepSize ); + stepSize = 0; + } + else if ( zoomDigitalFactor > 0 ) + { + stepSize -= zoomDigitalFactor; + camera->SetDigitalZoomFactorL( 0 ); + MUS_LOG("mus: [ENGINE] Digigal Factor to zero") + } + + //decreate optical zoom factor firstly + if ( stepSize > 0 ) + { + if ( zoomFactor - stepSize > iCameraInfo.iMinZoom ) + { + camera->SetZoomFactorL( zoomFactor - stepSize ); + } + else + { + MUS_LOG( "mus: [ENGINE] TMusEngCameraHandler::LcZoomOutL():\ + Optical and digital zoom factors are in minimum value" ) + camera->SetZoomFactorL( iCameraInfo.iMinZoom ); + } + } + + MUS_LOG( "mus: [ENGINE] <- TMusEngCameraHandler::LcZoomOutL()" ) + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void TMusEngCameraHandler::SetSession( CMceSession* aSession ) + { + iSession = aSession; + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void TMusEngCameraHandler::InitializeL( CMceCameraSource& aCamera ) + { + aCamera.GetCameraInfo( iCameraInfo ); + + InitializeZoomStepSize(); + + iCurrentCamera = EBackCamera; + if ( iCameraUsage == MusSettingsKeys::EUseOnlySecondaryCamera ) + { + iCurrentCamera = EFrontCamera; + } + aCamera.SetCameraIndexL( (TInt)iCurrentCamera ); + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void TMusEngCameraHandler::PlayL() + { + MUS_LOG( "mus: [ENGINE] -> TMusEngCameraHandler::PlayL()" ) + + __ASSERT_ALWAYS( iSession, User::Leave( KErrNotReady ) ); + + CMceCameraSource* camera = MusEngMceUtils::GetCameraL( *iSession ); + + if ( !camera->IsEnabled() ) + { + camera->EnableL(); + } + else + { + MUS_LOG( "mus: [ENGINE] Camera already enabled, ignore request" ) + } + + MUS_LOG( "mus: [ENGINE] <- TMusEngCameraHandler::PlayL()" ) + } + + +// ----------------------------------------------------------------------------- +// Disable camera if not already disabled +// ----------------------------------------------------------------------------- +// +void TMusEngCameraHandler::PauseL() + { + MUS_LOG( "mus: [ENGINE] -> TMusEngCameraHandler::PauseL()" ) + + __ASSERT_ALWAYS( iSession, User::Leave( KErrNotReady ) ); + + CMceCameraSource* camera = MusEngMceUtils::GetCameraL( *iSession ); + + if ( camera->IsEnabled() ) + { + camera->DisableL(); + } + else + { + MUS_LOG( "mus: [ENGINE] Camera already disabled, ignore request" ) + } + + MUS_LOG( "mus: [ENGINE] <- TMusEngCameraHandler::PauseL()" ) + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +TBool TMusEngCameraHandler::IsPlayingL() + { + __ASSERT_ALWAYS( iSession, User::Leave( KErrNotReady ) ); + + return ( MusEngMceUtils::GetCameraL( *iSession )->IsEnabled() ); + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void TMusEngCameraHandler::InitializeZoomStepSize() + { + MUS_LOG( "mus: [ENGINE] -> TMusEngCameraHandler::InitializeZoomStepSize()" ) + MUS_LOG2( "iMaxZoom = %d, iMinZoom = %d", iCameraInfo.iMaxZoom, iCameraInfo.iMinZoom); + MUS_LOG2( "iMaxDigitalZoom = %d, iMaxDigitalZoomFactor = %d", + iCameraInfo.iMaxDigitalZoom, iCameraInfo.iMaxDigitalZoomFactor); + + iBigZoomStep = ( iCameraInfo.iMaxZoom + iCameraInfo.iMaxDigitalZoom - + iCameraInfo.iMinZoom ) / KZoomBigStepCount; + + if ( iBigZoomStep < KZoomStepMinSize ) + iBigZoomStep = KZoomStepMinSize; + + iSmallZoomStep = ( iCameraInfo.iMaxZoom + iCameraInfo.iMaxDigitalZoom - + iCameraInfo.iMinZoom ) / KZoomSmallStepCount; + + if ( iSmallZoomStep < KZoomStepMinSize ) + iSmallZoomStep = KZoomStepMinSize; + + MUS_LOG2( "mus: [ENGINE] iSmallZoomStep = %d, iBigZoomStep = %d", + iSmallZoomStep, iBigZoomStep ) + MUS_LOG( "mus: [ENGINE] <- TMusEngCameraHandler::InitializeZoomStepSize()" ) + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void TMusEngCameraHandler::ReadCameraUsageKeyL() + { + MUS_LOG( "mus: [ENGINE] -> TMusEngCameraHandler::ReadCameraUsageKeyL()" ) + + // We try to read camera usage. If we do not succeed, we use default + iCameraUsage = MusSettingsKeys::EUseCameraSwapping; + TRAPD( error, + iCameraUsage = MultimediaSharingSettings::CameraUsageL() ) + __ASSERT_ALWAYS( error == KErrNone || error == KErrNotFound, + User::Leave( error ) ); + + MUS_LOG( "mus: [ENGINE] <- TMusEngCameraHandler::ReadCameraUsageKeyL()" ) + + } + +// ----------------------------------------------------------------------------- +// Calculate the zoom step based time escaped +// ----------------------------------------------------------------------------- +// +TInt TMusEngCameraHandler::ZoomStepSize( TInt64& aTime ) + { + TTime now; + now.HomeTime(); + TInt64 timeNow = now.Int64(); + TInt stepSize = ( ( timeNow - aTime ) <= KZoomFasterTime ) ? iBigZoomStep : iSmallZoomStep; + + aTime = now.Int64(); + + MUS_LOG1( "mus: [ENGINE] stepSize = %d", stepSize ); + + return stepSize; + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +TInt TMusEngCameraHandler::CamerasAvailableL( + TMusEngCameraHandler::TCurrentCamera& aCurrentCamera ) + { + MUS_LOG( "mus: [ENGINE] -> TMusEngCameraHandler::CamerasAvailableL()" ) + __ASSERT_ALWAYS( iSession != NULL, User::Leave( KErrNotReady ) ); + + CMceCameraSource* camera = MusEngMceUtils::GetCameraL( *iSession ); + __ASSERT_ALWAYS( camera != NULL, User::Leave( KErrNotReady ) ); + aCurrentCamera = iCurrentCamera; + TInt camerasAvailable = camera->CamerasAvailable(); + + if ( camerasAvailable > 1 && + iCameraUsage != MusSettingsKeys::EUseCameraSwapping ) + { + camerasAvailable = 1; + } + + MUS_LOG( "mus: [ENGINE] <- TMusEngCameraHandler::CamerasAvailable()" ) + return camerasAvailable; + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void TMusEngCameraHandler::ChangeCameraL( TCurrentCamera aCurrentCamera ) + { + MUS_LOG( "mus: [ENGINE] -> TMusEngCameraHandler::ChangeCameraL()" ) + __ASSERT_ALWAYS( iSession != NULL, User::Leave( KErrNotReady ) ); + + CMceCameraSource* camera = MusEngMceUtils::GetCameraL( *iSession ); + CMceDisplaySink* display = MusEngMceUtils::GetDisplayL( *iSession ); + + if ( camera->CamerasAvailable() ) + { + if ( TMusEngCameraHandler::EFrontCamera == aCurrentCamera && + TMusEngCameraHandler::EFrontCamera != iCurrentCamera ) + { + MUS_LOG( "mus: [ENGINE] Set Front camera" ) + iCurrentCamera = TMusEngCameraHandler::EFrontCamera; + ChangeActiveCameraL( iCurrentCamera ); + } + else if ( TMusEngCameraHandler::EBackCamera == aCurrentCamera && + TMusEngCameraHandler::EBackCamera != iCurrentCamera ) + { + MUS_LOG( "mus: [ENGINE] Set Back camera " ) + iCurrentCamera = TMusEngCameraHandler::EBackCamera; + ChangeActiveCameraL( iCurrentCamera ); + } + else if ( TMusEngCameraHandler::ECameraNotAvailable == aCurrentCamera ) + { + if ( iCurrentCamera == TMusEngCameraHandler::EBackCamera ) + { + iCurrentCamera = TMusEngCameraHandler::EFrontCamera; + } + else + { + iCurrentCamera = TMusEngCameraHandler::EBackCamera; + } + ChangeActiveCameraL( iCurrentCamera ); + } + } + MUS_LOG( "mus: [ENGINE] <- TMusEngCameraHandler::ChangeCameraL()" ) + } + +// ----------------------------------------------------------------------------- +// Disable camera before it changes it. It enables camera after change. +// ----------------------------------------------------------------------------- +// +void TMusEngCameraHandler::ChangeActiveCameraL( TCurrentCamera aNewCamera ) + { + MUS_LOG( "mus: [ENGINE] -> ChangeActiveCamera()" ) + + CMceCameraSource* camera = MusEngMceUtils::GetCameraL( *iSession ); + CMceDisplaySink* display = MusEngMceUtils::GetDisplayL( *iSession ); + MUS_LOG( "mus: [ENGINE] Camera enabled ?" ) + if ( camera->IsEnabled() ) + { + MUS_LOG( "mus: [ENGINE] Is view finder enabled? " ) + if ( display->IsEnabled() ) + { + MUS_LOG( "mus: [ENGINE] Disable view finder" ) + display->DisableL(); + } + MUS_LOG( "mus: [ENGINE] Disable camera" ) + camera->DisableL(); + camera->SetCameraIndexL( aNewCamera ); + camera->EnableL(); + display->EnableL(); + } + else + { + if ( display->IsEnabled() ) + { + MUS_LOG( "mus: [ENGINE] Disable view finder" ) + display->DisableL(); + } + MUS_LOG( "mus: [ENGINE] set camera index" ) + camera->SetCameraIndexL( aNewCamera ); + MUS_LOG( "mus: [ENGINE] Enable camera" ) + display->EnableL(); + } + + MUS_LOG( "mus: [ENGINE] -> fetching new iCameraInfo..." ) + camera->GetCameraInfo( iCameraInfo ); + InitializeZoomStepSize(); + } diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshengine/src/musengclipsession.cpp --- a/mmsharing/mmshengine/src/musengclipsession.cpp Thu Aug 19 09:51:39 2010 +0300 +++ b/mmsharing/mmshengine/src/musengclipsession.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -18,14 +18,14 @@ // USER #include "musengclipsession.h" -#include "musengclipsessionobserver.h" -#include "musengsessionobserver.h" #include "musengmceoutsession.h" #include "musenglivesession.h" #include "musengmceutils.h" #include "musenglogger.h" +#include "musengclipvideoplayer.h" // SYSTEM +#include #include #include #include @@ -39,39 +39,49 @@ #include #include #include -#include // CONSTANTS - -const TInt64 KMicroSecondsInOneSecond = 1000000; const TInt KMusEngAmrBitRate = KMceAmrNbBitrate475; const TUint KMusEngAllowedAmrBitrates = KMceAllowedAmrNbBitrate475; -const TInt KFastWindingFactor = 4; // ----------------------------------------------------------------------------- // // ----------------------------------------------------------------------------- // -EXPORT_C CMusEngClipSession* CMusEngClipSession::NewL( - const TRect& aRect, - MMusEngSessionObserver& aSessionObserver, - MMusEngOutSessionObserver& aOutSessionObserver, - MMusEngClipSessionObserver& aClipSessionObserver, - TUint aSipProfileId ) +CMusEngClipSession* CMusEngClipSession::NewL() { - CMusEngClipSession* self = new( ELeave ) CMusEngClipSession( - aSessionObserver, - aOutSessionObserver, - aClipSessionObserver, - aRect ); + CMusEngClipSession* self = new( ELeave )CMusEngClipSession(); CleanupStack::PushL( self ); - self->ConstructL( aSipProfileId ); + self->ConstructL(); CleanupStack::Pop( self ); return self; } +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +CMusEngClipSession::CMusEngClipSession() + : CMusEngMceOutSession() + { + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusEngClipSession::ConstructL() + { + MUS_LOG( "mus: [ENGINE] -> CMusEngClipSession::ConstructL(...)" ) + + CMusEngMceOutSession::ConstructL(); + + iClipVideoPlayer = CMusEngClipVideoPlayer::NewL( *this, *this ); + + MUS_LOG( "mus: [ENGINE] <- CMusEngClipSession::ConstructL(...)" ) + } // ----------------------------------------------------------------------------- // @@ -80,362 +90,31 @@ CMusEngClipSession::~CMusEngClipSession() { MUS_LOG( "mus: [ENGINE] -> CMusEngClipSession::~CMusEngClipSession()" ) + + delete iClipVideoPlayer; + MUS_LOG( "mus: [ENGINE] <- CMusEngClipSession::~CMusEngClipSession()" ) } - // ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -EXPORT_C void CMusEngClipSession::SetClipL( const TDesC& aFileName ) - { - MUS_LOG( "mus: [ENGINE] -> CMusEngClipSession::SetClipL(...)" ) - - __ASSERT_ALWAYS( !IsProtectedFileL( aFileName ), - User::Leave( KErrPermissionDenied ) ); - - if ( iSession ) - { - CMceFileSource* file = MusEngMceUtils::GetFileSourceL( *iSession ); - file->UpdateL( aFileName ); - } - - iFileName = aFileName; - - MUS_LOG( "mus: [ENGINE] <- CMusEngClipSession::SetClipL(...)" ) - - } - - -// ----------------------------------------------------------------------------- -// Since MCE does not at the moment support SetFastForwardL function, this -// functionality is implemented by taking a timestamp when forwarding is -// started and calculating a new position when it is ended. -// ----------------------------------------------------------------------------- -// -EXPORT_C void CMusEngClipSession::FastForwardL( TBool aUseFFWD ) - { - MUS_LOG1( "mus: [ENGINE] -> CMusEngClipSession::FastForward(%d)", aUseFFWD ) - - __ASSERT_ALWAYS( iSession, User::Leave( KErrNotReady ) ); - - CMceFileSource* file = MusEngMceUtils::GetFileSourceL( *iSession ); - - if ( aUseFFWD ) - { - // Ignore if we are already fastforwarding - if ( iFFWDStartTime.Int64() > 0 ) - { - return; - } - - // Stop rewinding if ongoing, else just pause file source - if ( iFRWDStartTime.Int64() > 0 ) - { - FastRewindL( EFalse ); - } - else - { - file->DisableL(); - } - - // Get timestamp for starttime - iFFWDStartTime.HomeTime(); - } - else - { - // Leave if we are not fastforwarding - if ( iFFWDStartTime.Int64() == 0 ) - { - User::Leave( KErrAlreadyExists ); - } - - // Set new position - file->SetPositionL( PositionMicroSecondsL() ); - MUS_LOG( " SetPositionL returned without error " ) - - // Reset timer - iFFWDStartTime = TTime( 0 ); - } - - MUS_LOG1( "mus: [ENGINE] <- CMusEngClipSession::FastForward(%d)", aUseFFWD ) - } - - -// ----------------------------------------------------------------------------- -// Since MCE does not at the moment support SetFastRewindL function, this -// functionality is implemented by taking a timestamp when rewinding is -// started and calculating a new position when it is ended. -// ----------------------------------------------------------------------------- -// -EXPORT_C void CMusEngClipSession::FastRewindL( TBool aUseFRWD ) - { - MUS_LOG1( "mus: [ENGINE] -> CMusEngClipSession::FastRewind(%d)", aUseFRWD ) - - __ASSERT_ALWAYS( iSession, User::Leave( KErrNotReady ) ); - - CMceFileSource* file = MusEngMceUtils::GetFileSourceL( *iSession ); - - if ( aUseFRWD ) - { - // Ignore if we are already fastrewinding - if ( iFRWDStartTime.Int64() > 0 ) - { - return; - } - - // Stop fastforwarding if ongoing, else just pause file source - if ( iFFWDStartTime.Int64() > 0 ) - { - FastForwardL( EFalse ); - } - else - { - file->DisableL(); - } - - // Get timestamp for starttime - iFRWDStartTime.HomeTime(); - } - else - { - // Leave if we are not fastrewinding - if ( iFRWDStartTime.Int64() == 0 ) - { - User::Leave( KErrAlreadyExists ); - } - - // Set new position - file->SetPositionL( PositionMicroSecondsL() ); - MUS_LOG( " SetPositionL returned without error " ) - - // Reset timer - iFRWDStartTime = TTime( 0 ); - } - - MUS_LOG1( "mus: [ENGINE] <- CMusEngClipSession::FastRewind(%d)", aUseFRWD ) - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -EXPORT_C TTimeIntervalSeconds CMusEngClipSession::PositionL() - { - MUS_LOG( "mus: [ENGINE] -> CMusEngClipSession::PositionL()" ) - - TTimeIntervalMicroSeconds currentPosition = PositionMicroSecondsL(); - - MUS_LOG1( "mus: [ENGINE] <- CMusEngClipSession::PositionL(), pos:%d", - currentPosition.Int64() ) - return TTimeIntervalSeconds( static_cast( - currentPosition.Int64() / KMicroSecondsInOneSecond ) ); - } - - -// ----------------------------------------------------------------------------- -// +// From MLcSession // ----------------------------------------------------------------------------- // -EXPORT_C TTimeIntervalSeconds CMusEngClipSession::DurationL() - { - MUS_LOG( "mus: [ENGINE] -> CMusEngClipSession::DurationL()" ) - - __ASSERT_ALWAYS( iSession, User::Leave( KErrNotReady ) ); - - CMceFileSource* file = MusEngMceUtils::GetFileSourceL( *iSession ); - - TTimeIntervalMicroSeconds duration = file->DurationL(); - - MUS_LOG( "mus: [ENGINE] <- CMusEngClipSession::DurationL()" ) - return TTimeIntervalSeconds( - static_cast( duration.Int64() / KMicroSecondsInOneSecond ) ); - - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -EXPORT_C void CMusEngClipSession::SetPositionL ( - const TTimeIntervalSeconds& aPosition ) - { - MUS_LOG1( "mus: [ENGINE] -> CMusEngClipSession::SetPositionL (%d)", - aPosition.Int() ) - - __ASSERT_ALWAYS( iSession, User::Leave( KErrNotReady ) ); - - CMceFileSource* file = MusEngMceUtils::GetFileSourceL( *iSession ); - - TTimeIntervalMicroSeconds position( - KMicroSecondsInOneSecond * static_cast(aPosition.Int()) ); - - if ( position == 0 ) - { - iRewindedToBeginning = ETrue; - } - - file->SetPositionL( position ); - - MUS_LOG( "mus: [ENGINE] <- CMusEngClipSession::SetPositionL ()" ) - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -EXPORT_C void CMusEngClipSession::TranscodeL( const TFileName& aFileName ) - { - MUS_LOG( "mus: [ENGINE] -> CMusEngClipSession::TranscodeL(...)" ) - - __ASSERT_ALWAYS( iSession, User::Leave( KErrNotReady ) ); - - CMceFileSource* file = MusEngMceUtils::GetFileSourceL( *iSession ); - - const RPointerArray& streams = iSession->Streams(); - - for ( TInt i = 0; i < streams.Count(); ++i ) - { - if ( streams[i]->State() == CMceMediaStream::ETranscodingRequired ) - { - if ( streams[i]->Type() == KMceAudio ) - { - AddAmrCodecL( static_cast( *streams[i] ) ); - } - else - { - AddVideoCodecL( static_cast( *streams[i] ) ); - } - } - } - - // Set dest file already before transcoding as output file is deleted in failure case - iTranscodingDestFileName = aFileName; - TRAPD( err, file->TranscodeL( aFileName ) ); - HandleTranscodingFailureL( err ); - iTranscodingOngoing = ETrue; - - - MUS_LOG( "mus: [ENGINE] <- CMusEngClipSession::TranscodeL(...)" ) - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -EXPORT_C void CMusEngClipSession::CancelTranscodeL() +MLcVideoPlayer* CMusEngClipSession::LocalVideoPlayer() { - MUS_LOG( "mus: [ENGINE] -> CMusEngClipSession::CancelTranscodeL()" ) - - __ASSERT_ALWAYS( iSession, User::Leave( KErrNotReady ) ); - - CMceFileSource* file = MusEngMceUtils::GetFileSourceL( *iSession ); - - TRAPD( err, file->CancelTranscodeL() ); - err = err; // Silence warning in UREL build - MUS_LOG1( "mus: [ENGINE] - cancel result %d", err ) - // Even if cancel fails, try to delete the partial clip - - MUS_LOG( "mus: [ENGINE] - delete the partially converted clip" ) - - DeleteTranscodingDestinationFileL(); - - MUS_LOG( "mus: [ENGINE] <- CMusEngClipSession::CancelTranscodeL()" ) + return iClipVideoPlayer; } - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -EXPORT_C void CMusEngClipSession::PlayL() - { - MUS_LOG( "mus: [ENGINE] -> CMusEngClipSession::PlayL()" ) - - __ASSERT_ALWAYS( iSession && - iFFWDStartTime.Int64() == 0 && - iFRWDStartTime.Int64() == 0, - User::Leave( KErrNotReady ) ); - - iPause = EFalse; - CMceFileSource* file = MusEngMceUtils::GetFileSourceL( *iSession ); - - if ( !file->IsEnabled() ) - { - file->EnableL(); - - iClipEnded = EFalse; - // No need to enable audio separarely - } - else - { - MUS_LOG( "mus: [ENGINE] File is already enabled, ignore request" ) - } - - MUS_LOG( "mus: [ENGINE] <- CMusEngClipSession::PlayL()" ) - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -EXPORT_C void CMusEngClipSession::PauseL() - { - MUS_LOG( "mus: [ENGINE] -> CMusEngClipSession::PauseL()" ) - - __ASSERT_ALWAYS( iSession && - iFFWDStartTime.Int64() == 0 && - iFRWDStartTime.Int64() == 0, - User::Leave( KErrNotReady ) ); - - - iPause = ETrue; - CMceFileSource* file = MusEngMceUtils::GetFileSourceL( *iSession ); - - if ( file->IsEnabled() ) - { - file->DisableL(); - - // No need to disable audio separarely - } - else - { - MUS_LOG( "mus: [ENGINE] File is already disabled, ignore request" ) - } - - MUS_LOG( "mus: [ENGINE] <- CMusEngClipSession::PauseL()" ) - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -EXPORT_C TBool CMusEngClipSession::IsPlayingL() - { - __ASSERT_ALWAYS( iSession, User::Leave( KErrNotReady ) ); - - return ( MusEngMceUtils::GetFileSourceL( *iSession )->IsEnabled() ); - } - - // ----------------------------------------------------------------------------- // // ----------------------------------------------------------------------------- // void CMusEngClipSession::CompleteSessionStructureL( - CMceStreamBundle& aLocalBundle ) + CMceStreamBundle& aLocalBundle ) { MUS_LOG( "mus: [ENGINE] -> CMusEngClipSession::CompleteSessionStructureL()" ) __ASSERT_ALWAYS( iSession, User::Leave( KErrNotReady ) ); - __ASSERT_ALWAYS( iFileName != KNullDesC(), User::Leave( KErrNotReady ) ); // Create outgoing video stream CMceVideoStream* videoStream = CMceVideoStream::NewLC(); @@ -444,8 +123,8 @@ videoStream->AddSinkL( rtpsink ); CleanupStack::Pop( rtpsink ); - CMceFileSource* fileSource = CMceFileSource::NewLC( *iManager, - iFileName ); + CMceFileSource* fileSource = + CMceFileSource::NewLC( *iManager, iClipVideoPlayer->LcFileName() ); fileSource->DisableL(); // Start session in pause mode. videoStream->SetSourceL( fileSource ); CleanupStack::Pop( fileSource ); @@ -454,11 +133,12 @@ CleanupStack::Pop( videoStream ); ConstructAudioStructureL( aLocalBundle ); + + iClipVideoPlayer->SetMceSession( iSession ); MUS_LOG( "mus: [ENGINE] <- CMusEngClipSession::CompleteSessionStructureL()" ) } - // ----------------------------------------------------------------------------- // Checks that that there is no need for transcoding before calling // overridden base class variant of this function. @@ -472,9 +152,6 @@ const RPointerArray& streams = iSession->Streams(); - TBool transcodingRequired = EFalse; - TBool transcodingRequiredDueUnknownCaps = EFalse; - if ( iVideoCodecList ) { MUS_LOG_TDESC8( "iVideoCodecList: ", iVideoCodecList->Des() ) @@ -483,58 +160,33 @@ CMceVideoStream* videoStream = NULL; for ( TInt i = 0; i < streams.Count(); ++i ) { - videoStream = static_cast( streams[i] ); - - if ( iTranscodingRequiredDueMissingOptions ) + if ( streams[i]->State() == CMceMediaStream::ETranscodingRequired ) { - MUS_LOG( " -> establish with current codec, remote capa unknown!!!" ) - TBool ignoreOptionsQueryCodecs( ETrue ); - AddVideoCodecL( *videoStream, ignoreOptionsQueryCodecs ); + User::Leave( KErrNotSupported ); } - else if ( streams[i]->State() == CMceMediaStream::ETranscodingRequired ) - { - transcodingRequired = ETrue; - } - else if ( streams[i]->Type() == KMceVideo && !IsH264Supported() ) + else if ( streams[i]->Type() == KMceVideo && + !IsH264Supported() ) { MUS_LOG( " -> video stream found!!!" ) + videoStream = static_cast( streams[i] ); //transcoding of H264 is not needed only if we know explicitly - //that the peer supports it (from OPTIONS response) + //that the peer supports it (from OPTIONS response) + const RPointerArray& codecs = videoStream->Codecs(); for ( TInt codecIndex = 0; codecIndex < codecs.Count(); ++codecIndex ) { if ( codecs[codecIndex]->SdpName() == KMceSDPNameH264() ) { - transcodingRequired = ETrue; - transcodingRequiredDueUnknownCaps = !iVideoCodecList; - MUS_LOG( " -> Removing H264 codec from video stream" ) - videoStream->RemoveCodecL( *codecs[codecIndex] ); - codecIndex = 0; + User::Leave( KErrNotSupported ); } - } - - if ( codecs.Count() == 0) - { - // At least one codec should be in the stream list. - MUS_LOG( " -> Adding codec, since codecs list is empty " ) - AddVideoCodecL( *videoStream ); - } + } } } - iTranscodingRequiredDueMissingOptions = transcodingRequiredDueUnknownCaps; - - if ( transcodingRequired ) - { - iClipSessionObserver.TranscodingNeeded(iTranscodingRequiredDueMissingOptions); - } - else - { - CMusEngMceOutSession::EstablishSessionL(); - // Now session state is right to adjust volume - SetSpeakerVolumeL( VolumeL() ); - } + CMusEngMceOutSession::EstablishSessionL(); + // Now session state is right to adjust volume + SetSpeakerVolumeL( LcVolumeL() ); MUS_LOG( "mus: [ENGINE] <- CMusEngClipSession::EstablishSessionL()" ) } @@ -577,49 +229,11 @@ DetermineBufferingPeriod( aStream ); - if ( aStream.State() == CMceMediaStream::ETranscoding ) - { - CMceFileSource* file = static_cast(aStream.Source()); - TInt progressPercentage = 0; - TRAP_IGNORE( progressPercentage = file->TranscodingProgressL() ) - iClipSessionObserver.TranscodingProgressed( progressPercentage ); - } - else if ( aStream.State() == CMceMediaStream::EInitialized ) - { - if ( iTranscodingOngoing ) - { - MUS_LOG( "mus: [ENGINE] Transcoding completed." ) - - // Filename has been updated in MCE side but unfortunately - // there's no getter for the filename in API. - iFileName = iTranscodingDestFileName; - - DoCompleteTranscoding(); - } - } - else if ( aStream.State() == CMceMediaStream::ETranscodingRequired && - iTranscodingOngoing ) - { - MUS_LOG( "mus: [ENGINE] Transcoding failed." ) - - iClipSessionObserver.TranscodingFailed(); - iTranscodingOngoing = EFalse; - iTranscodingRequiredDueMissingOptions = EFalse; - } - else if ( HasClipEnded() ) + if ( iClipVideoPlayer->HasClipEnded() ) { MUS_LOG( "mus: [ENGINE] Clip ended." ) - - iDelayFileEndingPos = 0; - iClipEnded = ETrue; - - iClipSessionObserver.EndOfClip(); + InformObserverAboutPlayerStateChange( iClipVideoPlayer ); } - else if ( IsRewindFromEnd() ) - { - TRAP_IGNORE( iClipSessionObserver.RewindFromEndL() ); - } - else { // Cannot handle, forward to the ancestor class @@ -633,77 +247,19 @@ // // ----------------------------------------------------------------------------- // -CMusEngClipSession::CMusEngClipSession( - MMusEngSessionObserver& aSessionObserver, - MMusEngOutSessionObserver& aOutSessionObserver, - MMusEngClipSessionObserver& aClipSessionObserver, - const TRect& aRect ) - : CMusEngMceOutSession( aRect, - aSessionObserver, - aOutSessionObserver ), - iClipSessionObserver( aClipSessionObserver ) - { - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusEngClipSession::ConstructL( TUint aSipProfileId ) - { - MUS_LOG( "mus: [ENGINE] -> CMusEngClipSession::ConstructL(...)" ) - - CMusEngMceOutSession::ConstructL( aSipProfileId ); - - MUS_LOG( "mus: [ENGINE] <- CMusEngClipSession::ConstructL(...)" ) - } - - -// ----------------------------------------------------------------------------- -// Check is file DRM protected. -// -// ----------------------------------------------------------------------------- -// -TBool CMusEngClipSession::IsProtectedFileL( const TDesC& aClipFile ) - { - MUS_LOG( "mus: [ENGINE] -> CMusEngClipSession::IsProtectedFileL(...)" ) - - TBool isDRMProtected = EFalse; - DRMCommon* drmapi = DRMCommon::NewL(); - CleanupStack::PushL( drmapi ); - - User::LeaveIfError( drmapi->Connect() ); - //Check DRM file protection - User::LeaveIfError( drmapi->IsProtectedFile( aClipFile, isDRMProtected ) ); - drmapi->Disconnect(); - - CleanupStack::PopAndDestroy( drmapi ); - - MUS_LOG( "mus: [ENGINE] <- CMusEngClipSession::IsProtectedFileL(...)" ) - return isDRMProtected; - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// void CMusEngClipSession::AddAmrCodecL( CMceAudioStream& aAudioStream ) { MUS_LOG( "mus: [ENGINE] -> CMusEngClipSession::AddAmrCodecL" ) // Remove old codecs - while ( aAudioStream.Codecs().Count() > 0 ) { aAudioStream.RemoveCodecL( *aAudioStream.Codecs()[0] ); } // Create AMR codec instance - const RPointerArray& supportedCodecs = - iManager->SupportedAudioCodecs(); + iManager->SupportedAudioCodecs(); CMceAudioCodec* amr = NULL; @@ -713,12 +269,10 @@ { amr = supportedCodecs[i]->CloneL(); CleanupStack::PushL( amr ); - - User::LeaveIfError( - amr->SetAllowedBitrates( KMusEngAllowedAmrBitrates ) ); + User::LeaveIfError( + amr->SetAllowedBitrates( KMusEngAllowedAmrBitrates ) ); User::LeaveIfError( amr->SetBitrate( KMusEngAmrBitRate ) ); aAudioStream.AddCodecL( amr ); - CleanupStack::Pop( amr ); break; // We must have only one codec } @@ -729,14 +283,12 @@ MUS_LOG( "mus: [ENGINE] <- CMusEngClipSession::AddAmrCodecL" ) } - // ----------------------------------------------------------------------------- // Create codec instance, H264 is used only if other end supports it for sure, // otherwise H263 is used. // ----------------------------------------------------------------------------- // -void CMusEngClipSession::AddVideoCodecL( - CMceVideoStream& aVideoStream, TBool aIgnoreNegotiated ) +void CMusEngClipSession::AddVideoCodecL( CMceVideoStream& aVideoStream ) { MUS_LOG( "mus: [ENGINE] -> CMusEngClipSession::AddVideoCodecL" ) @@ -747,13 +299,13 @@ aVideoStream.RemoveCodecL( *aVideoStream.Codecs()[0] ); } - const RPointerArray& supportedCodecs = - iManager->SupportedVideoCodecs(); + const RPointerArray< const CMceVideoCodec >& supportedCodecs = + iManager->SupportedVideoCodecs(); CMceVideoCodec* addedCodec = NULL; - TPtrC8 addedCodecName = ( aIgnoreNegotiated || IsH264Supported() ) ? - KMceSDPNameH264() : KMceSDPNameH2632000(); + TPtrC8 addedCodecName = + IsH264Supported() ? KMceSDPNameH264() : KMceSDPNameH2632000(); MUS_LOG_TDESC8( "mus: [ENGINE] adding codec : ", addedCodecName ); @@ -775,123 +327,12 @@ } // ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -TBool CMusEngClipSession::HasClipEnded() - { - MUS_LOG( "mus: [ENGINE] -> CMusEngClipSession::HasClipEnded()" ) - - TBool hasClipEnded = EFalse; - - if ( iSession ) - { - - CMceVideoStream* videoOut = NULL; - - TRAPD( error, - videoOut = MusEngMceUtils::GetVideoOutStreamL( *iSession ) ); - if( error != KErrNone ) - { - MUS_LOG1( "mus: [ENGINE] Error in GetVideoOutStreamL #%d", error ) - return hasClipEnded; - } - - CMceFileSource* filesource = NULL; - TRAP( error, filesource = MusEngMceUtils::GetFileSourceL( *iSession ) ) - - if ( error == KErrNone ) - { - TTimeIntervalMicroSeconds position; - TTimeIntervalMicroSeconds duration; - TRAP( error, position = filesource->PositionL() ); - TRAPD( error1, duration = filesource->DurationL() ); - if ( error != KErrNone || error1 != KErrNone ) - { - return hasClipEnded; - } - - MUS_LOG2( "mus: [ENGINE] position = %Ld, duration = %Ld", - position.Int64(), - duration.Int64() ) - - TRAP( error, hasClipEnded = - ( position.Int64() == 0 && - !filesource->IsEnabled() && - videoOut->State() == CMceMediaStream::EDisabled ) ) - if( hasClipEnded ) - { - MUS_LOG( "mus: [ENGINE] End of clip" ) - } - } - } - - MUS_LOG( "mus: [ENGINE] <- CMusEngClipSession::HasClipEnded()" ) - return hasClipEnded; - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -TTimeIntervalMicroSeconds CMusEngClipSession::PositionMicroSecondsL() - { - __ASSERT_ALWAYS( iSession, User::Leave( KErrNotReady ) ); - - CMceFileSource* file = MusEngMceUtils::GetFileSourceL( *iSession ); - - TTimeIntervalMicroSeconds position = file->PositionL(); - TTimeIntervalMicroSeconds duration = file->DurationL(); - - TTimeIntervalMicroSeconds calculatedPosition; - - // Adjust position if we are fastforwarding or -rewinding - if ( iFFWDStartTime.Int64() != 0 ) - { - TTime now; - now.HomeTime(); - calculatedPosition = KFastWindingFactor * - now.MicroSecondsFrom( iFFWDStartTime ).Int64() + - position.Int64(); - if ( calculatedPosition > duration ) - { - calculatedPosition = duration; - } - } - else if ( iFRWDStartTime.Int64() != 0 ) - { - TTime now; - now.HomeTime(); - calculatedPosition = position.Int64() - - KFastWindingFactor * - now.MicroSecondsFrom( iFRWDStartTime ).Int64(); - if ( calculatedPosition < 0 ) - { - calculatedPosition = 0; - } - - if ( calculatedPosition == 0 ) - { - iRewindedToBeginning = ETrue; - } - } - else - { - calculatedPosition = position; - } - - return calculatedPosition; - } - - -// ----------------------------------------------------------------------------- // If member file contains audio, add appropriate amount of audio streams to // session structure // ----------------------------------------------------------------------------- // void CMusEngClipSession::ConstructAudioStructureL( - CMceStreamBundle& aLocalBundle ) + CMceStreamBundle& aLocalBundle ) { MUS_LOG( "mus: [ENGINE] -> CMusEngClipSession::ConstructAudioStructureL()" ) @@ -981,11 +422,11 @@ const TInt KMusMinimumBufferingPeriod( 500000 ); if ( bufferingPeriod > KMusMinimumBufferingPeriod ) { - iBufferingPeriod = bufferingPeriod; + iClipVideoPlayer->SetBufferingPeriod( bufferingPeriod ); } MUS_LOG1( "mus: [ENGINE] current buffering period:%d", - iBufferingPeriod.Int64() ) + bufferingPeriod.Int64() ) iBufferingStartedTime = 0; } @@ -994,131 +435,4 @@ MUS_LOG( "mus: [ENGINE] <- CMusEngClipSession::DetermineBufferingPeriod()" ) } -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -TBool CMusEngClipSession::IsH264Supported() const - { - return ( iVideoCodecList && iVideoCodecList->FindF( KMceSDPNameH264() ) >= 0 ); - } - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusEngClipSession::HandleTranscodingFailureL( TInt aError ) - { - if ( aError == KErrNone ) - { - return; - } - - TRAP_IGNORE( DeleteTranscodingDestinationFileL() ) - - User::LeaveIfError( aError ); - } - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -TInt CMusEngClipSession::DoCompleteTranscoding() - { - iTranscodingOngoing = EFalse; - - iClipSessionObserver.TranscodingCompletedInit(); - - TRAPD( error, EstablishSessionL() ) - iTranscodingRequiredDueMissingOptions = EFalse; - if ( error != KErrNone ) - { - iSessionObserver.SessionFailed(); - } - - // Next call does not return before session establishment - iClipSessionObserver.TranscodingCompletedFinalize(); - - return error; - } - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusEngClipSession::DeleteTranscodingDestinationFileL() - { - RFs fs; - User::LeaveIfError( fs.Connect() ); - CleanupClosePushL( fs ); - - CFileMan* fileMan = CFileMan::NewL( fs ); - CleanupStack::PushL( fileMan ); - - MUS_LOG_TDESC8( "mus: [ENGINE] - deleting trascoding destination, filename", - iTranscodingDestFileName ) - TInt err = fileMan->Delete( iTranscodingDestFileName ); - MUS_LOG1( "mus: [ENGINE] - file delete result %d", err ) - - CleanupStack::PopAndDestroy( fileMan ); - CleanupStack::PopAndDestroy(); // fs - } - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -TBool CMusEngClipSession::IsRewindFromEnd() - { - MUS_LOG( "mus: [ENGINE] -> CMusEngClipSession::IsRewindFromEnd()" ) - - TBool isRewindFromEnd = EFalse; - - if ( iSession ) - { - - CMceVideoStream* videoOut = NULL; - - TRAPD( error, - videoOut = MusEngMceUtils::GetVideoOutStreamL( *iSession ) ); - if( error != KErrNone ) - { - MUS_LOG1( "mus: [ENGINE] Error in GetVideoOutStreamL #%d", error ) - return isRewindFromEnd; - } - - CMceFileSource* filesource = NULL; - TRAP( error, filesource = MusEngMceUtils::GetFileSourceL( *iSession ) ) - - if ( error == KErrNone ) - { - TTimeIntervalMicroSeconds position; - TTimeIntervalMicroSeconds duration; - TRAP( error, position = filesource->PositionL() ); - TRAPD( error1, duration = filesource->DurationL() ); - if ( error != KErrNone || error1 != KErrNone ) - { - return isRewindFromEnd; - } - - MUS_LOG2( "mus: [ENGINE] position = %Ld, duration = %Ld", - position.Int64(), - duration.Int64() ) - - TRAP( error, isRewindFromEnd = - ( position.Int64() != 0 && - !filesource->IsEnabled() && - videoOut->State() == CMceMediaStream::EDisabled && - !iPause ) ) - if( isRewindFromEnd ) - { - MUS_LOG( "mus: [ENGINE] Rewind from end of clip" ) - } - } - } - - MUS_LOG( "mus: [ENGINE] <- CMusEngClipSession::IsRewindFromEnd()" ) - return isRewindFromEnd; - } // End of file - diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshengine/src/musengclipvideoplayer.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/mmshengine/src/musengclipvideoplayer.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,535 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + +// USER +#include "musengclipvideoplayer.h" +#include "musengcamerahandler.h" +#include "musengmceutils.h" +#include "musengdisplayhandler.h" +#include "muslogger.h" + +// SYSTEM +#include +#include +#include +#include + +// CONSTANTS +const TInt64 KMicroSecondsInOneSecond = 1000000; +const TInt KFastWindingFactor = 4; + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +CMusEngClipVideoPlayer* CMusEngClipVideoPlayer::NewL( + MMusEngDisplayHandler& aDisplayHandler, + MLcAudioControl& aLcAudioControl ) + { + return new( ELeave )CMusEngClipVideoPlayer( + aDisplayHandler, aLcAudioControl ); + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +CMusEngClipVideoPlayer::CMusEngClipVideoPlayer( + MMusEngDisplayHandler& aDisplayHandler, + MLcAudioControl& aLcAudioControl ) : + CMusEngLocalVideoPlayer( aDisplayHandler, aLcAudioControl ) + { + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +CMusEngClipVideoPlayer::~CMusEngClipVideoPlayer() + { + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +TBool CMusEngClipVideoPlayer::HasClipEnded() + { + MUS_LOG( "mus: [ENGINE] -> CMusEngClipVideoPlayer::HasClipEnded" ) + + TBool hasClipEnded( EFalse ); + + if ( iMceSession ) + { + CMceVideoStream* videoOut = NULL; + + TRAPD( err, + videoOut = MusEngMceUtils::GetVideoOutStreamL( *iMceSession ) ); + if ( err != KErrNone ) + { + MUS_LOG1( "mus: [ENGINE] Error in GetVideoOutStreamL %d", err ) + return EFalse; + } + + CMceFileSource* filesource = NULL; + TRAP( err, filesource = MusEngMceUtils::GetFileSourceL( *iMceSession ) ) + + if ( err == KErrNone ) + { + TTimeIntervalMicroSeconds position; + TTimeIntervalMicroSeconds duration; + TRAP( err, position = filesource->PositionL() ); + TRAPD( err2, duration = filesource->DurationL() ); + if ( err != KErrNone || err2 != KErrNone ) + { + return EFalse; + } + + MUS_LOG2( "mus: [ENGINE] position = %Ld, duration = %Ld", + position.Int64(), duration.Int64() ) + + hasClipEnded = + ( position.Int64() == 0 && + !filesource->IsEnabled() && + videoOut->State() == CMceMediaStream::EDisabled ); + } + } + + if ( hasClipEnded ) + { + iDelayFileEndingPos = 0; + } + + MUS_LOG( "mus: [ENGINE] <- CMusEngClipVideoPlayer::HasClipEnded" ) + + return hasClipEnded; + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusEngClipVideoPlayer::SetBufferingPeriod( + const TTimeIntervalMicroSeconds& aPeriod ) + { + iBufferingPeriod = aPeriod; + } + +// ----------------------------------------------------------------------------- +// From MLcVideoPlayer +// ----------------------------------------------------------------------------- +// +TBool CMusEngClipVideoPlayer::LcIsPlayingL() + { + __ASSERT_ALWAYS( iMceSession, User::Leave( KErrNotReady ) ); + return ( MusEngMceUtils::GetFileSourceL( *iMceSession )->IsEnabled() ); + } + +// ----------------------------------------------------------------------------- +// From MLcVideoPlayer +// ----------------------------------------------------------------------------- +// +void CMusEngClipVideoPlayer::LcPlayL() + { + MUS_LOG( "mus: [ENGINE] -> CMusEngClipVideoPlayer::LcPlayL" ) + + __ASSERT_ALWAYS( iMceSession, User::Leave( KErrNotReady ) ); + CMceFileSource* file = MusEngMceUtils::GetFileSourceL( *iMceSession ); + + if ( !file->IsEnabled() ) + { + file->EnableL(); + } + + MUS_LOG( "mus: [ENGINE] <- CMusEngClipVideoPlayer::LcPlayL" ) + } + +// ----------------------------------------------------------------------------- +// From MLcVideoPlayer +// ----------------------------------------------------------------------------- +// +void CMusEngClipVideoPlayer::LcPauseL() + { + MUS_LOG( "mus: [ENGINE] -> CMusEngClipVideoPlayer::LcPauseL" ) + + __ASSERT_ALWAYS( iMceSession, User::Leave( KErrNotReady ) ); + CMceFileSource* file = MusEngMceUtils::GetFileSourceL( *iMceSession ); + + if ( file->IsEnabled() ) + { + file->DisableL(); + } + + MUS_LOG( "mus: [ENGINE] <- CMusEngClipVideoPlayer::LcPauseL" ) + } + +// ----------------------------------------------------------------------------- +// From MLcVideoPlayer +// ----------------------------------------------------------------------------- +// +MLcSourceFileControl* CMusEngClipVideoPlayer::LcSourceFileControl() + { + return this; + } + +// ----------------------------------------------------------------------------- +// From MLcSourceFileControl +// ----------------------------------------------------------------------------- +// +void CMusEngClipVideoPlayer::SetLcFileNameL( const TFileName& aFileName ) + { + MUS_LOG( "mus: [ENGINE] -> CMusEngClipVideoPlayer::SetLcFileNameL" ) + + __ASSERT_ALWAYS( !IsProtectedFileL( aFileName ), + User::Leave( KErrPermissionDenied ) ); + + if ( iMceSession ) + { + CMceFileSource* file = MusEngMceUtils::GetFileSourceL( *iMceSession ); + file->UpdateL( aFileName ); + } + + iFileName = aFileName; + MUS_LOG( "mus: [ENGINE] <- CMusEngClipVideoPlayer::SetLcFileNameL" ) + } + +// ----------------------------------------------------------------------------- +// From MLcSourceFileControl +// ----------------------------------------------------------------------------- +// +TFileName& CMusEngClipVideoPlayer::LcFileName() + { + return iFileName; + } + +// ----------------------------------------------------------------------------- +// From MLcSourceFileControl +// Since MCE does not at the moment support SetFastForwardL function, this +// functionality is implemented by taking a timestamp when forwarding is +// started and calculating a new position when it is ended. +// ----------------------------------------------------------------------------- +// +void CMusEngClipVideoPlayer::LcFastForwardL( TBool aUseFFWD ) + { + MUS_LOG1( "mus: [ENGINE] -> CMusEngClipVideoPlayer::FastForward( %d )", + aUseFFWD ) + + __ASSERT_ALWAYS( iMceSession, User::Leave( KErrNotReady ) ); + + CMceFileSource* file = MusEngMceUtils::GetFileSourceL( *iMceSession ); + + if ( aUseFFWD ) + { + // Ignore if we are already fastforwarding + if ( iFFWDStartTime.Int64() > 0 ) + { + return; + } + + // Stop rewinding if ongoing, else just pause file source + if ( iFRWDStartTime.Int64() > 0 ) + { + LcFastRewindL( EFalse ); + } + else + { + file->DisableL(); + } + + // Get timestamp for starttime + iFFWDStartTime.HomeTime(); + } + else + { + // Leave if we are not fastforwarding + if ( iFFWDStartTime.Int64() == 0 ) + { + User::Leave( KErrAlreadyExists ); + } + + // Set new position + file->SetPositionL( PositionMicroSecondsL( ETrue ) ); + + // Reset timer + iFFWDStartTime = TTime( 0 ); + } + + MUS_LOG( "mus: [ENGINE] <- CMusEngClipVideoPlayer::FastForward" ) + } + +// ----------------------------------------------------------------------------- +// From MLcSourceFileControl +// Since MCE does not at the moment support SetFastRewindL function, this +// functionality is implemented by taking a timestamp when rewinding is +// started and calculating a new position when it is ended. +// ----------------------------------------------------------------------------- +// +void CMusEngClipVideoPlayer::LcFastRewindL( TBool aUseFRWD ) + { + MUS_LOG1( "mus: [ENGINE] -> CMusEngClipVideoPlayer::FastRewind( %d )", + aUseFRWD ) + + __ASSERT_ALWAYS( iMceSession, User::Leave( KErrNotReady ) ); + + CMceFileSource* file = MusEngMceUtils::GetFileSourceL( *iMceSession ); + + if ( aUseFRWD ) + { + // Ignore if we are already fastrewinding + if ( iFRWDStartTime.Int64() > 0 ) + { + return; + } + + // Stop fastforwarding if ongoing, else just pause file source + if ( iFFWDStartTime.Int64() > 0 ) + { + LcFastForwardL( EFalse ); + } + else + { + file->DisableL(); + } + + // Get timestamp for starttime + iFRWDStartTime.HomeTime(); + } + else + { + // Leave if we are not fastrewinding + if ( iFRWDStartTime.Int64() == 0 ) + { + User::Leave( KErrAlreadyExists ); + } + + // Set new position + file->SetPositionL( PositionMicroSecondsL( ETrue ) ); + + // Reset timer + iFRWDStartTime = TTime( 0 ); + } + + MUS_LOG( "mus: [ENGINE] <- CMusEngClipVideoPlayer::FastRewind" ) + } + +// ----------------------------------------------------------------------------- +// From MLcSourceFileControl +// ----------------------------------------------------------------------------- +// +TTimeIntervalSeconds CMusEngClipVideoPlayer::LcFileDurationL() + { + MUS_LOG( "mus: [ENGINE] -> CMusEngClipVideoPlayer::DurationL" ) + + __ASSERT_ALWAYS( iMceSession, User::Leave( KErrNotReady ) ); + + CMceFileSource* file = MusEngMceUtils::GetFileSourceL( *iMceSession ); + + TTimeIntervalMicroSeconds duration = file->DurationL(); + + MUS_LOG( "mus: [ENGINE] <- CMusEngClipVideoPlayer::DurationL" ) + + return TTimeIntervalSeconds( static_cast< TInt >( + duration.Int64() / KMicroSecondsInOneSecond ) ); + } + +// ----------------------------------------------------------------------------- +// From MLcSourceFileControl +// ----------------------------------------------------------------------------- +// +TTimeIntervalSeconds CMusEngClipVideoPlayer::LcFilePositionL() + { + MUS_LOG( "mus: [ENGINE] -> CMusEngClipVideoPlayer::LcFilePositionL" ) + + TTimeIntervalMicroSeconds currentPosition = PositionMicroSecondsL(); + + MUS_LOG1( "mus: [ENGINE] <- CMusEngClipVideoPlayer::LcFilePositionL, %d", + currentPosition.Int64() ) + + return TTimeIntervalSeconds( static_cast< TInt >( + currentPosition.Int64() / KMicroSecondsInOneSecond ) ); + } + +// ----------------------------------------------------------------------------- +// From MLcSourceFileControl +// ----------------------------------------------------------------------------- +// +void CMusEngClipVideoPlayer::SetLcFilePositionL( + const TTimeIntervalSeconds& aPosition ) + { + MUS_LOG1( "mus: [ENGINE] -> CMusEngClipVideoPlayer::SetPositionL ( %d )", + aPosition.Int() ) + + __ASSERT_ALWAYS( iMceSession, User::Leave( KErrNotReady ) ); + + CMceFileSource* file = MusEngMceUtils::GetFileSourceL( *iMceSession ); + + TTimeIntervalMicroSeconds position( + KMicroSecondsInOneSecond * static_cast< TInt64 >( aPosition.Int() ) ); + + if ( position == 0 ) + { + iRewindedToBeginning = ETrue; + } + + file->SetPositionL( position ); + + MUS_LOG( "mus: [ENGINE] <- CMusEngClipVideoPlayer::SetPositionL ()" ) + } + +// ----------------------------------------------------------------------------- +// Check is file DRM protected. +// ----------------------------------------------------------------------------- +// +TBool CMusEngClipVideoPlayer::IsProtectedFileL( const TDesC& aClipFile ) + { + MUS_LOG( "mus: [ENGINE] -> CMusEngClipVideoPlayer::IsProtectedFileL(...)" ) + + TBool isDRMProtected = EFalse; + DRMCommon* drmapi = DRMCommon::NewL(); + CleanupStack::PushL( drmapi ); + + User::LeaveIfError( drmapi->Connect() ); + //Check DRM file protection + User::LeaveIfError( drmapi->IsProtectedFile( aClipFile, isDRMProtected ) ); + drmapi->Disconnect(); + + CleanupStack::PopAndDestroy( drmapi ); + + MUS_LOG( "mus: [ENGINE] <- CMusEngClipVideoPlayer::IsProtectedFileL(...)" ) + return isDRMProtected; + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +TTimeIntervalMicroSeconds CMusEngClipVideoPlayer::PositionMicroSecondsL( + TBool aActualPosition ) + { + __ASSERT_ALWAYS( iMceSession, User::Leave( KErrNotReady ) ); + + CMceFileSource* file = MusEngMceUtils::GetFileSourceL( *iMceSession ); + + TTimeIntervalMicroSeconds position = file->PositionL(); + TTimeIntervalMicroSeconds duration = file->DurationL(); + + TTimeIntervalMicroSeconds calculatedPosition; + + // Adjust position if we are fastforwarding or -rewinding + if ( iFFWDStartTime.Int64() != 0 ) + { + TTime now; + now.HomeTime(); + calculatedPosition = KFastWindingFactor * + now.MicroSecondsFrom( iFFWDStartTime ).Int64() + + position.Int64(); + if ( calculatedPosition > duration ) + { + calculatedPosition = duration; + } + } + else if ( iFRWDStartTime.Int64() != 0 ) + { + TTime now; + now.HomeTime(); + calculatedPosition = position.Int64() - + KFastWindingFactor * + now.MicroSecondsFrom( iFRWDStartTime ).Int64(); + if ( calculatedPosition < 0 ) + { + calculatedPosition = 0; + } + + if ( calculatedPosition == 0 ) + { + iRewindedToBeginning = ETrue; + } + } + else + { + calculatedPosition = position; + } + + if ( !aActualPosition ) + { + calculatedPosition = + GetVideoSinkRelativeFilePos( calculatedPosition, duration ); + } + + return calculatedPosition; + } + +// ----------------------------------------------------------------------------- +// Modifies file position if position has reached end before clip has ended. +// File position is not going in sync with local video playback as playback +// buffers media before starting playing. +// ----------------------------------------------------------------------------- +// +TTimeIntervalMicroSeconds CMusEngClipVideoPlayer::GetVideoSinkRelativeFilePos( + const TTimeIntervalMicroSeconds& aActualPosition, + const TTimeIntervalMicroSeconds& aDuration ) + { + MUS_LOG1( "mus: [ENGINE] PositionMicroSecondsL, pos before mod:%d", + aActualPosition.Int64() ) + + TTimeIntervalMicroSeconds tempCalculatedPosition( aActualPosition ); + + if ( iDelayFileEndingPos != 0 ) + { + iDelayFileEndingPos = aDuration; + tempCalculatedPosition = iDelayFileEndingPos; + } + else + { + // FRWD can go to zero even if clip has not ended, do not modify + // time in such situation. + if ( aActualPosition == 0 && + !HasClipEnded() && + iFRWDStartTime.Int64() == 0 && + !iRewindedToBeginning ) + { + const TInt KMusDelayEndingModifier = 2; + iDelayFileEndingPos = aDuration.Int64() - + iBufferingPeriod.Int64() / KMusDelayEndingModifier; + tempCalculatedPosition = iDelayFileEndingPos; + if ( iPreviousPos > tempCalculatedPosition ) + { + tempCalculatedPosition = iPreviousPos; + } + } + else + { + iDelayFileEndingPos = 0; + } + + if ( iRewindedToBeginning && aActualPosition > 0 ) + { + iRewindedToBeginning = EFalse; + } + + if ( tempCalculatedPosition < 0 ) + { + tempCalculatedPosition = 0; + } + } + + iPreviousPos = tempCalculatedPosition; + + return tempCalculatedPosition; + } + +// End of file diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshengine/src/musenginepluginentry.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/mmshengine/src/musenginepluginentry.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,41 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + +#include "musengsessionmanager.h" +#include +#include + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +const TImplementationProxy KMusEnginePluginImplementationTable[] = + { + IMPLEMENTATION_PROXY_ENTRY( 0x20021341, CMusEngSessionManager::NewL ) + }; + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +EXPORT_C const TImplementationProxy* ImplementationGroupProxy( TInt& aTableCount ) + { + aTableCount = sizeof( KMusEnginePluginImplementationTable ) / + sizeof( TImplementationProxy ); + + return KMusEnginePluginImplementationTable; + } diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshengine/src/musenglivesession.cpp --- a/mmsharing/mmshengine/src/musenglivesession.cpp Thu Aug 19 09:51:39 2010 +0300 +++ b/mmsharing/mmshengine/src/musenglivesession.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -18,15 +18,14 @@ // USER #include "musenglivesession.h" -#include "musengsessionobserver.h" -#include "musenglivesessionobserver.h" #include "musunittesting.h" #include "musengmceutils.h" #include "musenglogger.h" -#include "mussettings.h" -#include "musengorientationhandler.h" +#include "mussessionproperties.h" +#include "musenglivevideoplayer.h" // SYSTEM +#include #include #include #include @@ -38,632 +37,64 @@ #include #include -const TInt KMaxBrightness = 100; -const TInt KMinBrightness = -100; -const TInt KBrightnessStepSize = 10; -// Names of AVC levels in string for config keys stored in CenRep -_LIT8( KMusAvcBitrateLevel1, "AvcBrL1=" ); -_LIT8( KMusAvcBitrateLevel1b, "AvcBrL1b=" ); -_LIT8( KMusAvcBitrateLevel1_1, "AvcBrL1_1=" ); -_LIT8( KMusAvcBitrateLevel1_2, "AvcBrL1_2=" ); -_LIT8( KMusAvcBitrateLevel1_3, "AvcBrL1_3=" ); -_LIT8( KMusAvcBitrateLevel2, "AvcBrL2=" ); - -_LIT8( KMusEncoderInfoTokenizer, ";" ); - -//Number of big and small zoom steps on Zoom scale -const TInt KZoomBigStepCount = 15; -const TInt KZoomSmallStepCount = KZoomBigStepCount*2; -const TInt KZoomStepMinSize = 1; - -const TInt64 KZoomFasterTime = 333333; // 1/3 second +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +CMusEngLiveSession* CMusEngLiveSession::NewL() + { + CMusEngLiveSession* self = new( ELeave )CMusEngLiveSession(); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + return self; + } // ----------------------------------------------------------------------------- // // ----------------------------------------------------------------------------- // -EXPORT_C CMusEngLiveSession* CMusEngLiveSession::NewL( - const TDesC& aFileName, - const TRect& aRect, - MMusEngSessionObserver& aSessionObserver, - MMusEngOutSessionObserver& aOutSessionObserver, - MMusEngLiveSessionObserver& aLiveSessionObserver, - TUint aSipProfileId ) +CMusEngLiveSession::CMusEngLiveSession() + : CMusEngMceOutSession() { - CMusEngLiveSession* self = new( ELeave ) CMusEngLiveSession( - aSessionObserver, - aOutSessionObserver, - aLiveSessionObserver, - aRect, - aFileName ); - CleanupStack::PushL( self ); - self->ConstructL( aSipProfileId ); - CleanupStack::Pop( self ); - return self; } - // ----------------------------------------------------------------------------- // // ----------------------------------------------------------------------------- // -EXPORT_C CMusEngLiveSession* CMusEngLiveSession::NewL( - const TRect& aRect, - MMusEngSessionObserver& aSessionObserver, - MMusEngOutSessionObserver& aOutSessionObserver, - MMusEngLiveSessionObserver& aLiveSessionObserver, - TUint aSipProfileId ) +void CMusEngLiveSession::ConstructL() { - CMusEngLiveSession* self = new( ELeave ) CMusEngLiveSession( - aSessionObserver, - aOutSessionObserver, - aLiveSessionObserver, - aRect ); - CleanupStack::PushL( self ); - self->ConstructL( aSipProfileId ); - CleanupStack::Pop( self ); - return self; + MUS_LOG( "mus: [ENGINE] -> CMusEngLiveSession::ConstructL()" ) + + iCameraHandler.ReadCameraUsageKeyL(); + CMusEngMceOutSession::ConstructL(); + + iLiveVideoPlayer = + CMusEngLiveVideoPlayer::NewL( *this, iCameraHandler, *this ); + + MUS_LOG( "mus: [ENGINE] <- CMusEngLiveSession::ConstructL()" ) } - // ----------------------------------------------------------------------------- // // ----------------------------------------------------------------------------- // CMusEngLiveSession::~CMusEngLiveSession() { - MUS_LOG( "mus: [ENGINE] -> CMusEngLiveSession::~CMusEngLiveSession()" ) - - delete iOrientationHandler; - + MUS_LOG( "mus: [ENGINE] -> CMusEngLiveSession::~CMusEngLiveSession()" ) + delete iLiveVideoPlayer; MUS_LOG( "mus: [ENGINE] <- CMusEngLiveSession::~CMusEngLiveSession()" ) } - // ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -EXPORT_C TInt CMusEngLiveSession::CurrentZoomL() const - { - MUS_LOG( "mus: [ENGINE] -> CMusEngLiveSession::CurrentZoomL()" ) - __ASSERT_ALWAYS( iSession, User::Leave( KErrNotReady ) ); - - CMceCameraSource* camera = MusEngMceUtils::GetCameraL( *iSession ); - - TInt currentZoom = camera->ZoomFactorL() + camera->DigitalZoomFactorL(); - - MUS_LOG1( "mus: [ENGINE] <- CMusEngLiveSession::CurrentZoomL( %d )", - currentZoom ) - - return currentZoom; - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -EXPORT_C void CMusEngLiveSession::SetZoomL( TInt aNewZoomFactor ) - { - MUS_LOG1( "mus: [ENGINE] -> CMusEngLiveSession::SetZoomL( %d )", - aNewZoomFactor ) - - __ASSERT_ALWAYS( iSession, User::Leave( KErrNotReady ) ); - __ASSERT_ALWAYS( aNewZoomFactor <= MaxZoomL() && - aNewZoomFactor >= MinZoomL(), - User::Leave( KErrArgument ) ); - - CMceCameraSource* camera = MusEngMceUtils::GetCameraL( *iSession ); - - if ( aNewZoomFactor < iCameraInfo.iMaxZoom ) - { - MUS_LOG( "mus: [ENGINE] Optical zoom factor increased" ) - camera->SetZoomFactorL( aNewZoomFactor ); - } - - if ( aNewZoomFactor - iCameraInfo.iMaxZoom >= 0 ) - { - camera->SetDigitalZoomFactorL( aNewZoomFactor - iCameraInfo.iMaxZoom ); - MUS_LOG1( "mus: [ENGINE] Digital zoom factor increased to %d", - aNewZoomFactor - iCameraInfo.iMaxZoom ) - } - - MUS_LOG( "mus: [ENGINE] <- CMusEngLiveSession::SetZoomL()" ) - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -EXPORT_C TInt CMusEngLiveSession::MinZoomL() const - { - MUS_LOG( "mus: [ENGINE] -> CMusEngLiveSession::MinZoomL()" ) - __ASSERT_ALWAYS( iSession, User::Leave( KErrNotReady ) ); - - // Although we do not need camera for return value, we have to have it in - // order to have proper iCameraInfo - MusEngMceUtils::GetCameraL( *iSession ); - - MUS_LOG1( "mus: [ENGINE] <- CMusEngLiveSession::MinZoomL( %d )", - iCameraInfo.iMinZoom ) - - return iCameraInfo.iMinZoom; - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -EXPORT_C TInt CMusEngLiveSession::MaxZoomL() const - { - MUS_LOG( "mus: [ENGINE] -> CMusEngLiveSession::MaxZoomL()" ) - __ASSERT_ALWAYS( iSession, User::Leave( KErrNotReady ) ); - - // Although we do not need camera for return value, we have to have it in - // order to have proper iCameraInfo - MusEngMceUtils::GetCameraL( *iSession ); - - TInt maxZoom = iCameraInfo.iMaxZoom + iCameraInfo.iMaxDigitalZoom; - - MUS_LOG1( "mus: [ENGINE] Max optical zoom( %d )", - iCameraInfo.iMaxZoom ) - MUS_LOG1( "mus: [ENGINE] Max digital zoom( %d )", - iCameraInfo.iMaxDigitalZoom ) - MUS_LOG1( "mus: [ENGINE] <- CMusEngLiveSession::MaxZoomL( %d )", - maxZoom ) - - return maxZoom; - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -EXPORT_C void CMusEngLiveSession::ZoomInL() - { - MUS_LOG( "mus: [ENGINE] -> CMusEngLiveSession::ZoomInL()" ) - __ASSERT_ALWAYS( iSession, User::Leave( KErrNotReady ) ); - - CMceCameraSource* camera = MusEngMceUtils::GetCameraL( *iSession ); - - // First try to increase optical zoom factor. If in maximum value, try to - // increase digital zoom factor. - TInt stepSize = ZoomStepSize( iZoomInTime ); - TInt zoomFactor = camera->ZoomFactorL(); - TInt zoomDigitalFactor = camera->DigitalZoomFactorL(); - - //increate optical zoom factor - if ( zoomFactor + stepSize <= iCameraInfo.iMaxZoom ) - { - //optical zoom factor is enough - camera->SetZoomFactorL( zoomFactor + stepSize ); - stepSize = 0; - } - else if (zoomFactor < iCameraInfo.iMaxZoom) - { - stepSize -= iCameraInfo.iMaxZoom - zoomFactor; - camera->SetZoomFactorL( iCameraInfo.iMaxZoom ); - } - - //increate digital zoom factor - if (stepSize > 0) - { - if ( zoomDigitalFactor + stepSize <= iCameraInfo.iMaxDigitalZoom ) - { - camera->SetDigitalZoomFactorL( zoomDigitalFactor + stepSize ); - } - else - { - camera->SetDigitalZoomFactorL( iCameraInfo.iMaxDigitalZoom ); - MUS_LOG( "mus: [ENGINE] CMusEngLiveSession::ZoomInL(): Optical \ - and digital zoom factors are in maximum value" ) - } - } - - MUS_LOG( "mus: [ENGINE] <- CMusEngLiveSession::ZoomInL()" ) - - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -EXPORT_C void CMusEngLiveSession::ZoomOutL() - { - MUS_LOG( "mus: [ENGINE] -> CMusEngLiveSession::ZoomOutL()" ) - __ASSERT_ALWAYS( iSession, User::Leave( KErrNotReady ) ); - - CMceCameraSource* camera = MusEngMceUtils::GetCameraL( *iSession ); - - // First try to decrease digital zoom factor. If already zero, try to - // decrease optical zoom factor. - TInt stepSize = ZoomStepSize( iZoomOutTime ); - TInt zoomFactor = camera->ZoomFactorL(); - TInt zoomDigitalFactor = camera->DigitalZoomFactorL(); - - //decreate digital zoom factor firstly - if ( zoomDigitalFactor - stepSize >= 0 ) - { - //digital zoom factor is enough - camera->SetDigitalZoomFactorL( zoomDigitalFactor - stepSize ); - stepSize = 0; - } - else if ( zoomDigitalFactor > 0 ) - { - stepSize -= zoomDigitalFactor; - camera->SetDigitalZoomFactorL( 0 ); - MUS_LOG("mus: [ENGINE] Digigal Factor to zero") - } - - //decreate optical zoom factor firstly - if ( stepSize > 0 ) - { - if ( zoomFactor - stepSize > iCameraInfo.iMinZoom ) - { - camera->SetZoomFactorL( zoomFactor - stepSize ); - } - else - { - MUS_LOG( "mus: [ENGINE] CMusEngLiveSession::ZoomOutL(): Optical and \ - digital zoom factors are in minimum value" ) - camera->SetZoomFactorL( iCameraInfo.iMinZoom ); - } - } - - MUS_LOG( "mus: [ENGINE] <- CMusEngLiveSession::ZoomOutL()" ) - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -EXPORT_C void CMusEngLiveSession::ZoomDefaultL() - { - MUS_LOG( "mus: [ENGINE] -> CMusEngLiveSession::ZoomDefaultL()" ) - - __ASSERT_ALWAYS( iSession, User::Leave( KErrNotReady ) ); - - CMceCameraSource* camera = MusEngMceUtils::GetCameraL( *iSession ); - - camera->SetZoomFactorL( iDefaultZoomFactor ); - camera->SetDigitalZoomFactorL( 0 ); - - MUS_LOG( "mus: [ENGINE] <- CMusEngLiveSession::ZoomDefaultL()" ) - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -EXPORT_C void CMusEngLiveSession::SetBrightnessL( TInt aBrightness ) const - { - MUS_LOG1( "mus: [ENGINE] -> CMusEngLiveSession::SetBrightnessL( %d )", - aBrightness ) - - __ASSERT_ALWAYS( iSession, User::Leave( KErrNotReady ) ); - - CMceCameraSource* camera = MusEngMceUtils::GetCameraL( *iSession ); - camera->SetBrightnessL( aBrightness ); - - MUS_LOG( "mus: [ENGINE] <- CMusEngLiveSession::SetBrightnessL()" ) - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -EXPORT_C TInt CMusEngLiveSession::CurrentBrightnessL() const - { - MUS_LOG( "mus: [ENGINE] -> CMusEngLiveSession::CurrentBrightnessL()" ) - - __ASSERT_ALWAYS( iSession, User::Leave( KErrNotReady ) ); - - CMceCameraSource* camera = MusEngMceUtils::GetCameraL( *iSession ); - TInt currentBrightness = camera->BrightnessL(); - - MUS_LOG1( "mus: [ENGINE] <- CMusEngLiveSession::CurrentBrightnessL(): %d", - currentBrightness ) - - return currentBrightness; - } - - -// ----------------------------------------------------------------------------- -// +// From MLcSession // ----------------------------------------------------------------------------- // -EXPORT_C TInt CMusEngLiveSession::MaxBrightnessL() const - { - MUS_LOG( "mus: [ENGINE] -> CMusEngLiveSession::MaxBrightnessL()" ) - - // maximum brightness is not in camera info, but a constant 100 - - MUS_LOG1( "mus: [ENGINE] <- CMusEngLiveSession::MaxBrightnessL(): %d", - KMaxBrightness ) - - return KMaxBrightness; - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -EXPORT_C TInt CMusEngLiveSession::MinBrightnessL() const - { - MUS_LOG( "mus: [ENGINE] -> CMusEngLiveSession::MinBrightnessL()" ) - - // maximum brightness is not in camera info, but a constant -100 - - MUS_LOG1( "mus: [ENGINE] <- CMusEngLiveSession::MinBrightnessL(): %d", - KMinBrightness ) - - return KMinBrightness; - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -EXPORT_C void CMusEngLiveSession::IncreaseBrightnessL() - { - MUS_LOG( "mus: [ENGINE] -> CMusEngLiveSession::IncreaseBrightnessL()" ) - __ASSERT_ALWAYS( iSession, User::Leave( KErrNotReady ) ); - - CMceCameraSource* camera = MusEngMceUtils::GetCameraL( *iSession ); - - TInt newBrightness = camera->BrightnessL() + KBrightnessStepSize; - - if ( newBrightness < KMaxBrightness ) - { - camera->SetBrightnessL( newBrightness ); - } - else - { - camera->SetBrightnessL( KMaxBrightness ); - } - - MUS_LOG( "mus: [ENGINE] <- CMusEngLiveSession::IncreaseBrightnessL()" ) - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -EXPORT_C void CMusEngLiveSession::DecreaseBrightnessL() - { - MUS_LOG( "mus: [ENGINE] -> CMusEngLiveSession::DecreaseBrightnessL()" ) - __ASSERT_ALWAYS( iSession, User::Leave( KErrNotReady ) ); - - CMceCameraSource* camera = MusEngMceUtils::GetCameraL( *iSession ); - - TInt newBrightness = camera->BrightnessL() - KBrightnessStepSize; - - if ( newBrightness > KMinBrightness ) - { - camera->SetBrightnessL( newBrightness ); - } - else - { - camera->SetBrightnessL( KMinBrightness ); - } - - MUS_LOG( "mus: [ENGINE] <- CMusEngLiveSession::DecreaseBrightnessL()" ) - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -EXPORT_C void CMusEngLiveSession::BrightnessDefaultL() - { - MUS_LOG( "mus: [ENGINE] -> CMusEngLiveSession::BrightnessDefaultL()" ) - __ASSERT_ALWAYS( iSession, User::Leave( KErrNotReady ) ); - - CMceCameraSource* camera = MusEngMceUtils::GetCameraL( *iSession ); - - camera->SetBrightnessL( iDefaultBrightness ); - - MUS_LOG( "mus: [ENGINE] <- CMusEngLiveSession::BrightnessDefaultL()" ) - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -EXPORT_C void CMusEngLiveSession::BrightnessAutoL() - { - MUS_LOG( "mus: [ENGINE] -> CMusEngLiveSession::BrightnessAutoL()" ) - __ASSERT_ALWAYS( iSession, User::Leave( KErrNotReady ) ); - - CMceCameraSource* camera = MusEngMceUtils::GetCameraL( *iSession ); - - camera->SetBrightnessL( CCamera::EBrightnessAuto ); - - MUS_LOG( "mus: [ENGINE] <- CMusEngLiveSession::BrightnessAutoL()" ) - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -EXPORT_C void CMusEngLiveSession::RecordL( TBool aRecord ) +MLcVideoPlayer* CMusEngLiveSession::LocalVideoPlayer() { - MUS_LOG1( "mus: [ENGINE] -> CMusEngLiveSession::RecordL( %d )", aRecord ) - - __ASSERT_ALWAYS( iSession, User::Leave( KErrNotReady ) ); - - CMceMediaSink* fileSink = MusEngMceUtils::GetMediaSink( *iSession, - KMceFileSink ); - - __ASSERT_ALWAYS( fileSink, User::Leave( KErrNotReady ) ); - - if( aRecord && !fileSink->IsEnabled() ) - { - fileSink->EnableL(); - } - else if ( !aRecord && fileSink->IsEnabled() ) - { - fileSink->DisableL(); - } - else - { - // NOP - } - - MUS_LOG1( "mus: [ENGINE] <- CMusEngLiveSession::RecordL( %d )", aRecord ) - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -EXPORT_C TBool CMusEngLiveSession::IsRecording() - { - MUS_LOG( "mus: [ENGINE] -> CMusEngLiveSession::IsRecording()" ) - - TBool isRecording( EFalse ); - - CMceMediaSink* fileSink = MusEngMceUtils::GetMediaSink( *iSession, - KMceFileSink ); - if ( fileSink ) - { - isRecording = fileSink->IsEnabled(); - } - - MUS_LOG1( "mus: [ENGINE] <- CMusEngLiveSession::IsRecording(%d)", - isRecording ) - - return isRecording; - } - - -// ----------------------------------------------------------------------------- -// Enable camera if not already enabled -// ----------------------------------------------------------------------------- -// -EXPORT_C void CMusEngLiveSession::PlayL() - { - MUS_LOG( "mus: [ENGINE] -> CMusEngLiveSession::PlayL()" ) - - __ASSERT_ALWAYS( iSession, User::Leave( KErrNotReady ) ); - - CMceCameraSource* camera = MusEngMceUtils::GetCameraL( *iSession ); - - if ( !camera->IsEnabled() ) - { - camera->EnableL(); - } - else - { - MUS_LOG( "mus: [ENGINE] Camera already enabled, ignore request" ) - } - - iOrientationHandler->UpdateL(); - - MUS_LOG( "mus: [ENGINE] <- CMusEngLiveSession::PlayL()" ) - } - - -// ----------------------------------------------------------------------------- -// Disable camera if not already disabled -// ----------------------------------------------------------------------------- -// -EXPORT_C void CMusEngLiveSession::PauseL() - { - MUS_LOG( "mus: [ENGINE] -> CMusEngLiveSession::PauseL()" ) - - __ASSERT_ALWAYS( iSession, User::Leave( KErrNotReady ) ); - - CMceCameraSource* camera = MusEngMceUtils::GetCameraL( *iSession ); - - if ( camera->IsEnabled() ) - { - camera->DisableL(); - } - else - { - MUS_LOG( "mus: [ENGINE] Camera already disabled, ignore request" ) - } - - iOrientationHandler->UpdateL(); - - MUS_LOG( "mus: [ENGINE] <- CMusEngLiveSession::PauseL()" ) - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -EXPORT_C TBool CMusEngLiveSession::IsPlayingL() - { - __ASSERT_ALWAYS( iSession, User::Leave( KErrNotReady ) ); - - return ( MusEngMceUtils::GetCameraL( *iSession )->IsEnabled() ); - } - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusEngLiveSession::EnableDisplayL( TBool aEnable ) -{ - CMusEngMceSession::EnableDisplayL( aEnable ); - iOrientationHandler->UpdateL(); -} - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusEngLiveSession::RefreshOrientationL() - { - MUS_LOG( "mus: [ENGINE] -> CMusEngLiveSession::RefreshOrientationL()" ) - - iOrientationHandler->RefreshOrientationL(); - - MUS_LOG( "mus: [ENGINE] <- CMusEngLiveSession::RefreshOrientationL()" ) - } - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusEngLiveSession::InitializeZoomStepSize() - { - MUS_LOG( "mus: [ENGINE] -> CMusEngLiveSession::InitializeZoomStepSize()" ) - - iBigZoomStep = ( iCameraInfo.iMaxZoom + iCameraInfo.iMaxDigitalZoom - - iCameraInfo.iMinZoom ) / KZoomBigStepCount; - - if ( iBigZoomStep < KZoomStepMinSize ) - iBigZoomStep = KZoomStepMinSize; - - iSmallZoomStep = ( iCameraInfo.iMaxZoom + iCameraInfo.iMaxDigitalZoom - - iCameraInfo.iMinZoom ) / KZoomSmallStepCount; - - if ( iSmallZoomStep < KZoomStepMinSize ) - iSmallZoomStep = KZoomStepMinSize; - - MUS_LOG2( "mus: [ENGINE] iSmallZoomStep = %d, iBigZoomStep = %d", - iSmallZoomStep, iBigZoomStep ) - MUS_LOG( "mus: [ENGINE] <- CMusEngLiveSession::InitializeZoomStepSize()" ) + return iLiveVideoPlayer; } // ----------------------------------------------------------------------------- @@ -671,12 +102,14 @@ // ----------------------------------------------------------------------------- // void CMusEngLiveSession::CompleteSessionStructureL( - CMceStreamBundle& /*aLocalBundle*/ ) + CMceStreamBundle& /*aLocalBundle*/ ) { MUS_LOG( "mus: [ENGINE] -> CMusEngLiveSession::CompleteSessionStructureL()" ) __ASSERT_ALWAYS( iSession, User::Leave( KErrNotReady ) ); + iCameraHandler.SetSession( iSession ); + // Create outgoing video stream CMceVideoStream* videoStream = CMceVideoStream::NewLC(); @@ -686,10 +119,8 @@ CMceCameraSource* camera = CMceCameraSource::NewLC( *iManager ); camera->DisableL(); // Start session in pause mode. - camera->GetCameraInfo( iCameraInfo ); - iDefaultZoomFactor = camera->ZoomFactorL(); - InitializeZoomStepSize(); + iCameraHandler.InitializeL( *camera ); videoStream->SetSourceL( camera ); CleanupStack::Pop( camera ); @@ -698,11 +129,12 @@ CleanupStack::Pop( videoStream ); // Construct recording stream if needed - if ( iRecordedFile != KNullDesC ) + if ( iLiveVideoPlayer->LcFileName().Length() > 0 ) { CMceVideoStream* streamForRecording = CMceVideoStream::NewLC(); - CMceFileSink* fileSink = CMceFileSink::NewLC( iRecordedFile ); + CMceFileSink* fileSink = + CMceFileSink::NewLC( iLiveVideoPlayer->LcFileName() ); fileSink->DisableL(); // Start in not recording mode streamForRecording->AddSinkL( fileSink ); CleanupStack::Pop( fileSink ); @@ -711,56 +143,22 @@ iSession->AddStreamL( streamForRecording ); CleanupStack::Pop( streamForRecording ); } - + + iLiveVideoPlayer->SetMceSession( iSession ); + MUS_LOG( "mus: [ENGINE] <- CMusEngLiveSession::CompleteSessionStructureL()" ) } - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusEngLiveSession::HandleSessionStateChanged( - CMceSession& aSession, - TInt aStatusCode, - const TDesC8& aReasonPhrase ) - { - MUS_LOG( "mus: [ENGINE] -> CMusEngLiveSession::HandleSessionStateChanged" ) - - MUS_ENG_LOG_SESSION_STATE_AND_STATUS( aSession, aStatusCode, aReasonPhrase ) - - if ( iSession && - iSession == &aSession && - aSession.State() == CMceSession::EEstablished && - iStoreEncoderConfigInfo ) - { - iStoreEncoderConfigInfo = EFalse; - TRAPD( error, StoreEncoderConfigInfoL() ) - if ( error != KErrNone && error != KErrNotFound ) - { - // Only acceptable error is absence of repository entry, - // otherwise we inform user about failed session. - iSessionObserver.SessionFailed(); - } - } - - CMusEngMceSession::HandleSessionStateChanged( aSession, - aStatusCode, - aReasonPhrase ); - - MUS_LOG( "mus: [ENGINE] <- CMusEngLiveSession::HandleSessionStateChanged" ) - } - - // ----------------------------------------------------------------------------- // Sets video codec attributes // ----------------------------------------------------------------------------- // -void CMusEngLiveSession::AdjustVideoCodecL( CMceVideoCodec& aVideoCodec ) +void CMusEngLiveSession::AdjustVideoCodecL( CMceVideoCodec& aVideoCodec, + TMceSourceType aSourceType ) { MUS_LOG( "mus: [ENGINE] -> CMusEngLiveSession::AdjustVideoCodecL()" ) - CMusEngMceOutSession::AdjustVideoCodecL( aVideoCodec ); + CMusEngMceOutSession::AdjustVideoCodecL( aVideoCodec, aSourceType ); // Starting with 80Kbps will give better quality than starting with // 64kbps.And if network behaves bad than anyhow we will drop down or @@ -786,10 +184,7 @@ User::LeaveIfError( aVideoCodec.SetAllowedBitrates( KMceAvcCodecProfileIdBaseline | KMceAvcCodecProfileIopConstraintSet | - KMceAvcBitrateLevel1b ) ); - - SetCodecConfigKeyL( aVideoCodec ); - SetEncodingDeviceL( aVideoCodec ); + KMceAvcBitrateLevel1b ) ); } else { @@ -799,7 +194,6 @@ MUS_LOG( "mus: [ENGINE] <- CMusEngLiveSession::AdjustVideoCodecL()" ) } - // ----------------------------------------------------------------------------- // // ----------------------------------------------------------------------------- @@ -813,7 +207,6 @@ MUS_LOG( "mus: [ENGINE] <- CMusEngLiveSession::AdjustAudioCodecL()" ) } - // ----------------------------------------------------------------------------- // // ----------------------------------------------------------------------------- @@ -824,9 +217,7 @@ CMusEngMceSession::DoCodecSelectionL( aVideoStream ); - if ( iVideoCodecList && - iVideoCodecList->Length() > 0 && - iVideoCodecList->FindF( KMceSDPNameH264 ) == KErrNotFound ) + if ( iVideoCodecList && !IsH264Supported() ) { // We know that recipient doesn't support AVC, so we do not offer it const RPointerArray& codecs = aVideoStream.Codecs(); @@ -845,7 +236,6 @@ MUS_LOG( "mus: [ENGINE] <- CMusEngLiveSession::DoCodecSelectionL()" ) } - // ----------------------------------------------------------------------------- // @@ -864,14 +254,14 @@ MUS_ENG_LOG_STREAM_STATE( aStream ) CMceVideoStream* recordingStream = - MusEngMceUtils::GetRecordingStream( *iSession ); + MusEngMceUtils::GetRecordingStream( *iSession ); if ( recordingStream && recordingStream == &aStream && aStream.State() == CMceMediaStream::ENoResources && aSink.IsEnabled() == EFalse ) { - iLiveSessionObserver.DiskFull(); + InformObserverAboutSessionFailure( MLcSession::EDiskFull ); } else { @@ -881,276 +271,3 @@ MUS_LOG( "mus: [ENGINE] <- CMusEngLiveSession::StreamStateChanged( sink )" ) } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -CMusEngLiveSession::CMusEngLiveSession( - MMusEngSessionObserver& aSessionObserver, - MMusEngOutSessionObserver& aOutSessionObserver, - MMusEngLiveSessionObserver& aLiveSessionObserver, - const TRect& aRect, - const TDesC& aRecordedFile ) - : CMusEngMceOutSession( aRect, - aSessionObserver, - aOutSessionObserver ), - iLiveSessionObserver( aLiveSessionObserver ), - iDefaultZoomFactor( -1 ), - iDefaultBrightness( 0 ), - iRecordedFile( aRecordedFile ), - iZoomInTime(0), - iZoomOutTime(0), - iSmallZoomStep( KZoomStepMinSize ), - iBigZoomStep( KZoomStepMinSize ) - { - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusEngLiveSession::ConstructL( TUint aSipProfileId ) - { - MUS_LOG( "mus: [ENGINE] -> CMusEngLiveSession::ConstructL()" ) - - CMusEngMceOutSession::ConstructL( aSipProfileId ); - - iOrientationHandler = CMusEngOrientationHandler::NewL( *this, iLiveSessionObserver ); - - MUS_LOG( "mus: [ENGINE] <- CMusEngLiveSession::ConstructL()" ) - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusEngLiveSession::SetEncodingDeviceL( CMceVideoCodec& aVideoCodec ) - { - MUS_LOG( "mus: [ENGINE] -> CMusEngLiveSession::SetEncodingDeviceL()" ) - - // We try to read encoding device UID. If we do not succeed, we use default - - const TUid KDefaultEncodingDevice( TUid::Uid( 0x20001C13 ) ); - TUid encodingDevice( KDefaultEncodingDevice ); - TRAPD( error, - encodingDevice = MultimediaSharingSettings::EncodingDeviceL() ) - __ASSERT_ALWAYS( error == KErrNone || error == KErrNotFound, - User::Leave( error ) ); - aVideoCodec.SetPreferredEncodingDecodingDeviceL( encodingDevice ); - - MUS_LOG( "mus: [ENGINE] <- CMusEngLiveSession::SetEncodingDeviceL()" ) - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusEngLiveSession::SetCodecConfigKeyL( CMceVideoCodec& aVideoCodec ) - { - MUS_LOG( "mus: [ENGINE] -> CMusEngLiveSession::SetCodecConfigKeyL()" ) - - HBufC8* configKey( NULL ); - - // We try to read config key. If we do not succeed, we prepare to - // write keys to CenRep for the next time. - TRAPD( error, configKey = ReadCodecConfigKeyL( aVideoCodec ) ) - - if ( error == KErrNone ) - { - // There is a repository for config keys - if ( configKey ) - { - // ...and key is found. - CleanupStack::PushL( configKey ); - aVideoCodec.SetConfigKeyL( *configKey ); - CleanupStack::PopAndDestroy( configKey ); - } - else - { - // ...but key is not found, so it must be written to CenRep when - // available. - iStoreEncoderConfigInfo = ETrue; - } - } - else if ( error == KErrNotFound ) - { - // There is no repository for config keys so there is no point - // trying to write anything there. Session setup can still continue. - MUS_LOG1( "mus: [ENGINE] No repository for config keys [%d]", error ) - } - else - { - User::Leave( error ); - } - - MUS_LOG( "mus: [ENGINE] <- CMusEngLiveSession::SetCodecConfigKeyL()" ) - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -HBufC8* CMusEngLiveSession::ReadCodecConfigKeyL( - const CMceVideoCodec& aVideoCodec ) const - { - MUS_LOG( "mus: [ENGINE] -> CMusEngLiveSession::ReadCodecConfigKeyL()" ) - - HBufC8* key( NULL ); - - HBufC8* encoderInfo = MultimediaSharingSettings::EncoderConfigInfoLC(); - __ASSERT_ALWAYS( encoderInfo, User::Leave( KErrNotFound ) ); - - TPtrC8 keyId( ConfigKeyIdL( aVideoCodec ) ); - - TInt tokenStartPosition( encoderInfo->FindC( keyId ) ); - if ( tokenStartPosition > KErrNotFound ) - { - TInt tokenLength( encoderInfo->Mid( tokenStartPosition ).FindC( - KMusEncoderInfoTokenizer ) ); - if ( tokenLength > KErrNotFound ) - { - // Separate key from token by removing keyId - TInt keyStartPosition = tokenStartPosition + keyId.Length(); - TInt keyLength = tokenLength - keyId.Length(); - TPtrC8 keyPtr = encoderInfo->Mid( keyStartPosition, keyLength ); - key = keyPtr.AllocL(); - } - } - - CleanupStack::PopAndDestroy( encoderInfo ); - - MUS_LOG( "mus: [ENGINE] <- CMusEngLiveSession::ReadCodecConfigKeyL()" ) - - return key; - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusEngLiveSession::StoreEncoderConfigInfoL() const - { - MUS_LOG( "mus: [ENGINE] -> CMusEngLiveSession::StoreEncoderConfigInfoL()" ) - - HBufC8* configInfoInCenRep = MultimediaSharingSettings::EncoderConfigInfoLC(); - __ASSERT_ALWAYS( configInfoInCenRep, User::Leave( KErrNotFound ) ); - - TBuf8 keys; - keys.Append( *configInfoInCenRep ); - - CMceVideoStream* stream = MusEngMceUtils::GetVideoOutStreamL( *iSession ); - const RPointerArray& codecs = stream->Codecs(); - - for ( TInt codecIndex = 0; codecIndex < codecs.Count(); ++codecIndex ) - { - if ( codecs[codecIndex]->SdpName().FindF( KMceSDPNameH264 ) >= 0 ) - { - const TPtrC8 keyId = ConfigKeyIdL( *codecs[codecIndex] ); - HBufC8* configKey = codecs[codecIndex]->ConfigKeyL(); - CleanupStack::PushL( configKey ); - - if ( configKey && - keys.FindF( keyId ) == KErrNotFound && - configInfoInCenRep->FindF( keyId ) == KErrNotFound ) - { - - if ( keys.Length() + - keyId.Length() + - configKey->Length() + - KMusEncoderInfoTokenizer().Length() < - NCentralRepositoryConstants::KMaxBinaryLength ) - { - keys.Append( keyId ); - keys.Append( *configKey ); - keys.Append( KMusEncoderInfoTokenizer ); - } - } - - CleanupStack::PopAndDestroy( configKey ); - } - } - - MultimediaSharingSettings::SetEncoderConfigInfoL( keys ); - - CleanupStack::PopAndDestroy( configInfoInCenRep ); - - MUS_LOG( "mus: [ENGINE] <- CMusEngLiveSession::StoreEncoderConfigInfoL()" ) - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -const TPtrC8 CMusEngLiveSession::ConfigKeyIdL( - const CMceVideoCodec& aVideoCodec ) const - { - MUS_LOG( "mus: [ENGINE] -> CMusEngLiveSession::ConfigKeyIdL()" ) - - // Currently works only for AVC - __ASSERT_ALWAYS( aVideoCodec.SdpName().FindF( KMceSDPNameH264 ) >= 0, - User::Leave( KErrArgument ) ); - - TPtrC8 configKeyTokenId; - - if ( aVideoCodec.AllowedBitrates() & KMceAvcBitrateLevel1 ) - { - configKeyTokenId.Set( KMusAvcBitrateLevel1() ); - } - else if ( aVideoCodec.AllowedBitrates() & KMceAvcBitrateLevel1b ) - { - configKeyTokenId.Set( KMusAvcBitrateLevel1b() ); - } - else if ( aVideoCodec.AllowedBitrates() & KMceAvcBitrateLevel1_1 ) - { - configKeyTokenId.Set( KMusAvcBitrateLevel1_1() ); - } - else if ( aVideoCodec.AllowedBitrates() & KMceAvcBitrateLevel1_2 ) - { - configKeyTokenId.Set( KMusAvcBitrateLevel1_2() ); - } - else if ( aVideoCodec.AllowedBitrates() & KMceAvcBitrateLevel1_3 ) - { - configKeyTokenId.Set( KMusAvcBitrateLevel1_3() ); - } - else if ( aVideoCodec.AllowedBitrates() & KMceAvcBitrateLevel2 ) - { - configKeyTokenId.Set( KMusAvcBitrateLevel2() ); - } - else - { - User::Leave( KErrNotFound ); - } - - MUS_LOG( "mus: [ENGINE] <- CMusEngLiveSession::ConfigKeyIdL()" ) - - return configKeyTokenId; - } - - -// ----------------------------------------------------------------------------- -// Calculate the zoom step based time escaped -// ----------------------------------------------------------------------------- -TInt CMusEngLiveSession::ZoomStepSize( TInt64& aTime ) - { -// MUS_LOG( "mus: [ENGINE] -> CMusEngLiveSession::ZoomStepSize()" ) - TTime now; - now.HomeTime(); - TInt64 timeNow = now.Int64(); - TInt stepSize = ( ( timeNow - aTime ) <= KZoomFasterTime ) ? iBigZoomStep : iSmallZoomStep; - - aTime = now.Int64(); - - MUS_LOG1( "mus: [ENGINE] stepSize = %d", stepSize ); -// MUS_LOG( "mus: [ENGINE] <- CMusEngLiveSession::ZoomStepSize()" ) - return stepSize; - } - - diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshengine/src/musenglivevideoplayer.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/mmshengine/src/musenglivevideoplayer.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,198 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + +// USER +#include "musenglivevideoplayer.h" +#include "musengcamerahandler.h" +#include "musengmceutils.h" +#include "musengdisplayhandler.h" + +// SYSTEM +#include +#include + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +CMusEngLiveVideoPlayer* CMusEngLiveVideoPlayer::NewL( + MMusEngDisplayHandler& aDisplayHandler, + TMusEngCameraHandler& aCameraHandler, + MLcAudioControl& aLcAudioControl ) + { + return new( ELeave )CMusEngLiveVideoPlayer( + aDisplayHandler, aCameraHandler, aLcAudioControl ); + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +CMusEngLiveVideoPlayer::CMusEngLiveVideoPlayer( + MMusEngDisplayHandler& aDisplayHandler, + TMusEngCameraHandler& aCameraHandler, + MLcAudioControl& aLcAudioControl ) : + CMusEngLocalVideoPlayer( aDisplayHandler, aLcAudioControl ), + iCameraHandler( aCameraHandler ) + { + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +CMusEngLiveVideoPlayer::~CMusEngLiveVideoPlayer() + { + } + +// ----------------------------------------------------------------------------- +// From MLcVideoPlayer +// ----------------------------------------------------------------------------- +// +TBool CMusEngLiveVideoPlayer::LcIsPlayingL() + { + return iCameraHandler.IsPlayingL(); + } + +// ----------------------------------------------------------------------------- +// From MLcVideoPlayer +// ----------------------------------------------------------------------------- +// +void CMusEngLiveVideoPlayer::LcPlayL( TLcVideoPlayerSource /*aSource*/ ) + { + iCameraHandler.PlayL(); + } + +// ----------------------------------------------------------------------------- +// From MLcVideoPlayer +// ----------------------------------------------------------------------------- +// +void CMusEngLiveVideoPlayer::LcPauseL() + { + iCameraHandler.PauseL(); + } + +// ----------------------------------------------------------------------------- +// From MLcVideoPlayer +// ----------------------------------------------------------------------------- +// +MLcCameraControl* CMusEngLiveVideoPlayer::LcCameraControl() + { + return &iCameraHandler; + } + +// ----------------------------------------------------------------------------- +// From MLcVideoPlayer +// ----------------------------------------------------------------------------- +// +MLcDestinationFileControl* CMusEngLiveVideoPlayer::LcDestinationFileControl() + { + return this; + } + +// ----------------------------------------------------------------------------- +// From MLcVideoPlayer +// ----------------------------------------------------------------------------- +// +MLcZoomControl* CMusEngLiveVideoPlayer::LcZoomControl() + { + return &iCameraHandler; + } + +// ----------------------------------------------------------------------------- +// From MLcVideoPlayer +// ----------------------------------------------------------------------------- +// +MLcBrightnessControl* CMusEngLiveVideoPlayer::LcBrightnessControl() + { + return &iCameraHandler; + } + +// ----------------------------------------------------------------------------- +// From MLcFileControl +// ----------------------------------------------------------------------------- +// +void CMusEngLiveVideoPlayer::SetLcFileNameL( const TFileName& aFileName ) + { + iFileName = aFileName; + } + +// ----------------------------------------------------------------------------- +// From MLcFileControl +// ----------------------------------------------------------------------------- +// +TFileName& CMusEngLiveVideoPlayer::LcFileName() + { + return iFileName; + } + +// ----------------------------------------------------------------------------- +// From MLcDestinationFileControl +// ----------------------------------------------------------------------------- +// +void CMusEngLiveVideoPlayer::LcRecordL( TBool aRecord ) + { + MUS_LOG1( "mus: [ENGINE] -> CMusEngLiveVideoPlayer::LcRecordL(( %d )", + aRecord ) + + __ASSERT_ALWAYS( iMceSession, User::Leave( KErrNotReady ) ); + + CMceMediaSink* fileSink = + MusEngMceUtils::GetMediaSink( *iMceSession, KMceFileSink ); + + __ASSERT_ALWAYS( fileSink, User::Leave( KErrNotReady ) ); + + if ( aRecord ) + { + if ( !fileSink->IsEnabled() ) + { + fileSink->EnableL(); + } + } + else + { + if ( fileSink->IsEnabled() ) + { + fileSink->DisableL(); + } + } + + MUS_LOG( "mus: [ENGINE] <- CMusEngLiveVideoPlayer::LcRecordL" ) + } + +// ----------------------------------------------------------------------------- +// From MLcDestinationFileControl +// ----------------------------------------------------------------------------- +// +TBool CMusEngLiveVideoPlayer::LcIsRecording() + { + MUS_LOG( "mus: [ENGINE] -> CMusEngLiveVideoPlayer::LcIsRecording()" ) + + TBool isEnabled( EFalse ); + + CMceMediaSink* fileSink = + MusEngMceUtils::GetMediaSink( *iMceSession, KMceFileSink ); + if ( fileSink ) + { + isEnabled = fileSink->IsEnabled(); + } + + MUS_LOG1( "mus: [ENGINE] <- CMusEngLiveVideoPlayer::LcIsRecording( %d )", + isEnabled ) + + return isEnabled; + } diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshengine/src/musenglocalvideoplayer.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/mmshengine/src/musenglocalvideoplayer.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,113 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + +// USER +#include "musenglocalvideoplayer.h" +#include "musengmceutils.h" +#include "musengdisplayhandler.h" + +// SYSTEM +#include +#include + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +CMusEngLocalVideoPlayer::CMusEngLocalVideoPlayer( + MMusEngDisplayHandler& aDisplayHandler, + MLcAudioControl& aLcAudioControl ) : + CMusEngVideoPlayerBase( aDisplayHandler, aLcAudioControl ) + { + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +CMusEngLocalVideoPlayer::~CMusEngLocalVideoPlayer() + { + } + +// ----------------------------------------------------------------------------- +// From MLcVideoPlayer +// ----------------------------------------------------------------------------- +// +MLcVideoPlayer::TLcVideoPlayerState +CMusEngLocalVideoPlayer::LcVideoPlayerState() const + { + if ( !iMceSession ) + { + return MLcVideoPlayer::EUnavailable; + } + CMceVideoStream* stream = NULL; + TRAPD( err, stream = MusEngMceUtils::GetVideoOutStreamL( *iMceSession ) ) + TLcVideoPlayerState playerState = MLcVideoPlayer::EUnavailable; + if ( err == KErrNone && stream ) + { + switch ( stream->State() ) + { + case CMceMediaStream::EInitialized: + { + playerState = MLcVideoPlayer::EInit; + break; + } + case CMceMediaStream::EBuffering: + { + playerState = MLcVideoPlayer::EBuffering; + break; + } + case CMceMediaStream::EIdle: + case CMceMediaStream::EDisabled: + { + playerState = MLcVideoPlayer::EPaused; + break; + } + case CMceMediaStream::EStreaming: + { + playerState = MLcVideoPlayer::EPlaying; + break; + } + default: // Other MCE stream states: MLcVideoPlayer::EUnavailable + { + break; + } + } + } + return playerState; + } + + +// ----------------------------------------------------------------------------- +// From MLcWindow +// ----------------------------------------------------------------------------- +// +void CMusEngLocalVideoPlayer::SetLcWindowRectL( TRect aRect ) + { + iDisplayHandler.SetSecondaryRectL( aRect ); + } + + +// ----------------------------------------------------------------------------- +// From MLcWindow +// ----------------------------------------------------------------------------- +// +TRect CMusEngLocalVideoPlayer::LcWindowRect() + { + return iDisplayHandler.SecondaryRect(); + } diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshengine/src/musengmceoutsession.cpp --- a/mmsharing/mmshengine/src/musengmceoutsession.cpp Thu Aug 19 09:51:39 2010 +0300 +++ b/mmsharing/mmshengine/src/musengmceoutsession.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -18,16 +18,17 @@ // USER #include "musengmceoutsession.h" -#include "musengoutsessionobserver.h" -#include "musenglivesessionobserver.h" #include "mussettings.h" #include "musengmceutils.h" #include "musenguriparser.h" #include "musenglogger.h" -#include "mussesseioninformationapi.h" #include "mussipprofilehandler.h" +#include "mussessionproperties.h" +#include "musresourceproperties.h" // SYSTEM +#include +#include #include #include #include @@ -40,20 +41,14 @@ #include #include #include +#include #include #include #include #include -#include - - -const TInt KMusEngSipReasonCodeBadRequest = 400; -const TInt KMusEngSipReasonCodeUnauthorized = 401; -const TInt KMusEngSipReasonCodePaymentRequired = 402; const TInt KMusEngSipReasonCodeRecipientNotFound = 404; -const TInt KMusEngSipReasonCodeProxyAuthenticationRequired = 407; const TInt KMusEngSipReasonCodeRequestTimeout = 408; const TInt KMusEngSipReasonCodeUnsupportedMediaType = 415; const TInt KMusEngSipReasonCodeUnsupportedUriScheme = 416; @@ -64,9 +59,6 @@ const TInt KMusEngSipReasonCodeDecline = 603; const TInt KMusEngSipReasonCodeNotAcceptable = 606; // The next code represents unofficial sip error code -// "478 Unresolveable Destination, we were not able to process the URI (478/TM) -const TInt KMusEngSipReasonCode478NotAbleToProcessURI = 478; -// The next code represents unofficial sip error code // "479 Regretfuly, we were not able to process the URI (479/SL) const TInt KMusEngSipReasonCode479NotAbleToProcessURI = 479; @@ -74,7 +66,66 @@ const TUint8 KMusEngPayloadTypeAudio = 97; const TUint8 KMusEngPayloadTypeVideoAvc = 98; -using namespace NMusSessionInformationApi; +const TInt KMusEngSipAddressMaxLength = 256; +const TInt KMusEngSipAddressesMaxAmount = 8; +_LIT( KMusEngCommaSymbol, "," ); + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +CMusEngMceOutSession::CMusEngMceOutSession() + : CMusEngMceSession(), + iTriedInvitations( 0 ), + iAsyncBrakeCallBack( AsyncBrakeCompleted, this ), + iRegistrationCallBack( RegistrationTimerExpired, this ), + iInvitationResponseCallBack( InvitationResponseTimerExpired, this ) + { + iAsyncBrakeEntry.Set( iAsyncBrakeCallBack ); + iRegistrationEntry.Set( iRegistrationCallBack ); + iInvitationResponseEntry.Set( iInvitationResponseCallBack ); + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusEngMceOutSession::ConstructL() + { + MUS_LOG( "mus: [ENGINE] -> CMusEngMceOutSession::ConstructL()" ) + + CMusEngMceSession::ConstructL(); + TInt sipProfileId; + TInt error = KErrNone; + error = ( RProperty::Get( NMusSessionApi::KCategoryUid, + NMusSessionApi::KSipProfileId, sipProfileId ) ); + if ( error != KErrNone ) + { + sipProfileId = KErrNone; + error = KErrNone; + } + iSipProfileHandler->CreateProfileL( sipProfileId ); + iVideoCodecList = NULL; + TBuf buffer; + error = ( RProperty::Get( NMusSessionApi::KCategoryUid, + NMusSessionApi::KVideoCodecs, buffer ) ); + if ( error == KErrNone && buffer.Length() ) + { + iVideoCodecList = + CnvUtfConverter::ConvertFromUnicodeToUtf8L( buffer ); + } + + iDeltaTimer = CDeltaTimer::NewL( CActive::EPriorityStandard ); + + /* Read the contact name set by availability plugin */ + error = RProperty::Get( NMusSessionApi::KCategoryUid, + NMusSessionApi::KContactName, + buffer ); + iRemoteDisplayName = ( error == KErrNone && buffer.Length() ) + ? buffer.AllocL() : KNullDesC().AllocL(); + + MUS_LOG( "mus: [ENGINE] <- CMusEngMceOutSession::ConstructL()" ) + } // ----------------------------------------------------------------------------- // @@ -83,105 +134,77 @@ CMusEngMceOutSession::~CMusEngMceOutSession() { MUS_LOG( "mus: [ENGINE] -> CMusEngMceOutSession::~CMusEngMceOutSession()" ) - + + if ( iAddressQueried && iRecipient ) + { + TRAP_IGNORE( SaveContactL( *iRecipient ) ) + } + + delete iDeltaTimer; delete iRecipient; delete iVideoCodecList; - + delete iRemoteSipAddressProposal; + delete iRemoteDisplayName; MUS_LOG( "mus: [ENGINE] <- CMusEngMceOutSession::~CMusEngMceOutSession()" ) } +// ----------------------------------------------------------------------------- +// From MLcSession +// ----------------------------------------------------------------------------- +// +void CMusEngMceOutSession::EstablishLcSessionL() + { + MUS_LOG( "mus: [ENGINE] -> CMusEngMceOutSession::EstablishLcSessionL()") + + iAddressQueried = EFalse; + if ( LcUiProvider() && !IsBackgroundStartup() ) + { + LcUiProvider()->HandleForegroundStatus( ETrue ); + } + TRAPD( err, DoInviteL() ); + + // If address is in wrong format, Manual Address Entry Dialog is displayed + if ( ( err == KErrArgument ) && DoSyncRetryL() ) + { + err = KErrNone; // Doing retry + } + + User::LeaveIfError( err ); + + MUS_LOG( "mus: [ENGINE] <- CMusEngMceOutSession::EstablishLcSessionL") + } + +// ----------------------------------------------------------------------------- +// From MLcSession +// ----------------------------------------------------------------------------- +// +void CMusEngMceOutSession::TerminateLcSessionL() + { + MUS_LOG( "mus: [ENGINE] -> CMusEngMceOutSession::TerminateLcSessionL" ) + + __ASSERT_ALWAYS( iSession, User::Leave( KErrNotReady ) ); + + if( iSession->State() == CMceSession::EOffering ) + { + static_cast< CMceOutSession* >( iSession )->CancelL(); + } + else + { + iSession->TerminateL(); + } + + MUS_LOG( "mus: [ENGINE] <- CMusEngMceOutSession::TerminateLcSessionL" ) + } // ----------------------------------------------------------------------------- // // ----------------------------------------------------------------------------- // -EXPORT_C void CMusEngMceOutSession::InviteL( const TDesC& aRecipient ) +void CMusEngMceOutSession::AddDisplayL( CMceMediaStream& aStream ) { - MUS_LOG( "mus: [ENGINE] -> CMusEngMceOutSession::InviteL()") - - if ( iSession ) - { - MUS_ENG_LOG_SESSION_STATE( *iSession ) - - if ( iSession->State() == CMceSession::EIdle || - iSession->State() == CMceSession::ETerminated ) - { - // This is the case when last invite has ended up to an error, - // last sharing has ended normally, or construction of the session - // stucture has not been completed. Delete old session and try to - // continue normally. - delete iSession; - iSession = NULL; - MUS_LOG( "mus: [ENGINE] Existing session deleted") - } - else - { - // Session is already ongoing. Leave. - User::Leave( KErrAlreadyExists ); - } - - } - - MUS_LOG_TDESC( "mus: [ENGINE] CMusEngMceOutSession::InviteL() recipient=", - aRecipient ) - - // delete possibly existing recipient - delete iRecipient; - iRecipient = NULL; - - TMusEngUriParser parser( aRecipient ); - parser.ParseUriL(); - iRecipient = parser.GetUri8L(); - - CreateMceSessionStructureL(); - - EstablishSessionL(); - - MUS_LOG( "mus: [ENGINE] <- CMusEngMceOutSession::InviteL()") + MusEngMceUtils::AddDisplayL( aStream, *iManager, Rect() ); } - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -EXPORT_C void CMusEngMceOutSession::CancelInviteL() - { - MUS_LOG( "mus: [ENGINE] -> CMusEngMceOutSession::CancelInviteL()" ) - - __ASSERT_ALWAYS( iSession, User::Leave( KErrNotReady ) ); - - MUS_ENG_LOG_SESSION_STATE( *iSession ) - - if( iSession->State() == CMceSession::EOffering ) - { - MUS_LOG( "mus: [ENGINE] CMceOutSession->CancelL()" ) - static_cast( iSession )->CancelL(); - } - - MUS_LOG( "mus: [ENGINE] <- CMusEngMceOutSession::CancelInviteL()" ) - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -EXPORT_C void CMusEngMceOutSession::SetSupportedVideoCodecListL( - const TDesC& aVideoCodecs ) - { - MUS_LOG_TDESC( "mus: [ENGINE] -> CMusEngMceOutSession::SetSupportedVideoCodecListL: ", - aVideoCodecs ) - - HBufC8* newVideoCodecList = - CnvUtfConverter::ConvertFromUnicodeToUtf8L( aVideoCodecs ); - delete iVideoCodecList; - iVideoCodecList = newVideoCodecList; - - MUS_LOG( "mus: [ENGINE] <- CMusEngMceOutSession::SetSupportedVideoCodecListL" ) - } - - // ----------------------------------------------------------------------------- // Calls MCE function EstablishL with feature tag in Accept-Contact header. // Adjusts stream and codec values. @@ -214,18 +237,13 @@ CleanupStack::PopAndDestroy( headInText ); } - /* Add the privacy header if cs call privacy setting is switched on */ - if ( iPrivate && iPrivateNumber ) - { - AddPrivacyHeaderL( *headers ); - } + static_cast( iSession )->EstablishL( 0, headers ); CleanupStack::Pop( headers ); MUS_LOG( "mus: [ENGINE] <- CMusEngMceOutSession::EstablishSessionL()" ) } - // ----------------------------------------------------------------------------- // Handle MCE session termination. Called by MCE observer function of the // base class. @@ -238,41 +256,18 @@ switch ( aStatusCode ) { - - case KMusEngSipReasonCodeBadRequest : - { - iOutSessionObserver.SessionBadRequest(); - break; - } - case KMusEngSipReasonCodeUnauthorized : - { - iOutSessionObserver.SessionUnauthorized(); - break; - } - case KMusEngSipReasonCodePaymentRequired : - { - iOutSessionObserver.SessionPaymentRequired(); - break; - } - case KMusEngSipReasonCodeRecipientNotFound : - //lint -fallthrough - case KMusEngSipReasonCode478NotAbleToProcessURI: + case KMusEngSipReasonCodeRecipientNotFound : //lint -fallthrough case KMusEngSipReasonCode479NotAbleToProcessURI: //lint -fallthrough case KMusEngSipReasonCodeUnsupportedUriScheme : { - iOutSessionObserver.SessionRecipientNotFound(); - break; - } - case KMusEngSipReasonCodeProxyAuthenticationRequired : - { - iOutSessionObserver.SessionProxyAuthenticationRequired(); + InitRecipientNotFoundHandling(); break; } case KMusEngSipReasonCodeRequestTimeout : { - iOutSessionObserver.SessionRequestTimeOut(); + InformObserverAboutSessionFailure( MLcSession::ENoAnswer ); break; } case KMusEngSipReasonCodeUnsupportedMediaType : @@ -281,7 +276,7 @@ //lint -fallthrough case KMusEngSipReasonCodeNotAcceptable: { - iOutSessionObserver.SessionUnsupportedMediaType(); + InformObserverAboutSessionFailure( MLcSession::ESessionRejected ); break; } case KMusEngSipReasonCodeBusyHere : @@ -289,27 +284,30 @@ // Operator variant uses 486 to rejection instead of 603 if ( iOperatorVariant ) { - iOutSessionObserver.SessionRejected(); + InformObserverAboutSessionFailure( + MLcSession::ESessionRejected ); } else { - iOutSessionObserver.SessionBusyHere(); + InformObserverAboutSessionFailure( + MLcSession::ERecipientBusy ); } break; } case KMusEngSipReasonCodeRequestCancelled : { - iOutSessionObserver.SessionRequestCancelled(); + InformObserverAboutSessionFailure( MLcSession::ESessionCancelled ); break; } case KMusEngSipReasonCodeDecline : { - iOutSessionObserver.SessionRejected(); + InformObserverAboutSessionFailure( MLcSession::ESessionRejected ); break; } case KMusEngSipReasonCodeTemporarilyNotAvailable : { - iOutSessionObserver.SessionTemporarilyNotAvailable(); + InformObserverAboutSessionFailure( + MLcSession::ERecipientTemporarilyNotAvailable ); break; } default: @@ -324,16 +322,16 @@ MUS_LOG( "mus: [ENGINE] <- CMusEngMceOutSession::HandleTermination()" ) } - // ----------------------------------------------------------------------------- // Sets payload type and calls overridden base class version // ----------------------------------------------------------------------------- // -void CMusEngMceOutSession::AdjustVideoCodecL( CMceVideoCodec& aVideoCodec ) +void CMusEngMceOutSession::AdjustVideoCodecL( CMceVideoCodec& aVideoCodec, + TMceSourceType aSourceType ) { MUS_LOG( "mus: [ENGINE] -> CMusEngMceOutSession::AdjustVideoCodecL()" ) - CMusEngMceSession::AdjustVideoCodecL( aVideoCodec ); + CMusEngMceSession::AdjustVideoCodecL( aVideoCodec, aSourceType ); if ( aVideoCodec.SdpName() == KMceSDPNameH263() || aVideoCodec.SdpName() == KMceSDPNameH2632000() ) @@ -354,7 +352,6 @@ MUS_LOG( "mus: [ENGINE] <- CMusEngMceOutSession::AdjustVideoCodecL()" ) } - // ----------------------------------------------------------------------------- // Sets payload type and calls overridden base class version // ----------------------------------------------------------------------------- @@ -368,71 +365,64 @@ User::LeaveIfError( aAudioCodec.SetPayloadType( KMusEngPayloadTypeAudio ) ); MUS_LOG( "mus: [ENGINE] <- CMusEngMceOutSession::AdjustAudioCodecL()" ) - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -CMusEngMceOutSession::CMusEngMceOutSession( - const TRect& aRect, - MMusEngSessionObserver& aSessionObserver, - MMusEngOutSessionObserver& aOutSessionObserver ) - : CMusEngMceSession( aRect, aSessionObserver ), - iOutSessionObserver( aOutSessionObserver ) - { - } - + } // ----------------------------------------------------------------------------- // // ----------------------------------------------------------------------------- // -void CMusEngMceOutSession::ConstructL( TUint aSipProfileId ) +void CMusEngMceOutSession::ProfileRegistered() { - MUS_LOG( "mus: [ENGINE] -> CMusEngMceOutSession::ConstructL()" ) - - CMusEngMceSession::ConstructL(); - iSipProfileHandler->CreateProfileL( aSipProfileId ); + MUS_LOG( "mus: [ENGINE] -> CMusEngMceOutSession::ProfileRegistered()" ) - // Check if feature specific behavior is expected - iPrivate = ( MultimediaSharingSettings::PrivacySetting()); + if ( iRegistrationPending ) + { + iDeltaTimer->Remove( iRegistrationEntry ); + iRegistrationPending = EFalse; + - NMusSessionInformationApi::TMusClirSetting clir; - // Ignore RProperty::Get return value.Incase of error it should behave default. - RProperty::Get( NMusSessionInformationApi::KCategoryUid, - NMusSessionInformationApi::KMusClirSetting, - reinterpret_cast( clir ) ); - iPrivateNumber = ( clir == NMusSessionInformationApi::ESendOwnNumber )? EFalse: ETrue; - - MUS_LOG( "mus: [ENGINE] <- CMusEngMceOutSession::ConstructL()" ) + HBufC* resolvedRecipient = NULL; + TRAPD( error, resolvedRecipient = RemoteAddressL() ) + if ( error != KErrNone ) + { + InformObserverAboutSessionFailure( error ); + } + else + { + TRAP( error, DoInviteL( *resolvedRecipient ) ) + delete resolvedRecipient; + if ( error != KErrNone ) + { + InformObserverAboutSessionFailure( error ); + } + } + } + + MUS_LOG( "mus: [ENGINE] <- CMusEngMceOutSession::ProfileRegistered()" ) } - // ----------------------------------------------------------------------------- // // ----------------------------------------------------------------------------- // -void CMusEngMceOutSession::CreateMceSessionStructureL() +TBool CMusEngMceOutSession::IsH264Supported() const + { + return ( iVideoCodecList && iVideoCodecList->FindF( KMceSDPNameH264() ) >= 0 ); + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusEngMceOutSession::CreateMceSessionStructureL( TBool aForceSdpBandwidth ) { MUS_LOG( "mus: [ENGINE] -> CMusEngMceOutSession::CreateMceSessionStructureL()" ) - CSIPProfile* profile = iSipProfileHandler->Profile(); + CSIPProfile* profile = iSipProfileHandler->Profile(); __ASSERT_ALWAYS( profile != NULL, User::Leave( KErrNotReady ) ); // Create session - if ( iPrivate && iPrivateNumber ) - { - HBufC8* originator = KMusAnonymousHeader().AllocLC(); - iSession = CMceOutSession::NewL( *iManager, *profile, *iRecipient, originator ); - CleanupStack::Pop(); - } - else - { - iSession = CMceOutSession::NewL( *iManager, *profile, *iRecipient ); - } - + iSession = CMceOutSession::NewL( *iManager, *profile, *iRecipient ); // Remove QoS-lines if needed if ( profile->Type().iSIPProfileClass == @@ -445,7 +435,7 @@ MUS_LOG( "mus: [ENGINE] Usage of preconditions denied" ) } - SetSessionSdpLinesL( *iSession ); + SetSessionSdpLinesL( *iSession, aForceSdpBandwidth ); // Create bundle for local streams @@ -461,11 +451,11 @@ CMceVideoStream* videoOut = MusEngMceUtils::GetVideoOutStreamL( *iSession ); - SetMediaSdpLinesL( *videoOut ); + SetMediaSdpLinesL( *videoOut, aForceSdpBandwidth ); streamForDisplay->SetSourceL( videoOut->Source() ); - MusEngMceUtils::AddDisplayL( *streamForDisplay, *iManager, Rect() ); + AddDisplayL( *streamForDisplay ); iSession->AddStreamL( streamForDisplay ); CleanupStack::Pop( streamForDisplay ); @@ -485,22 +475,386 @@ MUS_LOG( "mus: [ENGINE] <- CMusEngMceOutSession::CreateMceSessionStructureL()" ) } +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusEngMceOutSession::DoInviteL( const TDesC& aRecipient ) + { + MUS_LOG_TDESC( "mus: [ENGINE] -> CMusEngMceOutSession::DoInviteL(): ", + aRecipient ) + + HBufC* resolvedRecipient = NULL; + if ( aRecipient.Length() > 0 ) + { + resolvedRecipient = aRecipient.AllocLC(); + } + else + { + resolvedRecipient = ResolveRecipientLC(); + } + + // delete possibly existing recipient + delete iRecipient; + iRecipient = NULL; + + TMusEngUriParser parser( *resolvedRecipient ); + parser.ParseUriL(); + iRecipient = parser.GetUri8L(); + + /* Set the display name to recipient address if displayname is empty */ + if ( !iRemoteDisplayName || iRemoteDisplayName->Length() == 0 ) + { + HBufC* tmp = parser.GetUri16L( ETrue ); + delete iRemoteDisplayName; + iRemoteDisplayName = tmp; + } + + CleanupStack::PopAndDestroy( resolvedRecipient ); + + if ( iSession ) + { + MUS_ENG_LOG_SESSION_STATE( *iSession ) + + if ( iSession->State() == CMceSession::EIdle || + iSession->State() == CMceSession::ETerminated ) + { + // This is the case when last invite has ended up to an error, + // last sharing has ended normally, or construction of the session + // stucture has not been completed. Delete old session and try to + // continue normally. + delete iSession; + iSession = NULL; + MUS_LOG( "mus: [ENGINE] Existing session deleted") + } + else + { + // Session is already ongoing. Leave. + User::Leave( KErrAlreadyExists ); + } + } + + const TUint KMusEngOneMinuteTimeout = 60000000; + if ( iSipProfileHandler->IsRegistered() ) + { + CreateMceSessionStructureL(); + EstablishSessionL(); + // Start one minute expiration timer + TTimeIntervalMicroSeconds32 interval( KMusEngOneMinuteTimeout ); + iDeltaTimer->Remove( iInvitationResponseEntry ); + iDeltaTimer->Queue( interval, iInvitationResponseEntry ); + } + else + { + iRegistrationPending = ETrue; + // Start one minute expiration timer + TTimeIntervalMicroSeconds32 interval( KMusEngOneMinuteTimeout ); + iDeltaTimer->Remove( iRegistrationEntry ); + iDeltaTimer->Queue( interval, iRegistrationEntry ); + } + + MUS_LOG( "mus: [ENGINE] <- CMusEngMceOutSession::DoInviteL()" ) + } // ----------------------------------------------------------------------------- -// Add Privacy header if own phone number/id should not be sent to remote party +// +// ----------------------------------------------------------------------------- +// +HBufC* CMusEngMceOutSession::ResolveRecipientLC() + { + MUS_LOG( "mus: [ENGINE] -> CMusEngMceOutSession::ResolveRecipientLC()" ) + + HBufC* resolvedRecipient = NULL; + TRAPD( err, + resolvedRecipient = + ReadDescPropertyL( NMusSessionApi::KRemoteSipAddress ) ); + if ( err != KErrNone ) + { + __ASSERT_ALWAYS( err != KErrNoMemory, User::Leave( KErrNoMemory ) ); + resolvedRecipient = KNullDesC().AllocL(); + } + CleanupStack::PushL( resolvedRecipient ); + + delete iRemoteSipAddressProposal; + iRemoteSipAddressProposal = NULL; + TRAP( err, + iRemoteSipAddressProposal = + ReadDescPropertyL( NMusSessionApi::KRemoteSipAddressProposal ) ); + if ( err != KErrNone ) + { + __ASSERT_ALWAYS( err != KErrNoMemory, User::Leave( KErrNoMemory ) ); + iRemoteSipAddressProposal = KNullDesC().AllocL(); + } + + if ( resolvedRecipient->Length() > 0 ) + { + if ( resolvedRecipient->Find( KMusEngCommaSymbol ) != KErrNotFound ) + { + // Split the addresses using KMusCommaSymbol as a separator + CDesCArray* addresses = + new( ELeave )CDesCArrayFlat( KMusEngSipAddressesMaxAmount ); + CleanupStack::PushL( addresses ); + SplitL( *resolvedRecipient, KMusEngCommaSymbol, addresses ); + + // Show List Query Dialog + CleanupStack::Pop( addresses ); + CleanupStack::PopAndDestroy( resolvedRecipient ); + CleanupStack::PushL( addresses ); + resolvedRecipient = HBufC::NewLC( KMusEngSipAddressMaxLength ); + TPtr ptrRetryAddr( resolvedRecipient->Des() ); + if ( !LcUiProviderL().SelectRecipient( *addresses, ptrRetryAddr ) ) + { + // Address not selected from provided list + User::Leave( KErrNotFound ); + } + CleanupStack::Pop( resolvedRecipient ); + CleanupStack::PopAndDestroy( addresses ); + CleanupStack::PushL( resolvedRecipient ); + } + } + else + { + __ASSERT_ALWAYS( ++iTriedInvitations < 2, User::Leave( KErrNotFound ) ); + + CleanupStack::PopAndDestroy( resolvedRecipient ); + resolvedRecipient = NULL; + resolvedRecipient = HBufC::NewLC( KMusEngSipAddressMaxLength ); + __ASSERT_ALWAYS( + iRemoteSipAddressProposal->Length() < KMusEngSipAddressMaxLength, + User::Leave( KErrOverflow ) ); + resolvedRecipient->Des().Copy( *iRemoteSipAddressProposal ); + TPtr ptrRetryAddr( resolvedRecipient->Des() ); + InputRecipientL( ptrRetryAddr ); + iAddressQueried = ETrue; + } + + MUS_LOG( "mus: [ENGINE] -> CMusEngMceOutSession::ResolveRecipientLC()" ) + + return resolvedRecipient; + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +TInt CMusEngMceOutSession::AsyncBrakeCompleted( TAny* aPtr ) + { + if ( aPtr ) + { + reinterpret_cast( aPtr )->HandleRecipientNotFound(); + } + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +TInt CMusEngMceOutSession::RegistrationTimerExpired( TAny* aPtr ) + { + if ( aPtr ) + { + CMusEngMceOutSession* session = + reinterpret_cast< CMusEngMceOutSession* >( aPtr ); + session->InformObserverAboutSessionFailure( KErrGeneral ); + } + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// // ----------------------------------------------------------------------------- // -void CMusEngMceOutSession::AddPrivacyHeaderL( CDesC8Array& aHeaders ) +TInt CMusEngMceOutSession::InvitationResponseTimerExpired( TAny* aPtr ) + { + if ( aPtr ) + { + CMusEngMceOutSession* session = + reinterpret_cast< CMusEngMceOutSession* >( aPtr ); + if ( !session->IgnoreErrorNote() ) + { + session->InformObserverAboutSessionFailure( MLcSession::ENoAnswer ); + } + } + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +TBool CMusEngMceOutSession::IgnoreErrorNote() + { + TBool ignore = ETrue; + if ( iSession && + ( iSession->State() == CMceSession::EOffering || + iSession->State() == CMceSession::EProceeding ) ) + { + ignore = EFalse; + } + return ignore; + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusEngMceOutSession::InitRecipientNotFoundHandling() + { + MUS_LOG( "mus: [ENGINE] -> CMusEngMceOutSession::InitRecipientNotFoundHandling()" ) + + iDeltaTimer->Remove( iAsyncBrakeEntry ); + const TUint KMusEngAsyncBrakeTimeout = 1; + TTimeIntervalMicroSeconds32 interval( KMusEngAsyncBrakeTimeout ); + iDeltaTimer->Queue( interval, iAsyncBrakeEntry ); + + MUS_LOG( "mus: [ENGINE] <- CMusEngMceOutSession::InitRecipientNotFoundHandling()" ) + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusEngMceOutSession::HandleRecipientNotFound() + { + MUS_LOG( "mus: [ENGINE] -> CMusEngMceOutSession::HandleRecipientNotFound()" ) + + TInt err( KErrNotFound ); + + TBool retry( EFalse ); + TRAP( err, retry = DoSyncRetryL() ); + + if ( err != KErrNone || !retry ) + { + InformObserverAboutSessionFailure( MLcSession::ERecipientNotFound ); + } + + MUS_LOG( "mus: [ENGINE] <- CMusEngMceOutSession::HandleRecipientNotFound()" ) + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +TBool CMusEngMceOutSession::DoSyncRetryL() { - MUS_LOG( "mus: [ENGINE] -> AddPrivacyHeaderL()" ) - _LIT8( KMusPrivacyHeaderValue, "id" ); - CSIPExtensionHeader* header = CSIPExtensionHeader::NewLC( - KMusPrivacyHeader, KMusPrivacyHeaderValue ); - HBufC8* headInText = header->ToTextL(); - MUS_LOG_TDESC8( " mus: [ENGINE] Privacy header : ", headInText->Des() ); - CleanupStack::PopAndDestroy( header ); - CleanupStack::PushL( headInText ); - aHeaders.AppendL( *headInText ); - CleanupStack::PopAndDestroy( headInText ); - MUS_LOG( "mus: [ENGINE] <- AddPrivacyHeaderL()" ) + __ASSERT_ALWAYS( iRemoteSipAddressProposal, User::Leave( KErrNotFound ) ); + __ASSERT_ALWAYS( + iRemoteSipAddressProposal->Length() < KMusEngSipAddressMaxLength, + User::Leave( KErrOverflow ) ); + + TBool retry( EFalse ); + + if ( ++iTriedInvitations < 2 ) + { + TBuf retryAddress; + retryAddress.Copy( *iRemoteSipAddressProposal ); + InputRecipientL( retryAddress ); + DoInviteL( retryAddress ); + + retry = ETrue; + iAddressQueried = ETrue; + } + return retry; + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusEngMceOutSession::SplitL( const TDesC& aDes, + const TDesC& aChar, + CDesCArray* aArray ) + { + TInt charPos( 0 ); + TPtrC ptr( aDes ); + TBool found = EFalse; + while( ( charPos = ptr.Find( aChar ) ) > 0 ) + { + found = ETrue; + TPtrC str = ptr.Left( charPos ); + aArray->AppendL( str ); + ptr.Set( ptr.Right( ptr.Length() - str.Length() - 1 ) ); + } + if ( found && ptr.Length() > 0 ) + { + aArray->AppendL( ptr ); + } } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +HBufC* CMusEngMceOutSession::ReadDescPropertyL( TUint aKey ) + { + MUS_LOG1( "mus: [ENGINE] -> CMusEngMceOutSession::ReadDescPropertyL: aKey: [%d]", + aKey ); + + TBuf buffer; + + User::LeaveIfError( RProperty::Get( NMusSessionApi::KCategoryUid, + aKey, + buffer ) ); + HBufC* desc = buffer.AllocL(); + MUS_LOG_TDESC( "mus: [ENGINE] <- CMusEngMceOutSession::ReadDescPropertyL: val: ", + (*desc) ); + return desc; + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +HBufC* CMusEngMceOutSession::RemoteAddressL() const + { + MUS_LOG( "mus: [ENGINE] -> CMusEngMceOutSession::RemoteAddressL()" ) + + __ASSERT_ALWAYS( iRecipient, User::Leave( KErrNotReady ) ); + + HBufC* remoteAddr = HBufC::NewLC( iRecipient->Length() ); + TPtr ptrRemoteAddr( remoteAddr->Des() ); + User::LeaveIfError( + CnvUtfConverter::ConvertToUnicodeFromUtf8( + ptrRemoteAddr, *iRecipient ) ); + + MUS_LOG( "mus: [ENGINE] <- CMusEngMceOutSession::RemoteAddressL()" ) + + CleanupStack::Pop( remoteAddr ); + return remoteAddr; + } + +// ----------------------------------------------------------------------------- +// From MLcSession, Should return the displayname of the remote terminal +// If found in phone book than contactname else user entered sip address +// ----------------------------------------------------------------------------- +// +const TDesC& CMusEngMceOutSession::RemoteDisplayName() + { + if ( !iRemoteDisplayName ) + { + return KNullDesC; + } + return *iRemoteDisplayName; + } + +// ----------------------------------------------------------------------------- +// Query to the user for sip address of the remote party. +// If the user entered a new sip address then reset the displayname +// to user entered sip address. +// ----------------------------------------------------------------------------- +// +void CMusEngMceOutSession::InputRecipientL( TDes& aRecipientAddress ) + { + if ( !LcUiProviderL().InputRecipient( aRecipientAddress ) ) + { + User::Leave( KErrCancel ); + } + /* displayname is no longer valid since user entered a new sip address + * and displayname will be set to sip address when invitation sent. + */ + delete iRemoteDisplayName; + iRemoteDisplayName = NULL; + } + +// End of file diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshengine/src/musengmcesession.cpp --- a/mmsharing/mmshengine/src/musengmcesession.cpp Thu Aug 19 09:51:39 2010 +0300 +++ b/mmsharing/mmshengine/src/musengmcesession.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -20,14 +20,18 @@ #include "mussettings.h" #include "musengmcesession.h" #include "musengsessiondurationtimer.h" -#include "musengsessionobserver.h" #include "musengmceutils.h" #include "musuid.hrh" #include "musenglogger.h" -#include "musengclipsessionobserver.h" #include "mussipprofilehandler.h" +#include "mussessionproperties.h" +#include "musenguriparser.h" +#include "musengtelephoneutils.h" // SYSTEM +#include +#include +#include #include #include #include @@ -37,10 +41,16 @@ #include #include #include +#include #include #include -#include +#include #include +#include +#include +#include +#include +#include const TInt KMusEngTimerInterval = 1000000; // 1 second @@ -58,6 +68,64 @@ #define MUS_CODEC_ARR_CONST_CAST( codecArr ) \ ( const_cast< RPointerArray< CMceVideoCodec >& >( codecArr ) ) +// Names of AVC levels in string for config keys stored in CenRep +_LIT8( KMusAvcBitrateLevel1, "AvcBrL1=" ); +_LIT8( KMusAvcBitrateLevel1b, "AvcBrL1b=" ); +_LIT8( KMusAvcBitrateLevel1_1, "AvcBrL1_1=" ); +_LIT8( KMusAvcBitrateLevel1_2, "AvcBrL1_2=" ); +_LIT8( KMusAvcBitrateLevel1_3, "AvcBrL1_3=" ); +_LIT8( KMusAvcBitrateLevel2, "AvcBrL2=" ); + +_LIT8( KMusEncoderInfoTokenizer, ";" ); + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +CMusEngMceSession::CMusEngMceSession() + : iSecondsFromLastRtcpReport ( 0 ), + // Although speaker is constructed as muted, it is not explicitly muted + iExplicitlyMuted( EFalse ), + iBackground( ETrue ) + { + iMceManagerUid.iUid = KMusUiUid; + iBackground = IsBackgroundStartup(); + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusEngMceSession::ConstructL() + { + MUS_LOG( "mus: [ENGINE] -> CMusEngMceSession::ConstructL()" ) + + iTelephoneUtils = CMusEngTelephoneUtils::NewL( *this ); + + // Creating new MCE Manager and set all needed observers to this class. + iManager = CMceManager::NewL( iMceManagerUid, + &iTransactionDataContainer ); + iManager->SetSessionObserver( this ); + iManager->SetInSessionObserver( this ); + iManager->SetMediaObserver( this ); + iManager->SetRtpObserver( this ); + + // Check if operator specific behavior is expected + iOperatorVariant = ( MultimediaSharingSettings::OperatorVariantSettingL() == + MusSettingsKeys::EOperatorSpecific ); + + // Update timer initialization + iUpdateTimer = CMusEngSessionDurationTimer::NewL( *this ); + + iSipProfileHandler = CMusSipProfileHandler::NewL( *this ); + + iRemoteDetails = HBufC::NewL( RProperty::KMaxPropertySize ); + iRemoteDetails->Des().Copy( KNullDesC ); + + MUS_LOG( "mus: [ENGINE] <- CMusEngMceSession::ConstructL()" ) + } + // ----------------------------------------------------------------------------- // // ----------------------------------------------------------------------------- @@ -65,107 +133,70 @@ CMusEngMceSession::~CMusEngMceSession() { MUS_LOG( "mus: [ENGINE] -> CMusEngMceSession::~CMusEngMceSession()" ) + delete iSipProfileHandler; delete iSession; delete iManager; delete iUpdateTimer; + delete iTelephoneUtils; + delete iRemoteDetails; + + RProperty::Set( NMusSessionApi::KCategoryUid, + NMusSessionApi::KFastMode, + MusSettingsKeys::EFastModeDisabled ); + MUS_LOG( "mus: [ENGINE] <- CMusEngMceSession::~CMusEngMceSession()" ) } - // ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -EXPORT_C void CMusEngMceSession::TerminateL() - { - MUS_LOG( "mus: [ENGINE] -> CMusEngMceSession::TerminateL()" ) - __ASSERT_ALWAYS( iSession, User::Leave( KErrNotReady ) ); - iSession->TerminateL(); - MUS_LOG( "mus: [ENGINE] <- CMusEngMceSession::TerminateL()" ) - } - - -// ----------------------------------------------------------------------------- -// Returns estabilished session time. If not established return -// value is < 0 +// From MMusEngDisplayHandler // ----------------------------------------------------------------------------- // -EXPORT_C TTimeIntervalSeconds CMusEngMceSession::GetSessionTime() const +TRect CMusEngMceSession::Rect() const { - if ( iSession && iSession->State() == CMceSession::EEstablished ) - { - TTime time; - TTimeIntervalSeconds seconds; - time.HomeTime(); - - time.SecondsFrom( iStartTime, seconds ); - - return seconds; - } - - return TTimeIntervalSeconds( KErrNotReady ); - + MUS_LOG( "mus: [ENGINE] CMusEngMceSession::Rect()" ) + return iRect; } +// ----------------------------------------------------------------------------- +// From MMusEngDisplayHandler +// ----------------------------------------------------------------------------- +// +void CMusEngMceSession::SetRectL( const TRect& aRect ) + { + MUS_LOG( "mus: [ENGINE] CMusEngSession::SetRectL()" ) + iRect = aRect; + RectChangedL(); + } // ----------------------------------------------------------------------------- -// +// From MMusEngDisplayHandler // ----------------------------------------------------------------------------- // -EXPORT_C TBool CMusEngMceSession::ConnectionActive() const +void CMusEngMceSession::SetSecondaryRectL( const TRect& aSecondaryRect ) { - if ( iSession ) - { - return iSession->ConnectionActive(); - } - return EFalse; + MUS_LOG( "mus: [ENGINE] CMusEngMceSession::SetSecondaryRectL()" ) + + // Same rect is set by primary and secondary setters + iRect = aSecondaryRect; + RectChangedL(); } - // ----------------------------------------------------------------------------- -// +// From MMusEngDisplayHandler // ----------------------------------------------------------------------------- // -EXPORT_C TBool CMusEngMceSession::ContainsAudioL() +TRect CMusEngMceSession::SecondaryRect() const { - __ASSERT_ALWAYS( iSession, User::Leave( KErrNotReady ) ); - - for ( TInt i = 0; i < iSession->Streams().Count(); ++i ) - { - if ( iSession->Streams()[i]->Type() == KMceAudio ) - { - return ETrue; - } - } + MUS_LOG( "mus: [ENGINE] CMusEngMceSession::SecondaryRect()" ) + return iRect; + } - return EFalse; - } - - // ----------------------------------------------------------------------------- -// +// From MMusEngDisplayHandler // ----------------------------------------------------------------------------- // -EXPORT_C TBool CMusEngMceSession::IsMutedL() - { - // Precondition checked in ContainsAudioL - - if ( ContainsAudioL() && !iExplicitlyMuted ) - { - return EFalse; - } - - return ETrue; - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -EXPORT_C CMusEngMceSession::TDisplayOrientation - CMusEngMceSession::OrientationL() +MMusEngDisplayHandler::TDisplayOrientation CMusEngMceSession::OrientationL() { MUS_LOG( "mus: [ENGINE] -> CMusEngMceSession::RotationL()" ) @@ -198,8 +229,7 @@ // // ----------------------------------------------------------------------------- // -EXPORT_C void CMusEngMceSession::SetOrientationL( - TDisplayOrientation aOrientation ) +void CMusEngMceSession::SetOrientationL( TDisplayOrientation aOrientation ) { MUS_LOG1( "mus: [ENGINE] -> CMusEngMceSession::SetOrientationL() %d", aOrientation ) @@ -220,55 +250,11 @@ MUS_LOG( "mus: [ENGINE] <- CMusEngMceSession::SetOrientationL()" ) } - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -EXPORT_C void CMusEngMceSession::VolumeUpL() - { - __ASSERT_ALWAYS( iSession, User::Leave( KErrNotReady ) ); - - CMusEngSession::VolumeUpL(); - - SetSpeakerVolumeL( VolumeL() ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -EXPORT_C void CMusEngMceSession::VolumeDownL() - { - __ASSERT_ALWAYS( iSession, User::Leave( KErrNotReady ) ); - - CMusEngSession::VolumeDownL(); - - SetSpeakerVolumeL( VolumeL() ); - } - - -// ----------------------------------------------------------------------------- -// -// -// ----------------------------------------------------------------------------- -// -EXPORT_C void CMusEngMceSession::SetVolumeL( TInt aVal ) - { - __ASSERT_ALWAYS( iSession, User::Leave( KErrNotReady ) ); - - CMusEngSession::SetVolumeL( aVal ); - - SetSpeakerVolumeL( VolumeL() ); - } - - // ----------------------------------------------------------------------------- // // ----------------------------------------------------------------------------- // -EXPORT_C void CMusEngMceSession::EnableDisplayL( TBool aEnable ) +void CMusEngMceSession::EnableDisplayL( TBool aEnable ) { MUS_LOG1( "mus: [ENGINE] -> CMusEngMceSession::EnableDisplay() %d", aEnable ) @@ -325,112 +311,418 @@ // // ----------------------------------------------------------------------------- // -EXPORT_C TBool CMusEngMceSession::IsDisplayEnabledL() +TBool CMusEngMceSession::IsDisplayEnabled() + { + TBool enabled( EFalse ); + if ( iSession ) + { + CMceDisplaySink* display = + MusEngMceUtils::GetDisplay( *iSession, ETrue ); + if ( display ) + { + enabled = display->IsEnabled(); + } + } + return enabled; + } + +// ----------------------------------------------------------------------------- +// From MMusEngDisplayHandler +// ----------------------------------------------------------------------------- +// +TBool CMusEngMceSession::IsDisplayActive() + { + return ( IsDisplayEnabled() ); + } + +// ----------------------------------------------------------------------------- +// From MMusEngAudioRoutingObserver +// ----------------------------------------------------------------------------- +// +void CMusEngMceSession::AudioRoutingChanged() + { + InformObserverAboutPlayerUpdate( LocalVideoPlayer() ); + InformObserverAboutPlayerUpdate( RemoteVideoPlayer() ); + } + +// ----------------------------------------------------------------------------- +// From MLcSession +// ----------------------------------------------------------------------------- +// +MLcSession::TLcSessionState CMusEngMceSession::LcSessionState() const + { + TLcSessionState lcSessionState = MLcSession::EUninitialized; + + if ( iSession ) + { + switch( iSession->State() ) + { + case CMceSession::EIdle: + { + lcSessionState = MLcSession::EInitialized; + break; + } + case CMceSession::EIncoming: + case CMceSession::EProceeding: + case CMceSession::EReserving: + { + lcSessionState = MLcSession::EReceived; + break; + } + + case CMceSession::EOffering: + case CMceSession::EAnswering: + { + lcSessionState = MLcSession::EOpening; + break; + } + case CMceSession::EEstablished: + { + lcSessionState = MLcSession::EOpen; + break; + } + case CMceSession::ECancelling: + case CMceSession::ETerminating: + { + lcSessionState = MLcSession::EClosing; + break; + } + case CMceSession::ETerminated: + { + lcSessionState = MLcSession::EClosed; + break; + } + default: + { + lcSessionState = MLcSession::EUninitialized; + break; + } + } + } + return lcSessionState; + } + +// ----------------------------------------------------------------------------- +// From MLcSession +// ----------------------------------------------------------------------------- +// +void CMusEngMceSession::SetLcSessionObserver( MLcSessionObserver* aObserver ) + { + iLcSessionObserver = aObserver; + } + +// ----------------------------------------------------------------------------- +// From MLcSession +// ----------------------------------------------------------------------------- +// +void CMusEngMceSession::SetLcUiProvider( MLcUiProvider* aUiProvider ) + { + iLcUiProvider = aUiProvider; + } + +// ----------------------------------------------------------------------------- +// From MLcSession +// ----------------------------------------------------------------------------- +// +MLcVideoPlayer* CMusEngMceSession::RemoteVideoPlayer() + { + return NULL; + } + +// ----------------------------------------------------------------------------- +// From MLcSession +// ----------------------------------------------------------------------------- +// +MLcVideoPlayer* CMusEngMceSession::LocalVideoPlayer() + { + return NULL; + } + +// ----------------------------------------------------------------------------- +// From MLcSession +// ----------------------------------------------------------------------------- +// +const TDesC& CMusEngMceSession::LocalDisplayName() + { + return KNullDesC; + } + +// ----------------------------------------------------------------------------- +// From MLcSession +// ----------------------------------------------------------------------------- +// +const TDesC& CMusEngMceSession::RemoteDisplayName() + { + return KNullDesC; + } + +// ----------------------------------------------------------------------------- +// From MLcSession +// ----------------------------------------------------------------------------- +// +TInt CMusEngMceSession::SetParameter( TInt /*aId*/, TInt /*aValue*/ ) + { + return KErrNotSupported; + } + +// ----------------------------------------------------------------------------- +// From MLcSession +// ----------------------------------------------------------------------------- +// +TInt CMusEngMceSession::ParameterValue( TInt /*aId*/ ) + { + return KErrNotSupported; + } + +// ----------------------------------------------------------------------------- +// From MLcSession +// ----------------------------------------------------------------------------- +// +TBool CMusEngMceSession::IsBackgroundStartup() + { + TInt fastMode; + TInt error = RProperty::Get( NMusSessionApi::KCategoryUid, + NMusSessionApi::KFastMode, + fastMode ); + + return ( error == KErrNone && + iBackground && + fastMode == MusSettingsKeys::EFastModeOn ); + } + +// ----------------------------------------------------------------------------- +// From MLcSession +// ----------------------------------------------------------------------------- +// +TInt CMusEngMceSession::SetForegroundStatus( TBool aIsForeground ) + { + MUS_LOG1( "mus: [ENGINE] -> CMusEngMceSession::SetForegroundStatus() %d", + aIsForeground ) + + if ( aIsForeground ) + { + // Only clear the bg info, do not ever enable it again + iBackground = EFalse; + } + + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// From MLcSession +// ----------------------------------------------------------------------------- +// +const TDesC& CMusEngMceSession::RemoteDetails() + { + // Don't care about error, empty value will be used in that case + TPtr ptrDetails( iRemoteDetails->Des() ); + RProperty::Get( NMusSessionApi::KCategoryUid, + NMusSessionApi::KTelNumber, + ptrDetails ); + return *iRemoteDetails; + } + +// ----------------------------------------------------------------------------- +// From MLcSession +// ----------------------------------------------------------------------------- +// +void CMusEngMceSession::UpdateLcSessionL() { __ASSERT_ALWAYS( iSession, User::Leave( KErrNotReady ) ); - if ( iSession->State() == CMceSession::ETerminated || - iSession->State() == CMceSession::EIdle ) + + //In Mus engine, every update of player has immediate effect. Thus, this method + //is empty. + } + +// ----------------------------------------------------------------------------- +// From MLcSession +// ----------------------------------------------------------------------------- +// +TBool CMusEngMceSession::SendDialTone( TChar /*aKey*/) + { + // Handle Key once implemented + return ETrue; + } + +// ----------------------------------------------------------------------------- +// From MLcAudioControl +// ----------------------------------------------------------------------------- +// +TBool CMusEngMceSession::IsLcAudioMutedL() + { + __ASSERT_ALWAYS( iSession, User::Leave( KErrNotReady ) ); + + TBool containsAudio( EFalse ); + for ( TInt i = 0; i < iSession->Streams().Count(); ++i ) { - return EFalse; + if ( iSession->Streams()[i]->Type() == KMceAudio ) + { + containsAudio = ETrue; + } + } + + if ( containsAudio && !iExplicitlyMuted ) + { + return EFalse; } - CMceDisplaySink* display = MusEngMceUtils::GetDisplayL( *iSession ); - return display->IsEnabled(); + + return ETrue; + } + +// ----------------------------------------------------------------------------- +// From MLcAudioControl +// ----------------------------------------------------------------------------- +// +void CMusEngMceSession::MuteLcAudioL( TBool aMute ) + { + __ASSERT_ALWAYS( iSession, User::Leave( KErrNotReady ) ); + + DoMuteSpeakerL( aMute ); + iExplicitlyMuted = aMute; + } + +// ----------------------------------------------------------------------------- +// From MLcAudioControl +// ----------------------------------------------------------------------------- +// +TBool CMusEngMceSession::IsLcMicMutedL() + { + return iTelephoneUtils->IsMicMutedL(); } +// ----------------------------------------------------------------------------- +// From MLcAudioControl +// ----------------------------------------------------------------------------- +// +void CMusEngMceSession::MuteLcMicL( TBool aMute ) + { + iTelephoneUtils->MuteMicL( aMute ); + } // ----------------------------------------------------------------------------- -// Mutes playback of sended audio streams. Audio data is still streamed. +// From MLcAudioControl +// ----------------------------------------------------------------------------- +// +TBool CMusEngMceSession::IsEnablingLcLoudspeakerAllowed() + { + return iTelephoneUtils->AudioRoutingCanBeChanged(); + } + +// ----------------------------------------------------------------------------- +// From MLcAudioControl // ----------------------------------------------------------------------------- // -EXPORT_C void CMusEngMceSession::MuteL() +void CMusEngMceSession::EnableLcLoudspeakerL( TBool aEnabled ) + { + TRAPD( error, iTelephoneUtils->LoudspeakerL( aEnabled ) ) + + if ( error != KErrNone ) + { + // This is writed for emulator use + if ( error != KErrNotSupported ) + { + MUS_LOG1( "mus: [ENGINE] CMusEngSession::EnableLoudspeakerL() Leave: #%d", + error ) + User::Leave( error ); + } + // Not leave in emulator if KErrNotSupported + #if (!defined (__WINS__) && !defined(__WINSCW__)) + User::Leave( error ); + #endif + } + } + +// ----------------------------------------------------------------------------- +// From MLcAudioControl +// ----------------------------------------------------------------------------- +// +TBool CMusEngMceSession::IsLcLoudspeakerEnabled() { - MUS_LOG( "mus: [ENGINE] -> CMusEngMceSession::Mute()" ) + return iTelephoneUtils->IsLoudSpeakerEnabled(); + } + +// ----------------------------------------------------------------------------- +// From MLcAudioControl +// ----------------------------------------------------------------------------- +// +TInt CMusEngMceSession::LcVolumeL() + { + return iTelephoneUtils->GetVolumeL(); + } +// ----------------------------------------------------------------------------- +// From MLcAudioControl +// ----------------------------------------------------------------------------- +// +void CMusEngMceSession::SetLcVolumeL( TInt aValue ) + { + iTelephoneUtils->SetVolumeL( aValue ); + } + +// ----------------------------------------------------------------------------- +// From MLcAudioControl +// ----------------------------------------------------------------------------- +// +void CMusEngMceSession::IncreaseLcVolumeL() + { __ASSERT_ALWAYS( iSession, User::Leave( KErrNotReady ) ); - DoMuteSpeakerL( ETrue ); - - // Mark speaker as explicitly muted instead of muted because of disabling - // bundled display - iExplicitlyMuted = ETrue; - - MUS_LOG( "mus: [ENGINE] <- CMusEngMceSession::Mute()" ) + TInt currentVolume = iTelephoneUtils->GetVolumeL(); + iTelephoneUtils->SetVolumeL( currentVolume + 1 ); + SetSpeakerVolumeL( LcVolumeL() ); } - // ----------------------------------------------------------------------------- -// Unmutes playback of sended audio streams. +// From MLcAudioControl // ----------------------------------------------------------------------------- // -EXPORT_C void CMusEngMceSession::UnmuteL() +void CMusEngMceSession::DecreaseLcVolumeL() { - MUS_LOG( "mus: [ENGINE] -> CMusEngMceSession::Unmute()" ) - __ASSERT_ALWAYS( iSession, User::Leave( KErrNotReady ) ); - DoMuteSpeakerL( EFalse ); - - // Mark speaker as explicitly unmuted instead of unmuted because of - // enabling bundled display - iExplicitlyMuted = EFalse; - - MUS_LOG( "mus: [ENGINE] <- CMusEngMceSession::Unmute()" ) + TInt currentVolume = iTelephoneUtils->GetVolumeL(); + iTelephoneUtils->SetVolumeL( currentVolume - 1 ); + SetSpeakerVolumeL( LcVolumeL() ); } // ----------------------------------------------------------------------------- // // ----------------------------------------------------------------------------- // -void CMusEngMceSession::RefreshOrientationL() -{ - MUS_LOG( "mus: [ENGINE] <-> CMusEngMceSession::RefreshOrientationL()" ) -} - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -CMusEngMceSession::CMusEngMceSession( const TRect& aRect, - MMusEngSessionObserver& aSessionObserver ) - : CMusEngSession( aRect ), - iSessionObserver( aSessionObserver ), - iSecondsFromLastRtcpReport ( 0 ), - // Although speaker is constructed as muted, it is not explicitly muted - iExplicitlyMuted( EFalse ) +MLcSessionObserver* CMusEngMceSession::LcSessionObserver() { + return iLcSessionObserver; } - // ----------------------------------------------------------------------------- // // ----------------------------------------------------------------------------- // -void CMusEngMceSession::ConstructL() +MLcUiProvider* CMusEngMceSession::LcUiProvider() { - MUS_LOG( "mus: [ENGINE] -> CMusEngMceSession::ConstructL()" ) - CMusEngSession::ConstructL(); // Base class ConstructL -first - - // Creating new MCE Manager and set all needed observers to this class. - iManager = CMceManager::NewL( TUid::Uid( KMusUiUid ), - &iTransactionDataContainer ); - - iManager->SetSessionObserver( this ); - iManager->SetInSessionObserver( this ); - iManager->SetMediaObserver( this ); - iManager->SetRtpObserver( this ); - - // Check if operator specific behavior is expected - iOperatorVariant = ( MultimediaSharingSettings::OperatorVariantSettingL() == - MusSettingsKeys::EOperatorSpecific ); - - // Update timer initialization - iUpdateTimer = CMusEngSessionDurationTimer::NewL( *this ); - - iSipProfileHandler = CMusSipProfileHandler::NewL( *this ); - - MUS_LOG( "mus: [ENGINE] <- CMusEngMceSession::ConstructL()" ) + return iLcUiProvider; } +// ----------------------------------------------------------------------------- +// Returns estabilished session time. If not established return +// value is < 0 +// ----------------------------------------------------------------------------- +// +TTimeIntervalSeconds CMusEngMceSession::GetSessionTime() const + { + if ( iSession && iSession->State() == CMceSession::EEstablished ) + { + TTime time; + TTimeIntervalSeconds seconds; + time.HomeTime(); + + time.SecondsFrom( iStartTime, seconds ); + + return seconds; + } + + return TTimeIntervalSeconds( KErrNotReady ); + } // ----------------------------------------------------------------------------- // @@ -451,15 +743,160 @@ MUS_LOG( "mus: [ENGINE] <- CMusEngMceSession::RectChangedL()" ) } +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusEngMceSession::InformObserverAboutSessionStateChange() + { + if ( iLcSessionObserver ) + { + iLcSessionObserver->StateChanged( *this ); + } + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusEngMceSession::InformObserverAboutSessionUpdate() + { + if ( iLcSessionObserver ) + { + iLcSessionObserver->Updated( *this ); + } + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusEngMceSession::InformObserverAboutSessionFailure( TInt aReason ) + { + if ( iLcSessionObserver ) + { + iLcSessionObserver->Failed( *this, aReason ); + } + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusEngMceSession::InformObserverAboutPlayerStateChange( + MLcVideoPlayer* aPlayer ) + { + if ( iLcSessionObserver && aPlayer ) + { + iLcSessionObserver->StateChanged( *aPlayer ); + } + + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusEngMceSession::InformUiProviderAboutReceivingStart() + { + MUS_LOG( "mus: [ENGINE] -> CMusEngMceSession::InformUiProviderAboutReceivingStart()" ) + if ( iBackground && iLcUiProvider ) + { + MUS_LOG( "mus: [ENGINE] receiving started in BG mode, switching to FG" ) + iLcUiProvider->HandleForegroundStatus( ETrue ); + } + MUS_LOG( "mus: [ENGINE] <- CMusEngMceSession::InformUiProviderAboutReceivingStart()" ) + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusEngMceSession::InformObserverAboutPlayerUpdate( + MLcVideoPlayer* aPlayer ) + { + if ( iLcSessionObserver && aPlayer ) + { + iLcSessionObserver->Updated( *aPlayer ); + } + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusEngMceSession::InformObserverAboutPlayerFailure( + MLcVideoPlayer* aPlayer, + TInt aReason ) + { + if ( iLcSessionObserver && aPlayer ) + { + iLcSessionObserver->Failed( *aPlayer, aReason ); + } + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +MLcUiProvider& CMusEngMceSession::LcUiProviderL() + { + __ASSERT_ALWAYS( iLcUiProvider, User::Leave( KErrNotReady ) ); + return *iLcUiProvider; + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusEngMceSession::AddSdpBandwidthAttributesL( CDesC8Array& aSdpLinesArray, + TInt aBandwidthAs ) + { + MUS_LOG( "mus: [ENGINE] -> CMusEngMceSession::AddSdpBandwidthAttributesL()" ) + const TInt KMusNumberMaxLength = 10; + HBufC8* bandwidth = HBufC8::NewLC( + KMusEngSessionSdpLineTiasLine().Length() + KMusNumberMaxLength ); + + bandwidth->Des().Copy( KMusEngSessionSdpLineBandwidthLine() ); + bandwidth->Des().AppendNum( aBandwidthAs ); + bandwidth->Des().Append( KMusEngNewLine() ); + aSdpLinesArray.AppendL( *bandwidth ); + + bandwidth->Des().Copy( KMusEngSessionSdpLineTiasLine() ); + bandwidth->Des().AppendNum( aBandwidthAs * KMusTiasMultiplier ); + bandwidth->Des().Append( KMusEngNewLine() ); + aSdpLinesArray.AppendL( *bandwidth ); + + CleanupStack::PopAndDestroy( bandwidth ); + MUS_LOG( "mus: [ENGINE] <- CMusEngMceSession::AddSdpBandwidthAttributesL()" ) + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +TBool CMusEngMceSession::IsBandwidthAttributeSet( MDesC8Array* aSdpLinesArray ) + { + MUS_LOG( "mus: [ENGINE] -> CMusEngMceSession::IsBandwidthAttributeSet()" ) + TBool ret = + ContainsText( aSdpLinesArray, KMusEngSessionSdpLineTiasLine() ) || + ContainsText( aSdpLinesArray, KMusEngSessionSdpLineBandwidthLine() ); + MUS_LOG1( "mus: [ENGINE] <- CMusEngMceSession::IsBandwidthAttributeSet(): %d", + ret ) + return ret; + } // ----------------------------------------------------------------------------- // Setting session level sdp lines. Bandwith attribute is always used in -// operator variant mode and at receiver side (using force). -// However, bandwidth attribute is preferred to be used at media level -// (see SetMediaSdpLinesL method). It is set to session level only if other -// side is using also session level bandwidth. Media level preference exists -// because some other manufacturer's videosharing does not understand session -// level bandwidth attribute. +// operator variant mode and at receiver side (using force) when TIAS +// usage is disabled. However, bandwidth attribute is preferred to be used +// at media level (see SetMediaSdpLinesL method). It is set to session level +// only if other side is using also session level bandwidth. Media level +// preference exists because some other manufacturer's videosharing does not +// understand session level bandwidth attribute. +// In non-operator variant mode and when TIAS usage is enabled, both AS and +// TIAS are added to session level only if the other side is using session +// level bandwidth. // ----------------------------------------------------------------------------- // void CMusEngMceSession::SetSessionSdpLinesL( @@ -472,8 +909,17 @@ CleanupDeletePushL( oldSessionSdpLines ); TBool bandwidthAtSessionLevel( ContainsText( oldSessionSdpLines, KMusEngSessionSdpLineBandwidthLine() ) ); + TBool tiasAtSessionLevel( ContainsText( oldSessionSdpLines, + KMusEngSessionSdpLineTiasLine() ) ); CleanupStack::PopAndDestroy( oldSessionSdpLines ); - + + TInt bandwidthAs = 0; + TRAPD( err, bandwidthAs = + MultimediaSharingSettings::VideoBandwidthSettingL() ); + __ASSERT_ALWAYS( err == KErrNone || err == KErrNotFound, + User::Leave( err ) ); + TBool useTias = ( bandwidthAs > 0 ); + CDesC8Array* newSessionSDPLines = new ( ELeave ) CDesC8ArrayFlat( KMusEngArrayGranularity3 ); CleanupStack::PushL( newSessionSDPLines ); @@ -485,15 +931,22 @@ } else { - newSessionSDPLines->AppendL( KMusEngSessionSdpLineXApplication() ); + newSessionSDPLines->AppendL( KMusEngSessionSdpLineXApplication() ); } - - if ( bandwidthAtSessionLevel && ( iOperatorVariant || aForceBandwidthLine ) ) - { - MUS_LOG( "mus: [ENGINE] setting bandwidth to session level" ) + + if ( bandwidthAtSessionLevel && ( iOperatorVariant || + ( aForceBandwidthLine && !useTias ) ) ) + { + MUS_LOG( "mus: [ENGINE] setting bandwidth to session level" ) newSessionSDPLines->AppendL( KMusEngSessionSdpLineBandwidthField() ); - } - + } + else if ( !iOperatorVariant && useTias && aForceBandwidthLine && + ( bandwidthAtSessionLevel || tiasAtSessionLevel ) ) + { + MUS_LOG( "mus: [ENGINE] setting b=AS and b=TIAS to session level" ) + AddSdpBandwidthAttributesL( *newSessionSDPLines, bandwidthAs ); + } + aSession.SetSessionSDPLinesL( newSessionSDPLines ); CleanupStack::Pop( newSessionSDPLines ); @@ -501,9 +954,14 @@ MUS_LOG( "mus: [ENGINE] <- CMusEngMceSession::SetSessionSdpLinesL()" ) } + // ----------------------------------------------------------------------------- -// Setting media level sdp lines. Bandwidth is not set to media level if -// it is used already at session level. +// Setting media level sdp lines. In operator variant mode or when TIAS usage +// is disabled bandwidth is not set to media level if it is used already at +// session level. In non operator variant and TIAS enabled case both AS and +// TIAS attributes are set to media level if: 1)it is an outcoming sessions +// or 2) incoming session had bandwidth attributes on media level or didn't +// have bandwidth attributes at all // ----------------------------------------------------------------------------- // void CMusEngMceSession::SetMediaSdpLinesL( @@ -516,22 +974,49 @@ CleanupDeletePushL( sessionSdpLines ); TBool bandwidthAtSessionLevel( ContainsText( sessionSdpLines, KMusEngSessionSdpLineBandwidthLine() ) ); - CleanupStack::PopAndDestroy( sessionSdpLines ); - - if ( !bandwidthAtSessionLevel && ( iOperatorVariant || aForceBandwidthLine ) ) + + TInt bandwidthAs = 0; + TRAPD( error, bandwidthAs = + MultimediaSharingSettings::VideoBandwidthSettingL() ); + __ASSERT_ALWAYS( error == KErrNone || error == KErrNotFound, + User::Leave( error ) ); + TBool useTias = ( bandwidthAs > 0 ); + TBool tiasOrAsAtSessionLevel = EFalse; + TBool tiasOrAsAtMediaLevel = EFalse; + if ( useTias ) { - MUS_LOG( "mus: [ENGINE] setting bandwidth to media level" ) - - //Add media attribute to sdp - const TInt KMusMediaSdpLinesGranularity = 1; - CDesC8Array* headers = - new ( ELeave ) CDesC8ArrayFlat( KMusMediaSdpLinesGranularity ); - CleanupStack::PushL( headers ); - headers->AppendL( KMusEngSessionSdpLineBandwidthField() ); - aStream.SetMediaAttributeLinesL( headers ); - CleanupStack::Pop( headers ); + tiasOrAsAtSessionLevel = IsBandwidthAttributeSet( sessionSdpLines ); + MDesC8Array* mediaSdpLines = aStream.MediaAttributeLinesL(); + tiasOrAsAtMediaLevel = IsBandwidthAttributeSet( mediaSdpLines ); + delete mediaSdpLines; } - + + CleanupStack::PopAndDestroy( sessionSdpLines ); + + TBool setTiasAtMediaLevel = ( tiasOrAsAtMediaLevel || + ( aForceBandwidthLine && + !tiasOrAsAtSessionLevel ) ); + + const TInt KMusMediaSdpLinesGranularity = 2; + CDesC8Array* headers = + new ( ELeave ) CDesC8ArrayFlat( KMusMediaSdpLinesGranularity ); + CleanupStack::PushL( headers ); + + if ( !bandwidthAtSessionLevel && ( iOperatorVariant || + ( aForceBandwidthLine && !useTias ) ) ) + { + MUS_LOG( "mus: [ENGINE] setting bandwidth to media level" ) + headers->AppendL( KMusEngSessionSdpLineBandwidthField() ); + } + else if ( !iOperatorVariant && useTias && setTiasAtMediaLevel ) + { + MUS_LOG( "mus: [ENGINE] setting b=AS and b=TIAS to media level" ) + AddSdpBandwidthAttributesL( *headers, bandwidthAs ); + } + + aStream.SetMediaAttributeLinesL( headers ); + CleanupStack::Pop( headers ); + MUS_LOG( "mus: [ENGINE] <- CMusEngMceSession::SetMediaSdpLinesL()" ) } @@ -550,31 +1035,18 @@ { CMceSpeakerSink* speaker = MusEngMceUtils::GetSpeaker( *( iSession->Streams()[i] ) ); - + if ( speaker && - aNewVolume >= KMusEngMinVolume && - aNewVolume <= KMusEngMaxVolume ) + aNewVolume >= 1 && + aNewVolume <= speaker->MaxVolumeL() ) { - // MCE might have different scale for volume than MUS - // so adjust MUS volume to MCE scale before setting. - TInt maxVol = speaker->MaxVolumeL(); - TInt setVol = maxVol * aNewVolume / KMusEngMaxVolume; - setVol = Max(setVol, 1); - - MUS_LOG2( -"mus: [ENGINE] -> CMusEngMceSession::SetSpeakerVolumeL() orig:%d, adjusted:%d", -aNewVolume, setVol ); - - if ( setVol <= maxVol ) - { - speaker->SetVolumeL( setVol ); - } + speaker->SetVolumeL( aNewVolume ); } + } } } - // ----------------------------------------------------------------------------- // // ----------------------------------------------------------------------------- @@ -600,8 +1072,7 @@ { AdjustVideoStreamL( static_cast ( videoStream->BoundStreamL() ) ); - } - + } } else // audio { @@ -620,10 +1091,8 @@ } MUS_LOG( "mus: [ENGINE] <- CMusEngMceSession::AdjustStreamsAndCodecsL" ) - } - // ----------------------------------------------------------------------------- // // ----------------------------------------------------------------------------- @@ -637,16 +1106,16 @@ DoCodecSelectionL( aVideoStream ); const RPointerArray& codecs = aVideoStream.Codecs(); - + + __ASSERT_ALWAYS( aVideoStream.Source(), User::Leave( KErrArgument ) ); for ( TInt codecIndex = 0; codecIndex < codecs.Count(); ++codecIndex ) { - AdjustVideoCodecL( *codecs[codecIndex] ); + AdjustVideoCodecL( *codecs[codecIndex], aVideoStream.Source()->Type() ); } MUS_LOG( "mus: [ENGINE] <- CMusEngMceSession::AdjustVideoStreamL" ) } - // ----------------------------------------------------------------------------- // // ----------------------------------------------------------------------------- @@ -666,7 +1135,6 @@ MUS_LOG( "mus: [ENGINE] <- CMusEngMceSession::AdjustAudioStreamL" ) } - // ----------------------------------------------------------------------------- // Calls CMceInSession::RejectL() inside TRAP_IGNORE @@ -695,16 +1163,15 @@ TRAP_IGNORE( aSession.RejectL() ) } } - } - + } // ----------------------------------------------------------------------------- // By default rejects all incoming sessions immediately without notifying UI // ----------------------------------------------------------------------------- // void CMusEngMceSession::IncomingSession( - CMceInSession* aSession, - TMceTransactionDataContainer* /*aContainer*/ ) + CMceInSession* aSession, + TMceTransactionDataContainer* /*aContainer*/ ) { MUS_LOG( "mus: [ENGINE] -> CMusEngMceSession::IncomingSession()" ) @@ -718,15 +1185,14 @@ MUS_LOG( "mus: [ENGINE] <- CMusEngMceSession::IncomingSession()" ) } - // ----------------------------------------------------------------------------- // By default rejects all incoming updates immediately without notifying UI // ----------------------------------------------------------------------------- // void CMusEngMceSession::IncomingUpdate( - CMceSession& aOrigSession, - CMceInSession* aUpdatedSession, - TMceTransactionDataContainer* /*aContainer*/ ) + CMceSession& aOrigSession, + CMceInSession* aUpdatedSession, + TMceTransactionDataContainer* /*aContainer*/ ) { MUS_LOG( "mus: [ENGINE] -> CMusEngMceSession::IncomingUpdate()" ) @@ -748,8 +1214,7 @@ } MUS_LOG( "mus: [ENGINE] <- CMusEngMceSession::IncomingUpdate()" ) - } - + } // ----------------------------------------------------------------------------- // @@ -785,20 +1250,12 @@ } case CMceMediaStream::EIdle: // Stream is not receiving RTP { - iSessionObserver.StreamIdle(); + // NOP break; } case CMceMediaStream::EStreaming: // Stream is streaming { - // If streaming stream is complete video out- or instream, inform UI - if ( aStream.Type() == KMceVideo && - aStream.Source() && - aStream.Sinks().Count() >= 0 && - ( aStream.Source()->Type() == KMceRTPSource || - aStream.Sinks()[0]->Type() == KMceRTPSink ) ) - { - iSessionObserver.StreamStreaming(); - } + StreamStreaming( aStream ); break; } case CMceMediaStream::EDisabled: // Stream is explicitly disabled @@ -832,7 +1289,6 @@ } - // ----------------------------------------------------------------------------- // // ----------------------------------------------------------------------------- @@ -846,7 +1302,6 @@ MUS_LOG( "mus: [ENGINE] <- CMusEngMceSession::StreamStateChanged( src )" ) } - // ----------------------------------------------------------------------------- // // ----------------------------------------------------------------------------- @@ -860,14 +1315,13 @@ MUS_LOG( "mus: [ENGINE] <- CMusEngMceSession::StreamStateChanged( sink )" ) } - // ----------------------------------------------------------------------------- // // ----------------------------------------------------------------------------- // void CMusEngMceSession::SessionStateChanged( - CMceSession& aSession, - TMceTransactionDataContainer* aContainer ) + CMceSession& aSession, + TMceTransactionDataContainer* aContainer ) { MUS_LOG( "mus: [ENGINE] -> CMusEngMceSession::SessionStateChanged()" ) @@ -875,7 +1329,7 @@ { // Container should never be NULL, but if it is, handle as // internal error - iSessionObserver.SessionFailed(); + InformObserverAboutSessionFailure( KErrGeneral ); return; } @@ -895,8 +1349,7 @@ } MUS_LOG( "mus: [ENGINE] <- CMusEngMceSession::SessionStateChanged()" ) - } - + } // ----------------------------------------------------------------------------- // @@ -914,7 +1367,7 @@ { MUS_LOG( "mus: [ENGINE] CMusEngMceSession::\ SessionConnectionStateChanged: Notify observer" ) - iSessionObserver.SessionConnectionLost(); + InformObserverAboutSessionFailure( MLcSession::EConnectionLost ); } } @@ -922,17 +1375,11 @@ SessionConnectionStateChanged()" ) } - // ----------------------------------------------------------------------------- // // ----------------------------------------------------------------------------- // - -#if ( defined( _DEBUG ) && !defined( UNIT_TESTING ) ) void CMusEngMceSession::Failed( CMceSession& aSession, TInt aError ) -#else -void CMusEngMceSession::Failed( CMceSession& aSession, TInt /*aError*/ ) -#endif { MUS_LOG1( "mus: [ENGINE] -> CMusEngMceSession::Failed() error #%d", aError ) @@ -940,20 +1387,19 @@ if ( iSession && iSession == &aSession ) { MUS_LOG( "mus: [ENGINE] CMusEngMceSession::Failed: Notify observer" ) - iSessionObserver.SessionFailed(); + InformObserverAboutSessionFailure( aError ); } MUS_LOG( "mus: [ENGINE] <- CMusEngMceSession::Failed()" ) } - // ----------------------------------------------------------------------------- // // ----------------------------------------------------------------------------- // void CMusEngMceSession::UpdateFailed( - CMceSession& aSession, - TMceTransactionDataContainer* aContainer ) + CMceSession& aSession, + TMceTransactionDataContainer* aContainer ) { MUS_LOG( "mus: [ENGINE] -> CMusEngMceSession::UpdateFailed()" ) @@ -961,7 +1407,7 @@ { // Container should never be NULL, but if it is, handle as // internal error - iSessionObserver.SessionFailed(); + InformObserverAboutSessionFailure( KErrGeneral ); return; } @@ -969,13 +1415,12 @@ { MUS_LOG( "mus: [ENGINE] CMusEngMceSession::UpdateFailed: \ Notify observer" ) - iSessionObserver.SessionFailed(); + InformObserverAboutSessionFailure( KErrGeneral ); } MUS_LOG( "mus: [ENGINE] <- CMusEngMceSession::UpdateFailed()" ) } - // ----------------------------------------------------------------------------- // // ----------------------------------------------------------------------------- @@ -1017,8 +1462,7 @@ } } } - } - + } // ----------------------------------------------------------------------------- // @@ -1035,13 +1479,12 @@ if ( aStream.Type() == KMceVideo ) { - iSessionObserver.StreamIdle(); + InformObserverAboutPlayerStateChange( RemoteVideoPlayer() ); } MUS_LOG( "mus: [ENGINE] <- CMusEngMceSession::InactivityTimeout()" ) } - // ----------------------------------------------------------------------------- // // ----------------------------------------------------------------------------- @@ -1054,7 +1497,6 @@ // NOP, We are not at all interested about SSRCs } - // ----------------------------------------------------------------------------- // // ----------------------------------------------------------------------------- @@ -1067,7 +1509,6 @@ // NOP, We are not at all interested about SSRCs } - // ----------------------------------------------------------------------------- // // ----------------------------------------------------------------------------- @@ -1084,6 +1525,14 @@ return allowed; } +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusEngMceSession::ProfileRegistered() + { + // NOP in base class + } // ----------------------------------------------------------------------------- // @@ -1102,58 +1551,47 @@ switch ( aSession.State() ) { case CMceSession::EIdle: - { - MUS_LOG( "mus: [ENGINE] Unexpected asynchronous \ - state transition, consider session as failed." ) - iSessionObserver.SessionFailed(); - break; - } - case CMceSession::EOffering : - { - break; - } case CMceSession::EIncoming: { MUS_LOG( "mus: [ENGINE] Unexpected asynchronous \ state transition, consider session as failed." ) - iSessionObserver.SessionFailed(); - break; - } - case CMceSession::EReserving : - { - // UpdateL called to incoming session during - // session establishment - break; - } - case CMceSession::EAnswering : // Answering an incoming call - { - break; - } - case CMceSession::EProceeding : - { + InformObserverAboutSessionFailure( KErrGeneral ); break; } case CMceSession::EEstablished: { + if ( iStoreEncoderConfigInfo ) + { + iStoreEncoderConfigInfo = EFalse; + TRAPD( error, StoreEncoderConfigInfoL() ) + if ( error != KErrNone && error != KErrNotFound ) + { + // Only acceptable error is absence of repository entry, + // otherwise we inform user about failed session. + InformObserverAboutSessionFailure( error ); + return; + } + } + // Check that session timer is not already running, which is // the case when refreshing the session with session timer if ( !iUpdateTimer->IsActive() ) { iStartTime.HomeTime(); // Start counting session duration iUpdateTimer->Start( KMusEngTimerInterval ); - iSessionObserver.SessionEstablished(); + InformObserverAboutSessionStateChange(); } - + break; } + case CMceSession::EOffering: + case CMceSession::EReserving: + case CMceSession::EAnswering: + case CMceSession::EProceeding: case CMceSession::ECancelling: - { - // MCE has for some reason started to cancel session - break; - } case CMceSession::ETerminating: { - // MCE has for some reason started to terminate session + // NOP break; } case CMceSession::ETerminated: @@ -1173,7 +1611,6 @@ MUS_LOG( "mus: [ENGINE] <- CMusEngMceSession::HandleSessionStateChanged" ) } - // ----------------------------------------------------------------------------- // This function should be called only if sibling classes cannot handle // termination reason by themselves. @@ -1184,28 +1621,28 @@ { MUS_LOG( "mus: [ENGINE] -> CMusEngMceSession::HandleTermination()" ) - iSipProfileHandler->RefreshIapAvailabilities(); - + iSipProfileHandler->RefreshIapAvailabilities(); + switch ( aStatusCode ) { case 0: { // Normal session termination or session by another end. - iSessionObserver.SessionTerminated(); + InformObserverAboutSessionStateChange(); break; } case KMusEngSipReasonCodeOk: { // Normal session termination by this end: We have sent BYE // and now received 200 OK to it. - iSessionObserver.SessionTerminated(); + InformObserverAboutSessionStateChange(); break; } default: { // Termination reason cannot be determined, handle as internal // error. - iSessionObserver.SessionFailed(); + InformObserverAboutSessionFailure( KErrGeneral ); break; } } @@ -1213,22 +1650,27 @@ MUS_LOG( "mus: [ENGINE] <- CMusEngMceSession::HandleTermination()" ) } - // ----------------------------------------------------------------------------- // // ----------------------------------------------------------------------------- // -void CMusEngMceSession::AdjustVideoCodecL( CMceVideoCodec& aVideoCodec ) +void CMusEngMceSession::AdjustVideoCodecL( CMceVideoCodec& aVideoCodec, + TMceSourceType aSourceType ) { MUS_LOG( "mus: [ENGINE] -> CMusEngMceSession::AdjustVideoCodecL()" ) aVideoCodec.SetMMFPriorityL( KAudioPrioritySwisPlayback ); aVideoCodec.SetMMFPriorityPreferenceL( KAudioPrefSwisPlayback ); - MUS_LOG( "mus: [ENGINE] Video MMF priority and preference set" ) + if ( aVideoCodec.SdpName() == KMceSDPNameH264() && + aSourceType == KMceCameraSource ) + { + SetCodecConfigKeyL( aVideoCodec ); + SetEncodingDeviceL( aVideoCodec ); + } + MUS_LOG( "mus: [ENGINE] <- CMusEngMceSession::AdjustVideoCodecL()" ) } - // ----------------------------------------------------------------------------- // 1. Sets MMF audio priority and preference @@ -1245,7 +1687,6 @@ MUS_LOG( "mus: [ENGINE] <- CMusEngMceSession::AdjustAudioCodecL()" ) } - // ----------------------------------------------------------------------------- // Remove multiples of H.263 codec, prefer H263-2000 over H263-1998. // Additionally select just the one with best quality from selected mode. @@ -1300,18 +1741,14 @@ } } } - if ( bestBitrateCodec != NULL ) + if ( bestBitrateCodec ) { DoBitrateBasedRemovalL( aVideoStream, *bestBitrateCodec ); } - /* Codec removal based on configuration */ - DoCodecConfigurationBasedRemovalL( aVideoStream ); - MUS_LOG( "mus: [ENGINE] <- CMusEngMceSession::DoCodecSelectionL()" ) } - // ----------------------------------------------------------------------------- // // ----------------------------------------------------------------------------- @@ -1320,12 +1757,11 @@ { // Update timer is used also to detect RTCP inactivity ++iSecondsFromLastRtcpReport; - - iSessionObserver.SessionTimeChanged( GetSessionTime() ); if ( iSecondsFromLastRtcpReport >= KMusEngRtcpInactivityThreshold ) { - iSessionObserver.InactivityTimeout(); + MUS_LOG( "mus: [ENGINE] CMusEngMceSession::UpdateTimerEvent() ->EMediaInactivityTimeout" ) + InformObserverAboutSessionFailure( MLcSession::EMediaInactivityTimeout ); // Disable calling multiple times by reseting timer iSecondsFromLastRtcpReport = 0; } @@ -1333,7 +1769,6 @@ iUpdateTimer->Start( KMusEngTimerInterval ); } - // ----------------------------------------------------------------------------- // Enables or disables all the speaker sinks of all the audio streams // ----------------------------------------------------------------------------- @@ -1346,8 +1781,7 @@ for ( TInt i = 0; i < streams.Count(); ++i ) { - CMceSpeakerSink* speaker = - MusEngMceUtils::GetSpeaker( *streams[i] ); + CMceSpeakerSink* speaker = MusEngMceUtils::GetSpeaker( *streams[i] ); if ( speaker ) { @@ -1395,7 +1829,6 @@ } return EFalse; } - // ----------------------------------------------------------------------------- // @@ -1455,44 +1888,253 @@ } // ----------------------------------------------------------------------------- -// +// +// ----------------------------------------------------------------------------- +// +void CMusEngMceSession::SetEncodingDeviceL( CMceVideoCodec& aVideoCodec ) + { + MUS_LOG( "mus: [ENGINE] -> CMusEngMceSession::SetEncodingDeviceL()" ) + + // We try to read encoding device UID. If we do not succeed, we use default + + const TUid KDefaultEncodingDevice( TUid::Uid( 0x20001C13 ) ); + TUid encodingDevice( KDefaultEncodingDevice ); + TRAPD( error, + encodingDevice = MultimediaSharingSettings::EncodingDeviceL() ) + __ASSERT_ALWAYS( error == KErrNone || error == KErrNotFound, + User::Leave( error ) ); + aVideoCodec.SetPreferredEncodingDecodingDeviceL( encodingDevice ); + + MUS_LOG( "mus: [ENGINE] <- CMusEngMceSession::SetEncodingDeviceL()" ) + } + +// ----------------------------------------------------------------------------- +// // ----------------------------------------------------------------------------- // -void CMusEngMceSession::DoCodecConfigurationBasedRemovalL( CMceVideoStream& aVideoStream ) +void CMusEngMceSession::SetCodecConfigKeyL( CMceVideoCodec& aVideoCodec ) { - MUS_LOG( "mus: [ENGINE] -> CMusEngMceSession::DoCodecConfigurationBasedRemovalL()" ) - if( MultimediaSharingSettings::IsAvcDisabled()) + MUS_LOG( "mus: [ENGINE] -> CMusEngMceSession::SetCodecConfigKeyL()" ) + + HBufC8* configKey( NULL ); + + // We try to read config key. If we do not succeed, we prepare to + // write keys to CenRep for the next time. + TRAPD( error, configKey = ReadCodecConfigKeyL( aVideoCodec ) ) + + if ( error == KErrNone ) { - RPointerArray& codecs = - MUS_CODEC_ARR_CONST_CAST( aVideoStream.Codecs() ); - TInt codecIndex = 0; - while ( codecIndex < codecs.Count() ) + // There is a repository for config keys + if ( configKey ) + { + // ...and key is found. + CleanupStack::PushL( configKey ); + aVideoCodec.SetConfigKeyL( *configKey ); + CleanupStack::PopAndDestroy( configKey ); + } + else { - CMceVideoCodec& currentCodec = *codecs[codecIndex++]; - if ( !currentCodec.SdpName().CompareF( KMceSDPNameH264 ) ) - { - MUS_LOG( "mus: [ENGINE] - Removing avc from supported codec list" ) - aVideoStream.RemoveCodecL( currentCodec ); - codecs = MUS_CODEC_ARR_CONST_CAST( aVideoStream.Codecs() ); - codecIndex = 0; - } + // ...but key is not found, so it must be written to CenRep when + // available. + iStoreEncoderConfigInfo = ETrue; } - } - MUS_LOG( "mus: [ENGINE] <- CMusEngMceSession::DoCodecConfigurationBasedRemovalL()" ) + } + else if ( error == KErrNotFound ) + { + // There is no repository for config keys so there is no point + // trying to write anything there. Session setup can still continue. + MUS_LOG1( "mus: [ENGINE] No repository for config keys [%d]", error ) + } + else + { + User::Leave( error ); + } + + MUS_LOG( "mus: [ENGINE] <- CMusEngMceSession::SetCodecConfigKeyL()" ) + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +HBufC8* CMusEngMceSession::ReadCodecConfigKeyL( + const CMceVideoCodec& aVideoCodec ) const + { + MUS_LOG( "mus: [ENGINE] -> CMusEngMceSession::ReadCodecConfigKeyL()" ) + + HBufC8* key( NULL ); + + HBufC8* encoderInfo = MultimediaSharingSettings::EncoderConfigInfoLC(); + __ASSERT_ALWAYS( encoderInfo, User::Leave( KErrNotFound ) ); + + TPtrC8 keyId( ConfigKeyIdL( aVideoCodec ) ); + + TInt tokenStartPosition( encoderInfo->FindC( keyId ) ); + if ( tokenStartPosition > KErrNotFound ) + { + TInt tokenLength( encoderInfo->Mid( tokenStartPosition ).FindC( + KMusEncoderInfoTokenizer ) ); + if ( tokenLength > KErrNotFound ) + { + // Separate key from token by removing keyId + TInt keyStartPosition = tokenStartPosition + keyId.Length(); + TInt keyLength = tokenLength - keyId.Length(); + TPtrC8 keyPtr = encoderInfo->Mid( keyStartPosition, keyLength ); + key = keyPtr.AllocL(); + } + } + + CleanupStack::PopAndDestroy( encoderInfo ); + + MUS_LOG( "mus: [ENGINE] <- CMusEngMceSession::ReadCodecConfigKeyL()" ) + + return key; } // ----------------------------------------------------------------------------- -// +// +// ----------------------------------------------------------------------------- +// +void CMusEngMceSession::StoreEncoderConfigInfoL() const + { + MUS_LOG( "mus: [ENGINE] -> CMusEngMceSession::StoreEncoderConfigInfoL()" ) + + HBufC8* configInfoInCenRep = MultimediaSharingSettings::EncoderConfigInfoLC(); + __ASSERT_ALWAYS( configInfoInCenRep, User::Leave( KErrNotFound ) ); + + TBuf8 keys; + keys.Append( *configInfoInCenRep ); + + CMceVideoStream* stream = MusEngMceUtils::GetVideoOutStreamL( *iSession ); + const RPointerArray& codecs = stream->Codecs(); + + for ( TInt codecIndex = 0; codecIndex < codecs.Count(); ++codecIndex ) + { + if ( codecs[codecIndex]->SdpName().FindF( KMceSDPNameH264 ) >= 0 ) + { + const TPtrC8 keyId = ConfigKeyIdL( *codecs[codecIndex] ); + HBufC8* configKey = codecs[codecIndex]->ConfigKeyL(); + CleanupStack::PushL( configKey ); + + if ( configKey && + keys.FindF( keyId ) == KErrNotFound && + configInfoInCenRep->FindF( keyId ) == KErrNotFound ) + { + + if ( keys.Length() + + keyId.Length() + + configKey->Length() + + KMusEncoderInfoTokenizer().Length() < + NCentralRepositoryConstants::KMaxBinaryLength ) + { + keys.Append( keyId ); + keys.Append( *configKey ); + keys.Append( KMusEncoderInfoTokenizer ); + } + } + + CleanupStack::PopAndDestroy( configKey ); + } + } + + MultimediaSharingSettings::SetEncoderConfigInfoL( keys ); + + CleanupStack::PopAndDestroy( configInfoInCenRep ); + + MUS_LOG( "mus: [ENGINE] <- CMusEngMceSession::StoreEncoderConfigInfoL()" ) + } + +// ----------------------------------------------------------------------------- +// // ----------------------------------------------------------------------------- // -void CMusEngMceSession::VolumeChanged( TInt aVolume, TBool aAudioRouteChanged ) +const TPtrC8 CMusEngMceSession::ConfigKeyIdL( + const CMceVideoCodec& aVideoCodec ) const { - MUS_LOG1( "mus: [ENGINE] -> CMusEngMceSession::VolumeChanged(): %d", aVolume ) - if ( iSession ) + MUS_LOG( "mus: [ENGINE] -> CMusEngMceSession::ConfigKeyIdL()" ) + + // Currently works only for AVC + __ASSERT_ALWAYS( aVideoCodec.SdpName().FindF( KMceSDPNameH264 ) >= 0, + User::Leave( KErrArgument ) ); + + TPtrC8 configKeyTokenId; + + if ( aVideoCodec.AllowedBitrates() & KMceAvcBitrateLevel1 ) + { + configKeyTokenId.Set( KMusAvcBitrateLevel1() ); + } + else if ( aVideoCodec.AllowedBitrates() & KMceAvcBitrateLevel1b ) + { + configKeyTokenId.Set( KMusAvcBitrateLevel1b() ); + } + else if ( aVideoCodec.AllowedBitrates() & KMceAvcBitrateLevel1_1 ) + { + configKeyTokenId.Set( KMusAvcBitrateLevel1_1() ); + } + else if ( aVideoCodec.AllowedBitrates() & KMceAvcBitrateLevel1_2 ) + { + configKeyTokenId.Set( KMusAvcBitrateLevel1_2() ); + } + else if ( aVideoCodec.AllowedBitrates() & KMceAvcBitrateLevel1_3 ) + { + configKeyTokenId.Set( KMusAvcBitrateLevel1_3() ); + } + else if ( aVideoCodec.AllowedBitrates() & KMceAvcBitrateLevel2 ) + { + configKeyTokenId.Set( KMusAvcBitrateLevel2() ); + } + else { - CMusEngSession::VolumeChanged( aVolume, aAudioRouteChanged ); - TRAP_IGNORE( SetSpeakerVolumeL( aVolume ) ); + User::Leave( KErrNotFound ); } + + MUS_LOG( "mus: [ENGINE] <- CMusEngMceSession::ConfigKeyIdL()" ) - MUS_LOG( "mus: [ENGINE] <- CMusEngMceSession::VolumeChanged()" ) + return configKeyTokenId; + } + +// ----------------------------------------------------------------------------- +// Contact address is saved if all following apply: +// - standard variant +// - only one contact entry (mus mgr doesn't provide contact id if multiple +// contact entries for other end is found) +// - no existing sip address info for contact +// - address is valid sip or tel uri +// ----------------------------------------------------------------------------- +// +void CMusEngMceSession::SaveContactL( const TDesC8& /*aAddress*/ ) + { + MUS_LOG( "mus: [ENGINE] -> CMusEngMceSession::SaveContactL" ); + + + MUS_LOG( "mus: [ENGINE] <- CMusEngMceSession::SaveContactL" ); } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusEngMceSession::StreamStreaming( CMceMediaStream& aStream ) + { + if ( aStream.State() == CMceMediaStream::EStreaming && + aStream.Type() == KMceVideo ) + { + MLcVideoPlayer* videoPlayer = NULL; + if ( aStream.Source() && + aStream.Source()->Type() == KMceRTPSource ) + { + videoPlayer = RemoteVideoPlayer(); + } + else if ( aStream.Sinks().Count() >= 0 && + aStream.Sinks()[0]->Type() == KMceRTPSink ) + { + videoPlayer = LocalVideoPlayer(); + } + else + { + } + InformObserverAboutPlayerStateChange( videoPlayer ); + } + } + +// End of file diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshengine/src/musengmceutils.cpp --- a/mmsharing/mmshengine/src/musengmceutils.cpp Thu Aug 19 09:51:39 2010 +0300 +++ b/mmsharing/mmshengine/src/musengmceutils.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -51,6 +51,23 @@ aStream.Source()->Type() == KMceRTPSource ); } +// ----------------------------------------------------------------------------- +// Tells if parameter stream is a video stream with RTP sink +// ----------------------------------------------------------------------------- +// +TBool MusEngMceUtils::IsVideoOutStream( CMceMediaStream& aStream ) + { + TBool isOutStream( EFalse ); + if ( aStream.Type() == KMceVideo ) + { + CMceMediaSink* rtpSink = MusEngMceUtils::GetMediaSink( + aStream, + KMceRTPSink ); + + isOutStream = ( rtpSink != NULL ); + } + return isOutStream; + } // ----------------------------------------------------------------------------- // Tells if parameter stream is an audio stream with RTP source @@ -78,21 +95,22 @@ for ( TInt i = 0; i < streams.Count(); ++i ) { - if ( streams[i]->Type() == KMceVideo ) + if ( MusEngMceUtils::IsVideoOutStream( *streams[i] ) ) { - CMceMediaSink* rtpSink = MusEngMceUtils::GetMediaSink( - *streams[i], - KMceRTPSink ); - if ( rtpSink ) - { - __ASSERT_ALWAYS( !videoOut, User::Leave( KErrOverflow ) ); - - videoOut = static_cast( streams[i] ); - } + __ASSERT_ALWAYS( !videoOut, User::Leave( KErrOverflow ) ); + + videoOut = static_cast( streams[i] ); + } - // There is no need to investigate bound stream since - // outstream is always constructed by Mus instead of MCE - } + // Check if bound stream is a video stream with RTP sink. + if ( streams[i]->BoundStream() && + MusEngMceUtils::IsVideoOutStream( streams[i]->BoundStreamL() ) ) + { + __ASSERT_ALWAYS( !videoOut, User::Leave( KErrOverflow ) ); + + videoOut = static_cast( + &streams[i]->BoundStreamL() ); + } } __ASSERT_ALWAYS( videoOut, User::Leave( KErrNotFound ) ); @@ -178,12 +196,15 @@ // ----------------------------------------------------------------------------- // CMceMediaSink* MusEngMceUtils::GetMediaSink( CMceMediaStream& aStream, - TMceSinkType aType ) + TMceSinkType aType, + TMceSourceType aAssociatedSourceType ) { const RPointerArray& sinks = aStream.Sinks(); for ( TInt i = 0; i < sinks.Count(); ++i ) { - if ( sinks[i]->Type() == aType ) + if ( sinks[i]->Type() == aType && + ( aAssociatedSourceType == KMusEngNoAssociatedSourceType || + aStream.Source()->Type() == aAssociatedSourceType ) ) { return sinks[i]; } @@ -198,10 +219,11 @@ // ----------------------------------------------------------------------------- // CMceMediaSink* MusEngMceUtils::GetMediaSinkL( CMceMediaStream& aStream, - TMceSinkType aType ) + TMceSinkType aType, + TMceSourceType aAssociatedSourceType ) { - CMceMediaSink* sink = MusEngMceUtils::GetMediaSink( aStream, aType ); + CMceMediaSink* sink = MusEngMceUtils::GetMediaSink( aStream, aType, aAssociatedSourceType ); __ASSERT_ALWAYS( sink, User::Leave( KErrNotFound ) ); @@ -214,11 +236,14 @@ // ----------------------------------------------------------------------------- // CMceMediaSink* MusEngMceUtils::GetMediaSink( CMceSession& aSession, - TMceSinkType aType ) + TMceSinkType aType, + TMceSourceType aAssociatedSourceType, + TBool aStrictMatch ) { CMceMediaSink* sink = NULL; - TRAP_IGNORE( sink = MusEngMceUtils::GetMediaSinkL( aSession, aType ) ) + TRAP_IGNORE( sink = MusEngMceUtils::GetMediaSinkL( + aSession, aType, aAssociatedSourceType, aStrictMatch ) ) return sink; } @@ -229,7 +254,9 @@ // ----------------------------------------------------------------------------- // CMceMediaSink* MusEngMceUtils::GetMediaSinkL( CMceSession& aSession, - TMceSinkType aType ) + TMceSinkType aType, + TMceSourceType aAssociatedSourceType, + TBool aStrictMatch ) { CMceMediaSink* sink = NULL; @@ -237,7 +264,7 @@ for ( TInt i = 0; i < streams.Count(); ++i ) { - sink = MusEngMceUtils::GetMediaSink( *streams[i], aType ); + sink = MusEngMceUtils::GetMediaSink( *streams[i], aType, aAssociatedSourceType ); if ( sink ) { return sink; @@ -246,13 +273,20 @@ if ( streams[i]->BoundStream() ) { sink = MusEngMceUtils::GetMediaSink( streams[i]->BoundStreamL(), - aType ); + aType, + aAssociatedSourceType ); if ( sink ) { return sink; } } } + + if ( !sink && aAssociatedSourceType != KMusEngNoAssociatedSourceType && !aStrictMatch ) + { + // No preferred match, try without source preference + sink = GetMediaSinkL( aSession, aType ); + } __ASSERT_ALWAYS( sink, User::Leave( KErrNotFound ) ); @@ -342,12 +376,15 @@ // Gets handle to a display sink. // ----------------------------------------------------------------------------- // -CMceDisplaySink* MusEngMceUtils::GetDisplay( CMceSession& aSession ) +CMceDisplaySink* MusEngMceUtils::GetDisplay( + CMceSession& aSession, TBool aPreferViewFinder ) { MUS_LOG( "mus: [ENGINE] -> MusEngMceUtils::GetDisplay()" ) MUS_LOG( "mus: [ENGINE] <- MusEngMceUtils::GetDisplay()" ) + TMceSourceType preferredSource = + aPreferViewFinder ? KMceCameraSource : KMusEngNoAssociatedSourceType; return static_cast( - MusEngMceUtils::GetMediaSink( aSession, KMceDisplaySink ) ); + MusEngMceUtils::GetMediaSink( aSession, KMceDisplaySink, preferredSource ) ); } @@ -356,11 +393,12 @@ // Gets handle to a display sink. // ----------------------------------------------------------------------------- // -CMceDisplaySink* MusEngMceUtils::GetDisplayL( CMceSession& aSession ) +CMceDisplaySink* MusEngMceUtils::GetDisplayL( + CMceSession& aSession, TBool aPreferViewFinder ) { MUS_LOG( "mus: [ENGINE] -> MusEngMceUtils::GetDisplayL()" ) - CMceDisplaySink* display = MusEngMceUtils::GetDisplay( aSession ); + CMceDisplaySink* display = MusEngMceUtils::GetDisplay( aSession, aPreferViewFinder ); __ASSERT_ALWAYS( display, User::Leave( KErrNotFound ) ); @@ -368,6 +406,51 @@ return display; } +// ----------------------------------------------------------------------------- +// Gets handle to a display sink displaying received video. +// ----------------------------------------------------------------------------- +// +CMceDisplaySink* MusEngMceUtils::GetReceivingDisplay( CMceSession& aSession ) + { + MUS_LOG( "mus: [ENGINE] -> MusEngMceUtils::GetReceivingDisplay()" ) + MUS_LOG( "mus: [ENGINE] <- MusEngMceUtils::GetReceivingDisplay()" ) + + // Search display which is connected with rtp source + TMceSourceType preferredSource = KMceRTPSource; + return static_cast( MusEngMceUtils::GetMediaSink( + aSession, KMceDisplaySink, preferredSource, ETrue ) ); + } + +// ----------------------------------------------------------------------------- +// Gets handle to a display sink displaying received video. +// ----------------------------------------------------------------------------- +// +CMceDisplaySink* MusEngMceUtils::GetReceivingDisplayL( CMceSession& aSession ) + { + MUS_LOG( "mus: [ENGINE] -> MusEngMceUtils::GetReceivingDisplayL()" ) + + CMceDisplaySink* display = GetReceivingDisplay( aSession ); + __ASSERT_ALWAYS( display != NULL, User::Leave( KErrNotFound ) ); + + MUS_LOG( "mus: [ENGINE] <- MusEngMceUtils::GetReceivingDisplay()" ) + + return display; + } + +// ----------------------------------------------------------------------------- +// Gets handle to a display sink displaying viewfinder content. +// ----------------------------------------------------------------------------- +// +CMceDisplaySink* MusEngMceUtils::GetVfDisplay( CMceSession& aSession ) + { + MUS_LOG( "mus: [ENGINE] -> MusEngMceUtils::GetVfDisplay()" ) + MUS_LOG( "mus: [ENGINE] <- MusEngMceUtils::GetVfDisplay()" ) + + // Search display which is connected with camera + TMceSourceType preferredSource = KMceCameraSource; + return static_cast( MusEngMceUtils::GetMediaSink( + aSession, KMceDisplaySink, preferredSource, ETrue ) ); + } // ----------------------------------------------------------------------------- // Adds display sink to specified stream if one does not exist already. @@ -376,7 +459,8 @@ // void MusEngMceUtils::AddDisplayL( CMceMediaStream& aStream, CMceManager& aManager, - const TRect& aDisplayRect ) + const TRect& aDisplayRect, + TBool aDisabled ) { MUS_LOG( "mus: [ENGINE] -> MusEngMceUtils::AddDisplayL()" ) @@ -394,6 +478,11 @@ CleanupStack::Pop( display ); } + if ( aDisabled ) + { + MUS_LOG( "mus: [ENGINE] Initially disabled display" ) + display->DisableL(); + } display->SetDisplayRectL( aDisplayRect ); MUS_LOG( "mus: [ENGINE] <- MusEngMceUtils::AddDisplayL()" ) @@ -449,9 +538,63 @@ MUS_LOG( "mus: [ENGINE] -> MusEngMceUtils::DisableStreamL()" ) } - - +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void MusEngMceUtils::DoEnableDisplayL( CMceDisplaySink& aDisplay, TBool aEnable ) + { + MUS_LOG1( "mus: [ENGINE] -> MusEngMceUtils::DoEnableDisplayL() %d", + aEnable ) + + if ( aEnable ) + { + if ( !aDisplay.IsEnabled() ) + { + aDisplay.EnableL(); + MUS_LOG( " Display enabled" ) + } + else + { + MUS_LOG( " Display already enabled, ignore" ) + } + } + else + { + if ( aDisplay.IsEnabled() ) + { + aDisplay.DisableL(); + MUS_LOG( " Display disabled" ) + } + else + { + MUS_LOG( " Display already disabled, ignore" ) + } + } + + MUS_LOG( "mus: [ENGINE] <- MusEngMceUtils::DoEnableDisplayL()") + } - - - +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +TInt MusEngMceUtils::EnableInactivityTimer( + CMceSession& aSession, + TUint32 aInactivityTimeout ) + { + TInt err( KErrNotFound ); + CMceVideoStream* stream = NULL; + TRAP_IGNORE( stream = MusEngMceUtils::GetVideoInStreamL( aSession ) ) + if ( stream ) + { + // Instream has always RTP source + err = KErrNone; + CMceRtpSource* rtpSource = static_cast( stream->Source() ); + TRAP( err, rtpSource->EnableInactivityTimerL( aInactivityTimeout ) ) + } + + return err; + } + +// End of file diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshengine/src/musengorientationhandler.cpp --- a/mmsharing/mmshengine/src/musengorientationhandler.cpp Thu Aug 19 09:51:39 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,173 +0,0 @@ -/* -* Copyright (c) 2005-2006 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: -* -*/ - - -// USER -#include "musengorientationhandler.h" -#include "muslogger.h" -#include "musenglivesession.h" -#include "musenglivesessionobserver.h" - -// SYSTEM - -const TInt KMusEngDelayedResume = 500000; // 500 ms - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -CMusEngOrientationHandler* CMusEngOrientationHandler::NewL( - CMusEngLiveSession& aSession, MMusEngLiveSessionObserver& aSessionObserver ) - { - CMusEngOrientationHandler* self = - new (ELeave) CMusEngOrientationHandler( aSession, aSessionObserver ); - CleanupStack::PushL( self ); - self->ConstructL(); - CleanupStack::Pop( self); - return self; - } - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -CMusEngOrientationHandler::~CMusEngOrientationHandler() - { - MUS_LOG( "mus: [ENGINE] CMusEngOrientationHandler::~CMusEngOrientationHandler()" ) - } - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusEngOrientationHandler::RefreshOrientationL() - { - MUS_LOG( "mus: [ENGINE] -> CMusEngOrientationHandler::RefreshOrientationL()" ) - if ( !IsActive() ) - { - TBool refreshBeginStateCamera = iSession.IsPlayingL(); - TBool refreshBeginStateDisplay = iSession.IsDisplayEnabledL(); - - if ( refreshBeginStateCamera ) - { - MUS_LOG( "mus: [MUSENG] -> Playing, pause/stop to restart camera" ); - iSession.PauseL(); - } - - if ( refreshBeginStateDisplay ) - { - MUS_LOG( "mus: [MUSENG] -> display is enabled, disable/enable it"); - iSession.EnableDisplayL(EFalse); - } - iRefreshBeginStateCamera = refreshBeginStateCamera; - iRefreshBeginStateDisplay = refreshBeginStateDisplay; - } - - DoDelayedResumeL(); - - MUS_LOG( "mus: [ENGINE] <- CMusEngOrientationHandler::RefreshOrientationL()" ) - } - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusEngOrientationHandler::UpdateL() - { - MUS_LOG( "mus: [ENGINE] -> CMusEngOrientationHandler::UpdateL()" ) - iRefreshBeginStateCamera = iSession.IsPlayingL(); - iRefreshBeginStateDisplay = iSession.IsDisplayEnabledL(); - MUS_LOG2( "mus: [ENGINE] <- CMusEngOrientationHandler::UpdateL(), cam:%d disp:%d", - iRefreshBeginStateCamera, iRefreshBeginStateDisplay ) - } - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusEngOrientationHandler::RunL() - { - MUS_LOG( "mus: [ENGINE] -> CMusEngOrientationHandler::RunL()" ) - - TBool refreshBeginStateCamera = iRefreshBeginStateCamera; - TBool refreshBeginStateDisplay = iRefreshBeginStateDisplay; - - iSessionObserver.OrientationRefreshEnded(); - - if ( refreshBeginStateDisplay ) - { - MUS_LOG( "mus: [ENGINE] enable display after delayed orientation" ) - iSession.EnableDisplayL(ETrue); - } - - if ( refreshBeginStateCamera ) - { - MUS_LOG( "mus: [ENGINE] enable camera after delayed orientation" ) - iSession.PlayL(); - } - MUS_LOG( "mus: [ENGINE] <- CMusEngOrientationHandler::RunL()" ) - } - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -TInt CMusEngOrientationHandler::RunError( TInt aError ) - { - MUS_LOG( "mus: [ENGINE] <-> CMusEngOrientationHandler::RunError()" ) - aError = KErrNone; - return aError; - } -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusEngOrientationHandler::DoDelayedResumeL() - { - if ( IsActive() ) - { - Cancel(); - } - After( KMusEngDelayedResume ); - } - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -CMusEngOrientationHandler::CMusEngOrientationHandler( - CMusEngLiveSession& aSession, MMusEngLiveSessionObserver& aSessionObserver ) - : CTimer( CActive::EPriorityStandard ), iSession( aSession ), - iSessionObserver( aSessionObserver ) - { - CActiveScheduler::Add(this); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusEngOrientationHandler::ConstructL() - { - MUS_LOG( "mus: [ENGINE] -> CMusEngOrientationHandler::ConstructL()" ) - - CTimer::ConstructL(); - - MUS_LOG( "mus: [ENGINE] <- CMusEngOrientationHandler::ConstructL()" ) - } - diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshengine/src/musengreceivesession.cpp --- a/mmsharing/mmshengine/src/musengreceivesession.cpp Thu Aug 19 09:51:39 2010 +0300 +++ b/mmsharing/mmshengine/src/musengreceivesession.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -18,16 +18,15 @@ // USER INCLUDES - #include "musengreceivesession.h" -#include "musengsessionobserver.h" -#include "musengreceivesessionobserver.h" #include "musengmceutils.h" #include "musenglogger.h" -#include "mussettings.h" #include "mussipprofilehandler.h" +#include "mussessionproperties.h" +#include "musengremotevideoplayer.h" // SYSTEM INCLUDES +#include #include #include #include @@ -39,25 +38,20 @@ #include #include #include +#include #include - -const TUint8 KMusEngRtpKeepAliveTimer = 5; // this should be 30 sec, this a temporary fix -const TUint8 KMusEngKeepAlivePayloadTypeVideoH263 = 96; -const TUint8 KMusEngKeepAlivePayloadTypeAudio = 97; -const TUint8 KMusEngKeepAlivePayloadTypeVideoAvc = 98; - const TInt KMusEngJitterBufferLength = 51; //Must be bigger than treshold // Using following value increases treshold buffer to 1 second from // default 100 ms const TInt KMusEngJitterBufferTreshold = 50; const TInt KMusEngTresholdToSecondsFactor = 20; -const TInt KMusEngOneSecondInMilliSeconds = 1000; +const TInt KMusEngTwoSecondInMilliSeconds = 2000; // Use inactivity timer value that is a little bigger than treshold in seconds const TUint KMusEngInactivityTimer = KMusEngTresholdToSecondsFactor * KMusEngJitterBufferTreshold + - KMusEngOneSecondInMilliSeconds; + KMusEngTwoSecondInMilliSeconds; _LIT8( KMusEngSwisIdentifier, "Require: precondition" ); _LIT8( KMusEngAssertedIdentity, "P-Asserted-Identity" ); @@ -70,28 +64,11 @@ // // ----------------------------------------------------------------------------- // -CMusEngReceiveSession::~CMusEngReceiveSession() - { - MUS_LOG( "mus: [ENGINE] -> CMusEngReceiveSession::~CMusEngReceiveSession()" ) - MUS_LOG( "mus: [ENGINE] <- CMusEngReceiveSession::~CMusEngReceiveSession()" ) - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -EXPORT_C CMusEngReceiveSession* CMusEngReceiveSession::NewL( - const TRect& aRect, - MMusEngSessionObserver& aSessionObserver, - MMusEngReceiveSessionObserver& aReceiveSessionObserver ) +CMusEngReceiveSession* CMusEngReceiveSession::NewL() { MUS_LOG( "mus: [ENGINE] -> CMusEngReceiveSession::NewL(...)" ) - CMusEngReceiveSession* self = new( ELeave ) CMusEngReceiveSession( - aSessionObserver, - aReceiveSessionObserver, - aRect ); + CMusEngReceiveSession* self = new( ELeave )CMusEngReceiveSession(); CleanupStack::PushL( self ); self->ConstructL(); CleanupStack::Pop( self ); @@ -100,27 +77,101 @@ return self; } +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +CMusEngReceiveSession::CMusEngReceiveSession() + : CMusEngMceSession() + { + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusEngReceiveSession::ConstructL() + { + MUS_LOG( "mus: [ENGINE] -> CMusEngReceiveSession::ConstructL()" ) + + CMusEngMceSession::ConstructL(); + + iOriginator = HBufC8::NewL( KMaxUriLength ); + + iRemoteDisplayName = HBufC::NewL( KMaxUriLength ); + + iRemoteVideoPlayer = CMusEngRemoteVideoPlayer::NewL( *this, *this ); + + iReceivingInactivityTimeout = KMusEngInactivityTimer; + + iKeepaliveTimer = KMusEngRtpKeepAliveTimer; + + MUS_LOG( "mus: [ENGINE] <- CMusEngReceiveSession::ConstructL()" ) + } // ----------------------------------------------------------------------------- // // ----------------------------------------------------------------------------- // -EXPORT_C void CMusEngReceiveSession::AcceptInvitationL( - const TBool& aAccept ) +CMusEngReceiveSession::~CMusEngReceiveSession() { - MUS_LOG1( "mus: [ENGINE] -> CMusEngReceiveSession::\ - AcceptInvitationL( %d )", aAccept ) + MUS_LOG( "mus: [ENGINE] -> CMusEngReceiveSession::~CMusEngReceiveSession()" ) + + if ( iOriginator ) + { + TRAP_IGNORE( SaveContactL( *iOriginator ) ) + } + delete iOriginator; + + delete iRemoteDisplayName; + + delete iRemoteVideoPlayer; + + MUS_LOG( "mus: [ENGINE] <- CMusEngReceiveSession::~CMusEngReceiveSession()" ) + } - __ASSERT_ALWAYS( iSession && iSession->State() == CMceSession::EProceeding, - User::Leave( KErrNotReady ) ); +// ----------------------------------------------------------------------------- +// From MLcSession +// ----------------------------------------------------------------------------- +// +MLcSession::TLcSessionState CMusEngReceiveSession::LcSessionState() const + { + TLcSessionState state = CMusEngMceSession::LcSessionState(); + if ( !iSession && state == MLcSession::EUninitialized ) + { + state = MLcSession::EReceived; + } + return state; + } - // Accept or reject - if ( aAccept ) +// ----------------------------------------------------------------------------- +// From MLcSession +// ----------------------------------------------------------------------------- +// +void CMusEngReceiveSession::EstablishLcSessionL() + { + MUS_LOG( "mus: [ENGINE] -> CMusEngReceiveSession::EstablishLcSessionL" ) + + __ASSERT_ALWAYS( iSession, User::Leave( KErrNotReady ) ); + InSession()->AcceptL(); + + MUS_LOG( "mus: [ENGINE] <- CMusEngReceiveSession::EstablishLcSessionL" ) + } + +// ----------------------------------------------------------------------------- +// From MLcSession +// ----------------------------------------------------------------------------- +// +void CMusEngReceiveSession::TerminateLcSessionL() + { + MUS_LOG( "mus: [ENGINE] -> CMusEngReceiveSession::EstablishLcSessionL" ) + + __ASSERT_ALWAYS( iSession, User::Leave( KErrNotReady ) ); + + if ( iSession->State() == CMceSession::EIncoming || + iSession->State() == CMceSession::EProceeding ) { - InSession()->AcceptL(); - } - else - { + // Reject if ( iOperatorVariant ) { // In operator variant, session is rejected with 486 instead of 603. @@ -133,11 +184,45 @@ InSession()->RejectL(); } } - - MUS_LOG( "mus: [ENGINE] <- CMusEngReceiveSession::\ - AcceptInvitationL(...)" ) + else + { + iSession->TerminateL(); + } + + MUS_LOG( "mus: [ENGINE] <- CMusEngReceiveSession::EstablishLcSessionL" ) } +// ----------------------------------------------------------------------------- +// From MLcSession +// ----------------------------------------------------------------------------- +// +MLcVideoPlayer* CMusEngReceiveSession::RemoteVideoPlayer() + { + return iRemoteVideoPlayer; + } + +// ----------------------------------------------------------------------------- +// From MLcSession +// ----------------------------------------------------------------------------- +// +const TDesC& CMusEngReceiveSession::RemoteDisplayName() + { + TBuf buffer; + + TInt error = RProperty::Get( NMusSessionApi::KCategoryUid, + NMusSessionApi::KContactName, + buffer ); + if ( error == KErrNone && buffer.Length() ) + { + iRemoteDisplayName->Des().Copy( buffer ); + } + + else if ( iOriginator ) + { + iRemoteDisplayName->Des().Copy(*iOriginator); + } + return *iRemoteDisplayName; + } // ----------------------------------------------------------------------------- // When reserving resources is ready, this function reports observer about @@ -154,7 +239,8 @@ MUS_ENG_LOG_SESSION_STATE_AND_STATUS( aSession, aStatusCode, aReasonPhrase ) - if ( iSession && iSession == &aSession && + if ( iSession && + iSession == &aSession && aSession.State() == CMceSession::EProceeding ) { // Indicates that resource reservation is ready, user can be notified @@ -165,16 +251,9 @@ // Notify other end terminal TRAP_IGNORE( InSession()->RingL() ) iRingLCalled = ETrue; - - // Notify user - TBuf16 originator; - CnvUtfConverter::ConvertToUnicodeFromUtf8( originator, - iSession->Originator() ); - - TBuf16 identity; - CnvUtfConverter::ConvertToUnicodeFromUtf8( identity, - iIdentity ); - iReceiveSessionObserver.IncomingSession( originator, identity ); + TPtr8 ptrOriginator( iOriginator->Des() ); + ptrOriginator.Copy( iSession->Originator() ); + InformObserverAboutSessionStateChange(); } else { @@ -194,18 +273,19 @@ HandleSessionStateChanged()" ) } - // ----------------------------------------------------------------------------- // Sets keepalive timer for video and calls base class variant of this function // ----------------------------------------------------------------------------- // -void CMusEngReceiveSession::AdjustVideoCodecL( CMceVideoCodec& aVideoCodec ) +void CMusEngReceiveSession::AdjustVideoCodecL( CMceVideoCodec& aVideoCodec, + TMceSourceType aSourceType ) { MUS_LOG( "mus: [ENGINE] -> CMusEngReceiveSession::AdjustVideoCodecL()" ) - CMusEngMceSession::AdjustVideoCodecL( aVideoCodec ); + CMusEngMceSession::AdjustVideoCodecL( aVideoCodec, aSourceType ); - aVideoCodec.SetKeepAliveTimerL( KMusEngRtpKeepAliveTimer ); + MUS_LOG1( "mus: [ENGINE] Keepalive timer:%d", iKeepaliveTimer ) + aVideoCodec.SetKeepAliveTimerL( iKeepaliveTimer ); if ( aVideoCodec.SdpName() == KMceSDPNameH263() || aVideoCodec.SdpName() == KMceSDPNameH2632000() ) { @@ -225,7 +305,6 @@ MUS_LOG( "mus: [ENGINE] <- CMusEngReceiveSession::AdjustVideoCodecL()" ) } - // ----------------------------------------------------------------------------- // Sets keepalive timer for audio and calls base class variant of this function // ----------------------------------------------------------------------------- @@ -236,14 +315,13 @@ CMusEngMceSession::AdjustAudioCodecL( aAudioCodec ); - aAudioCodec.SetKeepAliveTimerL( KMusEngRtpKeepAliveTimer ); + aAudioCodec.SetKeepAliveTimerL( iKeepaliveTimer ); aAudioCodec.SetKeepAlivePayloadTypeL( KMusEngKeepAlivePayloadTypeAudio ); aAudioCodec.SetKeepAliveDataL( KNullDesC8() ); MUS_LOG( "mus: [ENGINE] <- CMusEngReceiveSession::AdjustAudioCodecL()" ) } - // ----------------------------------------------------------------------------- // // ----------------------------------------------------------------------------- @@ -259,8 +337,7 @@ for ( TInt codecIndex = 0; codecIndex < codecs.Count(); ++codecIndex ) { - if ( codecs[codecIndex]->SdpName() == KMceSDPNameH264() && - !MultimediaSharingSettings::IsAvcDisabled() ) + if ( codecs[codecIndex]->SdpName() == KMceSDPNameH264() ) { if ( codecs[codecIndex]->CodecMode() == KMceAvcModeSingleNal ) { @@ -323,7 +400,6 @@ MUS_LOG( "mus: [ENGINE] <- CMusEngReceiveSession::DoCodecSelectionL()" ) } - // ----------------------------------------------------------------------------- // If incoming session does not have valid structure and cannot be reconstructed @@ -331,8 +407,8 @@ // ----------------------------------------------------------------------------- // void CMusEngReceiveSession::IncomingSession( - CMceInSession* aSession, - TMceTransactionDataContainer* aContainer ) + CMceInSession* aSession, + TMceTransactionDataContainer* aContainer ) { MUS_LOG( "mus: [ENGINE] -> CMusEngReceiveSession::IncomingSession(...)" ) @@ -350,8 +426,6 @@ return; } - iReceiveSessionObserver.IncomingSessionPreNotification(); - delete iSession; // possibly existing terminated session iSession = aSession; @@ -377,15 +451,14 @@ MUS_LOG( "mus: [ENGINE] <- CMusEngReceiveSession::IncomingSession()" ) } - // ----------------------------------------------------------------------------- // // ----------------------------------------------------------------------------- // void CMusEngReceiveSession::IncomingUpdate( - CMceSession& aOrigSession, - CMceInSession* aUpdatedSession, - TMceTransactionDataContainer* aContainer ) + CMceSession& aOrigSession, + CMceInSession* aUpdatedSession, + TMceTransactionDataContainer* aContainer ) { MUS_LOG( "mus: [ENGINE] -> CMusEngReceiveSession::IncomingUpdate(...)" ) @@ -415,7 +488,6 @@ MUS_LOG( "mus: [ENGINE] <- CMusEngReceiveSession::IncomingUpdate(...)" ) } - // ----------------------------------------------------------------------------- // // ----------------------------------------------------------------------------- @@ -435,33 +507,20 @@ aStream.Source() && aStream.Source()->Type() == KMceRTPSource ) { - if ( aStream.State() == CMceMediaStream::EBuffering ) { - iReceiveSessionObserver.StreamBuffering(); + iBuffered = ETrue; + InformObserverAboutPlayerStateChange( iRemoteVideoPlayer ); } else if ( aStream.State() == CMceMediaStream::EStreaming ) { - CMceRtpSource* rtpSource = - static_cast( aStream.Source() ); - TRAPD( err , - rtpSource->EnableInactivityTimerL( KMusEngInactivityTimer ) ); - if ( err != KErrNone ) - { - MUS_LOG1("mus: [ENGINE] EnableInactivityTimerL Fails %d",err) - iSessionObserver.SessionFailed(); - } - else - { - iSessionObserver.StreamStreaming(); - } + ReceivingStarted(); } else { // Cannot handle, forward to CMusEngMceSession CMusEngMceSession::StreamStateChanged( aStream ); } - } else { @@ -472,35 +531,6 @@ MUS_LOG( "mus: [ENGINE] <- CMusEngReceiveSession::StreamStateChanged()" ) } - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -CMusEngReceiveSession::CMusEngReceiveSession( - MMusEngSessionObserver& aSessionObserver, - MMusEngReceiveSessionObserver& aReceiveSessionObserver, - const TRect& aRect ) - : CMusEngMceSession( aRect, aSessionObserver ), - iReceiveSessionObserver( aReceiveSessionObserver ) - { - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusEngReceiveSession::ConstructL() - { - MUS_LOG( "mus: [ENGINE] -> CMusEngReceiveSession::ConstructL()" ) - - CMusEngMceSession::ConstructL(); - - MUS_LOG( "mus: [ENGINE] <- CMusEngReceiveSession::ConstructL()" ) - } - - // ----------------------------------------------------------------------------- // // ----------------------------------------------------------------------------- @@ -510,7 +540,6 @@ return static_cast(iSession); } - // ----------------------------------------------------------------------------- // Check if incoming session is originated from VideoSharing 2.2 client, // which sends PRACK for 180 Ringing whether it is required or not. In @@ -519,7 +548,7 @@ // ----------------------------------------------------------------------------- // void CMusEngReceiveSession::PrepareToRequire100RelL( - TMceTransactionDataContainer* aContainer) + TMceTransactionDataContainer* aContainer) { MUS_LOG( "mus: [ENGINE] -> CMusEngReceiveSession::PrepareToRequire100RelL()" ) @@ -538,15 +567,13 @@ iSession->SetModifierL( KMce100Rel, KMce100RelRequired ); MUS_LOG( "mus: [ENGINE] Forced to require 100rel" ) } - } - + } } CleanupStack::PopAndDestroy( headers ); MUS_LOG( "mus: [ENGINE] <- CMusEngReceiveSession::PrepareToRequire100RelL()" ) - } - + } // ----------------------------------------------------------------------------- // Check that incoming session contains only incoming video and audio @@ -673,14 +700,15 @@ iSession->UpdateL(); // Now session state is right to adjust volume - SetSpeakerVolumeL( VolumeL() ); + SetSpeakerVolumeL( LcVolumeL() ); - iSipProfileHandler->CreateProfileL( iSession->Profile() ); - + iSipProfileHandler->CreateProfileL( iSession->Profile() ); + + iRemoteVideoPlayer->SetMceSession( iSession ); + MUS_LOG( "mus: [ENGINE] <- CMusEngReceiveSession::CompleteSessionStructureL()" ) } - // ----------------------------------------------------------------------------- // Parse P-Asserted-Identity Header // ----------------------------------------------------------------------------- @@ -754,3 +782,67 @@ delete headers; MUS_LOG( "mus: [ENGINE] <- CMusEngReceiveSession::AssertedIdentity()" ) } + +// ----------------------------------------------------------------------------- +// RTP Inactivity timeout event +// Once inactivity timeout occurs, state change is notified and receiving +// and buffering statuses are cleared. That is safe to do as once receiving +// again continues for real, buffering and streaming events will occur always +// sequentially. If buffering status would not be cleared, some unwanted +// sreaming events would be passed towards client when it disables/enables +// display sink of remote stream while inactivity timer has expired. +// ----------------------------------------------------------------------------- +// +void CMusEngReceiveSession::InactivityTimeout( CMceMediaStream& aStream, + CMceRtpSource& /*aSource*/ ) + { + MUS_LOG( "mus: [ENGINE] -> CMusEngTwoWayRecvSession::InactivityTimeout()" ) + + if ( aStream.Type() == KMceVideo && iReceiving ) + { + iReceiving = EFalse; + iBuffered = EFalse; + InformObserverAboutPlayerStateChange( iRemoteVideoPlayer ); + } + + MUS_LOG( "mus: [ENGINE] <- CMusEngTwoWayRecvSession::InactivityTimeout()" ) + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusEngReceiveSession::ReceivingStarted() + { + if ( iSession && iBuffered ) + { + MUS_LOG( "mus: [ENGINE] -> CMusEngReceiveSession::ReceivingStarted()" ) + + TInt err = MusEngMceUtils::EnableInactivityTimer( + *iSession, iReceivingInactivityTimeout ); + + if ( err != KErrNone ) + { + MUS_LOG1("mus: [ENGINE] ReceivingStarted failed %d", err) + InformObserverAboutSessionFailure( err ); + } + else + { + iReceiving = ETrue; + InformObserverAboutPlayerStateChange( iRemoteVideoPlayer ); + InformUiProviderAboutReceivingStart(); + } + + MUS_LOG( "mus: [ENGINE] <- CMusEngReceiveSession::ReceivingStarted()" ) + } + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +TBool CMusEngReceiveSession::IsDisplayActive() + { + return ( IsDisplayEnabled() && iReceiving ); + } +// End of File diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshengine/src/musengremotevideoplayer.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/mmshengine/src/musengremotevideoplayer.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,130 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + + +// USER +#include "musengremotevideoplayer.h" +#include "musengmceutils.h" +#include "musengdisplayhandler.h" + +// SYSTEM +#include +#include + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +CMusEngRemoteVideoPlayer* CMusEngRemoteVideoPlayer::NewL( + MMusEngDisplayHandler& aDisplayHandler, + MLcAudioControl& aLcAudioControl ) + { + return new( ELeave )CMusEngRemoteVideoPlayer( + aDisplayHandler, aLcAudioControl ); + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +CMusEngRemoteVideoPlayer::CMusEngRemoteVideoPlayer( + MMusEngDisplayHandler& aDisplayHandler, + MLcAudioControl& aLcAudioControl ) : + CMusEngVideoPlayerBase( aDisplayHandler, aLcAudioControl ) + { + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +CMusEngRemoteVideoPlayer::~CMusEngRemoteVideoPlayer() + { + } + +// ----------------------------------------------------------------------------- +// From MLcVideoPlayer +// ----------------------------------------------------------------------------- +// +MLcVideoPlayer::TLcVideoPlayerState +CMusEngRemoteVideoPlayer::LcVideoPlayerState() const + { + if ( !iMceSession ) + { + return MLcVideoPlayer::EUnavailable; + } + CMceVideoStream* stream = NULL; + TRAPD( err, stream = MusEngMceUtils::GetVideoInStreamL( *iMceSession ) ) + TLcVideoPlayerState playerState = MLcVideoPlayer::EUnavailable; + if ( err == KErrNone && stream ) + { + switch ( stream->State() ) + { + case CMceMediaStream::EInitialized: + { + playerState = MLcVideoPlayer::EInit; + break; + } + case CMceMediaStream::EBuffering: + { + playerState = MLcVideoPlayer::EBuffering; + break; + } + case CMceMediaStream::EIdle: + case CMceMediaStream::EDisabled: + { + playerState = MLcVideoPlayer::EPaused; + break; + } + case CMceMediaStream::EStreaming: + { + // MCE stream state does not contain RTP activity information + playerState = iDisplayHandler.IsDisplayActive() ? + MLcVideoPlayer::EPlaying : MLcVideoPlayer::EPaused; + break; + } + default: // Other MCE stream states: MLcVideoPlayer::EUnavailable + { + break; + } + } + } + return playerState; + } + +// ----------------------------------------------------------------------------- +// From MLcVideoPlayer +// ----------------------------------------------------------------------------- +// +TBool CMusEngRemoteVideoPlayer::LcIsPlayingL() + { + if ( !iMceSession ) + { + return EFalse; + } + CMceMediaStream* stream = MusEngMceUtils::GetVideoInStreamL( *iMceSession ); + TBool isPlaying( EFalse ); + + if ( iMceSession->State() == CMceSession::EEstablished && + stream && + stream->State() == CMceMediaStream::EStreaming ) + { + isPlaying = ETrue; + } + + return isPlaying; + } diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshengine/src/musengsession.cpp --- a/mmsharing/mmshengine/src/musengsession.cpp Thu Aug 19 09:51:39 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,245 +0,0 @@ -/* -* 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: -* -*/ - - -// USER INCLUDES -#include "musengsession.h" -#include "musengsessionobserver.h" -#include "musengtelephoneutils.h" -#include "muslogger.h" - -// SYSTEM INCLUDES - -#include - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -CMusEngSession::~CMusEngSession() // destruct - virtual, so no export - { - MUS_LOG( "mus: [ENGINE] -> CMusEngSession::~CMusEngSession()" ) - delete iTelephoneUtils; - MUS_LOG( "mus: [ENGINE] <- CMusEngSession::~CMusEngSession()" ) - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -EXPORT_C TRect CMusEngSession::Rect() const - { - MUS_LOG( "mus: [ENGINE] CMusEngSession::Rect()" ) - return iRect; - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -EXPORT_C void CMusEngSession::SetRectL( const TRect& aRect ) - { - MUS_LOG( "mus: [ENGINE] CMusEngSession::SetRect()" ) - iRect = aRect; - RectChangedL(); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -EXPORT_C TBool CMusEngSession::AudioRoutingCanBeChanged() const - { - return iTelephoneUtils->AudioRoutingCanBeChanged(); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -EXPORT_C TBool CMusEngSession::IsAudioRoutingHeadset() const - { - return iTelephoneUtils->IsAudioRoutingHeadset(); - } - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -EXPORT_C TBool CMusEngSession::IsAudioRoutingLoudSpeaker() const - { - return iTelephoneUtils->IsAudioRoutingLoudSpeaker(); - } - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -EXPORT_C void CMusEngSession::EnableLoudspeakerL( TBool aEnable, - TBool aShowDialog ) - { - TRAPD( error, iTelephoneUtils->LoudspeakerL( aEnable, aShowDialog ) ) - - if ( error != KErrNone ) - { - // This is writed for emulator use - if ( error != KErrNotSupported ) - { - MUS_LOG1( "mus: [ENGINE] CMusEngSession::EnableLoudspeakerL() Leave: #%d", - error) - User::Leave( error ); - } - // Not leave in emulator if KErrNotSupported - #if (!defined (__WINS__) && !defined(__WINSCW__)) - User::Leave( error ); - #endif - } - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -EXPORT_C TBool CMusEngSession::IsLoudSpeakerEnabled() const - { - return iTelephoneUtils->IsLoudSpeakerEnabled(); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -EXPORT_C TInt CMusEngSession::VolumeL() const - { - return iTelephoneUtils->GetVolume(); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -EXPORT_C void CMusEngSession::MuteMicL( TBool aMute ) - { - iTelephoneUtils->MuteMicL( aMute ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -EXPORT_C TBool CMusEngSession::IsMicMutedL() - { - return iTelephoneUtils->IsMicMutedL(); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -EXPORT_C void CMusEngSession::SetAudioRoutingObserver( - MMusEngAudioRoutingObserver* aObserver ) - { - iTelephoneUtils->SetAudioRoutingObserver( aObserver ); - } - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -EXPORT_C void CMusEngSession::SetVolumeChangeObserver( - MMusEngVolumeChangeObserver* aObserver ) - { - iVolumeObserver = aObserver; - } - - -// ----------------------------------------------------------------------------- -// Increases CS call volume level by one. -// Leaves if error occurs when accessing central repository. -// ----------------------------------------------------------------------------- -// -EXPORT_C void CMusEngSession::VolumeUpL( ) - { - TInt currentVolume = iTelephoneUtils->GetVolume(); - iTelephoneUtils->SetVolumeL( currentVolume + 1 ); - } - - -// ----------------------------------------------------------------------------- -// Decreases CS call volume level by one. -// Leaves if error occurs when accessing central repository. -// ----------------------------------------------------------------------------- -// -EXPORT_C void CMusEngSession::VolumeDownL( ) - { - TInt currentVolume = iTelephoneUtils->GetVolume(); - iTelephoneUtils->SetVolumeL( currentVolume - 1 ); - } - -// ----------------------------------------------------------------------------- -// Set CS call volume value -// Leaves if error occurs when accessing central repository. -// ----------------------------------------------------------------------------- -// -EXPORT_C void CMusEngSession::SetVolumeL( TInt aVal ) - { - iTelephoneUtils->SetVolumeL( aVal ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -CMusEngSession::CMusEngSession( const TRect& aRect ) - :iRect( aRect ) - { - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusEngSession::ConstructL() // second-phase constructor - { - MUS_LOG( "mus: [ENGINE] -> CMusEngSession::ConstructL()" ) - iTelephoneUtils = CMusEngTelephoneUtils::NewL(); - iTelephoneUtils->SetVolumeChangeObserver( this ); - MUS_LOG( "mus: [ENGINE] <- CMusEngSession::ConstructL()" ) - } - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusEngSession::VolumeChanged( TInt aVolume, TBool aAudioRouteChanged ) - { - if ( iVolumeObserver ) - { - iVolumeObserver->VolumeChanged( aVolume, aAudioRouteChanged ); - } - } diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshengine/src/musengsessiondurationtimer.cpp --- a/mmsharing/mmshengine/src/musengsessiondurationtimer.cpp Thu Aug 19 09:51:39 2010 +0300 +++ b/mmsharing/mmshengine/src/musengsessiondurationtimer.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -99,17 +99,6 @@ } } -// ------------------------------------------------------------------------- -// If RunL() leaves,It should be handled here. -// ------------------------------------------------------------------------- -// -TInt CMusEngSessionDurationTimer::RunError( TInt aError ) - { - // Nothing can be done here. - aError = KErrNone; - - return aError; - } // ----------------------------------------------------------------------------- // diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshengine/src/musengsessionmanager.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/mmshengine/src/musengsessionmanager.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,186 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + +#include "musengsessionmanager.h" +#include "musenglivesession.h" +#include "musengclipsession.h" +#include "musengreceivesession.h" +#include "musengtwowaysession.h" +#include "musengtwowayrecvsession.h" +#include "mussessionproperties.h" +#include "muspropertywatch.h" +#include +#include + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +CMusEngSessionManager* CMusEngSessionManager::NewL() + { + CMusEngSessionManager* self = new( ELeave )CMusEngSessionManager(); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + return self; + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +CMusEngSessionManager::~CMusEngSessionManager() + { + delete iUseCaseWatch; + delete iSession; + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +CMusEngSessionManager::CMusEngSessionManager() + { + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusEngSessionManager::ConstructL() + { + TInt useCase; + User::LeaveIfError( RProperty::Get( NMusSessionApi::KCategoryUid, + NMusSessionApi::KUseCase, + useCase ) ); + iSession = CreateMusSessionL( + static_cast< MultimediaSharing::TMusUseCase >( useCase ) ); + + iUseCaseWatch = CMusPropertyWatch::NewL( + *this, NMusSessionApi::KCategoryUid, NMusSessionApi::KUseCase ); + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +MLcSession& CMusEngSessionManager::Session() + { + return *iSession; + } + +// ----------------------------------------------------------------------------- +// If usecase changes while background startup is active, client is +// notified about change by bringing it to foreground and changing current +// active session. Old session is terminated immediately after notification. +// ----------------------------------------------------------------------------- +// +void CMusEngSessionManager::PropertyChanged( + const TUint /*aKey*/, + const TInt aValue ) + { + MUS_LOG1( "mus: [ENGINE] -> CMusEngSessionManager::PropertyChanged, val:%d", + aValue ) + + if ( iSession->IsBackgroundStartup() && aValue != iCurrentUseCase ) + { + MUS_LOG( "mus: [ENGINE] Usecase changed!" ) + MLcUiProvider* uiProvider = iSession->LcUiProvider(); + if ( uiProvider ) + { + CMusEngMceSession* newSession = NULL; + TRAP_IGNORE( newSession = CreateMusSessionL( + static_cast< MultimediaSharing::TMusUseCase >( aValue ) ) ); + if ( newSession ) + { + MUS_LOG( "mus: [ENGINE] Set new active session" ) + CMusEngMceSession* oldSession = iSession; + iSession = newSession; + iSession->SetForegroundStatus( ETrue ); + uiProvider->HandleForegroundStatus( ETrue ); + delete oldSession; + } + } + } + + MUS_LOG( "mus: [ENGINE] <- CMusEngSessionManager::PropertyChanged" ) + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusEngSessionManager::HandlePropertyError( const TInt /*aReason*/ ) + { + // NOP + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +TBool CMusEngSessionManager::IsFeatureSupported( TLcFeature aLcFeature ) + { + return ( aLcFeature == ELcShowInvitingNote || + aLcFeature == ELcShowWaitingNote || + aLcFeature == ELcShowAcceptQuery ); + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +CMusEngMceSession* CMusEngSessionManager::CreateMusSessionL( + MultimediaSharing::TMusUseCase aUseCase ) + { + CMusEngMceSession* session = NULL; + switch ( aUseCase ) + { + case MultimediaSharing::EMusLiveVideo: + { + session = CMusEngLiveSession::NewL(); + break; + } + case MultimediaSharing::EMusClipVideo: + { + session = CMusEngClipSession::NewL(); + break; + } + case MultimediaSharing::EMusReceive: + { + session = CMusEngReceiveSession::NewL(); + break; + } + case MultimediaSharing::EMusTwoWayVideo: + { + session = CMusEngTwoWaySession::NewL(); + break; + } + case MultimediaSharing::EMusReceiveTwoWayVideo: + { + session = CMusEngTwoWayRecvSession::NewL(); + break; + } + default: + User::Leave( KErrNotSupported ); + break; + } + iCurrentUseCase = aUseCase; + return session; + } + +// End of File diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshengine/src/musengtelephoneutils.cpp --- a/mmsharing/mmshengine/src/musengtelephoneutils.cpp Thu Aug 19 09:51:39 2010 +0300 +++ b/mmsharing/mmshengine/src/musengtelephoneutils.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -19,31 +19,74 @@ // USER #include "musengtelephoneutils.h" #include "musengaudioroutingobserver.h" -#include "musengmcesession.h" -#include "musengvolumechangeobserver.h" #include "muslogger.h" // SYSTEM #include -#include +#include #include #include #include // for CPhCltCommandHandler +// Constants +const TInt KMusEngMaxVolume = 10; +const TInt KMusEngMinVolume = 0; + + + // ----------------------------------------------------------------------------- // // ----------------------------------------------------------------------------- // -CMusEngTelephoneUtils* CMusEngTelephoneUtils::NewL() +CMusEngTelephoneUtils* CMusEngTelephoneUtils::NewL( + MMusEngAudioRoutingObserver& aAudioRoutingObserver ) { - CMusEngTelephoneUtils* self = new( ELeave ) CMusEngTelephoneUtils(); + CMusEngTelephoneUtils* self = + new( ELeave )CMusEngTelephoneUtils( aAudioRoutingObserver ); CleanupStack::PushL( self ); self->ConstructL(); CleanupStack::Pop( self ); return self; } +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +CMusEngTelephoneUtils::CMusEngTelephoneUtils( + MMusEngAudioRoutingObserver& aAudioRoutingObserver ) + : CActive( CActive::EPriorityStandard ), + iAudioRoutingObserver( aAudioRoutingObserver ) + { + iAudioOutputAtStartup = CTelephonyAudioRouting::ENotActive; + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusEngTelephoneUtils::ConstructL() + { + MUS_LOG( "mus: [ENGINE] -> CMusEngTelephoneUtils::ConstructL()" ) + + // Volume control + iRepository = CRepository::NewL( KCRUidInCallVolume ); + + // Audio routing control + iTelephonyAudioRouting = CTelephonyAudioRouting::NewL( *this ); + + iAudioOutputAtStartup = iTelephonyAudioRouting->Output(); + + // Phone + MUS_LOG( "mus: [ENGINE] Use static DLL" ) + iPhoneCommandHandler = CPhCltCommandHandler::NewL(); + + CActiveScheduler::Add( this ); + + MUS_LOG( "mus: [ENGINE] <- CMusEngTelephoneUtils::ConstructL()" ) + } // ----------------------------------------------------------------------------- // @@ -61,43 +104,34 @@ { CTelephonyAudioRouting::TAudioOutput currentMode = iTelephonyAudioRouting->Output(); - MUS_LOG1( "mus: [ENGINE] iAudioOutputAtStartup: %d", iAudioOutputAtStartup ); - MUS_LOG1( "mus: [ENGINE] currentMode: %d", currentMode ); - // When active call is dropped, audio output is set to ENotActive, - // but in some cases Mush engine get deleted before OutputChanged() - // notification comes. In that case we shouldn't touch output. - if( currentMode != iAudioOutputAtStartup && - currentMode != CTelephonyAudioRouting::ENotActive ) + if( currentMode != iAudioOutputAtStartup ) { // As going down, let audiorouting api to show notification iTelephonyAudioRouting->SetShowNote( ETrue ); - TRAPD( err, DoSetOutputL( iAudioOutputAtStartup ) ); + TRAPD( err, + iTelephonyAudioRouting->SetOutputL( iAudioOutputAtStartup ) ) MUS_LOG1( "mus: [ENGINE] final route change completed: %d", err ) err++; - } + } } - if ( iNotifier ) - { - iNotifier->StopListening(); - delete iNotifier; - } - delete iRepository; delete iTelephonyAudioRouting; MUS_LOG( "mus: [ENGINE] <- CMusEngTelephoneUtils::~CMusEngTelephoneUtils()" ) } - // ----------------------------------------------------------------------------- // // ----------------------------------------------------------------------------- // -TBool CMusEngTelephoneUtils::AudioRoutingCanBeChanged() const +TBool CMusEngTelephoneUtils::AudioRoutingCanBeChanged() { MUS_LOG( "mus: [ENGINE] -> CMusEngTelephoneUtils::AudioRoutingCanBeChanged" ) - TBool retValue = ( + TBool retValue = ( iTelephonyAudioRouting->Output() != + CTelephonyAudioRouting::EWiredAudioAccessory && + iTelephonyAudioRouting->Output() != + CTelephonyAudioRouting::EBTAudioAccessory && iTelephonyAudioRouting->Output() != CTelephonyAudioRouting::ETTY ); @@ -107,107 +141,46 @@ return retValue; } - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -TBool CMusEngTelephoneUtils::IsAudioRoutingHeadset() const - { - MUS_LOG( "mus: [ENGINE] -> CMusEngTelephoneUtils::IsAudioRoutingHeadset" ) - - TBool retValue = ( iTelephonyAudioRouting->Output() == - CTelephonyAudioRouting::EBTAudioAccessory || - iTelephonyAudioRouting->Output() == - CTelephonyAudioRouting::EWiredAudioAccessory ); - - MUS_LOG1( "mus: [ENGINE] <- CMusEngTelephoneUtils::IsAudioRoutingHeadset: %d", - retValue ) - - return retValue; - } - // ----------------------------------------------------------------------------- // // ----------------------------------------------------------------------------- // -TBool CMusEngTelephoneUtils::IsAudioRoutingLoudSpeaker() const - { - MUS_LOG( "mus: [ENGINE] -> CMusEngTelephoneUtils::IsAudioRoutingLoudSpeaker" ) - TBool retValue = EFalse; - - CTelephonyAudioRouting::TAudioOutput currentMode = - iTelephonyAudioRouting->Output(); - MUS_LOG1( "mus: [ENGINE] iAudioOutputAtStartup: %d", iAudioOutputAtStartup ); - MUS_LOG1( "mus: [ENGINE] currentMode: %d", currentMode ); - - if( currentMode != iAudioOutputAtStartup && - currentMode == CTelephonyAudioRouting::ELoudspeaker ) - { - - retValue = ETrue; - - } - - MUS_LOG1( "mus: [ENGINE] <- CMusEngTelephoneUtils::IsAudioRoutingLoudSpeaker: %d", - retValue ) - - return retValue; - } - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusEngTelephoneUtils::LoudspeakerL( TBool aEnable, TBool aShowDialog ) +void CMusEngTelephoneUtils::LoudspeakerL( TBool aEnable ) { MUS_LOG1( "mus: [ENGINE] -> CMusEngTelephoneUtils::LoudspeakerL(%d)", aEnable ) + // Disable note shown by audiorouting api as it causes + // application going to background for a while. Instead, display + // note by ourselves once setting output completes. This mechanism + // is needed only for loudspeaker enabling as going to background + // causes problems only at beginning of sharing session. + iTelephonyAudioRouting->SetShowNote( EFalse ); if ( aEnable ) { if ( iTelephonyAudioRouting->Output() == - CTelephonyAudioRouting::EHandset || - iTelephonyAudioRouting->Output() == - CTelephonyAudioRouting::EBTAudioAccessory|| - iTelephonyAudioRouting->Output() == - CTelephonyAudioRouting::EWiredAudioAccessory ) + CTelephonyAudioRouting::EHandset ) { - // Disable note shown by audiorouting api as it causes - // application going to background for a while. Instead, display - // note by ourselves once setting output completes. This mechanism - // is needed only for loudspeaker enabling as going to background - // causes problems only at beginning of sharing session. - if ( aShowDialog ) - { - iTelephonyAudioRouting->SetShowNote( EFalse ); - - iShowDialog = aShowDialog; - } - - DoSetOutputL( CTelephonyAudioRouting::ELoudspeaker ); + iTelephonyAudioRouting->SetOutputL( + CTelephonyAudioRouting::ELoudspeaker ); } } else - { - iTelephonyAudioRouting->SetShowNote( aShowDialog ); - + { if ( iAudioOutputAtStartup == CTelephonyAudioRouting::ELoudspeaker ) { - DoSetOutputL( CTelephonyAudioRouting::EHandset ); + iTelephonyAudioRouting->SetOutputL( + CTelephonyAudioRouting::EHandset ); } else { - DoSetOutputL( iAudioOutputAtStartup ); + iTelephonyAudioRouting->SetOutputL( iAudioOutputAtStartup ); } } - - MUS_LOG( "mus: [ENGINE] <- CMusEngTelephoneUtils::LoudspeakerL(...)" ) } - // ----------------------------------------------------------------------------- // // ----------------------------------------------------------------------------- @@ -219,16 +192,7 @@ } // ----------------------------------------------------------------------------- -// Returns locally cached the CS call volume level. -// ----------------------------------------------------------------------------- -// -TInt CMusEngTelephoneUtils::GetVolume() const - { - return iCurrentVolume; - } - -// ----------------------------------------------------------------------------- -// Gets the CS call volume level from central repository. +// Gets the CS call volume level. // Leaves if error occurs when accessing central repository. // ----------------------------------------------------------------------------- // @@ -245,11 +209,9 @@ User::LeaveIfError( iRepository->Get( KTelIncallEarVolume, currentVolume ) ); } - return ValidateVolume( currentVolume ); } - // ----------------------------------------------------------------------------- // Sets the CS call volume level. // Leaves if error occurs when accessing central repository. @@ -258,8 +220,8 @@ void CMusEngTelephoneUtils::SetVolumeL( TInt aVolume ) { TInt newVolume = ValidateVolume( aVolume ); - MUS_LOG1( "mus: [ENGINE] -> CMusEngTelephoneUtils::SetVolumeL(), %d", newVolume ) - if ( iCurrentVolume != newVolume ) + + if ( GetVolumeL() != newVolume ) { if ( IsLoudSpeakerEnabled() ) { @@ -271,11 +233,9 @@ User::LeaveIfError( iRepository->Set( KTelIncallEarVolume, newVolume ) ); } - iCurrentVolume = newVolume; } } - // ----------------------------------------------------------------------------- // // ----------------------------------------------------------------------------- @@ -296,7 +256,6 @@ MUS_LOG( "mus: [ENGINE] <- CMusEngTelephoneUtils::MuteMicL()" ) } - // ----------------------------------------------------------------------------- // // ----------------------------------------------------------------------------- @@ -316,27 +275,6 @@ return ( psVal == EPSTelMicMuteOn ); } - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusEngTelephoneUtils::SetAudioRoutingObserver( - MMusEngAudioRoutingObserver* aObserver ) - { - iAudioRoutingObserver = aObserver; - } - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusEngTelephoneUtils::SetVolumeChangeObserver( - MMusEngVolumeChangeObserver* aObserver ) - { - iVolumeObserver = aObserver; - } - // ----------------------------------------------------------------------------- // // ----------------------------------------------------------------------------- @@ -352,23 +290,6 @@ MUS_LOG( "mus: [ENGINE] <- CMusEngTelephoneUtils::RunL()" ) } -// ------------------------------------------------------------------------- -// If RunL() leaves,It should be handled here. -// ------------------------------------------------------------------------- -// -TInt CMusEngTelephoneUtils::RunError( TInt aError ) - { - MUS_LOG1( "mus: [ENGINE] -> CMusEngTelephoneUtils::\ - RunError() return #%d", aError ) - - // Nothing can be done here. - aError = KErrNone; - - MUS_LOG( "mus: [ENGINE] <- CMusEngTelephoneUtils::RunError()" ) - return aError; - } - - // ----------------------------------------------------------------------------- // // ----------------------------------------------------------------------------- @@ -383,26 +304,24 @@ } MUS_LOG( "mus: [ENGINE] <- CMusEngTelephoneUtils::DoCancel()" ) - } - + } // ----------------------------------------------------------------------------- // // ----------------------------------------------------------------------------- // void CMusEngTelephoneUtils::AvailableOutputsChanged( - CTelephonyAudioRouting& /*aTelephonyAudioRouting*/ ) + CTelephonyAudioRouting& /*aTelephonyAudioRouting*/ ) { // NOP } - // ----------------------------------------------------------------------------- // // ----------------------------------------------------------------------------- // void CMusEngTelephoneUtils::OutputChanged( - CTelephonyAudioRouting& aTelephonyAudioRouting ) + CTelephonyAudioRouting& aTelephonyAudioRouting ) { MUS_LOG( "mus: [ENGINE] -> CMusEngTelephoneUtils::OutputChanged()" ) @@ -413,13 +332,8 @@ MUS_LOG1( "mus: [ENGINE] New audio routing is %d", iAudioOutputAtStartup ) - if ( iAudioRoutingObserver ) - { - iAudioRoutingObserver->AudioRoutingChanged( EFalse ); - } - - UpdateCurrentVolume(ETrue); - + iAudioRoutingObserver.AudioRoutingChanged(); + MUS_LOG( "mus: [ENGINE] <- CMusEngTelephoneUtils::OutputChanged()" ) } @@ -429,97 +343,18 @@ // ----------------------------------------------------------------------------- // void CMusEngTelephoneUtils::SetOutputComplete( - CTelephonyAudioRouting& /*aTelephonyAudioRouting*/, - TInt aError ) + CTelephonyAudioRouting& /*aTelephonyAudioRouting*/, + TInt aError ) { MUS_LOG( "mus: [ENGINE] -> CMusEngTelephoneUtils::SetOutputComplete()" ) if ( aError == KErrNone ) { - if ( iAudioRoutingObserver ) - { - // If audio routing api didn't shown note and show dialog mode is on, - // we know that this completion is for such setoutput call for which - // we need to show the note. Show note mode is turned off only in that - // case. - TBool dialogShownByUs( EFalse ); - TBool dialogShownByAudioRouting( EFalse ); - aError = iTelephonyAudioRouting->GetShowNote( dialogShownByAudioRouting ); - if ( aError == KErrNone && !dialogShownByAudioRouting && iShowDialog ) - { - dialogShownByUs = iShowDialog; - iShowDialog = EFalse; - } - - iAudioRoutingObserver->AudioRoutingChanged( dialogShownByUs ); - } - - UpdateCurrentVolume(ETrue); + iAudioRoutingObserver.AudioRoutingChanged(); } MUS_LOG( "mus: [ENGINE] <- CMusEngTelephoneUtils::SetOutputComplete()" ) } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusEngTelephoneUtils::UpdateCurrentVolume( TBool aAudioRouteChanged ) - { - TInt volume(0); - TRAPD(error, volume = GetVolumeL() ); - if( (KErrNone == error) && (iCurrentVolume != volume) ) - { - iCurrentVolume = volume; - if ( iVolumeObserver ) - { - iVolumeObserver->VolumeChanged( volume, aAudioRouteChanged ); - } - } - } - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -CMusEngTelephoneUtils::CMusEngTelephoneUtils() - : CActive( CActive::EPriorityStandard ) - { - iAudioOutputAtStartup = CTelephonyAudioRouting::ENotActive; - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusEngTelephoneUtils::ConstructL() - { - MUS_LOG( "mus: [ENGINE] -> CMusEngTelephoneUtils::ConstructL()" ) - - // Volume control - iRepository = CRepository::NewL( KCRUidInCallVolume ); - - iNotifier = CCenRepNotifyHandler::NewL( *this, *iRepository ); - iNotifier->StartListeningL(); - - // Audio routing control - iTelephonyAudioRouting = CTelephonyAudioRouting::NewL( *this ); - - iAudioOutputAtStartup = iTelephonyAudioRouting->Output(); - MUS_LOG1( "mus: [ENGINE] iAudioOutputAtStartup: %d", iAudioOutputAtStartup ); - // Phone - MUS_LOG( "mus: [ENGINE] Use static DLL" ) - iPhoneCommandHandler = CPhCltCommandHandler::NewL(); - - iCurrentVolume = GetVolumeL(); - - CActiveScheduler::Add( this ); - - MUS_LOG( "mus: [ENGINE] <- CMusEngTelephoneUtils::ConstructL()" ) - } - // ----------------------------------------------------------------------------- // Validates that requested volume level is valid (between 1-10) and if it is @@ -543,61 +378,3 @@ return aVolume; } - - -// ----------------------------------------------------------------------------- -// Set output if setting is currently allowed. -// ----------------------------------------------------------------------------- -// -void CMusEngTelephoneUtils::DoSetOutputL( - CTelephonyAudioRouting::TAudioOutput aAudioOutput ) - { - MUS_LOG( "mus: [ENGINE] -> CMusEngTelephoneUtils::DoSetOutputL()" ) - if ( iAudioRoutingObserver && !iAudioRoutingObserver->AudioRouteChangeAllowed() ) - { - MUS_LOG( "mus: [ENGINE] change not allowed!" ) - User::Leave( KErrAccessDenied ); - } - iTelephonyAudioRouting->SetOutputL( aAudioOutput ); - MUS_LOG( "mus: [ENGINE] <- CMusEngTelephoneUtils::DoSetOutputL()" ) - } - - -// --------------------------------------------------------------------------- -// CMusEngTelephoneUtils::HandleNotifyGeneric -// --------------------------------------------------------------------------- -// -void CMusEngTelephoneUtils::HandleNotifyGeneric( TUint32 aId ) - { - MUS_LOG( "mus: [ENGINE] -> CMusEngTelephoneUtils::HandleNotifyGeneric()" ) - TInt error = KErrArgument; - TInt volume = 0; - if ( KTelIncallEarVolume == aId ) - { - error = iRepository->Get( KTelIncallEarVolume, volume ); - MUS_LOG1( "mus: [ENGINE] EAR volume: %d", volume ); - } - else if ( KTelIncallLoudspeakerVolume == aId ) - { - error = iRepository->Get( KTelIncallLoudspeakerVolume, volume ); - MUS_LOG1( "mus: [ENGINE] Loudspeakers volume: %d", volume ); - } - - volume = ValidateVolume(volume); - if ( (KErrNone == error) && (iCurrentVolume != volume) ) - { - MUS_LOG1( "mus: [ENGINE] volume changed: %d!, notifying UI...", volume ) - iCurrentVolume = volume; - if( iVolumeObserver ) - { - iVolumeObserver->VolumeChanged( volume, EFalse ); - } - } - else - { - MUS_LOG( "mus: [ENGINE] volume hasn't changed!, do nothing..." ) - } - - MUS_LOG1( "mus: [ENGINE] <- CMusEngTelephoneUtils::HandleNotifyGeneric(), error:%d", - error ); - } diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshengine/src/musengtwowayrecvsession.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/mmshengine/src/musengtwowayrecvsession.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,544 @@ +/* +* 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: +* +*/ + + +// USER +#include "musengtwowayrecvsession.h" +#include "musunittesting.h" +#include "musengmceutils.h" +#include "musenglogger.h" +#include "mussipprofilehandler.h" +#include "musenglivevideoplayer.h" +#include "musengremotevideoplayer.h" + +// SYSTEM +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +const TInt KMusEngJitterBufferLength = 51; //Must be bigger than treshold +// Using following value increases treshold buffer to 1 second from +// default 100 ms +const TInt KMusEngJitterBufferTreshold = 50; + +const TUint32 KMusEngTwoWayReceivingActivityTimeout = 5000; // 5 seconds +// 6 seconds keepalive timer, needs to be more than receiving timeout +const TUint8 KMusEngTwoWayRtpKeepAliveTimer = 6; + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +CMusEngTwoWayRecvSession* CMusEngTwoWayRecvSession::NewL() + { + CMusEngTwoWayRecvSession* self = new( ELeave )CMusEngTwoWayRecvSession(); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + return self; + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +CMusEngTwoWayRecvSession::~CMusEngTwoWayRecvSession() + { + MUS_LOG( "mus: [ENGINE] -> CMusEngTwoWayRecvSession::~CMusEngTwoWayRecvSession()" ) + + delete iLiveVideoPlayer; + + MUS_LOG( "mus: [ENGINE] <- CMusEngTwoWayRecvSession::~CMusEngTwoWayRecvSession()" ) + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusEngTwoWayRecvSession::EnableDisplayL( TBool aEnable ) + { + MUS_LOG1( "mus: [ENGINE] -> CMusEngTwoWayRecvSession::EnableDisplayL() %d", + aEnable ) + + __ASSERT_ALWAYS( iSession, User::Leave( KErrNotReady ) ); + + CMceDisplaySink* display = MusEngMceUtils::GetReceivingDisplayL( *iSession ); + MusEngMceUtils::DoEnableDisplayL( *display, aEnable ); + + CMceDisplaySink* vfDisplay = MusEngMceUtils::GetVfDisplay( *iSession ); + if ( vfDisplay ) + { + MusEngMceUtils::DoEnableDisplayL( *vfDisplay, aEnable ); + } + + MUS_LOG( "mus: [ENGINE] <- CMusEngTwoWayRecvSession::EnableDisplayL()") + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +TBool CMusEngTwoWayRecvSession::IsDisplayEnabled() + { + TBool enabled( EFalse ); + if ( iSession ) + { + CMceDisplaySink* display = MusEngMceUtils::GetReceivingDisplay( *iSession ); + if ( display ) + { + enabled = display->IsEnabled(); + } + } + return enabled; + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +CMusEngMceSession::TDisplayOrientation CMusEngTwoWayRecvSession::OrientationL() + { + MUS_LOG( "mus: [ENGINE] -> CMusEngTwoWayRecvSession::RotationL()" ) + + __ASSERT_ALWAYS( iSession, User::Leave( KErrNotReady ) ); + + CMceDisplaySink* display = MusEngMceUtils::GetReceivingDisplayL( *iSession ); + + TDisplayOrientation displayOrientation; + CMceDisplaySink::TRotation rotation( display->RotationL() ); + + MUS_LOG1( "mus: [ENGINE] MCE rotation is %d", rotation ) + + if ( rotation == CMceDisplaySink::ENone ) + { + displayOrientation = CMusEngMceSession::EPortrait; + } + else + { + displayOrientation = CMusEngMceSession::ELandscape; + } + + MUS_LOG1( "mus: [ENGINE] <- CMusEngTwoWayRecvSession::RotationL() %d", + displayOrientation ) + + return displayOrientation; + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusEngTwoWayRecvSession::SetOrientationL( TDisplayOrientation aOrientation ) + { + MUS_LOG1( "mus: [ENGINE] -> CMusEngTwoWayRecvSession::SetOrientationL() %d", + aOrientation ) + + __ASSERT_ALWAYS( iSession, User::Leave( KErrNotReady ) ); + + CMceDisplaySink* display = MusEngMceUtils::GetReceivingDisplayL( *iSession ); + + CMceDisplaySink* vfDisplay = MusEngMceUtils::GetVfDisplay( *iSession ); + + CMceDisplaySink::TRotation rotation = ( aOrientation == EPortrait ) ? + CMceDisplaySink::ENone : CMceDisplaySink::EClockwise90Degree; + + display->SetRotationL( rotation ); + if ( vfDisplay ) + { + vfDisplay->SetRotationL( rotation ); + } + + MUS_LOG( "mus: [ENGINE] <- CMusEngTwoWayRecvSession::SetOrientationL()" ) + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusEngTwoWayRecvSession::SetRectsL( + const TRect& aRemoteRect, + const TRect& aLocalRect ) + { + MUS_LOG( "mus: [ENGINE] -> CMusEngTwoWayRecvSession::SetRectsL()" ) + + iLocalRect = aLocalRect; + iRect = aRemoteRect; + RectChangedL(); + + MUS_LOG( "mus: [ENGINE] <- CMusEngTwoWayRecvSession::SetRectsL()" ) + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusEngTwoWayRecvSession::SetSecondaryRectL( const TRect& aSecondaryRect ) + { + MUS_LOG( "mus: [ENGINE] -> CMusEngTwoWayRecvSession::SetSecondaryRectL()" ) + + iLocalRect = aSecondaryRect; + RectChangedL(); + + MUS_LOG( "mus: [ENGINE] <- CMusEngTwoWayRecvSession::SetSecondaryRectL()" ) + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +TRect CMusEngTwoWayRecvSession::SecondaryRect() const + { + MUS_LOG( "mus: [ENGINE] -> CMusEngTwoWayRecvSession::SecondaryRect()" ) + MUS_LOG( "mus: [ENGINE] <- CMusEngTwoWayRecvSession::SecondaryRect()" ) + return iLocalRect; + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +TMusEngCameraHandler& CMusEngTwoWayRecvSession::Camera() + { + return iCameraHandler; + } + +// ----------------------------------------------------------------------------- +// From MLcSession +// ----------------------------------------------------------------------------- +// +MLcVideoPlayer* CMusEngTwoWayRecvSession::LocalVideoPlayer() + { + return iLiveVideoPlayer; + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// + +void CMusEngTwoWayRecvSession::RectChangedL() + { + MUS_LOG( "mus: [ENGINE] -> CMusEngTwoWayRecvSession::RectChangedL()" ) + + + // If session is not yet created, do nothing + if ( iSession && iSession->State() != CMceSession::ETerminated ) + { + TRect remoteRect( Rect() ); + MUS_LOG2( "mus: [ENGINE] remote tl.ix=%d tl.iy=%d", + remoteRect.iTl.iX, remoteRect.iTl.iY ) + MUS_LOG2( "mus: [ENGINE] remote brc%d br.iy=%d", + remoteRect.iBr.iX, remoteRect.iBr.iY ) + MUS_LOG2( "mus: [ENGINE] local tl.ix=%d tl.iy=%d", + iLocalRect.iTl.iX, iLocalRect.iTl.iY ) + MUS_LOG2( "mus: [ENGINE] local br.ix=%d br.iy=%d", + iLocalRect.iBr.iX, iLocalRect.iBr.iY ) + + if ( remoteRect != iSetRemoteRect ) + { + CMceDisplaySink* display = MusEngMceUtils::GetReceivingDisplayL( *iSession ); + display->SetDisplayRectL( remoteRect ); + iSetRemoteRect = remoteRect; + } + + if ( iLocalRect != iSetLocalRect ) + { + CMceDisplaySink* vfDisplay = MusEngMceUtils::GetVfDisplay( *iSession ); + if ( vfDisplay ) + { + vfDisplay->SetDisplayRectL( iLocalRect ); + } + iSetLocalRect = iLocalRect; + } + } + + MUS_LOG( "mus: [ENGINE] <- CMusEngTwoWayRecvSession::RectChangedL()" ) + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusEngTwoWayRecvSession::CompleteSessionStructureL() + { + MUS_LOG( "mus: [ENGINE] -> CMusEngTwoWayRecvSession::CompleteSessionStructureL()" ) + + __ASSERT_ALWAYS( iSession, User::Leave( KErrNotReady ) ); + + iCameraHandler.SetSession( iSession ); + + // Force bandwidth line usage in sdp as it is mandatory + // at MT side based on GSMA VS specification IR.74. Bandwidth is set to + // session or to media level based on sender's way of usage. If other end + // is not using bandwidth attribute at all, media level is preferred. + SetSessionSdpLinesL( *iSession, ETrue ); + + CMceStreamBundle* localBundle = + CMceStreamBundle::NewLC( CMceStreamBundle::ELS ); + + const RPointerArray& streams = iSession->Streams(); + + CMceMediaStream* videoInStream = NULL; + CMceMediaStream* videoOutStream = NULL; + + // Search interesting video streams, sendrecv is preferred + TBool sendRecvVideoFound( EFalse ); + for( TInt i = 0; i < streams.Count(); ++i ) + { + if ( MusEngMceUtils::IsVideoInStream( *streams[i] ) && + !sendRecvVideoFound ) + { + videoInStream = streams[i]; + + if ( streams[i]->BoundStream() ) + { + videoOutStream = &streams[i]->BoundStreamL(); + } + } + else if ( streams[i]->BoundStream() && + MusEngMceUtils::IsVideoInStream( streams[i]->BoundStreamL() ) && + !sendRecvVideoFound ) + { + videoInStream = &streams[i]->BoundStreamL(); + + videoOutStream = streams[i]; + } + else + { + // NOP + } + + sendRecvVideoFound = ( videoInStream && videoOutStream ); + } + + CompleteSessionStructureAudioPartL( streams, *localBundle, videoInStream, videoOutStream ); + + if ( videoInStream ) + { + CompleteSessionStructureInStreamL( *videoInStream, *localBundle ); + } + else + { + // At least receiving video stream is required + User::Leave( KErrCorrupt ); + } + + if ( videoOutStream ) + { + CompleteSessionStructureOutStreamL( *videoOutStream ); + } + + // Destroy bundle if it is not needed or transfer ownership + if ( localBundle->Streams().Count() > 1 ) + { + iSession->AddBundleL( localBundle ); + CleanupStack::Pop( localBundle ); + } + else + { + CleanupStack::PopAndDestroy( localBundle ); + } + + AdjustStreamsAndCodecsL(); + + iSession->UpdateL(); + + // Now session state is right to adjust volume + SetSpeakerVolumeL( LcVolumeL() ); + + iSipProfileHandler->CreateProfileL( iSession->Profile() ); + + iRemoteVideoPlayer->SetMceSession( iSession ); + + MUS_LOG( "mus: [ENGINE] <- CMusEngTwoWayRecvSession::CompleteSessionStructureL()" ) + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +CMusEngTwoWayRecvSession::CMusEngTwoWayRecvSession() + : CMusEngReceiveSession() + { + iMceManagerUid.iUid = CMusManager::ESipInviteDesired2WayVideo; + + iSetRemoteRect = TRect( + KMusEngRectNotInit, KMusEngRectNotInit, KMusEngRectNotInit, KMusEngRectNotInit ); + iSetLocalRect = TRect( + KMusEngRectNotInit, KMusEngRectNotInit, KMusEngRectNotInit, KMusEngRectNotInit ); + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusEngTwoWayRecvSession::ConstructL() + { + MUS_LOG( "mus: [ENGINE] -> CMusEngTwoWayRecvSession::ConstructL()" ) + + iCameraHandler.ReadCameraUsageKeyL(); + CMusEngReceiveSession::ConstructL(); + + iLiveVideoPlayer = + CMusEngLiveVideoPlayer::NewL( *this, iCameraHandler, *this ); + + // Override receiving timeout and keepalive values of + // normal one-way receiving session + // + iReceivingInactivityTimeout = KMusEngTwoWayReceivingActivityTimeout; + iKeepaliveTimer = KMusEngTwoWayRtpKeepAliveTimer; + + MUS_LOG( "mus: [ENGINE] <- CMusEngTwoWayRecvSession::ConstructL()" ) + } + +// ----------------------------------------------------------------------------- +// When checking audio streams also not interesting streams are removed from +// session. Stream if removed if one of following apply: +// 1. Is not and does not contain incoming video or audio +// 2. We already have one incoming video stream +// 3. Stream is audio and we run operator variant where audio is +// not allowed. +// 4. Two-way video exists and this one is audio +// ----------------------------------------------------------------------------- +// +void CMusEngTwoWayRecvSession::CompleteSessionStructureAudioPartL( + const RPointerArray& aStreams, + CMceStreamBundle& aLocalBundle, + CMceMediaStream* aVideoInStream, + CMceMediaStream* aVideoOutStream ) + { + MUS_LOG( "mus: [ENGINE] -> CMusEngTwoWayRecvSession::CompleteSessionStructureAudioPartL()" ) + + // Audio streams not allowed in two-way session or in operator variant + TBool audioAllowed( !( aVideoInStream && aVideoOutStream ) && !iOperatorVariant ); + + for( TInt i = 0; i < aStreams.Count(); ++i ) + { + // Audio supported currently only in recvonly case + if ( audioAllowed && + MusEngMceUtils::IsAudioInStream( *aStreams[i] ) ) + { + MusEngMceUtils::AddSpeakerL( *aStreams[i] ); + + aLocalBundle.AddStreamL( *aStreams[i] ); + + // Disable possible opposite stream to indicate that sendrecv audio is + // not allowed. + if ( aStreams[i]->BoundStream() ) + { + MusEngMceUtils::DisableStreamL( aStreams[i]->BoundStreamL() ); + } + } + else if ( audioAllowed && + aStreams[i]->BoundStream() && + MusEngMceUtils::IsAudioInStream( aStreams[i]->BoundStreamL() ) ) + { + MusEngMceUtils::AddSpeakerL( aStreams[i]->BoundStreamL() ); + + aLocalBundle.AddStreamL( aStreams[i]->BoundStreamL() ); + + // Disable opposite stream to indicate that sendrecv audio is not allowed. + MusEngMceUtils::DisableStreamL( *aStreams[i] ); + } + else if ( aStreams[ i ] != aVideoInStream && aStreams[ i ] != aVideoOutStream ) + { + iSession->RemoveStreamL( *aStreams[i] ); + + // Since succesfull removal of a stream has decreased the amount + // of streams in array by one, we have to modify the index + --i; + } + else + { + // NOP + } + } + + MUS_LOG( "mus: [ENGINE] <- CMusEngTwoWayRecvSession::CompleteSessionStructureAudioPartL()" ) + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusEngTwoWayRecvSession::CompleteSessionStructureInStreamL( + CMceMediaStream& aVideoInStream, CMceStreamBundle& aLocalBundle ) + { + MUS_LOG( "mus: [ENGINE] -> CMusEngTwoWayRecvSession::CompleteSessionStructureInStreamL()" ) + + SetMediaSdpLinesL( aVideoInStream, ETrue ); + + MusEngMceUtils::AddDisplayL( aVideoInStream, *iManager, Rect() ); + + static_cast(aVideoInStream.Source())->UpdateL( + KMusEngJitterBufferLength, + KMusEngJitterBufferTreshold, + KMusEngTwoWayReceivingActivityTimeout ); + + aLocalBundle.AddStreamL( aVideoInStream ); + + MUS_LOG( "mus: [ENGINE] <- CMusEngTwoWayRecvSession::CompleteSessionStructureInStreamL()" ) + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusEngTwoWayRecvSession::CompleteSessionStructureOutStreamL( + CMceMediaStream& aVideoOutStream ) + { + MUS_LOG( "mus: [ENGINE] -> CMusEngTwoWayRecvSession::CompleteSessionStructureOutStreamL()" ) + + SetMediaSdpLinesL( aVideoOutStream, ETrue ); + + CMceCameraSource* camera = NULL; + TRAP_IGNORE( camera = MusEngMceUtils::GetCameraL( *iSession ) ) + if ( !camera ) + { + camera = CMceCameraSource::NewLC( *iManager ); + aVideoOutStream.SetSourceL( camera ); + CleanupStack::Pop( camera ); + } + + camera->DisableL(); // Start session in pause mode. + + iCameraHandler.InitializeL( *camera ); + + CMceVideoStream* vfStream = CMceVideoStream::NewLC(); + + vfStream->SetSourceL( aVideoOutStream.Source() ); + + // Complete stream, vf display is disabled at creation phase if doing bg startup + MusEngMceUtils::AddDisplayL( *vfStream, *iManager, SecondaryRect(), IsBackgroundStartup() ); + + iSession->AddStreamL( vfStream ); + CleanupStack::Pop( vfStream ); + + iLiveVideoPlayer->SetMceSession( iSession ); + + MUS_LOG( "mus: [ENGINE] <- CMusEngTwoWayRecvSession::CompleteSessionStructureOutStreamL()" ) + } + + +// End of file diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshengine/src/musengtwowaysession.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/mmshengine/src/musengtwowaysession.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,530 @@ +/* +* 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: +* +*/ + + +// USER +#include "musengtwowaysession.h" +#include "musunittesting.h" +#include "musengmceutils.h" +#include "musenglogger.h" +#include "musengremotevideoplayer.h" +#include "musenglivevideoplayer.h" + +// SYSTEM +#include +#include +#include +#include +#include +#include +#include +#include +#include + +const TInt KMusEngJitterBufferLength = 51; //Must be bigger than treshold +// Using following value increases treshold buffer to 1 second from +// default 100 ms +const TInt KMusEngJitterBufferTreshold = 50; + +const TUint32 KMusEngTwoWayReceivingActivityTimeout = 5000; // 5 seconds +// 6 seconds keepalive timer, needs to be more than receiving timeout +const TUint8 KMusEngTwoWayRtpKeepAliveTimer = 6; + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +CMusEngTwoWaySession* CMusEngTwoWaySession::NewL() + { + CMusEngTwoWaySession* self = new( ELeave )CMusEngTwoWaySession(); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + return self; + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +CMusEngTwoWaySession::~CMusEngTwoWaySession() + { + MUS_LOG( "mus: [ENGINE] -> CMusEngTwoWaySession::~CMusEngTwoWaySession()" ) + + delete iRemoteVideoPlayer; + + MUS_LOG( "mus: [ENGINE] <- CMusEngTwoWaySession::~CMusEngTwoWaySession()" ) + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusEngTwoWaySession::EnableDisplayL( TBool aEnable ) + { + MUS_LOG1( "mus: [ENGINE] -> CMusEngTwoWaySession::EnableDisplayL() %d", + aEnable ) + + __ASSERT_ALWAYS( iSession, User::Leave( KErrNotReady ) ); + + CMceDisplaySink* display = MusEngMceUtils::GetReceivingDisplay( *iSession ); + if ( display ) + { + MusEngMceUtils::DoEnableDisplayL( *display, aEnable ); + } + CMceDisplaySink* vfDisplay = MusEngMceUtils::GetDisplayL( *iSession, ETrue ); + MusEngMceUtils::DoEnableDisplayL( *vfDisplay, aEnable ); + + MUS_LOG( "mus: [ENGINE] <- CMusEngTwoWaySession::EnableDisplayL()") + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusEngTwoWaySession::SetOrientationL( TDisplayOrientation aOrientation ) + { + MUS_LOG1( "mus: [ENGINE] -> CMusEngTwoWaySession::SetOrientationL() %d", + aOrientation ) + + __ASSERT_ALWAYS( iSession, User::Leave( KErrNotReady ) ); + + CMceDisplaySink* display = MusEngMceUtils::GetReceivingDisplay( *iSession ); + CMceDisplaySink* vfDisplay = MusEngMceUtils::GetDisplayL( *iSession, ETrue ); + + CMceDisplaySink::TRotation rotation = ( aOrientation == EPortrait ) ? + CMceDisplaySink::ENone : CMceDisplaySink::EClockwise90Degree; + + vfDisplay->SetRotationL( rotation ); + if ( display ) + { + display->SetRotationL( rotation ); + } + + MUS_LOG( "mus: [ENGINE] <- CMusEngTwoWaySession::SetOrientationL()" ) + } + +// ----------------------------------------------------------------------------- +// From MLcFileControl +// ----------------------------------------------------------------------------- +// +void CMusEngTwoWaySession::EnableLcFileL( TBool /*aEnable*/ ) + { + MUS_LOG( "mus: [ENGINE] -> CMusEngTwoWaySession::EnableLcFileL" ) + + User::Leave( KErrNotSupported ); + + MUS_LOG( "mus: [ENGINE] -> CMusEngTwoWaySession::EnableLcFileL" ) + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusEngTwoWaySession::SetRectsL( + const TRect& aRemoteRect, + const TRect& aLocalRect ) + { + MUS_LOG( "mus: [ENGINE] -> CMusEngTwoWaySession::SetRectsL()" ) + + iLocalRect = aLocalRect; + iRect = aRemoteRect; + RectChangedL(); + + MUS_LOG( "mus: [ENGINE] <- CMusEngTwoWaySession::SetRectsL()" ) + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusEngTwoWaySession::SetSecondaryRectL( const TRect& aSecondaryRect ) + { + MUS_LOG( "mus: [ENGINE] -> CMusEngTwoWaySession::SetSecondaryRectL()" ) + + iLocalRect = aSecondaryRect; + RectChangedL(); + + MUS_LOG( "mus: [ENGINE] <- CMusEngTwoWaySession::SetSecondaryRectL()" ) + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +TRect CMusEngTwoWaySession::SecondaryRect() const + { + MUS_LOG( "mus: [ENGINE] -> CMusEngTwoWaySession::SecondaryRect()" ) + MUS_LOG( "mus: [ENGINE] <- CMusEngTwoWaySession::SecondaryRect()" ) + return iLocalRect; + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +TBool CMusEngTwoWaySession::IsDisplayEnabled() + { + TBool enabled( EFalse ); + if ( iSession ) + { + CMceDisplaySink* display = MusEngMceUtils::GetReceivingDisplay( *iSession ); + if ( !display ) + { + display = MusEngMceUtils::GetVfDisplay( *iSession ); + } + if ( display ) + { + enabled = display->IsEnabled(); + } + } + return enabled; + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +TBool CMusEngTwoWaySession::IsDisplayActive() + { + return ( IsDisplayEnabled() && iReceiving ); + } + +// ----------------------------------------------------------------------------- +// From MLcSession +// ----------------------------------------------------------------------------- +// +MLcVideoPlayer* CMusEngTwoWaySession::RemoteVideoPlayer() + { + return iRemoteVideoPlayer; + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusEngTwoWaySession::RectChangedL() + { + MUS_LOG( "mus: [ENGINE] -> CMusEngTwoWaySession::RectChangedL()" ) + + // If session is not yet created, do nothing + if ( iSession && iSession->State() != CMceSession::ETerminated ) + { + TRect remoteRect( Rect() ); + MUS_LOG2( "mus: [ENGINE] remote tl.ix=%d tl.iy=%d", + remoteRect.iTl.iX, remoteRect.iTl.iY ) + MUS_LOG2( "mus: [ENGINE] remote br.ix=%d br.iy=%d", + remoteRect.iBr.iX, remoteRect.iBr.iY ) + MUS_LOG2( "mus: [ENGINE] local tl.ix=%d tl.iy=%d", + iLocalRect.iTl.iX, iLocalRect.iTl.iY ) + MUS_LOG2( "mus: [ENGINE] local br.ix=%d br.iy=%d", + iLocalRect.iBr.iX, iLocalRect.iBr.iY ) + + if ( remoteRect != iSetRemoteRect ) + { + CMceDisplaySink* display = MusEngMceUtils::GetReceivingDisplay( *iSession ); + if ( display ) + { + MUS_LOG( "mus: [ENGINE] set remote rect" ) + display->SetDisplayRectL( remoteRect ); + iSetRemoteRect = remoteRect; + } + } + + if ( iLocalRect != iSetLocalRect ) + { + MUS_LOG( "mus: [ENGINE] set local rect" ) + CMceDisplaySink* vfDisplay = MusEngMceUtils::GetDisplayL( *iSession, ETrue ); + vfDisplay->SetDisplayRectL( iLocalRect ); + iSetLocalRect = iLocalRect; + } + } + + MUS_LOG( "mus: [ENGINE] <- CMusEngTwoWaySession::RectChangedL()" ) + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusEngTwoWaySession::CompleteSessionStructureL( + CMceStreamBundle& /*aLocalBundle*/ ) + { + MUS_LOG( "mus: [ENGINE] -> CMusEngTwoWaySession::CompleteSessionStructureL()" ) + + __ASSERT_ALWAYS( iSession, User::Leave( KErrNotReady ) ); + + iCameraHandler.SetSession( iSession ); + + // Create outgoing video stream + CMceVideoStream* videoStream = CMceVideoStream::NewLC(); + + CMceRtpSink* rtpsink = CMceRtpSink::NewLC(); + videoStream->AddSinkL( rtpsink ); + CleanupStack::Pop( rtpsink ); + + CMceCameraSource* camera = CMceCameraSource::NewLC( *iManager ); + camera->DisableL(); // Start session in pause mode. + + iCameraHandler.InitializeL( *camera ); + + videoStream->SetSourceL( camera ); + CleanupStack::Pop( camera ); + + // Create incoming video stream + CMceVideoStream* videoInStream = CMceVideoStream::NewL(); + CleanupStack::PushL( videoInStream ); + + MusEngMceUtils::AddDisplayL( *videoInStream, *iManager, Rect() ); + + CMceRtpSource* rtpSource = CMceRtpSource::NewLC( KMusEngJitterBufferLength, + KMusEngJitterBufferTreshold, + KMusEngTwoWayReceivingActivityTimeout ); + videoInStream->SetSourceL( rtpSource ); + CleanupStack::Pop( rtpSource ); + + videoStream->BindL( videoInStream ); + CleanupStack::Pop( videoInStream ); + + iSession->AddStreamL( videoStream ); + CleanupStack::Pop( videoStream ); + + iLiveVideoPlayer->SetMceSession( iSession ); + iRemoteVideoPlayer->SetMceSession( iSession ); + + MUS_LOG( "mus: [ENGINE] <- CMusEngTwoWaySession::CompleteSessionStructureL()" ) + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusEngTwoWaySession::CreateMceSessionStructureL( + TBool /*aForceSdpBandwidth*/ ) + { + //Force SDP bandwidth attributes to be included in the INVITE + CMusEngMceOutSession::CreateMceSessionStructureL( ETrue ); + } + +// ----------------------------------------------------------------------------- +// Sets video codec attributes +// ----------------------------------------------------------------------------- +// +void CMusEngTwoWaySession::AdjustVideoCodecL( CMceVideoCodec& aVideoCodec, + TMceSourceType aSourceType ) + { + MUS_LOG( "mus: [ENGINE] -> CMusEngTwoWaySession::AdjustVideoCodecL()" ) + + CMusEngLiveSession::AdjustVideoCodecL( aVideoCodec, aSourceType ); + + aVideoCodec.SetKeepAliveTimerL( KMusEngTwoWayRtpKeepAliveTimer ); + if ( aVideoCodec.SdpName() == KMceSDPNameH263() || + aVideoCodec.SdpName() == KMceSDPNameH2632000() ) + { + aVideoCodec.SetKeepAlivePayloadTypeL( KMusEngKeepAlivePayloadTypeVideoH263 ); + } + else if ( aVideoCodec.SdpName() == KMceSDPNameH264() ) + { + aVideoCodec.SetKeepAlivePayloadTypeL( KMusEngKeepAlivePayloadTypeVideoAvc ); + } + else + { + // NOP + } + + aVideoCodec.SetKeepAliveDataL( KNullDesC8() ); + + MUS_LOG( "mus: [ENGINE] <- CMusEngTwoWaySession::AdjustVideoCodecL()" ) + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusEngTwoWaySession::AddDisplayL( CMceMediaStream& aStream ) + { + // Vf display is disabled at creation phase if doing bg startup + MusEngMceUtils::AddDisplayL( aStream, + *iManager, + iLocalRect, + IsBackgroundStartup() ); + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusEngTwoWaySession::StreamStateChanged( CMceMediaStream& aStream ) + { + MUS_LOG( "mus: [ENGINE] -> CMusEngTwoWaySession::StreamStateChanged()" ) + if ( !iSession ) + { + return; + } + + if ( aStream.Type() == KMceVideo && + aStream.Source() && + aStream.Source()->Type() == KMceRTPSource ) + { + if ( aStream.State() == CMceMediaStream::EStreaming ) + { + ReceivingStarted(); + } + else if ( aStream.State() == CMceMediaStream::EBuffering ) + { + MUS_LOG( "mus: [ENGINE] CMusEngTwoWaySession buffered" ) + + iBuffered = ETrue; + } + else + { + // NOP + } + } + + CMusEngMceSession::StreamStateChanged( aStream ); + + MUS_LOG( "mus: [ENGINE] <- CMusEngTwoWaySession::StreamStateChanged()" ) + } + +// ----------------------------------------------------------------------------- +// Once inactivity timeout occurs, state change is notified and receiving +// and buffering statuses are cleared. That is safe to do as once receiving +// again continues for real, buffering and streaming events will occur always +// sequentially. If buffering status would not be cleared, some unwanted +// sreaming events would be passed towards client when it disables/enables +// display sink of remote stream while inactivity timer has expired. +// ----------------------------------------------------------------------------- +// +void CMusEngTwoWaySession::InactivityTimeout( CMceMediaStream& aStream, + CMceRtpSource& /*aSource*/ ) + { + MUS_LOG( "mus: [ENGINE] -> CMusEngTwoWaySession::InactivityTimeout()" ) + + if ( aStream.Type() == KMceVideo && iReceiving ) + { + iReceiving = EFalse; + iBuffered = EFalse; + if ( iRemoteVideoPlayer ) + { + InformObserverAboutPlayerStateChange( iRemoteVideoPlayer ); + } + } + + MUS_LOG( "mus: [ENGINE] <- CMusEngTwoWaySession::InactivityTimeout()" ) + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusEngTwoWaySession::HandleSessionStateChanged( + CMceSession& aSession, + TInt aStatusCode, + const TDesC8& aReasonPhrase ) + { + MUS_LOG( "mus: [ENGINE] -> CMusEngTwoWaySession::HandleSessionStateChanged" ) + + MUS_ENG_LOG_SESSION_STATE_AND_STATUS( aSession, aStatusCode, aReasonPhrase ) + + TBool consumed( EFalse ); + if ( iSession && + iSession == &aSession && + aSession.State() == CMceSession::EEstablished ) + { + CMceVideoStream* stream = NULL; + CMceVideoStream* streamout = NULL; + TRAPD( err, stream = MusEngMceUtils::GetVideoInStreamL( *iSession ) ) + if ( err == KErrNone && stream && stream->IsEnabled() ) + { + TRAP( err, streamout = MusEngMceUtils::GetVideoOutStreamL( *iSession ) ) + if ( err != KErrNone || !streamout || !streamout->IsEnabled() ) + { + MUS_LOG( "mus: [ENGINE] sendrecv downgraded to recvonly, terminate!" ) + consumed = ETrue; + InformObserverAboutSessionFailure( err ); + } + } + } + + if ( !consumed ) + { + CMusEngLiveSession::HandleSessionStateChanged( aSession, + aStatusCode, + aReasonPhrase ); + } + MUS_LOG( "mus: [ENGINE] <- CMusEngTwoWaySession::HandleSessionStateChanged" ) + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +CMusEngTwoWaySession::CMusEngTwoWaySession() + : CMusEngLiveSession() + { + iSetRemoteRect = TRect( + KMusEngRectNotInit, KMusEngRectNotInit, KMusEngRectNotInit, KMusEngRectNotInit ); + iSetLocalRect = TRect( + KMusEngRectNotInit, KMusEngRectNotInit, KMusEngRectNotInit, KMusEngRectNotInit ); + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusEngTwoWaySession::ConstructL() + { + MUS_LOG( "mus: [ENGINE] -> CMusEngTwoWaySession::ConstructL()" ) + + CMusEngLiveSession::ConstructL(); + + iRemoteVideoPlayer = CMusEngRemoteVideoPlayer::NewL( *this, *this ); + + MUS_LOG( "mus: [ENGINE] <- CMusEngTwoWaySession::ConstructL()" ) + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusEngTwoWaySession::ReceivingStarted() + { + if ( iSession && iBuffered ) + { + MUS_LOG( "mus: [ENGINE] -> CMusEngTwoWaySession::ReceivingStarted()" ) + + TInt err = MusEngMceUtils::EnableInactivityTimer( + *iSession, KMusEngTwoWayReceivingActivityTimeout ); + + if ( err != KErrNone ) + { + MUS_LOG1("mus: [ENGINE] ReceivingStarted failed %d", err) + InformObserverAboutSessionFailure( err ); + } + else + { + iReceiving = ETrue; + InformObserverAboutPlayerStateChange( iRemoteVideoPlayer ); + InformUiProviderAboutReceivingStart(); + } + + MUS_LOG( "mus: [ENGINE] <- CMusEngTwoWaySession::ReceivingStarted()" ) + } + } + +// End of file diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshengine/src/musenguriparser.cpp --- a/mmsharing/mmshengine/src/musenguriparser.cpp Thu Aug 19 09:51:39 2010 +0300 +++ b/mmsharing/mmshengine/src/musenguriparser.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -22,7 +22,6 @@ #include #include -//#include #include #include @@ -34,7 +33,7 @@ // UTF7 is not working, since it converts + as +- // ----------------------------------------------------------------------------- // -EXPORT_C TMusEngUriParser::TMusEngUriParser( const TDesC16& aUri ) +TMusEngUriParser::TMusEngUriParser( const TDesC16& aUri ) :iUriType( ENotParsed ) { TBuf8 buf; @@ -49,22 +48,20 @@ } } +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +TMusEngUriParser::TMusEngUriType TMusEngUriParser::UriType() + { + return iUriType; + } // ----------------------------------------------------------------------------- // // ----------------------------------------------------------------------------- // -EXPORT_C TMusEngUriParser::TMusEngUriType TMusEngUriParser::UriType() - { - return iUriType; - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -EXPORT_C HBufC8* TMusEngUriParser::GetUri8L() +HBufC8* TMusEngUriParser::GetUri8L() { MUS_LOG( "mus: [ENGINE] -> TMusEngUriParser::GetUri8L()" ) @@ -76,15 +73,13 @@ MUS_LOG( "mus: [ENGINE] <- TMusEngUriParser::GetUri8L()" ) return uri8; - } - // ----------------------------------------------------------------------------- // // ----------------------------------------------------------------------------- // -EXPORT_C HBufC16* TMusEngUriParser::GetUri16L( TBool aPrefix ) +HBufC16* TMusEngUriParser::GetUri16L( TBool aPrefix ) { MUS_LOG( "mus: [ENGINE] -> TMusEngUriParser::GetUri16L()" ) @@ -106,16 +101,13 @@ MUS_LOG( "mus: [ENGINE] <- TMusEngUriParser::GetUri16L()" ) return uri16; - } - -// ----------------------------------------------------------------------------- -// +// ----------------------------------------------------------------------------- // // ----------------------------------------------------------------------------- // -EXPORT_C void TMusEngUriParser::ParseUriL() +void TMusEngUriParser::ParseUriL() { MUS_LOG( "mus: [ENGINE] -> TMusEngUriParser::ParseUriL()" ) @@ -135,7 +127,7 @@ {// basic behaviour MUS_LOG( "mus: [ENGINE] -> TMusEngUriParser::ParseUriL() \ normal behaviour" ) - User::Leave( KErrCorrupt ); + User::Leave( KErrArgument ); } else { // variant behaviour(local tel uri) @@ -144,9 +136,7 @@ } } - // ----------------------------------------------------------------------------- -// // // ----------------------------------------------------------------------------- // @@ -189,18 +179,13 @@ iUriType = TMusEngUriParser::ESip; } - - - -// ----------------------------------------------------------------------------- -// +// ----------------------------------------------------------------------------- // // ----------------------------------------------------------------------------- // void TMusEngUriParser::HandleTelUriL() { - // Remove leading and trailing whitespaces iUri.TrimAll(); if ( iUri.FindF( KMusEngTelPrefix() ) != 0 ) { @@ -223,8 +208,6 @@ TInt index = KMusEngTelPrefix().Length() + KMusEngPlusSign().Length(); - // Remove whitespaces and extra chracters like parentheses. Check that the - // rest characters are digits while ( index < iUri.Length() ) { TChar character = iUri[ index ]; @@ -245,9 +228,7 @@ iUriType = TMusEngUriParser::ETel; } - // ----------------------------------------------------------------------------- -// // // ----------------------------------------------------------------------------- // @@ -258,8 +239,7 @@ if ( iUri.FindF( KMusEngTelPrefix() ) != 0 ) { // local tel uri without prefix - if ( iUri.Length() + KMusEngTelPrefix().Length() <= - KMaxUriLength ) + if ( iUri.Length() + KMusEngTelPrefix().Length() <= KMaxUriLength ) { iUri.Insert( 0, KMusEngTelPrefix() ); } @@ -271,10 +251,7 @@ else { //Tel uri with prefix - iUri.Replace( - 0, - KMusEngTelPrefix().Length(), - KMusEngTelPrefix() ); + iUri.Replace( 0, KMusEngTelPrefix().Length(), KMusEngTelPrefix() ); } TInt index = KMusEngTelPrefix().Length(); @@ -292,6 +269,5 @@ iUriType = TMusEngUriParser::ETel; } - - + // End of file diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshengine/src/musengvideoplayerbase.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/mmshengine/src/musengvideoplayerbase.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,210 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + +// USER +#include "musenglocalvideoplayer.h" +#include "musengcamerahandler.h" +#include "musengmceutils.h" +#include "musengdisplayhandler.h" + +// SYSTEM +#include +#include + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +CMusEngVideoPlayerBase::CMusEngVideoPlayerBase( + MMusEngDisplayHandler& aDisplayHandler, + MLcAudioControl& aLcAudioControl ) : + iDisplayHandler( aDisplayHandler ), + iLcAudioControl( aLcAudioControl ) + { + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +CMusEngVideoPlayerBase::~CMusEngVideoPlayerBase() + { + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusEngVideoPlayerBase::SetMceSession( CMceSession* aMceSession ) + { + iMceSession = aMceSession; + } + +// ----------------------------------------------------------------------------- +// From MLcVideoPlayer +// ----------------------------------------------------------------------------- +// +void CMusEngVideoPlayerBase::LcPlayL( TLcVideoPlayerSource /*aSource*/ ) + { + // NOP + } + +// ----------------------------------------------------------------------------- +// From MLcVideoPlayer +// ----------------------------------------------------------------------------- +// +void CMusEngVideoPlayerBase::LcPauseL() + { + // NOP + } + +// ----------------------------------------------------------------------------- +// From MLcVideoPlayer +// ----------------------------------------------------------------------------- +// +MLcWindow* CMusEngVideoPlayerBase::LcWindow() + { + return this; + } + +// ----------------------------------------------------------------------------- +// From MLcVideoPlayer +// ----------------------------------------------------------------------------- +// +MLcCameraControl* CMusEngVideoPlayerBase::LcCameraControl() + { + return NULL; + } + +// ----------------------------------------------------------------------------- +// From MLcVideoPlayer +// ----------------------------------------------------------------------------- +// +MLcSourceFileControl* CMusEngVideoPlayerBase::LcSourceFileControl() + { + return NULL; + } + +// ----------------------------------------------------------------------------- +// From MLcVideoPlayer +// ----------------------------------------------------------------------------- +// +MLcDestinationFileControl* CMusEngVideoPlayerBase::LcDestinationFileControl() + { + return NULL; + } + +// ----------------------------------------------------------------------------- +// From MLcVideoPlayer +// ----------------------------------------------------------------------------- +// +MLcAudioControl* CMusEngVideoPlayerBase::LcAudioControl() + { + return &iLcAudioControl; + } + +// ----------------------------------------------------------------------------- +// From MLcVideoPlayer +// ----------------------------------------------------------------------------- +// +MLcZoomControl* CMusEngVideoPlayerBase::LcZoomControl() + { + return NULL; + } + +// ----------------------------------------------------------------------------- +// From MLcVideoPlayer +// ----------------------------------------------------------------------------- +// +MLcBrightnessControl* CMusEngVideoPlayerBase::LcBrightnessControl() + { + return NULL; + } + +// ----------------------------------------------------------------------------- +// From MLcWindow +// ----------------------------------------------------------------------------- +// +void CMusEngVideoPlayerBase::EnableLcWindowL( TBool aEnable ) + { + iDisplayHandler.EnableDisplayL( aEnable ); + } + +// ----------------------------------------------------------------------------- +// From MLcWindow +// ----------------------------------------------------------------------------- +// +TBool CMusEngVideoPlayerBase::IsLcWindowEnabled() + { + return iDisplayHandler.IsDisplayEnabled(); + } + +// ----------------------------------------------------------------------------- +// From MLcWindow +// ----------------------------------------------------------------------------- +// +void CMusEngVideoPlayerBase::SetLcWindowRectL( TRect aRect ) + { + iDisplayHandler.SetRectL( aRect ); + } + + +// ----------------------------------------------------------------------------- +// From MLcWindow +// ----------------------------------------------------------------------------- +// +TRect CMusEngVideoPlayerBase::LcWindowRect() + { + return iDisplayHandler.Rect(); + } + +// ----------------------------------------------------------------------------- +// From MLcWindow +// ----------------------------------------------------------------------------- +// +void CMusEngVideoPlayerBase::SetLcWindowOrientationL( + TLcWindowOrientation aOrientation ) + { + if ( aOrientation == MLcWindow::ELandscape ) + { + iDisplayHandler.SetOrientationL( MMusEngDisplayHandler::ELandscape ); + } + else + { + iDisplayHandler.SetOrientationL( MMusEngDisplayHandler::EPortrait ); + } + } + +// ----------------------------------------------------------------------------- +// From MLcWindow +// ----------------------------------------------------------------------------- +// +MLcWindow::TLcWindowOrientation CMusEngVideoPlayerBase::LcWindowOrientationL() + { + MLcWindow::TLcWindowOrientation orientation; + if ( iDisplayHandler.OrientationL() == MMusEngDisplayHandler::ELandscape ) + { + orientation = MLcWindow::ELandscape; + } + else + { + orientation = MLcWindow::EPortrait; + } + return orientation; + } diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshengine/src/mussipprofilehandler.cpp --- a/mmsharing/mmshengine/src/mussipprofilehandler.cpp Thu Aug 19 09:51:39 2010 +0300 +++ b/mmsharing/mmshengine/src/mussipprofilehandler.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -12,6 +12,9 @@ * Contributors: * * Description: Utilities to get and set profile used with SWIS. +* Part of : Mus For S60 v3.2 +* Description : Utilities to get and set profile used with SWIS. +* Version : %version: 11.1.5 % << Don't touch! Updated by Synergy at check-out. * */ @@ -31,8 +34,6 @@ #include #include - - // ----------------------------------------------------------------------------- // // ----------------------------------------------------------------------------- @@ -47,7 +48,6 @@ return self; } - // ----------------------------------------------------------------------------- // // ----------------------------------------------------------------------------- @@ -75,7 +75,6 @@ MUS_LOG( "mus: [ENGINE] <- CMusSipProfileHandler::ConstructL()" ) } - // ----------------------------------------------------------------------------- // // ----------------------------------------------------------------------------- @@ -89,7 +88,6 @@ MUS_LOG( "mus: [ENGINE] CMusSipProfileHandler::~CMusSipProfileHandler()" ) } - // ----------------------------------------------------------------------------- // // ----------------------------------------------------------------------------- @@ -105,16 +103,11 @@ { profile = iProfileRegistry->DefaultProfileL(); } - CleanupStack::PushL( profile ); - TBool profileRegistered = EFalse; - User::LeaveIfError( profile->GetParameter( KSIPProfileRegistered, - profileRegistered ) ); - CleanupStack::Pop( profile ); + delete iSipProfile; iSipProfile = profile; } - // ----------------------------------------------------------------------------- // // ----------------------------------------------------------------------------- @@ -124,76 +117,6 @@ return iSipProfile; } -#if 0 //TODO: should this be removed? -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -CSIPProfile& CMusSipProfileHandler::SipProfileL( TInt aSipProfileId ) - { - MUS_LOG1( "mus: [ENGINE] -> CMusSipProfileHandler::SipProfileL(),\ - od #%d", aSipProfileId ) - - if ( !iSipProfile ) - { - if ( aSipProfileId != 0 ) - { - iSipProfile = iProfileRegistry->ProfileL( aSipProfileId ); - } - else - { - iSipProfile = iProfileRegistry->DefaultProfileL(); - } - } - - // The parameter val indicates if the profile can be immediately - // used for creating a session, or if the client must wait for - // the profile to be registered. - TBool profileRegistered = EFalse; - - User::LeaveIfError( iSipProfile->GetParameter( KSIPProfileRegistered, - profileRegistered ) ); - - if ( !profileRegistered ) - { - - #if (defined (__WINS__) || defined(__WINSCW__)) - - iProfileRegistry->EnableL( *iSipProfile, *this ); - - User::LeaveIfError( iSipProfile->GetParameter( KSIPProfileRegistered, - profileRegistered ) ); - - if( !profileRegistered ) - { - CActiveScheduler::Start(); - - User::LeaveIfError( iSipProfile->GetParameter( - KSIPProfileRegistered, - profileRegistered ) ); - - if ( !profileRegistered ) - { - User::Leave( KErrNotReady ); - } - } - - #else - - User::Leave( KErrNotReady ); - - #endif - - } - - - MUS_LOG( "mus: [ENGINE] <- CMusSipProfileHandler::SipProfileL()" ) - - return *iSipProfile; - } -#endif - - // ----------------------------------------------------------------------------- // // ----------------------------------------------------------------------------- @@ -206,10 +129,9 @@ const MDesC8Array* aors = NULL; User::LeaveIfError( iSipProfile->GetParameter( KSIPRegisteredAors, aors ) ); - if( !aors || aors->MdcaCount() <= 0 ) - { - User::Leave( KErrArgument ); - } + __ASSERT_ALWAYS( aors && aors->MdcaCount() > 0, + User::Leave( KErrArgument ) ); + TUriParser8 parser; User::LeaveIfError( parser.Parse( aors->MdcaPoint( 0 ) ) ); MUS_LOG( "mus: [ENGINE] <- CMusSipProfileHandler::UserFromProfileLC()" ) @@ -229,13 +151,50 @@ // ----------------------------------------------------------------------------- +// This function should never be called before creating a profile, but such +// a situation will be considered as pending registration. +// ----------------------------------------------------------------------------- +// +TBool CMusSipProfileHandler::IsRegistered() + { + MUS_LOG( "mus: [ENGINE] -> CMusSipProfileHandler::IsRegistered()" ) + + TBool profileRegistered = EFalse; + if ( iSipProfile ) + { + iSipProfile->GetParameter( KSIPProfileRegistered, profileRegistered ); + } + + MUS_LOG1( "mus: [ENGINE] <- CMusSipProfileHandler::IsRegistered( %d )", + profileRegistered ) + + return profileRegistered; + } + + +// ----------------------------------------------------------------------------- // // ----------------------------------------------------------------------------- // void CMusSipProfileHandler::ProfileRegistryEventOccurred( - TUint32 /*aProfileId*/, - MSIPProfileRegistryObserver::TEvent /*aEvent*/ ) + TUint32 aProfileId, + MSIPProfileRegistryObserver::TEvent aEvent ) { + if ( iSipProfile && aProfileId == ProfileId() ) + { + switch ( aEvent ) + { + case MSIPProfileRegistryObserver::EProfileRegistered: + { + iUser.ProfileRegistered(); + break; + } + default: + { + break; + } + } + } } @@ -249,6 +208,7 @@ { } + // ----------------------------------------------------------------------------- // // ----------------------------------------------------------------------------- @@ -296,7 +256,6 @@ delete aTransaction; } - // ----------------------------------------------------------------------------- // // ----------------------------------------------------------------------------- @@ -306,7 +265,6 @@ { } - // ----------------------------------------------------------------------------- // // ----------------------------------------------------------------------------- @@ -317,7 +275,6 @@ { } - // ----------------------------------------------------------------------------- // // ----------------------------------------------------------------------------- @@ -330,7 +287,6 @@ delete aDialogAssoc; } - // ----------------------------------------------------------------------------- // // ----------------------------------------------------------------------------- @@ -340,7 +296,6 @@ CSIPRegistrationBinding& /*aRegistration*/ ) { } - // ----------------------------------------------------------------------------- // @@ -352,7 +307,6 @@ { } - // ----------------------------------------------------------------------------- // // ----------------------------------------------------------------------------- @@ -364,7 +318,6 @@ { } - // ----------------------------------------------------------------------------- // // ----------------------------------------------------------------------------- @@ -376,7 +329,6 @@ { } - // ----------------------------------------------------------------------------- // // ----------------------------------------------------------------------------- @@ -387,7 +339,6 @@ { } - // ----------------------------------------------------------------------------- // // ----------------------------------------------------------------------------- @@ -398,7 +349,6 @@ { } - // ----------------------------------------------------------------------------- // // ----------------------------------------------------------------------------- @@ -409,7 +359,6 @@ { } - // ----------------------------------------------------------------------------- // // ----------------------------------------------------------------------------- @@ -419,18 +368,15 @@ { } - // ----------------------------------------------------------------------------- // // ----------------------------------------------------------------------------- // void CMusSipProfileHandler::InviteCanceled( - CSIPServerTransaction& /*aTransaction*/ ) + CSIPServerTransaction& /*aTransaction*/ ) { - MUS_LOG( "mus: [ENGINE] CMusSipProfileHandler::CSIPServerTransaction") } - // ----------------------------------------------------------------------------- // // ----------------------------------------------------------------------------- @@ -440,7 +386,6 @@ { } - // ----------------------------------------------------------------------------- // CMusSipProfileHandler::AlrEvent // From MSipProfileAlrObserver diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshengine/tsrc/ut_engine/BWINS/ut_musengineU.DEF --- a/mmsharing/mmshengine/tsrc/ut_engine/BWINS/ut_musengineU.DEF Thu Aug 19 09:51:39 2010 +0300 +++ b/mmsharing/mmshengine/tsrc/ut_engine/BWINS/ut_musengineU.DEF Tue Aug 31 15:12:07 2010 +0300 @@ -1,162 +1,3 @@ EXPORTS ?CreateTestSuiteL@@YAPAVMEUnitTest@@XZ @ 1 NONAME ; class MEUnitTest * CreateTestSuiteL(void) - ??1CRepository@@UAE@XZ @ 2 NONAME ; CRepository::~CRepository(void) - ?StartTransaction@CRepository@@QAEHW4TTransactionMode@1@@Z @ 3 NONAME ; int CRepository::StartTransaction(enum CRepository::TTransactionMode) - ?SetAudioRoutingObserver@CMusEngSession@@QAEXPAVMMusEngAudioRoutingObserver@@@Z @ 4 NONAME ; void CMusEngSession::SetAudioRoutingObserver(class MMusEngAudioRoutingObserver *) - ?DigitalZoomFactorL@CMceCameraSource@@QAEHXZ @ 5 NONAME ; int CMceCameraSource::DigitalZoomFactorL(void) - ?NewL@CCenRepNotifyHandler@@SAPAV1@AAVMCenRepNotifyHandlerCallback@@AAVCRepository@@@Z @ 6 NONAME ; class CCenRepNotifyHandler * CCenRepNotifyHandler::NewL(class MCenRepNotifyHandlerCallback &, class CRepository &) - ?SetClipL@CMusEngClipSession@@QAEXABVTDesC16@@@Z @ 7 NONAME ; void CMusEngClipSession::SetClipL(class TDesC16 const &) - ?GetCameraInfo@CMceCameraSource@@QBEXAAVTCameraInfo@@@Z @ 8 NONAME ; void CMceCameraSource::GetCameraInfo(class TCameraInfo &) const - ?NewLC@CRepository@@SAPAV1@VTUid@@@Z @ 9 NONAME ; class CRepository * CRepository::NewLC(class TUid) - ?IsMicMutedL@CMusEngSession@@QAEHXZ @ 10 NONAME ; int CMusEngSession::IsMicMutedL(void) - ?FastRewindL@CMusEngClipSession@@QAEXH@Z @ 11 NONAME ; void CMusEngClipSession::FastRewindL(int) - ?Create@CRepository@@QAEHKH@Z @ 12 NONAME ; int CRepository::Create(unsigned long, int) - ?UriType@TMusEngUriParser@@QAE?AW4TMusEngUriType@1@XZ @ 13 NONAME ; enum TMusEngUriParser::TMusEngUriType TMusEngUriParser::UriType(void) - ?ProfilesL@CSIPProfileRegistryBase@@QAEXABVTSIPProfileTypeInfo@@AAV?$RPointerArray@VCSIPProfile@@@@@Z @ 14 NONAME ; void CSIPProfileRegistryBase::ProfilesL(class TSIPProfileTypeInfo const &, class RPointerArray &) - ?Type@CSIPProfile@@QBEABVTSIPProfileTypeInfo@@XZ @ 15 NONAME ; class TSIPProfileTypeInfo const & CSIPProfile::Type(void) const - ?DurationL@CMusEngClipSession@@QAE?AVTTimeIntervalSeconds@@XZ @ 16 NONAME ; class TTimeIntervalSeconds CMusEngClipSession::DurationL(void) - ?Type@CMceMediaSource@@QBEIXZ @ 17 NONAME ; unsigned int CMceMediaSource::Type(void) const - ??0TMusEngUriParser@@QAE@ABVTDesC16@@@Z @ 18 NONAME ; TMusEngUriParser::TMusEngUriParser(class TDesC16 const &) - ?BrightnessL@CMceCameraSource@@QAEHXZ @ 19 NONAME ; int CMceCameraSource::BrightnessL(void) - ?Get@CRepository@@QAEHKAAVTDes16@@@Z @ 20 NONAME ; int CRepository::Get(unsigned long, class TDes16 &) - ?GetUri8L@TMusEngUriParser@@QAEPAVHBufC8@@XZ @ 21 NONAME ; class HBufC8 * TMusEngUriParser::GetUri8L(void) - ?NewLC@CSIPProfileRegistry@@SAPAV1@AAVCSIP@@AAVMSIPProfileRegistryObserver@@@Z @ 22 NONAME ; class CSIPProfileRegistry * CSIPProfileRegistry::NewLC(class CSIP &, class MSIPProfileRegistryObserver &) - ?MaxBrightnessL@CMusEngLiveSession@@QBEHXZ @ 23 NONAME ; int CMusEngLiveSession::MaxBrightnessL(void) const - ?OrientationL@CMusEngMceSession@@QAE?AW4TDisplayOrientation@1@XZ @ 24 NONAME ; enum CMusEngMceSession::TDisplayOrientation CMusEngMceSession::OrientationL(void) - ?EnableL@CSIPProfileRegistry@@QAEXAAVCSIPProfile@@AAVMSIPConnectionObserver@@@Z @ 25 NONAME ; void CSIPProfileRegistry::EnableL(class CSIPProfile &, class MSIPConnectionObserver &) - ?SetSupportedVideoCodecListL@CMusEngMceOutSession@@QAEXABVTDesC16@@@Z @ 26 NONAME ; void CMusEngMceOutSession::SetSupportedVideoCodecListL(class TDesC16 const &) - ?CamerasAvailable@CMceCameraSource@@QBEHXZ @ 27 NONAME ; int CMceCameraSource::CamerasAvailable(void) const - ?IsRecording@CMusEngLiveSession@@QAEHXZ @ 28 NONAME ; int CMusEngLiveSession::IsRecording(void) - ?IsEnabled@CSIPProfileRegistry@@QBEHABVCSIPProfile@@@Z @ 29 NONAME ; int CSIPProfileRegistry::IsEnabled(class CSIPProfile const &) const - ?NewL@DRMCommon@@SAPAV1@XZ @ 30 NONAME ; class DRMCommon * DRMCommon::NewL(void) - ?DisableL@CMceCameraSource@@UAEXXZ @ 31 NONAME ; void CMceCameraSource::DisableL(void) - ?IsProtectedFile@DRMCommon@@QAEHABVTDesC16@@AAH@Z @ 32 NONAME ; int DRMCommon::IsProtectedFile(class TDesC16 const &, int &) - ?CancelTranscodeL@CMusEngClipSession@@QAEXXZ @ 33 NONAME ; void CMusEngClipSession::CancelTranscodeL(void) - ?IsAudioRoutingHeadset@CMusEngSession@@QBEHXZ @ 34 NONAME ; int CMusEngSession::IsAudioRoutingHeadset(void) const - ?Disable@CSIPProfileRegistry@@QAEHAAVCSIPProfile@@@Z @ 35 NONAME ; int CSIPProfileRegistry::Disable(class CSIPProfile &) - ?BrightnessDefaultL@CMusEngLiveSession@@QAEXXZ @ 36 NONAME ; void CMusEngLiveSession::BrightnessDefaultL(void) - ?Delete@CRepository@@QAEHKKAAK@Z @ 37 NONAME ; int CRepository::Delete(unsigned long, unsigned long, unsigned long &) - ?CommitTransaction@CRepository@@QAEHAAK@Z @ 38 NONAME ; int CRepository::CommitTransaction(unsigned long &) - ?SetExposureL@CMceCameraSource@@QAEXW4TExposure@CCamera@@@Z @ 39 NONAME ; void CMceCameraSource::SetExposureL(enum CCamera::TExposure) - ?FastForwardL@CMusEngClipSession@@QAEXH@Z @ 40 NONAME ; void CMusEngClipSession::FastForwardL(int) - ?SetZoomL@CMusEngLiveSession@@QAEXH@Z @ 41 NONAME ; void CMusEngLiveSession::SetZoomL(int) - ?Set@CRepository@@QAEHKABVTDesC8@@@Z @ 42 NONAME ; int CRepository::Set(unsigned long, class TDesC8 const &) - ?NewL@CMusEngClipSession@@SAPAV1@ABVTRect@@AAVMMusEngSessionObserver@@AAVMMusEngOutSessionObserver@@AAVMMusEngClipSessionObserver@@I@Z @ 43 NONAME ; class CMusEngClipSession * CMusEngClipSession::NewL(class TRect const &, class MMusEngSessionObserver &, class MMusEngOutSessionObserver &, class MMusEngClipSessionObserver &, unsigned int) - ?InviteL@CMusEngMceOutSession@@QAEXABVTDesC16@@@Z @ 44 NONAME ; void CMusEngMceOutSession::InviteL(class TDesC16 const &) - ?GetParameter@CSIPProfile@@QBEHKAAPBVTDesC8@@@Z @ 45 NONAME ; int CSIPProfile::GetParameter(unsigned long, class TDesC8 const * &) const - ?IsLoudSpeakerEnabled@CMusEngSession@@QBEHXZ @ 46 NONAME ; int CMusEngSession::IsLoudSpeakerEnabled(void) const - ?StartListeningL@CCenRepNotifyHandler@@QAEXXZ @ 47 NONAME ; void CCenRepNotifyHandler::StartListeningL(void) - ?NewL@CSIPProfileRegistry@@SAPAV1@AAVCSIP@@AAVMSIPProfileRegistryObserver@@@Z @ 48 NONAME ; class CSIPProfileRegistry * CSIPProfileRegistry::NewL(class CSIP &, class MSIPProfileRegistryObserver &) - ?NewL@CMusEngReceiveSession@@SAPAV1@ABVTRect@@AAVMMusEngSessionObserver@@AAVMMusEngReceiveSessionObserver@@@Z @ 49 NONAME ; class CMusEngReceiveSession * CMusEngReceiveSession::NewL(class TRect const &, class MMusEngSessionObserver &, class MMusEngReceiveSessionObserver &) - ?ContainsAudioL@CMusEngMceSession@@QAEHXZ @ 50 NONAME ; int CMusEngMceSession::ContainsAudioL(void) - ?VolumeUpL@CMusEngMceSession@@UAEXXZ @ 51 NONAME ; void CMusEngMceSession::VolumeUpL(void) - ?IsPlayingL@CMusEngClipSession@@UAEHXZ @ 52 NONAME ; int CMusEngClipSession::IsPlayingL(void) - ?Get@CRepository@@QAEHKAAH@Z @ 53 NONAME ; int CRepository::Get(unsigned long, int &) - ?SupportedSecurityMechanismsL@CSIP@@QBEPAVCDesC8Array@@XZ @ 54 NONAME ; class CDesC8Array * CSIP::SupportedSecurityMechanismsL(void) const - ?PlayL@CMusEngClipSession@@UAEXXZ @ 55 NONAME ; void CMusEngClipSession::PlayL(void) - ?PauseL@CMusEngLiveSession@@UAEXXZ @ 56 NONAME ; void CMusEngLiveSession::PauseL(void) - ?GetSessionTime@CMusEngMceSession@@QBE?AVTTimeIntervalSeconds@@XZ @ 57 NONAME ; class TTimeIntervalSeconds CMusEngMceSession::GetSessionTime(void) const - ?Rect@CMusEngSession@@QBE?AVTRect@@XZ @ 58 NONAME ; class TRect CMusEngSession::Rect(void) const - ?Disconnect@DRMCommon@@QAEHXZ @ 59 NONAME ; int DRMCommon::Disconnect(void) - ?FindL@CRepository@@QAEHKKAAV?$RArray@K@@@Z @ 60 NONAME ; int CRepository::FindL(unsigned long, unsigned long, class RArray &) - ?SetBrightnessL@CMusEngLiveSession@@QBEXH@Z @ 61 NONAME ; void CMusEngLiveSession::SetBrightnessL(int) const - ?IsAudioRoutingLoudSpeaker@CMusEngSession@@QBEHXZ @ 62 NONAME ; int CMusEngSession::IsAudioRoutingLoudSpeaker(void) const - ?NewLC@CMceCameraSource@@SAPAV1@AAVCMceManager@@@Z @ 63 NONAME ; class CMceCameraSource * CMceCameraSource::NewLC(class CMceManager &) - ?ProfilesL@CSIPProfileRegistryBase@@QAEXAAV?$RPointerArray@VCSIPProfile@@@@@Z @ 64 NONAME ; void CSIPProfileRegistryBase::ProfilesL(class RPointerArray &) - ?ZoomOutL@CMusEngLiveSession@@QAEXXZ @ 65 NONAME ; void CMusEngLiveSession::ZoomOutL(void) - ?ConnectionActive@CMusEngMceSession@@QBEHXZ @ 66 NONAME ; int CMusEngMceSession::ConnectionActive(void) const - ?AudioRoutingCanBeChanged@CMusEngSession@@QBEHXZ @ 67 NONAME ; int CMusEngSession::AudioRoutingCanBeChanged(void) const - ?GetParameter@CSIPProfile@@QBEHKAAH@Z @ 68 NONAME ; int CSIPProfile::GetParameter(unsigned long, int &) const - ?SetWhiteBalanceL@CMceCameraSource@@QAEXW4TWhiteBalance@CCamera@@@Z @ 69 NONAME ; void CMceCameraSource::SetWhiteBalanceL(enum CCamera::TWhiteBalance) - ?RecordL@CMusEngLiveSession@@QAEXH@Z @ 70 NONAME ; void CMusEngLiveSession::RecordL(int) - ??1CCenRepNotifyHandler@@UAE@XZ @ 71 NONAME ; CCenRepNotifyHandler::~CCenRepNotifyHandler(void) - ?FindEqL@CRepository@@QAEHKKABVTDesC8@@AAV?$RArray@K@@@Z @ 72 NONAME ; int CRepository::FindEqL(unsigned long, unsigned long, class TDesC8 const &, class RArray &) - ?ZoomFactorL@CMceCameraSource@@QAEHXZ @ 73 NONAME ; int CMceCameraSource::ZoomFactorL(void) - ?TerminateL@CMusEngMceSession@@QAEXXZ @ 74 NONAME ; void CMusEngMceSession::TerminateL(void) - ?SetZoomFactorL@CMceCameraSource@@QAEXH@Z @ 75 NONAME ; void CMceCameraSource::SetZoomFactorL(int) - ?SIP@CSIPProfileRegistry@@QBEAAVCSIP@@XZ @ 76 NONAME ; class CSIP & CSIPProfileRegistry::SIP(void) const - ??1CMceMediaSource@@UAE@XZ @ 77 NONAME ; CMceMediaSource::~CMceMediaSource(void) - ?ParseUriL@TMusEngUriParser@@QAEXXZ @ 78 NONAME ; void TMusEngUriParser::ParseUriL(void) - ?ProfileL@CSIPProfileRegistryBase@@QAEPAVCSIPProfile@@K@Z @ 79 NONAME ; class CSIPProfile * CSIPProfileRegistryBase::ProfileL(unsigned long) - ?EnableLoudspeakerL@CMusEngSession@@QAEXHH@Z @ 80 NONAME ; void CMusEngSession::EnableLoudspeakerL(int, int) - ?CancelInviteL@CMusEngMceOutSession@@QAEXXZ @ 81 NONAME ; void CMusEngMceOutSession::CancelInviteL(void) - ?VolumeL@CMusEngSession@@QBEHXZ @ 82 NONAME ; int CMusEngSession::VolumeL(void) const - ?StopListening@CCenRepNotifyHandler@@QAEXXZ @ 83 NONAME ; void CCenRepNotifyHandler::StopListening(void) - ??1CSIPProfileRegistryBase@@UAE@XZ @ 84 NONAME ; CSIPProfileRegistryBase::~CSIPProfileRegistryBase(void) - ?ZoomDefaultL@CMusEngLiveSession@@QAEXXZ @ 85 NONAME ; void CMusEngLiveSession::ZoomDefaultL(void) - ?GetUri16L@TMusEngUriParser@@QAEPAVHBufC16@@H@Z @ 86 NONAME ; class HBufC16 * TMusEngUriParser::GetUri16L(int) - ?NewL@CSIP@@SAPAV1@ABVTUid@@AAVMSIPObserver@@@Z @ 87 NONAME ; class CSIP * CSIP::NewL(class TUid const &, class MSIPObserver &) - ??1CMceCameraSource@@UAE@XZ @ 88 NONAME ; CMceCameraSource::~CMceCameraSource(void) - ?EnableL@CMceCameraSource@@UAEXXZ @ 89 NONAME ; void CMceCameraSource::EnableL(void) - ?VolumeUpL@CMusEngSession@@UAEXXZ @ 90 NONAME ; void CMusEngSession::VolumeUpL(void) - ?GetParameter@CSIPProfile@@QBEHKAAPBVMDesC8Array@@@Z @ 91 NONAME ; int CSIPProfile::GetParameter(unsigned long, class MDesC8Array const * &) const - ?NewL@CRepository@@SAPAV1@VTUid@@@Z @ 92 NONAME ; class CRepository * CRepository::NewL(class TUid) - ?SetVolumeChangeObserver@CMusEngSession@@QAEXPAVMMusEngVolumeChangeObserver@@@Z @ 93 NONAME ; void CMusEngSession::SetVolumeChangeObserver(class MMusEngVolumeChangeObserver *) - ?GetParameter@CSIPProfile@@QBEHKAAK@Z @ 94 NONAME ; int CSIPProfile::GetParameter(unsigned long, unsigned long &) const - ?IsMutedL@CMusEngMceSession@@QAEHXZ @ 95 NONAME ; int CMusEngMceSession::IsMutedL(void) - ??1CSIP@@UAE@XZ @ 96 NONAME ; CSIP::~CSIP(void) - ?Set@CRepository@@QAEHKH@Z @ 97 NONAME ; int CRepository::Set(unsigned long, int) - ?AcceptInvitationL@CMusEngReceiveSession@@QAEXABH@Z @ 98 NONAME ; void CMusEngReceiveSession::AcceptInvitationL(int const &) - ?CurrentZoomL@CMusEngLiveSession@@QBEHXZ @ 99 NONAME ; int CMusEngLiveSession::CurrentZoomL(void) const - ?DisallowMigrationL@CSipProfileAlrController@@QAEXKK@Z @ 100 NONAME ; void CSipProfileAlrController::DisallowMigrationL(unsigned long, unsigned long) - ?MinBrightnessL@CMusEngLiveSession@@QBEHXZ @ 101 NONAME ; int CMusEngLiveSession::MinBrightnessL(void) const - ??1CSIPProfile@@UAE@XZ @ 102 NONAME ; CSIPProfile::~CSIPProfile(void) - ?NewL@CMusEngLiveSession@@SAPAV1@ABVTRect@@AAVMMusEngSessionObserver@@AAVMMusEngOutSessionObserver@@AAVMMusEngLiveSessionObserver@@I@Z @ 103 NONAME ; class CMusEngLiveSession * CMusEngLiveSession::NewL(class TRect const &, class MMusEngSessionObserver &, class MMusEngOutSessionObserver &, class MMusEngLiveSessionObserver &, unsigned int) - ?UnmuteL@CMusEngMceSession@@UAEXXZ @ 104 NONAME ; void CMusEngMceSession::UnmuteL(void) - ?Connect@DRMCommon@@QAEHXZ @ 105 NONAME ; int DRMCommon::Connect(void) - ?NewL@CMceCameraSource@@SAPAV1@AAVCMceManager@@@Z @ 106 NONAME ; class CMceCameraSource * CMceCameraSource::NewL(class CMceManager &) - ?MinZoomL@CMusEngLiveSession@@QBEHXZ @ 107 NONAME ; int CMusEngLiveSession::MinZoomL(void) const - ?Set@CRepository@@QAEHKABVTDesC16@@@Z @ 108 NONAME ; int CRepository::Set(unsigned long, class TDesC16 const &) - ?VolumeDownL@CMusEngSession@@UAEXXZ @ 109 NONAME ; void CMusEngSession::VolumeDownL(void) - ?ExposureL@CMceCameraSource@@QAE?AW4TExposure@CCamera@@XZ @ 110 NONAME ; enum CCamera::TExposure CMceCameraSource::ExposureL(void) - ?MuteL@CMusEngMceSession@@UAEXXZ @ 111 NONAME ; void CMusEngMceSession::MuteL(void) - ?NewLC@CCenRepNotifyHandler@@SAPAV1@AAVMCenRepNotifyHandlerCallback@@AAVCRepository@@@Z @ 112 NONAME ; class CCenRepNotifyHandler * CCenRepNotifyHandler::NewLC(class MCenRepNotifyHandlerCallback &, class CRepository &) - ?SetVolumeL@CMusEngSession@@UAEXH@Z @ 113 NONAME ; void CMusEngSession::SetVolumeL(int) - ?DecreaseBrightnessL@CMusEngLiveSession@@QAEXXZ @ 114 NONAME ; void CMusEngLiveSession::DecreaseBrightnessL(void) - ?LastRegistrationError@CSIPProfileRegistryBase@@QBEHABVCSIPProfile@@@Z @ 115 NONAME ; int CSIPProfileRegistryBase::LastRegistrationError(class CSIPProfile const &) const - ?SetCameraIndexL@CMceCameraSource@@QAEXH@Z @ 116 NONAME ; void CMceCameraSource::SetCameraIndexL(int) - ?PauseL@CMusEngClipSession@@UAEXXZ @ 117 NONAME ; void CMusEngClipSession::PauseL(void) - ?Connection@CSIP@@QBEPAVCSIPConnection@@K@Z @ 118 NONAME ; class CSIPConnection * CSIP::Connection(unsigned long) const - ?SetRectL@CMusEngSession@@QAEXABVTRect@@@Z @ 119 NONAME ; void CMusEngSession::SetRectL(class TRect const &) - ?Create@CRepository@@QAEHKABVTDesC8@@@Z @ 120 NONAME ; int CRepository::Create(unsigned long, class TDesC8 const &) - ?RefreshIapAvailabilityL@CSipProfileAlrController@@QAEXK@Z @ 121 NONAME ; void CSipProfileAlrController::RefreshIapAvailabilityL(unsigned long) - ?DefaultProfileL@CSIPProfileRegistryBase@@QAEPAVCSIPProfile@@XZ @ 122 NONAME ; class CSIPProfile * CSIPProfileRegistryBase::DefaultProfileL(void) - ?BrightnessAutoL@CMusEngLiveSession@@QAEXXZ @ 123 NONAME ; void CMusEngLiveSession::BrightnessAutoL(void) - ?IncreaseBrightnessL@CMusEngLiveSession@@QAEXXZ @ 124 NONAME ; void CMusEngLiveSession::IncreaseBrightnessL(void) - ?ProfilesL@CSIPProfileRegistryBase@@QAEXABVTDesC8@@AAV?$RPointerArray@VCSIPProfile@@@@@Z @ 125 NONAME ; void CSIPProfileRegistryBase::ProfilesL(class TDesC8 const &, class RPointerArray &) - ??1CSIPProfileRegistry@@UAE@XZ @ 126 NONAME ; CSIPProfileRegistry::~CSIPProfileRegistry(void) - ?SetOrientationL@CMusEngMceSession@@QAEXW4TDisplayOrientation@1@@Z @ 127 NONAME ; void CMusEngMceSession::SetOrientationL(enum CMusEngMceSession::TDisplayOrientation) - ?Get@CRepository@@QAEHKAAVTDes8@@@Z @ 128 NONAME ; int CRepository::Get(unsigned long, class TDes8 &) - ?ConstructL@DRMCommon@@IAEXXZ @ 129 NONAME ; void DRMCommon::ConstructL(void) - ?ContrastL@CMceCameraSource@@QAEHXZ @ 130 NONAME ; int CMceCameraSource::ContrastL(void) - ?NegotiatedSecurityMechanismL@CSIP@@QAEPAVHBufC8@@ABVTDesC8@@@Z @ 131 NONAME ; class HBufC8 * CSIP::NegotiatedSecurityMechanismL(class TDesC8 const &) - ?ZoomInL@CMusEngLiveSession@@QAEXXZ @ 132 NONAME ; void CMusEngLiveSession::ZoomInL(void) - ?NewL@CSipProfileAlrController@@SAPAV1@AAVCSIPProfileRegistryBase@@AAVMSipProfileAlrObserver@@@Z @ 133 NONAME ; class CSipProfileAlrController * CSipProfileAlrController::NewL(class CSIPProfileRegistryBase &, class MSipProfileAlrObserver &) - ?SetVolumeL@CMusEngMceSession@@UAEXH@Z @ 134 NONAME ; void CMusEngMceSession::SetVolumeL(int) - ?Stop@CActiveScheduler@@SAXXZ @ 135 NONAME ; void CActiveScheduler::Stop(void) - ?IsDisplayEnabledL@CMusEngMceSession@@QAEHXZ @ 136 NONAME ; int CMusEngMceSession::IsDisplayEnabledL(void) - ?TranscodeL@CMusEngClipSession@@QAEXABV?$TBuf@$0BAA@@@@Z @ 137 NONAME ; void CMusEngClipSession::TranscodeL(class TBuf<256> const &) - ?MaxZoomL@CMusEngLiveSession@@QBEHXZ @ 138 NONAME ; int CMusEngLiveSession::MaxZoomL(void) const - ?IsSigCompSupportedL@CSIP@@QBEHXZ @ 139 NONAME ; int CSIP::IsSigCompSupportedL(void) const - ?NewLC@CSIP@@SAPAV1@ABVTUid@@AAVMSIPObserver@@@Z @ 140 NONAME ; class CSIP * CSIP::NewLC(class TUid const &, class MSIPObserver &) - ?VolumeDownL@CMusEngMceSession@@UAEXXZ @ 141 NONAME ; void CMusEngMceSession::VolumeDownL(void) - ?AllowMigrationL@CSipProfileAlrController@@QAEXKK@Z @ 142 NONAME ; void CSipProfileAlrController::AllowMigrationL(unsigned long, unsigned long) - ?PositionL@CMusEngClipSession@@QAE?AVTTimeIntervalSeconds@@XZ @ 143 NONAME ; class TTimeIntervalSeconds CMusEngClipSession::PositionL(void) - ?SetContrastL@CMceCameraSource@@QAEXH@Z @ 144 NONAME ; void CMceCameraSource::SetContrastL(int) - ?WhiteBalanceL@CMceCameraSource@@QAE?AW4TWhiteBalance@CCamera@@XZ @ 145 NONAME ; enum CCamera::TWhiteBalance CMceCameraSource::WhiteBalanceL(void) - ??1DRMCommon@@UAE@XZ @ 146 NONAME ; DRMCommon::~DRMCommon(void) - ?MuteMicL@CMusEngSession@@QAEXH@Z @ 147 NONAME ; void CMusEngSession::MuteMicL(int) - ?NewL@CMusEngLiveSession@@SAPAV1@ABVTDesC16@@ABVTRect@@AAVMMusEngSessionObserver@@AAVMMusEngOutSessionObserver@@AAVMMusEngLiveSessionObserver@@I@Z @ 148 NONAME ; class CMusEngLiveSession * CMusEngLiveSession::NewL(class TDesC16 const &, class TRect const &, class MMusEngSessionObserver &, class MMusEngOutSessionObserver &, class MMusEngLiveSessionObserver &, unsigned int) - ?HandleNotifyGeneric@MCenRepNotifyHandlerCallback@@UAEXK@Z @ 149 NONAME ; void MCenRepNotifyHandlerCallback::HandleNotifyGeneric(unsigned long) - ?EnableDisplayL@CMusEngMceSession@@UAEXH@Z @ 150 NONAME ; void CMusEngMceSession::EnableDisplayL(int) - ??0DRMCommon@@IAE@XZ @ 151 NONAME ; DRMCommon::DRMCommon(void) - ?CurrentBrightnessL@CMusEngLiveSession@@QBEHXZ @ 152 NONAME ; int CMusEngLiveSession::CurrentBrightnessL(void) const - ?SupportedProfileTypesL@CSIPProfileRegistryBase@@QAEXAAV?$RArray@VTSIPProfileTypeInfo@@@@@Z @ 153 NONAME ; void CSIPProfileRegistryBase::SupportedProfileTypesL(class RArray &) - ?Start@CActiveScheduler@@SAXXZ @ 154 NONAME ; void CActiveScheduler::Start(void) - ?SetBrightnessL@CMceCameraSource@@QAEXH@Z @ 155 NONAME ; void CMceCameraSource::SetBrightnessL(int) - ?SetDigitalZoomFactorL@CMceCameraSource@@QAEXH@Z @ 156 NONAME ; void CMceCameraSource::SetDigitalZoomFactorL(int) - ?IsPlayingL@CMusEngLiveSession@@UAEHXZ @ 157 NONAME ; int CMusEngLiveSession::IsPlayingL(void) - ?IsEnabled@CMceMediaSource@@QBEHXZ @ 158 NONAME ; int CMceMediaSource::IsEnabled(void) const - ?PlayL@CMusEngLiveSession@@UAEXXZ @ 159 NONAME ; void CMusEngLiveSession::PlayL(void) - ?SetPositionL@CMusEngClipSession@@QAEXABVTTimeIntervalSeconds@@@Z @ 160 NONAME ; void CMusEngClipSession::SetPositionL(class TTimeIntervalSeconds const &) diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshengine/tsrc/ut_engine/eabi/ut_musengineu.def --- a/mmsharing/mmshengine/tsrc/ut_engine/eabi/ut_musengineu.def Thu Aug 19 09:51:39 2010 +0300 +++ b/mmsharing/mmshengine/tsrc/ut_engine/eabi/ut_musengineu.def Tue Aug 31 15:12:07 2010 +0300 @@ -1,224 +1,2 @@ EXPORTS _Z16CreateTestSuiteLv @ 1 NONAME - _ZN11CRepository16StartTransactionENS_16TTransactionModeE @ 2 NONAME - _ZN11CRepository17CommitTransactionERm @ 3 NONAME - _ZN11CRepository3GetEmR5TDes8 @ 4 NONAME - _ZN11CRepository3GetEmR6TDes16 @ 5 NONAME - _ZN11CRepository3GetEmRi @ 6 NONAME - _ZN11CRepository3SetEmRK6TDesC8 @ 7 NONAME - _ZN11CRepository3SetEmRK7TDesC16 @ 8 NONAME - _ZN11CRepository3SetEmi @ 9 NONAME - _ZN11CRepository4NewLE4TUid @ 10 NONAME - _ZN11CRepository5FindLEmmR6RArrayImE @ 11 NONAME - _ZN11CRepository5NewLCE4TUid @ 12 NONAME - _ZN11CRepository6CreateEmRK6TDesC8 @ 13 NONAME - _ZN11CRepository6CreateEmi @ 14 NONAME - _ZN11CRepository6DeleteEmmRm @ 15 NONAME - _ZN11CRepository7FindEqLEmmRK6TDesC8R6RArrayImE @ 16 NONAME - _ZN11CRepositoryD0Ev @ 17 NONAME - _ZN11CRepositoryD1Ev @ 18 NONAME - _ZN11CRepositoryD2Ev @ 19 NONAME - _ZN11CSIPProfileD0Ev @ 20 NONAME - _ZN11CSIPProfileD1Ev @ 21 NONAME - _ZN11CSIPProfileD2Ev @ 22 NONAME - _ZN14CMusEngSession10SetVolumeLEi @ 23 NONAME - _ZN14CMusEngSession11IsMicMutedLEv @ 24 NONAME - _ZN14CMusEngSession11VolumeDownLEv @ 25 NONAME - _ZN14CMusEngSession18EnableLoudspeakerLEii @ 26 NONAME - _ZN14CMusEngSession23SetAudioRoutingObserverEP27MMusEngAudioRoutingObserver @ 27 NONAME - _ZN14CMusEngSession23SetVolumeChangeObserverEP27MMusEngVolumeChangeObserver @ 28 NONAME - _ZN14CMusEngSession8MuteMicLEi @ 29 NONAME - _ZN14CMusEngSession8SetRectLERK5TRect @ 30 NONAME - _ZN14CMusEngSession9VolumeUpLEv @ 31 NONAME - _ZN15CMceMediaSourceD0Ev @ 32 NONAME - _ZN15CMceMediaSourceD1Ev @ 33 NONAME - _ZN15CMceMediaSourceD2Ev @ 34 NONAME - _ZN16CMceCameraSource11BrightnessLEv @ 35 NONAME - _ZN16CMceCameraSource11ZoomFactorLEv @ 36 NONAME - _ZN16CMceCameraSource12SetContrastLEi @ 37 NONAME - _ZN16CMceCameraSource12SetExposureLEN7CCamera9TExposureE @ 38 NONAME - _ZN16CMceCameraSource13WhiteBalanceLEv @ 39 NONAME - _ZN16CMceCameraSource14SetBrightnessLEi @ 40 NONAME - _ZN16CMceCameraSource14SetZoomFactorLEi @ 41 NONAME - _ZN16CMceCameraSource15SetCameraIndexLEi @ 42 NONAME - _ZN16CMceCameraSource16SetWhiteBalanceLEN7CCamera13TWhiteBalanceE @ 43 NONAME - _ZN16CMceCameraSource18DigitalZoomFactorLEv @ 44 NONAME - _ZN16CMceCameraSource21SetDigitalZoomFactorLEi @ 45 NONAME - _ZN16CMceCameraSource4NewLER11CMceManager @ 46 NONAME - _ZN16CMceCameraSource5NewLCER11CMceManager @ 47 NONAME - _ZN16CMceCameraSource7EnableLEv @ 48 NONAME - _ZN16CMceCameraSource8DisableLEv @ 49 NONAME - _ZN16CMceCameraSource9ContrastLEv @ 50 NONAME - _ZN16CMceCameraSource9ExposureLEv @ 51 NONAME - _ZN16CMceCameraSourceD0Ev @ 52 NONAME - _ZN16CMceCameraSourceD1Ev @ 53 NONAME - _ZN16CMceCameraSourceD2Ev @ 54 NONAME - _ZN16TMusEngUriParser7UriTypeEv @ 55 NONAME - _ZN16TMusEngUriParser8GetUri8LEv @ 56 NONAME - _ZN16TMusEngUriParser9GetUri16LEi @ 57 NONAME - _ZN16TMusEngUriParser9ParseUriLEv @ 58 NONAME - _ZN16TMusEngUriParserC1ERK7TDesC16 @ 59 NONAME - _ZN16TMusEngUriParserC2ERK7TDesC16 @ 60 NONAME - _ZN17CMusEngMceSession10SetVolumeLEi @ 61 NONAME - _ZN17CMusEngMceSession10TerminateLEv @ 62 NONAME - _ZN17CMusEngMceSession11VolumeDownLEv @ 63 NONAME - _ZN17CMusEngMceSession12OrientationLEv @ 64 NONAME - _ZN17CMusEngMceSession14ContainsAudioLEv @ 65 NONAME - _ZN17CMusEngMceSession14EnableDisplayLEi @ 66 NONAME - _ZN17CMusEngMceSession15SetOrientationLENS_19TDisplayOrientationE @ 67 NONAME - _ZN17CMusEngMceSession17IsDisplayEnabledLEv @ 68 NONAME - _ZN17CMusEngMceSession5MuteLEv @ 69 NONAME - _ZN17CMusEngMceSession7UnmuteLEv @ 70 NONAME - _ZN17CMusEngMceSession8IsMutedLEv @ 71 NONAME - _ZN17CMusEngMceSession9VolumeUpLEv @ 72 NONAME - _ZN18CMusEngClipSession10IsPlayingLEv @ 73 NONAME - _ZN18CMusEngClipSession10TranscodeLERK4TBufILi256EE @ 74 NONAME - _ZN18CMusEngClipSession11FastRewindLEi @ 75 NONAME - _ZN18CMusEngClipSession12FastForwardLEi @ 76 NONAME - _ZN18CMusEngClipSession12SetPositionLERK20TTimeIntervalSeconds @ 77 NONAME - _ZN18CMusEngClipSession16CancelTranscodeLEv @ 78 NONAME - _ZN18CMusEngClipSession4NewLERK5TRectR22MMusEngSessionObserverR25MMusEngOutSessionObserverR26MMusEngClipSessionObserverj @ 79 NONAME - _ZN18CMusEngClipSession5PlayLEv @ 80 NONAME - _ZN18CMusEngClipSession6PauseLEv @ 81 NONAME - _ZN18CMusEngClipSession8SetClipLERK7TDesC16 @ 82 NONAME - _ZN18CMusEngClipSession9DurationLEv @ 83 NONAME - _ZN18CMusEngClipSession9PositionLEv @ 84 NONAME - _ZN18CMusEngLiveSession10IsPlayingLEv @ 85 NONAME - _ZN18CMusEngLiveSession11IsRecordingEv @ 86 NONAME - _ZN18CMusEngLiveSession12ZoomDefaultLEv @ 87 NONAME - _ZN18CMusEngLiveSession15BrightnessAutoLEv @ 88 NONAME - _ZN18CMusEngLiveSession18BrightnessDefaultLEv @ 89 NONAME - _ZN18CMusEngLiveSession19DecreaseBrightnessLEv @ 90 NONAME - _ZN18CMusEngLiveSession19IncreaseBrightnessLEv @ 91 NONAME - _ZN18CMusEngLiveSession4NewLERK5TRectR22MMusEngSessionObserverR25MMusEngOutSessionObserverR26MMusEngLiveSessionObserverj @ 92 NONAME - _ZN18CMusEngLiveSession4NewLERK7TDesC16RK5TRectR22MMusEngSessionObserverR25MMusEngOutSessionObserverR26MMusEngLiveSessionObserverj @ 93 NONAME - _ZN18CMusEngLiveSession5PlayLEv @ 94 NONAME - _ZN18CMusEngLiveSession6PauseLEv @ 95 NONAME - _ZN18CMusEngLiveSession7RecordLEi @ 96 NONAME - _ZN18CMusEngLiveSession7ZoomInLEv @ 97 NONAME - _ZN18CMusEngLiveSession8SetZoomLEi @ 98 NONAME - _ZN18CMusEngLiveSession8ZoomOutLEv @ 99 NONAME - _ZN19CSIPProfileRegistry4NewLER4CSIPR27MSIPProfileRegistryObserver @ 100 NONAME - _ZN19CSIPProfileRegistry5NewLCER4CSIPR27MSIPProfileRegistryObserver @ 101 NONAME - _ZN19CSIPProfileRegistry7DisableER11CSIPProfile @ 102 NONAME - _ZN19CSIPProfileRegistry7EnableLER11CSIPProfileR22MSIPConnectionObserver @ 103 NONAME - _ZN19CSIPProfileRegistryD0Ev @ 104 NONAME - _ZN19CSIPProfileRegistryD1Ev @ 105 NONAME - _ZN19CSIPProfileRegistryD2Ev @ 106 NONAME - _ZN20CCenRepNotifyHandler13StopListeningEv @ 107 NONAME - _ZN20CCenRepNotifyHandler15StartListeningLEv @ 108 NONAME - _ZN20CCenRepNotifyHandler4NewLER28MCenRepNotifyHandlerCallbackR11CRepository @ 109 NONAME - _ZN20CCenRepNotifyHandler5NewLCER28MCenRepNotifyHandlerCallbackR11CRepository @ 110 NONAME - _ZN20CCenRepNotifyHandlerD0Ev @ 111 NONAME - _ZN20CCenRepNotifyHandlerD1Ev @ 112 NONAME - _ZN20CCenRepNotifyHandlerD2Ev @ 113 NONAME - _ZN20CMusEngMceOutSession13CancelInviteLEv @ 114 NONAME - _ZN20CMusEngMceOutSession27SetSupportedVideoCodecListLERK7TDesC16 @ 115 NONAME - _ZN20CMusEngMceOutSession7InviteLERK7TDesC16 @ 116 NONAME - _ZN21CMusEngReceiveSession17AcceptInvitationLERKi @ 117 NONAME - _ZN21CMusEngReceiveSession4NewLERK5TRectR22MMusEngSessionObserverR29MMusEngReceiveSessionObserver @ 118 NONAME - _ZN23CSIPProfileRegistryBase15DefaultProfileLEv @ 119 NONAME - _ZN23CSIPProfileRegistryBase22SupportedProfileTypesLER6RArrayI19TSIPProfileTypeInfoE @ 120 NONAME - _ZN23CSIPProfileRegistryBase8ProfileLEm @ 121 NONAME - _ZN23CSIPProfileRegistryBase9ProfilesLER13RPointerArrayI11CSIPProfileE @ 122 NONAME - _ZN23CSIPProfileRegistryBase9ProfilesLERK19TSIPProfileTypeInfoR13RPointerArrayI11CSIPProfileE @ 123 NONAME - _ZN23CSIPProfileRegistryBase9ProfilesLERK6TDesC8R13RPointerArrayI11CSIPProfileE @ 124 NONAME - _ZN23CSIPProfileRegistryBaseD0Ev @ 125 NONAME - _ZN23CSIPProfileRegistryBaseD1Ev @ 126 NONAME - _ZN23CSIPProfileRegistryBaseD2Ev @ 127 NONAME - _ZN28MCenRepNotifyHandlerCallback19HandleNotifyGenericEm @ 128 NONAME - _ZN4CSIP28NegotiatedSecurityMechanismLERK6TDesC8 @ 129 NONAME - _ZN4CSIP4NewLERK4TUidR12MSIPObserver @ 130 NONAME - _ZN4CSIP5NewLCERK4TUidR12MSIPObserver @ 131 NONAME - _ZN4CSIPD0Ev @ 132 NONAME - _ZN4CSIPD1Ev @ 133 NONAME - _ZN4CSIPD2Ev @ 134 NONAME - _ZN9DRMCommon10ConstructLEv @ 135 NONAME - _ZN9DRMCommon10DisconnectEv @ 136 NONAME - _ZN9DRMCommon15IsProtectedFileERK7TDesC16Ri @ 137 NONAME - _ZN9DRMCommon4NewLEv @ 138 NONAME - _ZN9DRMCommon7ConnectEv @ 139 NONAME - _ZN9DRMCommonC1Ev @ 140 NONAME - _ZN9DRMCommonC2Ev @ 141 NONAME - _ZN9DRMCommonD0Ev @ 142 NONAME - _ZN9DRMCommonD1Ev @ 143 NONAME - _ZN9DRMCommonD2Ev @ 144 NONAME - _ZNK11CSIPProfile12GetParameterEmRPK11MDesC8Array @ 145 NONAME - _ZNK11CSIPProfile12GetParameterEmRPK6TDesC8 @ 146 NONAME - _ZNK11CSIPProfile12GetParameterEmRi @ 147 NONAME - _ZNK11CSIPProfile12GetParameterEmRm @ 148 NONAME - _ZNK11CSIPProfile4TypeEv @ 149 NONAME - _ZNK14CMusEngSession20IsLoudSpeakerEnabledEv @ 150 NONAME - _ZNK14CMusEngSession21IsAudioRoutingHeadsetEv @ 151 NONAME - _ZNK14CMusEngSession24AudioRoutingCanBeChangedEv @ 152 NONAME - _ZNK14CMusEngSession25IsAudioRoutingLoudSpeakerEv @ 153 NONAME - _ZNK14CMusEngSession4RectEv @ 154 NONAME - _ZNK14CMusEngSession7VolumeLEv @ 155 NONAME - _ZNK15CMceMediaSource4TypeEv @ 156 NONAME - _ZNK15CMceMediaSource9IsEnabledEv @ 157 NONAME - _ZNK16CMceCameraSource13GetCameraInfoER11TCameraInfo @ 158 NONAME - _ZNK16CMceCameraSource16CamerasAvailableEv @ 159 NONAME - _ZNK17CMusEngMceSession14GetSessionTimeEv @ 160 NONAME - _ZNK17CMusEngMceSession16ConnectionActiveEv @ 161 NONAME - _ZNK18CMusEngLiveSession12CurrentZoomLEv @ 162 NONAME - _ZNK18CMusEngLiveSession14MaxBrightnessLEv @ 163 NONAME - _ZNK18CMusEngLiveSession14MinBrightnessLEv @ 164 NONAME - _ZNK18CMusEngLiveSession14SetBrightnessLEi @ 165 NONAME - _ZNK18CMusEngLiveSession18CurrentBrightnessLEv @ 166 NONAME - _ZNK18CMusEngLiveSession8MaxZoomLEv @ 167 NONAME - _ZNK18CMusEngLiveSession8MinZoomLEv @ 168 NONAME - _ZNK19CSIPProfileRegistry3SIPEv @ 169 NONAME - _ZNK19CSIPProfileRegistry9IsEnabledERK11CSIPProfile @ 170 NONAME - _ZNK23CSIPProfileRegistryBase21LastRegistrationErrorERK11CSIPProfile @ 171 NONAME - _ZNK4CSIP10ConnectionEm @ 172 NONAME - _ZNK4CSIP19IsSigCompSupportedLEv @ 173 NONAME - _ZNK4CSIP28SupportedSecurityMechanismsLEv @ 174 NONAME - _ZTI11CRepository @ 175 NONAME - _ZTI11CSIPProfile @ 176 NONAME - _ZTI14CMusEngSession @ 177 NONAME - _ZTI15CMceMediaSource @ 178 NONAME - _ZTI16CMceCameraSource @ 179 NONAME - _ZTI17CMusEngMceSession @ 180 NONAME - _ZTI18CMusEngClipSession @ 181 NONAME - _ZTI18CMusEngLiveSession @ 182 NONAME - _ZTI19CMusEngObserverStub @ 183 NONAME - _ZTI19CSIPProfileRegistry @ 184 NONAME - _ZTI20CCenRepNotifyHandler @ 185 NONAME - _ZTI20CMusEngMceOutSession @ 186 NONAME - _ZTI21CMusEngReceiveSession @ 187 NONAME - _ZTI21CMusEngTelephoneUtils @ 188 NONAME - _ZTI21CMusSipProfileHandler @ 189 NONAME - _ZTI22CSIPProfileBehaviorTls @ 190 NONAME - _ZTI22CTelephonyAudioRouting @ 191 NONAME - _ZTI23CSIPProfileRegistryBase @ 192 NONAME - _ZTI24CSipProfileAlrController @ 193 NONAME - _ZTI27CMusEngSessionDurationTimer @ 194 NONAME - _ZTI28MCenRepNotifyHandlerCallback @ 195 NONAME - _ZTI4CSIP @ 196 NONAME - _ZTI9DRMCommon @ 197 NONAME - _ZTV11CRepository @ 198 NONAME - _ZTV11CSIPProfile @ 199 NONAME - _ZTV14CMusEngSession @ 200 NONAME - _ZTV15CMceMediaSource @ 201 NONAME - _ZTV16CMceCameraSource @ 202 NONAME - _ZTV17CMusEngMceSession @ 203 NONAME - _ZTV18CMusEngClipSession @ 204 NONAME - _ZTV18CMusEngLiveSession @ 205 NONAME - _ZTV19CMusEngObserverStub @ 206 NONAME - _ZTV19CSIPProfileRegistry @ 207 NONAME - _ZTV20CCenRepNotifyHandler @ 208 NONAME - _ZTV20CMusEngMceOutSession @ 209 NONAME - _ZTV21CMusEngReceiveSession @ 210 NONAME - _ZTV21CMusEngTelephoneUtils @ 211 NONAME - _ZTV21CMusSipProfileHandler @ 212 NONAME - _ZTV22CSIPProfileBehaviorTls @ 213 NONAME - _ZTV22CTelephonyAudioRouting @ 214 NONAME - _ZTV23CSIPProfileRegistryBase @ 215 NONAME - _ZTV24CSipProfileAlrController @ 216 NONAME - _ZTV27CMusEngSessionDurationTimer @ 217 NONAME - _ZTV28MCenRepNotifyHandlerCallback @ 218 NONAME - _ZTV4CSIP @ 219 NONAME - _ZTV9DRMCommon @ 220 NONAME - _ZThn4_N11CSIPProfileD0Ev @ 221 NONAME - _ZThn4_N11CSIPProfileD1Ev @ 222 NONAME - diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshengine/tsrc/ut_engine/group/bld.inf --- a/mmsharing/mmshengine/tsrc/ut_engine/group/bld.inf Thu Aug 19 09:51:39 2010 +0300 +++ b/mmsharing/mmshengine/tsrc/ut_engine/group/bld.inf Tue Aug 31 15:12:07 2010 +0300 @@ -15,7 +15,6 @@ * */ -PRJ_TESTMMPFILES - +PRJ_MMPFILES ../../../../../tsrc/mceclientstub/group/mceclientstub.mmp ut_musengine.mmp diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshengine/tsrc/ut_engine/group/ut_musengine.mmp --- a/mmsharing/mmshengine/tsrc/ut_engine/group/ut_musengine.mmp Thu Aug 19 09:51:39 2010 +0300 +++ b/mmsharing/mmshengine/tsrc/ut_engine/group/ut_musengine.mmp Tue Aug 31 15:12:07 2010 +0300 @@ -27,6 +27,7 @@ CAPABILITY EUNIT_CAPS VENDORID VID_DEFAULT + MACRO UNIT_TESTING EPOCSTACKSIZE 0x14000 EPOCHEAPSIZE 0x020000 0x800000 @@ -50,7 +51,6 @@ SOURCEPATH ../../../../../tsrc/centralrepositorystub/src SOURCE centralrepositorystub.cpp -SOURCE cenrepnotifyhandlerstub.cpp SOURCEPATH ../../../../../tsrc/drmstub/src SOURCE drmcommonstub.cpp @@ -59,37 +59,57 @@ SOURCE mcecamerasource.cpp SOURCE mcemediasource.cpp +SOURCEPATH ../../../../../tsrc/propertystub/src +SOURCE e32property.cpp +SOURCEPATH ../../../../../tsrc/contactenginestub/src +SOURCE contactenginestub.cpp // Test classes SOURCEPATH ../src -SOURCE ut_musengsession.cpp +SOURCE ut_musengsessionmanager.cpp SOURCE ut_musengmcesession.cpp SOURCE ut_musengoutsession.cpp SOURCE ut_musenglivesession.cpp SOURCE ut_musengclipsession.cpp SOURCE ut_musengreceivesession.cpp +SOURCE ut_musengtwowaysession.cpp +SOURCE ut_musengtwowayrecvsession.cpp +SOURCE ut_musengcamerahandler.cpp SOURCE ut_musengsipprofilehandler.cpp SOURCE ut_musengmceutils.cpp SOURCE ut_musengtelephoneutils.cpp SOURCE ut_musengsessiondurationtimer.cpp SOURCE ut_musenguriparser.cpp -SOURCE ut_musengorientationhandler.cpp +SOURCE ut_musenglivevideoplayer.cpp +SOURCE ut_musengremotevideoplayer.cpp +SOURCE ut_musengclipvideoplayer.cpp +SOURCE ut_muspropertywatch.cpp // Tested classes SOURCEPATH ../../../src -SOURCE musengsession.cpp +SOURCE musengsessionmanager.cpp SOURCE musengmcesession.cpp SOURCE musengmceoutsession.cpp SOURCE musenglivesession.cpp SOURCE musengclipsession.cpp SOURCE musengreceivesession.cpp +SOURCE musengtwowaysession.cpp +SOURCE musengtwowayrecvsession.cpp SOURCE mussipprofilehandler.cpp SOURCE musengtelephoneutils.cpp SOURCE musengsessiondurationtimer.cpp SOURCE musengmceutils.cpp SOURCE musenguriparser.cpp -SOURCE musengorientationhandler.cpp +SOURCE musengcamerahandler.cpp +SOURCE musengvideoplayerbase.cpp +SOURCE musenglocalvideoplayer.cpp +SOURCE musenglivevideoplayer.cpp +SOURCE musengremotevideoplayer.cpp +SOURCE musengclipvideoplayer.cpp + +SOURCEPATH ../../../../mmshshared/src +SOURCE muspropertywatch.cpp // Includes @@ -98,13 +118,13 @@ USERINCLUDE ../../../../mmshshared/inc USERINCLUDE ../../../../inc USERINCLUDE ../../../../../inc -USERINCLUDE ../../../../../tsrc/sipprofilestub/inc +USERINCLUDE ../../../../../tsrc/sipprofilestub/inc USERINCLUDE ../../../../../tsrc/centralrepositorystub/inc +USERINCLUDE ../../../../../tsrc/propertystub/inc USERINCLUDE ../../../../../tsrc/telephonyaudioroutingstub/inc // to replace SIP profiles with a stub SYSTEMINCLUDE ../inc -// to replace profile with a stub SYSTEMINCLUDE ../../../../../tsrc/sipprofilestub/inc // to replace cenrep with a stub SYSTEMINCLUDE ../../../../../tsrc/centralrepositorystub/inc @@ -114,12 +134,15 @@ SYSTEMINCLUDE ../../../../../tsrc/telephonyaudioroutingstub/inc // to replace DRMCommon with a stub SYSTEMINCLUDE ../../../../../tsrc/drmstub/inc +// to replace RProperty with a stub +SYSTEMINCLUDE ../../../../../tsrc/propertystub/inc +// to replace certain parts of contact engine with a stub +SYSTEMINCLUDE ../../../../../tsrc/contactenginestub/inc -#if defined ( APP_LAYER_SYSTEMINCLUDE ) APP_LAYER_SYSTEMINCLUDE -#else -SYSTEMINCLUDE /epoc32/include -#endif +SYSTEMINCLUDE /epoc32/include/ecom +SYSTEMINCLUDE /epoc32/include/platform/digia/EUnit + LIBRARY euser.lib LIBRARY bafl.lib @@ -128,9 +151,12 @@ LIBRARY charconv.lib LIBRARY inetprotutil.lib LIBRARY sipcodec.lib -LIBRARY efsrv.lib + LIBRARY mceclientstub.lib +LIBRARY cntmodel.lib +LIBRARY estor.lib + DEBUGLIBRARY flogger.lib //EXPORTUNFROZEN diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshengine/tsrc/ut_engine/group/ut_musengine.pkg --- a/mmsharing/mmshengine/tsrc/ut_engine/group/ut_musengine.pkg Thu Aug 19 09:51:39 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,34 +0,0 @@ -; -; Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). -; All rights reserved. -; This component and the accompanying materials are made available -; under the terms of "Eclipse Public License v1.0" -; which accompanies this distribution, and is available -; at the URL "http://www.eclipse.org/legal/epl-v10.html". -; -; Initial Contributors: -; Nokia Corporation - initial contribution. -; -; Contributors: -; -; Description: -; - -;Languages -&EN - -;Header -#{"EUnit: MMSHEng"},(0x01700000),1,0,0 - -(0x101F7961), 0, 0, 0, {"Series60ProductID"} - -;Localised Vendor name -%{"Nokia"} - -;Unique vendor name -:"Nokia" - -;DLL files -"\epoc32\release\armv5\urel\ut_musengine.dll"-"c:\sys\bin\ut_musengine.dll" -"\epoc32\release\armv5\urel\mceclientstub.dll"-"c:\sys\bin\mceclientstub.dll" - diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshengine/tsrc/ut_engine/inc/musengstubs.h --- a/mmsharing/mmshengine/tsrc/ut_engine/inc/musengstubs.h Thu Aug 19 09:51:39 2010 +0300 +++ b/mmsharing/mmshengine/tsrc/ut_engine/inc/musengstubs.h Tue Aug 31 15:12:07 2010 +0300 @@ -20,17 +20,18 @@ #ifndef UT_MUSSTUBS_H #define UT_MUSSTUBS_H - -#include "musengsessionobserver.h" -#include "musengoutsessionobserver.h" -#include "musenglivesessionobserver.h" -#include "musengclipsessionobserver.h" -#include "musengreceivesessionobserver.h" #include "musengsessiondurationtimerobserver.h" #include "musengaudioroutingobserver.h" -#include "musengvolumechangeobserver.h" +#include "musengdisplayhandler.h" +#include "mussipprofileuser.h" +#include "muspropertyobserver.h" +#include +#include +#include +#include #include +#include // DUMMY CLASSES @@ -67,91 +68,26 @@ */ class CMusEngObserverStub : public CBase, public MMusEngSessionDurationTimerObserver, - public MMusEngSessionObserver, - public MMusEngOutSessionObserver, - public MMusEngLiveSessionObserver, - public MMusEngClipSessionObserver, - public MMusEngReceiveSessionObserver, public MMusEngAudioRoutingObserver, - public MMusEngVolumeChangeObserver + public MMusSipProfileUser { - - public: + public: // Constructors and destructor CMusEngObserverStub(); - ~CMusEngObserverStub(); - - // From MMusEngSessionDurationTimerObserver - - void UpdateTimerEvent(); - - // From MMusEngSessionObserver - - void SessionEstablished(); - void SessionTerminated(); - void SessionConnectionLost(); - void SessionFailed(); - void StreamIdle(); - void StreamStreaming(); - void SessionTimeChanged( const TTimeIntervalSeconds& aSeconds ); - void InactivityTimeout(); - - // From MMusEngOutSessionObserver - - void SessionRejected(); - void SessionBadRequest(); // 400 - void SessionUnauthorized(); // 401 - void SessionPaymentRequired(); // 402 - void SessionRecipientNotFound(); // 404 - void SessionProxyAuthenticationRequired(); // 407 - void SessionRequestTimeOut(); // 408 - void SessionUnsupportedMediaType(); // 415 - void SessionBusyHere(); // 486 - void SessionRequestCancelled(); // 487 - void SessionTemporarilyNotAvailable(); // 480 - - // From MMusEngLiveSessionObserver + public: // From MMusEngSessionDurationTimerObserver + + void UpdateTimerEvent(); - void DiskFull(); - void OrientationRefreshEnded(); - - // From MMusEngClipSessionObserver - - void EndOfClip(); + public: // From MMusEngAudioRoutingObserver - void TranscodingNeeded(TBool aDueUnknowCapas); - - void TranscodingProgressed( TInt aPercentage ); - - void TranscodingCompletedInit(); - - void TranscodingCompletedFinalize(); - - void TranscodingFailed(); + void AudioRoutingChanged(); - void RewindFromEndL(); - - - // From MMusEngReceiveSessionObserver - - void IncomingSessionPreNotification(); - - void IncomingSession( const TDesC& aOriginator, - const TDesC& aOriginatorIdentity ); - - void StreamBuffering(); - - - // From MMusEngAudioRoutingObserver - - void AudioRoutingChanged( TBool aShowNote ); - - TBool AudioRouteChangeAllowed() const; - - // From MMusEngVolumeChangeObserver - void VolumeChanged( TInt aVolume, TBool aAudioRouteChanged ); + public: // From MMusSipProfileUser + + TBool IsRoamingBetweenAPsAllowed(); + void ProfileRegistered(); public: // Helper @@ -170,50 +106,238 @@ public: // Data TBool iUpdateTimerEventCalled; + TBool iAudioRoutingChangedCalled; + TBool iRoamingBetweenAPsAllowed; + TBool iProfileRegisteredCalled; + }; + +class TMusEngDisplayHandlerStub : public MMusEngDisplayHandler + { +public: + + TMusEngDisplayHandlerStub(); + + void Reset(); + +public: // From MMusEngDisplayHandler + + TRect Rect() const; + + void SetRectL( const TRect& aRect ); + + void SetSecondaryRectL( const TRect& aSecondaryRect ); + + TRect SecondaryRect() const; + + void EnableDisplayL( TBool aEnable ); + + TBool IsDisplayEnabled(); + + TDisplayOrientation OrientationL(); + + void SetOrientationL( TDisplayOrientation aOrientation ); + + TBool IsDisplayActive(); + +public: + + TRect iRect; + TRect iSecondaryRect; + TBool iIsEnabled; + TDisplayOrientation iOrientation; + TBool iIsActive; + }; + +class CLcSessionObserverStub : public CBase, public MLcSessionObserver + { + public: // Constructors and destructor + + CLcSessionObserverStub(); + ~CLcSessionObserverStub(); - TBool iSessionEstablishedCalled; - TBool iSessionTerminatedCalled; - TBool iSessionConnectionLostCalled; - TBool iSessionFailedCalled; - TBool iStreamIdleCalled; - TBool iStreamStreamingCalled; - TBool iSessionTimeChangedCalled; - TBool iInactivityTimeoutCalled; + public: // From MLcSessionObserver + + void StateChanged( MLcSession& aSession ); + + void StateChanged( MLcVideoPlayer& aPlayer ); + + void Updated( MLcSession& aSession ); + + void Updated( MLcVideoPlayer& aPlayer ); + + void Failed( + MLcSession& aSession, + TInt aError ); + + void Failed( + MLcVideoPlayer& aPlayer, + TInt aError ); + + void SessionTimeChanged( + MLcSession& aSession, + const TTimeIntervalSeconds& aSeconds ); + + public: // New functions + + void Reset(); + TBool IsReseted(); + + public: // Data + + enum TCalledFunction + { + EUnknown, + ESessionStateChanged, + EPlayerStateChanged, + ESessionUpdated, + EPlayerUpdated, + ESessionFailed, + EPlayerFailed, + ESessionTimeChanged + }; + + TInt iCalledFunction; + MLcSession* iCurrentSession; + MLcVideoPlayer* iCurrentPlayer; + TInt iSessionTime; + TInt iError; + }; + + +class CLcUiProviderStub : public CBase, public MLcUiProvider + { + public: // Constructors and destructor + + CLcUiProviderStub(); + ~CLcUiProviderStub(); + + public: // From MLcUiProvider + + TBool SelectRecipient( + MDesCArray& aRecipientAddresses, + TDes& aSelectedRecipientAddress ); + + TBool InputRecipient( TDes& aRecipientAddress ); + + void HandleForegroundStatus( TBool aForeground ); - TBool iSessionRejectedCalled; - TBool iSessionBadRequestCalled; - TBool iSessionUnauthorizedCalled; - TBool iSessionPaymentRequiredCalled; - TBool iSessionRecipientNotFoundCalled; - TBool iSessionProxyAuthenticationRequiredCalled; - TBool iSessionRequestTimeOutCalled; - TBool iSessionUnsupportedMediaTypeCalled; - TBool iSessionBusyHereCalled; - TBool iSessionRequestCancelledCalled; - TBool iDiskFullCalled; - - TBool iEndOfClipCalled; - TBool iRewindFromEnd; - TBool iTranscodingNeededCalled; - TBool iTranscodingCompletedInitCalled; - TBool iTranscodingCompletedFinalizeCalled; - TBool iTranscodingFailedCalled; - - TBool iIncomingSessionPreNotificationCalled; - TBool iIncomingSessionCalled; - TBool iStreamBufferingCalled; + void BlockUi( TBool aBlocked ); + + public: // New functions + + void Reset(); + + public: // Data + + enum TCalledFunction + { + EUnknown, + ESelectRecipient, + EInputRecipient, + EHandleForegroundStatus + }; + + TInt iForeground; + TInt iCalledFunction; + TPtrC iRecipient; + TBool iSimulatedReturnValue; + }; + + +class TLcWindowStub : public MLcWindow + { + public: // Constructor + TLcWindowStub(); + + public: // From MLcWindow + void EnableLcWindowL( TBool aEnable ); + TBool IsLcWindowEnabled(); + void SetLcWindowRectL( TRect aRect ); + TRect LcWindowRect(); + void SetLcWindowOrientationL( TLcWindowOrientation aOrientation ); + TLcWindowOrientation LcWindowOrientationL(); + + public: // New functions + + void Reset(); - TBool iAudioRoutingChangedCalled; - TBool iShowNote; - TBool iAudioRouteChangeAllowed; + private: // Data + TBool iEnabled; + TRect iRect; + TLcWindowOrientation iOrientation; + }; + + +class TLcAudioControlStub : public MLcAudioControl + { + public: // Constructor + TLcAudioControlStub(); + + public: + TBool IsLcAudioMutedL(); + void MuteLcAudioL( TBool aMute ); + TBool IsLcMicMutedL(); + void MuteLcMicL( TBool aMute ); + TBool IsEnablingLcLoudspeakerAllowed(); + void EnableLcLoudspeakerL( TBool aEnabled ); + TBool IsLcLoudspeakerEnabled(); + TInt LcVolumeL(); + void SetLcVolumeL( TInt aValue ); + void IncreaseLcVolumeL(); + void DecreaseLcVolumeL(); + + public: // New functions + + void Reset(); - TInt iTranscodingProgressedPercentage; - TBool iSessionTemporarilyNotAvailable; - HBufC* iIncomingSessionOriginator; - + private: // Data + TBool iAudioMuted; + TBool iMicMuted; + TBool iEnablingLoudspeakerAllowed; + TBool iLoudspeakerEnabled; TInt iVolume; - TBool iDueUnknowCapas; - TBool iOrientationRefreshEndedCalled; + }; + +class TMusPropertyObserverStub : public MMusPropertyObserver + { + public: + + enum TMusPropertyObserverFunction + { + ENone, // default value + EPropertyChanged, + EHandlePropertyError + }; + + + TMusPropertyObserverStub() + { + iCalledFunction = ENone; + iKey = 0; + iValue = 0; + iReason = 0; + } + + void PropertyChanged( const TUint aKey, const TInt aValue ) + { + iCalledFunction = EPropertyChanged; + iKey = aKey; + iValue = aValue; + } + + + void HandlePropertyError( const TInt aReason ) + { + iCalledFunction = EHandlePropertyError; + iReason = aReason; + } + + public: // data + + TMusPropertyObserverFunction iCalledFunction; + TInt iKey; + TInt iValue; + TInt iReason; }; diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshengine/tsrc/ut_engine/inc/musengtestdefs.h --- a/mmsharing/mmshengine/tsrc/ut_engine/inc/musengtestdefs.h Thu Aug 19 09:51:39 2010 +0300 +++ b/mmsharing/mmshengine/tsrc/ut_engine/inc/musengtestdefs.h Tue Aug 31 15:12:07 2010 +0300 @@ -23,6 +23,7 @@ #include #include +#include // Next row is to disable warning emerging from EUnit code. // Placement is due to a fact that most test case files // include this file. Directive can be removed when @@ -32,12 +33,14 @@ // Test values _LIT( KTestRecipientSipUri, "sip:TestRecipient@host.domain" ); +_LIT( KTestRecipient2SipUri, "sip:TestRecipient2@host.domain" ); _LIT( KTestRecipientSipUriPrefixUpperCase, "SIP:TestRecipient@host.domain" ); _LIT( KTestRecipientSipUriNoSipPrefix, "TestRecipient@host.domain" ); _LIT( KTestRecipientTelUri, "tel:+3581111111"); _LIT( KTestRecipientTelUriNoTelPrefix, "+3581111111" ); _LIT8( KTestRecipientSipUri8, "sip:TestRecipient@host.domain" ); +_LIT8( KTestRecipient2SipUri8, "sip:TestRecipient2@host.domain" ); _LIT8( KTestRecipientSipUriPrefixUpperCase8, "SIP:TestRecipient@host.domain" ); _LIT8( KTestRecipientSipUriNoSipPrefix8, "TestRecipient@host.domain" ); _LIT8( KTestRecipientTelUri8, "tel:+3581111111"); @@ -117,8 +120,11 @@ User::Leave( error );\ } +// NOTE! NMusSessionApi::KCategoryUid, NMusSessionApi::KRemoteSipAddress p&s property +// should contain recipient address to be used for invitation. +// #define ESTABLISH_OUT_SESSION( outSession )\ - outSession->InviteL( KTestRecipientSipUri );\ + outSession->EstablishLcSessionL();\ outSession->iSession->iState = CMceSession::EEstablished;\ for ( TInt i = 0; i < outSession->iSession->Streams().Count(); ++i )\ {\ @@ -136,9 +142,31 @@ #define ESTABLISH_OUT_SESSION_AND_START_STREAMING( outSession )\ ESTABLISH_OUT_SESSION( outSession );\ outSession->EnableDisplayL( ETrue );\ - outSession->PlayL(); - + outSession->LocalVideoPlayer()->LcPlayL(); + + +#define MUSENG_EUNIT_ASSERT_EQUALS( func, val ) \ +{\ +TInt musUnitTestRetVal = func;\ +if ( musUnitTestRetVal != KErrNoMemory ){\ + EUNIT_ASSERT_EQUALS( musUnitTestRetVal, val );\ + }\ +else{\ + User::Leave( KErrNoMemory );\ + }\ +} + +#define MUSENG_EUNIT_ASSERT_SPECIFIC_LEAVE( func, val ) \ +{\ +TRAPD( musUnitTestRetVal, func );\ +if ( val != KErrNoMemory && musUnitTestRetVal == KErrNoMemory ){\ + User::Leave( KErrNoMemory );\ + }\ +else{\ + EUNIT_ASSERT_EQUALS( musUnitTestRetVal, val );\ + }\ +} #endif // MUSENGTESTDEFS_H - \ No newline at end of file + diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshengine/tsrc/ut_engine/inc/sipprofilealrcontroller.h --- a/mmsharing/mmshengine/tsrc/ut_engine/inc/sipprofilealrcontroller.h Thu Aug 19 09:51:39 2010 +0300 +++ b/mmsharing/mmshengine/tsrc/ut_engine/inc/sipprofilealrcontroller.h Tue Aug 31 15:12:07 2010 +0300 @@ -1,5 +1,5 @@ /* -* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* 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" @@ -11,10 +11,11 @@ * * Contributors: * -* Description: +* Description: * */ + #ifndef CSIPPROFILEALRCONTROLLER_H #define CSIPPROFILEALRCONTROLLER_H @@ -45,7 +46,7 @@ { public: // Data only in MuS Engine's unit testing stub - TBool iAllowMigrationCalled; + TBool iAllowMigrationCalled; TBool iDisallowMigrationCalled; TUint32 iLastUsedIap; diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshengine/tsrc/ut_engine/inc/ut_musengcamerahandler.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/mmshengine/tsrc/ut_engine/inc/ut_musengcamerahandler.h Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,104 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + + +#ifndef __UT_MUSENGCAMERAHANDLER_H__ +#define __UT_MUSENGCAMERAHANDLER_H__ + + +// EXTERNAL INCLUDES +#include +#include + +#include "musengcamerahandler.h" + +// FORWARD DECLARATIONS +class CMceManager; +class CMusSipProfileHandler; +class CMceSession; +class CMusEngObserverStub; +class CMceDisplaySink; + + +// CLASS DEFINITION +/** + * Tester class for CMusEngLiveSession. + * Tests only implementations that are not tested in ancestor classes. + * + */ +NONSHARABLE_CLASS( UT_TMusEngCameraHandler ): public CEUnitTestSuiteClass + { + public: // Constructors and destructors + + /** + * Two phase construction + */ + static UT_TMusEngCameraHandler* NewL(); + static UT_TMusEngCameraHandler* NewLC(); + + /** + * Destructor + */ + ~UT_TMusEngCameraHandler(); + + private: // Constructors and destructors + + UT_TMusEngCameraHandler(); + void ConstructL(); + + private: // Test case setup and teardown + + void SetupL(); + void Teardown(); + + private: // Test methdods + + void UT_LcCameraCountL(); + void UT_ToggleLcCameraL(); + void UT_SetLcBrightnessL(); + void UT_LcBrightnessL(); + void UT_MaxLcBrightnessL(); + void UT_MinLcBrightnessL(); + void UT_IncreaseLcBrightnessL(); + void UT_DecreaseLcBrightnessL(); + void UT_MinLcZoomL(); + void UT_MaxLcZoomL(); + void UT_LcZoomValueL(); + void UT_SetLcZoomValueL(); + void UT_LcZoomInL(); + void UT_LcZoomOutL(); + void UT_PlayL(); + void UT_PauseL(); + void UT_IsPlayingL(); + void UT_InitializeZoomStepSizeL(); + void UT_ChangeCameraL(); + void UT_ChangeActiveCameraL(); + + private: // Data + + TMusEngCameraHandler iCameraHandler; + CMceManager* iManager; + CMusSipProfileHandler* iProfileHandler; + CMusEngObserverStub* iObserver; + CMceSession* iSession; + + EUNIT_DECLARE_TEST_TABLE; + }; + +#endif // __UT_MUSENGLIVESESSION_H__ + +// End of file diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshengine/tsrc/ut_engine/inc/ut_musengclipsession.h --- a/mmsharing/mmshengine/tsrc/ut_engine/inc/ut_musengclipsession.h Thu Aug 19 09:51:39 2010 +0300 +++ b/mmsharing/mmshengine/tsrc/ut_engine/inc/ut_musengclipsession.h Tue Aug 31 15:12:07 2010 +0300 @@ -26,6 +26,8 @@ // FORWARD DECLARATIONS class CMusEngClipSession; +class CLcSessionObserverStub; +class CLcUiProviderStub; class CMusEngObserverStub; // CONSTANTS @@ -60,44 +62,29 @@ private: // Test case setup and teardown void SetupL(); - void Setup2L(); - void Teardown(); private: // Test methdods void UT_NewLL(); - void UT_SetClipLL(); - void UT_FastForwardLL(); - void UT_FastRewindLL(); - void UT_PositionLL(); - void UT_DurationLL(); - void UT_SetPositionLL(); - void UT_TranscodeLToAvcL(); - void UT_TranscodeLToH263L(); - void UT_CancelTranscodeLL(); - void UT_PlayLL(); - void UT_PauseLL(); - void UT_IsPlayingLL(); void UT_CompleteSessionStructureLL(); void UT_StreamStateChangedL(); void UT_StreamStateChangedWithSourceL(); void UT_StreamStateChangedWithSinkL(); void UT_AddAmrCodecLL(); void UT_AddVideoCodecLL(); - void UT_HasClipEndedL(); void UT_ConstructAudioStructureLL(); void UT_ConstructAudioStructureL_OperatorVariantL(); void UT_EstablishSessionLL(); - void UT_IsRewindFromEndL(); private: // Data CMusEngClipSession* iClipSession; - CMusEngObserverStub* iObserver; + CLcSessionObserverStub* iLcSessionObserver; + CLcUiProviderStub* iLcUiProvider; + CMusEngObserverStub* iAudioRoutingObserver; EUNIT_DECLARE_TEST_TABLE; - }; #endif // __UT_MUSENGCLIPSESSION_H__ diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshengine/tsrc/ut_engine/inc/ut_musengclipvideoplayer.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/mmshengine/tsrc/ut_engine/inc/ut_musengclipvideoplayer.h Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,93 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + +#ifndef UT_MUSENGCLIPVIDEOPLAYER_H +#define UT_MUSENGCLIPVIDEOPLAYER_H + + +// INCLUDES +#include +#include +#include "musengstubs.h" + +// FORWARD DECLARATIONS +class CMceSession; +class CMusEngClipVideoPlayer; + + +// CLASS DEFINITION +/** + * + */ +NONSHARABLE_CLASS( UT_CMusEngClipVideoPlayer ): public CEUnitTestSuiteClass + { + public: // Constructors and destructors + + /** + * Two phase construction + */ + static UT_CMusEngClipVideoPlayer* NewL(); + static UT_CMusEngClipVideoPlayer* NewLC(); + + /** + * Destructor + */ + ~UT_CMusEngClipVideoPlayer(); + + private: // Constructors and destructors + + UT_CMusEngClipVideoPlayer(); + void ConstructL(); + + private: // Test case setup and teardown + + void SetupL(); + void Teardown(); + + private: // Test methdods + + void UT_HasClipEndedL(); + void UT_LcVideoPlayerStateL(); + void UT_LcPlayL(); + void UT_LcPauseL(); + void UT_LcIsPlayingL(); + void UT_SetLcFileNameL(); + void UT_LcFastForwardL(); + void UT_LcFastRewindL(); + void UT_LcFilePositionL(); + void UT_LcFileDurationL(); + void UT_SetLcFilePositionL(); + void UT_LcWindowL(); + void UT_LcCameraControlL(); + void UT_LcSourceFileControlL(); + void UT_LcDestinationFileControlL(); + void UT_LcAudioControlL(); + void UT_LcZoomControlL(); + void UT_LcBrightnessControlL(); + + private: // Data + + TLcAudioControlStub iLcAudioControlStub; + CMceSession* iMceSession; + CMusEngClipVideoPlayer* iClipVideoPlayer; + TMusEngDisplayHandlerStub iDisplayHandlerStub; + EUNIT_DECLARE_TEST_TABLE; + }; + +#endif // UT_MUSENGCLIPVIDEOPLAYER_H + +// End of file diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshengine/tsrc/ut_engine/inc/ut_musenglivesession.h --- a/mmsharing/mmshengine/tsrc/ut_engine/inc/ut_musenglivesession.h Thu Aug 19 09:51:39 2010 +0300 +++ b/mmsharing/mmshengine/tsrc/ut_engine/inc/ut_musenglivesession.h Tue Aug 31 15:12:07 2010 +0300 @@ -26,6 +26,8 @@ // FORWARD DECLARATIONS class CMusEngLiveSession; +class CLcSessionObserverStub; +class CLcUiProviderStub; class CMusEngObserverStub; @@ -64,16 +66,6 @@ private: // Test methdods void UT_NewLL(); - void UT_CurrentZoomLL(); - void UT_CMusEngLiveSession_SetZoomLL(); - void UT_MaxZoomLL(); - void UT_ZoomInLL(); - void UT_ZoomOutLL(); - void UT_ZoomDefaultLL(); - void UT_RecordL_and_IsRecordingLL(); - void UT_PlayLL(); - void UT_PauseLL(); - void UT_IsPlayingLL(); void UT_CompleteSessionStructureLL(); void UT_HandleSessionStateChangedL(); void UT_AdjustVideoCodecLL(); @@ -82,28 +74,18 @@ void UT_StreamStateChangedL(); void UT_StreamStateChangedWithSourceL(); void UT_StreamStateChangedWithSinkL(); - void UT_SetBrightnessLL(); - void UT_CurrentBrightnessLL(); - void UT_MaxBrightnessLL(); - void UT_MinBrightnessLL(); - void UT_IncreaseBrightnessLL(); - void UT_DecreaseBrightnessLL(); - void UT_BrightnessDefaultLL(); - void UT_BrightnessAutoLL(); - void UT_SetEncodingDeviceLL(); - void UT_SetCodecConfigKeyLL(); - void UT_ReadCodecConfigKeyLL(); - void UT_StoreEncoderConfigInfoLL(); - void UT_InitializeZoomStepSizeL(); - + void UT_EstablishLcSessionL(); + void UT_LocalVideoPlayerL(); + private: // Data CMusEngLiveSession* iLiveSession; CMusEngLiveSession* iRecordedLiveSession; - CMusEngObserverStub* iObserver; + CLcSessionObserverStub* iLcSessionObserver; + CLcUiProviderStub* iLcUiProvider; + CMusEngObserverStub* iAudioRoutingObserver; EUNIT_DECLARE_TEST_TABLE; - }; #endif // __UT_MUSENGLIVESESSION_H__ diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshengine/tsrc/ut_engine/inc/ut_musenglivevideoplayer.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/mmshengine/tsrc/ut_engine/inc/ut_musenglivevideoplayer.h Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,92 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + +#ifndef UT_MUSENGLIVEVIDEOPLAYER_H +#define UT_MUSENGLIVEVIDEOPLAYER_H + + +// INCLUDES +#include +#include +#include "musengcamerahandler.h" +#include "musengstubs.h" + +// FORWARD DECLARATIONS +class CMceSession; +class CMusEngLiveVideoPlayer; + + +// CLASS DEFINITION +/** + * + */ +NONSHARABLE_CLASS( UT_CMusEngLiveVideoPlayer ): public CEUnitTestSuiteClass + { + public: // Constructors and destructors + + /** + * Two phase construction + */ + static UT_CMusEngLiveVideoPlayer* NewL(); + static UT_CMusEngLiveVideoPlayer* NewLC(); + + /** + * Destructor + */ + ~UT_CMusEngLiveVideoPlayer(); + + private: // Constructors and destructors + + UT_CMusEngLiveVideoPlayer(); + void ConstructL(); + + private: // Test case setup and teardown + + void SetupL(); + void Teardown(); + + private: // Test methdods + + void UT_NewLL(); + void UT_LcVideoPlayerStateL(); + void UT_LcPlayL(); + void UT_LcWindowL(); + void UT_LcCameraControlL(); + void UT_LcSourceFileControlL(); + void UT_LcDestinationFileControlL(); + void UT_LcAudioControlL(); + void UT_LcZoomControlL(); + void UT_LcBrightnessControlL(); + void UT_EnableLcWindowL(); + void UT_LcWindowRectL(); + void UT_LcWindowOrientationL(); + void UT_SetLcFileNameL(); + void UT_LcRecordL(); + + private: // Data + + TLcAudioControlStub iLcAudioControlStub; + CMceSession* iMceSession; + TMusEngCameraHandler iCameraHandler; + CMusEngLiveVideoPlayer* iLiveVideoPlayer; + TMusEngDisplayHandlerStub iDisplayHandlerStub; + EUNIT_DECLARE_TEST_TABLE; + }; + +#endif // UT_MUSENGLIVEVIDEOPLAYER_H + +// End of file diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshengine/tsrc/ut_engine/inc/ut_musengmcesession.h --- a/mmsharing/mmshengine/tsrc/ut_engine/inc/ut_musengmcesession.h Thu Aug 19 09:51:39 2010 +0300 +++ b/mmsharing/mmshengine/tsrc/ut_engine/inc/ut_musengmcesession.h Tue Aug 31 15:12:07 2010 +0300 @@ -29,9 +29,8 @@ class CMusEngLiveSession; class CMusEngReceiveSession; class CMusEngClipSession; -class CMusEngObserverStub; -class CMceSession; -class CMusEngMceSession; +class CLcSessionObserverStub; +class CLcUiProviderStub; // CLASS DEFINITION /** @@ -67,52 +66,69 @@ void Teardown(); private: // Test methdods - - void UT_CMusEngMceSession_TerminateLL(); - void UT_CMusEngMceSession_GetSessionTimeL(); - void UT_CMusEngMceSession_ConnectionActiveL(); - void UT_CMusEngMceSession_ContainsAudioLL(); - void UT_CMusEngMceSession_IsMutedLL(); - void UT_CMusEngMceSession_OrientationLL(); + + void UT_LcSessionStateL(); + void UT_RemoteVideoPlayerL(); + void UT_LocalVideoPlayerL(); + void UT_LocalDisplayNameL(); + void UT_RemoteDisplayNameL(); + void UT_RemoteDetailsL(); + void UT_SetParameterL(); + void UT_ParameterValueL(); + void UT_IsLcAudioMutedL(); + void UT_MuteLcAudioL(); + void UT_MuteLcMicL(); + void UT_EnableLcLoudspeakerL(); + void UT_SetLcVolumeL(); + void UT_GetSessionTimeL(); + void UT_HandleTerminationL(); + void UT_AdjustVideoCodecL(); + void UT_AdjustAudioCodecL(); + void UT_RectChangedL(); + void UT_SetSessionSdpLinesL(); + void UT_SetSessionSdpLines_OperatorL(); + void UT_SetMediaSdpLinesL(); + void UT_SetMediaSdpLines_OperatorL(); + void UT_AdjustStreamsAndCodecsL(); + void UT_IncomingSessionL(); + void UT_IncomingUpdateL(); + void UT_StreamStateChangedL(); + void UT_StreamStateChangedWithSourceL(); + void UT_StreamStateChangedWithSinkL(); + void UT_SessionStateChangedL(); + void UT_HandleSessionStateChanged_EncoderKeyStoringL(); + void UT_SessionConnectionStateChangedL(); + void UT_FailedL(); + void UT_UpdateFailedL(); + void UT_SRReceivedL(); + void UT_RRReceivedL(); + void UT_SsrcAddedL(); + void UT_SsrcRemovedL(); + void UT_UpdateTimerEventL(); + void UT_IsRoamingBetweenAPsAllowedL(); + void UT_SaveContactL(); + void UT_RectL(); + void UT_SetRectLL(); + void UT_SecondaryRectL(); + void UT_SetSecondaryRectLL(); + void UT_EnableDisplayLL(); void UT_CMusEngMceSession_SetOrientationLL(); - void UT_CMusEngMceSession_VolumeUpLL(); - void UT_CMusEngMceSession_VolumeDownLL(); - void UT_CMusEngMceSession_SetVolumeLL(); - void UT_CMusEngMceSession_EnableDisplayL(); - void UT_CMusEngMceSession_MuteLL(); - void UT_CMusEngMceSession_UnmuteLL(); - void UT_CMusEngMceSession_HandleTerminationL(); - - void UT_CMusEngMceSession_AdjustVideoCodecLL(); - void UT_CMusEngMceSession_AdjustAudioCodecLL(); - void UT_CMusEngMceSession_RectChangedLL(); - void UT_CMusEngMceSession_SetSessionSdpLinesLL(); - void UT_CMusEngMceSession_AdjustStreamsAndCodecsLL(); - void UT_CMusEngMceSession_IncomingSessionL(); - void UT_CMusEngMceSession_IncomingUpdateL(); - void UT_CMusEngMceSession_StreamStateChangedL(); - void UT_CMusEngMceSession_StreamStateChangedWithSourceL(); - void UT_CMusEngMceSession_StreamStateChangedWithSinkL(); - void UT_CMusEngMceSession_SessionStateChangedL(); - void UT_CMusEngMceSession_SessionConnectionStateChangedL(); - void UT_CMusEngMceSession_FailedL(); - void UT_CMusEngMceSession_UpdateFailedL(); - - void UT_CMusEngMceSession_SRReceivedL(); - void UT_CMusEngMceSession_RRReceivedL(); - void UT_CMusEngMceSession_InactivityTimeoutL(); - void UT_CMusEngMceSession_SsrcAddedL(); - void UT_CMusEngMceSession_SsrcRemovedL(); - void UT_CMusEngMceSession_UpdateTimerEventL(); - void UT_CMusEngMceSession_IsRoamingBetweenAPsAllowedL(); - void UT_CMusEngMceSession_IsDisplayEnabledLL(); - - void UT_CMusEngMceSession_VolumeChangedL(); - - private: - - void SetMaxVolForSpeakersL(CMceSession& aSession, TInt aMaxVol); - TBool VerifySpeakersVolume(CMusEngMceSession& aSession, TInt aVolume); + void UT_SetEncodingDeviceLL(); + void UT_SetCodecConfigKeyLL(); + void UT_ReadCodecConfigKeyLL(); + void UT_StoreEncoderConfigInfoLL(); + void UT_StreamStreamingL(); + void UT_InformObserverAboutSessionStateChangeL(); + void UT_InformObserverAboutSessionUpdateL(); + void UT_InformObserverAboutSessionFailureL(); + void UT_InformObserverAboutPlayerStateChangeL(); + void UT_InformObserverAboutPlayerUpdateL(); + void UT_InformObserverAboutPlayerFailureL(); + void UT_LcUiProviderL(); + void UI_IsBackgroundStartupL(); + void UT_InformUiProviderAboutReceivingStartL(); + void UT_SetForegroundStatusL(); + void UT_UpdateLcSessionLL(); private: // Data @@ -120,8 +136,8 @@ CMusEngReceiveSession* iReceiveSession; CMusEngClipSession* iClipSession; CMusEngLiveSession* iSomeOtherSession; - CMusEngObserverStub* iObserver; - + CLcSessionObserverStub* iLcSessionObserver; + CLcUiProviderStub* iLcUiProvider; TMceTransactionDataContainer iContainer; EUNIT_DECLARE_TEST_TABLE; }; diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshengine/tsrc/ut_engine/inc/ut_musengmceutils.h --- a/mmsharing/mmshengine/tsrc/ut_engine/inc/ut_musengmceutils.h Thu Aug 19 09:51:39 2010 +0300 +++ b/mmsharing/mmshengine/tsrc/ut_engine/inc/ut_musengmceutils.h Tue Aug 31 15:12:07 2010 +0300 @@ -21,14 +21,16 @@ // EXTERNAL INCLUDES -#include "mussipprofileuser.h" #include #include + // FORWARD DECLARATIONS class CMceManager; class CMusSipProfileHandler; class CMceSession; +class CMusEngObserverStub; +class CMceDisplaySink; #ifndef NONSHARABLE_CLASS #define NONSHARABLE_CLASS(x) class x @@ -39,9 +41,8 @@ * Tester class for MusEngMceUtils. * */ -NONSHARABLE_CLASS( UT_MusEngMceUtils ): - public CEUnitTestSuiteClass, - public MMusSipProfileUser +NONSHARABLE_CLASS( UT_MusEngMceUtils ): + public CEUnitTestSuiteClass { public: // Constructors and destructors @@ -55,11 +56,8 @@ * Destructor */ ~UT_MusEngMceUtils(); - - public: // From MMusSipProfileUser - TBool IsRoamingBetweenAPsAllowed(); - + private: // Constructors and destructors UT_MusEngMceUtils(); @@ -68,35 +66,44 @@ private: // Test case setup and teardown void SetupL(); + void Setup2L(); void Teardown(); private: // Test methdods - void UT_MusEngMceUtils_IsVideoInStreamL(); - void UT_MusEngMceUtils_IsAudioInStreamL(); - void UT_MusEngMceUtils_GetVideoOutStreamLL(); - void UT_MusEngMceUtils_GetVideoInStreamLL(); - void UT_MusEngMceUtils_GetRecordingStreamL(); - void UT_MusEngMceUtils_GetMediaSinkL(); // From stream - void UT_MusEngMceUtils_GetMediaSinkLL(); // From stream - void UT_MusEngMceUtils_GetMediaSink2L(); // From session - void UT_MusEngMceUtils_GetMediaSinkL2L(); // From session - void UT_MusEngMceUtils_GetCameraLL(); - void UT_MusEngMceUtils_GetFileSourceLL(); - void UT_MusEngMceUtils_GetDisplayL(); - void UT_MusEngMceUtils_GetDisplayLL(); - void UT_MusEngMceUtils_AddDisplayLL(); - void UT_MusEngMceUtils_AddSpeakerLL(); - void UT_MusEngMceUtils_DisableStreamLL(); + void UT_IsVideoInStreamL(); + void UT_IsVideoOutStreamL(); + void UT_IsAudioInStreamL(); + void UT_GetVideoOutStreamLL(); + void UT_GetVideoInStreamLL(); + void UT_GetRecordingStreamL(); + void UT_GetMediaSinkFromStreamL(); + void UT_GetMediaSinkLFromStreamL(); + void UT_GetMediaSinkFromSessionL(); + void UT_GetMediaSinkLFromSessionL(); + void UT_GetCameraLL(); + void UT_GetFileSourceLL(); + void UT_GetDisplayL(); + void UT_GetDisplayLL(); + void UT_AddDisplayLL(); + void UT_AddSpeakerLL(); + void UT_DisableStreamLL(); + void UT_GetReceivingDisplayL(); + void UT_GetReceivingDisplayLL(); + void UT_GetVfDisplayL(); + void UT_EnableInactivityTimerL(); private: // Data CMceManager* iManager; CMusSipProfileHandler* iProfileHandler; + CMusEngObserverStub* iObserver; CMceSession* iEmptySession; CMceSession* iVideoOutSession; CMceSession* iVideoInSession; + + CMceDisplaySink* iReceivingDisplay; // Not owned EUNIT_DECLARE_TEST_TABLE; diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshengine/tsrc/ut_engine/inc/ut_musengorientationhandler.h --- a/mmsharing/mmshengine/tsrc/ut_engine/inc/ut_musengorientationhandler.h Thu Aug 19 09:51:39 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,82 +0,0 @@ -/* -* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - initial contribution. -* -* Contributors: -* -* Description: -* -*/ - - -#ifndef __UT_MUSENGORIENTATIONHANDLER_H__ -#define __UT_MUSENGORIENTATIONHANDLER_H__ - - -// EXTERNAL INCLUDES -#include -#include - -// FORWARD DECLARATIONS -class CMusEngLiveSession; -class CMusEngObserverStub; -class CMusEngOrientationHandler; - - -// CLASS DEFINITION -/** - * Tester class for CMusEngLiveSession. - * Tests only implementations that are not tested in ancestor classes. - * - */ -NONSHARABLE_CLASS( UT_CMusEngOrientationHandler ): public CEUnitTestSuiteClass - { - public: // Constructors and destructors - - /** - * Two phase construction - */ - static UT_CMusEngOrientationHandler* NewL(); - static UT_CMusEngOrientationHandler* NewLC(); - - /** - * Destructor - */ - ~UT_CMusEngOrientationHandler(); - - private: // Constructors and destructors - - UT_CMusEngOrientationHandler(); - void ConstructL(); - - private: // Test case setup and teardown - - void SetupL(); - - void Teardown(); - - private: // Test methdods - - void UT_NewLL(); - void UT_RefreshOrientationL(); - - private: // Data - - CMusEngLiveSession* iLiveSession; - CMusEngObserverStub* iObserver; - CMusEngOrientationHandler* iHandler; - - EUNIT_DECLARE_TEST_TABLE; - - }; - -#endif // __UT_MUSENGORIENTATIONHANDLER_H__ - -// End of file diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshengine/tsrc/ut_engine/inc/ut_musengoutsession.h --- a/mmsharing/mmshengine/tsrc/ut_engine/inc/ut_musengoutsession.h Thu Aug 19 09:51:39 2010 +0300 +++ b/mmsharing/mmshengine/tsrc/ut_engine/inc/ut_musengoutsession.h Tue Aug 31 15:12:07 2010 +0300 @@ -26,6 +26,8 @@ // FORWARD DECLARATIONS class CMusEngLiveSession; +class CLcSessionObserverStub; +class CLcUiProviderStub; class CMusEngObserverStub; // CONSTANTS @@ -69,21 +71,29 @@ private: // Test methdods - void UT_CMusEngOutSession_InviteLL(); - void UT_CMusEngOutSession_CancelInviteLL(); - void UT_CMusEngOutSession_EstablishSessionLL(); - void UT_CMusEngOutSession_HandleTerminationL(); - void UT_CMusEngOutSession_AdjustVideoCodecLL(); - void UT_CMusEngOutSession_AdjustAudioCodecLL(); - void UT_CMusEngOutSession_CreateMceSessionStructureLL(); + void UT_EstablishLcSessionL(); + void UT_EstablishLcSession_RecipientResolvingL(); + void UT_EstablishLcSession_RegistrationPendingL(); + void UT_TerminateLcSessionL(); + void UT_EstablishSessionLL(); + void UT_HandleTerminationL(); + void UT_HandleRecipientNotFoundTerminationL(); + void UT_AdjustVideoCodecLL(); + void UT_AdjustAudioCodecLL(); + void UT_CreateMceSessionStructureLL(); + void UT_ConstructLL(); + void UT_ContactSavingLL(); + void UT_RemoteAddressLL(); + void UT_RemoteDisplayNameL(); private: // Data CMusEngLiveSession* iLiveSession; - CMusEngObserverStub* iObserver; + CLcSessionObserverStub* iLcSessionObserver; + CLcUiProviderStub* iLcUiProvider; + CMusEngObserverStub* iAudioRoutingObserver; EUNIT_DECLARE_TEST_TABLE; - }; #endif // __UT_MUSENGOUTSESSION_H__ diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshengine/tsrc/ut_engine/inc/ut_musengreceivesession.h --- a/mmsharing/mmshengine/tsrc/ut_engine/inc/ut_musengreceivesession.h Thu Aug 19 09:51:39 2010 +0300 +++ b/mmsharing/mmshengine/tsrc/ut_engine/inc/ut_musengreceivesession.h Tue Aug 31 15:12:07 2010 +0300 @@ -27,9 +27,10 @@ // FORWARD DECLARATIONS class CMceInSession; class CMusEngReceiveSession; -class CMusEngObserverStub; +class CLcSessionObserverStub; class CMceVideoStream; class CMceAudioStream; +class CLcUiProviderStub; #include #ifndef NONSHARABLE_CLASS @@ -79,7 +80,11 @@ private: // Test methdods void UT_NewLL(); - void UT_AcceptInvitationLL(); + void UT_LcSessionStateL(); + void UT_EstablishLcSessionL(); + void UT_TerminateLcSessionL(); + void UT_RemoteVideoPlayerL(); + void UT_RemoteDisplayName(); void UT_HandleSessionStateChangedL(); void UT_AdjustVideoCodecLL(); void UT_AdjustAudioCodecLL(); @@ -87,9 +92,6 @@ void UT_IncomingSessionL(); void UT_IncomingUpdateL(); void UT_StreamStateChangedL(); - - // All the following functions test - // CMusEngReceiveSession::CompleteSessionStructureL void UT_CompleteSessionStructureL_WithoutSessionL(); void UT_CompleteSessionStructureL_WithoutStreamsL(); void UT_CompleteSessionStructureL_WithOutgoingStreamL(); @@ -98,14 +100,18 @@ void UT_CompleteSessionStructureL_WithVideoInBoundToVideoOutL(); void UT_CompleteSessionStructureL_WithMultipleVideoInsL(); void UT_CompleteSessionStructureL_WithVideoAndMultipleAudioInsL(); - void UT_CompleteSessionStructureL_OperatorVariant(); - + void UT_CompleteSessionStructureL_OperatorVariant(); + void UT_CompleteSessionStructureL_SdpBandwidthAttributesL(); void UT_ParseAssertedIdentityL(); + void UT_ContactSavingLL(); + void UT_IsDisplayActive(); + void UT_InactivityTimeoutL(); private: // Data CMusEngReceiveSession* iReceiveSession; - CMusEngObserverStub* iObserver; + CLcSessionObserverStub* iLcSessionObserver; + CLcUiProviderStub* iLcUiProvider; EUNIT_DECLARE_TEST_TABLE; diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshengine/tsrc/ut_engine/inc/ut_musengremotevideoplayer.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/mmshengine/tsrc/ut_engine/inc/ut_musengremotevideoplayer.h Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,88 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + +#ifndef UT_MUSENGREMOTEVIDEOPLAYER_H +#define UT_MUSENGREMOTEVIDEOPLAYER_H + + +// INCLUDES +#include +#include +#include "musengstubs.h" + +// FORWARD DECLARATIONS +class CMceSession; +class CMusEngRemoteVideoPlayer; + + +// CLASS DEFINITION +/** + * + */ +NONSHARABLE_CLASS( UT_CMusEngRemoteVideoPlayer ): public CEUnitTestSuiteClass + { + public: // Constructors and destructors + + /** + * Two phase construction + */ + static UT_CMusEngRemoteVideoPlayer* NewL(); + static UT_CMusEngRemoteVideoPlayer* NewLC(); + + /** + * Destructor + */ + ~UT_CMusEngRemoteVideoPlayer(); + + private: // Constructors and destructors + + UT_CMusEngRemoteVideoPlayer(); + void ConstructL(); + + private: // Test case setup and teardown + + void SetupL(); + void Teardown(); + + private: // Test methdods + + void UT_NewLL(); + void UT_LcVideoPlayerStateL(); + void UT_LcPlayL(); + void UT_LcWindowL(); + void UT_LcCameraControlL(); + void UT_LcSourceFileControlL(); + void UT_LcDestinationFileControlL(); + void UT_LcAudioControlL(); + void UT_LcZoomControlL(); + void UT_LcBrightnessControlL(); + void UT_EnableLcWindowL(); + void UT_LcWindowRectL(); + void UT_LcWindowOrientationL(); + + private: // Data + + TLcAudioControlStub iLcAudioControlStub; + CMceSession* iMceSession; + CMusEngRemoteVideoPlayer* iRemoteVideoPlayer; + TMusEngDisplayHandlerStub iDisplayHandlerStub; + EUNIT_DECLARE_TEST_TABLE; + }; + +#endif // UT_MUSENGREMOTEVIDEOPLAYER_H + +// End of file diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshengine/tsrc/ut_engine/inc/ut_musengsession.h --- a/mmsharing/mmshengine/tsrc/ut_engine/inc/ut_musengsession.h Thu Aug 19 09:51:39 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,95 +0,0 @@ -/* -* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - initial contribution. -* -* Contributors: -* -* Description: -* -*/ - - -#ifndef __UT_MUSENGSESSION_H__ -#define __UT_MUSENGSESSION_H__ - - -// EXTERNAL INCLUDES -#include -#include - -// FORWARD DECLARATIONS -class CMusEngLiveSession; -class CMusEngObserverStub; - - -// CLASS DEFINITION -/** - * Tester class for CMusEngSession. - * Since CMusEngSession is abstract, it is tested via object of its' - * concrete descendant class CMusEngLiveSession. Only concrete - * implementations are tested in this tester class. - * - */ -NONSHARABLE_CLASS( UT_CMusEngSession ): public CEUnitTestSuiteClass - { - public: // Constructors and destructors - - /** - * Two phase construction - */ - static UT_CMusEngSession* NewL(); - static UT_CMusEngSession* NewLC(); - - /** - * Destructor - */ - ~UT_CMusEngSession(); - - private: // Constructors and destructors - - UT_CMusEngSession(); - void ConstructL(); - - private: // Test case setup and teardown - - void SetupL(); - - void Teardown(); - - private: // Test methods - - void UT_RectL(); - void UT_SetRectLL(); - void UT_AudioRoutingCanBeChangedL(); - void UT_IsAudioRoutingHeadsetL(); - void UT_IsAudioRoutingLoudSpeakerL(); - void UT_EnableLoudspeakerLL(); - void UT_IsLoudSpeakerEnabledL(); - void UT_VolumeLL(); - void UT_MuteMicLL(); - void UT_IsMicMutedLL(); - void UT_SetAudioRoutingObserverL(); - void UT_VolumeUpLL(); - void UT_VolumeDownLL(); - void UT_SetVolumeLL(); - void UT_SetVolumeChangeObserverL(); - - private: // Data - - CMusEngLiveSession* iLiveSession; - CMusEngObserverStub* iObserver; - - EUNIT_DECLARE_TEST_TABLE; - - }; - -#endif // __UT_MUSENGSESSION_H__ - -// End of file diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshengine/tsrc/ut_engine/inc/ut_musengsessionmanager.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/mmshengine/tsrc/ut_engine/inc/ut_musengsessionmanager.h Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,79 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + +#ifndef UT_MUSENGSESSIONMANAGER_H +#define UT_MUSENGSESSIONMANAGER_H + +// EXTERNAL INCLUDES +#include +#include + +// FORWARD DECLARATIONS +class CMusEngSessionManager; +class CLcUiProviderStub; + + +// CLASS DEFINITION +/** + * Tester class for CMusEngSessionManager. + * + */ +NONSHARABLE_CLASS( UT_CMusEngSessionManager ): public CEUnitTestSuiteClass + { + public: // Constructors and destructors + + /** + * Two phase construction + */ + static UT_CMusEngSessionManager* NewL(); + static UT_CMusEngSessionManager* NewLC(); + + /** + * Destructor + */ + ~UT_CMusEngSessionManager(); + + private: // Constructors and destructors + + UT_CMusEngSessionManager(); + void ConstructL(); + + private: // Test case setup and teardown + + void SetupL(); + + void Teardown(); + + private: // Test methdods + + void UT_NewL(); + void UT_SessionL(); + void UT_IsFeatureSupportedL(); + void UT_CreateMusSessionL(); + void UT_PropertyChangedL(); + + private: // Data + + CMusEngSessionManager* iSessionManager; + CLcUiProviderStub* iLcUiProvider; + + EUNIT_DECLARE_TEST_TABLE; + }; + +#endif // UT_MUSENGSESSIONMANAGER_H + +// End of file diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshengine/tsrc/ut_engine/inc/ut_musengsipprofilehandler.h --- a/mmsharing/mmshengine/tsrc/ut_engine/inc/ut_musengsipprofilehandler.h Thu Aug 19 09:51:39 2010 +0300 +++ b/mmsharing/mmshengine/tsrc/ut_engine/inc/ut_musengsipprofilehandler.h Tue Aug 31 15:12:07 2010 +0300 @@ -20,13 +20,13 @@ #define __UT_MUSENGSIPPROFILEHANDLER_H__ -// INCLUDES -#include "mussipprofileuser.h" +// INCLUDES #include #include // FORWARD DECLARATIONS class CMusSipProfileHandler; +class CMusEngObserverStub; // CLASS DEFINITION @@ -34,9 +34,8 @@ * Tester class for CMusSipProfileHandler. * */ -NONSHARABLE_CLASS( UT_CMusEngSipProfileHandler ): - public CEUnitTestSuiteClass, - public MMusSipProfileUser +NONSHARABLE_CLASS( UT_CMusEngSipProfileHandler ): + public CEUnitTestSuiteClass { public: // Constructors and destructors @@ -50,11 +49,7 @@ * Destructor */ ~UT_CMusEngSipProfileHandler(); - - public: // From MMusSipProfileUser - TBool IsRoamingBetweenAPsAllowed(); - private: // Constructors and destructors UT_CMusEngSipProfileHandler(); @@ -66,18 +61,20 @@ void Teardown(); - private: // Test methods + private: // Test methdods - void UT_CMusEngSipProfileHandler_CreateSipProfileLL(); - void UT_CMusEngSipProfileHandler_ProfileIdL(); - void UT_CMusEngSipProfileHandler_AlrEventL(); - void UT_CMusEngSipProfileHandler_NullTestsL(); - void UT_CMusEngSipProfileHandler_UserFromProfileLCL(); + void UT_CreateSipProfileLL(); + void UT_ProfileIdL(); + void UT_AlrEventL(); + void UT_NullTestsL(); + void UT_UserFromProfileLCL(); + void UT_IsRegisteredL(); + void UT_ProfileRegistryEventOccurredL(); private: // Data CMusSipProfileHandler* iProfileHandler; - TBool iRoamingBetweenAPsAllowed; + CMusEngObserverStub* iObserver; EUNIT_DECLARE_TEST_TABLE; }; diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshengine/tsrc/ut_engine/inc/ut_musengtelephoneutils.h --- a/mmsharing/mmshengine/tsrc/ut_engine/inc/ut_musengtelephoneutils.h Thu Aug 19 09:51:39 2010 +0300 +++ b/mmsharing/mmshengine/tsrc/ut_engine/inc/ut_musengtelephoneutils.h Tue Aug 31 15:12:07 2010 +0300 @@ -63,8 +63,6 @@ void UT_NewLL(); void UT_AudioRoutingCanBeChangedL(); - void UT_IsAudioRoutingHeadsetL(); - void UT_IsAudioRoutingLoudSpeakerL(); void UT_LoudspeakerLL(); void UT_IsLoudSpeakerEnabledL(); void UT_GetVolumeLL(); @@ -74,8 +72,6 @@ void UT_SetOutputCompleteL(); void UT_ValidateVolumeL(); void UT_DestructorL(); - void UT_UpdateCurrentVolumeL(); - void UT_HandleNotifyGenericL(); private: // Data diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshengine/tsrc/ut_engine/inc/ut_musengtwowayrecvsession.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/mmshengine/tsrc/ut_engine/inc/ut_musengtwowayrecvsession.h Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,117 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + + +#ifndef __UT_MUSENGTWOWAYRECVSESSION_H__ +#define __UT_MUSENGTWOWAYRECVSESSION_H__ + + +// EXTERNAL INCLUDES +#include +#include + +// FORWARD DECLARATIONS +class CMceInSession; +class CMusEngTwoWayRecvSession; +class CMusEngReceiveSession; +class CMceVideoStream; +class CMceAudioStream; +class CLcSessionObserverStub; + +#include +#ifndef NONSHARABLE_CLASS + #define NONSHARABLE_CLASS(x) class x +#endif + +// CLASS DEFINITION +/** + * + */ +NONSHARABLE_CLASS( UT_CMusEngTwoWayRecvSession ): public CEUnitTestSuiteClass + { + public: // Constructors and destructors + + /** + * Two phase construction + */ + static UT_CMusEngTwoWayRecvSession* NewL(); + static UT_CMusEngTwoWayRecvSession* NewLC(); + + /** + * Destructor + */ + ~UT_CMusEngTwoWayRecvSession(); + + private: // Constructors and destructors + + UT_CMusEngTwoWayRecvSession(); + void ConstructL(); + + private: // Test case setup and teardown + + void SetupL(); + + void Teardown(); + + private: // Test helpers + + CMceVideoStream* ConstructVideoInStreamLC(); + CMceVideoStream* ConstructVideoOutStreamLC(); + CMceAudioStream* ConstructAudioInStreamLC(); + CMceAudioStream* ConstructAudioOutStreamLC(); + CMceInSession* ConstructInSessionLC( TInt aVideoStreamCount, + TInt aAudioStreamCount, + TBool aConstructSinks = ETrue ); + + CMceInSession* ConstructTwoWayInSessionLC( TBool aConstructSinks = ETrue ); + + private: // Test methdods + + void UT_NewLL(); + void UT_EnableDisplayLL(); + void UT_SetOrientationLL(); + void UT_OrientationLL(); + void UT_SetLocalRectLL(); + void UT_SetRectsLL(); + void UT_CameraL(); + void UT_LocalVideoPlayerL(); + void UT_HandleSessionStateChangedL(); + void UT_AdjustVideoCodecLL(); + void UT_AdjustAudioCodecLL(); + void UT_DoCodecSelectionLL(); + void UT_IncomingSessionL(); + void UT_CompleteSessionStructureL_WithoutSessionL(); + void UT_CompleteSessionStructureL_WithoutStreamsL(); + void UT_CompleteSessionStructureL_WithOutgoingStreamL(); + void UT_CompleteSessionStructureL_WithVideoInL(); + void UT_CompleteSessionStructureL_WithVideoOutBoundToVideoInL(); + void UT_CompleteSessionStructureL_WithVideoInBoundToVideoOutL(); + void UT_CompleteSessionStructureL_WithMultipleVideoInsL(); + void UT_CompleteSessionStructureL_WithVideoAndMultipleAudioInsL(); + void UT_CompleteSessionStructureL_OperatorVariant(); + + private: // Data + + CMusEngTwoWayRecvSession* iReceiveSession; + CLcSessionObserverStub* iLcSessionObserver; + + EUNIT_DECLARE_TEST_TABLE; + }; + +#endif // __UT_MUSENGRECEIVESESSION_H__ + +// End of file diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshengine/tsrc/ut_engine/inc/ut_musengtwowaysession.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/mmshengine/tsrc/ut_engine/inc/ut_musengtwowaysession.h Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,99 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + + +#ifndef __UT_MUSENGTWOWAYSESSION_H__ +#define __UT_MUSENGTWOWAYSESSION_H__ + + +// EXTERNAL INCLUDES +#include +#include + +// FORWARD DECLARATIONS +class CMusEngTwoWaySession; +class CLcSessionObserverStub; +class CLcUiProviderStub; + + +// CLASS DEFINITION +/** + * Tester class for CMusEngLiveSession. + * Tests only implementations that are not tested in ancestor classes. + * + */ +NONSHARABLE_CLASS( UT_CMusEngTwoWaySession ): public CEUnitTestSuiteClass + { + public: // Constructors and destructors + + /** + * Two phase construction + */ + static UT_CMusEngTwoWaySession* NewL(); + static UT_CMusEngTwoWaySession* NewLC(); + + /** + * Destructor + */ + ~UT_CMusEngTwoWaySession(); + + private: // Constructors and destructors + + UT_CMusEngTwoWaySession(); + void ConstructL(); + + private: // Test case setup and teardown + + void SetupL(); + + void Teardown(); + + private: // Test methdods + + void UT_NewLL(); + void UT_EstablishLcSessionLL(); + void UT_EnableDisplayLL(); + void UT_SetOrientationLL(); + void UT_SetLocalRectLL(); + void UT_SetRectsLL(); + void UT_CompleteSessionStructureLL(); + void UT_HandleSessionStateChangedL(); + void UT_AdjustVideoCodecLL(); + void UT_AdjustAudioCodecLL(); + void UT_DoCodecSelectionLL(); + void UT_StreamStateChangedL(); + void UT_StreamStateChangedWithSourceL(); + void UT_SetEncodingDeviceLL(); + void UT_SetCodecConfigKeyLL(); + void UT_ReadCodecConfigKeyLL(); + void UT_StoreEncoderConfigInfoLL(); + void UT_RemoteVideoPlayerL(); + void UT_EnableLcFileL(); + void UT_InactivityTimeoutL(); + + private: // Data + + CMusEngTwoWaySession* iLiveSession; + CLcSessionObserverStub* iLcSessionObserver; + CLcUiProviderStub* iLcUiProvider; + + EUNIT_DECLARE_TEST_TABLE; + }; + +#endif // __UT_MUSENGTWOWAYSESSION_H__ + +// End of file diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshengine/tsrc/ut_engine/inc/ut_muspropertywatch.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/mmshengine/tsrc/ut_engine/inc/ut_muspropertywatch.h Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,88 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + + +#ifndef __UT_MUSPROPERYWATCH_H__ +#define __UT_MUSPROPERYWATCH_H__ + + +// EXTERNAL INCLUDES +#include +#include + +#include "musengstubs.h" + +// FORWARD DECLARATIONS +class CMusPropertyWatch; +class TMusUiPropertyObserverStub; + +// CLASS DEFINITION +/** + * Tester class for CMusEngSession. + * Since CMusEngSession is abstract, it is tested via object of its' + * concrete descendant class CMusEngLiveSession. Only concrete + * implementations are tested in this tester class. + * + */ +NONSHARABLE_CLASS( UT_CMusPropertyWatch ): public CEUnitTestSuiteClass + { + public: // Constructors and destructors + + /** + * Two phase construction + */ + static UT_CMusPropertyWatch* NewL(); + static UT_CMusPropertyWatch* NewLC(); + + /** + * Destructor + */ + ~UT_CMusPropertyWatch(); + + private: // Constructors and destructors + + UT_CMusPropertyWatch(); + void ConstructL(); + + private: // Test case setup and teardown + + void SetupL(); + + void Teardown(); + + private: // Test methods + + void UT_CMusPropertyWatch_ReadIntPropertyLL(); + void UT_CMusPropertyWatch_ReadDescPropertyLL(); + void UT_CMusPropertyWatch_DoCancelL(); + void UT_CMusPropertyWatch_RunLL(); + void UT_CMusPropertyWatch_RunErrorL(); + + + private: // Data + + + TMusPropertyObserverStub iPropertyObserver; + CMusPropertyWatch* iPropertyWatch; + + EUNIT_DECLARE_TEST_TABLE; + + }; + +#endif // __UT_MUSPROPERYWATCH_H__ + +// End of file diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshengine/tsrc/ut_engine/src/musengstubs.cpp --- a/mmsharing/mmshengine/tsrc/ut_engine/src/musengstubs.cpp Thu Aug 19 09:51:39 2010 +0300 +++ b/mmsharing/mmshengine/tsrc/ut_engine/src/musengstubs.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -18,6 +18,7 @@ #include "musengstubs.h" +#include "musengtestdefs.h" #include @@ -33,22 +34,16 @@ Reset(); } - // ----------------------------------------------------------------------------- // // ----------------------------------------------------------------------------- // CMusEngObserverStub::~CMusEngObserverStub() { - delete iIncomingSessionOriginator; } - -// -------- Functions from MMusEngSessionDurationTimerObserver ----------------- - - // ----------------------------------------------------------------------------- -// +// From MMusEngSessionDurationTimerObserver // ----------------------------------------------------------------------------- // void CMusEngObserverStub::UpdateTimerEvent() @@ -56,368 +51,31 @@ iUpdateTimerEventCalled = ETrue; } - -// ----------- Functions from MusEngSessionObserver ---------------------------- - - - - // ----------------------------------------------------------------------------- -// +// From MMusEngAudioRoutingObserver // ----------------------------------------------------------------------------- // -void CMusEngObserverStub::SessionEstablished() - { - iSessionEstablishedCalled = ETrue; - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusEngObserverStub::SessionTerminated() - { - iSessionTerminatedCalled = ETrue; - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusEngObserverStub::SessionConnectionLost() - { - iSessionConnectionLostCalled = ETrue; - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusEngObserverStub::SessionFailed() - { - iSessionFailedCalled = ETrue; - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusEngObserverStub::StreamIdle() - { - iStreamIdleCalled = ETrue; - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusEngObserverStub::StreamStreaming() - { - iStreamStreamingCalled = ETrue; - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusEngObserverStub::SessionTimeChanged( - const TTimeIntervalSeconds& /*aSeconds*/ ) - { - iSessionTimeChangedCalled = ETrue; - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusEngObserverStub::InactivityTimeout() - { - iInactivityTimeoutCalled = ETrue; - } - - - - - - -// ---- FUNCTIONS OF MMusEngOutSessionObserver -------------------------------- - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusEngObserverStub::SessionRejected() - { - iSessionRejectedCalled = ETrue; - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusEngObserverStub::SessionBadRequest() +void CMusEngObserverStub::AudioRoutingChanged() { - iSessionBadRequestCalled = ETrue; - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusEngObserverStub::SessionUnauthorized() - { - iSessionUnauthorizedCalled = ETrue; - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusEngObserverStub::SessionPaymentRequired() - { - iSessionPaymentRequiredCalled = ETrue; - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusEngObserverStub::SessionRecipientNotFound() - { - iSessionRecipientNotFoundCalled = ETrue; - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusEngObserverStub::SessionProxyAuthenticationRequired() - { - iSessionProxyAuthenticationRequiredCalled = ETrue; - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusEngObserverStub::SessionRequestTimeOut() - { - iSessionRequestTimeOutCalled = ETrue; - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusEngObserverStub::SessionUnsupportedMediaType() - { - iSessionUnsupportedMediaTypeCalled = ETrue; - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusEngObserverStub::SessionBusyHere() - { - iSessionBusyHereCalled = ETrue; - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusEngObserverStub::SessionRequestCancelled() - { - iSessionRequestCancelledCalled = ETrue; - } - - -void CMusEngObserverStub::SessionTemporarilyNotAvailable() - { - iSessionTemporarilyNotAvailable = ETrue; - } - - - -// ---- FUNCTIONS OF MMusEngLiveSessionObserver ---------------------------------- - - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusEngObserverStub::DiskFull() - { - iDiskFullCalled = ETrue; + iAudioRoutingChangedCalled = ETrue; } // ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusEngObserverStub::OrientationRefreshEnded() - { - iOrientationRefreshEndedCalled = ETrue; - } - - -// ---- FUNCTIONS OF MMusEngClipSessionObserver ---------------------------------- - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusEngObserverStub::EndOfClip() - { - iEndOfClipCalled = ETrue; - } -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// - -void CMusEngObserverStub::RewindFromEndL() - { - iRewindFromEnd= ETrue; - } - -// ----------------------------------------------------------------------------- -// +// From MMusSipProfileUser // ----------------------------------------------------------------------------- -// -void CMusEngObserverStub::TranscodingNeeded(TBool aDueUnknowCapas) - { - iTranscodingNeededCalled = ETrue; - iDueUnknowCapas = aDueUnknowCapas; - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusEngObserverStub::TranscodingProgressed( TInt aPercentage ) - { - iTranscodingProgressedPercentage = aPercentage; - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusEngObserverStub::TranscodingCompletedInit() - { - iTranscodingCompletedInitCalled = ETrue; - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusEngObserverStub::TranscodingCompletedFinalize() +// +TBool CMusEngObserverStub::IsRoamingBetweenAPsAllowed() { - iTranscodingCompletedFinalizeCalled = ETrue; - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusEngObserverStub::TranscodingFailed() - { - iTranscodingFailedCalled = ETrue; - } - - -// ---- FUNCTIONS OF MMusEngInSessionObserver ---------------------------------- - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusEngObserverStub::IncomingSessionPreNotification() - { - iIncomingSessionPreNotificationCalled = ETrue; - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusEngObserverStub::IncomingSession( const TDesC& aOriginator, - const TDesC& /*aOriginatorIdentity*/ ) - { - iIncomingSessionCalled = ETrue; - iIncomingSessionOriginator = aOriginator.Alloc(); - - if ( !iIncomingSessionOriginator ) - { - // TODO: Handle out of memory. - } - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusEngObserverStub::StreamBuffering() - { - iStreamBufferingCalled = ETrue; - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusEngObserverStub::AudioRoutingChanged( TBool aShowNote ) - { - iAudioRoutingChangedCalled = ETrue; - iShowNote = aShowNote; - } - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -TBool CMusEngObserverStub::AudioRouteChangeAllowed() const - { - return iAudioRouteChangeAllowed; + return iRoamingBetweenAPsAllowed; } // ----------------------------------------------------------------------------- -// +// From MMusSipProfileUser // ----------------------------------------------------------------------------- -// -void CMusEngObserverStub::VolumeChanged( TInt aVolume, TBool /*aAudioRouteChanged*/ ) +// +void CMusEngObserverStub::ProfileRegistered() { - iVolume = aVolume; + iProfileRegisteredCalled = ETrue; } // ----- HELPERS --------------------------------------------------------------- @@ -429,42 +87,10 @@ // TBool CMusEngObserverStub::IsReseted() { - return ( !iUpdateTimerEventCalled && - !iSessionEstablishedCalled && - !iSessionTerminatedCalled && - !iSessionConnectionLostCalled && - !iSessionFailedCalled && - !iStreamIdleCalled && - !iStreamStreamingCalled && - !iSessionTimeChangedCalled && - !iInactivityTimeoutCalled && - !iSessionRejectedCalled && - !iSessionBadRequestCalled && - !iSessionUnauthorizedCalled && - !iSessionPaymentRequiredCalled && - !iSessionRecipientNotFoundCalled && - !iSessionProxyAuthenticationRequiredCalled && - !iSessionRequestTimeOutCalled && - !iSessionUnsupportedMediaTypeCalled && - !iSessionBusyHereCalled && - !iSessionRequestCancelledCalled && - !iDiskFullCalled && - !iEndOfClipCalled && - !iRewindFromEnd && - !iTranscodingNeededCalled && - !iTranscodingCompletedInitCalled && - !iTranscodingCompletedFinalizeCalled && - !iTranscodingFailedCalled && - !iIncomingSessionPreNotificationCalled && - !iIncomingSessionCalled && - !iStreamBufferingCalled && - !iAudioRoutingChangedCalled && - iTranscodingProgressedPercentage == 0 && - !iSessionTemporarilyNotAvailable && - !iIncomingSessionOriginator && - !iShowNote && - iAudioRouteChangeAllowed && - !iVolume ); + return ( iUpdateTimerEventCalled == EFalse && + iAudioRoutingChangedCalled == EFalse && + iRoamingBetweenAPsAllowed == EFalse && + iProfileRegisteredCalled == EFalse ); } // ----------------------------------------------------------------------------- @@ -474,44 +100,472 @@ void CMusEngObserverStub::Reset() { iUpdateTimerEventCalled = EFalse; - iSessionEstablishedCalled = EFalse; - iSessionTerminatedCalled = EFalse; - iSessionConnectionLostCalled = EFalse; - iSessionFailedCalled = EFalse; - iStreamIdleCalled = EFalse; - iStreamStreamingCalled = EFalse; - iSessionTimeChangedCalled = EFalse; - iInactivityTimeoutCalled = EFalse; - iSessionRejectedCalled = EFalse; - iSessionBadRequestCalled = EFalse; - iSessionUnauthorizedCalled = EFalse; - iSessionPaymentRequiredCalled = EFalse; - iSessionRecipientNotFoundCalled = EFalse; - iSessionProxyAuthenticationRequiredCalled = EFalse; - iSessionRequestTimeOutCalled = EFalse; - iSessionUnsupportedMediaTypeCalled = EFalse; - iSessionBusyHereCalled = EFalse; - iSessionRequestCancelledCalled = EFalse; - iDiskFullCalled = EFalse; - iEndOfClipCalled = EFalse; - iRewindFromEnd = EFalse; - iTranscodingNeededCalled = EFalse; - iTranscodingCompletedInitCalled = EFalse; - iTranscodingCompletedFinalizeCalled = EFalse; - iTranscodingFailedCalled = EFalse; - iIncomingSessionPreNotificationCalled = EFalse; - iIncomingSessionCalled = EFalse; - iStreamBufferingCalled = EFalse; iAudioRoutingChangedCalled = EFalse; - iTranscodingProgressedPercentage = 0; - delete iIncomingSessionOriginator; - iSessionTemporarilyNotAvailable = EFalse; - iIncomingSessionOriginator = NULL; - iShowNote = EFalse; - iAudioRouteChangeAllowed = ETrue; + iRoamingBetweenAPsAllowed = EFalse; + iProfileRegisteredCalled = EFalse; + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +TMusEngDisplayHandlerStub::TMusEngDisplayHandlerStub() + { + Reset(); + } + +void TMusEngDisplayHandlerStub::Reset() + { + iRect = TRect( 0, 0, 0, 0 ); + iSecondaryRect = TRect( 0, 0, 0, 0 ); + iIsEnabled = EFalse; + iOrientation = EPortrait; + iIsActive = ETrue; + } + +TRect TMusEngDisplayHandlerStub::Rect() const + { + return iRect; + } + +void TMusEngDisplayHandlerStub::SetRectL( const TRect& aRect ) + { + iRect = aRect; + } + +void TMusEngDisplayHandlerStub::SetSecondaryRectL( const TRect& aSecondaryRect ) + { + iSecondaryRect = aSecondaryRect; + } + +TRect TMusEngDisplayHandlerStub::SecondaryRect() const + { + return iSecondaryRect; + } + +void TMusEngDisplayHandlerStub::EnableDisplayL( TBool aEnable ) + { + iIsEnabled = aEnable; + } + +TBool TMusEngDisplayHandlerStub::IsDisplayEnabled() + { + return iIsEnabled; + } + +MMusEngDisplayHandler::TDisplayOrientation TMusEngDisplayHandlerStub::OrientationL() + { + return iOrientation; + } + +void TMusEngDisplayHandlerStub::SetOrientationL( TDisplayOrientation aOrientation ) + { + iOrientation = aOrientation; + } + +TBool TMusEngDisplayHandlerStub::IsDisplayActive() + { + return iIsActive; + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +CLcSessionObserverStub::CLcSessionObserverStub() + { + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +CLcSessionObserverStub::~CLcSessionObserverStub() + { + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CLcSessionObserverStub::StateChanged( MLcSession& aSession ) + { + iCalledFunction = ESessionStateChanged; + iCurrentSession = &aSession; + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CLcSessionObserverStub::StateChanged( MLcVideoPlayer& aPlayer ) + { + iCalledFunction = EPlayerStateChanged; + iCurrentPlayer = &aPlayer; + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CLcSessionObserverStub::Updated( MLcSession& aSession ) + { + iCalledFunction = ESessionUpdated; + iCurrentSession = &aSession; + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CLcSessionObserverStub::Updated( MLcVideoPlayer& aPlayer ) + { + iCalledFunction = EPlayerUpdated; + iCurrentPlayer = &aPlayer; + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CLcSessionObserverStub::Failed( MLcSession& aSession, TInt aError ) + { + iCalledFunction = ESessionFailed; + iCurrentSession = &aSession; + iError = aError; + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CLcSessionObserverStub::Failed( MLcVideoPlayer& aPlayer, TInt aError ) + { + iCalledFunction = EPlayerFailed; + iCurrentPlayer = &aPlayer; + iError = aError; + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CLcSessionObserverStub::SessionTimeChanged( + MLcSession& aSession, + const TTimeIntervalSeconds& aSeconds ) + { + iCalledFunction = ESessionTimeChanged; + iCurrentSession = &aSession; + iSessionTime = aSeconds.Int(); + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CLcSessionObserverStub::Reset() + { + iCalledFunction = EUnknown; + iCurrentSession = NULL; + iCurrentPlayer = NULL; + iSessionTime = 0; + iError = KErrNone; + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +TBool CLcSessionObserverStub::IsReseted() + { + return ( iCalledFunction == EUnknown && + iCurrentSession == NULL && + iCurrentPlayer == NULL && + iSessionTime == 0 && + iError == KErrNone ); + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +CLcUiProviderStub::CLcUiProviderStub() + { + + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +CLcUiProviderStub::~CLcUiProviderStub() + { + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +TBool CLcUiProviderStub::SelectRecipient( + MDesCArray& aRecipientAddresses, + TDes& aSelectedRecipientAddress ) + { + iCalledFunction = ESelectRecipient; + if ( aRecipientAddresses.MdcaCount() > 0 ) + { + aSelectedRecipientAddress = aRecipientAddresses.MdcaPoint( 0 ); + } + return iSimulatedReturnValue; + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +TBool CLcUiProviderStub::InputRecipient( TDes& aRecipientAddress ) + { + iCalledFunction = EInputRecipient; + aRecipientAddress = iRecipient; + return iSimulatedReturnValue; + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CLcUiProviderStub::HandleForegroundStatus( TBool aForeground ) + { + iCalledFunction = EHandleForegroundStatus; + iForeground = aForeground; + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CLcUiProviderStub::BlockUi( TBool /*aBlocked*/ ) + { + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CLcUiProviderStub::Reset() + { + iCalledFunction = EUnknown; + iRecipient.Set( KNullDesC ); + iSimulatedReturnValue = EFalse; + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +TLcWindowStub::TLcWindowStub() : + iEnabled( EFalse ), + iRect(), + iOrientation( MLcWindow::EPortrait ) + { + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void TLcWindowStub::EnableLcWindowL( TBool aEnable ) + { + iEnabled = aEnable; + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +TBool TLcWindowStub::IsLcWindowEnabled() + { + return iEnabled; + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void TLcWindowStub::SetLcWindowRectL( TRect aRect ) + { + iRect = aRect; + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +TRect TLcWindowStub::LcWindowRect() + { + delete HBufC::NewL( 1 ); + return iRect; + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void TLcWindowStub::SetLcWindowOrientationL( TLcWindowOrientation aOrientation ) + { + delete HBufC::NewL( 1 ); + iOrientation = aOrientation; + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void TLcWindowStub::Reset() + { + iEnabled = EFalse; + iOrientation = MLcWindow::EPortrait; + iRect.SetSize( TSize() ); + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +MLcWindow::TLcWindowOrientation TLcWindowStub::LcWindowOrientationL() + { + delete HBufC::NewL( 1 ); + return iOrientation; + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +TLcAudioControlStub::TLcAudioControlStub() + { + Reset(); + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +TBool TLcAudioControlStub::IsLcAudioMutedL() + { + delete HBufC::NewL( 1 ); + return iAudioMuted; + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void TLcAudioControlStub::MuteLcAudioL( TBool aMute ) + { + delete HBufC::NewL( 1 ); + iAudioMuted = aMute; + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +TBool TLcAudioControlStub::IsLcMicMutedL() + { + delete HBufC::NewL( 1 ); + return iMicMuted; + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void TLcAudioControlStub::MuteLcMicL( TBool aMute ) + { + delete HBufC::NewL( 1 ); + iMicMuted = aMute; + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +TBool TLcAudioControlStub::IsEnablingLcLoudspeakerAllowed() + { + return iEnablingLoudspeakerAllowed; + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void TLcAudioControlStub::EnableLcLoudspeakerL( TBool aEnabled ) + { + delete HBufC::NewL( 1 ); + iLoudspeakerEnabled = aEnabled; + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +TBool TLcAudioControlStub::IsLcLoudspeakerEnabled() + { + return iLoudspeakerEnabled; + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +TInt TLcAudioControlStub::LcVolumeL() + { + delete HBufC::NewL( 1 ); + return iVolume; + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void TLcAudioControlStub::SetLcVolumeL( TInt aValue ) + { + delete HBufC::NewL( 1 ); + iVolume = aValue; + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void TLcAudioControlStub::IncreaseLcVolumeL() + { + delete HBufC::NewL( 1 ); + iVolume++; + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void TLcAudioControlStub::DecreaseLcVolumeL() + { + delete HBufC::NewL( 1 ); + iVolume--; + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void TLcAudioControlStub::Reset() + { + iAudioMuted = EFalse; + iMicMuted = EFalse; + iEnablingLoudspeakerAllowed = EFalse; + iLoudspeakerEnabled = ETrue; iVolume = 0; - iDueUnknowCapas = EFalse; - iOrientationRefreshEndedCalled = EFalse; } @@ -556,3 +610,8 @@ : iRegistry( aRegistry ) { } + +void REComSession::DestroyedImplementation(TUid /*aDtorIDKey*/) + { + } + diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshengine/tsrc/ut_engine/src/ut_musengcamerahandler.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/mmshengine/tsrc/ut_engine/src/ut_musengcamerahandler.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,956 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + + +// INTERNAL INCLUDES +#include "ut_musengcamerahandler.h" +#include "musengstubs.h" +#include "musengtestdefs.h" +#include "musenglivesession.h" +#include "mussipprofilehandler.h" +#include "musengmceutils.h" +#include "mussettings.h" +#include "mussessionproperties.h" + +// SYSTEM INCLUDES +#include +#include +#include +#include +#include +#include +#include +#include + +const TUint KSipProfileId( 1 ); + +//use step in different time period +const TInt KZoomBigStepCount = 15; +const TInt KZoomSmallStepCount = KZoomBigStepCount*2; +const TInt KZoomStepMinSize = 1; + +// 0.4 second +const TInt64 KZoomFasterTime = 400000;//must bigger than 1/3 second + +//insure that step is 1 +#define USER_SLEEP User::After(KZoomFasterTime) + + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +UT_TMusEngCameraHandler* UT_TMusEngCameraHandler::NewL() + { + UT_TMusEngCameraHandler* self = UT_TMusEngCameraHandler::NewLC(); + CleanupStack::Pop( self ); + return self; + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +UT_TMusEngCameraHandler* UT_TMusEngCameraHandler::NewLC() + { + UT_TMusEngCameraHandler* self = new( ELeave ) UT_TMusEngCameraHandler(); + CleanupStack::PushL( self ); + self->ConstructL(); + return self; + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +UT_TMusEngCameraHandler::~UT_TMusEngCameraHandler() + { + // NOP + } + + +// ----------------------------------------------------------------------------- +// Default constructor +// ----------------------------------------------------------------------------- +// +UT_TMusEngCameraHandler::UT_TMusEngCameraHandler() + { + // NOP + } + + +// ----------------------------------------------------------------------------- +// Second phase construct +// ----------------------------------------------------------------------------- +// +void UT_TMusEngCameraHandler::ConstructL() + { + // The ConstructL from the base class CEUnitTestSuiteClass must be called. + // It generates the test case table. + CEUnitTestSuiteClass::ConstructL(); + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_TMusEngCameraHandler::SetupL() + { + iManager = CMceManager::NewL( TUid::Null(), NULL ); + iObserver = new( ELeave ) CMusEngObserverStub; + iObserver->iRoamingBetweenAPsAllowed = ETrue; + iProfileHandler = CMusSipProfileHandler::NewL( *iObserver ); + + iProfileHandler->CreateProfileL( KSipProfileId ); + + iSession = CMceOutSession::NewL( *iManager, + *iProfileHandler->Profile(), + KTestRecipientSipUri8() ); + + + CMceVideoStream* videoOut = CMceVideoStream::NewLC(); + + videoOut->AddSinkL( CMceRtpSink::NewLC() ); + CleanupStack::Pop(); + + videoOut->AddSinkL( CMceDisplaySink::NewLC( *iManager ) ); + CleanupStack::Pop(); + + videoOut->SetSourceL( CMceCameraSource::NewLC( *iManager ) ); + CleanupStack::Pop(); + + CMceVideoStream* videoIn = CMceVideoStream::NewLC(); + + CMceDisplaySink* receivingDisplay = CMceDisplaySink::NewLC( *iManager ); + videoIn->AddSinkL( receivingDisplay ); + CleanupStack::Pop(); + + videoIn->SetSourceL( CMceRtpSource::NewLC() ); + CleanupStack::Pop(); + + videoOut->BindL( videoIn ); + CleanupStack::Pop( videoIn ); + + iSession->AddStreamL( videoOut ); + CleanupStack::Pop( videoOut ); + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_TMusEngCameraHandler::Teardown() + { + delete iSession; + iSession = NULL; + iCameraHandler.SetSession( NULL ); + delete iProfileHandler; + delete iObserver; + delete iManager; + } + + + +// TEST CASES + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_TMusEngCameraHandler::UT_LcCameraCountL() + { + // Call without setting the MCE session + EUNIT_ASSERT_SPECIFIC_LEAVE( iCameraHandler.LcCameraCountL(), KErrNotReady ) + + iCameraHandler.SetSession( iSession ); + CMceCameraSource* camera = + MusEngMceUtils::GetCameraL( *( iSession ) ); + iCameraHandler.iCameraUsage = MusSettingsKeys::EUseCameraSwapping; + camera->iCameraCount = 2; + camera->iCameraIndex = TMusEngCameraHandler::EBackCamera; + + // Two cameras + EUNIT_ASSERT_EQUALS( 2, iCameraHandler.LcCameraCountL() ) + + // Two cameras, swapping cameras not allowed, use only main camera + iCameraHandler.iCameraUsage = MusSettingsKeys::EUseOnlyMainCamera; + camera->iCameraCount = 2; + EUNIT_ASSERT_EQUALS( 1, iCameraHandler.LcCameraCountL() ) + + // Two cameras, swapping cameras not allowed, use only main camera + iCameraHandler.iCameraUsage = MusSettingsKeys::EUseOnlySecondaryCamera; + camera->iCameraCount = 2; + EUNIT_ASSERT_EQUALS( 1, iCameraHandler.LcCameraCountL() ) + + // Only one camera available + iCameraHandler.iCameraUsage = MusSettingsKeys::EUseCameraSwapping; + camera->iCameraCount = 1; + EUNIT_ASSERT_EQUALS( 1, iCameraHandler.LcCameraCountL() ) + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_TMusEngCameraHandler::UT_ToggleLcCameraL() + { + EUNIT_ASSERT_EQUALS( TInt( TMusEngCameraHandler::ECameraNotAvailable ), + iCameraHandler.CurrentLcCameraIndex() ) + + iCameraHandler.SetSession( iSession ); + iCameraHandler.iCameraUsage = MusSettingsKeys::EUseCameraSwapping; + iCameraHandler.iCurrentCamera = TMusEngCameraHandler::EBackCamera; + + // Switch from back to front + iCameraHandler.ToggleLcCameraL(); + EUNIT_ASSERT_EQUALS( TInt( TMusEngCameraHandler::EFrontCamera ), + iCameraHandler.CurrentLcCameraIndex() ) + + // Switch from front to back + iCameraHandler.ToggleLcCameraL(); + EUNIT_ASSERT_EQUALS( TInt( TMusEngCameraHandler::EBackCamera ), + iCameraHandler.CurrentLcCameraIndex() ) + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_TMusEngCameraHandler::UT_MinLcZoomL() + { + // MCE Session has not been set + EUNIT_ASSERT_SPECIFIC_LEAVE( iCameraHandler.MinLcZoomL(), KErrNotReady ) + + // MCE Session has been set + iCameraHandler.SetSession( iSession ); + EUNIT_ASSERT_EQUALS( + iCameraHandler.iCameraInfo.iMinZoom, + iCameraHandler.MinLcZoomL() ) + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_TMusEngCameraHandler::UT_MaxLcZoomL() + { + // MCE Session has not been set + EUNIT_ASSERT_SPECIFIC_LEAVE( iCameraHandler.MaxLcZoomL(), KErrNotReady ) + + // MCE Session has been set + iCameraHandler.SetSession( iSession ); + EUNIT_ASSERT_EQUALS( + iCameraHandler.iCameraInfo.iMaxZoom + + iCameraHandler.iCameraInfo.iMaxDigitalZoom, + iCameraHandler.MaxLcZoomL() ) + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_TMusEngCameraHandler::UT_LcZoomValueL() + { + // MCE Session has not been set + EUNIT_ASSERT_SPECIFIC_LEAVE( iCameraHandler.LcZoomValueL(), KErrNotReady ) + + // Check that originally current and default zoom are the same + iCameraHandler.SetSession( iSession ); + CMceCameraSource* camera = MusEngMceUtils::GetCameraL( *( iSession ) ); + + // Zoom to maximum optical value + while ( camera->iZoomFactor < iCameraHandler.iCameraInfo.iMaxZoom ) + { + iCameraHandler.LcZoomInL(); + } + EUNIT_ASSERT_EQUALS( + iCameraHandler.iCameraInfo.iMaxZoom, + iCameraHandler.LcZoomValueL() ) + + // Zoom using digital zoom + iCameraHandler.LcZoomInL(); + EUNIT_ASSERT_EQUALS( + iCameraHandler.iCameraInfo.iMaxZoom + camera->iDigitalZoomFactor, + iCameraHandler.LcZoomValueL() ) + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_TMusEngCameraHandler::UT_SetLcZoomValueL() + { + // MCE Session has not been set + EUNIT_ASSERT_SPECIFIC_LEAVE( + iCameraHandler.SetLcZoomValueL( 1 ), + KErrNotReady ) + + // Value above the maximum zoom + iCameraHandler.SetSession( iSession ); + EUNIT_ASSERT_SPECIFIC_LEAVE( + iCameraHandler.SetLcZoomValueL( iCameraHandler.MaxLcZoomL() + 1 ), + KErrArgument ) + + // Value below the minimum zoom + EUNIT_ASSERT_SPECIFIC_LEAVE( + iCameraHandler.SetLcZoomValueL( iCameraHandler.MinLcZoomL() - 1 ), + KErrArgument ) + + // OK: set zoom factor + CMceCameraSource* camera = MusEngMceUtils::GetCameraL( *iSession ); + TInt zoomValue = iCameraHandler.iCameraInfo.iMaxZoom - 1; + iCameraHandler.SetLcZoomValueL( zoomValue ); + EUNIT_ASSERT_EQUALS( zoomValue, camera->ZoomFactorL() ) + + // OK: set digital zoom factor + zoomValue = iCameraHandler.iCameraInfo.iMaxZoom + 1; + iCameraHandler.SetLcZoomValueL( zoomValue ); + EUNIT_ASSERT_EQUALS( 1, camera->DigitalZoomFactorL() ) + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_TMusEngCameraHandler::UT_LcZoomInL() + { + // Check that zooming is not possible before invite + TRAPD( error, iCameraHandler.LcZoomInL() ); + MUS_TEST_FORWARD_ALLOC_FAILURE( error ); + EUNIT_ASSERT( error == KErrNotReady ); + + iCameraHandler.SetSession( iSession ); + + CMceCameraSource* camera = MusEngMceUtils::GetCameraL( *( iSession ) ); + + TInt oldZoomFactor = camera->iZoomFactor; + + // Check that zoom factor can be increased + USER_SLEEP; //insure that small step is used + iCameraHandler.LcZoomInL(); + EUNIT_ASSERT( camera->iZoomFactor == oldZoomFactor + + iCameraHandler.iSmallZoomStep ); + + //Check the "burst" mode (immediate second ZoomIn), big step should be used + TInt nZoom = camera->iZoomFactor + camera->iDigitalZoomFactor; + iCameraHandler.LcZoomInL(); + TInt nStep = camera->iZoomFactor + camera->iDigitalZoomFactor - nZoom; + EUNIT_ASSERT( nStep == iCameraHandler.iBigZoomStep ); + + // Zoom to maximum optical value + while ( camera->iZoomFactor < iCameraHandler.iCameraInfo.iMaxZoom ) + { + iCameraHandler.LcZoomInL(); + } + + TInt maxOpticalZoomFactor = camera->ZoomFactorL(); + + // Check that digital zoom is used instead of optical + iCameraHandler.LcZoomInL(); + EUNIT_ASSERT( camera->iZoomFactor == maxOpticalZoomFactor ); + EUNIT_ASSERT( camera->iDigitalZoomFactor > 0 ); + + // Zoom to maximum digital value + while ( camera->iDigitalZoomFactor < + iCameraHandler.iCameraInfo.iMaxDigitalZoom ) + { + iCameraHandler.LcZoomInL(); + } + + TInt maxDigitalZoomFactor = camera->DigitalZoomFactorL(); + + // Check that further zooming is impossible + iCameraHandler.LcZoomInL(); + EUNIT_ASSERT( camera->iZoomFactor == maxOpticalZoomFactor ); + EUNIT_ASSERT( camera->iDigitalZoomFactor == maxDigitalZoomFactor ); + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_TMusEngCameraHandler::UT_LcZoomOutL() + { + // Check that zooming is not possible before invite + TRAPD( error, iCameraHandler.LcZoomOutL() ); + MUS_TEST_FORWARD_ALLOC_FAILURE( error ); + EUNIT_ASSERT( error == KErrNotReady ); + + iCameraHandler.SetSession( iSession ); + + CMceCameraSource* camera = + MusEngMceUtils::GetCameraL( *(iSession) ); + + // Simulate maximum zoom + camera->iZoomFactor = iCameraHandler.iCameraInfo.iMaxZoom; + camera->iDigitalZoomFactor = iCameraHandler.iCameraInfo.iMaxDigitalZoom; + + // Check that digital zoom factor can be decreased + USER_SLEEP; //insure that small step is used + iCameraHandler.LcZoomOutL(); + EUNIT_ASSERT( camera->iZoomFactor == iCameraHandler.iCameraInfo.iMaxZoom ); + EUNIT_ASSERT( camera->iDigitalZoomFactor == + iCameraHandler.iCameraInfo.iMaxDigitalZoom - + iCameraHandler.iSmallZoomStep ); + + //Check the "burst" mode (immediate second ZoomOut), big step should be used + TInt nZoom = camera->iZoomFactor + camera->iDigitalZoomFactor; + iCameraHandler.LcZoomOutL(); + TInt nStep; + nStep = nZoom - (camera->iZoomFactor + camera->iDigitalZoomFactor ); + EUNIT_ASSERT( nStep == iCameraHandler.iBigZoomStep ); + + // Simulate maximum zoom again + camera->iZoomFactor = iCameraHandler.iCameraInfo.iMaxZoom; + camera->iDigitalZoomFactor = iCameraHandler.iCameraInfo.iMaxDigitalZoom; + + // Zoom to minimum digital zoom + while ( camera->iDigitalZoomFactor > 0 ) + { + iCameraHandler.LcZoomOutL(); + } + + EUNIT_ASSERT( camera->iZoomFactor == iCameraHandler.iCameraInfo.iMaxZoom ); + EUNIT_ASSERT( camera->iDigitalZoomFactor == 0 ); + + // Check that optical zoom is decreased instead of digital + USER_SLEEP; //insure that step is the small one + iCameraHandler.LcZoomOutL(); + EUNIT_ASSERT( camera->iZoomFactor == + iCameraHandler.iCameraInfo.iMaxZoom - + iCameraHandler.iSmallZoomStep ); + EUNIT_ASSERT( camera->iDigitalZoomFactor == 0 ); + + // Zoom to minimum optical zoom + while ( camera->iZoomFactor > iCameraHandler.iCameraInfo.iMinZoom ) + { + iCameraHandler.LcZoomOutL(); + } + + // Check that further zooming is impossible + iCameraHandler.LcZoomOutL(); + EUNIT_ASSERT( camera->iZoomFactor == iCameraHandler.iCameraInfo.iMinZoom ); + EUNIT_ASSERT( camera->iDigitalZoomFactor == 0 ); + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_TMusEngCameraHandler::UT_SetLcBrightnessL() + { + // Check that setting brightness is not possible before invite + EUNIT_ASSERT_SPECIFIC_LEAVE( + iCameraHandler.SetLcBrightnessL( KTestSomeBrightness ), + KErrNotReady ) + + iCameraHandler.SetSession( iSession ); + CMceCameraSource* camera = MusEngMceUtils::GetCameraL( *( iSession ) ); + + camera->iCameraInfo.iOptionsSupported = + camera->iCameraInfo.iOptionsSupported|TCameraInfo::EBrightnessSupported; + + // Check that originally current and default brightness are the same + EUNIT_ASSERT_EQUALS( iCameraHandler.iDefaultBrightness, + iCameraHandler.LcBrightnessL() ) + + // Test setting brightness + iCameraHandler.SetLcBrightnessL( KTestSomeBrightness ); + EUNIT_ASSERT_EQUALS( KTestSomeBrightness, iCameraHandler.LcBrightnessL() ) + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_TMusEngCameraHandler::UT_LcBrightnessL() + { + // Check that checking current brightness is not possible before invite + EUNIT_ASSERT_SPECIFIC_LEAVE( iCameraHandler.LcBrightnessL(), + KErrNotReady ) + + // All the other stuff checked in tests of SetBrightnessL + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_TMusEngCameraHandler::UT_MaxLcBrightnessL() + { + // MaxBrightness should return a constant + EUNIT_ASSERT_EQUALS( KTestMaxBrightness, iCameraHandler.MaxLcBrightnessL() ) + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_TMusEngCameraHandler::UT_MinLcBrightnessL() + { + // MinBrightness should return a constant + + EUNIT_ASSERT_EQUALS( KTestMinBrightness, iCameraHandler.MinLcBrightnessL() ) + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_TMusEngCameraHandler::UT_IncreaseLcBrightnessL() + { + // Check that increasing brightness is not possible before invite + EUNIT_ASSERT_SPECIFIC_LEAVE( iCameraHandler.IncreaseLcBrightnessL(), + KErrNotReady ) + + iCameraHandler.SetSession( iSession ); + CMceCameraSource* camera = MusEngMceUtils::GetCameraL( *(iSession) ); + + camera->iCameraInfo.iOptionsSupported = + camera->iCameraInfo.iOptionsSupported|TCameraInfo::EBrightnessSupported; + + // Check that originally current and default brightness are the same + EUNIT_ASSERT_EQUALS( iCameraHandler.iDefaultBrightness, + iCameraHandler.LcBrightnessL() ) + + // Check that brightness can be increased... + iCameraHandler.IncreaseLcBrightnessL(); + EUNIT_ASSERT_EQUALS( iCameraHandler.iDefaultBrightness + KTestBrightnessStepSize, + iCameraHandler.LcBrightnessL() ) + + // ... but only to maximum + iCameraHandler.SetLcBrightnessL( KTestMaxBrightness ); + iCameraHandler.IncreaseLcBrightnessL(); + + EUNIT_ASSERT_EQUALS( KTestMaxBrightness, + iCameraHandler.LcBrightnessL() ) + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_TMusEngCameraHandler::UT_DecreaseLcBrightnessL() + { + // Check that decreasing brightness is not possible before invite + EUNIT_ASSERT_SPECIFIC_LEAVE( iCameraHandler.DecreaseLcBrightnessL(), + KErrNotReady ) + + iCameraHandler.SetSession( iSession ); + CMceCameraSource* camera = MusEngMceUtils::GetCameraL( *(iSession) ); + + camera->iCameraInfo.iOptionsSupported = + camera->iCameraInfo.iOptionsSupported|TCameraInfo::EBrightnessSupported; + + // Check that originally current and default brightness are the same + EUNIT_ASSERT_EQUALS( iCameraHandler.iDefaultBrightness, + iCameraHandler.LcBrightnessL() ) + + // Check that brightness can be decreased... + iCameraHandler.DecreaseLcBrightnessL(); + + EUNIT_ASSERT_EQUALS( + iCameraHandler.iDefaultBrightness - KTestBrightnessStepSize, + iCameraHandler.LcBrightnessL() ) + + // ... but only to minimum + iCameraHandler.SetLcBrightnessL( KTestMinBrightness ); + iCameraHandler.DecreaseLcBrightnessL(); + EUNIT_ASSERT_EQUALS( KTestMinBrightness, + iCameraHandler.LcBrightnessL() ) + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_TMusEngCameraHandler::UT_PlayL() + { + // Check that resuming is not possible before invite + EUNIT_ASSERT_SPECIFIC_LEAVE( iCameraHandler.PlayL(), KErrNotReady ) + + iCameraHandler.SetSession( iSession ); + + iCameraHandler.PauseL(); + + CMceCameraSource* camera = MusEngMceUtils::GetCameraL( *(iSession) ); + iCameraHandler.PlayL(); + EUNIT_ASSERT( camera->IsEnabled() ) + + // Try to enable camera again, request should be ignored + iCameraHandler.PlayL(); + EUNIT_ASSERT( camera->IsEnabled() ) + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_TMusEngCameraHandler::UT_PauseL() + { + // Check that pausing is not possible before invite + EUNIT_ASSERT_SPECIFIC_LEAVE( iCameraHandler.PauseL(), KErrNotReady ) + + iCameraHandler.SetSession( iSession ); + + iCameraHandler.PlayL(); + + CMceCameraSource* camera = MusEngMceUtils::GetCameraL( *(iSession) ); + + iCameraHandler.PauseL(); + + EUNIT_ASSERT( !camera->IsEnabled() ) + + // Try to disable camera again, request should be ignored + iCameraHandler.PauseL(); + EUNIT_ASSERT( !camera->IsEnabled() ) + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_TMusEngCameraHandler::UT_IsPlayingL() + { + // Try without a session + EUNIT_ASSERT_SPECIFIC_LEAVE( iCameraHandler.IsPlayingL(), KErrNotReady ) + + // Normal cases + iCameraHandler.SetSession( iSession ); + + iCameraHandler.PlayL(); + EUNIT_ASSERT( iCameraHandler.IsPlayingL() ) + + iCameraHandler.PauseL(); + EUNIT_ASSERT( !iCameraHandler.IsPlayingL() ) + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_TMusEngCameraHandler::UT_InitializeZoomStepSizeL() + { + //Check that zooming steps have defualt values before session establishment + iCameraHandler.InitializeZoomStepSize(); + EUNIT_ASSERT( iCameraHandler.iSmallZoomStep == KZoomStepMinSize ); + EUNIT_ASSERT( iCameraHandler.iBigZoomStep == KZoomStepMinSize ); + + iCameraHandler.SetSession( iSession ); + CMceCameraSource* camera = MusEngMceUtils::GetCameraL( *(iSession) ); + + //Check that zooming step sizes have default value KZoomStepMinSize + //in case of zooming values range is smaller than KZoomBigStepCount + iCameraHandler.iCameraInfo.iMinZoom = 0; + iCameraHandler.iCameraInfo.iMaxZoom = 0; + iCameraHandler.iCameraInfo.iMaxDigitalZoom = KZoomBigStepCount / 2; + iCameraHandler.InitializeZoomStepSize(); + EUNIT_ASSERT( iCameraHandler.iSmallZoomStep == KZoomStepMinSize ); + EUNIT_ASSERT( iCameraHandler.iBigZoomStep == KZoomStepMinSize ); + + //Check that zooming step sizes have default value KZoomStepMinSize + //in case of zooming values range is bigger than KZoomBigStepCount, + //but smaller than 2*KZoomBigStepCount (KZoomSmallStepCount) + iCameraHandler.iCameraInfo.iMaxDigitalZoom = 2*KZoomBigStepCount - 1; + iCameraHandler.InitializeZoomStepSize(); + EUNIT_ASSERT( iCameraHandler.iSmallZoomStep == KZoomStepMinSize ); + EUNIT_ASSERT( iCameraHandler.iBigZoomStep == KZoomStepMinSize ); + + //Check zooming steps sizes in case of zooming values range is + //bigger than 2*KZoomBigStepCount and smaller than 2*KZoomSmallStepCount + iCameraHandler.iCameraInfo.iMinZoom = - KZoomBigStepCount; + iCameraHandler.iCameraInfo.iMaxZoom = KZoomBigStepCount; + iCameraHandler.iCameraInfo.iMaxDigitalZoom = KZoomBigStepCount; + //zooming range is (-KZoomBigStepCount, 2*KZoomBigStepCount) + iCameraHandler.InitializeZoomStepSize(); + EUNIT_ASSERT( iCameraHandler.iSmallZoomStep == KZoomStepMinSize ); + EUNIT_ASSERT( iCameraHandler.iBigZoomStep == 3 ); + + //Check zooming steps sizes in case of zooming values range is + //bigger than 2*KZoomSmallStepCount + iCameraHandler.iCameraInfo.iMaxZoom = KZoomSmallStepCount; + iCameraHandler.iCameraInfo.iMaxDigitalZoom = KZoomSmallStepCount; + iCameraHandler.iCameraInfo.iMinZoom = - KZoomSmallStepCount; + //zooming range is (-KZoomSmallStepCount, 2*KZoomSmallStepCount) + iCameraHandler.InitializeZoomStepSize(); + EUNIT_ASSERT( iCameraHandler.iSmallZoomStep == 3 ); + EUNIT_ASSERT( iCameraHandler.iBigZoomStep == 6 ); + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_TMusEngCameraHandler::UT_ChangeActiveCameraL() + { + iCameraHandler.SetSession( iSession ); + + CMceCameraSource* camera = + MusEngMceUtils::GetCameraL( *(iSession) ); + + //Camera is not enabled + camera->iIsEnabled = ETrue; + camera->iCameraCount = 2; + camera->iCameraIndex = 1; + iCameraHandler.ChangeActiveCameraL( TMusEngCameraHandler::EFrontCamera ); + EUNIT_ASSERT( camera->iCameraIndex == 1 ); + EUNIT_ASSERT( camera->iIsEnabled == ETrue ); + + //Camera is not enabled + camera->iIsEnabled = EFalse; + camera->iCameraCount = 2; + camera->iCameraIndex = 1; + iCameraHandler.ChangeActiveCameraL( TMusEngCameraHandler::EFrontCamera ); + EUNIT_ASSERT( camera->iCameraIndex == 1 ); + EUNIT_ASSERT( camera->iIsEnabled == EFalse ); + + //Check that iCameraInfo get updated after camera change + EUNIT_PRINT(_L("Check that iCameraInfo get updated after camera change")); + + //Check that iCameraInfo get updated after camera change + EUNIT_PRINT(_L("Check that iCameraInfo get updated after camera change")); + camera->iIsEnabled = ETrue; + camera->iCameraCount = 2; + camera->iCameraIndex = 0; + iCameraHandler.ChangeActiveCameraL( TMusEngCameraHandler::EBackCamera ); + EUNIT_ASSERT( camera->iCameraIndex == 0 ); + TCameraInfo infoBack = iCameraHandler.iCameraInfo; + iCameraHandler.ChangeActiveCameraL( TMusEngCameraHandler::EFrontCamera ); + EUNIT_ASSERT( camera->iCameraIndex == 1 ); + TCameraInfo infoFront = iCameraHandler.iCameraInfo; + + EUNIT_ASSERT( infoBack.iMaxZoom != infoFront.iMaxZoom ); + EUNIT_ASSERT( infoBack.iMaxDigitalZoom != infoFront.iMaxDigitalZoom ); + camera->iIsEnabled = ETrue; + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_TMusEngCameraHandler::UT_ChangeCameraL() + { + TRAPD( error, iCameraHandler.ChangeCameraL( TMusEngCameraHandler::EFrontCamera ) ); + MUS_TEST_FORWARD_ALLOC_FAILURE( error ); + EUNIT_ASSERT( error == KErrNotReady ); + + iCameraHandler.SetSession( iSession ); + + CMceCameraSource* camera = + MusEngMceUtils::GetCameraL( *(iSession) ); + //Only one camera is supported + camera->iCameraCount = 0; + camera->iCameraIndex = 0; + + iCameraHandler.ChangeCameraL( TMusEngCameraHandler::EFrontCamera ); + //EUNIT_ASSERT( camera->iCameraIndex == 0 ); + + // Front camera is supported. + camera->iCameraCount = 2; + camera->iCameraIndex = 1; + iCameraHandler.ChangeCameraL( TMusEngCameraHandler::EFrontCamera ); + EUNIT_ASSERT( camera->iCameraIndex == 1 ); + + //No change + camera->iCameraCount = 2; + camera->iCameraIndex = 0; + camera->iIsEnabled = EFalse; + iCameraHandler.ChangeCameraL( TMusEngCameraHandler::EFrontCamera ); + EUNIT_ASSERT( camera->iIsEnabled == EFalse ); + + // Back camera is supported. + camera->iCameraCount = 2; + camera->iCameraIndex = 1; + iCameraHandler.ChangeCameraL( TMusEngCameraHandler::EBackCamera ); + EUNIT_ASSERT( camera->iCameraIndex == 0 ); + + //No change + camera->iCameraCount = 2; + camera->iCameraIndex = 0; + camera->iIsEnabled = EFalse; + iCameraHandler.ChangeCameraL( TMusEngCameraHandler::EBackCamera ); + EUNIT_ASSERT( camera->iIsEnabled == EFalse ); + + // Next camera. + camera->iCameraCount = 2; + camera->iCameraIndex = 0; + iCameraHandler.ChangeCameraL( TMusEngCameraHandler::ECameraNotAvailable ); + EUNIT_ASSERT( camera->iCameraIndex == 1 ); + + camera->iCameraCount = 2; + camera->iCameraIndex = 1; + iCameraHandler.ChangeCameraL( TMusEngCameraHandler::ECameraNotAvailable ); + EUNIT_ASSERT( camera->iCameraIndex == 0 ); + } + + +// TEST TABLE + +EUNIT_BEGIN_TEST_TABLE( + UT_TMusEngCameraHandler, + "UT_TMusEngCameraHandler", + "UNIT" ) + +EUNIT_TEST( + "LcCameraCountL - test ", + "TMusEngCameraHandler", + "LcCameraCountL", + "FUNCTIONALITY", + SetupL, UT_LcCameraCountL, Teardown) + +EUNIT_TEST( + "ToggleLcCameraL - test ", + "TMusEngCameraHandler", + "ToggleLcCameraL", + "FUNCTIONALITY", + SetupL, UT_ToggleLcCameraL, Teardown) + +EUNIT_TEST( + "MinLcZoomL - test ", + "TMusEngCameraHandler", + "MinLcZoomL", + "FUNCTIONALITY", + SetupL, UT_MinLcZoomL, Teardown) + +EUNIT_TEST( + "MaxLcZoomL - test ", + "TMusEngCameraHandler", + "MaxLcZoomL", + "FUNCTIONALITY", + SetupL, UT_MaxLcZoomL, Teardown) + +EUNIT_TEST( + "LcZoomValueL - test ", + "TMusEngCameraHandler", + "LcZoomValueL", + "FUNCTIONALITY", + SetupL, UT_LcZoomValueL, Teardown) + +EUNIT_TEST( + "SetLcZoomValueL - test ", + "TMusEngCameraHandler", + "SetLcZoomValueL", + "FUNCTIONALITY", + SetupL, UT_SetLcZoomValueL, Teardown) + +EUNIT_TEST( + "LcZoomInL - test ", + "TMusEngCameraHandler", + "LcZoomInL", + "FUNCTIONALITY", + SetupL, UT_LcZoomInL, Teardown) + +EUNIT_TEST( + "LcZoomOutL - test ", + "TMusEngCameraHandler", + "LcZoomOutL", + "FUNCTIONALITY", + SetupL, UT_LcZoomOutL, Teardown) + +EUNIT_TEST( + "SetLcBrightnessL - test ", + "TMusEngCameraHandler", + "SetLcBrightnessL", + "FUNCTIONALITY", + SetupL, UT_SetLcBrightnessL, Teardown) + +EUNIT_TEST( + "LcBrightnessL - test ", + "TMusEngCameraHandler", + "LcBrightnessL", + "FUNCTIONALITY", + SetupL, UT_LcBrightnessL, Teardown) + +EUNIT_TEST( + "MaxLcBrightnessL - test ", + "TMusEngCameraHandler", + "MaxLcBrightnessL", + "FUNCTIONALITY", + SetupL, UT_MaxLcBrightnessL, Teardown) + +EUNIT_TEST( + "MinLcBrightnessL - test ", + "TMusEngCameraHandler", + "MinLcBrightnessL", + "FUNCTIONALITY", + SetupL, UT_MinLcBrightnessL, Teardown) + +EUNIT_TEST( + "IncreaseLcBrightnessL - test ", + "TMusEngCameraHandler", + "IncreaseLcBrightnessL", + "FUNCTIONALITY", + SetupL, UT_IncreaseLcBrightnessL, Teardown) + +EUNIT_TEST( + "DecreaseLcBrightnessL - test ", + "TMusEngCameraHandler", + "DecreaseLcBrightnessL", + "FUNCTIONALITY", + SetupL, UT_DecreaseLcBrightnessL, Teardown) + +EUNIT_TEST( + "PlayL - test ", + "TMusEngCameraHandler", + "PlayL", + "FUNCTIONALITY", + SetupL, UT_PlayL, Teardown) + +EUNIT_TEST( + "PauseL - test ", + "TMusEngCameraHandler", + "PauseL", + "FUNCTIONALITY", + SetupL, UT_PauseL, Teardown) + +EUNIT_TEST( + "IsPlayingL - test ", + "TMusEngCameraHandler", + "IsPlayingL", + "FUNCTIONALITY", + SetupL, UT_IsPlayingL, Teardown) + +EUNIT_TEST( + "InitializeZoomStepSize - test ", + "TMusEngCameraHandler", + "InitializeZoomStepSize", + "FUNCTIONALITY", + SetupL, UT_InitializeZoomStepSizeL, Teardown) + +EUNIT_TEST( + "ChangeCameraL - test ", + "TMusEngCameraHandler", + "ChangeCameraL", + "FUNCTIONALITY", + SetupL, UT_ChangeCameraL, Teardown) + +EUNIT_TEST( + "UT_ChangeActiveCameraL - test ", + "TMusEngCameraHandler", + "DisableAndEnableBeforeChangingCamera", + "FUNCTIONALITY", + SetupL, UT_ChangeActiveCameraL, Teardown) + +EUNIT_END_TEST_TABLE + +// END OF FILE + + diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshengine/tsrc/ut_engine/src/ut_musengclipsession.cpp --- a/mmsharing/mmshengine/tsrc/ut_engine/src/ut_musengclipsession.cpp Thu Aug 19 09:51:39 2010 +0300 +++ b/mmsharing/mmshengine/tsrc/ut_engine/src/ut_musengclipsession.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -23,10 +23,12 @@ #include "musengclipsession.h" #include "mussipprofilehandler.h" #include "musengmceutils.h" - +#include "mussessionproperties.h" // SYSTEM INCLUDES -#include +#include +#include +#include #include #include #include @@ -41,6 +43,7 @@ #include #include #include +#include // ----------------------------------------------------------------------------- @@ -106,33 +109,26 @@ // void UT_CMusEngClipSession::SetupL() { - iObserver = new( ELeave ) CMusEngObserverStub; - iClipSession = CMusEngClipSession::NewL( TRect(0,0, 100,100), - *iObserver, - *iObserver, - *iObserver ); - iClipSession->SetClipL( KTestVideoFileName ); + iLcSessionObserver = new( ELeave )CLcSessionObserverStub; + iLcUiProvider = new( ELeave )CLcUiProviderStub; + iAudioRoutingObserver = new( ELeave )CMusEngObserverStub; + + iClipSession = CMusEngClipSession::NewL(); + iClipSession->SetLcSessionObserver( iLcSessionObserver ); + iClipSession->SetLcUiProvider( iLcUiProvider ); + iClipSession->LocalVideoPlayer()->LcSourceFileControl()->SetLcFileNameL( + KTestVideoFileName() ); + delete iClipSession->iVideoCodecList; + iClipSession->iVideoCodecList = NULL; iClipSession->iVideoCodecList = KMceSDPNameH264().AllocL(); SIPStrings::OpenL(); + + User::LeaveIfError( RProperty::Set( NMusSessionApi::KCategoryUid, + NMusSessionApi::KRemoteSipAddress, + KTestRecipientSipUri ) ); } -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void UT_CMusEngClipSession::Setup2L() - { - iObserver = new( ELeave ) CMusEngObserverStub; - iClipSession = CMusEngClipSession::NewL( TRect(0,0, 100,100), - *iObserver, - *iObserver, - *iObserver ); - iClipSession->SetClipL( KTestVideoFileName ); - iClipSession->iVideoCodecList = KMceSDPNameH263().AllocL(); - - SIPStrings::OpenL(); - } // ----------------------------------------------------------------------------- // @@ -142,14 +138,16 @@ { SIPStrings::Close(); delete iClipSession; - delete iObserver; + delete iLcSessionObserver; + delete iLcUiProvider; + delete iAudioRoutingObserver; + PropertyHelper::Close(); } // TEST CASES - // ----------------------------------------------------------------------------- // // ----------------------------------------------------------------------------- @@ -157,662 +155,8 @@ void UT_CMusEngClipSession::UT_NewLL() { EUNIT_ASSERT( iClipSession ) - EUNIT_ASSERT( iClipSession->iFileName != KNullDesC() ) EUNIT_ASSERT( !iClipSession->iSession ) - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void UT_CMusEngClipSession::UT_SetClipLL() - { - // Try with protected file, cannot use EUNIT_ASSERT_SPECIFIC_LEAVE - TRAPD( error, iClipSession->SetClipL( KMusDrmProtectedFileName() ) ) - MUS_TEST_FORWARD_ALLOC_FAILURE( error ); - EUNIT_ASSERT( error == KErrPermissionDenied ) - EUNIT_ASSERT_EQUALS( iClipSession->iFileName, KTestVideoFileName() ) - - // Change the file before session is established - iClipSession->SetClipL( KTestAvcVideoFileName() ); - EUNIT_ASSERT_EQUALS( iClipSession->iFileName, KTestAvcVideoFileName() ) - EUNIT_ASSERT( !iClipSession->iSession ) - - // simulate session establishment - ESTABLISH_OUT_SESSION( iClipSession ); - - // Now test with established session - iClipSession->SetClipL( KTestVideoFileName() ); - - CMceFileSource* file = - MusEngMceUtils::GetFileSourceL( *iClipSession->iSession ); - - EUNIT_ASSERT_EQUALS( iClipSession->iFileName, KTestVideoFileName() ) - EUNIT_ASSERT_EQUALS( file->iFileName, KTestVideoFileName() ) - - - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void UT_CMusEngClipSession::UT_FastForwardLL() - { - // Try before establishment - EUNIT_ASSERT_SPECIFIC_LEAVE( iClipSession->FastForwardL( ETrue ), - KErrNotReady ) - - // Establish session, simulate position and duration and try again - ESTABLISH_OUT_SESSION( iClipSession ); - - CMceFileSource* file = - MusEngMceUtils::GetFileSourceL( *iClipSession->iSession ); - - file->iDuration = KMusEngTestFileDuration; - file->iPosition = KMusEngTestFilePosition; - - iClipSession->FastForwardL( ETrue ); - - EUNIT_ASSERT( !file->iIsEnabled ) - EUNIT_ASSERT( iClipSession->iFFWDStartTime.Int64() > 0 ) - EUNIT_ASSERT( iClipSession->iFRWDStartTime.Int64() == 0 ) - - // Simulate fastforwarding for a while - User::After( 1000 ); - - // Try to fastforward when already fastforwarding, will be ignored - iClipSession->FastForwardL( ETrue ); - EUNIT_ASSERT( !file->iIsEnabled ) - EUNIT_ASSERT( iClipSession->iFFWDStartTime.Int64() > 0 ) - EUNIT_ASSERT( iClipSession->iFRWDStartTime.Int64() == 0 ) - - // Stop fastforwarding - iClipSession->FastForwardL( EFalse ); - EUNIT_ASSERT( file->iPosition > KMusEngTestFilePosition ) - EUNIT_ASSERT( file->iPosition != file->iDuration ) - EUNIT_ASSERT( !file->iIsEnabled ) - EUNIT_ASSERT( iClipSession->iFFWDStartTime.Int64() == 0 ) - EUNIT_ASSERT( iClipSession->iFRWDStartTime.Int64() == 0 ) - - // Try to stop fastforwarding again, leaves - EUNIT_ASSERT_SPECIFIC_LEAVE( iClipSession->FastForwardL( EFalse ), - KErrAlreadyExists ) - - // Start fastrewinding - iClipSession->FastRewindL( ETrue ); - EUNIT_ASSERT( !file->iIsEnabled ) - EUNIT_ASSERT( iClipSession->iFFWDStartTime.Int64() == 0 ) - EUNIT_ASSERT( iClipSession->iFRWDStartTime.Int64() > 0 ) - - // Start fastforwarding, rewinding should be stopped and FFWD started - iClipSession->FastForwardL( ETrue ); - EUNIT_ASSERT( !file->iIsEnabled ) - EUNIT_ASSERT( iClipSession->iFFWDStartTime.Int64() > 0 ) - EUNIT_ASSERT( iClipSession->iFRWDStartTime.Int64() == 0 ) - - // Simulate fastforwarding for a while - User::After( 1000 ); - - // Simulate that clip is almost in end and fastforwarding would have - // continued over end, position should be set to duration. - - file->iPosition = TTimeIntervalMicroSeconds( file->iDuration.Int64() - 1 ); - - iClipSession->FastForwardL( EFalse ); - EUNIT_ASSERT( file->iPosition == file->iDuration ) - EUNIT_ASSERT( !file->iIsEnabled ) - EUNIT_ASSERT( iClipSession->iFFWDStartTime.Int64() == 0 ) - EUNIT_ASSERT( iClipSession->iFRWDStartTime.Int64() == 0 ) - - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void UT_CMusEngClipSession::UT_FastRewindLL() - { - // Try before establishment - EUNIT_ASSERT_SPECIFIC_LEAVE( iClipSession->FastRewindL( ETrue ), - KErrNotReady ) - - // Establish session, simulate position and duration and try again - ESTABLISH_OUT_SESSION( iClipSession ); - - CMceFileSource* file = - MusEngMceUtils::GetFileSourceL( *iClipSession->iSession ); - - file->iDuration = KMusEngTestFileDuration; - file->iPosition = KMusEngTestFilePosition; - - iClipSession->FastRewindL( ETrue ); - - EUNIT_ASSERT( !file->iIsEnabled ) - EUNIT_ASSERT( iClipSession->iFFWDStartTime.Int64() == 0 ) - EUNIT_ASSERT( iClipSession->iFRWDStartTime.Int64() > 0 ) - - // Simulate fastrewinding for a while - User::After( 1000 ); - - // Try to fastrewind when already fastrewinding, will be ignored - iClipSession->FastRewindL( ETrue ); - EUNIT_ASSERT( !file->iIsEnabled ) - EUNIT_ASSERT( iClipSession->iFFWDStartTime.Int64() == 0 ) - EUNIT_ASSERT( iClipSession->iFRWDStartTime.Int64() > 0 ) - - // Stop fastrewinding - iClipSession->FastRewindL( EFalse ); - EUNIT_ASSERT( file->iPosition < KMusEngTestFilePosition ) - EUNIT_ASSERT( file->iPosition != TTimeIntervalMicroSeconds( 0 ) ) - EUNIT_ASSERT( !file->iIsEnabled ) - EUNIT_ASSERT( iClipSession->iFFWDStartTime.Int64() == 0 ) - EUNIT_ASSERT( iClipSession->iFRWDStartTime.Int64() == 0 ) - - // Try to stop fastrewinding again, leaves - EUNIT_ASSERT_SPECIFIC_LEAVE( iClipSession->FastRewindL( EFalse ), - KErrAlreadyExists ) - - // Start fastforwarding - iClipSession->FastForwardL( ETrue ); - EUNIT_ASSERT( !file->iIsEnabled ) - EUNIT_ASSERT( iClipSession->iFFWDStartTime.Int64() >= 0 ) - EUNIT_ASSERT( iClipSession->iFRWDStartTime.Int64() == 0 ) - - // Start fastrewinding, forwarding should be stopped and FFWD started - iClipSession->FastRewindL( ETrue ); - EUNIT_ASSERT( !file->iIsEnabled ); - EUNIT_ASSERT( iClipSession->iFFWDStartTime.Int64() == 0 ) - EUNIT_ASSERT( iClipSession->iFRWDStartTime.Int64() >= 0 ) - - // Simulate that clip has just begun and fastrewinding would have - // continued over beginning, position should be set to zero. - - file->iPosition = TTimeIntervalMicroSeconds( 1 ); - - // Simulate fastrewinding for a while - User::After( 1000 ); - - iClipSession->FastRewindL( EFalse ); - EUNIT_ASSERT( file->iPosition == TTimeIntervalMicroSeconds( 0 ) ) - EUNIT_ASSERT( !file->iIsEnabled ) - EUNIT_ASSERT( iClipSession->iFFWDStartTime.Int64() == 0 ) - EUNIT_ASSERT( iClipSession->iFRWDStartTime.Int64() == 0 ) - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void UT_CMusEngClipSession::UT_PositionLL() - { - // Try before establishment - EUNIT_ASSERT_SPECIFIC_LEAVE( iClipSession->PositionL(), KErrNotReady ) - - // Establish session and try again - ESTABLISH_OUT_SESSION( iClipSession ); - - CMceFileSource* file = - MusEngMceUtils::GetFileSourceL( *iClipSession->iSession ); - file->iPosition = 2000000; - - EUNIT_ASSERT( iClipSession->PositionL().Int() * 1000000 == - file->iPosition.Int64() ) - - // Ask position while fastforwarding, it should be bigger than real position - iClipSession->FastForwardL( ETrue ); - - User::After( 1000000 ); // We have to wait since dividing in PositionL and - // multiplying before comparison loses difference - - EUNIT_ASSERT( iClipSession->PositionL().Int() * 1000000 > - file->iPosition.Int64() ) - - // Ask position while fastforwarding beyond end of clip, clip duration is - // returned - file->iPosition = file->iDuration; - - EUNIT_ASSERT( iClipSession->PositionL().Int() * 1000000 == - file->iDuration.Int64() ) - - // Stop fastforwarding, start fastrewinding, position is set to the end clip - iClipSession->FastForwardL( EFalse ); - iClipSession->FastRewindL( ETrue ); - - User::After( 1000000 ); // We have to wait since dividing in PositionL and - // multiplying before comparison loses difference - - // Ask position while fastrewinding, it should be smaller than real - // position - EUNIT_ASSERT( iClipSession->PositionL().Int() * 1000000 < - file->iPosition.Int64() ) - - // Ask position while fastrewinding beyond the beginning of clip, zero - // returned - file->iPosition = 0; - - EUNIT_ASSERT( iClipSession->PositionL().Int() * 1000000 == 0 ) - - // Asking position when rewinded to beginning but rewinding has ended - // and clip has not ended (position should not be altered in that case) - iClipSession->iRewindedToBeginning = ETrue; - file->iPosition = 0; - iClipSession->iFRWDStartTime = TTime( 0 ); - - EUNIT_ASSERT( iClipSession->PositionL().Int() * 1000000 == 0 ) - - // Position has proceeded from beginning, rewinding to beginning info - // is cleared. - file->iPosition = 10000000; - iClipSession->iFRWDStartTime = TTime( 0 ); - iClipSession->iRewindedToBeginning = EFalse; - EUNIT_ASSERT( iClipSession->PositionL().Int() * 1000000 == 10000000 ) - EUNIT_ASSERT( iClipSession->iRewindedToBeginning == EFalse ) - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void UT_CMusEngClipSession::UT_DurationLL() - { - // Try before establishment - EUNIT_ASSERT_SPECIFIC_LEAVE( iClipSession->DurationL(), KErrNotReady ) - - // Establish session and try again - ESTABLISH_OUT_SESSION( iClipSession ); - - CMceFileSource* file = - MusEngMceUtils::GetFileSourceL( *iClipSession->iSession ); - file->iDuration = 2000000; - - EUNIT_ASSERT( iClipSession->DurationL().Int() * 1000000 == - file->iDuration.Int64() ) - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void UT_CMusEngClipSession::UT_SetPositionLL() - { - TTimeIntervalSeconds time( 20 ); - - // Try before establishment - EUNIT_ASSERT_SPECIFIC_LEAVE( iClipSession->SetPositionL( time ), - KErrNotReady ) - - // Normal case with already disabled file source - ESTABLISH_OUT_SESSION( iClipSession ); - - CMceFileSource* file = - MusEngMceUtils::GetFileSourceL( *iClipSession->iSession ); - file->iIsEnabled = EFalse; - - iClipSession->SetPositionL( time ); - - EUNIT_ASSERT( file->iPosition.Int64() == - static_cast(time.Int()) * 1000000 ) - EUNIT_ASSERT( !file->iIsEnabled ) - - // Normal case with enabled file source - TTimeIntervalSeconds anotherTime( 30 ); - - file->iIsEnabled = ETrue; - iClipSession->SetPositionL( anotherTime ); - - EUNIT_ASSERT( file->iPosition.Int64() == - static_cast(anotherTime.Int()) * 1000000 ) - EUNIT_ASSERT( file->iIsEnabled ) - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void UT_CMusEngClipSession::UT_TranscodeLToAvcL() - { - // Check that transcoding is not possible before invite - EUNIT_ASSERT_SPECIFIC_LEAVE( - iClipSession->TranscodeL( KTestVideoFileName() ), - KErrNotReady ) - - // Construct session with video and audio streams that must transcoded - - CSIPProfile* profile = iClipSession->iSipProfileHandler->Profile(); - - iClipSession->iSession = CMceOutSession::NewL( - *(iClipSession->iManager), - *profile, - KTestRecipientSipUri8() ); - - CMceVideoStream* videoStream = CMceVideoStream::NewLC(); - - CMceRtpSink* rtpsink = CMceRtpSink::NewLC(); - videoStream->AddSinkL( rtpsink ); - CleanupStack::Pop( rtpsink ); - - CMceFileSource* fileSource = - CMceFileSource::NewLC( *iClipSession->iManager, KTestAvcVideoFileName() ); - videoStream->SetSourceL( fileSource ); - CleanupStack::Pop( fileSource ); - - iClipSession->iSession->AddStreamL( videoStream ); - CleanupStack::Pop( videoStream ); - - CMceAudioStream* audioStream = CMceAudioStream::NewLC(); - - audioStream->AddSinkL( CMceRtpSink::NewLC() ); - CleanupStack::Pop(); - - audioStream->SetSourceL( fileSource ); - - iClipSession->iSession->AddStreamL( audioStream ); - CleanupStack::Pop( audioStream ); - - videoStream->iState = CMceMediaStream::ETranscodingRequired; - audioStream->iState = CMceMediaStream::ETranscodingRequired; - - // Remove all codecs (file has some unknown codec type) - RPointerArray videoCodecs = videoStream->Codecs(); - for ( TInt i = 0; i < videoCodecs.Count(); i++ ) - { - videoStream->RemoveCodecL( *videoCodecs[ i ] ); - } - RPointerArray videoCodecs2 = videoStream->Codecs(); - EUNIT_ASSERT_EQUALS( videoCodecs2.Count(), 0 ) - EUNIT_ASSERT( audioStream->Codecs().Count() > 1 ) - - // Add some stream which must not be transcoded - - CMceAudioStream* inStream = CMceAudioStream::NewLC(); - - inStream->AddSinkL( CMceSpeakerSink::NewLC() ); - CleanupStack::Pop(); - - inStream->SetSourceL( CMceRtpSource::NewLC() ); - CleanupStack::Pop(); - - iClipSession->iSession->AddStreamL( inStream ); - CleanupStack::Pop( inStream ); - - // Transcode - iClipSession->TranscodeL( KTestAvcVideoFileName() ); - - // Check that transcoding has begun (transcoding to AVC as we know - // that other end supports it - EUNIT_ASSERT( iClipSession->iTranscodingOngoing ) - EUNIT_ASSERT( videoStream->State() == CMceMediaStream::ETranscoding ) - EUNIT_ASSERT( audioStream->State() == CMceMediaStream::ETranscoding ) - EUNIT_ASSERT( inStream->State() != CMceMediaStream::ETranscoding ) - - // Check that codecs have been replaced - const RPointerArray videoCodecs3 = videoStream->Codecs(); - EUNIT_ASSERT_EQUALS( videoCodecs3.Count(), 1 ) - EUNIT_ASSERT( videoCodecs3[0]->SdpName().FindF( KMceSDPNameH264() ) >= 0 ) - EUNIT_ASSERT( audioStream->Codecs().Count() == 1 ) - EUNIT_ASSERT( audioStream->Codecs()[0]->AllowedBitrates() == - KMceAllowedAmrNbBitrate475 ) - } - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void UT_CMusEngClipSession::UT_TranscodeLToH263L() - { - // Check that transcoding is not possible before invite - EUNIT_ASSERT_SPECIFIC_LEAVE( - iClipSession->TranscodeL( KTestVideoFileName() ), - KErrNotReady ) - - // Construct session with video and audio streams that must transcoded - - CSIPProfile* profile = iClipSession->iSipProfileHandler->Profile(); - - iClipSession->iSession = CMceOutSession::NewL( - *(iClipSession->iManager), - *profile, - KTestRecipientSipUri8() ); - - CMceVideoStream* videoStream = CMceVideoStream::NewLC(); - - CMceRtpSink* rtpsink = CMceRtpSink::NewLC(); - videoStream->AddSinkL( rtpsink ); - CleanupStack::Pop( rtpsink ); - - CMceFileSource* fileSource = - CMceFileSource::NewLC( *iClipSession->iManager, KTestAvcVideoFileName() ); - videoStream->SetSourceL( fileSource ); - CleanupStack::Pop( fileSource ); - - iClipSession->iSession->AddStreamL( videoStream ); - CleanupStack::Pop( videoStream ); - - CMceAudioStream* audioStream = CMceAudioStream::NewLC(); - - audioStream->AddSinkL( CMceRtpSink::NewLC() ); - CleanupStack::Pop(); - - audioStream->SetSourceL( fileSource ); - - iClipSession->iSession->AddStreamL( audioStream ); - CleanupStack::Pop( audioStream ); - - videoStream->iState = CMceMediaStream::ETranscodingRequired; - audioStream->iState = CMceMediaStream::ETranscodingRequired; - - const RPointerArray videoCodecs = videoStream->Codecs(); - EUNIT_ASSERT_EQUALS( videoCodecs.Count(), 1 ) - EUNIT_ASSERT( videoCodecs[0]->SdpName().FindF( KMceSDPNameH264() ) >= 0 ) - EUNIT_ASSERT( audioStream->Codecs().Count() > 1 ) - - TSize resolution(200,200); // Some value - videoStream->Codecs()[0]->SetResolutionL( resolution ); - audioStream->Codecs()[0]->SetBitrate( KMceAllowedAmrNbBitrateAll ); - - // Add some stream which must not be transcoded - - CMceAudioStream* inStream = CMceAudioStream::NewLC(); - - inStream->AddSinkL( CMceSpeakerSink::NewLC() ); - CleanupStack::Pop(); - - inStream->SetSourceL( CMceRtpSource::NewLC() ); - CleanupStack::Pop(); - - iClipSession->iSession->AddStreamL( inStream ); - CleanupStack::Pop( inStream ); - - // Transcode - iClipSession->TranscodeL( KTestAvcVideoFileName() ); - - // Check that transcoding has begun (transcoding to H263 as we don't - // know whether other end supports H264) EUNIT_ASSERT( iClipSession->iTranscodingOngoing ) - EUNIT_ASSERT( videoStream->State() == CMceMediaStream::ETranscoding ) - EUNIT_ASSERT( audioStream->State() == CMceMediaStream::ETranscoding ) - EUNIT_ASSERT( inStream->State() != CMceMediaStream::ETranscoding ) - - // Check that codecs have been replaced - const RPointerArray videoCodecs2 = videoStream->Codecs(); - EUNIT_ASSERT_EQUALS( videoCodecs2.Count(), 1 ) - EUNIT_ASSERT( videoCodecs2[0]->SdpName().FindF( KMceSDPNameH263() ) >= 0 ) - EUNIT_ASSERT( audioStream->Codecs().Count() == 1 ) - - EUNIT_ASSERT( videoStream->Codecs()[0]->Resolution() != resolution ) - EUNIT_ASSERT( audioStream->Codecs()[0]->AllowedBitrates() == - KMceAllowedAmrNbBitrate475 ) - } - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void UT_CMusEngClipSession::UT_CancelTranscodeLL() - { - // Check that canceling transcoding is not possible before actual - // transcoding - EUNIT_ASSERT_SPECIFIC_LEAVE( iClipSession->CancelTranscodeL(), - KErrNotReady ) - - // Construct session structure - - CSIPProfile* profile = iClipSession->iSipProfileHandler->Profile(); - - iClipSession->iSession = CMceOutSession::NewL( - *(iClipSession->iManager), - *profile, - KTestRecipientSipUri8() ); - - CMceVideoStream* videoStream = CMceVideoStream::NewLC(); - - CMceRtpSink* rtpsink = CMceRtpSink::NewLC(); - videoStream->AddSinkL( rtpsink ); - CleanupStack::Pop( rtpsink ); - - CMceFileSource* fileSource = - CMceFileSource::NewLC( *iClipSession->iManager, KTestVideoFileName() ); - videoStream->SetSourceL( fileSource ); - CleanupStack::Pop( fileSource ); - - iClipSession->iSession->AddStreamL( videoStream ); - CleanupStack::Pop( videoStream ); - - CMceAudioStream* audioStream = CMceAudioStream::NewLC(); - - audioStream->AddSinkL( CMceRtpSink::NewLC() ); - CleanupStack::Pop(); - - audioStream->SetSourceL( fileSource ); - - iClipSession->iSession->AddStreamL( audioStream ); - CleanupStack::Pop( audioStream ); - - // Set need for transcoding - videoStream->iState = CMceMediaStream::ETranscodingRequired; - audioStream->iState = CMceMediaStream::ETranscodingRequired; - - // Transcode - iClipSession->TranscodeL( KTestAvcVideoFileName() ); - - EUNIT_ASSERT( videoStream->State() == CMceMediaStream::ETranscoding ) - EUNIT_ASSERT( audioStream->State() == CMceMediaStream::ETranscoding ) - - // Cancel - iClipSession->CancelTranscodeL(); - - EUNIT_ASSERT( videoStream->State() == - CMceMediaStream::ETranscodingRequired ) - EUNIT_ASSERT( audioStream->State() == - CMceMediaStream::ETranscodingRequired ) - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void UT_CMusEngClipSession::UT_PlayLL() - { - // Check that resuming is not possible before invite - EUNIT_ASSERT_SPECIFIC_LEAVE( iClipSession->PlayL(), KErrNotReady ) - - ESTABLISH_OUT_SESSION( iClipSession ); - - // Check that playing is not possible during FFWD - iClipSession->iFFWDStartTime = TTime( 10 ); - EUNIT_ASSERT_SPECIFIC_LEAVE( iClipSession->PlayL(), KErrNotReady ) - iClipSession->iFFWDStartTime = TTime( 0 ); - - // Check that playing is not possible during FRWD - iClipSession->iFRWDStartTime = TTime( 10 ); - EUNIT_ASSERT_SPECIFIC_LEAVE( iClipSession->PlayL(), KErrNotReady ) - iClipSession->iFRWDStartTime = TTime( 0 ); - - // Successful case - CMceFileSource* file = - MusEngMceUtils::GetFileSourceL( *(iClipSession->iSession) ); - - file->iIsEnabled = EFalse; - - iClipSession->PlayL(); - - EUNIT_ASSERT( file->IsEnabled() ) - - // Try to play again, request should be ignored - - iClipSession->PlayL(); - - EUNIT_ASSERT( file->IsEnabled() ) - - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void UT_CMusEngClipSession::UT_PauseLL() - { - // Check that pausing is not possible before invite - EUNIT_ASSERT_SPECIFIC_LEAVE( iClipSession->PauseL(), KErrNotReady ) - - ESTABLISH_OUT_SESSION( iClipSession ); - - // Check that pausing is not possible during FFWD - iClipSession->iFFWDStartTime = TTime( 10 ); - EUNIT_ASSERT_SPECIFIC_LEAVE( iClipSession->PauseL(), KErrNotReady ) - iClipSession->iFFWDStartTime = TTime( 0 ); - - // Check that pausing is not possible during FRWD - iClipSession->iFRWDStartTime = TTime( 10 ); - EUNIT_ASSERT_SPECIFIC_LEAVE( iClipSession->PauseL(), KErrNotReady ) - iClipSession->iFRWDStartTime = TTime( 0 ); - - // Successful case - - CMceFileSource* file = - MusEngMceUtils::GetFileSourceL( *(iClipSession->iSession) ); - - file->iIsEnabled = ETrue; - - iClipSession->PauseL(); - - EUNIT_ASSERT( !file->IsEnabled() ) - - // Try to pause again, request should be ignored - - iClipSession->PauseL(); - - EUNIT_ASSERT( !file->IsEnabled() ) - - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void UT_CMusEngClipSession::UT_IsPlayingLL() - { - // Try without a session - EUNIT_ASSERT_SPECIFIC_LEAVE( iClipSession->IsPlayingL(), KErrNotReady ); - - // Normal cases - ESTABLISH_OUT_SESSION( iClipSession ); - - iClipSession->PlayL(); - EUNIT_ASSERT( iClipSession->IsPlayingL() ) - - iClipSession->PauseL(); - EUNIT_ASSERT( !iClipSession->IsPlayingL() ) + EUNIT_ASSERT( iClipSession->iMceManagerUid == TUid::Uid( KMusUiUid ) ); } @@ -821,39 +165,26 @@ // ----------------------------------------------------------------------------- // void UT_CMusEngClipSession::UT_CompleteSessionStructureLL() - { - + { CMceStreamBundle* localBundle = - CMceStreamBundle::NewLC( CMceStreamBundle::ELS ); + CMceStreamBundle::NewLC( CMceStreamBundle::ELS ); // Check that structure cannot be completed before creating the session EUNIT_ASSERT_SPECIFIC_LEAVE( iClipSession->CompleteSessionStructureL( *localBundle ), KErrNotReady ) - // Check that structure cannot be completed before setting the file name - iClipSession->iFileName = KNullDesC(); - CSIPProfile* profile = iClipSession->iSipProfileHandler->Profile(); - + // Normal case + CSIPProfile* profile = iClipSession->iSipProfileHandler->Profile(); iClipSession->iSession = CMceOutSession::NewL( - *(iClipSession->iManager), - *profile, - KTestRecipientSipUri8() ); - - EUNIT_ASSERT_SPECIFIC_LEAVE( - iClipSession->CompleteSessionStructureL( *localBundle ), - KErrNotReady ) + *iClipSession->iManager, *profile, KTestRecipientSipUri8() ); - // Normal case - iClipSession->iFileName = KTestVideoFileName(); iClipSession->CompleteSessionStructureL( *localBundle ); - EUNIT_ASSERT( iClipSession->iSession->Streams().Count() == 3 ) EUNIT_ASSERT( iClipSession->iSession->Streams()[0]->Type() == KMceVideo ) EUNIT_ASSERT( iClipSession->iSession->Streams()[0]->Source() ) EUNIT_ASSERT( iClipSession->iSession->Streams()[0]->Source()->Type() == - KMceFileSource ) - EUNIT_ASSERT( !iClipSession->IsPlayingL() ) + KMceFileSource ) EUNIT_ASSERT( iClipSession->iSession->Streams()[0]->Sinks().Count() == 1 ) EUNIT_ASSERT( iClipSession->iSession->Streams()[0]->Sinks()[0]->Type() == KMceRTPSink ) @@ -883,7 +214,7 @@ CleanupStack::PopAndDestroy( videoStream ); // Simulate sending invite - iClipSession->InviteL( KTestRecipientSipUri() ); + iClipSession->EstablishLcSessionL(); // Try all the stream states CMceMediaStream* changedStream = iClipSession->iSession->Streams()[0]; @@ -892,56 +223,57 @@ changedStream->iState = CMceMediaStream::EUninitialized; static_cast(iClipSession)->StreamStateChanged( *changedStream ); - EUNIT_ASSERT( iObserver->IsReseted() ) + EUNIT_ASSERT( iLcSessionObserver->IsReseted() ) // EInitialized, stream is initialized changedStream->iState = CMceMediaStream::EInitialized; static_cast(iClipSession)->StreamStateChanged( *changedStream ); - EUNIT_ASSERT( iObserver->IsReseted() ) + EUNIT_ASSERT( iLcSessionObserver->IsReseted() ) // EBuffering, stream is buffering changedStream->iState = CMceMediaStream::EBuffering; static_cast(iClipSession)->StreamStateChanged( *changedStream ); - EUNIT_ASSERT( iObserver->IsReseted() ) + EUNIT_ASSERT( iLcSessionObserver->IsReseted() ) // EIdle, stream is not receiving RTP changedStream->iState = CMceMediaStream::EIdle; static_cast(iClipSession)->StreamStateChanged( *changedStream ); - EUNIT_ASSERT( iObserver->iStreamIdleCalled ) + EUNIT_ASSERT( iLcSessionObserver->IsReseted() ) // EStreaming, stream is streaming changedStream->iState = CMceMediaStream::EStreaming; static_cast(iClipSession)->StreamStateChanged( *changedStream ); - EUNIT_ASSERT( iObserver->iStreamStreamingCalled ) - iObserver->Reset(); + EUNIT_ASSERT_EQUALS( TInt( iLcSessionObserver->iCalledFunction ), + TInt( CLcSessionObserverStub::EPlayerStateChanged ) ) + iLcSessionObserver->Reset(); // EDisabled, stream is explicitly disabled changedStream->iState = CMceMediaStream::EDisabled; static_cast(iClipSession)->StreamStateChanged( *changedStream ); - EUNIT_ASSERT( iObserver->IsReseted() ) + EUNIT_ASSERT( iLcSessionObserver->IsReseted() ) // ENoResources, stream has no needed resources to stream changedStream->iState = CMceMediaStream::ENoResources; static_cast(iClipSession)->StreamStateChanged( *changedStream ); - EUNIT_ASSERT( iObserver->IsReseted() ) + EUNIT_ASSERT( iLcSessionObserver->IsReseted() ) // ETranscodingRequired, stream requires non-realtime transcoding changedStream->iState = CMceMediaStream::ETranscodingRequired; static_cast(iClipSession)->StreamStateChanged( *changedStream ); - EUNIT_ASSERT( iObserver->IsReseted() ) + EUNIT_ASSERT( iLcSessionObserver->IsReseted() ) // ETranscoding, stream is transcoding in non-realtime changedStream->iState = CMceMediaStream::ETranscoding; static_cast(iClipSession)->StreamStateChanged( *changedStream ); - EUNIT_ASSERT( iObserver->IsReseted() ) + EUNIT_ASSERT( iLcSessionObserver->IsReseted() ) } @@ -962,7 +294,7 @@ CleanupStack::PopAndDestroy( videoStream ); // Simulate sending invite - iClipSession->InviteL( KTestRecipientSipUri() ); + iClipSession->EstablishLcSessionL(); // Try all the non-default stream states CMceMediaStream* changedStream = iClipSession->iSession->Streams()[0]; @@ -973,68 +305,9 @@ changedSource->iIsEnabled = EFalse; iClipSession->StreamStateChanged( *changedStream, *changedSource ); - EUNIT_ASSERT( iObserver->iEndOfClipCalled == ETrue ) + // TODO: EUNIT_ASSERT( iLcSessionObserver->iEndOfClipCalled ) changedSource->iIsEnabled = ETrue; - iObserver->Reset(); - - // ETranscodingRequired, transcoding has failed - iClipSession->iSession->iState = CMceSession::EIdle; - iClipSession->iTranscodingOngoing = ETrue; - changedStream->iState = CMceMediaStream::ETranscodingRequired; - static_cast(iClipSession)->StreamStateChanged( - *changedStream, *changedSource ); - EUNIT_ASSERT( iObserver->iTranscodingFailedCalled ) - EUNIT_ASSERT( !iClipSession->iTranscodingOngoing ) - iObserver->Reset(); - - // ETranscoding, transcoding has progresssed - iClipSession->iSession->iState = CMceSession::EIdle; - changedStream->iState = CMceMediaStream::ETranscoding; - static_cast(changedSource)->iTranscodingPercentage = 20; - static_cast(iClipSession)->StreamStateChanged( - *changedStream, *changedSource ); - EUNIT_ASSERT( iObserver->iTranscodingProgressedPercentage == 20 ) - iObserver->Reset(); - - // ETranscoding, transcoding has progresssed, querying percentage fails - iClipSession->iSession->iState = CMceSession::EIdle; - changedStream->iState = CMceMediaStream::ETranscoding; - iObserver->iTranscodingProgressedPercentage = -1; // make assertion possible - static_cast(changedSource)->iFailWithCode = KErrNotReady; - static_cast(changedSource)->iTranscodingPercentage = 30; - static_cast(iClipSession)->StreamStateChanged( - *changedStream, *changedSource ); - EUNIT_ASSERT( iObserver->iTranscodingProgressedPercentage == 0 ) - iObserver->Reset(); - - // EInitialized, transcoding has completed, establishment fails - iClipSession->iSession->iState = CMceSession::EIdle; - iClipSession->iSession->iFailWithCode = KErrCorrupt; // != KErrNone - iClipSession->iTranscodingOngoing = ETrue; - changedStream->iState = CMceMediaStream::EInitialized; - static_cast(changedSource)->iTranscodingPercentage = 100; - static_cast(iClipSession)->StreamStateChanged( - *changedStream, *changedSource ); - EUNIT_ASSERT( iObserver->iTranscodingCompletedInitCalled ) - EUNIT_ASSERT( iObserver->iTranscodingCompletedFinalizeCalled ) - EUNIT_ASSERT( iObserver->iSessionFailedCalled ) - EUNIT_ASSERT( !iClipSession->iTranscodingOngoing ) - iObserver->Reset(); - - // EInitialized, transcoding has completed, establishment succeeds - iClipSession->iSession->iState = CMceSession::EIdle; - iClipSession->iTranscodingOngoing = ETrue; - changedStream->iState = CMceMediaStream::EInitialized; - static_cast(changedSource)->iTranscodingPercentage = 100; - static_cast(iClipSession)->StreamStateChanged( - *changedStream, *changedSource ); - EUNIT_ASSERT( iObserver->iTranscodingCompletedInitCalled ) - EUNIT_ASSERT( iObserver->iTranscodingCompletedFinalizeCalled ) - // Next cannot be asserted since it is not true with alloc decoration - // EUNIT_ASSERT( !iObserver->iSessionFailedCalled ) - EUNIT_ASSERT( !iClipSession->iTranscodingOngoing ) - iObserver->Reset(); - + iLcSessionObserver->Reset(); // Test default stream state change behavior, remove or change when // behavior changes @@ -1044,13 +317,13 @@ changedStream->iState = CMceMediaStream::EUninitialized; static_cast(iClipSession)->StreamStateChanged( *changedStream, *changedSource ); - EUNIT_ASSERT( iObserver->IsReseted() ) + EUNIT_ASSERT( iLcSessionObserver->IsReseted() ) // EInitialized, stream is initialized changedStream->iState = CMceMediaStream::EInitialized; static_cast(iClipSession)->StreamStateChanged( *changedStream, *changedSource ); - EUNIT_ASSERT( iObserver->IsReseted() ) + EUNIT_ASSERT( iLcSessionObserver->IsReseted() ) // Special meaning (Transcoding ready), tested separately @@ -1058,20 +331,21 @@ changedStream->iState = CMceMediaStream::EBuffering; static_cast(iClipSession)->StreamStateChanged( *changedStream, *changedSource ); - EUNIT_ASSERT( iObserver->IsReseted() ) + EUNIT_ASSERT( iLcSessionObserver->IsReseted() ) // EIdle, stream is not receiving RTP changedStream->iState = CMceMediaStream::EIdle; static_cast(iClipSession)->StreamStateChanged( *changedStream, *changedSource ); - EUNIT_ASSERT( iObserver->iStreamIdleCalled ) + EUNIT_ASSERT( iLcSessionObserver->IsReseted() ) // EStreaming, stream is streaming changedStream->iState = CMceMediaStream::EStreaming; static_cast(iClipSession)->StreamStateChanged( *changedStream, *changedSource ); - EUNIT_ASSERT( iObserver->iStreamStreamingCalled ) - iObserver->Reset(); + EUNIT_ASSERT_EQUALS( TInt( iLcSessionObserver->iCalledFunction ), + TInt( CLcSessionObserverStub::EPlayerStateChanged ) ) + iLcSessionObserver->Reset(); // EDisabled, stream is explicitly disabled // This state has non-default meaning, tested before defaults @@ -1080,9 +354,7 @@ changedStream->iState = CMceMediaStream::ENoResources; static_cast(iClipSession)->StreamStateChanged( *changedStream, *changedSource ); - EUNIT_ASSERT( iObserver->IsReseted() ) - - + EUNIT_ASSERT( iLcSessionObserver->IsReseted() ) } @@ -1102,7 +374,7 @@ CleanupStack::PopAndDestroy( videoStream ); // Simulate sending invite - iClipSession->InviteL( KTestRecipientSipUri() ); + iClipSession->EstablishLcSessionL(); // Test default stream state change behavior CMceMediaStream* changedStream = iClipSession->iSession->Streams()[0]; @@ -1113,65 +385,65 @@ static_cast(iClipSession)->StreamStateChanged( *changedStream, *changedSink ); - EUNIT_ASSERT( iObserver->IsReseted() ) + EUNIT_ASSERT( iLcSessionObserver->IsReseted() ) // EInitialized, stream is initialized changedStream->iState = CMceMediaStream::EInitialized; static_cast(iClipSession)->StreamStateChanged( *changedStream, *changedSink ); - EUNIT_ASSERT( iObserver->IsReseted() ) + EUNIT_ASSERT( iLcSessionObserver->IsReseted() ) // EBuffering, stream is buffering changedStream->iState = CMceMediaStream::EBuffering; static_cast(iClipSession)->StreamStateChanged( *changedStream, *changedSink ); - EUNIT_ASSERT( iObserver->IsReseted() ) + EUNIT_ASSERT( iLcSessionObserver->IsReseted() ) // EIdle, stream is not receiving RTP changedStream->iState = CMceMediaStream::EIdle; static_cast(iClipSession)->StreamStateChanged( *changedStream, *changedSink ); - EUNIT_ASSERT( iObserver->iStreamIdleCalled ); + EUNIT_ASSERT( iLcSessionObserver->IsReseted() ) // EStreaming, stream is streaming changedStream->iState = CMceMediaStream::EStreaming; static_cast(iClipSession)->StreamStateChanged( *changedStream, *changedSink ); - EUNIT_ASSERT( iObserver->iStreamStreamingCalled ) - iObserver->Reset(); + EUNIT_ASSERT_EQUALS( TInt( iLcSessionObserver->iCalledFunction ), + TInt( CLcSessionObserverStub::EPlayerStateChanged ) ) + iLcSessionObserver->Reset(); // EDisabled, stream is explicitly disabled changedStream->iState = CMceMediaStream::EDisabled; static_cast(iClipSession)->StreamStateChanged( *changedStream, *changedSink ); - EUNIT_ASSERT( iObserver->IsReseted() ) + EUNIT_ASSERT( iLcSessionObserver->IsReseted() ) // ENoResources, stream has no needed resources to stream changedStream->iState = CMceMediaStream::ENoResources; static_cast(iClipSession)->StreamStateChanged( *changedStream, *changedSink ); - EUNIT_ASSERT( iObserver->IsReseted() ) + EUNIT_ASSERT( iLcSessionObserver->IsReseted() ) // ETranscodingRequired, stream requires non-realtime transcoding changedStream->iState = CMceMediaStream::ETranscodingRequired; static_cast(iClipSession)->StreamStateChanged( *changedStream, *changedSink ); - EUNIT_ASSERT( iObserver->IsReseted() ) + EUNIT_ASSERT( iLcSessionObserver->IsReseted() ) // ETranscoding, stream is transcoding in non-realtime changedStream->iState = CMceMediaStream::ETranscoding; static_cast(iClipSession)->StreamStateChanged( *changedStream, *changedSink ); - EUNIT_ASSERT( iObserver->IsReseted() ) - + EUNIT_ASSERT( iLcSessionObserver->IsReseted() ) } @@ -1265,65 +537,6 @@ // // ----------------------------------------------------------------------------- // -void UT_CMusEngClipSession::UT_HasClipEndedL() - { - // Try before establishing the session - EUNIT_ASSERT( !iClipSession->HasClipEnded() ) - - // Try with session, but without video out stream - - CSIPProfile* profile = iClipSession->iSipProfileHandler->Profile(); - - iClipSession->iSession = CMceOutSession::NewL( - *(iClipSession->iManager), - *profile, - KTestRecipientSipUri8() ); - - EUNIT_ASSERT( !iClipSession->HasClipEnded() ) - - // Try with video out stream without source... - CMceVideoStream* videoOut = CMceVideoStream::NewLC(); - - videoOut->AddSinkL( CMceRtpSink::NewLC() ); - CleanupStack::Pop(); - - iClipSession->iSession->AddStreamL( videoOut ); - CleanupStack::Pop( videoOut ); - - EUNIT_ASSERT( !iClipSession->HasClipEnded() ) - - // And with enabled source and stream - videoOut->SetSourceL( CMceFileSource::NewLC( *iClipSession->iManager, - iClipSession->iFileName ) ); - CleanupStack::Pop(); - - EUNIT_ASSERT( !iClipSession->HasClipEnded() ) - - // try with different position and duration - (static_cast (videoOut->Source()))->iPosition = 90; - (static_cast (videoOut->Source()))->iDuration = 111; - EUNIT_ASSERT( !iClipSession->HasClipEnded() ) - - // Disapling source - (static_cast (videoOut->Source()))->DisableL(); - EUNIT_ASSERT( !iClipSession->HasClipEnded() ) - - // Disapling stream - videoOut->iState = CMceMediaStream::EDisabled; - EUNIT_ASSERT( !iClipSession->HasClipEnded() ) - - // and finaly try with "real" end of clip - (static_cast (videoOut->Source()))->iPosition = 0; - (static_cast (videoOut->Source()))->iDuration = 111; - - EUNIT_ASSERT( iClipSession->HasClipEnded() ) - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// void UT_CMusEngClipSession::UT_ConstructAudioStructureLL() { @@ -1356,8 +569,9 @@ videoOut->AddSinkL( CMceRtpSink::NewLC() ); CleanupStack::Pop(); - videoOut->SetSourceL( CMceFileSource::NewLC( *iClipSession->iManager, - iClipSession->iFileName ) ); + videoOut->SetSourceL( CMceFileSource::NewLC( + *iClipSession->iManager, + iClipSession->LocalVideoPlayer()->LcSourceFileControl()->LcFileName() ) ); CleanupStack::Pop(); iClipSession->iSession->AddStreamL( videoOut ); @@ -1424,7 +638,8 @@ // void UT_CMusEngClipSession::UT_EstablishSessionLL() { - iClipSession->SetClipL( KTestAvcVideoFileName() ); + iClipSession->LocalVideoPlayer()->LcSourceFileControl()->SetLcFileNameL( + KTestAvcVideoFileName() ); // Try to establish, must fail, because of missing session TRAPD( error, iClipSession->EstablishSessionL() ); @@ -1437,7 +652,7 @@ // 1.Test that in case the peer party supports H264, no transcoding is needed // Call to CMusEngOutMceSession::InviteL leads to call to EstablishL - iClipSession->InviteL( KTestRecipientSipUri ); + iClipSession->EstablishLcSessionL(); const RPointerArray& streams = iClipSession->iSession->Streams(); @@ -1453,13 +668,10 @@ } } - - EUNIT_ASSERT( !iObserver->iTranscodingNeededCalled ) - EUNIT_ASSERT( !iClipSession->iTranscodingRequiredDueMissingOptions ) /////// // 2.Test the case when we don't know whether peer supports H264, - // transcoding is needed, H264 codec has to be removed from the codec list + // transcoding is needed => function will leave with KErrNotSupported delete iClipSession->iSession; iClipSession->iSession = NULL; @@ -1467,140 +679,25 @@ delete iClipSession->iVideoCodecList; iClipSession->iVideoCodecList = NULL; - // Call to CMusEngOutMceSession::InviteL leads to call to EstablishL - iClipSession->InviteL( KTestRecipientSipUri ); - - const RPointerArray& streams2 = iClipSession->iSession->Streams(); - - for ( TInt i = 0; i < streams2.Count(); ++i ) - { - if ( streams2[i]->Type() == KMceVideo ) - { - CMceVideoStream* videoStream = static_cast( streams2[i] ); - const RPointerArray codecs = videoStream->Codecs(); - EUNIT_ASSERT_EQUALS( codecs.Count(), 1 ) - EUNIT_ASSERT( codecs[0]->SdpName().FindF( KMceSDPNameH263() ) >= 0 ) - } - } - - EUNIT_ASSERT( iObserver->iTranscodingNeededCalled ) - EUNIT_ASSERT( iObserver->iDueUnknowCapas ) - EUNIT_ASSERT( iClipSession->iTranscodingRequiredDueMissingOptions ) + MUSENG_EUNIT_ASSERT_SPECIFIC_LEAVE( + iClipSession->EstablishLcSessionL(), + KErrNotSupported ) + /////// - // 3. Establish behaves differently at second round in case clip is AVC - // and because remote party's capabilities were unknown. Use-case is such - // that AVC is tried to be transcoded first but if it fails, invite is retried - // by using AVC - iObserver->Reset(); - iClipSession->InviteL( KTestRecipientSipUri ); - const RPointerArray& testStreams = iClipSession->iSession->Streams(); - - for ( TInt i = 0; i < testStreams.Count(); ++i ) - { - if ( testStreams[i]->Type() == KMceVideo ) - { - CMceVideoStream* videoStream = static_cast( testStreams[i] ); - const RPointerArray codecs = videoStream->Codecs(); - EUNIT_ASSERT_EQUALS( codecs.Count(), 1 ) - EUNIT_ASSERT( codecs[0]->SdpName().FindF( KMceSDPNameH264() ) >= 0 ) - } - } - - EUNIT_ASSERT( !iObserver->iTranscodingNeededCalled ) - EUNIT_ASSERT( !iObserver->iDueUnknowCapas ) - - /////// - // 4.Test that if peer doesn't supports H264, transcoding is needed - // H264 codec has to be removed from the codec list - - iObserver->iTranscodingNeededCalled = EFalse; + // 3.Test that if peer doesn't supports H264, transcoding is needed + // => function will leave with KErrNotSupported delete iClipSession->iSession; iClipSession->iSession = NULL; iClipSession->iVideoCodecList = KMceSDPNameH263().AllocL(); - // Call to CMusEngOutMceSession::InviteL leads to call to EstablishL - iClipSession->InviteL( KTestRecipientSipUri ); - - const RPointerArray& streams3 = iClipSession->iSession->Streams(); - - for ( TInt i = 0; i < streams3.Count(); ++i ) - { - if ( streams3[i]->Type() == KMceVideo ) - { - CMceVideoStream* videoStream = static_cast( streams3[i] ); - const RPointerArray codecs = videoStream->Codecs(); - EUNIT_ASSERT_EQUALS( codecs.Count(), 1 ) - EUNIT_ASSERT( codecs[0]->SdpName().FindF( KMceSDPNameH263() ) >= 0 ) - } - } - - EUNIT_ASSERT( iObserver->iTranscodingNeededCalled ) - EUNIT_ASSERT( !iObserver->iDueUnknowCapas ) - + MUSENG_EUNIT_ASSERT_SPECIFIC_LEAVE( + iClipSession->EstablishLcSessionL(), + KErrNotSupported ) } -void UT_CMusEngClipSession::UT_IsRewindFromEndL() - { - // Try before establishing the session - EUNIT_ASSERT( !iClipSession->IsRewindFromEnd() ) - - // Try with session, but without video out stream - - CSIPProfile* profile = iClipSession->iSipProfileHandler->Profile(); - - iClipSession->iSession = CMceOutSession::NewL( - *(iClipSession->iManager), - *profile, - KTestRecipientSipUri8() ); - - EUNIT_ASSERT( !iClipSession->IsRewindFromEnd() ) - - // Try with video out stream without source... - CMceVideoStream* videoOut = CMceVideoStream::NewLC(); - - videoOut->AddSinkL( CMceRtpSink::NewLC() ); - CleanupStack::Pop(); - - iClipSession->iSession->AddStreamL( videoOut ); - CleanupStack::Pop( videoOut ); - - EUNIT_ASSERT( !iClipSession->IsRewindFromEnd() ) - - // And with enabled source and stream - videoOut->SetSourceL( CMceFileSource::NewLC( *iClipSession->iManager, - iClipSession->iFileName ) ); - CleanupStack::Pop(); - - EUNIT_ASSERT( !iClipSession->IsRewindFromEnd() ) - - // try with different position and duration - (static_cast (videoOut->Source()))->iPosition = 90; - (static_cast (videoOut->Source()))->iDuration = 111; - EUNIT_ASSERT( !iClipSession->IsRewindFromEnd() ) - - // Disapling source - (static_cast (videoOut->Source()))->DisableL(); - EUNIT_ASSERT( !iClipSession->IsRewindFromEnd() ) - - // Disapling stream - videoOut->iState = CMceMediaStream::EDisabled; - EUNIT_ASSERT( iClipSession->IsRewindFromEnd() ) - - iClipSession->iPause = ETrue; - EUNIT_ASSERT( !iClipSession->IsRewindFromEnd() ) - - iClipSession->iPause = EFalse; - EUNIT_ASSERT( iClipSession->IsRewindFromEnd() ) - - // and finaly try with "real" end of clip - (static_cast (videoOut->Source()))->iPosition = 0; - (static_cast (videoOut->Source()))->iDuration = 111; - - EUNIT_ASSERT( !iClipSession->IsRewindFromEnd() ) - } // TEST TABLE @@ -1617,90 +714,6 @@ SetupL, UT_NewLL, Teardown) EUNIT_TEST( - "SetClipL - test ", - "CMusEngClipSession", - "AetClipL", - "FUNCTIONALITY", - SetupL, UT_SetClipLL, Teardown) - -EUNIT_TEST( - "FastForwardL - test ", - "CMusEngClipSession", - "FastForwardL", - "FUNCTIONALITY", - SetupL, UT_FastForwardLL, Teardown) - -EUNIT_TEST( - "FastRewindL - test ", - "CMusEngClipSession", - "FastRewindL", - "FUNCTIONALITY", - SetupL, UT_FastRewindLL, Teardown) - -EUNIT_TEST( - "PositionL - test ", - "CMusEngClipSession", - "PositionL", - "FUNCTIONALITY", - SetupL, UT_PositionLL, Teardown) - -EUNIT_TEST( - "DurationL - test ", - "CMusEngClipSession", - "DurationL", - "FUNCTIONALITY", - SetupL, UT_DurationLL, Teardown) - -EUNIT_TEST( - "SetPositionL - test ", - "CMusEngClipSession", - "SetPositionL", - "FUNCTIONALITY", - SetupL, UT_SetPositionLL, Teardown) - -EUNIT_TEST( - "TranscodeL - To AVC test ", - "CMusEngClipSession", - "TranscodeL", - "FUNCTIONALITY", - SetupL, UT_TranscodeLToAvcL, Teardown) - -EUNIT_TEST( - "TranscodeL - To H263 test ", - "CMusEngClipSession", - "TranscodeL", - "FUNCTIONALITY", - Setup2L, UT_TranscodeLToH263L, Teardown) - -EUNIT_TEST( - "CancelTranscodeL - test ", - "CMusEngClipSession", - "CancelTranscodeL", - "FUNCTIONALITY", - SetupL, UT_CancelTranscodeLL, Teardown) - -EUNIT_TEST( - "PlayL - test ", - "CMusEngClipSession", - "PlayL", - "FUNCTIONALITY", - SetupL, UT_PlayLL, Teardown) - -EUNIT_TEST( - "PauseL - test ", - "CMusEngClipSession", - "PauseL", - "FUNCTIONALITY", - SetupL, UT_PauseLL, Teardown) - -EUNIT_TEST( - "IsPlayingL - test ", - "CMusEngClipSession", - "IsPlayingL", - "FUNCTIONALITY", - SetupL, UT_IsPlayingLL, Teardown) - -EUNIT_TEST( "CompleteSessionStructureL - test ", "CMusEngClipSession", "CompleteSessionStructureL", @@ -1741,13 +754,6 @@ "AddVideoCodecL", "FUNCTIONALITY", SetupL, UT_AddVideoCodecLL, Teardown) - -EUNIT_TEST( - "HasClipEnded - test ", - "CMusEngClipSession", - "HasClipEnded", - "FUNCTIONALITY", - SetupL, UT_HasClipEndedL, Teardown) EUNIT_TEST( "ConstructAudioStructureL - test ", @@ -1770,13 +776,7 @@ "FUNCTIONALITY", SetupL, UT_EstablishSessionLL, Teardown) -EUNIT_TEST( - "IsRewindFromEnd - test ", - "CMusEngClipSession", - "IsRewindFromEnd", - "FUNCTIONALITY", - SetupL, UT_IsRewindFromEndL, Teardown) - + EUNIT_END_TEST_TABLE // END OF FILE diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshengine/tsrc/ut_engine/src/ut_musengclipvideoplayer.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/mmshengine/tsrc/ut_engine/src/ut_musengclipvideoplayer.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,805 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + + +// INTERNAL INCLUDES +#include "ut_musengclipvideoplayer.h" +#include "musengtestdefs.h" +#include "musengmceutils.h" +#include "musengclipvideoplayer.h" +#include "mceoutsession.h" +#include "mcevideostream.h" +#include "mcertpsink.h" +#include "mcefilesource.h" +#include "drmcommon.h" + +// SYSTEM INCLUDES +#include + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +UT_CMusEngClipVideoPlayer* UT_CMusEngClipVideoPlayer::NewL() + { + UT_CMusEngClipVideoPlayer* self = UT_CMusEngClipVideoPlayer::NewLC(); + CleanupStack::Pop( self ); + return self; + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +UT_CMusEngClipVideoPlayer* UT_CMusEngClipVideoPlayer::NewLC() + { + UT_CMusEngClipVideoPlayer* self = new( ELeave ) UT_CMusEngClipVideoPlayer(); + CleanupStack::PushL( self ); + self->ConstructL(); + return self; + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +UT_CMusEngClipVideoPlayer::~UT_CMusEngClipVideoPlayer() + { + // NOP + } + +// ----------------------------------------------------------------------------- +// Default constructor +// ----------------------------------------------------------------------------- +// +UT_CMusEngClipVideoPlayer::UT_CMusEngClipVideoPlayer() + { + // NOP + } + +// ----------------------------------------------------------------------------- +// Second phase construct +// ----------------------------------------------------------------------------- +// +void UT_CMusEngClipVideoPlayer::ConstructL() + { + // The ConstructL from the base class CEUnitTestSuiteClass must be called. + // It generates the test case table. + CEUnitTestSuiteClass::ConstructL(); + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_CMusEngClipVideoPlayer::SetupL() + { + iMceSession = CMceOutSession::NewL(); + CMceVideoStream* videoStream = CMceVideoStream::NewLC(); + CMceRtpSink* rtpsink = CMceRtpSink::NewLC(); + videoStream->AddSinkL( rtpsink ); + CleanupStack::Pop( rtpsink ); + CMceFileSource* fileSource = + CMceFileSource::NewLC( *iMceSession->iManager, KTestVideoFileName() ); + fileSource->DisableL(); + videoStream->SetSourceL( fileSource ); + CleanupStack::Pop( fileSource ); + iMceSession->AddStreamL( videoStream ); + CleanupStack::Pop( videoStream ); + iClipVideoPlayer = + CMusEngClipVideoPlayer::NewL( + iDisplayHandlerStub, + iLcAudioControlStub ); + iClipVideoPlayer->SetMceSession( iMceSession ); + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_CMusEngClipVideoPlayer::Teardown() + { + delete iClipVideoPlayer; + delete iMceSession; + iLcAudioControlStub.Reset(); + } + + +// TEST CASES + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_CMusEngClipVideoPlayer::UT_HasClipEndedL() + { + CMceSession* invalidMceSession = CMceOutSession::NewL(); + CleanupStack::PushL( invalidMceSession ); + + // Try before establishing the session + iClipVideoPlayer->SetMceSession( NULL ); + EUNIT_ASSERT( !iClipVideoPlayer->HasClipEnded() ) + + // Try with session, but without video out stream + iClipVideoPlayer->SetMceSession( invalidMceSession ); + EUNIT_ASSERT( !iClipVideoPlayer->HasClipEnded() ) + + // Try with video out stream without source... + CMceVideoStream* videoStream = CMceVideoStream::NewLC(); + videoStream->AddSinkL( CMceRtpSink::NewLC() ); + CleanupStack::Pop(); + invalidMceSession->AddStreamL( videoStream ); + CleanupStack::Pop( videoStream ); + EUNIT_ASSERT( !iClipVideoPlayer->HasClipEnded() ) + + // And with enabled source and stream + CMceFileSource* fileSource = + CMceFileSource::NewLC( + *invalidMceSession->iManager, KTestVideoFileName() ); + videoStream->SetSourceL( fileSource ); + CleanupStack::Pop( fileSource ); + EUNIT_ASSERT( !iClipVideoPlayer->HasClipEnded() ) + + // try with different position and duration + fileSource->iPosition = 90; + fileSource->iDuration = 111; + EUNIT_ASSERT( !iClipVideoPlayer->HasClipEnded() ) + + // Disabled source + fileSource->DisableL(); + EUNIT_ASSERT( !iClipVideoPlayer->HasClipEnded() ) + + // Disabled stream + videoStream->iState = CMceMediaStream::EDisabled; + EUNIT_ASSERT( !iClipVideoPlayer->HasClipEnded() ) + + // and finaly try with "real" end of clip + fileSource->iPosition = 0; + fileSource->iDuration = 111; + + EUNIT_ASSERT( iClipVideoPlayer->HasClipEnded() ) + + CleanupStack::PopAndDestroy( invalidMceSession ); + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_CMusEngClipVideoPlayer::UT_LcVideoPlayerStateL() + { + // iMceSession not set + iClipVideoPlayer->SetMceSession( NULL ); + EUNIT_ASSERT_EQUALS( TInt( MLcVideoPlayer::EUnavailable ), + TInt( iClipVideoPlayer->LcVideoPlayerState() ) ) + iClipVideoPlayer->SetMceSession( iMceSession ); + + // Establish Session and simulate media playing. + iMceSession->iState = CMceSession::EEstablished; + for ( TInt i = 0; i < iMceSession->Streams().Count(); i++ ) + { + iMceSession->Streams()[i]->iState = CMceMediaStream::EStreaming; + } + + EUNIT_ASSERT_EQUALS( TInt( MLcVideoPlayer::EPlaying ), + TInt( iClipVideoPlayer->LcVideoPlayerState() ) ) + + // Media streams unavailable + iMceSession->Streams()[0]->iState = CMceMediaStream::EUninitialized; + EUNIT_ASSERT_EQUALS( TInt( MLcVideoPlayer::EUnavailable ), + TInt( iClipVideoPlayer->LcVideoPlayerState() ) ) + + // All other stream states + iMceSession->Streams()[0]->iState = CMceMediaStream::EInitialized; + EUNIT_ASSERT_EQUALS( TInt( MLcVideoPlayer::EInit ), + TInt( iClipVideoPlayer->LcVideoPlayerState() ) ) + + iMceSession->Streams()[0]->iState = CMceMediaStream::EBuffering; + EUNIT_ASSERT_EQUALS( TInt( MLcVideoPlayer::EBuffering ), + TInt( iClipVideoPlayer->LcVideoPlayerState() ) ) + + iMceSession->Streams()[0]->iState = CMceMediaStream::EIdle; + EUNIT_ASSERT_EQUALS( TInt( MLcVideoPlayer::EPaused ), + TInt( iClipVideoPlayer->LcVideoPlayerState() ) ) + + iMceSession->Streams()[0]->iState = CMceMediaStream::EDisabled; + EUNIT_ASSERT_EQUALS( TInt( MLcVideoPlayer::EPaused ), + TInt( iClipVideoPlayer->LcVideoPlayerState() ) ) + + iMceSession->Streams()[0]->iState = CMceMediaStream::EStreaming; + EUNIT_ASSERT_EQUALS( TInt( MLcVideoPlayer::EPlaying ), + TInt( iClipVideoPlayer->LcVideoPlayerState() ) ) + + iMceSession->Streams()[0]->iState = CMceMediaStream::ENoResources; + EUNIT_ASSERT_EQUALS( TInt( MLcVideoPlayer::EUnavailable ), + TInt( iClipVideoPlayer->LcVideoPlayerState() ) ) + + iMceSession->Streams()[0]->iState = CMceMediaStream::ETranscodingRequired; + EUNIT_ASSERT_EQUALS( TInt( MLcVideoPlayer::EUnavailable ), + TInt( iClipVideoPlayer->LcVideoPlayerState() ) ) + + iMceSession->Streams()[0]->iState = CMceMediaStream::ETranscoding; + EUNIT_ASSERT_EQUALS( TInt( MLcVideoPlayer::EUnavailable ), + TInt( iClipVideoPlayer->LcVideoPlayerState() ) ) + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_CMusEngClipVideoPlayer::UT_LcPlayL() + { + // MCE session not set + iClipVideoPlayer->SetMceSession( NULL ); + EUNIT_ASSERT_SPECIFIC_LEAVE( iClipVideoPlayer->LcPlayL(), KErrNotReady ) + + // File source does not exist + iClipVideoPlayer->SetMceSession( iMceSession ); + iMceSession->Streams()[ 0 ]->SetSourceL( NULL ); + EUNIT_ASSERT_SPECIFIC_LEAVE( iClipVideoPlayer->LcPlayL(), KErrNotFound ) + + // Play + CMceFileSource* fileSource = + CMceFileSource::NewLC( *iMceSession->iManager, KTestVideoFileName() ); + fileSource->DisableL(); + iMceSession->Streams()[ 0 ]->SetSourceL( fileSource ); + CleanupStack::Pop( fileSource ); + EUNIT_ASSERT( !iClipVideoPlayer->LcIsPlayingL() ) + iClipVideoPlayer->LcPlayL(); + EUNIT_ASSERT( iClipVideoPlayer->LcIsPlayingL() ) + + // Try to play again + iClipVideoPlayer->LcPlayL(); + EUNIT_ASSERT( iClipVideoPlayer->LcIsPlayingL() ) + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_CMusEngClipVideoPlayer::UT_LcPauseL() + { + // MCE session not set + iClipVideoPlayer->SetMceSession( NULL ); + EUNIT_ASSERT_SPECIFIC_LEAVE( iClipVideoPlayer->LcPauseL(), KErrNotReady ) + + // File source does not exist + iClipVideoPlayer->SetMceSession( iMceSession ); + iMceSession->Streams()[ 0 ]->SetSourceL( NULL ); + EUNIT_ASSERT_SPECIFIC_LEAVE( iClipVideoPlayer->LcPauseL(), KErrNotFound ) + + // Pause + CMceFileSource* fileSource = + CMceFileSource::NewLC( *iMceSession->iManager, KTestVideoFileName() ); + fileSource->EnableL(); + iMceSession->Streams()[ 0 ]->SetSourceL( fileSource ); + CleanupStack::Pop( fileSource ); + EUNIT_ASSERT( iClipVideoPlayer->LcIsPlayingL() ) + iClipVideoPlayer->LcPauseL(); + EUNIT_ASSERT( !iClipVideoPlayer->LcIsPlayingL() ) + + // Try to pause already paused clip + iClipVideoPlayer->LcPauseL(); + EUNIT_ASSERT( !iClipVideoPlayer->LcIsPlayingL() ) + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_CMusEngClipVideoPlayer::UT_LcIsPlayingL() + { + // MCE session not set + iClipVideoPlayer->SetMceSession( NULL ); + EUNIT_ASSERT_SPECIFIC_LEAVE( iClipVideoPlayer->LcIsPlayingL(), KErrNotReady ) + + // Player is not playing when file source is disabled + iClipVideoPlayer->SetMceSession( iMceSession ); + CMceFileSource* file = MusEngMceUtils::GetFileSourceL( *iMceSession ); + file->DisableL(); + EUNIT_ASSERT( !iClipVideoPlayer->LcIsPlayingL() ) + + // Player is playing when file source is enabled + file->EnableL(); + EUNIT_ASSERT( iClipVideoPlayer->LcIsPlayingL() ) + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_CMusEngClipVideoPlayer::UT_SetLcFileNameL() + { + // Set file before iMceSession is set + CMceFileSource* file = MusEngMceUtils::GetFileSourceL( *iMceSession ); + iClipVideoPlayer->SetMceSession( NULL ); + iClipVideoPlayer->SetLcFileNameL( KTestAvcVideoFileName() ); + EUNIT_ASSERT_EQUALS( iClipVideoPlayer->LcFileName(), KTestAvcVideoFileName() ) + EUNIT_ASSERT_EQUALS( file->iFileName, KTestVideoFileName() ) + + // Set file after session is set + iClipVideoPlayer->SetMceSession( iMceSession ); + file->iFileName = KTestAvcVideoFileName(); + iClipVideoPlayer->SetLcFileNameL( KTestVideoFileName() ); + EUNIT_ASSERT_EQUALS( iClipVideoPlayer->LcFileName(), KTestVideoFileName() ) + EUNIT_ASSERT_EQUALS( file->iFileName, KTestVideoFileName() ) + + // Set DRM protected file, file names not changed + MUSENG_EUNIT_ASSERT_SPECIFIC_LEAVE( + iClipVideoPlayer->SetLcFileNameL( KMusDrmProtectedFileName() ), + KErrPermissionDenied ) + EUNIT_ASSERT_EQUALS( iClipVideoPlayer->LcFileName(), KTestVideoFileName() ) + EUNIT_ASSERT_EQUALS( file->iFileName, KTestVideoFileName() ) + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_CMusEngClipVideoPlayer::UT_LcFastForwardL() + { + // Try before establishment + iClipVideoPlayer->SetMceSession( NULL ); + EUNIT_ASSERT_SPECIFIC_LEAVE( + iClipVideoPlayer->LcFastForwardL( ETrue ), KErrNotReady ) + + // Establish session, simulate position and duration and try again + iClipVideoPlayer->SetMceSession( iMceSession ); + CMceFileSource* file = MusEngMceUtils::GetFileSourceL( *iMceSession ); + file->iDuration = KMusEngTestFileDuration; + file->iPosition = KMusEngTestFilePosition; + iClipVideoPlayer->LcFastForwardL( ETrue ); + EUNIT_ASSERT( !file->iIsEnabled ) + EUNIT_ASSERT( iClipVideoPlayer->iFFWDStartTime.Int64() > 0 ) + EUNIT_ASSERT( iClipVideoPlayer->iFRWDStartTime.Int64() == 0 ) + + // Simulate fastforwarding for a while + User::After( 1000 ); + + // Try to fastforward when already fastforwarding, will be ignored + iClipVideoPlayer->LcFastForwardL( ETrue ); + EUNIT_ASSERT( !file->iIsEnabled ) + EUNIT_ASSERT( iClipVideoPlayer->iFFWDStartTime.Int64() > 0 ) + EUNIT_ASSERT( iClipVideoPlayer->iFRWDStartTime.Int64() == 0 ) + + // Stop fastforwarding + iClipVideoPlayer->LcFastForwardL( EFalse ); + EUNIT_ASSERT( file->iPosition > KMusEngTestFilePosition ) + EUNIT_ASSERT( file->iPosition != file->iDuration ) + EUNIT_ASSERT( !file->iIsEnabled ) + EUNIT_ASSERT( iClipVideoPlayer->iFFWDStartTime.Int64() == 0 ) + EUNIT_ASSERT( iClipVideoPlayer->iFRWDStartTime.Int64() == 0 ) + + // Try to stop fastforwarding again, leaves + EUNIT_ASSERT_SPECIFIC_LEAVE( + iClipVideoPlayer->LcFastForwardL( EFalse ), KErrAlreadyExists ) + + // Start fastrewinding + iClipVideoPlayer->LcFastRewindL( ETrue ); + EUNIT_ASSERT( !file->iIsEnabled ) + EUNIT_ASSERT( iClipVideoPlayer->iFFWDStartTime.Int64() == 0 ) + EUNIT_ASSERT( iClipVideoPlayer->iFRWDStartTime.Int64() > 0 ) + + // Start fastforwarding, rewinding should be stopped and FFWD started + iClipVideoPlayer->LcFastForwardL( ETrue ); + EUNIT_ASSERT( !file->iIsEnabled ) + EUNIT_ASSERT( iClipVideoPlayer->iFFWDStartTime.Int64() > 0 ) + EUNIT_ASSERT( iClipVideoPlayer->iFRWDStartTime.Int64() == 0 ) + + // Simulate fastforwarding for a while + User::After( 1000 ); + + // Simulate that clip is almost in end and fastforwarding would have + // continued over end, position should be set to duration. + file->iPosition = TTimeIntervalMicroSeconds( file->iDuration.Int64() - 1 ); + iClipVideoPlayer->LcFastForwardL( EFalse ); + EUNIT_ASSERT( file->iPosition == file->iDuration ) + EUNIT_ASSERT( !file->iIsEnabled ) + EUNIT_ASSERT_EQUALS( 0, iClipVideoPlayer->iFFWDStartTime.Int64() ) + EUNIT_ASSERT_EQUALS( 0, iClipVideoPlayer->iFRWDStartTime.Int64() ) + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_CMusEngClipVideoPlayer::UT_LcFastRewindL() + { + // Try before establishment + iClipVideoPlayer->SetMceSession( NULL ); + EUNIT_ASSERT_SPECIFIC_LEAVE( + iClipVideoPlayer->LcFastRewindL( ETrue ), KErrNotReady ) + + // Establish session, simulate position and duration and try again + iClipVideoPlayer->SetMceSession( iMceSession ); + CMceFileSource* file = MusEngMceUtils::GetFileSourceL( *iMceSession ); + file->iDuration = KMusEngTestFileDuration; + file->iPosition = KMusEngTestFilePosition; + iClipVideoPlayer->LcFastRewindL( ETrue ); + EUNIT_ASSERT( !file->iIsEnabled ) + EUNIT_ASSERT( iClipVideoPlayer->iFFWDStartTime.Int64() == 0 ) + EUNIT_ASSERT( iClipVideoPlayer->iFRWDStartTime.Int64() > 0 ) + + // Simulate fastrewinding for a while + User::After( 1000 ); + + // Try to fastrewind when already fastrewinding, will be ignored + iClipVideoPlayer->LcFastRewindL( ETrue ); + EUNIT_ASSERT( !file->iIsEnabled ) + EUNIT_ASSERT( iClipVideoPlayer->iFFWDStartTime.Int64() == 0 ) + EUNIT_ASSERT( iClipVideoPlayer->iFRWDStartTime.Int64() > 0 ) + + // Stop fastrewinding + iClipVideoPlayer->LcFastRewindL( EFalse ); + EUNIT_ASSERT( file->iPosition < KMusEngTestFilePosition ) + EUNIT_ASSERT( file->iPosition != TTimeIntervalMicroSeconds( 0 ) ) + EUNIT_ASSERT( !file->iIsEnabled ) + EUNIT_ASSERT( iClipVideoPlayer->iFFWDStartTime.Int64() == 0 ) + EUNIT_ASSERT( iClipVideoPlayer->iFRWDStartTime.Int64() == 0 ) + + // Try to stop fastrewinding again, leaves + EUNIT_ASSERT_SPECIFIC_LEAVE( + iClipVideoPlayer->LcFastRewindL( EFalse ), KErrAlreadyExists ) + + // Start fastforwarding + iClipVideoPlayer->LcFastForwardL( ETrue ); + EUNIT_ASSERT( !file->iIsEnabled ) + EUNIT_ASSERT( iClipVideoPlayer->iFFWDStartTime.Int64() >= 0 ) + EUNIT_ASSERT( iClipVideoPlayer->iFRWDStartTime.Int64() == 0 ) + + // Start fastrewinding, forwarding should be stopped and FFWD started + iClipVideoPlayer->LcFastRewindL( ETrue ); + EUNIT_ASSERT( !file->iIsEnabled ); + EUNIT_ASSERT( iClipVideoPlayer->iFFWDStartTime.Int64() == 0 ) + EUNIT_ASSERT( iClipVideoPlayer->iFRWDStartTime.Int64() >= 0 ) + + // Simulate that clip has just begun and fastrewinding would have + // continued over beginning, position should be set to zero. + + file->iPosition = TTimeIntervalMicroSeconds( 1 ); + + // Simulate fastrewinding for a while + User::After( 1000 ); + + iClipVideoPlayer->LcFastRewindL( EFalse ); + EUNIT_ASSERT( file->iPosition == TTimeIntervalMicroSeconds( 0 ) ) + EUNIT_ASSERT( !file->iIsEnabled ) + EUNIT_ASSERT( iClipVideoPlayer->iFFWDStartTime.Int64() == 0 ) + EUNIT_ASSERT( iClipVideoPlayer->iFRWDStartTime.Int64() == 0 ) + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_CMusEngClipVideoPlayer::UT_LcFilePositionL() + { + // Try before establishment + iClipVideoPlayer->SetMceSession( NULL ); + EUNIT_ASSERT_SPECIFIC_LEAVE( + iClipVideoPlayer->LcFilePositionL(), KErrNotReady ) + + // Establish session and try again + iClipVideoPlayer->SetMceSession( iMceSession ); + CMceFileSource* file = MusEngMceUtils::GetFileSourceL( *iMceSession ); + file->iPosition = 2000000; + EUNIT_ASSERT( iClipVideoPlayer->LcFilePositionL().Int() * 1000000 == + file->iPosition.Int64() ) + + // Ask position while fastforwarding, it should be bigger than real position + iClipVideoPlayer->LcFastForwardL( ETrue ); + User::After( 1000000 ); // We have to wait since dividing in LcFilePositionL and + // multiplying before comparison loses difference + EUNIT_ASSERT( iClipVideoPlayer->LcFilePositionL().Int() * 1000000 > + file->iPosition.Int64() ) + + // Ask position while fastforwarding beyond end of clip, clip duration is + // returned + file->iPosition = file->iDuration; + EUNIT_ASSERT( iClipVideoPlayer->LcFilePositionL().Int() * 1000000 == + file->iDuration.Int64() ) + + // Stop fastforwarding, start fastrewinding, position is set to the end clip + iClipVideoPlayer->LcFastForwardL( EFalse ); + iClipVideoPlayer->LcFastRewindL( ETrue ); + User::After( 1000000 ); // We have to wait since dividing in LcFilePositionL and + // multiplying before comparison loses difference + + // Ask position while fastrewinding, it should be smaller than real + // position + EUNIT_ASSERT( iClipVideoPlayer->LcFilePositionL().Int() * 1000000 < + file->iPosition.Int64() ) + + // Ask position while fastrewinding beyond the beginning of clip, zero + // returned + file->iPosition = 0; + EUNIT_ASSERT( iClipVideoPlayer->LcFilePositionL().Int() * 1000000 == 0 ) + + // Asking position when rewinded to beginning but rewinding has ended + // and clip has not ended (position should not be altered in that case) + iClipVideoPlayer->iRewindedToBeginning = ETrue; + file->iPosition = 0; + iClipVideoPlayer->iFRWDStartTime = TTime( 0 ); + EUNIT_ASSERT( iClipVideoPlayer->LcFilePositionL().Int() * 1000000 == 0 ) + + // Position has proceeded from beginning, rewinding to beginning info + // is cleared. + file->iPosition = 10000000; + iClipVideoPlayer->iFRWDStartTime = TTime( 0 ); + EUNIT_ASSERT( iClipVideoPlayer->LcFilePositionL().Int() * 1000000 == 10000000 ) + EUNIT_ASSERT( iClipVideoPlayer->iRewindedToBeginning == EFalse ) + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_CMusEngClipVideoPlayer::UT_LcFileDurationL() + { + // Try before establishment + iClipVideoPlayer->SetMceSession( NULL ); + EUNIT_ASSERT_SPECIFIC_LEAVE( + iClipVideoPlayer->LcFileDurationL(), KErrNotReady ) + + // Establish session and try again + iClipVideoPlayer->SetMceSession( iMceSession ); + CMceFileSource* file = MusEngMceUtils::GetFileSourceL( *iMceSession ); + file->iDuration = 2000000; + EUNIT_ASSERT( iClipVideoPlayer->LcFileDurationL().Int() * 1000000 == + file->iDuration.Int64() ) + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_CMusEngClipVideoPlayer::UT_SetLcFilePositionL() + { + TTimeIntervalSeconds time( 20 ); + + // Try before establishment + iClipVideoPlayer->SetMceSession( NULL ); + EUNIT_ASSERT_SPECIFIC_LEAVE( + iClipVideoPlayer->SetLcFilePositionL( time ), KErrNotReady ) + + // Normal case with already disabled file source + iClipVideoPlayer->SetMceSession( iMceSession ); + CMceFileSource* file = MusEngMceUtils::GetFileSourceL( *iMceSession ); + file->iIsEnabled = EFalse; + iClipVideoPlayer->SetLcFilePositionL( time ); + EUNIT_ASSERT( file->iPosition.Int64() == + static_cast< TInt64 >( time.Int() ) * 1000000 ) + EUNIT_ASSERT( !file->iIsEnabled ) + + // Normal case with enabled file source + TTimeIntervalSeconds anotherTime( 30 ); + file->iIsEnabled = ETrue; + iClipVideoPlayer->SetLcFilePositionL( anotherTime ); + EUNIT_ASSERT( file->iPosition.Int64() == + static_cast< TInt64 >( anotherTime.Int() ) * 1000000 ) + EUNIT_ASSERT( file->iIsEnabled ) + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_CMusEngClipVideoPlayer::UT_LcWindowL() + { + EUNIT_ASSERT( iClipVideoPlayer->LcWindow() == iClipVideoPlayer ) + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_CMusEngClipVideoPlayer::UT_LcCameraControlL() + { + EUNIT_ASSERT( iClipVideoPlayer->LcCameraControl() == NULL ) + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_CMusEngClipVideoPlayer::UT_LcSourceFileControlL() + { + EUNIT_ASSERT( iClipVideoPlayer->LcSourceFileControl() == iClipVideoPlayer ) + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_CMusEngClipVideoPlayer::UT_LcDestinationFileControlL() + { + EUNIT_ASSERT( iClipVideoPlayer->LcDestinationFileControl() == NULL ) + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_CMusEngClipVideoPlayer::UT_LcAudioControlL() + { + EUNIT_ASSERT( iClipVideoPlayer->LcAudioControl() == &iLcAudioControlStub ) + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_CMusEngClipVideoPlayer::UT_LcZoomControlL() + { + EUNIT_ASSERT( iClipVideoPlayer->LcZoomControl() == NULL ) + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_CMusEngClipVideoPlayer::UT_LcBrightnessControlL() + { + EUNIT_ASSERT( iClipVideoPlayer->LcBrightnessControl() == NULL ) + } + +// TEST TABLE + +EUNIT_BEGIN_TEST_TABLE( + UT_CMusEngClipVideoPlayer, + "UT_CMusEngClipVideoPlayer", + "UNIT" ) + +EUNIT_TEST( + "HasClipEnded - test ", + "CMusEngClipVideoPlayer", + "HasClipEnded", + "FUNCTIONALITY", + SetupL, UT_HasClipEndedL, Teardown) + +EUNIT_TEST( + "LcVideoPlayerState - test ", + "CMusEngClipVideoPlayer", + "LcVideoPlayerState", + "FUNCTIONALITY", + SetupL, UT_LcVideoPlayerStateL, Teardown) + +EUNIT_TEST( + "LcPlayL - test ", + "CMusEngClipVideoPlayer", + "LcPlayL", + "FUNCTIONALITY", + SetupL, UT_LcPlayL, Teardown) + +EUNIT_TEST( + "LcPauseL - test ", + "CMusEngClipVideoPlayer", + "LcPauseL", + "FUNCTIONALITY", + SetupL, UT_LcPauseL, Teardown) + +EUNIT_TEST( + "LcIsPlayingL - test ", + "CMusEngClipVideoPlayer", + "LcIsPlayingL", + "FUNCTIONALITY", + SetupL, UT_LcIsPlayingL, Teardown) + +EUNIT_TEST( + "SetLcFileNameL - test ", + "CMusEngClipVideoPlayer", + "SetLcFileNameL", + "FUNCTIONALITY", + SetupL, UT_SetLcFileNameL, Teardown) + +EUNIT_TEST( + "LcFastForwardL - test ", + "CMusEngClipVideoPlayer", + "LcFastForwardL", + "FUNCTIONALITY", + SetupL, UT_LcFastForwardL, Teardown) + +EUNIT_TEST( + "LcFastRewindL - test ", + "CMusEngClipVideoPlayer", + "LcFastRewindL", + "FUNCTIONALITY", + SetupL, UT_LcFastRewindL, Teardown) + +EUNIT_TEST( + "LcFilePositionL - test ", + "CMusEngClipVideoPlayer", + "LcFilePositionL", + "FUNCTIONALITY", + SetupL, UT_LcFilePositionL, Teardown) + +EUNIT_TEST( + "LcFileDurationL - test ", + "CMusEngClipVideoPlayer", + "LcFileDurationL", + "FUNCTIONALITY", + SetupL, UT_LcFileDurationL, Teardown) + +EUNIT_TEST( + "SetLcFilePositionL - test ", + "CMusEngClipVideoPlayer", + "SetLcFilePositionL", + "FUNCTIONALITY", + SetupL, UT_SetLcFilePositionL, Teardown) + +EUNIT_TEST( + "LcWindow - test ", + "CMusEngClipVideoPlayer", + "LcWindow", + "FUNCTIONALITY", + SetupL, UT_LcWindowL, Teardown) + +EUNIT_TEST( + "LcCameraControl - test ", + "CMusEngClipVideoPlayer", + "LcCameraControl", + "FUNCTIONALITY", + SetupL, UT_LcCameraControlL, Teardown) + +EUNIT_TEST( + "LcSourceFileControl - test ", + "CMusEngClipVideoPlayer", + "LcSourceFileControl", + "FUNCTIONALITY", + SetupL, UT_LcSourceFileControlL, Teardown) + +EUNIT_TEST( + "LcDestinationFileControl - test ", + "CMusEngClipVideoPlayer", + "LcDestinationFileControl", + "FUNCTIONALITY", + SetupL, UT_LcDestinationFileControlL, Teardown) + +EUNIT_TEST( + "LcAudioControl - test ", + "CMusEngClipVideoPlayer", + "LcAudioControl", + "FUNCTIONALITY", + SetupL, UT_LcAudioControlL, Teardown) + +EUNIT_TEST( + "LcZoomControl - test ", + "CMusEngClipVideoPlayer", + "LcZoomControl", + "FUNCTIONALITY", + SetupL, UT_LcZoomControlL, Teardown) + +EUNIT_TEST( + "LcBrightnessControl - test ", + "CMusEngClipVideoPlayer", + "LcBrightnessControl", + "FUNCTIONALITY", + SetupL, UT_LcBrightnessControlL, Teardown) + +EUNIT_END_TEST_TABLE + +// END OF FILE + diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshengine/tsrc/ut_engine/src/ut_musenginedllmain.cpp --- a/mmsharing/mmshengine/tsrc/ut_engine/src/ut_musenginedllmain.cpp Thu Aug 19 09:51:39 2010 +0300 +++ b/mmsharing/mmshengine/tsrc/ut_engine/src/ut_musenginedllmain.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -16,7 +16,6 @@ */ // USER INCLUDES -#include "ut_musengsession.h" #include "ut_musengmcesession.h" #include "ut_musengoutsession.h" #include "ut_musenglivesession.h" @@ -27,7 +26,14 @@ #include "ut_musengtelephoneutils.h" #include "ut_musenguriparser.h" #include "ut_musengsipprofilehandler.h" -#include "ut_musengorientationhandler.h" +#include "ut_musengsessionmanager.h" +#include "ut_musengtwowaysession.h" +#include "ut_musengtwowayrecvsession.h" +#include "ut_musengcamerahandler.h" +#include "ut_musenglivevideoplayer.h" +#include "ut_musengremotevideoplayer.h" +#include "ut_musengclipvideoplayer.h" +#include "ut_muspropertywatch.h" // SYSTEM INCLUDES @@ -40,19 +46,24 @@ // EXPORT_C MEUnitTest* CreateTestSuiteL() { - CEUnitTestSuite* rootSuite = CEUnitTestSuite::NewLC( _L( "Mush Engine" ) ); + rootSuite->AddL( UT_CMusEngClipVideoPlayer::NewLC() ); + CleanupStack::Pop(); + rootSuite->AddL( UT_CMusEngSipProfileHandler::NewLC() ); CleanupStack::Pop(); + rootSuite->AddL( UT_CMusEngLiveVideoPlayer::NewLC() ); + CleanupStack::Pop(); + + rootSuite->AddL( UT_CMusEngRemoteVideoPlayer::NewLC() ); + CleanupStack::Pop(); + rootSuite->AddL( UT_MusEngMceUtils::NewLC() ); CleanupStack::Pop(); rootSuite->AddL( UT_CMusEngSessionDurationTimer::NewLC() ); - CleanupStack::Pop(); - - rootSuite->AddL( UT_CMusEngSession::NewLC() ); CleanupStack::Pop(); rootSuite->AddL( UT_CMusEngMceSession::NewLC() ); @@ -70,15 +81,27 @@ rootSuite->AddL( UT_CMusEngClipSession::NewLC() ); CleanupStack::Pop(); + rootSuite->AddL( UT_CMusEngTwoWaySession::NewLC() ); + CleanupStack::Pop(); + + rootSuite->AddL( UT_CMusEngTwoWayRecvSession::NewLC() ); + CleanupStack::Pop(); + + rootSuite->AddL( UT_TMusEngCameraHandler::NewLC() ); + CleanupStack::Pop(); + rootSuite->AddL( UT_CMusEngTelephoneUtils::NewLC() ); CleanupStack::Pop(); - + rootSuite->AddL( UT_TMusEngUriParser::NewLC() ); - CleanupStack::Pop(); + CleanupStack::Pop(); - rootSuite->AddL( UT_CMusEngOrientationHandler::NewLC() ); - CleanupStack::Pop(); - + rootSuite->AddL( UT_CMusEngSessionManager::NewLC() ); + CleanupStack::Pop(); + + rootSuite->AddL( UT_CMusPropertyWatch::NewLC() ); + CleanupStack::Pop(); + CleanupStack::Pop( rootSuite ); return rootSuite; diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshengine/tsrc/ut_engine/src/ut_musenglivesession.cpp --- a/mmsharing/mmshengine/tsrc/ut_engine/src/ut_musenglivesession.cpp Thu Aug 19 09:51:39 2010 +0300 +++ b/mmsharing/mmshengine/tsrc/ut_engine/src/ut_musenglivesession.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -24,6 +24,8 @@ #include "mussipprofilehandler.h" #include "musengmceutils.h" #include "mussettings.h" +#include "mussessionproperties.h" +#include "musenglivevideoplayer.h" // SYSTEM INCLUDES #include @@ -38,31 +40,6 @@ #include -_LIT8( KMusAvcBitrateLevel1TestText, "TestTextForAvcBrL1Level" ); -_LIT8( KMusAvcBitrateLevel1bTestText, "TestTextForAvcBrL1bLevel" ); -_LIT8( KMusAvcBitrateLevel1_1TestText, "TestTextForAvcBrL1_1Level" ); -_LIT8( KMusAvcBitrateLevel1_2TestText, "TestTextForAvcBrL1_2Level" ); -_LIT8( KMusAvcBitrateLevel1_3TestText, "TestTextForAvcBrL1_3Level" ); -_LIT8( KMusAvcBitrateLevel2TestText, "TestTextForAvcBrL2Level" ); - -_LIT8( KMusAvcBitrateLevel_1b_ConfigKey, "AvcBrL1b=TestTextForAvcBrL1bLevel;" ); - -_LIT8( KMusAvcBitrateLevel_1_1_ConfigKey, -"AvcBrL1_1=TestTextForAvcBrL1_1Level;"); - -_LIT8( KMusAvcBitrateLevels_1_1_And_1b_ConfigKeys, -"AvcBrL1_1=TestTextForAvcBrL1_1Level;\ -AvcBrL1b=TestTextForAvcBrL1bLevel;" ); - -_LIT8( KMusAvcAllLevelsConcatenation, -"AvcBrL1=TestTextForAvcBrL1Level;\ -AvcBrL1b=TestTextForAvcBrL1bLevel;\ -AvcBrL1_1=TestTextForAvcBrL1_1Level;\ -AvcBrL1_2=TestTextForAvcBrL1_2Level;\ -AvcBrL1_3=TestTextForAvcBrL1_3Level;\ -AvcBrL2=TestTextForAvcBrL2Level;" ); - - //use step in different time period const TInt KZoomBigStepCount = 15; @@ -139,20 +116,25 @@ // ----------------------------------------------------------------------------- // void UT_CMusEngLiveSession::SetupL() - { - iObserver = new( ELeave ) CMusEngObserverStub; + { + iLcSessionObserver = new( ELeave )CLcSessionObserverStub; + iLcUiProvider = new( ELeave )CLcUiProviderStub; + iAudioRoutingObserver = new( ELeave )CMusEngObserverStub; - iLiveSession = CMusEngLiveSession::NewL( TRect(0, 0, 100, 100), - *iObserver, - *iObserver, - *iObserver ); + iLiveSession = CMusEngLiveSession::NewL(); + iLiveSession->SetLcSessionObserver( iLcSessionObserver ); + iLiveSession->SetLcUiProvider( iLcUiProvider ); - iRecordedLiveSession = CMusEngLiveSession::NewL( KTestVideoFileName(), - TRect(0, 0, 100, 100), - *iObserver, - *iObserver, - *iObserver ); - + iRecordedLiveSession = CMusEngLiveSession::NewL(); + iRecordedLiveSession->SetLcSessionObserver( iLcSessionObserver ); + iRecordedLiveSession->SetLcUiProvider( iLcUiProvider ); + MLcDestinationFileControl* destinationFileControl = + iRecordedLiveSession->LocalVideoPlayer()->LcDestinationFileControl(); + destinationFileControl->SetLcFileNameL( KTestVideoFileName() ); + + User::LeaveIfError( RProperty::Set( NMusSessionApi::KCategoryUid, + NMusSessionApi::KRemoteSipAddress, + KTestRecipientSipUri ) ); } @@ -164,11 +146,14 @@ { delete iLiveSession; delete iRecordedLiveSession; - delete iObserver; - + delete iLcSessionObserver; + delete iLcUiProvider; + delete iAudioRoutingObserver; + PropertyHelper::Close(); // Delete static data from CenRep stub CRepository::iStaticWriteAvcKeysToStaticData = EFalse; CRepository::DeleteStubAvcConfigKeys(); + CRepository::ResetStubGlobal(); CRepository::iForceFailWithCode = KErrNone; } @@ -176,602 +161,37 @@ // TEST CASES - // ----------------------------------------------------------------------------- // // ----------------------------------------------------------------------------- // void UT_CMusEngLiveSession::UT_NewLL() { - EUNIT_ASSERT( iLiveSession ); - EUNIT_ASSERT( iLiveSession->iRecordedFile == KNullDesC() ); - EUNIT_ASSERT( iRecordedLiveSession ); - EUNIT_ASSERT( iRecordedLiveSession->iRecordedFile == KTestVideoFileName() ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void UT_CMusEngLiveSession::UT_CurrentZoomLL() - { - // Check that checking current zoom is not possible before invite - TRAPD( error, iLiveSession->CurrentZoomL() ); - MUS_TEST_FORWARD_ALLOC_FAILURE( error ); - EUNIT_ASSERT( error == KErrNotReady ); - - // simulate session establishment - ESTABLISH_OUT_SESSION( iLiveSession ); - - CMceCameraSource* camera = - MusEngMceUtils::GetCameraL( *(iLiveSession->iSession) ); - - // Check that originally current and default zoom are the same - EUNIT_ASSERT( iLiveSession->iDefaultZoomFactor == - iLiveSession->CurrentZoomL() ); - - // Zoom to maximum optical value - while ( camera->iZoomFactor < iLiveSession->iCameraInfo.iMaxZoom ) - { - iLiveSession->ZoomInL(); - } - - EUNIT_ASSERT( iLiveSession->iCameraInfo.iMaxZoom == - iLiveSession->CurrentZoomL() ); - - // Zoom using digital zoom - - iLiveSession->ZoomInL(); - - EUNIT_ASSERT( iLiveSession->CurrentZoomL() == - iLiveSession->iCameraInfo.iMaxZoom + - camera->iDigitalZoomFactor ) - - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void UT_CMusEngLiveSession::UT_CMusEngLiveSession_SetZoomLL() - { - TRAPD( error, iLiveSession->SetZoomL(2) ); - MUS_TEST_FORWARD_ALLOC_FAILURE( error ); - EUNIT_ASSERT( error == KErrNotReady ); - ESTABLISH_OUT_SESSION( iLiveSession ); - CMceCameraSource* camera = - MusEngMceUtils::GetCameraL( *(iLiveSession->iSession) ); - EUNIT_ASSERT( camera->iZoomFactor == 1 ); - EUNIT_ASSERT( camera->iDigitalZoomFactor == 0 ); - TRAPD( err, iLiveSession->SetZoomL(0) ); - EUNIT_ASSERT( err == KErrArgument ); - iLiveSession->SetZoomL(2); - EUNIT_ASSERT( camera->iZoomFactor == 2 ); - TRAPD( err1, iLiveSession->SetZoomL(14) ); - EUNIT_ASSERT( err1 == KErrArgument ); - iLiveSession->SetZoomL( 5 ); - EUNIT_ASSERT( camera->iDigitalZoomFactor == 2 ); - } -void UT_CMusEngLiveSession::UT_MaxZoomLL() - { - // Check that checking maximum zoom is not possible before invite - TRAPD( error, iLiveSession->MaxZoomL() ); - MUS_TEST_FORWARD_ALLOC_FAILURE( error ); - EUNIT_ASSERT( error == KErrNotReady ); - - // simulate session establishment - ESTABLISH_OUT_SESSION( iLiveSession ); - - EUNIT_ASSERT( iLiveSession->MaxZoomL() == - iLiveSession->iCameraInfo.iMaxZoom + - iLiveSession->iCameraInfo.iMaxDigitalZoom ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void UT_CMusEngLiveSession::UT_ZoomInLL() - { - // Check that zooming is not possible before invite - TRAPD( error, iLiveSession->ZoomInL() ); - MUS_TEST_FORWARD_ALLOC_FAILURE( error ); - EUNIT_ASSERT( error == KErrNotReady ); - - // simulate session establishment - ESTABLISH_OUT_SESSION( iLiveSession ); - - CMceCameraSource* camera = - MusEngMceUtils::GetCameraL( *(iLiveSession->iSession) ); - - // Check the default value - EUNIT_ASSERT( iLiveSession->iDefaultZoomFactor == camera->iZoomFactor ); - - // Check that zoom factor can be increased - USER_SLEEP; //insure that small step is used - iLiveSession->ZoomInL(); - EUNIT_ASSERT( camera->iZoomFactor == iLiveSession->iDefaultZoomFactor + - iLiveSession->iSmallZoomStep ); - - //Check the "burst" mode (immediate second ZoomIn), big step should be used - TInt nZoom = camera->iZoomFactor + camera->iDigitalZoomFactor; - iLiveSession->ZoomInL(); - TInt nStep = camera->iZoomFactor + camera->iDigitalZoomFactor - nZoom; - EUNIT_ASSERT( nStep == iLiveSession->iBigZoomStep ); + EUNIT_ASSERT( iLiveSession ) + EUNIT_ASSERT( iRecordedLiveSession ) + EUNIT_ASSERT( iLiveSession->iCameraHandler.iCameraUsage == MusSettingsKeys::EUseCameraSwapping ); + EUNIT_ASSERT( iLiveSession->iMceManagerUid == TUid::Uid( KMusUiUid ) ); - // Zoom to maximum optical value - while ( camera->iZoomFactor < iLiveSession->iCameraInfo.iMaxZoom ) - { - iLiveSession->ZoomInL(); - } - - TInt maxOpticalZoomFactor = camera->ZoomFactorL(); - - // Check that digital zoom is used instead of optical - iLiveSession->ZoomInL(); - EUNIT_ASSERT( camera->iZoomFactor == maxOpticalZoomFactor ); - EUNIT_ASSERT( camera->iDigitalZoomFactor > 0 ); - - // Zoom to maximum digital value - while ( camera->iDigitalZoomFactor < - iLiveSession->iCameraInfo.iMaxDigitalZoom ) - { - iLiveSession->ZoomInL(); - } - - TInt maxDigitalZoomFactor = camera->DigitalZoomFactorL(); - - // Check that further zooming is impossible - iLiveSession->ZoomInL(); - EUNIT_ASSERT( camera->iZoomFactor == maxOpticalZoomFactor ); - EUNIT_ASSERT( camera->iDigitalZoomFactor == maxDigitalZoomFactor ); - - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void UT_CMusEngLiveSession::UT_ZoomOutLL() - { - // Check that zooming is not possible before invite - TRAPD( error, iLiveSession->ZoomOutL() ); - MUS_TEST_FORWARD_ALLOC_FAILURE( error ); - EUNIT_ASSERT( error == KErrNotReady ); - - // simulate session establishment - ESTABLISH_OUT_SESSION( iLiveSession ); - - CMceCameraSource* camera = - MusEngMceUtils::GetCameraL( *(iLiveSession->iSession) ); - - // Check the default value - EUNIT_ASSERT( iLiveSession->iDefaultZoomFactor == camera->iZoomFactor ); - - // Simulate maximum zoom - camera->iZoomFactor = iLiveSession->iCameraInfo.iMaxZoom; - camera->iDigitalZoomFactor = iLiveSession->iCameraInfo.iMaxDigitalZoom; - - // Check that digital zoom factor can be decreased - USER_SLEEP; //insure that small step is used - iLiveSession->ZoomOutL(); - EUNIT_ASSERT( camera->iZoomFactor == iLiveSession->iCameraInfo.iMaxZoom ); - EUNIT_ASSERT( camera->iDigitalZoomFactor == - iLiveSession->iCameraInfo.iMaxDigitalZoom - - iLiveSession->iSmallZoomStep ); - - //Check the "burst" mode (immediate second ZoomOut), big step should be used - TInt nZoom = camera->iZoomFactor + camera->iDigitalZoomFactor; - iLiveSession->ZoomOutL(); - TInt nStep; - nStep = nZoom - (camera->iZoomFactor + camera->iDigitalZoomFactor ); - EUNIT_ASSERT( nStep == iLiveSession->iBigZoomStep ); - - // Simulate maximum zoom again - camera->iZoomFactor = iLiveSession->iCameraInfo.iMaxZoom; - camera->iDigitalZoomFactor = iLiveSession->iCameraInfo.iMaxDigitalZoom; - - // Zoom to minimum digital zoom - while ( camera->iDigitalZoomFactor > 0 ) - { - iLiveSession->ZoomOutL(); - } - - EUNIT_ASSERT( camera->iZoomFactor == iLiveSession->iCameraInfo.iMaxZoom ); - EUNIT_ASSERT( camera->iDigitalZoomFactor == 0 ); - - // Check that optical zoom is decreased instead of digital - USER_SLEEP; //insure that step is the small one - iLiveSession->ZoomOutL(); - EUNIT_ASSERT( camera->iZoomFactor == - iLiveSession->iCameraInfo.iMaxZoom - - iLiveSession->iSmallZoomStep ); - EUNIT_ASSERT( camera->iDigitalZoomFactor == 0 ); - - // Zoom to minimum optical zoom - while ( camera->iZoomFactor > iLiveSession->iCameraInfo.iMinZoom ) - { - iLiveSession->ZoomOutL(); - } - - // Check that further zooming is impossible - iLiveSession->ZoomOutL(); - EUNIT_ASSERT( camera->iZoomFactor == iLiveSession->iCameraInfo.iMinZoom ); - EUNIT_ASSERT( camera->iDigitalZoomFactor == 0 ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void UT_CMusEngLiveSession::UT_ZoomDefaultLL() - { - // Check that zooming is not possible before invite - TRAPD( error, iLiveSession->ZoomDefaultL() ); - MUS_TEST_FORWARD_ALLOC_FAILURE( error ); - EUNIT_ASSERT( error == KErrNotReady ); - - // simulate session establishment - ESTABLISH_OUT_SESSION( iLiveSession ); - - CMceCameraSource* camera = - MusEngMceUtils::GetCameraL( *(iLiveSession->iSession) ); - - // Check the default value - EUNIT_ASSERT( iLiveSession->iDefaultZoomFactor == camera->iZoomFactor ); - - // increase zoom factor so much that optical zoom is in maximum value - // and digital zoom is in use - while ( camera->iDigitalZoomFactor == 0 ) - { - iLiveSession->ZoomInL(); - } - EUNIT_ASSERT( camera->iZoomFactor > iLiveSession->iDefaultZoomFactor ); - EUNIT_ASSERT( camera->iDigitalZoomFactor > 0 ); - - // back to default - iLiveSession->ZoomDefaultL(); - EUNIT_ASSERT( camera->iZoomFactor == iLiveSession->iDefaultZoomFactor ); - EUNIT_ASSERT( camera->iDigitalZoomFactor == 0 ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void UT_CMusEngLiveSession::UT_SetBrightnessLL() - { - // Check that setting brightness is not possible before invite - EUNIT_ASSERT_SPECIFIC_LEAVE( - iLiveSession->SetBrightnessL( KTestSomeBrightness ), - KErrNotReady ) - - // simulate session establishment - ESTABLISH_OUT_SESSION( iLiveSession ); - - CMceCameraSource* camera = - MusEngMceUtils::GetCameraL( *(iLiveSession->iSession) ); - - camera->iCameraInfo.iOptionsSupported = - camera->iCameraInfo.iOptionsSupported | TCameraInfo::EBrightnessSupported; - - // Check that originally current and default brightness are the same - EUNIT_ASSERT_EQUALS( iLiveSession->iDefaultBrightness, - iLiveSession->CurrentBrightnessL() ) - - // Test setting brightness - iLiveSession->SetBrightnessL( KTestSomeBrightness ); - - EUNIT_ASSERT_EQUALS( KTestSomeBrightness, - iLiveSession->CurrentBrightnessL() ) - } - - + delete iLiveSession; + iLiveSession = NULL; + CRepository::SetStubGlobal( MusSettingsKeys::KCameraUsage, + MusSettingsKeys::EUseOnlySecondaryCamera ); -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void UT_CMusEngLiveSession::UT_CurrentBrightnessLL() - { - // Check that checking current brightness is not possible before invite - EUNIT_ASSERT_SPECIFIC_LEAVE( iLiveSession->CurrentBrightnessL(), - KErrNotReady ) + iLiveSession = CMusEngLiveSession::NewL(); - // All the other stuff checked in tests of SetBrightnessL - } - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void UT_CMusEngLiveSession::UT_MaxBrightnessLL() - { - // MaxBrightness should return a constant - - EUNIT_ASSERT_EQUALS( KTestMaxBrightness, iLiveSession->MaxBrightnessL() ) - } - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void UT_CMusEngLiveSession::UT_MinBrightnessLL() - { - // MinBrightness should return a constant - - EUNIT_ASSERT_EQUALS( KTestMinBrightness, iLiveSession->MinBrightnessL() ) - } - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void UT_CMusEngLiveSession::UT_IncreaseBrightnessLL() - { - // Check that increasing brightness is not possible before invite - EUNIT_ASSERT_SPECIFIC_LEAVE( iLiveSession->IncreaseBrightnessL(), - KErrNotReady ) - - // simulate session establishment - ESTABLISH_OUT_SESSION( iLiveSession ); - - CMceCameraSource* camera = - MusEngMceUtils::GetCameraL( *(iLiveSession->iSession) ); - - camera->iCameraInfo.iOptionsSupported = - camera->iCameraInfo.iOptionsSupported | TCameraInfo::EBrightnessSupported; - - // Check that originally current and default brightness are the same - EUNIT_ASSERT_EQUALS( iLiveSession->iDefaultBrightness, - iLiveSession->CurrentBrightnessL() ) - - // Check that brightness can be increased... - iLiveSession->IncreaseBrightnessL(); - - EUNIT_ASSERT_EQUALS( iLiveSession->iDefaultBrightness + KTestBrightnessStepSize, - iLiveSession->CurrentBrightnessL() ) - - // ... but only to maximum - - iLiveSession->SetBrightnessL( KTestMaxBrightness ); - - iLiveSession->IncreaseBrightnessL(); + EUNIT_ASSERT_EQUALS( TInt( iLiveSession->iCameraHandler.iCameraUsage ), + TInt( MusSettingsKeys::EUseOnlySecondaryCamera ) ); - EUNIT_ASSERT_EQUALS( KTestMaxBrightness, - iLiveSession->CurrentBrightnessL() ) - } - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void UT_CMusEngLiveSession::UT_DecreaseBrightnessLL() - { - // Check that decreasing brightness is not possible before invite - EUNIT_ASSERT_SPECIFIC_LEAVE( iLiveSession->DecreaseBrightnessL(), - KErrNotReady ) - - // simulate session establishment - ESTABLISH_OUT_SESSION( iLiveSession ); - - CMceCameraSource* camera = - MusEngMceUtils::GetCameraL( *(iLiveSession->iSession) ); - - camera->iCameraInfo.iOptionsSupported = - camera->iCameraInfo.iOptionsSupported | TCameraInfo::EBrightnessSupported; - - // Check that originally current and default brightness are the same - EUNIT_ASSERT_EQUALS( iLiveSession->iDefaultBrightness, - iLiveSession->CurrentBrightnessL() ) - - // Check that brightness can be decreased... - iLiveSession->DecreaseBrightnessL(); - - EUNIT_ASSERT_EQUALS( iLiveSession->iDefaultBrightness - KTestBrightnessStepSize, - iLiveSession->CurrentBrightnessL() ) - - // ... but only to minimum - - iLiveSession->SetBrightnessL( KTestMinBrightness ); - - iLiveSession->DecreaseBrightnessL(); - - EUNIT_ASSERT_EQUALS( KTestMinBrightness, - iLiveSession->CurrentBrightnessL() ) - } - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void UT_CMusEngLiveSession::UT_BrightnessDefaultLL() - { - // Check that setting default brightness is not possible before invite - EUNIT_ASSERT_SPECIFIC_LEAVE( iLiveSession->BrightnessDefaultL(), - KErrNotReady ) - - // simulate session establishment - ESTABLISH_OUT_SESSION( iLiveSession ); - - CMceCameraSource* camera = - MusEngMceUtils::GetCameraL( *(iLiveSession->iSession) ); - - camera->iCameraInfo.iOptionsSupported = - camera->iCameraInfo.iOptionsSupported | TCameraInfo::EBrightnessSupported; - - // Check that originally current and default brightness are the same - EUNIT_ASSERT_EQUALS( iLiveSession->iDefaultBrightness, - iLiveSession->CurrentBrightnessL() ) - - // set brightness to max - iLiveSession->SetBrightnessL( KTestMaxBrightness ); - EUNIT_ASSERT_NOT_EQUALS( iLiveSession->iDefaultBrightness, - iLiveSession->CurrentBrightnessL() ) - - // set brightness to default and check it - iLiveSession->BrightnessDefaultL(); - - EUNIT_ASSERT_EQUALS( iLiveSession->iDefaultBrightness, - iLiveSession->CurrentBrightnessL() ) - } + delete iLiveSession; + iLiveSession = NULL; + CRepository::SetStubGlobal( MusSettingsKeys::KCameraUsage, + MusSettingsKeys::EUseOnlyMainCamera ); -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void UT_CMusEngLiveSession::UT_BrightnessAutoLL() - { - // Check that setting brightness to auto is not possible before invite - EUNIT_ASSERT_SPECIFIC_LEAVE( iLiveSession->BrightnessAutoL(), - KErrNotReady ); - - // simulate session establishment - ESTABLISH_OUT_SESSION( iLiveSession ); - - CMceCameraSource* camera = - MusEngMceUtils::GetCameraL( *(iLiveSession->iSession) ); - - camera->iCameraInfo.iOptionsSupported = - camera->iCameraInfo.iOptionsSupported | TCameraInfo::EBrightnessSupported; - - // Check that originally brightness is not auto - EUNIT_ASSERT_NOT_EQUALS( CCamera::EBrightnessAuto, - iLiveSession->CurrentBrightnessL() ) - - // check that brightness is set to auto - iLiveSession->BrightnessAutoL(); - EUNIT_ASSERT_EQUALS( CCamera::EBrightnessAuto, - iLiveSession->CurrentBrightnessL() ) - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void UT_CMusEngLiveSession::UT_RecordL_and_IsRecordingLL() - { - // Check that recording is not possible before invite - EUNIT_ASSERT_SPECIFIC_LEAVE( iRecordedLiveSession->RecordL( ETrue ), - KErrNotReady ) - - // simulate session establishment - ESTABLISH_OUT_SESSION( iLiveSession ); - ESTABLISH_OUT_SESSION( iRecordedLiveSession ); - - // Check that recording is off by default - EUNIT_ASSERT( !iRecordedLiveSession->IsRecording() ); - - // Check that recording can be set on - iRecordedLiveSession->RecordL( ETrue ); - EUNIT_ASSERT( iRecordedLiveSession->IsRecording() ); - - // Check that recording cannot be set on if recording stream does not exist - EUNIT_ASSERT_SPECIFIC_LEAVE( iLiveSession->RecordL( ETrue ), - KErrNotReady ) - - // Check that setting on the recording twice does not harm - iRecordedLiveSession->RecordL( ETrue ); - EUNIT_ASSERT( iRecordedLiveSession->IsRecording() ); - - // Check that recording can be set off again - iRecordedLiveSession->RecordL( EFalse ); - EUNIT_ASSERT( !iRecordedLiveSession->IsRecording() ); - - // Check that setting off the recording twice does not harm - iRecordedLiveSession->RecordL( EFalse ); - EUNIT_ASSERT( !iRecordedLiveSession->IsRecording() ); - } + iLiveSession = CMusEngLiveSession::NewL(); - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void UT_CMusEngLiveSession::UT_PlayLL() - { - // Check that resuming is not possible before invite - TRAPD( error, iLiveSession->PlayL() ); - MUS_TEST_FORWARD_ALLOC_FAILURE( error ); - EUNIT_ASSERT( error == KErrNotReady ); - - ESTABLISH_OUT_SESSION( iLiveSession ); - - iLiveSession->PauseL(); - - CMceCameraSource* camera = - MusEngMceUtils::GetCameraL( *(iLiveSession->iSession) ); - - iLiveSession->PlayL(); - - EUNIT_ASSERT( camera->IsEnabled() ); - - // Try to enable camera again, request should be ignored - - iLiveSession->PlayL(); - - EUNIT_ASSERT( camera->IsEnabled() ); - + EUNIT_ASSERT_EQUALS( TInt( iLiveSession->iCameraHandler.iCameraUsage ), + TInt( MusSettingsKeys::EUseOnlyMainCamera ) ); } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void UT_CMusEngLiveSession::UT_PauseLL() - { - // Check that pausing is not possible before invite - TRAPD( error, iLiveSession->PauseL() ); - MUS_TEST_FORWARD_ALLOC_FAILURE( error ); - EUNIT_ASSERT( error == KErrNotReady ); - - ESTABLISH_OUT_SESSION( iLiveSession ); - - iLiveSession->PlayL(); - - CMceCameraSource* camera = - MusEngMceUtils::GetCameraL( *(iLiveSession->iSession) ); - - iLiveSession->PauseL(); - - EUNIT_ASSERT( !camera->IsEnabled() ); - - // Try to disable camera again, request should be ignored - - iLiveSession->PauseL(); - - EUNIT_ASSERT( !camera->IsEnabled() ); - - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void UT_CMusEngLiveSession::UT_IsPlayingLL() - { - // Try without a session - EUNIT_ASSERT_SPECIFIC_LEAVE( iLiveSession->IsPlayingL(), KErrNotReady ); - - // Normal cases - ESTABLISH_OUT_SESSION( iLiveSession ); - - iLiveSession->PlayL(); - EUNIT_ASSERT( iLiveSession->IsPlayingL() ) - - iLiveSession->PauseL(); - EUNIT_ASSERT( !iLiveSession->IsPlayingL() ) - } - // ----------------------------------------------------------------------------- // @@ -779,9 +199,8 @@ // void UT_CMusEngLiveSession::UT_CompleteSessionStructureLL() { - CMceStreamBundle* localBundle = - CMceStreamBundle::NewLC( CMceStreamBundle::ELS ); + CMceStreamBundle::NewLC( CMceStreamBundle::ELS ); // Check that structure cannot be completed before creating the session TRAPD( error, iLiveSession->CompleteSessionStructureL( *localBundle ) ); @@ -806,7 +225,6 @@ EUNIT_ASSERT( iLiveSession->iSession->Streams()[0]->Source() ); EUNIT_ASSERT( iLiveSession->iSession->Streams()[0]->Source()->Type() == KMceCameraSource ); - EUNIT_ASSERT( !iLiveSession->IsPlayingL() ) EUNIT_ASSERT( iLiveSession->iSession->Streams()[0]->Sinks().Count() == 1 ); EUNIT_ASSERT( iLiveSession->iSession->Streams()[0]->Sinks()[0]->Type() == KMceRTPSink ); @@ -844,46 +262,28 @@ EUNIT_ASSERT( file ) - CleanupStack::PopAndDestroy( localBundle ); - - } - + -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void UT_CMusEngLiveSession::UT_HandleSessionStateChangedL() - { - // Make Repository empty, config keys must be written - CRepository::SetStubAvcConfigKeysL( KNullDesC8() ); + EUNIT_ASSERT( iLiveSession->iCameraHandler.iCurrentCamera == + TMusEngCameraHandler::EBackCamera ); - // Invite - iLiveSession->InviteL( KTestRecipientSipUri ); - iLiveSession->iSession->iState = CMceSession::EEstablished; + delete iLiveSession->iSession; + iLiveSession->iSession = NULL; - // Force failure on CenRep - CRepository::iForceFailWithCode = KErrNoMemory; - - // Simulate session state transition notification - iLiveSession->HandleSessionStateChanged( - *iLiveSession->iSession, - 200, KNullDesC8() ); - - EUNIT_ASSERT( iObserver->iSessionFailedCalled ); + iLiveSession->iSession = CMceOutSession::NewL( + *(iLiveSession->iManager), + *profile, + KTestRecipientSipUri8() ); - // Normal case, something will be written to CenRep - iRecordedLiveSession->InviteL( KTestRecipientSipUri ); - iRecordedLiveSession->iSession->iState = CMceSession::EEstablished; - iRecordedLiveSession->HandleSessionStateChanged( - *iRecordedLiveSession->iSession, - 200, KNullDesC8() ); + iLiveSession->iCameraHandler.iCameraUsage = MusSettingsKeys::EUseOnlySecondaryCamera; + iLiveSession->CompleteSessionStructureL( *localBundle ); - HBufC8* info = MultimediaSharingSettings::EncoderConfigInfoLC(); - EUNIT_ASSERT_NOT_EQUALS( *info, KMusAvcBitrateLevel_1b_ConfigKey() ) - CleanupStack::PopAndDestroy( info ); + EUNIT_ASSERT( iLiveSession->iCameraHandler.iCurrentCamera == + TMusEngCameraHandler::EFrontCamera ); + + + CleanupStack::PopAndDestroy( localBundle ); } - // ----------------------------------------------------------------------------- // @@ -898,10 +298,10 @@ CMceVideoCodec* codecAvc = CMceAvcCodec::NewLC( KMceSDPNameH264() ); CMceVideoCodec* codecUnknown = CMceH263Codec::NewLC( KNullDesC8() ); - iLiveSession->AdjustVideoCodecL( *codecH263 ); - iLiveSession->AdjustVideoCodecL( *codecH2632000 ); - iLiveSession->AdjustVideoCodecL( *codecAvc ); - iLiveSession->AdjustVideoCodecL( *codecUnknown ); + iLiveSession->AdjustVideoCodecL( *codecH263, KMceCameraSource ); + iLiveSession->AdjustVideoCodecL( *codecH2632000, KMceCameraSource ); + iLiveSession->AdjustVideoCodecL( *codecAvc, KMceCameraSource ); + iLiveSession->AdjustVideoCodecL( *codecUnknown, KMceCameraSource ); // Test that bit rates has been set to H263 & AVC codecs EUNIT_ASSERT( codecH263->iAllowedBitrates == KMceAllowedH263BitrateAll ) @@ -936,10 +336,8 @@ CleanupStack::PopAndDestroy( codecAvc ); CleanupStack::PopAndDestroy( codecH2632000 ); CleanupStack::PopAndDestroy( codecH263 ); - } - // ----------------------------------------------------------------------------- // // ----------------------------------------------------------------------------- @@ -958,7 +356,6 @@ CleanupStack::PopAndDestroy( codec ); } - // ----------------------------------------------------------------------------- // // ----------------------------------------------------------------------------- @@ -984,16 +381,16 @@ EUNIT_ASSERT_EQUALS( stream->Codecs().Count(), 3 ) // Check that AVC codecs are removed if they are known to be not supported - iLiveSession->SetSupportedVideoCodecListL( _L( "SomethingThatIsNotAVC" ) ); + delete iLiveSession->iVideoCodecList; + iLiveSession->iVideoCodecList = NULL; + iLiveSession->iVideoCodecList = _L8("SomethingThatIsNotAVC").AllocL(); iLiveSession->DoCodecSelectionL( *stream ); EUNIT_ASSERT_EQUALS( stream->Codecs().Count(), 2 ) EUNIT_ASSERT( stream->Codecs()[0]->SdpName() != KMceSDPNameH264() ) EUNIT_ASSERT( stream->Codecs()[1]->SdpName() != KMceSDPNameH264() ) CleanupStack::PopAndDestroy( stream ); - } - // ----------------------------------------------------------------------------- // Although all states are not meaningfull for LiveSession, all states are @@ -1009,7 +406,7 @@ CleanupStack::PopAndDestroy( videoStream ); // Simulate sending invite - iLiveSession->InviteL( KTestRecipientSipUri() ); + iLiveSession->EstablishLcSessionL(); // Try all the stream states CMceMediaStream* changedStream = iLiveSession->iSession->Streams()[0]; @@ -1018,59 +415,58 @@ changedStream->iState = CMceMediaStream::EUninitialized; static_cast(iLiveSession)->StreamStateChanged( *changedStream ); - EUNIT_ASSERT( iObserver->IsReseted() ); + EUNIT_ASSERT( iLcSessionObserver->IsReseted() ); // EInitialized, stream is initialized changedStream->iState = CMceMediaStream::EInitialized; static_cast(iLiveSession)->StreamStateChanged( *changedStream ); - EUNIT_ASSERT( iObserver->IsReseted() ); + EUNIT_ASSERT( iLcSessionObserver->IsReseted() ); // EBuffering, stream is buffering changedStream->iState = CMceMediaStream::EBuffering; static_cast(iLiveSession)->StreamStateChanged( *changedStream ); - EUNIT_ASSERT( iObserver->IsReseted() ); + EUNIT_ASSERT( iLcSessionObserver->IsReseted() ); // EIdle, stream is not receiving RTP changedStream->iState = CMceMediaStream::EIdle; static_cast(iLiveSession)->StreamStateChanged( *changedStream ); - EUNIT_ASSERT( iObserver->iStreamIdleCalled ); + EUNIT_ASSERT( iLcSessionObserver->IsReseted() ); // EStreaming, stream is streaming changedStream->iState = CMceMediaStream::EStreaming; - static_cast(iLiveSession)->StreamStateChanged( - *changedStream ); - EUNIT_ASSERT( iObserver->iStreamStreamingCalled ); - iObserver->Reset(); + static_cast(iLiveSession)->StreamStateChanged( *changedStream ); + EUNIT_ASSERT_EQUALS( TInt( iLcSessionObserver->iCalledFunction ), + TInt( CLcSessionObserverStub::EPlayerStateChanged ) ) + iLcSessionObserver->Reset(); // EDisabled, stream is explicitly disabled changedStream->iState = CMceMediaStream::EDisabled; static_cast(iLiveSession)->StreamStateChanged( *changedStream ); - EUNIT_ASSERT( iObserver->IsReseted() ); + EUNIT_ASSERT( iLcSessionObserver->IsReseted() ); // ENoResources, stream has no needed resources to stream changedStream->iState = CMceMediaStream::ENoResources; static_cast(iLiveSession)->StreamStateChanged( *changedStream ); - EUNIT_ASSERT( iObserver->IsReseted() ); + EUNIT_ASSERT( iLcSessionObserver->IsReseted() ); // ETranscodingRequired, stream requires non-realtime transcoding changedStream->iState = CMceMediaStream::ETranscodingRequired; static_cast(iLiveSession)->StreamStateChanged( *changedStream ); - EUNIT_ASSERT( iObserver->IsReseted() ); + EUNIT_ASSERT( iLcSessionObserver->IsReseted() ); // ETranscoding, stream is transcoding in non-realtime changedStream->iState = CMceMediaStream::ETranscoding; static_cast(iLiveSession)->StreamStateChanged( *changedStream ); - EUNIT_ASSERT( iObserver->IsReseted() ); + EUNIT_ASSERT( iLcSessionObserver->IsReseted() ); } - // ----------------------------------------------------------------------------- // Although all states are not meaningfull for LiveSession, all states are // tested in order to force the updating of unit tests when behavior is changed @@ -1087,7 +483,7 @@ CleanupStack::PopAndDestroy( videoStream ); // Simulate sending invite - iLiveSession->InviteL( KTestRecipientSipUri() ); + iLiveSession->EstablishLcSessionL(); // Try all the stream states CMceMediaStream* changedStream = iLiveSession->iSession->Streams()[0]; @@ -1097,59 +493,59 @@ changedStream->iState = CMceMediaStream::EUninitialized; static_cast(iLiveSession)->StreamStateChanged( *changedStream, *changedSource ); - EUNIT_ASSERT( iObserver->IsReseted() ); + EUNIT_ASSERT( iLcSessionObserver->IsReseted() ); // EInitialized, stream is initialized changedStream->iState = CMceMediaStream::EInitialized; static_cast(iLiveSession)->StreamStateChanged( *changedStream, *changedSource );; - EUNIT_ASSERT( iObserver->IsReseted() ); + EUNIT_ASSERT( iLcSessionObserver->IsReseted() ); // EBuffering, stream is buffering changedStream->iState = CMceMediaStream::EBuffering; static_cast(iLiveSession)->StreamStateChanged( *changedStream, *changedSource ); - EUNIT_ASSERT( iObserver->IsReseted() ); + EUNIT_ASSERT( iLcSessionObserver->IsReseted() ); // EIdle, stream is not receiving RTP changedStream->iState = CMceMediaStream::EIdle; static_cast(iLiveSession)->StreamStateChanged( *changedStream, *changedSource ); - EUNIT_ASSERT( iObserver->iStreamIdleCalled ); + EUNIT_ASSERT( iLcSessionObserver->IsReseted() ); // EStreaming, stream is streaming changedStream->iState = CMceMediaStream::EStreaming; static_cast(iLiveSession)->StreamStateChanged( *changedStream, *changedSource ); - EUNIT_ASSERT( iObserver->iStreamStreamingCalled ); - iObserver->Reset(); + EUNIT_ASSERT_EQUALS( TInt( iLcSessionObserver->iCalledFunction ), + TInt( CLcSessionObserverStub::EPlayerStateChanged ) ) + iLcSessionObserver->Reset(); // EDisabled, stream is explicitly disabled changedStream->iState = CMceMediaStream::EDisabled; static_cast(iLiveSession)->StreamStateChanged( *changedStream, *changedSource ); - EUNIT_ASSERT( iObserver->IsReseted() ); + EUNIT_ASSERT( iLcSessionObserver->IsReseted() ); // ENoResources, stream has no needed resources to stream changedStream->iState = CMceMediaStream::ENoResources; static_cast(iLiveSession)->StreamStateChanged( *changedStream, *changedSource ); - EUNIT_ASSERT( iObserver->IsReseted() ); + EUNIT_ASSERT( iLcSessionObserver->IsReseted() ); // ETranscodingRequired, stream requires non-realtime transcoding changedStream->iState = CMceMediaStream::ETranscodingRequired; static_cast(iLiveSession)->StreamStateChanged( *changedStream, *changedSource ); - EUNIT_ASSERT( iObserver->IsReseted() ); + EUNIT_ASSERT( iLcSessionObserver->IsReseted() ); // ETranscoding, stream is transcoding in non-realtime changedStream->iState = CMceMediaStream::ETranscoding; static_cast(iLiveSession)->StreamStateChanged( *changedStream, *changedSource ); - EUNIT_ASSERT( iObserver->IsReseted() ); + EUNIT_ASSERT( iLcSessionObserver->IsReseted() ); } - // ----------------------------------------------------------------------------- // Although all states are not meaningfull for LiveSession, all states are // tested in order to force the updating of unit tests when behavior is changed @@ -1167,7 +563,9 @@ // Try with session ESTABLISH_OUT_SESSION( iRecordedLiveSession ) - iRecordedLiveSession->RecordL( ETrue ); + MLcDestinationFileControl* destinationFileControl = + iRecordedLiveSession->LocalVideoPlayer()->LcDestinationFileControl(); + destinationFileControl->LcRecordL( ETrue ); // Test state CMceMediaStream::ENoResources @@ -1176,8 +574,9 @@ iLiveSession->StreamStateChanged( *iLiveSession->iSession->Streams()[0], *iLiveSession->iSession->Streams()[0]->Sinks()[0] ); - EUNIT_ASSERT( iObserver->iStreamStreamingCalled ) - iObserver->Reset(); + EUNIT_ASSERT_EQUALS( TInt( iLcSessionObserver->iCalledFunction ), + TInt( CLcSessionObserverStub::EPlayerStateChanged ) ) + iLcSessionObserver->Reset(); // Try again with recording stream, but indicate change in another stream, // nothing happens @@ -1212,8 +611,11 @@ iRecordedLiveSession->StreamStateChanged( *recordingStream, *recordingStream->Sinks()[0] ); - EUNIT_ASSERT( iObserver->iDiskFullCalled ) - iObserver->Reset(); + EUNIT_ASSERT_EQUALS( TInt( iLcSessionObserver->iCalledFunction ), + TInt( CLcSessionObserverStub::ESessionFailed ) ) + EUNIT_ASSERT_EQUALS( iLcSessionObserver->iError, + TInt( MLcSession::EDiskFull ) ) + iLcSessionObserver->Reset(); // Test default stream state change behavior @@ -1224,33 +626,34 @@ // EUninitialized, stream is created, unexpected change, nothing happens changedStream->iState = CMceMediaStream::EUninitialized; iLiveSession->StreamStateChanged( *changedStream, *changedSink ); - EUNIT_ASSERT( iObserver->IsReseted() ); + EUNIT_ASSERT( iLcSessionObserver->IsReseted() ) // EInitialized, stream is initialized changedStream->iState = CMceMediaStream::EInitialized; iLiveSession->StreamStateChanged( *changedStream, *changedSink ); - EUNIT_ASSERT( iObserver->IsReseted() ); + EUNIT_ASSERT( iLcSessionObserver->IsReseted() ) // EBuffering, stream is buffering changedStream->iState = CMceMediaStream::EBuffering; iLiveSession->StreamStateChanged( *changedStream, *changedSink ); - EUNIT_ASSERT( iObserver->IsReseted() ); + EUNIT_ASSERT( iLcSessionObserver->IsReseted() ) // EIdle, stream is not receiving RTP changedStream->iState = CMceMediaStream::EIdle; iLiveSession->StreamStateChanged( *changedStream, *changedSink ); - EUNIT_ASSERT( iObserver->iStreamIdleCalled ); + EUNIT_ASSERT( iLcSessionObserver->IsReseted() ) // EStreaming, stream is streaming changedStream->iState = CMceMediaStream::EStreaming; iLiveSession->StreamStateChanged( *changedStream, *changedSink ); - EUNIT_ASSERT( iObserver->iStreamStreamingCalled ); - iObserver->Reset(); + EUNIT_ASSERT_EQUALS( TInt( iLcSessionObserver->iCalledFunction ), + TInt( CLcSessionObserverStub::EPlayerStateChanged ) ) + iLcSessionObserver->Reset(); // EDisabled, stream is explicitly disabled changedStream->iState = CMceMediaStream::EDisabled; iLiveSession->StreamStateChanged( *changedStream, *changedSink ); - EUNIT_ASSERT( iObserver->IsReseted() ); + EUNIT_ASSERT( iLcSessionObserver->IsReseted() ) // ENoResources, stream has no needed resources to stream // This state has non-default meaning, tested before defaults @@ -1258,12 +661,12 @@ // ETranscodingRequired, stream requires non-realtime transcoding changedStream->iState = CMceMediaStream::ETranscodingRequired; iLiveSession->StreamStateChanged( *changedStream, *changedSink ); - EUNIT_ASSERT( iObserver->IsReseted() ); + EUNIT_ASSERT( iLcSessionObserver->IsReseted() ) // ETranscoding, stream is transcoding in non-realtime changedStream->iState = CMceMediaStream::ETranscoding; iLiveSession->StreamStateChanged( *changedStream, *changedSink ); - EUNIT_ASSERT( iObserver->IsReseted() ); + EUNIT_ASSERT( iLcSessionObserver->IsReseted() ) } @@ -1272,252 +675,24 @@ // // ----------------------------------------------------------------------------- // -void UT_CMusEngLiveSession::UT_SetEncodingDeviceLL() - { - CMceAvcCodec* codec = CMceAvcCodec::NewLC( KMceSDPNameH264() ); - - // Generic error in CenRep, leave expected - CRepository::iForceFailWithCode = KErrNotReady; - EUNIT_ASSERT_LEAVE( iLiveSession->SetEncodingDeviceL( *codec ) ) - EUNIT_ASSERT_EQUALS( codec->iEncodingDecodingDevice, TUid::Uid( 0 ) ) - - // No entry in CenRep, default value expected - CRepository::iForceFailWithCode = KErrNotFound; - const TUid KDefaultEncodingDevice( TUid::Uid( 0x20001C13 ) ); - iLiveSession->SetEncodingDeviceL( *codec ); - EUNIT_ASSERT_EQUALS( codec->iEncodingDecodingDevice, - KDefaultEncodingDevice ) - - // Entry in CenRep - const TInt KSomeEncodingDevice( 0x20001C15 ); - CRepository::iStaticEncoderUid = KSomeEncodingDevice; - iLiveSession->SetEncodingDeviceL( *codec ); - EUNIT_ASSERT_EQUALS( codec->iEncodingDecodingDevice, - TUid::Uid( KSomeEncodingDevice ) ) - - CleanupStack::PopAndDestroy( codec ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void UT_CMusEngLiveSession::UT_SetCodecConfigKeyLL() +void UT_CMusEngLiveSession::UT_EstablishLcSessionL() { - CMceAvcCodec* codec = CMceAvcCodec::NewLC( KMceSDPNameH264() ); - codec->SetAllowedBitrates( KMceAvcBitrateLevel1b ); - - // Generic error in CenRep, leave expected - CRepository::iForceFailWithCode = KErrNotReady; - EUNIT_ASSERT_LEAVE( iLiveSession->SetCodecConfigKeyL( *codec ) ); - EUNIT_ASSERT( !codec->iConfigKey ) - EUNIT_ASSERT( !iLiveSession->iStoreEncoderConfigInfo ) - CRepository::iForceFailWithCode = KErrNone; - - // No entry in CenRep, nothing happens - iLiveSession->SetCodecConfigKeyL( *codec ); - EUNIT_ASSERT( !codec->iConfigKey ) - EUNIT_ASSERT( !iLiveSession->iStoreEncoderConfigInfo ) - - // Empty entry in CenRep - CRepository::SetStubAvcConfigKeysL( KNullDesC8() ); - iLiveSession->SetCodecConfigKeyL( *codec ); - EUNIT_ASSERT( !codec->iConfigKey ) - EUNIT_ASSERT( iLiveSession->iStoreEncoderConfigInfo ) - iLiveSession->iStoreEncoderConfigInfo = EFalse; // emulate original situation - - // Entry in CenRep - CRepository::SetStubAvcConfigKeysL( KMusAvcBitrateLevel_1b_ConfigKey ); - iLiveSession->SetCodecConfigKeyL( *codec ); - EUNIT_ASSERT( codec->iConfigKey ) - HBufC8* key = codec->ConfigKeyL(); - CleanupStack::PushL( key ); - EUNIT_ASSERT_EQUALS( *key, KMusAvcBitrateLevel1bTestText() ) - CleanupStack::PopAndDestroy( key ); - EUNIT_ASSERT( !iLiveSession->iStoreEncoderConfigInfo ) - - CleanupStack::PopAndDestroy( codec ); + iLiveSession->EstablishLcSessionL(); + EUNIT_ASSERT_EQUALS( TInt( CMceSession::EOffering ), + TInt( iLiveSession->iSession->iState ) ) } - // ----------------------------------------------------------------------------- // // ----------------------------------------------------------------------------- // -void UT_CMusEngLiveSession::UT_ReadCodecConfigKeyLL() +void UT_CMusEngLiveSession::UT_LocalVideoPlayerL() { - HBufC8* key( NULL ); - - // Try with H263, leave expected - CMceVideoCodec* codecH263 = CMceH263Codec::NewLC( KMceSDPNameH263() ); - EUNIT_ASSERT_LEAVE( key = iLiveSession->ReadCodecConfigKeyL( *codecH263 ) ) - CleanupStack::PopAndDestroy( codecH263 ); - - // Try without an entry in CenRep, leave expected - CMceVideoCodec* codec = CMceAvcCodec::NewLC( KMceSDPNameH264() ); - codec->SetAllowedBitrates( 0 | KMceAvcBitrateLevel1 ); - EUNIT_ASSERT_LEAVE( key = iLiveSession->ReadCodecConfigKeyL( *codec ) ) - - // Create CenRep entry which does not include wanted bitrate, NULL value - // expected - CRepository::SetStubAvcConfigKeysL( KMusAvcBitrateLevel1bTestText() ); - key = iLiveSession->ReadCodecConfigKeyL( *codec ); - EUNIT_ASSERT( !key ) - - // Create entry with all AVC keys and try with all the values - CRepository::SetStubAvcConfigKeysL( KMusAvcAllLevelsConcatenation() ); - - // KMceAvcBitrateLevel1 - key = iLiveSession->ReadCodecConfigKeyL( *codec ); - EUNIT_ASSERT( key ); - CleanupStack::PushL( key ); - EUNIT_ASSERT_EQUALS( *key, KMusAvcBitrateLevel1TestText ); - CleanupStack::PopAndDestroy( key ); - - // KMceAvcBitrateLevel1b - codec->SetAllowedBitrates( KMceAvcBitrateLevel1b ); - key = iLiveSession->ReadCodecConfigKeyL( *codec ); - EUNIT_ASSERT( key ); - CleanupStack::PushL( key ); - EUNIT_ASSERT_EQUALS( *key, KMusAvcBitrateLevel1bTestText ); - CleanupStack::PopAndDestroy( key ); - - // KMceAvcBitrateLevel1_1 - codec->SetAllowedBitrates( KMceAvcBitrateLevel1_1 ); - key = iLiveSession->ReadCodecConfigKeyL( *codec ); - EUNIT_ASSERT( key ); - CleanupStack::PushL( key ); - EUNIT_ASSERT_EQUALS( *key, KMusAvcBitrateLevel1_1TestText ); - CleanupStack::PopAndDestroy( key ); - - // KMceAvcBitrateLevel1_2 - codec->SetAllowedBitrates( KMceAvcBitrateLevel1_2 ); - key = iLiveSession->ReadCodecConfigKeyL( *codec ); - EUNIT_ASSERT( key ); - CleanupStack::PushL( key ); - EUNIT_ASSERT_EQUALS( *key, KMusAvcBitrateLevel1_2TestText ); - CleanupStack::PopAndDestroy( key ); - - // KMceAvcBitrateLevel1_3 - codec->SetAllowedBitrates( KMceAvcBitrateLevel1_3 ); - key = iLiveSession->ReadCodecConfigKeyL( *codec ); - EUNIT_ASSERT( key ); - CleanupStack::PushL( key ); - EUNIT_ASSERT_EQUALS( *key, KMusAvcBitrateLevel1_3TestText ); - CleanupStack::PopAndDestroy( key ); - - // KMceAvcBitrateLevel2 - codec->SetAllowedBitrates( KMceAvcBitrateLevel2 ); - key = iLiveSession->ReadCodecConfigKeyL( *codec ); - EUNIT_ASSERT( key ); - CleanupStack::PushL( key ); - EUNIT_ASSERT_EQUALS( *key, KMusAvcBitrateLevel2TestText ); - CleanupStack::PopAndDestroy( key ); - - CleanupStack::PopAndDestroy( codec ); - + EUNIT_ASSERT( iLiveSession->LocalVideoPlayer() == + iLiveSession->iLiveVideoPlayer ) } - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void UT_CMusEngLiveSession::UT_StoreEncoderConfigInfoLL() - { - CRepository::iStaticWriteAvcKeysToStaticData = ETrue; - - // Try with clean CenRep - MultimediaSharingSettings::SetEncoderConfigInfoL( KNullDesC8() ); - - ESTABLISH_OUT_SESSION( iLiveSession ) // calls StoreEncoderConfigInfoL - // If StoreEncoderConfigInfoL leaves with KErrNoMemory, - // MMusEngSessionObserver::SessionFailed will be called. - __ASSERT_ALWAYS( !iObserver->iSessionFailedCalled, - User::Leave( KErrNoMemory ) ); - - HBufC8* keys = MultimediaSharingSettings::EncoderConfigInfoLC(); - EUNIT_ASSERT_EQUALS( *keys, KMusAvcBitrateLevel_1b_ConfigKey() ) - CleanupStack::PopAndDestroy( keys ); - - // Try without a clean CenRep - MultimediaSharingSettings::SetEncoderConfigInfoL( - KMusAvcBitrateLevel_1_1_ConfigKey() ); - - ESTABLISH_OUT_SESSION( iRecordedLiveSession ) - // If StoreEncoderConfigInfoL leaves with KErrNoMemory, - // MMusEngSessionObserver::SessionFailed will be called. - __ASSERT_ALWAYS( !iObserver->iSessionFailedCalled, - User::Leave( KErrNoMemory ) ); - - keys = MultimediaSharingSettings::EncoderConfigInfoLC(); - EUNIT_ASSERT_EQUALS( *keys, - KMusAvcBitrateLevels_1_1_And_1b_ConfigKeys() ) - CleanupStack::PopAndDestroy( keys ); - } - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void UT_CMusEngLiveSession::UT_InitializeZoomStepSizeL() - { - //Check that zooming steps have defualt values before session establishment - iLiveSession->InitializeZoomStepSize(); - EUNIT_ASSERT( iLiveSession->iSmallZoomStep == KZoomStepMinSize ); - EUNIT_ASSERT( iLiveSession->iBigZoomStep == KZoomStepMinSize ); - - // simulate session establishment - ESTABLISH_OUT_SESSION( iLiveSession ); - - CMceCameraSource* camera = - MusEngMceUtils::GetCameraL( *(iLiveSession->iSession) ); - - //Check that zooming step sizes have default value KZoomStepMinSize - //in case of zooming values range is smaller than KZoomBigStepCount - iLiveSession->iCameraInfo.iMinZoom = 0; - iLiveSession->iCameraInfo.iMaxZoom = 0; - iLiveSession->iCameraInfo.iMaxDigitalZoom = KZoomBigStepCount / 2; - iLiveSession->InitializeZoomStepSize(); - EUNIT_ASSERT( iLiveSession->iSmallZoomStep == KZoomStepMinSize ); - EUNIT_ASSERT( iLiveSession->iBigZoomStep == KZoomStepMinSize ); - - - //Check that zooming step sizes have default value KZoomStepMinSize - //in case of zooming values range is bigger than KZoomBigStepCount, - //but smaller than 2*KZoomBigStepCount (KZoomSmallStepCount) - iLiveSession->iCameraInfo.iMaxDigitalZoom = 2*KZoomBigStepCount - 1; - iLiveSession->InitializeZoomStepSize(); - EUNIT_ASSERT( iLiveSession->iSmallZoomStep == KZoomStepMinSize ); - EUNIT_ASSERT( iLiveSession->iBigZoomStep == KZoomStepMinSize ); - - - //Check zooming steps sizes in case of zooming values range is - //bigger than 2*KZoomBigStepCount and smaller than 2*KZoomSmallStepCount - iLiveSession->iCameraInfo.iMinZoom = - KZoomBigStepCount; - iLiveSession->iCameraInfo.iMaxZoom = KZoomBigStepCount; - iLiveSession->iCameraInfo.iMaxDigitalZoom = KZoomBigStepCount; - //zooming range is (-KZoomBigStepCount, 2*KZoomBigStepCount) - iLiveSession->InitializeZoomStepSize(); - EUNIT_ASSERT( iLiveSession->iSmallZoomStep == KZoomStepMinSize ); - EUNIT_ASSERT( iLiveSession->iBigZoomStep == 3 ); - - - //Check zooming steps sizes in case of zooming values range is - //bigger than 2*KZoomSmallStepCount - iLiveSession->iCameraInfo.iMaxZoom = KZoomSmallStepCount; - iLiveSession->iCameraInfo.iMaxDigitalZoom = KZoomSmallStepCount; - iLiveSession->iCameraInfo.iMinZoom = - KZoomSmallStepCount; - //zooming range is (-KZoomSmallStepCount, 2*KZoomSmallStepCount) - iLiveSession->InitializeZoomStepSize(); - EUNIT_ASSERT( iLiveSession->iSmallZoomStep == 3 ); - EUNIT_ASSERT( iLiveSession->iBigZoomStep == 6 ); - } - - // TEST TABLE - EUNIT_BEGIN_TEST_TABLE( UT_CMusEngLiveSession, "UT_CMusEngLiveSesssion", @@ -1531,125 +706,6 @@ SetupL, UT_NewLL, Teardown) EUNIT_TEST( - "CurrentZoomL - test ", - "CMusEngLiveSession", - "CurrentZoomL", - "FUNCTIONALITY", - SetupL, UT_CurrentZoomLL, Teardown) - -EUNIT_TEST( - "MaxZoomL - test ", - "CMusEngLiveSession", - "MaxZoomL", - "FUNCTIONALITY", - SetupL, UT_MaxZoomLL, Teardown) - -EUNIT_TEST( - "ZoomInL - test ", - "CMusEngLiveSession", - "ZoomInL", - "FUNCTIONALITY", - SetupL, UT_ZoomInLL, Teardown) - -EUNIT_TEST( - "ZoomOutL - test ", - "CMusEngLiveSession", - "ZoomOutL", - "FUNCTIONALITY", - SetupL, UT_ZoomOutLL, Teardown) - -EUNIT_TEST( - "ZoomDefaultL - test ", - "CMusEngLiveSession", - "ZoomDefaultL", - "FUNCTIONALITY", - SetupL, UT_ZoomDefaultLL, Teardown) - -EUNIT_TEST( - "SetBrightnessL - test ", - "CMusEngLiveSession", - "SetBrightnessL", - "FUNCTIONALITY", - SetupL, UT_SetBrightnessLL, Teardown) - -EUNIT_TEST( - "CurrentBrightnessL - test ", - "CMusEngLiveSession", - "CurrentBrightnessL", - "FUNCTIONALITY", - SetupL, UT_CurrentBrightnessLL, Teardown) - -EUNIT_TEST( - "MaxBrightnessL - test ", - "CMusEngLiveSession", - "MaxBrightnessL", - "FUNCTIONALITY", - SetupL, UT_MaxBrightnessLL, Teardown) - -EUNIT_TEST( - "MinBrightnessL - test ", - "CMusEngLiveSession", - "MinBrightnessL", - "FUNCTIONALITY", - SetupL, UT_MinBrightnessLL, Teardown) - -EUNIT_TEST( - "IncreaseBrightnessL - test ", - "CMusEngLiveSession", - "IncreaseBrightnessL", - "FUNCTIONALITY", - SetupL, UT_IncreaseBrightnessLL, Teardown) - -EUNIT_TEST( - "DecreaseBrightnessL - test ", - "CMusEngLiveSession", - "DecreaseBrightnessL", - "FUNCTIONALITY", - SetupL, UT_DecreaseBrightnessLL, Teardown) - -EUNIT_TEST( - "BrightnessDefaultL - test ", - "CMusEngLiveSession", - "BrightnessDefaultL", - "FUNCTIONALITY", - SetupL, UT_BrightnessDefaultLL, Teardown) - -EUNIT_TEST( - "BrightnessAutoL - test ", - "CMusEngLiveSession", - "BrightnessAutoL", - "FUNCTIONALITY", - SetupL, UT_BrightnessAutoLL, Teardown) - -EUNIT_TEST( - "RecordL_and_IsRecordingL - test ", - "CMusEngLiveSession", - "RecordL_and_IsRecordingL", - "FUNCTIONALITY", - SetupL, UT_RecordL_and_IsRecordingLL, Teardown) - -EUNIT_TEST( - "PlayL - test ", - "CMusEngLiveSession", - "PlayL", - "FUNCTIONALITY", - SetupL, UT_PlayLL, Teardown) - -EUNIT_TEST( - "PauseL - test ", - "CMusEngLiveSession", - "PauseL", - "FUNCTIONALITY", - SetupL, UT_PauseLL, Teardown) - -EUNIT_TEST( - "IsPlayingL - test ", - "CMusEngLiveSession", - "IsPlayingL", - "FUNCTIONALITY", - SetupL, UT_IsPlayingLL, Teardown) - -EUNIT_TEST( "CompleteSessionStructureL - test ", "CMusEngLiveSession", "CompleteSessionStructureL", @@ -1657,13 +713,6 @@ SetupL, UT_CompleteSessionStructureLL, Teardown) EUNIT_TEST( - "HandleSessionStateChanged - test ", - "CMusEngLiveSession", - "HandleSessionStateChanged", - "FUNCTIONALITY", - SetupL, UT_HandleSessionStateChangedL, Teardown) - -EUNIT_TEST( "AdjustVideoCodecL - test ", "CMusEngLiveSession", "AdjustVideoCodecL", @@ -1703,44 +752,22 @@ "CMusEngLiveSession", "StreamStateChangedL( sink )", "FUNCTIONALITY", - SetupL, UT_StreamStateChangedWithSinkL, Teardown) - -EUNIT_TEST( - "SetEncodingDeviceL - test ", - "CMusEngLiveSession", - "SetEncodingDeviceL", - "FUNCTIONALITY", - SetupL, UT_SetEncodingDeviceLL, Teardown) - -EUNIT_TEST( - "SetCodecConfigKeyL - test ", - "CMusEngLiveSession", - "SetCodecConfigKeyL", - "FUNCTIONALITY", - SetupL, UT_SetCodecConfigKeyLL, Teardown) + SetupL, UT_StreamStateChangedWithSinkL, Teardown) EUNIT_TEST( - "ReadCodecConfigKeyL - test ", + "EstablishLcSessionL - test ", "CMusEngLiveSession", - "ReadCodecConfigKeyL", + "EstablishLcSessionL", "FUNCTIONALITY", - SetupL, UT_ReadCodecConfigKeyLL, Teardown) - -EUNIT_TEST( - "StoreEncoderConfigInfoL - test ", - "CMusEngLiveSession", - "StoreEncoderConfigInfoL", - "FUNCTIONALITY", - SetupL, UT_StoreEncoderConfigInfoLL, Teardown) + SetupL, UT_EstablishLcSessionL, Teardown) EUNIT_TEST( - "InitializeZoomStepSize - test ", + "LocalVideoPlayer - test ", "CMusEngLiveSession", - "InitializeZoomStepSize", + "LocalVideoPlayer", "FUNCTIONALITY", - SetupL, UT_InitializeZoomStepSizeL, Teardown) - - + SetupL, UT_LocalVideoPlayerL, Teardown) + EUNIT_END_TEST_TABLE // END OF FILE diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshengine/tsrc/ut_engine/src/ut_musenglivevideoplayer.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/mmshengine/tsrc/ut_engine/src/ut_musenglivevideoplayer.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,490 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + + +// INTERNAL INCLUDES +#include "ut_musenglivevideoplayer.h" +#include "musenglivevideoplayer.h" +#include "musengtestdefs.h" + +// SYSTEM INCLUDES +#include +#include +#include +#include +#include +#include + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +UT_CMusEngLiveVideoPlayer* UT_CMusEngLiveVideoPlayer::NewL() + { + UT_CMusEngLiveVideoPlayer* self = UT_CMusEngLiveVideoPlayer::NewLC(); + CleanupStack::Pop( self ); + return self; + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +UT_CMusEngLiveVideoPlayer* UT_CMusEngLiveVideoPlayer::NewLC() + { + UT_CMusEngLiveVideoPlayer* self = new( ELeave ) UT_CMusEngLiveVideoPlayer(); + CleanupStack::PushL( self ); + self->ConstructL(); + return self; + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +UT_CMusEngLiveVideoPlayer::~UT_CMusEngLiveVideoPlayer() + { + // NOP + } + +// ----------------------------------------------------------------------------- +// Default constructor +// ----------------------------------------------------------------------------- +// +UT_CMusEngLiveVideoPlayer::UT_CMusEngLiveVideoPlayer() + { + // NOP + } + +// ----------------------------------------------------------------------------- +// Second phase construct +// ----------------------------------------------------------------------------- +// +void UT_CMusEngLiveVideoPlayer::ConstructL() + { + // The ConstructL from the base class CEUnitTestSuiteClass must be called. + // It generates the test case table. + CEUnitTestSuiteClass::ConstructL(); + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_CMusEngLiveVideoPlayer::SetupL() + { + iMceSession = CMceOutSession::NewL(); + CMceVideoStream* videoStream = CMceVideoStream::NewLC(); + CMceRtpSink* rtpsink = CMceRtpSink::NewLC(); + videoStream->AddSinkL( rtpsink ); + CleanupStack::Pop( rtpsink ); + CMceCameraSource* camera = CMceCameraSource::NewLC(); + iCameraHandler.InitializeL( *camera ); + videoStream->SetSourceL( camera ); + CleanupStack::Pop( camera ); + iMceSession->AddStreamL( videoStream ); + CleanupStack::Pop( videoStream ); + + iCameraHandler.SetSession( iMceSession ); + iLiveVideoPlayer = + CMusEngLiveVideoPlayer::NewL( + iDisplayHandlerStub, + iCameraHandler, + iLcAudioControlStub ); + iLiveVideoPlayer->SetMceSession( iMceSession ); + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_CMusEngLiveVideoPlayer::Teardown() + { + delete iLiveVideoPlayer; + delete iMceSession; + iLcAudioControlStub.Reset(); + } + + + +// TEST CASES + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_CMusEngLiveVideoPlayer::UT_NewLL() + { + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_CMusEngLiveVideoPlayer::UT_LcVideoPlayerStateL() + { + // iMceSession not set + iLiveVideoPlayer->SetMceSession( NULL ); + EUNIT_ASSERT_EQUALS( TInt( MLcVideoPlayer::EUnavailable ), + TInt( iLiveVideoPlayer->LcVideoPlayerState() ) ) + iLiveVideoPlayer->SetMceSession( iMceSession ); + + // Establish Session and simulate media playing. + iMceSession->iState = CMceSession::EEstablished; + for ( TInt i = 0; i < iMceSession->Streams().Count(); i++ ) + { + iMceSession->Streams()[i]->iState = CMceMediaStream::EStreaming; + } + + EUNIT_ASSERT_EQUALS( TInt( MLcVideoPlayer::EPlaying ), + TInt( iLiveVideoPlayer->LcVideoPlayerState() ) ) + + // Media streams unavailable + iMceSession->Streams()[0]->iState = CMceMediaStream::EUninitialized; + EUNIT_ASSERT_EQUALS( TInt( MLcVideoPlayer::EUnavailable ), + TInt( iLiveVideoPlayer->LcVideoPlayerState() ) ) + + // All other stream states + iMceSession->Streams()[0]->iState = CMceMediaStream::EInitialized; + EUNIT_ASSERT_EQUALS( TInt( MLcVideoPlayer::EInit ), + TInt( iLiveVideoPlayer->LcVideoPlayerState() ) ) + + iMceSession->Streams()[0]->iState = CMceMediaStream::EBuffering; + EUNIT_ASSERT_EQUALS( TInt( MLcVideoPlayer::EBuffering ), + TInt( iLiveVideoPlayer->LcVideoPlayerState() ) ) + + iMceSession->Streams()[0]->iState = CMceMediaStream::EIdle; + EUNIT_ASSERT_EQUALS( TInt( MLcVideoPlayer::EPaused ), + TInt( iLiveVideoPlayer->LcVideoPlayerState() ) ) + + iMceSession->Streams()[0]->iState = CMceMediaStream::EDisabled; + EUNIT_ASSERT_EQUALS( TInt( MLcVideoPlayer::EPaused ), + TInt( iLiveVideoPlayer->LcVideoPlayerState() ) ) + + iMceSession->Streams()[0]->iState = CMceMediaStream::EStreaming; + EUNIT_ASSERT_EQUALS( TInt( MLcVideoPlayer::EPlaying ), + TInt( iLiveVideoPlayer->LcVideoPlayerState() ) ) + + iMceSession->Streams()[0]->iState = CMceMediaStream::ENoResources; + EUNIT_ASSERT_EQUALS( TInt( MLcVideoPlayer::EUnavailable ), + TInt( iLiveVideoPlayer->LcVideoPlayerState() ) ) + + iMceSession->Streams()[0]->iState = CMceMediaStream::ETranscodingRequired; + EUNIT_ASSERT_EQUALS( TInt( MLcVideoPlayer::EUnavailable ), + TInt( iLiveVideoPlayer->LcVideoPlayerState() ) ) + + iMceSession->Streams()[0]->iState = CMceMediaStream::ETranscoding; + EUNIT_ASSERT_EQUALS( TInt( MLcVideoPlayer::EUnavailable ), + TInt( iLiveVideoPlayer->LcVideoPlayerState() ) ) + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_CMusEngLiveVideoPlayer::UT_LcPlayL() + { + // Play + iLiveVideoPlayer->LcPlayL(); + EUNIT_ASSERT( iLiveVideoPlayer->LcIsPlayingL() ); + + // Pause + iLiveVideoPlayer->LcPauseL(); + EUNIT_ASSERT( !iLiveVideoPlayer->LcIsPlayingL() ); + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_CMusEngLiveVideoPlayer::UT_LcWindowL() + { + EUNIT_ASSERT( iLiveVideoPlayer->LcWindow() == iLiveVideoPlayer ) + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_CMusEngLiveVideoPlayer::UT_LcCameraControlL() + { + EUNIT_ASSERT( iLiveVideoPlayer->LcCameraControl() == &iCameraHandler ) + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_CMusEngLiveVideoPlayer::UT_LcSourceFileControlL() + { + EUNIT_ASSERT( iLiveVideoPlayer->LcSourceFileControl() == NULL ) + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_CMusEngLiveVideoPlayer::UT_LcDestinationFileControlL() + { + EUNIT_ASSERT( + iLiveVideoPlayer->LcDestinationFileControl() == iLiveVideoPlayer ) + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_CMusEngLiveVideoPlayer::UT_LcAudioControlL() + { + EUNIT_ASSERT( iLiveVideoPlayer->LcAudioControl() == &iLcAudioControlStub ) + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_CMusEngLiveVideoPlayer::UT_LcZoomControlL() + { + EUNIT_ASSERT( iLiveVideoPlayer->LcZoomControl() == &iCameraHandler ) + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_CMusEngLiveVideoPlayer::UT_LcBrightnessControlL() + { + EUNIT_ASSERT( iLiveVideoPlayer->LcBrightnessControl() == &iCameraHandler ) + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_CMusEngLiveVideoPlayer::UT_EnableLcWindowL() + { + EUNIT_ASSERT( !iLiveVideoPlayer->IsLcWindowEnabled() ) + + // Enable + iLiveVideoPlayer->EnableLcWindowL( ETrue ); + EUNIT_ASSERT( iLiveVideoPlayer->IsLcWindowEnabled() ) + + // Disable + iLiveVideoPlayer->EnableLcWindowL( EFalse ); + EUNIT_ASSERT( !iLiveVideoPlayer->IsLcWindowEnabled() ) + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_CMusEngLiveVideoPlayer::UT_LcWindowRectL() + { + TRect rect( 12, 34, 56, 78 ); + iLiveVideoPlayer->SetLcWindowRectL( rect ); + EUNIT_ASSERT( iLiveVideoPlayer->LcWindowRect() == rect ) + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_CMusEngLiveVideoPlayer::UT_LcWindowOrientationL() + { + iLiveVideoPlayer->SetLcWindowOrientationL( MLcWindow::EPortrait ); + EUNIT_ASSERT_EQUALS( TInt( MLcWindow::EPortrait ), + TInt( iLiveVideoPlayer->LcWindowOrientationL() ) ) + + iLiveVideoPlayer->SetLcWindowOrientationL( MLcWindow::ELandscape ); + EUNIT_ASSERT_EQUALS( TInt( MLcWindow::ELandscape ), + TInt( iLiveVideoPlayer->LcWindowOrientationL() ) ) + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_CMusEngLiveVideoPlayer::UT_SetLcFileNameL() + { + EUNIT_ASSERT_EQUALS( KNullDesC(), iLiveVideoPlayer->LcFileName() ) + + _LIT( KFileName, "my_clip.format"); + TFileName fileName( KFileName ); + iLiveVideoPlayer->SetLcFileNameL( fileName ); + EUNIT_ASSERT_EQUALS( fileName, iLiveVideoPlayer->LcFileName() ) + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_CMusEngLiveVideoPlayer::UT_LcRecordL() + { + // No MCE session + iLiveVideoPlayer->SetMceSession( NULL ); + EUNIT_ASSERT_SPECIFIC_LEAVE( + iLiveVideoPlayer->LcRecordL( ETrue ), KErrNotReady ) + + // No file sink in the session + iLiveVideoPlayer->SetMceSession( iMceSession ); + EUNIT_ASSERT_SPECIFIC_LEAVE( + iLiveVideoPlayer->LcRecordL( ETrue ), KErrNotReady ) + + // Record, not yet recording + EUNIT_ASSERT( !iLiveVideoPlayer->LcIsRecording() ) + CMceVideoStream* streamForRecording = CMceVideoStream::NewLC(); + CMceFileSink* fileSink = CMceFileSink::NewLC( KTestVideoFileName() ); + fileSink->DisableL(); + streamForRecording->AddSinkL( fileSink ); + CleanupStack::Pop( fileSink ); + iMceSession->AddStreamL( streamForRecording ); + CleanupStack::Pop( streamForRecording ); + iLiveVideoPlayer->LcRecordL( ETrue ); + EUNIT_ASSERT( iLiveVideoPlayer->LcIsRecording() ) + + // Record, already recording + iLiveVideoPlayer->LcRecordL( ETrue ); + EUNIT_ASSERT( iLiveVideoPlayer->LcIsRecording() ) + + // Stop recording + iLiveVideoPlayer->LcRecordL( EFalse ); + EUNIT_ASSERT( !iLiveVideoPlayer->LcIsRecording() ) + + // Stop recording, not anymore recording + iLiveVideoPlayer->LcRecordL( EFalse ); + EUNIT_ASSERT( !iLiveVideoPlayer->LcIsRecording() ) + } + + +// TEST TABLE + +EUNIT_BEGIN_TEST_TABLE( + UT_CMusEngLiveVideoPlayer, + "UT_CMusEngLiveVideoPlayer", + "UNIT" ) + +EUNIT_TEST( + "NewL - test ", + "CMusEngLiveVideoPlayer", + "NewL", + "FUNCTIONALITY", + SetupL, UT_NewLL, Teardown) + +EUNIT_TEST( + "LcVideoPlayerState - test ", + "CMusEngLiveVideoPlayer", + "LcVideoPlayerState", + "FUNCTIONALITY", + SetupL, UT_LcVideoPlayerStateL, Teardown) + +EUNIT_TEST( + "LcPlayL - test ", + "CMusEngLiveVideoPlayer", + "LcPlayL", + "FUNCTIONALITY", + SetupL, UT_LcPlayL, Teardown) + +EUNIT_TEST( + "LcWindow - test ", + "CMusEngLiveVideoPlayer", + "LcWindow", + "FUNCTIONALITY", + SetupL, UT_LcWindowL, Teardown) + +EUNIT_TEST( + "LcCameraControl - test ", + "CMusEngLiveVideoPlayer", + "LcCameraControl", + "FUNCTIONALITY", + SetupL, UT_LcCameraControlL, Teardown) + +EUNIT_TEST( + "LcSourceFileControl - test ", + "CMusEngLiveVideoPlayer", + "LcSourceFileControl", + "FUNCTIONALITY", + SetupL, UT_LcSourceFileControlL, Teardown) + +EUNIT_TEST( + "LcDestinationFileControl - test ", + "CMusEngLiveVideoPlayer", + "LcDestinationFileControl", + "FUNCTIONALITY", + SetupL, UT_LcDestinationFileControlL, Teardown) + +EUNIT_TEST( + "LcAudioControl - test ", + "CMusEngLiveVideoPlayer", + "LcAudioControl", + "FUNCTIONALITY", + SetupL, UT_LcAudioControlL, Teardown) + +EUNIT_TEST( + "LcZoomControl - test ", + "CMusEngLiveVideoPlayer", + "LcZoomControl", + "FUNCTIONALITY", + SetupL, UT_LcZoomControlL, Teardown) + +EUNIT_TEST( + "LcBrightnessControl - test ", + "CMusEngLiveVideoPlayer", + "LcBrightnessControl", + "FUNCTIONALITY", + SetupL, UT_LcBrightnessControlL, Teardown) + +EUNIT_TEST( + "EnableLcWindowL - test ", + "CMusEngLiveVideoPlayer", + "EnableLcWindowL", + "FUNCTIONALITY", + SetupL, UT_EnableLcWindowL, Teardown) + +EUNIT_TEST( + "LcWindowRect - test ", + "CMusEngLiveVideoPlayer", + "LcWindowRect", + "FUNCTIONALITY", + SetupL, UT_LcWindowRectL, Teardown) + +EUNIT_TEST( + "LcWindowOrientation - test ", + "CMusEngLiveVideoPlayer", + "LcWindowOrientation", + "FUNCTIONALITY", + SetupL, UT_LcWindowOrientationL, Teardown) + +EUNIT_TEST( + "SetLcFileNameL - test ", + "CMusEngLiveVideoPlayer", + "SetLcFileNameL", + "FUNCTIONALITY", + SetupL, UT_SetLcFileNameL, Teardown) + +EUNIT_TEST( + "LcRecordL - test ", + "CMusEngLiveVideoPlayer", + "LcRecordL", + "FUNCTIONALITY", + SetupL, UT_LcRecordL, Teardown) + +EUNIT_END_TEST_TABLE + +// END OF FILE + + diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshengine/tsrc/ut_engine/src/ut_musengmcesession.cpp --- a/mmsharing/mmshengine/tsrc/ut_engine/src/ut_musengmcesession.cpp Thu Aug 19 09:51:39 2010 +0300 +++ b/mmsharing/mmshengine/tsrc/ut_engine/src/ut_musengmcesession.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -28,9 +28,12 @@ #include "musengsessiondurationtimer.h" #include "musengtelephoneutils.h" #include "musengmceutils.h" +#include "mussessionproperties.h" +#include "contactenginestub.h" +#include "musenglivevideoplayer.h" // SYSTEM INCLUDES - +#include #include #include #include @@ -42,9 +45,37 @@ #include #include #include +#include #include -#include +#include +#include +#include + +// CONSTANTS + +_LIT8( KMusAvcBitrateLevel1TestText, "TestTextForAvcBrL1Level" ); +_LIT8( KMusAvcBitrateLevel1bTestText, "TestTextForAvcBrL1bLevel" ); +_LIT8( KMusAvcBitrateLevel1_1TestText, "TestTextForAvcBrL1_1Level" ); +_LIT8( KMusAvcBitrateLevel1_2TestText, "TestTextForAvcBrL1_2Level" ); +_LIT8( KMusAvcBitrateLevel1_3TestText, "TestTextForAvcBrL1_3Level" ); +_LIT8( KMusAvcBitrateLevel2TestText, "TestTextForAvcBrL2Level" ); + +_LIT8( KMusAvcBitrateLevel_1b_ConfigKey, "AvcBrL1b=TestTextForAvcBrL1bLevel;" ); +_LIT8( KMusAvcBitrateLevel_1_1_ConfigKey, +"AvcBrL1_1=TestTextForAvcBrL1_1Level;"); + +_LIT8( KMusAvcBitrateLevels_1_1_And_1b_ConfigKeys, +"AvcBrL1_1=TestTextForAvcBrL1_1Level;\ +AvcBrL1b=TestTextForAvcBrL1bLevel;" ); + +_LIT8( KMusAvcAllLevelsConcatenation, +"AvcBrL1=TestTextForAvcBrL1Level;\ +AvcBrL1b=TestTextForAvcBrL1bLevel;\ +AvcBrL1_1=TestTextForAvcBrL1_1Level;\ +AvcBrL1_2=TestTextForAvcBrL1_2Level;\ +AvcBrL1_3=TestTextForAvcBrL1_3Level;\ +AvcBrL2=TestTextForAvcBrL2Level;" ); // ----------------------------------------------------------------------------- @@ -110,34 +141,37 @@ // void UT_CMusEngMceSession::SetupL( ) { - iObserver = new( ELeave ) CMusEngObserverStub; - iLiveSession = CMusEngLiveSession::NewL( KNullDesC, - TRect(0,0, 100,100), - *iObserver, - *iObserver, - *iObserver ); + iLcSessionObserver = new( ELeave )CLcSessionObserverStub; + iLcUiProvider = new( ELeave )CLcUiProviderStub; + + User::LeaveIfError( RProperty::Set( NMusSessionApi::KCategoryUid, + NMusSessionApi::KRemoteSipAddress, + KTestRecipientSipUri ) ); + + iLiveSession = CMusEngLiveSession::NewL(); + iLiveSession->SetLcSessionObserver( iLcSessionObserver ); + iLiveSession->SetLcUiProvider( iLcUiProvider ); - iSomeOtherSession = CMusEngLiveSession::NewL( KNullDesC, - TRect(0,0, 100,100), - *iObserver, - *iObserver, - *iObserver ); - ESTABLISH_OUT_SESSION( iSomeOtherSession ); + iSomeOtherSession = CMusEngLiveSession::NewL(); + iSomeOtherSession->SetLcSessionObserver( iLcSessionObserver ); + iSomeOtherSession->SetLcUiProvider( iLcUiProvider ); - iClipSession = CMusEngClipSession::NewL( TRect(0,0, 100,100), - *iObserver, - *iObserver, - *iObserver ); - iClipSession->SetClipL( KTestVideoFileName() ); + ESTABLISH_OUT_SESSION( iSomeOtherSession ); + + iClipSession = CMusEngClipSession::NewL(); + iClipSession->SetLcSessionObserver( iLcSessionObserver ); + iClipSession->SetLcUiProvider( iLcUiProvider ); + MLcSourceFileControl* sourceFileControl = + iClipSession->LocalVideoPlayer()->LcSourceFileControl(); + sourceFileControl->SetLcFileNameL( KTestAvcVideoFileName() ); - TBuf<50> videoCodec; - videoCodec.Copy( KMceSDPNameH264() ); - iClipSession->SetSupportedVideoCodecListL(videoCodec); + delete iClipSession->iVideoCodecList; + iClipSession->iVideoCodecList = NULL; + iClipSession->iVideoCodecList = KMceSDPNameH264().AllocL(); // Construct and establish an incoming session - iReceiveSession = CMusEngReceiveSession::NewL( TRect(0,0, 100,100), - *iObserver, - *iObserver ); + iReceiveSession = CMusEngReceiveSession::NewL(); + iReceiveSession->SetLcSessionObserver( iLcSessionObserver ); CMceInSession* inSession = CMceInSession::NewL( *iReceiveSession->iManager, KTestOriginator() ); @@ -153,12 +187,11 @@ inSession, &iContainer ); iReceiveSession->iSession->iState = CMceSession::EProceeding; - iReceiveSession->AcceptInvitationL( ETrue ); - - iObserver->Reset(); + iReceiveSession->EstablishLcSessionL(); + + iLcSessionObserver->Reset(); } - // ----------------------------------------------------------------------------- // // ----------------------------------------------------------------------------- @@ -168,47 +201,282 @@ delete iLiveSession; delete iClipSession; delete iReceiveSession; - delete iObserver; + delete iLcSessionObserver; + delete iLcUiProvider; delete iSomeOtherSession; - + PropertyHelper::Close(); + // Delete static data from CenRep stub + CRepository::iStaticWriteAvcKeysToStaticData = EFalse; + CRepository::DeleteStubAvcConfigKeys(); + CRepository::ResetStubGlobal(); + CRepository::iForceFailWithCode = KErrNone; } // TEST CASES +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_CMusEngMceSession::UT_LcSessionStateL() + { + // No MCE session -> MLcSession::EUninitialized + EUNIT_ASSERT_EQUALS( MLcSession::EUninitialized, + iLiveSession->LcSessionState() ) + + // MLcSession::EOpen + ESTABLISH_OUT_SESSION( iLiveSession ) + EUNIT_ASSERT_EQUALS( TInt( CMceSession::EEstablished ), + TInt( iLiveSession->iSession->iState ) ) + EUNIT_ASSERT_EQUALS( TInt( MLcSession::EOpen ), + TInt( iLiveSession->LcSessionState() ) ) + + // MLcSession::EInitialized + iLiveSession->iSession->iState = CMceSession::EIdle; + EUNIT_ASSERT_EQUALS( TInt( MLcSession::EInitialized ), + TInt( iLiveSession->LcSessionState() ) ) + + // MLcSession::EReceived + iLiveSession->iSession->iState = CMceSession::EIncoming; + EUNIT_ASSERT_EQUALS( TInt( MLcSession::EReceived ), + TInt( iLiveSession->LcSessionState() ) ) + + iLiveSession->iSession->iState = CMceSession::EProceeding; + EUNIT_ASSERT_EQUALS( TInt( MLcSession::EReceived ), + TInt( iLiveSession->LcSessionState() ) ) + + iLiveSession->iSession->iState = CMceSession::EReserving; + EUNIT_ASSERT_EQUALS( TInt( MLcSession::EReceived ), + TInt( iLiveSession->LcSessionState() ) ) + + // MLcSession::EOpening + iLiveSession->iSession->iState = CMceSession::EOffering; + EUNIT_ASSERT_EQUALS( TInt( MLcSession::EOpening ), + TInt( iLiveSession->LcSessionState() ) ) + + iLiveSession->iSession->iState = CMceSession::EAnswering; + EUNIT_ASSERT_EQUALS( TInt( MLcSession::EOpening ), + TInt( iLiveSession->LcSessionState() ) ) + + // MLcSession::EClosing + iLiveSession->iSession->iState = CMceSession::ECancelling; + EUNIT_ASSERT_EQUALS( TInt( MLcSession::EClosing ), + TInt( iLiveSession->LcSessionState() ) ) + + iLiveSession->iSession->iState = CMceSession::ETerminating; + EUNIT_ASSERT_EQUALS( TInt( MLcSession::EClosing ), + TInt( iLiveSession->LcSessionState() ) ) + + // MLcSession::EClosed + iLiveSession->iSession->iState = CMceSession::ETerminated; + EUNIT_ASSERT_EQUALS( TInt( MLcSession::EClosed ), + TInt( iLiveSession->LcSessionState() ) ) + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_CMusEngMceSession::UT_RemoteVideoPlayerL() + { + EUNIT_ASSERT( iLiveSession->CMusEngMceSession::RemoteVideoPlayer() == NULL ) + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_CMusEngMceSession::UT_LocalVideoPlayerL() + { + EUNIT_ASSERT( iLiveSession->CMusEngMceSession::LocalVideoPlayer() == NULL ) + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_CMusEngMceSession::UT_LocalDisplayNameL() + { + EUNIT_ASSERT_EQUALS( KNullDesC(), iLiveSession->LocalDisplayName() ) + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_CMusEngMceSession::UT_RemoteDisplayNameL() + { + // Clear the thread common storage to ensrue its not polluted. + User::LeaveIfError( RProperty::Set( NMusSessionApi::KCategoryUid, + NMusSessionApi::KContactName, + KNullDesC) ); + + EUNIT_ASSERT_EQUALS( KNullDesC(), iLiveSession->RemoteDisplayName() ) + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_CMusEngMceSession::UT_RemoteDetailsL() + { + // Clear the thread common storage to ensrue its not polluted. + User::LeaveIfError( RProperty::Set( NMusSessionApi::KCategoryUid, + NMusSessionApi::KTelNumber, + KNullDesC) ); + + EUNIT_ASSERT_EQUALS( KNullDesC(), iLiveSession->RemoteDetails() ) + + _LIT( KMusTestDetails, "1222233499" ); + User::LeaveIfError( RProperty::Set( NMusSessionApi::KCategoryUid, + NMusSessionApi::KTelNumber, + KMusTestDetails) ); + EUNIT_ASSERT_EQUALS( KMusTestDetails(), iLiveSession->RemoteDetails() ) + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_CMusEngMceSession::UT_SetParameterL() + { + const TInt dummy( 0 ); + EUNIT_ASSERT_EQUALS( KErrNotSupported, + iLiveSession->SetParameter( dummy, dummy ) ) + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_CMusEngMceSession::UT_ParameterValueL() + { + const TInt dummy( 0 ); + EUNIT_ASSERT_EQUALS( KErrNotSupported, + iLiveSession->ParameterValue( dummy ) ) + } + // ----------------------------------------------------------------------------- // // ----------------------------------------------------------------------------- // -void UT_CMusEngMceSession::UT_CMusEngMceSession_TerminateLL() +void UT_CMusEngMceSession::UT_IsLcAudioMutedL() { - TRAPD( error, iLiveSession->TerminateL() ); - MUS_TEST_FORWARD_ALLOC_FAILURE( error ); - EUNIT_ASSERT( error == KErrNotReady ); + // No MCE session + EUNIT_ASSERT_SPECIFIC_LEAVE( iLiveSession->IsLcAudioMutedL(), KErrNotReady ) + + ESTABLISH_OUT_SESSION( iLiveSession ) + + // No audio + EUNIT_ASSERT( iLiveSession->IsLcAudioMutedL() ) + + // Contains audio, but explicitly muted + CMceAudioStream* audioStream = CMceAudioStream::NewLC(); + iLiveSession->iSession->AddStreamL( audioStream ); + CleanupStack::Pop( audioStream ); + iLiveSession->iExplicitlyMuted = ETrue; + EUNIT_ASSERT( iLiveSession->IsLcAudioMutedL() ) - ESTABLISH_OUT_SESSION( iLiveSession ); - - EUNIT_ASSERT( iLiveSession->iSession->iState == CMceSession::EEstablished ); + // Contains audio, not muted + iLiveSession->iExplicitlyMuted = EFalse; + EUNIT_ASSERT( !iLiveSession->IsLcAudioMutedL() ) + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_CMusEngMceSession::UT_MuteLcAudioL() + { + // No MCE session + EUNIT_ASSERT_SPECIFIC_LEAVE( iLiveSession->IsLcAudioMutedL(), KErrNotReady ) - iLiveSession->TerminateL(); + ESTABLISH_OUT_SESSION( iLiveSession ) - EUNIT_ASSERT( iLiveSession->iSession->iState == CMceSession::ETerminating ); + // Mute + iLiveSession->MuteLcAudioL( ETrue ); + EUNIT_ASSERT( iLiveSession->iExplicitlyMuted ) + EUNIT_ASSERT( iLiveSession->IsLcAudioMutedL() ) + // Unmute + iLiveSession->MuteLcAudioL( EFalse ); + EUNIT_ASSERT( !iLiveSession->iExplicitlyMuted ) } +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_CMusEngMceSession::UT_MuteLcMicL() + { + // Mute + iLiveSession->MuteLcMicL( ETrue ); + User::LeaveIfError( RProperty::Set( KPSUidTelMicrophoneMuteStatus, + KTelMicrophoneMuteState, + EPSTelMicMuteOn ) ); + EUNIT_ASSERT( iLiveSession->IsLcMicMutedL() ) + + // Unmute + iLiveSession->MuteLcMicL( EFalse ); + User::LeaveIfError( RProperty::Set( KPSUidTelMicrophoneMuteStatus, + KTelMicrophoneMuteState, + EPSTelMicMuteOff ) ); + EUNIT_ASSERT( !iLiveSession->IsLcMicMutedL() ) + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_CMusEngMceSession::UT_EnableLcLoudspeakerL() + { + // Check that enabling the loudspeaker is allowed + EUNIT_ASSERT( iLiveSession->IsEnablingLcLoudspeakerAllowed() ) + + // Disable + iLiveSession->EnableLcLoudspeakerL( EFalse ); + EUNIT_ASSERT( !iLiveSession->IsLcLoudspeakerEnabled() ) + + // Enable + iLiveSession->EnableLcLoudspeakerL( ETrue ); + EUNIT_ASSERT( iLiveSession->IsLcLoudspeakerEnabled() ) + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_CMusEngMceSession::UT_SetLcVolumeL() + { + ESTABLISH_OUT_SESSION( iLiveSession ) + + // Set volume + const TInt volume( 5 ); + iLiveSession->SetLcVolumeL( volume ); + EUNIT_ASSERT_EQUALS( volume, iLiveSession->LcVolumeL() ); + + // Increase volume + iLiveSession->IncreaseLcVolumeL(); + EUNIT_ASSERT_EQUALS( volume+1, iLiveSession->LcVolumeL() ); + + // Decrease volume + iLiveSession->DecreaseLcVolumeL(); + EUNIT_ASSERT_EQUALS( volume, iLiveSession->LcVolumeL() ); + } // ----------------------------------------------------------------------------- // // ----------------------------------------------------------------------------- // -void UT_CMusEngMceSession::UT_CMusEngMceSession_GetSessionTimeL() +void UT_CMusEngMceSession::UT_GetSessionTimeL() { EUNIT_ASSERT( iLiveSession->GetSessionTime() < TTimeIntervalSeconds( 0 ) ); // Invite - iLiveSession->InviteL( KTestRecipientSipUri ); + iLiveSession->EstablishLcSessionL(); EUNIT_ASSERT( iLiveSession->GetSessionTime() < TTimeIntervalSeconds( 0 ) ); @@ -219,546 +487,68 @@ TTimeIntervalSeconds sessionTime = iLiveSession->GetSessionTime(); EUNIT_ASSERT( sessionTime >= TTimeIntervalSeconds( 0 ) ); } - -void UT_CMusEngMceSession::UT_CMusEngMceSession_IsDisplayEnabledLL() - { - TRAPD( error, iLiveSession->IsDisplayEnabledL() ); - MUS_TEST_FORWARD_ALLOC_FAILURE( error ); - EUNIT_ASSERT( error == KErrNotReady ); - - ESTABLISH_OUT_SESSION( iLiveSession ); - - //Enable - CMceDisplaySink* display = - MusEngMceUtils::GetDisplayL( *(iLiveSession->iSession) ); - display->iIsEnabled = ETrue; - EUNIT_ASSERT( iLiveSession->IsDisplayEnabledL() ); - - //Disable - display->iIsEnabled = EFalse; - EUNIT_ASSERT( !iLiveSession->IsDisplayEnabledL() ); - - // Display is reported as disabled when session state is terminated or idle - iLiveSession->iSession->iState = CMceSession::ETerminated; - display->iIsEnabled = ETrue; - EUNIT_ASSERT( !iLiveSession->IsDisplayEnabledL() ); - iLiveSession->iSession->iState = CMceSession::EIdle; - EUNIT_ASSERT( !iLiveSession->IsDisplayEnabledL() ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void UT_CMusEngMceSession::UT_CMusEngMceSession_ConnectionActiveL() - { - EUNIT_ASSERT( !iLiveSession->ConnectionActive() ); - - ESTABLISH_OUT_SESSION( iLiveSession ); - - EUNIT_ASSERT( iLiveSession->ConnectionActive() ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void UT_CMusEngMceSession::UT_CMusEngMceSession_ContainsAudioLL() - { - // Try without session, fails - EUNIT_ASSERT_SPECIFIC_LEAVE( iLiveSession->ContainsAudioL(), KErrNotReady ) - - // Establish session without audio - ESTABLISH_OUT_SESSION( iLiveSession ) - - EUNIT_ASSERT( !iLiveSession->ContainsAudioL() ) - - // Establish session with audio - ESTABLISH_OUT_SESSION( iClipSession ) - - EUNIT_ASSERT( iClipSession->ContainsAudioL() ) - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void UT_CMusEngMceSession::UT_CMusEngMceSession_IsMutedLL() - { - // Try without session, fails - EUNIT_ASSERT_SPECIFIC_LEAVE( iLiveSession->IsMutedL(), KErrNotReady ) - - // Establish session without audio - ESTABLISH_OUT_SESSION( iLiveSession ) - - EUNIT_ASSERT( iLiveSession->IsMutedL() ) - - // Establish session with audio - ESTABLISH_OUT_SESSION( iClipSession ) - - EUNIT_ASSERT( !iClipSession->IsMutedL() ) // Not muted although disabled - - iClipSession->EnableDisplayL( ETrue ); // Enabled also speaker - - EUNIT_ASSERT( !iClipSession->IsMutedL() ) // Enabled and not muted - - iClipSession->MuteL(); - - EUNIT_ASSERT( iClipSession->IsMutedL() ) // Explicitly muted - - iClipSession->UnmuteL(); - - EUNIT_ASSERT( !iClipSession->IsMutedL() ) // Explicitly unmuted - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void UT_CMusEngMceSession::UT_CMusEngMceSession_OrientationLL() - { - // Try without session, fails - EUNIT_ASSERT_SPECIFIC_LEAVE( iLiveSession->OrientationL(), KErrNotReady ) - - // Establish a session and try all the MCE rotation values - ESTABLISH_OUT_SESSION( iLiveSession ) - - CMceDisplaySink* display = - MusEngMceUtils::GetDisplayL( *iLiveSession->iSession ); - - display->iRotation = CMceDisplaySink::ENone; - EUNIT_ASSERT_EQUALS( iLiveSession->OrientationL(), - CMusEngMceSession::EPortrait ) - - display->iRotation = CMceDisplaySink::EClockwise90Degree; - EUNIT_ASSERT_EQUALS( iLiveSession->OrientationL(), - CMusEngMceSession::ELandscape ) - - display->iRotation = CMceDisplaySink::EClockwise180Degree; - EUNIT_ASSERT_EQUALS( iLiveSession->OrientationL(), - CMusEngMceSession::ELandscape ) - - display->iRotation = CMceDisplaySink::EClockwise270Degree; - EUNIT_ASSERT_EQUALS( iLiveSession->OrientationL(), - CMusEngMceSession::ELandscape ) - - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void UT_CMusEngMceSession::UT_CMusEngMceSession_SetOrientationLL() - { - // Try without session, fails - EUNIT_ASSERT_SPECIFIC_LEAVE( iLiveSession->SetOrientationL( - CMusEngMceSession::EPortrait ), - KErrNotReady ) - - // Establish a session - ESTABLISH_OUT_SESSION( iLiveSession ) - - CMceDisplaySink* display = - MusEngMceUtils::GetDisplayL( *iLiveSession->iSession ); - - // Check the initial state - display->iRotation = CMceDisplaySink::ENone; - EUNIT_ASSERT_EQUALS( iLiveSession->OrientationL(), - CMusEngMceSession::EPortrait ) - - // Successfully change orientation - - iLiveSession->SetOrientationL( CMusEngMceSession::ELandscape ); - EUNIT_ASSERT_EQUALS( iLiveSession->OrientationL(), - CMusEngMceSession::ELandscape ) - - iLiveSession->SetOrientationL( CMusEngMceSession::EPortrait ); - EUNIT_ASSERT_EQUALS( iLiveSession->OrientationL(), - CMusEngMceSession::EPortrait ) - - } - // ----------------------------------------------------------------------------- // // ----------------------------------------------------------------------------- // -void UT_CMusEngMceSession::UT_CMusEngMceSession_VolumeUpLL() - { - // Try without session, fails - TRAPD( error, iLiveSession->VolumeUpL() ); - MUS_TEST_FORWARD_ALLOC_FAILURE( error ); - EUNIT_ASSERT( error == KErrNotReady ); - - // Test only usage of CMceSpeaker, phone part is tested in base class - - // Check that nothing crashes without any speakers - iReceiveSession->VolumeUpL(); - - // Establish session - ESTABLISH_OUT_SESSION( iClipSession ) - - TInt initialVolume = iClipSession->VolumeL(); - - iClipSession->VolumeUpL(); - - // Check that all speaker volumes are adjusted and store one speaker pointer - - CMceSpeakerSink* speaker = NULL; - - CMceSession* session = iClipSession->iSession; - - for ( TInt i = 0; i < session->Streams().Count(); ++i ) - { - for ( TInt j = 0; j < session->Streams()[i]->Sinks().Count(); ++j ) - { - if ( session->Streams()[i]->Sinks()[j]->Type() == KMceSpeakerSink ) - { - speaker = static_cast( - session->Streams()[i]->Sinks()[j] ); - EUNIT_ASSERT( speaker->VolumeL() == initialVolume + 1 ); - } - } - } - - while ( iClipSession->VolumeL() < speaker->MaxVolumeL() ) - { - iClipSession->VolumeUpL(); - } - - iClipSession->VolumeUpL(); // Does not do anything to volume - - EUNIT_ASSERT( iClipSession->VolumeL() == speaker->MaxVolumeL() ); - - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void UT_CMusEngMceSession::UT_CMusEngMceSession_VolumeDownLL() - { - // Try without session, fails - TRAPD( error, iLiveSession->VolumeDownL() ); - MUS_TEST_FORWARD_ALLOC_FAILURE( error ); - EUNIT_ASSERT( error == KErrNotReady ); - - // Test only usage of CMceSpeaker, phone part is tested in base class - - // Check that nothing crashes without any speakers - iReceiveSession->VolumeUpL(); - - // Establish session - ESTABLISH_OUT_SESSION( iClipSession ) - - TInt initialVolume = iClipSession->VolumeL(); - - iClipSession->VolumeDownL(); - - // Check that all speaker volumes are adjusted and store one speaker pointer - - CMceSpeakerSink* speaker = NULL; - - CMceSession* session = iClipSession->iSession; - - for ( TInt i = 0; i < session->Streams().Count(); ++i ) - { - for ( TInt j = 0; j < session->Streams()[i]->Sinks().Count(); ++j ) - { - if ( session->Streams()[i]->Sinks()[j]->Type() == KMceSpeakerSink ) - { - speaker = static_cast( - session->Streams()[i]->Sinks()[j] ); - EUNIT_ASSERT( speaker->VolumeL() == initialVolume - 1 ); - } - } - } - - while ( iClipSession->VolumeL() > 0 ) - { - iClipSession->VolumeDownL(); - } +void UT_CMusEngMceSession::UT_HandleTerminationL() + { + // Try different values + iLiveSession->CMusEngMceSession::HandleTermination( KSipStatusCodeNoCodeSet, + KNullDesC8() ); + EUNIT_ASSERT_EQUALS( TInt( iLcSessionObserver->iCalledFunction ), + TInt( CLcSessionObserverStub::ESessionStateChanged ) ) + iLcSessionObserver->Reset(); - iClipSession->VolumeDownL(); // Does not do anything to volume - - EUNIT_ASSERT_EQUALS( iClipSession->VolumeL(), 0 ); - - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void UT_CMusEngMceSession::UT_CMusEngMceSession_SetVolumeLL() - { - // Try without session, fails - TInt newVolume = KTelephonyVolumeDefaultValue + 1; - - TRAPD( error, iLiveSession->SetVolumeL( newVolume ) ); - MUS_TEST_FORWARD_ALLOC_FAILURE( error ); - EUNIT_ASSERT( error == KErrNotReady ); - - // Test only usage of CMceSpeaker, phone part is tested in base class - - // Check that nothing crashes without any speakers - iReceiveSession->SetVolumeL( newVolume ); - - // Establish session - ESTABLISH_OUT_SESSION( iClipSession ) - - TInt initialVolume = iClipSession->VolumeL(); - - iClipSession->SetVolumeL( newVolume ); - - // Check that all speaker volumes are adjusted and store one speaker pointer - - CMceSpeakerSink* speaker = NULL; - - CMceSession* session = iClipSession->iSession; - - for ( TInt i = 0; i < session->Streams().Count(); ++i ) - { - for ( TInt j = 0; j < session->Streams()[i]->Sinks().Count(); ++j ) - { - if ( session->Streams()[i]->Sinks()[j]->Type() == KMceSpeakerSink ) - { - speaker = static_cast( - session->Streams()[i]->Sinks()[j] ); - EUNIT_ASSERT( speaker->VolumeL() == newVolume ); - } - } - } + iLiveSession->CMusEngMceSession::HandleTermination( KSipStatusCode200OK, + KNullDesC8() ); + EUNIT_ASSERT_EQUALS( TInt( iLcSessionObserver->iCalledFunction ), + TInt( CLcSessionObserverStub::ESessionStateChanged ) ) + iLcSessionObserver->Reset(); - newVolume = speaker->MaxVolumeL() + 1; - iClipSession->SetVolumeL( newVolume ); - EUNIT_ASSERT( iClipSession->VolumeL() == speaker->MaxVolumeL() ); - - newVolume = -1; - iClipSession->SetVolumeL( newVolume ); - EUNIT_ASSERT( iClipSession->VolumeL() == 0 ); - - // Test situation where MCE max volume is bigger than MUS max vol - SetMaxVolForSpeakersL(*session, KMusEngMaxVolume * 10); - newVolume = 5; - iClipSession->SetVolumeL( newVolume ); - EUNIT_ASSERT( iClipSession->VolumeL() == newVolume ); - EUNIT_ASSERT( speaker->VolumeL() == newVolume * 10 ); - newVolume = 1; - iClipSession->SetVolumeL( newVolume ); - EUNIT_ASSERT( iClipSession->VolumeL() == newVolume ); - EUNIT_ASSERT( speaker->VolumeL() == newVolume * 10 ); - newVolume = KMusEngMaxVolume; - iClipSession->SetVolumeL( newVolume ); - EUNIT_ASSERT( iClipSession->VolumeL() == newVolume ); - EUNIT_ASSERT( speaker->VolumeL() == newVolume * 10 ); - - SetMaxVolForSpeakersL(*session, KMusEngMaxVolume * 1000); - newVolume = 7; - iClipSession->SetVolumeL( newVolume ); - EUNIT_ASSERT( iClipSession->VolumeL() == newVolume ); - EUNIT_ASSERT( speaker->VolumeL() == newVolume * 1000 ); - newVolume = 1; - iClipSession->SetVolumeL( newVolume ); - EUNIT_ASSERT( iClipSession->VolumeL() == newVolume ); - EUNIT_ASSERT( speaker->VolumeL() == newVolume * 1000 ); - newVolume = KMusEngMaxVolume; - iClipSession->SetVolumeL( newVolume ); - EUNIT_ASSERT( iClipSession->VolumeL() == newVolume ); - EUNIT_ASSERT( speaker->VolumeL() == newVolume * 1000 ); - - - // Test situation where MCE max volume is smaller than MUS max vol - SetMaxVolForSpeakersL(*session, KMusEngMaxVolume / 2); - newVolume = 3; - iClipSession->SetVolumeL( newVolume ); - EUNIT_ASSERT( iClipSession->VolumeL() == newVolume ); - EUNIT_ASSERT( speaker->VolumeL() == newVolume / 2 ); - newVolume = 1; - iClipSession->SetVolumeL( newVolume ); - EUNIT_ASSERT( iClipSession->VolumeL() == newVolume ); - EUNIT_ASSERT( speaker->VolumeL() == 1 ); - newVolume = KMusEngMaxVolume; - iClipSession->SetVolumeL( newVolume ); - EUNIT_ASSERT( iClipSession->VolumeL() == newVolume ); - EUNIT_ASSERT( speaker->VolumeL() == newVolume / 2 ); + iLiveSession->CMusEngMceSession::HandleTermination( KSipStatusCodeUnknown, + KNullDesC8() ); + EUNIT_ASSERT_EQUALS( TInt( iLcSessionObserver->iCalledFunction ), + TInt( CLcSessionObserverStub::ESessionFailed ) ) + EUNIT_ASSERT_EQUALS( iLcSessionObserver->iError, KErrGeneral ) + iLcSessionObserver->Reset(); } // ----------------------------------------------------------------------------- // // ----------------------------------------------------------------------------- // -void UT_CMusEngMceSession::UT_CMusEngMceSession_EnableDisplayL() +void UT_CMusEngMceSession::UT_AdjustVideoCodecL() { - TRAPD( error, iLiveSession->EnableDisplayL( ETrue ) ); - MUS_TEST_FORWARD_ALLOC_FAILURE( error ); - EUNIT_ASSERT( error == KErrNotReady ); - - ESTABLISH_OUT_SESSION( iLiveSession ); - - CMceDisplaySink* display = - MusEngMceUtils::GetDisplayL( *(iLiveSession->iSession) ); - - // Disable - iLiveSession->EnableDisplayL( EFalse ); - - EUNIT_ASSERT( !display->iIsEnabled ); - - // Try to disable again, request should be ignored + CRepository::SetStubAvcConfigKeysL( KNullDesC8() ); + + CMceVideoCodec* codecH263 = CMceH263Codec::NewLC( KMceSDPNameH263() ); + CMceVideoCodec* codecAvc = CMceAvcCodec::NewLC( KMceSDPNameH264() ); + CMceVideoCodec* codecAvcFromFile = CMceAvcCodec::NewLC( KMceSDPNameH264() ); - iLiveSession->EnableDisplayL( EFalse ); - - EUNIT_ASSERT( !display->iIsEnabled ); + iLiveSession->CMusEngMceSession::AdjustVideoCodecL( *codecH263, + KMceCameraSource ); + EUNIT_ASSERT( !iLiveSession->iStoreEncoderConfigInfo ) - // Enable - - iLiveSession->EnableDisplayL( ETrue ); + iLiveSession->CMusEngMceSession::AdjustVideoCodecL( *codecAvcFromFile, + KMceFileSource); + EUNIT_ASSERT( !iLiveSession->iStoreEncoderConfigInfo ) - EUNIT_ASSERT( display->iIsEnabled ); - - // Try to enable again, request should be ignored + iLiveSession->CMusEngMceSession::AdjustVideoCodecL( *codecAvc, + KMceCameraSource ); + EUNIT_ASSERT( iLiveSession->iStoreEncoderConfigInfo ) - iLiveSession->EnableDisplayL( ETrue ); - - EUNIT_ASSERT( display->iIsEnabled ); + CleanupStack::PopAndDestroy( codecAvcFromFile ); + CleanupStack::PopAndDestroy( codecAvc ); + CleanupStack::PopAndDestroy( codecH263 ); } - // ----------------------------------------------------------------------------- // // ----------------------------------------------------------------------------- // -void UT_CMusEngMceSession::UT_CMusEngMceSession_MuteLL() - { - TRAPD( error, iClipSession->MuteL() ); - MUS_TEST_FORWARD_ALLOC_FAILURE( error ); - EUNIT_ASSERT( error == KErrNotReady ); - - ESTABLISH_OUT_SESSION_AND_START_STREAMING( iClipSession ); - - const RPointerArray streams = - iClipSession->iSession->Streams(); - - iClipSession->MuteL(); - - // Check that all audio speaker sinks are disabled and only those - for ( TInt i = 0; i < streams.Count(); ++i ) - { - for ( TInt j = 0; j < streams[i]->Sinks().Count(); ++j ) - { - CMceMediaSink* sink = streams[i]->Sinks()[j]; - if ( sink->Type() == KMceSpeakerSink && - streams[i]->Type() == KMceAudio ) - { - EUNIT_ASSERT( sink->IsEnabled() == EFalse ) - } - else - { - EUNIT_ASSERT( sink->IsEnabled() == ETrue ) - } - } - } - - EUNIT_ASSERT( iClipSession->iExplicitlyMuted ) - - // Try to mute again, request should be ignored without actions or leaving - - iClipSession->MuteL(); - - } - - -// ----------------------------------------------------------------------------- -// Relies on previous test -// ----------------------------------------------------------------------------- -// -void UT_CMusEngMceSession::UT_CMusEngMceSession_UnmuteLL() - { - TRAPD( error, iClipSession->UnmuteL() ); - MUS_TEST_FORWARD_ALLOC_FAILURE( error ); - EUNIT_ASSERT( error == KErrNotReady ); - - ESTABLISH_OUT_SESSION( iClipSession ); - - const RPointerArray streams = - iClipSession->iSession->Streams(); - - iClipSession->MuteL(); - - iClipSession->UnmuteL(); - - // Check that all audio speaker sinks are enabled - - for ( TInt i = 0; i < streams.Count(); ++i ) - { - for ( TInt j = 0; j < streams[i]->Sinks().Count(); ++j ) - { - if ( streams[i]->Sinks()[j]->Type() == KMceSpeakerSink ) - { - EUNIT_ASSERT( streams[i]->Sinks()[j]->IsEnabled() == ETrue ) - } - } - } - - EUNIT_ASSERT( !iClipSession->iExplicitlyMuted ) - - // Try to unmute again, request should be ignored without actions or leaving - - iClipSession->UnmuteL(); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void UT_CMusEngMceSession::UT_CMusEngMceSession_HandleTerminationL() - { - // Try different values - iLiveSession->CMusEngMceSession::HandleTermination( KSipStatusCodeNoCodeSet, - KNullDesC8() ); - EUNIT_ASSERT( iObserver->iSessionTerminatedCalled ); - iObserver->Reset(); - - iLiveSession->CMusEngMceSession::HandleTermination( KSipStatusCode200OK, - KNullDesC8() ); - EUNIT_ASSERT( iObserver->iSessionTerminatedCalled ); - iObserver->Reset(); - - iLiveSession->CMusEngMceSession::HandleTermination( KSipStatusCodeUnknown, - KNullDesC8() ); - EUNIT_ASSERT( iObserver->iSessionFailedCalled ); - iObserver->Reset(); - - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void UT_CMusEngMceSession::UT_CMusEngMceSession_AdjustVideoCodecLL() - { - // CMusEngMceSession::AdjustVideoCodecL does nothing, so NULL test is enough - CMceVideoCodec* codec = - iLiveSession->iManager->SupportedVideoCodecs()[0]->CloneL(); - CleanupStack::PushL( codec ); - iLiveSession->CMusEngMceSession::AdjustVideoCodecL( *codec ); - CleanupStack::PopAndDestroy( codec ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void UT_CMusEngMceSession::UT_CMusEngMceSession_AdjustAudioCodecLL() +void UT_CMusEngMceSession::UT_AdjustAudioCodecL() { CMceAudioCodec* codec = iLiveSession->iManager->SupportedAudioCodecs()[0]->CloneL(); @@ -769,16 +559,14 @@ EUNIT_ASSERT( codec->iMMFPriorityPreference == KAudioPrefSwisPlayback ) CleanupStack::PopAndDestroy( codec ); - } - + } // ----------------------------------------------------------------------------- // // ----------------------------------------------------------------------------- // -void UT_CMusEngMceSession::UT_CMusEngMceSession_RectChangedLL() +void UT_CMusEngMceSession::UT_RectChangedL() { - // Does nothing before session establishment iLiveSession->RectChangedL(); @@ -791,9 +579,9 @@ // Display size has been updated CMceDisplaySink* display = - MusEngMceUtils::GetDisplayL( *( iLiveSession->iSession ) ); + MusEngMceUtils::GetDisplayL( *( iLiveSession->iSession ) ); - EUNIT_ASSERT( display->DisplayRectL() == iLiveSession->Rect() ); + EUNIT_ASSERT( display->DisplayRectL() == iLiveSession->Rect() ) // Terminate session and try again, rect must not be changed @@ -804,8 +592,307 @@ iLiveSession->SetRectL( newRect ); EUNIT_ASSERT( display->DisplayRectL() != newRect ) + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_CMusEngMceSession::UT_SetSessionSdpLinesL() + { + // set operator variant off + iReceiveSession->iOperatorVariant = EFalse; + CRepository::SetStubGlobal( MusSettingsKeys::KVideoBandwidth, + 128 ); + + // 1. There is b=AS line at session level + // => Xapplication, b=AS and b=TIAS set to session level + CMceInSession* inSession = CMceInSession::NewL( *iReceiveSession->iManager, + KTestOriginator ); + CleanupStack::PushL( inSession ); + EUNIT_ASSERT( !inSession->iSessionSDPLines ); + inSession->iSessionSDPLines = new ( ELeave ) CDesC8ArrayFlat( 1 ); + inSession->iSessionSDPLines->AppendL( KMusEngSessionSdpLineBandwidthField() ); + + iReceiveSession->SetSessionSdpLinesL( *inSession, ETrue ); + + MDesC8Array* sdpLines = inSession->iSessionSDPLines; + EUNIT_ASSERT( sdpLines ); + EUNIT_ASSERT( sdpLines->MdcaCount() == 3 ); + EUNIT_ASSERT( sdpLines->MdcaPoint( 0 ) == KMusEngSessionSdpLineXApplication() ); + EUNIT_ASSERT( sdpLines->MdcaPoint( 1 ).Find( + KMusEngSessionSdpLineBandwidthLine() ) == 0 ); + EUNIT_ASSERT( sdpLines->MdcaPoint( 2 ).Find( + KMusEngSessionSdpLineTiasLine() ) == 0 ); + // 2. There are b=TIAS sdp line at session + // => Xapplication, b=AS and b=TIAS set to session level + delete inSession->iSessionSDPLines; + inSession->iSessionSDPLines = NULL; + inSession->iSessionSDPLines = new ( ELeave ) CDesC8ArrayFlat( 1 ); + inSession->iSessionSDPLines->AppendL( KMusEngSessionSdpLineTiasLine() ); + + iReceiveSession->SetSessionSdpLinesL( *inSession, ETrue ); + + sdpLines = inSession->iSessionSDPLines; + EUNIT_ASSERT( sdpLines ); + EUNIT_ASSERT( sdpLines->MdcaCount() == 3 ); + EUNIT_ASSERT( sdpLines->MdcaPoint( 0 ) == KMusEngSessionSdpLineXApplication() ); + EUNIT_ASSERT( sdpLines->MdcaPoint( 1 ).Find( + KMusEngSessionSdpLineBandwidthLine() ) == 0 ); + EUNIT_ASSERT( sdpLines->MdcaPoint( 2 ).Find( + KMusEngSessionSdpLineTiasLine() ) == 0 ); + + // 3. Simulating outcoming session, i.e. 2d param aForceBandwidthLine is EFalse + // => only Xapplication SDP line is set + delete inSession->iSessionSDPLines; + inSession->iSessionSDPLines = NULL; + + iReceiveSession->SetSessionSdpLinesL( *inSession, EFalse ); + + sdpLines = inSession->iSessionSDPLines; + EUNIT_ASSERT( sdpLines ); + EUNIT_ASSERT( sdpLines->MdcaCount() == 1 ); + EUNIT_ASSERT( sdpLines->MdcaPoint( 0 ) == KMusEngSessionSdpLineXApplication() ); + + // 4. No KVideoBandwidth entry in CenRep => TIAS usage should be disabled + // There is AS and TIAS at session level => AS is taken at session level + CRepository::iForceFailWithCode = KErrNotFound; + delete inSession->iSessionSDPLines; + inSession->iSessionSDPLines = NULL; + inSession->iSessionSDPLines = new ( ELeave ) CDesC8ArrayFlat( 1 ); + inSession->iSessionSDPLines->AppendL( KMusEngSessionSdpLineTiasLine() ); + inSession->iSessionSDPLines->AppendL( KMusEngSessionSdpLineBandwidthField() ); + + iReceiveSession->SetSessionSdpLinesL( *inSession, ETrue ); + + sdpLines = inSession->iSessionSDPLines; + EUNIT_ASSERT( sdpLines ); + EUNIT_ASSERT( sdpLines->MdcaCount() == 2 ); + EUNIT_ASSERT( sdpLines->MdcaPoint( 0 ) == KMusEngSessionSdpLineXApplication() ); + EUNIT_ASSERT( sdpLines->MdcaPoint( 1 ) == KMusEngSessionSdpLineBandwidthField() ); + + CleanupStack::PopAndDestroy( inSession ); + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_CMusEngMceSession::UT_SetSessionSdpLines_OperatorL() + { + // set operator variant + iReceiveSession->iOperatorVariant = ETrue; + + // 1. There is b=TIAS sdp line in session => only application and + // type lines are set, no bandwidth related attributes + CMceInSession* inSession = CMceInSession::NewL( *iReceiveSession->iManager, + KTestOriginator ); + CleanupStack::PushL( inSession ); + + EUNIT_ASSERT( !inSession->iSessionSDPLines ); + inSession->iSessionSDPLines = new ( ELeave ) CDesC8ArrayFlat( 1 ); + inSession->iSessionSDPLines->AppendL( KMusEngSessionSdpLineTiasLine() ); + + iReceiveSession->SetSessionSdpLinesL( *inSession, ETrue ); + + MDesC8Array* sdpLines = inSession->iSessionSDPLines; + EUNIT_ASSERT( sdpLines ); + EUNIT_ASSERT( sdpLines->MdcaCount() == 2 ); + EUNIT_ASSERT( sdpLines->MdcaPoint( 0 ) == KMusEngSessionSdpLineApplication() ); + EUNIT_ASSERT( sdpLines->MdcaPoint( 1 ) == KMusEngSessionSdpLineType() ); + + // 2. There are b=AS and b=TIAS sdp lines in session => application and + // type SDP lines as well as b=AS bandwidth attributes are set + delete inSession->iSessionSDPLines; + inSession->iSessionSDPLines = NULL; + inSession->iSessionSDPLines = new ( ELeave ) CDesC8ArrayFlat( 2 ); + inSession->iSessionSDPLines->AppendL( KMusEngSessionSdpLineBandwidthField() ); + inSession->iSessionSDPLines->AppendL( KMusEngSessionSdpLineTiasLine() ); + + iReceiveSession->SetSessionSdpLinesL( *inSession, ETrue ); + + sdpLines = inSession->iSessionSDPLines; + EUNIT_ASSERT( sdpLines ); + EUNIT_ASSERT( sdpLines->MdcaCount() == 3 ); + EUNIT_ASSERT( sdpLines->MdcaPoint( 0 ) == KMusEngSessionSdpLineApplication() ); + EUNIT_ASSERT( sdpLines->MdcaPoint( 1 ) == KMusEngSessionSdpLineType() ); + EUNIT_ASSERT( sdpLines->MdcaPoint( 2 ) == KMusEngSessionSdpLineBandwidthField() ); + + + // 3. Simulating outcoming session, i.e. 2d param aForceBandwidthLine is EFalse + // => only application and type SDP lines are set + delete inSession->iSessionSDPLines; + inSession->iSessionSDPLines = NULL; + + iReceiveSession->SetSessionSdpLinesL( *inSession, EFalse ); + + sdpLines = inSession->iSessionSDPLines; + EUNIT_ASSERT( sdpLines ); + EUNIT_ASSERT( sdpLines->MdcaCount() == 2 ); + EUNIT_ASSERT( sdpLines->MdcaPoint( 0 ) == KMusEngSessionSdpLineApplication() ); + EUNIT_ASSERT( sdpLines->MdcaPoint( 1 ) == KMusEngSessionSdpLineType() ); + + CleanupStack::PopAndDestroy( inSession ); + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_CMusEngMceSession::UT_SetMediaSdpLinesL() + { + // set operator variant off + iReceiveSession->iOperatorVariant = EFalse; + CRepository::SetStubGlobal( MusSettingsKeys::KVideoBandwidth, + 128 ); + + // 1. There is no b=AS, b=TIAS sdp lines at session level + // => b=AS and b=TIAS are taken at media level + CMceInSession* inSession = CMceInSession::NewL( *iReceiveSession->iManager, + KTestOriginator ); + CleanupStack::PushL( inSession ); + + CMceVideoStream* videoStream = CMceVideoStream::NewLC(); + videoStream->SetSourceL( CMceRtpSource::NewLC() ); + CleanupStack::Pop(); //rtpSource + videoStream->AddSinkL( CMceDisplaySink::NewLC( *iReceiveSession->iManager ) ); + CleanupStack::Pop(); //displaySink + + inSession->AddStreamL( videoStream ); + CleanupStack::Pop( videoStream ); + + iReceiveSession->SetMediaSdpLinesL( *videoStream, ETrue ); + + MDesC8Array* sdpLines = inSession->Streams()[ 0 ]->iMediaSDPLines; + EUNIT_ASSERT( sdpLines ); + EUNIT_ASSERT( sdpLines->MdcaCount() == 2 ); + EUNIT_ASSERT( sdpLines->MdcaPoint( 0 ).Find( + KMusEngSessionSdpLineBandwidthLine() ) == 0 ); + EUNIT_ASSERT( sdpLines->MdcaPoint( 1 ).Find( + KMusEngSessionSdpLineTiasLine() ) == 0 ); + + + // 2. There is b=AS sdp line at session and media level + // => b=AS and b=TIAS are taken at media level + delete inSession->iSessionSDPLines; + inSession->iSessionSDPLines = NULL; + inSession->iSessionSDPLines = new ( ELeave ) CDesC8ArrayFlat( 1 ); + inSession->iSessionSDPLines->AppendL( KMusEngSessionSdpLineBandwidthField() ); + + iReceiveSession->SetMediaSdpLinesL( *videoStream, ETrue ); + + sdpLines = inSession->Streams()[ 0 ]->iMediaSDPLines; + EUNIT_ASSERT( sdpLines ); + EUNIT_ASSERT( sdpLines->MdcaCount() == 2 ); + EUNIT_ASSERT( sdpLines->MdcaPoint( 0 ).Find( + KMusEngSessionSdpLineBandwidthLine() ) == 0 ); + EUNIT_ASSERT( sdpLines->MdcaPoint( 1 ).Find( + KMusEngSessionSdpLineTiasLine() ) == 0 ); + + // 3. Simulating outcoming session, i.e. 2d param aForceBandwidthLine is EFalse + // => no bandwidth attributes at media level + delete inSession->iSessionSDPLines; + inSession->iSessionSDPLines = NULL; + + delete inSession->Streams()[ 0 ]->iMediaSDPLines; + inSession->Streams()[ 0 ]->iMediaSDPLines = NULL; + + iReceiveSession->SetMediaSdpLinesL( *videoStream, EFalse ); + + sdpLines = inSession->Streams()[ 0 ]->iMediaSDPLines; + EUNIT_ASSERT( sdpLines ); + EUNIT_ASSERT( sdpLines->MdcaCount() == 0 ); + + // 4. No KVideoBandwidth entry in CenRep => TIAS usage should be disabled + // There is no bandwidth attributes in session => AS is taken at meida level + CRepository::iForceFailWithCode = KErrNotFound; + delete inSession->iSessionSDPLines; + inSession->iSessionSDPLines = NULL; + + iReceiveSession->SetMediaSdpLinesL( *videoStream, ETrue ); + + sdpLines = inSession->Streams()[ 0 ]->iMediaSDPLines; + EUNIT_ASSERT( sdpLines ); + EUNIT_ASSERT( sdpLines->MdcaCount() == 1 ); + EUNIT_ASSERT( sdpLines->MdcaPoint( 0 ) == KMusEngSessionSdpLineBandwidthField() ); + + CleanupStack::PopAndDestroy( inSession ); + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_CMusEngMceSession::UT_SetMediaSdpLines_OperatorL() + { + // set operator variant + iReceiveSession->iOperatorVariant = ETrue; + + // 1. There is no b=AS sdp line at session level + // => b=AS is taken at media level + CMceInSession* inSession = CMceInSession::NewL( *iReceiveSession->iManager, + KTestOriginator ); + CleanupStack::PushL( inSession ); + + CMceVideoStream* videoStream = CMceVideoStream::NewLC(); + videoStream->SetSourceL( CMceRtpSource::NewLC() ); + CleanupStack::Pop(); //rtpSource + videoStream->AddSinkL( CMceDisplaySink::NewLC( *iReceiveSession->iManager ) ); + CleanupStack::Pop(); //displaySink + + inSession->AddStreamL( videoStream ); + CleanupStack::Pop( videoStream ); + + EUNIT_ASSERT( !inSession->iSessionSDPLines ); + inSession->iSessionSDPLines = new ( ELeave ) CDesC8ArrayFlat( 1 ); + inSession->iSessionSDPLines->AppendL( KMusEngSessionSdpLineTiasLine() ); + + iReceiveSession->SetMediaSdpLinesL( *videoStream, ETrue ); + + MDesC8Array* sdpLines = inSession->Streams()[ 0 ]->iMediaSDPLines; + EUNIT_ASSERT( sdpLines ); + EUNIT_ASSERT( sdpLines->MdcaCount() == 1 ); + EUNIT_ASSERT( sdpLines->MdcaPoint( 0 ) == KMusEngSessionSdpLineBandwidthField() ); + + + // 2. There is b=AS sdp line at session and media level + // => b=AS is not taken at media level + delete inSession->iSessionSDPLines; + inSession->iSessionSDPLines = NULL; + inSession->iSessionSDPLines = new ( ELeave ) CDesC8ArrayFlat( 1 ); + inSession->iSessionSDPLines->AppendL( KMusEngSessionSdpLineBandwidthField() ); + + delete inSession->Streams()[ 0 ]->iMediaSDPLines; + inSession->Streams()[ 0 ]->iMediaSDPLines = NULL; + inSession->Streams()[ 0 ]->iMediaSDPLines = + new ( ELeave ) CDesC8ArrayFlat( 1 ); + inSession->Streams()[ 0 ]->iMediaSDPLines->AppendL( + KMusEngSessionSdpLineBandwidthField() ); + + iReceiveSession->SetMediaSdpLinesL( *videoStream, ETrue ); + + EUNIT_ASSERT( inSession->Streams()[ 0 ]->iMediaSDPLines ); + EUNIT_ASSERT( inSession->Streams()[ 0 ]->iMediaSDPLines->MdcaCount() == 0 ); + + + // 3. Simulating outcoming session, i.e. 2d param aForceBandwidthLine is EFalse + // => b=AS is taken at media level + delete inSession->iSessionSDPLines; + inSession->iSessionSDPLines = NULL; + + delete inSession->Streams()[ 0 ]->iMediaSDPLines; + inSession->Streams()[ 0 ]->iMediaSDPLines = NULL; + + iReceiveSession->SetMediaSdpLinesL( *videoStream, EFalse ); + + sdpLines = inSession->Streams()[ 0 ]->iMediaSDPLines; + EUNIT_ASSERT( sdpLines ); + EUNIT_ASSERT( sdpLines->MdcaCount() == 1 ); + EUNIT_ASSERT( sdpLines->MdcaPoint( 0 ) == KMusEngSessionSdpLineBandwidthField() ); + + CleanupStack::PopAndDestroy( inSession ); } @@ -813,120 +900,7 @@ // // ----------------------------------------------------------------------------- // -void UT_CMusEngMceSession::UT_CMusEngMceSession_SetSessionSdpLinesLL() - { - // set operator variant off - MultimediaSharingSettings::SetOperatorVariantSettingL( - MusSettingsKeys::EStandard ); - - // There is no sdp lines in session, right one is added - - CMceInSession* inSession = CMceInSession::NewL( *iReceiveSession->iManager, - KTestOriginator ); - CleanupStack::PushL( inSession ); - - iReceiveSession->SetSessionSdpLinesL( *inSession ); - - MDesC8Array* sdpLines = inSession->SessionSDPLinesL(); - CleanupDeletePushL( sdpLines ); - - EUNIT_ASSERT( sdpLines ); - EUNIT_ASSERT( sdpLines->MdcaCount() == 1 ); - EUNIT_ASSERT( sdpLines->MdcaPoint( 0 ) == KMusEngSessionSdpLineXApplication() ); - - CleanupStack::PopAndDestroy(); // sdplines - - // There is one line ready, replace it with right one - CDesC8Array* newSdpLines = new ( ELeave ) CDesC8ArrayFlat( 3 ); - CleanupStack::PushL( newSdpLines ); - newSdpLines->AppendL( KTestRecipientRandomText8() ); - inSession->SetSessionSDPLinesL( newSdpLines ); - CleanupStack::Pop( newSdpLines ); - - iReceiveSession->SetSessionSdpLinesL( *inSession ); - - sdpLines = inSession->SessionSDPLinesL(); - CleanupDeletePushL( sdpLines ); - - EUNIT_ASSERT( sdpLines ); - EUNIT_ASSERT( sdpLines->MdcaCount() == 1 ); - EUNIT_ASSERT( sdpLines->MdcaPoint( 0 ) == KMusEngSessionSdpLineXApplication() ); - - CleanupStack::PopAndDestroy(); // sdplines - - - CleanupStack::PopAndDestroy( inSession ); - - // for operator variant testing - // set operator variant - iReceiveSession->iOperatorVariant = ETrue; - - // There is no sdp lines in session, right ones are added to session and media level - inSession = CMceInSession::NewL( *iReceiveSession->iManager, - KTestOriginator ); - CleanupStack::PushL( inSession ); - - iReceiveSession->SetSessionSdpLinesL( *inSession ); - - sdpLines = inSession->SessionSDPLinesL(); - CleanupDeletePushL( sdpLines ); - - EUNIT_ASSERT( sdpLines ); - EUNIT_ASSERT( sdpLines->MdcaCount() == 2 ); - EUNIT_ASSERT( sdpLines->MdcaPoint( 0 ) == KMusEngSessionSdpLineApplication() ); - EUNIT_ASSERT( sdpLines->MdcaPoint( 1 ) == KMusEngSessionSdpLineType() ); - - CleanupStack::PopAndDestroy(); // sdplines - - MDesC8Array* mediaSdpLines = - iReceiveSession->iSession->Streams()[ 0 ]->MediaAttributeLinesL(); - CleanupDeletePushL( mediaSdpLines ); - TBool bandwidthFoundFromMediaLevel = EFalse; - for ( TInt i = 0; mediaSdpLines && i < mediaSdpLines->MdcaCount(); i++ ) - { - if ( mediaSdpLines->MdcaPoint( i ).Compare( - KMusEngSessionSdpLineBandwidthField() ) == 0 ) - { - bandwidthFoundFromMediaLevel = ETrue; - } - } - EUNIT_ASSERT( bandwidthFoundFromMediaLevel ); - CleanupStack::PopAndDestroy( mediaSdpLines ); - - // There is one line ready, replace it with right ones - newSdpLines = new ( ELeave ) CDesC8ArrayFlat( 3 ); - CleanupStack::PushL( newSdpLines ); - newSdpLines->AppendL( KTestRecipientRandomText8() ); - inSession->SetSessionSDPLinesL( newSdpLines ); - CleanupStack::Pop( newSdpLines ); - - iReceiveSession->SetSessionSdpLinesL( *inSession ); - - sdpLines = inSession->SessionSDPLinesL(); - CleanupDeletePushL( sdpLines ); - - EUNIT_ASSERT( sdpLines ); - EUNIT_ASSERT( sdpLines->MdcaCount() == 2 ); - EUNIT_ASSERT( sdpLines->MdcaPoint( 0 ) == KMusEngSessionSdpLineApplication() ); - EUNIT_ASSERT( sdpLines->MdcaPoint( 1 ) == KMusEngSessionSdpLineType() ); - - CleanupStack::PopAndDestroy(); // sdplines - - - CleanupStack::PopAndDestroy( inSession ); - - - // set operator variant off - MultimediaSharingSettings::SetOperatorVariantSettingL( - MusSettingsKeys::EStandard ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void UT_CMusEngMceSession::UT_CMusEngMceSession_AdjustStreamsAndCodecsLL() +void UT_CMusEngMceSession::UT_AdjustStreamsAndCodecsL() { // Check that function cannot be called before creating the session TRAPD( error, iClipSession->AdjustStreamsAndCodecsL() ); @@ -1031,46 +1005,6 @@ EUNIT_ASSERT( videoStream->Codecs()[ i ]->MaxBitRate() == 128000 ); } - - // Test for Configuration based codec removal. Magic uid not set. - CMceVideoCodec* codecAvc = CMceAvcCodec::NewLC( KMceSDPNameH264() ); - videoStream->AddCodecL( codecAvc ); - CleanupStack::Pop( codecAvc ); - iClipSession->AdjustStreamsAndCodecsL(); - TBool avcCodecFound(EFalse); - for ( TInt i = 0; i < videoStream->Codecs().Count(); i++ ) - { - if( !videoStream->Codecs()[ i ]->SdpName().CompareF( KMceSDPNameH264 ) ) - { - avcCodecFound = ETrue; - } - } - // AVC should present - EUNIT_ASSERT(avcCodecFound); - - // Test for Configuration based codec removal. Magic uid set. - // Store the real value and revert back later , so that other tests will not be affected. - TUid uid = MultimediaSharingSettings::EncodingDeviceL(); - TInt32 KMusDisableAVC = 0x0fffffff; - MultimediaSharingSettings::SetPropertyValueL( MusSettingsKeys::KEncodingDevice,KMusDisableAVC); - codecAvc = CMceAvcCodec::NewLC( KMceSDPNameH264() ); - videoStream->AddCodecL( codecAvc ); - CleanupStack::Pop( codecAvc ); - codecH2632000 = CMceH263Codec::NewLC( KMceSDPNameH2632000() ); - videoStream->AddCodecL( codecH2632000 ); - CleanupStack::Pop( codecH2632000 ); - iClipSession->AdjustStreamsAndCodecsL(); - for ( TInt i = 0; i < videoStream->Codecs().Count(); i++ ) - { - // H264 ( AVC ) codec should be removed - EUNIT_ASSERT( - videoStream->Codecs()[ i ]->SdpName().CompareF( KMceSDPNameH264 ) ); - } - - - MultimediaSharingSettings::SetPropertyValueL( MusSettingsKeys::KEncodingDevice,uid.iUid); - - } @@ -1078,7 +1012,7 @@ // // ----------------------------------------------------------------------------- // -void UT_CMusEngMceSession::UT_CMusEngMceSession_IncomingSessionL() +void UT_CMusEngMceSession::UT_IncomingSessionL() { // New session should get rejected and deleted in any case, first failure CMceInSession* inSession = CMceInSession::NewL( @@ -1100,7 +1034,7 @@ // // ----------------------------------------------------------------------------- // -void UT_CMusEngMceSession::UT_CMusEngMceSession_IncomingUpdateL() +void UT_CMusEngMceSession::UT_IncomingUpdateL() { CMceInSession* inSession = CMceInSession::NewL( *iLiveSession->iManager, KNullDesC8 ); @@ -1138,7 +1072,7 @@ // // ----------------------------------------------------------------------------- // -void UT_CMusEngMceSession::UT_CMusEngMceSession_StreamStateChangedL() +void UT_CMusEngMceSession::UT_StreamStateChangedL() { // Try without a session, nothing happens CMceAudioStream* audioStream = CMceAudioStream::NewLC(); @@ -1146,7 +1080,7 @@ CleanupStack::PopAndDestroy( audioStream ); // Simulate sending invite - iLiveSession->InviteL( KTestRecipientSipUri() ); + iLiveSession->EstablishLcSessionL(); // No observer set, so expect nothing to be done, cannot be asserted CMceMediaStream* changedStream = iLiveSession->iSession->Streams()[0]; @@ -1156,55 +1090,56 @@ // EUninitialized, stream is created, unexpected change, nothing happens changedStream->iState = CMceMediaStream::EUninitialized; iLiveSession->CMusEngMceSession::StreamStateChanged( *changedStream ); - EUNIT_ASSERT( iObserver->IsReseted() ); + EUNIT_ASSERT( iLcSessionObserver->IsReseted() ); // EInitialized, stream is initialized changedStream->iState = CMceMediaStream::EInitialized; iLiveSession->CMusEngMceSession::StreamStateChanged( *changedStream ); - EUNIT_ASSERT( iObserver->IsReseted() ); + EUNIT_ASSERT( iLcSessionObserver->IsReseted() ); // EBuffering, stream is buffering changedStream->iState = CMceMediaStream::EBuffering; iLiveSession->CMusEngMceSession::StreamStateChanged( *changedStream ); - EUNIT_ASSERT( iObserver->IsReseted() ); + EUNIT_ASSERT( iLcSessionObserver->IsReseted() ); // EIdle, stream is not receiving RTP changedStream->iState = CMceMediaStream::EIdle; iLiveSession->CMusEngMceSession::StreamStateChanged( *changedStream ); - EUNIT_ASSERT( iObserver->iStreamIdleCalled ); + EUNIT_ASSERT( iLcSessionObserver->IsReseted() ); // EStreaming, stream is streaming changedStream->iState = CMceMediaStream::EStreaming; iLiveSession->CMusEngMceSession::StreamStateChanged( *changedStream ); - EUNIT_ASSERT( iObserver->iStreamStreamingCalled ); - iObserver->Reset(); + EUNIT_ASSERT_EQUALS( TInt( iLcSessionObserver->iCalledFunction ), + TInt( CLcSessionObserverStub::EPlayerStateChanged ) ) + iLcSessionObserver->Reset(); // EStreaming, stream is streaming, other than video out- or instream changedStream->iState = CMceMediaStream::EStreaming; iLiveSession->CMusEngMceSession::StreamStateChanged( *iLiveSession->iSession->Streams()[1] ); - EUNIT_ASSERT( iObserver->IsReseted() ); - iObserver->Reset(); + EUNIT_ASSERT( iLcSessionObserver->IsReseted() ); + iLcSessionObserver->Reset(); // EDisabled, stream is explicitly disabled changedStream->iState = CMceMediaStream::EDisabled; iLiveSession->CMusEngMceSession::StreamStateChanged( *changedStream ); - EUNIT_ASSERT( iObserver->IsReseted() ); + EUNIT_ASSERT( iLcSessionObserver->IsReseted() ); // ENoResources, stream has no needed resources to stream changedStream->iState = CMceMediaStream::ENoResources; iLiveSession->CMusEngMceSession::StreamStateChanged( *changedStream ); - EUNIT_ASSERT( iObserver->IsReseted() ); + EUNIT_ASSERT( iLcSessionObserver->IsReseted() ); // ETranscodingRequired, stream requires non-realtime transcoding changedStream->iState = CMceMediaStream::ETranscodingRequired; iLiveSession->CMusEngMceSession::StreamStateChanged( *changedStream ); - EUNIT_ASSERT( iObserver->IsReseted() ); + EUNIT_ASSERT( iLcSessionObserver->IsReseted() ); // ETranscoding, stream is transcoding in non-realtime changedStream->iState = CMceMediaStream::ETranscoding; iLiveSession->CMusEngMceSession::StreamStateChanged( *changedStream ); - EUNIT_ASSERT( iObserver->IsReseted() ); + EUNIT_ASSERT( iLcSessionObserver->IsReseted() ); } @@ -1214,7 +1149,7 @@ // when function is changed // ----------------------------------------------------------------------------- // -void UT_CMusEngMceSession::UT_CMusEngMceSession_StreamStateChangedWithSourceL() +void UT_CMusEngMceSession::UT_StreamStateChangedWithSourceL() { // Try without a session, nothing happens iLiveSession->CMusEngMceSession::StreamStateChanged( @@ -1225,7 +1160,7 @@ CleanupStack::PopAndDestroy(); // audiostream // Simulate sending invite - iLiveSession->InviteL( KTestRecipientSipUri() ); + iLiveSession->EstablishLcSessionL(); // Try all the stream states CMceMediaStream* changedStream = iLiveSession->iSession->Streams()[0]; @@ -1233,48 +1168,49 @@ // EUninitialized, stream is created, unexpected change, nothing happens changedStream->iState = CMceMediaStream::EUninitialized; iLiveSession->CMusEngMceSession::StreamStateChanged( *changedStream ); - EUNIT_ASSERT( iObserver->IsReseted() ); + EUNIT_ASSERT( iLcSessionObserver->IsReseted() ); // EInitialized, stream is initialized changedStream->iState = CMceMediaStream::EInitialized; iLiveSession->CMusEngMceSession::StreamStateChanged( *changedStream ); - EUNIT_ASSERT( iObserver->IsReseted() ); + EUNIT_ASSERT( iLcSessionObserver->IsReseted() ); // EBuffering, stream is buffering changedStream->iState = CMceMediaStream::EBuffering; iLiveSession->CMusEngMceSession::StreamStateChanged( *changedStream ); - EUNIT_ASSERT( iObserver->IsReseted() ); + EUNIT_ASSERT( iLcSessionObserver->IsReseted() ); // EIdle, stream is not receiving RTP changedStream->iState = CMceMediaStream::EIdle; iLiveSession->CMusEngMceSession::StreamStateChanged( *changedStream ); - EUNIT_ASSERT( iObserver->iStreamIdleCalled ); + EUNIT_ASSERT( iLcSessionObserver->IsReseted() ); // EStreaming, stream is streaming changedStream->iState = CMceMediaStream::EStreaming; iLiveSession->CMusEngMceSession::StreamStateChanged( *changedStream ); - EUNIT_ASSERT( iObserver->iStreamStreamingCalled ); - iObserver->Reset(); + EUNIT_ASSERT_EQUALS( TInt( iLcSessionObserver->iCalledFunction ), + TInt( CLcSessionObserverStub::EPlayerStateChanged ) ) + iLcSessionObserver->Reset(); // EDisabled, stream is explicitly disabled changedStream->iState = CMceMediaStream::EDisabled; iLiveSession->CMusEngMceSession::StreamStateChanged( *changedStream ); - EUNIT_ASSERT( iObserver->IsReseted() ); + EUNIT_ASSERT( iLcSessionObserver->IsReseted() ); // ENoResources, stream has no needed resources to stream changedStream->iState = CMceMediaStream::ENoResources; iLiveSession->CMusEngMceSession::StreamStateChanged( *changedStream ); - EUNIT_ASSERT( iObserver->IsReseted() ); + EUNIT_ASSERT( iLcSessionObserver->IsReseted() ); // ETranscodingRequired, stream requires non-realtime transcoding changedStream->iState = CMceMediaStream::ETranscodingRequired; iLiveSession->CMusEngMceSession::StreamStateChanged( *changedStream ); - EUNIT_ASSERT( iObserver->IsReseted() ); + EUNIT_ASSERT( iLcSessionObserver->IsReseted() ); // ETranscoding, stream is transcoding in non-realtime changedStream->iState = CMceMediaStream::ETranscoding; iLiveSession->CMusEngMceSession::StreamStateChanged( *changedStream ); - EUNIT_ASSERT( iObserver->IsReseted() ); + EUNIT_ASSERT( iLcSessionObserver->IsReseted() ); } @@ -1284,7 +1220,7 @@ // when function is changed // ----------------------------------------------------------------------------- // -void UT_CMusEngMceSession::UT_CMusEngMceSession_StreamStateChangedWithSinkL() +void UT_CMusEngMceSession::UT_StreamStateChangedWithSinkL() { // Try without a session, nothing happens CMceAudioStream* audioStream = CMceAudioStream::NewLC(); @@ -1292,7 +1228,7 @@ CleanupStack::PopAndDestroy( audioStream ); // Simulate sending invite - iLiveSession->InviteL( KTestRecipientSipUri() ); + iLiveSession->EstablishLcSessionL(); // Try all the stream states CMceMediaStream* changedStream = iLiveSession->iSession->Streams()[0]; @@ -1300,48 +1236,49 @@ // EUninitialized, stream is created, unexpected change, nothing happens changedStream->iState = CMceMediaStream::EUninitialized; iLiveSession->CMusEngMceSession::StreamStateChanged( *changedStream ); - EUNIT_ASSERT( iObserver->IsReseted() ); + EUNIT_ASSERT( iLcSessionObserver->IsReseted() ); // EInitialized, stream is initialized changedStream->iState = CMceMediaStream::EInitialized; iLiveSession->CMusEngMceSession::StreamStateChanged( *changedStream ); - EUNIT_ASSERT( iObserver->IsReseted() ); + EUNIT_ASSERT( iLcSessionObserver->IsReseted() ); // EBuffering, stream is buffering changedStream->iState = CMceMediaStream::EBuffering; iLiveSession->CMusEngMceSession::StreamStateChanged( *changedStream ); - EUNIT_ASSERT( iObserver->IsReseted() ); + EUNIT_ASSERT( iLcSessionObserver->IsReseted() ); // EIdle, stream is not receiving RTP changedStream->iState = CMceMediaStream::EIdle; iLiveSession->CMusEngMceSession::StreamStateChanged( *changedStream ); - EUNIT_ASSERT( iObserver->iStreamIdleCalled ); + EUNIT_ASSERT( iLcSessionObserver->IsReseted() ); // EStreaming, stream is streaming changedStream->iState = CMceMediaStream::EStreaming; iLiveSession->CMusEngMceSession::StreamStateChanged( *changedStream ); - EUNIT_ASSERT( iObserver->iStreamStreamingCalled ); - iObserver->Reset(); + EUNIT_ASSERT_EQUALS( TInt( iLcSessionObserver->iCalledFunction ), + TInt( CLcSessionObserverStub::EPlayerStateChanged ) ) + iLcSessionObserver->Reset(); // EDisabled, stream is explicitly disabled changedStream->iState = CMceMediaStream::EDisabled; iLiveSession->CMusEngMceSession::StreamStateChanged( *changedStream ); - EUNIT_ASSERT( iObserver->IsReseted() ); + EUNIT_ASSERT( iLcSessionObserver->IsReseted() ); // ENoResources, stream has no needed resources to stream changedStream->iState = CMceMediaStream::ENoResources; iLiveSession->CMusEngMceSession::StreamStateChanged( *changedStream ); - EUNIT_ASSERT( iObserver->IsReseted() ); + EUNIT_ASSERT( iLcSessionObserver->IsReseted() ); // ETranscodingRequired, stream requires non-realtime transcoding changedStream->iState = CMceMediaStream::ETranscodingRequired; iLiveSession->CMusEngMceSession::StreamStateChanged( *changedStream ); - EUNIT_ASSERT( iObserver->IsReseted() ); + EUNIT_ASSERT( iLcSessionObserver->IsReseted() ); // ETranscoding, stream is transcoding in non-realtime changedStream->iState = CMceMediaStream::ETranscoding; iLiveSession->CMusEngMceSession::StreamStateChanged( *changedStream ); - EUNIT_ASSERT( iObserver->IsReseted() ); + EUNIT_ASSERT( iLcSessionObserver->IsReseted() ); } @@ -1350,22 +1287,24 @@ // // ----------------------------------------------------------------------------- // -void UT_CMusEngMceSession::UT_CMusEngMceSession_SessionStateChangedL() +void UT_CMusEngMceSession::UT_SessionStateChangedL() { // Simulate sending invite - iLiveSession->InviteL( KTestRecipientSipUri() ); + iLiveSession->EstablishLcSessionL(); // No container, so expect to be handled as internal error iLiveSession->SessionStateChanged( *iLiveSession->iSession, NULL ); - EUNIT_ASSERT( iObserver->iSessionFailedCalled ); - iObserver->Reset(); + EUNIT_ASSERT_EQUALS( TInt( iLcSessionObserver->iCalledFunction ), + TInt( CLcSessionObserverStub::ESessionFailed ) ) + EUNIT_ASSERT_EQUALS( iLcSessionObserver->iError, KErrGeneral ) + iLcSessionObserver->Reset(); // Try to tell session about some other session's state transition TMceTransactionDataContainer container; iLiveSession->SessionStateChanged( *iSomeOtherSession->iSession, &container ); - EUNIT_ASSERT( iObserver->IsReseted() ); + EUNIT_ASSERT( iLcSessionObserver->IsReseted() ); // Try all the normal cases: @@ -1377,8 +1316,10 @@ container.SetReasonPhrase( anyReasonPhrase ); iLiveSession->SessionStateChanged( *iLiveSession->iSession, &container ); - EUNIT_ASSERT( iObserver->iSessionFailedCalled ); - iObserver->Reset(); + EUNIT_ASSERT_EQUALS( TInt( iLcSessionObserver->iCalledFunction ), + TInt( CLcSessionObserverStub::ESessionFailed ) ) + EUNIT_ASSERT_EQUALS( iLcSessionObserver->iError, KErrGeneral ) + iLcSessionObserver->Reset(); container.Clear(); // EOffering @@ -1386,44 +1327,47 @@ container.SetStatusCode( KSipStatusCodeNoCodeSet ); iLiveSession->SessionStateChanged( *iLiveSession->iSession, &container ); - EUNIT_ASSERT( iObserver->IsReseted() ); + EUNIT_ASSERT( iLcSessionObserver->IsReseted() ); // EIncoming iLiveSession->iSession->iState = CMceSession::EIncoming; container.SetStatusCode( KSipStatusCodeNoCodeSet ); iLiveSession->SessionStateChanged( *iLiveSession->iSession, &container ); - EUNIT_ASSERT( iObserver->iSessionFailedCalled ); - iObserver->Reset(); + EUNIT_ASSERT_EQUALS( TInt( iLcSessionObserver->iCalledFunction ), + TInt( CLcSessionObserverStub::ESessionFailed ) ) + EUNIT_ASSERT_EQUALS( iLcSessionObserver->iError, KErrGeneral ) + iLcSessionObserver->Reset(); // EReserving iLiveSession->iSession->iState = CMceSession::EReserving; container.SetStatusCode( KSipStatusCodeNoCodeSet ); iLiveSession->SessionStateChanged( *iLiveSession->iSession, &container ); - EUNIT_ASSERT( iObserver->IsReseted() ); + EUNIT_ASSERT( iLcSessionObserver->IsReseted() ); // EAnswering iLiveSession->iSession->iState = CMceSession::EAnswering; container.SetStatusCode( KSipStatusCodeNoCodeSet ); iLiveSession->SessionStateChanged( *iLiveSession->iSession, &container ); - EUNIT_ASSERT( iObserver->IsReseted() ); + EUNIT_ASSERT( iLcSessionObserver->IsReseted() ); // EProceeding iLiveSession->iSession->iState = CMceSession::EProceeding; container.SetStatusCode( KSipStatusCodeNoCodeSet ); iLiveSession->SessionStateChanged( *iLiveSession->iSession, &container ); - EUNIT_ASSERT( iObserver->IsReseted() ); + EUNIT_ASSERT( iLcSessionObserver->IsReseted() ); // EEstablished iLiveSession->iSession->iState = CMceSession::EEstablished; container.SetStatusCode( KSipStatusCode200OK ); iLiveSession->SessionStateChanged( *iLiveSession->iSession, &container ); - EUNIT_ASSERT( iObserver->iSessionEstablishedCalled ); - iObserver->Reset(); + EUNIT_ASSERT_EQUALS( TInt( iLcSessionObserver->iCalledFunction ), + TInt( CLcSessionObserverStub::ESessionStateChanged ) ) + iLcSessionObserver->Reset(); // EEstablished again (meaning expiration of session timer // and refresment of session ) @@ -1431,38 +1375,136 @@ container.SetStatusCode( KSipStatusCode200OK ); iLiveSession->SessionStateChanged( *iLiveSession->iSession, &container ); - EUNIT_ASSERT( iObserver->IsReseted() ); + EUNIT_ASSERT( iLcSessionObserver->IsReseted() ); // ECancelling iLiveSession->iSession->iState = CMceSession::ECancelling; container.SetStatusCode( KSipStatusCodeNoCodeSet ); iLiveSession->SessionStateChanged( *iLiveSession->iSession, &container ); - EUNIT_ASSERT( iObserver->IsReseted() ); - iObserver->Reset(); + EUNIT_ASSERT( iLcSessionObserver->IsReseted() ); + iLcSessionObserver->Reset(); // ETerminating iLiveSession->iSession->iState = CMceSession::ETerminating; container.SetStatusCode( KSipStatusCodeNoCodeSet ); iLiveSession->SessionStateChanged( *iLiveSession->iSession, &container ); - EUNIT_ASSERT( iObserver->IsReseted() ); - iObserver->Reset(); + EUNIT_ASSERT( iLcSessionObserver->IsReseted() ); + iLcSessionObserver->Reset(); // ETerminated iLiveSession->iSession->iState = CMceSession::ETerminated; container.SetStatusCode( KSipStatusCode200OK ); iLiveSession->SessionStateChanged( *iLiveSession->iSession, &container ); - EUNIT_ASSERT( iObserver->iSessionTerminatedCalled ); - iObserver->Reset(); + EUNIT_ASSERT_EQUALS( TInt( iLcSessionObserver->iCalledFunction ), + TInt( CLcSessionObserverStub::ESessionStateChanged ) ) + iLcSessionObserver->Reset(); // Default case iLiveSession->iSession->iState = static_cast( 10 ); container.SetStatusCode( KSipStatusCodeNoCodeSet ); iLiveSession->SessionStateChanged( *iLiveSession->iSession, &container ); - EUNIT_ASSERT( iObserver->IsReseted() ); + EUNIT_ASSERT( iLcSessionObserver->IsReseted() ); + + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_CMusEngMceSession::UT_HandleSessionStateChanged_EncoderKeyStoringL() + { + // Make repository empty, config keys must be written + CRepository::SetStubAvcConfigKeysL( KNullDesC8() ); + + // Invite + iLiveSession->EstablishLcSessionL(); + iLiveSession->iSession->iState = CMceSession::EEstablished; + + // Force failure on CenRep + CRepository::iForceFailWithCode = KErrNoMemory; + + // Simulate session state transition notification + iLiveSession->HandleSessionStateChanged( + *iLiveSession->iSession, 200, KNullDesC8() ); + EUNIT_ASSERT_EQUALS( TInt( iLcSessionObserver->iCalledFunction ), + TInt( CLcSessionObserverStub::ESessionFailed ) ) + EUNIT_ASSERT_EQUALS( iLcSessionObserver->iError, KErrNoMemory ) + + // Normal case, something will be written to CenRep + iClipSession->EstablishLcSessionL(); + iClipSession->iSession->iState = CMceSession::EEstablished; + iClipSession->HandleSessionStateChanged( + *iClipSession->iSession, 200, KNullDesC8() ); + HBufC8* info = MultimediaSharingSettings::EncoderConfigInfoLC(); + EUNIT_ASSERT_NOT_EQUALS( *info, KMusAvcBitrateLevel_1b_ConfigKey() ) + CleanupStack::PopAndDestroy( info ); + } +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_CMusEngMceSession::UT_SessionConnectionStateChangedL() + { + + // Try to tell session about another session's connection state change + + iLiveSession->SessionConnectionStateChanged( *iSomeOtherSession->iSession, + ETrue ); + EUNIT_ASSERT( iLcSessionObserver->IsReseted() ); // No session yet, nothing happened + + // Simulate sending invite + iLiveSession->EstablishLcSessionL(); + + // Now try again to notify session about session connection state change + // of an another session + iLiveSession->SessionConnectionStateChanged( *iSomeOtherSession->iSession, + ETrue ); + EUNIT_ASSERT( iLcSessionObserver->IsReseted() ); // Wrong session, nothing happened + + // Try tell session connection state is active + iLiveSession->SessionConnectionStateChanged( *iLiveSession->iSession, + ETrue ); + EUNIT_ASSERT( iLcSessionObserver->IsReseted() ); // Session active, nothing happened + + // Try tell session connection state is inactive + iLiveSession->SessionConnectionStateChanged( *iLiveSession->iSession, + EFalse ); + EUNIT_ASSERT_EQUALS( TInt( iLcSessionObserver->iCalledFunction ), + TInt( CLcSessionObserverStub::ESessionFailed ) ) + EUNIT_ASSERT_EQUALS( iLcSessionObserver->iError, + TInt( MLcSession::EConnectionLost ) ) + iLcSessionObserver->Reset(); + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_CMusEngMceSession::UT_FailedL() + { + // Try to tell session about failure of another session + + iLiveSession->Failed( *iSomeOtherSession->iSession, 0 ); + EUNIT_ASSERT( iLcSessionObserver->IsReseted() ); // No session yet, nothing happened + + // Simulate sending invite + iLiveSession->EstablishLcSessionL(); + + // Now try again to notify session about failure of an another session + iLiveSession->Failed( *iSomeOtherSession->iSession, 0 ); + EUNIT_ASSERT( iLcSessionObserver->IsReseted() ); // Wrong session, nothing happened + + // Tell session that it has failed + iLiveSession->Failed( *iLiveSession->iSession, KErrNotFound ); + EUNIT_ASSERT_EQUALS( TInt( iLcSessionObserver->iCalledFunction ), + TInt( CLcSessionObserverStub::ESessionFailed ) ) + EUNIT_ASSERT_EQUALS( iLcSessionObserver->iError, KErrNotFound ) + iLcSessionObserver->Reset(); } @@ -1470,35 +1512,31 @@ // // ----------------------------------------------------------------------------- // -void UT_CMusEngMceSession::UT_CMusEngMceSession_SessionConnectionStateChangedL() +void UT_CMusEngMceSession::UT_UpdateFailedL() { - - // Try to tell session about another session's connection state change - - iLiveSession->SessionConnectionStateChanged( *iSomeOtherSession->iSession, - ETrue ); - EUNIT_ASSERT( iObserver->IsReseted() ); // No session yet, nothing happened - - // Simulate sending invite - iLiveSession->InviteL( KTestRecipientSipUri() ); + // Try to tell session about update failure of another session + iLiveSession->UpdateFailed( *iSomeOtherSession->iSession, NULL ); + EUNIT_ASSERT_EQUALS( TInt( iLcSessionObserver->iCalledFunction ), + TInt( CLcSessionObserverStub::ESessionFailed ) ) + EUNIT_ASSERT_EQUALS( iLcSessionObserver->iError, KErrGeneral ) + iLcSessionObserver->Reset(); - // Now try again to notify session about session connection state change - // of an another session - iLiveSession->SessionConnectionStateChanged( *iSomeOtherSession->iSession, - ETrue ); - EUNIT_ASSERT( iObserver->IsReseted() ); // Wrong session, nothing happened + // Try again with container + TMceTransactionDataContainer container; + iLiveSession->UpdateFailed( *iSomeOtherSession->iSession, &container ); + EUNIT_ASSERT( iLcSessionObserver->IsReseted() ); // No session yet, nothing happened - // Try tell session connection state is active - iLiveSession->SessionConnectionStateChanged( *iLiveSession->iSession, - ETrue ); - EUNIT_ASSERT( iObserver->IsReseted() ); // Session active, nothing happened + // Invite and try again. + iLiveSession->EstablishLcSessionL(); + iLiveSession->UpdateFailed( *iSomeOtherSession->iSession, &container ); + EUNIT_ASSERT( iLcSessionObserver->IsReseted() ); // Wrong session, nothing happened¨ - // Try tell session connection state is inactive - iLiveSession->SessionConnectionStateChanged( *iLiveSession->iSession, - EFalse ); - EUNIT_ASSERT( iObserver->iSessionConnectionLostCalled ); - iObserver->Reset(); - + // Try with right session + iLiveSession->UpdateFailed( *iLiveSession->iSession, &container ); + EUNIT_ASSERT_EQUALS( TInt( iLcSessionObserver->iCalledFunction ), + TInt( CLcSessionObserverStub::ESessionFailed ) ) + EUNIT_ASSERT_EQUALS( iLcSessionObserver->iError, KErrGeneral ) + iLcSessionObserver->Reset(); } @@ -1506,61 +1544,7 @@ // // ----------------------------------------------------------------------------- // -void UT_CMusEngMceSession::UT_CMusEngMceSession_FailedL() - { - // Try to tell session about failure of another session - - iLiveSession->Failed( *iSomeOtherSession->iSession, 0 ); - EUNIT_ASSERT( iObserver->IsReseted() ); // No session yet, nothing happened - - // Simulate sending invite - iLiveSession->InviteL( KTestRecipientSipUri() ); - - // Now try again to notify session about failure of an another session - iLiveSession->Failed( *iSomeOtherSession->iSession, 0 ); - EUNIT_ASSERT( iObserver->IsReseted() ); // Wrong session, nothing happened - - // Tell session that it has failed - iLiveSession->Failed( *iLiveSession->iSession, 0 ); - EUNIT_ASSERT( iObserver->iSessionFailedCalled ); - iObserver->Reset(); - - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void UT_CMusEngMceSession::UT_CMusEngMceSession_UpdateFailedL() - { - // Try to tell session about update failure of another session - iLiveSession->UpdateFailed( *iSomeOtherSession->iSession, NULL ); - EUNIT_ASSERT( iObserver->iSessionFailedCalled ); // No container, internal error - iObserver->Reset(); - - // Try again with container - TMceTransactionDataContainer container; - iLiveSession->UpdateFailed( *iSomeOtherSession->iSession, &container ); - EUNIT_ASSERT( iObserver->IsReseted() ); // No session yet, nothing happened - - // Invite and try again. - iLiveSession->InviteL( KTestRecipientSipUri() ); - iLiveSession->UpdateFailed( *iSomeOtherSession->iSession, &container ); - EUNIT_ASSERT( iObserver->IsReseted() ); // Wrong session, nothing happened¨ - - // Try with right session - iLiveSession->UpdateFailed( *iLiveSession->iSession, &container ); - EUNIT_ASSERT( iObserver->iSessionFailedCalled ); - iObserver->Reset(); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void UT_CMusEngMceSession::UT_CMusEngMceSession_SRReceivedL() +void UT_CMusEngMceSession::UT_SRReceivedL() { EUNIT_ASSERT( iLiveSession->iSecondsFromLastRtcpReport == 0 ); @@ -1603,7 +1587,7 @@ // // ----------------------------------------------------------------------------- // -void UT_CMusEngMceSession::UT_CMusEngMceSession_RRReceivedL() +void UT_CMusEngMceSession::UT_RRReceivedL() { EUNIT_ASSERT( iLiveSession->iSecondsFromLastRtcpReport == 0 ); @@ -1640,45 +1624,12 @@ EUNIT_ASSERT( iLiveSession->iSecondsFromLastRtcpReport == 0 ); } - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void UT_CMusEngMceSession::UT_CMusEngMceSession_InactivityTimeoutL() - { - // Construct an audio stream for this test - - CMceAudioStream* audioStream = CMceAudioStream::NewLC(); - - CMceRtpSource* rtpSource = CMceRtpSource::NewLC(); - audioStream->SetSourceL( rtpSource ); - CleanupStack::Pop( rtpSource ); - - iReceiveSession->InactivityTimeout( *audioStream, *rtpSource ); - - EUNIT_ASSERT( iObserver->IsReseted() ) - - CleanupStack::PopAndDestroy( audioStream ); - - // And now real inactivity timeout - - iReceiveSession->InactivityTimeout( - *iReceiveSession->iSession->Streams()[0], - *static_cast - (iReceiveSession->iSession->Streams()[0]->Source()) ); - - EUNIT_ASSERT( iObserver->iStreamIdleCalled ) - - iObserver->Reset(); - } - // ----------------------------------------------------------------------------- // // ----------------------------------------------------------------------------- // -void UT_CMusEngMceSession::UT_CMusEngMceSession_SsrcAddedL() +void UT_CMusEngMceSession::UT_SsrcAddedL() { // As CMusEngMceSession::SsrcAdded is expected to do nothing, just call // it to make sure it does not weaken the test coverage @@ -1697,7 +1648,7 @@ // // ----------------------------------------------------------------------------- // -void UT_CMusEngMceSession::UT_CMusEngMceSession_SsrcRemovedL() +void UT_CMusEngMceSession::UT_SsrcRemovedL() { // As CMusEngMceSession::SsrcRemoved is expected to do nothing, just call // it to make sure it does not weaken the test coverage @@ -1716,21 +1667,25 @@ // // ----------------------------------------------------------------------------- // -void UT_CMusEngMceSession::UT_CMusEngMceSession_UpdateTimerEventL() +void UT_CMusEngMceSession::UT_UpdateTimerEventL() { + iLcSessionObserver->Reset(); iLiveSession->UpdateTimerEvent(); - EUNIT_ASSERT( iObserver->iSessionTimeChangedCalled ) + EUNIT_ASSERT_EQUALS( TInt( iLcSessionObserver->iCalledFunction ), + TInt( CLcSessionObserverStub::EUnknown ) ) EUNIT_ASSERT( iLiveSession->iUpdateTimer->IsActive() ) iLiveSession->iUpdateTimer->Cancel(); - iObserver->Reset(); + iLcSessionObserver->Reset(); iLiveSession->iSecondsFromLastRtcpReport = 25; // >KMusEngRtcpInactivityThreshold iLiveSession->UpdateTimerEvent(); - EUNIT_ASSERT( iObserver->iSessionTimeChangedCalled ) - EUNIT_ASSERT( iObserver->iInactivityTimeoutCalled ); + EUNIT_ASSERT_EQUALS( TInt( iLcSessionObserver->iCalledFunction ), + TInt( CLcSessionObserverStub::ESessionFailed ) ) + EUNIT_ASSERT_EQUALS( iLcSessionObserver->iError, + TInt( MLcSession::EMediaInactivityTimeout ) ) EUNIT_ASSERT( iLiveSession->iUpdateTimer->IsActive() ) iLiveSession->iUpdateTimer->Cancel(); - iObserver->Reset(); + iLcSessionObserver->Reset(); } @@ -1738,14 +1693,13 @@ // // ----------------------------------------------------------------------------- // -void UT_CMusEngMceSession::UT_CMusEngMceSession_IsRoamingBetweenAPsAllowedL() +void UT_CMusEngMceSession::UT_IsRoamingBetweenAPsAllowedL() { // No session EUNIT_ASSERT( iLiveSession->IsRoamingBetweenAPsAllowed() ) // Session idle - _LIT( KRecipientSipUri, "sip:user@some.where" ); - iLiveSession->InviteL( KRecipientSipUri ); + iLiveSession->EstablishLcSessionL(); iLiveSession->iSession->iState = CMceSession::EIdle; EUNIT_ASSERT( iLiveSession->IsRoamingBetweenAPsAllowed() ) @@ -1762,55 +1716,249 @@ // // ----------------------------------------------------------------------------- // -void UT_CMusEngMceSession::UT_CMusEngMceSession_VolumeChangedL() - { - // Try without session, nothing happens - EUNIT_ASSERT( iObserver->iVolume == 0 ); - iLiveSession->VolumeChanged( 1, EFalse ); - EUNIT_ASSERT( !VerifySpeakersVolume(*iLiveSession, 1) ) - EUNIT_ASSERT( iObserver->iVolume == 0 ); +void UT_CMusEngMceSession::UT_SaveContactL() + { + _LIT8( KTestSaveContactAddr, "sip:abc@10.10.10.10"); + + User::LeaveIfError( RProperty::Set( NMusSessionApi::KCategoryUid, + NMusSessionApi::KTelNumber, + _L("12341234") ) ); + + // Operator variant + iLiveSession->iOperatorVariant = ETrue; + MUSENG_EUNIT_ASSERT_SPECIFIC_LEAVE( + iLiveSession->SaveContactL( KTestSaveContactAddr ), KErrNotSupported ) + + // No address to save + iLiveSession->iOperatorVariant = EFalse; + MUSENG_EUNIT_ASSERT_SPECIFIC_LEAVE( + iLiveSession->SaveContactL( KNullDesC8 ), KErrArgument ) - // Establish session - ESTABLISH_OUT_SESSION( iClipSession ) + // Contact id KErrNotSupported (multiple matching contacts) + User::LeaveIfError( RProperty::Set( NMusSessionApi::KCategoryUid, + NMusSessionApi::KContactId, + KErrNotSupported ) ); - // Try without observer - iClipSession->VolumeChanged( 2, EFalse ); - EUNIT_ASSERT( VerifySpeakersVolume(*iClipSession, 2) ) - EUNIT_ASSERT( iObserver->iVolume == 0 ); - + MUSENG_EUNIT_ASSERT_SPECIFIC_LEAVE( + iLiveSession->SaveContactL( KTestSaveContactAddr ), KErrNotFound ) - // Try with observer set - iClipSession->SetVolumeChangeObserver( iObserver ); - iClipSession->VolumeChanged( 3, EFalse ); - EUNIT_ASSERT( VerifySpeakersVolume(*iClipSession, 3) ) - EUNIT_ASSERT( iObserver->iVolume == 3 ); + // SIP field exists already + User::LeaveIfError( RProperty::Set( NMusSessionApi::KCategoryUid, + NMusSessionApi::KContactId, + 2 ) ); + + ContactEngineStubHelper::SetSIPFieldFound( ETrue ); + MUSENG_EUNIT_ASSERT_SPECIFIC_LEAVE( + iLiveSession->SaveContactL( KTestSaveContactAddr ), KErrAlreadyExists ) + + // No correct field in fields info + ContactEngineStubHelper::Reset(); + ContactEngineStubHelper::SetSIPFieldInfoFound( EFalse ); + MUSENG_EUNIT_ASSERT_SPECIFIC_LEAVE( + iLiveSession->SaveContactL( KTestSaveContactAddr ), KErrNotFound ) + + // Success + ContactEngineStubHelper::Reset(); + iLiveSession->SaveContactL( KTestSaveContactAddr ); + EUNIT_ASSERT( ContactEngineStubHelper::GetCalledFunction() == EContactEngineStubSetText ); } -// HELPERS -TBool UT_CMusEngMceSession::VerifySpeakersVolume(CMusEngMceSession& aSession, TInt aVolume) +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_CMusEngMceSession::UT_RectL() + { + iLiveSession->SetRectL( TRect( 0, 0, 100, 100 ) ); + TRect rect = iLiveSession->Rect(); + + // Initial values + EUNIT_ASSERT( rect.iTl.iX == 0 ); + EUNIT_ASSERT( rect.iTl.iY == 0 ); + EUNIT_ASSERT( rect.iBr.iX == 100 ); + EUNIT_ASSERT( rect.iBr.iY == 100 ); + + iLiveSession->iRect.iTl.iX = 100; + iLiveSession->iRect.iTl.iY = 200; + iLiveSession->iRect.iBr.iX = 300; + iLiveSession->iRect.iBr.iY = 400; + + rect = iLiveSession->Rect(); + + EUNIT_ASSERT( rect.iTl.iX == 100 ); + EUNIT_ASSERT( rect.iTl.iY == 200 ); + EUNIT_ASSERT( rect.iBr.iX == 300 ); + EUNIT_ASSERT( rect.iBr.iY == 400 ); + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_CMusEngMceSession::UT_SetRectLL() { - TBool result = EFalse; + TRect rect; + + rect.iTl.iX = 100; + rect.iTl.iY = 200; + rect.iBr.iX = 300; + rect.iBr.iY = 400; + + iLiveSession->SetRectL( rect ); + + EUNIT_ASSERT( iLiveSession->iRect.iTl.iX == 100 ); + EUNIT_ASSERT( iLiveSession->iRect.iTl.iY == 200 ); + EUNIT_ASSERT( iLiveSession->iRect.iBr.iX == 300 ); + EUNIT_ASSERT( iLiveSession->iRect.iBr.iY == 400 ); + + ESTABLISH_OUT_SESSION( iLiveSession ); + + CMceDisplaySink* display = + MusEngMceUtils::GetDisplayL( *( iLiveSession->iSession ) ); + TRect displayRect = display->DisplayRectL(); - CMceSpeakerSink* speaker = NULL; - CMceSession* session = aSession.iSession; + EUNIT_ASSERT( displayRect.iTl.iX == 100 ); + EUNIT_ASSERT( displayRect.iTl.iY == 200 ); + EUNIT_ASSERT( displayRect.iBr.iX == 300 ); + EUNIT_ASSERT( displayRect.iBr.iY == 400 ); + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_CMusEngMceSession::UT_SecondaryRectL() + { + iLiveSession->SetSecondaryRectL( TRect( 0, 0, 100, 100 ) ); + TRect rect = iLiveSession->SecondaryRect(); + + // Initial values + EUNIT_ASSERT( rect.iTl.iX == 0 ); + EUNIT_ASSERT( rect.iTl.iY == 0 ); + EUNIT_ASSERT( rect.iBr.iX == 100 ); + EUNIT_ASSERT( rect.iBr.iY == 100 ); + + iLiveSession->iRect.iTl.iX = 100; + iLiveSession->iRect.iTl.iY = 200; + iLiveSession->iRect.iBr.iX = 300; + iLiveSession->iRect.iBr.iY = 400; + + rect = iLiveSession->SecondaryRect(); - if ( session ) - { - for ( TInt i = 0; i < session->Streams().Count(); ++i ) - { - for ( TInt j = 0; j < session->Streams()[i]->Sinks().Count(); ++j ) - { - if ( session->Streams()[i]->Sinks()[j]->Type() == KMceSpeakerSink ) - { - speaker = static_cast( - session->Streams()[i]->Sinks()[j] ); - result = ( speaker->VolumeL() == aVolume ); - } - } - } - } - return result; + EUNIT_ASSERT( rect.iTl.iX == 100 ); + EUNIT_ASSERT( rect.iTl.iY == 200 ); + EUNIT_ASSERT( rect.iBr.iX == 300 ); + EUNIT_ASSERT( rect.iBr.iY == 400 ); + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_CMusEngMceSession::UT_SetSecondaryRectLL() + { + TRect rect; + + rect.iTl.iX = 100; + rect.iTl.iY = 200; + rect.iBr.iX = 300; + rect.iBr.iY = 400; + + iLiveSession->SetSecondaryRectL( rect ); + + EUNIT_ASSERT( iLiveSession->iRect.iTl.iX == 100 ); + EUNIT_ASSERT( iLiveSession->iRect.iTl.iY == 200 ); + EUNIT_ASSERT( iLiveSession->iRect.iBr.iX == 300 ); + EUNIT_ASSERT( iLiveSession->iRect.iBr.iY == 400 ); + + ESTABLISH_OUT_SESSION( iLiveSession ); + + CMceDisplaySink* display = + MusEngMceUtils::GetDisplayL( *( iLiveSession->iSession ) ); + TRect displayRect = display->DisplayRectL(); + + EUNIT_ASSERT( displayRect.iTl.iX == 100 ); + EUNIT_ASSERT( displayRect.iTl.iY == 200 ); + EUNIT_ASSERT( displayRect.iBr.iX == 300 ); + EUNIT_ASSERT( displayRect.iBr.iY == 400 ); + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_CMusEngMceSession::UT_EnableDisplayLL() + { + TRAPD( error, iLiveSession->EnableDisplayL( ETrue ) ); + MUS_TEST_FORWARD_ALLOC_FAILURE( error ); + EUNIT_ASSERT( error == KErrNotReady ); + + ESTABLISH_OUT_SESSION( iLiveSession ); + + CMceDisplaySink* display = + MusEngMceUtils::GetDisplayL( *(iLiveSession->iSession) ); + + // Disable + iLiveSession->EnableDisplayL( EFalse ); + + EUNIT_ASSERT( !display->iIsEnabled ); + + // Try to disable again, request should be ignored + + iLiveSession->EnableDisplayL( EFalse ); + + EUNIT_ASSERT( !display->iIsEnabled ); + + // Enable + + iLiveSession->EnableDisplayL( ETrue ); + + EUNIT_ASSERT( display->iIsEnabled ); + + // Try to enable again, request should be ignored + + iLiveSession->EnableDisplayL( ETrue ); + + EUNIT_ASSERT( display->iIsEnabled ); + + EUNIT_ASSERT( iLiveSession->IsDisplayEnabled() ) + EUNIT_ASSERT( iLiveSession->IsDisplayActive() ) + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_CMusEngMceSession::UT_CMusEngMceSession_SetOrientationLL() + { + // Try without session, fails + EUNIT_ASSERT_SPECIFIC_LEAVE( iLiveSession->SetOrientationL( + CMusEngMceSession::EPortrait ), + KErrNotReady ) + + // Establish a session + ESTABLISH_OUT_SESSION( iLiveSession ) + + CMceDisplaySink* display = + MusEngMceUtils::GetDisplayL( *iLiveSession->iSession ); + + // Check the initial state + display->iRotation = CMceDisplaySink::ENone; + EUNIT_ASSERT_EQUALS( iLiveSession->OrientationL(), + CMusEngMceSession::EPortrait ) + + // Successfully change orientation + + iLiveSession->SetOrientationL( CMusEngMceSession::ELandscape ); + EUNIT_ASSERT_EQUALS( iLiveSession->OrientationL(), + CMusEngMceSession::ELandscape ) + + iLiveSession->SetOrientationL( CMusEngMceSession::EPortrait ); + EUNIT_ASSERT_EQUALS( iLiveSession->OrientationL(), + CMusEngMceSession::EPortrait ) } @@ -1818,22 +1966,510 @@ // // ----------------------------------------------------------------------------- // -void UT_CMusEngMceSession::SetMaxVolForSpeakersL(CMceSession& aSession, TInt aMaxVol) +void UT_CMusEngMceSession::UT_SetEncodingDeviceLL() + { + CMceAvcCodec* codec = CMceAvcCodec::NewLC( KMceSDPNameH264() ); + + // Generic error in CenRep, leave expected + CRepository::iForceFailWithCode = KErrNotReady; + EUNIT_ASSERT_LEAVE( iLiveSession->SetEncodingDeviceL( *codec ) ) + EUNIT_ASSERT_EQUALS( codec->iEncodingDecodingDevice, TUid::Uid( 0 ) ) + + // No entry in CenRep, default value expected + CRepository::iForceFailWithCode = KErrNotFound; + const TUid KDefaultEncodingDevice( TUid::Uid( 0x20001C13 ) ); + iLiveSession->SetEncodingDeviceL( *codec ); + EUNIT_ASSERT_EQUALS( codec->iEncodingDecodingDevice, + KDefaultEncodingDevice ) + + // Entry in CenRep + const TInt KSomeEncodingDevice( 0x20001C15 ); + CRepository::iStaticEncoderUid = KSomeEncodingDevice; + iLiveSession->SetEncodingDeviceL( *codec ); + EUNIT_ASSERT_EQUALS( codec->iEncodingDecodingDevice, + TUid::Uid( KSomeEncodingDevice ) ) + + CleanupStack::PopAndDestroy( codec ); + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_CMusEngMceSession::UT_SetCodecConfigKeyLL() + { + CMceAvcCodec* codec = CMceAvcCodec::NewLC( KMceSDPNameH264() ); + codec->SetAllowedBitrates( KMceAvcBitrateLevel1b ); + + // Generic error in CenRep, leave expected + CRepository::iForceFailWithCode = KErrNotReady; + EUNIT_ASSERT_LEAVE( iLiveSession->SetCodecConfigKeyL( *codec ) ); + EUNIT_ASSERT( !codec->iConfigKey ) + EUNIT_ASSERT( !iLiveSession->iStoreEncoderConfigInfo ) + CRepository::iForceFailWithCode = KErrNone; + + // No entry in CenRep, nothing happens + iLiveSession->SetCodecConfigKeyL( *codec ); + EUNIT_ASSERT( !codec->iConfigKey ) + EUNIT_ASSERT( !iLiveSession->iStoreEncoderConfigInfo ) + + // Empty entry in CenRep + CRepository::SetStubAvcConfigKeysL( KNullDesC8() ); + iLiveSession->SetCodecConfigKeyL( *codec ); + EUNIT_ASSERT( !codec->iConfigKey ) + EUNIT_ASSERT( iLiveSession->iStoreEncoderConfigInfo ) + iLiveSession->iStoreEncoderConfigInfo = EFalse; // emulate original situation + + // Entry in CenRep + CRepository::SetStubAvcConfigKeysL( KMusAvcBitrateLevel_1b_ConfigKey ); + iLiveSession->SetCodecConfigKeyL( *codec ); + EUNIT_ASSERT( codec->iConfigKey ) + HBufC8* key = codec->ConfigKeyL(); + CleanupStack::PushL( key ); + EUNIT_ASSERT_EQUALS( *key, KMusAvcBitrateLevel1bTestText() ) + CleanupStack::PopAndDestroy( key ); + EUNIT_ASSERT( !iLiveSession->iStoreEncoderConfigInfo ) + + CleanupStack::PopAndDestroy( codec ); + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_CMusEngMceSession::UT_ReadCodecConfigKeyLL() + { + HBufC8* key( NULL ); + + // Try with H263, leave expected + CMceVideoCodec* codecH263 = CMceH263Codec::NewLC( KMceSDPNameH263() ); + EUNIT_ASSERT_LEAVE( key = iLiveSession->ReadCodecConfigKeyL( *codecH263 ) ) + CleanupStack::PopAndDestroy( codecH263 ); + + // Try without an entry in CenRep, leave expected + CMceVideoCodec* codec = CMceAvcCodec::NewLC( KMceSDPNameH264() ); + codec->SetAllowedBitrates( 0 | KMceAvcBitrateLevel1 ); + EUNIT_ASSERT_LEAVE( key = iLiveSession->ReadCodecConfigKeyL( *codec ) ) + + // Create CenRep entry which does not include wanted bitrate, NULL value + // expected + CRepository::SetStubAvcConfigKeysL( KMusAvcBitrateLevel1bTestText() ); + key = iLiveSession->ReadCodecConfigKeyL( *codec ); + EUNIT_ASSERT( !key ) + + // Create entry with all AVC keys and try with all the values + CRepository::SetStubAvcConfigKeysL( KMusAvcAllLevelsConcatenation() ); + + // KMceAvcBitrateLevel1 + key = iLiveSession->ReadCodecConfigKeyL( *codec ); + EUNIT_ASSERT( key ); + CleanupStack::PushL( key ); + EUNIT_ASSERT_EQUALS( *key, KMusAvcBitrateLevel1TestText ); + CleanupStack::PopAndDestroy( key ); + + // KMceAvcBitrateLevel1b + codec->SetAllowedBitrates( KMceAvcBitrateLevel1b ); + key = iLiveSession->ReadCodecConfigKeyL( *codec ); + EUNIT_ASSERT( key ); + CleanupStack::PushL( key ); + EUNIT_ASSERT_EQUALS( *key, KMusAvcBitrateLevel1bTestText ); + CleanupStack::PopAndDestroy( key ); + + // KMceAvcBitrateLevel1_1 + codec->SetAllowedBitrates( KMceAvcBitrateLevel1_1 ); + key = iLiveSession->ReadCodecConfigKeyL( *codec ); + EUNIT_ASSERT( key ); + CleanupStack::PushL( key ); + EUNIT_ASSERT_EQUALS( *key, KMusAvcBitrateLevel1_1TestText ); + CleanupStack::PopAndDestroy( key ); + + // KMceAvcBitrateLevel1_2 + codec->SetAllowedBitrates( KMceAvcBitrateLevel1_2 ); + key = iLiveSession->ReadCodecConfigKeyL( *codec ); + EUNIT_ASSERT( key ); + CleanupStack::PushL( key ); + EUNIT_ASSERT_EQUALS( *key, KMusAvcBitrateLevel1_2TestText ); + CleanupStack::PopAndDestroy( key ); + + // KMceAvcBitrateLevel1_3 + codec->SetAllowedBitrates( KMceAvcBitrateLevel1_3 ); + key = iLiveSession->ReadCodecConfigKeyL( *codec ); + EUNIT_ASSERT( key ); + CleanupStack::PushL( key ); + EUNIT_ASSERT_EQUALS( *key, KMusAvcBitrateLevel1_3TestText ); + CleanupStack::PopAndDestroy( key ); + + // KMceAvcBitrateLevel2 + codec->SetAllowedBitrates( KMceAvcBitrateLevel2 ); + key = iLiveSession->ReadCodecConfigKeyL( *codec ); + EUNIT_ASSERT( key ); + CleanupStack::PushL( key ); + EUNIT_ASSERT_EQUALS( *key, KMusAvcBitrateLevel2TestText ); + CleanupStack::PopAndDestroy( key ); + + CleanupStack::PopAndDestroy( codec ); + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_CMusEngMceSession::UT_StoreEncoderConfigInfoLL() + { + CRepository::iStaticWriteAvcKeysToStaticData = ETrue; + + // Try with clean CenRep + MultimediaSharingSettings::SetEncoderConfigInfoL( KNullDesC8() ); + + ESTABLISH_OUT_SESSION( iLiveSession ) // calls StoreEncoderConfigInfoL + // If StoreEncoderConfigInfoL leaves with KErrNoMemory, + // MMusEngSessionObserver::SessionFailed will be called. + if ( iLcSessionObserver->iCalledFunction == CLcSessionObserverStub::ESessionFailed ) + { + User::Leave( KErrNoMemory ); + } + + HBufC8* keys = MultimediaSharingSettings::EncoderConfigInfoLC(); + EUNIT_ASSERT_EQUALS( *keys, KMusAvcBitrateLevel_1b_ConfigKey() ) + CleanupStack::PopAndDestroy( keys ); + + // Try without a clean CenRep + MultimediaSharingSettings::SetEncoderConfigInfoL( + KMusAvcBitrateLevel_1_1_ConfigKey() ); + + delete iLiveSession; + iLiveSession = NULL; + iLiveSession = CMusEngLiveSession::NewL(); + iLiveSession->SetLcSessionObserver( iLcSessionObserver ); + iLiveSession->SetLcUiProvider( iLcUiProvider ); + + ESTABLISH_OUT_SESSION( iLiveSession ) // calls StoreEncoderConfigInfoL + // If StoreEncoderConfigInfoL leaves with KErrNoMemory, + // MMusEngSessionObserver::SessionFailed will be called. + if ( iLcSessionObserver->iCalledFunction == CLcSessionObserverStub::ESessionFailed ) + { + User::Leave( KErrNoMemory ); + } + + keys = MultimediaSharingSettings::EncoderConfigInfoLC(); + EUNIT_ASSERT_EQUALS( *keys, + KMusAvcBitrateLevels_1_1_And_1b_ConfigKeys() ) + CleanupStack::PopAndDestroy( keys ); + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_CMusEngMceSession::UT_StreamStreamingL() { - for ( TInt i = 0; i < aSession.Streams().Count(); ++i ) - { - for ( TInt j = 0; j < aSession.Streams()[i]->Sinks().Count(); ++j ) - { - if ( aSession.Streams()[i]->Sinks()[j]->Type() == KMceSpeakerSink ) - { - CMceSpeakerSink* speaker = static_cast( - aSession.Streams()[i]->Sinks()[j] ); - speaker->iMaxVolume = aMaxVol; - } - } - } + // Wrong stream type, no callbacks to MLcSessionObserver + CMceAudioStream* audioStream = CMceAudioStream::NewLC(); + iLiveSession->StreamStreaming( *audioStream ); + CleanupStack::PopAndDestroy( audioStream ); + EUNIT_ASSERT( iLcSessionObserver->IsReseted() ) + + // Wrong state, no callbacks to MLcSessionObserver + CMceVideoStream* videoStream = CMceVideoStream::NewLC(); + videoStream->iState = CMceMediaStream::EIdle; + iLiveSession->StreamStreaming( *videoStream ); + EUNIT_ASSERT( iLcSessionObserver->IsReseted() ) + + // Receive session, RTP source and remote player present + iLcSessionObserver->Reset(); + videoStream->iState = CMceMediaStream::EStreaming; + CMceRtpSource* rtpSource = CMceRtpSource::NewLC(); + videoStream->SetSourceL( rtpSource ); + CleanupStack::Pop( rtpSource ); + iReceiveSession->StreamStreaming( *videoStream ); + EUNIT_ASSERT_EQUALS( + TInt( CLcSessionObserverStub::EPlayerStateChanged ), + iLcSessionObserver->iCalledFunction ) + EUNIT_ASSERT_EQUALS( + iReceiveSession->RemoteVideoPlayer(), + iLcSessionObserver->iCurrentPlayer ) + + // Live session, RTP sink and local player present + iLcSessionObserver->Reset(); + videoStream->SetSourceL( NULL ); + CMceRtpSink* rtpSink = CMceRtpSink::NewLC(); + videoStream->AddSinkL( rtpSink ); + CleanupStack::Pop( rtpSink ); + iLiveSession->StreamStreaming( *videoStream ); + EUNIT_ASSERT_EQUALS( + TInt( CLcSessionObserverStub::EPlayerStateChanged ), + iLcSessionObserver->iCalledFunction ) + EUNIT_ASSERT_EQUALS( + iLiveSession->LocalVideoPlayer(), + iLcSessionObserver->iCurrentPlayer ) + + // Live session, RTP sink present, but no local player + iLcSessionObserver->Reset(); + delete iLiveSession->iLiveVideoPlayer; + iLiveSession->iLiveVideoPlayer = NULL; + iLiveSession->StreamStreaming( *videoStream ); + EUNIT_ASSERT( iLcSessionObserver->IsReseted() ) + + CleanupStack::PopAndDestroy( videoStream ); + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_CMusEngMceSession::UT_InformObserverAboutSessionStateChangeL() + { + // Observer does not exist + iLiveSession->SetLcSessionObserver( NULL ); + iLiveSession->InformObserverAboutSessionStateChange(); + EUNIT_ASSERT_EQUALS( + CLcSessionObserverStub::EUnknown, + iLcSessionObserver->iCalledFunction ) + + // Observer exists + iLiveSession->SetLcSessionObserver( iLcSessionObserver ); + iLiveSession->InformObserverAboutSessionStateChange(); + EUNIT_ASSERT_EQUALS( + CLcSessionObserverStub::ESessionStateChanged, + iLcSessionObserver->iCalledFunction ) + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_CMusEngMceSession::UT_InformObserverAboutSessionUpdateL() + { + // Observer does not exist + iLiveSession->SetLcSessionObserver( NULL ); + iLiveSession->InformObserverAboutSessionUpdate(); + EUNIT_ASSERT_EQUALS( + CLcSessionObserverStub::EUnknown, + iLcSessionObserver->iCalledFunction ) + + // Observer exists + iLiveSession->SetLcSessionObserver( iLcSessionObserver ); + iLiveSession->InformObserverAboutSessionUpdate(); + EUNIT_ASSERT_EQUALS( + CLcSessionObserverStub::ESessionUpdated, + iLcSessionObserver->iCalledFunction ) + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_CMusEngMceSession::UT_InformObserverAboutSessionFailureL() + { + // Observer does not exist + iLiveSession->SetLcSessionObserver( NULL ); + iLiveSession->InformObserverAboutSessionFailure( KErrGeneral ); + EUNIT_ASSERT_EQUALS( + CLcSessionObserverStub::EUnknown, + iLcSessionObserver->iCalledFunction ) + EUNIT_ASSERT_EQUALS( KErrNone, iLcSessionObserver->iError ) + + // Observer exists + iLiveSession->SetLcSessionObserver( iLcSessionObserver ); + iLiveSession->InformObserverAboutSessionFailure( KErrGeneral ); + EUNIT_ASSERT_EQUALS( + CLcSessionObserverStub::ESessionFailed, + iLcSessionObserver->iCalledFunction ) + EUNIT_ASSERT_EQUALS( KErrGeneral, iLcSessionObserver->iError ) + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_CMusEngMceSession::UT_InformObserverAboutPlayerStateChangeL() + { + // Observer does not exist + iLiveSession->SetLcSessionObserver( NULL ); + iLiveSession->InformObserverAboutPlayerStateChange( NULL ); + EUNIT_ASSERT_EQUALS( + CLcSessionObserverStub::EUnknown, + iLcSessionObserver->iCalledFunction ) + + // Observer exists, but the player is NULL + iLiveSession->SetLcSessionObserver( iLcSessionObserver ); + iLiveSession->InformObserverAboutPlayerStateChange( NULL ); + EUNIT_ASSERT_EQUALS( + CLcSessionObserverStub::EUnknown, + iLcSessionObserver->iCalledFunction ) + + // Both observer and player exist + iLiveSession->InformObserverAboutPlayerStateChange( + iLiveSession->LocalVideoPlayer() ); + EUNIT_ASSERT_EQUALS( + CLcSessionObserverStub::EPlayerStateChanged, + iLcSessionObserver->iCalledFunction ) } - + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_CMusEngMceSession::UT_InformObserverAboutPlayerUpdateL() + { + // Observer does not exist + iLiveSession->SetLcSessionObserver( NULL ); + iLiveSession->InformObserverAboutPlayerUpdate( NULL ); + EUNIT_ASSERT_EQUALS( + CLcSessionObserverStub::EUnknown, + iLcSessionObserver->iCalledFunction ) + + // Observer exists, but the player is NULL + iLiveSession->SetLcSessionObserver( iLcSessionObserver ); + iLiveSession->InformObserverAboutPlayerUpdate( NULL ); + EUNIT_ASSERT_EQUALS( + CLcSessionObserverStub::EUnknown, + iLcSessionObserver->iCalledFunction ) + + // Both observer and player exist + iLiveSession->InformObserverAboutPlayerUpdate( + iLiveSession->LocalVideoPlayer() ); + EUNIT_ASSERT_EQUALS( + CLcSessionObserverStub::EPlayerUpdated, + iLcSessionObserver->iCalledFunction ) + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_CMusEngMceSession::UT_InformObserverAboutPlayerFailureL() + { + // Observer does not exist + iLiveSession->SetLcSessionObserver( NULL ); + iLiveSession->InformObserverAboutPlayerFailure( NULL, KErrGeneral ); + EUNIT_ASSERT_EQUALS( + CLcSessionObserverStub::EUnknown, + iLcSessionObserver->iCalledFunction ) + EUNIT_ASSERT_EQUALS( KErrNone, iLcSessionObserver->iError ) + + // Observer exists, but the player is NULL + iLiveSession->SetLcSessionObserver( iLcSessionObserver ); + iLiveSession->InformObserverAboutPlayerFailure( NULL, KErrGeneral ); + EUNIT_ASSERT_EQUALS( + CLcSessionObserverStub::EUnknown, + iLcSessionObserver->iCalledFunction ) + EUNIT_ASSERT_EQUALS( KErrNone, iLcSessionObserver->iError ) + + // Both observer and player exist + iLiveSession->InformObserverAboutPlayerFailure( + iLiveSession->LocalVideoPlayer(), KErrGeneral ); + EUNIT_ASSERT_EQUALS( + CLcSessionObserverStub::EPlayerFailed, + iLcSessionObserver->iCalledFunction ) + EUNIT_ASSERT_EQUALS( KErrGeneral, iLcSessionObserver->iError ) + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_CMusEngMceSession::UT_LcUiProviderL() + { + // Provider does not exist + iLiveSession->SetLcUiProvider( NULL ); + EUNIT_ASSERT_SPECIFIC_LEAVE( iLiveSession->LcUiProviderL(), KErrNotReady ) + + // Provider exists + iLiveSession->SetLcUiProvider( iLcUiProvider ); + EUNIT_ASSERT( &iLiveSession->LcUiProviderL() == iLcUiProvider ) + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_CMusEngMceSession::UI_IsBackgroundStartupL() + { + // fast mode is not defined + EUNIT_ASSERT( !iLiveSession->IsBackgroundStartup() ) + + // fast mode is Off + User::LeaveIfError( RProperty::Set( NMusSessionApi::KCategoryUid, + NMusSessionApi::KFastMode, + 1 ) ); + + EUNIT_ASSERT( !iLiveSession->IsBackgroundStartup() ) + + // fast mode is On + // Bg value would be set to true at session contruct phase if property + // is set to EFastModeOn at that time. + iLiveSession->iBackground = ETrue; + User::LeaveIfError( RProperty::Set( NMusSessionApi::KCategoryUid, + NMusSessionApi::KFastMode, + 0 ) ); + + EUNIT_ASSERT( iLiveSession->IsBackgroundStartup() ) + + // Ensure after session recreation fast mode is off + delete iLiveSession; + iLiveSession = NULL; + iLiveSession = CMusEngLiveSession::NewL(); + EUNIT_ASSERT( !iLiveSession->IsBackgroundStartup() ) + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_CMusEngMceSession::UT_InformUiProviderAboutReceivingStartL() + { + // Observer does not exist + iLiveSession->SetLcUiProvider( NULL ); + iLiveSession->InformUiProviderAboutReceivingStart(); + EUNIT_ASSERT_EQUALS( TInt( CLcUiProviderStub::EUnknown ), + iLcUiProvider->iCalledFunction ) + + // Observer exists, but we are on foreground (fast mode is off) + iLiveSession->SetLcUiProvider( iLcUiProvider ); + iLiveSession->InformUiProviderAboutReceivingStart(); + EUNIT_ASSERT_EQUALS( TInt( CLcUiProviderStub::EUnknown ), + iLcUiProvider->iCalledFunction ) + + // Observer exists, we are on background + iLiveSession->iBackground = ETrue; + EUNIT_ASSERT( !iLcUiProvider->iForeground ) + iLiveSession->InformUiProviderAboutReceivingStart(); + EUNIT_ASSERT_EQUALS( TInt( CLcUiProviderStub::EHandleForegroundStatus ), + iLcUiProvider->iCalledFunction ) + EUNIT_ASSERT( iLcUiProvider->iForeground ) + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_CMusEngMceSession::UT_SetForegroundStatusL() + { + iLiveSession->iBackground = ETrue; + EUNIT_ASSERT( iLiveSession->SetForegroundStatus( ETrue ) == KErrNone ); + EUNIT_ASSERT( !iLiveSession->iBackground ); + EUNIT_ASSERT( iLiveSession->SetForegroundStatus( EFalse ) == KErrNone ); + EUNIT_ASSERT( !iLiveSession->iBackground ); // Still bg + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_CMusEngMceSession::UT_UpdateLcSessionLL() + { + // No MCE session + EUNIT_ASSERT_SPECIFIC_LEAVE( iLiveSession->UpdateLcSessionL(), KErrNotReady ) + + ESTABLISH_OUT_SESSION( iLiveSession ); + + iLiveSession->UpdateLcSessionL(); + + } + // TEST TABLE EUNIT_BEGIN_TEST_TABLE( @@ -1842,264 +2478,442 @@ "UNIT" ) EUNIT_TEST( - "TerminateL - test ", + "LcSessionState - test ", + "CMusEngMceSession", + "LcSessionState", + "FUNCTIONALITY", + SetupL, UT_LcSessionStateL, Teardown) + +EUNIT_TEST( + "RemoteVideoPlayer - test ", + "CMusEngMceSession", + "RemoteVideoPlayer", + "FUNCTIONALITY", + SetupL, UT_RemoteVideoPlayerL, Teardown) + +EUNIT_TEST( + "LocalVideoPlayer - test ", + "CMusEngMceSession", + "LocalVideoPlayer", + "FUNCTIONALITY", + SetupL, UT_LocalVideoPlayerL, Teardown) + +EUNIT_TEST( + "LocalDisplayNameL - test ", + "CMusEngMceSession", + "LocalDisplayNameL", + "FUNCTIONALITY", + SetupL, UT_LocalDisplayNameL, Teardown) + +EUNIT_TEST( + "RemoteDisplayName - test ", + "CMusEngMceSession", + "RemoteDisplayName", + "FUNCTIONALITY", + SetupL, UT_RemoteDisplayNameL, Teardown) + +EUNIT_TEST( + "RemoteDetails - test ", + "CMusEngMceSession", + "RemoteDetails", + "FUNCTIONALITY", + SetupL, UT_RemoteDetailsL, Teardown) + +EUNIT_TEST( + "SetParameter - test ", "CMusEngMceSession", - "TerminateL", + "SetParameter", + "FUNCTIONALITY", + SetupL, UT_SetParameterL, Teardown) + +EUNIT_TEST( + "ParameterValue - test ", + "CMusEngMceSession", + "ParameterValue", + "FUNCTIONALITY", + SetupL, UT_ParameterValueL, Teardown) + +EUNIT_TEST( + "IsLcAudioMutedL - test ", + "CMusEngMceSession", + "IsLcAudioMutedL", + "FUNCTIONALITY", + SetupL, UT_IsLcAudioMutedL, Teardown) + +EUNIT_TEST( + "MuteLcAudioL - test ", + "CMusEngMceSession", + "MuteLcAudioL", "FUNCTIONALITY", - SetupL, UT_CMusEngMceSession_TerminateLL, Teardown) + SetupL, UT_MuteLcAudioL, Teardown) + +EUNIT_TEST( + "MuteLcMicL - test ", + "CMusEngMceSession", + "MuteLcMicL", + "FUNCTIONALITY", + SetupL, UT_MuteLcMicL, Teardown) + +EUNIT_TEST( + "EnableLcLoudspeakerL - test ", + "CMusEngMceSession", + "EnableLcLoudspeakerL", + "FUNCTIONALITY", + SetupL, UT_EnableLcLoudspeakerL, Teardown) + +EUNIT_TEST( + "SetLcVolumeL - test ", + "CMusEngMceSession", + "SetLcVolumeL", + "FUNCTIONALITY", + SetupL, UT_SetLcVolumeL, Teardown) EUNIT_TEST( "GetSessionTime - test ", "CMusEngMceSession", "GetSessionTime", "FUNCTIONALITY", - SetupL, UT_CMusEngMceSession_GetSessionTimeL, Teardown) - -EUNIT_TEST( - "ConnectionActive - test ", - "CMusEngMceSession", - "ConnectionActive", - "FUNCTIONALITY", - SetupL, UT_CMusEngMceSession_ConnectionActiveL, Teardown) - -EUNIT_TEST( - "ContainsAudioL - test ", - "CMusEngMceSession", - "ContainsAudioL", - "FUNCTIONALITY", - SetupL, UT_CMusEngMceSession_ContainsAudioLL, Teardown) - -EUNIT_TEST( - "IsMutedL - test ", - "CMusEngMceSession", - "IsMutedL", - "FUNCTIONALITY", - SetupL, UT_CMusEngMceSession_IsMutedLL, Teardown) - -EUNIT_TEST( - "OrientationL - test ", - "CMusEngMceSession", - "OrientationL", - "FUNCTIONALITY", - SetupL, UT_CMusEngMceSession_OrientationLL, Teardown) - -EUNIT_TEST( - "SetOrientationL - test ", - "CMusEngMceSession", - "SetOrientationL", - "FUNCTIONALITY", - SetupL, UT_CMusEngMceSession_SetOrientationLL, Teardown) - -EUNIT_TEST( - "VolumeUpL - test ", - "CMusEngMceSession", - "VolumeUpL", - "FUNCTIONALITY", - SetupL, UT_CMusEngMceSession_VolumeUpLL, Teardown) - -EUNIT_TEST( - "VolumeDownL - test ", - "CMusEngMceSession", - "VolumeDownL", - "FUNCTIONALITY", - SetupL, UT_CMusEngMceSession_VolumeDownLL, Teardown) - -EUNIT_TEST( - "SetVolumeL - test ", - "CMusEngMceSession", - "SetVolumeL", - "FUNCTIONALITY", - SetupL, UT_CMusEngMceSession_SetVolumeLL, Teardown) - -EUNIT_TEST( - "EnableDisplay - test ", - "CMusEngMceSession", - "EnableDisplay", - "FUNCTIONALITY", - SetupL, UT_CMusEngMceSession_EnableDisplayL, Teardown) - -EUNIT_TEST( - "MuteL - test ", - "CMusEngMceSession", - "MuteL", - "FUNCTIONALITY", - SetupL, UT_CMusEngMceSession_MuteLL, Teardown) - -EUNIT_TEST( - "UnmuteL - test ", - "CMusEngMceSession", - "UnmuteL", - "FUNCTIONALITY", - SetupL, UT_CMusEngMceSession_UnmuteLL, Teardown) + SetupL, UT_GetSessionTimeL, Teardown) EUNIT_TEST( "HandleTermination - test ", "CMusEngMceSession", "HandleTermination", "FUNCTIONALITY", - SetupL, UT_CMusEngMceSession_HandleTerminationL, Teardown) + SetupL, UT_HandleTerminationL, Teardown) EUNIT_TEST( "AdjustVideoCodecL - test ", "CMusEngMceSession", "AdjustVideoCodecL", "FUNCTIONALITY", - SetupL, UT_CMusEngMceSession_AdjustVideoCodecLL, Teardown) + SetupL, UT_AdjustVideoCodecL, Teardown) EUNIT_TEST( "AdjustAudioCodecL - test ", "CMusEngMceSession", "AdjustAudioCodecL", "FUNCTIONALITY", - SetupL, UT_CMusEngMceSession_AdjustAudioCodecLL, Teardown) + SetupL, UT_AdjustAudioCodecL, Teardown) EUNIT_TEST( "RectChangedL - test ", "CMusEngMceSession", "RectChangedL", "FUNCTIONALITY", - SetupL, UT_CMusEngMceSession_RectChangedLL, Teardown) + SetupL, UT_RectChangedL, Teardown) EUNIT_TEST( "SetSessionSdpLinesL - test ", "CMusEngMceSession", "SetSessionSdpLinesL", "FUNCTIONALITY", - SetupL, UT_CMusEngMceSession_SetSessionSdpLinesLL, Teardown) + SetupL, UT_SetSessionSdpLinesL, Teardown) EUNIT_TEST( + "SetSessionSdpLinesL - operator variant test ", + "CMusEngMceSession", + "SetSessionSdpLinesL", + "FUNCTIONALITY", + SetupL, UT_SetSessionSdpLines_OperatorL, Teardown) + +EUNIT_TEST( + "SetMediaSdpLinesL - test ", + "CMusEngMceSession", + "SetMediaSdpLinesL", + "FUNCTIONALITY", + SetupL, UT_SetMediaSdpLinesL, Teardown) + +EUNIT_TEST( + "SetMediaSdpLinesL - operator variant test ", + "CMusEngMceSession", + "SetMediaSdpLinesL", + "FUNCTIONALITY", + SetupL, UT_SetMediaSdpLines_OperatorL, Teardown) + +EUNIT_TEST( "AdjustStreamsAndCodecsL - test ", "CMusEngMceSession", "AdjustStreamsAndCodecsL", "FUNCTIONALITY", - SetupL, UT_CMusEngMceSession_AdjustStreamsAndCodecsLL, Teardown) + SetupL, UT_AdjustStreamsAndCodecsL, Teardown) EUNIT_TEST( "IncomingSession - test ", "CMusEngMceSession", "IncomingSession", "FUNCTIONALITY", - SetupL, UT_CMusEngMceSession_IncomingSessionL, Teardown) + SetupL, UT_IncomingSessionL, Teardown) EUNIT_TEST( "IncomingUpdate - test ", "CMusEngMceSession", "IncomingUpdate", "FUNCTIONALITY", - SetupL, UT_CMusEngMceSession_IncomingUpdateL, Teardown) + SetupL, UT_IncomingUpdateL, Teardown) EUNIT_TEST( "StreamStateChangedL( source ) - test ", "CMusEngMceSession", "StreamStateChangedL( source )", "FUNCTIONALITY", - SetupL, UT_CMusEngMceSession_StreamStateChangedWithSourceL, Teardown) + SetupL, UT_StreamStateChangedWithSourceL, Teardown) EUNIT_TEST( "SessionStateChanged - test ", "CMusEngMceSession", "SessionStateChanged", "FUNCTIONALITY", - SetupL, UT_CMusEngMceSession_SessionStateChangedL, Teardown) + SetupL, UT_SessionStateChangedL, Teardown) + +EUNIT_TEST( + "HandleSessionStateChanged - encoder key storing ", + "CMusEngMceSession", + "HandleSessionStateChanged", + "FUNCTIONALITY", + SetupL, UT_HandleSessionStateChanged_EncoderKeyStoringL, Teardown) EUNIT_TEST( "SessionConnectionStateChanged - test ", "CMusEngMceSession", "SessionConnectionStateChanged", "FUNCTIONALITY", - SetupL, UT_CMusEngMceSession_SessionConnectionStateChangedL, Teardown) + SetupL, UT_SessionConnectionStateChangedL, Teardown) EUNIT_TEST( "Failed - test ", "CMusEngMceSession", "Failed", "FUNCTIONALITY", - SetupL, UT_CMusEngMceSession_FailedL, Teardown) + SetupL, UT_FailedL, Teardown) EUNIT_TEST( "UpdateFailed - test ", "CMusEngMceSession", "UpdateFailed", "FUNCTIONALITY", - SetupL, UT_CMusEngMceSession_UpdateFailedL, Teardown) + SetupL, UT_UpdateFailedL, Teardown) EUNIT_TEST( "StreamStateChanged - test ", "CMusEngMceSession", "StreamStateChanged", "FUNCTIONALITY", - SetupL, UT_CMusEngMceSession_StreamStateChangedL, Teardown) + SetupL, UT_StreamStateChangedL, Teardown) EUNIT_TEST( "StreamStateChangedL (sink ) - test ", "CMusEngMceSession", "StreamStateChangedL( sink )", "FUNCTIONALITY", - SetupL, UT_CMusEngMceSession_StreamStateChangedWithSinkL, Teardown) + SetupL, UT_StreamStateChangedWithSinkL, Teardown) EUNIT_TEST( "SRReceived - test ", "CMusEngMceSession", "SRReceived", "FUNCTIONALITY", - SetupL, UT_CMusEngMceSession_SRReceivedL, Teardown) + SetupL, UT_SRReceivedL, Teardown) EUNIT_TEST( "RRReceived - test ", "CMusEngMceSession", "RRReceived", "FUNCTIONALITY", - SetupL, UT_CMusEngMceSession_RRReceivedL, Teardown) - -EUNIT_TEST( - "InactivityTimeout - test ", - "CMusEngMceSession", - "InactivityTimeout", - "FUNCTIONALITY", - SetupL, UT_CMusEngMceSession_InactivityTimeoutL, Teardown) + SetupL, UT_RRReceivedL, Teardown) EUNIT_TEST( "SsrcAdded - test ", "CMusEngMceSession", "SsrcAdded", "FUNCTIONALITY", - SetupL, UT_CMusEngMceSession_SsrcAddedL, Teardown) + SetupL, UT_SsrcAddedL, Teardown) EUNIT_TEST( "SsrcRemoved - test ", "CMusEngMceSession", "SsrcRemoved", "FUNCTIONALITY", - SetupL, UT_CMusEngMceSession_SsrcRemovedL, Teardown) -EUNIT_TEST( - "IsDisplayEnabledL - test ", - "CMusEngMceSession", - "IsDisplayEnabledL", - "FUNCTIONALITY", - SetupL, UT_CMusEngMceSession_IsDisplayEnabledLL, Teardown) + SetupL, UT_SsrcRemovedL, Teardown) EUNIT_TEST( "UpdateTimerEvent - test ", "CMusEngMceSession", "UpdateTimerEvent", "FUNCTIONALITY", - SetupL, UT_CMusEngMceSession_UpdateTimerEventL, Teardown) + SetupL, UT_UpdateTimerEventL, Teardown) EUNIT_TEST( "IsRoamingBetweenAPsAllowed - test ", "CMusEngMceSession", "IsRoamingBetweenAPsAllowed", "FUNCTIONALITY", - SetupL, UT_CMusEngMceSession_IsRoamingBetweenAPsAllowedL, Teardown) - + SetupL, UT_IsRoamingBetweenAPsAllowedL, Teardown) + +EUNIT_TEST( + "SaveContactL - test ", + "CMusEngMceSession", + "SaveContactL", + "FUNCTIONALITY", + SetupL, UT_SaveContactL, Teardown) + +EUNIT_TEST( + "Rect - test ", + "CMusEngMceSession", + "Rect", + "FUNCTIONALITY", + SetupL, UT_RectL, Teardown) + +EUNIT_TEST( + "SetRectL - test ", + "CMusEngMceSession", + "SetRectL", + "FUNCTIONALITY", + SetupL, UT_SetRectLL, Teardown) + +EUNIT_TEST( + "SecondaryRect - test ", + "CMusEngMceSession", + "SecondaryRect", + "FUNCTIONALITY", + SetupL, UT_SecondaryRectL, Teardown) + +EUNIT_TEST( + "SetSecondaryRectL - test ", + "CMusEngMceSession", + "SetSecondaryRectL", + "FUNCTIONALITY", + SetupL, UT_SetSecondaryRectLL, Teardown) + EUNIT_TEST( - "VolumeChanged - test ", + "EnableDisplayL - test ", + "CMusEngMceSession", + "EnableDisplayL", + "FUNCTIONALITY", + SetupL, UT_EnableDisplayLL, Teardown) + +EUNIT_TEST( + "SetOrientationL - test ", + "CMusEngMceSession", + "SetOrientationL", + "FUNCTIONALITY", + SetupL, UT_CMusEngMceSession_SetOrientationLL, Teardown) + +EUNIT_TEST( + "SetEncodingDeviceL - test ", + "CMusEngMceSession", + "SetEncodingDeviceL", + "FUNCTIONALITY", + SetupL, UT_SetEncodingDeviceLL, Teardown) + +EUNIT_TEST( + "SetCodecConfigKeyL - test ", + "CMusEngMceSession", + "SetCodecConfigKeyL", + "FUNCTIONALITY", + SetupL, UT_SetCodecConfigKeyLL, Teardown) + +EUNIT_TEST( + "ReadCodecConfigKeyL - test ", + "CMusEngMceSession", + "ReadCodecConfigKeyL", + "FUNCTIONALITY", + SetupL, UT_ReadCodecConfigKeyLL, Teardown) + +EUNIT_TEST( + "StoreEncoderConfigInfoL - test ", + "CMusEngMceSession", + "StoreEncoderConfigInfoL", + "FUNCTIONALITY", + SetupL, UT_StoreEncoderConfigInfoLL, Teardown) + +EUNIT_TEST( + "StreamStreaming - test ", "CMusEngMceSession", - "VolumeChanged", + "StreamStreaming", + "FUNCTIONALITY", + SetupL, UT_StreamStreamingL, Teardown) + +EUNIT_TEST( + "InformObserverAboutSessionStateChange - test ", + "CMusEngMceSession", + "InformObserverAboutSessionStateChange", + "FUNCTIONALITY", + SetupL, UT_InformObserverAboutSessionStateChangeL, Teardown) + +EUNIT_TEST( + "InformObserverAboutSessionUpdate - test ", + "CMusEngMceSession", + "InformObserverAboutSessionUpdate", + "FUNCTIONALITY", + SetupL, UT_InformObserverAboutSessionUpdateL, Teardown) + +EUNIT_TEST( + "InformObserverAboutSessionFailure - test ", + "CMusEngMceSession", + "InformObserverAboutSessionFailure", + "FUNCTIONALITY", + SetupL, UT_InformObserverAboutSessionFailureL, Teardown) + +EUNIT_TEST( + "InformObserverAboutPlayerStateChange - test ", + "CMusEngMceSession", + "InformObserverAboutPlayerStateChange", + "FUNCTIONALITY", + SetupL, UT_InformObserverAboutPlayerStateChangeL, Teardown) + +EUNIT_TEST( + "InformObserverAboutPlayerUpdate - test ", + "CMusEngMceSession", + "InformObserverAboutPlayerUpdate", "FUNCTIONALITY", - SetupL, UT_CMusEngMceSession_VolumeChangedL, Teardown) + SetupL, UT_InformObserverAboutPlayerUpdateL, Teardown) + +EUNIT_TEST( + "InformObserverAboutPlayerFailure - test ", + "CMusEngMceSession", + "InformObserverAboutPlayerFailure", + "FUNCTIONALITY", + SetupL, UT_InformObserverAboutPlayerFailureL, Teardown) +EUNIT_TEST( + "LcUiProviderL - test ", + "CMusEngMceSession", + "LcUiProviderL", + "FUNCTIONALITY", + SetupL, UT_LcUiProviderL, Teardown) +EUNIT_TEST( + "IsBackgroundStartup - test ", + "CMusEngMceSession", + "IsBackgroundStartup", + "FUNCTIONALITY", + SetupL, UI_IsBackgroundStartupL, Teardown) + +EUNIT_TEST( + "InformUiProviderAboutReceivingStart - test ", + "CMusEngMceSession", + "InformUiProviderAboutReceivingStart", + "FUNCTIONALITY", + SetupL, UT_InformUiProviderAboutReceivingStartL, Teardown) + +EUNIT_TEST( + "SetForegroundStatus - test ", + "CMusEngMceSession", + "SetForegroundStatus", + "FUNCTIONALITY", + SetupL, UT_SetForegroundStatusL, Teardown) + +EUNIT_TEST( + "UpdateLcSessionL - test ", + "CMusEngMceSession", + "UpdateL", + "FUNCTIONALITY", + SetupL, UT_UpdateLcSessionLL, Teardown) + + EUNIT_END_TEST_TABLE // END OF FILE + + diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshengine/tsrc/ut_engine/src/ut_musengmceutils.cpp --- a/mmsharing/mmshengine/tsrc/ut_engine/src/ut_musengmceutils.cpp Thu Aug 19 09:51:39 2010 +0300 +++ b/mmsharing/mmshengine/tsrc/ut_engine/src/ut_musengmceutils.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -97,16 +97,6 @@ CEUnitTestSuiteClass::ConstructL(); } - -// ----------------------------------------------------------------------------- -// From MMusSipProfileUser -// ----------------------------------------------------------------------------- -// -TBool UT_MusEngMceUtils::IsRoamingBetweenAPsAllowed() - { - return ETrue; // Dummy implementation - } - // ----------------------------------------------------------------------------- // @@ -115,7 +105,9 @@ void UT_MusEngMceUtils::SetupL() { iManager = CMceManager::NewL( TUid::Null(), NULL ); - iProfileHandler = CMusSipProfileHandler::NewL( *this ); + iObserver = new( ELeave ) CMusEngObserverStub; + iObserver->iRoamingBetweenAPsAllowed = ETrue; + iProfileHandler = CMusSipProfileHandler::NewL( *iObserver ); iProfileHandler->CreateProfileL( KSipProfileId ); iEmptySession = CMceOutSession::NewL( *iManager, @@ -162,8 +154,10 @@ // Video part CMceVideoStream* videoIn = CMceVideoStream::NewLC(); - videoIn->AddSinkL( CMceDisplaySink::NewLC( *iManager ) ); + CMceDisplaySink* receivingDisplay = CMceDisplaySink::NewLC( *iManager ); + videoIn->AddSinkL( receivingDisplay ); CleanupStack::Pop(); + iReceivingDisplay = receivingDisplay; videoIn->SetSourceL( CMceRtpSource::NewLC() ); CleanupStack::Pop(); @@ -172,6 +166,56 @@ CleanupStack::Pop( videoIn ); } +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_MusEngMceUtils::Setup2L() + { + iManager = CMceManager::NewL( TUid::Null(), NULL ); + iObserver = new( ELeave ) CMusEngObserverStub; + iObserver->iRoamingBetweenAPsAllowed = ETrue; + iProfileHandler = CMusSipProfileHandler::NewL( *iObserver ); + + iProfileHandler->CreateProfileL( KSipProfileId ); + iEmptySession = CMceOutSession::NewL( *iManager, + *iProfileHandler->Profile(), + KTestRecipientSipUri8() ); + + // Contruct an outgoing video sesssion + iVideoOutSession = CMceOutSession::NewL( *iManager, + *iProfileHandler->Profile(), + KTestRecipientSipUri8() ); + + + CMceVideoStream* videoOut = CMceVideoStream::NewLC(); + + videoOut->AddSinkL( CMceRtpSink::NewLC() ); + CleanupStack::Pop(); + + videoOut->AddSinkL( CMceDisplaySink::NewLC( *iManager ) ); + CleanupStack::Pop(); + + videoOut->SetSourceL( CMceCameraSource::NewLC( *iManager ) ); + CleanupStack::Pop(); + + // Video part + CMceVideoStream* videoIn = CMceVideoStream::NewLC(); + + CMceDisplaySink* receivingDisplay = CMceDisplaySink::NewLC( *iManager ); + videoIn->AddSinkL( receivingDisplay ); + CleanupStack::Pop(); + iReceivingDisplay = receivingDisplay; + + videoIn->SetSourceL( CMceRtpSource::NewLC() ); + CleanupStack::Pop(); + + videoOut->BindL( videoIn ); + CleanupStack::Pop( videoIn ); + + iVideoOutSession->AddStreamL( videoOut ); + CleanupStack::Pop( videoOut ); + } // ----------------------------------------------------------------------------- // @@ -182,8 +226,11 @@ delete iEmptySession; delete iVideoOutSession; delete iVideoInSession; + iVideoInSession = NULL; delete iProfileHandler; + delete iObserver; delete iManager; + iReceivingDisplay = NULL; // Not owned } @@ -196,7 +243,7 @@ // // ----------------------------------------------------------------------------- // -void UT_MusEngMceUtils::UT_MusEngMceUtils_IsVideoInStreamL() +void UT_MusEngMceUtils::UT_IsVideoInStreamL() { // Stream 0 is audio stream EUNIT_ASSERT( !MusEngMceUtils::IsVideoInStream( @@ -221,7 +268,31 @@ // // ----------------------------------------------------------------------------- // -void UT_MusEngMceUtils::UT_MusEngMceUtils_IsAudioInStreamL() +void UT_MusEngMceUtils::UT_IsVideoOutStreamL() + { + // Stream 0 is audio stream + EUNIT_ASSERT( !MusEngMceUtils::IsVideoOutStream( + *iVideoInSession->Streams()[0] ) ) + + // No sink + CMceVideoStream* videoStream = CMceVideoStream::NewLC(); + EUNIT_ASSERT( !MusEngMceUtils::IsVideoOutStream( *videoStream ) ) + CleanupStack::PopAndDestroy( videoStream ); + + // display sink + EUNIT_ASSERT( !MusEngMceUtils::IsVideoOutStream( + *iVideoInSession->Streams()[1] ) ) + + // Video outstream + EUNIT_ASSERT( MusEngMceUtils::IsVideoOutStream( + *iVideoOutSession->Streams()[0] ) ) + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_MusEngMceUtils::UT_IsAudioInStreamL() { // Stream 0 is video stream EUNIT_ASSERT( !MusEngMceUtils::IsAudioInStream( @@ -248,7 +319,7 @@ // // ----------------------------------------------------------------------------- // -void UT_MusEngMceUtils::UT_MusEngMceUtils_GetVideoOutStreamLL() +void UT_MusEngMceUtils::UT_GetVideoOutStreamLL() { // No streams, must fail EUNIT_ASSERT_SPECIFIC_LEAVE( @@ -273,15 +344,30 @@ MusEngMceUtils::GetVideoOutStreamL( *iVideoInSession ), KErrNotFound ) - // One outgoing video stream, succeeds + // One incoming video stream with bound outstream, must find bound stream + CMceVideoStream* boundVideoOut = CMceVideoStream::NewLC(); + boundVideoOut->AddSinkL( CMceRtpSink::NewLC() ); + CleanupStack::Pop(); + boundVideoOut->SetSourceL( CMceCameraSource::NewLC( *iManager ) ); + CleanupStack::Pop(); + reinterpret_cast( + iVideoInSession->Streams()[ 1 ] )->BindL( boundVideoOut ); + CleanupStack::Pop( boundVideoOut ); CMceVideoStream* videoStream = MusEngMceUtils::GetVideoOutStreamL( - *iVideoOutSession ); + *iVideoInSession ); + EUNIT_ASSERT( videoStream ) + EUNIT_ASSERT( videoStream->Type() == KMceVideo ) + EUNIT_ASSERT( videoStream->Sinks().Count() == 1 ) // Rtp + EUNIT_ASSERT( videoStream->Sinks()[0]->Type() == KMceRTPSink ) + + // One outgoing video stream, succeeds + videoStream = MusEngMceUtils::GetVideoOutStreamL( *iVideoOutSession ); EUNIT_ASSERT( videoStream ) EUNIT_ASSERT( videoStream->Type() == KMceVideo ) EUNIT_ASSERT( videoStream->Sinks().Count() == 2 ) // Rtp, Display EUNIT_ASSERT( videoStream->Sinks()[0]->Type() == KMceRTPSink ) EUNIT_ASSERT( videoStream->Sinks()[1]->Type() == KMceDisplaySink ) - + // Add another stream CMceVideoStream* videoOut = CMceVideoStream::NewLC(); @@ -306,7 +392,7 @@ // // ----------------------------------------------------------------------------- // -void UT_MusEngMceUtils::UT_MusEngMceUtils_GetVideoInStreamLL() +void UT_MusEngMceUtils::UT_GetVideoInStreamLL() { // No streams, must fail EUNIT_ASSERT_SPECIFIC_LEAVE( @@ -362,7 +448,7 @@ // // ----------------------------------------------------------------------------- // -void UT_MusEngMceUtils::UT_MusEngMceUtils_GetRecordingStreamL() +void UT_MusEngMceUtils::UT_GetRecordingStreamL() { CMceVideoStream* recordingStream = MusEngMceUtils::GetRecordingStream( *iVideoInSession ); @@ -392,7 +478,7 @@ // From stream // ----------------------------------------------------------------------------- // -void UT_MusEngMceUtils::UT_MusEngMceUtils_GetMediaSinkL() +void UT_MusEngMceUtils::UT_GetMediaSinkFromStreamL() { CMceMediaSink* sink = MusEngMceUtils::GetMediaSink( *(iVideoInSession->Streams()[0]), @@ -412,7 +498,7 @@ // From stream // ----------------------------------------------------------------------------- // -void UT_MusEngMceUtils::UT_MusEngMceUtils_GetMediaSinkLL() +void UT_MusEngMceUtils::UT_GetMediaSinkLFromStreamL() { CMceMediaSink* sink = NULL; EUNIT_ASSERT_SPECIFIC_LEAVE( @@ -430,7 +516,7 @@ // From session // ----------------------------------------------------------------------------- // -void UT_MusEngMceUtils::UT_MusEngMceUtils_GetMediaSink2L() +void UT_MusEngMceUtils::UT_GetMediaSinkFromSessionL() { CMceMediaSink* sink = MusEngMceUtils::GetMediaSink( *iEmptySession, KMceRTPSink ); @@ -447,7 +533,7 @@ // From session // ----------------------------------------------------------------------------- // -void UT_MusEngMceUtils::UT_MusEngMceUtils_GetMediaSinkL2L() +void UT_MusEngMceUtils::UT_GetMediaSinkLFromSessionL() { CMceMediaSink* sink = NULL; EUNIT_ASSERT_SPECIFIC_LEAVE( MusEngMceUtils::GetMediaSinkL( *iEmptySession, @@ -463,7 +549,7 @@ // // ----------------------------------------------------------------------------- // -void UT_MusEngMceUtils::UT_MusEngMceUtils_GetCameraLL() +void UT_MusEngMceUtils::UT_GetCameraLL() { // empty session fails EUNIT_ASSERT_SPECIFIC_LEAVE( MusEngMceUtils::GetCameraL( *iEmptySession ), @@ -497,7 +583,7 @@ // // ----------------------------------------------------------------------------- // -void UT_MusEngMceUtils::UT_MusEngMceUtils_GetFileSourceLL() +void UT_MusEngMceUtils::UT_GetFileSourceLL() { // empty session fails EUNIT_ASSERT_SPECIFIC_LEAVE( @@ -538,7 +624,7 @@ // // ----------------------------------------------------------------------------- // -void UT_MusEngMceUtils::UT_MusEngMceUtils_GetDisplayL() +void UT_MusEngMceUtils::UT_GetDisplayL() { CMceDisplaySink* display = MusEngMceUtils::GetDisplay( *iEmptySession ); @@ -555,7 +641,7 @@ // // ----------------------------------------------------------------------------- // -void UT_MusEngMceUtils::UT_MusEngMceUtils_GetDisplayLL() +void UT_MusEngMceUtils::UT_GetDisplayLL() { CMceDisplaySink* display = NULL; @@ -573,7 +659,7 @@ // // ----------------------------------------------------------------------------- // -void UT_MusEngMceUtils::UT_MusEngMceUtils_AddDisplayLL() +void UT_MusEngMceUtils::UT_AddDisplayLL() { TRect rect( 110, 111, 112, 113 ); @@ -617,6 +703,14 @@ EUNIT_ASSERT_EQUALS( display->DisplayRectL(), newRect ); CleanupStack::PopAndDestroy( videoStream ); + + // Add disabled display + CMceVideoStream* videoStream2 = CMceVideoStream::NewLC(); + MusEngMceUtils::AddDisplayL( *videoStream2, *iManager, rect, ETrue ); + EUNIT_ASSERT_EQUALS( videoStream2->Sinks().Count(), 1 ) + EUNIT_ASSERT_EQUALS( videoStream2->Sinks()[0]->Type(), KMceDisplaySink ) + EUNIT_ASSERT( !videoStream2->Sinks()[0]->IsEnabled() ); + CleanupStack::PopAndDestroy( videoStream2 ); } @@ -624,7 +718,7 @@ // // ----------------------------------------------------------------------------- // -void UT_MusEngMceUtils::UT_MusEngMceUtils_AddSpeakerLL() +void UT_MusEngMceUtils::UT_AddSpeakerLL() { // Check that speaker cannot be added to video stream @@ -666,7 +760,7 @@ // // ----------------------------------------------------------------------------- // -void UT_MusEngMceUtils::UT_MusEngMceUtils_DisableStreamLL() +void UT_MusEngMceUtils::UT_DisableStreamLL() { CMceAudioStream* audioStream = CMceAudioStream::NewLC(); @@ -707,8 +801,72 @@ CleanupStack::PopAndDestroy( audioStream ); } +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_MusEngMceUtils::UT_GetReceivingDisplayL() + { + CMceDisplaySink* display = MusEngMceUtils::GetReceivingDisplay( *iEmptySession ); + + EUNIT_ASSERT( !display ) + + display = MusEngMceUtils::GetReceivingDisplay( *iVideoOutSession ); + + EUNIT_ASSERT( display ) + EUNIT_ASSERT( display->Type() == KMceDisplaySink ) + EUNIT_ASSERT( display == iReceivingDisplay ) + } +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_MusEngMceUtils::UT_GetReceivingDisplayLL() + { + CMceDisplaySink* display = NULL; + + EUNIT_ASSERT_SPECIFIC_LEAVE( MusEngMceUtils::GetReceivingDisplayL( *iEmptySession ), + KErrNotFound ) + + display = MusEngMceUtils::GetReceivingDisplayL( *iVideoOutSession ); + + EUNIT_ASSERT( display ) + EUNIT_ASSERT( display->Type() == KMceDisplaySink ) + EUNIT_ASSERT( display == iReceivingDisplay ) + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_MusEngMceUtils::UT_GetVfDisplayL() + { + CMceDisplaySink* display = MusEngMceUtils::GetVfDisplay( *iEmptySession ); + + EUNIT_ASSERT( !display ) + + display = MusEngMceUtils::GetVfDisplay( *iVideoOutSession ); + + EUNIT_ASSERT( display ) + EUNIT_ASSERT( display->Type() == KMceDisplaySink ) + EUNIT_ASSERT( display != iReceivingDisplay ) + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_MusEngMceUtils::UT_EnableInactivityTimerL() + { + // Instream not found, nothing is done + EUNIT_ASSERT_EQUALS( MusEngMceUtils::EnableInactivityTimer( *iEmptySession, 1000 ), KErrNotFound ); + + // In stream found + EUNIT_ASSERT_EQUALS( MusEngMceUtils::EnableInactivityTimer( *iVideoOutSession, 1000 ), KErrNone ); + } + // TEST TABLE EUNIT_BEGIN_TEST_TABLE( @@ -721,113 +879,147 @@ "MusEngMceUtils", "IsVideoInStream", "FUNCTIONALITY", - SetupL, UT_MusEngMceUtils_IsVideoInStreamL, Teardown) + SetupL, UT_IsVideoInStreamL, Teardown) EUNIT_TEST( + "IsVideoOutStream - test ", + "MusEngMceUtils", + "IsVideoOutStream", + "FUNCTIONALITY", + SetupL, UT_IsVideoOutStreamL, Teardown) + +EUNIT_TEST( "IsAudioInStream - test ", "MusEngMceUtils", "IsAudioInStream", "FUNCTIONALITY", - SetupL, UT_MusEngMceUtils_IsAudioInStreamL, Teardown) + SetupL, UT_IsAudioInStreamL, Teardown) EUNIT_TEST( "GetVideoOutStreamL - test ", "MusEngMceUtils", "GetVideoOutStreamL", "FUNCTIONALITY", - SetupL, UT_MusEngMceUtils_GetVideoOutStreamLL, Teardown) + SetupL, UT_GetVideoOutStreamLL, Teardown) EUNIT_TEST( "GetVideoInStreamL - test ", "MusEngMceUtils", "GetVideoInStreamL", "FUNCTIONALITY", - SetupL, UT_MusEngMceUtils_GetVideoInStreamLL, Teardown) + SetupL, UT_GetVideoInStreamLL, Teardown) EUNIT_TEST( "GetRecordingStream - test ", "MusEngMceUtils", "GetRecordingStream", "FUNCTIONALITY", - SetupL, UT_MusEngMceUtils_GetRecordingStreamL, Teardown) + SetupL, UT_GetRecordingStreamL, Teardown) EUNIT_TEST( "GetMediaSink - test ", "MusEngMceUtils", "GetMediaSink", "FUNCTIONALITY", - SetupL, UT_MusEngMceUtils_GetMediaSinkL, Teardown) + SetupL, UT_GetMediaSinkFromStreamL, Teardown) EUNIT_TEST( "GetMediaSinkL - test ", "MusEngMceUtils", "GetMediaSinkL", "FUNCTIONALITY", - SetupL, UT_MusEngMceUtils_GetMediaSinkLL, Teardown) + SetupL, UT_GetMediaSinkLFromStreamL, Teardown) EUNIT_TEST( "GetMediaSink2 - test ", "MusEngMceUtils", "GetMediaSink2", "FUNCTIONALITY", - SetupL, UT_MusEngMceUtils_GetMediaSink2L, Teardown) + SetupL, UT_GetMediaSinkFromSessionL, Teardown) EUNIT_TEST( "GetMediaSinkL2 - test ", "MusEngMceUtils", "GetMediaSinkL2", "FUNCTIONALITY", - SetupL, UT_MusEngMceUtils_GetMediaSinkL2L, Teardown) + SetupL, UT_GetMediaSinkLFromSessionL, Teardown) EUNIT_TEST( "GetCameraL - test ", "MusEngMceUtils", "GetCameraL", "FUNCTIONALITY", - SetupL, UT_MusEngMceUtils_GetCameraLL, Teardown) + SetupL, UT_GetCameraLL, Teardown) EUNIT_TEST( "GetFileSourceL - test ", "MusEngMceUtils", "GetFileSourceL", "FUNCTIONALITY", - SetupL, UT_MusEngMceUtils_GetFileSourceLL, Teardown) + SetupL, UT_GetFileSourceLL, Teardown) EUNIT_TEST( "GetDisplay - test ", "MusEngMceUtils", "GetDisplay", "FUNCTIONALITY", - SetupL, UT_MusEngMceUtils_GetDisplayL, Teardown) + SetupL, UT_GetDisplayL, Teardown) EUNIT_TEST( "GetDisplayL - test ", "MusEngMceUtils", "GetDisplayL", "FUNCTIONALITY", - SetupL, UT_MusEngMceUtils_GetDisplayLL, Teardown) + SetupL, UT_GetDisplayLL, Teardown) EUNIT_TEST( "AddDisplayL - test ", "MusEngMceUtils", "AddDisplayL", "FUNCTIONALITY", - SetupL, UT_MusEngMceUtils_AddDisplayLL, Teardown) + SetupL, UT_AddDisplayLL, Teardown) EUNIT_TEST( "AddSpeakerL - test ", "MusEngMceUtils", "AddSpeakerL", "FUNCTIONALITY", - SetupL, UT_MusEngMceUtils_AddSpeakerLL, Teardown) + SetupL, UT_AddSpeakerLL, Teardown) EUNIT_TEST( "DisableStreamL - test ", "MusEngMceUtils", "DisableStreamL", "FUNCTIONALITY", - SetupL, UT_MusEngMceUtils_DisableStreamLL, Teardown) + SetupL, UT_DisableStreamLL, Teardown) + +EUNIT_TEST( + "GetReceivingDisplay - test ", + "MusEngMceUtils", + "GetReceivingDisplay", + "FUNCTIONALITY", + Setup2L, UT_GetReceivingDisplayL, Teardown) +EUNIT_TEST( + "GetReceivingDisplayL - test ", + "MusEngMceUtils", + "GetReceivingDisplayL", + "FUNCTIONALITY", + Setup2L, UT_GetReceivingDisplayLL, Teardown) + +EUNIT_TEST( + "GetVfDisplay - test ", + "MusEngMceUtils", + "GetVfDisplay", + "FUNCTIONALITY", + Setup2L, UT_GetVfDisplayL, Teardown) + +EUNIT_TEST( + "EnableInactivityTimer - test ", + "MusEngMceUtils", + "EnableInactivityTimer", + "FUNCTIONALITY", + Setup2L, UT_EnableInactivityTimerL, Teardown) EUNIT_END_TEST_TABLE diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshengine/tsrc/ut_engine/src/ut_musengorientationhandler.cpp --- a/mmsharing/mmshengine/tsrc/ut_engine/src/ut_musengorientationhandler.cpp Thu Aug 19 09:51:39 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,217 +0,0 @@ -/* -* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - initial contribution. -* -* Contributors: -* -* Description: -* -*/ - - -// INTERNAL INCLUDES -#include "ut_musengorientationhandler.h" -#include "musengorientationhandler.h" -#include "musengstubs.h" -#include "musengtestdefs.h" -#include "musenglivesession.h" -#include "musengmceutils.h" -#include -#include - -// SYSTEM INCLUDES -#include - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -UT_CMusEngOrientationHandler* UT_CMusEngOrientationHandler::NewL() - { - UT_CMusEngOrientationHandler* self = UT_CMusEngOrientationHandler::NewLC(); - CleanupStack::Pop( self ); - return self; - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -UT_CMusEngOrientationHandler* UT_CMusEngOrientationHandler::NewLC() - { - UT_CMusEngOrientationHandler* self = new( ELeave ) UT_CMusEngOrientationHandler(); - CleanupStack::PushL( self ); - self->ConstructL(); - return self; - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -UT_CMusEngOrientationHandler::~UT_CMusEngOrientationHandler() - { - // NOP - } - - -// ----------------------------------------------------------------------------- -// Default constructor -// ----------------------------------------------------------------------------- -// -UT_CMusEngOrientationHandler::UT_CMusEngOrientationHandler() - { - // NOP - } - - -// ----------------------------------------------------------------------------- -// Second phase construct -// ----------------------------------------------------------------------------- -// -void UT_CMusEngOrientationHandler::ConstructL() - { - // The ConstructL from the base class CEUnitTestSuiteClass must be called. - // It generates the test case table. - CEUnitTestSuiteClass::ConstructL(); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void UT_CMusEngOrientationHandler::SetupL() - { - iObserver = new( ELeave ) CMusEngObserverStub; - - iLiveSession = CMusEngLiveSession::NewL( TRect(0, 0, 100, 100), - *iObserver, - *iObserver, - *iObserver ); - - iLiveSession->iOperatorVariant = EFalse; - - iHandler = CMusEngOrientationHandler::NewL( *iLiveSession, *iObserver ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void UT_CMusEngOrientationHandler::Teardown() - { - delete iHandler; - delete iLiveSession; - delete iObserver; - } - - - -// TEST CASES - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void UT_CMusEngOrientationHandler::UT_NewLL() - { - EUNIT_ASSERT( iHandler ); - } - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void UT_CMusEngOrientationHandler::UT_RefreshOrientationL() - { - ESTABLISH_OUT_SESSION( iLiveSession ) - - // Refresh when both camera and display are enabled - CMceCameraSource* camera = - MusEngMceUtils::GetCameraL( *(iLiveSession->iSession) ); - camera->iIsEnabled = ETrue; - CMceDisplaySink* display = - MusEngMceUtils::GetDisplayL( *(iLiveSession->iSession) ); - display->iIsEnabled = ETrue; - EUNIT_ASSERT( !iHandler->IsActive() ); - iHandler->RefreshOrientationL(); - EUNIT_ASSERT( iHandler->IsActive() ); - EUNIT_ASSERT( !camera->iIsEnabled ); - EUNIT_ASSERT( !display->iIsEnabled ); - iHandler->Cancel(); - iHandler->RunL(); // Simulate completion - EUNIT_ASSERT( !iHandler->IsActive() ); - EUNIT_ASSERT( camera->iIsEnabled ); - EUNIT_ASSERT( display->iIsEnabled ); - - // Refresh when camera is disabled, display disabled - camera->iIsEnabled = EFalse; - display->iIsEnabled = ETrue; - iHandler->RefreshOrientationL(); - EUNIT_ASSERT( iHandler->IsActive() ); - EUNIT_ASSERT( !camera->iIsEnabled ); - EUNIT_ASSERT( !display->iIsEnabled ); - iHandler->Cancel(); - iHandler->RunL(); // Simulate completion - EUNIT_ASSERT( !iHandler->IsActive() ); - EUNIT_ASSERT( !camera->iIsEnabled ); - EUNIT_ASSERT( display->iIsEnabled ); - - // Display and camera gets resumed while delayed orientation handling is ongoing, pausing - // display after handling completes should not happen - camera->iIsEnabled = ETrue; - display->iIsEnabled = EFalse; - iHandler->RefreshOrientationL(); - EUNIT_ASSERT( iHandler->IsActive() ); - EUNIT_ASSERT( !camera->iIsEnabled ); - EUNIT_ASSERT( !display->iIsEnabled ); - display->iIsEnabled = ETrue; - camera->iIsEnabled = ETrue; - iHandler->UpdateL(); - iHandler->Cancel(); - iHandler->RunL(); // Simulate completion - EUNIT_ASSERT( !iHandler->IsActive() ); - EUNIT_ASSERT( camera->iIsEnabled ); - EUNIT_ASSERT( display->iIsEnabled ); - } - - -// TEST TABLE - -EUNIT_BEGIN_TEST_TABLE( - UT_CMusEngOrientationHandler, - "UT_CMusEngLiveSesssion", - "UNIT" ) - -EUNIT_TEST( - "NewL - test ", - "CMusEngOrienationHandler", - "NewL", - "FUNCTIONALITY", - SetupL, UT_NewLL, Teardown) - -EUNIT_TEST( - "UT_RefreshOrientationL - test ", - "CMusEngOrienationHandler", - "NewL", - "FUNCTIONALITY", - SetupL, UT_RefreshOrientationL, Teardown) - -EUNIT_END_TEST_TABLE - -// END OF FILE - - diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshengine/tsrc/ut_engine/src/ut_musengoutsession.cpp --- a/mmsharing/mmshengine/tsrc/ut_engine/src/ut_musengoutsession.cpp Thu Aug 19 09:51:39 2010 +0300 +++ b/mmsharing/mmshengine/tsrc/ut_engine/src/ut_musengoutsession.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -20,15 +20,16 @@ #include "ut_musengoutsession.h" #include "musengstubs.h" #include "musengtestdefs.h" - +#include "sipprofile.h" #include "musenglivesession.h" #include "musengclipsession.h" #include "mussipprofilehandler.h" - +#include "mussessionproperties.h" +#include "contactenginestub.h" // SYSTEM INCLUDES +#include #include - #include #include #include @@ -38,13 +39,15 @@ #include #include #include +#include -#include + #include #include #include +_LIT( KTestContactName, "nokia" ); // ----------------------------------------------------------------------------- // @@ -109,17 +112,25 @@ // void UT_CMusEngOutSession::SetupL() { - iObserver = new( ELeave ) CMusEngObserverStub; - iLiveSession = CMusEngLiveSession::NewL( KNullDesC(), - TRect(0,0, 100,100), - *iObserver, - *iObserver, - *iObserver ); + + PropertyHelper::SetErrorCode( KErrNone ); + + iLcSessionObserver = new( ELeave )CLcSessionObserverStub; + iLcUiProvider = new( ELeave )CLcUiProviderStub; + iAudioRoutingObserver = new( ELeave )CMusEngObserverStub; + // Name is published using publish/subscribe key by Availblity + User::LeaveIfError( RProperty::Set( NMusSessionApi::KCategoryUid, + NMusSessionApi::KContactName, + KTestContactName ) ); + iLiveSession = CMusEngLiveSession::NewL(); + iLiveSession->SetLcSessionObserver( iLcSessionObserver ); + iLiveSession->SetLcUiProvider( iLcUiProvider ); + SIPStrings::OpenL(); - iLiveSession->iPrivate = EFalse; - iLiveSession->iPrivateNumber = EFalse; - + User::LeaveIfError( RProperty::Set( NMusSessionApi::KCategoryUid, + NMusSessionApi::KRemoteSipAddress, + KTestRecipientSipUri ) ); } @@ -131,26 +142,28 @@ { SIPStrings::Close(); delete iLiveSession; - delete iObserver; + delete iLcSessionObserver; + delete iLcUiProvider; + delete iAudioRoutingObserver; + PropertyHelper::SetErrorCode( KErrNone ); + PropertyHelper::Close(); } - // TEST CASES - // ----------------------------------------------------------------------------- // // ----------------------------------------------------------------------------- // -void UT_CMusEngOutSession::UT_CMusEngOutSession_InviteLL() +void UT_CMusEngOutSession::UT_EstablishLcSessionL() { - // Initial state EUNIT_ASSERT( !iLiveSession->iSession ); - // Simulate failing session structure construction. - iLiveSession->InviteL( KTestRecipientSipUri ); + /////////////////////////////////////////////////////////////////////////// + // 1. Simulate failing session structure construction. + iLiveSession->EstablishLcSessionL(); iLiveSession->iSession->iState = CMceSession::EIdle; delete iLiveSession->iSession->Streams()[0]; @@ -158,11 +171,13 @@ iLiveSession->iSession->Streams(); const_cast&>(constStreams)[0] = NULL; - // Normal invite - iLiveSession->InviteL( KTestRecipientSipUri ); + /////////////////////////////////////////////////////////////////////////// + // 2. Normal invite + iLiveSession->EstablishLcSessionL(); EUNIT_ASSERT( iLiveSession->iSession ); // Next assertion ensures that session structure is new + EUNIT_ASSERT( iLiveSession->iSession->Streams().Count() > 0 ); EUNIT_ASSERT( iLiveSession->iSession->Streams()[0] ); EUNIT_ASSERT( *(iLiveSession->iRecipient) == KTestRecipientSipUri8() ); EUNIT_ASSERT( iLiveSession->iSession->State() == CMceSession::EOffering ); @@ -177,15 +192,20 @@ EUNIT_ASSERT( iLiveSession->iSession->iSessionSDPLines->Count() == 1 ); EUNIT_ASSERT( iLiveSession->iSession->iSessionSDPLines->MdcaPoint( 0 ) == KMusEngSessionSdpLineXApplication() ); - - // Normal operator invite + + // Ensure there is no SDP lines at media level + MDesC8Array* mediaSdpLines = + iLiveSession->iSession->Streams()[0]->iMediaSDPLines; + EUNIT_ASSERT( mediaSdpLines ); + EUNIT_ASSERT( mediaSdpLines->MdcaCount() == 0 ); + + /////////////////////////////////////////////////////////////////////////// + // 3. Normal operator invite delete iLiveSession; iLiveSession = NULL; - iLiveSession = CMusEngLiveSession::NewL( KNullDesC, - TRect(0,0, 100,100), - *iObserver, - *iObserver, - *iObserver ); + iLiveSession = CMusEngLiveSession::NewL(); + iLiveSession->SetLcSessionObserver( iLcSessionObserver ); + iLiveSession->SetLcUiProvider( iLcUiProvider ); iLiveSession->iOperatorVariant = ETrue; CSIPProfile* profile = iLiveSession->iSipProfileHandler->Profile(); delete profile->iArray; @@ -193,11 +213,10 @@ profile->iArray = new ( ELeave ) CDesC8ArrayFlat( 1 ); profile->iArray->AppendL( KMusTestUri ); - iLiveSession->InviteL( KTestRecipientSipUri ); + iLiveSession->EstablishLcSessionL(); EUNIT_ASSERT( iLiveSession->iSession ); // Next assertion ensures that session structure is new - EUNIT_ASSERT( iLiveSession->iSession->Streams()[0] ); EUNIT_ASSERT( *(iLiveSession->iRecipient) == KTestRecipientSipUri8() ); EUNIT_ASSERT( iLiveSession->iSession->State() == CMceSession::EOffering ); @@ -211,6 +230,8 @@ EUNIT_ASSERT( iLiveSession->iSession->iHeaders->MdcaPoint( 2 ) == KMusPPreferredIdentityTestHeader() ); + // Ensure there is only a=type and a=application attributes (and no b=TIAS) + // at session level for operator variant EUNIT_ASSERT( iLiveSession->iSession->iSessionSDPLines ); EUNIT_ASSERT( iLiveSession->iSession->iSessionSDPLines->Count() == 2 ); EUNIT_ASSERT( iLiveSession->iSession->iSessionSDPLines->MdcaPoint( 0 ) == @@ -219,77 +240,223 @@ KMusEngSessionSdpLineType() ) EUNIT_ASSERT( iLiveSession->iSession->Streams().Count() > 0 ); - TBool foundBandwidthLineFromMediaLevel( EFalse ); - for ( TInt i = 0; i < iLiveSession->iSession->Streams().Count(); i++ ) - { - if ( iLiveSession->iSession->Streams()[0]->Type() == KMceVideo ) - { - if ( iLiveSession->iSession->Streams()[0]->iMediaSDPLines->MdcaCount() > 0 && - iLiveSession->iSession->Streams()[0]->iMediaSDPLines->MdcaPoint( 0 ) == - KMusEngSessionSdpLineBandwidthField() ) - { - foundBandwidthLineFromMediaLevel = ETrue; - } - } - } - EUNIT_ASSERT( foundBandwidthLineFromMediaLevel ); - - // Try invite again, must fail - TRAPD( error, iLiveSession->InviteL( KTestRecipientSipUri ) ); + EUNIT_ASSERT( iLiveSession->iSession->Streams()[0] ); + EUNIT_ASSERT( iLiveSession->iSession->Streams()[0]->Type() == KMceVideo ); + + // Ensure there is only b=AS and no b=TIAS present at media level + // for operator variant + mediaSdpLines = iLiveSession->iSession->Streams()[0]->iMediaSDPLines; + EUNIT_ASSERT( mediaSdpLines ); + EUNIT_ASSERT( mediaSdpLines->MdcaCount() == 1 ); + EUNIT_ASSERT( mediaSdpLines->MdcaPoint( 0 ) == + KMusEngSessionSdpLineBandwidthField() ); + + /////////////////////////////////////////////////////////////////////////// + // 4. Try invite again, must fail + TRAPD( error, iLiveSession->EstablishLcSessionL() ); MUS_TEST_FORWARD_ALLOC_FAILURE( error ); EUNIT_ASSERT( error == KErrAlreadyExists ); - // Simulate normal session ending, no need for observer call in this case + // 5. Simulate normal session ending, no need for observer call in this case iLiveSession->iSession->iState = CMceSession::ETerminated; // Try again. Establishment must be OK with new MceSession object - iLiveSession->InviteL( KTestRecipientSipUri ); + iLiveSession->EstablishLcSessionL(); EUNIT_ASSERT( iLiveSession->iSession->State() == CMceSession::EOffering ); - - } +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_CMusEngOutSession::UT_EstablishLcSession_RecipientResolvingL() + { + // Manual query from user, + // the user cancels the query (MLcUiProvider::Query returns EFalse) + PropertyHelper::SetErrorCode( KErrNotFound ); + TRAPD( err, iLiveSession->EstablishLcSessionL() ) + if ( err == KErrNoMemory ) + { + User::Leave( err ); + } + EUNIT_ASSERT_EQUALS( KErrCancel, err ) + + // Manual query from user succeeds + iLcSessionObserver->Reset(); + iLcUiProvider->Reset(); + delete iLiveSession; + iLiveSession = NULL; + iLiveSession = CMusEngLiveSession::NewL(); + iLiveSession->SetLcSessionObserver( iLcSessionObserver ); + iLiveSession->SetLcUiProvider( iLcUiProvider ); + iLcUiProvider->iSimulatedReturnValue = ETrue; + iLcUiProvider->iRecipient.Set( KTestRecipient2SipUri ); + PropertyHelper::SetErrorCode( KErrNotFound ); + iLiveSession->EstablishLcSessionL(); + EUNIT_ASSERT_EQUALS( 1, iLiveSession->iTriedInvitations ) + EUNIT_ASSERT_EQUALS( + TInt( CLcUiProviderStub::EInputRecipient ), + iLcUiProvider->iCalledFunction ) + EUNIT_ASSERT_EQUALS( + KTestRecipient2SipUri8(), + *( iLiveSession->iRecipient ) ) + EUNIT_ASSERT_EQUALS( KTestRecipient2SipUri(),iLiveSession->RemoteDisplayName() ) + + // Multiple resolved recipients + iLcSessionObserver->Reset(); + iLcUiProvider->Reset(); + iLcUiProvider->iSimulatedReturnValue = ETrue; + PropertyHelper::SetErrorCode( KErrNone ); + TBuf<200> multipleAddr; + multipleAddr.Append( KTestRecipient2SipUri ); + multipleAddr.Append( _L(",") ); + multipleAddr.Append( KTestRecipientSipUri ); + + User::LeaveIfError( RProperty::Set( NMusSessionApi::KCategoryUid, + NMusSessionApi::KRemoteSipAddress, + multipleAddr ) ); + delete iLiveSession; + iLiveSession = NULL; + iLiveSession = CMusEngLiveSession::NewL(); + iLiveSession->SetLcSessionObserver( iLcSessionObserver ); + iLiveSession->SetLcUiProvider( iLcUiProvider ); + iLiveSession->EstablishLcSessionL(); + + EUNIT_ASSERT_EQUALS( 0, iLiveSession->iTriedInvitations ) + EUNIT_ASSERT_EQUALS( + TInt( CLcUiProviderStub::ESelectRecipient ), + iLcUiProvider->iCalledFunction ) + // Stub selected first one from multiple addresses list + EUNIT_ASSERT_EQUALS( + KTestRecipient2SipUri8(), + *( iLiveSession->iRecipient ) ) + + // Multiple resolved recipient, user doesn't select any + iLcSessionObserver->Reset(); + iLcUiProvider->Reset(); + delete iLiveSession; + iLiveSession = NULL; + iLiveSession = CMusEngLiveSession::NewL(); + iLiveSession->SetLcSessionObserver( iLcSessionObserver ); + iLiveSession->SetLcUiProvider( iLcUiProvider ); + TRAP( err, iLiveSession->EstablishLcSessionL() ); + if ( err == KErrNoMemory ) + { + User::Leave( err ); + } + EUNIT_ASSERT_EQUALS( KErrNotFound, err ) + EUNIT_ASSERT_EQUALS( 0, iLiveSession->iTriedInvitations ) + EUNIT_ASSERT_EQUALS( + TInt( CLcUiProviderStub::ESelectRecipient ), + iLcUiProvider->iCalledFunction ) + + // Malformed multiple addresses, selection fails, manual entry is launched + iLcSessionObserver->Reset(); + iLcUiProvider->Reset(); + iLcUiProvider->iSimulatedReturnValue = ETrue; + iLcUiProvider->iRecipient.Set( KTestRecipient2SipUri ); + PropertyHelper::SetErrorCode( KErrNone ); + multipleAddr.Copy( _L(",") ); + User::LeaveIfError( RProperty::Set( NMusSessionApi::KCategoryUid, + NMusSessionApi::KRemoteSipAddress, + multipleAddr ) ); + delete iLiveSession; + iLiveSession = NULL; + iLiveSession = CMusEngLiveSession::NewL(); + iLiveSession->SetLcSessionObserver( iLcSessionObserver ); + iLiveSession->SetLcUiProvider( iLcUiProvider ); + TRAP( err, iLiveSession->EstablishLcSessionL() ); + if ( err == KErrNoMemory ) + { + User::Leave( err ); + } + EUNIT_ASSERT_EQUALS( + TInt( CLcUiProviderStub::EInputRecipient ), + iLcUiProvider->iCalledFunction ) + EUNIT_ASSERT_EQUALS( KErrNone, err ); + EUNIT_ASSERT_EQUALS( 1, iLiveSession->iTriedInvitations ) + EUNIT_ASSERT_EQUALS( + KTestRecipient2SipUri8(), + *( iLiveSession->iRecipient ) ) + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_CMusEngOutSession::UT_EstablishLcSession_RegistrationPendingL() + { + // Set registration as pending + iLiveSession->iSipProfileHandler->Profile()->iTBoolValue = EFalse; + + iLiveSession->EstablishLcSessionL(); + EUNIT_ASSERT( !iLiveSession->iSession ) + EUNIT_ASSERT( iLiveSession->iRegistrationPending ) + + // Fake registration, session starts + iLiveSession->iSipProfileHandler->Profile()->iTBoolValue = ETrue; + iLiveSession->ProfileRegistered(); + + if ( iLcSessionObserver->iCalledFunction == CLcSessionObserverStub::ESessionFailed ) + { + // Session didn't start because of running out of memory + User::Leave( KErrNoMemory ); + } + + iLiveSession->iDeltaTimer->Remove( iLiveSession->iInvitationResponseEntry ); + CMusEngMceOutSession::InvitationResponseTimerExpired( iLiveSession ); + EUNIT_ASSERT_EQUALS( TInt( iLcSessionObserver->iCalledFunction ), + TInt( CLcSessionObserverStub::ESessionFailed ) ) + EUNIT_ASSERT_EQUALS( iLcSessionObserver->iError, + TInt( MLcSession::ENoAnswer ) ) + iLcSessionObserver->Reset(); + + EUNIT_ASSERT( iLiveSession->iSession ) + EUNIT_ASSERT_EQUALS( iLiveSession->iSession->State(), + CMceSession::EOffering ) + EUNIT_ASSERT( !iLiveSession->iRegistrationPending ) + } // ----------------------------------------------------------------------------- // // ----------------------------------------------------------------------------- // -void UT_CMusEngOutSession::UT_CMusEngOutSession_CancelInviteLL() +void UT_CMusEngOutSession::UT_TerminateLcSessionL() { - // Try to cancel, must fail - TRAPD( error, iLiveSession->CancelInviteL() ); - MUS_TEST_FORWARD_ALLOC_FAILURE( error ); - EUNIT_ASSERT( error == KErrNotReady ); + // No MCE session + EUNIT_ASSERT_SPECIFIC_LEAVE( + iLiveSession->TerminateLcSessionL(), KErrNotReady ) + + // Cancel a session that is in offering state + iLiveSession->EstablishLcSessionL(); + EUNIT_ASSERT_EQUALS( TInt( CMceSession::EOffering ), + TInt( iLiveSession->iSession->iState ) ) + iLiveSession->TerminateLcSessionL(); + EUNIT_ASSERT_EQUALS( TInt( CMceSession::ECancelling ), + TInt( iLiveSession->iSession->iState ) ) - // Invite - iLiveSession->InviteL( KTestRecipientSipUri ); - EUNIT_ASSERT( iLiveSession->iSession->State() == CMceSession::EOffering ); - - // Cancel - iLiveSession->CancelInviteL(); - EUNIT_ASSERT( iLiveSession->iSession->State() == CMceSession::ECancelling ); - - // Try to cancel again, does nothing - iLiveSession->CancelInviteL(); - EUNIT_ASSERT( iLiveSession->iSession->State() == CMceSession::ECancelling ); + // Terminate an established session + iLiveSession->iSession->iState = CMceSession::ETerminated; + iLiveSession->EstablishLcSessionL(); + iLiveSession->iSession->iState = CMceSession::EEstablished; + iLiveSession->TerminateLcSessionL(); + EUNIT_ASSERT_EQUALS( TInt( CMceSession::ETerminating ), + TInt( iLiveSession->iSession->iState ) ) } - // ----------------------------------------------------------------------------- // // ----------------------------------------------------------------------------- // -void UT_CMusEngOutSession::UT_CMusEngOutSession_EstablishSessionLL() +void UT_CMusEngOutSession::UT_EstablishSessionLL() { // Try to establish, must fail, because of missing session TRAPD( error, iLiveSession->EstablishSessionL() ); MUS_TEST_FORWARD_ALLOC_FAILURE( error ); EUNIT_ASSERT( error == KErrNotReady ); - iLiveSession->iPrivate = ETrue; - iLiveSession->iPrivateNumber = EFalse; // Call to CMusEngOutMceSession::InviteL leads to call to EstablishL - iLiveSession->InviteL( KTestRecipientSipUri ); + iLiveSession->EstablishLcSessionL(); // Check that ports are correct @@ -315,160 +482,205 @@ EUNIT_ASSERT( iLiveSession->iSession->iHeaders->MdcaPoint( 1 ) == KMusAcceptHeader() ); EUNIT_ASSERT( iLiveSession->iSession->State() == CMceSession::EOffering ); - - // Privacy test : Check Private -header & originator - delete iLiveSession; - iLiveSession = NULL; - iLiveSession = CMusEngLiveSession::NewL( KNullDesC(), - TRect(0,0, 100,100), - *iObserver, - *iObserver, - *iObserver ); - iLiveSession->iPrivate = ETrue; - iLiveSession->iPrivateNumber = ETrue; - - // Call to CMusEngOutMceSession::InviteL leads to call to EstablishL - iLiveSession->InviteL( KTestRecipientSipUri ); - EUNIT_ASSERT( *iLiveSession->iSession->iOriginator == KMusAnonymousHeader ); - - EUNIT_ASSERT( iLiveSession->iSession->iHeaders ) - EUNIT_ASSERT( iLiveSession->iSession->iHeaders->Count() == 3 ) - EUNIT_ASSERT( iLiveSession->iSession->iHeaders->MdcaPoint( 0 ) == - KMusEngAcceptContactHeader() ) - EUNIT_ASSERT( iLiveSession->iSession->iHeaders->MdcaPoint( 1 ) == - KMusAcceptHeader() ); - EUNIT_ASSERT( iLiveSession->iSession->iHeaders->MdcaPoint( 2 ).Find( KMusPrivacyHeader() ) == 0 ); - - } - // ----------------------------------------------------------------------------- // // ----------------------------------------------------------------------------- // -void UT_CMusEngOutSession::UT_CMusEngOutSession_HandleTerminationL() +void UT_CMusEngOutSession::UT_HandleTerminationL() { - - // Try different values - iLiveSession->HandleTermination( KSipStatusCode400BadRequest, - KNullDesC8() ); - EUNIT_ASSERT( iObserver->iSessionBadRequestCalled ); - iObserver->Reset(); - - iLiveSession->HandleTermination( KSipStatusCode401Unauthorized, - KNullDesC8() ); - EUNIT_ASSERT( iObserver->iSessionUnauthorizedCalled ); - iObserver->Reset(); - - iLiveSession->HandleTermination( KSipStatusCode402PaymentRequired, - KNullDesC8() ); - EUNIT_ASSERT( iObserver->iSessionPaymentRequiredCalled ); - iObserver->Reset(); - - iLiveSession->HandleTermination( KSipStatusCode404RecipientNotFound, - KNullDesC8() ); - EUNIT_ASSERT( iObserver->iSessionRecipientNotFoundCalled ); - iObserver->Reset(); - - iLiveSession->HandleTermination( KSipStatusCode416UnsupportedUriScheme, - KNullDesC8() ); - EUNIT_ASSERT( iObserver->iSessionRecipientNotFoundCalled ); - iObserver->Reset(); - - iLiveSession->HandleTermination( KSipStatusCode479NotAbleToProcessURI, - KNullDesC8() ); - EUNIT_ASSERT( iObserver->iSessionRecipientNotFoundCalled ); - iObserver->Reset(); - - iLiveSession->HandleTermination( - KSipStatusCode407ProxyAuthenticationRequired, - KNullDesC8() ); - EUNIT_ASSERT( iObserver->iSessionProxyAuthenticationRequiredCalled ); - iObserver->Reset(); - + // Try different values iLiveSession->HandleTermination( KSipStatusCode408ConnectionTimeOut, KNullDesC8() ); - EUNIT_ASSERT( iObserver->iSessionRequestTimeOutCalled ); - iObserver->Reset(); + EUNIT_ASSERT_EQUALS( TInt( iLcSessionObserver->iCalledFunction ), + TInt( CLcSessionObserverStub::ESessionFailed ) ) + EUNIT_ASSERT_EQUALS( iLcSessionObserver->iError, + TInt( MLcSession::ENoAnswer ) ) + iLcSessionObserver->Reset(); iLiveSession->HandleTermination( KSipStatusCode415UnsupportedMediaType, KNullDesC8() ); - EUNIT_ASSERT( iObserver->iSessionUnsupportedMediaTypeCalled ); - iObserver->Reset(); + EUNIT_ASSERT_EQUALS( TInt( iLcSessionObserver->iCalledFunction ), + TInt( CLcSessionObserverStub::ESessionFailed ) ) + EUNIT_ASSERT_EQUALS( iLcSessionObserver->iError, + TInt( MLcSession::ESessionRejected ) ) + iLcSessionObserver->Reset(); iLiveSession->HandleTermination( KSipStatusCode488NotAcceptableHere, KNullDesC8() ); - EUNIT_ASSERT( iObserver->iSessionUnsupportedMediaTypeCalled ); - iObserver->Reset(); + EUNIT_ASSERT_EQUALS( TInt( iLcSessionObserver->iCalledFunction ), + TInt( CLcSessionObserverStub::ESessionFailed ) ) + EUNIT_ASSERT_EQUALS( iLcSessionObserver->iError, + TInt( MLcSession::ESessionRejected ) ) + iLcSessionObserver->Reset(); iLiveSession->HandleTermination( KSipStatusCode606NotAcceptable, KNullDesC8() ); - EUNIT_ASSERT( iObserver->iSessionUnsupportedMediaTypeCalled ); - iObserver->Reset(); + EUNIT_ASSERT_EQUALS( TInt( iLcSessionObserver->iCalledFunction ), + TInt( CLcSessionObserverStub::ESessionFailed ) ) + EUNIT_ASSERT_EQUALS( iLcSessionObserver->iError, + TInt( MLcSession::ESessionRejected ) ) + iLcSessionObserver->Reset(); iLiveSession->HandleTermination( KSipStatusCode486BusyHere, KNullDesC8() ); - EUNIT_ASSERT( iObserver->iSessionBusyHereCalled ); - iObserver->Reset(); + EUNIT_ASSERT_EQUALS( TInt( iLcSessionObserver->iCalledFunction ), + TInt( CLcSessionObserverStub::ESessionFailed ) ) + EUNIT_ASSERT_EQUALS( iLcSessionObserver->iError, + TInt( MLcSession::ERecipientBusy ) ) + iLcSessionObserver->Reset(); iLiveSession->HandleTermination( KSipStatusCode487RequestCancelled, KNullDesC8() ); - EUNIT_ASSERT( iObserver->iSessionRequestCancelledCalled ); - iObserver->Reset(); + EUNIT_ASSERT_EQUALS( TInt( iLcSessionObserver->iCalledFunction ), + TInt( CLcSessionObserverStub::ESessionFailed ) ) + EUNIT_ASSERT_EQUALS( iLcSessionObserver->iError, + TInt( MLcSession::ESessionCancelled ) ) + iLcSessionObserver->Reset(); iLiveSession->HandleTermination( KSipStatusCode603Decline, KNullDesC8() ); - EUNIT_ASSERT( iObserver->iSessionRejectedCalled ); - iObserver->Reset(); + EUNIT_ASSERT_EQUALS( TInt( iLcSessionObserver->iCalledFunction ), + TInt( CLcSessionObserverStub::ESessionFailed ) ) + EUNIT_ASSERT_EQUALS( iLcSessionObserver->iError, + TInt( MLcSession::ESessionRejected ) ) + iLcSessionObserver->Reset(); iLiveSession->HandleTermination( KSipStatusCode480TemporarilyNotAvailable, KNullDesC8() ); - EUNIT_ASSERT( iObserver->iSessionTemporarilyNotAvailable ); - iObserver->Reset(); + EUNIT_ASSERT_EQUALS( TInt( iLcSessionObserver->iCalledFunction ), + TInt( CLcSessionObserverStub::ESessionFailed ) ) + EUNIT_ASSERT_EQUALS( iLcSessionObserver->iError, + TInt( MLcSession::ERecipientTemporarilyNotAvailable ) ) + iLcSessionObserver->Reset(); // Receive 486 with operator variant iLiveSession->iOperatorVariant = ETrue; iLiveSession->HandleTermination( KSipStatusCode486BusyHere, KNullDesC8() ); - EUNIT_ASSERT( iObserver->iSessionRejectedCalled ) - EUNIT_ASSERT( !iObserver->iSessionBusyHereCalled ) - iObserver->Reset(); + EUNIT_ASSERT_EQUALS( TInt( iLcSessionObserver->iCalledFunction ), + TInt( CLcSessionObserverStub::ESessionFailed ) ) + EUNIT_ASSERT_EQUALS( iLcSessionObserver->iError, + TInt( MLcSession::ESessionRejected ) ) + iLcSessionObserver->Reset(); iLiveSession->iOperatorVariant = EFalse; // Normal termination, let the base class handle iLiveSession->HandleTermination( KSipStatusCode200OK, KNullDesC8() ); - EUNIT_ASSERT( iObserver->iSessionTerminatedCalled ); // called by base class - iObserver->Reset(); - + EUNIT_ASSERT_EQUALS( TInt( iLcSessionObserver->iCalledFunction ), + TInt( CLcSessionObserverStub::ESessionStateChanged ) ) + iLcSessionObserver->Reset(); } +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_CMusEngOutSession::UT_HandleRecipientNotFoundTerminationL() + { + EUNIT_ASSERT_EQUALS( iLiveSession->iTriedInvitations, 0 ); + + // Retry possible when 404 is received but fails because of recipient + // proposal is missing for some reason, recipient not found callback + // is called instead of retry + delete iLiveSession->iRemoteSipAddressProposal; + iLiveSession->iRemoteSipAddressProposal = NULL; + iLcSessionObserver->Reset(); + iLiveSession->HandleTermination( KSipStatusCode404RecipientNotFound, + KNullDesC8() ); + + EUNIT_ASSERT( iLiveSession->iDeltaTimer->IsActive() == ETrue ) + iLiveSession->AsyncBrakeCompleted( iLiveSession ); + EUNIT_ASSERT_EQUALS( TInt( iLcSessionObserver->iCalledFunction ), + TInt( CLcSessionObserverStub::ESessionFailed ) ) + EUNIT_ASSERT_EQUALS( iLcSessionObserver->iError, + TInt( MLcSession::ERecipientNotFound ) ) + + // Retry possible when 404 is received + delete iLiveSession->iRemoteSipAddressProposal; + iLiveSession->iRemoteSipAddressProposal = NULL; + iLiveSession->iRemoteSipAddressProposal = KTestRecipient2SipUri().AllocL(); + iLcSessionObserver->Reset(); + iLcUiProvider->iRecipient.Set( KTestRecipient2SipUri ); + iLcUiProvider->iSimulatedReturnValue = ETrue; + iLiveSession->HandleTermination( KSipStatusCode404RecipientNotFound, + KNullDesC8() ); + + EUNIT_ASSERT( iLiveSession->iDeltaTimer->IsActive() == ETrue ); + iLiveSession->AsyncBrakeCompleted( iLiveSession ); + + // Memory running out might cause that retry is not done + if ( iLcSessionObserver->iCalledFunction == CLcSessionObserverStub::ESessionFailed ) + { + User::Leave( KErrNoMemory ); + } + EUNIT_ASSERT_EQUALS( 1, iLiveSession->iTriedInvitations ) + EUNIT_ASSERT_EQUALS( + KTestRecipient2SipUri8(), + *( iLiveSession->iRecipient ) ) + + // Retry not anymore possible when 404 received (e.g. manual address query + // was done for invite). + iLcSessionObserver->Reset(); + iLiveSession->HandleTermination( KSipStatusCode404RecipientNotFound, + KNullDesC8() ); + EUNIT_ASSERT( iLiveSession->iDeltaTimer->IsActive() == ETrue ) + iLiveSession->AsyncBrakeCompleted( iLiveSession ); + EUNIT_ASSERT_EQUALS( TInt( iLcSessionObserver->iCalledFunction ), + TInt( CLcSessionObserverStub::ESessionFailed ) ) + EUNIT_ASSERT_EQUALS( iLcSessionObserver->iError, + TInt( MLcSession::ERecipientNotFound ) ) + + // 416 has identical handling + iLcSessionObserver->Reset(); + iLiveSession->HandleTermination( KSipStatusCode416UnsupportedUriScheme, + KNullDesC8() ); + EUNIT_ASSERT( iLiveSession->iDeltaTimer->IsActive() == ETrue ); + iLiveSession->AsyncBrakeCompleted( iLiveSession ); + EUNIT_ASSERT_EQUALS( TInt( iLcSessionObserver->iCalledFunction ), + TInt( CLcSessionObserverStub::ESessionFailed ) ) + EUNIT_ASSERT_EQUALS( iLcSessionObserver->iError, + TInt( MLcSession::ERecipientNotFound ) ) + + // 479 has identical handling + iLcSessionObserver->Reset(); + iLiveSession->HandleTermination( KSipStatusCode479NotAbleToProcessURI, + KNullDesC8() ); + EUNIT_ASSERT( iLiveSession->iDeltaTimer->IsActive() == ETrue ); + iLiveSession->AsyncBrakeCompleted( iLiveSession ); + EUNIT_ASSERT_EQUALS( TInt( iLcSessionObserver->iCalledFunction ), + TInt( CLcSessionObserverStub::ESessionFailed ) ) + EUNIT_ASSERT_EQUALS( iLcSessionObserver->iError, + TInt( MLcSession::ERecipientNotFound ) ) + } // ----------------------------------------------------------------------------- // // ----------------------------------------------------------------------------- // -void UT_CMusEngOutSession::UT_CMusEngOutSession_AdjustVideoCodecLL() +void UT_CMusEngOutSession::UT_AdjustVideoCodecLL() { //H263 CMceH263Codec* codecH263 = CMceH263Codec::NewLC( KMceSDPNameH2632000() ); - iLiveSession->CMusEngMceOutSession::AdjustVideoCodecL( *codecH263 ); + iLiveSession->CMusEngMceOutSession::AdjustVideoCodecL( *codecH263, + KMceCameraSource ); // Test payloadtype EUNIT_ASSERT( codecH263->iPayloadType == 96 ) CleanupStack::PopAndDestroy( codecH263 ); //H264 CMceAvcCodec* codecAvc = CMceAvcCodec::NewLC( KMceSDPNameH264() ); - iLiveSession->CMusEngMceOutSession::AdjustVideoCodecL( *codecAvc ); + iLiveSession->CMusEngMceOutSession::AdjustVideoCodecL( *codecAvc, + KMceCameraSource ); // Test payloadtype EUNIT_ASSERT( codecAvc->iPayloadType == 98 ) CleanupStack::PopAndDestroy( codecAvc ); } - // ----------------------------------------------------------------------------- // // ----------------------------------------------------------------------------- // -void UT_CMusEngOutSession::UT_CMusEngOutSession_AdjustAudioCodecLL() +void UT_CMusEngOutSession::UT_AdjustAudioCodecLL() { CMceAudioCodec* codec = iLiveSession->iManager->SupportedAudioCodecs()[0]->CloneL(); @@ -487,12 +699,11 @@ CleanupStack::PopAndDestroy( codec ); } - // ----------------------------------------------------------------------------- // // ----------------------------------------------------------------------------- // -void UT_CMusEngOutSession::UT_CMusEngOutSession_CreateMceSessionStructureLL() +void UT_CMusEngOutSession::UT_CreateMceSessionStructureLL() { // Test removal of QoS-lines @@ -524,14 +735,12 @@ EUNIT_ASSERT( iLiveSession->iSession->Bundles().Count() == 0 ) - CMusEngClipSession* clipSession = CMusEngClipSession::NewL( - TRect(0, 100, 200, 300 ), - *iObserver, - *iObserver, - *iObserver ); + CMusEngClipSession* clipSession = CMusEngClipSession::NewL(); CleanupStack::PushL( clipSession ); - - clipSession->SetClipL( KTestVideoFileName ); + clipSession->SetLcSessionObserver( iLcSessionObserver ); + clipSession->SetLcUiProvider( iLcUiProvider ); + clipSession->LocalVideoPlayer()->LcSourceFileControl()->SetLcFileNameL( + KTestVideoFileName() ); clipSession->iRecipient = KTestRecipientSipUri8().AllocL(); @@ -551,6 +760,230 @@ CleanupStack::PopAndDestroy( clipSession ); } +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_CMusEngOutSession::UT_ConstructLL() + { + TUint32 profileid = 0; + CSIPProfile* profile = iLiveSession->iSipProfileHandler->Profile(); + profile->GetParameter( KSIPProfileId, profileid ); + //stub creates defaultprofile if profileid is zero + //stub does not care if the profileid is given or not + //profileid of new profile is always 1 + EUNIT_ASSERT(profile->iIsDefaultProfile) + + TInt error = NULL; + const TUint KSipProfileId2( 2 ); + TRAP( error, RProperty::Set( NMusSessionApi::KCategoryUid, + NMusSessionApi::KSipProfileId, + KSipProfileId2 ) ); + if ( error == KErrNoMemory ) User::Leave( error ); + EUNIT_ASSERT ( error == KErrNone ); + profile = NULL; + profileid = 0; + + SIPStrings::Close(); + delete iLcSessionObserver; + iLcSessionObserver = NULL; + delete iLiveSession; + iLiveSession = NULL; + + iLcSessionObserver = new( ELeave )CLcSessionObserverStub; + iLiveSession = CMusEngLiveSession::NewL(); + iLiveSession->SetLcSessionObserver( iLcSessionObserver ); + iLiveSession->SetLcUiProvider( iLcUiProvider ); + + SIPStrings::OpenL(); + + profile = iLiveSession->iSipProfileHandler->Profile(); + profile->GetParameter( KSIPProfileId, profileid ); + EUNIT_ASSERT( !profile->iIsDefaultProfile ) + + + TRAP( error, RProperty::Delete( NMusSessionApi::KCategoryUid, + NMusSessionApi::KSipProfileId ) ); + if ( error == KErrNoMemory ) User::Leave( error ); + EUNIT_ASSERT ( error == KErrNone ); + profile = NULL; + profileid = 0; + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_CMusEngOutSession::UT_ContactSavingLL() + { + ContactEngineStubHelper::Reset(); + + // Saving of contact is done at destruction phase only if recipient + // has been queried from client + // + CMusEngLiveSession* liveSession = CMusEngLiveSession::NewL(); + liveSession->SetLcSessionObserver( iLcSessionObserver ); + liveSession->SetLcUiProvider( iLcUiProvider ); + delete liveSession; + liveSession = NULL; + EUNIT_ASSERT( ContactEngineStubHelper::GetCalledFunction() == EContactEngineStubNone ); + + + User::LeaveIfError( RProperty::Set( NMusSessionApi::KCategoryUid, + NMusSessionApi::KContactId, + 2 ) ); + User::LeaveIfError( RProperty::Set( NMusSessionApi::KCategoryUid, + NMusSessionApi::KTelNumber, + _L("12341234") ) ); + + liveSession = CMusEngLiveSession::NewL(); + CleanupStack::PushL( liveSession ); + liveSession->SetLcSessionObserver( iLcSessionObserver ); + liveSession->SetLcUiProvider( iLcUiProvider ); + + delete liveSession->iRecipient; + liveSession->iRecipient = NULL; + liveSession->iRecipient = _L8("sip:yep@10.10.10.10").AllocL(); + liveSession->iAddressQueried = ETrue; + CleanupStack::PopAndDestroy( liveSession ); + if ( ContactEngineStubHelper::GetCalledFunction() != EContactEngineStubSetText ) + { + // out-of-memory was trap ignored and saving failed because of that + User::Leave( KErrNoMemory ); + } + EUNIT_ASSERT( ContactEngineStubHelper::GetCalledFunction() == EContactEngineStubSetText ); + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_CMusEngOutSession::UT_RemoteAddressLL() + { + delete iLiveSession->iRecipient; + iLiveSession->iRecipient = NULL; + EUNIT_ASSERT_SPECIFIC_LEAVE( iLiveSession->RemoteAddressL(), KErrNotReady ) + + iLiveSession->iRecipient = KTestRecipient2SipUri8().AllocL(); + + HBufC* remoteAddr = iLiveSession->RemoteAddressL(); + CleanupStack::PushL( remoteAddr ); + EUNIT_ASSERT_EQUALS( KTestRecipient2SipUri(), *remoteAddr ) + CleanupStack::PopAndDestroy( remoteAddr ); + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_CMusEngOutSession::UT_RemoteDisplayNameL() + { + // Test 1 : Default setting, contact name set + EUNIT_ASSERT_EQUALS ( KTestContactName(), iLiveSession->RemoteDisplayName() ) + + // Test 2 : Contact name set to null descriptor + User::LeaveIfError( RProperty::Set( NMusSessionApi::KCategoryUid, + NMusSessionApi::KContactName, + KNullDesC) ); + delete iLiveSession; + iLiveSession = NULL; + iLiveSession = CMusEngLiveSession::NewL(); + iLiveSession->SetLcSessionObserver( iLcSessionObserver ); + iLiveSession->SetLcUiProvider( iLcUiProvider ); + EUNIT_ASSERT( iLiveSession->RemoteDisplayName().Length() == 0 ); + + // Test 3 : Manual address entered + PropertyHelper::SetErrorCode( KErrNone ); + delete iLiveSession; + iLiveSession = NULL; + iLcSessionObserver->Reset(); + iLcUiProvider->Reset(); + User::LeaveIfError( RProperty::Set( NMusSessionApi::KCategoryUid, + NMusSessionApi::KContactName, + KTestContactName ) ); + iLcUiProvider->iSimulatedReturnValue = ETrue; + iLcUiProvider->iRecipient.Set( KTestRecipientSipUri ); + iLiveSession = CMusEngLiveSession::NewL(); + iLiveSession->SetLcSessionObserver( iLcSessionObserver ); + iLiveSession->SetLcUiProvider( iLcUiProvider ); + PropertyHelper::SetErrorCode( KErrNotFound ); + iLiveSession->EstablishLcSessionL(); + EUNIT_ASSERT_EQUALS( 1, iLiveSession->iTriedInvitations ) + EUNIT_ASSERT_EQUALS( KTestRecipientSipUri(),iLiveSession->RemoteDisplayName() ) + + // Test 4 : Contact name has zero lenth and multiple address entry query. + // Displayname should have user selected address. + // Rare scenario. + PropertyHelper::SetErrorCode( KErrNone ); + iLcSessionObserver->Reset(); + iLcUiProvider->Reset(); + User::LeaveIfError( RProperty::Set( NMusSessionApi::KCategoryUid, + NMusSessionApi::KContactName, + KNullDesC) ); + delete iLiveSession; + iLiveSession = NULL; + iLiveSession = CMusEngLiveSession::NewL(); + iLiveSession->SetLcSessionObserver( iLcSessionObserver ); + iLiveSession->SetLcUiProvider( iLcUiProvider ); + iLcUiProvider->iSimulatedReturnValue = ETrue; + PropertyHelper::SetErrorCode( KErrNone ); + TBuf<200> multipleAddr; + multipleAddr.Append( KTestRecipientTelUri ); + multipleAddr.Append( _L(",") ); + multipleAddr.Append( KTestRecipientSipUri ); + User::LeaveIfError( RProperty::Set( NMusSessionApi::KCategoryUid, + NMusSessionApi::KRemoteSipAddress, + multipleAddr ) ); + iLiveSession->EstablishLcSessionL(); + /* Stub selects the first one automatically */ + EUNIT_ASSERT_EQUALS( KTestRecipientTelUri(),iLiveSession->RemoteDisplayName() ); + + // Test 5 : Contact name has zero lenth and no manual entry queried. + // Recipient has only teluri. So displayname should have tel uri address. + PropertyHelper::SetErrorCode( KErrNone ); + User::LeaveIfError( RProperty::Set( NMusSessionApi::KCategoryUid, + NMusSessionApi::KContactName, + KNullDesC) ); + delete iLiveSession; + iLiveSession = NULL; + iLiveSession = CMusEngLiveSession::NewL(); + iLiveSession->SetLcSessionObserver( iLcSessionObserver ); + iLiveSession->SetLcUiProvider( iLcUiProvider ); + iLcUiProvider->iSimulatedReturnValue = ETrue; + TBuf<200> singleAddr; + singleAddr.Append( KTestRecipientTelUri ); + User::LeaveIfError( RProperty::Set( NMusSessionApi::KCategoryUid, + NMusSessionApi::KRemoteSipAddress, + singleAddr ) ); + PropertyHelper::SetErrorCode( KErrNone ); + iLiveSession->EstablishLcSessionL(); + EUNIT_ASSERT_EQUALS( KTestRecipientTelUri(),iLiveSession->RemoteDisplayName() ); + + // Test 6 : Contact name has zero lenth and recipient has teluri + // and invitation fails to teluri. + // Manual address query entered and now display should have entered + // manual address. + PropertyHelper::SetErrorCode( KErrNone ); + User::LeaveIfError( RProperty::Set( NMusSessionApi::KCategoryUid, + NMusSessionApi::KContactName, + KNullDesC) ); + delete iLiveSession; + iLiveSession = NULL; + iLiveSession = CMusEngLiveSession::NewL(); + iLiveSession->SetLcSessionObserver( iLcSessionObserver ); + iLiveSession->SetLcUiProvider( iLcUiProvider ); + iLcUiProvider->iRecipient.Set( KTestRecipientSipUri ); + iLcUiProvider->iSimulatedReturnValue = ETrue; + singleAddr.Copy( KTestRecipientTelUri ); + User::LeaveIfError( RProperty::Set( NMusSessionApi::KCategoryUid, + NMusSessionApi::KRemoteSipAddress, + singleAddr ) ); + PropertyHelper::SetErrorCode( KErrNotFound ); + iLiveSession->EstablishLcSessionL(); + EUNIT_ASSERT_EQUALS( 1, iLiveSession->iTriedInvitations ) + EUNIT_ASSERT_EQUALS( KTestRecipientSipUri(),iLiveSession->RemoteDisplayName() ); + } + // TEST TABLE EUNIT_BEGIN_TEST_TABLE( @@ -559,53 +992,102 @@ "UNIT" ) EUNIT_TEST( - "InviteL - test ", + "EstablishLcSessionL - test ", "CMusEngOutSession", - "InviteL", + "EstablishLcSessionL", "FUNCTIONALITY", - SetupL, UT_CMusEngOutSession_InviteLL, Teardown) + SetupL, UT_EstablishLcSessionL, Teardown) EUNIT_TEST( - "CancelInviteL - test ", + "TerminateLcSessionL - test ", + "CMusEngOutSession", + "TerminateLcSessionL", + "FUNCTIONALITY", + SetupL, UT_TerminateLcSessionL, Teardown) + +EUNIT_TEST( + "EstablishLcSessionL recipient resolving - test ", "CMusEngOutSession", - "CancelInviteL", + "EstablishLcSessionL", "FUNCTIONALITY", - SetupL, UT_CMusEngOutSession_CancelInviteLL, Teardown) + SetupL, UT_EstablishLcSession_RecipientResolvingL, Teardown) + +EUNIT_TEST( + "EstablishLcSessionL registration pending - test ", + "CMusEngOutSession", + "EstablishLcSessionL", + "FUNCTIONALITY", + SetupL, UT_EstablishLcSession_RegistrationPendingL, Teardown) EUNIT_TEST( "EstablishSessionL - test ", "CMusEngOutSession", "EstablishSessionL", "FUNCTIONALITY", - SetupL, UT_CMusEngOutSession_EstablishSessionLL, Teardown) + SetupL, UT_EstablishSessionLL, Teardown) EUNIT_TEST( "HandleTermination - test ", "CMusEngOutSession", "HandleTermination", "FUNCTIONALITY", - SetupL, UT_CMusEngOutSession_HandleTerminationL, Teardown) + SetupL, UT_HandleTerminationL, Teardown) EUNIT_TEST( + "HandleTermination recipient not found - test ", + "CMusEngOutSession", + "HandleTermination recipient not found", + "FUNCTIONALITY", + SetupL, UT_HandleRecipientNotFoundTerminationL, Teardown) + +EUNIT_TEST( "AdjustVideoCodecL - test ", "CMusEngOutSession", "AdjustVideoCodecL", "FUNCTIONALITY", - SetupL, UT_CMusEngOutSession_AdjustVideoCodecLL, Teardown) + SetupL, UT_AdjustVideoCodecLL, Teardown) EUNIT_TEST( "AdjustAudioCodecL - test ", "CMusEngOutSession", "AdjustAudioCodecL", "FUNCTIONALITY", - SetupL, UT_CMusEngOutSession_AdjustAudioCodecLL, Teardown) + SetupL, UT_AdjustAudioCodecLL, Teardown) EUNIT_TEST( "CreateMceSessionStructureL - test ", "CMusEngOutSession", "CreateMceSessionStructureL", "FUNCTIONALITY", - SetupL, UT_CMusEngOutSession_CreateMceSessionStructureLL, Teardown) + SetupL, UT_CreateMceSessionStructureLL, Teardown) + +EUNIT_TEST( + "ConstructLL - test ", + "CMusEngOutSession", + "ConstructLL", + "FUNCTIONALITY", + SetupL, UT_ConstructLL, Teardown) + +EUNIT_TEST( + "ContactSavingL - test ", + "CMusEngOutSession", + "ContactSavingL", + "FUNCTIONALITY", + SetupL, UT_ContactSavingLL, Teardown) + +EUNIT_TEST( + "RemoteAddressLL - test ", + "CMusEngOutSession", + "RemoteAddressLL", + "FUNCTIONALITY", + SetupL, UT_RemoteAddressLL, Teardown) + +EUNIT_TEST( + "RemoteDisplayName - test ", + "CMusEngOutSession", + "RemoteDisplayName", + "FUNCTIONALITY", + SetupL, UT_RemoteDisplayNameL, Teardown) EUNIT_END_TEST_TABLE diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshengine/tsrc/ut_engine/src/ut_musengreceivesession.cpp --- a/mmsharing/mmshengine/tsrc/ut_engine/src/ut_musengreceivesession.cpp Thu Aug 19 09:51:39 2010 +0300 +++ b/mmsharing/mmshengine/tsrc/ut_engine/src/ut_musengreceivesession.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -21,7 +21,9 @@ #include "musengstubs.h" #include "musengtestdefs.h" #include "musengreceivesession.h" -#include "centralrepository.h" +#include "mussessionproperties.h" +#include "contactenginestub.h" +#include "musengremotevideoplayer.h" // SYSTEM INCLUDES #include @@ -41,8 +43,20 @@ #include #include +#include +// Using following value increases treshold buffer to 1 second from +// default 100 ms +const TInt KMusEngJitterBufferTreshold = 50; +const TInt KMusEngTresholdToSecondsFactor = 20; +const TInt KMusEngTwoSecondInMilliSeconds = 2000; +// Use inactivity timer value that is a little bigger than treshold in seconds +const TUint KMusEngInactivityTimer = KMusEngTresholdToSecondsFactor * + KMusEngJitterBufferTreshold + + KMusEngTwoSecondInMilliSeconds; + +_LIT( KTestContactName, "nokia" ); // ----------------------------------------------------------------------------- @@ -108,25 +122,31 @@ // void UT_CMusEngReceiveSession::SetupL( ) { - CRepository::iStaticEncoderUid = 0; - iObserver = new( ELeave ) CMusEngObserverStub; - iReceiveSession = CMusEngReceiveSession::NewL( TRect(0,0, 100,100), - *iObserver, - *iObserver ); - + // set fast mode ON + User::LeaveIfError( RProperty::Set( NMusSessionApi::KCategoryUid, + NMusSessionApi::KFastMode, + 0 ) ); + iLcSessionObserver = new( ELeave )CLcSessionObserverStub; + iLcUiProvider = new( ELeave )CLcUiProviderStub; + iReceiveSession = CMusEngReceiveSession::NewL(); + iReceiveSession->SetLcSessionObserver( iLcSessionObserver ); + iReceiveSession->SetLcUiProvider( iLcUiProvider ); } - // ----------------------------------------------------------------------------- // // ----------------------------------------------------------------------------- // void UT_CMusEngReceiveSession::Teardown( ) { + PropertyHelper::Close(); delete iReceiveSession; - delete iObserver; - CRepository::iStaticEncoderUid = 0; - + delete iLcUiProvider; + delete iLcSessionObserver; + PropertyHelper::Close(); + // Delete static data from CenRep stub + CRepository::ResetStubGlobal(); + CRepository::iForceFailWithCode = KErrNone; } @@ -278,67 +298,145 @@ { EUNIT_ASSERT( iReceiveSession ); EUNIT_ASSERT( !iReceiveSession->iSession ); + EUNIT_ASSERT( iReceiveSession->iMceManagerUid == TUid::Uid( KMusUiUid ) ); } +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_CMusEngReceiveSession::UT_LcSessionStateL() + { + // No MCE session -> Convert to MLcSession::EReceived + EUNIT_ASSERT_EQUALS( TInt( MLcSession::EReceived ), + TInt( iReceiveSession->LcSessionState() ) ) + + // Some other state -> State returned from the base class + TMceTransactionDataContainer container; + CMceInSession* inSession = ConstructInSessionLC( 1, 0 ); + iReceiveSession->IncomingSession( inSession, &container ); + CleanupStack::Pop( inSession ); + iReceiveSession->iSession->iState = CMceSession::EProceeding; + iReceiveSession->EstablishLcSessionL(); + EUNIT_ASSERT_EQUALS( TInt( MLcSession::EOpening ), + TInt( iReceiveSession->LcSessionState() ) ) + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_CMusEngReceiveSession::UT_EstablishLcSessionL() + { + // No MCE session + EUNIT_ASSERT_SPECIFIC_LEAVE( + iReceiveSession->EstablishLcSessionL(), KErrNotReady ) + + // Construct a new session and accept it + TMceTransactionDataContainer container; + CMceInSession* inSession = ConstructInSessionLC( 1, 0 ); + iReceiveSession->IncomingSession( inSession, &container ); + CleanupStack::Pop( inSession ); + iReceiveSession->iSession->iState = CMceSession::EProceeding; + iReceiveSession->EstablishLcSessionL(); + EUNIT_ASSERT( iReceiveSession->iSession ) + EUNIT_ASSERT_EQUALS( inSession, iReceiveSession->iSession ); + EUNIT_ASSERT_EQUALS( TInt( CMceSession::EAnswering ), + TInt( iReceiveSession->iSession->iState ) ) + } // ----------------------------------------------------------------------------- // // ----------------------------------------------------------------------------- // -void UT_CMusEngReceiveSession::UT_AcceptInvitationLL() +void UT_CMusEngReceiveSession::UT_TerminateLcSessionL() { - TMceTransactionDataContainer container; + // No MCE session + EUNIT_ASSERT_SPECIFIC_LEAVE( + iReceiveSession->TerminateLcSessionL(), KErrNotReady ) - // There is no pending session to accept, must fail - TRAPD( error, iReceiveSession->AcceptInvitationL( ETrue ) ); - MUS_TEST_FORWARD_ALLOC_FAILURE( error ); - EUNIT_ASSERT( error == KErrNotReady ); - - // There is pending session, but it is not yet reserved resources, - // so accepting fails + // Reject session, session state incoming, no operator variant + TMceTransactionDataContainer container; CMceInSession* inSession = ConstructInSessionLC( 1, 0 ); iReceiveSession->IncomingSession( inSession, &container ); CleanupStack::Pop( inSession ); - - TRAP( error, iReceiveSession->AcceptInvitationL( ETrue ) ); - MUS_TEST_FORWARD_ALLOC_FAILURE( error ); - EUNIT_ASSERT( error == KErrNotReady ); - - // Simulate resource reservation and reject + iReceiveSession->iSession->iState = CMceSession::EIncoming; + iReceiveSession->iOperatorVariant = EFalse; + iReceiveSession->TerminateLcSessionL(); + EUNIT_ASSERT_EQUALS( TInt( CMceSession::ETerminated ), + TInt( iReceiveSession->iSession->iState ) ) + + // Reject session, session state proceeding, no operator variant + inSession = ConstructInSessionLC( 1, 0 ); + iReceiveSession->IncomingSession( inSession, &container ); + CleanupStack::Pop( inSession ); iReceiveSession->iSession->iState = CMceSession::EProceeding; - iReceiveSession->AcceptInvitationL( EFalse ); + iReceiveSession->iOperatorVariant = EFalse; + iReceiveSession->TerminateLcSessionL(); + EUNIT_ASSERT_EQUALS( TInt( CMceSession::ETerminated ), + TInt( iReceiveSession->iSession->iState ) ) - EUNIT_ASSERT( iReceiveSession->iSession->iState == - CMceSession::ETerminated ); - - // Construct new session and reject it with operator variant + // Reject session, operator variant inSession = ConstructInSessionLC( 1, 0 ); iReceiveSession->IncomingSession( inSession, &container ); CleanupStack::Pop( inSession ); iReceiveSession->iSession->iState = CMceSession::EProceeding; iReceiveSession->iOperatorVariant = ETrue; - - iReceiveSession->AcceptInvitationL( EFalse ); + iReceiveSession->TerminateLcSessionL(); + EUNIT_ASSERT_EQUALS( TInt( CMceSession::ETerminated ), + TInt( iReceiveSession->iSession->iState ) ) - EUNIT_ASSERT( iReceiveSession->iSession->iState == - CMceSession::ETerminated ); - - // Construct new session and accept it + // Terminate an established session inSession = ConstructInSessionLC( 1, 0 ); iReceiveSession->IncomingSession( inSession, &container ); CleanupStack::Pop( inSession ); - iReceiveSession->iSession->iState = CMceSession::EProceeding; + iReceiveSession->iSession->iState = CMceSession::EEstablished; + iReceiveSession->iOperatorVariant = EFalse; + iReceiveSession->TerminateLcSessionL(); + EUNIT_ASSERT_EQUALS( TInt( CMceSession::ETerminating ), + TInt( iReceiveSession->iSession->iState ) ) + } - iReceiveSession->AcceptInvitationL( ETrue ); +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_CMusEngReceiveSession::UT_RemoteVideoPlayerL() + { + EUNIT_ASSERT( iReceiveSession->RemoteVideoPlayer() == + iReceiveSession->iRemoteVideoPlayer ) + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_CMusEngReceiveSession::UT_RemoteDisplayName() + { + + // Creating Valid Session + CMceInSession* inSession = ConstructInSessionLC( 1, 0 ); + iReceiveSession->iSession = inSession; // Transfers ownership + CleanupStack::Pop( inSession ); + iReceiveSession->CompleteSessionStructureL(); + EUNIT_ASSERT( inSession->Streams().Count() == 1 ); - EUNIT_ASSERT( iReceiveSession->iSession ); - EUNIT_ASSERT( iReceiveSession->iSession == inSession ); - EUNIT_ASSERT( iReceiveSession->iSession->iState == - CMceSession::EAnswering ); + + // Name is published using publish/subscribe key by Availblity + User::LeaveIfError( RProperty::Set( NMusSessionApi::KCategoryUid, + NMusSessionApi::KContactName, + KTestContactName ) ); + + EUNIT_ASSERT_EQUALS ( KTestContactName(), iReceiveSession->RemoteDisplayName() ) - } - + User::LeaveIfError( RProperty::Set( NMusSessionApi::KCategoryUid, + NMusSessionApi::KContactName, + KNullDesC) ); + + // Ensure its not null and its not equal + EUNIT_ASSERT( KTestContactName() != iReceiveSession->RemoteDisplayName() ); + } // ----------------------------------------------------------------------------- // @@ -364,23 +462,26 @@ // 1 ) First transition to state EProceeding, user and remote end should // be notified - inSession->iState = CMceSession::EProceeding; - + inSession->iState = CMceSession::EProceeding; iReceiveSession->HandleSessionStateChanged( *inSession, 0, KNullDesC8() ); - EUNIT_ASSERT( iObserver->iIncomingSessionCalled ) + EUNIT_ASSERT_EQUALS( TInt( iLcSessionObserver->iCalledFunction ), + TInt( CLcSessionObserverStub::ESessionStateChanged ) ) EUNIT_ASSERT( iReceiveSession->iRingLCalled ) - iObserver->Reset(); + + // Ensure Originator is taken from the incoming session + EUNIT_ASSERT_EQUALS ( KTestOriginator(), *iReceiveSession->iOriginator ) + + iLcSessionObserver->Reset(); // 2 ) Now simulate second transition to EProceeding state which can happen // if we force 100rel to be used. User and remote end should not be // notified anymore but change should be ignored. + inSession->iState = CMceSession::EProceeding; iReceiveSession->HandleSessionStateChanged( *inSession, 0, KNullDesC8() ); - EUNIT_ASSERT( iObserver->IsReseted() ) - iObserver->Reset(); - + EUNIT_ASSERT_EQUALS( TInt( CLcSessionObserverStub::EUnknown ), + TInt( iLcSessionObserver->iCalledFunction ) ) } - // ----------------------------------------------------------------------------- // // ----------------------------------------------------------------------------- @@ -392,10 +493,10 @@ CMceVideoCodec* codecAvc = CMceAvcCodec::NewLC( KMceSDPNameH264() ); CMceVideoCodec* codecUnknown = CMceH263Codec::NewLC( KNullDesC8() ); - iReceiveSession->AdjustVideoCodecL( *codecH263 ); - iReceiveSession->AdjustVideoCodecL( *codecH2632000 ); - iReceiveSession->AdjustVideoCodecL( *codecAvc ); - iReceiveSession->AdjustVideoCodecL( *codecUnknown ); + iReceiveSession->AdjustVideoCodecL( *codecH263, KMceRTPSource ); + iReceiveSession->AdjustVideoCodecL( *codecH2632000, KMceRTPSource ); + iReceiveSession->AdjustVideoCodecL( *codecAvc, KMceRTPSource ); + iReceiveSession->AdjustVideoCodecL( *codecUnknown, KMceRTPSource ); EUNIT_ASSERT_EQUALS( codecH263->KeepAliveTimer(), 5 ) EUNIT_ASSERT_EQUALS( codecH263->KeepAlivePayloadType(), 96 ) @@ -584,8 +685,6 @@ CleanupStack::Pop( inSession ); container.Clear(); - EUNIT_ASSERT( iObserver->iIncomingSessionPreNotificationCalled ) - EUNIT_ASSERT( iReceiveSession->iSession ); EUNIT_ASSERT( iReceiveSession->iSession->iState == CMceSession::ETerminated ); @@ -630,46 +729,6 @@ EUNIT_ASSERT( iReceiveSession->iSession != inSession ); EUNIT_ASSERT( iReceiveSession->iSession->iState == CMceSession::EReserving ); - - // Try again when there is usage of avc is turned off - iReceiveSession->iSession->iState = CMceSession::ETerminated; - TInt32 KMusDisableAVC = 0x0fffffff; - CRepository::iStaticEncoderUid = KMusDisableAVC; - - inSession = ConstructInSessionLC( 1, 0 ); - - // There will 3 AVC codecs and 1 H263 codec - EUNIT_ASSERT( static_cast( inSession->Streams()[0] )->Codecs().Count() == 4 ); - iReceiveSession->IncomingSession( inSession, &container ); - CleanupStack::Pop( inSession ); - - EUNIT_ASSERT( iReceiveSession->iSession->iState == - CMceSession::EReserving || - iReceiveSession->iSession->iState == - CMceSession::ETerminated ); - - // Should be only the H263 codec - EUNIT_ASSERT( static_cast( iReceiveSession->iSession->Streams()[0] )->Codecs().Count() <= 4 ); - - //No supported codecs - iReceiveSession->iSession->iState = CMceSession::ETerminated; - iReceiveSession->iManager->iSupportedVideoCodecs.ResetAndDestroy(); - inSession = ConstructInSessionLC( 1, 0 ); - - // There will no codecs, simulates situation where no codecs were match - //currently session is not been rejected - EUNIT_ASSERT( static_cast( inSession->Streams()[0] )->Codecs().Count() == 0 ); - iReceiveSession->IncomingSession( inSession, &container ); - CleanupStack::Pop( inSession ); - - EUNIT_ASSERT( iReceiveSession->iSession->iState == - CMceSession::EReserving || - iReceiveSession->iSession->iState == - CMceSession::ETerminated ); - - // Should be only the H263 codec - EUNIT_ASSERT( static_cast( inSession->Streams()[0] )->Codecs().Count() == 0 ); - } @@ -695,7 +754,7 @@ CleanupStack::Pop( inSession ); iReceiveSession->iSession->iState = CMceSession::EProceeding; - iReceiveSession->AcceptInvitationL( ETrue ); + iReceiveSession->EstablishLcSessionL(); // Now we have an insession, try to update session that is not ours, // new one gets rejected and deleted. @@ -752,36 +811,28 @@ // Try without a session, nothing happens iReceiveSession->StreamStateChanged( *audioStream ); - // Establish session - + // Establish session iReceiveSession->IncomingSession( inSession, &container ); CleanupStack::Pop( inSession ); - iObserver->Reset(); + iLcSessionObserver->Reset(); // Try with audiostream, nothing happens audioStream->iState = CMceMediaStream::EBuffering; iReceiveSession->StreamStateChanged( *audioStream ); - EUNIT_ASSERT( iObserver->IsReseted() ) + EUNIT_ASSERT( iLcSessionObserver->IsReseted() ) - // Try with videostream, but without a source, nothing happens - - // Needed hacking - CMceRtpSource* rtpSource = - static_cast( videoStream->Source() ); - videoStream->iSource = NULL; - + // Try with videostream, but without a source, nothing happens + CMceRtpSource* rtpSource = + static_cast( videoStream->Source() ); //hack + videoStream->iSource = NULL; iReceiveSession->StreamStateChanged( *videoStream ); - EUNIT_ASSERT( iObserver->IsReseted() ) + EUNIT_ASSERT( iLcSessionObserver->IsReseted() ) // Try with videostream and a camera source, nothing happens - - // Needed hacking - videoStream->iSource = - CMceCameraSource::NewLC( *iReceiveSession->iManager ); - CleanupStack::Pop(); - + videoStream->iSource = + CMceCameraSource::NewL( *iReceiveSession->iManager ); //hack iReceiveSession->StreamStateChanged( *videoStream ); - EUNIT_ASSERT( iObserver->IsReseted() ) + EUNIT_ASSERT( iLcSessionObserver->IsReseted() ) // Remove hacks delete videoStream->iSource; @@ -790,21 +841,72 @@ // Buffering, normal case videoStream->iState = CMceMediaStream::EBuffering; iReceiveSession->StreamStateChanged( *videoStream ); - EUNIT_ASSERT( iObserver->iStreamBufferingCalled ) - iObserver->Reset(); + EUNIT_ASSERT_EQUALS( TInt( iLcSessionObserver->iCalledFunction ), + TInt( CLcSessionObserverStub::EPlayerStateChanged ) ) + EUNIT_ASSERT( iReceiveSession->iBuffered ) + iLcSessionObserver->Reset(); // Streaming, normal case videoStream->iState = CMceMediaStream::EStreaming; + iReceiveSession->iReceiving = EFalse; + iReceiveSession->iBuffered = ETrue; iReceiveSession->StreamStateChanged( *videoStream ); - EUNIT_ASSERT( iObserver->iStreamStreamingCalled ) - EUNIT_ASSERT( rtpSource->iInactivityTimer == 2000 ) - iObserver->Reset(); + EUNIT_ASSERT_EQUALS( TInt( iLcSessionObserver->iCalledFunction ), + TInt( CLcSessionObserverStub::EPlayerStateChanged ) ) + EUNIT_ASSERT_EQUALS( KMusEngInactivityTimer, rtpSource->iInactivityTimer ) + iLcSessionObserver->Reset(); + EUNIT_ASSERT_EQUALS( TInt( iLcUiProvider->iCalledFunction ), + TInt( CLcUiProviderStub::EHandleForegroundStatus ) ) + iLcUiProvider->Reset(); + // Normally background info will be cleared once ui comes to foreground and + // notifies engine about it + iReceiveSession->iBackground = EFalse; + + // Streaming, event is received even when already receiving. Streaming + // event is anyway notified. + videoStream->iState = CMceMediaStream::EStreaming; + iReceiveSession->iReceiving = ETrue; + iReceiveSession->iBuffered = ETrue; + iReceiveSession->StreamStateChanged( *videoStream ); + EUNIT_ASSERT_EQUALS( TInt( iLcSessionObserver->iCalledFunction ), + TInt( CLcSessionObserverStub::EPlayerStateChanged ) ) + EUNIT_ASSERT_EQUALS( KMusEngInactivityTimer, rtpSource->iInactivityTimer ) + iLcSessionObserver->Reset(); + EUNIT_ASSERT_EQUALS( TInt( iLcUiProvider->iCalledFunction ), + TInt( CLcUiProviderStub::EUnknown ) ) + + // Streaming and receiving started already. Streaming is not notified because + // of buffering event hasn't been received + videoStream->iState = CMceMediaStream::EStreaming; + iReceiveSession->iReceiving = ETrue; + iReceiveSession->iBuffered = EFalse; + iReceiveSession->StreamStateChanged( *videoStream ); + EUNIT_ASSERT( iLcSessionObserver->IsReseted() ) + iLcSessionObserver->Reset(); + + // Streaming, receiving not started and buffering not happened ( means no packet + // received yet. Ignore this event too. + videoStream->iState = CMceMediaStream::EStreaming; + iReceiveSession->iReceiving = EFalse; + iReceiveSession->iBuffered = EFalse; + iReceiveSession->StreamStateChanged( *videoStream ); + EUNIT_ASSERT( iLcSessionObserver->IsReseted() ) + iLcSessionObserver->Reset(); + + // Streaming, receiving not started and buffering happened. + // Enabling RTP timer leaves. Should be a failure case. + videoStream->iState = CMceMediaStream::EStreaming; + iReceiveSession->iReceiving = EFalse; + iReceiveSession->iBuffered = ETrue; + iReceiveSession->StreamStateChanged( *videoStream ); + EUNIT_ASSERT_NOT_EQUALS( TInt( iLcSessionObserver->iCalledFunction ), + TInt( CLcSessionObserverStub::EPlayerFailed ) ) + iLcSessionObserver->Reset(); // Try default behaviors videoStream->iState = CMceMediaStream::EIdle; iReceiveSession->StreamStateChanged( *videoStream ); - EUNIT_ASSERT( iObserver->iStreamIdleCalled ); - + EUNIT_ASSERT( iLcSessionObserver->IsReseted() ) } @@ -881,7 +983,6 @@ // No audio, bundle is not constructed EUNIT_ASSERT( inSession->Bundles().Count() == 0 ) - } @@ -1064,7 +1165,7 @@ KMceSpeakerSink ); CMceSpeakerSink* speaker = static_cast(inSession->Streams()[1]->Sinks()[0]); - EUNIT_ASSERT( speaker->VolumeL() == iReceiveSession->VolumeL() ) + EUNIT_ASSERT( speaker->VolumeL() == iReceiveSession->LcVolumeL() ) // Stream 2 and bound stream EUNIT_ASSERT( inSession->Streams()[2]->Type() == KMceAudio ) @@ -1073,7 +1174,7 @@ EUNIT_ASSERT( inSession->Streams()[2]->Sinks()[0]->Type() == KMceSpeakerSink ); speaker = static_cast(inSession->Streams()[2]->Sinks()[0]); - EUNIT_ASSERT( speaker->VolumeL() == iReceiveSession->VolumeL() ) + EUNIT_ASSERT( speaker->VolumeL() == iReceiveSession->LcVolumeL() ) EUNIT_ASSERT( inSession->Streams()[2]->BoundStream() ) EUNIT_ASSERT( !inSession->Streams()[2]->BoundStreamL().IsEnabled() ) @@ -1098,7 +1199,7 @@ KMceSpeakerSink ) speaker = static_cast (inSession->Streams()[3]->BoundStreamL().Sinks()[0]); - EUNIT_ASSERT( speaker->VolumeL() == iReceiveSession->VolumeL() ) + EUNIT_ASSERT( speaker->VolumeL() == iReceiveSession->LcVolumeL() ) // Check for bundles EUNIT_ASSERT( inSession->Bundles().Count() == 1 ) @@ -1164,28 +1265,39 @@ EUNIT_ASSERT_EQUALS( inSession->Bundles().Count(), 0 ) - // Session with bandwidth attribute at sessionlevel - // -> bandwidth is taken in use at session level + // Session with bandwidth attributes b=AS and b=TIAS at session and media + // levels -> b=AS is taken in use at session level (b=TIAS is ignored) // delete iReceiveSession->iSession; iReceiveSession->iSession = NULL; inSession = ConstructInSessionLC( 1, 0 ); - CDesC8Array* sdpLines = new ( ELeave ) CDesC8ArrayFlat( 1 ); + //setting session level SDP attributes + CDesC8Array* sdpLines = new ( ELeave ) CDesC8ArrayFlat( 2 ); CleanupStack::PushL( sdpLines ); sdpLines->AppendL( KMusEngSessionSdpLineBandwidthField() ); + sdpLines->AppendL( KMusEngSessionSdpLineTiasLine() ); inSession->SetSessionSDPLinesL( sdpLines ); CleanupStack::Pop( sdpLines ); + //setting media level SDP attributes + sdpLines = new ( ELeave ) CDesC8ArrayFlat( 2 ); + CleanupStack::PushL( sdpLines ); + sdpLines->AppendL( KMusEngSessionSdpLineBandwidthField() ); + sdpLines->AppendL( KMusEngSessionSdpLineTiasLine() ); + inSession->Streams()[ 0 ]->SetMediaAttributeLinesL( sdpLines ); + CleanupStack::Pop( sdpLines ); + // Transfers ownership iReceiveSession->iSession = inSession; CleanupStack::Pop( inSession ); iReceiveSession->CompleteSessionStructureL(); - - MDesC8Array* newSdpLines = iReceiveSession->iSession->SessionSDPLinesL(); - CleanupDeletePushL( newSdpLines ); - TBool bandwidthFoundFromSessionLevel( EFalse ); + + // Ensure there is only b=AS and no b=TIAS present at session level + MDesC8Array* newSdpLines = iReceiveSession->iSession->iSessionSDPLines; + TBool bandwidthFoundFromSessionLevel = EFalse; + TBool tiasFoundFromSessionLevel = EFalse; for ( TInt i = 0; newSdpLines && i < newSdpLines->MdcaCount(); i++ ) { if ( newSdpLines->MdcaPoint( i ).Compare( @@ -1193,35 +1305,32 @@ { bandwidthFoundFromSessionLevel = ETrue; } + else if ( newSdpLines->MdcaPoint( i ).Find( + KMusEngSessionSdpLineTiasLine() ) == 0 ) + { + tiasFoundFromSessionLevel = ETrue; + } } EUNIT_ASSERT( bandwidthFoundFromSessionLevel ); - CleanupStack::PopAndDestroy( newSdpLines ); + EUNIT_ASSERT( !tiasFoundFromSessionLevel ); + + // Ensure there is no bandwidth attributes at media level + newSdpLines = iReceiveSession->iSession->Streams()[ 0 ]->iMediaSDPLines; + EUNIT_ASSERT( !newSdpLines->MdcaCount() ); + - newSdpLines = iReceiveSession->iSession->Streams()[ 0 ]->MediaAttributeLinesL(); - CleanupDeletePushL( newSdpLines ); - TBool bandwidthFoundFromMediaLevel( EFalse ); - for ( TInt i = 0; newSdpLines && i < newSdpLines->MdcaCount(); i++ ) - { - if ( newSdpLines->MdcaPoint( i ).Compare( - KMusEngSessionSdpLineBandwidthField() ) == 0 ) - { - bandwidthFoundFromMediaLevel = ETrue; - } - } - EUNIT_ASSERT( !bandwidthFoundFromMediaLevel ); - CleanupStack::PopAndDestroy( newSdpLines ); - - // Session with bandwidth attribute at media level - // -> bandwidth is taken in use at media level + // Session with bandwidth AS and TIAS attributes at media level + // -> bandwidth AS is taken in use at media level // delete iReceiveSession->iSession; iReceiveSession->iSession = NULL; inSession = ConstructInSessionLC( 1, 0 ); - sdpLines = new ( ELeave ) CDesC8ArrayFlat( 1 ); + sdpLines = new ( ELeave ) CDesC8ArrayFlat( 2 ); CleanupStack::PushL( sdpLines ); sdpLines->AppendL( KMusEngSessionSdpLineBandwidthField() ); + sdpLines->AppendL( KMusEngSessionSdpLineTiasLine() ); inSession->Streams()[ 0 ]->SetMediaAttributeLinesL( sdpLines ); CleanupStack::Pop( sdpLines ); @@ -1231,35 +1340,180 @@ iReceiveSession->CompleteSessionStructureL(); - newSdpLines = iReceiveSession->iSession->SessionSDPLinesL(); - CleanupDeletePushL( newSdpLines ); + // Ensure there is no bandwidth attribute at session level + newSdpLines = iReceiveSession->iSession->iSessionSDPLines; bandwidthFoundFromSessionLevel = EFalse; for ( TInt i = 0; newSdpLines && i < newSdpLines->MdcaCount(); i++ ) { if ( newSdpLines->MdcaPoint( i ).Compare( - KMusEngSessionSdpLineBandwidthField() ) == 0 ) + KMusEngSessionSdpLineBandwidthField() ) == 0 + || newSdpLines->MdcaPoint( i ).Find( + KMusEngSessionSdpLineTiasLine() ) == 0 ) { bandwidthFoundFromSessionLevel = ETrue; } } EUNIT_ASSERT( !bandwidthFoundFromSessionLevel ); - CleanupStack::PopAndDestroy( newSdpLines ); - newSdpLines = iReceiveSession->iSession->Streams()[ 0 ]->MediaAttributeLinesL(); - CleanupDeletePushL( newSdpLines ); - bandwidthFoundFromMediaLevel = EFalse; - for ( TInt i = 0; newSdpLines && i < newSdpLines->MdcaCount(); i++ ) - { - if ( newSdpLines->MdcaPoint( i ).Compare( - KMusEngSessionSdpLineBandwidthField() ) == 0 ) - { - bandwidthFoundFromMediaLevel = ETrue; - } - } - EUNIT_ASSERT( bandwidthFoundFromMediaLevel ); - CleanupStack::PopAndDestroy( newSdpLines ); + // Ensure media level has only b=AS attribute + newSdpLines = iReceiveSession->iSession->Streams()[ 0 ]->iMediaSDPLines; + EUNIT_ASSERT( newSdpLines ); + EUNIT_ASSERT( newSdpLines->MdcaCount() == 1 ); + EUNIT_ASSERT( newSdpLines->MdcaPoint( 0 ) == KMusEngSessionSdpLineBandwidthField() ); } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_CMusEngReceiveSession::UT_CompleteSessionStructureL_SdpBandwidthAttributesL() + { + CRepository::SetStubGlobal( MusSettingsKeys::KVideoBandwidth, + 128 ); + + // 1. Session without bandwidth attributes. => b=AS and b=TIAS will be + // taken at media level + CMceInSession* inSession = ConstructInSessionLC( 1, 0 ); + + iReceiveSession->iSession = inSession; // Transfers ownership + CleanupStack::Pop( inSession ); + + iReceiveSession->CompleteSessionStructureL(); + + // Ensure b=AS and b=TIAS present at media level only + MDesC8Array* newSdpLines = iReceiveSession->iSession->iSessionSDPLines; + EUNIT_ASSERT( newSdpLines->MdcaCount() == 1 ); + EUNIT_ASSERT( newSdpLines->MdcaPoint( 0 ) == KMusEngSessionSdpLineXApplication() ); + + // Ensure b=AS and b=TIAS present at media level + EUNIT_ASSERT( iReceiveSession->iSession->Streams().Count() > 0 ); + newSdpLines = iReceiveSession->iSession->Streams()[ 0 ]->iMediaSDPLines; + EUNIT_ASSERT( newSdpLines ); + EUNIT_ASSERT( newSdpLines->MdcaCount() == 2 ); + EUNIT_ASSERT( newSdpLines->MdcaPoint( 0 ).Find( + KMusEngSessionSdpLineBandwidthLine() ) == 0 ); + EUNIT_ASSERT( newSdpLines->MdcaPoint( 1 ).Find( + KMusEngSessionSdpLineTiasLine() ) == 0 ); + + + // 2. Session with b=AS bandwidth attribute at session level + // => b=AS and b=TIAS will be taken at session level + delete iReceiveSession->iSession; + iReceiveSession->iSession = NULL; + + inSession = ConstructInSessionLC( 1, 0 ); + //setting session level SDP attributes + CDesC8Array* sdpLines = new ( ELeave ) CDesC8ArrayFlat( 1 ); + CleanupStack::PushL( sdpLines ); + sdpLines->AppendL( KMusEngSessionSdpLineBandwidthField() ); + inSession->SetSessionSDPLinesL( sdpLines ); + CleanupStack::Pop( sdpLines ); + + // Transfers ownership + iReceiveSession->iSession = inSession; + CleanupStack::Pop( inSession ); + + iReceiveSession->CompleteSessionStructureL(); + + // Ensure b=AS and b=TIAS present at session level only + newSdpLines = iReceiveSession->iSession->iSessionSDPLines; + EUNIT_ASSERT( newSdpLines ); + EUNIT_ASSERT( newSdpLines->MdcaCount() == 3 ); + EUNIT_ASSERT( newSdpLines->MdcaPoint( 0 ) == KMusEngSessionSdpLineXApplication() ); + EUNIT_ASSERT( newSdpLines->MdcaPoint( 1 ).Find ( + KMusEngSessionSdpLineBandwidthLine() ) == 0 ); + EUNIT_ASSERT( newSdpLines->MdcaPoint( 2 ).Find( + KMusEngSessionSdpLineTiasLine() ) == 0 ); + + EUNIT_ASSERT( iReceiveSession->iSession->Streams().Count() > 0 ); + newSdpLines = iReceiveSession->iSession->Streams()[ 0 ]->iMediaSDPLines; + EUNIT_ASSERT( newSdpLines ); + EUNIT_ASSERT( newSdpLines->MdcaCount() == 0 ); + + // 3. Session with b=AS bandwidth attribute at media level + // => b=AS and b=TIAS will be taken at media level + delete iReceiveSession->iSession; + iReceiveSession->iSession = NULL; + + inSession = ConstructInSessionLC( 1, 0 ); + //setting media level SDP attributes + sdpLines = new ( ELeave ) CDesC8ArrayFlat( 1 ); + CleanupStack::PushL( sdpLines ); + sdpLines->AppendL( KMusEngSessionSdpLineBandwidthField() ); + inSession->Streams()[ 0 ]->SetMediaAttributeLinesL( sdpLines ); + CleanupStack::Pop( sdpLines ); + + // Transfers ownership + iReceiveSession->iSession = inSession; + CleanupStack::Pop( inSession ); + + iReceiveSession->CompleteSessionStructureL(); + + // Ensure b=AS and b=TIAS present only at media level + newSdpLines = iReceiveSession->iSession->iSessionSDPLines; + EUNIT_ASSERT( newSdpLines ); + EUNIT_ASSERT( newSdpLines->MdcaCount() == 1 ); + EUNIT_ASSERT( newSdpLines->MdcaPoint( 0 ) == KMusEngSessionSdpLineXApplication() ); + + EUNIT_ASSERT( iReceiveSession->iSession->Streams().Count() > 0 ); + newSdpLines = iReceiveSession->iSession->Streams()[ 0 ]->iMediaSDPLines; + EUNIT_ASSERT( newSdpLines ); + EUNIT_ASSERT( newSdpLines->MdcaCount() == 2 ); + EUNIT_ASSERT( newSdpLines->MdcaPoint( 0 ).Find ( + KMusEngSessionSdpLineBandwidthLine() ) == 0 ); + EUNIT_ASSERT( newSdpLines->MdcaPoint( 1 ).Find( + KMusEngSessionSdpLineTiasLine() ) == 0 ); + + + // 4. Session with b=AS attribute at session level and + // b=AS and b=TIAS at media level + // => b=AS and b=TIAS will be taken at session and media level + delete iReceiveSession->iSession; + iReceiveSession->iSession = NULL; + + inSession = ConstructInSessionLC( 1, 0 ); + //setting session level SDP attributes + sdpLines = new ( ELeave ) CDesC8ArrayFlat( 1 ); + CleanupStack::PushL( sdpLines ); + sdpLines->AppendL( KMusEngSessionSdpLineBandwidthField() ); + inSession->SetSessionSDPLinesL( sdpLines ); + CleanupStack::Pop( sdpLines ); + + //setting media level SDP attributes + sdpLines = new ( ELeave ) CDesC8ArrayFlat( 2 ); + CleanupStack::PushL( sdpLines ); + sdpLines->AppendL( KMusEngSessionSdpLineBandwidthField() ); + sdpLines->AppendL( KMusEngSessionSdpLineTiasLine() ); + inSession->Streams()[ 0 ]->SetMediaAttributeLinesL( sdpLines ); + CleanupStack::Pop( sdpLines ); + + // Transfers ownership + iReceiveSession->iSession = inSession; + CleanupStack::Pop( inSession ); + + iReceiveSession->CompleteSessionStructureL(); + + // Ensure b=AS and b=TIAS present at session and media level + newSdpLines = iReceiveSession->iSession->iSessionSDPLines; + EUNIT_ASSERT( newSdpLines ); + EUNIT_ASSERT( newSdpLines->MdcaCount() == 3 ); + EUNIT_ASSERT( newSdpLines->MdcaPoint( 0 ) == KMusEngSessionSdpLineXApplication() ); + EUNIT_ASSERT( newSdpLines->MdcaPoint( 1 ).Find ( + KMusEngSessionSdpLineBandwidthLine() ) == 0 ); + EUNIT_ASSERT( newSdpLines->MdcaPoint( 2 ).Find( + KMusEngSessionSdpLineTiasLine() ) == 0 ); + + EUNIT_ASSERT( iReceiveSession->iSession->Streams().Count() > 0 ); + newSdpLines = iReceiveSession->iSession->Streams()[ 0 ]->iMediaSDPLines; + EUNIT_ASSERT( newSdpLines ); + EUNIT_ASSERT( newSdpLines->MdcaCount() == 2 ); + EUNIT_ASSERT( newSdpLines->MdcaPoint( 0 ).Find ( + KMusEngSessionSdpLineBandwidthLine() ) == 0 ); + EUNIT_ASSERT( newSdpLines->MdcaPoint( 1 ).Find( + KMusEngSessionSdpLineTiasLine() ) == 0 ); + } + // ----------------------------------------------------------------------------- // @@ -1333,6 +1587,88 @@ EUNIT_ASSERT_EQUALS( iReceiveSession->iIdentity, KNullDesC8 ) } +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_CMusEngReceiveSession::UT_ContactSavingLL() + { + ContactEngineStubHelper::Reset(); + + // Saving of contact is done at destruction phase only if originator value + // exists + // + CMusEngReceiveSession* receiveSession = CMusEngReceiveSession::NewL(); + receiveSession->SetLcSessionObserver( iLcSessionObserver ); + delete receiveSession; + receiveSession = NULL; + EUNIT_ASSERT( ContactEngineStubHelper::GetCalledFunction() == EContactEngineStubNone ); + + + User::LeaveIfError( RProperty::Set( NMusSessionApi::KCategoryUid, + NMusSessionApi::KContactId, + 2 ) ); + User::LeaveIfError( RProperty::Set( NMusSessionApi::KCategoryUid, + NMusSessionApi::KTelNumber, + _L("12341234") ) ); + + receiveSession = CMusEngReceiveSession::NewL(); + CleanupStack::PushL( receiveSession ); + receiveSession->SetLcSessionObserver( iLcSessionObserver ); + delete receiveSession->iOriginator; + receiveSession->iOriginator = NULL; + receiveSession->iOriginator = _L8("sip:yep@10.10.10.10").AllocL(); + CleanupStack::PopAndDestroy( receiveSession ); + if ( ContactEngineStubHelper::GetCalledFunction() != EContactEngineStubSetText ) + { + // out-of-memory was trap ignored and saving failed because of that + User::Leave( KErrNoMemory ); + } + EUNIT_ASSERT( ContactEngineStubHelper::GetCalledFunction() == EContactEngineStubSetText ); + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_CMusEngReceiveSession::UT_IsDisplayActive() + { + // Display is active only if receiving and display is explicitly enabled + CMceInSession* inSession = ConstructInSessionLC( 1, 1 ); + iReceiveSession->iSession = inSession; // Transfers ownership + CleanupStack::Pop( inSession ); + iReceiveSession->EnableDisplayL( ETrue ); + EUNIT_ASSERT( !iReceiveSession->IsDisplayActive() ) + iReceiveSession->iReceiving = ETrue; + EUNIT_ASSERT( iReceiveSession->IsDisplayActive() ) + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_CMusEngReceiveSession::UT_InactivityTimeoutL() + { + // Not receiving, no effect + iReceiveSession->iReceiving = EFalse; + CMceVideoStream* videoStream = CMceVideoStream::NewLC(); + CMceRtpSource* rtpSource = CMceRtpSource::NewLC(); + iReceiveSession->InactivityTimeout( *videoStream, *rtpSource ); + EUNIT_ASSERT( iLcSessionObserver->IsReseted() ); + + // Receiving, state change is notified and + // receiving and buffering status are cleared + iReceiveSession->iBuffered = ETrue; + iReceiveSession->iReceiving = ETrue; + iReceiveSession->InactivityTimeout( *videoStream, *rtpSource ); + EUNIT_ASSERT_EQUALS( iLcSessionObserver->iCalledFunction, + CLcSessionObserverStub::EPlayerStateChanged ); + EUNIT_ASSERT( !iReceiveSession->iReceiving ); + EUNIT_ASSERT( !iReceiveSession->iBuffered ); + CleanupStack::PopAndDestroy( rtpSource ); + CleanupStack::PopAndDestroy( videoStream ); + } + // TEST TABLE @@ -1349,11 +1685,39 @@ SetupL, UT_NewLL, Teardown) EUNIT_TEST( - "AcceptInvitationL - test ", + "LcSessionState - test ", + "CMusEngReceiveSession", + "LcSessionState", + "FUNCTIONALITY", + SetupL, UT_LcSessionStateL, Teardown) + +EUNIT_TEST( + "EstablishLcSessionL - test ", + "CMusEngReceiveSession", + "EstablishLcSessionL", + "FUNCTIONALITY", + SetupL, UT_EstablishLcSessionL, Teardown) + +EUNIT_TEST( + "TerminateLcSessionL - test ", "CMusEngReceiveSession", - "AcceptInvitationL", + "TerminateLcSessionL", + "FUNCTIONALITY", + SetupL, UT_TerminateLcSessionL, Teardown) + +EUNIT_TEST( + "RemoteVideoPlayer - test ", + "CMusEngReceiveSession", + "RemoteVideoPlayer", "FUNCTIONALITY", - SetupL, UT_AcceptInvitationLL, Teardown) + SetupL, UT_RemoteVideoPlayerL, Teardown) + +EUNIT_TEST( + "RemoteDisplayName - test ", + "CMusEngReceiveSession", + "RemoteDisplayName", + "FUNCTIONALITY", + SetupL, UT_RemoteDisplayName, Teardown) EUNIT_TEST( "HandleSessionStateChanged - test ", @@ -1468,13 +1832,40 @@ SetupL, UT_CompleteSessionStructureL_OperatorVariant, Teardown) EUNIT_TEST( + "CompleteSessionStructureL - test SDP bandwidth attributes handling", + "CMusEngReceiveSession", + "CompleteSessionStructureL", + "FUNCTIONALITY", + SetupL, UT_CompleteSessionStructureL_SdpBandwidthAttributesL, Teardown) + +EUNIT_TEST( "ParseAssertedIdentity", "CMusEngReceiveSession", "ParseAssertedIdentity", "FUNCTIONALITY", SetupL, UT_ParseAssertedIdentityL, Teardown) - +EUNIT_TEST( + "ContactSavingL - test", + "CMusEngReceiveSession", + "ContactSavingL", + "FUNCTIONALITY", + SetupL, UT_ContactSavingLL, Teardown) + +EUNIT_TEST( + "IsDisplayActive - test", + "CMusEngReceiveSession", + "IsDisplayActive", + "FUNCTIONALITY", + SetupL, UT_IsDisplayActive, Teardown) + +EUNIT_TEST( + "InactivityTimeout - test ", + "CMusEngReceiveSession", + "InactivityTimeout", + "FUNCTIONALITY", + SetupL, UT_InactivityTimeoutL, Teardown) + EUNIT_END_TEST_TABLE // END OF FILE diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshengine/tsrc/ut_engine/src/ut_musengremotevideoplayer.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/mmshengine/tsrc/ut_engine/src/ut_musengremotevideoplayer.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,440 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + + +// INTERNAL INCLUDES +#include "ut_musengremotevideoplayer.h" +#include "musengremotevideoplayer.h" +#include "mceinsession.h" +#include "mcevideostream.h" +#include "mcertpsource.h" +#include "mcedisplaysink.h" + +// SYSTEM INCLUDES +#include + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +UT_CMusEngRemoteVideoPlayer* UT_CMusEngRemoteVideoPlayer::NewL() + { + UT_CMusEngRemoteVideoPlayer* self = UT_CMusEngRemoteVideoPlayer::NewLC(); + CleanupStack::Pop( self ); + return self; + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +UT_CMusEngRemoteVideoPlayer* UT_CMusEngRemoteVideoPlayer::NewLC() + { + UT_CMusEngRemoteVideoPlayer* self = new( ELeave ) UT_CMusEngRemoteVideoPlayer(); + CleanupStack::PushL( self ); + self->ConstructL(); + return self; + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +UT_CMusEngRemoteVideoPlayer::~UT_CMusEngRemoteVideoPlayer() + { + // NOP + } + + +// ----------------------------------------------------------------------------- +// Default constructor +// ----------------------------------------------------------------------------- +// +UT_CMusEngRemoteVideoPlayer::UT_CMusEngRemoteVideoPlayer() + { + // NOP + } + + +// ----------------------------------------------------------------------------- +// Second phase construct +// ----------------------------------------------------------------------------- +// +void UT_CMusEngRemoteVideoPlayer::ConstructL() + { + // The ConstructL from the base class CEUnitTestSuiteClass must be called. + // It generates the test case table. + CEUnitTestSuiteClass::ConstructL(); + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_CMusEngRemoteVideoPlayer::SetupL() + { + iMceSession = CMceInSession::NewL(); + CMceVideoStream* videoStream = CMceVideoStream::NewLC(); + CMceRtpSource* source = CMceRtpSource::NewLC(); + videoStream->SetSourceL( source ); + CleanupStack::Pop( source ); + CMceDisplaySink* sink = CMceDisplaySink::NewLC(); + videoStream->AddSinkL( sink ); + CleanupStack::Pop( sink ); + iMceSession->AddStreamL( videoStream ); + CleanupStack::Pop( videoStream ); + + iRemoteVideoPlayer = CMusEngRemoteVideoPlayer::NewL( + iDisplayHandlerStub, + iLcAudioControlStub ); + iRemoteVideoPlayer->SetMceSession( iMceSession ); + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_CMusEngRemoteVideoPlayer::Teardown() + { + delete iRemoteVideoPlayer; + delete iMceSession; + iLcAudioControlStub.Reset(); + } + + + +// TEST CASES + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_CMusEngRemoteVideoPlayer::UT_NewLL() + { + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_CMusEngRemoteVideoPlayer::UT_LcVideoPlayerStateL() + { + // iMceSession not set + iRemoteVideoPlayer->SetMceSession( NULL ); + EUNIT_ASSERT_EQUALS( TInt( MLcVideoPlayer::EUnavailable ), + TInt( iRemoteVideoPlayer->LcVideoPlayerState() ) ) + iRemoteVideoPlayer->SetMceSession( iMceSession ); + + // Establish Session and simulate media playing. + iMceSession->iState = CMceSession::EEstablished; + for ( TInt i = 0; i < iMceSession->Streams().Count(); i++ ) + { + iMceSession->Streams()[i]->iState = CMceMediaStream::EStreaming; + } + + EUNIT_ASSERT_EQUALS( TInt( MLcVideoPlayer::EPlaying ), + TInt( iRemoteVideoPlayer->LcVideoPlayerState() ) ) + + // Media streams unavailable + iMceSession->Streams()[0]->iState = CMceMediaStream::EUninitialized; + EUNIT_ASSERT_EQUALS( TInt( MLcVideoPlayer::EUnavailable ), + TInt( iRemoteVideoPlayer->LcVideoPlayerState() ) ) + + // All other stream states + iMceSession->Streams()[0]->iState = CMceMediaStream::EInitialized; + EUNIT_ASSERT_EQUALS( TInt( MLcVideoPlayer::EInit ), + TInt( iRemoteVideoPlayer->LcVideoPlayerState() ) ) + + iMceSession->Streams()[0]->iState = CMceMediaStream::EBuffering; + EUNIT_ASSERT_EQUALS( TInt( MLcVideoPlayer::EBuffering ), + TInt( iRemoteVideoPlayer->LcVideoPlayerState() ) ) + + iMceSession->Streams()[0]->iState = CMceMediaStream::EIdle; + EUNIT_ASSERT_EQUALS( TInt( MLcVideoPlayer::EPaused ), + TInt( iRemoteVideoPlayer->LcVideoPlayerState() ) ) + + iMceSession->Streams()[0]->iState = CMceMediaStream::EDisabled; + EUNIT_ASSERT_EQUALS( TInt( MLcVideoPlayer::EPaused ), + TInt( iRemoteVideoPlayer->LcVideoPlayerState() ) ) + + iDisplayHandlerStub.iIsActive = ETrue; + iMceSession->Streams()[0]->iState = CMceMediaStream::EStreaming; + EUNIT_ASSERT_EQUALS( TInt( MLcVideoPlayer::EPlaying ), + TInt( iRemoteVideoPlayer->LcVideoPlayerState() ) ) + + iDisplayHandlerStub.iIsActive = EFalse; + iMceSession->Streams()[0]->iState = CMceMediaStream::EStreaming; + EUNIT_ASSERT_EQUALS( TInt( MLcVideoPlayer::EPaused ), + TInt( iRemoteVideoPlayer->LcVideoPlayerState() ) ) + + iMceSession->Streams()[0]->iState = CMceMediaStream::ENoResources; + EUNIT_ASSERT_EQUALS( TInt( MLcVideoPlayer::EUnavailable ), + TInt( iRemoteVideoPlayer->LcVideoPlayerState() ) ) + + iMceSession->Streams()[0]->iState = CMceMediaStream::ETranscodingRequired; + EUNIT_ASSERT_EQUALS( TInt( MLcVideoPlayer::EUnavailable ), + TInt( iRemoteVideoPlayer->LcVideoPlayerState() ) ) + + iMceSession->Streams()[0]->iState = CMceMediaStream::ETranscoding; + EUNIT_ASSERT_EQUALS( TInt( MLcVideoPlayer::EUnavailable ), + TInt( iRemoteVideoPlayer->LcVideoPlayerState() ) ) + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_CMusEngRemoteVideoPlayer::UT_LcPlayL() + { + // iMceSession not set + iRemoteVideoPlayer->SetMceSession( NULL ); + EUNIT_ASSERT( !iRemoteVideoPlayer->LcIsPlayingL() ) + iRemoteVideoPlayer->SetMceSession( iMceSession ); + + iMceSession->iState = CMceSession::EEstablished; + for ( TInt i = 0; i < iMceSession->Streams().Count(); i++ ) + { + iMceSession->Streams()[i]->iState = CMceMediaStream::EStreaming; + } + + // Play Test + iRemoteVideoPlayer->LcPlayL(); + EUNIT_ASSERT( iRemoteVideoPlayer->LcIsPlayingL() ) + + // Pause Test + iMceSession->Streams()[0]->iState = CMceMediaStream::EDisabled; + iRemoteVideoPlayer->LcPauseL(); + EUNIT_ASSERT( !iRemoteVideoPlayer->LcIsPlayingL() ) + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_CMusEngRemoteVideoPlayer::UT_LcWindowL() + { + EUNIT_ASSERT( iRemoteVideoPlayer->LcWindow() == iRemoteVideoPlayer ) + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_CMusEngRemoteVideoPlayer::UT_LcCameraControlL() + { + EUNIT_ASSERT( iRemoteVideoPlayer->LcCameraControl() == NULL ) + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_CMusEngRemoteVideoPlayer::UT_LcSourceFileControlL() + { + EUNIT_ASSERT( iRemoteVideoPlayer->LcSourceFileControl() == NULL ) + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_CMusEngRemoteVideoPlayer::UT_LcDestinationFileControlL() + { + EUNIT_ASSERT( iRemoteVideoPlayer->LcDestinationFileControl() == NULL ) + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_CMusEngRemoteVideoPlayer::UT_LcAudioControlL() + { + EUNIT_ASSERT( iRemoteVideoPlayer->LcAudioControl() == &iLcAudioControlStub ) + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_CMusEngRemoteVideoPlayer::UT_LcZoomControlL() + { + EUNIT_ASSERT( iRemoteVideoPlayer->LcZoomControl() == NULL ) + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_CMusEngRemoteVideoPlayer::UT_LcBrightnessControlL() + { + EUNIT_ASSERT( iRemoteVideoPlayer->LcBrightnessControl() == NULL ) + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_CMusEngRemoteVideoPlayer::UT_EnableLcWindowL() + { + EUNIT_ASSERT( !iRemoteVideoPlayer->IsLcWindowEnabled() ) + + // Enable + iRemoteVideoPlayer->EnableLcWindowL( ETrue ); + EUNIT_ASSERT( iRemoteVideoPlayer->IsLcWindowEnabled() ) + + // Disable + iRemoteVideoPlayer->EnableLcWindowL( EFalse ); + EUNIT_ASSERT( !iRemoteVideoPlayer->IsLcWindowEnabled() ) + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_CMusEngRemoteVideoPlayer::UT_LcWindowRectL() + { + TRect rect( 12, 34, 56, 78 ); + iRemoteVideoPlayer->SetLcWindowRectL( rect ); + EUNIT_ASSERT( iRemoteVideoPlayer->LcWindowRect() == rect ) + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_CMusEngRemoteVideoPlayer::UT_LcWindowOrientationL() + { + iRemoteVideoPlayer->SetLcWindowOrientationL( MLcWindow::EPortrait ); + EUNIT_ASSERT_EQUALS( TInt( MLcWindow::EPortrait ), + TInt( iRemoteVideoPlayer->LcWindowOrientationL() ) ) + + iRemoteVideoPlayer->SetLcWindowOrientationL( MLcWindow::ELandscape ); + EUNIT_ASSERT_EQUALS( TInt( MLcWindow::ELandscape ), + TInt( iRemoteVideoPlayer->LcWindowOrientationL() ) ) + } + + +// TEST TABLE + +EUNIT_BEGIN_TEST_TABLE( + UT_CMusEngRemoteVideoPlayer, + "UT_CMusEngRemoteVideoPlayer", + "UNIT" ) + +EUNIT_TEST( + "NewL - test ", + "CMusEngRemoteVideoPlayer", + "NewL", + "FUNCTIONALITY", + SetupL, UT_NewLL, Teardown) + +EUNIT_TEST( + "LcVideoPlayerState - test ", + "CMusEngRemoteVideoPlayer", + "LcVideoPlayerState", + "FUNCTIONALITY", + SetupL, UT_LcVideoPlayerStateL, Teardown) + +EUNIT_TEST( + "LcPlayL - test ", + "CMusEngRemoteVideoPlayer", + "LcPlayL", + "FUNCTIONALITY", + SetupL, UT_LcPlayL, Teardown) + +EUNIT_TEST( + "LcWindow - test ", + "CMusEngRemoteVideoPlayer", + "LcWindow", + "FUNCTIONALITY", + SetupL, UT_LcWindowL, Teardown) + +EUNIT_TEST( + "LcCameraControl - test ", + "CMusEngRemoteVideoPlayer", + "LcCameraControl", + "FUNCTIONALITY", + SetupL, UT_LcCameraControlL, Teardown) + +EUNIT_TEST( + "LcSourceFile - test ", + "CMusEngRemoteVideoPlayer", + "LcSourceFile", + "FUNCTIONALITY", + SetupL, UT_LcSourceFileControlL, Teardown) + +EUNIT_TEST( + "LcDestinationFile - test ", + "CMusEngRemoteVideoPlayer", + "LcDestinationFile", + "FUNCTIONALITY", + SetupL, UT_LcDestinationFileControlL, Teardown) + +EUNIT_TEST( + "LcAudioControl - test ", + "CMusEngRemoteVideoPlayer", + "LcAudioControl", + "FUNCTIONALITY", + SetupL, UT_LcAudioControlL, Teardown) + +EUNIT_TEST( + "LcZoomControl - test ", + "CMusEngRemoteVideoPlayer", + "LcZoomControl", + "FUNCTIONALITY", + SetupL, UT_LcZoomControlL, Teardown) + +EUNIT_TEST( + "LcBrightnessControl - test ", + "CMusEngRemoteVideoPlayer", + "LcBrightnessControl", + "FUNCTIONALITY", + SetupL, UT_LcBrightnessControlL, Teardown) + +EUNIT_TEST( + "EnableLcWindowL - test ", + "CMusEngRemoteVideoPlayer", + "EnableLcWindowL", + "FUNCTIONALITY", + SetupL, UT_EnableLcWindowL, Teardown) + +EUNIT_TEST( + "LcWindowRect - test ", + "CMusEngRemoteVideoPlayer", + "LcWindowRect", + "FUNCTIONALITY", + SetupL, UT_LcWindowRectL, Teardown) + +EUNIT_TEST( + "LcWindowOrientation - test ", + "CMusEngRemoteVideoPlayer", + "LcWindowOrientation", + "FUNCTIONALITY", + SetupL, UT_LcWindowOrientationL, Teardown) + + +EUNIT_END_TEST_TABLE + +// END OF FILE + + diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshengine/tsrc/ut_engine/src/ut_musengsession.cpp --- a/mmsharing/mmshengine/tsrc/ut_engine/src/ut_musengsession.cpp Thu Aug 19 09:51:39 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,637 +0,0 @@ -/* -* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - initial contribution. -* -* Contributors: -* -* Description: -* -*/ - - -// INTERNAL INCLUDES -#include "telephonyaudiorouting.h" -#include "ut_musengsession.h" -#include "musengstubs.h" -#include "musengtestdefs.h" - -#include "musenglivesession.h" -#include "musengtelephoneutils.h" -#include "musengmceutils.h" - -// SYSTEM INCLUDES -#include -#include -#include -#include -#include - - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -UT_CMusEngSession* UT_CMusEngSession::NewL() - { - UT_CMusEngSession* self = UT_CMusEngSession::NewLC(); - CleanupStack::Pop( self ); - return self; - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -UT_CMusEngSession* UT_CMusEngSession::NewLC() - { - UT_CMusEngSession* self = new( ELeave ) UT_CMusEngSession(); - CleanupStack::PushL( self ); - self->ConstructL(); - return self; - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -UT_CMusEngSession::~UT_CMusEngSession() - { - // NOP - } - - -// ----------------------------------------------------------------------------- -// Default constructor -// ----------------------------------------------------------------------------- -// -UT_CMusEngSession::UT_CMusEngSession() - :iLiveSession( NULL ), - iObserver( NULL ) - { - // NOP - } - - -// ----------------------------------------------------------------------------- -// Second phase construct -// ----------------------------------------------------------------------------- -// -void UT_CMusEngSession::ConstructL() - { - // The ConstructL from the base class CEUnitTestSuiteClass must be called. - // It generates the test case table. - CEUnitTestSuiteClass::ConstructL(); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void UT_CMusEngSession::SetupL() - { - iObserver = new( ELeave ) CMusEngObserverStub; - iLiveSession = CMusEngLiveSession::NewL( KNullDesC(), - TRect(0,0, 100,100), - *iObserver, - *iObserver, - *iObserver ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void UT_CMusEngSession::Teardown() - { - delete iLiveSession; - delete iObserver; - } - - - -// TEST CASES - - - - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void UT_CMusEngSession::UT_RectL() - { - TRect rect = iLiveSession->Rect(); - - // Initial values - EUNIT_ASSERT( rect.iTl.iX == 0 ); - EUNIT_ASSERT( rect.iTl.iY == 0 ); - EUNIT_ASSERT( rect.iBr.iX == 100 ); - EUNIT_ASSERT( rect.iBr.iY == 100 ); - - iLiveSession->iRect.iTl.iX = 100; - iLiveSession->iRect.iTl.iY = 200; - iLiveSession->iRect.iBr.iX = 300; - iLiveSession->iRect.iBr.iY = 400; - - rect = iLiveSession->Rect(); - - EUNIT_ASSERT( rect.iTl.iX == 100 ); - EUNIT_ASSERT( rect.iTl.iY == 200 ); - EUNIT_ASSERT( rect.iBr.iX == 300 ); - EUNIT_ASSERT( rect.iBr.iY == 400 ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void UT_CMusEngSession::UT_SetRectLL() - { - TRect rect; - - rect.iTl.iX = 100; - rect.iTl.iY = 200; - rect.iBr.iX = 300; - rect.iBr.iY = 400; - - iLiveSession->SetRectL( rect ); - - EUNIT_ASSERT( iLiveSession->iRect.iTl.iX == 100 ); - EUNIT_ASSERT( iLiveSession->iRect.iTl.iY == 200 ); - EUNIT_ASSERT( iLiveSession->iRect.iBr.iX == 300 ); - EUNIT_ASSERT( iLiveSession->iRect.iBr.iY == 400 ); - - ESTABLISH_OUT_SESSION( iLiveSession ); - - CMceDisplaySink* display = - MusEngMceUtils::GetDisplayL( *( iLiveSession->iSession ) ); - - TRect displayRect = display->DisplayRectL(); - - EUNIT_ASSERT( displayRect.iTl.iX == 100 ); - EUNIT_ASSERT( displayRect.iTl.iY == 200 ); - EUNIT_ASSERT( displayRect.iBr.iX == 300 ); - EUNIT_ASSERT( displayRect.iBr.iY == 400 ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void UT_CMusEngSession::UT_AudioRoutingCanBeChangedL() - { - iLiveSession->iTelephoneUtils->iTelephonyAudioRouting->iCurrentOutput = - CTelephonyAudioRouting::ELoudspeaker; - EUNIT_ASSERT( iLiveSession->AudioRoutingCanBeChanged() ); - - iLiveSession->iTelephoneUtils->iTelephonyAudioRouting->iCurrentOutput = - CTelephonyAudioRouting::EWiredAudioAccessory; - EUNIT_ASSERT( !iLiveSession->AudioRoutingCanBeChanged() ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void UT_CMusEngSession::UT_IsAudioRoutingHeadsetL() - { - iLiveSession->iTelephoneUtils->iTelephonyAudioRouting->iCurrentOutput = - CTelephonyAudioRouting::EBTAudioAccessory; - EUNIT_ASSERT( iLiveSession->IsAudioRoutingHeadset() ); - - iLiveSession->iTelephoneUtils->iTelephonyAudioRouting->iCurrentOutput = - CTelephonyAudioRouting::ENotActive; - EUNIT_ASSERT( !iLiveSession->IsAudioRoutingHeadset()); - - iLiveSession->iTelephoneUtils->iTelephonyAudioRouting->iCurrentOutput = - CTelephonyAudioRouting::ENone; - EUNIT_ASSERT( !iLiveSession->IsAudioRoutingHeadset()); - - iLiveSession->iTelephoneUtils->iTelephonyAudioRouting->iCurrentOutput = - CTelephonyAudioRouting::EHandset; - EUNIT_ASSERT( !iLiveSession->IsAudioRoutingHeadset()); - - iLiveSession->iTelephoneUtils->iTelephonyAudioRouting->iCurrentOutput = - CTelephonyAudioRouting::ELoudspeaker; - EUNIT_ASSERT( !iLiveSession->IsAudioRoutingHeadset()); - - iLiveSession->iTelephoneUtils->iTelephonyAudioRouting->iCurrentOutput = - CTelephonyAudioRouting::EWiredAudioAccessory; - EUNIT_ASSERT( iLiveSession->IsAudioRoutingHeadset()); - - iLiveSession->iTelephoneUtils->iTelephonyAudioRouting->iCurrentOutput = - CTelephonyAudioRouting::ETTY; - EUNIT_ASSERT( !iLiveSession->IsAudioRoutingHeadset()); - - } - -void UT_CMusEngSession::UT_IsAudioRoutingLoudSpeakerL() - { - iLiveSession->iTelephoneUtils->iTelephonyAudioRouting->iCurrentOutput = - CTelephonyAudioRouting::ELoudspeaker; - iLiveSession->iTelephoneUtils->iAudioOutputAtStartup = - CTelephonyAudioRouting::ELoudspeaker; - EUNIT_ASSERT( !iLiveSession->IsAudioRoutingLoudSpeaker()); - - iLiveSession->iTelephoneUtils->iTelephonyAudioRouting->iCurrentOutput = - CTelephonyAudioRouting::ELoudspeaker; - iLiveSession->iTelephoneUtils->iAudioOutputAtStartup = - CTelephonyAudioRouting::EHandset; - EUNIT_ASSERT( iLiveSession->IsAudioRoutingLoudSpeaker() ); - - iLiveSession->iTelephoneUtils->iTelephonyAudioRouting->iCurrentOutput = - CTelephonyAudioRouting::ELoudspeaker; - iLiveSession->iTelephoneUtils->iAudioOutputAtStartup = - CTelephonyAudioRouting::EBTAudioAccessory; - EUNIT_ASSERT( iLiveSession->IsAudioRoutingLoudSpeaker() ); - - iLiveSession->iTelephoneUtils->iTelephonyAudioRouting->iCurrentOutput = - CTelephonyAudioRouting::ELoudspeaker; - iLiveSession->iTelephoneUtils->iAudioOutputAtStartup = - CTelephonyAudioRouting::EWiredAudioAccessory; - EUNIT_ASSERT( iLiveSession->IsAudioRoutingLoudSpeaker() ); - } - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void UT_CMusEngSession::UT_EnableLoudspeakerLL() - { - // Almost dummy case is enough, because IsLoudSpeakerEnabled forwards - // requests to CMusEngTelephonyUtils and is tested there. So test only - // fail handling - iLiveSession->EnableLoudspeakerL( EFalse, EFalse ); - - CMusEngTelephoneUtils* telephone = iLiveSession->iTelephoneUtils; - - EUNIT_ASSERT( telephone->iTelephonyAudioRouting->iShowNoteMode == EFalse ); - EUNIT_ASSERT( telephone->iTelephonyAudioRouting->iCurrentOutput != - CTelephonyAudioRouting::ELoudspeaker ); - - telephone->iTelephonyAudioRouting->iForceFailWithCode = KErrNotSupported; - - //Must fail in HW, but not in emulator - TRAPD( error, iLiveSession->EnableLoudspeakerL( ETrue, ETrue ) ); - MUS_TEST_FORWARD_ALLOC_FAILURE( error ); - - #if (!defined (__WINS__) && !defined(__WINSCW__)) - EUNIT_ASSERT( error == KErrNotSupported ); - #else - EUNIT_ASSERT( error == KErrNone ); - #endif - - EUNIT_ASSERT( telephone->iTelephonyAudioRouting->iCurrentOutput != - CTelephonyAudioRouting::ELoudspeaker ); - - telephone->iTelephonyAudioRouting->iForceFailWithCode = KErrGeneral; - - // Must fail in all cases - TRAP( error, iLiveSession->EnableLoudspeakerL( EFalse, ETrue ) ); - MUS_TEST_FORWARD_ALLOC_FAILURE( error ); - EUNIT_ASSERT( error == KErrGeneral ); - - EUNIT_ASSERT( telephone->iTelephonyAudioRouting->iCurrentOutput != - CTelephonyAudioRouting::ELoudspeaker ); - - - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void UT_CMusEngSession::UT_IsLoudSpeakerEnabledL() - { - // Dummy case is enough, because IsLoudSpeakerEnabled forwards requests - // to CMusEngTelephonyUtils and is tested there. - - // By default loudspeaker is not enabled. - EUNIT_ASSERT( !iLiveSession->IsLoudSpeakerEnabled() ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void UT_CMusEngSession::UT_VolumeLL() - { - // Dummy case is enough, because VolumeL forwards requests - // to CMusEngTelephonyUtils and is tested there. - - iLiveSession->IsLoudSpeakerEnabled(); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void UT_CMusEngSession::UT_MuteMicLL() - { - // Cannot test since EUnit notices some error leak if - // the state of the mute is actually changed. Still, from MusEngine - // point of view everything is done identically despite the fact if - // real state changes or not. => Problem is in EUnit or leak happens - // elsewhere. - } - - -// ----------------------------------------------------------------------------- -// Almost a dummy test since we cannot write -// ----------------------------------------------------------------------------- -// -void UT_CMusEngSession::UT_IsMicMutedLL() - { - // Ignore error (KErrAlreadyExists etc), just make sure this property exists - RProperty::Define( KPSUidTelMicrophoneMuteStatus, - KTelMicrophoneMuteState, - RProperty::EInt, - 0 ); - - User::LeaveIfError( RProperty::Set( KPSUidTelMicrophoneMuteStatus, - KTelMicrophoneMuteState, - EPSTelMicMuteStateUninitialized ) ); - - EUNIT_ASSERT( !iLiveSession->IsMicMutedL() ) - - User::LeaveIfError( RProperty::Set( KPSUidTelMicrophoneMuteStatus, - KTelMicrophoneMuteState, - EPSTelMicMuteOn ) ); - - EUNIT_ASSERT( iLiveSession->IsMicMutedL() ) - - User::LeaveIfError( RProperty::Set( KPSUidTelMicrophoneMuteStatus, - KTelMicrophoneMuteState, - EPSTelMicMuteOff ) ); - - EUNIT_ASSERT( !iLiveSession->IsMicMutedL() ) - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void UT_CMusEngSession::UT_SetAudioRoutingObserverL() - { - EUNIT_ASSERT( !iLiveSession->iTelephoneUtils->iAudioRoutingObserver ) - - iLiveSession->SetAudioRoutingObserver( iObserver ); - - EUNIT_ASSERT_EQUALS( iLiveSession->iTelephoneUtils->iAudioRoutingObserver, - iObserver ) - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void UT_CMusEngSession::UT_VolumeUpLL() - { - CMusEngTelephoneUtils* telephone = iLiveSession->iTelephoneUtils; - - // Next ones must leave if runs out of memory, so that test - // does not fail when executed with alloc fail simulation - User::LeaveIfError( telephone->iRepository->Set( - KTelIncallEarVolume, - KTelephonyVolumeDefaultValue ) ); - User::LeaveIfError( telephone->iRepository->Set( - KTelIncallLoudspeakerVolume, - KTelephonyVolumeDefaultValue ) ); - - - TInt earVolume = 0; - TInt speakerVolume = 0; - - iLiveSession->CMusEngSession::VolumeUpL(); - - telephone->iRepository->Get( KTelIncallEarVolume, - earVolume ); - telephone->iRepository->Get( KTelIncallLoudspeakerVolume, - speakerVolume ); - - EUNIT_ASSERT( earVolume == KTelephonyVolumeDefaultValue + 1 ); - EUNIT_ASSERT( speakerVolume == KTelephonyVolumeDefaultValue ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void UT_CMusEngSession::UT_VolumeDownLL() - { - CMusEngTelephoneUtils* telephone = iLiveSession->iTelephoneUtils; - - // Next ones must leave if runs out of memory, so that test - // does not fail when executed with alloc fail simulation - User::LeaveIfError( telephone->iRepository->Set( - KTelIncallEarVolume, - KTelephonyVolumeDefaultValue ) ); - User::LeaveIfError( telephone->iRepository->Set( - KTelIncallLoudspeakerVolume, - KTelephonyVolumeDefaultValue ) ); - - - TInt earVolume = 0; - TInt speakerVolume = 0; - - iLiveSession->CMusEngSession::VolumeDownL(); - - telephone->iRepository->Get( KTelIncallEarVolume, - earVolume ); - telephone->iRepository->Get( KTelIncallLoudspeakerVolume, - speakerVolume ); - - EUNIT_ASSERT( earVolume == KTelephonyVolumeDefaultValue - 1 ); - EUNIT_ASSERT( speakerVolume == KTelephonyVolumeDefaultValue ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void UT_CMusEngSession::UT_SetVolumeLL() - { - CMusEngTelephoneUtils* telephone = iLiveSession->iTelephoneUtils; - - // Next ones must leave if runs out of memory, so that test - // does not fail when executed with alloc fail simulation - User::LeaveIfError( telephone->iRepository->Set( - KTelIncallEarVolume, - KTelephonyVolumeDefaultValue ) ); - User::LeaveIfError( telephone->iRepository->Set( - KTelIncallLoudspeakerVolume, - KTelephonyVolumeDefaultValue ) ); - - - TInt earVolume = 0; - TInt speakerVolume = 0; - TInt newVolume = KTelephonyVolumeDefaultValue + 1; - - iLiveSession->CMusEngSession::SetVolumeL( newVolume ); - - telephone->iRepository->Get( KTelIncallEarVolume, - earVolume ); - telephone->iRepository->Get( KTelIncallLoudspeakerVolume, - speakerVolume ); - - EUNIT_ASSERT( earVolume == newVolume ); - EUNIT_ASSERT( speakerVolume == KTelephonyVolumeDefaultValue ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void UT_CMusEngSession::UT_SetVolumeChangeObserverL() - { - EUNIT_ASSERT( !iLiveSession->iVolumeObserver ) - - iLiveSession->SetVolumeChangeObserver( iObserver ); - - EUNIT_ASSERT_EQUALS( iLiveSession->iVolumeObserver, iObserver ) - - iObserver->VolumeChanged( 2, EFalse ); - EUNIT_ASSERT( iObserver->iVolume == 2 ); - } - - -// TEST TABLE - -EUNIT_BEGIN_TEST_TABLE( - UT_CMusEngSession, - "UT_CMusEngSesssion", - "UNIT" ) - -EUNIT_TEST( - "Rect - test ", - "CMusEngSession", - "Rect", - "FUNCTIONALITY", - SetupL, UT_RectL, Teardown) - -EUNIT_TEST( - "SetRectL - test ", - "CMusEngSession", - "SetRectL", - "FUNCTIONALITY", - SetupL, UT_SetRectLL, Teardown) - -EUNIT_TEST( - "AudioRoutingCanBeChanged - test ", - "CMusEngSession", - "AudioRoutingCanBeChanged", - "FUNCTIONALITY", - SetupL, UT_AudioRoutingCanBeChangedL, Teardown) - -EUNIT_TEST( - "IsAudioRoutingHeadsetL - test ", - "CMusEngSession", - "IsAudioRoutingHeadsetL", - "FUNCTIONALITY", - SetupL, UT_IsAudioRoutingHeadsetL, Teardown) - -EUNIT_TEST( - "IsAudioRoutingLoudSpeakerL - test ", - "CMusEngSession", - "IsAudioRoutingLoudSpeakerL", - "FUNCTIONALITY", - SetupL, UT_IsAudioRoutingLoudSpeakerL, Teardown) - -EUNIT_TEST( - "EnableLoudspeakerL - test ", - "CMusEngSession", - "EnableLoudspeakerL", - "FUNCTIONALITY", - SetupL, UT_EnableLoudspeakerLL, Teardown) - -EUNIT_TEST( - "IsLoudSpeakerEnabled - test ", - "CMusEngSession", - "IsLoudSpeakerEnabled", - "FUNCTIONALITY", - SetupL, UT_IsLoudSpeakerEnabledL, Teardown) - -EUNIT_TEST( - "VolumeL - test ", - "CMusEngSession", - "VolumeL", - "FUNCTIONALITY", - SetupL, UT_VolumeLL, Teardown) - -EUNIT_TEST( - "MuteMicL - test ", - "CMusEngSession", - "MuteMicL", - "FUNCTIONALITY", - SetupL, UT_MuteMicLL, Teardown) - -EUNIT_TEST( - "IsMicMutedL - test ", - "CMusEngSession", - "IsMicMutedL", - "FUNCTIONALITY", - SetupL, UT_IsMicMutedLL, Teardown) - -EUNIT_TEST( - "SetAudioRoutingObserverL - test ", - "CMusEngSession", - "SetAudioRoutingObserverL", - "FUNCTIONALITY", - SetupL, UT_SetAudioRoutingObserverL, Teardown) - -EUNIT_TEST( - "VolumeUpL - test ", - "CMusEngSession", - "VolumeUpL", - "FUNCTIONALITY", - SetupL, UT_VolumeUpLL, Teardown) - -EUNIT_TEST( - "VolumeDownL - test ", - "CMusEngSession", - "VolumeDownL", - "FUNCTIONALITY", - SetupL, UT_VolumeDownLL, Teardown) - -EUNIT_TEST( - "SetVolumeL - test ", - "CMusEngSession", - "SetVolumeL", - "FUNCTIONALITY", - SetupL, UT_SetVolumeLL, Teardown) - -EUNIT_TEST( - "SetVolumeChangeObserver - test ", - "CMusEngSession", - "SetVolumeChangeObserver", - "FUNCTIONALITY", - SetupL, UT_SetVolumeChangeObserverL, Teardown) - - -EUNIT_END_TEST_TABLE - -// END OF FILE diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshengine/tsrc/ut_engine/src/ut_musengsessionmanager.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/mmshengine/tsrc/ut_engine/src/ut_musengsessionmanager.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,293 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + + +// INTERNAL INCLUDES +#include "musengstubs.h" +#include "ut_musengsessionmanager.h" +#include "musengsessionmanager.h" +#include "musengmcesession.h" +#include "musengmceoutsession.h" +#include "mussessionproperties.h" +#include "centralrepository.h" +#include "e32property.h" +#include "musengtestdefs.h" + +// SYSTEM INCLUDES +#include + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +UT_CMusEngSessionManager* UT_CMusEngSessionManager::NewL() + { + UT_CMusEngSessionManager* self = UT_CMusEngSessionManager::NewLC(); + CleanupStack::Pop( self ); + return self; + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +UT_CMusEngSessionManager* UT_CMusEngSessionManager::NewLC() + { + UT_CMusEngSessionManager* self = new( ELeave )UT_CMusEngSessionManager(); + CleanupStack::PushL( self ); + self->ConstructL(); + return self; + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +UT_CMusEngSessionManager::~UT_CMusEngSessionManager() + { + // NOP + } + +// ----------------------------------------------------------------------------- +// Default constructor +// ----------------------------------------------------------------------------- +// +UT_CMusEngSessionManager::UT_CMusEngSessionManager() + { + } + +// ----------------------------------------------------------------------------- +// Second phase construct +// ----------------------------------------------------------------------------- +// +void UT_CMusEngSessionManager::ConstructL() + { + // The ConstructL from the base class CEUnitTestSuiteClass must be called. + // It generates the test case table. + CEUnitTestSuiteClass::ConstructL(); + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_CMusEngSessionManager::SetupL() + { + User::LeaveIfError( + RProperty::Set( + NMusSessionApi::KCategoryUid, + NMusSessionApi::KUseCase, + MultimediaSharing::EMusLiveVideo ) ); + iSessionManager = CMusEngSessionManager::NewL(); + + iLcUiProvider = new( ELeave )CLcUiProviderStub; + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_CMusEngSessionManager::Teardown() + { + delete iSessionManager; + delete iLcUiProvider; + // The Central Repository stub is using RProperty stub to store global data. + // The global data must be freed here. + PropertyHelper::Close(); + } + +// TEST CASES + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_CMusEngSessionManager::UT_NewL() + { + EUNIT_ASSERT( iSessionManager->iSession != NULL ) + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_CMusEngSessionManager::UT_SessionL() + { + EUNIT_ASSERT( iSessionManager->iSession == &( iSessionManager->Session() ) ) + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_CMusEngSessionManager::UT_IsFeatureSupportedL() + { + EUNIT_ASSERT( + iSessionManager->IsFeatureSupported( CLcEngine::ELcShowAcceptQuery ) ) + + EUNIT_ASSERT( + iSessionManager->IsFeatureSupported( CLcEngine::ELcShowInvitingNote ) ) + + EUNIT_ASSERT( + iSessionManager->IsFeatureSupported( CLcEngine::ELcShowWaitingNote ) ) + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_CMusEngSessionManager::UT_CreateMusSessionL() + { + CMusEngMceSession* session = NULL; + + // Live session + session = + iSessionManager->CreateMusSessionL( + MultimediaSharing::EMusLiveVideo ); + EUNIT_ASSERT( session != NULL ) + delete session; + + // Clip session + session = + iSessionManager->CreateMusSessionL( + MultimediaSharing::EMusClipVideo ); + EUNIT_ASSERT( session != NULL ) + delete session; + + // Receive session + session = + iSessionManager->CreateMusSessionL( + MultimediaSharing::EMusReceive ); + EUNIT_ASSERT( session != NULL ) + delete session; + + // Two way session + session = + iSessionManager->CreateMusSessionL( + MultimediaSharing::EMusTwoWayVideo ); + EUNIT_ASSERT( session != NULL ) + delete session; + + // Two way receive session + session = + iSessionManager->CreateMusSessionL( + MultimediaSharing::EMusReceiveTwoWayVideo ); + EUNIT_ASSERT( session != NULL ) + delete session; + + // Other session types + EUNIT_ASSERT_SPECIFIC_LEAVE( + iSessionManager->CreateMusSessionL( MultimediaSharing::EMusStillImage ), + KErrNotSupported ) + + EUNIT_ASSERT_SPECIFIC_LEAVE( + iSessionManager->CreateMusSessionL( MultimediaSharing::EMusContinue ), + KErrNotSupported ) + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_CMusEngSessionManager::UT_PropertyChangedL() + { + iSessionManager->Session().SetLcUiProvider( iLcUiProvider ); + + // Background startup not active, property change ignored + MLcSession* origSession = &iSessionManager->Session(); + iSessionManager->PropertyChanged( + NMusSessionApi::KUseCase, MultimediaSharing::EMusReceiveTwoWayVideo ); + + EUNIT_ASSERT( origSession == &iSessionManager->Session() ); + EUNIT_ASSERT( iLcUiProvider->iCalledFunction != CLcUiProviderStub::EHandleForegroundStatus ); + + // Background startup active, usecase not changed, no effect + User::LeaveIfError( RProperty::Set( NMusSessionApi::KCategoryUid, + NMusSessionApi::KFastMode, + MusSettingsKeys::EFastModeOn ) ); + iSessionManager->iSession->iBackground = ETrue; + origSession = &iSessionManager->Session(); + iSessionManager->PropertyChanged( + NMusSessionApi::KUseCase, iSessionManager->iCurrentUseCase ); + + EUNIT_ASSERT( origSession == &iSessionManager->Session() ); + EUNIT_ASSERT( iLcUiProvider->iCalledFunction != CLcUiProviderStub::EHandleForegroundStatus ); + + // Background startup active, usecase changed, uiprovider informed and + // new session replaces old one + origSession = &iSessionManager->Session(); + iSessionManager->PropertyChanged( + NMusSessionApi::KUseCase, MultimediaSharing::EMusClipVideo ); + if ( origSession == &iSessionManager->Session() ) + { + // Couldn't create new session because running out of memory + User::Leave( KErrNoMemory ); + } + EUNIT_ASSERT( origSession != &iSessionManager->Session() ); + EUNIT_ASSERT( iLcUiProvider->iCalledFunction == CLcUiProviderStub::EHandleForegroundStatus ); + EUNIT_ASSERT( iLcUiProvider->iForeground ); + } + +// TEST TABLE + +EUNIT_BEGIN_TEST_TABLE( + UT_CMusEngSessionManager, + "UT_CMusEngSessionManager", + "UNIT" ) + +EUNIT_TEST( + "NewL - test ", + "CMusEngSessionManager", + "NewL", + "FUNCTIONALITY", + SetupL, UT_NewL, Teardown) + +EUNIT_TEST( + "Session - test ", + "CMusEngSessionManager", + "Session", + "FUNCTIONALITY", + SetupL, UT_SessionL, Teardown) + +EUNIT_TEST( + "IsFeatureSupported - test ", + "CMusEngSessionManager", + "IsFeatureSupported", + "FUNCTIONALITY", + SetupL, UT_IsFeatureSupportedL, Teardown) + +EUNIT_TEST( + "CreateMusSessionL - test ", + "CMusEngSessionManager", + "CreateMusSessionL", + "FUNCTIONALITY", + SetupL, UT_CreateMusSessionL, Teardown) + +EUNIT_TEST( + "PropertyChanged - test ", + "CMusEngSessionManager", + "PropertyChanged", + "FUNCTIONALITY", + SetupL, UT_PropertyChangedL, Teardown) + +EUNIT_END_TEST_TABLE + + +// END OF FILE + + diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshengine/tsrc/ut_engine/src/ut_musengsipprofilehandler.cpp --- a/mmsharing/mmshengine/tsrc/ut_engine/src/ut_musengsipprofilehandler.cpp Thu Aug 19 09:51:39 2010 +0300 +++ b/mmsharing/mmshengine/tsrc/ut_engine/src/ut_musengsipprofilehandler.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -23,7 +23,6 @@ #include "musengtestdefs.h" #include "sipprofilealrcontroller.h" - // SYSTEM INCLUDES #include #include @@ -31,7 +30,6 @@ const TUint KSipProfileId( 1 ); - // ----------------------------------------------------------------------------- // // ----------------------------------------------------------------------------- @@ -87,25 +85,16 @@ // It generates the test case table. CEUnitTestSuiteClass::ConstructL(); } - -// ----------------------------------------------------------------------------- -// From MMusSipProfileUser -// ----------------------------------------------------------------------------- -// -TBool UT_CMusEngSipProfileHandler::IsRoamingBetweenAPsAllowed() - { - return iRoamingBetweenAPsAllowed; - } - - + // ----------------------------------------------------------------------------- // // ----------------------------------------------------------------------------- // void UT_CMusEngSipProfileHandler::SetupL() { - iProfileHandler = CMusSipProfileHandler::NewL( *this ); + iObserver = new( ELeave ) CMusEngObserverStub; + iProfileHandler = CMusSipProfileHandler::NewL( *iObserver ); } @@ -116,7 +105,7 @@ void UT_CMusEngSipProfileHandler::Teardown() { delete iProfileHandler; - iRoamingBetweenAPsAllowed = EFalse; + delete iObserver; } @@ -127,7 +116,7 @@ // // ----------------------------------------------------------------------------- // -void UT_CMusEngSipProfileHandler::UT_CMusEngSipProfileHandler_CreateSipProfileLL() +void UT_CMusEngSipProfileHandler::UT_CreateSipProfileLL() { // SIP profile ID zero iProfileHandler->CreateProfileL( 0 ); @@ -148,7 +137,7 @@ // // ----------------------------------------------------------------------------- // -void UT_CMusEngSipProfileHandler::UT_CMusEngSipProfileHandler_ProfileIdL() +void UT_CMusEngSipProfileHandler::UT_ProfileIdL() { // SIP profile does not yet exist EUNIT_ASSERT_EQUALS( 0, iProfileHandler->ProfileId() ) @@ -162,7 +151,7 @@ // // ----------------------------------------------------------------------------- // -void UT_CMusEngSipProfileHandler::UT_CMusEngSipProfileHandler_AlrEventL() +void UT_CMusEngSipProfileHandler::UT_AlrEventL() { const TUint32 KSnapId( 1 ); const TUint32 KIapId( 1 ); @@ -229,7 +218,7 @@ iProfileHandler->iProfileAlrController->iLastUsedIap = 0; // Event is EIapAvailable, SIP profile ID matches, roaming not allowed - iRoamingBetweenAPsAllowed = ETrue; + iObserver->iRoamingBetweenAPsAllowed = ETrue; iProfileHandler->AlrEvent( MSipProfileAlrObserver::EIapAvailable, KSipProfileId, KSnapId, KIapId ); @@ -251,9 +240,10 @@ // // ----------------------------------------------------------------------------- // -void UT_CMusEngSipProfileHandler::UT_CMusEngSipProfileHandler_NullTestsL() +void UT_CMusEngSipProfileHandler::UT_NullTestsL() { // Dummies + CSIPTransactionBase transactionBase; CSIPServerTransaction serverTransaction; CSIPDialog dialog; @@ -263,8 +253,7 @@ CSIPRefresh refresh; // Tests - iProfileHandler->ProfileRegistryEventOccurred( 0, - MSIPProfileRegistryObserver::EProfileCreated ); + iProfileHandler->ProfileRegistryErrorOccurred( 0, 0 ); iProfileHandler->IncomingRequest( 0, NULL ); iProfileHandler->TimedOut( serverTransaction ); @@ -290,7 +279,7 @@ // // ----------------------------------------------------------------------------- // -void UT_CMusEngSipProfileHandler::UT_CMusEngSipProfileHandler_UserFromProfileLCL() +void UT_CMusEngSipProfileHandler::UT_UserFromProfileLCL() { iProfileHandler->CreateProfileL( KSipProfileId ); CSIPProfile* profile = iProfileHandler->Profile(); @@ -313,6 +302,58 @@ CleanupStack::PopAndDestroy( user ); } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_CMusEngSipProfileHandler::UT_IsRegisteredL() + { + EUNIT_ASSERT( !iProfileHandler->IsRegistered( ) ) + iProfileHandler->CreateProfileL( KSipProfileId ); + EUNIT_ASSERT( iProfileHandler->IsRegistered( ) ) + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_CMusEngSipProfileHandler::UT_ProfileRegistryEventOccurredL() + { + // No profile yet + iProfileHandler->ProfileRegistryEventOccurred( 0, + MSIPProfileRegistryObserver::EProfileRegistered ); + EUNIT_ASSERT( iObserver->IsReseted() ) + + // Create profile, but notify about registration of some other profile + iProfileHandler->CreateProfileL( 1 ); + iProfileHandler->ProfileRegistryEventOccurred( 2, + MSIPProfileRegistryObserver::EProfileRegistered ); + EUNIT_ASSERT( iObserver->IsReseted() ) + + // Normal case + iProfileHandler->ProfileRegistryEventOccurred( 1, + MSIPProfileRegistryObserver::EProfileRegistered ); + EUNIT_ASSERT( iObserver->iProfileRegisteredCalled ) + iObserver->Reset(); + + // React exclusively to EProfileRegistered + iProfileHandler->ProfileRegistryEventOccurred( 1, + MSIPProfileRegistryObserver::EProfileCreated ); + EUNIT_ASSERT( iObserver->IsReseted() ) + iProfileHandler->ProfileRegistryEventOccurred( 1, + MSIPProfileRegistryObserver::EProfileUpdated ); + EUNIT_ASSERT( iObserver->IsReseted() ) + iProfileHandler->ProfileRegistryEventOccurred( 1, + MSIPProfileRegistryObserver::EProfileDeregistered ); + EUNIT_ASSERT( iObserver->IsReseted() ) + iProfileHandler->ProfileRegistryEventOccurred( 1, + MSIPProfileRegistryObserver::EProfileDestroyed ); + EUNIT_ASSERT( iObserver->IsReseted() ) + } + + // TEST TABLE EUNIT_BEGIN_TEST_TABLE( @@ -325,36 +366,50 @@ "CMusSipProfileHandler", "CreateSipProfileL", "FUNCTIONALITY", - SetupL, UT_CMusEngSipProfileHandler_CreateSipProfileLL, Teardown) - + SetupL, UT_CreateSipProfileLL, Teardown) + EUNIT_TEST( "ProfileId - test ", "CMusSipProfileHandler", "ProfileId", "FUNCTIONALITY", - SetupL, UT_CMusEngSipProfileHandler_ProfileIdL, Teardown) + SetupL, UT_ProfileIdL, Teardown) EUNIT_TEST( "AlrEventL - test ", "CMusEngSipProfileHandler", "AlrEventL", "FUNCTIONALITY", - SetupL, UT_CMusEngSipProfileHandler_AlrEventL, Teardown) - + SetupL, UT_AlrEventL, Teardown) + EUNIT_TEST( "Null tests for NOP functions", "CMusEngSipProfileHandler", "Several NOP functions", "FUNCTIONALITY", - SetupL, UT_CMusEngSipProfileHandler_NullTestsL, Teardown) + SetupL, UT_NullTestsL, Teardown) EUNIT_TEST( "UserFromProfileLC - test ", - "CMusEngOutSession", + "CMusEngSipProfileHandler", "UserFromProfileLC", "FUNCTIONALITY", - SetupL, UT_CMusEngSipProfileHandler_UserFromProfileLCL, Teardown) - + SetupL, UT_UserFromProfileLCL, Teardown) + +EUNIT_TEST( + "IsRegistered - test ", + "CMusEngSipProfileHandler", + "IsRegistered", + "FUNCTIONALITY", + SetupL, UT_IsRegisteredL, Teardown) + +EUNIT_TEST( + "ProfileRegistryEventOccurred - test ", + "CMusEngSipProfileHandler", + "ProfileRegistryEventOccurred", + "FUNCTIONALITY", + SetupL, UT_ProfileRegistryEventOccurredL, Teardown) + EUNIT_END_TEST_TABLE // END OF FILE diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshengine/tsrc/ut_engine/src/ut_musengtelephoneutils.cpp --- a/mmsharing/mmshengine/tsrc/ut_engine/src/ut_musengtelephoneutils.cpp Thu Aug 19 09:51:39 2010 +0300 +++ b/mmsharing/mmshengine/tsrc/ut_engine/src/ut_musengtelephoneutils.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -27,7 +27,7 @@ // SYSTEM INCLUDES #include #include - +#include @@ -95,27 +95,24 @@ void UT_CMusEngTelephoneUtils::SetupL() { iObserver = new( ELeave ) CMusEngObserverStub; - iTelephoneUtils = CMusEngTelephoneUtils::NewL(); + iTelephoneUtils = CMusEngTelephoneUtils::NewL( *iObserver ); } - // ----------------------------------------------------------------------------- // // ----------------------------------------------------------------------------- // void UT_CMusEngTelephoneUtils::Teardown() { + delete iTelephoneUtils; + iTelephoneUtils = NULL; delete iObserver; - delete iTelephoneUtils; + iObserver = NULL; + PropertyHelper::Close(); } - -// TEST CASES - - - - +// TEST CASES // ----------------------------------------------------------------------------- // @@ -155,77 +152,13 @@ iTelephoneUtils->iTelephonyAudioRouting->iCurrentOutput = CTelephonyAudioRouting::EBTAudioAccessory; - EUNIT_ASSERT( iTelephoneUtils->AudioRoutingCanBeChanged() ); + EUNIT_ASSERT( !iTelephoneUtils->AudioRoutingCanBeChanged() ); iTelephoneUtils->iTelephonyAudioRouting->iCurrentOutput = CTelephonyAudioRouting::ETTY; - EUNIT_ASSERT( !iTelephoneUtils->AudioRoutingCanBeChanged() ); - - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void UT_CMusEngTelephoneUtils::UT_IsAudioRoutingHeadsetL() - { - iTelephoneUtils->iTelephonyAudioRouting->iCurrentOutput = - CTelephonyAudioRouting::EBTAudioAccessory; - EUNIT_ASSERT( iTelephoneUtils->IsAudioRoutingHeadset()); - - iTelephoneUtils->iTelephonyAudioRouting->iCurrentOutput = - CTelephonyAudioRouting::ENotActive; - EUNIT_ASSERT( !iTelephoneUtils->IsAudioRoutingHeadset() ); - - iTelephoneUtils->iTelephonyAudioRouting->iCurrentOutput = - CTelephonyAudioRouting::ENone; - EUNIT_ASSERT( !iTelephoneUtils->IsAudioRoutingHeadset() ); - - iTelephoneUtils->iTelephonyAudioRouting->iCurrentOutput = - CTelephonyAudioRouting::EHandset; - EUNIT_ASSERT( !iTelephoneUtils->IsAudioRoutingHeadset() ); - - iTelephoneUtils->iTelephonyAudioRouting->iCurrentOutput = - CTelephonyAudioRouting::ELoudspeaker; - EUNIT_ASSERT( !iTelephoneUtils->IsAudioRoutingHeadset() ); - - iTelephoneUtils->iTelephonyAudioRouting->iCurrentOutput = - CTelephonyAudioRouting::EWiredAudioAccessory; - EUNIT_ASSERT( iTelephoneUtils->IsAudioRoutingHeadset() ); - - iTelephoneUtils->iTelephonyAudioRouting->iCurrentOutput = - CTelephonyAudioRouting::ETTY; - EUNIT_ASSERT( !iTelephoneUtils->IsAudioRoutingHeadset() ); - + EUNIT_ASSERT( !iTelephoneUtils->AudioRoutingCanBeChanged() ); } -void UT_CMusEngTelephoneUtils::UT_IsAudioRoutingLoudSpeakerL() - { - iTelephoneUtils->iTelephonyAudioRouting->iCurrentOutput = - CTelephonyAudioRouting::ELoudspeaker; - iTelephoneUtils->iAudioOutputAtStartup = - CTelephonyAudioRouting::ELoudspeaker; - EUNIT_ASSERT( !iTelephoneUtils->IsAudioRoutingLoudSpeaker()); - - iTelephoneUtils->iTelephonyAudioRouting->iCurrentOutput = - CTelephonyAudioRouting::ELoudspeaker; - iTelephoneUtils->iAudioOutputAtStartup = - CTelephonyAudioRouting::EHandset; - EUNIT_ASSERT( iTelephoneUtils->IsAudioRoutingLoudSpeaker() ); - - iTelephoneUtils->iTelephonyAudioRouting->iCurrentOutput = - CTelephonyAudioRouting::ELoudspeaker; - iTelephoneUtils->iAudioOutputAtStartup = - CTelephonyAudioRouting::EBTAudioAccessory; - EUNIT_ASSERT( iTelephoneUtils->IsAudioRoutingLoudSpeaker() ); - - iTelephoneUtils->iTelephonyAudioRouting->iCurrentOutput = - CTelephonyAudioRouting::ELoudspeaker; - iTelephoneUtils->iAudioOutputAtStartup = - CTelephonyAudioRouting::EWiredAudioAccessory; - EUNIT_ASSERT( iTelephoneUtils->IsAudioRoutingLoudSpeaker() ); - } // ----------------------------------------------------------------------------- // // ----------------------------------------------------------------------------- @@ -237,19 +170,18 @@ CTelephonyAudioRouting::EHandset; // Set loudspeaker on, succeeds - iTelephoneUtils->LoudspeakerL( ETrue, ETrue ); + iTelephoneUtils->LoudspeakerL( ETrue ); EUNIT_ASSERT( iTelephoneUtils->iTelephonyAudioRouting->iCurrentOutput == CTelephonyAudioRouting::ELoudspeaker ); EUNIT_ASSERT( iTelephoneUtils->iTelephonyAudioRouting->iShowNoteMode == EFalse ); - EUNIT_ASSERT( iTelephoneUtils->iShowDialog == ETrue ); // Change conditions iTelephoneUtils->iTelephonyAudioRouting->iCurrentOutput = CTelephonyAudioRouting::EWiredAudioAccessory; // Try to set loudspeaker on, fails because current set is not handset - iTelephoneUtils->LoudspeakerL( ETrue, ETrue ); + iTelephoneUtils->LoudspeakerL( ETrue ); EUNIT_ASSERT( iTelephoneUtils->iTelephonyAudioRouting->iCurrentOutput == CTelephonyAudioRouting::EWiredAudioAccessory ); @@ -260,7 +192,7 @@ CTelephonyAudioRouting::ELoudspeaker; // Try to set loudspeaker off, goes to handset - iTelephoneUtils->LoudspeakerL( EFalse, ETrue ); + iTelephoneUtils->LoudspeakerL( EFalse ); EUNIT_ASSERT( iTelephoneUtils->iTelephonyAudioRouting->iCurrentOutput == CTelephonyAudioRouting::EHandset ); @@ -271,12 +203,11 @@ CTelephonyAudioRouting::EWiredAudioAccessory; // Try to set loudspeaker off, goes to wired - iTelephoneUtils->LoudspeakerL( EFalse, ETrue ); + iTelephoneUtils->LoudspeakerL( EFalse ); EUNIT_ASSERT( iTelephoneUtils->iTelephonyAudioRouting->iCurrentOutput == CTelephonyAudioRouting::EWiredAudioAccessory ); } - // ----------------------------------------------------------------------------- // // ----------------------------------------------------------------------------- @@ -292,7 +223,6 @@ EUNIT_ASSERT( !iTelephoneUtils->IsLoudSpeakerEnabled() ); } - // ----------------------------------------------------------------------------- // // ----------------------------------------------------------------------------- @@ -310,10 +240,8 @@ volume = iTelephoneUtils->GetVolumeL(); EUNIT_ASSERT( volume == 8 ); - } - // ----------------------------------------------------------------------------- // // ----------------------------------------------------------------------------- @@ -364,7 +292,6 @@ EUNIT_ASSERT( loudSpeakerVolume == 10 ); } - // ----------------------------------------------------------------------------- // // ----------------------------------------------------------------------------- @@ -377,94 +304,56 @@ *iTelephoneUtils->iTelephonyAudioRouting ); } - // ----------------------------------------------------------------------------- // // ----------------------------------------------------------------------------- // void UT_CMusEngTelephoneUtils::UT_OutputChangedL() { + // Loudspeaker iTelephoneUtils->iAudioOutputAtStartup = CTelephonyAudioRouting::EHandset; iTelephoneUtils->iTelephonyAudioRouting->iCurrentOutput = - CTelephonyAudioRouting::ELoudspeaker; - iTelephoneUtils->iRepository->Set( KTelIncallLoudspeakerVolume, 8 ); - EUNIT_ASSERT( iTelephoneUtils->iCurrentVolume == 4 ) - EUNIT_ASSERT( iObserver->iVolume == 0 ); + CTelephonyAudioRouting::ELoudspeaker; iTelephoneUtils->OutputChanged( *iTelephoneUtils->iTelephonyAudioRouting ); EUNIT_ASSERT_EQUALS( iTelephoneUtils->iAudioOutputAtStartup, CTelephonyAudioRouting::ELoudspeaker ) - - EUNIT_ASSERT( iTelephoneUtils->iCurrentVolume == 8 ) - EUNIT_ASSERT( iObserver->iVolume == 0 ); - // Test observer + EUNIT_ASSERT( iObserver->iAudioRoutingChangedCalled ) - iTelephoneUtils->SetAudioRoutingObserver( iObserver ); - iTelephoneUtils->SetVolumeChangeObserver(iObserver); - + // Handset iTelephoneUtils->iTelephonyAudioRouting->iCurrentOutput = - CTelephonyAudioRouting::EHandset; + CTelephonyAudioRouting::EHandset; iTelephoneUtils->OutputChanged( *iTelephoneUtils->iTelephonyAudioRouting ); - - EUNIT_ASSERT( iTelephoneUtils->iCurrentVolume == 4 ) - EUNIT_ASSERT( iObserver->iVolume == 4 ); + EUNIT_ASSERT_EQUALS( iTelephoneUtils->iAudioOutputAtStartup, CTelephonyAudioRouting::EHandset ) EUNIT_ASSERT( iObserver->iAudioRoutingChangedCalled ) } - // ----------------------------------------------------------------------------- // // ----------------------------------------------------------------------------- // void UT_CMusEngTelephoneUtils::UT_SetOutputCompleteL() { - iTelephoneUtils->SetAudioRoutingObserver( iObserver ); - iTelephoneUtils->SetVolumeChangeObserver(iObserver); - EUNIT_ASSERT( iObserver->iVolume == 0 ); - EUNIT_ASSERT( iTelephoneUtils->iCurrentVolume == 4 ) - // Setoutput fails iTelephoneUtils->SetOutputComplete( *iTelephoneUtils->iTelephonyAudioRouting, - KErrGeneral ); - + KErrGeneral ); EUNIT_ASSERT( !iObserver->iAudioRoutingChangedCalled ) - EUNIT_ASSERT( iObserver->iVolume == 0 ); + iObserver->Reset(); - // Setoutput succesful and note is shown by audiorouting api - // There's already next pending setoutput for which we are going to - // show note -> that cannot be forgotten - iTelephoneUtils->iRepository->Set( KTelIncallEarVolume, 5 ); - iTelephoneUtils->iShowDialog = ETrue; - iTelephoneUtils->iTelephonyAudioRouting->SetShowNote( ETrue ); + // Setoutput ok iTelephoneUtils->SetOutputComplete( *iTelephoneUtils->iTelephonyAudioRouting, KErrNone ); - EUNIT_ASSERT( iObserver->iAudioRoutingChangedCalled == ETrue ) - EUNIT_ASSERT( iObserver->iShowNote == EFalse ) - EUNIT_ASSERT( iTelephoneUtils->iShowDialog == ETrue ) - EUNIT_ASSERT( iObserver->iVolume == 5 ); - EUNIT_ASSERT( iTelephoneUtils->iCurrentVolume == 5 ) - - iObserver->Reset(); - - // Setoutput succesful and note is shown by us - iTelephoneUtils->iTelephonyAudioRouting->SetShowNote( EFalse ); - iTelephoneUtils->SetOutputComplete( - *iTelephoneUtils->iTelephonyAudioRouting, - KErrNone ); - EUNIT_ASSERT( iObserver->iAudioRoutingChangedCalled == ETrue ) - EUNIT_ASSERT( iObserver->iShowNote == ETrue ) - EUNIT_ASSERT( iTelephoneUtils->iShowDialog == EFalse ) + EUNIT_ASSERT( iObserver->iAudioRoutingChangedCalled ) } - // ----------------------------------------------------------------------------- // // ----------------------------------------------------------------------------- @@ -476,7 +365,6 @@ EUNIT_ASSERT( iTelephoneUtils->ValidateVolume( 5 ) == 5 ); } - // ----------------------------------------------------------------------------- // We cannot assert anything after destruction. All we can do is to make // such condition before destruction that coverage will be achieved. @@ -485,139 +373,48 @@ void UT_CMusEngTelephoneUtils::UT_DestructorL() { // Simulate that 2nd phase construction has not succeeded - CMusEngTelephoneUtils* utils = CMusEngTelephoneUtils::NewL(); + CMusEngTelephoneUtils* utils = CMusEngTelephoneUtils::NewL( *iObserver ); CleanupStack::PushL( utils ); delete utils->iTelephonyAudioRouting; utils->iTelephonyAudioRouting = NULL; CleanupStack::PopAndDestroy( utils ); // Simulate that current audio output mode is same as original - utils = CMusEngTelephoneUtils::NewL(); + utils = CMusEngTelephoneUtils::NewL( *iObserver ); CleanupStack::PushL( utils ); utils->iAudioOutputAtStartup = CTelephonyAudioRouting::EHandset; utils->iTelephonyAudioRouting->iCurrentOutput = - CTelephonyAudioRouting::EHandset; - CTelephonyAudioRouting::iPreviousOutput = - CTelephonyAudioRouting::ELoudspeaker; + CTelephonyAudioRouting::EHandset; CleanupStack::PopAndDestroy( utils ); - EUNIT_ASSERT( CTelephonyAudioRouting::iPreviousOutput == - CTelephonyAudioRouting::ELoudspeaker ) // Simulate that current audio output mode is not the same as original, // Setting fails - utils = CMusEngTelephoneUtils::NewL(); - CleanupStack::PushL( utils ); - utils->iAudioOutputAtStartup = CTelephonyAudioRouting::EHandset; - utils->iTelephonyAudioRouting->iCurrentOutput = - CTelephonyAudioRouting::ELoudspeaker; - CTelephonyAudioRouting::iPreviousOutput = - CTelephonyAudioRouting::EHandset; - utils->iTelephonyAudioRouting->iForceFailWithCode = KErrGeneral; - CleanupStack::PopAndDestroy( utils ); - EUNIT_ASSERT( CTelephonyAudioRouting::iPreviousOutput == - CTelephonyAudioRouting::EHandset ) - EUNIT_ASSERT( CTelephonyAudioRouting::iCurrentOutput == - CTelephonyAudioRouting::ELoudspeaker ) - - // Simulate that current audio output mode is not the same as original, - // Setting succeeds - utils = CMusEngTelephoneUtils::NewL(); + utils = CMusEngTelephoneUtils::NewL( *iObserver ); CleanupStack::PushL( utils ); utils->iAudioOutputAtStartup = CTelephonyAudioRouting::EHandset; utils->iTelephonyAudioRouting->iCurrentOutput = CTelephonyAudioRouting::ELoudspeaker; - CTelephonyAudioRouting::iPreviousOutput = - CTelephonyAudioRouting::EHandset; + utils->iTelephonyAudioRouting->iForceFailWithCode = KErrGeneral; CleanupStack::PopAndDestroy( utils ); - EUNIT_ASSERT( CTelephonyAudioRouting::iPreviousOutput == - CTelephonyAudioRouting::ELoudspeaker ) - EUNIT_ASSERT( CTelephonyAudioRouting::iCurrentOutput == - CTelephonyAudioRouting::EHandset ) // Simulate that current audio output mode is not the same as original, - // Setting not done due to special case handling (ENotActive) - utils = CMusEngTelephoneUtils::NewL(); - CleanupStack::PushL( utils ); - utils->iAudioOutputAtStartup = CTelephonyAudioRouting::EHandset; - utils->iTelephonyAudioRouting->iCurrentOutput = - CTelephonyAudioRouting::ENotActive; - CTelephonyAudioRouting::iPreviousOutput = - CTelephonyAudioRouting::ELoudspeaker; - CleanupStack::PopAndDestroy( utils ); - EUNIT_ASSERT( CTelephonyAudioRouting::iPreviousOutput == - CTelephonyAudioRouting::ELoudspeaker ) - EUNIT_ASSERT( CTelephonyAudioRouting::iCurrentOutput == - CTelephonyAudioRouting::ENotActive ) - - // Simulate that current audio output mode is not the same as original, - // Setting does not succeed as observer does not allow changes anymore - utils = CMusEngTelephoneUtils::NewL(); - iObserver->iAudioRouteChangeAllowed = EFalse; - utils->SetAudioRoutingObserver( iObserver ); + // Setting succeeds + utils = CMusEngTelephoneUtils::NewL( *iObserver ); CleanupStack::PushL( utils ); utils->iAudioOutputAtStartup = CTelephonyAudioRouting::EHandset; utils->iTelephonyAudioRouting->iCurrentOutput = CTelephonyAudioRouting::ELoudspeaker; - CTelephonyAudioRouting::iPreviousOutput = - CTelephonyAudioRouting::EHandset; CleanupStack::PopAndDestroy( utils ); - EUNIT_ASSERT( CTelephonyAudioRouting::iPreviousOutput == - CTelephonyAudioRouting::EHandset ) - EUNIT_ASSERT( CTelephonyAudioRouting::iCurrentOutput == - CTelephonyAudioRouting::ELoudspeaker ) - } - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void UT_CMusEngTelephoneUtils::UT_UpdateCurrentVolumeL() - { - //Volume changed, no observer - EUNIT_ASSERT( iTelephoneUtils->iCurrentVolume == 4 ) - iTelephoneUtils->iRepository->Set( KTelIncallEarVolume, 5 ); - iTelephoneUtils->UpdateCurrentVolume(EFalse); - EUNIT_ASSERT( iTelephoneUtils->iCurrentVolume == 5 ) - EUNIT_ASSERT( iObserver->iVolume == 0 ); - - //Volume changed, observer set - iTelephoneUtils->SetVolumeChangeObserver(iObserver); - iTelephoneUtils->iRepository->Set( KTelIncallEarVolume, 6 ); - iTelephoneUtils->UpdateCurrentVolume(EFalse); - EUNIT_ASSERT( iTelephoneUtils->iCurrentVolume == 6 ) - EUNIT_ASSERT( iObserver->iVolume == 6 ); - - //Volume didn't change, observer not notified - iObserver->iVolume = 0; - iTelephoneUtils->UpdateCurrentVolume(EFalse); - EUNIT_ASSERT( iTelephoneUtils->iCurrentVolume == 6 ) - EUNIT_ASSERT( iObserver->iVolume == 0 ); - } - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void UT_CMusEngTelephoneUtils::UT_HandleNotifyGenericL() - { - //Loudspeakers volume changed, no observer - iTelephoneUtils->iRepository->Set( KTelIncallLoudspeakerVolume, 8 ); - EUNIT_ASSERT( iTelephoneUtils->iCurrentVolume == 4 ) - iTelephoneUtils->HandleNotifyGeneric(KTelIncallLoudspeakerVolume); - EUNIT_ASSERT( iTelephoneUtils->iCurrentVolume == 8 ) - EUNIT_ASSERT( iObserver->iVolume == 0 ); - //Ear volume changed, observer set => observer notified - iTelephoneUtils->SetVolumeChangeObserver(iObserver); - iTelephoneUtils->HandleNotifyGeneric(KTelIncallEarVolume); - EUNIT_ASSERT( iTelephoneUtils->iCurrentVolume == 4 ) - EUNIT_ASSERT( iObserver->iVolume == 4 ); - - //Volume hasn't changed => observer not notifies - iObserver->iVolume = 0; - iTelephoneUtils->HandleNotifyGeneric(KTelIncallEarVolume); - EUNIT_ASSERT( iTelephoneUtils->iCurrentVolume == 4 ) - EUNIT_ASSERT( iObserver->iVolume == 0 ); + // Simulate that current audio output mode is not the same as original, + // Setting does not succeed as observer does not allow changes anymore + utils = CMusEngTelephoneUtils::NewL( *iObserver ); + CleanupStack::PushL( utils ); + utils->iAudioOutputAtStartup = CTelephonyAudioRouting::EHandset; + utils->iTelephonyAudioRouting->iCurrentOutput = + CTelephonyAudioRouting::ELoudspeaker; + CleanupStack::PopAndDestroy( utils ); + // Cannot really assert anything } @@ -643,20 +440,6 @@ SetupL, UT_AudioRoutingCanBeChangedL, Teardown) EUNIT_TEST( - "IsAudioRoutingHeadset - test ", - "CMusEngTelephoneUtils", - "IsAudioRoutingHeadset", - "FUNCTIONALITY", - SetupL, UT_IsAudioRoutingHeadsetL, Teardown) - -EUNIT_TEST( - "IsAudioRoutingLoudSpeaker - test ", - "CMusEngTelephoneUtils", - "IsAudioRoutingLoudSpeaker", - "FUNCTIONALITY", - SetupL, UT_IsAudioRoutingLoudSpeakerL, Teardown) - -EUNIT_TEST( "LoudspeakerL - test ", "CMusEngTelephoneUtils", "LoudspeakerL", @@ -719,20 +502,7 @@ "FUNCTIONALITY", SetupL, UT_DestructorL, Teardown) -EUNIT_TEST( - "UpdateCurrentVolume - test ", - "UpdateCurrentVolume", - "Destructor", - "FUNCTIONALITY", - SetupL, UT_UpdateCurrentVolumeL, Teardown) - -EUNIT_TEST( - "HandleNotifyGeneric - test ", - "CMusEngTelephoneUtils", - "HandleNotifyGeneric", - "FUNCTIONALITY", - SetupL, UT_HandleNotifyGenericL, Teardown) - + EUNIT_END_TEST_TABLE diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshengine/tsrc/ut_engine/src/ut_musengtwowayrecvsession.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/mmshengine/tsrc/ut_engine/src/ut_musengtwowayrecvsession.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,1582 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + + +// INTERNAL INCLUDES +#include "ut_musengtwowayrecvsession.h" +#include "musengstubs.h" +#include "musengtestdefs.h" +#include "musengtwowayrecvsession.h" +#include "musengmceutils.h" +#include "mussessionproperties.h" +#include "contactenginestub.h" +#include "musenglivevideoplayer.h" + +// SYSTEM INCLUDES +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +// Incoming session may be rejected silently due memory running out. Ensure that +// incoming session was handled fully by using this macro. +#define MUSENG_TEST_ASSERT_INCOMING_SESSION_ALLOC_FAILURE_L \ +__ASSERT_ALWAYS( iReceiveSession->iSession && \ +iReceiveSession->iSession->iState != CMceSession::ETerminated, User::Leave( KErrNoMemory ) ); + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +UT_CMusEngTwoWayRecvSession* UT_CMusEngTwoWayRecvSession::NewL() + { + UT_CMusEngTwoWayRecvSession* self = UT_CMusEngTwoWayRecvSession::NewLC(); + CleanupStack::Pop( self ); + return self; + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +UT_CMusEngTwoWayRecvSession* UT_CMusEngTwoWayRecvSession::NewLC() + { + UT_CMusEngTwoWayRecvSession* self = new( ELeave ) UT_CMusEngTwoWayRecvSession(); + CleanupStack::PushL( self ); + self->ConstructL(); + return self; + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +UT_CMusEngTwoWayRecvSession::~UT_CMusEngTwoWayRecvSession() + { + // NOP + } + + +// ----------------------------------------------------------------------------- +// Default constructor +// ----------------------------------------------------------------------------- +// +UT_CMusEngTwoWayRecvSession::UT_CMusEngTwoWayRecvSession() + { + // NOP + } + + +// ----------------------------------------------------------------------------- +// Second phase construct +// ----------------------------------------------------------------------------- +// +void UT_CMusEngTwoWayRecvSession::ConstructL() + { + // The ConstructL from the base class CEUnitTestSuiteClass must be called. + // It generates the test case table. + CEUnitTestSuiteClass::ConstructL(); + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_CMusEngTwoWayRecvSession::SetupL( ) + { + iLcSessionObserver = new( ELeave )CLcSessionObserverStub; + iReceiveSession = CMusEngTwoWayRecvSession::NewL(); + iReceiveSession->SetLcSessionObserver( iLcSessionObserver ); + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_CMusEngTwoWayRecvSession::Teardown( ) + { + delete iReceiveSession; + delete iLcSessionObserver; + PropertyHelper::Close(); + } + + +// TEST HELPERS + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +CMceVideoStream* UT_CMusEngTwoWayRecvSession::ConstructVideoInStreamLC() + { + CMceVideoStream* videoStream = CMceVideoStream::NewLC(); + + videoStream->SetSourceL( CMceRtpSource::NewLC() ); + CleanupStack::Pop(); + + videoStream->AddSinkL( + CMceDisplaySink::NewLC( *iReceiveSession->iManager ) ); + CleanupStack::Pop(); + + return videoStream; + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +CMceVideoStream* UT_CMusEngTwoWayRecvSession::ConstructVideoOutStreamLC() + { + CMceVideoStream* videoStream = CMceVideoStream::NewLC(); + + videoStream->SetSourceL( + CMceCameraSource::NewLC( *iReceiveSession->iManager ) ); + CleanupStack::Pop(); + + videoStream->AddSinkL( CMceRtpSink::NewLC() ); + CleanupStack::Pop(); + + return videoStream; + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +CMceAudioStream* UT_CMusEngTwoWayRecvSession::ConstructAudioInStreamLC() + { + CMceAudioStream* audioStream = CMceAudioStream::NewLC(); + + audioStream->SetSourceL( CMceRtpSource::NewLC() ); + CleanupStack::Pop(); + + audioStream->AddSinkL( CMceSpeakerSink::NewLC() ); + CleanupStack::Pop(); + + return audioStream; + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +CMceAudioStream* UT_CMusEngTwoWayRecvSession::ConstructAudioOutStreamLC() + { + CMceAudioStream* audioStream = CMceAudioStream::NewLC(); + + audioStream->SetSourceL( + CMceFileSource::NewLC( *iReceiveSession->iManager, KNullDesC() ) ); + CleanupStack::Pop(); + + audioStream->AddSinkL( CMceRtpSink::NewLC() ); + CleanupStack::Pop(); + + return audioStream; + + } + + +// ----------------------------------------------------------------------------- +// Helper to construct incoming sessions. +// ----------------------------------------------------------------------------- +// +CMceInSession* UT_CMusEngTwoWayRecvSession::ConstructInSessionLC( + TInt aVideoStreamCount, + TInt aAudioStreamCount, + TBool aConstructSinks ) + { + CMceInSession* inSession = CMceInSession::NewL( + *(iReceiveSession->iManager), + KTestOriginator() ); + CleanupStack::PushL( inSession ); + + for ( TInt i = 0; i < aVideoStreamCount; ++i ) + { + CMceVideoStream* videoStream = CMceVideoStream::NewLC(); + + CMceRtpSource* rtpSource = CMceRtpSource::NewLC(); + videoStream->SetSourceL( rtpSource ); + CleanupStack::Pop( rtpSource ); + + if ( aConstructSinks ) + { + CMceDisplaySink* display = CMceDisplaySink::NewLC( + *(iReceiveSession->iManager) ); + videoStream->AddSinkL( display ); + CleanupStack::Pop( display ); + } + + inSession->AddStreamL( videoStream ); + CleanupStack::Pop( videoStream ); + } + + for ( TInt i = 0; i < aAudioStreamCount; ++i ) + { + CMceAudioStream* audioStream = CMceAudioStream::NewLC(); + + CMceRtpSource* rtpSource = CMceRtpSource::NewLC(); + audioStream->SetSourceL( rtpSource ); + CleanupStack::Pop( rtpSource ); + + if ( aConstructSinks ) + { + CMceSpeakerSink* speaker = CMceSpeakerSink::NewLC(); + audioStream->AddSinkL( speaker ); + CleanupStack::Pop( speaker ); + } + + inSession->AddStreamL( audioStream ); + CleanupStack::Pop( audioStream ); + } + + return inSession; + } + +// ----------------------------------------------------------------------------- +// Helper to construct incoming two-way video session. +// ----------------------------------------------------------------------------- +// +CMceInSession* UT_CMusEngTwoWayRecvSession::ConstructTwoWayInSessionLC( TBool aConstructSinks ) + { + CMceInSession* inSession = CMceInSession::NewL( + *(iReceiveSession->iManager), + KTestOriginator() ); + CleanupStack::PushL( inSession ); + + CMceVideoStream* videoStream = CMceVideoStream::NewLC(); + + CMceRtpSource* rtpSource = CMceRtpSource::NewLC(); + videoStream->SetSourceL( rtpSource ); + CleanupStack::Pop( rtpSource ); + + if ( aConstructSinks ) + { + CMceDisplaySink* display = CMceDisplaySink::NewLC( + *(iReceiveSession->iManager) ); + videoStream->AddSinkL( display ); + CleanupStack::Pop( display ); + } + + CMceVideoStream* videoOutStream = CMceVideoStream::NewLC(); + + CMceCameraSource* cameraSource = CMceCameraSource::NewLC( *(iReceiveSession->iManager) ); + videoOutStream->SetSourceL( cameraSource ); + CleanupStack::Pop( cameraSource ); + + if ( aConstructSinks ) + { + CMceRtpSink* rtpSink = CMceRtpSink::NewLC(); + videoOutStream->AddSinkL( rtpSink ); + CleanupStack::Pop( rtpSink ); + } + videoStream->BindL( videoOutStream ); + CleanupStack::Pop( videoOutStream ); + + inSession->AddStreamL( videoStream ); + CleanupStack::Pop( videoStream ); + + return inSession; + } + + +// TEST CASES + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_CMusEngTwoWayRecvSession::UT_NewLL( ) + { + EUNIT_ASSERT( iReceiveSession ); + EUNIT_ASSERT( !iReceiveSession->iSession ); + EUNIT_ASSERT( iReceiveSession->iMceManagerUid == + TUid::Uid(CMusManager::ESipInviteDesired2WayVideo) ); + } + + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_CMusEngTwoWayRecvSession::UT_EnableDisplayLL() + { + TRAPD( error, iReceiveSession->EnableDisplayL( ETrue ) ); + MUS_TEST_FORWARD_ALLOC_FAILURE( error ); + EUNIT_ASSERT( error == KErrNotReady ); + + TMceTransactionDataContainer container; + CMceInSession* inSession = ConstructTwoWayInSessionLC(); + iReceiveSession->IncomingSession( inSession, &container ); + CleanupStack::Pop( inSession ); + MUSENG_TEST_ASSERT_INCOMING_SESSION_ALLOC_FAILURE_L + + CMceDisplaySink* display = + MusEngMceUtils::GetDisplayL( *(iReceiveSession->iSession) ); + + CMceDisplaySink* receivingDisplay = + MusEngMceUtils::GetReceivingDisplayL( *iReceiveSession->iSession ); + + // Disable + iReceiveSession->EnableDisplayL( EFalse ); + + EUNIT_ASSERT( !display->iIsEnabled ); + EUNIT_ASSERT( !receivingDisplay->iIsEnabled ); + + // Try to disable again, request should be ignored + + iReceiveSession->EnableDisplayL( EFalse ); + + EUNIT_ASSERT( !display->iIsEnabled ); + EUNIT_ASSERT( !receivingDisplay->iIsEnabled ); + + // Enable + + iReceiveSession->EnableDisplayL( ETrue ); + + EUNIT_ASSERT( display->iIsEnabled ); + EUNIT_ASSERT( receivingDisplay->iIsEnabled ); + + // Try to enable again, request should be ignored + + iReceiveSession->EnableDisplayL( ETrue ); + + EUNIT_ASSERT( display->iIsEnabled ); + EUNIT_ASSERT( receivingDisplay->iIsEnabled ); + + // Session does not have sending stream (viewfinder does not exist) + // + delete iReceiveSession->iSession; + iReceiveSession->iSession = NULL; + inSession = ConstructInSessionLC( 1, 0 ); + iReceiveSession->IncomingSession( inSession, &container ); + CleanupStack::Pop( inSession ); + display = MusEngMceUtils::GetVfDisplay( *(iReceiveSession->iSession) ); + EUNIT_ASSERT( display == NULL ); + receivingDisplay = MusEngMceUtils::GetReceivingDisplayL( *iReceiveSession->iSession ); + iReceiveSession->EnableDisplayL( EFalse ); + EUNIT_ASSERT( !receivingDisplay->iIsEnabled ); + + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_CMusEngTwoWayRecvSession::UT_SetOrientationLL() + { + // Try without session, fails + EUNIT_ASSERT_SPECIFIC_LEAVE( iReceiveSession->SetOrientationL( + CMusEngMceSession::EPortrait ), + KErrNotReady ) + + TMceTransactionDataContainer container; + CMceInSession* inSession = ConstructTwoWayInSessionLC(); + iReceiveSession->IncomingSession( inSession, &container ); + CleanupStack::Pop( inSession ); + MUSENG_TEST_ASSERT_INCOMING_SESSION_ALLOC_FAILURE_L + + CMceDisplaySink* display = + MusEngMceUtils::GetDisplayL( *iReceiveSession->iSession ); + + CMceDisplaySink* receivingDisplay = + MusEngMceUtils::GetReceivingDisplayL( *iReceiveSession->iSession ); + + + // Check the initial state + display->iRotation = CMceDisplaySink::ENone; + receivingDisplay->iRotation = CMceDisplaySink::ENone; + EUNIT_ASSERT_EQUALS( iReceiveSession->OrientationL(), + CMusEngMceSession::EPortrait ) + + // Successfully change orientation + + iReceiveSession->SetOrientationL( CMusEngMceSession::ELandscape ); + EUNIT_ASSERT_EQUALS( iReceiveSession->OrientationL(), + CMusEngMceSession::ELandscape ) + + EUNIT_ASSERT_EQUALS( display->iRotation, CMceDisplaySink::EClockwise90Degree ); + EUNIT_ASSERT_EQUALS( receivingDisplay->iRotation, CMceDisplaySink::EClockwise90Degree ); + + iReceiveSession->SetOrientationL( CMusEngMceSession::EPortrait ); + EUNIT_ASSERT_EQUALS( iReceiveSession->OrientationL(), + CMusEngMceSession::EPortrait ) + + EUNIT_ASSERT_EQUALS( display->iRotation, CMceDisplaySink::ENone ); + EUNIT_ASSERT_EQUALS( receivingDisplay->iRotation, CMceDisplaySink::ENone ); + + // Session does not have sending stream (viewfinder does not exist) + delete iReceiveSession->iSession; + iReceiveSession->iSession = NULL; + inSession = ConstructInSessionLC( 1, 0 ); + iReceiveSession->IncomingSession( inSession, &container ); + CleanupStack::Pop( inSession ); + MUSENG_TEST_ASSERT_INCOMING_SESSION_ALLOC_FAILURE_L + display = MusEngMceUtils::GetVfDisplay( *(iReceiveSession->iSession) ); + EUNIT_ASSERT( display == NULL ); + receivingDisplay = MusEngMceUtils::GetReceivingDisplayL( *iReceiveSession->iSession ); + iReceiveSession->SetOrientationL( CMusEngMceSession::ELandscape ); + EUNIT_ASSERT_EQUALS( receivingDisplay->iRotation, CMceDisplaySink::EClockwise90Degree ); + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_CMusEngTwoWayRecvSession::UT_OrientationLL() + { + // Try without session, fails + EUNIT_ASSERT_SPECIFIC_LEAVE( iReceiveSession->OrientationL(), + KErrNotReady ) + + TMceTransactionDataContainer container; + CMceInSession* inSession = ConstructTwoWayInSessionLC(); + iReceiveSession->IncomingSession( inSession, &container ); + CleanupStack::Pop( inSession ); + MUSENG_TEST_ASSERT_INCOMING_SESSION_ALLOC_FAILURE_L + + CMceDisplaySink* receivingDisplay = + MusEngMceUtils::GetReceivingDisplayL( *iReceiveSession->iSession ); + receivingDisplay->iRotation = CMceDisplaySink::ENone; + + EUNIT_ASSERT_EQUALS( iReceiveSession->OrientationL(), + CMusEngMceSession::EPortrait ) + + receivingDisplay->iRotation = CMceDisplaySink::EClockwise90Degree; + + EUNIT_ASSERT_EQUALS( iReceiveSession->OrientationL(), + CMusEngMceSession::ELandscape ) + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_CMusEngTwoWayRecvSession::UT_SetLocalRectLL() + { + // Does nothing real before session establishment + TRect rect1( 100, 200, 300, 500 ); + iReceiveSession->SetSecondaryRectL( rect1 ); + + EUNIT_ASSERT( rect1 == iReceiveSession->iLocalRect ); + + // Local rect changing affects to viewfinder display sink not to receiving video + // + TMceTransactionDataContainer container; + CMceInSession* inSession = ConstructTwoWayInSessionLC(); + iReceiveSession->IncomingSession( inSession, &container ); + CleanupStack::Pop( inSession ); + MUSENG_TEST_ASSERT_INCOMING_SESSION_ALLOC_FAILURE_L + + CMceDisplaySink* vfDisplay = + MusEngMceUtils::GetDisplayL( *( iReceiveSession->iSession ) ); + CMceDisplaySink* receivingDisplay = + MusEngMceUtils::GetReceivingDisplayL( *( iReceiveSession->iSession ) ); + + EUNIT_ASSERT( vfDisplay->DisplayRectL() == iReceiveSession->iLocalRect ); + EUNIT_ASSERT( receivingDisplay->DisplayRectL() != iReceiveSession->iLocalRect ); + + TRect rect2( 200, 200, 300, 500 ); + iReceiveSession->SetSecondaryRectL( rect2 ); + EUNIT_ASSERT( rect2 == iReceiveSession->iLocalRect ); + EUNIT_ASSERT( vfDisplay->DisplayRectL() == iReceiveSession->iLocalRect ); + EUNIT_ASSERT( receivingDisplay->DisplayRectL() != iReceiveSession->iLocalRect ); + + // Terminate session and try again, rect must not be changed + + iReceiveSession->iSession->iState = CMceSession::ETerminated; + + TRect rect3( 300, 300, 400, 600 ); + + iReceiveSession->SetSecondaryRectL( rect3 ); + + EUNIT_ASSERT( vfDisplay->DisplayRectL() != rect3 ) + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_CMusEngTwoWayRecvSession::UT_SetRectsLL() + { + // Does nothing real before session establishment + TRect localrect1( 100, 200, 300, 400 ); + TRect remoterect1( 100, 200, 300, 500 ); + iReceiveSession->SetRectsL( remoterect1, localrect1 ); + + EUNIT_ASSERT( localrect1 == iReceiveSession->iLocalRect ); + EUNIT_ASSERT( remoterect1 == iReceiveSession->iRect ); + + // Local rect changing affects to viewfinder display sink and remote rect to + // receiving video display sink + // + TMceTransactionDataContainer container; + CMceInSession* inSession = ConstructTwoWayInSessionLC(); + iReceiveSession->IncomingSession( inSession, &container ); + CleanupStack::Pop( inSession ); + MUSENG_TEST_ASSERT_INCOMING_SESSION_ALLOC_FAILURE_L + + CMceDisplaySink* vfDisplay = + MusEngMceUtils::GetDisplayL( *( iReceiveSession->iSession ) ); + CMceDisplaySink* receivingDisplay = + MusEngMceUtils::GetReceivingDisplayL( *( iReceiveSession->iSession ) ); + + TRect localrect2( 200, 200, 300, 400 ); + TRect remoterect2( 200, 200, 300, 500 ); + EUNIT_ASSERT( vfDisplay->DisplayRectL() != localrect2 ); + EUNIT_ASSERT( receivingDisplay->DisplayRectL() != remoterect2 ); + + iReceiveSession->SetRectsL( remoterect2, localrect2 ); + EUNIT_ASSERT( localrect2 == iReceiveSession->iLocalRect ); + EUNIT_ASSERT( remoterect2 == iReceiveSession->iRect ); + EUNIT_ASSERT( vfDisplay->DisplayRectL() == iReceiveSession->iLocalRect ); + EUNIT_ASSERT( receivingDisplay->DisplayRectL() == iReceiveSession->iRect ); + + // Terminate session and try again, rect must not be changed + + iReceiveSession->iSession->iState = CMceSession::ETerminated; + + TRect localrect3( 300, 200, 300, 400 ); + TRect remoterect3( 300, 200, 300, 500 ); + + iReceiveSession->SetRectsL( remoterect3, localrect3 ); + + EUNIT_ASSERT( vfDisplay->DisplayRectL() != localrect3 ) + EUNIT_ASSERT( receivingDisplay->DisplayRectL() != remoterect3 ); + + // Session does not have sending stream (viewfinder does not exist) + + TRect localrect4( 400, 200, 300, 400 ); + TRect remoterect4( 400, 200, 300, 500 ); + delete iReceiveSession->iSession; + iReceiveSession->iSession = NULL; + inSession = ConstructInSessionLC( 1, 0 ); + iReceiveSession->IncomingSession( inSession, &container ); + CleanupStack::Pop( inSession ); + MUSENG_TEST_ASSERT_INCOMING_SESSION_ALLOC_FAILURE_L + vfDisplay = MusEngMceUtils::GetVfDisplay( *(iReceiveSession->iSession) ); + EUNIT_ASSERT( vfDisplay == NULL ); + receivingDisplay = MusEngMceUtils::GetReceivingDisplayL( *iReceiveSession->iSession ); + iReceiveSession->SetRectsL( remoterect4, localrect4 ); + EUNIT_ASSERT( localrect4 == iReceiveSession->iLocalRect ); + EUNIT_ASSERT( remoterect4 == iReceiveSession->iRect ); + EUNIT_ASSERT( receivingDisplay->DisplayRectL() == iReceiveSession->iRect ); + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_CMusEngTwoWayRecvSession::UT_CameraL() + { + // Camera cannot be used without MCE session + // + EUNIT_ASSERT_LEAVE( iReceiveSession->Camera().ChangeCameraL( + TMusEngCameraHandler::EFrontCamera ) ); + + // Camera cannot be used without video out stream + // + TMceTransactionDataContainer container; + CMceInSession* inSession = ConstructInSessionLC( 1, 0 ); + iReceiveSession->IncomingSession( inSession, &container ); + CleanupStack::Pop( inSession ); + MUSENG_TEST_ASSERT_INCOMING_SESSION_ALLOC_FAILURE_L + EUNIT_ASSERT_LEAVE( iReceiveSession->Camera().ChangeCameraL( + TMusEngCameraHandler::EFrontCamera ) ); + + // Camera can be used when video out stream exists + // + delete iReceiveSession->iSession; + iReceiveSession->iSession = NULL; + inSession = ConstructTwoWayInSessionLC(); + iReceiveSession->IncomingSession( inSession, &container ); + CleanupStack::Pop( inSession ); + MUSENG_TEST_ASSERT_INCOMING_SESSION_ALLOC_FAILURE_L + iReceiveSession->Camera().ChangeCameraL( + TMusEngCameraHandler::EFrontCamera ); + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_CMusEngTwoWayRecvSession::UT_LocalVideoPlayerL() + { + EUNIT_ASSERT( iReceiveSession->LocalVideoPlayer() == + iReceiveSession->iLiveVideoPlayer ) + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_CMusEngTwoWayRecvSession::UT_HandleSessionStateChangedL() + { + // Unknown session, let the base class handle + CMceInSession* inSession = ConstructInSessionLC( 1, 1 ); + + iReceiveSession->HandleSessionStateChanged( *inSession, 0, KNullDesC8() ); + + // Simulate incoming session + TMceTransactionDataContainer container; + + iReceiveSession->IncomingSession( inSession, &container ); + CleanupStack::Pop( inSession ); + + // Session is in state EReserving, let the base class handle + iReceiveSession->HandleSessionStateChanged( *inSession, 0, KNullDesC8() ); + + // The normal cases: + + // 1 ) First transition to state EProceeding, user and remote end should + // be notified + inSession->iState = CMceSession::EProceeding; + iReceiveSession->HandleSessionStateChanged( *inSession, 0, KNullDesC8() ); + EUNIT_ASSERT_EQUALS( TInt( iLcSessionObserver->iCalledFunction ), + TInt( CLcSessionObserverStub::ESessionStateChanged ) ) + EUNIT_ASSERT( iReceiveSession->iRingLCalled ) + iLcSessionObserver->Reset(); + + // 2 ) Now simulate second transition to EProceeding state which can happen + // if we force 100rel to be used. User and remote end should not be + // notified anymore but change should be ignored. + inSession->iState = CMceSession::EProceeding; + iReceiveSession->HandleSessionStateChanged( *inSession, 0, KNullDesC8() ); + EUNIT_ASSERT_EQUALS( TInt( CLcSessionObserverStub::EUnknown ), + TInt( iLcSessionObserver->iCalledFunction ) ) + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_CMusEngTwoWayRecvSession::UT_AdjustVideoCodecLL() + { + CMceVideoCodec* codecH263 = CMceH263Codec::NewLC( KMceSDPNameH263() ); + CMceVideoCodec* codecH2632000 = CMceH263Codec::NewLC( KMceSDPNameH2632000() ); + CMceVideoCodec* codecAvc = CMceAvcCodec::NewLC( KMceSDPNameH264() ); + CMceVideoCodec* codecUnknown = CMceH263Codec::NewLC( KNullDesC8() ); + + iReceiveSession->AdjustVideoCodecL( *codecH263, KMceRTPSource ); + iReceiveSession->AdjustVideoCodecL( *codecH2632000, KMceRTPSource ); + iReceiveSession->AdjustVideoCodecL( *codecAvc, KMceRTPSource ); + iReceiveSession->AdjustVideoCodecL( *codecUnknown, KMceRTPSource ); + + EUNIT_ASSERT_EQUALS( codecH263->KeepAliveTimer(), 6 ) + EUNIT_ASSERT_EQUALS( codecH263->KeepAlivePayloadType(), 96 ) + EUNIT_ASSERT_EQUALS( codecH263->KeepAliveData(), KNullDesC8() ) + + EUNIT_ASSERT_EQUALS( codecH2632000->KeepAliveTimer(), 6 ) + EUNIT_ASSERT_EQUALS( codecH2632000->KeepAlivePayloadType(), 96 ) + EUNIT_ASSERT_EQUALS( codecH2632000->KeepAliveData(), KNullDesC8() ) + + EUNIT_ASSERT_EQUALS( codecAvc->KeepAliveTimer(), 6 ) + EUNIT_ASSERT_EQUALS( codecAvc->KeepAlivePayloadType(), 98 ) + EUNIT_ASSERT_EQUALS( codecAvc->KeepAliveData(), KNullDesC8() ) + + EUNIT_ASSERT_EQUALS( codecUnknown->KeepAliveTimer(), 6 ) + EUNIT_ASSERT_EQUALS( codecUnknown->KeepAlivePayloadType(), 0 ) + EUNIT_ASSERT_EQUALS( codecUnknown->KeepAliveData(), KNullDesC8() ) + + CleanupStack::PopAndDestroy( codecUnknown ); + CleanupStack::PopAndDestroy( codecAvc ); + CleanupStack::PopAndDestroy( codecH2632000 ); + CleanupStack::PopAndDestroy( codecH263 ); + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_CMusEngTwoWayRecvSession::UT_AdjustAudioCodecLL() + { + CMceAudioCodec* codec = + iReceiveSession->iManager->SupportedAudioCodecs()[0]->CloneL(); + CleanupStack::PushL( codec ); + iReceiveSession->AdjustAudioCodecL( *codec ); + + // Test keepalive timer + + TUint8 keepAliveTimer = codec->KeepAliveTimer(); + EUNIT_ASSERT( codec->KeepAliveTimer() == 6 ) + EUNIT_ASSERT( codec->KeepAlivePayloadType() == 97 ) + EUNIT_ASSERT( codec->KeepAliveData() == KNullDesC8() ) + + // Test that base class has been called + + EUNIT_ASSERT( codec->iMMFPriority == KAudioPrioritySwisPlayback ) + EUNIT_ASSERT( codec->iMMFPriorityPreference == KAudioPrefSwisPlayback ) + + CleanupStack::PopAndDestroy( codec ); + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_CMusEngTwoWayRecvSession::UT_DoCodecSelectionLL() + { + // Check that Non-Interleaved AVC is preferred over single NAL + CMceVideoStream* videoStream = CMceVideoStream::NewLC(); + + CMceVideoCodec* codecAvcSingleNal = CMceAvcCodec::NewLC( KMceSDPNameH264() ); + codecAvcSingleNal->iCodecMode = KMceAvcModeSingleNal; + videoStream->AddCodecL( codecAvcSingleNal ); + CleanupStack::Pop( codecAvcSingleNal ); + + CMceVideoCodec* codecAvcNonInterleaved = CMceAvcCodec::NewLC( KMceSDPNameH264() ); + codecAvcNonInterleaved->iCodecMode = KMceAvcModeNonInterleaved; + videoStream->AddCodecL( codecAvcNonInterleaved ); + CleanupStack::Pop( codecAvcNonInterleaved ); + + iReceiveSession->DoCodecSelectionL( *videoStream ); + + EUNIT_ASSERT_EQUALS( videoStream->Codecs().Count(), 1 ) + EUNIT_ASSERT_EQUALS( videoStream->Codecs()[0]->SdpName(), KMceSDPNameH264() ) + EUNIT_ASSERT_EQUALS( videoStream->Codecs()[0]->CodecMode(), + KMceAvcModeNonInterleaved ) + + CleanupStack::PopAndDestroy( videoStream ); + + // Check that Single NAL AVC is preferred over H263 + videoStream = CMceVideoStream::NewLC(); + + CMceVideoCodec* codecH263 = CMceH263Codec::NewLC( KMceSDPNameH263() ); + videoStream->AddCodecL( codecH263 ); + CleanupStack::Pop( codecH263 ); + + codecAvcSingleNal = CMceAvcCodec::NewLC( KMceSDPNameH264() ); + codecAvcSingleNal->iCodecMode = KMceAvcModeSingleNal; + videoStream->AddCodecL( codecAvcSingleNal ); + CleanupStack::Pop( codecAvcSingleNal ); + + iReceiveSession->DoCodecSelectionL( *videoStream ); + + EUNIT_ASSERT_EQUALS( videoStream->Codecs().Count(), 1 ) + EUNIT_ASSERT_EQUALS( videoStream->Codecs()[0]->SdpName(), KMceSDPNameH264() ) + EUNIT_ASSERT_EQUALS( videoStream->Codecs()[0]->CodecMode(), + KMceAvcModeSingleNal ) + + CleanupStack::PopAndDestroy( videoStream ); + + // Check that H263 codecs without AVC are handled correctly (in base class) + videoStream = CMceVideoStream::NewLC(); + + codecH263 = CMceH263Codec::NewLC( KMceSDPNameH263() ); + videoStream->AddCodecL( codecH263 ); + CleanupStack::Pop( codecH263 ); + + CMceVideoCodec* codecH2632000 = CMceH263Codec::NewLC( KMceSDPNameH2632000() ); + videoStream->AddCodecL( codecH2632000 ); + CleanupStack::Pop( codecH2632000 ); + + iReceiveSession->DoCodecSelectionL( *videoStream ); + + EUNIT_ASSERT_EQUALS( videoStream->Codecs().Count(), 1 ) + + CleanupStack::PopAndDestroy( videoStream ); + + // Check that AVC non-interleaved with best bitrate is preferred + videoStream = CMceVideoStream::NewLC(); + + codecAvcNonInterleaved = CMceAvcCodec::NewLC( KMceSDPNameH264() ); + codecAvcNonInterleaved->iCodecMode = KMceAvcModeNonInterleaved; + codecAvcNonInterleaved->SetMaxBitrateL( 80000 ); + videoStream->AddCodecL( codecAvcNonInterleaved ); + CleanupStack::Pop( codecAvcNonInterleaved ); + + CMceVideoCodec* codecAvcNonInterleaved128 = CMceAvcCodec::NewLC( KMceSDPNameH264() ); + codecAvcNonInterleaved128->iCodecMode = KMceAvcModeNonInterleaved; + codecAvcNonInterleaved128->SetMaxBitrateL( 128000 ); + videoStream->AddCodecL( codecAvcNonInterleaved128 ); + CleanupStack::Pop( codecAvcNonInterleaved128 ); + + iReceiveSession->DoCodecSelectionL( *videoStream ); + + EUNIT_ASSERT_EQUALS( videoStream->Codecs().Count(), 1 ) + EUNIT_ASSERT( videoStream->Codecs()[0] == codecAvcNonInterleaved128 ) + + CleanupStack::PopAndDestroy( videoStream ); + + // Check that in case of several AVC single NALs, the best bitrate is preferred + videoStream = CMceVideoStream::NewLC(); + + codecAvcSingleNal = CMceAvcCodec::NewLC( KMceSDPNameH264() ); + codecAvcSingleNal->iCodecMode = KMceAvcModeSingleNal; + codecAvcSingleNal->SetMaxBitrateL( 80000 ); + videoStream->AddCodecL( codecAvcSingleNal ); + CleanupStack::Pop( codecAvcSingleNal ); + + CMceVideoCodec* codecAvcSingleNal128 = CMceAvcCodec::NewLC( KMceSDPNameH264() ); + codecAvcSingleNal128->iCodecMode = KMceAvcModeSingleNal; + codecAvcSingleNal128->SetMaxBitrateL( 128000 ); + videoStream->AddCodecL( codecAvcSingleNal128 ); + CleanupStack::Pop( codecAvcSingleNal128 ); + + iReceiveSession->DoCodecSelectionL( *videoStream ); + + EUNIT_ASSERT_EQUALS( videoStream->Codecs().Count(), 1 ) + EUNIT_ASSERT( videoStream->Codecs()[0] == codecAvcSingleNal128 ) + + CleanupStack::PopAndDestroy( videoStream ); + + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_CMusEngTwoWayRecvSession::UT_IncomingSessionL() + { + _LIT8( KMusEngSwisTestIdentifier, "Require: precondition" ); + _LIT8( KMusEngTestHeader, "Some header" ); + + TMceTransactionDataContainer container; + + // Simulate SWIS 2.2 invite. There are no streams, so completion fails and + // session gets rejected. Still prenotification has been given. + CMceInSession* inSession = ConstructInSessionLC( 0, 0 ); + CDesC8Array* headers = new ( ELeave ) CDesC8ArrayFlat( 2 ); + CleanupStack::PushL( headers ); + headers->AppendL( KMusEngTestHeader() ); + headers->AppendL( KMusEngSwisTestIdentifier() ); + container.SetHeaders( headers ); + CleanupStack::Pop( headers ); + iReceiveSession->IncomingSession( inSession, &container ); + CleanupStack::Pop( inSession ); + container.Clear(); + + EUNIT_ASSERT( iReceiveSession->iSession ); + EUNIT_ASSERT( iReceiveSession->iSession->iState == + CMceSession::ETerminated ); + + EUNIT_ASSERT( iReceiveSession->iSession->i100RelUsage == + KMce100RelRequired ) + EUNIT_ASSERT( !iReceiveSession->iRingLCalled ) + + // Try again with valid session, normal case + inSession = ConstructInSessionLC( 1, 0 ); + iReceiveSession->IncomingSession( inSession, &container ); + CleanupStack::Pop( inSession ); + + EUNIT_ASSERT( iReceiveSession->iSession ); + // Next state depends on success of completion of session structure. + // When using alloc failure state is ETerminated, in succesfull case it is + // EReserving. However it is set to "normal" state EReserving after + // assertion + EUNIT_ASSERT( iReceiveSession->iSession->iState == + CMceSession::EReserving || + iReceiveSession->iSession->iState == + CMceSession::ETerminated ); + iReceiveSession->iSession->iState = CMceSession::EReserving; + + // Try again without container, new session gets terminated and deleted + inSession = ConstructInSessionLC( 1, 0 ); + iReceiveSession->IncomingSession( inSession, NULL ); + CleanupStack::Pop( inSession ); + + EUNIT_ASSERT( iReceiveSession->iSession ); + EUNIT_ASSERT( iReceiveSession->iSession != inSession ); + EUNIT_ASSERT( iReceiveSession->iSession->iState == + CMceSession::EReserving ); + + // Try again when there is session pending, new session gets terminated + // and deleted + inSession = ConstructInSessionLC( 1, 0 ); + iReceiveSession->IncomingSession( inSession, &container ); + CleanupStack::Pop( inSession ); + + EUNIT_ASSERT( iReceiveSession->iSession ); + EUNIT_ASSERT( iReceiveSession->iSession != inSession ); + EUNIT_ASSERT( iReceiveSession->iSession->iState == + CMceSession::EReserving ); + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_CMusEngTwoWayRecvSession::UT_CompleteSessionStructureL_WithoutSessionL() + { + TRAPD( error, iReceiveSession->CompleteSessionStructureL() ); + MUS_TEST_FORWARD_ALLOC_FAILURE( error ); + EUNIT_ASSERT( error == KErrNotReady ); + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_CMusEngTwoWayRecvSession::UT_CompleteSessionStructureL_WithoutStreamsL() + { + CMceInSession* inSession = ConstructInSessionLC( 0, 0 ); + iReceiveSession->iSession = inSession; // Transfers ownership + CleanupStack::Pop( inSession ); + + TRAPD( error, iReceiveSession->CompleteSessionStructureL() ); + MUS_TEST_FORWARD_ALLOC_FAILURE( error ); + EUNIT_ASSERT( error == KErrCorrupt ); + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_CMusEngTwoWayRecvSession::UT_CompleteSessionStructureL_WithOutgoingStreamL() + { + // Stream will be removed. + CMceInSession* inSession = ConstructInSessionLC( 0, 0 ); + + inSession->AddStreamL( ConstructVideoOutStreamLC() ); + CleanupStack::Pop(); + + iReceiveSession->iSession = inSession; // Transfers ownership + CleanupStack::Pop( inSession ); + + TRAPD( error, iReceiveSession->CompleteSessionStructureL() ) + MUS_TEST_FORWARD_ALLOC_FAILURE( error ); + EUNIT_ASSERT( error == KErrCorrupt ); + EUNIT_ASSERT( inSession->Streams().Count() == 0 ); + EUNIT_ASSERT( inSession->Bundles().Count() == 0 ); + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_CMusEngTwoWayRecvSession::UT_CompleteSessionStructureL_WithVideoInL() + { + CMceInSession* inSession = ConstructInSessionLC( 1, 0 ); + + iReceiveSession->iSession = inSession; // Transfers ownership + CleanupStack::Pop( inSession ); + + iReceiveSession->CompleteSessionStructureL(); + + EUNIT_ASSERT( inSession->Streams().Count() == 1 ); + EUNIT_ASSERT( inSession->Streams()[0]->IsEnabled() ) + EUNIT_ASSERT( inSession->Streams()[0]->Type() == KMceVideo ) + EUNIT_ASSERT( inSession->Streams()[0]->Sinks().Count() == 1 ) + EUNIT_ASSERT( inSession->Streams()[0]->Sinks()[0]->Type() == + KMceDisplaySink ) + + // No audio, bundle is not constructed + EUNIT_ASSERT( inSession->Bundles().Count() == 0 ) + + } + + +// ----------------------------------------------------------------------------- +// Two-way video in incoming session. Incoming stream is the main stream. +// Both directions are enabled. Local viewfinder stream is added to display +// outgoing video locally +// ----------------------------------------------------------------------------- +// +void UT_CMusEngTwoWayRecvSession::UT_CompleteSessionStructureL_WithVideoOutBoundToVideoInL() + { + CMceInSession* inSession = ConstructInSessionLC( 1, 0 ); + + CMceVideoStream* videoOut = ConstructVideoOutStreamLC(); + inSession->Streams()[0]->BindL( videoOut ); + CleanupStack::Pop( videoOut ); + + iReceiveSession->iSession = inSession; // Transfers ownership + CleanupStack::Pop( inSession ); + + iReceiveSession->CompleteSessionStructureL(); + + EUNIT_ASSERT( inSession->Streams().Count() == 2 ); + + CMceMediaStream* videoIn = inSession->Streams()[0]; + + EUNIT_ASSERT( videoIn->IsEnabled() ) + EUNIT_ASSERT( videoIn->Type() == KMceVideo ) + EUNIT_ASSERT( videoIn->Sinks().Count() == 1 ) + EUNIT_ASSERT( videoIn->Sinks()[0]->Type() == KMceDisplaySink ) + + EUNIT_ASSERT( videoIn->BoundStream() ) + EUNIT_ASSERT( videoIn->BoundStreamL().IsEnabled() ) + + CMceMediaStream* videoVf = inSession->Streams()[1]; + EUNIT_ASSERT( videoVf->IsEnabled() ) + EUNIT_ASSERT( videoVf->Type() == KMceVideo ) + EUNIT_ASSERT( videoVf->Sinks().Count() == 1 ) + EUNIT_ASSERT( videoVf->Sinks()[0]->Type() == KMceDisplaySink ) + EUNIT_ASSERT( videoVf->Source()->Type() == KMceCameraSource ) + + // No audio, bundle is not constructed + EUNIT_ASSERT( inSession->Bundles().Count() == 0 ) + } + + +// ----------------------------------------------------------------------------- +// Two-way video in incoming session. Incoming stream is the bound stream. +// Both directions are enabled. Local viewfinder stream is added to display +// outgoing video locally +// ----------------------------------------------------------------------------- +// +void UT_CMusEngTwoWayRecvSession::UT_CompleteSessionStructureL_WithVideoInBoundToVideoOutL() + { + CMceInSession* inSession = ConstructInSessionLC( 0, 0 ); + + CMceVideoStream* videoOut = ConstructVideoOutStreamLC(); + + CMceVideoStream* videoIn = ConstructVideoInStreamLC(); + videoOut->BindL( videoIn ); + CleanupStack::Pop( videoIn ); + + inSession->AddStreamL( videoOut ); + CleanupStack::Pop( videoOut ); + + iReceiveSession->iSession = inSession; // Transfers ownership + CleanupStack::Pop( inSession ); + + iReceiveSession->CompleteSessionStructureL(); + + EUNIT_ASSERT( inSession->Streams().Count() == 2 ); + EUNIT_ASSERT( videoOut->IsEnabled() ) + EUNIT_ASSERT( videoOut->Type() == KMceVideo ) + EUNIT_ASSERT( videoOut->Sinks().Count() == 1 ) + EUNIT_ASSERT( videoOut->Sinks()[0]->Type() == KMceRTPSink ) + EUNIT_ASSERT( videoOut->Sinks()[0]->IsEnabled() ) + + EUNIT_ASSERT( videoOut->BoundStream() ) + EUNIT_ASSERT( videoOut->BoundStreamL().IsEnabled() ) + EUNIT_ASSERT( videoOut->BoundStreamL().Type() == KMceVideo ) + EUNIT_ASSERT( videoOut->BoundStreamL().Sinks().Count() == 1 ) + EUNIT_ASSERT( videoOut->BoundStreamL().Sinks()[0]->Type() == + KMceDisplaySink ) + EUNIT_ASSERT( videoOut->BoundStreamL().Sinks()[0]->IsEnabled() ) + + CMceMediaStream* videoVf = inSession->Streams()[1]; + EUNIT_ASSERT( videoVf->IsEnabled() ) + EUNIT_ASSERT( videoVf->Type() == KMceVideo ) + EUNIT_ASSERT( videoVf->Sinks().Count() == 1 ) + EUNIT_ASSERT( videoVf->Sinks()[0]->Type() == KMceDisplaySink ) + EUNIT_ASSERT( videoVf->Source()->Type() == KMceCameraSource ) + + // No audio, bundle is not constructed + EUNIT_ASSERT( inSession->Bundles().Count() == 0 ) + } + + +// ----------------------------------------------------------------------------- +// Construct 3 video instreams: +// 0. Without bound stream +// 1. Bounds video out stream +// 2. Bounded by video out stream +// Bound stream should be selected and vf stream is added +// ----------------------------------------------------------------------------- +// +void UT_CMusEngTwoWayRecvSession::UT_CompleteSessionStructureL_WithMultipleVideoInsL() + { + // construct session and stream 0 + CMceInSession* inSession = ConstructInSessionLC( 2, 0 ); + + // finish constructing stream 1 + CMceVideoStream* videoOut = ConstructVideoOutStreamLC(); + inSession->Streams()[1]->BindL( videoOut ); + CleanupStack::Pop( videoOut ); + + // finish constructing stream 2 + videoOut = ConstructVideoOutStreamLC(); + + CMceVideoStream* videoIn = ConstructVideoInStreamLC(); + videoOut->BindL( videoIn ); + CleanupStack::Pop( videoIn ); + + inSession->AddStreamL( videoOut ); + CleanupStack::Pop( videoOut ); + + // Transfers ownership + iReceiveSession->iSession = inSession; + CleanupStack::Pop( inSession ); + + // complete + iReceiveSession->CompleteSessionStructureL(); + + // Bound stream should be used, other original streams should be deleted + // but vf stream is added + EUNIT_ASSERT( inSession->Streams().Count() == 2 ); + + // First stream + EUNIT_ASSERT( inSession->Streams()[0]->IsEnabled() ) + EUNIT_ASSERT( inSession->Streams()[0]->Type() == KMceVideo ) + EUNIT_ASSERT( inSession->Streams()[0]->Sinks().Count() == 1 ) + EUNIT_ASSERT( inSession->Streams()[0]->Sinks()[0]->Type() == KMceDisplaySink ) + EUNIT_ASSERT( inSession->Streams()[0]->Sinks()[0]->IsEnabled() ) + EUNIT_ASSERT( inSession->Streams()[0]->BoundStream() ) + EUNIT_ASSERT( inSession->Streams()[0]->BoundStreamL().Type() == KMceVideo ) + + CMceMediaStream* videoVf = inSession->Streams()[1]; + EUNIT_ASSERT( videoVf->IsEnabled() ) + EUNIT_ASSERT( videoVf->Type() == KMceVideo ) + EUNIT_ASSERT( videoVf->Sinks().Count() == 1 ) + EUNIT_ASSERT( videoVf->Sinks()[0]->Type() == KMceDisplaySink ) + EUNIT_ASSERT( videoVf->Source()->Type() == KMceCameraSource ) + + // No audio, bundle is not constructed + EUNIT_ASSERT( inSession->Bundles().Count() == 0 ) + } + + +// ----------------------------------------------------------------------------- +// Streams in this test case +// 0. Video in +// 1. Audio in +// 2. Audio out bound to audio in +// 3. Audio in bound to audio out +// ----------------------------------------------------------------------------- +// +void UT_CMusEngTwoWayRecvSession:: + UT_CompleteSessionStructureL_WithVideoAndMultipleAudioInsL() + { + // Construct session and streams 0 and 1 + CMceInSession* inSession = inSession = ConstructInSessionLC( 1, 2 ); + + // Construct stream 2 + CMceAudioStream* audioOut = ConstructAudioOutStreamLC(); + inSession->Streams()[2]->BindL( audioOut ); + CleanupStack::Pop( audioOut ); + + // Construct stream 3 + + audioOut = ConstructAudioOutStreamLC(); + + CMceAudioStream* audioIn = ConstructAudioInStreamLC(); + audioOut->BindL( audioIn ); + CleanupStack::Pop( audioIn ); + + inSession->AddStreamL( audioOut ); + CleanupStack::Pop( audioOut ); + + // Transfers ownership + iReceiveSession->iSession = inSession; + CleanupStack::Pop( inSession ); + + // Complete + iReceiveSession->CompleteSessionStructureL(); + EUNIT_ASSERT( inSession->Streams().Count() == 4 ); + + // Stream 0 + EUNIT_ASSERT( inSession->Streams()[0]->Type() == KMceVideo ) + EUNIT_ASSERT( inSession->Streams()[0]->IsEnabled() ) + EUNIT_ASSERT( inSession->Streams()[0]->Sinks().Count() == 1 ) + EUNIT_ASSERT( inSession->Streams()[0]->Sinks()[0]->Type() == + KMceDisplaySink ) + + // Stream 1 + EUNIT_ASSERT( inSession->Streams()[1]->Type() == KMceAudio ) + EUNIT_ASSERT( inSession->Streams()[1]->IsEnabled() ) + EUNIT_ASSERT( inSession->Streams()[1]->Sinks().Count() == 1 ) + EUNIT_ASSERT( inSession->Streams()[1]->Sinks()[0]->Type() == + KMceSpeakerSink ); + CMceSpeakerSink* speaker = + static_cast(inSession->Streams()[1]->Sinks()[0]); + EUNIT_ASSERT( speaker->VolumeL() == iReceiveSession->LcVolumeL() ) + + // Stream 2 and bound stream + EUNIT_ASSERT( inSession->Streams()[2]->Type() == KMceAudio ) + EUNIT_ASSERT( inSession->Streams()[2]->IsEnabled() ) + EUNIT_ASSERT( inSession->Streams()[2]->Sinks().Count() == 1 ) + EUNIT_ASSERT( inSession->Streams()[2]->Sinks()[0]->Type() == + KMceSpeakerSink ); + speaker = static_cast(inSession->Streams()[2]->Sinks()[0]); + EUNIT_ASSERT( speaker->VolumeL() == iReceiveSession->LcVolumeL() ) + + EUNIT_ASSERT( inSession->Streams()[2]->BoundStream() ) + EUNIT_ASSERT( !inSession->Streams()[2]->BoundStreamL().IsEnabled() ) + EUNIT_ASSERT( inSession->Streams()[2]->BoundStreamL().Type() == KMceAudio ) + + EUNIT_ASSERT( inSession->Streams()[2]->BoundStreamL().Sinks().Count() == 1 ) + EUNIT_ASSERT( inSession->Streams()[2]->BoundStreamL().Sinks()[0]->Type() == + KMceRTPSink ); + + // Stream 3 and bound stream + EUNIT_ASSERT( inSession->Streams()[3]->Type() == KMceAudio ) + EUNIT_ASSERT( !inSession->Streams()[3]->IsEnabled() ) + EUNIT_ASSERT( inSession->Streams()[3]->Sinks().Count() == 1 ) + EUNIT_ASSERT( inSession->Streams()[3]->Sinks()[0]->Type() == KMceRTPSink ) + EUNIT_ASSERT( !inSession->Streams()[3]->Sinks()[0]->IsEnabled() ) + + EUNIT_ASSERT( inSession->Streams()[3]->BoundStream() ) + EUNIT_ASSERT( inSession->Streams()[3]->BoundStreamL().IsEnabled() ) + EUNIT_ASSERT( inSession->Streams()[3]->BoundStreamL().Type() == KMceAudio ) + EUNIT_ASSERT( inSession->Streams()[3]->BoundStreamL().Sinks().Count() == 1 ) + EUNIT_ASSERT( inSession->Streams()[3]->BoundStreamL().Sinks()[0]->Type() == + KMceSpeakerSink ) + speaker = static_cast + (inSession->Streams()[3]->BoundStreamL().Sinks()[0]); + EUNIT_ASSERT( speaker->VolumeL() == iReceiveSession->LcVolumeL() ) + + // Check for bundles + EUNIT_ASSERT( inSession->Bundles().Count() == 1 ) + EUNIT_ASSERT( inSession->Bundles()[0]->Streams().Count() == 4 ) + EUNIT_ASSERT( inSession->Bundles()[0]->Streams()[0]->Type() == KMceAudio ) + EUNIT_ASSERT( inSession->Bundles()[0]->Streams()[0]->Sinks()[0]->Type() == + KMceSpeakerSink ) + EUNIT_ASSERT( inSession->Bundles()[0]->Streams()[1]->Type() == KMceAudio ) + EUNIT_ASSERT( inSession->Bundles()[0]->Streams()[1]->Sinks()[0]->Type() == + KMceSpeakerSink ) + EUNIT_ASSERT( inSession->Bundles()[0]->Streams()[2]->Type() == KMceAudio ) + EUNIT_ASSERT( inSession->Bundles()[0]->Streams()[2]->Sinks()[0]->Type() == + KMceSpeakerSink ) + EUNIT_ASSERT( inSession->Bundles()[0]->Streams()[3]->Type() == KMceVideo ) + EUNIT_ASSERT( inSession->Bundles()[0]->Streams()[3]->Sinks()[0]->Type() == + KMceDisplaySink ) + } + + +// ----------------------------------------------------------------------------- +// Streams in this test case +// 0. Video in +// 1. Audio in +// 2. Audio out bound to audio in +// 3. Audio in bound to audio out +// All audio will be removed because of operator variant +// ----------------------------------------------------------------------------- +// +void UT_CMusEngTwoWayRecvSession::UT_CompleteSessionStructureL_OperatorVariant() + { + iReceiveSession->iOperatorVariant = ETrue; + + // Construct session and streams 0 and 1 + CMceInSession* inSession = inSession = ConstructInSessionLC( 1, 2 ); + + // Construct stream 2 + CMceAudioStream* audioOut = ConstructAudioOutStreamLC(); + inSession->Streams()[2]->BindL( audioOut ); + CleanupStack::Pop( audioOut ); + + // Construct stream 3 + + audioOut = ConstructAudioOutStreamLC(); + + CMceAudioStream* audioIn = ConstructAudioInStreamLC(); + audioOut->BindL( audioIn ); + CleanupStack::Pop( audioIn ); + + inSession->AddStreamL( audioOut ); + CleanupStack::Pop( audioOut ); + + // Transfers ownership + iReceiveSession->iSession = inSession; + CleanupStack::Pop( inSession ); + + // Complete + iReceiveSession->CompleteSessionStructureL(); + + // Check that all audio has been removed and no bundles has been + // constructed + EUNIT_ASSERT_EQUALS( inSession->Streams().Count(), 1 ) + EUNIT_ASSERT_EQUALS( inSession->Streams()[0]->Type(), KMceVideo ) + EUNIT_ASSERT_EQUALS( inSession->Bundles().Count(), 0 ) + + + // Session with bandwidth attribute at sessionlevel + // -> bandwidth is taken in use at session level + // + delete iReceiveSession->iSession; + iReceiveSession->iSession = NULL; + + inSession = ConstructInSessionLC( 1, 0 ); + CDesC8Array* sdpLines = new ( ELeave ) CDesC8ArrayFlat( 1 ); + CleanupStack::PushL( sdpLines ); + sdpLines->AppendL( KMusEngSessionSdpLineBandwidthField() ); + inSession->SetSessionSDPLinesL( sdpLines ); + CleanupStack::Pop( sdpLines ); + + // Transfers ownership + iReceiveSession->iSession = inSession; + CleanupStack::Pop( inSession ); + + iReceiveSession->CompleteSessionStructureL(); + + MDesC8Array* newSdpLines = iReceiveSession->iSession->SessionSDPLinesL(); + CleanupDeletePushL( newSdpLines ); + TBool bandwidthFoundFromSessionLevel( EFalse ); + for ( TInt i = 0; newSdpLines && i < newSdpLines->MdcaCount(); i++ ) + { + if ( newSdpLines->MdcaPoint( i ).Compare( + KMusEngSessionSdpLineBandwidthField() ) == 0 ) + { + bandwidthFoundFromSessionLevel = ETrue; + } + } + EUNIT_ASSERT( bandwidthFoundFromSessionLevel ); + CleanupStack::PopAndDestroy( newSdpLines ); + + newSdpLines = iReceiveSession->iSession->Streams()[ 0 ]->MediaAttributeLinesL(); + CleanupDeletePushL( newSdpLines ); + TBool bandwidthFoundFromMediaLevel( EFalse ); + for ( TInt i = 0; newSdpLines && i < newSdpLines->MdcaCount(); i++ ) + { + if ( newSdpLines->MdcaPoint( i ).Compare( + KMusEngSessionSdpLineBandwidthField() ) == 0 ) + { + bandwidthFoundFromMediaLevel = ETrue; + } + } + EUNIT_ASSERT( !bandwidthFoundFromMediaLevel ); + CleanupStack::PopAndDestroy( newSdpLines ); + + // Session with bandwidth attribute at media level + // -> bandwidth is taken in use at media level + // + delete iReceiveSession->iSession; + iReceiveSession->iSession = NULL; + + inSession = ConstructInSessionLC( 1, 0 ); + + sdpLines = new ( ELeave ) CDesC8ArrayFlat( 1 ); + CleanupStack::PushL( sdpLines ); + sdpLines->AppendL( KMusEngSessionSdpLineBandwidthField() ); + inSession->Streams()[ 0 ]->SetMediaAttributeLinesL( sdpLines ); + CleanupStack::Pop( sdpLines ); + + // Transfers ownership + iReceiveSession->iSession = inSession; + CleanupStack::Pop( inSession ); + + iReceiveSession->CompleteSessionStructureL(); + + newSdpLines = iReceiveSession->iSession->SessionSDPLinesL(); + CleanupDeletePushL( newSdpLines ); + bandwidthFoundFromSessionLevel = EFalse; + for ( TInt i = 0; newSdpLines && i < newSdpLines->MdcaCount(); i++ ) + { + if ( newSdpLines->MdcaPoint( i ).Compare( + KMusEngSessionSdpLineBandwidthField() ) == 0 ) + { + bandwidthFoundFromSessionLevel = ETrue; + } + } + EUNIT_ASSERT( !bandwidthFoundFromSessionLevel ); + CleanupStack::PopAndDestroy( newSdpLines ); + + newSdpLines = iReceiveSession->iSession->Streams()[ 0 ]->MediaAttributeLinesL(); + CleanupDeletePushL( newSdpLines ); + bandwidthFoundFromMediaLevel = EFalse; + for ( TInt i = 0; newSdpLines && i < newSdpLines->MdcaCount(); i++ ) + { + if ( newSdpLines->MdcaPoint( i ).Compare( + KMusEngSessionSdpLineBandwidthField() ) == 0 ) + { + bandwidthFoundFromMediaLevel = ETrue; + } + } + EUNIT_ASSERT( bandwidthFoundFromMediaLevel ); + CleanupStack::PopAndDestroy( newSdpLines ); + } + + +// TEST TABLE + +EUNIT_BEGIN_TEST_TABLE( + UT_CMusEngTwoWayRecvSession, + "UT_CMusEngTwoWayRecvSession", + "UNIT" ) + + +EUNIT_TEST( + "NewL - test ", + "CMusEngTwoWayRecvSession", + "NewL", + "FUNCTIONALITY", + SetupL, UT_NewLL, Teardown) + +EUNIT_TEST( + "EnableDisplayL - test ", + "CMusEngTwoWayRecvSession", + "EnableDisplayL", + "FUNCTIONALITY", + SetupL, UT_EnableDisplayLL, Teardown) + +EUNIT_TEST( + "SetOrientationL - test ", + "CMusEngTwoWayRecvSession", + "SetOrientationL", + "FUNCTIONALITY", + SetupL, UT_SetOrientationLL, Teardown) + +EUNIT_TEST( + "OrientationL - test ", + "CMusEngTwoWayRecvSession", + "OrientationL", + "FUNCTIONALITY", + SetupL, UT_OrientationLL, Teardown) + +EUNIT_TEST( + "SetLocalRectL - test ", + "CMusEngTwoWayRecvSession", + "SetLocalRectL", + "FUNCTIONALITY", + SetupL, UT_SetLocalRectLL, Teardown) + +EUNIT_TEST( + "SetRectsL - test ", + "CMusEngTwoWayRecvSession", + "SetRectsL", + "FUNCTIONALITY", + SetupL, UT_SetRectsLL, Teardown) + +EUNIT_TEST( + "Camera - test ", + "CMusEngTwoWayRecvSession", + "Camera", + "FUNCTIONALITY", + SetupL, UT_CameraL, Teardown) + +EUNIT_TEST( + "LocalVideoPlayer - test ", + "CMusEngTwoWayRecvSession", + "LocalVideoPlayer", + "FUNCTIONALITY", + SetupL, UT_LocalVideoPlayerL, Teardown) + +EUNIT_TEST( + "HandleSessionStateChanged - test ", + "CMusEngTwoWayRecvSession", + "HandleSessionStateChanged", + "FUNCTIONALITY", + SetupL, UT_HandleSessionStateChangedL, Teardown) + +EUNIT_TEST( + "AdjustVideoCodecL - test ", + "CMusEngTwoWayRecvSession", + "AdjustVideoCodecL", + "FUNCTIONALITY", + SetupL, UT_AdjustVideoCodecLL, Teardown) + +EUNIT_TEST( + "AdjustAudioCodecL - test ", + "CMusEngTwoWayRecvSession", + "AdjustAudioCodecL", + "FUNCTIONALITY", + SetupL, UT_AdjustAudioCodecLL, Teardown) + +EUNIT_TEST( + "DoCodecSelectionL - test ", + "CMusEngTwoWayRecvSession", + "DoCodecSelectionL", + "FUNCTIONALITY", + SetupL, UT_DoCodecSelectionLL, Teardown) + +EUNIT_TEST( + "IncomingSession - test ", + "CMusEngTwoWayRecvSession", + "IncomingSession", + "FUNCTIONALITY", + SetupL, UT_IncomingSessionL, Teardown) + +EUNIT_TEST( + "UT_CompleteSessionStructureL_WithoutSessionL - test without a session", + "CMusEngTwoWayRecvSession", + "CompleteSessionStructureL", + "FUNCTIONALITY", + SetupL, UT_CompleteSessionStructureL_WithoutSessionL, Teardown) + +EUNIT_TEST( + "UT_CompleteSessionStructureL_WithoutStreamsL - without streams", + "CMusEngTwoWayRecvSession", + "CompleteSessionStructureL", + "FUNCTIONALITY", + SetupL, UT_CompleteSessionStructureL_WithoutStreamsL, Teardown) + +EUNIT_TEST( + "UT_CompleteSessionStructureL_WithOutgoingStreamL - with outgoing stream", + "CMusEngTwoWayRecvSession", + "CompleteSessionStructureL", + "FUNCTIONALITY", + SetupL, UT_CompleteSessionStructureL_WithOutgoingStreamL, Teardown) + +EUNIT_TEST( + "UT_CompleteSessionStructureL_WithVideoInL - with video in stream", + "CMusEngTwoWayRecvSession", + "CompleteSessionStructureL", + "FUNCTIONALITY", + SetupL, UT_CompleteSessionStructureL_WithVideoInL, Teardown) + +EUNIT_TEST( + "UT_CompleteSessionStructureL_WithVideoOutBoundToVideoInL - with sendrecv video, video out bound to video in", + "CMusEngTwoWayRecvSession", + "CompleteSessionStructureL", + "FUNCTIONALITY", + SetupL, UT_CompleteSessionStructureL_WithVideoOutBoundToVideoInL, Teardown) + +EUNIT_TEST( + "UT_CompleteSessionStructureL_WithVideoInBoundToVideoOutL - with sendrecv video, video in bound to video out", + "CMusEngTwoWayRecvSession", + "CompleteSessionStructureL", + "FUNCTIONALITY", + SetupL, UT_CompleteSessionStructureL_WithVideoInBoundToVideoOutL, Teardown) + +EUNIT_TEST( + "UT_CompleteSessionStructureL_WithMultipleVideoInsL - with multiple video in streams", + "CMusEngTwoWayRecvSession", + "CompleteSessionStructureL", + "FUNCTIONALITY", + SetupL, UT_CompleteSessionStructureL_WithMultipleVideoInsL, Teardown) + +EUNIT_TEST( + "CompleteSessionStructureL - test one video and multiple audio streams", + "CMusEngTwoWayRecvSession", + "CompleteSessionStructureL", + "FUNCTIONALITY", + SetupL, UT_CompleteSessionStructureL_WithVideoAndMultipleAudioInsL, Teardown) + +EUNIT_TEST( + "CompleteSessionStructureL - test operator variant", + "CMusEngTwoWayRecvSession", + "CompleteSessionStructureL", + "FUNCTIONALITY", + SetupL, UT_CompleteSessionStructureL_OperatorVariant, Teardown) + +EUNIT_END_TEST_TABLE + +// END OF FILE + + diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshengine/tsrc/ut_engine/src/ut_musengtwowaysession.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/mmshengine/tsrc/ut_engine/src/ut_musengtwowaysession.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,1217 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + + +// INTERNAL INCLUDES +#include "ut_musengtwowaysession.h" +#include "musengstubs.h" +#include "musengtestdefs.h" +#include "musengtwowaysession.h" +#include "mussipprofilehandler.h" +#include "musengmceutils.h" +#include "mussettings.h" +#include "mussessionproperties.h" +#include "musengremotevideoplayer.h" + +// SYSTEM INCLUDES +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + + +_LIT8( KMusAvcBitrateLevel1TestText, "TestTextForAvcBrL1Level" ); +_LIT8( KMusAvcBitrateLevel1bTestText, "TestTextForAvcBrL1bLevel" ); +_LIT8( KMusAvcBitrateLevel1_1TestText, "TestTextForAvcBrL1_1Level" ); +_LIT8( KMusAvcBitrateLevel1_2TestText, "TestTextForAvcBrL1_2Level" ); +_LIT8( KMusAvcBitrateLevel1_3TestText, "TestTextForAvcBrL1_3Level" ); +_LIT8( KMusAvcBitrateLevel2TestText, "TestTextForAvcBrL2Level" ); + +_LIT8( KMusAvcBitrateLevel_1b_ConfigKey, "AvcBrL1b=TestTextForAvcBrL1bLevel;" ); + +_LIT8( KMusAvcBitrateLevel_1_1_ConfigKey, +"AvcBrL1_1=TestTextForAvcBrL1_1Level;"); + +_LIT8( KMusAvcBitrateLevels_1_1_And_1b_ConfigKeys, +"AvcBrL1_1=TestTextForAvcBrL1_1Level;\ +AvcBrL1b=TestTextForAvcBrL1bLevel;" ); + +_LIT8( KMusAvcAllLevelsConcatenation, +"AvcBrL1=TestTextForAvcBrL1Level;\ +AvcBrL1b=TestTextForAvcBrL1bLevel;\ +AvcBrL1_1=TestTextForAvcBrL1_1Level;\ +AvcBrL1_2=TestTextForAvcBrL1_2Level;\ +AvcBrL1_3=TestTextForAvcBrL1_3Level;\ +AvcBrL2=TestTextForAvcBrL2Level;" ); + + + +//use step in different time period +const TInt KZoomBigStepCount = 15; +const TInt KZoomSmallStepCount = KZoomBigStepCount*2; +const TInt KZoomStepMinSize = 1; + +// 0.4 second +const TInt64 KZoomFasterTime = 400000;//must bigger than 1/3 second + +//insure that step is 1 +#define USER_SLEEP User::After(KZoomFasterTime) + + +// NOTE!!!!!!!!!! +// There are intentianally many same cases as already in CMusEngLiveSession +// as two-way session derives from livesession. These cases therefore +// ensure that live session changes are not breaking two-way session. + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +UT_CMusEngTwoWaySession* UT_CMusEngTwoWaySession::NewL() + { + UT_CMusEngTwoWaySession* self = UT_CMusEngTwoWaySession::NewLC(); + CleanupStack::Pop( self ); + return self; + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +UT_CMusEngTwoWaySession* UT_CMusEngTwoWaySession::NewLC() + { + UT_CMusEngTwoWaySession* self = new( ELeave ) UT_CMusEngTwoWaySession(); + CleanupStack::PushL( self ); + self->ConstructL(); + return self; + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +UT_CMusEngTwoWaySession::~UT_CMusEngTwoWaySession() + { + // NOP + } + + +// ----------------------------------------------------------------------------- +// Default constructor +// ----------------------------------------------------------------------------- +// +UT_CMusEngTwoWaySession::UT_CMusEngTwoWaySession() + { + // NOP + } + + +// ----------------------------------------------------------------------------- +// Second phase construct +// ----------------------------------------------------------------------------- +// +void UT_CMusEngTwoWaySession::ConstructL() + { + // The ConstructL from the base class CEUnitTestSuiteClass must be called. + // It generates the test case table. + CEUnitTestSuiteClass::ConstructL(); + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_CMusEngTwoWaySession::SetupL() + { + iLcSessionObserver = new( ELeave )CLcSessionObserverStub; + iLcUiProvider = new( ELeave )CLcUiProviderStub; + iLiveSession = CMusEngTwoWaySession::NewL(); + iLiveSession->SetLcSessionObserver( iLcSessionObserver ); + iLiveSession->SetLcUiProvider( iLcUiProvider ); + + User::LeaveIfError( RProperty::Set( NMusSessionApi::KCategoryUid, + NMusSessionApi::KRemoteSipAddress, + KTestRecipientSipUri ) ); + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_CMusEngTwoWaySession::Teardown() + { + delete iLiveSession; + delete iLcSessionObserver; + delete iLcUiProvider; + PropertyHelper::Close(); + // Delete static data from CenRep stub + CRepository::iStaticWriteAvcKeysToStaticData = EFalse; + CRepository::DeleteStubAvcConfigKeys(); + CRepository::ResetStubGlobal(); + CRepository::iForceFailWithCode = KErrNone; + } + + + +// TEST CASES + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_CMusEngTwoWaySession::UT_NewLL() + { + EUNIT_ASSERT( iLiveSession ) + EUNIT_ASSERT( iLiveSession->iCameraHandler.iCameraUsage == MusSettingsKeys::EUseCameraSwapping ); + EUNIT_ASSERT( iLiveSession->iMceManagerUid == TUid::Uid( KMusUiUid ) ); + + delete iLiveSession; + iLiveSession = NULL; + CRepository::SetStubGlobal( MusSettingsKeys::KCameraUsage, + MusSettingsKeys::EUseOnlySecondaryCamera ); + + iLiveSession = CMusEngTwoWaySession::NewL(); + + EUNIT_ASSERT( iLiveSession->iCameraHandler.iCameraUsage == MusSettingsKeys::EUseOnlySecondaryCamera ); + + delete iLiveSession; + iLiveSession = NULL; + CRepository::SetStubGlobal( MusSettingsKeys::KCameraUsage, + MusSettingsKeys::EUseOnlyMainCamera ); + + iLiveSession = CMusEngTwoWaySession::NewL(); + + EUNIT_ASSERT_EQUALS( TInt( MusSettingsKeys::EUseOnlyMainCamera ), + TInt( iLiveSession->iCameraHandler.iCameraUsage ) ) + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_CMusEngTwoWaySession::UT_EstablishLcSessionLL() + { + CRepository::SetStubGlobal( MusSettingsKeys::KVideoBandwidth, + 128 ); + iLiveSession->EstablishLcSessionL(); + + EUNIT_ASSERT( iLiveSession->iSession ); + // Next assertion ensures that session structure is new + EUNIT_ASSERT( iLiveSession->iSession->Streams().Count() > 0 ); + EUNIT_ASSERT( iLiveSession->iSession->Streams()[0] ); + EUNIT_ASSERT( *(iLiveSession->iRecipient) == KTestRecipientSipUri8() ); + EUNIT_ASSERT( iLiveSession->iSession->State() == CMceSession::EOffering ); + + EUNIT_ASSERT( iLiveSession->iSession->iHeaders ); + EUNIT_ASSERT( iLiveSession->iSession->iHeaders->Count() == 2 ); + EUNIT_ASSERT( iLiveSession->iSession->iHeaders->MdcaPoint( 0 ) == + KMusEngAcceptContactHeader() ); + EUNIT_ASSERT( iLiveSession->iSession->iHeaders->MdcaPoint( 1 ) == + KMusAcceptHeader() ); + + // Ensure there is no SDP lines at session level + EUNIT_ASSERT( iLiveSession->iSession->iSessionSDPLines ); + EUNIT_ASSERT( iLiveSession->iSession->iSessionSDPLines->Count() == 1 ); + EUNIT_ASSERT( iLiveSession->iSession->iSessionSDPLines->MdcaPoint( 0 ) == + KMusEngSessionSdpLineXApplication() ); + + // Ensure b=AS and b=TIAS attributes are taken at media level + MDesC8Array* mediaSdpLines = + iLiveSession->iSession->Streams()[0]->iMediaSDPLines; + + EUNIT_ASSERT( mediaSdpLines ); + EUNIT_ASSERT( mediaSdpLines->MdcaCount() == 2 ); + EUNIT_ASSERT( mediaSdpLines->MdcaPoint( 0 ).Find( + KMusEngSessionSdpLineBandwidthLine() ) == 0 ); + EUNIT_ASSERT( mediaSdpLines->MdcaPoint( 1 ).Find( + KMusEngSessionSdpLineTiasLine() ) == 0 ); + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_CMusEngTwoWaySession::UT_EnableDisplayLL() + { + TRAPD( error, iLiveSession->EnableDisplayL( ETrue ) ); + MUS_TEST_FORWARD_ALLOC_FAILURE( error ); + EUNIT_ASSERT( error == KErrNotReady ); + + ESTABLISH_OUT_SESSION( iLiveSession ); + + CMceDisplaySink* display = + MusEngMceUtils::GetDisplayL( *(iLiveSession->iSession) ); + + CMceDisplaySink* receivingDisplay = + MusEngMceUtils::GetReceivingDisplayL( *iLiveSession->iSession ); + + // Disable + iLiveSession->EnableDisplayL( EFalse ); + + EUNIT_ASSERT( !display->iIsEnabled ); + EUNIT_ASSERT( !receivingDisplay->iIsEnabled ); + + // Try to disable again, request should be ignored + + iLiveSession->EnableDisplayL( EFalse ); + + EUNIT_ASSERT( !display->iIsEnabled ); + EUNIT_ASSERT( !receivingDisplay->iIsEnabled ); + + // Enable + + iLiveSession->EnableDisplayL( ETrue ); + + EUNIT_ASSERT( display->iIsEnabled ); + EUNIT_ASSERT( receivingDisplay->iIsEnabled ); + + // Try to enable again, request should be ignored + + iLiveSession->EnableDisplayL( ETrue ); + + EUNIT_ASSERT( display->iIsEnabled ); + EUNIT_ASSERT( receivingDisplay->iIsEnabled ); + + // Display is active only if receiving and display is explicitly enabled + EUNIT_ASSERT( !iLiveSession->IsDisplayActive() ) + iLiveSession->iReceiving = ETrue; + EUNIT_ASSERT( iLiveSession->IsDisplayActive() ) + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_CMusEngTwoWaySession::UT_SetOrientationLL() + { + // Try without session, fails + EUNIT_ASSERT_SPECIFIC_LEAVE( iLiveSession->SetOrientationL( + CMusEngMceSession::EPortrait ), + KErrNotReady ) + + // Establish a session + ESTABLISH_OUT_SESSION( iLiveSession ) + + CMceDisplaySink* display = + MusEngMceUtils::GetDisplayL( *iLiveSession->iSession ); + + CMceDisplaySink* receivingDisplay = + MusEngMceUtils::GetReceivingDisplayL( *iLiveSession->iSession ); + + + // Check the initial state + display->iRotation = CMceDisplaySink::ENone; + receivingDisplay->iRotation = CMceDisplaySink::ENone; + EUNIT_ASSERT_EQUALS( iLiveSession->OrientationL(), + MLcWindow::EPortrait ) + + // Successfully change orientation + + iLiveSession->SetOrientationL( CMusEngMceSession::ELandscape ); + EUNIT_ASSERT_EQUALS( iLiveSession->OrientationL(), + MLcWindow::ELandscape ) + + EUNIT_ASSERT_EQUALS( display->iRotation, CMceDisplaySink::EClockwise90Degree ); + EUNIT_ASSERT_EQUALS( receivingDisplay->iRotation, CMceDisplaySink::EClockwise90Degree ); + + iLiveSession->SetOrientationL( CMusEngMceSession::EPortrait ); + EUNIT_ASSERT_EQUALS( iLiveSession->OrientationL(), + MLcWindow::EPortrait ) + + EUNIT_ASSERT_EQUALS( display->iRotation, CMceDisplaySink::ENone ); + EUNIT_ASSERT_EQUALS( receivingDisplay->iRotation, CMceDisplaySink::ENone ); + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_CMusEngTwoWaySession::UT_SetLocalRectLL() + { + // Does nothing real before session establishment + TRect rect1( 100, 200, 300, 500 ); + iLiveSession->SetSecondaryRectL( rect1 ); + + EUNIT_ASSERT( rect1 == iLiveSession->iLocalRect ); + + // Local rect changing affects to viewfinder display sink not to receiving video + // + ESTABLISH_OUT_SESSION( iLiveSession ); + + CMceDisplaySink* vfDisplay = + MusEngMceUtils::GetDisplayL( *( iLiveSession->iSession ) ); + CMceDisplaySink* receivingDisplay = + MusEngMceUtils::GetReceivingDisplayL( *( iLiveSession->iSession ) ); + + EUNIT_ASSERT( vfDisplay->DisplayRectL() == iLiveSession->iLocalRect ); + EUNIT_ASSERT( receivingDisplay->DisplayRectL() != iLiveSession->iLocalRect ); + + TRect rect2( 200, 200, 300, 500 ); + iLiveSession->SetSecondaryRectL( rect2 ); + EUNIT_ASSERT( rect2 == iLiveSession->iLocalRect ); + EUNIT_ASSERT( vfDisplay->DisplayRectL() == iLiveSession->iLocalRect ); + EUNIT_ASSERT( receivingDisplay->DisplayRectL() != iLiveSession->iLocalRect ); + + // Terminate session and try again, rect must not be changed + + iLiveSession->iSession->iState = CMceSession::ETerminated; + + TRect rect3( 300, 300, 400, 600 ); + + iLiveSession->SetSecondaryRectL( rect3 ); + + EUNIT_ASSERT( vfDisplay->DisplayRectL() != rect3 ) + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_CMusEngTwoWaySession::UT_SetRectsLL() + { + // Does nothing real before session establishment + TRect localrect1( 100, 200, 300, 400 ); + TRect remoterect1( 100, 200, 300, 500 ); + iLiveSession->SetRectsL( remoterect1, localrect1 ); + + EUNIT_ASSERT( localrect1 == iLiveSession->iLocalRect ); + EUNIT_ASSERT( remoterect1 == iLiveSession->iRect ); + + // Local rect changing affects to viewfinder display sink and remote rect to + // receiving video display sink + // + ESTABLISH_OUT_SESSION( iLiveSession ); + + CMceDisplaySink* vfDisplay = + MusEngMceUtils::GetDisplayL( *( iLiveSession->iSession ) ); + CMceDisplaySink* receivingDisplay = + MusEngMceUtils::GetReceivingDisplayL( *( iLiveSession->iSession ) ); + + TRect localrect2( 200, 200, 300, 400 ); + TRect remoterect2( 200, 200, 300, 500 ); + EUNIT_ASSERT( vfDisplay->DisplayRectL() != localrect2 ); + EUNIT_ASSERT( receivingDisplay->DisplayRectL() != remoterect2 ); + + iLiveSession->SetRectsL( remoterect2, localrect2 ); + EUNIT_ASSERT( localrect2 == iLiveSession->iLocalRect ); + EUNIT_ASSERT( remoterect2 == iLiveSession->iRect ); + EUNIT_ASSERT( vfDisplay->DisplayRectL() == iLiveSession->iLocalRect ); + EUNIT_ASSERT( receivingDisplay->DisplayRectL() == iLiveSession->iRect ); + + // Terminate session and try again, rect must not be changed + + iLiveSession->iSession->iState = CMceSession::ETerminated; + + TRect localrect3( 300, 200, 300, 400 ); + TRect remoterect3( 300, 200, 300, 500 ); + + iLiveSession->SetRectsL( remoterect3, localrect3 ); + + EUNIT_ASSERT( vfDisplay->DisplayRectL() != localrect3 ) + EUNIT_ASSERT( receivingDisplay->DisplayRectL() != remoterect3 ); + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_CMusEngTwoWaySession::UT_EnableLcFileL() + { + // Recording is not supported for two-way session + EUNIT_ASSERT_SPECIFIC_LEAVE( iLiveSession->EnableLcFileL( ETrue ), + KErrNotSupported ) + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_CMusEngTwoWaySession::UT_CompleteSessionStructureLL() + { + + CMceStreamBundle* localBundle = + CMceStreamBundle::NewLC( CMceStreamBundle::ELS ); + + // Check that structure cannot be completed before creating the session + TRAPD( error, iLiveSession->CompleteSessionStructureL( *localBundle ) ); + MUS_TEST_FORWARD_ALLOC_FAILURE( error ); + EUNIT_ASSERT( error == KErrNotReady ); + + // Normal case + + CSIPProfile* profile = iLiveSession->iSipProfileHandler->Profile(); + + iLiveSession->iSession = CMceOutSession::NewL( + *(iLiveSession->iManager), + *profile, + KTestRecipientSipUri8() ); + + iLiveSession->CompleteSessionStructureL( *localBundle ); + + EUNIT_ASSERT( localBundle->Streams().Count() == 0 ) + + EUNIT_ASSERT( iLiveSession->iSession->Streams().Count() == 1 ); + EUNIT_ASSERT( iLiveSession->iSession->Streams()[0]->Type() == KMceVideo ); + EUNIT_ASSERT( iLiveSession->iSession->Streams()[0]->Source() ); + EUNIT_ASSERT( iLiveSession->iSession->Streams()[0]->Source()->Type() == + KMceCameraSource ); + EUNIT_ASSERT( iLiveSession->iSession->Streams()[0]->Sinks().Count() == 1 ); + EUNIT_ASSERT( iLiveSession->iSession->Streams()[0]->Sinks()[0]->Type() == + KMceRTPSink ); + + EUNIT_ASSERT( iLiveSession->iCameraHandler.iCurrentCamera == + TMusEngCameraHandler::EBackCamera ); + + CMceVideoStream* vidStream = static_cast( iLiveSession->iSession->Streams()[0] ); + EUNIT_ASSERT( vidStream->BoundStream() ); + CMceVideoStream& inStream = static_cast( vidStream->BoundStreamL() ); + EUNIT_ASSERT( inStream.Source() ); + EUNIT_ASSERT( inStream.Source()->Type() == KMceRTPSource ); + EUNIT_ASSERT( inStream.Sinks().Count() == 1 ); + EUNIT_ASSERT( inStream.Sinks()[0]->Type() == KMceDisplaySink ); + + delete iLiveSession->iSession; + iLiveSession->iSession = NULL; + + iLiveSession->iSession = CMceOutSession::NewL( + *(iLiveSession->iManager), + *profile, + KTestRecipientSipUri8() ); + + iLiveSession->iCameraHandler.iCameraUsage = MusSettingsKeys::EUseOnlySecondaryCamera; + iLiveSession->CompleteSessionStructureL( *localBundle ); + + EUNIT_ASSERT( iLiveSession->iCameraHandler.iCurrentCamera == + TMusEngCameraHandler::EFrontCamera ); + + + CleanupStack::PopAndDestroy( localBundle ); + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_CMusEngTwoWaySession::UT_HandleSessionStateChangedL() + { + // Make Repository empty, config keys must be written + CRepository::SetStubAvcConfigKeysL( KNullDesC8() ); + + // Invite + iLiveSession->EstablishLcSessionL(); + iLiveSession->iSession->iState = CMceSession::EEstablished; + CRepository::iForceFailWithCode = KErrNone; + + // Simulate session state transition notification + iLiveSession->HandleSessionStateChanged( + *iLiveSession->iSession, + 200, KNullDesC8() ); + + HBufC8* info = MultimediaSharingSettings::EncoderConfigInfoLC(); + EUNIT_ASSERT_NOT_EQUALS( *info, KMusAvcBitrateLevel_1b_ConfigKey() ) + CleanupStack::PopAndDestroy( info ); + + // sendrecv->recvonly downgrade terminates session + iLcSessionObserver->Reset(); + iLiveSession->iSession->iState = CMceSession::EEstablished; + CMceVideoStream* inStream = + MusEngMceUtils::GetVideoInStreamL( *iLiveSession->iSession ); + inStream->EnableL(); + CMceVideoStream* outStream = + MusEngMceUtils::GetVideoOutStreamL( *iLiveSession->iSession ); + outStream->DisableL(); + iLiveSession->HandleSessionStateChanged( + *iLiveSession->iSession, 200, KNullDesC8() ); + EUNIT_ASSERT_EQUALS( TInt( iLcSessionObserver->iCalledFunction ), + TInt( CLcSessionObserverStub::ESessionFailed ) ) + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_CMusEngTwoWaySession::UT_AdjustVideoCodecLL() + { + CRepository::SetStubAvcConfigKeysL( KNullDesC8() ); + + CMceVideoCodec* codecH263 = CMceH263Codec::NewLC( KMceSDPNameH263() ); + CMceVideoCodec* codecH2632000 = CMceH263Codec::NewLC( KMceSDPNameH2632000() ); + CMceVideoCodec* codecAvc = CMceAvcCodec::NewLC( KMceSDPNameH264() ); + CMceVideoCodec* codecUnknown = CMceH263Codec::NewLC( KNullDesC8() ); + + iLiveSession->AdjustVideoCodecL( *codecH263, KMceCameraSource ); + iLiveSession->AdjustVideoCodecL( *codecH2632000, KMceCameraSource ); + iLiveSession->AdjustVideoCodecL( *codecAvc, KMceCameraSource ); + iLiveSession->AdjustVideoCodecL( *codecUnknown, KMceCameraSource ); + + // Test that bit rates and keepalive has been set to H263 & AVC codecs + EUNIT_ASSERT( codecH263->iAllowedBitrates == KMceAllowedH263BitrateAll ) + EUNIT_ASSERT( codecH263->iMaxBitRate == KMceH263Level45Bitrate ) + EUNIT_ASSERT( codecH263->iBitrate == 80000 ) + EUNIT_ASSERT_EQUALS( codecH263->KeepAliveTimer(), 6 ) + EUNIT_ASSERT_EQUALS( codecH263->KeepAlivePayloadType(), 96 ) + EUNIT_ASSERT_EQUALS( codecH263->KeepAliveData(), KNullDesC8() ) + + EUNIT_ASSERT( codecH2632000->iAllowedBitrates == + KMceAllowedH263BitrateAll ) + EUNIT_ASSERT( codecH2632000->iMaxBitRate == KMceH263Level45Bitrate ) + EUNIT_ASSERT( codecH2632000->iBitrate == 80000 ) + EUNIT_ASSERT_EQUALS( codecH2632000->KeepAliveTimer(), 6 ) + EUNIT_ASSERT_EQUALS( codecH2632000->KeepAlivePayloadType(), 96 ) + EUNIT_ASSERT_EQUALS( codecH2632000->KeepAliveData(), KNullDesC8() ) + + EUNIT_ASSERT( codecAvc->iAllowedBitrates == + KMceAvcCodecProfileIdBaseline | + KMceAvcCodecProfileIopConstraintSet | + KMceAvcBitrateLevel1b ) + EUNIT_ASSERT_EQUALS( codecAvc->KeepAliveTimer(), 6 ) + EUNIT_ASSERT_EQUALS( codecAvc->KeepAlivePayloadType(), 98 ) + EUNIT_ASSERT_EQUALS( codecAvc->KeepAliveData(), KNullDesC8() ) + EUNIT_ASSERT( iLiveSession->iStoreEncoderConfigInfo ) + + + // Test that bitrates and keepalive has not been set to unknown codecs + EUNIT_ASSERT( codecUnknown->iAllowedBitrates != + KMceAllowedH263BitrateAll ) + EUNIT_ASSERT( codecUnknown->iMaxBitRate != KMceH263Level45Bitrate ) + EUNIT_ASSERT( codecUnknown->iBitrate != KMceH263Level10Bitrate ) + EUNIT_ASSERT_EQUALS( codecUnknown->KeepAliveTimer(), 6 ) + EUNIT_ASSERT_EQUALS( codecUnknown->KeepAlivePayloadType(), 0 ) + EUNIT_ASSERT_EQUALS( codecUnknown->KeepAliveData(), KNullDesC8() ) + + // Test that base class has been called to all codecs + EUNIT_ASSERT( codecH263->iPayloadType == 96 ) + EUNIT_ASSERT( codecH2632000->iPayloadType == 96 ) + EUNIT_ASSERT( codecAvc->iPayloadType == 98 ) + EUNIT_ASSERT( codecUnknown->iPayloadType == 0 ) + + CleanupStack::PopAndDestroy( codecUnknown ); + CleanupStack::PopAndDestroy( codecAvc ); + CleanupStack::PopAndDestroy( codecH2632000 ); + CleanupStack::PopAndDestroy( codecH263 ); + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_CMusEngTwoWaySession::UT_AdjustAudioCodecLL() + { + CMceAudioCodec* codec = + iLiveSession->iManager->SupportedAudioCodecs()[0]->CloneL(); + CleanupStack::PushL( codec ); + iLiveSession->AdjustAudioCodecL( *codec ); + + // Does nothing so just test that base class has been called + + EUNIT_ASSERT( codec->iPayloadType == 97 ) + + CleanupStack::PopAndDestroy( codec ); + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_CMusEngTwoWaySession::UT_DoCodecSelectionLL() + { + CMceVideoStream* stream = CMceVideoStream::NewLC(); + + CMceVideoCodec* codecH263 = CMceH263Codec::NewLC( _L8( "Foo" ) ); + stream->AddCodecL( codecH263 ); + CleanupStack::Pop( codecH263 ); + + CMceVideoCodec* codecH2632000 = CMceH263Codec::NewLC( _L8( "Bar" ) ); + stream->AddCodecL( codecH2632000 ); + CleanupStack::Pop( codecH2632000 ); + + CMceVideoCodec* codecAvc = CMceAvcCodec::NewLC( KMceSDPNameH264() ); + stream->AddCodecL( codecAvc ); + CleanupStack::Pop( codecAvc ); + + // No assumptions so all the codecs are left to stream + iLiveSession->DoCodecSelectionL( *stream ); + EUNIT_ASSERT_EQUALS( stream->Codecs().Count(), 3 ) + + // Check that AVC codecs are removed if they are known to be not supported + delete iLiveSession->iVideoCodecList; + iLiveSession->iVideoCodecList = NULL; + iLiveSession->iVideoCodecList = _L8("SomethingThatIsNotAVC").AllocL(); + iLiveSession->DoCodecSelectionL( *stream ); + EUNIT_ASSERT_EQUALS( stream->Codecs().Count(), 2 ) + EUNIT_ASSERT( stream->Codecs()[0]->SdpName() != KMceSDPNameH264() ) + EUNIT_ASSERT( stream->Codecs()[1]->SdpName() != KMceSDPNameH264() ) + + CleanupStack::PopAndDestroy( stream ); + } + +// ----------------------------------------------------------------------------- +// Although all states are not meaningfull for LiveSession, all states are +// tested in order to force the updating of unit tests when behavior is changed +// ----------------------------------------------------------------------------- +// +void UT_CMusEngTwoWaySession::UT_StreamStateChangedL() + { + // Try without a session, nothing happens + CMceVideoStream* videoStream = CMceVideoStream::NewLC(); + static_cast(iLiveSession)->StreamStateChanged( + *videoStream ); + CleanupStack::PopAndDestroy( videoStream ); + + // Simulate sending invite + iLiveSession->EstablishLcSessionL(); + + // Try all the stream states + CMceMediaStream* changedStream = iLiveSession->iSession->Streams()[0]; + + // EUninitialized, stream is created, unexpected change, nothing happens + changedStream->iState = CMceMediaStream::EUninitialized; + static_cast(iLiveSession)->StreamStateChanged( + *changedStream ); + EUNIT_ASSERT( iLcSessionObserver->IsReseted() ); + + // EInitialized, stream is initialized + changedStream->iState = CMceMediaStream::EInitialized; + static_cast(iLiveSession)->StreamStateChanged( + *changedStream ); + EUNIT_ASSERT( iLcSessionObserver->IsReseted() ); + + // EBuffering, outgoing stream is buffering + changedStream->iState = CMceMediaStream::EBuffering; + static_cast(iLiveSession)->StreamStateChanged( + *changedStream ); + EUNIT_ASSERT( iLcSessionObserver->IsReseted() ); + + // EBuffering, incoming stream is buffering + EUNIT_ASSERT( !iLiveSession->iBuffered ); + CMceMediaStream* changedInStream = &iLiveSession->iSession->Streams()[0]->BoundStreamL(); + changedInStream->iState = CMceMediaStream::EBuffering; + iLiveSession->StreamStateChanged( *changedInStream ); + EUNIT_ASSERT( iLiveSession->iBuffered ); + EUNIT_ASSERT( iLcSessionObserver->IsReseted() ); + + // EIdle, stream is not receiving RTP + changedStream->iState = CMceMediaStream::EIdle; + static_cast(iLiveSession)->StreamStateChanged( + *changedStream ); + EUNIT_ASSERT( iLcSessionObserver->IsReseted() ); + + // EStreaming, outgoing stream is streaming, no effect on receiving information + changedStream->iState = CMceMediaStream::EStreaming; + static_cast(iLiveSession)->StreamStateChanged( + *changedStream ); + EUNIT_ASSERT_EQUALS( TInt( iLcSessionObserver->iCalledFunction ), + TInt( CLcSessionObserverStub::EPlayerStateChanged ) ) + iLcSessionObserver->Reset(); + + // EStreaming, incoming stream is streaming, receiving information is updated and notified + EUNIT_ASSERT( !iLiveSession->iReceiving ); + changedInStream->iState = CMceMediaStream::EStreaming; + iLiveSession->StreamStateChanged( *changedInStream ); + EUNIT_ASSERT_EQUALS( TInt( iLcSessionObserver->iCalledFunction ), + TInt( CLcSessionObserverStub::EPlayerStateChanged ) ) + EUNIT_ASSERT( iLiveSession->iReceiving ); + iLcSessionObserver->Reset(); + + // EStreaming, incoming stream is streaming, state is notified even if receiving information + // says we are already receiving + changedInStream->iState = CMceMediaStream::EStreaming; + iLiveSession->StreamStateChanged( *changedInStream ); + EUNIT_ASSERT_EQUALS( TInt( iLcSessionObserver->iCalledFunction ), + TInt( CLcSessionObserverStub::EPlayerStateChanged ) ) + iLcSessionObserver->Reset(); + + // EDisabled, stream is explicitly disabled + changedStream->iState = CMceMediaStream::EDisabled; + static_cast(iLiveSession)->StreamStateChanged( + *changedStream ); + EUNIT_ASSERT( iLcSessionObserver->IsReseted() ); + + // ENoResources, stream has no needed resources to stream + changedStream->iState = CMceMediaStream::ENoResources; + static_cast(iLiveSession)->StreamStateChanged( + *changedStream ); + EUNIT_ASSERT( iLcSessionObserver->IsReseted() ); + + // ETranscodingRequired, stream requires non-realtime transcoding + changedStream->iState = CMceMediaStream::ETranscodingRequired; + static_cast(iLiveSession)->StreamStateChanged( + *changedStream ); + EUNIT_ASSERT( iLcSessionObserver->IsReseted() ); + + // ETranscoding, stream is transcoding in non-realtime + changedStream->iState = CMceMediaStream::ETranscoding; + static_cast(iLiveSession)->StreamStateChanged( + *changedStream ); + EUNIT_ASSERT( iLcSessionObserver->IsReseted() ); + } + +// ----------------------------------------------------------------------------- +// Although all states are not meaningfull for LiveSession, all states are +// tested in order to force the updating of unit tests when behavior is changed +// ----------------------------------------------------------------------------- +// +void UT_CMusEngTwoWaySession::UT_StreamStateChangedWithSourceL() + { + // Try without a session, nothing happens + CMceVideoStream* videoStream = CMceVideoStream::NewLC(); + static_cast(iLiveSession)->StreamStateChanged( + *videoStream, + *CMceCameraSource::NewLC( *iLiveSession->iManager ) ); + CleanupStack::PopAndDestroy(); // camera + CleanupStack::PopAndDestroy( videoStream ); + + // Simulate sending invite + iLiveSession->EstablishLcSessionL(); + + // Try all the stream states + CMceMediaStream* changedStream = iLiveSession->iSession->Streams()[0]; + CMceMediaSource* changedSource = changedStream->Source(); + + // EUninitialized, stream is created, unexpected change, nothing happens + changedStream->iState = CMceMediaStream::EUninitialized; + static_cast(iLiveSession)->StreamStateChanged( + *changedStream, *changedSource ); + EUNIT_ASSERT( iLcSessionObserver->IsReseted() ); + + // EInitialized, stream is initialized + changedStream->iState = CMceMediaStream::EInitialized; + static_cast(iLiveSession)->StreamStateChanged( + *changedStream, *changedSource );; + EUNIT_ASSERT( iLcSessionObserver->IsReseted() ); + + // EBuffering, stream is buffering + changedStream->iState = CMceMediaStream::EBuffering; + static_cast(iLiveSession)->StreamStateChanged( + *changedStream, *changedSource ); + EUNIT_ASSERT( iLcSessionObserver->IsReseted() ); + + // EIdle, stream is not receiving RTP + changedStream->iState = CMceMediaStream::EIdle; + static_cast(iLiveSession)->StreamStateChanged( + *changedStream, *changedSource ); + EUNIT_ASSERT( iLcSessionObserver->IsReseted() ); + + // EStreaming, stream is streaming + changedStream->iState = CMceMediaStream::EStreaming; + static_cast(iLiveSession)->StreamStateChanged( + *changedStream, *changedSource ); + EUNIT_ASSERT_EQUALS( TInt( iLcSessionObserver->iCalledFunction ), + TInt( CLcSessionObserverStub::EPlayerStateChanged ) ) + iLcSessionObserver->Reset(); + + // EDisabled, stream is explicitly disabled + changedStream->iState = CMceMediaStream::EDisabled; + static_cast(iLiveSession)->StreamStateChanged( + *changedStream, *changedSource ); + EUNIT_ASSERT( iLcSessionObserver->IsReseted() ); + + // ENoResources, stream has no needed resources to stream + changedStream->iState = CMceMediaStream::ENoResources; + static_cast(iLiveSession)->StreamStateChanged( + *changedStream, *changedSource ); + EUNIT_ASSERT( iLcSessionObserver->IsReseted() ); + + // ETranscodingRequired, stream requires non-realtime transcoding + changedStream->iState = CMceMediaStream::ETranscodingRequired; + static_cast(iLiveSession)->StreamStateChanged( + *changedStream, *changedSource ); + EUNIT_ASSERT( iLcSessionObserver->IsReseted() ); + + // ETranscoding, stream is transcoding in non-realtime + changedStream->iState = CMceMediaStream::ETranscoding; + static_cast(iLiveSession)->StreamStateChanged( + *changedStream, *changedSource ); + EUNIT_ASSERT( iLcSessionObserver->IsReseted() ); + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_CMusEngTwoWaySession::UT_SetEncodingDeviceLL() + { + CMceAvcCodec* codec = CMceAvcCodec::NewLC( KMceSDPNameH264() ); + + // Generic error in CenRep, leave expected + CRepository::iForceFailWithCode = KErrNotReady; + EUNIT_ASSERT_LEAVE( iLiveSession->SetEncodingDeviceL( *codec ) ) + EUNIT_ASSERT_EQUALS( codec->iEncodingDecodingDevice, TUid::Uid( 0 ) ) + + // No entry in CenRep, default value expected + CRepository::iForceFailWithCode = KErrNotFound; + const TUid KDefaultEncodingDevice( TUid::Uid( 0x20001C13 ) ); + iLiveSession->SetEncodingDeviceL( *codec ); + EUNIT_ASSERT_EQUALS( codec->iEncodingDecodingDevice, + KDefaultEncodingDevice ) + + // Entry in CenRep + const TInt KSomeEncodingDevice( 0x20001C15 ); + CRepository::iStaticEncoderUid = KSomeEncodingDevice; + iLiveSession->SetEncodingDeviceL( *codec ); + EUNIT_ASSERT_EQUALS( codec->iEncodingDecodingDevice, + TUid::Uid( KSomeEncodingDevice ) ) + + CleanupStack::PopAndDestroy( codec ); + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_CMusEngTwoWaySession::UT_SetCodecConfigKeyLL() + { + CMceAvcCodec* codec = CMceAvcCodec::NewLC( KMceSDPNameH264() ); + codec->SetAllowedBitrates( KMceAvcBitrateLevel1b ); + + // Generic error in CenRep, leave expected + CRepository::iForceFailWithCode = KErrNotReady; + EUNIT_ASSERT_LEAVE( iLiveSession->SetCodecConfigKeyL( *codec ) ); + EUNIT_ASSERT( !codec->iConfigKey ) + EUNIT_ASSERT( !iLiveSession->iStoreEncoderConfigInfo ) + CRepository::iForceFailWithCode = KErrNone; + + // No entry in CenRep, nothing happens + iLiveSession->SetCodecConfigKeyL( *codec ); + EUNIT_ASSERT( !codec->iConfigKey ) + EUNIT_ASSERT( !iLiveSession->iStoreEncoderConfigInfo ) + + // Empty entry in CenRep + CRepository::SetStubAvcConfigKeysL( KNullDesC8() ); + iLiveSession->SetCodecConfigKeyL( *codec ); + EUNIT_ASSERT( !codec->iConfigKey ) + EUNIT_ASSERT( iLiveSession->iStoreEncoderConfigInfo ) + iLiveSession->iStoreEncoderConfigInfo = EFalse; // emulate original situation + + // Entry in CenRep + CRepository::SetStubAvcConfigKeysL( KMusAvcBitrateLevel_1b_ConfigKey ); + iLiveSession->SetCodecConfigKeyL( *codec ); + EUNIT_ASSERT( codec->iConfigKey ) + HBufC8* key = codec->ConfigKeyL(); + CleanupStack::PushL( key ); + EUNIT_ASSERT_EQUALS( *key, KMusAvcBitrateLevel1bTestText() ) + CleanupStack::PopAndDestroy( key ); + EUNIT_ASSERT( !iLiveSession->iStoreEncoderConfigInfo ) + + CleanupStack::PopAndDestroy( codec ); + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_CMusEngTwoWaySession::UT_ReadCodecConfigKeyLL() + { + HBufC8* key( NULL ); + + // Try with H263, leave expected + CMceVideoCodec* codecH263 = CMceH263Codec::NewLC( KMceSDPNameH263() ); + EUNIT_ASSERT_LEAVE( key = iLiveSession->ReadCodecConfigKeyL( *codecH263 ) ) + CleanupStack::PopAndDestroy( codecH263 ); + + // Try without an entry in CenRep, leave expected + CMceVideoCodec* codec = CMceAvcCodec::NewLC( KMceSDPNameH264() ); + codec->SetAllowedBitrates( 0 | KMceAvcBitrateLevel1 ); + EUNIT_ASSERT_LEAVE( key = iLiveSession->ReadCodecConfigKeyL( *codec ) ) + + // Create CenRep entry which does not include wanted bitrate, NULL value + // expected + CRepository::SetStubAvcConfigKeysL( KMusAvcBitrateLevel1bTestText() ); + key = iLiveSession->ReadCodecConfigKeyL( *codec ); + EUNIT_ASSERT( !key ) + + // Create entry with all AVC keys and try with all the values + CRepository::SetStubAvcConfigKeysL( KMusAvcAllLevelsConcatenation() ); + + // KMceAvcBitrateLevel1 + key = iLiveSession->ReadCodecConfigKeyL( *codec ); + EUNIT_ASSERT( key ); + CleanupStack::PushL( key ); + EUNIT_ASSERT_EQUALS( *key, KMusAvcBitrateLevel1TestText ); + CleanupStack::PopAndDestroy( key ); + + // KMceAvcBitrateLevel1b + codec->SetAllowedBitrates( KMceAvcBitrateLevel1b ); + key = iLiveSession->ReadCodecConfigKeyL( *codec ); + EUNIT_ASSERT( key ); + CleanupStack::PushL( key ); + EUNIT_ASSERT_EQUALS( *key, KMusAvcBitrateLevel1bTestText ); + CleanupStack::PopAndDestroy( key ); + + // KMceAvcBitrateLevel1_1 + codec->SetAllowedBitrates( KMceAvcBitrateLevel1_1 ); + key = iLiveSession->ReadCodecConfigKeyL( *codec ); + EUNIT_ASSERT( key ); + CleanupStack::PushL( key ); + EUNIT_ASSERT_EQUALS( *key, KMusAvcBitrateLevel1_1TestText ); + CleanupStack::PopAndDestroy( key ); + + // KMceAvcBitrateLevel1_2 + codec->SetAllowedBitrates( KMceAvcBitrateLevel1_2 ); + key = iLiveSession->ReadCodecConfigKeyL( *codec ); + EUNIT_ASSERT( key ); + CleanupStack::PushL( key ); + EUNIT_ASSERT_EQUALS( *key, KMusAvcBitrateLevel1_2TestText ); + CleanupStack::PopAndDestroy( key ); + + // KMceAvcBitrateLevel1_3 + codec->SetAllowedBitrates( KMceAvcBitrateLevel1_3 ); + key = iLiveSession->ReadCodecConfigKeyL( *codec ); + EUNIT_ASSERT( key ); + CleanupStack::PushL( key ); + EUNIT_ASSERT_EQUALS( *key, KMusAvcBitrateLevel1_3TestText ); + CleanupStack::PopAndDestroy( key ); + + // KMceAvcBitrateLevel2 + codec->SetAllowedBitrates( KMceAvcBitrateLevel2 ); + key = iLiveSession->ReadCodecConfigKeyL( *codec ); + EUNIT_ASSERT( key ); + CleanupStack::PushL( key ); + EUNIT_ASSERT_EQUALS( *key, KMusAvcBitrateLevel2TestText ); + CleanupStack::PopAndDestroy( key ); + + CleanupStack::PopAndDestroy( codec ); + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_CMusEngTwoWaySession::UT_StoreEncoderConfigInfoLL() + { + CRepository::iStaticWriteAvcKeysToStaticData = ETrue; + + // Try with clean CenRep + MultimediaSharingSettings::SetEncoderConfigInfoL( KNullDesC8() ); + + ESTABLISH_OUT_SESSION( iLiveSession ) // calls StoreEncoderConfigInfoL + // If StoreEncoderConfigInfoL leaves with KErrNoMemory, + // MMusEngSessionObserver::SessionFailed will be called. + if ( iLcSessionObserver->iCalledFunction == CLcSessionObserverStub::ESessionFailed ) + { + User::Leave( KErrNoMemory ); + } + + HBufC8* keys = MultimediaSharingSettings::EncoderConfigInfoLC(); + EUNIT_ASSERT_EQUALS( *keys, KMusAvcBitrateLevel_1b_ConfigKey() ) + CleanupStack::PopAndDestroy( keys ); + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_CMusEngTwoWaySession::UT_RemoteVideoPlayerL() + { + EUNIT_ASSERT( iLiveSession->RemoteVideoPlayer() == + iLiveSession->iRemoteVideoPlayer ) + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_CMusEngTwoWaySession::UT_InactivityTimeoutL() + { + // Not receiving, no effect + iLiveSession->iReceiving = EFalse; + CMceVideoStream* videoStream = CMceVideoStream::NewLC(); + CMceRtpSource* rtpSource = CMceRtpSource::NewLC(); + iLiveSession->InactivityTimeout( *videoStream, *rtpSource ); + EUNIT_ASSERT( iLcSessionObserver->IsReseted() ); + + // Receiving, state change is notified and + // receiving and buffering status are cleared + iLiveSession->iBuffered = ETrue; + iLiveSession->iReceiving = ETrue; + iLiveSession->InactivityTimeout( *videoStream, *rtpSource ); + EUNIT_ASSERT_EQUALS( iLcSessionObserver->iCalledFunction, + CLcSessionObserverStub::EPlayerStateChanged ); + EUNIT_ASSERT( !iLiveSession->iReceiving ); + EUNIT_ASSERT( !iLiveSession->iBuffered ); + CleanupStack::PopAndDestroy( rtpSource ); + CleanupStack::PopAndDestroy( videoStream ); + } + + +// TEST TABLE + +EUNIT_BEGIN_TEST_TABLE( + UT_CMusEngTwoWaySession, + "UT_CMusEngTwoWaySession", + "UNIT" ) + +EUNIT_TEST( + "NewL - test ", + "CMusEngTwoWaySession", + "NewL", + "FUNCTIONALITY", + SetupL, UT_NewLL, Teardown) + +EUNIT_TEST( + "EstablishLcSessionL - test ", + "CMusEngTwoWaySession", + "EstablishLcSessionL", + "FUNCTIONALITY", + SetupL, UT_EstablishLcSessionLL, Teardown) + +EUNIT_TEST( + "EnableDisplayL - test ", + "CMusEngTwoWaySession", + "EnableDisplayL", + "FUNCTIONALITY", + SetupL, UT_EnableDisplayLL, Teardown) + +EUNIT_TEST( + "SetOrientationL - test ", + "CMusEngTwoWaySession", + "SetOrientationL", + "FUNCTIONALITY", + SetupL, UT_SetOrientationLL, Teardown) + +EUNIT_TEST( + "SetLocalRectL - test ", + "CMusEngTwoWaySession", + "SetLocalRectL", + "FUNCTIONALITY", + SetupL, UT_SetLocalRectLL, Teardown) + +EUNIT_TEST( + "SetRectsL - test ", + "CMusEngTwoWaySession", + "SetRectsL", + "FUNCTIONALITY", + SetupL, UT_SetRectsLL, Teardown) + +EUNIT_TEST( + "CompleteSessionStructureL - test ", + "CMusEngTwoWaySession", + "CompleteSessionStructureL", + "FUNCTIONALITY", + SetupL, UT_CompleteSessionStructureLL, Teardown) + +EUNIT_TEST( + "HandleSessionStateChanged - test ", + "CMusEngTwoWaySession", + "HandleSessionStateChanged", + "FUNCTIONALITY", + SetupL, UT_HandleSessionStateChangedL, Teardown) + +EUNIT_TEST( + "AdjustVideoCodecL - test ", + "CMusEngTwoWaySession", + "AdjustVideoCodecL", + "FUNCTIONALITY", + SetupL, UT_AdjustVideoCodecLL, Teardown) + +EUNIT_TEST( + "AdjustAudioCodecL - test ", + "CMusEngTwoWaySession", + "AdjustAudioCodecL", + "FUNCTIONALITY", + SetupL, UT_AdjustAudioCodecLL, Teardown) + +EUNIT_TEST( + "DoCodecSelectionL- test ", + "CMusEngTwoWaySession", + "DoCodecSelectionL", + "FUNCTIONALITY", + SetupL, UT_DoCodecSelectionLL, Teardown) + +EUNIT_TEST( + "StreamStateChangedL() - test ", + "CMusEngTwoWaySession", + "StreamStateChangedL()", + "FUNCTIONALITY", + SetupL, UT_StreamStateChangedL, Teardown) + +EUNIT_TEST( + "StreamStateChangedL( src ) - test ", + "CMusEngTwoWaySession", + "StreamStateChangedL( src )", + "FUNCTIONALITY", + SetupL, UT_StreamStateChangedWithSourceL, Teardown) + +EUNIT_TEST( + "SetEncodingDeviceL - test ", + "CMusEngTwoWaySession", + "SetEncodingDeviceL", + "FUNCTIONALITY", + SetupL, UT_SetEncodingDeviceLL, Teardown) + +EUNIT_TEST( + "SetCodecConfigKeyL - test ", + "CMusEngTwoWaySession", + "SetCodecConfigKeyL", + "FUNCTIONALITY", + SetupL, UT_SetCodecConfigKeyLL, Teardown) + +EUNIT_TEST( + "ReadCodecConfigKeyL - test ", + "CMusEngTwoWaySession", + "ReadCodecConfigKeyL", + "FUNCTIONALITY", + SetupL, UT_ReadCodecConfigKeyLL, Teardown) + +EUNIT_TEST( + "StoreEncoderConfigInfoL - test ", + "CMusEngTwoWaySession", + "StoreEncoderConfigInfoL", + "FUNCTIONALITY", + SetupL, UT_StoreEncoderConfigInfoLL, Teardown) + +EUNIT_TEST( + "RemoteVideoPlayer - test ", + "CMusEngTwoWaySession", + "RemoteVideoPlayer", + "FUNCTIONALITY", + SetupL, UT_RemoteVideoPlayerL, Teardown) + +EUNIT_TEST( + "EnableLcFileL - test ", + "CMusEngTwoWaySession", + "EnableLcFileL", + "FUNCTIONALITY", + SetupL, UT_EnableLcFileL, Teardown) + +EUNIT_TEST( + "InactivityTimeout - test ", + "CMusEngTwoWaySession", + "InactivityTimeout", + "FUNCTIONALITY", + SetupL, UT_InactivityTimeoutL, Teardown) + +EUNIT_END_TEST_TABLE + +// END OF FILE + + diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshengine/tsrc/ut_engine/src/ut_musenguriparser.cpp --- a/mmsharing/mmshengine/tsrc/ut_engine/src/ut_musenguriparser.cpp Thu Aug 19 09:51:39 2010 +0300 +++ b/mmsharing/mmshengine/tsrc/ut_engine/src/ut_musenguriparser.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -25,7 +25,7 @@ // SYSTEM INCLUDES #include - +#include // ----------------------------------------------------------------------------- @@ -101,7 +101,9 @@ // void UT_TMusEngUriParser::Teardown() { - + MultimediaSharingSettings::SetOperatorVariantSettingL( + MusSettingsKeys::EStandard ); + PropertyHelper::Close(); } @@ -245,7 +247,7 @@ parser.iUri = KTestRecipientRandomText8(); TRAPD( error, parser.ParseUriL() ); MUS_TEST_FORWARD_ALLOC_FAILURE( error ); - EUNIT_ASSERT_EQUALS( error, KErrCorrupt ); + EUNIT_ASSERT_EQUALS( error, KErrArgument ); // Unsuccessful case, tel prefix and at sign present parser.iUri = KTestRecipientTelUriWithAtSign8(); diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshengine/tsrc/ut_engine/src/ut_muspropertywatch.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/mmshengine/tsrc/ut_engine/src/ut_muspropertywatch.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,268 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + + +// INTERNAL INCLUDES +#include "ut_muspropertywatch.h" +#include "muspropertywatch.h" + +#include "mussessionproperties.h" + +// SYSTEM INCLUDES +#include +#include + +using namespace NMusSessionApi; + +const TInt KMusUiTestKey = 1100; +const TInt KMusUiTestPropertyReadInteger = 200; +_LIT( KMusUiTestPropertyReadDesc, "testread" ); +TUid KMusUiDummyUid = { 1000 }; // Unit testing dummy + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +UT_CMusPropertyWatch* UT_CMusPropertyWatch::NewL() + { + UT_CMusPropertyWatch* self = UT_CMusPropertyWatch::NewLC(); + CleanupStack::Pop( self ); + return self; + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +UT_CMusPropertyWatch* UT_CMusPropertyWatch::NewLC() + { + UT_CMusPropertyWatch* self = new( ELeave ) UT_CMusPropertyWatch(); + CleanupStack::PushL( self ); + self->ConstructL(); + return self; + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +UT_CMusPropertyWatch::~UT_CMusPropertyWatch() + { + // NOP + } + + +// ----------------------------------------------------------------------------- +// Default constructor +// ----------------------------------------------------------------------------- +// +UT_CMusPropertyWatch::UT_CMusPropertyWatch() + { + // NOP + } + + +// ----------------------------------------------------------------------------- +// Second phase construct +// ----------------------------------------------------------------------------- +// +void UT_CMusPropertyWatch::ConstructL() + { + // The ConstructL from the base class CEUnitTestSuiteClass must be called. + // It generates the test case table. + CEUnitTestSuiteClass::ConstructL(); + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_CMusPropertyWatch::SetupL() + { + PropertyHelper::SetErrorCode( KErrNone ); + RProperty::Set( KMusUiDummyUid, KMusUiTestKey, KMusUiTestPropertyReadInteger ); + iPropertyWatch = CMusPropertyWatch::NewL( iPropertyObserver, + KMusUiDummyUid, + KMusUiTestKey ); + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_CMusPropertyWatch::Teardown() + { + delete iPropertyWatch; + PropertyHelper::Close(); + } + + + +// TEST CASES + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_CMusPropertyWatch::UT_CMusPropertyWatch_ReadIntPropertyLL() + { + + // Teesting leave + PropertyHelper::SetErrorCode( KErrNotFound ); + RProperty::Set( KMusUiDummyUid, KMusUiTestKey, KMusUiTestPropertyReadInteger ); + TInt value; + TRAPD( err, value = CMusPropertyWatch::ReadIntPropertyL( KMusUiTestKey ) ); + EUNIT_ASSERT( err == KErrNotFound ); + + // Testing return value + PropertyHelper::SetErrorCode( KErrNone ); + RProperty::Set( KMusUiDummyUid, KMusUiTestKey, KMusUiTestPropertyReadInteger ); + EUNIT_ASSERT( CMusPropertyWatch::ReadIntPropertyL( KMusUiTestKey ) == + KMusUiTestPropertyReadInteger ); + + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_CMusPropertyWatch::UT_CMusPropertyWatch_ReadDescPropertyLL() + { + // Teesting leave + PropertyHelper::SetErrorCode( KErrNotFound ); + TRAPD( err, CMusPropertyWatch::ReadDescPropertyL( KMusUiTestKey ) ); + EUNIT_ASSERT( err == KErrNotFound ); + + // Testing return value + RProperty::Set( KMusUiDummyUid, KMusUiTestKey, KMusUiTestPropertyReadDesc ); + PropertyHelper::SetErrorCode( KErrNone ); + HBufC* result = CMusPropertyWatch::ReadDescPropertyL( KMusUiTestKey ); + CleanupStack::PushL( result ); + EUNIT_ASSERT( KMusUiTestPropertyReadDesc().Compare( result->Des() ) == 0 ); + CleanupStack::PopAndDestroy( result ); + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_CMusPropertyWatch::UT_CMusPropertyWatch_DoCancelL() + { + PropertyHelper::SetErrorCode( KErrNone ); + iPropertyWatch->Cancel(); + EUNIT_ASSERT( PropertyHelper::GetCalledFunction() == RProperty::ECancel ); + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_CMusPropertyWatch::UT_CMusPropertyWatch_RunLL() + { + + // Leave test + PropertyHelper::SetErrorCode( KErrNotFound ); + iPropertyWatch->Cancel(); + TRAPD( err, iPropertyWatch->RunL() ); + EUNIT_ASSERT( err == KErrNotFound ); + + + // SessionPropertyChanged + PropertyHelper::SetErrorCode( KErrNone ); + iPropertyWatch->Cancel(); + iPropertyWatch->RunL(); + EUNIT_ASSERT( iPropertyObserver.iCalledFunction == + TMusPropertyObserverStub::EPropertyChanged ); + + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_CMusPropertyWatch::UT_CMusPropertyWatch_RunErrorL() + { + + // Allways returns KErrNone + PropertyHelper::SetErrorCode( KErrNone ); + EUNIT_ASSERT( iPropertyWatch->RunError( KErrNotFound ) == KErrNone ); + + // is right observer called + PropertyHelper::SetErrorCode( KErrNone ); + EUNIT_ASSERT( iPropertyObserver.iCalledFunction == + TMusPropertyObserverStub::EHandlePropertyError ); + } + + + +// TEST TABLE + +EUNIT_BEGIN_TEST_TABLE( + UT_CMusPropertyWatch, + "UT_CMusPropertyWatch", + "UNIT" ) + +EUNIT_TEST( + "ReadIntPropertyLL - test ", + "CMusPropertyWatch", + "ReadIntPropertyLL", + "FUNCTIONALITY", + SetupL, UT_CMusPropertyWatch_ReadIntPropertyLL, Teardown) + +EUNIT_TEST( + "ReadDescPropertyLL - test ", + "CMusPropertyWatch", + "ReadDescPropertyLL", + "FUNCTIONALITY", + SetupL, UT_CMusPropertyWatch_ReadDescPropertyLL, Teardown) + +EUNIT_TEST( + "DoCancelL - test ", + "CMusPropertyWatch", + "DoCancelL", + "FUNCTIONALITY", + SetupL, UT_CMusPropertyWatch_DoCancelL, Teardown) + +EUNIT_TEST( + "RunLL - test ", + "CMusPropertyWatch", + "RunLL", + "FUNCTIONALITY", + SetupL, UT_CMusPropertyWatch_RunLL, Teardown) + +EUNIT_TEST( + "RunErrorL - test ", + "CMusPropertyWatch", + "RunErrorL", + "FUNCTIONALITY", + SetupL, UT_CMusPropertyWatch_RunErrorL, Teardown) + + +EUNIT_END_TEST_TABLE + + +// END OF FILE + + diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshindicator/bwins/musindicatoru.def --- a/mmsharing/mmshindicator/bwins/musindicatoru.def Thu Aug 19 09:51:39 2010 +0300 +++ b/mmsharing/mmshindicator/bwins/musindicatoru.def Tue Aug 31 15:12:07 2010 +0300 @@ -1,6 +1,7 @@ EXPORTS - ?NewL@CMusIndicatorApi@@SAPAV1@AAVMMusIndicatorObserver@@@Z @ 1 NONAME ; class CMusIndicatorApi * CMusIndicatorApi::NewL(class MMusIndicatorObserver &) - ?NewL@CMusIndicatorApi@@SAPAV1@XZ @ 2 NONAME ; class CMusIndicatorApi * CMusIndicatorApi::NewL(void) - ?NewLC@CMusIndicatorApi@@SAPAV1@AAVMMusIndicatorObserver@@@Z @ 3 NONAME ; class CMusIndicatorApi * CMusIndicatorApi::NewLC(class MMusIndicatorObserver &) - ?IndicateAvailabilityL@CMusIndicatorApi@@QAEXXZ @ 4 NONAME ; void CMusIndicatorApi::IndicateAvailabilityL(void) + ?ConfirmationQueryL@CMusIndicatorApi@@SAHW4TVsPopupQuery@1@@Z @ 1 NONAME ; int CMusIndicatorApi::ConfirmationQueryL(enum CMusIndicatorApi::TVsPopupQuery) + ?IndicateAvailabilityL@CMusIndicatorApi@@QAEXXZ @ 2 NONAME ; void CMusIndicatorApi::IndicateAvailabilityL(void) + ?NewL@CMusIndicatorApi@@SAPAV1@AAVMMusIndicatorObserver@@@Z @ 3 NONAME ; class CMusIndicatorApi * CMusIndicatorApi::NewL(class MMusIndicatorObserver &) + ?NewLC@CMusIndicatorApi@@SAPAV1@AAVMMusIndicatorObserver@@@Z @ 4 NONAME ; class CMusIndicatorApi * CMusIndicatorApi::NewLC(class MMusIndicatorObserver &) + ?NewL@CMusIndicatorApi@@SAPAV1@XZ @ 5 NONAME ; class CMusIndicatorApi * CMusIndicatorApi::NewL(void) diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshindicator/eabi/musindicatoru.def --- a/mmsharing/mmshindicator/eabi/musindicatoru.def Thu Aug 19 09:51:39 2010 +0300 +++ b/mmsharing/mmshindicator/eabi/musindicatoru.def Tue Aug 31 15:12:07 2010 +0300 @@ -1,10 +1,13 @@ EXPORTS - _ZN16CMusIndicatorApi21IndicateAvailabilityLEv @ 1 NONAME - _ZN16CMusIndicatorApi4NewLER21MMusIndicatorObserver @ 2 NONAME - _ZN16CMusIndicatorApi4NewLEv @ 3 NONAME + _ZN16CMusIndicatorApi18ConfirmationQueryLENS_13TVsPopupQueryE @ 1 NONAME + _ZN16CMusIndicatorApi21IndicateAvailabilityLEv @ 2 NONAME + _ZN16CMusIndicatorApi4NewLER21MMusIndicatorObserver @ 3 NONAME _ZN16CMusIndicatorApi5NewLCER21MMusIndicatorObserver @ 4 NONAME - _ZTI15CMusSoundPlayer @ 5 NONAME - _ZTI16CMusIndicatorApi @ 6 NONAME - _ZTV15CMusSoundPlayer @ 7 NONAME - _ZTV16CMusIndicatorApi @ 8 NONAME + _ZTI15CMusSoundPlayer @ 5 NONAME ; ## + _ZTI16CMusIndicatorApi @ 6 NONAME ; ## + _ZTI16CMusIndicatorDsa @ 7 NONAME ; ## + _ZTV15CMusSoundPlayer @ 8 NONAME ; ## + _ZTV16CMusIndicatorApi @ 9 NONAME ; ## + _ZTV16CMusIndicatorDsa @ 10 NONAME ; ## + _ZN16CMusIndicatorApi4NewLEv @ 11 NONAME diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshindicator/group/musindicator.mmp --- a/mmsharing/mmshindicator/group/musindicator.mmp Thu Aug 19 09:51:39 2010 +0300 +++ b/mmsharing/mmshindicator/group/musindicator.mmp Tue Aug 31 15:12:07 2010 +0300 @@ -38,6 +38,7 @@ SOURCEPATH ../src SOURCE musindicatorapi.cpp SOURCE mussoundplayer.cpp +SOURCE musindicatordsa.cpp SOURCE musresourceutil.cpp USERINCLUDE ../inc diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshindicator/inc/musindicatordsa.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/mmshindicator/inc/musindicatordsa.h Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,186 @@ +/* +* Copyright (c) 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: Draws availability indication to screen using direct screen +* access. +* +*/ + + + +#ifndef C_MUSINDICATORDSA_H +#define C_MUSINDICATORDSA_H + + +#include "musunittesting.h" +#include +#include +#include + +const TInt KMusIndicatorDelay = 400000; +const TInt KMusRedrawDelay = 25000; + +/** + * CMusIndicatorDsa provides multimedia sharing ready indicator "box" + * indcating videosharing availability to user. + * + * @code + * // Activates indication + * CMusIndicatorDsa* dsa = CMusIndicatorDsa::NewL(); + * + * // Deactivates indication + * delete dsa; + * + * @endcode + * + * @lib musindicator.lib + */ +class CMusIndicatorDsa : public CCoeControl + { +public: + + MUS_UNITTEST( UT_CMusIndicatorDsa ) + + static CMusIndicatorDsa* NewL(); + + /** + * Destructor. + */ + ~CMusIndicatorDsa(); + + +public: //from CCoeControl + + + /** + * Draws video sharing ready box and text + */ + void Draw( const TRect& aRect ) const; + + /** + * Hanldes resource change i.e layout change + * + */ + void HandleResourceChange( TInt aType); + +private: + + /** + * Initializes + */ + void Initialize(); + + /** + * Loads image. + */ + void LoadImageL(); + + /** + * Loads resource string. + */ + void LoadResourceStringL(); + + +private: + + CMusIndicatorDsa(); + + void ConstructL(); + + const CFont& Font() const; + + void TryActivateL(); + + + /** + * Callback function to periodic timer. + * + * @param instanse of this. + * @return TInt value indicating if function completed succesfully + */ + static TInt TryActivate( TAny* aThis ); + + /** + * Callback function to periodic timer. + * + * @param instanse of this. + * @return TInt value indicating if function completed succesfully + */ + static TInt DoHandleResourceChange( TAny* aThis ); + + void StartPeriodicTimer( const TCallBack& aCallBack) const; + + /** + * Stops peridoic timer. + */ + void StopPeriodicTimer(); + + +private: // data + + + /** + * Periodic timer. + * Own. + */ + CPeriodic* iPeriodic; + + /** + * Used screen rectangle. + */ + TRect iScreenRect; + + /** + * Used client area size + */ + TSize iScreenSize; + + /** + * Calculated position of left-top point of text. + */ + TPoint iTextpos; + + /** + * Color of DSA boxes border. + */ + TRgb iBorderColor; + + /** + * DSA boxes background color. + */ + TRgb iBorderBgColor; + + /** + * Color of used font. + */ + TRgb iFontColor; + + /** + * Displayed text. + * Own. + */ + HBufC* iText; + + CFbsBitmap* iIcon; + CFbsBitmap* iIconMask; + + TSize iImageSize; + TPoint iImagepos; + + TCallBack iActivateCallBack; + TCallBack iRedrawCallBack; + + + }; + +#endif // C_MUSINDICATORDSA_H diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshindicator/src/musindicatorapi.cpp --- a/mmsharing/mmshindicator/src/musindicatorapi.cpp Thu Aug 19 09:51:39 2010 +0300 +++ b/mmsharing/mmshindicator/src/musindicatorapi.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -21,20 +21,25 @@ #include "musindicatorapi.h" #include "musresourcefinderutil.h" #include "muslogger.h" +#include "musindicatordsa.h" #include "mussettings.h" #include "mussettingskeys.h" #include "mussoundplayer.h" #include "musresourceutil.h" #include +#include +#include #include +const TInt KMusLiveSharingQueryTimeout = 5000000; + + // ======== MEMBER FUNCTIONS ======== -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// +using namespace MusSettingsKeys; + + EXPORT_C CMusIndicatorApi* CMusIndicatorApi::NewL( MMusIndicatorObserver& aObserver ) { CMusIndicatorApi* self = CMusIndicatorApi::NewLC( aObserver ); @@ -43,10 +48,6 @@ } -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// EXPORT_C CMusIndicatorApi* CMusIndicatorApi::NewLC( MMusIndicatorObserver& aObserver ) { CMusIndicatorApi* self = new (ELeave) CMusIndicatorApi( &aObserver ); @@ -55,11 +56,6 @@ return self; } - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// EXPORT_C CMusIndicatorApi* CMusIndicatorApi::NewL() { CMusIndicatorApi* self = new (ELeave) CMusIndicatorApi( NULL ); @@ -70,19 +66,19 @@ } -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// CMusIndicatorApi::~CMusIndicatorApi() { MUS_LOG( "mus: [MUSIND ] -> MusIndicatorApi::~CMusIndicatorApi" ); Cancel(); + delete iQuery; + delete iIndicatorWindow; delete iSoundPlayer; - - Indicator( EFalse ); - + delete iLiveSharingQueryTimeout; + if ( !IsSubscriber() ) + { + Indicator( EFalse ); + } iProperty.Close(); @@ -90,21 +86,58 @@ } -// ----------------------------------------------------------------------------- +TBool CMusIndicatorApi::IsSubscriber() const + { + return !iObserver; + } + + + +// --------------------------------------------------------------------------- +// Provides a confirmation query to user and returns true if user selected +// "yes". +// --------------------------------------------------------------------------- +// +EXPORT_C TBool CMusIndicatorApi::ConfirmationQueryL( TVsPopupQuery aQuery ) + { + MUS_LOG( "mus: [MUSIND ] -> MusIndicatorApi::ConfirmationQueryL" ); + + CAknGlobalConfirmationQuery* dlg = CAknGlobalConfirmationQuery::NewLC(); + TRequestStatus status( KRequestPending ); + HBufC* prompt = NoteTextLC( aQuery ); + dlg->ShowConfirmationQueryL( status, *prompt, R_AVKON_SOFTKEYS_YES_NO ); + User::WaitForRequest( status ); + CleanupStack::PopAndDestroy( prompt ); + CleanupStack::PopAndDestroy( dlg ); + MUS_LOG( "mus: [MUSIND ] <- MusIndicatorApi::ConfirmationQueryL" ); + return status == EAknSoftkeyYes; + } + +// --------------------------------------------------------------------------- // Indicates VS availability to user. -// In operator specific variant this can include DSA note and an audio tone -// played with CMdaAudioPlayerUtility. -// ----------------------------------------------------------------------------- +// In operator specific variant this can include a popup-note, DSA note and +// an audio tone played with CMdaAudioPlayerUtility. +// --------------------------------------------------------------------------- // EXPORT_C void CMusIndicatorApi::IndicateAvailabilityL() { MUS_LOG( "mus: [MUSIND] -> CMusIndicatorApi::IndicateAvailabilityL" ) + __ASSERT_ALWAYS( !IsSubscriber(), User::Leave( KErrArgument ) ); + Indicator( ETrue ); + if( MultimediaSharingSettings::PopupNotificationSettingL() == + EPopupNotificationOn ) + { + // Show dialog + MUS_LOG( "mus: [MUSIND] CMusIndicatorApi::IndicateAvailabilityL - Show popup" ) + ShowLiveSharingQueryL( EFalse ); + } + if( MultimediaSharingSettings::AuditoryNotificationSettingL() == - MusSettingsKeys::EAuditoryNotificationOn ) + EAuditoryNotificationOn ) { - MUS_LOG( "mus: [MUSIND] Play tone" ) + MUS_LOG( "mus: [MUSIND] CMusIndicatorApi::IndicateAvailabilityL - Play tone" ) PlayToneL(); } @@ -112,31 +145,46 @@ } -// ----------------------------------------------------------------------------- +// --------------------------------------------------------------------------- // From CActive. // Handles completion of an outstanding asynchronous request. -// ----------------------------------------------------------------------------- +// --------------------------------------------------------------------------- // void CMusIndicatorApi::RunL() { MUS_LOG( "mus: [MUSIND] <- CMusIndicatorApi::RunL" ) - - MUS_LOG( "mus: [MUSIND ] : publisher" ) - StartLiveSharingL(); - + if ( !IsSubscriber() ) + { + MUS_LOG( "mus: [MUSIND ] : publisher" ) + StartLiveSharingL(); + } + else + { + MUS_LOG( "mus: [MUSIND ] : subscriber" ) + ToggleIndicatorL(); + } MUS_LOG( "mus: [MUSIND] -> CMusIndicatorApi::RunL" ) } -// ----------------------------------------------------------------------------- +// --------------------------------------------------------------------------- // -// ----------------------------------------------------------------------------- +// --------------------------------------------------------------------------- // void CMusIndicatorApi::StartLiveSharingL() { MUS_LOG( "mus: [MUSIND] -> CMusIndicatorApi::StartLiveSharingL" ) + delete iQuery; + iQuery = NULL; + + if( iLiveSharingQueryTimeout ) + { + iLiveSharingQueryTimeout->Cancel(); + } + delete iLiveSharingQueryTimeout; + iLiveSharingQueryTimeout = NULL; if( iStatus.Int() != KErrNotFound ) // eq. Cancel -button { @@ -150,24 +198,80 @@ } -// ----------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void CMusIndicatorApi::ToggleIndicatorL() + { + MUS_LOG( "mus: [MUSIND] -> CMusIndicatorApi::ToggleIndicatorL" ) + TInt val; + + + + User::LeaveIfError( RProperty::Get( KPSUidCoreApplicationUIs, + KCoreAppUIsVideoSharingIndicator, + val ) ); + iProperty.Subscribe( iStatus ); + SetActive(); + + TBool on = ( val == ECoreAppUIsVideoSharingIndicatorOn ); + + if ( on && !iIndicatorWindow + && MultimediaSharingSettings::OperatorVariantSettingL() == + EOperatorSpecific ) + { + iIndicatorWindow = CMusIndicatorDsa::NewL(); + } + else if ( !on ) + { + delete iIndicatorWindow; + iIndicatorWindow = NULL; + } + else + { + //NOP + } + + MUS_LOG( "mus: [MUSIND] <- CMusIndicatorApi::ToggleIndicatorL" ) + } + + +// --------------------------------------------------------------------------- // From CActive. // Cancels an outstanding asynchronous request. -// ----------------------------------------------------------------------------- +// --------------------------------------------------------------------------- // void CMusIndicatorApi::DoCancel() { MUS_LOG( "mus: [MUSIND] <- CMusIndicatorApi::DoCancel" ) + + if( iLiveSharingQueryTimeout ) + { + iLiveSharingQueryTimeout->Cancel(); + } + delete iLiveSharingQueryTimeout; + iLiveSharingQueryTimeout = NULL; + + if ( iQuery ) + { + iQuery->CancelMsgQuery(); + } + delete iQuery; + iQuery = NULL; - + if ( IsSubscriber() ) + { + iProperty.Cancel(); + } MUS_LOG( "mus: [MUSIND] -> CMusIndicatorApi::DoCancel" ) } -// ----------------------------------------------------------------------------- +// --------------------------------------------------------------------------- // From CActive. // Handles a leave occurring in the request completion event handler RunL. -// ----------------------------------------------------------------------------- +// --------------------------------------------------------------------------- // #ifdef _DEBUG TInt CMusIndicatorApi::RunError( TInt aError ) @@ -219,10 +323,21 @@ { MUS_LOG( "mus: [MUSIND ] -> MusIndicatorApi::ConstructL" ) - - MUS_LOG( "mus: [MUSIND ] : publisher (called by manager)" ) - CActiveScheduler::Add( this ); + if ( IsSubscriber() ) + { + MUS_LOG( "mus: [MUSIND ] : subscriber (called by aiwprovider)" ) + User::LeaveIfError( iProperty.Attach( KPSUidCoreApplicationUIs, + KCoreAppUIsVideoSharingIndicator ) ); + CActiveScheduler::Add( this ); + iProperty.Subscribe( iStatus ); + SetActive(); + } + else + { + MUS_LOG( "mus: [MUSIND ] : publisher (called by manager)" ) + CActiveScheduler::Add( this ); + } MUS_LOG( "mus: [MUSIND ] <- MusIndicatorApi::ConstructL" ) } @@ -274,3 +389,107 @@ } +// --------------------------------------------------------------------------- +// Returns text associated with specified dialog. +// --------------------------------------------------------------------------- +// +HBufC* CMusIndicatorApi::NoteTextLC( TVsPopupQuery aQuery ) + { + MUS_LOG1( "mus: [MUSIND] -> MusIndicatorApi::NoteTextLC( %d )", aQuery ) + + HBufC* dlgPrompt( NULL ); + + switch ( aQuery ) + { + case EVsRoamingActivationQuery: + { + dlgPrompt = MusResourceUtil::ReadResourceString16LC( + R_MUSINDICATOR_MANUAL_ACTIVATION_TXT, + KMusIndicatorResource ); + break; + } + + default: + { + MUS_LOG( "mus: [MUSIND] MusIndicatorApi::NoteTextLC, UNKNOWN" ) + User::Leave( KErrNotFound ); + } + } + // now pop and destroy the resource reader + + MUS_LOG( "mus: [MUSIND] <- MusIndicatorApi::NoteTextLC" ) + + return dlgPrompt; + } + + +// ----------------------------------------------------------------------------- +// Reads resource string +// ----------------------------------------------------------------------------- +// +void CMusIndicatorApi::ShowLiveSharingQueryL( TBool aPlayTone ) + { + MUS_LOG( "mus: [MUSIND] -> CMusIndicatorApi::ShowLiveSharingQuery" ) + Cancel(); + + delete iQuery; + iQuery = NULL; + + HBufC* dlgPrompt = MusResourceUtil::ReadResourceString16LC( + R_MUSINDICATOR_NOTE_CAPABILITY_TXT, + KMusIndicatorResource ); + + HBufC* dlgHeader = MusResourceUtil::ReadResourceString16LC( + R_MUSINDICATOR_NOTE_VSREADY_TXT, + KMusIndicatorResource ); + + iQuery = CAknGlobalMsgQuery::NewL(); + TRAPD( error, + iQuery->ShowMsgQueryL( + iStatus, + *dlgPrompt, + R_AVKON_SOFTKEYS_OK_CANCEL, + *dlgHeader, + KNullDesC, + 0, // default image id + -1, // default image mask id + ( aPlayTone ? + CAknQueryDialog::EConfirmationTone : + CAknQueryDialog::ENoTone ) ) ); + + CleanupStack::PopAndDestroy( dlgHeader ); + CleanupStack::PopAndDestroy( dlgPrompt ); + + if ( !error ) + { + SetActive(); + + delete iLiveSharingQueryTimeout; + iLiveSharingQueryTimeout = NULL; + iLiveSharingQueryTimeout = + CPeriodic::NewL( CActive::EPriorityStandard ); + + iLiveSharingQueryTimeout->Start( + KMusLiveSharingQueryTimeout, + KMusLiveSharingQueryTimeout, + TCallBack( LiveSharingQueryTimeout, this ) ); + + } + else + { + delete iQuery; + iQuery = NULL; + } + + MUS_LOG( "mus: [MUSIND] <- CMusIndicatorApi::ShowLiveSharingQuery" ) + } + + + +TInt CMusIndicatorApi::LiveSharingQueryTimeout( TAny* aThis ) + { + static_cast< CMusIndicatorApi* >( aThis )->Cancel(); + return KErrNone; + } + + diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshindicator/src/musindicatordsa.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/mmshindicator/src/musindicatordsa.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,467 @@ +/* +* Copyright (c) 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: MusIndicatorApi provides means to show notes and indicate +* availability of videosharing to user. +* +*/ + + +#include "musindicatordsa.h" +#include "muslogger.h" +#include "musresourceutil.h" +#include "musresourcefinderutil.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include + +// constants +// Size and positions + +const TInt KMusIndicatorWindowHeight = 50; +const TInt KMusIndicatorWindowShrink = 2; +const TInt KMusSpaceBetweenImageAndText = 5; + +// appereance +const TInt KMusIndicatorBorderRoundedCorners = 6; +const TInt KMusIndicatorBorderSize = 1; +//const TInt KMusIndicatorFontPenSize = 1; + + + + +CMusIndicatorDsa* CMusIndicatorDsa::NewL() + { + MUS_LOG( "mus: [MUSIND] -> CMusIndicatorDsa::NewL" ) + CMusIndicatorDsa* self = new (ELeave) CMusIndicatorDsa(); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + MUS_LOG( "mus: [MUSIND] <- CMusIndicatorDsa::NewL" ) + return self; + } + + +CMusIndicatorDsa::CMusIndicatorDsa() + : iActivateCallBack( CMusIndicatorDsa::TryActivate, this ), + iRedrawCallBack( CMusIndicatorDsa::DoHandleResourceChange, this ) + { + MUS_LOG( "mus: [MUSIND] -> CMusIndicatorDsa::CMusIndicatorDsa" ) + + iBorderColor = KRgbBlack; + iBorderBgColor = KRgbWhite; + iFontColor = KRgbBlack; + + MUS_LOG( "mus: [MUSIND] <- CMusIndicatorDsa::CMusIndicatorDsa" ) + } + + +CMusIndicatorDsa::~CMusIndicatorDsa() + { + MUS_LOG( "mus: [MUSIND] -> CMusIndicatorDsa::~CMusIndicatorDsa" ) + + StopPeriodicTimer(); + delete iPeriodic; + + delete iIcon; + delete iIconMask; + + delete iText; + + MUS_LOG( "mus: [MUSIND] <- CMusIndicatorDsa::~CMusIndicatorDsa" ) + } + + +const CFont& CMusIndicatorDsa::Font() const + { + TCoeFont coeFont = TCoeFont::NormalFont(); + TZoomFactor zoomFactor = AccumulatedZoom(); + return FindFontProvider().Font(coeFont, zoomFactor); + } + +//------------------------------------------------------------------------------ +// +//------------------------------------------------------------------------------ +// +void CMusIndicatorDsa::ConstructL() + { + MUS_LOG( "mus: [MUSIND] -> CMusIndicatorDsa::ConstructL" ) + + iPeriodic = CPeriodic::NewL( CActive::EPriorityStandard ); + + LoadResourceStringL(); + LoadImageL(); + CreateWindowL(); + + Initialize(); + TryActivateL(); + + MUS_LOG( "mus: [MUSIND] <- CMusIndicatorDsa::ConstructL" ) + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusIndicatorDsa::TryActivateL() + { + MAknsControlContext* cc = + AknsDrawUtils::ControlContext( ControlEnv()->AppUi()->TopFocusedControl() ); + + if ( cc ) + { + StopPeriodicTimer(); + ActivateL(); + } + else + { + StartPeriodicTimer( iActivateCallBack ); + } + } + + +// ----------------------------------------------------------------------------- +// Called by framework to redraw the screen area. +// ----------------------------------------------------------------------------- +// +void CMusIndicatorDsa::Draw( const TRect& aRect ) const + { + MUS_LOG( "mus: [MUSIND] -> CMusIndicatorDsa::Draw" ) + MUS_LOG2( "mus: [MUSIND] : x=%d,y=%d", aRect.iTl.iX, aRect.iTl.iY ) + MUS_LOG2( "mus: [MUSIND] : x=%d,y=%d", aRect.iBr.iX, aRect.iBr.iY ) + + CWindowGc& gc = SystemGc(); + + TSize screenSizeNow = ControlEnv()->ScreenDevice()->SizeInPixels(); + + if ( screenSizeNow != iScreenSize ) + { + StartPeriodicTimer( iRedrawCallBack ); + } + + MAknsControlContext* cc = + AknsDrawUtils::ControlContext( ControlEnv()->AppUi()->TopFocusedControl() ); + MUS_LOG1( "mus: [MUSIND] : cc = %d", cc ) + + MAknsSkinInstance* skin = AknsUtils::SkinInstance(); + MUS_LOG1( "mus: [MUSIND] : skin = %d", skin ) + + TRgb fontColor; + AknsUtils::GetCachedColor( skin, fontColor, + KAknsIIDQsnTextColors, EAknsCIQsnTextColorsCG6 ); + TRgb borderColor = fontColor; + + TBool backgroundWithBitmap = + ( skin && !cc ) ? + EFalse : + AknsDrawUtils::Background( skin, cc,this,gc,aRect,KAknsDrawParamDefault ); + + if( !backgroundWithBitmap ) + { + MUS_LOG( "mus: [MUSIND] : Clearing rect with null brush") + gc.SetBrushStyle( CGraphicsContext::ENullBrush ); + gc.Clear( aRect ); + } + else + { + MUS_LOG( "mus: [MUSIND] : rect was cleared with bitmap") + } + + gc.UseFont( &Font() ); + + // Border initialization + gc.SetBrushStyle( CGraphicsContext::ENullBrush ); + + // Draw border + MUS_LOG( "mus: [MUSIND] : Draw border") + gc.SetPenStyle( CGraphicsContext::ESolidPen ); + gc.SetPenColor( borderColor ); + gc.SetPenSize( + TSize( KMusIndicatorBorderSize, KMusIndicatorBorderSize ) ); + gc.DrawRoundRect( iScreenRect, + TSize( KMusIndicatorBorderRoundedCorners, + KMusIndicatorBorderRoundedCorners ) ); + + /* + // Draw smaller border with other color + MUS_LOG( "mus: [MUSIND] : Draw smaller border with other color") + gc.SetPenColor( iBorderBgColor ); + TRect smallerRect = iScreenRect; + smallerRect.Shrink( KMusIndicatorBorderSize, KMusIndicatorBorderSize ); + gc.DrawRoundRect( smallerRect, + TSize( KMusIndicatorBorderRoundedCorners, + KMusIndicatorBorderRoundedCorners ) ); + + // Font outline initialization + + MUS_LOG( "mus: [MUSIND] : Draw text outlines") + gc.SetPenColor( iBorderBgColor ); + gc.SetPenSize( TSize( KMusIndicatorFontPenSize, KMusIndicatorFontPenSize ) ); + + // Draw text outlines + TPoint outlineTextPos = iTextpos; + outlineTextPos -= TPoint( 1, 1 ); + gc.DrawText( *iText, outlineTextPos ); + */ + + // Font initialization + gc.SetPenColor( fontColor ); + + // Draw text + MUS_LOG( "mus: [MUSIND] : Draw text") + gc.DrawText( *iText, iTextpos ); + + gc.BitBltMasked( iImagepos, + iIcon, + TRect( 0, 0, iImageSize.iWidth, iImageSize.iHeight ), + iIconMask, + EFalse ); + + + + MUS_LOG( "mus: [MUSIND] <- CMusIndicatorDsa::Draw" ) + } + + +//------------------------------------------------------------------------------ +// +//------------------------------------------------------------------------------ +// +void CMusIndicatorDsa::HandleResourceChange( TInt aType ) + { + + if ( aType == KEikDynamicLayoutVariantSwitch ) + { + Initialize(); + DrawDeferred(); + } + + StopPeriodicTimer(); + + } + + + +//------------------------------------------------------------------------------ +// Calculates topleft position of drawn text. +//------------------------------------------------------------------------------ +// +void CMusIndicatorDsa::Initialize() + { + MUS_LOG( "mus: [MUSIND] -> CMusIndicatorDsa::Initialize" ) + + TRect clientRect = CEikonEnv::Static()->EikAppUi()->ClientRect(); + MUS_LOG2( "mus: [MUSIND] clientrect : x=%d,y=%d", clientRect.iTl.iX, clientRect.iTl.iY ) + MUS_LOG2( "mus: [MUSIND] clientrect : x=%d,y=%d", clientRect.iBr.iX, clientRect.iBr.iY ) + + iScreenSize = ControlEnv()->ScreenDevice()->SizeInPixels(); + + //test (indicator goes inside options menu area) + //clientRect.iTl.iY = 150; + + SetPosition( clientRect.iTl ); + SetSize( + TSize( iScreenSize.iWidth, KMusIndicatorWindowHeight ) ); + + iScreenRect = TRect( + TPoint( 0, 0 ), + TSize( iScreenSize.iWidth, KMusIndicatorWindowHeight ) ); + iScreenRect.Shrink( KMusIndicatorWindowShrink, KMusIndicatorWindowShrink ); + + + TInt imagePlusTextWidth = Font().TextWidthInPixels( *iText ) + + iImageSize.iWidth + KMusSpaceBetweenImageAndText; + + iImagepos.iX = ( iScreenRect.Width() - imagePlusTextWidth ) >> 1; + iImagepos.iY = ( iScreenRect.Height() - iImageSize.iHeight ) >> 1; + + // Text position + iTextpos.iX = iImagepos.iX + iImageSize.iWidth + KMusSpaceBetweenImageAndText; + + iTextpos.iY = ( iScreenRect.Height() >> 1 ) + + ( Font().HeightInPixels() >> 1 ) + + iScreenRect.iTl.iY; + + MUS_LOG( "mus: [MUSIND] <- CMusIndicatorDsa::Initialize" ) + } + + + +//------------------------------------------------------------------------------ +// Loads displayed image. +//------------------------------------------------------------------------------ +// +void CMusIndicatorDsa::LoadImageL() + { + MUS_LOG( "mus: [MUSIND] -> CMusIndicatorDsa::LoadImageL" ) + + if ( iIcon || iIconMask ) + { + MUS_LOG( "mus: [MUSIND] <- CMusIndicatorDsa::LoadImageL" ) + return; + } + + _LIT( KMyBitmapRomFile, "Z:\\resource\\apps\\musindicatoricons.mbm" ); + _LIT( KMyBitmapRamFile, "C:\\resource\\apps\\musindicatoricons.mbm" ); + + TFileName imageFileName; + if ( MusResourceFinderUtil::IsExistL( KMyBitmapRomFile ) ) + { + imageFileName = KMyBitmapRomFile; + } + else if ( MusResourceFinderUtil::IsExistL( KMyBitmapRamFile ) ) + { + imageFileName = KMyBitmapRamFile; + } + else + { + MUS_LOG( "mus: [MUSIND] Icon File Not Found!" ); + User::Leave( KErrNotFound ); + } + + iIcon = new ( ELeave ) CFbsBitmap(); + iIconMask = new ( ELeave ) CFbsBitmap(); + + // Enumerations of mbg file are usable only when vector images + // in mif file are used. Those cannot be loaded without UI components. + const TInt KMusIndicatorIconIndex = 0; + const TInt KMusIndicatorIconMaskIndex = 1; + User::LeaveIfError( + iIcon->Load( imageFileName, KMusIndicatorIconIndex ) ); + User::LeaveIfError( + iIconMask->Load( imageFileName, KMusIndicatorIconMaskIndex ) ); + + iImageSize = iIcon->SizeInPixels(); + + // Crop icon if it is too big + if ( iImageSize.iHeight > KMusIndicatorWindowHeight ) + { + TInt newHeight = KMusIndicatorWindowHeight >> 1; + TInt newWidth = + TReal( iImageSize.iHeight / iImageSize.iWidth ) * newHeight; + iIcon->Resize( TSize( newHeight, newWidth ) ); + iIconMask->Resize( TSize( newHeight, newWidth ) ); + } + + + MUS_LOG( "mus: [MUSIND] <- CMusIndicatorDsa::LoadImageL" ) + } + + +//------------------------------------------------------------------------------ +// +//------------------------------------------------------------------------------ +// +void CMusIndicatorDsa::LoadResourceStringL() + { + MUS_LOG( "mus: [MUSIND] -> CMusIndicatorDsa::LoadResourceStringL" ) + delete iText; + iText = NULL; + iText = MusResourceUtil::ReadResourceString16L( + R_MUSINDICATOR_NOTE_VSREADY_TXT, + KMusIndicatorResource ); + MUS_LOG( "mus: [MUSIND] <- CMusIndicatorDsa::LoadResourceStringL" ) + } + +//------------------------------------------------------------------------------ +// Periodic timer completion +//------------------------------------------------------------------------------ +// +TInt CMusIndicatorDsa::TryActivate( TAny* aThis ) + { + if ( !aThis ) + { + return KErrArgument; + } + + CMusIndicatorDsa* handle = static_cast< CMusIndicatorDsa* > ( aThis ); + + TInt error = KErrNone; + TRAP( error, handle->TryActivateL() ); + + return error; + } + + +//------------------------------------------------------------------------------ +// Periodic timer completion +//------------------------------------------------------------------------------ +// +TInt CMusIndicatorDsa::DoHandleResourceChange( TAny* aThis ) + { + + if ( !aThis ) + { + return KErrArgument; + } + + CMusIndicatorDsa* handle = static_cast< CMusIndicatorDsa* > ( aThis ); + + handle->HandleResourceChange( KEikDynamicLayoutVariantSwitch ); + + return KErrNone; + + } + + + +//------------------------------------------------------------------------------ +// +//------------------------------------------------------------------------------ +// +void CMusIndicatorDsa::StartPeriodicTimer( const TCallBack& aCallBack) const + { + MUS_LOG( "mus: [MUSIND] -> CMusIndicatorDsa::StartPeriodicTimer" ) + + if ( iPeriodic->IsActive() ) + { + return; + } + + TTimeIntervalMicroSeconds32 delay = + aCallBack.iFunction == CMusIndicatorDsa::TryActivate ? + KMusIndicatorDelay : KMusRedrawDelay; + + iPeriodic->Start( delay, delay, aCallBack ); + + MUS_LOG( "mus: [MUSIND] <- CMusIndicatorDsa::StartPeriodicTimer" ) + } + + +//------------------------------------------------------------------------------ +// +//------------------------------------------------------------------------------ +// +void CMusIndicatorDsa::StopPeriodicTimer() + { + MUS_LOG( "mus: [MUSIND] -> CMusIndicatorDsa::StopPeriodicTimer" ) + if( iPeriodic ) + { + iPeriodic->Cancel(); + } + MUS_LOG( "mus: [MUSIND] <- CMusIndicatorDsa::StopPeriodicTimer" ) + } + + + + + +// End of file + diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshindicator/tsrc/IndicatorTestApp/group/IndicatorTestApp.rss --- a/mmsharing/mmshindicator/tsrc/IndicatorTestApp/group/IndicatorTestApp.rss Thu Aug 19 09:51:39 2010 +0300 +++ b/mmsharing/mmshindicator/tsrc/IndicatorTestApp/group/IndicatorTestApp.rss Tue Aug 31 15:12:07 2010 +0300 @@ -92,6 +92,9 @@ MENU_ITEM {command = EIndicatorTestAppAudiotoryNotification; txt = "Set play sound";}, MENU_ITEM {command = EIndicatorTestAppNoAudiotoryNotification; txt = "Set no sound";}, + MENU_ITEM {command = EIndicatorTestAppPopUpNotification; txt = "Set pop-up notification";}, + MENU_ITEM {command = EIndicatorTestAppNoPopUpNotification; txt = "Set no pop-up notification";}, + MENU_ITEM {command = EIndicatorTestAppIconNotification; txt = "Set icon notification";}, MENU_ITEM {command = EIndicatorTestAppNoIconNotification; txt = "Set no icon notification";}, diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshindicator/tsrc/IndicatorTestApp/inc/IndicatorTestApp.hrh --- a/mmsharing/mmshindicator/tsrc/IndicatorTestApp/inc/IndicatorTestApp.hrh Thu Aug 19 09:51:39 2010 +0300 +++ b/mmsharing/mmshindicator/tsrc/IndicatorTestApp/inc/IndicatorTestApp.hrh Tue Aug 31 15:12:07 2010 +0300 @@ -27,6 +27,8 @@ EIndicatorTestAppSharingNotAvailable, EIndicatorTestAppAudiotoryNotification, EIndicatorTestAppNoAudiotoryNotification, + EIndicatorTestAppPopUpNotification, + EIndicatorTestAppNoPopUpNotification, EIndicatorTestAppIconNotification, EIndicatorTestAppNoIconNotification diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshindicator/tsrc/IndicatorTestApp/src/IndicatorTestAppAppui.cpp --- a/mmsharing/mmshindicator/tsrc/IndicatorTestApp/src/IndicatorTestAppAppui.cpp Thu Aug 19 09:51:39 2010 +0300 +++ b/mmsharing/mmshindicator/tsrc/IndicatorTestApp/src/IndicatorTestAppAppui.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -79,10 +79,13 @@ case EIndicatorTestAppSharingAvailable: { + + MultimediaSharingSettings::SetPopupNotificationSettingL( EPopupNotificationOn ); break; } case EIndicatorTestAppSharingNotAvailable: { + MultimediaSharingSettings::SetPopupNotificationSettingL( EPopupNotificationOff ); break; } default: @@ -106,7 +109,15 @@ void CIndicatorTestAppAppUi::DynInitMenuPaneL(TInt aResourceId, CEikMenuPane* aMenuPane) { if( aResourceId == R_INDICATORTESTAPP_MENU ) - { + { + if( MultimediaSharingSettings::PopupNotificationSettingL() == EPopupNotificationOn ) + { + aMenuPane->DeleteMenuItem( EIndicatorTestAppNoPopUpNotification ); + } + else + { + aMenuPane->DeleteMenuItem( EIndicatorTestAppPopUpNotification ); + } if( MultimediaSharingSettings::AuditoryNotificationSettingL() == EAuditoryNotificationOn ) { aMenuPane->DeleteMenuItem( EIndicatorTestAppNoAudiotoryNotification ); diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshindicator/tsrc/ut_indicator/BWINS/ut_musindicatoru.def --- a/mmsharing/mmshindicator/tsrc/ut_indicator/BWINS/ut_musindicatoru.def Thu Aug 19 09:51:39 2010 +0300 +++ b/mmsharing/mmshindicator/tsrc/ut_indicator/BWINS/ut_musindicatoru.def Tue Aug 31 15:12:07 2010 +0300 @@ -1,2 +1,37 @@ EXPORTS - ?CreateTestSuiteL@@YAPAVMEUnitTest@@XZ @ 1 NONAME ; class MEUnitTest * CreateTestSuiteL(void) + ?CreateTestSuiteL@@YAPAVMEUnitTest@@XZ @ 1 NONAME ; class MEUnitTest * CreateTestSuiteL(void) + ?NewL@CAknGlobalMsgQuery@@SAPAV1@XZ @ 2 NONAME ; class CAknGlobalMsgQuery * CAknGlobalMsgQuery::NewL(void) + ?NewL@CAknGlobalConfirmationQuery@@SAPAV1@XZ @ 3 NONAME ; class CAknGlobalConfirmationQuery * CAknGlobalConfirmationQuery::NewL(void) + ?NewLC@CMusIndicatorApi@@SAPAV1@AAVMMusIndicatorObserver@@@Z @ 4 NONAME ; class CMusIndicatorApi * CMusIndicatorApi::NewLC(class MMusIndicatorObserver &) + ?DrawDeferred@CCoeControl@@QBEXXZ @ 5 NONAME ; void CCoeControl::DrawDeferred(void) const + ?SystemGc@CCoeControl@@QBEAAVCWindowGc@@XZ @ 6 NONAME ; class CWindowGc & CCoeControl::SystemGc(void) const + ?SetPenColor@CWindowGc@@UAEXABVTRgb@@@Z @ 7 NONAME ; void CWindowGc::SetPenColor(class TRgb const &) + ?ShowConfirmationQueryL@CAknGlobalConfirmationQuery@@QAEXAAVTRequestStatus@@ABVTDesC16@@HH1HHW4TTone@CAknQueryDialog@@H@Z @ 8 NONAME ; void CAknGlobalConfirmationQuery::ShowConfirmationQueryL(class TRequestStatus &, class TDesC16 const &, int, int, class TDesC16 const &, int, int, enum CAknQueryDialog::TTone, int) + ?CancelMsgQuery@CAknGlobalMsgQuery@@QAEXXZ @ 9 NONAME ; void CAknGlobalMsgQuery::CancelMsgQuery(void) + ?NewL@CMusIndicatorApi@@SAPAV1@AAVMMusIndicatorObserver@@@Z @ 10 NONAME ; class CMusIndicatorApi * CMusIndicatorApi::NewL(class MMusIndicatorObserver &) + ?DrawRoundRect@CWindowGc@@UAEXABVTRect@@ABVTSize@@@Z @ 11 NONAME ; void CWindowGc::DrawRoundRect(class TRect const &, class TSize const &) + ?ShowMsgQueryL@CAknGlobalMsgQuery@@QAEXAAVTRequestStatus@@ABVTDesC16@@H11HHW4TTone@CAknQueryDialog@@@Z @ 12 NONAME ; void CAknGlobalMsgQuery::ShowMsgQueryL(class TRequestStatus &, class TDesC16 const &, int, class TDesC16 const &, class TDesC16 const &, int, int, enum CAknQueryDialog::TTone) + ?SetPenStyle@CWindowGc@@UAEXW4TPenStyle@CGraphicsContext@@@Z @ 13 NONAME ; void CWindowGc::SetPenStyle(enum CGraphicsContext::TPenStyle) + ??1CAknGlobalMsgQuery@@UAE@XZ @ 14 NONAME ; CAknGlobalMsgQuery::~CAknGlobalMsgQuery(void) + ?ConfirmationQueryL@CMusIndicatorApi@@SAHW4TVsPopupQuery@1@@Z @ 15 NONAME ; int CMusIndicatorApi::ConfirmationQueryL(enum CMusIndicatorApi::TVsPopupQuery) + ?NewL@CMusIndicatorApi@@SAPAV1@XZ @ 16 NONAME ; class CMusIndicatorApi * CMusIndicatorApi::NewL(void) + ??1CAknGlobalConfirmationQuery@@UAE@XZ @ 17 NONAME ; CAknGlobalConfirmationQuery::~CAknGlobalConfirmationQuery(void) + ?NewLC@CAknGlobalConfirmationQuery@@SAPAV1@XZ @ 18 NONAME ; class CAknGlobalConfirmationQuery * CAknGlobalConfirmationQuery::NewLC(void) + ?SizeInPixels@CWsScreenDevice@@UBE?AVTSize@@XZ @ 19 NONAME ; class TSize CWsScreenDevice::SizeInPixels(void) const + ??1CWindowGc@@UAE@XZ @ 20 NONAME ; CWindowGc::~CWindowGc(void) + ?IndicateAvailabilityL@CMusIndicatorApi@@QAEXXZ @ 21 NONAME ; void CMusIndicatorApi::IndicateAvailabilityL(void) + ?ActivateL@CCoeControl@@UAEXXZ @ 22 NONAME ; void CCoeControl::ActivateL(void) + ?Start@CPeriodic@@QAEXVTTimeIntervalMicroSeconds32@@0VTCallBack@@@Z @ 23 NONAME ; void CPeriodic::Start(class TTimeIntervalMicroSeconds32, class TTimeIntervalMicroSeconds32, class TCallBack) + ?SetPenSize@CWindowGc@@UAEXABVTSize@@@Z @ 24 NONAME ; void CWindowGc::SetPenSize(class TSize const &) + ?Background@AknsDrawUtils@@SAHPAVMAknsSkinInstance@@PAVMAknsControlContext@@PBVCCoeControl@@AAVCWindowGc@@ABVTRect@@H@Z @ 25 NONAME ; int AknsDrawUtils::Background(class MAknsSkinInstance *, class MAknsControlContext *, class CCoeControl const *, class CWindowGc &, class TRect const &, int) + ?Clear@CWindowGc@@UAEXABVTRect@@@Z @ 26 NONAME ; void CWindowGc::Clear(class TRect const &) + ?NewLC@CAknGlobalMsgQuery@@SAPAV1@XZ @ 27 NONAME ; class CAknGlobalMsgQuery * CAknGlobalMsgQuery::NewLC(void) + ?ControlContext@AknsDrawUtils@@SAPAVMAknsControlContext@@PBVMObjectProvider@@@Z @ 28 NONAME ; class MAknsControlContext * AknsDrawUtils::ControlContext(class MObjectProvider const *) + ?CancelConfirmationQuery@CAknGlobalConfirmationQuery@@QAEXXZ @ 29 NONAME ; void CAknGlobalConfirmationQuery::CancelConfirmationQuery(void) + ?UseFont@CWindowGc@@UAEXPBVCFont@@@Z @ 30 NONAME ; void CWindowGc::UseFont(class CFont const *) + ?SetBrushStyle@CWindowGc@@UAEXW4TBrushStyle@CGraphicsContext@@@Z @ 31 NONAME ; void CWindowGc::SetBrushStyle(enum CGraphicsContext::TBrushStyle) + ?CreateWindowL@CCoeControl@@IAEXXZ @ 32 NONAME ; void CCoeControl::CreateWindowL(void) + ?DrawText@CWindowGc@@UAEXABVTDesC16@@ABVTPoint@@@Z @ 33 NONAME ; void CWindowGc::DrawText(class TDesC16 const &, class TPoint const &) + ?BitBltMasked@CWindowGc@@UAEXABVTPoint@@PBVCFbsBitmap@@ABVTRect@@1H@Z @ 34 NONAME ; void CWindowGc::BitBltMasked(class TPoint const &, class CFbsBitmap const *, class TRect const &, class CFbsBitmap const *, int) + ??0CWindowGc@@QAE@PAVCWsScreenDevice@@@Z @ 35 NONAME ; CWindowGc::CWindowGc(class CWsScreenDevice *) + diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshindicator/tsrc/ut_indicator/group/bld.inf --- a/mmsharing/mmshindicator/tsrc/ut_indicator/group/bld.inf Thu Aug 19 09:51:39 2010 +0300 +++ b/mmsharing/mmshindicator/tsrc/ut_indicator/group/bld.inf Tue Aug 31 15:12:07 2010 +0300 @@ -19,5 +19,5 @@ PRJ_PLATFORMS DEFAULT -PRJ_TESTMMPFILES +PRJ_MMPFILES ut_musindicator.mmp diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshindicator/tsrc/ut_indicator/group/ut_musindicator.mmp --- a/mmsharing/mmshindicator/tsrc/ut_indicator/group/ut_musindicator.mmp Thu Aug 19 09:51:39 2010 +0300 +++ b/mmsharing/mmshindicator/tsrc/ut_indicator/group/ut_musindicator.mmp Tue Aug 31 15:12:07 2010 +0300 @@ -37,11 +37,13 @@ SOURCE dllmain.cpp SOURCE ut_cmusindicatorapi.cpp SOURCE ut_cmussoundplayer.cpp +SOURCE ut_cmusindicatordsa.cpp // tested classes SOURCEPATH ../../../src SOURCE mussoundplayer.cpp SOURCE musindicatorapi.cpp +SOURCE musindicatordsa.cpp SOURCE musresourceutil.cpp USERINCLUDE ../inc @@ -54,23 +56,28 @@ USERINCLUDE ../../../../../inc USERINCLUDE ../../../../../tsrc/ututils/inc USERINCLUDE ../../../../../tsrc/propertystub/inc +USERINCLUDE ../../../../../tsrc/fbsbitmapstub/inc +USERINCLUDE ../../../../../tsrc/centralrepositorystub/inc // STUB SOURCES SOURCEPATH ../../../../../tsrc/propertystub/src SOURCE e32property.cpp SOURCEPATH ../../../../../tsrc/fbsbitmapstub/src SOURCE fbs.cpp +SOURCEPATH ../../../../../tsrc/centralrepositorystub/src +SOURCE centralrepositorystub.cpp // STUB INCLUDES // To replace RProperty with a stub SYSTEMINCLUDE ../../../../../tsrc/propertystub/inc +SYSTEMINCLUDE ../../../../../tsrc/centralrepositorystub/inc // INCLUDESs APP_LAYER_SYSTEMINCLUDE -LIBRARY centralrepository.lib +//LIBRARY centralrepository.lib LIBRARY commonengine.lib // RConeResourceLoader LIBRARY bafl.lib LIBRARY eunit.lib diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshindicator/tsrc/ut_indicator/group/ut_musindicator.pkg --- a/mmsharing/mmshindicator/tsrc/ut_indicator/group/ut_musindicator.pkg Thu Aug 19 09:51:39 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,33 +0,0 @@ -; -; Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). -; All rights reserved. -; This component and the accompanying materials are made available -; under the terms of "Eclipse Public License v1.0" -; which accompanies this distribution, and is available -; at the URL "http://www.eclipse.org/legal/epl-v10.html". -; -; Initial Contributors: -; Nokia Corporation - initial contribution. -; -; Contributors: -; -; Description: -; - -;Languages -&EN - -;Header -#{"EUnit: MMSHInd"},(0x01700000),1,0,0 - -(0x101F7961), 0, 0, 0, {"Series60ProductID"} - -;Localised Vendor name -%{"Nokia"} - -;Unique vendor name -:"Nokia" - -;DLL files -"\epoc32\release\armv5\urel\ut_musindicator.dll"-"c:\sys\bin\ut_musindicator.dll" - diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshindicator/tsrc/ut_indicator/inc/ut_cmusindicatorapi.h --- a/mmsharing/mmshindicator/tsrc/ut_indicator/inc/ut_cmusindicatorapi.h Thu Aug 19 09:51:39 2010 +0300 +++ b/mmsharing/mmshindicator/tsrc/ut_indicator/inc/ut_cmusindicatorapi.h Tue Aug 31 15:12:07 2010 +0300 @@ -78,12 +78,16 @@ * Actual unit test methods. */ void UT_CMusIndicatorApi_NewLL(); + void UT_CMusIndicatorApi_ConfirmationQueryLL(); void UT_CMusIndicatorApi_IndicateAvailabilityLL(); void UT_CMusIndicatorApi_RunLL(); void UT_CMusIndicatorApi_DoCancelL(); void UT_CMusIndicatorApi_RunErrorL(); void UT_CMusIndicatorApi_PlaySoundCompleteL(); void UT_CMusIndicatorApi_PlayToneLL(); + void UT_CMusIndicatorApi_NoteTextLCL(); + void UT_CMusIndicatorApi_ShowLiveSharingQueryLL(); + void UT_CMusIndicatorApi_LiveSharingQueryTimeoutL(); private: // data diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshindicator/tsrc/ut_indicator/inc/ut_cmusindicatordsa.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/mmshindicator/tsrc/ut_indicator/inc/ut_cmusindicatordsa.h Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,100 @@ +/* +* Copyright (c) 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: Unit tests for CMusIndicatorApi class. +* +*/ + + + +#ifndef UT_CMUSINDICATORDSA_H +#define UT_CMUSINDICATORDSA_H + + +#include +#include + + +#ifndef NONSHARABLE_CLASS + #define NONSHARABLE_CLASS(x) class x +#endif + + +class CMusIndicatorDsa; + + +/** + * Unit test class for CMusIndicatorApi class. + * Implements unit tests for CMusIndicatorApi class. + */ +NONSHARABLE_CLASS( UT_CMusIndicatorDsa ) : public CEUnitTestSuiteClass + { +public: + + static UT_CMusIndicatorDsa* NewL(); + static UT_CMusIndicatorDsa* NewLC(); + + /** + * Destructor. + */ + ~UT_CMusIndicatorDsa(); + +private: + + UT_CMusIndicatorDsa(); + + void ConstructL(); + + /** + * Sets up a new test. + */ + void SetupL(); + + /** + * Tears down a test. + */ + void Teardown(); + + /** + * Actual unit test methods. + */ + void UT_CMusIndicatorDsa_NewLL(); + void UT_CMusIndicatorDsa_DrawL(); + void UT_CMusIndicatorDsa_LoadImageLL(); + void UT_CMusIndicatorDsa_LoadResourceStringLL(); + void UT_CMusIndicatorDsa_InitializeL(); + void UT_CMusIndicatorDsa_TryActivateL(); + void UT_CMusIndicatorDsa_StartPeriodicTimerL(); + void UT_CMusIndicatorDsa_StopPeriodicTimerL(); + void UT_CMusIndicatorDsa_HandleResourceChangeL(); + void UT_CMusIndicatorDsa_DoHandleResourceChangeL(); + + + /** + * Helpers + */ + void FakeVisibilityL(); + +private: // data + + /** + * Tested class. + * Own. + */ + CMusIndicatorDsa* iIndicatorDsa; + + EUNIT_DECLARE_TEST_TABLE; + + }; + +#endif // UT_CMUSINDICATORDSA_H diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshindicator/tsrc/ut_indicator/src/dllmain.cpp --- a/mmsharing/mmshindicator/tsrc/ut_indicator/src/dllmain.cpp Thu Aug 19 09:51:39 2010 +0300 +++ b/mmsharing/mmshindicator/tsrc/ut_indicator/src/dllmain.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -19,6 +19,7 @@ #include "ut_cmusindicatorapi.h" #include "ut_cmussoundplayer.h" +#include "ut_cmusindicatordsa.h" #include @@ -38,6 +39,9 @@ rootSuite->AddL( UT_CMusSoundPlayer::NewLC() ); CleanupStack::Pop(); + rootSuite->AddL( UT_CMusIndicatorDsa::NewLC() ); + CleanupStack::Pop(); + CleanupStack::Pop( rootSuite ); return rootSuite; diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshindicator/tsrc/ut_indicator/src/ut_cmusindicatorapi.cpp --- a/mmsharing/mmshindicator/tsrc/ut_indicator/src/ut_cmusindicatorapi.cpp Thu Aug 19 09:51:39 2010 +0300 +++ b/mmsharing/mmshindicator/tsrc/ut_indicator/src/ut_cmusindicatorapi.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -28,8 +28,134 @@ // Next row is to disable warning emerging from EUnit code. #pragma warn_illtokenpasting off +static TInt stubStatus = KErrNone; +static TRequestStatus* rstatus = NULL; +// ======== CAknGlobalMsgQuery stub ======== + + +CAknGlobalMsgQuery* CAknGlobalMsgQuery::NewL() + { + CAknGlobalMsgQuery* self = CAknGlobalMsgQuery::NewLC(); + CleanupStack::Pop( self ); + return self; + } + + +CAknGlobalMsgQuery* CAknGlobalMsgQuery::NewLC() + { + CAknGlobalMsgQuery* self = new (ELeave) CAknGlobalMsgQuery(); + CleanupStack::PushL( self ); + return self; + } + +CAknGlobalMsgQuery::CAknGlobalMsgQuery() + { + } + +CAknGlobalMsgQuery::~CAknGlobalMsgQuery() + { + CancelMsgQuery(); + iNotify.Close(); + } + +void CAknGlobalMsgQuery::ShowMsgQueryL( + TRequestStatus& aStatus, + const TDesC& /*aMsgText*/, + TInt /*aSoftkeys*/, + const TDesC& /*HeaderText*/, + const TDesC& /*HeaderImageFile*/, + TInt /*aImageId*/, + TInt /*aImageMaskId*/, + CAknQueryDialog::TTone /*aTone*/) + { + if ( stubStatus == KErrNone ) + { + aStatus = KRequestPending; + rstatus = &aStatus; + } + else + { + User::Leave( stubStatus ); + } + } + +void CAknGlobalMsgQuery::CancelMsgQuery() + { + if ( rstatus ) + { + User::RequestComplete( rstatus, KErrCancel ); + rstatus = NULL; + } + } + + +// ======== CAknGlobalConfirmationQuery stub ======== + +CAknGlobalConfirmationQuery* CAknGlobalConfirmationQuery::NewL() + { + CAknGlobalConfirmationQuery* self = CAknGlobalConfirmationQuery::NewLC(); + CleanupStack::Pop( self ); + return self; + } + + +CAknGlobalConfirmationQuery* CAknGlobalConfirmationQuery::NewLC() + { + CAknGlobalConfirmationQuery* self = new (ELeave) CAknGlobalConfirmationQuery(); + CleanupStack::PushL( self ); + return self; + } + +CAknGlobalConfirmationQuery::CAknGlobalConfirmationQuery() + { + } + + +CAknGlobalConfirmationQuery::~CAknGlobalConfirmationQuery() + { + CancelConfirmationQuery(); + iNotify.Close(); + } + + + + +void CAknGlobalConfirmationQuery::ShowConfirmationQueryL( + TRequestStatus& aStatus, + const TDesC& /*aPrompt*/, + TInt /*aSoftkeys*/, + TInt /*aAnimation*/, + const TDesC& /*aImageFile*/, + TInt /*aImageId*/, + TInt /*aImageMaskId*/, + CAknQueryDialog::TTone /*aTone*/, + TBool /*aDismissWithAllKeys*/ ) + + { + if ( stubStatus == KErrNone ) + { + TRequestStatus* stat = &aStatus; + User::RequestComplete( stat, EAknSoftkeyYes ); + // rstatus = &aStatus; + } + else + { + User::Leave( stubStatus ); + } + + } + +void CAknGlobalConfirmationQuery::CancelConfirmationQuery() + { + if ( rstatus ) + { + User::RequestComplete( rstatus, KErrCancel ); + rstatus = NULL; + } + } + // ======== MEMBER FUNCTIONS ======== @@ -78,6 +204,8 @@ void UT_CMusIndicatorApi::SetupL() { iIndicatorApi = CMusIndicatorApi::NewL( *this ); + rstatus = NULL; + stubStatus = KErrNone; iStartLiveSharingLCalled = EFalse; } @@ -89,6 +217,7 @@ void UT_CMusIndicatorApi::Teardown() { delete iIndicatorApi; + iIndicatorApi = NULL; PropertyHelper::Close(); } @@ -119,6 +248,19 @@ // ---------------------------------------------------------------------------- +// @TODO: Can this be tested without a dialog? +// ---------------------------------------------------------------------------- +// +void UT_CMusIndicatorApi::UT_CMusIndicatorApi_ConfirmationQueryLL() + { + TBool ret = iIndicatorApi->ConfirmationQueryL( + CMusIndicatorApi::EVsRoamingActivationQuery ); + + EUNIT_ASSERT( ret ); + } + + +// ---------------------------------------------------------------------------- // Dummy test. @TODO: Can this be tested? // ---------------------------------------------------------------------------- // @@ -134,16 +276,24 @@ // void UT_CMusIndicatorApi::UT_CMusIndicatorApi_RunLL() { - User::LeaveIfError( RProperty::Define( - KPSUidCoreApplicationUIs, - KCoreAppUIsVideoSharingIndicator, - RProperty::EInt, - 0 ) ); + /* NOTE: EUnit reports leak for this test due AVKON resource reservation, + * which is not released by AVKON at end of test. Resource reservation + * happend in contruction of indicator(dsa) + */ + TRAPD( error, RProperty::Define( + KPSUidCoreApplicationUIs, + KCoreAppUIsVideoSharingIndicator, + RProperty::EInt, + 0 ) ); + if ( error == KErrNoMemory ) User::Leave( error ); + EUNIT_ASSERT ( error == KErrNone ); - User::LeaveIfError( RProperty::Set( - KPSUidCoreApplicationUIs, - KCoreAppUIsVideoSharingIndicator, - ( TInt ) ECoreAppUIsVideoSharingIndicatorOn ) ); + TRAP( error, RProperty::Set( + KPSUidCoreApplicationUIs, + KCoreAppUIsVideoSharingIndicator, + ( TInt ) ECoreAppUIsVideoSharingIndicatorOn ) ); + if ( error == KErrNoMemory ) User::Leave( error ); + EUNIT_ASSERT ( error == KErrNone ); iIndicatorApi->Cancel(); iIndicatorApi->iStatus = KErrNotFound; @@ -153,18 +303,42 @@ iIndicatorApi->Cancel(); iIndicatorApi->iStatus = KErrNone; iIndicatorApi->RunL(); - EUNIT_ASSERT( iStartLiveSharingLCalled ); + EUNIT_ASSERT( iStartLiveSharingLCalled ); + EUNIT_ASSERT( !iIndicatorApi->iQuery ); + + delete iIndicatorApi->iLiveSharingQueryTimeout; + iIndicatorApi->iLiveSharingQueryTimeout = NULL; + iIndicatorApi->iLiveSharingQueryTimeout = + CPeriodic::NewL( CActive::EPriorityStandard ); + + iIndicatorApi->RunL(); + EUNIT_ASSERT( !iIndicatorApi->iLiveSharingQueryTimeout ); + EUNIT_ASSERT( !iIndicatorApi->IsSubscriber() ); + + iIndicatorApi->iObserver = NULL; + EUNIT_ASSERT( iIndicatorApi->IsSubscriber() ); + iIndicatorApi->Indicator( ETrue ); + + iIndicatorApi->Cancel(); + + iIndicatorApi->RunL(); + + TRequestStatus& status = iIndicatorApi->iStatus; + rstatus = &status; + //User::RequestComplete( rstatus, KErrCancel ); } // ---------------------------------------------------------------------------- -// Asserts that DoCancel removes current activity. +// Asserts that DoCancel removes current activity and deletes used resources. // ---------------------------------------------------------------------------- // void UT_CMusIndicatorApi::UT_CMusIndicatorApi_DoCancelL() { + iIndicatorApi->ShowLiveSharingQueryL( EFalse ); iIndicatorApi->Cancel(); + EUNIT_ASSERT( !iIndicatorApi->iQuery ); EUNIT_ASSERT( !iIndicatorApi->IsActive() ); } @@ -207,6 +381,62 @@ } +// ---------------------------------------------------------------------------- +// Asserts that a note text is generated. +// ---------------------------------------------------------------------------- +// +void UT_CMusIndicatorApi::UT_CMusIndicatorApi_NoteTextLCL() + { + HBufC* tmp = iIndicatorApi->NoteTextLC( + CMusIndicatorApi::EVsRoamingActivationQuery ); + EUNIT_ASSERT( tmp ); + EUNIT_ASSERT( tmp->Length() ); + CleanupStack::PopAndDestroy(); + } + + +// ---------------------------------------------------------------------------- +// Asserts that method creates a query and calls CActive::SetActive. +// ---------------------------------------------------------------------------- +// +void UT_CMusIndicatorApi::UT_CMusIndicatorApi_ShowLiveSharingQueryLL() + { + + iIndicatorApi->ShowLiveSharingQueryL( EFalse ); + EUNIT_ASSERT( iIndicatorApi->iQuery ); + EUNIT_ASSERT( iIndicatorApi->IsActive() ); + + iIndicatorApi->Cancel(); + EUNIT_ASSERT( !iIndicatorApi->iQuery ); + EUNIT_ASSERT( !iIndicatorApi->IsActive() ); + + stubStatus = KErrNotFound; + iIndicatorApi->ShowLiveSharingQueryL( EFalse ); + EUNIT_ASSERT( !iIndicatorApi->iQuery ); + EUNIT_ASSERT( !iIndicatorApi->IsActive() ); + + + } + +// ---------------------------------------------------------------------------- +// ---------------------------------------------------------------------------- +// +void UT_CMusIndicatorApi::UT_CMusIndicatorApi_LiveSharingQueryTimeoutL() + { + iIndicatorApi->ShowLiveSharingQueryL( EFalse ); + EUNIT_ASSERT( iIndicatorApi->iQuery ); + EUNIT_ASSERT( iIndicatorApi->IsActive() ); + + EUNIT_ASSERT( CMusIndicatorApi::LiveSharingQueryTimeout( iIndicatorApi ) == KErrNone ); + + EUNIT_ASSERT( !iIndicatorApi->iQuery ); + EUNIT_ASSERT( !iIndicatorApi->IsActive() ); + + + } + + + // ======== EUNIT TEST TABLE ======== @@ -223,6 +453,13 @@ SetupL, UT_CMusIndicatorApi_NewLL, Teardown ) EUNIT_TEST( + "ConfirmationQueryL - test ", + "CMusIndicatorApi", + "ConfirmationQueryL", + "FUNCTIONALITY", + SetupL, UT_CMusIndicatorApi_ConfirmationQueryLL, Teardown ) + +EUNIT_TEST( "IndicateAvailabilityL - test ", "CMusIndicatorApi", "IndicateAvailabilityL", @@ -264,6 +501,27 @@ "FUNCTIONALITY", SetupL, UT_CMusIndicatorApi_PlayToneLL, Teardown ) +EUNIT_TEST( + "NoteTextLC - test ", + "CMusIndicatorApi", + "NoteTextLC", + "FUNCTIONALITY", + SetupL, UT_CMusIndicatorApi_NoteTextLCL, Teardown ) + +EUNIT_TEST( + "ShowLiveSharingQueryL - test ", + "CMusIndicatorApi", + "ShowLiveSharingQueryL", + "FUNCTIONALITY", + SetupL, UT_CMusIndicatorApi_ShowLiveSharingQueryLL, Teardown ) + +EUNIT_TEST( + "LiveSharingQueryTimeout - test ", + "CMusIndicatorApi", + "LiveSharingQueryTimeout", + "FUNCTIONALITY", + SetupL, UT_CMusIndicatorApi_LiveSharingQueryTimeoutL, Teardown ) + EUNIT_END_TEST_TABLE diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshindicator/tsrc/ut_indicator/src/ut_cmusindicatordsa.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/mmshindicator/tsrc/ut_indicator/src/ut_cmusindicatordsa.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,501 @@ +/* +* Copyright (c) 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: Implements unit tests for CMusIndicatorApi class. +* +*/ + + + +#include "ut_cmusindicatordsa.h" +#include "musindicatordsa.h" +#include "mustesthelp.h" +#include "e32property.h" + +#include +#include +#include + + +// Next row is to disable warning emerging from EUnit code. +#pragma warn_illtokenpasting off + +const TSize KOriginalSize = TSize( 176, 208 ); +const TSize KDifferentSize = TSize( 208, 176 ); + +static CWindowGc* gc = NULL; +static TAny* cc = NULL; +static TTimeIntervalMicroSeconds32 delay = 0; +static TSize sizeInPixels = KOriginalSize; + + +// ======== stubs ======== + + +void CCoeControl::CreateWindowL() + { + + } + +void CCoeControl::ActivateL() + { + + } + +void CCoeControl::DrawDeferred() const + { + } + +CWindowGc& CCoeControl::SystemGc() const + { + return *gc; + } + +MWsClientClass::MWsClientClass() + { + } + +CWindowGc::CWindowGc(CWsScreenDevice* /*aDevice*/ ) + { + + } + +CWindowGc::~CWindowGc() + { + + } + +void CWindowGc::SetBrushStyle( TBrushStyle /*aBrushStyle*/ ) + { + } + +void CWindowGc::Clear( const TRect& /*aRect*/ ) + { + } + +void CWindowGc::UseFont( const CFont* /*aFont*/ ) + { + } + +void CWindowGc::SetPenStyle( TPenStyle /*aPenStyle*/ ) + { + } + +void CWindowGc::SetPenColor( const TRgb& /*aColor*/ ) + { + } + +void CWindowGc::SetPenSize( const TSize& /*aSize*/ ) + { + } + +void CWindowGc::DrawRoundRect( const TRect& /*aRect*/,const TSize& /*aEllipse*/ ) + { + } + +void CWindowGc::DrawText( const TDesC& /*aBuf*/,const TPoint& /*aPos*/ ) + { + } + +//Cannot stub due it is virtual method. This is not called +TSize CWsScreenDevice::SizeInPixels() const + { + return sizeInPixels; + } + +void CWindowGc::BitBltMasked(const TPoint& /*aPoint*/,const CFbsBitmap* /*aBitmap*/, + const TRect& /*aSourceRect*/,const CFbsBitmap* /*aMaskBitmap*/,TBool /*aInvertMask*/) + { + } + +MAknsControlContext* AknsDrawUtils::ControlContext( const MObjectProvider* /*aMop*/ ) + { + return static_cast( cc ); + } + +TBool AknsDrawUtils::Background( MAknsSkinInstance* /*aInstance*/, + MAknsControlContext* /*aContext*/, const CCoeControl* /*aControl*/, + CWindowGc& /*aGc*/, const TRect& /*aRect*/, const TInt /*aDrawParam*/ ) + { + return ETrue; + } + + +void CPeriodic::Start(TTimeIntervalMicroSeconds32 aDelay,TTimeIntervalMicroSeconds32 /*anInterval*/,TCallBack /*aCallBack*/) + { + delay = aDelay; + After(aDelay); + + } + + + +// ======== MEMBER FUNCTIONS ======== + + +UT_CMusIndicatorDsa* UT_CMusIndicatorDsa::NewL() + { + UT_CMusIndicatorDsa* self = UT_CMusIndicatorDsa::NewLC(); + CleanupStack::Pop( self ); + return self; + } + + +UT_CMusIndicatorDsa* UT_CMusIndicatorDsa::NewLC() + { + UT_CMusIndicatorDsa* self = new( ELeave ) UT_CMusIndicatorDsa(); + CleanupStack::PushL( self ); + self->ConstructL(); + return self; + } + + +UT_CMusIndicatorDsa::~UT_CMusIndicatorDsa() + { + } + + +UT_CMusIndicatorDsa::UT_CMusIndicatorDsa() + { + delete iIndicatorDsa; + iIndicatorDsa = NULL; + } + + +// --------------------------------------------------------------------------- +// The ConstructL from the base class CEUnitTestSuiteClass must be called. +// It generates the test case table. +// --------------------------------------------------------------------------- +// +void UT_CMusIndicatorDsa::ConstructL() + { + CEUnitTestSuiteClass::ConstructL(); + } + + +// ---------------------------------------------------------------------------- +// Prepares a test for execution. +// ---------------------------------------------------------------------------- +// +void UT_CMusIndicatorDsa::SetupL() + { + /* NOTE: EUnit reports leak for any first test due AVKON resource reservation, + * which is not released by AVKON at end of test. Resource reservation + * happend in contruction of CMusIndicatorDsa + */ + + cc = this; + iIndicatorDsa = CMusIndicatorDsa::NewL(); + if ( !gc ) + { + gc = new (ELeave) CWindowGc( NULL ); + } + delay = 0; + sizeInPixels = KOriginalSize; + + } + + +// ---------------------------------------------------------------------------- +// Finalizes a test by releasing used resources. +// ---------------------------------------------------------------------------- +// +void UT_CMusIndicatorDsa::Teardown() + { + delete iIndicatorDsa; + iIndicatorDsa = NULL; + delete gc; + gc = NULL; + cc = NULL; + delay = 0; + sizeInPixels = KOriginalSize; + PropertyHelper::Close(); + + } + + +// ======== UNIT TEST METHODS ======== + + +// ---------------------------------------------------------------------------- +// Asserts successful instantiation. +// ---------------------------------------------------------------------------- +// + +void UT_CMusIndicatorDsa::UT_CMusIndicatorDsa_NewLL() + { + EUNIT_ASSERT( iIndicatorDsa ); + } + + +// ---------------------------------------------------------------------------- +// +// ---------------------------------------------------------------------------- +// +void UT_CMusIndicatorDsa::UT_CMusIndicatorDsa_DrawL() + { + EUNIT_ASSERT( !iIndicatorDsa->iPeriodic->IsActive() ); + + TRect rect; + iIndicatorDsa->Draw( rect ); + EUNIT_ASSERT( !iIndicatorDsa->iPeriodic->IsActive() ); + + cc = NULL; + iIndicatorDsa->Draw( rect ); + EUNIT_ASSERT( !iIndicatorDsa->iPeriodic->IsActive() ); + + /*size cannot be changed + sizeInPixels = KDifferentSize; + iIndicatorDsa->Draw( rect ); + EUNIT_ASSERT( iIndicatorDsa->iPeriodic->IsActive() ); + */ + + } + +// ---------------------------------------------------------------------------- +// +// ---------------------------------------------------------------------------- +// +void UT_CMusIndicatorDsa::UT_CMusIndicatorDsa_InitializeL() + { + iIndicatorDsa->Initialize(); + + + EUNIT_ASSERT( iIndicatorDsa->iTextpos.iX ); + EUNIT_ASSERT( iIndicatorDsa->iTextpos.iY ); + + } + + +// ---------------------------------------------------------------------------- +// Asserts that load image is not doing anything if icon is already loaded +// ---------------------------------------------------------------------------- +// +void UT_CMusIndicatorDsa::UT_CMusIndicatorDsa_LoadImageLL() + { + CFbsBitmap* icon = iIndicatorDsa->iIcon; + CFbsBitmap* iconMask = iIndicatorDsa->iIconMask; + EUNIT_ASSERT( icon != NULL ); + EUNIT_ASSERT( iconMask != NULL ); + iIndicatorDsa->LoadImageL(); + + EUNIT_ASSERT( icon == iIndicatorDsa->iIcon ); + EUNIT_ASSERT( iconMask == iIndicatorDsa->iIconMask ); + } + + +// ---------------------------------------------------------------------------- +// Asserts successful loading of resource string. +// ---------------------------------------------------------------------------- +// +void UT_CMusIndicatorDsa::UT_CMusIndicatorDsa_LoadResourceStringLL() + { + iIndicatorDsa->LoadResourceStringL(); + EUNIT_ASSERT( iIndicatorDsa->iText ); + EUNIT_ASSERT( iIndicatorDsa->iText->Length() ); + } + + + +// ---------------------------------------------------------------------------- +// Asserts that periodic timer is started after method call. +// ---------------------------------------------------------------------------- +// +void UT_CMusIndicatorDsa::UT_CMusIndicatorDsa_StartPeriodicTimerL() + { + EUNIT_ASSERT( iIndicatorDsa->iPeriodic ); + EUNIT_ASSERT( !iIndicatorDsa->iPeriodic->IsActive() ); + EUNIT_ASSERT( delay.Int() == 0 ); + + iIndicatorDsa->StartPeriodicTimer( iIndicatorDsa->iActivateCallBack ); + EUNIT_ASSERT( iIndicatorDsa->iPeriodic->IsActive() ); + EUNIT_ASSERT( delay.Int() == KMusIndicatorDelay ); + + delay = 0; + iIndicatorDsa->StartPeriodicTimer( iIndicatorDsa->iActivateCallBack ); + EUNIT_ASSERT( delay.Int() == 0 ); + + iIndicatorDsa->iPeriodic->Cancel(); + EUNIT_ASSERT( !iIndicatorDsa->iPeriodic->IsActive() ); + EUNIT_ASSERT( delay.Int() == 0 ); + + iIndicatorDsa->StartPeriodicTimer( iIndicatorDsa->iRedrawCallBack ); + EUNIT_ASSERT( iIndicatorDsa->iPeriodic->IsActive() ); + EUNIT_ASSERT( delay.Int() == KMusRedrawDelay ); + + } + + +// ---------------------------------------------------------------------------- +// Asserts that periodic timer is stopped after method call. +// ---------------------------------------------------------------------------- +// +void UT_CMusIndicatorDsa::UT_CMusIndicatorDsa_StopPeriodicTimerL() + { + EUNIT_ASSERT( iIndicatorDsa->iPeriodic ); + EUNIT_ASSERT( !iIndicatorDsa->iPeriodic->IsActive() ); + iIndicatorDsa->StopPeriodicTimer(); + EUNIT_ASSERT( iIndicatorDsa->iPeriodic ); + EUNIT_ASSERT( !iIndicatorDsa->iPeriodic->IsActive() ); + + iIndicatorDsa->StartPeriodicTimer( iIndicatorDsa->iActivateCallBack ); + EUNIT_ASSERT( iIndicatorDsa->iPeriodic ); + EUNIT_ASSERT( iIndicatorDsa->iPeriodic->IsActive() ); + + iIndicatorDsa->StopPeriodicTimer(); + EUNIT_ASSERT( iIndicatorDsa->iPeriodic ); + EUNIT_ASSERT( !iIndicatorDsa->iPeriodic->IsActive() ); + + } + +// ---------------------------------------------------------------------------- +// Asserts that periodic timer +// ---------------------------------------------------------------------------- +// +void UT_CMusIndicatorDsa::UT_CMusIndicatorDsa_TryActivateL() + { + EUNIT_ASSERT( iIndicatorDsa->iPeriodic ); + EUNIT_ASSERT( !iIndicatorDsa->iPeriodic->IsActive() ); + + EUNIT_ASSERT_EQUALS( iIndicatorDsa->TryActivate( iIndicatorDsa ), KErrNone ); + EUNIT_ASSERT( iIndicatorDsa->iPeriodic ); + EUNIT_ASSERT( !iIndicatorDsa->iPeriodic->IsActive() ); + + cc = NULL; + + // Through async callback + EUNIT_ASSERT_EQUALS( iIndicatorDsa->TryActivate( iIndicatorDsa ), KErrNone ); + EUNIT_ASSERT( iIndicatorDsa->iPeriodic->IsActive() ); + + EUNIT_ASSERT_EQUALS( iIndicatorDsa->TryActivate( NULL ), KErrArgument ); + EUNIT_ASSERT( iIndicatorDsa->iPeriodic->IsActive() ); + + } + +void UT_CMusIndicatorDsa::UT_CMusIndicatorDsa_DoHandleResourceChangeL() + { + EUNIT_ASSERT( iIndicatorDsa->iPeriodic ); + EUNIT_ASSERT( !iIndicatorDsa->iPeriodic->IsActive() ); + + EUNIT_ASSERT_EQUALS( iIndicatorDsa->DoHandleResourceChange( iIndicatorDsa ), KErrNone ); + EUNIT_ASSERT( iIndicatorDsa->iPeriodic ); + EUNIT_ASSERT( !iIndicatorDsa->iPeriodic->IsActive() ); + + EUNIT_ASSERT_EQUALS( iIndicatorDsa->DoHandleResourceChange( NULL ), KErrArgument ); + EUNIT_ASSERT( !iIndicatorDsa->iPeriodic->IsActive() ); + + } + +void UT_CMusIndicatorDsa::UT_CMusIndicatorDsa_HandleResourceChangeL() + { + EUNIT_ASSERT( !iIndicatorDsa->iPeriodic->IsActive() ); + iIndicatorDsa->StartPeriodicTimer( iIndicatorDsa->iRedrawCallBack ); + EUNIT_ASSERT( iIndicatorDsa->iPeriodic->IsActive() ); + + iIndicatorDsa->iScreenSize = TSize(); + iIndicatorDsa->HandleResourceChange( KEikDynamicLayoutVariantSwitch ); + EUNIT_ASSERT( !iIndicatorDsa->iPeriodic->IsActive() ); + + EUNIT_ASSERT( iIndicatorDsa->iScreenSize != TSize() ); + + iIndicatorDsa->iScreenSize = TSize(); + iIndicatorDsa->HandleResourceChange( 0 ); + EUNIT_ASSERT( iIndicatorDsa->iScreenSize == TSize() ); + + } + + + +// ======== EUNIT TEST TABLE ======== + + +EUNIT_BEGIN_TEST_TABLE( + UT_CMusIndicatorDsa, + "UT_CMusIndicatorDsa", + "UNIT" ) + +EUNIT_TEST( + "NewL - test", + "CMusIndicatorDsa", + "NewL", + "FUNCTIONALITY", + SetupL, UT_CMusIndicatorDsa_NewLL, Teardown ) + + +EUNIT_TEST( + "Draw - test", + "CMusIndicatorDsa", + "Draw", + "FUNCTIONALITY", + SetupL, UT_CMusIndicatorDsa_DrawL, Teardown ) + + +EUNIT_TEST( + "Initialize - test", + "CMusIndicatorDsa", + "Initialize", + "FUNCTIONALITY", + SetupL, UT_CMusIndicatorDsa_InitializeL, Teardown ) + +EUNIT_TEST( + "LoadImageL - test", + "CMusIndicatorDsa", + "LoadImageL", + "FUNCTIONALITY", + SetupL, UT_CMusIndicatorDsa_LoadImageLL, Teardown ) + +EUNIT_TEST( + "LoadResourceStringL - test", + "CMusIndicatorDsa", + "LoadResourceStringL", + "FUNCTIONALITY", + SetupL, UT_CMusIndicatorDsa_LoadResourceStringLL, Teardown ) + + +EUNIT_TEST( + "TryActivate - test", + "CMusIndicatorDsa", + "TryActivate", + "FUNCTIONALITY", + SetupL, UT_CMusIndicatorDsa_TryActivateL, Teardown ) + +EUNIT_TEST( + "StartPeriodicTimer - test", + "CMusIndicatorDsa", + "StartPeriodicTimer", + "FUNCTIONALITY", + SetupL, UT_CMusIndicatorDsa_StartPeriodicTimerL, Teardown ) + +EUNIT_TEST( + "StopPeriodicTimer - test", + "CMusIndicatorDsa", + "StopPeriodicTimer", + "FUNCTIONALITY", + SetupL, UT_CMusIndicatorDsa_StopPeriodicTimerL, Teardown ) + +EUNIT_TEST( + "DoHandleResourceChange - test", + "CMusIndicatorDsa", + "DoHandleResourceChange", + "FUNCTIONALITY", + SetupL, UT_CMusIndicatorDsa_DoHandleResourceChangeL, Teardown ) + +EUNIT_TEST( + "HandleResourceChange - test", + "CMusIndicatorDsa", + "HandleResourceChange", + "FUNCTIONALITY", + SetupL, UT_CMusIndicatorDsa_HandleResourceChangeL, Teardown ) + + +EUNIT_END_TEST_TABLE diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshmanagercli/src/musmanagerimpl.cpp --- a/mmsharing/mmshmanagercli/src/musmanagerimpl.cpp Thu Aug 19 09:51:39 2010 +0300 +++ b/mmsharing/mmshmanagercli/src/musmanagerimpl.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -402,9 +402,6 @@ { MUS_LOG1( "mus: [MUSCLI] CMusManagerImplListener::RunError: %d", \ aError ); - // Nothing can be done here. - aError = KErrNone; - return aError; } diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshmanagercli/tsrc/ut_managercli/group/bld.inf --- a/mmsharing/mmshmanagercli/tsrc/ut_managercli/group/bld.inf Thu Aug 19 09:51:39 2010 +0300 +++ b/mmsharing/mmshmanagercli/tsrc/ut_managercli/group/bld.inf Tue Aug 31 15:12:07 2010 +0300 @@ -16,5 +16,5 @@ */ -PRJ_TESTMMPFILES +PRJ_MMPFILES ut_musmanagerclient.mmp \ No newline at end of file diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshmanagercli/tsrc/ut_managercli/group/ut_musmanagerclient.pkg --- a/mmsharing/mmshmanagercli/tsrc/ut_managercli/group/ut_musmanagerclient.pkg Thu Aug 19 09:51:39 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,32 +0,0 @@ -; -; Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). -; All rights reserved. -; This component and the accompanying materials are made available -; under the terms of "Eclipse Public License v1.0" -; which accompanies this distribution, and is available -; at the URL "http://www.eclipse.org/legal/epl-v10.html". -; -; Initial Contributors: -; Nokia Corporation - initial contribution. -; -; Contributors: -; -; Description: -; - -;Languages -&EN - -;Header -#{"EUnit: MMSHMgrCli"},(0x01700000),1,0,0 - -(0x101F7961), 0, 0, 0, {"Series60ProductID"} - -;Localised Vendor name -%{"Nokia"} - -;Unique vendor name -:"Nokia" - -;DLL files -"\epoc32\release\armv5\urel\ut_musmanagerclient.dll"-"c:\sys\bin\ut_musmanagerclient.dll" diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshmanagersrv/group/musmanagerserver.mmp --- a/mmsharing/mmshmanagersrv/group/musmanagerserver.mmp Thu Aug 19 09:51:39 2010 +0300 +++ b/mmsharing/mmshmanagersrv/group/musmanagerserver.mmp Tue Aug 31 15:12:07 2010 +0300 @@ -30,6 +30,9 @@ VENDORID VID_DEFAULT VERSION KMusBinaryVersionNumber +// Stack Size 20K +EPOCSTACKSIZE 0x5000 + SOURCEPATH ../src SOURCE musmanagerserver.cpp SOURCE musmanagerservercore.cpp @@ -44,6 +47,7 @@ USERINCLUDE ../../mmshshared/inc USERINCLUDE ../../inc USERINCLUDE ../../../inc +USERINCLUDE ../../cenrep APP_LAYER_SYSTEMINCLUDE @@ -56,5 +60,7 @@ LIBRARY flogger.lib LIBRARY ws32.lib LIBRARY musindicator.lib +LIBRARY centralrepository.lib +LIBRARY charconv.lib PAGED diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshmanagersrv/inc/musapplicationmanager.h --- a/mmsharing/mmshmanagersrv/inc/musapplicationmanager.h Thu Aug 19 09:51:39 2010 +0300 +++ b/mmsharing/mmshmanagersrv/inc/musapplicationmanager.h Tue Aug 31 15:12:07 2010 +0300 @@ -27,6 +27,9 @@ #include #include + +const TInt KMusMgrMaxPluginNameLen = 256; + //class TApaTask; /** @@ -120,6 +123,12 @@ * */ void SetIndicatorStatusL( TBool aLaunch ); + + /** + * Resolves name of the ecom plugin which implements the livecomms engine api + * by using the callprovider + */ + void ResolvePluginNameL(TDes8& aPluginName); private: // helper functions @@ -135,22 +144,15 @@ void SetPropertyL( TUint aProperty, TInt aValue ); /** - * + * Reads the call provider information from PS key. + */ + void CallProviderL(TDes8& aProvider); + + /** + * Creates command line used when starting application. + * */ - TApaTask GetApaTask(); - - - private: // owned data - - /** - * Window server session handle - */ - RWsSession iWsSession; - - /** - * - */ - RApaLsSession iApaSession; + HBufC* CreateCommandLineArgsLC(); }; diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshmanagersrv/inc/musavailabilitypluginmanager.h --- a/mmsharing/mmshmanagersrv/inc/musavailabilitypluginmanager.h Thu Aug 19 09:51:39 2010 +0300 +++ b/mmsharing/mmshmanagersrv/inc/musavailabilitypluginmanager.h Tue Aug 31 15:12:07 2010 +0300 @@ -105,6 +105,11 @@ void InvestigateAvailabilityL(); /** + * + */ + void PrepareForReceivedInviteL(); + + /** * */ void InvitationReceivedL(); @@ -151,14 +156,14 @@ virtual void AvailabilityError( TAvailabilityName aName, TAvailabilityStatus aStatus ); - virtual void AvailabilitiesAbleToShowIndicator(); - public: //from MMusAvaSettingsObserver TApplicationState ApplicationState(); TBool OptionAllowed(); + + void StartApplicationL( MultimediaSharing::TMusUseCase aUseCase ); private: // from base class MMusIndicatorObserver. diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshmanagersrv/inc/musavailabilitypluginmanagerobserver.h --- a/mmsharing/mmshmanagersrv/inc/musavailabilitypluginmanagerobserver.h Thu Aug 19 09:51:39 2010 +0300 +++ b/mmsharing/mmshmanagersrv/inc/musavailabilitypluginmanagerobserver.h Tue Aug 31 15:12:07 2010 +0300 @@ -40,7 +40,8 @@ virtual void AvailabilityChangedL( MultimediaSharing::TMusAvailabilityStatus aAvailability ) = 0; - virtual void StartLiveSharingL() = 0; + virtual void StartSharingWithUseCaseL( MultimediaSharing::TMusUseCase aUseCase ) = 0; + }; diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshmanagersrv/inc/musmanagerserverclosetimer.h --- a/mmsharing/mmshmanagersrv/inc/musmanagerserverclosetimer.h Thu Aug 19 09:51:39 2010 +0300 +++ b/mmsharing/mmshmanagersrv/inc/musmanagerserverclosetimer.h Tue Aug 31 15:12:07 2010 +0300 @@ -39,7 +39,6 @@ void StopActiveSchedulerAfter( TUint aMilliSeconds ); void RunL(); - TInt RunError( TInt aError ); void DoCancel(); private: diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshmanagersrv/inc/musmanagerservercommon.h --- a/mmsharing/mmshmanagersrv/inc/musmanagerservercommon.h Thu Aug 19 09:51:39 2010 +0300 +++ b/mmsharing/mmshmanagersrv/inc/musmanagerservercommon.h Tue Aug 31 15:12:07 2010 +0300 @@ -19,7 +19,7 @@ #ifndef MUSMANAGERSERVERCOMMON_H #define MUSMANAGERSERVERCOMMON_H -const TInt KParameterCount = 7; +const TInt KParameterCount = 8; enum EMusManagerServerParameter { @@ -30,7 +30,7 @@ KVideoCodec, KSipProfileId, KContactName, - KPrivacyStatus + KFastMode }; #endif // ? MUSMANAGERSERVERCOMMON_H diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshmanagersrv/inc/musmanagerservercore.h --- a/mmsharing/mmshmanagersrv/inc/musmanagerservercore.h Thu Aug 19 09:51:39 2010 +0300 +++ b/mmsharing/mmshmanagersrv/inc/musmanagerservercore.h Tue Aug 31 15:12:07 2010 +0300 @@ -25,6 +25,7 @@ #include "musmanagerserversessionobserver.h" #include "musavailabilitypluginmanagerobserver.h" #include "musmanagercommon.h" +#include "musapplicationmanager.h" class CMusApplicationManager; class CMusAvailabilityPlugin; @@ -98,13 +99,34 @@ virtual void AvailabilityChangedL( MultimediaSharing::TMusAvailabilityStatus aAvailability ); - virtual void StartLiveSharingL(); + virtual void StartSharingWithUseCaseL( MultimediaSharing::TMusUseCase aUseCase ); + +private: // private methods + + TBool IsMusEnginePlugin(); + + MultimediaSharing::TMusAvailabilityStatus Availability(); + + TBool ApplicationAllowed(); + + void PrepareForReceivedInviteL(); + + void WriteSessionPropertiesL( + MultimediaSharing::TMusUseCase aUseCase, + MultimediaSharing::TMusAvailabilityStatus aStatus, + MDesCArray& aSessionParameters ); + + void WriteSessionPropertiesL( + MultimediaSharing::TMusAvailabilityStatus aStatus, + MDesCArray& aSessionParameters ); private: // owned data: CMusAvailabilityPluginManager* iPluginManager; CMusApplicationManager* iApplicationManager; + + TBuf8 iPluginName; private: // not owned data diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshmanagersrv/src/musapplicationmanager.cpp --- a/mmsharing/mmshmanagersrv/src/musapplicationmanager.cpp Thu Aug 19 09:51:39 2010 +0300 +++ b/mmsharing/mmshmanagersrv/src/musapplicationmanager.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -23,15 +23,23 @@ #include "musmanagerservercommon.h" #include "mussessionproperties.h" #include "musuid.hrh" +#include "mussettings.h" +/* PS keys related to NMusSessionInformationApi defined here */ +#include "mussesseioninformationapi.h" +#include "muscleanupresetanddestroy.h" +#include "lcengine.h" #include #include -//#include #include #include +#include +#include + // CONSTANTS - +_LIT8( KDefaultEngineName, "MultimediaSharing" ); +_LIT( KMusUiProcessName, "musui.exe" ); // ----------------------------------------------------------------------------- // CMusApplicationManager::NewL @@ -79,9 +87,6 @@ MUS_LOG( "mus: [MUSSRV] -> \ CMusApplicationManager::~CMusApplicationManager()" ); - iApaSession.Close(); - iWsSession.Close(); - MUS_LOG( "mus: [MUSSRV] <- \ CMusApplicationManager::~CMusApplicationManager()" ); } @@ -95,8 +100,7 @@ { MUS_LOG( "mus: [MUSSRV] -> CMusApplicationManager::ConstructL()" ); - User::LeaveIfError( iApaSession.Connect() ); - User::LeaveIfError( iWsSession.Connect() ); + SetPropertyL( NMusSessionApi::KFastMode, MusSettingsKeys::EFastModeOff ); MUS_LOG( "mus: [MUSSRV] <- CMusApplicationManager::ConstructL()" ); } @@ -118,7 +122,10 @@ TBool CMusApplicationManager::ApplicationRunning() { MUS_LOG( "mus: [MUSSRV] <> CMusApplicationManager::ApplicationRunning()" ); - return GetApaTask().Exists(); + + TFindProcess findProcess( KMusUiProcessName ); + TFullName name; + return ( findProcess.Next( name ) == KErrNone ); } @@ -136,13 +143,15 @@ } else { - TUid appUid; - appUid.iUid = KMusUiUid; + MUS_LOG( "mus: [MUSSRV] Starting app" ); - TThreadId aThreadId; - - User::LeaveIfError( - iApaSession.StartDocument( KNullDesC, appUid, aThreadId) ); + RProcess process; + CleanupClosePushL( process ); + HBufC* args = CreateCommandLineArgsLC(); + User::LeaveIfError( process.Create( KMusUiProcessName, *args ) ); + process.Resume(); + CleanupStack::PopAndDestroy( args ); + CleanupStack::PopAndDestroy( &process ); } MUS_LOG( "mus: [MUSSRV] <- CMusApplicationManager::StartApplicationL()" ); @@ -157,8 +166,7 @@ { MUS_LOG( "mus: [MUSSRV] -> CMusApplicationManager::StopApplicationL()" ); - TApaTask task = GetApaTask(); - if( task.Exists() ) + if( ApplicationRunning() ) { SetPropertyL( NMusSessionApi::KStatus, MultimediaSharing::EMultimediaSharingNotAvailable ); @@ -176,12 +184,7 @@ { MUS_LOG( "mus: [MUSSRV] -> CMusApplicationManager::ShowApplicationL()" ); - // does a task for multimediasharing exist? - TApaTask task = GetApaTask(); - if( task.Exists() ) - { - task.BringToForeground(); - } + // TODO: How to bring a QT application to foreground? MUS_LOG( "mus: [MUSSRV] <- CMusApplicationManager::ShowApplicationL()" ); } @@ -199,10 +202,21 @@ MUS_LOG2( "mus: [MUSSRV] -> \ CMusApplicationManager::WriteSessionPropertiesL( %d, %d )", ( TInt ) aUseCase, ( TInt ) aStatus ); - + TRAPD( error, + if ( aUseCase == MultimediaSharing::EMusLiveVideo && + MultimediaSharingSettings::VideoDirectionL() == + MusSettingsKeys::ETwoWayVideo ) + { + MUS_LOG( "mus: [MUSSRV] UseCase MultimediaSharing::EMusTwoWayVideo" ); + aUseCase = MultimediaSharing::EMusTwoWayVideo; + } + ) + if ( error == KErrNoMemory ) + { + User::Leave( error ); + } // set use case property - SetPropertyL( NMusSessionApi::KUseCase, - ( TInt ) aUseCase ); + SetPropertyL( NMusSessionApi::KUseCase, ( TInt ) aUseCase ); WriteSessionPropertiesL( aStatus, aSessionParameters ); @@ -257,14 +271,24 @@ SetPropertyL( NMusSessionApi::KContactName, aSessionParameters.MdcaPoint( KContactName ) ); - // set status property - SetStatusL( aStatus ); + // fast mode + TInt fastMode; + User::LeaveIfError( RProperty::Get( NMusSessionApi::KCategoryUid, + NMusSessionApi::KFastMode, + fastMode ) ); + if ( fastMode != MusSettingsKeys::EFastModeDisabled ) + { + lex.Assign( aSessionParameters.MdcaPoint( KFastMode ) ); + lex.Val( val ); + SetPropertyL( NMusSessionApi::KFastMode, val ); + } + else + { + MUS_LOG( "mus: [MUSSRV] fast mode disabled, do not update it" ); + } - // set privacy property - lex.Assign( aSessionParameters.MdcaPoint( KPrivacyStatus ) ); - lex.Val( val ); - - SetPropertyL( NMusSessionApi::KPrivacyStatus, val ); + // set status property + SetStatusL( aStatus ); MUS_LOG( "mus: [MUSSRV] <- \ CMusApplicationManager::WriteSessionPropertiesL()" ); @@ -368,15 +392,97 @@ MUS_LOG( "mus: [MUSSRV] <- CMusApplicationManager::SetPropertyL()" ); } +// ----------------------------------------------------------------------------- +// Reads the callprovider description from the PS key +// return aProvider will have the proper callprovider name. +// ----------------------------------------------------------------------------- +// +void CMusApplicationManager::CallProviderL(TDes8& aProvider) + { + MUS_LOG( "mus: [MUSSRV] -> CMusApplicationManager::CallProviderL"); + const TInt KMusMgrMaxPluginNameLen = 256; + TBuf pluginName; + + User::LeaveIfError(RProperty::Get( + NMusSessionInformationApi::KCategoryUid, + NMusSessionInformationApi::KMUSCallProvider, + pluginName )); + User::LeaveIfError( + CnvUtfConverter::ConvertFromUnicodeToUtf8( aProvider, pluginName )); + + MUS_LOG( "mus: [MUSSRV] <- CMusApplicationManager::CallProviderL"); + } // ----------------------------------------------------------------------------- -// +// Resolves name of the ecom plugin which implements the livecomms engine api +// by using the callprovider // ----------------------------------------------------------------------------- // -TApaTask CMusApplicationManager::GetApaTask() +void CMusApplicationManager::ResolvePluginNameL(TDes8& aPluginName) { - MUS_LOG( "mus: [MUSSRV] <> CMusApplicationManager::GetApaTask()" ); - TUid appUid; - appUid.iUid = KMusUiUid; - return TApaTaskList( iWsSession ).FindApp( appUid ); + MUS_LOG( "mus: [MUSSRV] -> CMusApplicationManager::ResolvePluginNameL"); + + TBuf8 providerName ; + + // Read the call provider name + CallProviderL( providerName ); + + RImplInfoPtrArray pluginArray; + MusCleanupResetAndDestroy::PushL( pluginArray ); + + TEComResolverParams resolverParams; + + resolverParams.SetDataType ( providerName ); + resolverParams.SetWildcardMatch (ETrue); + + // Use default plugin even if listing fails + TRAPD( err, + REComSession::ListImplementationsL(KLcEngineInterfaceUid, resolverParams, pluginArray) ); + MUS_LOG1( "mus: [MUSSRV] List implementations compl:%d", err ); + if ( err == KErrNoMemory ) + { + User::Leave( err ); + } + + if( pluginArray.Count() > 0 ) + { + CImplementationInformation* info = pluginArray[ 0 ]; + __ASSERT_ALWAYS( aPluginName.MaxLength() >= info->DataType().Length(), + User::Leave( KErrArgument ) ); + aPluginName.Copy( info->DataType() ); + } + else + { + __ASSERT_ALWAYS( aPluginName.MaxLength() >= KDefaultEngineName().Length(), + User::Leave( KErrArgument ) ); + aPluginName.Copy( KDefaultEngineName() ); + } + CleanupStack::PopAndDestroy();//pluginArray + MUS_LOG( "mus: [MUSSRV] <- CMusApplicationManager::ResolvePluginNameL"); } + +// ----------------------------------------------------------------------------- +// Creates command line used when starting application. +// ----------------------------------------------------------------------------- +// +HBufC* CMusApplicationManager::CreateCommandLineArgsLC() + { + MUS_LOG( "mus: [MUSSRV] -> CMusApplicationManager::CreateCommandLineLC"); + + TBuf8 pluginNameUtf8; + ResolvePluginNameL( pluginNameUtf8 ); + + MUS_LOG_TDESC8( "mus: [MUSSRV] Plugin name:", pluginNameUtf8 ); + + HBufC* commandLineArgs = HBufC::NewLC( KMusMgrMaxPluginNameLen ); + TPtr commandLineArgsPtr( commandLineArgs->Des() ); + User::LeaveIfError( + CnvUtfConverter::ConvertToUnicodeFromUtf8( + commandLineArgsPtr, pluginNameUtf8 ) ); + + MUS_LOG_TDESC( "mus: [MUSSRV] <- command line args:", commandLineArgsPtr ); + + return commandLineArgs; + } + +// End of File diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshmanagersrv/src/musavailabilitypluginmanager.cpp --- a/mmsharing/mmshmanagersrv/src/musavailabilitypluginmanager.cpp Thu Aug 19 09:51:39 2010 +0300 +++ b/mmsharing/mmshmanagersrv/src/musavailabilitypluginmanager.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -33,6 +33,10 @@ // CONSTANTS +// Max number of digits in unsigned 32 bit integer (TInt32) +const TUint KMaxInt32Length = 16; + + using namespace MultimediaSharing; // ----------------------------------------------------------------------------- @@ -175,6 +179,21 @@ // // ----------------------------------------------------------------------------- // +void CMusAvailabilityPluginManager::PrepareForReceivedInviteL() + { + MUS_LOG( "mus: [MUSSRV] -> CMusAvailabilityPluginManager::\ + PrepareForReceivedInviteL()" ) + + iPlugin->PrepareForReceivedInviteL(); + + MUS_LOG( "mus: [MUSSRV] <- CMusAvailabilityPluginManager::\ + PrepareForReceivedInviteL()" ) + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// void CMusAvailabilityPluginManager::InvitationReceivedL() { MUS_LOG( "mus: [MUSSRV] -> CMusAvailabilityPluginManager::\ @@ -268,10 +287,34 @@ MMusAvaSettings& settings = iPlugin->Settings(); MUS_LOG( "mus: [MUSSRV] Status available" ) - - settings.SetManualActivation( MMusAvaSettings::EActivationAllowed ); - iPlugin->StartL(); - + if( !iIndicator ) + { + MUS_LOG( "mus: [MUSSRV] Create indicator" ) + iIndicator = CMusIndicatorApi::NewL( *this ); + if( iIndicator->ConfirmationQueryL( CMusIndicatorApi::EVsRoamingActivationQuery ) ) + { + settings.SetManualActivation( MMusAvaSettings::EActivationAllowed ); + iPlugin->StartL(); + } + else + { + settings.SetManualActivation( MMusAvaSettings::EActivationNotAllowed ); + } + delete iIndicator; + iIndicator = NULL; + } + else + { + if( iIndicator->ConfirmationQueryL( CMusIndicatorApi::EVsRoamingActivationQuery ) ) + { + settings.SetManualActivation( MMusAvaSettings::EActivationAllowed ); + iPlugin->StartL(); + } + else + { + settings.SetManualActivation( MMusAvaSettings::EActivationNotAllowed ); + } + } MUS_LOG( "mus: [MUSSRV] <- CMusAvailabilityPluginManager::\ ManualQueryL()" ) } @@ -306,21 +349,6 @@ AvailabilityChanged()" ) } - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// - void CMusAvailabilityPluginManager::AvailabilitiesAbleToShowIndicator() - { - TInt err = 0; - TRAP( err, IndicateAvailabilityL() ); - if ( err ) - { - // Not sure about what to do. Very rare situation. - MUS_LOG1( "mus: [MUSSRV] AvailabilitiesAbleToShowIndicator() leave code: %d",err ) - } - } // ----------------------------------------------------------------------------- // // ----------------------------------------------------------------------------- @@ -350,7 +378,7 @@ } // ----------------------------------------------------------------------------- -// +// From MMusAvaSettingsObserver // ----------------------------------------------------------------------------- // MMusAvaSettingsObserver::TApplicationState CMusAvailabilityPluginManager:: @@ -374,7 +402,7 @@ } // ----------------------------------------------------------------------------- -// +// From MMusAvaSettingsObserver // ----------------------------------------------------------------------------- // TBool CMusAvailabilityPluginManager::OptionAllowed() @@ -389,13 +417,23 @@ } // ----------------------------------------------------------------------------- +// From MMusAvaSettingsObserver +// ----------------------------------------------------------------------------- +// +void CMusAvailabilityPluginManager::StartApplicationL( + MultimediaSharing::TMusUseCase aUseCase ) + { + iObserver.StartSharingWithUseCaseL( aUseCase ); + } + +// ----------------------------------------------------------------------------- // From MMusIndicatorObserver. // Starts live video sharing. // ----------------------------------------------------------------------------- // void CMusAvailabilityPluginManager::StartLiveSharingL() { - iObserver.StartLiveSharingL(); + iObserver.StartSharingWithUseCaseL( MultimediaSharing::EMusLiveVideo ); } // ----------------------------------------------------------------------------- @@ -575,22 +613,17 @@ // append sip address proposal iSessionParameters->AppendL( settings.SipAddressProposal() ); - // Unsafe Magic number 16 is used but unsigned 32 bit integer (TInt32) - // can't go beyond 16 digits . - TBuf<16> contactIdBuf; + TBuf contactIdBuf; contactIdBuf.Num( settings.ContactId() ); // append contact id iSessionParameters->AppendL( contactIdBuf ); - // append video codec HBufC* videoCodecs = VideoCodecsLC(); iSessionParameters->AppendL( *videoCodecs ); CleanupStack::PopAndDestroy( videoCodecs ); - // Unsafe Magic number 16 is used but unsigned 32 bit integer (TInt32) - // can't go beyond 16 digits . - TBuf<16> sipProfileIdBuf; + TBuf sipProfileIdBuf; sipProfileIdBuf.Num( settings.SipProfileId() ); MUS_LOG1("iSessionParameters -> SIP Profile ID = %d ", @@ -602,15 +635,15 @@ HBufC* contactName = ContactNameLC(); iSessionParameters->AppendL( *contactName ); CleanupStack::PopAndDestroy( contactName ); + + TBuf fastModeBuf; + fastModeBuf.Num( settings.FastMode() ); + MUS_LOG1("iSessionParameters -> fast mode = %d ", + settings.FastMode() ) + + // append fast mode + iSessionParameters->AppendL( fastModeBuf ); - // append call privacy indication - MUS_LOG1("iSessionParameters -> Call Privacy = %d ", - settings.CallPrivacy() ) - TBuf<16> callPrivacy; - callPrivacy.Num( settings.CallPrivacy() ); - iSessionParameters->AppendL( callPrivacy ); - - MUS_LOG( "mus: [MUSSRV] <- CMusAvailabilityPluginManager::\ UpdateSessionParametersL()" ) } @@ -762,8 +795,8 @@ { MUS_LOG( "mus: [MUSSRV] Create indicator" ) iIndicator = CMusIndicatorApi::NewL( *this ); + iIndicator->IndicateAvailabilityL(); } - iIndicator->IndicateAvailabilityL(); iApplicationManager.SetIndicatorStatusL( ETrue ); } else diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshmanagersrv/src/musmanagerserverclosetimer.cpp --- a/mmsharing/mmshmanagersrv/src/musmanagerserverclosetimer.cpp Thu Aug 19 09:51:39 2010 +0300 +++ b/mmsharing/mmshmanagersrv/src/musmanagerserverclosetimer.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -101,18 +101,6 @@ CActiveScheduler::Stop(); } -// ------------------------------------------------------------------------- -// If RunL() leaves,It should be handled here. -// ------------------------------------------------------------------------- -// -TInt CMusManagerServerCloseTimer::RunError( TInt aError ) - { - // Nothing can be done here. - aError = KErrNone; - - return aError; - } - // ---------------------------------------------------------------------------- // CMusManagerServerCloseTimer::DoCancel // ---------------------------------------------------------------------------- diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshmanagersrv/src/musmanagerservercore.cpp --- a/mmsharing/mmshmanagersrv/src/musmanagerservercore.cpp Thu Aug 19 09:51:39 2010 +0300 +++ b/mmsharing/mmshmanagersrv/src/musmanagerservercore.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -25,10 +25,13 @@ #include "muslogger.h" #include "musmanagerservercoreobserver.h" #include "musmanager.h" +#include "musmanagerservercommon.h" using namespace MultimediaSharing; // CONSTANTS +_LIT8( KMusEngineName, "MultimediaSharing" ); + // ----------------------------------------------------------------------------- // CMusManagerServerCore::NewL @@ -81,6 +84,8 @@ iApplicationManager = CMusApplicationManager::NewL(); + iApplicationManager->ResolvePluginNameL( iPluginName ); + iPluginManager = CMusAvailabilityPluginManager::NewL( *this, *iApplicationManager ); MUS_LOG( "mus: [MUSSRV] <- CMusManagerServerCore::ConstructL" ); @@ -115,7 +120,7 @@ { MUS_LOG( "mus: [MUSSRV] -> CMusManagerServerCore::AvailabilityQueryL" ); MultimediaSharing::TMusAvailabilityStatus status - = iPluginManager->Availability(); + = Availability(); MUS_LOG( "mus: [MUSSRV] <- CMusManagerServerCore::AvailabilityQueryL" ); return status; @@ -127,7 +132,8 @@ void CMusManagerServerCore::CommandL( MultimediaSharing::TCommandType aCommandType ) { MUS_LOG( "mus: [MUSSRV] -> CMusManagerServerCore::CommandL" ); - if ( aCommandType == MultimediaSharing::ECommandManualActivation ) + if ( aCommandType == MultimediaSharing::ECommandManualActivation && + IsMusEnginePlugin() ) { MUS_LOG( "mus: [MUSSRV] Manual Activation is started" ) iPluginManager->ManualQueryL(); @@ -142,7 +148,10 @@ void CMusManagerServerCore::InvestigateAvailabilityL() { MUS_LOG( "mus: [MUSSRV] -> CMusManagerServerCore::InvestigateAvailabilityL" ); - iPluginManager->InvestigateAvailabilityL(); + if ( IsMusEnginePlugin() ) + { + iPluginManager->InvestigateAvailabilityL(); + } MUS_LOG( "mus: [MUSSRV] <- CMusManagerServerCore::InvestigateAvailabilityL" ); } @@ -157,23 +166,41 @@ TInt uid = aChannelId.iUid; if( uid == CMusManager::ESipInviteDesired && - iPluginManager->ApplicationAllowed() ) - { + ApplicationAllowed() ) + { + PrepareForReceivedInviteL(); + // write session boundary values - iApplicationManager->WriteSessionPropertiesL( - MultimediaSharing::EMusReceive, - iPluginManager->Availability(), - iPluginManager->SessionParametersL() ); + WriteSessionPropertiesL( + MultimediaSharing::EMusReceive, + Availability(), + iPluginManager->SessionParametersL() ); iApplicationManager->StartApplicationL(); } - else if( uid == CMusManager::ESipInviteNotDesired ) + else if( uid == CMusManager::ESipInviteDesired2WayVideo && + ApplicationAllowed() ) { - iPluginManager->InvitationReceivedL(); + PrepareForReceivedInviteL(); + + // write session boundary values + WriteSessionPropertiesL( + MultimediaSharing::EMusReceiveTwoWayVideo, + Availability(), + iPluginManager->SessionParametersL() ); + + iApplicationManager->StartApplicationL(); } - else + else if ( IsMusEnginePlugin() ) { - User::Leave( KErrNotReady ); + if( uid == CMusManager::ESipInviteNotDesired ) + { + iPluginManager->InvitationReceivedL(); + } + else + { + User::Leave( KErrNotReady ); + } } MUS_LOG( "mus: [MUSSRV] <- CMusManagerServerCore::InvitationReceivedL" ); @@ -186,7 +213,10 @@ void CMusManagerServerCore::OptionsReceivedL( TUid /*aChannelId*/ ) { MUS_LOG( "mus: [MUSSRV] -> CMusManagerServerCore::OptionsReceivedL" ); - iPluginManager->OptionsReceivedL(); + if ( IsMusEnginePlugin() ) + { + iPluginManager->OptionsReceivedL(); + } MUS_LOG( "mus: [MUSSRV] <- CMusManagerServerCore::OptionsReceivedL" ); } @@ -198,13 +228,13 @@ { MUS_LOG( "mus: [MUSSRV] -> CMusManagerServerCore::StartMultimediaSharingL" ); if( !iApplicationManager->ApplicationRunning() && - iPluginManager->ApplicationAllowed() ) + ApplicationAllowed() ) { // write session boundary values - iApplicationManager->WriteSessionPropertiesL( - aUseCase, - iPluginManager->Availability(), - iPluginManager->SessionParametersL() ); + WriteSessionPropertiesL( + aUseCase, + Availability(), + iPluginManager->SessionParametersL() ); // start actual application iApplicationManager->StartApplicationL(); @@ -234,10 +264,13 @@ void CMusManagerServerCore::EventNoSessions() { MUS_LOG( "mus: [MUSSRV] -> CMusManagerServerCore::EventNoSessions" ); - TRAPD( error, iPluginManager->StopPluginL() ); - if( error ) + if ( IsMusEnginePlugin() ) { - // iObserver.StopServer(); + TRAPD( error, iPluginManager->StopPluginL() ); + if( error ) + { + // iObserver.StopServer(); + } } iObserver.StopServer(); MUS_LOG( "mus: [MUSSRV] <- CMusManagerServerCore::EventNoSessions" ); @@ -266,11 +299,18 @@ { MUS_LOG1( "mus: [MUSSRV] -> CMusManagerServerCore::AvailabilityChangedL( %d )", aAvailability ); + + if ( !IsMusEnginePlugin() ) + { + MUS_LOG( "mus: [MUSSRV] <- CMusManagerServerCore::AvailabilityChangedL - \ + non-MuS plugin"); + return; + } // inform ui via application manager (via session api) - iApplicationManager->WriteSessionPropertiesL( - aAvailability, - iPluginManager->SessionParametersL() ); + WriteSessionPropertiesL( + aAvailability, + iPluginManager->SessionParametersL() ); if( iAvailabilityMonitors.Count() ) { @@ -337,9 +377,15 @@ // Starts live video sharing. // ----------------------------------------------------------------------------- // -void CMusManagerServerCore::StartLiveSharingL() +void CMusManagerServerCore::StartSharingWithUseCaseL( + MultimediaSharing::TMusUseCase aUseCase ) { - StartMultimediaSharingL( MultimediaSharing::EMusLiveVideo ); + MUS_LOG1( "mus: [MUSSRV] -> CMusManagerServerCore::StartSharingWithUseCaseL:%d", + aUseCase ); + + StartMultimediaSharingL( aUseCase ); + + MUS_LOG( "mus: [MUSSRV] <- CMusManagerServerCore::StartSharingWithUseCaseL" ); } // ----------------------------------------------------------------------------- @@ -357,4 +403,99 @@ } } +// ----------------------------------------------------------------------------- +// CMusManagerServerCore::IsMusEnginePlugin +// ----------------------------------------------------------------------------- +// +TBool CMusManagerServerCore::IsMusEnginePlugin() + { + TBool isMus( EFalse ); + if ( !iPluginName.Compare( KMusEngineName ) ) + { + isMus = ETrue; + } + return isMus; + } + +// ----------------------------------------------------------------------------- +// CMusManagerServerCore::Availability +// ----------------------------------------------------------------------------- +// +MultimediaSharing::TMusAvailabilityStatus CMusManagerServerCore::Availability() + { + MUS_LOG( "mus: [MUSSRV] -> CMusManagerServerCore::Availability" ); + if ( IsMusEnginePlugin() ) + { + MUS_LOG( "mus: [MUSSRV] <- CMusManagerServerCore::Availability - MuS plugin" ); + return iPluginManager->Availability(); + } + else + { + MUS_LOG( "mus: [MUSSRV] <- CMusManagerServerCore::Availability - non-MuS plugin" ); + return EMultimediaSharingAvailable; + } + } + +// ----------------------------------------------------------------------------- +// CMusManagerServerCore::ApplicationAllowed +// ----------------------------------------------------------------------------- +// +TBool CMusManagerServerCore::ApplicationAllowed() + { + if ( IsMusEnginePlugin() ) + { + return iPluginManager->ApplicationAllowed(); + } + else + { + return ETrue; + } + } + +// ----------------------------------------------------------------------------- +// CMusManagerServerCore::PrepareForReceivedInviteL +// ----------------------------------------------------------------------------- +// +void CMusManagerServerCore::PrepareForReceivedInviteL() + { + if ( IsMusEnginePlugin() ) + { + iPluginManager->PrepareForReceivedInviteL(); + } + } + +// ----------------------------------------------------------------------------- +// CMusManagerServerCore::WriteSessionPropertiesL +// ----------------------------------------------------------------------------- +// +void CMusManagerServerCore::WriteSessionPropertiesL( + MultimediaSharing::TMusUseCase aUseCase, + MultimediaSharing::TMusAvailabilityStatus aStatus, + MDesCArray& aSessionParameters ) + { + if ( IsMusEnginePlugin() ) + { + iApplicationManager->WriteSessionPropertiesL( + aUseCase, + aStatus, + aSessionParameters ); + } + } + +// ----------------------------------------------------------------------------- +// CMusManagerServerCore::WriteSessionPropertiesL +// ----------------------------------------------------------------------------- +// +void CMusManagerServerCore::WriteSessionPropertiesL( + MultimediaSharing::TMusAvailabilityStatus aStatus, + MDesCArray& aSessionParameters ) + { + if ( IsMusEnginePlugin() ) + { + iApplicationManager->WriteSessionPropertiesL( + aStatus, + aSessionParameters ); + } + } + // End of File diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshmanagersrv/tsrc/ut_managersrv/BWINS/ut_musmanagerserveru.def --- a/mmsharing/mmshmanagersrv/tsrc/ut_managersrv/BWINS/ut_musmanagerserveru.def Thu Aug 19 09:51:39 2010 +0300 +++ b/mmsharing/mmshmanagersrv/tsrc/ut_managersrv/BWINS/ut_musmanagerserveru.def Tue Aug 31 15:12:07 2010 +0300 @@ -1,36 +1,3 @@ EXPORTS - ?CreateTestSuiteL@@YAPAVMEUnitTest@@XZ @ 1 NONAME ; class MEUnitTest * __cdecl CreateTestSuiteL(void) - ?KillTask@TApaTask@@QAEXXZ @ 2 NONAME ; void TApaTask::KillTask(void) - ?Complete@RMessagePtr2@@QBEXH@Z @ 3 NONAME ; void RMessagePtr2::Complete(int) const - ?FindApp@TApaTaskList@@QAE?AVTApaTask@@VTUid@@@Z @ 4 NONAME ; class TApaTask TApaTaskList::FindApp(class TUid) - ?ReStart@CServer2@@QAEXXZ @ 5 NONAME ; void CServer2::ReStart(void) - ?ListImplementationsL@REComSession@@SAXVTUid@@AAV?$RPointerArray@VCImplementationInformation@@@@@Z @ 6 NONAME ; void REComSession::ListImplementationsL(class TUid, class RPointerArray &) - ?Connect@RApaLsSession@@QAEHXZ @ 7 NONAME ; int RApaLsSession::Connect(void) - ?StartDocument@RApaLsSession@@QAEHABVTDesC16@@VTUid@@AAVTThreadId@@W4TLaunchType@1@@Z @ 8 NONAME ; int RApaLsSession::StartDocument(class TDesC16 const &, class TUid, class TThreadId &, enum RApaLsSession::TLaunchType) - ?Client@RMessagePtr2@@QBEHAAVRThread@@W4TOwnerType@@@Z @ 9 NONAME ; int RMessagePtr2::Client(class RThread &, enum TOwnerType) const - ?Exists@TApaTask@@QAEHXZ @ 10 NONAME ; int TApaTask::Exists(void) - ?NewLC@CApaCommandLine@@SAPAV1@XZ @ 11 NONAME ; class CApaCommandLine * CApaCommandLine::NewLC(void) - ??0TApaTask@@QAE@AAVRWsSession@@@Z @ 12 NONAME ; TApaTask::TApaTask(class RWsSession &) - ?DestroyedImplementation@REComSession@@SAXVTUid@@@Z @ 13 NONAME ; void REComSession::DestroyedImplementation(class TUid) - ?GetAppInfo@RApaLsSession@@QBEHAAVTApaAppInfo@@VTUid@@@Z @ 14 NONAME ; int RApaLsSession::GetAppInfo(class TApaAppInfo &, class TUid) const - ?CreateImplementationL@REComSession@@SAPAXVTUid@@J@Z @ 15 NONAME ; void * REComSession::CreateImplementationL(class TUid, long) - ?Install@CActiveScheduler@@SAXPAV1@@Z @ 16 NONAME ; void CActiveScheduler::Install(class CActiveScheduler *) - ??0RApaLsSession@@QAE@XZ @ 17 NONAME ; RApaLsSession::RApaLsSession(void) - ?FindApp@TApaTaskList@@QAE?AVTApaTask@@ABVTDesC16@@@Z @ 18 NONAME ; class TApaTask TApaTaskList::FindApp(class TDesC16 const &) - ?StartApp@RApaLsSession@@QAEHABVCApaCommandLine@@AAVTThreadId@@@Z @ 19 NONAME ; int RApaLsSession::StartApp(class CApaCommandLine const &, class TThreadId &) - ?StartApp@RApaLsSession@@QAEHABVCApaCommandLine@@AAVTThreadId@@PAVTRequestStatus@@@Z @ 20 NONAME ; int RApaLsSession::StartApp(class CApaCommandLine const &, class TThreadId &, class TRequestStatus *) - ??0TApaTaskList@@QAE@AAVRWsSession@@@Z @ 21 NONAME ; TApaTaskList::TApaTaskList(class RWsSession &) - ?FindDoc@TApaTaskList@@QAE?AVTApaTask@@ABVTDesC16@@@Z @ 22 NONAME ; class TApaTask TApaTaskList::FindDoc(class TDesC16 const &) - ?SetExecutableNameL@CApaCommandLine@@QAEXABVTDesC16@@@Z @ 23 NONAME ; void CApaCommandLine::SetExecutableNameL(class TDesC16 const &) - ?RequestComplete@RThread@@QBEXAAPAVTRequestStatus@@H@Z @ 24 NONAME ; void RThread::RequestComplete(class TRequestStatus * &, int) const - ?Version@RApaLsSession@@QBE?AVTVersion@@XZ @ 25 NONAME ; class TVersion RApaLsSession::Version(void) const - ?BringToForeground@TApaTask@@QAEXXZ @ 26 NONAME ; void TApaTask::BringToForeground(void) - ?EndTask@TApaTask@@QAEXXZ @ 27 NONAME ; void TApaTask::EndTask(void) - ?SendToBackground@TApaTask@@QAEXXZ @ 28 NONAME ; void TApaTask::SendToBackground(void) - ?WriteL@RMessagePtr2@@QBEXHABVTDesC8@@H@Z @ 29 NONAME ; void RMessagePtr2::WriteL(int, class TDesC8 const &, int) const - ?ReadL@RMessagePtr2@@QBEXHAAVTDes8@@H@Z @ 30 NONAME ; void RMessagePtr2::ReadL(int, class TDes8 &, int) const - ?StartApp@RApaLsSession@@QAEHABVCApaCommandLine@@@Z @ 31 NONAME ; int RApaLsSession::StartApp(class CApaCommandLine const &) - ?GetDesMaxLength@RMessagePtr2@@QBEHH@Z @ 32 NONAME ; int RMessagePtr2::GetDesMaxLength(int) const - ?FindByPos@TApaTaskList@@QAE?AVTApaTask@@H@Z @ 33 NONAME ; class TApaTask TApaTaskList::FindByPos(int) - ?Close@RApaLsSession@@QAEXXZ @ 34 NONAME ; void RApaLsSession::Close(void) + ?CreateTestSuiteL@@YAPAVMEUnitTest@@XZ @ 1 NONAME ; class MEUnitTest * CreateTestSuiteL(void) diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshmanagersrv/tsrc/ut_managersrv/EABI/ut_musmanagerserveru.def --- a/mmsharing/mmshmanagersrv/tsrc/ut_managersrv/EABI/ut_musmanagerserveru.def Thu Aug 19 09:51:39 2010 +0300 +++ b/mmsharing/mmshmanagersrv/tsrc/ut_managersrv/EABI/ut_musmanagerserveru.def Tue Aug 31 15:12:07 2010 +0300 @@ -1,19 +1,4 @@ EXPORTS _Z16CreateTestSuiteLv @ 1 NONAME - _ZTI16CMusAvaSettings2 @ 2 NONAME ; ## - _ZTI17CMusAvaInterface2 @ 3 NONAME ; ## - _ZTI17CMusManagerServer @ 4 NONAME ; ## - _ZTI21CMusManagerServerCore @ 5 NONAME ; ## - _ZTI22CMusApplicationManager @ 6 NONAME ; ## - _ZTI24CMusManagerServerSession @ 7 NONAME ; ## - _ZTI27CMusManagerServerCloseTimer @ 8 NONAME ; ## - _ZTI29CMusAvailabilityPluginManager @ 9 NONAME ; ## - _ZTV16CMusAvaSettings2 @ 10 NONAME ; ## - _ZTV17CMusAvaInterface2 @ 11 NONAME ; ## - _ZTV17CMusManagerServer @ 12 NONAME ; ## - _ZTV21CMusManagerServerCore @ 13 NONAME ; ## - _ZTV22CMusApplicationManager @ 14 NONAME ; ## - _ZTV24CMusManagerServerSession @ 15 NONAME ; ## - _ZTV27CMusManagerServerCloseTimer @ 16 NONAME ; ## - _ZTV29CMusAvailabilityPluginManager @ 17 NONAME ; ## + diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshmanagersrv/tsrc/ut_managersrv/group/bld.inf --- a/mmsharing/mmshmanagersrv/tsrc/ut_managersrv/group/bld.inf Thu Aug 19 09:51:39 2010 +0300 +++ b/mmsharing/mmshmanagersrv/tsrc/ut_managersrv/group/bld.inf Tue Aug 31 15:12:07 2010 +0300 @@ -15,6 +15,6 @@ * */ - -PRJ_TESTMMPFILES +PRJ_MMPFILES +../../../../mmshindicator/group/musindicator.mmp ut_musmanagerserver.mmp \ No newline at end of file diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshmanagersrv/tsrc/ut_managersrv/group/ut_musmanagerserver.mmp --- a/mmsharing/mmshmanagersrv/tsrc/ut_managersrv/group/ut_musmanagerserver.mmp Thu Aug 19 09:51:39 2010 +0300 +++ b/mmsharing/mmshmanagersrv/tsrc/ut_managersrv/group/ut_musmanagerserver.mmp Tue Aug 31 15:12:07 2010 +0300 @@ -17,7 +17,7 @@ #include -#include +#include TARGET ut_musmanagerserver.dll TARGETTYPE dll @@ -25,7 +25,7 @@ TARGETPATH /DigiaEUnit/Tests UID 0x1000af5a 0x01700000 -CAPABILITY EUNIT_CAPS +CAPABILITY EUNIT_CAPS VENDORID VID_DEFAULT MACRO UNIT_TESTING @@ -33,10 +33,8 @@ SOURCEPATH ../../../../../tsrc/propertystub/src SOURCE e32property.cpp -SOURCEPATH ../../../../../tsrc/apastub/src -SOURCE apgtask.cpp -SOURCE apgcli.cpp -SOURCE apacmdln.cpp +SOURCEPATH ../../../../../tsrc/multimediasharingsettingsstub/src +SOURCE mussettings.cpp SOURCEPATH ../../../../../tsrc/mmusavasettingsstub/src SOURCE mmusavasettingsstub.cpp @@ -52,9 +50,10 @@ SOURCEPATH ../../../../mmshavailability/src -SOURCE musavasettingsimp.cpp +SOURCE musavasettingsimp.cpp SOURCEPATH ../src +SOURCE stubs.cpp SOURCE ut_cmusapplicationmanager.cpp SOURCE ut_cmusavailabilitypluginmanager.cpp SOURCE ut_cmusmanagerserverclosetimer.cpp @@ -73,6 +72,7 @@ SOURCE musmanagerservermain.cpp SOURCE musmanagerserversession.cpp +USERINCLUDE ../../../../../tsrc/multimediasharingsettingsstub/inc USERINCLUDE ../inc USERINCLUDE ../../../../mmshavailability/inc USERINCLUDE ../../../inc @@ -101,4 +101,5 @@ LIBRARY ws32.lib LIBRARY flogger.lib LIBRARY bafl.lib +LIBRARY charconv.lib diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshmanagersrv/tsrc/ut_managersrv/group/ut_musmanagerserver.pkg --- a/mmsharing/mmshmanagersrv/tsrc/ut_managersrv/group/ut_musmanagerserver.pkg Thu Aug 19 09:51:39 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,32 +0,0 @@ -; -; Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). -; All rights reserved. -; This component and the accompanying materials are made available -; under the terms of "Eclipse Public License v1.0" -; which accompanies this distribution, and is available -; at the URL "http://www.eclipse.org/legal/epl-v10.html". -; -; Initial Contributors: -; Nokia Corporation - initial contribution. -; -; Contributors: -; -; Description: -; - -;Languages -&EN - -;Header -#{"EUnit: MMSHMgrSRV"},(0x01700000),1,0,0 - -(0x101F7961), 0, 0, 0, {"Series60ProductID"} - -;Localised Vendor name -%{"Nokia"} - -;Unique vendor name -:"Nokia" - -;DLL files -"\epoc32\release\armv5\urel\ut_musmanagerserver.dll"-"c:\sys\bin\ut_musmanagerserver.dll" diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshmanagersrv/tsrc/ut_managersrv/inc/ut_cmusapplicationmanager.h --- a/mmsharing/mmshmanagersrv/tsrc/ut_managersrv/inc/ut_cmusapplicationmanager.h Thu Aug 19 09:51:39 2010 +0300 +++ b/mmsharing/mmshmanagersrv/tsrc/ut_managersrv/inc/ut_cmusapplicationmanager.h Tue Aug 31 15:12:07 2010 +0300 @@ -75,9 +75,11 @@ void UT_CMusApplicationManager_WriteSessionPropertiesL(); void UT_CMusApplicationManager_SetPropertyLL(); void UT_CMusApplicationManager_SetPropertyL2L(); - void UT_CMusApplicationManager_GetApaTaskL(); void UT_CMusApplicationManager_MapAvailabilitiesL(); void UT_CMusApplicationManager_SetStatusLL(); + void UT_CMusApplicationManager_CallProviderLL(); + void UT_CMusApplicationManager_ResolvePluginNameLL(); + void UT_CMusApplicationManager_CreateCommandLineArgsLCL(); private: // data diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshmanagersrv/tsrc/ut_managersrv/inc/ut_cmusavailabilitypluginmanager.h --- a/mmsharing/mmshmanagersrv/tsrc/ut_managersrv/inc/ut_cmusavailabilitypluginmanager.h Thu Aug 19 09:51:39 2010 +0300 +++ b/mmsharing/mmshmanagersrv/tsrc/ut_managersrv/inc/ut_cmusavailabilitypluginmanager.h Tue Aug 31 15:12:07 2010 +0300 @@ -77,7 +77,7 @@ * * @since S60 v3.2 */ - virtual void StartLiveSharingL(); + virtual void StartSharingWithUseCaseL( MultimediaSharing::TMusUseCase aUseCase ); private: @@ -115,6 +115,7 @@ void UT_CMusAvailabilityPluginManager_TelNumberLCL(); void UT_CMusAvailabilityPluginManager_ContactNameLCL(); void UT_CMusAvailabilityPluginManager_IndicateAvailabilityLL(); + void UT_CMusAvailabilityPluginManager_PrepareForReceivedInviteLL(); private: // data diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshmanagersrv/tsrc/ut_managersrv/inc/ut_cmusmanagerservercore.h --- a/mmsharing/mmshmanagersrv/tsrc/ut_managersrv/inc/ut_cmusmanagerservercore.h Thu Aug 19 09:51:39 2010 +0300 +++ b/mmsharing/mmshmanagersrv/tsrc/ut_managersrv/inc/ut_cmusmanagerservercore.h Tue Aug 31 15:12:07 2010 +0300 @@ -109,6 +109,7 @@ void UT_CMusManagerServerCore_AvailabilityChangedLL(); void UT_CMusManagerServerCore_MonitorAvailabilityLL(); void UT_CMusManagerServerCore_RegisterObserverL(); + void UT_CMusManagerServerCore_IsMusEnginePluginL(); private: // data diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshmanagersrv/tsrc/ut_managersrv/src/UT_CMusApplicationManager.cpp --- a/mmsharing/mmshmanagersrv/tsrc/ut_managersrv/src/UT_CMusApplicationManager.cpp Thu Aug 19 09:51:39 2010 +0300 +++ b/mmsharing/mmshmanagersrv/tsrc/ut_managersrv/src/UT_CMusApplicationManager.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -24,6 +24,8 @@ #include "musmanagerservercommon.h" #include "mussessionproperties.h" #include "mustesthelp.h" +#include "mussettings.h" +#include "mussesseioninformationapi.h" #include #include #include @@ -92,7 +94,8 @@ { delete iManager; iManager = NULL; - PropertyHelper::Close(); + PropertyHelper::Close(); + Dll::FreeTls(); // Used by the RProcess and TFindProcess stubs } @@ -106,7 +109,11 @@ void UT_CMusApplicationManager::UT_CMusApplicationManager_NewLL() { EUNIT_ASSERT( iManager ); - EUNIT_ASSERT( iManager->iApaSession.iConnected ); + TInt fastMode; + User::LeaveIfError( RProperty::Get( NMusSessionApi::KCategoryUid, + NMusSessionApi::KFastMode, + fastMode ) ); + EUNIT_ASSERT_EQUALS( TInt( MusSettingsKeys::EFastModeOff ), fastMode ); } @@ -118,7 +125,6 @@ { CMusApplicationManager* manager = CMusApplicationManager::NewLC(); EUNIT_ASSERT( manager ); - EUNIT_ASSERT( manager->iApaSession.iConnected ); CleanupStack::PopAndDestroy( manager ); } @@ -129,12 +135,10 @@ // void UT_CMusApplicationManager::UT_CMusApplicationManager_ApplicationRunningL() { - TApaTask::iApplicationExist = EFalse; - EUNIT_ASSERT( !iManager->ApplicationRunning() ); - EUNIT_ASSERT( TApaTask::iApaTaskCalledFunction == TApaTask::EExists ) - TApaTask::iApplicationExist = ETrue; - EUNIT_ASSERT( iManager->ApplicationRunning() ); - EUNIT_ASSERT( TApaTask::iApaTaskCalledFunction == TApaTask::EExists ) + EUNIT_ASSERT( !iManager->ApplicationRunning() ) + + iManager->StartApplicationL(); + EUNIT_ASSERT( iManager->ApplicationRunning() ) } @@ -145,15 +149,13 @@ // void UT_CMusApplicationManager::UT_CMusApplicationManager_StartApplicationLL() { - TApaTask::iApplicationExist = EFalse; + EUNIT_ASSERT( !iManager->ApplicationRunning() ) iManager->StartApplicationL(); - EUNIT_ASSERT( TApaTask::iApaTaskCalledFunction == TApaTask::EExists ) - EUNIT_ASSERT_EQUALS( PropertyHelper::GetCalledFunction(), RProperty::ENone ) - - TApaTask::iApplicationExist = ETrue; + EUNIT_ASSERT_EQUALS( PropertyHelper::GetCalledFunction(), RProperty::EDefine ) + EUNIT_ASSERT( iManager->ApplicationRunning() ) + iManager->StartApplicationL(); - EUNIT_ASSERT_EQUALS( PropertyHelper::GetCalledFunction(), RProperty::ENone ) - + EUNIT_ASSERT( iManager->ApplicationRunning() ) } @@ -164,16 +166,17 @@ // void UT_CMusApplicationManager::UT_CMusApplicationManager_StopApplicationLL() { - TApaTask::iApplicationExist = EFalse; - iManager->StopApplicationL(); - EUNIT_ASSERT( TApaTask::iApaTaskCalledFunction == TApaTask::EExists ) + // MuS not running + iManager->StopApplicationL(); - - TApaTask::iApplicationExist = ETrue; + // MuS running + User::LeaveIfError( + Dll::SetTls( reinterpret_cast< TAny* >( 1 ) ) ); + // TLS is used by TFindProcess stub iManager->StopApplicationL(); TInt availability = MultimediaSharing::EMultimediaSharingAvailable; - TUint key(NMusSessionApi::KStatus); - RProperty::Get( key,availability); + TUint key( NMusSessionApi::KStatus ); + RProperty::Get( key, availability ); EUNIT_ASSERT_EQUALS( PropertyHelper::GetCalledFunction(), RProperty::EDefine ) EUNIT_ASSERT_EQUALS( availability, MultimediaSharing::EMultimediaSharingNotAvailable ) @@ -181,18 +184,11 @@ // --------------------------------------------------------------------------- -// Asserts that tested method calls TApaTask::Exists and if task exists it -// calls TApaTask::BringToForeground. +// // --------------------------------------------------------------------------- // void UT_CMusApplicationManager::UT_CMusApplicationManager_ShowApplicationLL() { - TApaTask::iApplicationExist = EFalse; - iManager->ShowApplicationL(); - EUNIT_ASSERT( TApaTask::iApaTaskCalledFunction == TApaTask::EExists ) - TApaTask::iApplicationExist = ETrue; - iManager->ShowApplicationL(); - EUNIT_ASSERT( TApaTask::iApaTaskCalledFunction == TApaTask::EBringToForeground ) } @@ -213,7 +209,7 @@ array->AppendL( _L( "e" ) ); array->AppendL( _L( "f" ) ); array->AppendL( _L( "g" ) ); - array->AppendL( _L( "h" ) ); + array->AppendL( _L( "0" ) ); //EFastModeOn iManager->WriteSessionPropertiesL( MultimediaSharing::EMusLiveVideo, @@ -229,7 +225,40 @@ *array ), KErrGeneral ); PropertyHelper::SetErrorCode(KErrNone); + + + MultimediaSharingSettings::iVideoDirection = MusSettingsKeys::ETwoWayVideo; + iManager->WriteSessionPropertiesL( + MultimediaSharing::EMusLiveVideo, + (MultimediaSharing::TMusAvailabilityStatus) KErrNone, + *array ); + + TInt val; + User::LeaveIfError( RProperty::Get( NMusSessionApi::KCategoryUid, + NMusSessionApi::KUseCase, + val ) ); + + MultimediaSharing::TMusUseCase usecase = + static_cast< MultimediaSharing::TMusUseCase >( val ); + + EUNIT_ASSERT( usecase == MultimediaSharing::EMusTwoWayVideo ); + + + //Ensure if fast mode key is "disabled", value from session params + //won't be published + User::LeaveIfError( RProperty::Set( NMusSessionApi::KCategoryUid, + NMusSessionApi::KFastMode, + MusSettingsKeys::EFastModeDisabled ) ); + iManager->WriteSessionPropertiesL( + MultimediaSharing::EMusLiveVideo, + (MultimediaSharing::TMusAvailabilityStatus) KErrNone, + *array ); + User::LeaveIfError( RProperty::Get( NMusSessionApi::KCategoryUid, + NMusSessionApi::KFastMode, + val ) ); + EUNIT_ASSERT_EQUALS( TInt( MusSettingsKeys::EFastModeDisabled ), val ); + CleanupStack::PopAndDestroy( array ); } @@ -276,18 +305,6 @@ // --------------------------------------------------------------------------- -// Asserts that TApaTaskList::FindApp is called by tested method. -// --------------------------------------------------------------------------- -// -void UT_CMusApplicationManager::UT_CMusApplicationManager_GetApaTaskL() - { - TApaTask::iApplicationExist = EFalse; - iManager->GetApaTask(); - EUNIT_ASSERT( TApaTaskList::iCalledFunction == TApaTaskList::EFindApp ) - } - - -// --------------------------------------------------------------------------- // Sets a videosharing status. Asserts that RProperty leaves are passed // correctly to user and RProperty::Define is called. // --------------------------------------------------------------------------- @@ -306,6 +323,114 @@ } +// --------------------------------------------------------------------------- +// CallProviderL Test +// --------------------------------------------------------------------------- +// +void UT_CMusApplicationManager::UT_CMusApplicationManager_CallProviderLL() + { + TInt error = KErrNone; + + // Use Publish & Subscribe Keys to set CallProvider Name + _LIT( KProviderName1, "MultimediaSharing"); + _LIT8( KProviderNameTest1, "MultimediaSharing"); + + _LIT( KProviderNameEmpty1, ""); + _LIT8( KProviderNameEmptyTest1, ""); + + + // Valid Test: + TRAP( error, RProperty::Set( + NMusSessionInformationApi::KCategoryUid, + NMusSessionInformationApi::KMUSCallProvider, + KProviderName1 )); + + if ( error == KErrNoMemory ) User::Leave( error ); + EUNIT_ASSERT ( error == KErrNone ); + + TBuf8 providerName ; + iManager->CallProviderL( providerName ); + + EUNIT_ASSERT( providerName == KProviderNameTest1 ); + + + //Empty Test + TRAP( error, RProperty::Set( + NMusSessionInformationApi::KCategoryUid, + NMusSessionInformationApi::KMUSCallProvider, + KProviderNameEmpty1 )); + + if ( error == KErrNoMemory ) User::Leave( error ); + EUNIT_ASSERT ( error == KErrNone ); + + iManager->CallProviderL( providerName ); + + EUNIT_ASSERT( providerName == KProviderNameEmptyTest1 ); + } + + +// --------------------------------------------------------------------------- +// ResolvePluginName Test +// --------------------------------------------------------------------------- +// +void UT_CMusApplicationManager::UT_CMusApplicationManager_ResolvePluginNameLL() + { + // Default Engine Name to be returned + TInt error = KErrNone; + _LIT( KEngineName, "MultimediaSharing"); + _LIT8( KEngineTestName, "MultimediaSharing"); + + // Test String for the Publish/Subscribe Keys. + _LIT( KProviderName, "MultimediaSharing"); + _LIT( KProviderName1, "CS"); + + TBuf8 engineName ; + + // Use Publish & Subscribe Keys to set Engine Name as + // 1. MultimediaSharing [Exact Name] + // 2. CS [No Match Found, Default MultiMediaSharing will be picked] + + // 1. MultimediaSharing [Exact Name] + + TRAP( error, RProperty::Set( + NMusSessionInformationApi::KCategoryUid, + NMusSessionInformationApi::KMUSCallProvider, + KProviderName )); + + if ( error == KErrNoMemory ) User::Leave( error ); + EUNIT_ASSERT ( error == KErrNone ); + + iManager->ResolvePluginNameL( engineName ); + EUNIT_ASSERT( engineName == KEngineTestName ); + + // 2. CS [No Match Found, Default MultiMediaSharing will be picked] + TRAP( error, RProperty::Set( + NMusSessionInformationApi::KCategoryUid, + NMusSessionInformationApi::KMUSCallProvider, + KProviderName1 )); + + if ( error == KErrNoMemory ) User::Leave( error ); + EUNIT_ASSERT ( error == KErrNone ); + + iManager->ResolvePluginNameL( engineName ); + EUNIT_ASSERT( engineName == KEngineTestName ); + } + +// --------------------------------------------------------------------------- +// Command line arg test +// --------------------------------------------------------------------------- +// +void UT_CMusApplicationManager::UT_CMusApplicationManager_CreateCommandLineArgsLCL() + { + _LIT( KEnginePluginName, "MultimediaSharing" ); + HBufC* cmdLineArgs = iManager->CreateCommandLineArgsLC(); + + EUNIT_ASSERT( cmdLineArgs != NULL ) + EUNIT_ASSERT_EQUALS( KEnginePluginName(), *cmdLineArgs ) + + CleanupStack::PopAndDestroy( cmdLineArgs ); + } + // ======== EUNIT TEST TABLE ======== @@ -378,17 +503,31 @@ SetupL, UT_CMusApplicationManager_SetPropertyL2L, Teardown ) EUNIT_TEST( - "GetApaTask - test ", - "CMusApplicationManager", - "GetApaTask", - "FUNCTIONALITY", - SetupL, UT_CMusApplicationManager_GetApaTaskL, Teardown ) - -EUNIT_TEST( "SetStatusL - test ", "CMusApplicationManager", "SetStatusL", "FUNCTIONALITY", SetupL, UT_CMusApplicationManager_SetStatusLL, Teardown ) +EUNIT_TEST( + "CallProviderL - test ", + "CMusApplicationManager", + "CallProviderL", + "FUNCTIONALITY", + SetupL, UT_CMusApplicationManager_CallProviderLL, Teardown ) + +EUNIT_TEST( + "ResolvePluginNameL - test ", + "CMusApplicationManager", + "ResolvePluginNameL", + "FUNCTIONALITY", + SetupL, UT_CMusApplicationManager_ResolvePluginNameLL, Teardown ) + +EUNIT_TEST( + "CreateCommandLineLC - test ", + "CMusApplicationManager", + "CreateCommandLineLC", + "FUNCTIONALITY", + SetupL, UT_CMusApplicationManager_CreateCommandLineArgsLCL, Teardown ) + EUNIT_END_TEST_TABLE diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshmanagersrv/tsrc/ut_managersrv/src/UT_CMusManagerServerCore.cpp --- a/mmsharing/mmshmanagersrv/tsrc/ut_managersrv/src/UT_CMusManagerServerCore.cpp Thu Aug 19 09:51:39 2010 +0300 +++ b/mmsharing/mmshmanagersrv/tsrc/ut_managersrv/src/UT_CMusManagerServerCore.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -30,6 +30,8 @@ #include #include +_LIT8( KMusEngineName, "MultimediaSharing" ); +_LIT8( KAnotherEngineName, "AnotherEngine" ); // ======== MEMBER FUNCTIONS ======== @@ -118,8 +120,7 @@ iCore = CMusManagerServerCore::NewL( *this ); iStopServerCalled = EFalse; iAvailabilityChangedLCalled = EFalse; - iSessionCount = 0; - TApaTask::iApaTaskCalledFunction = TApaTask::ENone; + iSessionCount = 0; } @@ -130,7 +131,8 @@ void UT_CMusManagerServerCore::Teardown() { delete iCore; - PropertyHelper::Close(); + PropertyHelper::Close(); + Dll::FreeTls(); // Used by the RProcess and TFindProcess stubs } @@ -190,17 +192,32 @@ // void UT_CMusManagerServerCore::UT_CMusManagerServerCore_InvitationReceivedLL() { + // 1. The cases with MuS engine + iCore->iPluginName = KMusEngineName; + TUid uid = { 0x10101010 }; // Not a valid UID in musmanager.h // since used UID is not in appropriate, this should leave EUNIT_ASSERT_SPECIFIC_LEAVE( iCore->InvitationReceivedL( uid ), KErrNotReady ); uid.iUid = 0x1028238D; // ESipInviteNotDesired from musmanager.h - EUNIT_ASSERT_NO_LEAVE( iCore->InvitationReceivedL( uid ) ); + iCore->InvitationReceivedL( uid ); uid.iUid = 0x10282391; // ESipInviteDesired from musmanager.h EUNIT_ASSERT_SPECIFIC_LEAVE( iCore->InvitationReceivedL( uid ), KErrNotReady ); + + // 2. The cases with non-MuS engine + iCore->iPluginName = KAnotherEngineName; + + uid.iUid = 0x10101010; // Not a valid UID in musmanager.h + iCore->InvitationReceivedL( uid ); + + uid.iUid = 0x1028238D; // ESipInviteNotDesired from musmanager.h + iCore->InvitationReceivedL( uid ); + + uid.iUid = 0x10282391; // ESipInviteDesired from musmanager.h + iCore->InvitationReceivedL( uid ); } @@ -211,16 +228,22 @@ void UT_CMusManagerServerCore::UT_CMusManagerServerCore_OptionsReceivedLL() { TUid uid = { 0x10101010 }; + iCore->iPluginName = KMusEngineName; + iCore->iPluginManager->iPluginStarted = EFalse; iCore->OptionsReceivedL( uid ); EUNIT_ASSERT( iCore->iPluginManager->iPluginStarted ); + + iCore->iPluginName = KAnotherEngineName; + iCore->iPluginManager->iPluginStarted = EFalse; + iCore->OptionsReceivedL( uid ); + EUNIT_ASSERT ( !(iCore->iPluginManager->iPluginStarted) ); } // --------------------------------------------------------------------------- // Asserts that tested method does not leave. In certain case it could leave // with KErrPermissionDenied, but with this this test, used capabilities -// and used stubs, tested method shouldn't leave. Checks also that -// TApaTask function TaskExists is called. +// and used stubs, tested method shouldn't leave. // --------------------------------------------------------------------------- // void UT_CMusManagerServerCore:: @@ -241,10 +264,6 @@ // Test for "if( !iApplicationManager->ApplicationRunning() && // iPluginManager->ApplicationAllowed() ) branch -> // ----------------------------------------------------------------------- - - // CMusApplicationManager::ApplicationRunning = EFalse - TApaTask::iApplicationExist = EFalse; - // CMusAvailabilityPluginManager::ApplicationAllowed = ETrue abilityStub->iNameStub = MMusAvaObserver::EMusAvaNameRegistration; abilityStub->iStatusStub = MMusAvaObserver::EMusAvaStatusAvailable; @@ -263,7 +282,6 @@ MUS_EUNIT_ASSERT_NO_LEAVE( iCore->StartMultimediaSharingL( MultimediaSharing::EMusLiveVideo ) ); EUNIT_ASSERT( PropertyHelper::GetCalledFunction() == RProperty::EDefine ); - EUNIT_ASSERT( TApaTask::iApaTaskCalledFunction == TApaTask::EExists ); // <- Test for "if( !iApplicationManager->ApplicationRunning() && // iPluginManager->ApplicationAllowed() ) branch @@ -279,12 +297,8 @@ // CMusApplicationManager::ApplicationRunning = EFalse - TApaTask::iApplicationExist = EFalse; MUS_EUNIT_ASSERT_NO_LEAVE( iCore->StartMultimediaSharingL( MultimediaSharing::EMusLiveVideo ) ); - EUNIT_ASSERT( TApaTask::iApaTaskCalledFunction == TApaTask::EExists ); - - // <- Test for else branch } @@ -296,15 +310,17 @@ void UT_CMusManagerServerCore:: UT_CMusManagerServerCore_StopMultimediaSharingLL() { - TApaTask::iApplicationExist = EFalse; + // MuS not running iCore->StopMultimediaSharingL(); - EUNIT_ASSERT( TApaTask::iApaTaskCalledFunction == TApaTask::EExists ) - TApaTask::iApplicationExist = ETrue; + // MuS running + User::LeaveIfError( + Dll::SetTls( reinterpret_cast< TAny* >( 1 ) ) ); + // TLS is used by TFindProcess stub iCore->StopMultimediaSharingL(); TInt availability = MultimediaSharing::EMultimediaSharingAvailable; - TUint key(NMusSessionApi::KStatus); - RProperty::Get( key,availability); + TUint key( NMusSessionApi::KStatus ); + RProperty::Get( key, availability ); EUNIT_ASSERT_EQUALS( PropertyHelper::GetCalledFunction(), RProperty::EDefine ) EUNIT_ASSERT_EQUALS( availability, MultimediaSharing::EMultimediaSharingNotAvailable ) @@ -318,7 +334,16 @@ // void UT_CMusManagerServerCore::UT_CMusManagerServerCore_EventNoSessionsL() { + iCore->iPluginName = KMusEngineName; + iCore->iPluginManager->iPluginStarted = ETrue; iCore->EventNoSessions(); + EUNIT_ASSERT ( !(iCore->iPluginManager->iPluginStarted) ); + EUNIT_ASSERT( iStopServerCalled ); + + iCore->iPluginName = KAnotherEngineName; + iCore->iPluginManager->iPluginStarted = ETrue; + iCore->EventNoSessions(); + EUNIT_ASSERT ( iCore->iPluginManager->iPluginStarted ); EUNIT_ASSERT( iStopServerCalled ); } @@ -349,11 +374,15 @@ void UT_CMusManagerServerCore:: UT_CMusManagerServerCore_AvailabilityChangedLL() { + iCore->iPluginName = KMusEngineName; MUS_EUNIT_ASSERT_NO_LEAVE( iCore->AvailabilityChangedL( (MultimediaSharing::TMusAvailabilityStatus) KErrNone ) ); - EUNIT_ASSERT( iCore->iAvailabilityMonitors.Count() == 0 ); + iCore->iPluginName = KAnotherEngineName; + MUS_EUNIT_ASSERT_NO_LEAVE( iCore->AvailabilityChangedL( + (MultimediaSharing::TMusAvailabilityStatus) KErrNone ) ); + EUNIT_ASSERT( iCore->iAvailabilityMonitors.Count() == 0 ); } @@ -370,6 +399,15 @@ EUNIT_ASSERT( iCore->iAvailabilityMonitors.Count() == monitors ); } +void UT_CMusManagerServerCore::UT_CMusManagerServerCore_IsMusEnginePluginL() + { + iCore->iPluginName = KMusEngineName; + EUNIT_ASSERT( iCore->IsMusEnginePlugin() ); + + iCore->iPluginName = KAnotherEngineName; + EUNIT_ASSERT( !(iCore->IsMusEnginePlugin()) ); + } + // ======== EUNIT TEST TABLE ======== @@ -464,5 +502,11 @@ "FUNCTIONALITY", SetupL, UT_CMusManagerServerCore_AvailabilityChangedLL, Teardown) +EUNIT_TEST( + "IsMusEnginePlugin - test ", + "CMusManagerServerCore", + "IsMusEnginePlugin", + "FUNCTIONALITY", + SetupL, UT_CMusManagerServerCore_IsMusEnginePluginL, Teardown) EUNIT_END_TEST_TABLE diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshmanagersrv/tsrc/ut_managersrv/src/UT_CMusavailabilityPluginManager.cpp --- a/mmsharing/mmshmanagersrv/tsrc/ut_managersrv/src/UT_CMusavailabilityPluginManager.cpp Thu Aug 19 09:51:39 2010 +0300 +++ b/mmsharing/mmshmanagersrv/tsrc/ut_managersrv/src/UT_CMusavailabilityPluginManager.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -27,7 +27,6 @@ #include "cmusavainterfacestub.h" #include "musmanagerservercommon.h" #include "musapplicationmanager.h" -#include "mussesseioninformationapi.h" #include #include #include @@ -48,10 +47,6 @@ */ _LIT( KUsedSipAddress, "sip:stadi@hesa.fi" ); -/* - * Privacy status from MusAvaSettingsStub. - */ -_LIT( KUsedPrivacyStatus, "1" ); // ======== MEMBER FUNCTIONS ======== @@ -118,7 +113,8 @@ // From class MMusAvailabilityPluginManagerObserver. // --------------------------------------------------------------------------- // -void UT_CMusAvailabilityPluginManager::StartLiveSharingL() +void UT_CMusAvailabilityPluginManager::StartSharingWithUseCaseL( + MultimediaSharing::TMusUseCase /*aUseCase*/ ) { iCalledAStartLiveSharing = ETrue; } @@ -145,7 +141,8 @@ delete iManager; iManager = NULL; delete iAppManager; - PropertyHelper::Close(); + PropertyHelper::Close(); + Dll::FreeTls(); // Used by the RProcess and TFindProcess stubs } @@ -256,15 +253,10 @@ // void UT_CMusAvailabilityPluginManager::UT_CMusAvailabilityPluginManager_SessionParametersL() { - CMusAvaInterface* interface = iManager->iPlugin; - CMusAvaInterface2* interface2 = static_cast( interface ); - interface2->iSettings->iCallPrivacy = 1; - MDesCArray* params = &iManager->SessionParametersL(); EUNIT_ASSERT_EQUALS( KUsedTelNumber(), params->MdcaPoint( KTelNumber ) ); EUNIT_ASSERT_EQUALS( KUsedSipAddress(), params->MdcaPoint( KSipAddress ) ); EUNIT_ASSERT_EQUALS( KUsedVideoCodec(), params->MdcaPoint( KVideoCodec ) ); - EUNIT_ASSERT( !params->MdcaPoint( KPrivacyStatus ).Compare( KUsedPrivacyStatus() ) ); } // --------------------------------------------------------------------------- @@ -402,15 +394,11 @@ // void UT_CMusAvailabilityPluginManager:: UT_CMusAvailabilityPluginManager_UpdateSessionParametersLL() - { + { MDesCArray* params = &iManager->SessionParametersL(); - CMusAvaInterface* interface = iManager->iPlugin; - CMusAvaInterface2* interface2 = static_cast( interface ); - interface2->iSettings->iCallPrivacy = 1; EUNIT_ASSERT_EQUALS( KUsedTelNumber(), iManager->SessionParametersL().MdcaPoint( KTelNumber ) ); EUNIT_ASSERT_EQUALS( KUsedSipAddress(), iManager->SessionParametersL().MdcaPoint( KSipAddress ) ); EUNIT_ASSERT_EQUALS( KUsedVideoCodec(), iManager->SessionParametersL().MdcaPoint( KVideoCodec ) ); - EUNIT_ASSERT( !iManager->SessionParametersL().MdcaPoint( KPrivacyStatus ).Compare( KUsedPrivacyStatus() ) ); } @@ -482,6 +470,19 @@ iManager->IndicateAvailabilityL(); } +void UT_CMusAvailabilityPluginManager::UT_CMusAvailabilityPluginManager_PrepareForReceivedInviteLL() + { + CMusAvaInterface* interface = iManager->iPlugin; + CMusAvaInterface2* interface2 = static_cast( interface ); + + CMusAvaAvailabilityStub* abilityStub = + static_cast( interface2->iAvailabilities[0] ); + abilityStub->iPrepareForInviteCalled = EFalse; + + iManager->PrepareForReceivedInviteL(); + EUNIT_ASSERT( abilityStub->iPrepareForInviteCalled ); + } + // ======== EUNIT TEST TABLE ======== @@ -603,6 +604,12 @@ "IndicateAvailabilityL", "FUNCTIONALITY", SetupL, UT_CMusAvailabilityPluginManager_IndicateAvailabilityLL, Teardown ) - + +EUNIT_TEST( + "PrepareForReceivedInviteL - test ", + "CMusAvailabilityPluginManager", + "PrepareForReceivedInviteL", + "FUNCTIONALITY", + SetupL, UT_CMusAvailabilityPluginManager_PrepareForReceivedInviteLL, Teardown ) EUNIT_END_TEST_TABLE diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshmanagersrv/tsrc/ut_managersrv/src/stubs.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/mmshmanagersrv/tsrc/ut_managersrv/src/stubs.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,56 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + +#include + +// TFindProcess stub + +// ------------------------------------------------------------------------- +// TFindProcess::Next +// ------------------------------------------------------------------------- +// +TInt TFindProcess::Next( TFullName& aResult ) + { + if ( Dll::Tls() != NULL ) + { + return KErrNone; + } + return KErrNotFound; + } + + +// RProcess stub + +// ------------------------------------------------------------------------- +// RProcess::Create +// ------------------------------------------------------------------------- +// +TInt RProcess::Create( + const TDesC& /*aFileName*/, + const TDesC& /*aCommand*/, + TOwnerType /*aType*/ ) + { + return Dll::SetTls( reinterpret_cast< TAny* >( 1 ) ); + } + +// ------------------------------------------------------------------------- +// RProcess::Resume +// ------------------------------------------------------------------------- +// +void RProcess::Resume() + { + } diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshshared/inc/muspropertyobserver.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/mmshshared/inc/muspropertyobserver.h Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,38 @@ +/* +* 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: Mus Applications Event Observer Interface +* +*/ + + + +#ifndef MUSPROPERTYOBSERVER_H +#define MUSPROPERTYOBSERVER_H + +#include + +class MMusPropertyObserver + { + +public: + + virtual void PropertyChanged( const TUint aKey, const TInt aValue ) = 0; + + virtual void HandlePropertyError( const TInt aReason ) = 0; + + }; + +#endif // MUSPROPERTYOBSERVER_H + +// end of file diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshshared/inc/muspropertywatch.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/mmshshared/inc/muspropertywatch.h Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,127 @@ +/* +* 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: +* +*/ + + + +#ifndef MUSPROPERTYWATCH_H +#define MUSPROPERTYWATCH_H + +#include "musunittesting.h" + +#include +#include + +class MMusPropertyObserver; + +class CMusPropertyWatch : public CActive + { + + MUS_UNITTEST( UT_CMusPropertyWatch ) + +public: // constructors and destructor + + /** + * Two-phased constructor. Leaves on failure. + * @return The constructed CMusPropertyWatch object. + */ + static CMusPropertyWatch* NewL( MMusPropertyObserver& aObserver, + TUid aCategory, + const TInt aPropertyName ); + + /** + * Destructor. + */ + ~CMusPropertyWatch(); + +private: + + /** + * C++ constructor. + */ + CMusPropertyWatch( MMusPropertyObserver& aObserver, + TUid aCategory, + const TInt aPropertyName ); + + /** + * Symbian 2nd-phase constructor. + * @leave If return value of RProperty::Attach != KErrNone, e.q. KErrNoMemory + * or one of the system wide error codes if RunL() leaves + */ + void ConstructL(); + + +public: // new functions + + /** + * Reads a P&S integer value from the category KCategoryUid + * @pre P&S value has to be defined. + * @leave One of the system wide error codes, if RProperty::Get() + * returns an error value. + * @param aKey Name of the P&S Key, which value should be read + * @returns The integer value of the P&S Key. + */ + static TInt ReadIntPropertyL( TUint aKey ); + + /** + * Reads a P&S descriptor value from the category KCategoryUid + * @pre P&S value has to be defined. + * @leave One of the system wide error codes, if RProperty::Get() + * returns an error value or if descriptor AllocL() leaves. + * @param aKey Name of the P&S Key, which value should be read + * @returns The descriptor value of the P&S Key. + * Ownership is transferred + */ + static HBufC* ReadDescPropertyL( TUint aKey ); + + +private: // functions from base class CActive + + /** + * + */ + void DoCancel(); + + /** + * Reads a P&S integer value from the category KCategoryUid + * and starts to monitor changes in the property value. + * Calls observer function for read property values. + * @pre P&S value has to be defined as an integer. + * @leave One of the system wide error codes, if RProperty::Get() + * returns an error value. + */ + void RunL(); + + /** + * + */ + TInt RunError(TInt aError); + +private: // Data + + RProperty iProperty; + + TUid iPropertyCategory; + + TUint iPropertyKey; + + MMusPropertyObserver& iObserver; + + }; + +#endif // MUSPROPERTYWATCH_H + +// end of file diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshshared/loc/mus.loc --- a/mmsharing/mmshshared/loc/mus.loc Thu Aug 19 09:51:39 2010 +0300 +++ b/mmsharing/mmshshared/loc/mus.loc Tue Aug 31 15:12:07 2010 +0300 @@ -699,13 +699,6 @@ #define qtn_msh_set_activation_off "Off" // d:Text of a list item in video sharing settings view -// d:Activation setting: on -// l:list_set_graphic_pane_t1 -// r:3.2 -// -#define qtn_msh_set_activation_on "On" - -// d:Text of a list item in video sharing settings view // d:Capability auditory note setting title // l:list_setting_pane_t1 // r:3.2 diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshshared/src/muspropertywatch.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/mmshshared/src/muspropertywatch.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,178 @@ +/* +* 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: +* +*/ + + + +#include "muspropertywatch.h" +#include "muspropertyobserver.h" +#include "mussessionproperties.h" +#include "musresourceproperties.h" +#include "muslogger.h" // debug logging + +using namespace NMusSessionApi; + +// ----------------------------------------------------------------------------- +// Symbian two-phase constructor. +// ----------------------------------------------------------------------------- +// +CMusPropertyWatch* CMusPropertyWatch::NewL( + MMusPropertyObserver& aObserver, + TUid aCategory, + const TInt aPropertyName ) + { + CMusPropertyWatch* self = new (ELeave) CMusPropertyWatch( + aObserver, + aCategory, + aPropertyName ); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + return self; + } + + +// ----------------------------------------------------------------------------- +// C++ destructor. +// ----------------------------------------------------------------------------- +// +CMusPropertyWatch::~CMusPropertyWatch() + { + MUS_LOG( "mus: [MUSSH ] -> CMusPropertyWatch::~CMusPropertyWatch" ); + if ( IsActive() ) + { + Cancel(); + } + iProperty.Close(); + MUS_LOG( "mus: [MUSSH ] <- CMusPropertyWatch::~CMusPropertyWatch" ); + } + + +// ----------------------------------------------------------------------------- +// C++ constructor. +// ----------------------------------------------------------------------------- +// +CMusPropertyWatch::CMusPropertyWatch( MMusPropertyObserver& aObserver, + TUid aCategory, + const TInt aPropertyName ) : + CActive( EPriorityNormal ), + iObserver( aObserver ) + { + iPropertyCategory = aCategory; + iPropertyKey = aPropertyName; + } + + +// ----------------------------------------------------------------------------- +// Symbian second-phase constructor. +// ----------------------------------------------------------------------------- +// +void CMusPropertyWatch::ConstructL( ) + { + MUS_LOG( "mus: [MUSSH ] -> CMusPropertyWatch::ConstructL" ); + User::LeaveIfError( iProperty.Attach( iPropertyCategory, + iPropertyKey) ); + CActiveScheduler::Add( this ); + + iProperty.Subscribe( iStatus ); + SetActive(); + + MUS_LOG( "mus: [MUSSH ] <- CMusPropertyWatch::ConstructL" ); + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +TInt CMusPropertyWatch::ReadIntPropertyL( TUint aKey ) + { + MUS_LOG1( "mus: [MUSSH ] -> CMusPropertyWatch::ReadIntPropertyL: aKey: [%d]", + aKey ); + TInt val; + User::LeaveIfError( RProperty::Get( KCategoryUid, + aKey, + val ) ); + MUS_LOG1( "mus: [MUSSH ] <- CMusPropertyWatch::ReadIntPropertyL: val: [%d]", + val ); + return val; + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +HBufC* CMusPropertyWatch::ReadDescPropertyL( TUint aKey ) + { + MUS_LOG1( "mus: [MUSSH ] -> CMusPropertyWatch::ReadDescPropertyL: aKey: [%d]", + aKey ); + TBuf buffer; + + User::LeaveIfError( RProperty::Get( KCategoryUid, + aKey, + buffer ) ); + HBufC* desc = buffer.AllocL(); + MUS_LOG_TDESC( "mus: [MUSSH ] <- CMusPropertyWatch::ReadDescPropertyL: val: ", + (*desc) ); + return desc; + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusPropertyWatch::DoCancel() + { + MUS_LOG( "mus: [MUSSH ] -> CMusPropertyWatch::DoCancel" ); + iProperty.Cancel(); + MUS_LOG( "mus: [MUSSH ] <- CMusPropertyWatch::DoCancel" ); + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusPropertyWatch::RunL() + { + MUS_LOG( "mus: [MUSSH ] -> CMusPropertyWatch::RunL" ); + TInt val; + + User::LeaveIfError( RProperty::Get( iPropertyCategory, + iPropertyKey, + val ) ); + + iObserver.PropertyChanged( iPropertyKey, val ); + MUS_LOG( "mus: [MUSSH ] <- CMusPropertyWatch::RunL" ); + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +TInt CMusPropertyWatch::RunError( TInt aError ) + { + MUS_LOG1( "mus: [MUSSH ] -> CMusPropertyWatch::RunError [%d]", aError ); + iObserver.HandlePropertyError( aError ); + MUS_LOG( "mus: [MUSSH ] <- CMusPropertyWatch::RunError" ); + return KErrNone; + } + + +// end of file diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshui/data/musui.rss --- a/mmsharing/mmshui/data/musui.rss Thu Aug 19 09:51:39 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1645 +0,0 @@ -/* -* 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: application resource file -* -*/ - - - -// ----------------------------------------------------------------------------- -// FOUR-LETTER RESOURCE IDENTIFIER -// ----------------------------------------------------------------------------- -// -NAME MUSH - - -// ----------------------------------------------------------------------------- -// INCLUDE FILES -// ----------------------------------------------------------------------------- -// -#include "musui.hrh" -#include // localization -#include //localization - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -// ----------------------------------------------------------------------------- -// RESOURCE DEFINITIONS -// ----------------------------------------------------------------------------- -// -RESOURCE RSS_SIGNATURE { } - -RESOURCE TBUF { buf = "MUSUI"; } - -RESOURCE EIK_APP_INFO - { - } - - -// ----------------------------------------------------------------------------- -// CONSTANTS -// ----------------------------------------------------------------------------- -// -#define KMyBitmapRomFile "Z:\\resource\\apps\\musuiicons.mif" -#define KMyBitmapRamFile "C:\\resource\\apps\\musuiicons.mif" - -RESOURCE LOCALISABLE_APP_INFO r_localisable_app_info - { - short_caption = qtn_apps_msh_grid; - caption_and_icon = CAPTION_AND_ICON_INFO - { - caption = qtn_apps_msh_list; - number_of_icons = 1; - icon_file = APP_BITMAP_DIR"\\musui_aif.mif"; - }; - } - - -// ----------------------------------------------------------------------------- -// Hotkeys defined for application -// ----------------------------------------------------------------------------- -// -RESOURCE HOTKEYS r_musui_hotkeys - { - control = - { - HOTKEY { command = EEikCmdExit; key = 'e'; } - }; - } - - -// ----------------------------------------------------------------------------- -// Items for general menu -// ----------------------------------------------------------------------------- -// -RESOURCE MENU_PANE r_musui_general_menu - { - items = - { - MENU_ITEM { command = EMusuiGenCmdExit; txt = qtn_options_exit; } - }; - } - - -// ----------------------------------------------------------------------------- -// View-resource definition for general view -// ----------------------------------------------------------------------------- -// -RESOURCE AVKON_VIEW r_musui_generalview - { - menubar = r_musui_generalview_menubar; - toolbar = r_mus_toolbar; - cba = R_AVKON_SOFTKEYS_OPTIONS_EXIT; - } - - -// ----------------------------------------------------------------------------- -// View-resource definition for null view -// ----------------------------------------------------------------------------- -// -RESOURCE AVKON_VIEW r_musui_nullview - { - menubar = r_musui_generalview_menubar; - cba = R_AVKON_SOFTKEYS_OPTIONS_EXIT; - } - - -// ----------------------------------------------------------------------------- -// Menubar definition for general view -// ----------------------------------------------------------------------------- -// -RESOURCE MENU_BAR r_musui_generalview_menubar - { - titles = - { - MENU_TITLE { menu_pane = r_musui_general_menu; txt = "--"; }, - MENU_TITLE { menu_pane = r_musui_generalview_menu; txt = "--"; } - }; - } - - -// ----------------------------------------------------------------------------- -// Items for menupane in general view -// ----------------------------------------------------------------------------- -// -RESOURCE MENU_PANE r_musui_generalview_menu - { - items = - { - MENU_ITEM { command = EMusuiCmdAppTest; txt = "Test"; } // TODO: Fixme - }; - } - - -// ----------------------------------------------------------------------------- -// View-resource definition for live sharing view -// ----------------------------------------------------------------------------- -// -RESOURCE AVKON_VIEW r_musui_view - { - menubar = r_musui_view_menubar; -// toolbar = r_mus_toolbar; - cba = r_musui_view_cba; - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -RESOURCE CBA r_musui_view_cba - { - buttons= - { - CBA_BUTTON - { - txt = text_softkey_option; - id = EAknSoftkeyOptions; - }, - CBA_BUTTON - { - txt = qtn_msh_softkey_stop; - id = EAknSoftkeyExit; - }, - CBA_BUTTON - { - //txt = text_softkey_option; // qgn_prop_msk_select; - id = EEikBidBlank; // EAknSoftkeyOptions; - } - }; - } - - -// ----------------------------------------------------------------------------- -// Operator Specific Middle softkeys -// ----------------------------------------------------------------------------- -// -RESOURCE CBA_BUTTON r_musui_view_ops_msk_ihf_off - { - id = EMusuiCmdViewHandset; - txt = qtn_msh_msk_ihf_off; - } - -RESOURCE CBA_BUTTON r_musui_view_ops_msk_ihf_on - { - id = EMusuiCmdViewLoadspeaker; - txt = qtn_msh_msk_ihf_on; - } - -RESOURCE CBA_BUTTON r_musui_view_msk_ok - { - id = EMusuiCmdViewMiddleSoftkeyOk; - txt = qtn_msh_msk_done; - } - - -// ----------------------------------------------------------------------------- -// Menubar definition for live sharing view -// ----------------------------------------------------------------------------- -// -RESOURCE MENU_BAR r_musui_view_menubar - { - titles = - { - MENU_TITLE { menu_pane = r_musui_general_menu; txt = "--"; }, - MENU_TITLE { menu_pane = r_musui_view_menu; txt = "--"; } - }; - } - - -// ----------------------------------------------------------------------------- -// Items for menupane in live sharing view -// ----------------------------------------------------------------------------- -// -RESOURCE MENU_PANE r_musui_view_menu - { - items = - { - MENU_ITEM - { - command = EMusuiCmdViewReplay; - txt = qtn_msh_shareview_softk_replay; - }, - MENU_ITEM - { - command = EMusuiCmdViewShareVideo; - txt = qtn_msh_options_gen_shareclip; - }, - MENU_ITEM - { - command = EMusuiCmdViewShareImage; - txt = qtn_msh_options_gen_shareimage; - }, - MENU_ITEM - { - command = EMusuiCmdViewShareLive; - txt = qtn_msh_options_gen_sharelive; - }, - MENU_ITEM - { - command = EMusuiCmdViewAudioNormal; - txt = qtn_msh_options_clip_audio_normal; - }, - MENU_ITEM - { - command = EMusuiCmdViewAudioMute; - txt = qtn_msh_options_clip_audio_mute; - }, - MENU_ITEM - { - command = EMusuiCmdToolbarZoom; - txt = qtn_msh_tooltip_zoom; // Adjust zoom - }, - MENU_ITEM - { - command = EMusuiCmdToolbarBrightness; - txt = qtn_msh_tooltip_brightness; // Adjust brightness - }, - MENU_ITEM - { - command = EMusuiCmdViewFullScreen; - txt = qtn_msh_options_fullscreen; - }, - MENU_ITEM - { - command = EMusuiCmdViewZoom; - txt = qtn_msh_options_zoom; - }, - MENU_ITEM - { - command = EMusuiCmdViewBrightness; - txt = qtn_msh_options_brightness; - }, - MENU_ITEM - { - command = EMusuiCmdRecord; - txt = qtn_msh_options_rec_start; - }, - MENU_ITEM - { - command = EMusuiCmdStopRecording; - txt = qtn_msh_options_rec_stop; - }, - MENU_ITEM - { - command = EMusuiCmdViewMicrophoneMute; - txt = qtn_incal_mute_option; - }, - MENU_ITEM - { - command = EMusuiCmdViewMicrophoneUnmute; - txt = qtn_incal_unmute_option; - }, - MENU_ITEM - { - command = EMusuiCmdViewEndActiveCall; - txt = qtn_incal_drop_option; - }, -#ifdef __SERIES60_HELP - MENU_ITEM - { - command = EAknCmdHelp; - txt = qtn_options_help; - } -#endif // __SERIES60_HELP - }; - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -RESOURCE AVKON_LAYOUT_RECT r_mus_navi_media_icon_layout_size - { - l = 0; t = 0; W = 13; H = 16; - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -RESOURCE AVKON_LAYOUT_TEXT r_mus_navi_media_text_left_layout - { - font = ELatinPlain12; - C = 10; - l = 43; - r = 4; - B = 13; - W = 73; - J = ELayoutAlignLeft; - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -RESOURCE AVKON_LAYOUT_TEXT r_mus_navi_media_text_right_layout - { - font = ELatinPlain12; - C = 0; - l = 43; - r = 4; - B = 13; - W = 73; - J = ELayoutAlignRight; - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -RESOURCE AKN_ICON_ARRAY r_mus_navi_media_icon_array_rom - { - bmpfile = KMyBitmapRomFile; // HERE - icons = - { - AKN_ICON { iconId = EMbmMusuiiconsQgn_indi_video_forw; - maskId = EMbmMusuiiconsQgn_indi_video_forw_mask; }, - AKN_ICON { iconId = EMbmMusuiiconsQgn_indi_video_pause; - maskId = EMbmMusuiiconsQgn_indi_video_pause_mask; }, - AKN_ICON { iconId = EMbmMusuiiconsQgn_indi_video_play; - maskId = EMbmMusuiiconsQgn_indi_video_play_mask; }, - AKN_ICON { iconId = EMbmMusuiiconsQgn_indi_video_record; - maskId = EMbmMusuiiconsQgn_indi_video_record_mask; }, - AKN_ICON { iconId = EMbmMusuiiconsQgn_indi_video_record_not; - maskId = EMbmMusuiiconsQgn_indi_video_record_not_mask; }, - AKN_ICON { iconId = EMbmMusuiiconsQgn_indi_video_rew; - maskId = EMbmMusuiiconsQgn_indi_video_rew_mask; }, - AKN_ICON { iconId = EMbmMusuiiconsQgn_indi_video_stop; - maskId = EMbmMusuiiconsQgn_indi_video_stop_mask; }, - AKN_ICON { iconId = EMbmMusuiiconsQgn_indi_video_wait1; - maskId = EMbmMusuiiconsQgn_indi_video_wait1_mask; }, - AKN_ICON { iconId = EMbmMusuiiconsQgn_indi_video_wait2; - maskId = EMbmMusuiiconsQgn_indi_video_wait2_mask; }, - AKN_ICON { iconId = EMbmMusuiiconsQgn_indi_video_wait3; - maskId = EMbmMusuiiconsQgn_indi_video_wait3_mask; }, - AKN_ICON { iconId = EMbmMusuiiconsQgn_indi_video_wait4; - maskId = EMbmMusuiiconsQgn_indi_video_wait4_mask; }, - AKN_ICON { iconId = EMbmMusuiiconsQgn_indi_video_wait5; - maskId = EMbmMusuiiconsQgn_indi_video_wait5_mask; }, - AKN_ICON { iconId = EMbmMusuiiconsQgn_indi_video_wait6; - maskId = EMbmMusuiiconsQgn_indi_video_wait6_mask; }, - AKN_ICON { iconId = EMbmMusuiiconsQgn_indi_video_wait7; - maskId = EMbmMusuiiconsQgn_indi_video_wait7_mask; }, - AKN_ICON { iconId = EMbmMusuiiconsQgn_indi_video_wait8; - maskId = EMbmMusuiiconsQgn_indi_video_wait8_mask; } - }; - } - - // ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -RESOURCE AKN_ICON_ARRAY r_mus_navi_media_icon_array_ram - { - bmpfile = KMyBitmapRamFile; // HERE - icons = - { - AKN_ICON { iconId = EMbmMusuiiconsQgn_indi_video_forw; - maskId = EMbmMusuiiconsQgn_indi_video_forw_mask; }, - AKN_ICON { iconId = EMbmMusuiiconsQgn_indi_video_pause; - maskId = EMbmMusuiiconsQgn_indi_video_pause_mask; }, - AKN_ICON { iconId = EMbmMusuiiconsQgn_indi_video_play; - maskId = EMbmMusuiiconsQgn_indi_video_play_mask; }, - AKN_ICON { iconId = EMbmMusuiiconsQgn_indi_video_record; - maskId = EMbmMusuiiconsQgn_indi_video_record_mask; }, - AKN_ICON { iconId = EMbmMusuiiconsQgn_indi_video_record_not; - maskId = EMbmMusuiiconsQgn_indi_video_record_not_mask; }, - AKN_ICON { iconId = EMbmMusuiiconsQgn_indi_video_rew; - maskId = EMbmMusuiiconsQgn_indi_video_rew_mask; }, - AKN_ICON { iconId = EMbmMusuiiconsQgn_indi_video_stop; - maskId = EMbmMusuiiconsQgn_indi_video_stop_mask; }, - AKN_ICON { iconId = EMbmMusuiiconsQgn_indi_video_wait1; - maskId = EMbmMusuiiconsQgn_indi_video_wait1_mask; }, - AKN_ICON { iconId = EMbmMusuiiconsQgn_indi_video_wait2; - maskId = EMbmMusuiiconsQgn_indi_video_wait2_mask; }, - AKN_ICON { iconId = EMbmMusuiiconsQgn_indi_video_wait3; - maskId = EMbmMusuiiconsQgn_indi_video_wait3_mask; }, - AKN_ICON { iconId = EMbmMusuiiconsQgn_indi_video_wait4; - maskId = EMbmMusuiiconsQgn_indi_video_wait4_mask; }, - AKN_ICON { iconId = EMbmMusuiiconsQgn_indi_video_wait5; - maskId = EMbmMusuiiconsQgn_indi_video_wait5_mask; }, - AKN_ICON { iconId = EMbmMusuiiconsQgn_indi_video_wait6; - maskId = EMbmMusuiiconsQgn_indi_video_wait6_mask; }, - AKN_ICON { iconId = EMbmMusuiiconsQgn_indi_video_wait7; - maskId = EMbmMusuiiconsQgn_indi_video_wait7_mask; }, - AKN_ICON { iconId = EMbmMusuiiconsQgn_indi_video_wait8; - maskId = EMbmMusuiiconsQgn_indi_video_wait8_mask; } - }; - } - -///////////////////////////////////////////////////LG/////////////////////////////////////////// -// ----------------------------------------------------------------------------- -// Toolbar for non-touch mode -// ----------------------------------------------------------------------------- -// -RESOURCE AVKON_TOOLBAR r_mus_toolbar_nontouch - { - //KAknToolbarFlexiblePosition - //3.2.3 -> KAknToolbarWithoutCba - //5.0 -> KAknToolbarFixed - flags = KAknToolbarWithoutCba | KAknToolbarFloatingUnTransparent; - - items = - { - // ****************************************************************** // - TBAR_CTRL // Sending Live/Clip & Receiving: Activate Volume Mode - { - type = EAknCtButton; - id = EMusuiCmdToolbarVolume; - control = AVKON_BUTTON - { - flags = KAknButtonSizeFitText ; - states = - { - AVKON_BUTTON_STATE - { - //txt = qtn_msh_tooltip_volume; // Adjust call volume - helptxt = qtn_msh_tooltip_volume; - // TODO: ROM/RAM: - bmpfile = "Z:\\Resource\\apps\\musuitoolbaricons.mif"; - bmpid = EMbmMusuitoolbariconsQgn_indi_tb_call_volume; - bmpmask = EMbmMusuitoolbariconsQgn_indi_tb_call_volume_mask; - } - }; - }; - }, - // ****************************************************************** // - - TBAR_CTRL // Receiving: Change to full screen mode - { - type = EAknCtButton; - id = EMusuiCmdToolbarFullScreen; - control = AVKON_BUTTON - { - flags = KAknButtonSizeFitText ; - states = - { - AVKON_BUTTON_STATE - { - //txt = qtn_msh_tooltip_fullscreen; // View in full screen mode - helptxt = qtn_msh_tooltip_fullscreen; - // TODO: ROM/RAM: - bmpfile = "Z:\\Resource\\apps\\musuitoolbaricons.mif"; - bmpid = EMbmMusuitoolbariconsQgn_indi_tb_fullscreen; - bmpmask = EMbmMusuitoolbariconsQgn_indi_tb_fullscreen_mask; -// extension = r_mus_fullscreen_button_state_extension; - } - }; - }; - }, - - // ****************************************************************** // - - TBAR_CTRL // Sending Live: Pause sharing <=> Toggled - { - type = EAknCtButton; - id = EMusuiCmdToolbarPauseLive; - control = AVKON_BUTTON - { - flags = KAknButtonSizeFitText; - states = - { - AVKON_BUTTON_STATE - { - //txt = qtn_msh_tooltip_pause_live; // Pause sharing - helptxt = qtn_msh_tooltip_pause_live; - // TODO: ROM/RAM: - bmpfile = "Z:\\Resource\\apps\\musuitoolbaricons.mif"; - bmpid = EMbmMusuitoolbariconsQgn_indi_tb_pause_send_video; - bmpmask = EMbmMusuitoolbariconsQgn_indi_tb_pause_send_video_mask; -// extension = r_mus_pause_send_video_button_state_extension; - } - }; - }; - }, - TBAR_CTRL // Sending Live/Clip: Un-pause sharing <=> Toggled - { - type = EAknCtButton; - id = EMusuiCmdToolbarUnPauseLive; - control = AVKON_BUTTON - { - flags = KAknButtonSizeFitText; - states = - { - AVKON_BUTTON_STATE - { - //txt = qtn_msh_tooltip_unpause_live; - helptxt = qtn_msh_tooltip_unpause_live; - // TODO: ROM/RAM - bmpfile = "Z:\\Resource\\apps\\musuitoolbaricons.mif"; - bmpid = EMbmMusuitoolbariconsQgn_indi_tb_video; - bmpmask = EMbmMusuitoolbariconsQgn_indi_tb_video_mask; -// extension = r_mus_video_button_state_extension; - } - }; - }; - }, - // ****************************************************************** // - - TBAR_CTRL // Sending Clip: Pause sharing <=> Toggled - { - type = EAknCtButton; - id = EMusuiCmdToolbarPause; - control = AVKON_BUTTON - { - flags = KAknButtonSizeFitText ; - states = - { - AVKON_BUTTON_STATE - { - //txt = qtn_msh_tooltip_pause_live; // Pause sharing - helptxt = qtn_msh_tooltip_pause_live; - // TODO: ROM/RAM: - bmpfile = "Z:\\Resource\\apps\\musuitoolbaricons.mif"; - bmpid = EMbmMusuitoolbariconsQgn_indi_cams_tb_rec_pause; - bmpmask = EMbmMusuitoolbariconsQgn_indi_cams_tb_rec_pause_mask; - // extension = r_mus_rec_pause_button_state_extension; - } - }; - }; - }, - TBAR_CTRL // Sending Live/Clip: Un-pause sharing <=> Toggled - { - type = EAknCtButton; - id = EMusuiCmdToolbarUnPause; - control = AVKON_BUTTON - { - flags = KAknButtonSizeFitText ; - states = - { - AVKON_BUTTON_STATE - { - //txt = qtn_msh_tooltip_unpause_live; - helptxt = qtn_msh_tooltip_unpause_live; - // TODO: ROM/RAM - bmpfile = "Z:\\Resource\\apps\\musuitoolbaricons.mif"; - bmpid = EMbmMusuitoolbariconsQgn_indi_tb_play; - bmpmask = EMbmMusuitoolbariconsQgn_indi_tb_play_mask; - // extension = r_mus_play_button_state_extension; - } - }; - }; - }, - - // ****************************************************************** // - TBAR_CTRL // Sending Clip: Activate fast forward / reverse mode - { - type = EAknCtButton; - id = EMusuiCmdToolbarFFRev; - control = AVKON_BUTTON - { - flags = KAknButtonSizeFitText ; - states = - { - AVKON_BUTTON_STATE - { - //txt = qtn_msh_tooltip_ffrev; // Fast forward or rewind clip - helptxt = qtn_msh_tooltip_ffrev; - bmpfile = "Z:\\Resource\\apps\\musuitoolbaricons.mif"; // Only ROM . RAM is unofficial - bmpid = EMbmMusuitoolbariconsQgn_indi_tb_ffw_frew; - bmpmask = EMbmMusuitoolbariconsQgn_indi_tb_ffw_frew_mask; - }, - AVKON_BUTTON_STATE - { - flags = KAknButtonStateHasLatchedFrame; - //txt = qtn_msh_tooltip_ffrev; - helptxt = qtn_msh_tooltip_ffrev; - bmpfile = "Z:\\Resource\\apps\\musuitoolbaricons.mif"; // Only ROM . RAM is unofficial - bmpid = EMbmMusuitoolbariconsQgn_indi_tb_ffw_frew; - // bmpmask = 0x8000; /*32768, tumma*/ - bmpmask = 0x7FFF; /*32767, vaalea*/ - } - }; - }; - }, - // ****************************************************************** // - TBAR_CTRL // Sending Live: Activate zoom mode - { - type = EAknCtButton; - id = EMusuiCmdToolbarZoom; - control = AVKON_BUTTON - { - flags = KAknButtonSizeFitText ; - states = - { - AVKON_BUTTON_STATE - { - //txt = qtn_msh_tooltip_zoom; // Adjust zoom - helptxt = qtn_msh_tooltip_zoom; - bmpfile = "Z:\\Resource\\apps\\musuitoolbaricons.mif"; // Only ROM . RAM is unofficial - bmpid = EMbmMusuitoolbariconsQgn_indi_tb_zoom; - bmpmask = EMbmMusuitoolbariconsQgn_indi_tb_zoom_mask; - }, - AVKON_BUTTON_STATE - { - flags = KAknButtonStateHasLatchedFrame; - //txt = qtn_msh_tooltip_zoom; // Adjust zoom - helptxt = qtn_msh_tooltip_zoom; - bmpfile = "Z:\\Resource\\apps\\musuitoolbaricons.mif"; // Only ROM . RAM is unofficial - bmpid = EMbmMusuitoolbariconsQgn_indi_tb_zoom; // TODO: Correct bitmap!!! - // bmpmask = 0x8000; /*32768, tumma*/ - bmpmask = 0x7FFF; /*32767, vaalea*/ - } - }; - }; - }, - // ****************************************************************** // - TBAR_CTRL // Sending Live: Activate brightness mode - { - type = EAknCtButton; - id = EMusuiCmdToolbarBrightness; - control = AVKON_BUTTON - { - flags = KAknButtonSizeFitText; - states = - { - AVKON_BUTTON_STATE - { - //txt = qtn_msh_tooltip_brightness; // Adjust brightness - helptxt = qtn_msh_tooltip_brightness; - bmpfile = "Z:\\Resource\\apps\\musuitoolbaricons.mif"; // Only ROM . RAM is unofficial - bmpid = EMbmMusuitoolbariconsQgn_indi_tb_brightness; - bmpmask = EMbmMusuitoolbariconsQgn_indi_tb_brightness_mask; - }, - AVKON_BUTTON_STATE - { - flags = KAknButtonStateHasLatchedFrame; - //txt = qtn_msh_tooltip_brightness; // Adjust brightness - helptxt = qtn_msh_tooltip_brightness; - bmpfile = "Z:\\Resource\\apps\\musuitoolbaricons.mif"; // Only ROM . RAM is unofficial - bmpid = EMbmMusuitoolbariconsQgn_indi_tb_brightness; - // bmpmask = 0x8000; /*32768, tumma*/ - bmpmask = 0x7FFF; /*32767, vaalea*/ - } - }; - }; - }, - // ****************************************************************** // - - TBAR_CTRL // Sending Live/Clip & Receiving: Mute microphone <=> Toggled - { - type = EAknCtButton; - id = EMusuiCmdToolbarMute; - control = AVKON_BUTTON - { - flags = KAknButtonSizeFitText ; - states = - { - AVKON_BUTTON_STATE - { - //txt = qtn_msh_tooltip_mute; // Mute Microphone - helptxt = qtn_msh_tooltip_mute; - bmpfile = "Z:\\Resource\\apps\\musuitoolbaricons.mif"; // Only ROM . RAM is unofficial - bmpid = EMbmMusuitoolbariconsQgn_indi_tb_microphone_mute; - bmpmask = EMbmMusuitoolbariconsQgn_indi_tb_microphone_mute_mask; -// extension = r_mus_microphone_mute_button_state_extension; - } - }; - }; - }, - TBAR_CTRL // Sending Live/Clip & Receiving: Unmute microphone <=> Toggled - { - type = EAknCtButton; - id = EMusuiCmdToolbarUnmute; - control = AVKON_BUTTON - { - flags = KAknButtonSizeFitText ; - states = - { - AVKON_BUTTON_STATE - { - //txt = qtn_msh_tooltip_unmute; // Unmute Microphone - helptxt = qtn_msh_tooltip_unmute; - bmpfile = "Z:\\Resource\\apps\\musuitoolbaricons.mif"; // Only ROM . RAM is unofficial - bmpid = EMbmMusuitoolbariconsQgn_indi_tb_microphone_unmute; - bmpmask = EMbmMusuitoolbariconsQgn_indi_tb_microphone_unmute_mask; - // extension = r_mus_microphone_unmute_button_state_extension; - } - }; - }; - }, - - // ****************************************************************** // - - TBAR_CTRL // Sending LiveClip & Receiving: Speaker off <=> Toggled - { - type = EAknCtButton; - id = EMusuiCmdToolbarSpeakerOff; - control = AVKON_BUTTON - { - flags = KAknButtonSizeFitText ; - states = - { - AVKON_BUTTON_STATE - { - //txt = qtn_msh_tooltip_ihf_off; // Loudspeaker off - helptxt = qtn_msh_tooltip_ihf_off; - bmpfile = "Z:\\Resource\\apps\\musuitoolbaricons.mif"; // Only ROM . RAM is unofficial - bmpid = EMbmMusuitoolbariconsQgn_indi_tb_ihf_off; - bmpmask = EMbmMusuitoolbariconsQgn_indi_tb_ihf_off_mask; - // extension = r_mus_ihf_off_button_state_extension; - } - }; - }; - }, - TBAR_CTRL // Sending Live/Clip & Receiving: Speaker on <=> Toggled - { - type = EAknCtButton; - id = EMusuiCmdToolbarSpeakerOn; - control = AVKON_BUTTON - { - flags = KAknButtonSizeFitText; - states = - { - AVKON_BUTTON_STATE - { - //txt = qtn_msh_tooltip_ihf_on; // Loudspeaker on - helptxt = qtn_msh_tooltip_ihf_on; - bmpfile = "Z:\\Resource\\apps\\musuitoolbaricons.mif"; // Only ROM . RAM is unofficial - bmpid = EMbmMusuitoolbariconsQgn_indi_tb_ihf_on; - bmpmask = EMbmMusuitoolbariconsQgn_indi_tb_ihf_on_mask; - // extension = r_mus_ihf_on_button_state_extension; - } - }; - }; - } - }; - } -///////////////////////////////////////////////////LG/////////////////////////////////////////// - - - -// ----------------------------------------------------------------------------- -// Toolbar -// ----------------------------------------------------------------------------- -// -RESOURCE AVKON_TOOLBAR r_mus_toolbar - { - flags = KAknToolbarFixed; - - items = - { - // ****************************************************************** // - - TBAR_CTRL // Receiving: Change to full screen mode - { - type = EAknCtButton; - id = EMusuiCmdToolbarFullScreen; - control = AVKON_BUTTON - { - flags = KAknButtonSizeFitText ; - states = - { - AVKON_BUTTON_STATE - { - //txt = qtn_msh_tooltip_fullscreen; // View in full screen mode - helptxt = qtn_msh_tooltip_fullscreen; - // TODO: ROM/RAM: - bmpfile = "Z:\\Resource\\apps\\musuitoolbaricons.mif"; - bmpid = EMbmMusuitoolbariconsQgn_indi_tb_fullscreen; - bmpmask = EMbmMusuitoolbariconsQgn_indi_tb_fullscreen_mask; - extension = r_mus_fullscreen_button_state_extension; - } - }; - }; - }, - - // ****************************************************************** // - - TBAR_CTRL // Sending Live: Pause sharing <=> Toggled - { - type = EAknCtButton; - id = EMusuiCmdToolbarPauseLive; - control = AVKON_BUTTON - { - flags = KAknButtonSizeFitText; - states = - { - AVKON_BUTTON_STATE - { - //txt = qtn_msh_tooltip_pause_live; // Pause sharing - helptxt = qtn_msh_tooltip_pause_live; - // TODO: ROM/RAM: - bmpfile = "Z:\\Resource\\apps\\musuitoolbaricons.mif"; - bmpid = EMbmMusuitoolbariconsQgn_indi_tb_pause_send_video; - bmpmask = EMbmMusuitoolbariconsQgn_indi_tb_pause_send_video_mask; - extension = r_mus_pause_send_video_button_state_extension; - } - }; - }; - }, - TBAR_CTRL // Sending Live/Clip: Un-pause sharing <=> Toggled - { - type = EAknCtButton; - id = EMusuiCmdToolbarUnPauseLive; - control = AVKON_BUTTON - { - flags = KAknButtonSizeFitText; - states = - { - AVKON_BUTTON_STATE - { - //txt = qtn_msh_tooltip_unpause_live; - helptxt = qtn_msh_tooltip_unpause_live; - // TODO: ROM/RAM - bmpfile = "Z:\\Resource\\apps\\musuitoolbaricons.mif"; - bmpid = EMbmMusuitoolbariconsQgn_indi_tb_video; - bmpmask = EMbmMusuitoolbariconsQgn_indi_tb_video_mask; - extension = r_mus_video_button_state_extension; - } - }; - }; - }, - // ****************************************************************** // - - TBAR_CTRL // Sending Clip: Pause sharing <=> Toggled - { - type = EAknCtButton; - id = EMusuiCmdToolbarPause; - control = AVKON_BUTTON - { - flags = KAknButtonSizeFitText ; - states = - { - AVKON_BUTTON_STATE - { - //txt = qtn_msh_tooltip_pause_live; // Pause sharing - helptxt = qtn_msh_tooltip_pause_live; - // TODO: ROM/RAM: - bmpfile = "Z:\\Resource\\apps\\musuitoolbaricons.mif"; - bmpid = EMbmMusuitoolbariconsQgn_indi_cams_tb_rec_pause; - bmpmask = EMbmMusuitoolbariconsQgn_indi_cams_tb_rec_pause_mask; - extension = r_mus_rec_pause_button_state_extension; - } - }; - }; - }, - TBAR_CTRL // Sending Live/Clip: Un-pause sharing <=> Toggled - { - type = EAknCtButton; - id = EMusuiCmdToolbarUnPause; - control = AVKON_BUTTON - { - flags = KAknButtonSizeFitText ; - states = - { - AVKON_BUTTON_STATE - { - //txt = qtn_msh_tooltip_unpause_live; - helptxt = qtn_msh_tooltip_unpause_live; - // TODO: ROM/RAM - bmpfile = "Z:\\Resource\\apps\\musuitoolbaricons.mif"; - bmpid = EMbmMusuitoolbariconsQgn_indi_tb_play; - bmpmask = EMbmMusuitoolbariconsQgn_indi_tb_play_mask; - extension = r_mus_play_button_state_extension; - } - }; - }; - }, - - // ****************************************************************** // - - TBAR_CTRL // Sending Live/Clip & Receiving: Mute microphone <=> Toggled - { - type = EAknCtButton; - id = EMusuiCmdToolbarMute; - control = AVKON_BUTTON - { - flags = KAknButtonSizeFitText ; - states = - { - AVKON_BUTTON_STATE - { - //txt = qtn_msh_tooltip_mute; // Mute Microphone - helptxt = qtn_msh_tooltip_mute; - bmpfile = "Z:\\Resource\\apps\\musuitoolbaricons.mif"; // Only ROM . RAM is unofficial - bmpid = EMbmMusuitoolbariconsQgn_indi_tb_microphone_mute; - bmpmask = EMbmMusuitoolbariconsQgn_indi_tb_microphone_mute_mask; - extension = r_mus_microphone_mute_button_state_extension; - } - }; - }; - }, - TBAR_CTRL // Sending Live/Clip & Receiving: Unmute microphone <=> Toggled - { - type = EAknCtButton; - id = EMusuiCmdToolbarUnmute; - control = AVKON_BUTTON - { - flags = KAknButtonSizeFitText ; - states = - { - AVKON_BUTTON_STATE - { - //txt = qtn_msh_tooltip_unmute; // Unmute Microphone - helptxt = qtn_msh_tooltip_unmute; - bmpfile = "Z:\\Resource\\apps\\musuitoolbaricons.mif"; // Only ROM . RAM is unofficial - bmpid = EMbmMusuitoolbariconsQgn_indi_tb_microphone_unmute; - bmpmask = EMbmMusuitoolbariconsQgn_indi_tb_microphone_unmute_mask; - extension = r_mus_microphone_unmute_button_state_extension; - } - }; - }; - }, - - //****************************************************************** // - TBAR_CTRL - { - type = EAknCtButton; - id = EMusuiCmdToolbarBlank; - control = AVKON_BUTTON - { - flags = KAknButtonSizeFitText; - }; - }, - - // ****************************************************************** // - - TBAR_CTRL // Sending LiveClip & Receiving: Speaker off <=> Toggled - { - type = EAknCtButton; - id = EMusuiCmdToolbarSpeakerOff; - control = AVKON_BUTTON - { - flags = KAknButtonSizeFitText ; - states = - { - AVKON_BUTTON_STATE - { - //txt = qtn_msh_tooltip_ihf_off; // Loudspeaker off - helptxt = qtn_msh_tooltip_ihf_off; - bmpfile = "Z:\\Resource\\apps\\musuitoolbaricons.mif"; // Only ROM . RAM is unofficial - bmpid = EMbmMusuitoolbariconsQgn_indi_tb_ihf_off; - bmpmask = EMbmMusuitoolbariconsQgn_indi_tb_ihf_off_mask; - extension = r_mus_ihf_off_button_state_extension; - } - }; - }; - }, - TBAR_CTRL // Sending Live/Clip & Receiving: Speaker on <=> Toggled - { - type = EAknCtButton; - id = EMusuiCmdToolbarSpeakerOn; - control = AVKON_BUTTON - { - flags = KAknButtonSizeFitText; - states = - { - AVKON_BUTTON_STATE - { - //txt = qtn_msh_tooltip_ihf_on; // Loudspeaker on - helptxt = qtn_msh_tooltip_ihf_on; - bmpfile = "Z:\\Resource\\apps\\musuitoolbaricons.mif"; // Only ROM . RAM is unofficial - bmpid = EMbmMusuitoolbariconsQgn_indi_tb_ihf_on; - bmpmask = EMbmMusuitoolbariconsQgn_indi_tb_ihf_on_mask; - extension = r_mus_ihf_on_button_state_extension; - } - }; - }; - } - }; - } - - - -// BUTTON STATE EXTENSION needed for skinning - -RESOURCE AVKON_BUTTON_STATE_EXTENSION r_mus_call_volume_button_state_extension - { - bmbSkinIdMajor= EAknsMajorGeneric; - bmbSkinIdMinor= EAknsMinorGenericQgnIndiTbCallVolume; - } - -RESOURCE AVKON_BUTTON_STATE_EXTENSION r_mus_fullscreen_button_state_extension - { - bmbSkinIdMajor= EAknsMajorGeneric; - bmbSkinIdMinor= EAknsMinorGenericQgnIndiTbFullscreen; - } - -RESOURCE AVKON_BUTTON_STATE_EXTENSION r_mus_pause_send_video_button_state_extension - { - bmbSkinIdMajor= EAknsMajorGeneric; - bmbSkinIdMinor= EAknsMinorGenericQgnIndiTbPauseSendVideo; - } - -RESOURCE AVKON_BUTTON_STATE_EXTENSION r_mus_video_button_state_extension - { - bmbSkinIdMajor= EAknsMajorGeneric; - bmbSkinIdMinor= EAknsMinorGenericQgnIndiTbVideo; - } - -RESOURCE AVKON_BUTTON_STATE_EXTENSION r_mus_rec_pause_button_state_extension - { - bmbSkinIdMajor= EAknsMajorGeneric; - bmbSkinIdMinor= EAknsMinorGenericQgnIndiCamsTbRecPause; - } - -RESOURCE AVKON_BUTTON_STATE_EXTENSION r_mus_play_button_state_extension - { - bmbSkinIdMajor= EAknsMajorGeneric; - bmbSkinIdMinor= EAknsMinorGenericQgnIndiTbPlay; - } - -RESOURCE AVKON_BUTTON_STATE_EXTENSION r_mus_ffw_frew_button_state_extension - { - bmbSkinIdMajor= EAknsMajorGeneric; - bmbSkinIdMinor= EAknsMinorGenericQgnIndiTbFfwFrew; - } - -RESOURCE AVKON_BUTTON_STATE_EXTENSION r_mus_zoom_button_state_extension - { - bmbSkinIdMajor= EAknsMajorGeneric; - bmbSkinIdMinor= EAknsMinorGenericQgnIndiTbZoom; - } - -RESOURCE AVKON_BUTTON_STATE_EXTENSION r_mus_brightness_button_state_extension - { - bmbSkinIdMajor= EAknsMajorGeneric; - bmbSkinIdMinor= EAknsMinorGenericQgnIndiTbBrightness; - } - -RESOURCE AVKON_BUTTON_STATE_EXTENSION r_mus_microphone_mute_button_state_extension - { - bmbSkinIdMajor= EAknsMajorGeneric; - bmbSkinIdMinor= EAknsMinorGenericQgnIndiTbMicrophoneMute; - } - -RESOURCE AVKON_BUTTON_STATE_EXTENSION r_mus_microphone_unmute_button_state_extension - { - bmbSkinIdMajor= EAknsMajorGeneric; - bmbSkinIdMinor= EAknsMinorGenericQgnIndiTbMicrophoneUnmute; - } - -RESOURCE AVKON_BUTTON_STATE_EXTENSION r_mus_ihf_off_button_state_extension - { - bmbSkinIdMajor= EAknsMajorGeneric; - bmbSkinIdMinor= EAknsMinorGenericQgnIndiTbIhfOff; - } - -RESOURCE AVKON_BUTTON_STATE_EXTENSION r_mus_ihf_on_button_state_extension - { - bmbSkinIdMajor= EAknsMajorGeneric; - bmbSkinIdMinor= EAknsMinorGenericQgnIndiTbIhfOn; - } - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -RESOURCE DIALOG r_mus_text_query_dialog - { - flags = EAknGeneralQueryFlags; - buttons = R_AVKON_SOFTKEYS_OK_CANCEL; - items = - { - DLG_LINE - { - type = EAknCtQuery; - id = EGeneralQuery; - control = AVKON_DATA_QUERY - { - layout = EDataLayout; - control = EDWIN - { - flags = EEikEdwinOnlyASCIIChars; - avkon_flags = EAknEditorFlagLatinInputModesOnly; - default_input_mode = EAknEditorTextInputMode; - allowed_input_modes = EAknEditorTextInputMode | - EAknEditorNumericInputMode; - }; - }; - } - }; - } - - -// ----------------------------------------------------------------------------- -// Resource for the address selection query. -// ----------------------------------------------------------------------------- -// -RESOURCE DIALOG r_mus_confirmation_query_dialog - { - flags = EGeneralQueryFlags; - buttons = R_AVKON_SOFTKEYS_YES_NO; - items = - { - DLG_LINE - { - type = EAknCtQuery; - id = EMusConfirmationQuery; - control = AVKON_CONFIRMATION_QUERY - { - layout = EConfirmationQueryLayout; - }; - } - }; - } - - -// ----------------------------------------------------------------------------- -// Resource for the address selection query. -// ----------------------------------------------------------------------------- -// -RESOURCE AVKON_LIST_QUERY r_mus_livesharingview_address_query - { - flags = EGeneralQueryFlags; - softkeys = R_AVKON_SOFTKEYS_OK_CANCEL; - items = - { - AVKON_LIST_QUERY_DLG_LINE - { - control = AVKON_LIST_QUERY_CONTROL - { - listtype = EAknCtSinglePopupMenuListBox; - listbox = AVKON_LIST_QUERY_LIST - { - array_id = r_mus_livesharingview_address_array; - }; - heading = qtn_msh_inviteview_select_query_hdr_txt; - }; - } - }; - } - - -// ----------------------------------------------------------------------------- -// Resource for the address selection query array -// ----------------------------------------------------------------------------- -// -RESOURCE ARRAY r_mus_livesharingview_address_array - { - items = - { - LBUF { txt = ""; } - }; - } - - -// ----------------------------------------------------------------------------- -// Resource for the inviting wait note -// ----------------------------------------------------------------------------- -// -RESOURCE DIALOG r_mus_view_inviting_wait_note - { - flags = EAknWaitNoteFlags | EEikDialogFlagWait; - buttons = R_AVKON_SOFTKEYS_CANCEL; - items = - { - DLG_LINE - { - type = EAknCtNote; - id = EMusInvitingWaitNoteId; - control = AVKON_NOTE - { - layout = EWaitLayout; - animation = R_QGN_GRAF_WAIT_BAR_ANIM; - }; - } - }; - } - - -// ----------------------------------------------------------------------------- -// Resource for the camera activation wait note -// ----------------------------------------------------------------------------- -// -RESOURCE DIALOG r_mus_live_sharing_view_activate_camera_wait_note - { - flags = EAknWaitNoteFlags | EEikDialogFlagWait; - buttons = R_AVKON_SOFTKEYS_CANCEL; - items = - { - DLG_LINE - { - type = EAknCtNote; - id = EMusActivateCameraWaitNoteId; - control = AVKON_NOTE - { - layout = EWaitLayout; - animation = R_QGN_GRAF_WAIT_BAR_ANIM; - }; - } - }; - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -RESOURCE DIALOG r_mus_view_transcoding_wait_note - { - flags = EAknProgressNoteFlags; - buttons = R_AVKON_SOFTKEYS_CANCEL; - items = - { - DLG_LINE - { - type = EAknCtNote; - id = EMusTranscodingProgressNoteId; - control = AVKON_NOTE - { - layout = EWaitLayout; - }; - } - }; - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -RESOURCE TBUF r_mus_text_enter_address_dialog_prompt - { - buf = qtn_msh_inviteview_enter_sip; - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -RESOURCE TBUF r_mus_live_sharing_view_title - { - buf = qtn_msh_shareview_title; - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -RESOURCE TBUF r_mus_live_sharing_view_inviting_wait_note_txt - { - buf = qtn_msh_note_inviting; - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -RESOURCE TBUF r_mus_live_sharing_view_open_camera_lens_cover_wait_note_txt - { - buf = qtn_msh_note_change_camera_mode; - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -RESOURCE TBUF r_mus_registration_pending_wait_note_txt - { - //"Registering to SIP server" - buf = qtn_msh_note_registration_pending; - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -RESOURCE TBUF r_mus_change_keypad_mode_txt - { - buf = qtn_msh_note_change_keypad_mode; - } - - -// -------------------------------------------------------- -// Resources related to video receive -// -------------------------------------------------------- - -RESOURCE TBUF r_mus_receive_view_note_incoming_video_request - { - buf = qtn_msh_note_incoming_video_request; // "Accept sharing request from %U[35]?" - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -RESOURCE TBUF r_mus_receive_view_waiting_for_stream - { - buf = qtn_msh_note_waiting_for_stream; - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -RESOURCE TBUF r_mus_view_save_address_query_txt - { - buf = qtn_msh_query_save_contact; - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -RESOURCE TBUF r_mus_view_saved_filename - { - buf = qtn_msh_set_saving_filename; - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -RESOURCE TBUF r_mus_view_save_shared_video_query - { - buf = qtn_msh_query_save_clip; - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -RESOURCE TBUF r_mus_view_note_video_saved - { - buf = qtn_msh_note_video_saved; - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -RESOURCE TBUF r_mus_video_save_folder_name - { - buf = qtn_apps_mg_gs; - } - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -RESOURCE TBUF r_mus_progress_note_converting_clip - { - // "Converting clip for sharing" - buf = qtn_msh_note_transcoding_video; - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -RESOURCE TBUF r_mus_view_note_transcoding_complete - { - // "Clip conversion complete" - buf = qtn_msh_note_transcoding_complete; - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -RESOURCE TBUF r_mus_view_note_memorycard_problem - { - // "Memory card is not accessible. Phone memory will be used instead." - buf = qtn_msh_note_memorycard_problem; - } - - -// ----------------------------------------------------------------------------- -// Error Note Strings -// ----------------------------------------------------------------------------- -// -RESOURCE TBUF r_mus_live_sharing_view_note_recipient_not_found - { - // "Unable to find recipient" - buf = qtn_msh_note_recipient_not_found; - } - -RESOURCE TBUF r_mus_live_sharing_view_note_app_n_a - { - // "Recipient does not have 'Video sharing' application" - buf = qtn_msh_note_app_n_a; - } - -RESOURCE TBUF r_mus_live_sharing_view_note_connection_rejected - { - // "Invitation rejected by recipient" - buf = qtn_msh_note_connection_rejected; - } - -RESOURCE TBUF r_mus_live_sharing_view_note_no_response - { - // "No response received to invitation" - buf = qtn_msh_note_no_response; - } - -RESOURCE TBUF r_mus_live_sharing_view_note_invitation_cancelled - { - // "Invitation cancelled" - buf = qtn_msh_note_invitation_cancelled; - } - -RESOURCE TBUF r_mus_live_sharing_view_note_resource_n_a - { - // "Application not available" - buf = qtn_msh_note_resource_n_a; - } - -RESOURCE TBUF r_mus_live_sharing_view_note_error_mediainit - { - // "Media initialisation failed" - buf = qtn_msh_note_error_mediainit; - } - -RESOURCE TBUF r_mus_live_sharing_view_note_error_filelock - { - // "Unable to read file" - buf = qtn_msh_note_error_filelock; - } - -RESOURCE TBUF r_mus_live_sharing_view_note_error_genericfile - { - // "File error" - buf = qtn_msh_note_error_genericfile; - } - -RESOURCE TBUF r_mus_live_sharing_view_note_error_app_general - { - // "Application error" - buf = qtn_msh_note_error_app_general; - } - -RESOURCE TBUF r_mus_live_sharing_view_note_startup_failed - { - // "Start-up failed. Reinstall 'Video sharing' application." - buf = qtn_msh_note_startup_failed; - } - -RESOURCE TBUF r_mus_live_sharing_view_note_bad_startup_settings - { - // "Start-up failed. Check settings." - buf = qtn_msh_note_bad_startup_settings; - } - -RESOURCE TBUF r_mus_live_sharing_view_note_connection_lost - { - // "Disconnected" - buf = qtn_msh_note_connection_lost; - } - -RESOURCE TBUF r_mus_live_sharing_view_note_recipient_busy - { - // "Recipient already sharing video. Unable to establish connection." - buf = qtn_msh_note_recipient_busy; - } - -RESOURCE TBUF r_mus_live_sharing_view_note_network_n_a - { - // "No network coverage" - buf = qtn_msh_note_network_n_a; - } - -RESOURCE TBUF r_mus_live_sharing_view_note_recipient_n_a - { - // "Recipient busy. Try again later." - buf = qtn_msh_note_recipient_n_a; - } - -RESOURCE TBUF r_mus_live_sharing_view_note_wrong_address - { - // "Recipient not found. Check the address." - buf = qtn_msh_note_wrong_address; - } - -RESOURCE TBUF r_mus_live_sharing_view_note_timeout_expired - { - // "Connection time-out" - buf = qtn_msh_note_timeout_expired; - } - -RESOURCE TBUF r_mus_live_sharing_view_note_service_n_a - { - // "Service temporarily unavailable" - buf = qtn_msh_note_service_n_a; - } - -RESOURCE TBUF r_mus_live_sharing_view_note_only_3g - { - // "Video Sharing is supported only in 3G network." - buf = qtn_mshstarter_note_network_incompatible; - } - -RESOURCE TBUF r_mus_live_sharing_view_note_invite_error - { - // "Unable to send invitation" - buf = qtn_msh_note_invite_error; - } - -RESOURCE TBUF r_mus_live_sharing_view_note_no_reg - { - // "Unable to register to network" - buf = qtn_msh_note_no_reg; - } - -RESOURCE TBUF r_mus_live_sharing_view_note_transcoding_not_supported - { - // "Clip is not in correct format. Unable to share." - buf = qtn_msh_note_transcoding_not_supported; - } - -RESOURCE TBUF r_mus_live_sharing_view_note_sharing_ended - { - // "Video sharing ended" - buf = qtn_msh_note_sharing_ended; - } - -RESOURCE TBUF r_mus_live_sharing_view_note_sharing_ended_record - { - // "Video sharing ended. Continue recording?" - buf = qtn_msh_note_sharing_ended_record; - } - -RESOURCE TBUF r_mus_view_drm_info_send_forbid - { - // "Unable to send protected object" - buf = qtn_drm_info_send_forbid_one; - } - -RESOURCE TBUF r_mus_view_note_memory_low - { - // "Memory low. Recording stopped." - buf = qtn_msh_note_memory_low; - } - -RESOURCE TBUF r_mus_view_note_unable_to_convert - { - // "Unable to convert clip" - buf = qtn_msh_note_transcoding_failed; - } - -RESOURCE TBUF r_mus_note_hf_activated - { - // "Handsfree activated" - buf = qtn_hf_conf_activate; - } - -RESOURCE TBUF r_mus_note_hf_deactivated - { - // "Handsfree deactivated" - buf = qtn_hf_conf_earpiece; - } - -RESOURCE SLIDER r_mus_slider_vertical - { - layout=EAknSliderLayoutVertical; - minvalue=0; - maxvalue=100; - step=1; - valuetype=EAknSliderValueNone; - minlabel="-"; - maxlabel="+"; - } - -RESOURCE SLIDER r_mus_slider_horizontal - { - layout=EAknSliderLayoutHorizontal; - minvalue=0; - maxvalue=100; - step=1; - valuetype=EAknSliderValueNone; - } - -// end of file - diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshui/data/musui_reg.rss --- a/mmsharing/mmshui/data/musui_reg.rss Thu Aug 19 09:51:39 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,41 +0,0 @@ -/* -* 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: S60 v3.0-compatible application resource file -* -*/ - - - -#include -#include - -#include - -#include "musuid.hrh" - -UID2 KUidAppRegistrationResourceFile -UID3 KMusUiUid // 0x10282391 - -RESOURCE APP_REGISTRATION_INFO - { - app_file = "musui"; - localisable_resource_file = APP_RESOURCE_DIR"\\musui"; - localisable_resource_id = R_LOCALISABLE_APP_INFO; - hidden = KAppIsHidden; - embeddability = KAppNotEmbeddable; - //group_name = "musui"; - } - - -// end of file diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshui/graphics/Thumbs.db Binary file mmsharing/mmshui/graphics/Thumbs.db has changed diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshui/graphics/qgn_graf_rop_black.bmp Binary file mmsharing/mmshui/graphics/qgn_graf_rop_black.bmp has changed diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshui/graphics/qgn_indi_mus_end_rec.bmp Binary file mmsharing/mmshui/graphics/qgn_indi_mus_end_rec.bmp has changed diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshui/graphics/qgn_indi_mus_end_rec_mask.bmp Binary file mmsharing/mmshui/graphics/qgn_indi_mus_end_rec_mask.bmp has changed diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshui/graphics/qgn_indi_mus_paused.bmp Binary file mmsharing/mmshui/graphics/qgn_indi_mus_paused.bmp has changed diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshui/graphics/qgn_indi_mus_paused_mask.bmp Binary file mmsharing/mmshui/graphics/qgn_indi_mus_paused_mask.bmp has changed diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshui/graphics/qgn_indi_mus_speaker_muted.bmp Binary file mmsharing/mmshui/graphics/qgn_indi_mus_speaker_muted.bmp has changed diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshui/graphics/qgn_indi_mus_speaker_muted_mask.bmp Binary file mmsharing/mmshui/graphics/qgn_indi_mus_speaker_muted_mask.bmp has changed diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshui/graphics/qgn_indi_tb_gallery.svg --- a/mmsharing/mmshui/graphics/qgn_indi_tb_gallery.svg Thu Aug 19 09:51:39 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,42 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshui/graphics/qgn_indi_tb_microphone_mute.svg --- a/mmsharing/mmshui/graphics/qgn_indi_tb_microphone_mute.svg Thu Aug 19 09:51:39 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,64 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshui/graphics/qgn_indi_tb_microphone_unmute.svg --- a/mmsharing/mmshui/graphics/qgn_indi_tb_microphone_unmute.svg Thu Aug 19 09:51:39 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,39 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshui/graphics/qgn_indi_tb_zoom.svg --- a/mmsharing/mmshui/graphics/qgn_indi_tb_zoom.svg Thu Aug 19 09:51:39 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,41 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshui/graphics/qgn_indi_video_forw.svg --- a/mmsharing/mmshui/graphics/qgn_indi_video_forw.svg Thu Aug 19 09:51:39 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,37 +0,0 @@ - - - - -]> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshui/graphics/qgn_indi_video_pause.svg --- a/mmsharing/mmshui/graphics/qgn_indi_video_pause.svg Thu Aug 19 09:51:39 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,50 +0,0 @@ - - - - -]> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshui/graphics/qgn_indi_video_play.svg --- a/mmsharing/mmshui/graphics/qgn_indi_video_play.svg Thu Aug 19 09:51:39 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,32 +0,0 @@ - - - - -]> - - - - - - - - - - - - - - - - - - - - - - - - diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshui/graphics/qgn_indi_video_record.svg --- a/mmsharing/mmshui/graphics/qgn_indi_video_record.svg Thu Aug 19 09:51:39 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,43 +0,0 @@ - - - - -]> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshui/graphics/qgn_indi_video_record_not.svg --- a/mmsharing/mmshui/graphics/qgn_indi_video_record_not.svg Thu Aug 19 09:51:39 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,50 +0,0 @@ - - - - -]> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshui/graphics/qgn_indi_video_rew.svg --- a/mmsharing/mmshui/graphics/qgn_indi_video_rew.svg Thu Aug 19 09:51:39 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,40 +0,0 @@ - - - - -]> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshui/graphics/qgn_indi_video_stop.svg --- a/mmsharing/mmshui/graphics/qgn_indi_video_stop.svg Thu Aug 19 09:51:39 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,31 +0,0 @@ - - - - -]> - - - - - - - - - - - - - - - - - - - - - - - - diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshui/graphics/qgn_indi_video_wait1.svg --- a/mmsharing/mmshui/graphics/qgn_indi_video_wait1.svg Thu Aug 19 09:51:39 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,70 +0,0 @@ - - - - -]> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshui/graphics/qgn_indi_video_wait2.svg --- a/mmsharing/mmshui/graphics/qgn_indi_video_wait2.svg Thu Aug 19 09:51:39 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,70 +0,0 @@ - - - - -]> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshui/graphics/qgn_indi_video_wait3.svg --- a/mmsharing/mmshui/graphics/qgn_indi_video_wait3.svg Thu Aug 19 09:51:39 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,70 +0,0 @@ - - - - -]> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshui/graphics/qgn_indi_video_wait4.svg --- a/mmsharing/mmshui/graphics/qgn_indi_video_wait4.svg Thu Aug 19 09:51:39 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,70 +0,0 @@ - - - - -]> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshui/graphics/qgn_indi_video_wait5.svg --- a/mmsharing/mmshui/graphics/qgn_indi_video_wait5.svg Thu Aug 19 09:51:39 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,70 +0,0 @@ - - - - -]> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshui/graphics/qgn_indi_video_wait6.svg --- a/mmsharing/mmshui/graphics/qgn_indi_video_wait6.svg Thu Aug 19 09:51:39 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,70 +0,0 @@ - - - - -]> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshui/graphics/qgn_indi_video_wait7.svg --- a/mmsharing/mmshui/graphics/qgn_indi_video_wait7.svg Thu Aug 19 09:51:39 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,70 +0,0 @@ - - - - -]> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshui/graphics/qgn_indi_video_wait8.svg --- a/mmsharing/mmshui/graphics/qgn_indi_video_wait8.svg Thu Aug 19 09:51:39 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,66 +0,0 @@ - - - - -]> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshui/graphics/qgn_menu_mus_app_cxt.bmp Binary file mmsharing/mmshui/graphics/qgn_menu_mus_app_cxt.bmp has changed diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshui/graphics/qgn_menu_mus_app_cxt_mask.bmp Binary file mmsharing/mmshui/graphics/qgn_menu_mus_app_cxt_mask.bmp has changed diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshui/graphics/qgn_menu_mus_app_cxt_mask_soft.bmp Binary file mmsharing/mmshui/graphics/qgn_menu_mus_app_cxt_mask_soft.bmp has changed diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshui/graphics/qgn_menu_mus_app_lst.bmp Binary file mmsharing/mmshui/graphics/qgn_menu_mus_app_lst.bmp has changed diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshui/graphics/qgn_menu_mus_app_lst_mask.bmp Binary file mmsharing/mmshui/graphics/qgn_menu_mus_app_lst_mask.bmp has changed diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshui/graphics/qgn_menu_mus_app_lst_mask_soft.bmp Binary file mmsharing/mmshui/graphics/qgn_menu_mus_app_lst_mask_soft.bmp has changed diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshui/graphics/qgn_prop_mus_clip_rec_sub.bmp Binary file mmsharing/mmshui/graphics/qgn_prop_mus_clip_rec_sub.bmp has changed diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshui/graphics/qgn_prop_mus_clip_rec_sub_mask.bmp Binary file mmsharing/mmshui/graphics/qgn_prop_mus_clip_rec_sub_mask.bmp has changed diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshui/graphics/qgn_prop_mus_file_video.bmp Binary file mmsharing/mmshui/graphics/qgn_prop_mus_file_video.bmp has changed diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshui/graphics/qgn_prop_mus_file_video_mask.bmp Binary file mmsharing/mmshui/graphics/qgn_prop_mus_file_video_mask.bmp has changed diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshui/graphics/qgn_prop_mus_folder_sub_large.bmp Binary file mmsharing/mmshui/graphics/qgn_prop_mus_folder_sub_large.bmp has changed diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshui/graphics/qgn_prop_mus_folder_sub_large_mask.bmp Binary file mmsharing/mmshui/graphics/qgn_prop_mus_folder_sub_large_mask.bmp has changed diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshui/graphics/qgn_prop_mus_memc_mmc_tab.bmp Binary file mmsharing/mmshui/graphics/qgn_prop_mus_memc_mmc_tab.bmp has changed diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshui/graphics/qgn_prop_mus_memc_mmc_tab2.bmp Binary file mmsharing/mmshui/graphics/qgn_prop_mus_memc_mmc_tab2.bmp has changed diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshui/graphics/qgn_prop_mus_memc_mmc_tab2_mask.bmp Binary file mmsharing/mmshui/graphics/qgn_prop_mus_memc_mmc_tab2_mask.bmp has changed diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshui/graphics/qgn_prop_mus_memc_mmc_tab_mask.bmp Binary file mmsharing/mmshui/graphics/qgn_prop_mus_memc_mmc_tab_mask.bmp has changed diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshui/graphics/qgn_prop_mus_memc_phone_tab.bmp Binary file mmsharing/mmshui/graphics/qgn_prop_mus_memc_phone_tab.bmp has changed diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshui/graphics/qgn_prop_mus_memc_phone_tab2.bmp Binary file mmsharing/mmshui/graphics/qgn_prop_mus_memc_phone_tab2.bmp has changed diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshui/graphics/qgn_prop_mus_memc_phone_tab2_mask.bmp Binary file mmsharing/mmshui/graphics/qgn_prop_mus_memc_phone_tab2_mask.bmp has changed diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshui/graphics/qgn_prop_mus_memc_phone_tab_mask.bmp Binary file mmsharing/mmshui/graphics/qgn_prop_mus_memc_phone_tab_mask.bmp has changed diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshui/graphics/qgn_prop_mus_sip_url.bmp Binary file mmsharing/mmshui/graphics/qgn_prop_mus_sip_url.bmp has changed diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshui/graphics/qgn_prop_mus_sip_url_mask.bmp Binary file mmsharing/mmshui/graphics/qgn_prop_mus_sip_url_mask.bmp has changed diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshui/graphics/qgn_prop_mus_view_clip_sub.bmp Binary file mmsharing/mmshui/graphics/qgn_prop_mus_view_clip_sub.bmp has changed diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshui/graphics/qgn_prop_mus_view_clip_sub_mask.bmp Binary file mmsharing/mmshui/graphics/qgn_prop_mus_view_clip_sub_mask.bmp has changed diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshui/graphics/qgn_prop_mus_view_live_sub.bmp Binary file mmsharing/mmshui/graphics/qgn_prop_mus_view_live_sub.bmp has changed diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshui/graphics/qgn_prop_mus_view_live_sub_mask.bmp Binary file mmsharing/mmshui/graphics/qgn_prop_mus_view_live_sub_mask.bmp has changed diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshui/graphics/temp_icons/Thumbs.db Binary file mmsharing/mmshui/graphics/temp_icons/Thumbs.db has changed diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshui/graphics/temp_icons/qgn_msh_temp_ff.bmp Binary file mmsharing/mmshui/graphics/temp_icons/qgn_msh_temp_ff.bmp has changed diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshui/graphics/temp_icons/qgn_msh_temp_ff_mask.bmp Binary file mmsharing/mmshui/graphics/temp_icons/qgn_msh_temp_ff_mask.bmp has changed diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshui/graphics/temp_icons/qgn_msh_temp_norec.bmp Binary file mmsharing/mmshui/graphics/temp_icons/qgn_msh_temp_norec.bmp has changed diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshui/graphics/temp_icons/qgn_msh_temp_norec_mask.bmp Binary file mmsharing/mmshui/graphics/temp_icons/qgn_msh_temp_norec_mask.bmp has changed diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshui/graphics/temp_icons/qgn_msh_temp_pause.bmp Binary file mmsharing/mmshui/graphics/temp_icons/qgn_msh_temp_pause.bmp has changed diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshui/graphics/temp_icons/qgn_msh_temp_pause_mask.bmp Binary file mmsharing/mmshui/graphics/temp_icons/qgn_msh_temp_pause_mask.bmp has changed diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshui/graphics/temp_icons/qgn_msh_temp_play.bmp Binary file mmsharing/mmshui/graphics/temp_icons/qgn_msh_temp_play.bmp has changed diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshui/graphics/temp_icons/qgn_msh_temp_play_mask.bmp Binary file mmsharing/mmshui/graphics/temp_icons/qgn_msh_temp_play_mask.bmp has changed diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshui/graphics/temp_icons/qgn_msh_temp_rec.bmp Binary file mmsharing/mmshui/graphics/temp_icons/qgn_msh_temp_rec.bmp has changed diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshui/graphics/temp_icons/qgn_msh_temp_rec_mask.bmp Binary file mmsharing/mmshui/graphics/temp_icons/qgn_msh_temp_rec_mask.bmp has changed diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshui/graphics/temp_icons/qgn_msh_temp_rew.bmp Binary file mmsharing/mmshui/graphics/temp_icons/qgn_msh_temp_rew.bmp has changed diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshui/graphics/temp_icons/qgn_msh_temp_rew_mask.bmp Binary file mmsharing/mmshui/graphics/temp_icons/qgn_msh_temp_rew_mask.bmp has changed diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshui/graphics/temp_icons/qgn_msh_temp_stop.bmp Binary file mmsharing/mmshui/graphics/temp_icons/qgn_msh_temp_stop.bmp has changed diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshui/graphics/temp_icons/qgn_msh_temp_stop_mask.bmp Binary file mmsharing/mmshui/graphics/temp_icons/qgn_msh_temp_stop_mask.bmp has changed diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshui/graphics/temp_icons/qgn_msh_temp_wait.bmp Binary file mmsharing/mmshui/graphics/temp_icons/qgn_msh_temp_wait.bmp has changed diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshui/graphics/temp_icons/qgn_msh_temp_wait_mask.bmp Binary file mmsharing/mmshui/graphics/temp_icons/qgn_msh_temp_wait_mask.bmp has changed diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshui/group/bld.inf --- a/mmsharing/mmshui/group/bld.inf Thu Aug 19 09:51:39 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,46 +0,0 @@ -/* -* 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: project specification -* -*/ -#include - -PRJ_PLATFORMS -ARMV5 THUMB WINSCW - -PRJ_MMPFILES -musui.mmp - -PRJ_EXTENSIONS -START EXTENSION s60/mifconv -OPTION TARGETFILE musuitoolbaricons.mif -OPTION HEADERFILE musuitoolbaricons.mbg -OPTION SOURCEFILE toolbariconslist.txt -END - -PRJ_EXTENSIONS -START EXTENSION s60/mifconv -OPTION TARGETFILE musuiicons.mif -OPTION HEADERFILE musuiicons.mbg -OPTION SOURCEFILE musuiiconlist.txt -END - -START EXTENSION s60/mifconv -OPTION TARGETFILE musui_aif.mif -OPTION HEADERFILE musui_aif.mbg -OPTION SOURCEDIR ../graphics -OPTION SOURCES -c8,8 qgn_menu_mus_app_lst -c8,8 qgn_menu_mus_app_cxt -END - -// end of file diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshui/group/musui.mmp --- a/mmsharing/mmshui/group/musui.mmp Thu Aug 19 09:51:39 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,150 +0,0 @@ -/* -* 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: Specifies the project for building musui.exe, the -* application executable. -* -*/ - - -#include -#include - -#include "../../../inc/musuid.hrh" - - -TARGET musui.exe -TARGETTYPE EXE -UID 0x100039CE KMusUiUid //0x10282391 -EPOCSTACKSIZE 0x8000 // 32 kB -EPOCHEAPSIZE 0x4000 0x500000 // Max heapsize ~= 5MB -VENDORID VID_DEFAULT -CAPABILITY CAP_APPLICATION NetworkControl SwEvent Location MultimediaDD - -START RESOURCE ../data/musui.rss -HEADER -LANGUAGE_IDS -TARGETPATH APP_RESOURCE_DIR -END // RESOURCE - -START RESOURCE ../data/musui_reg.rss -DEPENDS musui.rsg -TARGETPATH /private/10003a3f/apps // Do not change the UID in this path. -END - -START BITMAP musui.mbm -HEADER -TARGETPATH APP_BITMAP_DIR -SOURCEPATH ../graphics -SOURCE c16 qgn_menu_mus_app_cxt.bmp -SOURCE 8 qgn_menu_mus_app_cxt_mask.bmp -SOURCE c8 qgn_graf_rop_black.bmp -END // BITMAP - -SOURCEPATH ../src -SOURCE musuiapp.cpp -SOURCE musuidocument.cpp -SOURCE musuiappui.cpp -SOURCE musuigeneralview.cpp -SOURCE musuisendview.cpp -SOURCE musuilivesharingview.cpp -SOURCE musuireceiveview.cpp -SOURCE musuiclipsharingview.cpp -SOURCE musuiviewcontainer.cpp -SOURCE musuisendviewcontainer.cpp -SOURCE musuilivesharingviewcontainer.cpp -SOURCE musuiclipsharingviewcontainer.cpp -SOURCE musuireceivecontainer.cpp -SOURCE musuistatuspanehandler.cpp -SOURCE musuinavimediadecorator.cpp -SOURCE musuinavimediaanimator.cpp -SOURCE musuiinvitationquery.cpp -SOURCE musuiactivequerydialog.cpp -SOURCE musuilevelindicator.cpp -SOURCE musuiactivetimer.cpp -SOURCE musuistartcontroller.cpp -SOURCE musuipropertywatch.cpp -SOURCE musuiresourcehandler.cpp -SOURCE musuieventcontroller.cpp -SOURCE musuisendcontroller.cpp -SOURCE musuilivesharingcontroller.cpp -SOURCE musuireceivecontroller.cpp -SOURCE musuiclipsharingcontroller.cpp -SOURCE musuibitmapdecoder.cpp -SOURCE musuiactivitymanger.cpp -SOURCE musuimmcmonitor.cpp -SOURCE musuicallbackservice.cpp -SOURCE musuidialogutil.cpp -SOURCE musuifileutil.cpp -SOURCE musuicontactutil.cpp -SOURCE musuibackgroundviewcontainer.cpp - - -USERINCLUDE . -USERINCLUDE ../inc - -USERINCLUDE ../data -USERINCLUDE ../../mmshshared/inc -USERINCLUDE ../../mmshengine/inc -USERINCLUDE ../../inc -USERINCLUDE ../../../inc - -APP_LAYER_SYSTEMINCLUDE -SYSTEMINCLUDE . - -// MUS libraries: - -// Symbian libraries: -LIBRARY apgrfx.lib // AppArc server client APIs -LIBRARY apparc.lib // Application framework API -LIBRARY bafl.lib // Resource readers -LIBRARY centralrepository.lib // Central repository -LIBRARY cntmodel.lib // Contact Model -LIBRARY cone.lib // Cone framework API -LIBRARY efsrv.lib // File Server API -LIBRARY eikcoctl.lib // Control framework API -LIBRARY eikcore.lib // Eikon core controls API -LIBRARY eikctl.lib // Eikon controls -LIBRARY eikdlg.lib // Eikon Dialog API -LIBRARY euser.lib // Base library -LIBRARY ws32.lib // Window server client API -LIBRARY fbscli.lib // CFbsBitmap -LIBRARY remconcoreapi.lib -LIBRARY remconinterfacebase.lib -LIBRARY hlplch.lib // HlpLauncher - -// S60 libraries: -LIBRARY aknnotify.lib // CAknGlobalNote -LIBRARY aknskins.lib // Avkon Skins Utils -LIBRARY avkon.lib // Avkon Utils -LIBRARY commonengine.lib // StringLoader -LIBRARY featmgr.lib // S60 Feature manager API -LIBRARY mgfetch.lib // Media Gallery Fetch Dialog -LIBRARY pbkeng.lib // PhoneBook Engine API -LIBRARY pbkview.lib // PhoneBook view API -LIBRARY platformenv.lib // PathInfo -LIBRARY aknicon.lib // AknIconUtils -LIBRARY aknlayout.lib // CdlEngine -LIBRARY gdi.lib // CFont -LIBRARY flogger.lib // RFileLogger -LIBRARY imageconversion.lib // CIImageDecoder -LIBRARY egul.lib // CGulIcon -LIBRARY pbk2commonui.lib // CPbk2ViewState -LIBRARY directorylocalizer.lib // CDirectoryLocalizer - -// MUS libarires: -LIBRARY musengine.lib // Engine - -PAGED - -// end of file diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshui/group/musuiiconlist.txt --- a/mmsharing/mmshui/group/musuiiconlist.txt Thu Aug 19 09:51:39 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,22 +0,0 @@ --c8,8 qgn_indi_video_forw --c8,8 qgn_indi_video_pause --c8,8 qgn_indi_video_play --c8,8 qgn_indi_video_record --c8,8 qgn_indi_video_record_not --c8,8 qgn_indi_video_rew --c8,8 qgn_indi_video_stop --c8,8 qgn_indi_video_wait1 --c8,8 qgn_indi_video_wait2 --c8,8 qgn_indi_video_wait3 --c8,8 qgn_indi_video_wait4 --c8,8 qgn_indi_video_wait5 --c8,8 qgn_indi_video_wait6 --c8,8 qgn_indi_video_wait7 --c8,8 qgn_indi_video_wait8 --c8,8 qgn_indi_cams_zoom_bg --c8,8 qgn_indi_cams_zoom_bg_max --c8,8 qgn_indi_cams_zoom_bg_min --c8,8 qgn_indi_cams_zoom_elevator --c8,8 qgn_indi_browser_tb_zoom_out --c8,8 qgn_indi_browser_tb_zoom_in - diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshui/group/toolbariconslist.txt --- a/mmsharing/mmshui/group/toolbariconslist.txt Thu Aug 19 09:51:39 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,13 +0,0 @@ --c8,8 qgn_indi_tb_call_volume --c8,8 qgn_indi_tb_fullscreen --c8,8 qgn_indi_cams_tb_rec_pause --c8,8 qgn_indi_tb_pause_send_video --c8,8 qgn_indi_tb_play --c8,8 qgn_indi_tb_video --c8,8 qgn_indi_tb_ffw_frew --c8,8 qgn_indi_tb_zoom --c8,8 qgn_indi_tb_brightness --c8,8 qgn_indi_tb_microphone_mute --c8,8 qgn_indi_tb_microphone_unmute --c8,8 qgn_indi_tb_ihf_off --c8,8 qgn_indi_tb_ihf_on diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshui/help/data/xhtml.zip Binary file mmsharing/mmshui/help/data/xhtml.zip has changed diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshui/help/group/bld.inf --- a/mmsharing/mmshui/help/group/bld.inf Thu Aug 19 09:51:39 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,26 +0,0 @@ -/* -* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* -* -* Description: -* Export help related files. -* -*/ - -#include -PRJ_EXPORTS -:zip ../data/xhtml.zip /epoc32/data/z/resource/ overwrite -:zip ../data/xhtml.zip /epoc32/winscw/c/resource/ overwrite - -../inc/msh.hlp.hrh MW_LAYER_PLATFORM_EXPORT_PATH(csxhelp/msh.hlp.hrh) -../rom/mmshuihelps_variant.iby CUSTOMER_APP_LAYER_IBY_EXPORT_PATH(mmshuihelps_variant.iby) diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshui/help/inc/msh.hlp.hrh --- a/mmsharing/mmshui/help/inc/msh.hlp.hrh Thu Aug 19 09:51:39 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,30 +0,0 @@ -/* -* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - initial contribution. -* -* Contributors: -* -* Description: -* -*/ - -// -// msh.hlp.hrh generated by CSXHelp Utilities. -// - -#ifndef __MSH_HLP_HRH__ -#define __MSH_HLP_HRH__ - -_LIT(KMSH_HLP_LIVE, "MSH_HLP_LIVE"); // -_LIT(KMSH_HLP_CLIP, "MSH_HLP_CLIP"); // -_LIT(KMSH_HLP_SETTINGS, "MSH_HLP_SETTINGS"); // -_LIT(KMSH_HLP_RECEIVE, "MSH_HLP_RECEIVE"); // - -#endif \ No newline at end of file diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshui/help/rom/mmshuihelps_variant.iby --- a/mmsharing/mmshui/help/rom/mmshuihelps_variant.iby Thu Aug 19 09:51:39 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,28 +0,0 @@ -/* -* 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: -* -*/ - -#ifndef __MMSHUIHELPS_VARIANT_IBY__ -#define __MMSHUIHELPS_VARIANT_IBY__ - -#if defined(FF_S60_HELPS_IN_USE) && defined(__MULTIMEDIA_SHARING) - data=LOCALISE(DATAZ_\resource\xhtml\%02d\0x10282391\contents.zip, RESOURCE_FILES_DIR\xhtml\%02d\0x10282391\contents.zip) - data=LOCALISE(DATAZ_\resource\xhtml\%02d\0x10282391\index.xml, RESOURCE_FILES_DIR\xhtml\%02d\0x10282391\index.xml) - data=LOCALISE(DATAZ_\resource\xhtml\%02d\0x10282391\keywords.xml, RESOURCE_FILES_DIR\xhtml\%02d\0x10282391\keywords.xml) - data=LOCALISE(DATAZ_\resource\xhtml\%02d\0x10282391\meta.xml, RESOURCE_FILES_DIR\xhtml\%02d\0x10282391\meta.xml) -#endif - -#endif \ No newline at end of file diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshui/inc/musui.hrh --- a/mmsharing/mmshui/inc/musui.hrh Thu Aug 19 09:51:39 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,111 +0,0 @@ -/* -* 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: The MUS application's resource header file. -* -*/ - - -#ifndef MUS_HRH -#define MUS_HRH - -// -// Application menu commands -// -enum TMusUiMenuCommands - { - // General commands start - EMusuiCmdAppTest = 1, - EMusuiCmdViewPause, - EMusuiCmdViewContinue, - EMusuiCmdViewReplay, - EMusuiCmdViewShareVideo, - EMusuiCmdViewShareImage, - EMusuiCmdViewShareLive, - EMusuiCmdViewClipAudio, - EMusuiCmdViewAudioNormal, - EMusuiCmdViewAudioMute, - EMusuiCmdViewFullScreen, - EMusuiCmdViewZoom, - EMusuiCmdViewBrightness, - EMusuiCmdViewMicrophoneMute, - EMusuiCmdViewMicrophoneUnmute, - EMusuiCmdViewIncreaseBrightness, - EMusuiCmdViewDecreaseBrightness, - EMusuiCmdViewZoomIn, - EMusuiCmdViewZoomOut, - EMusuiCmdViewVolumeUp, // Not in menu - EMusuiCmdViewVolumeDown, // Not in menu - EMusuiCmdViewVolumeChanged, // Not in menu - EMusuiCmdViewFastForward, // Not in menu - EMusuiCmdViewFastReverse, // Not in menu - EMusuiCmdViewFastForwardEnd, // Not in menu - EMusuiCmdViewFastReverseEnd, // Not in menu - EMusuiCmdViewLoadspeaker, - EMusuiCmdViewHandset, - EMusuiCmdViewEndActiveCall, - EMusuiCmdViewMiddleSoftkeyOk, - EMusuiCmdRecord, - EMusuiCmdStopRecording, - EMusuiGenCmdExit, - EMusuiGenCmdBack, - // Toolbar commands: - EMusuiCmdToolbarVolume, - EMusuiCmdToolbarFullScreen, - EMusuiCmdToolbarPauseLive, - EMusuiCmdToolbarUnPauseLive, - EMusuiCmdToolbarPause, - EMusuiCmdToolbarUnPause, - EMusuiCmdToolbarZoom, - EMusuiCmdToolbarFFRev, - EMusuiCmdToolbarBrightness, - EMusuiCmdToolbarMute, - EMusuiCmdToolbarUnmute, - EMusuiCmdToolbarBlank, - EMusuiCmdToolbarSpeakerOff, - EMusuiCmdToolbarSpeakerOn, - EMusuiCmdToolbarGallery, - EMusUiCmdToolbarLastIndex // For loops - }; - -enum TMusUiDlgIds - { - EMusDialogTextQuery = 0x200, - EMusConfirmationQuery - }; - -enum TMusUiControlIds - { - EMusDummyControlId = 1000, - EMusInvitingWaitNoteId, - EMusTranscodingProgressNoteId, - EMusActivateCameraWaitNoteId - }; -// -// MUS clip list view icons -// -enum TMusUiIconID - { - EMusuiMarkingIconId = 0, // Icon for marking - EMusuiFolderIconId, // Folder icon for user created folder - EMusuiFolderSubfolderIconId, // - " - with subfolders - EMusuiVideoIconId, // Icon for video file - EMusuiOtherIconId, // Icon for other file type - // Icon # of this enumeration (MUST be the last entry in this enumeration): - EMusuiIconCount - }; - - -#endif - -// end of file diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshui/inc/musuiactivequerydialog.h --- a/mmsharing/mmshui/inc/musuiactivequerydialog.h Thu Aug 19 09:51:39 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,78 +0,0 @@ -/* -* 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: The MUS application's UI class. -* -*/ - - - -#ifndef MUSUIACTIVEQUERYDIALOG_H -#define MUSUIACTIVEQUERYDIALOG_H - -//#include "musuiactivetimerobserver.h" - -#include - -class CAknGlobalConfirmationQuery; -class MMusUiQueryObserver; - -/** - * - * - * - * @lib musui.exe - */ -class CMusUiActiveQueryDialog : public CActive - { - -public: // constructor - - static CMusUiActiveQueryDialog* NewL( MMusUiQueryObserver& aObserver ); - - ~CMusUiActiveQueryDialog(); - -private: - - CMusUiActiveQueryDialog( MMusUiQueryObserver& aObserver ); - - void ConstructL(); - - -public: // new functions - - void ShowL( const TDesC& aPrompt ); - - -protected: // from CActive - - void RunL(); - - void DoCancel(); - - TInt RunError( TInt aError ); - - -private: // data - - /** A global confirmation query. Own. */ - CAknGlobalConfirmationQuery* iGlobalQuery; - - /** Observer. */ - MMusUiQueryObserver& iObserver; - }; - - -#endif // MUSUIACTIVEQUERYDIALOG_H - -// end of file diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshui/inc/musuiactivetimer.h --- a/mmsharing/mmshui/inc/musuiactivetimer.h Thu Aug 19 09:51:39 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,76 +0,0 @@ -/* -* 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: -* -*/ - - - -#ifndef MUSUIACTIVETIMER_H -#define MUSUIACTIVETIMER_H - -#include - -class MMusUiActiveTimerObserver; - -class CMusUiActiveTimer : public CActive - { - -public: // constructors and destructor - - /** - * Destructor. - */ - ~CMusUiActiveTimer(); - - /** - * Two-phased constructor. Leaves on failure. - * @return The constructed CMusUiActiveTimer object. - */ - static CMusUiActiveTimer* NewL( MMusUiActiveTimerObserver* aObserver ); - -private: - - /** - * C++ constructor. - */ - CMusUiActiveTimer( MMusUiActiveTimerObserver* aObserver ); - - /** - * Symbian 2nd-phase constructor. - */ - void ConstructL(); - -public: // new funtions: - - void After( TTimeIntervalMicroSeconds32 anInterval ); - -private: // functions from base class CActive - - void DoCancel(); - - void RunL(); - - TInt RunError( TInt aError ); - -private: // Data - - RTimer iTimer; - MMusUiActiveTimerObserver* iObserver; - - }; - -#endif // MUSUIACTIVETIMER_H - -// end of file diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshui/inc/musuiactivetimerobserver.h --- a/mmsharing/mmshui/inc/musuiactivetimerobserver.h Thu Aug 19 09:51:39 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,36 +0,0 @@ -/* -* 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: Mus Applications Event Observer Interface -* -*/ - - - -#ifndef MUSUIACTIVETIMEROBSERVER_H -#define MUSUIACTIVETIMEROBSERVER_H - -class CMusUiActiveTimer; - -class MMusUiActiveTimerObserver - { - -public: - - virtual void TimerComplete( CMusUiActiveTimer* aTimer ) = 0; - - }; - -#endif // MUSUIACTIVETIMEROBSERVER_H - -// end of file diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshui/inc/musuiactivitymanger.h --- a/mmsharing/mmshui/inc/musuiactivitymanger.h Thu Aug 19 09:51:39 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,71 +0,0 @@ -/* -* 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: -* -*/ - - - -#ifndef MUSUIACTIVITYMANGER_H -#define MUSUIACTIVITYMANGER_H - -#include - - -class CMusUiActivityManager : public CActive - { - -public: - - static CMusUiActivityManager* NewL( TInt aTimeout = 60 ); - - ~CMusUiActivityManager(); - - -protected: - - CMusUiActivityManager( TInt aTimeout ); - - void ConstructL(); - - -public: // new functions: - - void SetTimeout(TInt aTimeout); - - void Start(); - - void Reset(); - - -protected: // from CActive - - void DoCancel(); - - void RunL(); - - TInt RunError( TInt aError ); - - -protected: - - RTimer iTimer; - - TInt iTimeout; - -}; - -#endif // MUSUIACTIVITYMANGER_H - -// end of file diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshui/inc/musuiapp.h --- a/mmsharing/mmshui/inc/musuiapp.h Thu Aug 19 09:51:39 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,52 +0,0 @@ -/* -* 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: The application's application class. -* -*/ - - -#ifndef MUSUIAPP_H -#define MUSUIAPP_H - - -#include - - -/** - * Application class of the MUS application. - * - * @lib musui.exe - */ -class CMusUiApp : public CEikApplication - { - -private: - - /** - * From CApaApplication, creates CMusUiDocument document object. - * @return A pointer to the created document object. - */ - CApaDocument* CreateDocumentL(); - - /** - * From CApaApplication, returns application's UID. - * @return The value of KUidMusUi - */ - TUid AppDllUid() const; - - }; - -#endif // MUSUIAPP_H - -// end of file diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshui/inc/musuiappui.h --- a/mmsharing/mmshui/inc/musuiappui.h Thu Aug 19 09:51:39 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,206 +0,0 @@ -/* -* 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: The MUS application's UI class. -* -*/ - - -#ifndef MUSUIAPPUI_H -#define MUSUIAPPUI_H - -#include "musuieventobserver.h" -#include "musuiqueryobserver.h" - -#include -#include -#include -#include -#include -#include -#include - -class CMusUiStatusPaneHandler; -class CMusUiActiveQueryDialog; -class CRemConInterfaceSelector; -class CRemConCoreApiTarget; - -/** - * The MUS application's UI class. - * - * @lib musui.exe - */ -class CMusUiAppUi : public CAknViewAppUi, - public MMusUiEventObserver, - public MMusUiQueryObserver, - public MRemConCoreApiTargetObserver, - public MCoeControlObserver - { - -public: // constructors and destructor - - /** - * EPOC default constructor. - */ - void ConstructL( ); - - /** - * Destructor. - */ - ~CMusUiAppUi(); - -public: // New functions - - CMusUiStatusPaneHandler* MusStatusPane(); - - TBool ExitValue(); - - -public: // from base class CEikAppUi - - void HandleWsEventL( const TWsEvent& aEvent, CCoeControl* aDestination ); - - void HandleForegroundEventL( TBool aForeground ); - -public: // from MRemConCoreApiTargetObserver - - void MrccatoCommand( TRemConCoreApiOperationId aOperationId, - TRemConCoreApiButtonAction aButtonAct ); - - -public: // from MMusUiQueryObserver - - virtual void QueryAcceptedL( TBool aAccepted ); - - /** - * Error handler for QueryAcceptedL. - * - * @param aError is error to be handled. - * @return KErrNone means handled value. All other values will lead to - * a panic. - */ - virtual TInt HandleQueryError( TInt aError ); - - -public: // from MMusUiEventObserver - - virtual void ActivateLocalMusViewL( TUid aViewId ); - - virtual void ActivateLocalMusViewL( TUid aViewId, - TUid aCustomMessageId, - const TDesC8& aCustomMessage ); - - virtual void ShowAsyncConfirmationQueryDialogL( const TDesC& aPrompt ); - - virtual void SetToolbarVisibility( TBool aVisible ); - - virtual void ShowNaviPaneIconL( TMusUiNaviMediaDecorator aIcon ); - - virtual CEikonEnv* EikonEnv( ) const; - - virtual void TerminateCall(); - - virtual CAknAppUiBase::TAppUiOrientation AppOrientation() const; - - /** - * Switch the active view's orientation, if it's in the foreground, - * from landscape to portrait, or vice versa. - */ - virtual void SwitchOrientationL( TAppUiOrientation aAppOrientation ); - - virtual void HandleError( const TInt aReason ); - - virtual void HandleExit(); - - virtual TBool OrientationCanBeChanged() const; - - virtual TInt GetUiVolumeValue(); - - virtual CMusUiResourceHandler* ResourceHandler(); - -private: // from base class CEikAppUi - - /** - * Takes care of command handling. - * - * @param aCommand The command to be handled. - */ - void HandleCommandL( TInt aCommand ); - - /** - * Handles a change to the application's resources which are shared - * across the environment. - * - * @param aType The type of resources that have changed. - */ - void HandleResourceChangeL( TInt aType ); - - TKeyResponse HandleKeyEventL( const TKeyEvent& aKeyEvent, TEventCode aType ); - - // Help context from CCoeAppUi - CArrayFix* HelpContextL() const; - -private: - - //from MCoeControlObserver - void HandleControlEventL(CCoeControl* aControl,TCoeEvent aEventType); - -private: - - void DoHandleForegroundEventL( TInt aEventType ); - - void FindWindowGroupIdentifiersL(); - - -private: // data - - /** Owns. Handle to status pane handler */ - CMusUiStatusPaneHandler* iStatusPaneHandler; - - CMusUiActiveQueryDialog* iConfirmationQuery; - - CRemConInterfaceSelector* iInterfaceSelector; - - CRemConCoreApiTarget* iCoreTarget; - - TBool iExit; - - TInt iLastKeyCode; - - /** - * ETrue if operator specific functionality is needed - */ - TBool iOperatorSpecificFunctionality; - - // Window group id of this application. - TInt iThisApplicationWgId; - - // Window group id of eikon server. - TInt iEikonServerWgId; - - // Window group id for AknCapServer - TInt iAknCapServerWgId; - - // Window group id for Akn Notifier Server - TInt iAknNfyServerWgId; - - TBool iForeground; - - CMusUiResourceHandler* iResourceHandler; - - - }; - -#endif // MUSUIAPPUI_H - -// end of file diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshui/inc/musuibackgroundviewcontainer.h --- a/mmsharing/mmshui/inc/musuibackgroundviewcontainer.h Thu Aug 19 09:51:39 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,154 +0,0 @@ -/* -* 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: The MUS application's UI class. -* -*/ - - - -#ifndef MUSUIBACKGROUNDVIEWCONTAINER_H -#define MUSUIBACKGROUNDVIEWCONTAINER_H - -#include // Control base class - -class MAknsControlContext; - -/** - * This class handles ordinal position two plain window. - * - * - * @lib musui.exe - */ -class CMusUiBackgroundViewContainer : public CCoeControl, - public MCoeControlObserver - { -public: // Constructors and destructor - - static CMusUiBackgroundViewContainer* NewL( - const TRect& aRect, - TInt aOrdinalPosition ); - - ~CMusUiBackgroundViewContainer(); - - -public: - - /** - * Refreshes the view. Called after the mode has been changed - * from portrait to landscape or vice versa. - */ - void RefreshView(); - - /** - * Sets the windows group ordinal position which is supplied - * at construction phase - */ - void SetOrdinalPosition(); - - /** - * Sets the windows group ordinal position for this container - * @aOrdianlPosition : Ordinal Position - */ - void SetOrdinalPosition( TInt aOrdianlPosition); - - /** - * Increase/decrease the windows group ordinal position which is supplied - * at construction phase based on aUp. - * @aUp : ETrue to increment else EFalse. - */ - void UpdateOrdinalPositionValue( TBool aUp ); - -private: // Construction - - CMusUiBackgroundViewContainer( TInt aOrdinalPosition ); - - void ConstructL( const TRect& aRect ); - -private: // from base class CCoeControl - - /** - * From CoeControl,SizeChanged. - */ - void SizeChanged(); - - /** - * Returns the number of control contained by this class. - * - * @return Number of controls contained - */ - TInt CountComponentControls() const; - - /** - * Returns handle to control pointed by aIndex. - * - * @param aIndex Wanted control's index [0..n] - * @return Handle to wanted control - */ - CCoeControl* ComponentControl( TInt aIndex ) const; - - /** - * Gets called by the application framework when drawing is - * needed. - * - * @param aRect The rectangle that needs to be drawn. - */ - void Draw( const TRect& aRect ) const; - - /** - * From MCoeControlObserver - * Acts upon changes in the hosted control's state. - * - * @param aControl The control changing its state - * @param aEventType The type of control event - */ - void HandleControlEventL(CCoeControl* aControl,TCoeEvent aEventType); - - /** - * Handles key events. - * - * @param aEvent The event that occured. - * @param aType Type of key event: EEventKey, EEventKeyUp, or - * EEventKeyDown. - * @return The container's response to event: either - * EKeyWasNotConsumed or EKeyWasConsumed. - */ - TKeyResponse OfferKeyEventL( const TKeyEvent& aEvent, TEventCode aType ); - - /** - * - */ - TTypeUid::Ptr MopSupplyObject( TTypeUid aId ); - - -private: // data - - /** Background skin control context */ - MAknsControlContext* iBackGround; - - /** - * Created window group identifier - */ - TInt iGroupIdentifier; - - /** - * Ordinal Postion for windows group - */ - TInt iOrdinalPosition; - - }; - - -#endif // MUSUILIVESHARINGVIEWCONTAINER_H - -// end of file diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshui/inc/musuibitmapdecoder.h --- a/mmsharing/mmshui/inc/musuibitmapdecoder.h Thu Aug 19 09:51:39 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,87 +0,0 @@ -/* -* 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: -* -*/ - - - -#ifndef MUSUIBITMAPDECODER_H -#define MUSUIBITMAPDECODER_H - -#include -#include - -class MMusUiBitmapDecoderObserver; -class CImageDecoder; -class CFbsBitmap; - -class CMusUiBitmapDecoder : public CActive - { - -public: // constructors and destructor - - /** - * Destructor. - */ - ~CMusUiBitmapDecoder(); - - /** - * Two-phased constructor. Leaves on failure. - * @return The constructed CMusUiBitmapDecoder instance. - */ - static CMusUiBitmapDecoder* NewL( MMusUiBitmapDecoderObserver& aObserver ); - -private: - - /** - * C++ constructor. - */ - CMusUiBitmapDecoder( MMusUiBitmapDecoderObserver& aObserver ); - - /** - * Symbian 2nd-phase constructor. - */ - void ConstructL(); - - -public: // new funtions: - - void ConvertL( HBufC8* aData, CFbsBitmap* aBitmap ); - - -private: // functions from base class CActive - - void DoCancel(); - - void RunL(); - - TInt RunError( TInt aError ); - -private: // Data - - MMusUiBitmapDecoderObserver& iObserver; - - CImageDecoder* iDecoder; - - CFbsBitmap* iBitmap; - - RFs iFs; - - HBufC8* iData; - }; - -#endif // MUSUIBITMAPDECODER_H - -// end of file diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshui/inc/musuibitmapdecoderobserver.h --- a/mmsharing/mmshui/inc/musuibitmapdecoderobserver.h Thu Aug 19 09:51:39 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,36 +0,0 @@ -/* -* 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: Mus Applications Event Observer Interface -* -*/ - - - -#ifndef MUSUIBITMAPDECODEROBSERVER_H -#define MUSUIBITMAPDECODEROBSERVER_H - -class CFbsBitmap; - -class MMusUiBitmapDecoderObserver - { - -public: - - virtual void UpdateBitmap( CFbsBitmap* aBitmap ) = 0; - - }; - -#endif // MUSUIBITMAPDECODEROBSERVER_H - -// end of file diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshui/inc/musuicallbackobserver.h --- a/mmsharing/mmshui/inc/musuicallbackobserver.h Thu Aug 19 09:51:39 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,54 +0,0 @@ -/* -* 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: -* -*/ - - - -#ifndef MUSUICALLBACKOBSERVER_H -#define MUSUICALLBACKOBSERVER_H - - -#include "musuidefinitions.h" - - -/** - * MUS application's note request interface. - */ -class MMusUiCallbackObserver - { - -public: // new functions - - /** - * Process asynchronous event. - * - * @param aEventId Id of the triggered event - */ - virtual void HandleAsyncEventL( TMusUiAsyncEvent aEventId ) = 0; - - /** - * Error handler for HandleAsyncEventL. - * - * @param aError is error to be handled. - * @return KErrNone means handled value. All other values will lead to - * a panic. - */ - virtual TInt HandleAsyncError( TInt aError ) = 0; - - }; - - -#endif // MUSUICALLBACKOBSERVER_H diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshui/inc/musuicallbackservice.h --- a/mmsharing/mmshui/inc/musuicallbackservice.h Thu Aug 19 09:51:39 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,122 +0,0 @@ -/* -* 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: -* -*/ - - -#ifndef MUSUICALLBACKSERVICE_H -#define MUSUICALLBACKSERVICE_H - -#include "musuidefinitions.h" -#include - -class MMusUiCallbackObserver; - - -/** - * Callback Service used to pass asynchronous events - */ -class CMusUiCallbackService : public CActive - { - -public: // Constructors and destructor - - /** - * Two-phased constructor. - * @param aCallbackObserver the observer that will receive the callbacks. - * @return new instance of CMusUiCallbackService. - */ - static CMusUiCallbackService* NewL( - MMusUiCallbackObserver& aCallbackObserver ); - - /** - * Destructor. - */ - ~CMusUiCallbackService(); - -private: // Constructors - - /** - * C++ default constructor. - * @param aCallbackObserver the observer that will receive the callbacks. - */ - CMusUiCallbackService( MMusUiCallbackObserver& aCallbackObserver ); - - /** - * By default Symbian 2nd phase constructor is private. - */ - void ConstructL(); - - -public: // New functions - - /** - * Buffer a request to trigger an event. - * @param aEventId Id of the event - */ - void AsyncEventL( TMusUiAsyncEvent aEventId ); - - /** - * Called when the notifier has been deactivated so resources can be - * freed and outstanding messages completed. - */ - void Cancel(); - - /** - * Check what event is currently pending - * @return EMusUiAsyncUninitialized is no events are pending - */ - TMusUiAsyncEvent CurrentEvent() const; - - -public: // Functions from CActive base class - - /** - * From CActive. Called when a request completes. - */ - void RunL(); - - /** - * From CActive. Called when a leave occurres in RunL. - * @param aError Symbian OS errorcode. - * @return Error Code. - */ - TInt RunError(TInt aError); - - /** - * From CActive. Called when a request is cancelled. - */ - void DoCancel(); - - -private: // New functions - - /** - * Activate the object. - */ - void Activate(); - - -private: // Data - - /** Handle to callback observer. */ - MMusUiCallbackObserver& iCallbackObserver; - - /** Event ID to pass through. */ - TMusUiAsyncEvent iEventId; - - }; - -#endif // MUSUICALLBACKSERVICE_H diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshui/inc/musuiclipsharingcontroller.h --- a/mmsharing/mmshui/inc/musuiclipsharingcontroller.h Thu Aug 19 09:51:39 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,224 +0,0 @@ -/* -* 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: -* -*/ - - -#ifndef MUSUICLIPSHARINGCONTROLLER_H -#define MUSUICLIPSHARINGCONTROLLER_H - -#include "musuisendcontroller.h" -#include "musengclipsessionobserver.h" -#include "musunittesting.h" -#include "musuiactivetimerobserver.h" - -#include -#include - -class MMusUiClipSharingObserver; -class CMusEngClipSession; -class CMusUiActiveTimer; - -/** - * - * - * @lib musui.exe - */ -class CMusUiClipSharingController : public CMusUiSendController, - public MMusEngClipSessionObserver, - public MMusUiActiveTimerObserver - { - - MUS_UNITTEST( UT_CMusUiClipSharingController ) - -public: - - static CMusUiClipSharingController* NewL( - MMusUiEventObserver& aEventObserver, - MMusUiSharingObserver& aSharingObserver, - MMusUiSendObserver& aSendObserver, - MMusUiClipSharingObserver& aClipObserver, - const TRect& aRect ); - - virtual ~CMusUiClipSharingController(); - - -private: - - CMusUiClipSharingController( MMusUiEventObserver& aEventObserver, - MMusUiSharingObserver& aSharingObserver, - MMusUiSendObserver& aSendObserver, - MMusUiClipSharingObserver& aClipObserver ); - - void ConstructL( const TRect& aRect ); - - -public: // From CMusUiEventController: - - virtual void OfferToolbarEventL( TInt aCommand ); - - virtual void HandleCommandL( TInt aCommand ); - - virtual void HandleAsyncEventL( TMusUiAsyncEvent aEventId ); - - virtual void DeleteEngineSession(); - - -public: // from CMusUiSendController - - virtual CMusEngMceOutSession* EngineOutSession(); - - /** - * Handles status changes specific to sending side sharing types. - * To be overridden in sibling classes for sharing type specific - * status changes. Calls base class version if status change is not - * sending side specific. - */ - virtual void HandleChangedStatusL( TMusAvailabilityStatus aStatus ); - - virtual void InviteL( const TDesC& aRecipient ); - - virtual void HandleSliderValueChangeL( TInt aNewLevel ); - - -public: // new functions: - - void SetFileNameL( const TDesC& aFileName ); - - TBool ClipEnded(); - - TBool ClipMutedL(); - - TBool ClipContainsAudioL(); - - void CancelTranscodingL(); - - void StopWindingL(); - - TBool ToolbarFFRevSelected(); - - -private: // new functions: - - void TranscodingProgressedL( TInt aPercentage ); - - void TranscodingCompletedInitL(); - - void TranscodingCompletedFinalizeL(); - - const TDesC& FormattedDurationString( - const TTimeIntervalSeconds& aDurationSeconds, - const TTimeIntervalSeconds& aPositionSeconds ); - - -public: // From MMusEngClipSessionObserver - - virtual void EndOfClip(); - - virtual void TranscodingNeeded(TBool aDueUnknownRemoteCapabilities); - - virtual void TranscodingProgressed( TInt aPercentage ); - - virtual void TranscodingCompletedInit(); - - virtual void TranscodingCompletedFinalize(); - - virtual void TranscodingFailed(); - - virtual void RewindFromEndL(); - - -public: // from MMusEngOutSessionObserver - - virtual void SessionRecipientNotFound(); // 404 - - -public: // from MMusEngSessionObserver - - virtual void SessionEstablished(); - - virtual void SessionTerminated(); - - virtual void SessionConnectionLost(); - - virtual void SessionFailed(); - - virtual void StreamIdle(); - - virtual void StreamStreaming(); - - virtual void SessionTimeChanged( const TTimeIntervalSeconds& aSeconds ); - - virtual void InactivityTimeout(); - - -public: // from MMusUiActiveTimerObserver - - void TimerComplete( CMusUiActiveTimer* aTimer ); - - -private: // new functions: - - void StreamStreamingL(); - - void StreamIdleL(); - - void SessionTimeChangedL( const TTimeIntervalSeconds& aSeconds ); - - TBool DoFastForwardingL( TBool aUseWinding ); - - TBool DoFastRewindingL( TBool aUseWinding ); - - TBool DoInviteL(); - - -private: - - MMusUiClipSharingObserver& iClipObserver; - - CMusEngClipSession* iSession; - - HBufC* iFileName; - - TRect iRect; - - TBool iClipEnded; - - TBool iTranscode; - - TBool iTranscodeDueUnknownRemoteCapas; - - TBool iTranscodingGoing; - - TBool iToolbarFFRevSelected; - - TBuf<11> iDurationStringBuffer; - - TBool iFastForward; - - TBool iFastRewind; - - TBool iFileFetchingOngoing; - - // timer initiating session close on expiring - CMusUiActiveTimer* iCloseTimer; - - TBool iWasPlayingBeforeWinding; - - }; - -#endif // MUSUICLIPSHARINGCONTROLLER_H - -// end of file diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshui/inc/musuiclipsharingobserver.h --- a/mmsharing/mmshui/inc/musuiclipsharingobserver.h Thu Aug 19 09:51:39 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,56 +0,0 @@ -/* -* 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: Mus Applications Event Observer Interface -* -*/ - - - -#ifndef MUSUICLIPSHARINGOBSERVER_H -#define MUSUICLIPSHARINGOBSERVER_H - -#include "musuidefinitions.h" - -#include -#include - -class MMusUiClipSharingObserver - { - -public: - - virtual void RunFetchDialogL() = 0; - - virtual void ShowTranscodingProgressDialogL() = 0; - - virtual void UpdateClipTranscodingPercentageL( TInt aPercetage ) = 0; - - virtual void CancelTranscodingDialogL() = 0; - - virtual void UpdateClipPositionL( TInt aPositionInSeconds, - const TDesC& aFormattedPosition ) = 0; - - virtual void SetDurationValue( TInt aDurationValue ) = 0; - - virtual void SetPositionValueL( TInt aPositionValue ) = 0; - - virtual void SetDurationVisible() = 0; - - virtual void InvalidVideoFrame( TBool aInvalid = EFalse ) = 0; - - }; - -#endif // MUSUICLIPSHARINGOBSERVER_H - -// end of file diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshui/inc/musuiclipsharingview.h --- a/mmsharing/mmshui/inc/musuiclipsharingview.h Thu Aug 19 09:51:39 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,152 +0,0 @@ -/* -* 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: The MUS application's UI class. -* -*/ - - - -#ifndef MUSUICLIPSHARINGVIEW_H -#define MUSUICLIPSHARINGVIEW_H - - -#include "musuisendview.h" // Base view class -#include "musuiclipsharingobserver.h" - -#include - -class CMusUiClipSharingViewContainer; -class CMusUiClipSharingController; -class CMusUiActivityManager; -class CMusUiBackgroundViewContainer; -class CAknToolbar; - - -/** - * The MUS application's clip sharing view. - * - * @lib musui.exe - */ -class CMusUiClipSharingView : public CMusUiSendView, - public MMusUiClipSharingObserver - { - -public: // constructors and destructor - - /** - * EPOC 2nd phase constructor. - */ - void ConstructL(); - - /** - * Destructor. - */ - virtual ~CMusUiClipSharingView(); - - -public: // from base class CAknView - - /** - * From CAknView returns Uid of View - * @return TUid uid of the view - */ - virtual TUid Id() const; - - // From MEikMenuObserver, Called by framework before constructing menupane - virtual void DynInitMenuPaneL( TInt aResourceId, CEikMenuPane* aMenuPane ); - - -public: // from CMusUiGeneralView - - virtual void HandleToolbarCommandL( TInt aCommand ); - - virtual void HandleKeyUpEvent( TInt aKeyCode ); - - virtual void SetInitialFocusedItemL(); - -public: // from base class MAknToolbarObserver - - virtual void DynInitToolbarL( TInt aResourceId, CAknToolbar* aToolbar ); - - -public: // from MMusUiClipSharingObserver - - virtual void RunFetchDialogL(); - - virtual void ShowTranscodingProgressDialogL(); - - virtual void UpdateClipTranscodingPercentageL( TInt aPercetage ); - - virtual void CancelTranscodingDialogL(); - - virtual void UpdateClipPositionL( TInt aPositionInSeconds, - const TDesC& aFormattedPosition ); - - virtual void SetDurationValue( TInt aDurationValue ); - - virtual void SetPositionValueL( TInt aPositionValue ); - - virtual void SetDurationVisible(); - - virtual void ReplaceToolbarCommand( TInt aOldCommand, - TInt aNewCommand, - TBool aSetNewCommandFocused ); - - virtual void InvalidVideoFrame( TBool aInvalid = EFalse ); - -public: // new functions - - void RefreshView(); - - void CancelTranscodingL(); - - -protected: // from CMusUiSendView - - virtual CMusUiSendController* SendController() const; - - virtual CMusUiSendViewContainer* SendContainer() const; - - -private: - - /** - * Gets called by the framework when it's activating this view. - * - * @param aPrevViewId Previous view id - * @param aCustomMessageId Custom message's id - * @param aCustomMessage Custom message - */ - void DoActivateL( const TVwsViewId& aPrevViewId, - TUid aCustomMessageId, - const TDesC8& aCustomMessage ); - - /** - * Gets called by the framework when it's deactivating this view. - */ - void DoDeactivate(); - - -private: // data - - /** Container for all controls in this view. Owns. */ - CMusUiClipSharingViewContainer* iContainer; - - CMusUiClipSharingController* iController; - - }; - -#endif // MUSUICLIPSHARINGVIEW_H - -// end of file diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshui/inc/musuiclipsharingviewcontainer.h --- a/mmsharing/mmshui/inc/musuiclipsharingviewcontainer.h Thu Aug 19 09:51:39 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,163 +0,0 @@ -/* -* 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: The MUS application's UI class. -* -*/ - - - -#ifndef MUSUICLIPSHARINGVIEWCONTAINER_H -#define MUSUICLIPSHARINGVIEWCONTAINER_H - -#include "musuisendviewcontainer.h" - -#include // Media Gallery fetcher verifier -#include - -class CAknProgressDialog; -class CEikProgressInfo; - -/** - * - * - * - */ -class CMusUiClipSharingViewContainer : public CMusUiSendViewContainer, - public MMGFetchVerifier, - public MProgressDialogCallback - - { - -public: // constructors and destructor - - /** - * Symbian second-phase constructor. - * - * @param aView Parent view of container. - * @param aRect Frame rectangle for container. - * @param aInputParams Packaged data. - */ - void ConstructL( CMusUiGeneralView* aView, const TRect& aRect ); - - /** - * Destructor. - */ - ~CMusUiClipSharingViewContainer(); - - -public: // new functions - - void ShowTranscodingProgressDialogL(); - - void UpdateClipTranscodingPercentageL( TInt aPercentage ); - - void CancelTranscodingL(); - - void RunFetchDialogL(); - - const TDesC& FetchedFileName(); - - TBool FileSelected(); - - void SetDurationValue( TInt aDurationValue ); - - void SetPositionValueL( TInt aPositionValue ); - - void SetDurationIndicatorVisible( TBool aVisible ); - -public: // from base class MMGFetchVerifier - - /** - * Verifies the current user selection. - * - * @param aSelectedFiles Descriptor array of selected files. - * @return EFalse if selection can't be used. If ok, returns ETrue. - */ - TBool VerifySelectionL( const MDesCArray* aSelectedFiles ); - -public: // from MProgressDialogCallback - - /** - * Callback method - * Get's called when a dialog is dismissed. - */ - void DialogDismissedL( TInt aButtonId ); - - -private: // from base class CCoeControl - - /** - * Returns the number of control contained by this class. - * - * @return Number of controls contained - */ - TInt CountComponentControls() const; - - /** - * Returns handle to control pointed by aIndex. - * - * @param aIndex Wanted control's index [0..n] - * @return Handle to wanted control - */ - CCoeControl* ComponentControl( TInt aIndex ) const; - - /** - * Gets called by the application framework when drawing is - * needed. - * - * @param aRect The rectangle that needs to be drawn. - */ - void Draw( const TRect& aRect ) const; - - /** - * Handles key events. - * - * @param aEvent The event that occured. - * @param aType Type of key event: EEventKey, EEventKeyUp, or - * EEventKeyDown. - * @return The container's response to event: either - * EKeyWasNotConsumed or EKeyWasConsumed. - */ - TKeyResponse OfferKeyEventL( const TKeyEvent& aEvent, TEventCode aType ); - -protected: // data - - /** - * ETrue if operator specific functionality is needed - */ - TBool iOperatorSpecificFunctionality; -private: // data - - /** - * A progress dialog to show the transcoding progress. Own. - */ - CAknProgressDialog* iTranscodingDialog; - - /** - * A progress dialog to show the transcoding progress. Own. - */ - CEikProgressInfo* iTranscodingProgress; - - HBufC* iFileName; - - TBool iFileSelected; - - TBool iTranscodingOngoing; - - }; - - -#endif // MUSUICLIPSHARINGVIEWCONTAINER_H - -// end of file diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshui/inc/musuicontactutil.h --- a/mmsharing/mmshui/inc/musuicontactutil.h Thu Aug 19 09:51:39 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,75 +0,0 @@ -/* -* Copyright (c) 2005-2006 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: -* -*/ - - -#ifndef MUSUICONTACTUTIL_H -#define MUSUICONTACTUTIL_H - -#include -#include -#include -#include - -class MusUiContactUtil - { - - public: - - /** - */ - static TBool ShareViewFieldExistsL( CCoeEnv& aEnv, TInt aContactId ); - - /** - */ - static TBool CheckPbContactForVSAddressesL( CCoeEnv& aEnv, - const TDesC& aOriginator, - TInt aContactId); - /** - */ - static TBool MatchTextWithPbFieldsL( CCoeEnv& aEnv, - TPbkFieldId aFieldId, - const TDesC& aText, - TInt aContactId); - /** - */ - static void ActivateContactViewL( CCoeEnv& aEnv, - TContactItemId aId, - const TDesC& aTypedAddress, - const TDesC& aMusTelNumberValue ); - - private: - - /** - */ - static void EditContactL( CPbkContactItem& aContact, - TBool aNewOne, - CPbkContactEngine* aPbkContactEngine, - const TDesC& aTypedAddress, - const TDesC& aMusTelNumberValue, - TContactItemId aId ); - - /** - */ - static CContactTextField* EditableContactFieldL( - CPbkContactItem& aContact, - TInt aFieldId, - CPbkContactEngine* aPbkContactEngine ); - }; - - - -#endif // MUSUICONTACTUTIL_H diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshui/inc/musuidefinitions.h --- a/mmsharing/mmshui/inc/musuidefinitions.h Thu Aug 19 09:51:39 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,135 +0,0 @@ -/* -* 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: The MUS application's UI class. -* -*/ - - - -#ifndef MUSUIDEFINITIONS_H -#define MUSUIDEFINITIONS_H - -#include - - -// View UIDs -const TUid KMusUidNullView = { 0 }; -const TUid KMusUidReceivingView = { 1 }; -const TUid KMusUidLiveSharingView = { 2 }; -const TUid KMusUidClipSharingView = { 3 }; -const TUid KMusUidGeneralView = { 4 }; -const TUid KMusUidSendView = { 5 }; - -// Volume settings -const TInt KMusVolumeMuted = 0; -const TInt KMusVolumeMaximum = 10; -const TInt KMusVolumeDefault = 5; - -// protocol prefixes and address components -const TInt KMusSipAddressesMaxAmount = 8; -const TInt KMusPrefixMaxLength = 4; -const TInt KMusSipAddressMaxLength = 256; -_LIT( KMusPrefixSipUri, "sip:" ); -_LIT( KMusPrefixTelUri, "tel:" ); -_LIT( KMusAtSymbol, "@" ); -_LIT( KMusSpaceSymbol, " " ); -_LIT( KMusEmptyStringSymbol, "" ); -_LIT( KMusCommaSymbol, "," ); -_LIT( KMusVideoFileNameExtension, ".3gp" ); -_LIT( KMusVideoFileNameBegining, "VS" ); -_LIT( KMusVideoFileNameVersion, "V" ); - -const TInt KMusDriveAndColonStringLength = 2; -const TInt KMusPercentUStringLength = 2; -const TInt KMusVideoFileNameNumberStringStartPos = 7; -const TInt KMusVideoFileNameNumberStringLength = 3; - -const TInt KMusDefaultArrayGranularity = 5; -const TInt KMusStringSubstArrayGranularity = 2; - -const TInt KMusOneHundredPercent = 100; - -const TInt KMusErrorMessageMaxLength = 512; -const TInt KMusNameFieldMaxLength = 512; -const TInt KMusFileNameMaxLength = 256; - -// time constants -const TInt KMusOneSecond = 1000000; // one second in microseconds -const TInt KMusInviteExpireTimeout = 60; // seconds -const TInt KMusReceiveTimeout = 10 * KMusOneSecond; // ten seconds -const TInt KMusOneMinuteInSeconds = 60; -const TInt KMusNumberValueTen = 10; -const TInt KMusLocaleHoursAndMinutesSeparator = 1; -const TInt KMusLocaleMinutesAndSecondsSeparator = 2; -const TInt KMusBacklightTimeOut = 4; // seconds - -const TInt KMusNumberValueTwo = 2; - -/** asynchronous UI events */ -enum TMusUiAsyncEvent - { - EMusUiAsyncUninitialized = 0, - EMusUiAsyncInviteCancel, - EMusUiAsyncManualAddressEntry, - EMusUiAsyncInviteAccepted, - EMusUiAsyncStartInvitation, - EMusUiAsyncStartMediaGallery, - EMusUiAsyncStartTranscoding, - EMusUiAsyncHandleExit - }; - -enum TMusUiNaviMediaDecorator - { - EMusUiNaviIconNone = -1, - EMusUiNaviIconForward, - EMusUiNaviIconPause, - EMusUiNaviIconPlay, - EMusUiNaviIconRecord, - EMusUiNaviIconRecordNot, - EMusUiNaviIconRew, - EMusUiNaviIconStop, - EMusUiNaviIconWaitAnim - }; - -enum TMusUiLoudspeakerStatus - { - ELoudspeakerDisabled = 0, - ELoudspeakerEnabled = 1 - }; - -enum TMusUiLoudspeakerDialogStatus - { - ELoudspeakerDialogDisabled = 0, - ELoudspeakerDialogEnabled = 1 - }; - -enum TMusUiVolumeStatus - { - EVolumeDown = 0, - EVolumeUp = 1 - }; - -enum TMusUiIndicatorType - { - EMusUiIndicatorTypeZoom = 0, - EMusUiIndicatorTypeBrightness, - EMusUiIndicatorTypeDuration - }; - - - -#endif // MUSUIDEFINITIONS_H - - -// end of file diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshui/inc/musuidialogutil.h --- a/mmsharing/mmshui/inc/musuidialogutil.h Thu Aug 19 09:51:39 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,61 +0,0 @@ -/* -* Copyright (c) 2005-2006 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: -* -*/ - - -#ifndef MUSDIALOGUTIL_H -#define MUSDIALOGUTIL_H - -#include -#include - -class MusUiDialogUtil - { - - public: - /** - */ - static TBool ShowGlobalConfirmationQueryDialogL( const TDesC& aPrompt ); - - static void ShowInformationDialogL( const TDesC& aPrompt ); - - static void ShowInformationDialogL( TInt aResourceId ); - - static void ShowGlobalInformationDialogL( TInt aResourceId ); - - static void ShowGlobalInformationDialogL( const TDesC& aMessage ); - - static void ShowGlobalErrorDialogL( const TDesC& aMessage ); - - static void ShowGlobalErrorDialogL( TInt aResourceId ); - - static void ShowGlobalErrorModalDialogL( const TDesC& aMessage ); - - static void ShowGlobalErrorModalDialogL( TInt aResourceId ); - - static TBool SelectAddressDialogL( CDesCArray* aAddressArray, - TDes& aSelectedAddress ); - - static TBool ShowTextQueryDialogL( const TDesC& aPrompt, TDes& aValue ); - - static TBool ShowTextQueryDialogL( TInt aPromptResourceId, - TDes& aValue ); - - }; - - - -#endif // MUSDIALOGUTIL_H diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshui/inc/musuidocument.h --- a/mmsharing/mmshui/inc/musuidocument.h Thu Aug 19 09:51:39 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,76 +0,0 @@ -/* -* 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: Document class of the application. -* -*/ - - -#ifndef MUSUIDOCUMENT_H -#define MUSUIDOCUMENT_H - -#include // Avkon document base class - -class CEikAppUi; - -/** - * Document class of MUS application. - * - * @lib musui.exe - */ -class CMusUiDocument : public CAknDocument - { - -public: // Constructors and destructor - - /** - * Two-phased constructor. - * @param aApp Handle to Eikon's application class - * @return a new instance of CMusUiDocument - */ - static CMusUiDocument* NewL( CEikApplication& aApp ); - - /** - * Destructor. - */ - virtual ~CMusUiDocument(); - -private: - - /** - * Default constructor - * @param aApp Handle to Eikon's application class - */ - CMusUiDocument( CEikApplication& aApp ); - - /** - * By default Symbian 2nd phase constructor is private. - */ - void ConstructL(); - -private: // Functions from base classes - - /** - * From CEikDocument, create CMusUiAppUi "App UI" object. - * @return a new instance of Mus Applications AppUi class - */ - CEikAppUi* CreateAppUiL(); - -private: // data - - - }; - -#endif // CMUSUIDOCUMENT_H - -// end of file diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshui/inc/musuieventcontroller.h --- a/mmsharing/mmshui/inc/musuieventcontroller.h Thu Aug 19 09:51:39 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,482 +0,0 @@ -/* -* 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: -* -*/ - - -#ifndef MUSUIEVENTCONTROLLER_H -#define MUSUIEVENTCONTROLLER_H - -#include "musuipropertyobserver.h" -#include "musuicallbackobserver.h" -#include "musuibitmapdecoderobserver.h" -#include "musresourceproperties.h" -#include "musuidefinitions.h" -#include "musmanagercommon.h" -#include "musuimmcobserver.h" -#include "musunittesting.h" - -#include "musengsessionobserver.h" -#include "musengaudioroutingobserver.h" -#include "musengvolumechangeobserver.h" - -#include // CAknAppUiBase::TAppUiOrientation - -class CMusUiCallbackService; -class MMusUiEventObserver; -class CMusUiMmcMonitor; -class CMusUiPropertyWatch; -class CMusUiBitmapDecoder; -class CFbsBitmap; -class CMusEngMceSession; -class MMusUiSharingObserver; -class CMusUiActivityManager; -class CMusUiResourceHandler; - -using namespace MultimediaSharing; - - -/** - * - * - * @lib musui.exe - */ -class CMusUiEventController : public CBase, - public MMusUiPropertyObserver, - public MMusUiCallbackObserver, - public MMusUiMmcObserver, - public MMusEngSessionObserver, - public MMusEngAudioRoutingObserver, - public MMusEngVolumeChangeObserver - { - -public: // enumerations - - enum TMusUiShutdownState - { - EMusUiShutdownNotDefined, - EMusUiShutdownStarted, - EMusUiShutdownVideoSaved, - EMusUiShutdownContactSavingQueried, - EMusUiShutdownOver - }; - - -public: - - /** - * - */ - virtual ~CMusUiEventController(); - - -protected: - - /** - * - */ - void ConstructL(); - - /** - * - */ - CMusUiEventController( MMusUiEventObserver& aEventObserver, - MMusUiSharingObserver& aSharingObserver ); - - -public: // From MMusUiPropertyObserver - - /** - * Sets the property key value common to all sharing types. - * To be overridden for specific key values. - * CMusUiPropertyWatch calls MMusUiPropertyObserver::PropertyChanged, - * when P&S key values change - * - * @param TUint aKey - The Property key - * @param TInt aValue - The value of the Property key - */ - virtual void PropertyChanged( const TUint aKey, const TInt aValue ); - - /** - * - */ - virtual void HandlePropertyError( const TInt aReason ); - - -public: // From MMusUiCallbackObserver - - /** - * Handles async events common to all session types. - * Should be called if child classes are not able to handle the call. - */ - virtual void HandleAsyncEventL( TMusUiAsyncEvent aEventId ); - - /** - * Error handler for HandleAsyncEventL. - */ - virtual TInt HandleAsyncError( TInt aError ); - - -public: // From MMusUiMmcObserver - - /** - * - */ - virtual void MmcRemoved(); - - -public: // From - - /** - * Handles session establishment procedures common to all session types. - */ - virtual void SessionEstablished(); - - -public: // From MMusEngAudioRoutingObserver - - /** - * Indicates that some other application has changed audio routing. - * - */ - virtual void AudioRoutingChanged( TBool aShowNote ); - - /** - * Before doing audio routing, permission is asked - * - */ - virtual TBool AudioRouteChangeAllowed() const; - -public: // From MMusEngVolumeChangeObserver - - /** - * Indicates that some other application has changed volume level. - * - */ - virtual void VolumeChanged( TInt aVolume, TBool aAudioRouteChanged ); - - -public: // New functions - - /** - * - */ - void SetRect( const TRect& aRect ); - - /** - * - */ - const TDesC& MusContactName(); - - /** - * - */ - const TDesC& MusVideoCodecValue(); - - /** - * - */ - const TDesC& MusTelNumberValue(); - - /** - * - */ - const TDesC& SessionTimeFormatted( const TTimeIntervalSeconds& aSeconds ); - - /** - * - */ - void SaveContactQueryL(); - - /** - * - */ - void HandleError( const TInt aError ); - - /** - * Starts shutdown process - */ - void HandleExitL( TBool aTerminateCall = EFalse ); - - /** - * - */ - void AsyncQueryDialogAcceptedL( TBool aAccepted ); - - /** - * - */ - TBool ExitOccured(); - - /** - * - */ - TBool AudioRoutingCanBeChanged(); - - /** - * - */ - TBool IsLoudSpeakerEnabled(); - - /** - * - */ - TBool DeviceHasDedicatedVolumeKeys(); - - /** - * Queries flag for session state - */ - TBool ConnectionEstablished() const; - - /** - * Set session initialization state - */ - void SetConnectionInitialized( TBool aConnectionInitialized ); - - /** - * Queries flag for session state - */ - TBool ConnectionInitialized() const; - - /** - * - */ - void EnableDisplayL( TBool aEnable ); - - /** - * - */ - void ChangeOrientationL( CAknAppUiBase::TAppUiOrientation aOrientation ); - - /** - * - */ - TBool ToolbarVolumeSelected(); - - /** - * - */ - TBool IsMicMutedL(); - - /** - * Function to be overridden in sibling classes - * @return EFalse by default - */ - virtual TBool ManualAddressTyped() const; - - /** - * - */ - virtual void HandleForegroundEventL( TBool aForeground ); - - /** - * - */ - virtual TBool IsForeground() const; - - /** - * - */ - virtual void OfferToolbarEventL( TInt aCommand ); - - /** - * - */ - virtual void HandleCommandL( TInt aCommand ); - - /** - * Returns a pointer to engine side session. - */ - virtual CMusEngMceSession* EngineSession() = 0; - - /** - * - */ - virtual const TDesC& TypedAddress() const = 0; - - /** - * - */ - virtual void DeleteEngineSession() = 0; - - /** - * - */ - TBool IsDisplayEnabledL(); - - /** - * - */ - TBool IsAudioRoutingLoudSpeaker(); - -protected: // New functions - - /** - * General functionality of exit procedure - */ - virtual void ExitProcedureL( TBool aUserAcceptance ); - - /** - * Handles status changes common to all sharing types. - * To be overridden in sibling classes for sharing type specific - * status changes. - */ - virtual void HandleChangedStatusL( TMusAvailabilityStatus aStatus ); - - -protected: - - /** - * - */ - MMusUiEventObserver& iEventObserver; - - /** - * - */ - MMusUiSharingObserver& iSharingObserver; - - /** - * - */ - CMusUiCallbackService* iCallbackService; - - /** - * Flag of the connection state - */ - TBool iConnectionEstablished; - - /** - * Flag of the connection state - */ - TBool iConnectionInitialized; - - /** - * - */ - TFileName iVideoFilePath; - - /** - * - */ - TFileName iLocalizedVideoFilePath; - - /** - * - */ - TFileName iVideoFileNamePlain; - - /** - * - */ - TInt iSipProfileId; - - /** - * - */ - TInt iContactId; - - /** - * - */ - HBufC* iContactName; - - /** - * - */ - HBufC* iTelNumber; - - /** - * - */ - HBufC* iDialogPrompt; - - /** - * - */ - HBufC* iVideoCodec; - - /** - * - */ - TBool iForeground; - - /** - * ETrue if operator specific functionality is needed - */ - TBool iOperatorSpecificFunctionality; - - /** - * - */ - CMusUiResourceHandler* iResourceHandler; - - /** - * - */ - TMusUiShutdownState iShutdownState; - - /** - * Flag indicating whether show "loudspeaker deactived" - */ - TBool iShowDialog; - - -private: - - /** - * - */ - CMusUiMmcMonitor* iMmcMonitor; - - /** - * - */ - CMusUiActivityManager* iActivityManager; - - /** - * - */ - CMusUiPropertyWatch* iStatusPropertyWatch; - - /** - * - */ - CMusUiPropertyWatch* iMicMuteStatusPropertyWatch; - - /** - * - */ - TBuf<7> iTimeBuffer; - - /** - * Flag of the Volume item in the Toolbar - */ - TBool iToolbarVolumeSelected; - - /** - * Flag indicating whether call has ended - */ - TBool iActiveCall; - - MUS_UNITTEST( UT_CMusUiEventController ) - MUS_UNITTEST( UT_CMusUiLiveSharingController ) - MUS_UNITTEST( UT_CMusUiClipSharingController ) - MUS_UNITTEST( UT_CMusUiReceiveController ) - }; - -#endif // MUSUIEVENTCONTROLLER_H - -// end of file diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshui/inc/musuieventobserver.h --- a/mmsharing/mmshui/inc/musuieventobserver.h Thu Aug 19 09:51:39 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,77 +0,0 @@ -/* -* 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: Mus Applications Event Observer Interface -* -*/ - - - -#ifndef MUSUIEVENTOBSERVER_H -#define MUSUIEVENTOBSERVER_H - -#include "musuidefinitions.h" - -#include -#include -#include -#include - -class CMusUiResourceHandler; - -class MMusUiEventObserver - { - -public: - - virtual void ActivateLocalMusViewL( TUid aViewId ) = 0; - - virtual void ActivateLocalMusViewL( TUid aViewId, - TUid aCustomMessageId, - const TDesC8& aCustomMessage ) = 0; - - virtual void ShowAsyncConfirmationQueryDialogL( const TDesC& aPrompt ) = 0; - - virtual void SetToolbarVisibility( TBool aVisible ) = 0; - - /** - * - */ - virtual void ShowNaviPaneIconL( TMusUiNaviMediaDecorator aIcon ) = 0; - - virtual CEikonEnv* EikonEnv() const = 0; - - virtual void TerminateCall() = 0; - - /** - * Return current app orientation. - */ - virtual CAknAppUiBase::TAppUiOrientation AppOrientation() const = 0; - - virtual void SwitchOrientationL( - CAknAppUiBase::TAppUiOrientation aOrientation ) = 0; - - virtual void HandleError( const TInt aReason ) = 0; - - virtual void HandleExit() = 0; - - virtual TBool OrientationCanBeChanged() const = 0; - - virtual TInt GetUiVolumeValue() = 0; - - virtual CMusUiResourceHandler* ResourceHandler() = 0; - }; - -#endif // MUSUIEVENTOBSERVER_H - -// end of file diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshui/inc/musuifileutil.h --- a/mmsharing/mmshui/inc/musuifileutil.h Thu Aug 19 09:51:39 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,51 +0,0 @@ -/* -* Copyright (c) 2005-2006 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: -* -*/ - - -#ifndef MUSFILEUTIL_H -#define MUSFILEUTIL_H - -#include - -class MusUiFileUtil - { - - public: - - /** - * return Existence of specified file - */ - static TBool FileExists( const TDesC& aFullFileName ); - - /** - */ - static void VideoFilePathExistsL( const TDesC& aVideoFilePath ); - - /** - */ - static void CreateVideoFileNameL( const TDesC& aVideoFilePath, - TFileName& aFileName ); - - /** - */ - static void DeleteFileL( const TDesC& aFileName ); - - }; - - - -#endif // MUSFILEUTIL_H diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshui/inc/musuigeneralview.h --- a/mmsharing/mmshui/inc/musuigeneralview.h Thu Aug 19 09:51:39 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,279 +0,0 @@ -/* -* 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: Mus Applications Event Observer Interface -* -*/ - - - -#ifndef MUSUIGENERALVIEW_H -#define MUSUIGENERALVIEW_H - -#include "musuisharingobserver.h" -#include "musuiactivetimerobserver.h" - -#include // Avkon resource file -#include // Avkon base view class -#include - -class CMusUiAppUi; -class CMusUiEventController; -class CMusUiActivityManager; -class CMusUiViewContainer; -class CAknIncallBubble; -class CMusUiActiveTimer; -class CMusUiBackgroundViewContainer; - -/** - * The base class for the MUS application's view classes. - * Encapsulates common methods for views. - * - * @lib musui.exe - */ -class CMusUiGeneralView : public CAknView, - public MAknToolbarObserver, - public MMusUiSharingObserver, - public MMusUiActiveTimerObserver - { - -public: // constructors and destructor - - enum TMusFgBgEventType - { - EMusFgBgEventNone, - EMusFgEvent, - EMusBgEvent - }; - - /** - * EPOC default constructor. - */ - void ConstructL(); - - /** - * Destructor. - */ - virtual ~CMusUiGeneralView(); - -public: // new functions - - /** - * @return the pointer to the application's AppUi (CMusUiAppUi). - */ - CMusUiAppUi* MusAppUi() const; - - /** - * Refreshes the view. Called after the mode has been changed from portrait - * to landscape or vice versa. This is a virtual function that must be - * implemented by all concrete MUS UI views. - */ - virtual void RefreshView() = 0; - - virtual void HandleToolbarCommandL( TInt aCommand ) = 0; - - virtual void HandleKeyUpEvent( TInt aKeyCode ); - - virtual void SetToolbarVisibility( TBool aVisible ); - - void AsyncQueryDialogAcceptedL( TBool aAccepted ); - - TInt FocusedToolbarItem() const; - - virtual void LevelIndicatorDismissed() {}; - virtual void SetInitialFocusedItemL() = 0; - - TBool OperatorSpecificFunctionality() const; - /** - * Called when UI comes to foregound / goes to background. - * CAknView version of HandleForegroundEventL is not used - * at it generates lots of events. Instead, appui implements - * foreground event callback funtion and forwards events to views - * via this method. - */ - virtual void DoHandleForegroundEventL( TBool aForeground ) = 0; - - -public: // from base class MAknToolbarObserver - - virtual void DynInitToolbarL( TInt aResourceId, CAknToolbar* aToolbar ); - - virtual void OfferToolbarEventL( TInt aCommand ); - - -public: // from MMusUiSharingObserver - - /* - * Shows sychronous wait dialog with softkey R_AVKON_SOFTKEYS_CANCEL. - * @param aPrompt Prompt text shown in dialog - * @param aTimerInSeconds Timer in seconds when dialog is dismissed - * automatically. Timer value 0 means that no timer is used. - * @param aExpirationMessageResourceId is ID of resource indicating - * the message to be shown if timer expires. Value 0 means that - * no message is shown. - * @return EFalse if dialog is dismissed by user pressing cancel - * or by expiration of timer. ETrue if DismissWaitDialogL - * is called with parameter ETrue; - */ - virtual TBool ShowWaitDialogL( const TDesC& aPrompt, - TInt aTimerInSeconds = 0, - TInt aExpirationMessageResourceId = 0 ); - - /* - * Dismisses sychronous wait dialog shown by calling ShowWaitDialogL. - * @param aReturnValue determines return value of function - * ShowWaitDialogL. - */ - virtual void DismissWaitDialogL( TBool aReturnValue = ETrue ); - - /* - * Set call back service of wait dialog - * @param aCallback A pointer of class MProgressDialogCallback - * which implemented DialogDismissedL - */ - virtual void SetWaitDialogCallbackL( MProgressDialogCallback* aCallback ); - - virtual void ShowStatusPaneTitleL(); - - virtual void EnableMiddleSoftkeyL( TInt aResourceId ); - - virtual void ActivateVolumeControlL( TInt aValue, TBool aOnlyIfVisible = EFalse ); - - virtual void HighlightSelectedToolbarItem( TInt aCommand ); - - /** - * General functionality for replacing a toolbar command - * Function should be overridden for specific functionality - */ - virtual void ReplaceToolbarCommand( TInt aOldCommand, - TInt aNewCommand, - TBool aSetNewCommandFocused ); - - /** - * If toolbar is shown, audio routing button will be refreshed according to - * current state of audio routing. - * In case there is no toolbar, middle softkey will be updated - */ - virtual void RefreshAudioRoutingToolbarButton(); - - virtual void UpdateSessionTime( const TDesC& aSessionTime ); - - virtual void DismissMenuBar(); - - -public: // from base class CAknView - - /** - * Takes care of command handling. - * - * @param aCommand The command that was received. - */ - virtual void HandleCommandL( TInt aCommand ); - - /** - * From MEikMenuObserver, called by framework before constructing menupane. - * Initializes menu items common to all sharing types. - */ - virtual void DynInitMenuPaneL( TInt aResourceId, CEikMenuPane* aMenuPane ); - -public: // from MMusUiActiveTimerObserver - - /** - * Indicates that a certain amount of time elapsed - */ - virtual void TimerComplete( CMusUiActiveTimer* aTimer ); - - -protected: // New functions - - virtual CMusUiEventController* EventController() const = 0; - - virtual CMusUiViewContainer& SharingContainer() const = 0; - - /** - * Leaves with KErrNotFound if eventcontroller is not available - */ - CMusUiEventController& EventControllerL() const; - - /** - * Called when event occurs of type EEventFocusLost or - * EEventFocusGained. - * - * @param aForeground ETrue if the application is in the foreground, - * otherwise EFalse. - * @param aExit indicates if the application should exit - */ - void HandleForegroundEventL( TBool aForeground, TBool aExit ); - - -protected: - - /** - * Gets called by the framework when it's activating this view. - * - * @param aPrevViewId Previous view id - * @param aCustomMessageId Custom message's id - * @param aCustomMessage Custom message - */ - void DoActivateL( const TVwsViewId& aPrevViewId, - TUid aCustomMessageId, - const TDesC8& aCustomMessage ); - - /** - * Gets called by the framework when it's deactivating this view. - */ - void DoDeactivate(); - -protected: - - - void CompleteForegroundEventL(); - void DoForegroundEventL(); - void DoBackgroundEventL( TBool aExit ); - void SetCurrentFgBgEvent( TMusFgBgEventType aEventType ); - TInt ToolbarPlaceHolderHeight() const; - TInt ToolbarPlaceHolderWidth() const; - void UpdateBackgroundOrdinalPosition( TBool aUp ); - void RefreshBackgroundContainer(); - -protected: // data - - /** - * ETrue if operator specific functionality is needed - */ - TBool iOperatorSpecificFunctionality; - - TBool iToolbarItemSelected; - - CMusUiBackgroundViewContainer* iBackgroundContainer; // skin background drawer - -private: // data - - CAknIncallBubble* iIncallBubble; - - CMusUiActiveTimer* iSessionEndTimer; - - CMusUiActiveTimer* iFgBgTimer; - - TMusFgBgEventType iCurrentFgBgEvent; - - TBool iCurrentExitSetting; - - }; - -// macro for NO_TOOLBAR case -#define MUS_NO_TOOLBAR ( iOperatorSpecificFunctionality && !(AknLayoutUtils::PenEnabled())) - -#endif // MUSUIGENERALVIEW_H - -// end of file diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshui/inc/musuiinvitationquery.h --- a/mmsharing/mmshui/inc/musuiinvitationquery.h Thu Aug 19 09:51:39 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,90 +0,0 @@ -/* -* 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: The MUS application's UI class. -* -*/ - - - -#ifndef MUSUIINVITATIONQUERY_H -#define MUSUIINVITATIONQUERY_H - -#include "musuiactivetimerobserver.h" - -#include - -class CAknGlobalConfirmationQuery; -class CMusUiActiveTimer; -class MMusUiInvitationQueryObserver; - -/** - * - * - * - * @lib musui.exe - */ -class CMusUiInvitationQuery : public CActive, - public MMusUiActiveTimerObserver - { - -public: // constructor - - static CMusUiInvitationQuery* NewL( MMusUiInvitationQueryObserver& aView ); - - ~CMusUiInvitationQuery(); - -private: - - CMusUiInvitationQuery( MMusUiInvitationQueryObserver& aView ); - - void ConstructL(); - - -public: // new functions - - void ShowL( const TDesC& aContact ); - - -public: // from: MMusUiActiveTimerObserver - - void TimerComplete( CMusUiActiveTimer* aTimer ); - - -protected: // from CActive - - void RunL(); - - void DoCancel(); - - TInt RunError( TInt aError ); - - -private: // data - - /** A global confirmation query. Own. */ - CAknGlobalConfirmationQuery* iGlobalQuery; - - /** A descriptor buffer for prompting. Own. */ - HBufC* iPrompt; - - CMusUiActiveTimer* iActiveTimer; - - /** Observer. */ - MMusUiInvitationQueryObserver& iObserver; - }; - - -#endif // MUSUIINVITATIONQUERY_H - -// end of file diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshui/inc/musuiinvitationqueryobserver.h --- a/mmsharing/mmshui/inc/musuiinvitationqueryobserver.h Thu Aug 19 09:51:39 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,42 +0,0 @@ -/* -* 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: The MUS application's UI class. -* -*/ - - - -#ifndef MUSUIINVITATIONQUERYOBSERVER_H -#define MUSUIINVITATIONQUERYOBSERVER_H - - -class MMusUiInvitationQueryObserver - { -public: - - /** - * - */ - virtual void InvitationAcceptedL() = 0; - - /** - * - */ - virtual void InvitationRejectedL() = 0; - }; - - -#endif // MUSUIINVITATIONQUERYOBSERVER_H - -// end of file diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshui/inc/musuilevelindicator.h --- a/mmsharing/mmshui/inc/musuilevelindicator.h Thu Aug 19 09:51:39 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,205 +0,0 @@ -/* -* 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: Class for displaying icons in viewfinder view -* -*/ - - -#ifndef MUSUILEVELINDICATOR_H -#define MUSUILEVELINDICATOR_H - -#include "musuidefinitions.h" -#include "musuiactivetimerobserver.h" - -// SYSTEM -#include -#include -#include - -class MAknsSkinInstance; -class CGulIcon; -class MMusUiLevelIndicatorObserver; -class CAknSlider; - -/** -* Class for displaying icons in viewfinder view -*/ -class CMusUiLevelIndicator : public CCoeControl, - public MCoeControlObserver, - public MMusUiActiveTimerObserver - { - - - public: // Constructors and destructor - - /** - * Symbian OS two-phased constructor. - * @param aController reference to CCcorController - */ - static CMusUiLevelIndicator* NewL( - TAknOrientation aLayout, - TInt aMinLevel, - TInt aMaxLevel, - CCoeControl* aParent, - const TRect& aRect, - MMusUiLevelIndicatorObserver* aObserver ); - - /** - * Symbian OS two-phased constructor. - * @param aController reference to CCcorController - */ - static CMusUiLevelIndicator* NewLC( - TAknOrientation aLayout, - TInt aMinLevel, - TInt aMaxLevel, - CCoeControl* aParent, - const TRect& aRect, - MMusUiLevelIndicatorObserver* aObserver ); - - /** - * Destructor. - */ - ~CMusUiLevelIndicator(); - - - public: // New functions - - /** - * - */ - void SetLevelL( TMusUiIndicatorType aType, - TInt aLevel, - TBool aUseTimer ); - - /** - * - */ - TInt GetLevel(TMusUiIndicatorType aType); - - /** - * - */ - void SetRange( TInt aMinLevel, TInt aMaxLevel, TBool aUseTimer); - - /** - * - */ - void SetIndicatorType( TMusUiIndicatorType aType ); - - /** - * - */ - TMusUiIndicatorType GetIndicatorType(); - - - private: // From CCoeControl - - /** - * Handles the size change events. - * - */ - virtual void SizeChanged(); - - virtual void Draw(const TRect& aRect) const; - - virtual TInt CountComponentControls() const; - - virtual CCoeControl* ComponentControl( TInt aIndex ) const; - - virtual void HandleResourceChange( TInt aType ); - - - private: // From CCoeControlObserver - - virtual void HandleControlEventL( CCoeControl* aControl, - TCoeEvent aEventType ); - - - private: // From MMusUiActiveTimerObserver - - virtual void TimerComplete( CMusUiActiveTimer* aTimer ); - - - private: // Constructors and destructor - - /** - * C++ constructor - */ - CMusUiLevelIndicator( TInt aMinLevel, - TInt aMaxLevel, - MMusUiLevelIndicatorObserver* aObserver ); - - /** - * Symbian 2nd phase constructor. - */ - void ConstructL( TAknOrientation aLayout, - CCoeControl* aParent, - const TRect& aRect ); - - - private: // HELPERS - - void ConstructImageL( CEikImage* aImage, - MAknsSkinInstance* aSkin, - const TAknsItemID& aId, - TInt aBitmapId, - TInt aMaskId, - TParse aParse ); - - /** - * Callback for disable level indicator. - * @since 2.8 - * @return KErrNone - */ - //static TInt DisableLevelIndicator( TAny* aThis ); - //void DisableTimer(); - //void EnableTimer(); - - - private: //data - - - TRect iParentRect; - - TRect iViewfinderRect; - - TInt iMinLevel; - - TInt iMaxLevel; - - TInt iZoomLevel; - - TInt iBrightnessLevel; - - TInt iDurationLevel; - - CMusUiActiveTimer* iDisableLevelTimer; - - TMusUiIndicatorType iIndicatorType; - - CAknSlider* iSlider; - - CMusUiActiveTimer* iSliderEventTimer; - - /** - * NOT OWN!!! - */ - MMusUiLevelIndicatorObserver* iObserver; - - }; - - -#endif - -// End of File diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshui/inc/musuilevelindicatorobserver.h --- a/mmsharing/mmshui/inc/musuilevelindicatorobserver.h Thu Aug 19 09:51:39 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,36 +0,0 @@ -/* -* 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: Mus level indicator Event Observer Interface -* -*/ - - - -#ifndef MUSUILEVELINDICATOROBSERVER_H -#define MUSUILEVELINDICATOROBSERVER_H - - -class MMusUiLevelIndicatorObserver - { - public: - - virtual void SetLevelIndicatorVisibility(TBool aVisible) = 0; - - virtual void IndicatorLevelChanged( TInt aNewLevel ) = 0; - - }; - -#endif // MUSUILEVELINDICATOROBSERVER_H - -// end of file diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshui/inc/musuilivesharingcontroller.h --- a/mmsharing/mmshui/inc/musuilivesharingcontroller.h Thu Aug 19 09:51:39 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,192 +0,0 @@ -/* -* 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: -* -*/ - - -#ifndef MUSUILIVESHARINGCONTROLLER_H -#define MUSUILIVESHARINGCONTROLLER_H - -#include "musuisendcontroller.h" -#include "musenglivesessionobserver.h" -#include "musunittesting.h" - -#include -#include - -class MMusUiLiveSharingObserver; -class CMusEngLiveSession; -class CMusUiActiveTimer; - -/** - * - * - * @lib musui.exe - */ -class CMusUiLiveSharingController : public CMusUiSendController, - public MMusEngLiveSessionObserver - { - - MUS_UNITTEST( UT_CMusUiLiveSharingController; ) - MUS_UNITTEST( UT_CMusUiEventController; ) - -public: - - static CMusUiLiveSharingController* NewL( - MMusUiEventObserver& aEventObserver, - MMusUiSharingObserver& aSharingObserver, - MMusUiSendObserver& aSendObserver, - MMusUiLiveSharingObserver& aLiveObserver, - const TRect& aRect ); - - virtual ~CMusUiLiveSharingController(); - - -private: - - CMusUiLiveSharingController( - MMusUiEventObserver& aEventObserver, - MMusUiSharingObserver& aSharingObserver, - MMusUiSendObserver& aSendObserver, - MMusUiLiveSharingObserver& aLiveObserver ); - - void ConstructL( const TRect& aRect ); - - -public: // From CMusUiEventController: - - virtual void PlayL(); - - virtual void PauseL(); - - virtual void OfferToolbarEventL( TInt aCommand ); - - virtual void HandleCommandL( TInt aCommand ); - - virtual void DeleteEngineSession(); - - -public: // from CMusUiSendController - - virtual CMusEngMceOutSession* EngineOutSession(); - - virtual void InviteL( const TDesC& aRecipient ); - - virtual void HandleSliderValueChangeL( TInt aNewLevel ); - -public: // new functions - - TMusUiNaviMediaDecorator RecordIcon(); - - TBool IsBrightnessSupported(); - - TBool IsDiskFull(); - - /** - * Determines whether zoom adjustment is selected either from toolbar - * or menu - */ - TBool ZoomSelected(); - - /** - * Determines whether brightness adjustment is selected either from toolbar - * or menu - */ - TBool BrightnessSelected(); - - void LevelIndicatorDismissed(); - TBool ToolbarZoomSelected(); - - TBool ToolbarBrightnessSelected(); - - /** - * - */ - void RefreshCameraOrientationL(); - - /** - * Determines whether Session established or not - */ - TBool IsSessionEstablished(); - - -private: // new functions: - - void ZoomInL(); - - void ZoomOutL(); - - void IncreaseBrightnessL(); - - void DecreaseBrightnessL(); - - void ZoomL(); - - void BrightnessL(); - - void HandleMiddleSoftkeyOkL(); -public: // From MMusEngLiveSessionObserver - - void DiskFull(); - - void OrientationRefreshEnded(); - -public: // from MMusEngSessionObserver - - void SessionEstablished(); - - void SessionTerminated(); - - void SessionConnectionLost(); - - void SessionFailed(); - - void StreamIdle(); - - void StreamStreaming(); - - void SessionTimeChanged( const TTimeIntervalSeconds& aSeconds ); - - void InactivityTimeout(); - - void HandlePauseResumeInToolbar(); - - void UserInitiatedCameraStateChangeL(TBool aEnable); - -private: - - MMusUiLiveSharingObserver& iLiveObserver; - - CMusEngLiveSession* iSession; - - TBool iToolbarZoomSelected; - - TBool iToolbarBrightnessSelected; - - TBool iZoomSelected; - - TBool iBrightnessSelected; - - TBool iDiskFull; - - TBool iSessionEstablished; - - CMusUiActiveTimer* iPauseResumeGuardTimer; - - }; - -#endif // MUSUILIVESHARINGCONTROLLER_H - -// end of file diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshui/inc/musuilivesharingobserver.h --- a/mmsharing/mmshui/inc/musuilivesharingobserver.h Thu Aug 19 09:51:39 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,51 +0,0 @@ -/* -* 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: Mus Applications Event Observer Interface -* -*/ - - - -#ifndef MUSUILIVESHARINGOBSERVER_H -#define MUSUILIVESHARINGOBSERVER_H - -#include "musuidefinitions.h" - -#include -#include - -class MMusUiLiveSharingObserver - { - -public: - - virtual void SetZoomValues( TInt aMinZoom, TInt aMaxZoom ) = 0; - - virtual void SetBrightnessValues( TInt aMinBrightness, TInt aMaxBrightness ) = 0; - - virtual void SetZoomL( TInt aZoomLevel ) = 0; - - virtual void SetBrightnessL( TInt aBrightnessLevel ) = 0; - - virtual void SetZoomVisible( TBool aVisible ) = 0; - - virtual void SetBrightnessVisible( TBool aVisible ) = 0; - - virtual void DoRefreshView() = 0; - - }; - -#endif // MUSUILIVESHARINGOBSERVER_H - -// end of file diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshui/inc/musuilivesharingview.h --- a/mmsharing/mmshui/inc/musuilivesharingview.h Thu Aug 19 09:51:39 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,172 +0,0 @@ -/* -* 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: The MUS application's UI class. -* -*/ - - - -#ifndef MUSUILIVESHARINGVIEW_H -#define MUSUILIVESHARINGVIEW_H - - -#include "musuisendview.h" // Base view class -#include "musuilivesharingobserver.h" - -#include - -class CMusUiLiveSharingViewContainer; -class CMusUiLiveSharingController; -class CMusUiActivityManager; -class CMusUiBackgroundViewContainer; -class CAknToolbar; - - -/** - * The MUS application's live sharing view. - * - * @lib musui.exe - */ -class CMusUiLiveSharingView : public CMusUiSendView, - public MMusUiLiveSharingObserver - { - -public: // constructors and destructor - - /** - * EPOC 2nd phase constructor. - */ - void ConstructL(); - - /** - * Destructor. - */ - virtual ~CMusUiLiveSharingView(); - - -public: // from base class CAknView - - /** - * From CAknView returns Uid of View - * @return TUid uid of the view - */ - TUid Id() const; - - // From MEikMenuObserver, Called by framework before constructing menupane - void DynInitMenuPaneL( TInt aResourceId, CEikMenuPane* aMenuPane ); - - -public: // from CMusUiGeneralView - - void HandleToolbarCommandL( TInt aCommand ); - - virtual void SetInitialFocusedItemL(); - - void RefreshAudioRoutingButton(); -public: // from base class MAknToolbarObserver - - void DynInitToolbarL( TInt aResourceId, CAknToolbar* aToolbar ); - - -public: // from MMusUiLiveSharingObserver - - void SetZoomValues( TInt aMinZoom, TInt aMaxZoom ); - - void SetBrightnessValues( TInt aMinBrightness, TInt aMaxBrightness ); - - void SetZoomL( TInt aZoomLevel ); - - void SetBrightnessL( TInt aBrightnessLevel ); - - void SetZoomVisible( TBool aVisible ); - - void SetBrightnessVisible( TBool aVisible ); - - void ReplaceToolbarCommand( TInt aOldCommand, - TInt aNewCommand, - TBool aSetNewCommandFocused ); - void DoRefreshView(); - -public: // new functions - - void RefreshView(); - - void LevelIndicatorDismissed(); - - void HandleKeyUpArrowL(); - - void HandleKeyDownArrowL(); - - /* In order to receive right oriented frames from camera when - * orientation changed, it has to be recreated.Only way to do - * from UI is to pause and play. - * - * aNewRect : New rectangle co-ordinates. - * This will be compared to old rectangle co-ordinates - * to find out whether orientation changed. - */ - void RefreshCameraOrientationL(TRect& aNewRect); - - /* ----------------------------------------------------------------------------- - * When Live sharing paused , camera source will be unavilable, hence - * it is inappropriate to show the zoom and brightness - * so hide those item. And unhide it again when unpaused. - * - * @aIsPaused : ETrue if paused else EFalse - */ - void HideToolbarCommandForPause( TBool aIsPaused ); - - void ResetToolBarSelected(); - -protected: // from CMusUiSendView - - virtual CMusUiSendController* SendController() const; - - virtual CMusUiSendViewContainer* SendContainer() const; - - -private: - - /** - * Gets called by the framework when it's activating this view. - * - * @param aPrevViewId Previous view id - * @param aCustomMessageId Custom message's id - * @param aCustomMessage Custom message - */ - void DoActivateL( const TVwsViewId& aPrevViewId, - TUid aCustomMessageId, - const TDesC8& aCustomMessage ); - - /** - * Gets called by the framework when it's deactivating this view. - */ - void DoDeactivate(); - - -private: // data - - /** Container for all controls in this view. Owns. */ - CMusUiLiveSharingViewContainer* iContainer; - - CMusUiLiveSharingController* iController; - - TBool iPauseSelected; - - }; - - -#endif // MUSUILIVESHARINGVIEW_H - -// end of file diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshui/inc/musuilivesharingviewcontainer.h --- a/mmsharing/mmshui/inc/musuilivesharingviewcontainer.h Thu Aug 19 09:51:39 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,120 +0,0 @@ -/* -* 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: The MUS application's UI class. -* -*/ - - - -#ifndef MUSUILIVESHARINGVIEWCONTAINER_H -#define MUSUILIVESHARINGVIEWCONTAINER_H - -#include "musuisendviewcontainer.h" -#include "musuilevelindicatorobserver.h" - - -/** - * - * - * - * @lib musui.exe - */ -class CMusUiLiveSharingViewContainer : public CMusUiSendViewContainer - { - -public: // constructors and destructor - - /** - * Symbian second-phase constructor. - * - * @param aView Parent view of container. - * @param aRect Frame rectangle for container. - * @param aInputParams Packaged data. - */ - void ConstructL( CMusUiGeneralView* aView, - const TRect& aRect ); - - /** - * Destructor. - */ - ~CMusUiLiveSharingViewContainer(); - - -public: // new functions - - void SetZoomValues( TInt aMinZoom, TInt aMaxZoom ); - - void SetBrightnessValues( TInt aMinBrightness, TInt aMaxBrightness ); - - void SetZoomL( TInt aZoomLevel ); - - void SetBrightnessL( TInt aBrightnessLevel ); - - void SetZoomVisible( TBool aVisible ); - - void SetBrightnessVisible( TBool aVisible ); - - TMusUiIndicatorType GetIndicatorType(); - - -private: // from base class CCoeControl - - /** - * Returns the number of control contained by this class. - * - * @return Number of controls contained - */ - TInt CountComponentControls() const; - - /** - * Returns handle to control pointed by aIndex. - * - * @param aIndex Wanted control's index [0..n] - * @return Handle to wanted control - */ - CCoeControl* ComponentControl( TInt aIndex ) const; - - /** - * Handles key events. - * - * @param aEvent The event that occured. - * @param aType Type of key event: EEventKey, EEventKeyUp, or - * EEventKeyDown. - * @return The container's response to event: either - * EKeyWasNotConsumed or EKeyWasConsumed. - */ - TKeyResponse OfferKeyEventL( const TKeyEvent& aEvent, TEventCode aType ); - - /** - * Handles pointer events. - * - * @param aEvent The event that occured. - */ - virtual void HandlePointerEventL( const TPointerEvent& aPointerEvent ); - -protected: // data - - /** - * ETrue if operator specific functionality is needed - */ - TBool iOperatorSpecificFunctionality; - -private: // data - - }; - - -#endif // MUSUILIVESHARINGVIEWCONTAINER_H - -// end of file diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshui/inc/musuimmcmonitor.h --- a/mmsharing/mmshui/inc/musuimmcmonitor.h Thu Aug 19 09:51:39 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,80 +0,0 @@ -/* -* 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: -* -*/ - - - -#ifndef MUSUIMMCMONITOR_H -#define MUSUIMMCMONITOR_H - -// INCLUDES -#include "musuimmcobserver.h" - -#include -#include - - -// CLASS DECLARATION - -/** -* Listen changes on the filesystem and notifies observers if -* MMC card has been removed. -* Notifies clients only once about MMC removal and only -* in that case that user wanted to listen MMC drive -*/ -class CMusUiMmcMonitor : public CActive - { - public: // Constructors and destructor - - /** - * Two-phased constructor. - * @param aObserver MMC observer pointer. - */ - static CMusUiMmcMonitor* NewL( MMusUiMmcObserver& aObserver ); - - /** - * Destructor. - */ - ~CMusUiMmcMonitor(); - - private: // from CActive - - void RunL(); - TInt RunError( TInt aError ); - void DoCancel(); - - private: // New functions. - - void ConstructL(); - CMusUiMmcMonitor( MMusUiMmcObserver& aObserver ); - - void MonitorMmc(); - TBool DriveRemoved(); - TBool IsRemovableDrive( TDriveNumber aDriveNumber ); - - private: // Data - - RFs iFs; - TDriveNumber iDriveNumber; - TBool iRemovableDrive; - TBool iDriveRemoved; - MMusUiMmcObserver& iObserver; - }; - -#endif // MUSUIMMCMONITOR_H - -// End of File - diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshui/inc/musuimmcobserver.h --- a/mmsharing/mmshui/inc/musuimmcobserver.h Thu Aug 19 09:51:39 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,39 +0,0 @@ -/* -* 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: -* -*/ - - - -#ifndef MUSUIMMCOBSERVER_H -#define MUSUIMMCOBSERVER_H - - -/** -* Interface for listening MMC removal indication. -*/ -class MMusUiMmcObserver - { - public: - - /** - * Called when MMC was removed. - */ - virtual void MmcRemoved() = 0; - }; - -#endif // MUSUIMMCOBSERVER_H - -// End of File diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshui/inc/musuinavimediaanimator.h --- a/mmsharing/mmshui/inc/musuinavimediaanimator.h Thu Aug 19 09:51:39 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,156 +0,0 @@ -/* -* 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: -* -*/ - - - -#ifndef MUSUINAVIMEDIAANIMATOR_H -#define MUSUINAVIMEDIAANIMATOR_H - -#include "musuidefinitions.h" -#include "musuinavimediaanimatorobserver.h" - -#include -#include - -class CAknIconArray; -class MAknsSkinInstance; -class CPeriodic; - -/** - * CMusUiNaviMediaDecorator - * - * @lib musui.exe - */ -class CMusUiNaviMediaAnimator : public CBase - { - - public: // constructors and destructor - - /** - * Two-phased constructor. - * - */ - static CMusUiNaviMediaAnimator* NewL( - MMusUiNaviMediaAnimatorObserver& aObserver, TSize aImageSize ); - - /** - * - * - */ - virtual ~CMusUiNaviMediaAnimator(); - - - private: // constructors - - /** - * C++ default constructor. - * - */ - CMusUiNaviMediaAnimator( - MMusUiNaviMediaAnimatorObserver& aObserver, TSize aImageSize ); - - /** - * By default Symbian second-phase constructor is private. - * - */ - void ConstructL(); - - - public: // API - - /** - * Sets animation timer interval eq. speed of animation - * - * @param aAnimationInterval Milliseconds between image transitions - */ - void SetInterval( const TInt aAnimationInterval ); - - - private: // Perioidic timer CallBack - - static TInt AnimationInterval( TAny* aThis ); - - - private: // HELPERS - - /** - * Layouts all images. And also set size. - * - */ - void LoadImagesL(); - - - /** - * Construct image from resourse file - * - */ - void ConstructImageL( MAknsSkinInstance* aSkin, - const TAknsItemID& aId, - TInt aBitmapId, - TInt aMaskId, - TParse parse ); - - - - private: // DATA - - /** - * - */ - CAknIconArray* iBitmapArray; - - /** - * - */ - //CAknIconArray* iMaskArray; - - /** - * resource file location ( eq. Z or C ) - */ - TBool iResourceRam; - - /** - * Animation image index - */ - TInt iIndex; - - /** - * - */ - MMusUiNaviMediaAnimatorObserver& iObserver; - - /** - * - */ - TInt iInterval; - - /** - * Image size - */ - TSize iSize; - - /** - * - */ - CPeriodic* iAnimationTimer; // owned - - - }; - -#endif // MUSUINAVIMEDIADECORATOR_H - -// end of file diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshui/inc/musuinavimediaanimatorobserver.h --- a/mmsharing/mmshui/inc/musuinavimediaanimatorobserver.h Thu Aug 19 09:51:39 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,42 +0,0 @@ -/* -* 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: Mus Applications Event Observer Interface -* -*/ - - - -#ifndef MUSUINAVIMEDIAANIMATOROBSERVER_H -#define MUSUINAVIMEDIAANIMATOROBSERVER_H - -#include -#include -#include - -class MMusUiNaviMediaAnimatorObserver - { - - public: - - /** - * Sets new image for drawing. Ownership is not transferred. - * - */ - virtual void SetIcon( CGulIcon* aIcon ) = 0; - - }; - -#endif // MUSUIEVENTOBSERVER_H - -// end of file diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshui/inc/musuinavimediadecorator.h --- a/mmsharing/mmshui/inc/musuinavimediadecorator.h Thu Aug 19 09:51:39 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,216 +0,0 @@ -/* -* 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: -* -*/ - - - -#ifndef MUSUINAVIMEDIADECORATOR_H -#define MUSUINAVIMEDIADECORATOR_H - -#include "musuidefinitions.h" -#include "musuinavimediaanimatorobserver.h" - -#include -#include - -class CAknIconArray; -class CMusUiNaviMediaAnimator; -class MAknsSkinInstance; - -/** - * CMusUiNaviMediaDecorator - * - * @lib musui.exe - */ -class CMusUiNaviMediaDecorator : public CCoeControl, - public MMusUiNaviMediaAnimatorObserver - { - - public: // constructors and destructor - - /** - * Two-phased constructor. - * - */ - static CMusUiNaviMediaDecorator* NewL(); - - /** - * - * - */ - virtual ~CMusUiNaviMediaDecorator(); - - - private: // constructors - - /** - * C++ default constructor. - * - */ - CMusUiNaviMediaDecorator(); - - /** - * By default Symbian second-phase constructor is private. - * - */ - void ConstructL(); - - - public: // API - - /** - * Updates left label (usually time string) in navi pane. - * - * @param aLabel New label - */ - void SetLeftLabelL( const TDesC& aLabel ); - - /** - * Updates right label (usually time string) in navi pane. - * - * @param aLabel New label - */ - void SetRightLabelL( const TDesC& aLabel ); - - /** - * Selects icon show - * - */ - void ShowIcon( TMusUiNaviMediaDecorator aIcon ); - - - protected: // from MMusUiNaviMediaAnimatorObserver - - void SetIcon( CGulIcon* aIcon ); - - - protected: // from CCoeControl - - /** - * Handles the size change events. - * - */ - void SizeChanged(); - - /** - * Draws the control. - * - * @param aRect The region of the control to be redrawn. - */ - void Draw( const TRect& aRect ) const; - - - private: // HELPERS - - /** - * Layouts the text depending on current situation. - * - */ - void DoLayoutText(); - - - void LoadImagesL(); - - void ConstructImageL( MAknsSkinInstance* aSkin, - const TAknsItemID& aId, - TInt aBitmapId, - TInt aMaskId, - TParse parse, - TBool aIconHasOwnColor = ETrue); - - - private: // DATA - - /** - * - * - */ - HBufC* iLeftLabel; - - /** - * - * - */ - HBufC* iRightLabel; - - - CAknLayoutFont *iFont; - - /** - * - * - */ - TAknLayoutText iLeftTextLayout; - - /** - * - * - */ - TAknLayoutText iRightTextLayout; - - /** - * - * - */ - TAknLayoutRect iIconLayout; - - /** - * - * - */ - CAknIconArray* iIconArray; - - /** - * - * - */ - TInt iMiddle; - - TInt iIconLeft; - - /** - * - * - */ - TSize iLeftTextSize; - - /** - * - * - */ - TSize iRightTextSize; - - /** - * - * - */ - CGulIcon* iIcon; - - /** - * resource file location ( eq. Z or C ) - */ - TBool iResourceRam; - - - CMusUiNaviMediaAnimator* iAnimation; - - TSize iImageSize; - - }; - -#endif // MUSUINAVIMEDIADECORATOR_H - -// end of file diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshui/inc/musuipropertyobserver.h --- a/mmsharing/mmshui/inc/musuipropertyobserver.h Thu Aug 19 09:51:39 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,42 +0,0 @@ -/* -* 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: Mus Applications Event Observer Interface -* -*/ - - - -#ifndef MUSUIPROPERTYOBSERVER_H -#define MUSUIPROPERTYOBSERVER_H - -#include - -class MMusUiPropertyObserver - { - -public: - - //virtual void ResourcePropertyChanged( const TUint aKey, const TInt aValue ) = 0; - - //virtual void SessionPropertyChanged( const TUint aKey, const TInt aValue ) = 0; - - virtual void PropertyChanged( const TUint aKey, const TInt aValue ) = 0; - - virtual void HandlePropertyError( const TInt aReason ) = 0; - - }; - -#endif // MUSUIPROPERTYOBSERVER_H - -// end of file diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshui/inc/musuipropertywatch.h --- a/mmsharing/mmshui/inc/musuipropertywatch.h Thu Aug 19 09:51:39 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,127 +0,0 @@ -/* -* 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: -* -*/ - - - -#ifndef MUSUIPROPERTYWATCH_H -#define MUSUIPROPERTYWATCH_H - -#include "musunittesting.h" - -#include -#include - -class MMusUiPropertyObserver; - -class CMusUiPropertyWatch : public CActive - { - - MUS_UNITTEST( UT_CMusUiPropertyWatch; ) - -public: // constructors and destructor - - /** - * Two-phased constructor. Leaves on failure. - * @return The constructed CMusUiPropertyWatch object. - */ - static CMusUiPropertyWatch* NewL( MMusUiPropertyObserver& aObserver, - TUid aCategory, - const TInt aPropertyName ); - - /** - * Destructor. - */ - ~CMusUiPropertyWatch(); - -private: - - /** - * C++ constructor. - */ - CMusUiPropertyWatch( MMusUiPropertyObserver& aObserver, - TUid aCategory, - const TInt aPropertyName ); - - /** - * Symbian 2nd-phase constructor. - * @leave If return value of RProperty::Attach != KErrNone, e.q. KErrNoMemory - * or one of the system wide error codes if RunL() leaves - */ - void ConstructL(); - - -public: // new functions - - /** - * Reads a P&S integer value from the category KCategoryUid - * @pre P&S value has to be defined. - * @leave One of the system wide error codes, if RProperty::Get() - * returns an error value. - * @param aKey Name of the P&S Key, which value should be read - * @returns The integer value of the P&S Key. - */ - static TInt ReadIntPropertyL( TUint aKey ); - - /** - * Reads a P&S descriptor value from the category KCategoryUid - * @pre P&S value has to be defined. - * @leave One of the system wide error codes, if RProperty::Get() - * returns an error value or if descriptor AllocL() leaves. - * @param aKey Name of the P&S Key, which value should be read - * @returns The descriptor value of the P&S Key. - * Ownership is transferred - */ - static HBufC* ReadDescPropertyL( TUint aKey ); - - -private: // functions from base class CActive - - /** - * - */ - void DoCancel(); - - /** - * Reads a P&S integer value from the category KCategoryUid - * and starts to monitor changes in the property value. - * Calls observer function for read property values. - * @pre P&S value has to be defined as an integer. - * @leave One of the system wide error codes, if RProperty::Get() - * returns an error value. - */ - void RunL(); - - /** - * - */ - TInt RunError(TInt aError); - -private: // Data - - RProperty iProperty; - - TUid iPropertyCategory; - - TUint iPropertyKey; - - MMusUiPropertyObserver& iObserver; - - }; - -#endif // MUSUIPROPERTYWATCH_H - -// end of file diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshui/inc/musuiqueryobserver.h --- a/mmsharing/mmshui/inc/musuiqueryobserver.h Thu Aug 19 09:51:39 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,47 +0,0 @@ -/* -* 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: The MUS application's UI class. -* -*/ - - - -#ifndef MUSUIQUERYOBSERVER_H -#define MUSUIQUERYOBSERVER_H - - -class MMusUiQueryObserver - { -public: - - /** - * - */ - virtual void QueryAcceptedL( TBool aAccepted ) = 0; - - /** - * Error handler for QueryAcceptedL. - * - * @param aError is error to be handled. - * @return KErrNone means handled value. All other values will lead to - * a panic. - */ - virtual TInt HandleQueryError( TInt aError ) = 0; - - }; - - -#endif // MUSUIQUERYOBSERVER_H - -// end of file diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshui/inc/musuireceivecontainer.h --- a/mmsharing/mmshui/inc/musuireceivecontainer.h Thu Aug 19 09:51:39 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,171 +0,0 @@ -/* -* 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: The MUS application's UI class. -* -*/ - - - -#ifndef MUSUIRECEIVECONTAINER_H -#define MUSUIRECEIVECONTAINER_H - -#include "musuiviewcontainer.h" - -class MAknsControlContext; -class CMusUiGeneralView; -class CMusUiInvitationQuery; -class MMusUiInvitationQueryObserver; -class CMusUiReceiveView; - -/** - * - * - */ -class CMusUiReceiveContainer : public CMusUiViewContainer - { - -public: // constructors and destructor - - /** - * Public constructor. - */ - static CMusUiReceiveContainer* NewL( CMusUiReceiveView& aView, - TRect aRect ); - - /** - * Destructor. - */ - ~CMusUiReceiveContainer(); - - -private: // hidden constructors - - /** - * C++ Constructor - */ - CMusUiReceiveContainer( CMusUiReceiveView& aView ); - - /** - * Symbian second-phase constructor. - * - * @param aView Parent view of container. - * @param aRect Frame rectangle for container. - * @param aInputParams Packaged data. - */ - void ConstructL( const TRect& aRect ); - -protected: // data - - /** - * ETrue if operator specific functionality is needed - */ - TBool iOperatorSpecificFunctionality; - -public: // new functions - - /** - * Shows an invitation query. - */ - void ShowInvitationQueryL( const TDesC& aContact, - MMusUiInvitationQueryObserver& aObserver ); - - /** - * - */ - void DismissInvitationQuery( TBool aDelete ); - - /** - * Return pointer to view class. User needs to type cast to - * appropriate concrete view class. - * - * @return handle to view - */ - CMusUiGeneralView* MusUiView() const; - - - void SetFullScreen( TBool aFullScreen, TRect aRect ); - - void UpdatePointerCapture(); - - -private: // from base class CCoeControl - - /** - * - */ - virtual void SizeChanged(); - - /** - * Returns the number of control contained by this class. - * - * @return Number of controls contained - */ - virtual TInt CountComponentControls() const; - - /** - * Returns handle to control pointed by aIndex. - * - * @param aIndex Wanted control's index [0..n] - * @return Handle to wanted control - */ - virtual CCoeControl* ComponentControl( TInt aIndex ) const; - - /** - * Gets called by the application framework when drawing is - * needed. - * - * @param aRect The rectangle that needs to be drawn. - */ - virtual void Draw( const TRect& aRect ) const; - - /** - * Handles key events. - * - * @param aEvent The event that occured. - * @param aType Type of key event: EEventKey, EEventKeyUp, or - * EEventKeyDown. - * @return The container's response to event: either - * EKeyWasNotConsumed or EKeyWasConsumed. - */ - virtual TKeyResponse OfferKeyEventL( const TKeyEvent& aEvent, - TEventCode aType ); - - /** - * Handles pointer events. Will return from full screen mode as a response - * to whatever pointer event. - * - * @param aEvent The event that occured. - */ - virtual void HandlePointerEventL( const TPointerEvent& aPointerEvent ); - - -private: // data - - /** A dialog for invitation query (accept/reject). Own.*/ - CMusUiInvitationQuery* iInvitationQuery; - - /** Background skin control context. */ - MAknsControlContext* iBackGround; - - /** Handle to the view that owns of this container. Not own. */ - CMusUiGeneralView& iView; - - TBool iFullScreen; - - }; - - -#endif // MUSUIRECEIVECONTAINER_H - -// end of file diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshui/inc/musuireceivecontroller.h --- a/mmsharing/mmshui/inc/musuireceivecontroller.h Thu Aug 19 09:51:39 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,322 +0,0 @@ -/* -* 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: -* -*/ - - -#ifndef MUSUIRECEIVECONTROLLER_H -#define MUSUIRECEIVECONTROLLER_H - -#include "musuieventcontroller.h" -#include "musengreceivesessionobserver.h" -#include "musengmcesession.h" -#include "musuiinvitationqueryobserver.h" -#include "musunittesting.h" -#include "musuiactivetimerobserver.h" - -#include - -class MMusUiReceiveObserver; -class CMusEngReceiveSession; -class MMusUiReceiveObserver; -class CMusUiActiveTimer; - -/** - * - * - * @lib musui.exe - */ -class CMusUiReceiveController : public CMusUiEventController, - public MMusEngReceiveSessionObserver, - public MMusUiInvitationQueryObserver, - public MMusUiActiveTimerObserver - { - -public: - - /** - * Two-phased constructor. Leaves on failure. - * @return The constructed CMusUiReceiveController object. - */ - static CMusUiReceiveController* NewL( - MMusUiEventObserver& aEventObserver, - MMusUiSharingObserver& aSharingObserver, - MMusUiReceiveObserver& aReceiveObserver, - const TRect& aRect ); - - /** - * Destructor. - */ - virtual ~CMusUiReceiveController(); - -private: - - /** - * C++ constructor. - */ - CMusUiReceiveController( MMusUiEventObserver& aEventObserver, - MMusUiSharingObserver& aSharingObserver, - MMusUiReceiveObserver& aReceiveObserver ); - - /** - * Symbian 2nd-phase constructor. - * @leave One of the system wide error codes - * @param aRect Original view's rectangle, which is centered and passed - * for the Engine. - */ - void ConstructL( const TRect& aRect ); - - -public: // new functions: - - /** - * Gets called by MMusEngReceiveSessionObserver's Incoming Session. - * Function cancels the timer and displays the invitation query dialog. - * MO Address is saved into memeber variable iOriginator. - * @leave One of the system wide error codes - * @param aOriginator The Address of MO. - * @param aOriginatorIdentity The identity of MO. - */ - void HandleIncomingSessionL( const TDesC& aOriginator, - const TDesC& iOriginatorIdentity ); - - TBool ClipMutedL(); - - TBool ClipContainsAudioL(); - - /** - * Determines whether video is being played in full screen mode. - */ - TBool FullScreenSelected(); - - -public: // from CMusUiEventController - - /** - * Returns a pointer to engine side session. - */ - virtual CMusEngMceSession* EngineSession(); - - /** - * Implementation of the pure virtual function in MMusUiCallbackObserver. - * Handled async. event in the MT is EMusUiAsyncInviteAccepted. - * @param aEventId Async. event - */ - virtual void HandleAsyncEventL( TMusUiAsyncEvent aEventId ); - - /** - * Implementation of the pure virtual function from CMusUiEventController - * @return iOriginator, the address of MO - */ - virtual const TDesC& TypedAddress() const; - - /** - * Updates softkeys specific to receiving. Delegates other requests to - * a base class. - */ - // virtual void UpdateSoftkeyL( TInt aToolbarItem ); - - /** - * Handles commands generated by UI's Toolbar in the Receive View. - * @pre iSession != NULL - * @leave One of the system wide error codes - * @param aCommand Identiefier of the event's command. - */ - virtual void OfferToolbarEventL( TInt aCommand ); - - virtual void HandleCommandL( TInt aCommand ); - - /** - * Implementation of the pure virtual function from CMusUiEventController - * Deletes the Engine instance. - */ - virtual void DeleteEngineSession(); - - -public: // from MMusEngReceiveSessionObserver - - /** - * Called by engine when timer can be cancelled. - */ - virtual void IncomingSessionPreNotification(); - - /** - * Called by the engine, when session is incoming. - * @param aOriginator The address of MO. - * @param aOriginatorIdentity The identity of MO. - */ - virtual void IncomingSession( const TDesC& aOriginator, - const TDesC& iOriginatorIdentity ); - - /** - * Called by the engine, when current receiving session is buffering - * received RTP. - */ - virtual void StreamBuffering(); - - -public: // from MMusEngSessionObserver - - /** - * Called by the engine, when incoming session is established. - * Dismisses the wait dialog and sets up the status pane - */ - void SessionEstablished(); - - /** - * Called by the engine, when session has been terminated. - * If connection is not established, dismisses the invitation query dialog, - * shows an error dialog and exits. - * Otherwise dismisses wait dialog and exits. - */ - void SessionTerminated(); - - /** - * Called by the engine, when current session has lost network connection. - * Displays an error dialog. - */ - void SessionConnectionLost(); - - /** - * Called by the engine, when an undefined exception has occurred. - * Dismisses the wait dialog. - */ - void SessionFailed(); - - /** - * Called by the engine, when we are not sending or receiving RTP. - * Updates the icon to be Pause icon. - */ - void StreamIdle(); - - /** - * Called by the engine, when current session state is changed to streaming - * Dismisses the wait dialog, and updates the icon to Play icon. - */ - void StreamStreaming(); - - /** - * Called by the engine, when time information of the session - * should be updated. - * Calls Observer's UpdateSessionTime() function. - * @param aSeconds Session time in secods to be formatted. - */ - void SessionTimeChanged( const TTimeIntervalSeconds& aSeconds ); - - /** - * Called by the engine, when RTCP inactivity timeout has occurred. - * Exits the application. - */ - void InactivityTimeout(); - - -public: // from MMusUiInvitationQueryObserver - - /** - * Called if the user accepts the incoming invitation. - * Calls Engine's AcceptInvitationL() function with ETrue and starts - * to show the wait dialog async. - * @pre iSession != NULL - * @leave One of the system wide error codes - */ - void InvitationAcceptedL(); - - /* - * Called if the user rejects the incoming invitation. - * Calls Engine's AcceptInvitationL() with EFalse and exits the application. - * @pre iSession != NULL - * @leave One of the system wide error codes - */ - void InvitationRejectedL(); - -public: // from MMusUiActiveTimerObserver - - /* - * Called if the timer completes. - * Calls ShutdownL() function. - */ - void TimerComplete( CMusUiActiveTimer* aTimer ); - - -protected: // from CMusUiEventController - - /** - * Receive specific functionality of exit procedure - */ - virtual void ExitProcedureL( TBool aUserAcceptance ); - - -private: // new functions: - /** - * Changes video playing mode to the opposite. - * Value of iFullScreenSelected will be changed to opposite as well. - */ - void ChangeFullScreenModeL(); - - - /** - * Displays the wait dialog calling Observer's ShowWaitDialogL with a string - * loaded from resources. - * @leave One of the system wide error codes - */ - void ShowWaitDialogL(); - - /** - * - */ - void SessionEstablishedL(); - - -private: - - /** - * Observer interface for receiving specific callbacks - */ - MMusUiReceiveObserver& iReceiveObserver; - - /** - * The engine object for MT - */ - CMusEngReceiveSession* iSession; - - /** - * Address of the MO - */ - HBufC* iOriginator; - - /** - * Flag indicating that video is being played in Full Screen mode - */ - TBool iFullScreenSelected; - /** - * Active object timer instance - */ - CMusUiActiveTimer* iTimer; - - CMusEngMceSession::TDisplayOrientation iOriginalMceOrientation; - - /** - * Flag indicating that the stream is paused - */ - TBool iStreamPaused; - - - MUS_UNITTEST( UT_CMusUiReceiveController; ) - - }; - -#endif // MUSUIRECEIVECONTROLLER_H - -// end of file diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshui/inc/musuireceiveobserver.h --- a/mmsharing/mmshui/inc/musuireceiveobserver.h Thu Aug 19 09:51:39 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,42 +0,0 @@ -/* -* 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: Mus Applications Event Observer Interface -* -*/ - - - -#ifndef MUSUIRECEIVEOBSERVER_H -#define MUSUIRECEIVEOBSERVER_H - -#include "musuidefinitions.h" - -#include - -class MMusUiReceiveObserver - { - -public: - - virtual void ShowInvitationQueryL( const TDesC& aQuery ) = 0; - - virtual void DismissInvitationQuery( TBool aDelete ) = 0; - - virtual void SetFullScreenL( TBool aFullScreen ) = 0; - - }; - -#endif // MUSUILIVESHARINGOBSERVER_H - -// end of file diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshui/inc/musuireceiveview.h --- a/mmsharing/mmshui/inc/musuireceiveview.h Thu Aug 19 09:51:39 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,140 +0,0 @@ -/* -* 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: The MUS application's UI class. -* -*/ - - - -#ifndef MUSUIRECEIVEVIEW_H -#define MUSUIRECEIVEVIEW_H - - -#include "musuigeneralview.h" // Base view class -#include "musuinavimediadecorator.h" -#include "musuireceiveobserver.h" -#include "musuidefinitions.h" - -#include - - -class CMusUiReceiveContainer; -class CMusUiReceiveController; -class CMusUiActivityManager; -class CMusUiBackgroundViewContainer; - - -/** - * The MUS application's live sharing view. - * - */ -class CMusUiReceiveView : public CMusUiGeneralView, - public MMusUiReceiveObserver - { - -public: // constructors and destructor - - /** - * EPOC 2nd phase constructor. - */ - void ConstructL(); - - /** - * Destructor. - */ - virtual ~CMusUiReceiveView(); - - -public: // from base class CAknView - - /** - * From CAknView returns Uid of View - * @return TUid uid of the view - */ - virtual TUid Id() const; - - // From MEikMenuObserver, Called by framework before constructing menupane - virtual void DynInitMenuPaneL( TInt aResourceId, CEikMenuPane* aMenuPane ); - -public: // from CMusUiGeneralView - - virtual void HandleToolbarCommandL( TInt aCommand ); - - virtual void SetInitialFocusedItemL(); - - virtual void SetToolbarVisibility( TBool aVisible ); - - virtual void DoHandleForegroundEventL( TBool aForeground ); - -public: // from base class MAknToolbarObserver - - virtual void DynInitToolbarL( TInt aResourceId, CAknToolbar* aToolbar ); - - -public: // from MMusUiReceiveObserver - - virtual void ShowInvitationQueryL( const TDesC& aQuery ); - - virtual void DismissInvitationQuery( TBool aDelete ); - - virtual void SetFullScreenL( TBool aFullScreen ); - - -public: // new functions - - void RefreshView(); - - -protected: // from MusUiGeneralView - - virtual CMusUiEventController* EventController() const; - - virtual CMusUiViewContainer& SharingContainer() const; - - -private: - - /** - * Gets called by the framework when it's activating this view. - * - * @param aPrevViewId Previous view id - * @param aCustomMessageId Custom message's id - * @param aCustomMessage Custom message - */ - void DoActivateL( const TVwsViewId& aPrevViewId, - TUid aCustomMessageId, - const TDesC8& aCustomMessage ); - - /** - * Gets called by the framework when it's deactivating this view. - */ - void DoDeactivate(); - - -private: // data - - /** Container for all controls in this view. Owns. */ - CMusUiReceiveContainer* iContainer; - - CMusUiReceiveController* iController; - - HBufC* iAddress; - - TRect iOriginalRect; - - }; - -#endif // MUSUIRECEIVEVIEW_H - -// end of file diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshui/inc/musuiresourcehandler.h --- a/mmsharing/mmshui/inc/musuiresourcehandler.h Thu Aug 19 09:51:39 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,162 +0,0 @@ -/* -* Copyright (c) 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: Handler for camera, keypad and video player resources -* -*/ - - - -#include "musuipropertyobserver.h" -#include "musresourceproperties.h" -#include "mussettingskeys.h" -#include "musmanagercommon.h" - -#include - -class CMusUiPropertyWatch; -class MMusUiEventObserver; -class CAknWaitDialog; - -/** - * Encapsulates handling and observing of camera, keypad and video player - * hardware and software resources. - */ -class CMusUiResourceHandler : public CBase, - public MMusUiPropertyObserver - { - - public: - - virtual ~CMusUiResourceHandler(); - - static CMusUiResourceHandler* NewL( MMusUiEventObserver& aObserver ); - - public: // API - - TBool RequestKeypadL( TBool aMandatory = EFalse ); - - TBool RequestCameraL( TBool aMandatory = EFalse ); - - TBool RequestVideoPlayerL( TBool aMandatory = EFalse ); - - void CheckInitialOrientationL( MultimediaSharing::TMusUseCase aUsecase ); - - - public: // From MMusUiPropertyObserver - - /** - * @param TUint aKey - The Property key - * @param TInt aValue - The value of the Property key - */ - virtual void PropertyChanged( const TUint aKey, const TInt aValue ); - - virtual void HandlePropertyError( const TInt aReason ); - - - private: - - CMusUiResourceHandler( MMusUiEventObserver& aObserver ); - - void ConstructL(); - - - private: // Helpers - - TBool ShowChangeProductModeDialogL( const TDesC& aPrompt ); - - TBool IsCurrentlyAvailable( NMusResourceApi::TAvailability aResourceAvailability, - MusSettingsKeys::TUsability aResourceUsability ); - - - private: // data - - /** - * - */ - MMusUiEventObserver& iObserver; - - /** - * - */ - CMusUiPropertyWatch* iCameraResourceWatch; - - /** - * - */ - CMusUiPropertyWatch* iKeypadResourceWatch; - - /** - * It holds the value for CameraAvailability. - * If it is static available ( Bit set to 0 in Cenrep) - * then it will be available always , if the bit set - * to 1 ( dynamic ) then it should be monitored by property - * listner and set the value accordingly. - */ - NMusResourceApi::TAvailability iCameraAvailability; - - /** - * It holds the value for KeypadAvailability. - * If it is static available ( Bit set to 0 in Cenrep) - * then it will be available always , if the bit set - * to 1 ( dynamic ) then it should be monitored by property - * listner and set the value accordingly. - */ - NMusResourceApi::TAvailability iKeypadAvailability; - - /** - * It holds the value for CameraUsability. - * Intially read from cenrep and assigned - * Refer mussettingskeys.h to know the bit value. - */ - MusSettingsKeys::TUsability iCameraUsability; - - /** - * It holds the value for KeypadUsability. - * Intially read from cenrep and assigned - * Refer mussettingskeys.h to know the bit value. - */ - MusSettingsKeys::TUsability iKeypadUsability; - - /** - * It holds the value for VideoplayerUsability. - * Intially read from cenrep and assigned - * Refer mussettingskeys.h to know the bit value. - */ - MusSettingsKeys::TUsability iVideoplayerUsability; - - /** - * - */ - TBool iCameraAvailibilityInProgress; - - /** - * - */ - TBool iKeypadAvailibilityInProgress; - - /** - * - */ - CAknWaitDialog* iChangeProductModeDialog; - - /** - * - */ - HBufC* iDialogPrompt; - - }; - - - - diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshui/inc/musuisendcontroller.h --- a/mmsharing/mmshui/inc/musuisendcontroller.h Thu Aug 19 09:51:39 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,258 +0,0 @@ -/* -* Copyright (c) 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: -* -*/ - - -#ifndef MUSUISENDCONTROLLER_H -#define MUSUISENDCONTROLLER_H - -#include "musuieventcontroller.h" -#include "musengoutsessionobserver.h" -#include "musunittesting.h" - -#include "musengoutsessionobserver.h" -#include - -class MMusUiSendObserver; -class CMusEngMceOutSession; -class CDirectoryLocalizer; - -/** - * - * - * @lib musui.exe - */ -class CMusUiSendController : public CMusUiEventController, - public MMusEngOutSessionObserver - { - -public: - - virtual ~CMusUiSendController(); - - -public: // From CMusUiEventController: - - /** - * Returns a pointer to engine side session. - */ - virtual CMusEngMceSession* EngineSession(); - - /** - * - */ - virtual const TDesC& TypedAddress() const; - - /** - * - */ - virtual TBool ManualAddressTyped() const; - - /** - * Makes out session specific preparations for engine session deletion. - */ - virtual void DeleteEngineSession(); - - -public: // From MMusUiPropertyObserver - - virtual void HandlePropertyError( const TInt aReason ); - - -public: // From MMusUiCallbackObserver - - /** - * Handles async events common to outgoing session types. - * Should be called if child classes are not able to handle the call. - */ - virtual void HandleAsyncEventL( TMusUiAsyncEvent aEventId ); - - -public: // new functions: - - /** - * Returns a pointer to engine side session. - */ - virtual CMusEngMceOutSession* EngineOutSession() = 0; - - virtual void InviteL( const TDesC& aRecipient ) = 0; - - virtual void HandleSliderValueChangeL( TInt aNewLevel ) = 0; - - void StartInvitationL(); - - void InviteL(); - - void CancelInvitationL(); - - virtual void HandleForegroundEventL( TBool aForeground ); - - virtual void PlayL(); - - virtual void PauseL(); - - TBool IsPlayingL(); - - -public: // from MMusEngSessionObserver - - virtual void SessionEstablished(); - - -public: // from MMusEngOutSessionObserver - - virtual void SessionRejected(); // e.g. 603 DECLINE - - virtual void SessionBadRequest(); // 400 - - virtual void SessionUnauthorized(); // 401 - - virtual void SessionPaymentRequired(); // 402 - - virtual void SessionRecipientNotFound(); // 404 - - virtual void SessionProxyAuthenticationRequired(); // 407 - - virtual void SessionRequestTimeOut(); // 408 - - virtual void SessionUnsupportedMediaType(); // 415 - - virtual void SessionBusyHere(); // 486 - - virtual void SessionRequestCancelled(); // 487 - - virtual void SessionTemporarilyNotAvailable(); // 480 - - -protected: // Contructors - - void ConstructL(); - - CMusUiSendController( MMusUiEventObserver& aEventObserver, - MMusUiSharingObserver& aSharingObserver, - MMusUiSendObserver& aSendObserver ); - - -protected: // from MusUiEventController - - /** - * Send specific functionality of exit procedure - */ - virtual void ExitProcedureL( TBool aUserAcceptance ); - - /** - * Handles status changes specific to sending side sharing types. - * To be overridden in sibling classes for sharing type specific - * status changes. Calls base class version if status change is not - * sending side specific. - */ - virtual void HandleChangedStatusL( TMusAvailabilityStatus aStatus ); - - -protected: - - /** - * - */ - const TDesC& VideoFileNameL(); - - void ShowInvitingWaitDialogL(); - - void DismissWaitDialog(); - - -private: // Helpers - - void SplitL( const TDesC& aDes, const TDesC& aChar, CDesCArray* aArray ); - - void SetVideoPathValueL(); - - void ShowVideoSavedDialogL(); - - void DeleteVideoL(); - - void DeleteFileL(); - -protected: // Data - - /* - * Interface for outgoing session specific callbacks - */ - MMusUiSendObserver& iSendObserver; - - HBufC* iAddress; - - TBool iVideoToBeSaved; - - TBool iManualAddressTyped; - - TInt iTriedInvitations; - - /** - * - */ - TBool iSipRegistrationPending; - - /** - * - */ - HBufC* iRemoteSipAddress; - - /** - * - */ - HBufC* iRemoteSipAddressProposal; - - -private: // Data - - /** - * If this variable is ETrue, playback should be continued - * when gaining focus. ETrue by default. - */ - TBool iContinuePlayingWhenForeground; - - /** - * - */ - HBufC* iVideoFileName; - - CDirectoryLocalizer* iLocalizer; - -protected: - /** - * The class is used as a call back service of the wait dialog - */ - class TWaitDialogCallback : public MProgressDialogCallback - { - public: - TWaitDialogCallback( CMusUiSendController& aController ); - void DialogDismissedL( TInt /*aButtonId*/ ); - - private: - CMusUiSendController& iController; - - }iWaitDialogCallback; - - /** - * If this variable is ETrue, playback should be continued - * when gaining focus. ETrue by default. - */ - }; - -#endif // MUSUISENDCONTROLLER_H - -// end of file diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshui/inc/musuisendobserver.h --- a/mmsharing/mmshui/inc/musuisendobserver.h Thu Aug 19 09:51:39 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,35 +0,0 @@ -/* -* Copyright (c) 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: Mus Application's Send Observer Interface -* -*/ - - - -#ifndef MUSUISENDOBSERVER_H -#define MUSUISENDOBSERVER_H - -class MMusUiSendObserver - { - - public: - - virtual void ManualAddressEntryL( const TDesC& aAddress ) = 0; - - - }; - -#endif // MUSUISENDOBSERVER_H - -// end of file diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshui/inc/musuisendview.h --- a/mmsharing/mmshui/inc/musuisendview.h Thu Aug 19 09:51:39 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,104 +0,0 @@ -/* -* 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: The MUS application's UI class. -* -*/ - - - -#ifndef MUSUISENDVIEW_H -#define MUSUISENDVIEW_H - - -#include "musuigeneralview.h" // Base view class -#include "musuisendobserver.h" -#include - -class CMusUiSendViewContainer; -class CMusUiSendController; - -/** - * The MUS application's share view. - * - * @lib musui.exe - */ -class CMusUiSendView : public CMusUiGeneralView, - public MMusUiSendObserver - { - -public: // constructors and destructor - - /** - * EPOC default constructor. - */ - void ConstructL(); - - /** - * Destructor. - */ - virtual ~CMusUiSendView(); - - -public: // from MMusUiSendObserver - - virtual void ManualAddressEntryL( const TDesC& aAddress ); - -public: // from CMusUiGeneralView - - virtual void DoHandleForegroundEventL( TBool aForeground ); - -protected: // New functions - - virtual CMusUiSendController* SendController() const = 0; - - virtual CMusUiSendViewContainer* SendContainer() const = 0; - - -protected: // from CMusUiGeneralView - - virtual CMusUiEventController* EventController() const; - - virtual CMusUiViewContainer& SharingContainer() const; - - -protected: // from base class CAknView - - /** - * Gets called by the framework when it's activating this view. - * - * @param aPrevViewId Previous view id - * @param aCustomMessageId Custom message's id - * @param aCustomMessage Custom message - */ - void DoActivateL( const TVwsViewId& aPrevViewId, - TUid aCustomMessageId, - const TDesC8& aCustomMessage ); - - /** - * Gets called by the framework when it's deactivating this view. - */ - void DoDeactivate(); - - - - -protected: // data - - TBool iPauseSelected; - - }; - -#endif // MUSUISENDVIEW_H - -// end of file diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshui/inc/musuisendviewcontainer.h --- a/mmsharing/mmshui/inc/musuisendviewcontainer.h Thu Aug 19 09:51:39 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,138 +0,0 @@ -/* -* 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: The MUS application's UI class. -* -*/ - - - -#ifndef MUSUISENDVIEWCONTAINER_H -#define MUSUISENDVIEWCONTAINER_H - - -#include "musuiviewcontainer.h" -#include "musuilevelindicatorobserver.h" - -#include - -class MAknsControlContext; -class CMusUiGeneralView; -class CAknWaitDialog; -class CMusUiLevelIndicator; -class CMusUiSendController; - -/** - * - * - */ -class CMusUiSendViewContainer : public CMusUiViewContainer, - public MMusUiLevelIndicatorObserver - { - -public: // constructors and destructor - - /** - * Destructor. - */ - ~CMusUiSendViewContainer(); - -public: // new functions - - /** - * Return pointer to view class. User needs to type cast to - * appropriate concrete view class. - * - * @return handle to view - */ - CMusUiGeneralView* MusUiView() const; - - /** - * @param Pointer to instance of controller who is notified about changes in - * indicator. NULL if notifications are to be suppressed. - */ - void SetController( CMusUiSendController* aController ); - - -protected: // constructors - - /** - * Meant to be a base class, no instantiation - */ - CMusUiSendViewContainer(); - - /** - * Symbian second-phase constructor. - * - * @param aView Parent view of container. - * @param aRect Frame rectangle for container. - * @param aInputParams Packaged data. - * @param aContainerVisible - * @param aIndicatorVisible - */ - void ConstructL( CMusUiGeneralView* aView, - const TRect& aRect, - TAknOrientation aIndicatorLayout, - TBool aContainerVisible = EFalse, - TBool aIndicatorVisible = EFalse ); - - -private: // from base class CCoeControl - - /** - * Gets called by the application framework when drawing is - * needed. - * - * @param aRect The rectangle that needs to be drawn. - */ - virtual void Draw( const TRect& aRect ) const; - - virtual void SizeChanged(); - - virtual TTypeUid::Ptr MopSupplyObject( TTypeUid aId ); - - -private: // MMusUiLevelIndicatorObserver - - virtual void SetLevelIndicatorVisibility( TBool aVisible ); - - virtual void IndicatorLevelChanged( TInt aNewLevel ); - - -protected: // data - - CMusUiLevelIndicator* iIndicator; - - -private: // data - - /** Background skin control context. */ - MAknsControlContext* iBackGround; - - /** Handle to the view that owns of this container. Not own. */ - CMusUiGeneralView* iView; - - /** - * Engine DSA area - */ - TRect iVideoRect; - - // Can be NULL - CMusUiSendController* iSendController; - - }; - - -#endif // MUSUISENDVIEWCONTAINER_H - -// end of file diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshui/inc/musuisharingobserver.h --- a/mmsharing/mmshui/inc/musuisharingobserver.h Thu Aug 19 09:51:39 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,88 +0,0 @@ -/* -* Copyright (c) 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: Mus Application's Sharing Observer Interface -* -*/ - - - -#ifndef MUSUISHARINGOBSERVER_H -#define MUSUISHARINGOBSERVER_H - - -#include -#include - -class MMusUiSharingObserver - { - - public: - - /* - * Shows sychronous wait dialog with softkey R_AVKON_SOFTKEYS_CANCEL. - * @param aPrompt Prompt text shown in dialog - * @param aTimerInSeconds Timer in seconds when dialog is dismissed - * automatically. Timer value 0 means that no timer is used. - * @param aExpirationMessageResourceId is ID of resource indicating - * the message to be shown if timer expires. Value 0 means that - * no message is shown. - * @return EFalse if dialog is dismissed by user pressing cancel - * or by expiration of timer. ETrue if DismissWaitDialogL - * is called with parameter ETrue; - */ - virtual TBool ShowWaitDialogL( - const TDesC& aPrompt, - TInt aTimerInSeconds = 0, - TInt aExpirationMessageResourceId = 0 ) = 0; - - /* - * Dismisses sychronous wait dialog shown by calling ShowWaitDialogL. - * @param aReturnValue determines return value of function - * ShowWaitDialogL. - */ - virtual void DismissWaitDialogL( TBool aReturnValue = ETrue ) = 0; - - /** - * Set call back service of wait dialog - * @param aCallback A pointer of class MProgressDialogCallback - * which implemented DialogDismissedL - */ - virtual void SetWaitDialogCallbackL( MProgressDialogCallback* aCallback ) = 0; - - virtual void ShowStatusPaneTitleL() = 0; - - /** - * - */ - virtual void EnableMiddleSoftkeyL( TInt aResourceId ) = 0; - - virtual void ActivateVolumeControlL( TInt aValue, TBool aOnlyIfVisible = EFalse ) = 0; - - virtual void HighlightSelectedToolbarItem( TInt aCommand ) = 0; - - virtual void ReplaceToolbarCommand( TInt aOldCommand, - TInt aNewCommand, - TBool aSetNewCommandFocused ) = 0; - - virtual void RefreshAudioRoutingToolbarButton() = 0; - - virtual void UpdateSessionTime( const TDesC& aSessionTime ) = 0; - - virtual void DismissMenuBar() = 0; - - }; - -#endif // MUSUISHARINGOBSERVER_H - -// end of file diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshui/inc/musuistartcontroller.h --- a/mmsharing/mmshui/inc/musuistartcontroller.h Thu Aug 19 09:51:39 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,58 +0,0 @@ -/* -* 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: -* -*/ - - -#ifndef MUSUISTARTCONTROLLER_H -#define MUSUISTARTCONTROLLER_H - -#include "musmanagercommon.h" -#include "musunittesting.h" - - -/** - * Class to read startup parameter from publish & subscribe - */ -class MusUiStartController - { - -private: // second phase constructors - - /** - * Disable instantiation by declaring C++ constructor private. - */ - MusUiStartController(); - - -public: // static new functions - - /** - * Reads a P&S integer value from the category KCategoryUid - * @pre P&S property KUseCase has to be defined. - * @leave One of the system wide error codes, if RProperty::Get() - * returns an error value. - * @return Defined use case (TMusUseCase) for launching MUS. - */ - static MultimediaSharing::TMusUseCase ReadUseCaseL(); - - - MUS_UNITTEST( UT_CMusUiStartController; ) - - }; - -#endif // MUSUISTARTCONTROLLER_H - -// end of file diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshui/inc/musuistatuspanehandler.h --- a/mmsharing/mmshui/inc/musuistatuspanehandler.h Thu Aug 19 09:51:39 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,170 +0,0 @@ -/* -* 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: -* -*/ - - - -#ifndef MUSUISTATUSPANEHANDLER_H -#define MUSUISTATUSPANEHANDLER_H - - -#include "musuinavimediadecorator.h" - -#include // Tab group -#include // Title pane -#include // Context pane -#include // Indicator container -#include -#include // CAknNavigationDecorator - - -class CAknNavigationControlContainer; -class CAknVolumePopup; - -/** - * Handles status, title and contextpane operations. - * - * @lib musui.exe - */ -class CMusUiStatusPaneHandler : public CBase - { - -public: // Constructors and destructor - - /** - * Two-phased constructor. - */ - static CMusUiStatusPaneHandler* NewL( CEikonEnv& aEikonEnv ); - - /** - * Destructor. - */ - virtual ~CMusUiStatusPaneHandler(); - -private: - - /** - * C++ default constructor. - */ - CMusUiStatusPaneHandler( CEikonEnv& aEikonEnv ); - - /** - * Symbian 2nd-phase constructor. - */ - void ConstructL(); - - -public: // New functions - - /** - * Sets statuspane icons. - * - * @param aIconId ID of icon from .mbg file. - * @param aIconMaskId ID of icon mask from .mbg file. - */ - void SetStatusPaneIconsL( TInt32 aIconId, TInt32 aIconMaskId ); - - /** - * Sets statuspane icons. - * - */ - void SetStatusPaneIconsL( CFbsBitmap* aBitmap ); - - /** - * Hides navi-pane decorators and clears text - */ - void ClearNaviPaneL(); - - /** - * Sets title-pane text - * - * @param aTitle Title text - */ - void SetTitleL( const TDesC& aTitle ); - - /** - * Sets title-pane text - * - */ - void SetTitleFromResourceL( TInt aResourceId ); - - /** - * Get the current volume setting. - * - * @return Current volume. - */ - TInt GetVolumeControlValue() const; - - /** - * Activates volume control. - * - * @return Volume controller. - */ - void ActivateVolumeControlL( TInt aVolume, TBool aOnlyIfVisible ); - - /** - * Activate media navi pane. - */ - void ActivateNaviPaneMediaL(); - - /** - * - */ - void ShowNaviPaneIconL( TMusUiNaviMediaDecorator aIcon ); - - /** - * Set text in media navi pane. - * - * @param aLabel New label of media navi pane control - */ - void SetLeftLabelL( const TDesC& aLabel ); - - /** - * Set text in media navi pane. - * - * @param aLabel New label of media navi pane control - */ - void SetRightLabelL( const TDesC& aLabel ); - - /** - * Create media navi pane. - */ - CAknNavigationDecorator* CreateMediaNaviL(); - - /** - * Get Volume popup control pointer - * @return pointer of VolumePopup control - */ - CAknVolumePopup* GetVolumePopup() const; - - -private: // data - - CEikonEnv& iEikonEnvironment; - - // UI controls - CAknNavigationControlContainer* iNaviPane; - CAknTitlePane* iTitlePane; - CAknContextPane* iContextPane; - CAknNavigationDecorator* iNaviPaneText; - CAknVolumePopup* iVolumePopup; - // Navi pane media control - CAknNavigationDecorator* iMediaControl; - }; - -#endif // MUSUISTATUSPANEHANDLER_H - -// end of file diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshui/inc/musuiviewcontainer.h --- a/mmsharing/mmshui/inc/musuiviewcontainer.h Thu Aug 19 09:51:39 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,147 +0,0 @@ -/* -* Copyright (c) 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: The MUS application's UI class. -* -*/ - - - -#ifndef MUSUIVIEWCONTAINER_H -#define MUSUIVIEWCONTAINER_H - - -#include // Control base class -#include - -class CAknWaitDialog; -class CMusUiGeneralView; - -/** - * - * - */ -class CMusUiViewContainer : public CCoeControl - { - -public: // constructors and destructor - - /** - * Destructor. - */ - ~CMusUiViewContainer(); - -public: // new functions - - void CancelWaitTimer(); - - /** - * Dismisses the current active wait note, if any. - */ - void DismissWaitDialogL( TBool aReturnValue = ETrue ); - - /** - * Shows sychronous wait dialog with softkey R_AVKON_SOFTKEYS_CANCEL. - * @param aPrompt Prompt text shown in dialog - * @param aTimerInSeconds Timer in seconds when dialog is dismissed - * automatically. Timer value 0 means that no timer is used. - * @param aExpirationMessageResourceId Message to be loaded and shown if - * timer expires. Value 0 means that no message is shown. - * @return ETrue if wait note is dismissed by calling DismissWaitDialogL - * with param ETrue. EFalse if user pressed cancel, timer expires - * or if DismissWaitDialogL is called with param EFalse. - */ - TBool RunWaitDialogL( const TDesC& aPrompt, - TInt aTimerInSeconds = 0, - TInt aExpirationMessageResourceId = 0 ); - - /** - * Set call back service of wait dialog - * @param aCallback A pointer of class MProgressDialogCallback - * which implemented DialogDismissedL - */ - void SetWaitDialogCallbackL( MProgressDialogCallback* aCallback ); - - /** - * Checks whether wait dialog is shown currently. - * @return ETrue if wait dialog is show. - */ - TBool WaitDialogShown() const; - - /** - * Request that toolbar visibility is set once currently shown dialog - * is dismissed. - * @param aToolbarHandler if NULL is passed, previous request is canceled. - * Ownership not transferred. - */ - void RequestToolbarVisibilityOnceDialogDismissed( - CMusUiGeneralView* aToolbarHandler ); - -protected: // constructors - - /** - * Meant to be a base class, no instantiation - */ - CMusUiViewContainer(); - -private: // new static functions - - /** - * Tick handler, callback function directly called by periodic timer - * - * @param aObject Pointer passed to TCallback. - * @return Value to indicate if callback function should be called again. - */ - static TInt DoWaitNoteTimeout( TAny* aObject ); - - -private: // data - - /** Wait dialog to show the invite is sent. Not own. */ - CAknWaitDialog* iWaitDialog; - - /** Periodic timer active object. Owns. */ - CPeriodic* iWaitDialogTimer; - - /** - * Indicates if wait note is dismissed using DismissWaitDialogL - */ - TBool iInvitationWaitDialogDismissed; - - /** - * If iInvitationWaitDialogDismissed is ETrue, this value should be returned - * from RunWaitDialogL - */ - TBool iWaitDialogReturnValueWhenDismissed; - - /** - * Resource ID of message to be shown if timer expires - */ - TInt iExpirationMessageResourceId; - - /** - * Flag indicating whether wait dialog is currently shown. - */ - TBool iShowingWaitDialog; - - /** - * Not owned. - */ - CMusUiGeneralView* iToolbarHandler; - - }; - - -#endif // MUSUISENDVIEWCONTAINER_H - -// end of file diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshui/inc/musuizoomindicator.h --- a/mmsharing/mmshui/inc/musuizoomindicator.h Thu Aug 19 09:51:39 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,274 +0,0 @@ -/* -* 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: Class for displaying icons in viewfinder view -* -*/ - - -#ifndef CMUSUIZOOMINDICATORS_H -#define CMUSUIZOOMINDICATORS_H - -// SYSTEM -#include -#include -#include - -class MAknsSkinInstance; -class CGulIcon; -class MMusUiZoomIndicatorObserver; - -/** -* Class for displaying icons in viewfinder view -* @since 2.8 -*/ -class CMusUiZoomIndicator : public CCoeControl - { - - - public: // Constructors and destructor - - /** - * Symbian OS two-phased constructor. - * @since 2.8 - * @param aController reference to CCcorController - */ - static CMusUiZoomIndicator* NewLC( - TInt aZoomMin, - TInt aZoomMax, - MMusUiZoomIndicatorObserver* aObserver ); - - /** - * Symbian OS two-phased constructor. - * @since 2.8 - * @param aController reference to CCcorController - */ - static CMusUiZoomIndicator* NewL( - TInt aZoomMin, - TInt aZoomMax, - MMusUiZoomIndicatorObserver* aObserver ); - - /** - * Destructor. - */ - ~CMusUiZoomIndicator(); - - public: // New functions - - /** - * - * @since 3.2 - */ - void SetZoomLevel( TInt aZoomLevel ); - - /** - * - * @since 3.2 - */ - TInt GetZoomLevel(); - - /** - * - * @since 3.2 - */ - void SetZoomMin( TInt aZoomMin ); - - /** - * - * @since 3.2 - */ - void SetZoomMax( TInt aZoomMax ); - - /** - * - * @since 3.2 - */ - void SetFullRect( const TRect aRect ); - - - - private: // From CCoeConrol - - /** - * Handles the size change events. - * - */ - void SizeChanged(); - - /** - * Draws the control. - * - * @param aRect The region of the control to be redrawn. - */ - void Draw(const TRect& aRect) const; - - TInt CountComponentControls() const; - - CCoeControl* ComponentControl( TInt aIndex ) const; - - - - private: // Constructors and destructor - - /** - * C++ constructor - * @since 2.8 - * @param aController reference to CCcorController - */ - CMusUiZoomIndicator( TInt aZoomMin, - TInt aZoomMax, - MMusUiZoomIndicatorObserver* aObserver ); - - /** - * Symbian 2nd phase constructor. - * @since 2.8 - */ - void ConstructL(); - - - private: // HELPERS - - /** - * - */ - void DrawIcons( const TRect& aRect ); - - /** - * - */ - void UpdateZoomLayout(); - - void ConstructImageL( CEikImage* aImage, - MAknsSkinInstance* aSkin, - const TAknsItemID& aId, - TInt aBitmapId, - TInt aMaskId ); - - /** - * Callback for disable zoom indicator. - * @since 2.8 - * @return KErrNone - */ - static TInt DisableZoomIndicator( TAny* aThis ); - - /** - * - */ - void DisableTimer(); - - /** - * - */ - void EnableTimer(); - - - private: //data - - /** - * - */ - TRect iParentRect; - - /** - * - */ - TRect iViewfinderRect; - - /** - * - */ - TInt iZoomMin; - - /** - * - */ - TInt iZoomMax; - - /** - * - */ - TInt iZoomLevel; - - /** - * - */ - CPeriodic* iDisableZoomTimer; // owned - - /** - * - */ - TRgb iIconColor; - - /** - * - */ - CEikImage* iIconElevator; - - /** - * - */ - CEikImage* iIconMin; - - /** - * - */ - CEikImage* iIconMax; - - /** - * - */ - CEikImage* iIconBg; - - /** - * - */ - TInt iTopMargin; - - /** - * - */ - TInt iBottomMargin; - - /** - * - */ - TInt iScaleStep; - - /** - * - */ - TInt iScaleY; - - /** - * - */ - TInt iMiddle; - - /** - * NOT OWN!!! - */ - MMusUiZoomIndicatorObserver* iObserver; - - TInt iElevatorWidth; - - TInt iElevatorHeight; - - TRect iFullRect; - - - }; - - -#endif - -// End of File diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshui/inc/musuizoomindicatorobserver.h --- a/mmsharing/mmshui/inc/musuizoomindicatorobserver.h Thu Aug 19 09:51:39 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,33 +0,0 @@ -/* -* 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: Mus zoom indicator Event Observer Interface -* -*/ - - - -#ifndef MUSUIZOOMINDICATOROBSERVER_H -#define MUSUIZOOMINDICATOROBSERVER_H - - -class MMusUiZoomIndicatorObserver - { - public: - - virtual void DisableZoomIndicator() = 0; - }; - -#endif // MUSUIZOOMINDICATOROBSERVER_H - -// end of file diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshui/src/musuiactivequerydialog.cpp --- a/mmsharing/mmshui/src/musuiactivequerydialog.cpp Thu Aug 19 09:51:39 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,153 +0,0 @@ -/* -* 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: The MUS application's UI class. -* -*/ - - -#include "musuiactivequerydialog.h" -#include "musuiqueryobserver.h" -#include "muslogger.h" -#include "musunittesting.h" - -#include -#include -#include -#include - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -CMusUiActiveQueryDialog* CMusUiActiveQueryDialog::NewL( - MMusUiQueryObserver& aObserver ) - { - CMusUiActiveQueryDialog* self - = new( ELeave ) CMusUiActiveQueryDialog( aObserver ); - - CleanupStack::PushL( self ); - self->ConstructL(); - CleanupStack::Pop( self ); - - return self; - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -CMusUiActiveQueryDialog::~CMusUiActiveQueryDialog() - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiActiveQueryDialog::~CMusUiActiveQueryDialog" ); - - Cancel(); - delete iGlobalQuery; - - MUS_LOG( "mus: [MUSUI ] <- CMusUiActiveQueryDialog::~CMusUiActiveQueryDialog" ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -CMusUiActiveQueryDialog::CMusUiActiveQueryDialog( MMusUiQueryObserver& aObserver ) - : CActive( EPriorityNormal ), iObserver( aObserver ) - { - CActiveScheduler::Add( this ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiActiveQueryDialog::ConstructL() - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiActiveQueryDialog::ConstructL" ); - - iGlobalQuery = CAknGlobalConfirmationQuery::NewL(); - - MUS_LOG( "mus: [MUSUI ] <- CMusUiActiveQueryDialog::ConstructL" ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiActiveQueryDialog::ShowL( const TDesC& aPrompt ) - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiActiveQueryDialog::ShowL" ); - - iGlobalQuery->ShowConfirmationQueryL( - iStatus, - aPrompt, - R_AVKON_SOFTKEYS_YES_NO ); - SetActive(); - - MUS_LOG( "mus: [MUSUI ] <- CMusUiActiveQueryDialog::ShowL" ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiActiveQueryDialog::RunL() - { - MUS_LOG1( "mus: [MUSUI ] -> CMusUiActiveQueryDialog::RunL [%d]", iStatus.Int() ); - if ( iStatus == EAknSoftkeyYes ) - { - MUS_LOG( "mus: [MUSUI ] CMusUiActiveQueryDialog::RunL: if" ); - iObserver.QueryAcceptedL( ETrue ); - } - else // EAknSoftkeyNo - { - MUS_LOG( "mus: [MUSUI ] CMusUiActiveQueryDialog::RunL: else" ); - iObserver.QueryAcceptedL( EFalse ); - } - MUS_LOG( "mus: [MUSUI ] <- CMusUiActiveQueryDialog::RunL" ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiActiveQueryDialog::DoCancel() - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiActiveQueryDialog::DoCancel" ); - iGlobalQuery->CancelConfirmationQuery(); - MUS_LOG( "mus: [MUSUI ] <- CMusUiActiveQueryDialog::DoCancel" ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -TInt CMusUiActiveQueryDialog::RunError( TInt aError ) - { - MUS_LOG1( "mus: [MUSUI ] -> CMusUiActiveQueryDialog::RunError [%d]", - aError ); - - iObserver.HandleQueryError( aError ); - - return KErrNone; - } - - -// end of file diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshui/src/musuiactivetimer.cpp --- a/mmsharing/mmshui/src/musuiactivetimer.cpp Thu Aug 19 09:51:39 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,145 +0,0 @@ -/* -* 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: -* -*/ - - - -#include "musuiactivetimer.h" -#include "musuiactivetimerobserver.h" - -#include "muslogger.h" // debug logging - - -// ----------------------------------------------------------------------------- -// Symbian two-phase constructor. -// ----------------------------------------------------------------------------- -// -CMusUiActiveTimer* CMusUiActiveTimer::NewL( MMusUiActiveTimerObserver* aObserver ) - { - CMusUiActiveTimer* self = new (ELeave) CMusUiActiveTimer( aObserver ); - CleanupStack::PushL( self ); - self->ConstructL(); - CleanupStack::Pop( self ); - return self; - } - - -// ----------------------------------------------------------------------------- -// Symbian second-phase constructor. -// ----------------------------------------------------------------------------- -// -void CMusUiActiveTimer::ConstructL() - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiActiveTimer::ConstructL" ); - - User::LeaveIfError( iTimer.CreateLocal() ); - CActiveScheduler::Add( this ); - - MUS_LOG( "mus: [MUSUI ] <- CMusUiActiveTimer::ConstructL" ); - } - - -// ----------------------------------------------------------------------------- -// . -// ----------------------------------------------------------------------------- -// -void CMusUiActiveTimer::After( TTimeIntervalMicroSeconds32 anInterval ) - { - // No logging due to huge amount of calls in some use cases - - Cancel(); - iTimer.After( iStatus, anInterval ); - SetActive(); - - // No logging due to huge amount of calls in some use cases - } - - -// ----------------------------------------------------------------------------- -// C++ constructor. -// ----------------------------------------------------------------------------- -// -CMusUiActiveTimer::CMusUiActiveTimer( MMusUiActiveTimerObserver* aObserver ) : - CActive( EPriorityNormal ), - iObserver( aObserver ) - { - // nothing - } - - -// ----------------------------------------------------------------------------- -// C++ destructor. -// ----------------------------------------------------------------------------- -// -CMusUiActiveTimer::~CMusUiActiveTimer() - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiActiveTimer::~CMusUiActiveTimer" ); - - Cancel(); - iTimer.Close(); - - MUS_LOG( "mus: [MUSUI ] <- CMusUiActiveTimer::~CMusUiActiveTimer" ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiActiveTimer::DoCancel() - { - // No logging due to huge amount of calls in some use cases - - iTimer.Cancel(); - - // No logging due to huge amount of calls in some use cases - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiActiveTimer::RunL() - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiActiveTimer::RunL" ); - if (iObserver && iStatus == KErrNone) - { - iObserver->TimerComplete( this ); - } - else - { - User::LeaveIfError(iStatus.Int()); - } - MUS_LOG( "mus: [MUSUI ] <- CMusUiActiveTimer::RunL" ); - } - -// ------------------------------------------------------------------------- -// If RunL() leaves,It should be handled here. -// ------------------------------------------------------------------------- -// -TInt CMusUiActiveTimer::RunError( TInt aError ) - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiActiveTimer::RunError" ); - // Nothing can be done here. - aError = KErrNone; - - MUS_LOG( "mus: [MUSUI ] <- CMusUiActiveTimer::RunError" ); - return aError; - } - - -// end of file diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshui/src/musuiactivitymanger.cpp --- a/mmsharing/mmshui/src/musuiactivitymanger.cpp Thu Aug 19 09:51:39 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,181 +0,0 @@ -/* -* 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: -* -*/ - - - -#include "musuiactivitymanger.h" -#include "muslogger.h" // debug logging - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -CMusUiActivityManager* CMusUiActivityManager::NewL( TInt aTimeout ) - - { - CMusUiActivityManager* self = - new (ELeave) CMusUiActivityManager( aTimeout ); - CleanupStack::PushL(self); - self->ConstructL(); - CleanupStack::Pop(self); - return self; - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -CMusUiActivityManager::~CMusUiActivityManager() - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiActivityManager::~CMusUiActivityManager" ); - Cancel(); - iTimer.Close(); - MUS_LOG( "mus: [MUSUI ] <- CMusUiActivityManager::~CMusUiActivityManager" ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -CMusUiActivityManager::CMusUiActivityManager( TInt aTimeout ) - : CActive( CActive::EPriorityHigh ), - iTimeout( aTimeout ) - - { - CActiveScheduler::Add(this); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiActivityManager::ConstructL() - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiActivityManager::ConstructL" ); - iTimer.CreateLocal(); - MUS_LOG( "mus: [MUSUI ] <- CMusUiActivityManager::ConstructL" ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiActivityManager::SetTimeout( TInt aTimeout ) - { - MUS_LOG1( "mus: [MUSUI ] -> CMusUiActivityManager::SetTimeout [%d]", aTimeout ); - iTimeout = aTimeout; - Reset(); - MUS_LOG( "mus: [MUSUI ] <- CMusUiActivityManager::SetTimeout" ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiActivityManager::Start() - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiActivityManager::Start" ); - if (!IsActive()) - { - iTimer.Inactivity( iStatus, iTimeout ); - SetActive(); - } - MUS_LOG( "mus: [MUSUI ] <- CMusUiActivityManager::Start" ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiActivityManager::Reset() - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiActivityManager::Reset" ); - Cancel(); - Start(); - MUS_LOG( "mus: [MUSUI ] <- CMusUiActivityManager::Reset" ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiActivityManager::DoCancel() - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiActivityManager::DoCancel" ); - iTimer.Cancel(); - MUS_LOG( "mus: [MUSUI ] <- CMusUiActivityManager::DoCancel" ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiActivityManager::RunL() - { - - MUS_LOG( "mus: [MUSUI ] -> CMusUiActivityManager::RunL" ); - - if ( iStatus == KErrNone ) - { - - TInt inactivity = User::InactivityTime().Int(); - - if ( inactivity >= iTimeout ) - { - User::ResetInactivityTime(); - Reset(); - } - else - { - iTimer.Inactivity( iStatus, iTimeout ); - } - - if ( !IsActive() ) - { - SetActive(); - } - - } - - MUS_LOG( "mus: [MUSUI ] <- CMusUiActivityManager::RunL" ); - } - -// ------------------------------------------------------------------------- -// If RunL() leaves,It should be handled here. -// ------------------------------------------------------------------------- -// -TInt CMusUiActivityManager::RunError( TInt aError ) - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiActivityManager::RunError" ); - // Nothing can be done here. - aError = KErrNone; - - MUS_LOG( "mus: [MUSUI ] <- CMusUiActivityManager::RunError" ); - return aError; - } - - -// end of file diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshui/src/musuiapp.cpp --- a/mmsharing/mmshui/src/musuiapp.cpp Thu Aug 19 09:51:39 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,59 +0,0 @@ -/* -* 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: Application class for MUS App. -* -*/ - - - -#include "musuiapp.h" // Header file for this class -#include "musuidocument.h" // Mus UI Document -#include "musuid.hrh" -#include "muslogger.h" // debug logging - -#include - - -// ============================ MEMBER FUNCTIONS =========================== - -// Returns application UID -TUid CMusUiApp::AppDllUid() const - { - const TUid KUidRetVal = { KMusUiUid }; - return KUidRetVal; - } - -// Creates CMusUiDocument object -CApaDocument* CMusUiApp::CreateDocumentL() - { - return CMusUiDocument::NewL( *this ); - } - - -// ==================== OTHER EXPORTED FUNCTIONS =========================== - -// Constructs and returns an application object -EXPORT_C CApaApplication* NewApplication() - { - MUS_LOG( "mus: [MUSUI ] -------------------------------------------------" ); - return new CMusUiApp; - } - -// Main function of the application executable -GLDEF_C TInt E32Main() - { - return EikStart::RunApplication( NewApplication ); - } - -// end of file diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshui/src/musuiappui.cpp --- a/mmsharing/mmshui/src/musuiappui.cpp Thu Aug 19 09:51:39 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,777 +0,0 @@ -/* -* 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: Application's UI class. -* -*/ - - - -#include "musuiappui.h" -#include "musuilivesharingview.h" -#include "musuiclipsharingview.h" -#include "musuireceiveview.h" -#include "musuistatuspanehandler.h" -#include "musuistartcontroller.h" -#include "musuiactivequerydialog.h" -#include "musuidefinitions.h" -#include "mussettings.h" -#include "mussettingskeys.h" -#include "musmanagercommon.h" -#include "musuiresourcehandler.h" -#include "musui.hrh" -#include "musuid.hrh" -#include "muslogger.h" // debug logging -#include -#include - -#include -#include -#include -#include -#include -#include -#include - -using namespace MusSettingsKeys; - -// ----------------------------------------------------------------------------- -// Symbian second-phase constructor. -// ----------------------------------------------------------------------------- -// -void CMusUiAppUi::ConstructL() - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiAppUi::ConstructL" ); - BaseConstructL( EAknEnableSkin | EAppOrientationAutomatic | EAknEnableMSK - | EAknSingleClickCompatible ); - - iResourceHandler = CMusUiResourceHandler::NewL( *this ); - MultimediaSharing::TMusUseCase usecase = MusUiStartController::ReadUseCaseL(); - iResourceHandler->CheckInitialOrientationL(usecase); - - iForeground = ETrue; - - // View for Live Sharing: - CMusUiLiveSharingView* liveSharingView = - new ( ELeave ) CMusUiLiveSharingView; - CleanupStack::PushL( liveSharingView ); - liveSharingView->ConstructL(); - AddViewL( liveSharingView ); // transfer ownership to CAknViewAppUi - CleanupStack::Pop( liveSharingView ); - - // View for Clip Sharing: - CMusUiClipSharingView* clipSharingView = - new ( ELeave ) CMusUiClipSharingView; - CleanupStack::PushL( clipSharingView ); - clipSharingView->ConstructL(); - AddViewL( clipSharingView ); // transfer ownership to CAknViewAppUi - CleanupStack::Pop( clipSharingView ); - - // View for Receiving: - CMusUiReceiveView* receiveView = new ( ELeave ) CMusUiReceiveView; - CleanupStack::PushL( receiveView ); - receiveView->ConstructL(); - AddViewL( receiveView ); // transfer ownership to CAknViewAppUi - CleanupStack::Pop( receiveView ); - - FindWindowGroupIdentifiersL(); - - iStatusPaneHandler = CMusUiStatusPaneHandler::NewL( *iEikonEnv ); - // The application icon: - iStatusPaneHandler->SetStatusPaneIconsL( - EMbmMusuiQgn_menu_mus_app_cxt, - EMbmMusuiQgn_menu_mus_app_cxt_mask ); - - iStatusPaneHandler->GetVolumePopup()->SetObserver(this); - - AknsUtils::InitSkinSupportL(); - AknsUtils::SetAvkonSkinEnabledL( ETrue ); - - // Check use case and set default view - switch ( usecase ) - { - case MultimediaSharing::EMusLiveVideo: - ActivateLocalViewL( liveSharingView->Id() ); - break; - case MultimediaSharing::EMusClipVideo: - ActivateLocalViewL( clipSharingView->Id() ); - break; - case MultimediaSharing::EMusReceive: - ActivateLocalViewL( receiveView->Id() ); - break; - default: - User::Leave( KErrNotSupported ); - break; - } - - iInterfaceSelector = CRemConInterfaceSelector::NewL(); - iCoreTarget = CRemConCoreApiTarget::NewL(*iInterfaceSelector, *this); - iInterfaceSelector->OpenTargetL(); - - // check if operator specific functionality is needed - iOperatorSpecificFunctionality = - ( MultimediaSharingSettings::OperatorVariantSettingL() == - EOperatorSpecific ); - - MUS_LOG( "mus: [MUSUI ] <- CMusUiAppUi::ConstructL" ); - } - - -// ----------------------------------------------------------------------------- -// Destructor. -// ----------------------------------------------------------------------------- -// -CMusUiAppUi::~CMusUiAppUi() - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiAppUi::~CMusUiAppUi" ); - delete iResourceHandler; - delete iConfirmationQuery; - delete iStatusPaneHandler; - delete iInterfaceSelector; - MUS_LOG( "mus: [MUSUI ] <- CMusUiAppUi::~CMusUiAppUi" ); - } - - -// ----------------------------------------------------------------------------- -// Fetches a handle to status pane handler -// ----------------------------------------------------------------------------- -// -CMusUiStatusPaneHandler* CMusUiAppUi::MusStatusPane() - { - return iStatusPaneHandler; - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -TBool CMusUiAppUi::ExitValue() - { - return iExit; - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiAppUi::HandleWsEventL( const TWsEvent& aEvent, CCoeControl* aDestination ) - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiAppUi::HandleWsEventL" ); - - const TInt type = aEvent.Type(); - - // Avoiding unknown failures - if( !iView ) - { - MUS_LOG( "mus: [MUSUI ] <- CMusUiAppUi::HandleWsEventL, view is NULL" ); - return; - } - - if( type == EEventKeyUp ) - { - static_cast - ( iView )->HandleKeyUpEvent( iLastKeyCode ); - } - - if ( ( type == EEventKey ) && iView->Toolbar()->IsShown() && !MUS_NO_TOOLBAR ) - { - const TKeyEvent* keyEvent = aEvent.Key(); - - iLastKeyCode = keyEvent->iCode; - - MUS_LOG1( "mus: [MUSUI ] CMusUiAppUi::HandleWsEventL iCode: %d", - keyEvent->iCode ); - CMusUiGeneralView* activatedView = - static_cast( iView ); - activatedView->HandleToolbarCommandL( keyEvent->iCode ); - } - - if ( type == KAknFullOrPartialForegroundLost || - type == EEventFocusLost || - type == KAknFullOrPartialForegroundGained || - type == EEventFocusGained ) - { - DoHandleForegroundEventL( type ); - } - - // All events are sent to base class. - CAknAppUi::HandleWsEventL( aEvent, aDestination ); - - MUS_LOG( "mus: [MUSUI ] <- CMusUiAppUi::HandleWsEventL" ); - } - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiAppUi::HandleForegroundEventL( TBool aForeground ) - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiAppUi::HandleForegroundEventL" ); - - CAknViewAppUi::HandleForegroundEventL( aForeground ); - - MUS_LOG( "mus: [MUSUI ] <- CMusUiAppUi::HandleForegroundEventL" ); - } - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiAppUi::MrccatoCommand( TRemConCoreApiOperationId aOperationId, - TRemConCoreApiButtonAction aButtonAct ) - { - MUS_LOG2( "mus: [MUSUI ] -> CMusUiAppUi::MrccatoCommand: %d, %d", - aOperationId, - aButtonAct ); - - switch ( aOperationId ) - { - case ERemConCoreApiVolumeUp: // Volume Up - { - switch ( aButtonAct ) - { - case ERemConCoreApiButtonClick: - { - // volume up clicked - CMusUiGeneralView* activatedView = - static_cast( iView ); - if( MUS_NO_TOOLBAR ) - { - TRAP_IGNORE( activatedView->HandleCommandL( - EMusuiCmdViewVolumeUp ) ) - } - else - { - TRAP_IGNORE( activatedView->HandleToolbarCommandL( - EMusuiCmdViewVolumeUp ) ) - } - break; - } - default: - // Never hits this - break; - } - break; - } - case ERemConCoreApiVolumeDown: // Volume Down - { - switch ( aButtonAct ) - { - case ERemConCoreApiButtonClick: - { - // volume down clicked - CMusUiGeneralView* activatedView = - static_cast( iView ); - if( MUS_NO_TOOLBAR ) - { - TRAP_IGNORE( activatedView->HandleCommandL( - EMusuiCmdViewVolumeDown ) ) - } - else - { - TRAP_IGNORE( activatedView->HandleToolbarCommandL( - EMusuiCmdViewVolumeDown ) ) - } - break; - } - default: - // Never hits this - break; - } - break; - } - } - - MUS_LOG( "mus: [MUSUI ] <- CMusUiAppUi::MrccatoCommand" ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiAppUi::QueryAcceptedL( TBool aAccepted ) - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiAppUi::QueryAccepted" ); - CMusUiGeneralView* activatedView = static_cast( iView ); - // TODO: If next call leaves, it causes error handling to be done with - // previously deleted query object. This leads to crash. - activatedView->AsyncQueryDialogAcceptedL( aAccepted ); - MUS_LOG( "mus: [MUSUI ] <- CMusUiAppUi::QueryAccepted" ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -TInt CMusUiAppUi::HandleQueryError( TInt aError ) - { - HandleError( aError ); // Forward to general error handler - return KErrNone; - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiAppUi::ActivateLocalMusViewL( TUid aViewId ) - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiAppUi::ActivateLocalMusViewL" ); - ActivateLocalViewL( aViewId ); - MUS_LOG( "mus: [MUSUI ] <- CMusUiAppUi::ActivateLocalMusViewL" ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiAppUi::ActivateLocalMusViewL( TUid aViewId, - TUid aCustomMessageId, - const TDesC8& aCustomMessage ) - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiAppUi::ActivateLocalMusViewL" ); - ActivateLocalViewL( aViewId, aCustomMessageId, aCustomMessage ); - MUS_LOG( "mus: [MUSUI ] <- CMusUiAppUi::ActivateLocalMusViewL" ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiAppUi::ShowAsyncConfirmationQueryDialogL( const TDesC& aPrompt ) - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiAppUi::ShowAsyncConfirmationQueryDialogL" ); - if ( !iConfirmationQuery ) - { - iConfirmationQuery = CMusUiActiveQueryDialog::NewL( *this ); - } - iConfirmationQuery->ShowL( aPrompt ); - MUS_LOG( "mus: [MUSUI ] <- CMusUiAppUi::ShowAsyncConfirmationQueryDialogL" ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiAppUi::SetToolbarVisibility( TBool aVisible ) - { - CMusUiGeneralView* activatedView = static_cast( iView ); - if ( activatedView ) - { - activatedView->SetToolbarVisibility( aVisible ); - } - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiAppUi::ShowNaviPaneIconL( TMusUiNaviMediaDecorator aIcon ) - { - MusStatusPane()->ShowNaviPaneIconL( aIcon ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -CEikonEnv* CMusUiAppUi::EikonEnv( ) const - { - return iEikonEnv; - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiAppUi::TerminateCall() - { - // TODO: Remove hard-coded values! - MUS_LOG( "mus: [MUSUI ] -> CMusUiAppUi::TerminateCall" ); - RWsSession sess = iEikonEnv->WsSession(); - - TApaTaskList taskList(sess); - - TApaTask phoneTask = taskList.FindApp(TUid::Uid(0x100058B3)); - MUS_LOG( "mus: [MUSUI ] phoneTask" ); - TInt id = 0; - if (phoneTask.Exists()) - id = phoneTask.WgId(); - MUS_LOG1( "PhoneTask ID: %d",id ); - TWsEvent event; - - MUS_LOG( "mus: [MUSUI ] CMusUiAppUi::TerminateCall: 1" ); - MUS_LOG( "mus: [MUSUI ] CMusUiAppUi::EEventKeyDown" ); - event.SetType( EEventKeyDown ); - event.SetTimeNow(); - event.Key()->iCode = 0; - event.Key()->iModifiers = EModifierNumLock; - event.Key()->iRepeats = 0; - event.Key()->iScanCode = EStdKeyNo; - sess.SendEventToWindowGroup( id, event ); - - MUS_LOG( "mus: [MUSUI ] CMusUiAppUi::TerminateCall: 2" ); - MUS_LOG( "mus: [MUSUI ] CMusUiAppUi::EEventKey" ); - event.SetType( EEventKey ); - event.SetTimeNow(); - event.Key()->iCode = EKeyNo; - event.Key()->iModifiers = 32769; - event.Key()->iRepeats = 0; - event.Key()->iScanCode = EStdKeyNo; - sess.SendEventToWindowGroup( id, event ); - - MUS_LOG( "mus: [MUSUI ] CMusUiAppUi::TerminateCall: 3" ); - MUS_LOG( "mus: [MUSUI ] CMusUiAppUi::EEventKeyUp" ); - event.SetType( EEventKeyUp ); - event.SetTimeNow(); - event.Key()->iCode = 0; - event.Key()->iModifiers = 32769; - event.Key()->iRepeats = 0; - event.Key()->iScanCode = EStdKeyNo; - sess.SendEventToWindowGroup( id, event ); - - MUS_LOG( "mus: [MUSUI ] <- CMusUiAppUi::TerminateCall" ); - } - - -// ----------------------------------------------------------------------------- -// Return current app orientation. -// ----------------------------------------------------------------------------- -// -CAknAppUiBase::TAppUiOrientation CMusUiAppUi::AppOrientation() const - { - return ( ApplicationRect().Width() > ApplicationRect().Height() ) ? - CAknAppUiBase::EAppUiOrientationLandscape : - CAknAppUiBase::EAppUiOrientationPortrait; - } - - -// ----------------------------------------------------------------------------- -// Switch the active view's orientation, if it's in the foreground. -// ----------------------------------------------------------------------------- -// -void CMusUiAppUi::SwitchOrientationL( TAppUiOrientation aAppOrientation ) - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiAppUi::SwitchOrientationL" ); - SetOrientationL( aAppOrientation ); - MUS_LOG( "mus: [MUSUI ] <- CMusUiAppUi::SwitchOrientationL" ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiAppUi::HandleError( const TInt aReason ) - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiAppUi::HandleError" ); - if ( aReason != KErrNone ) - { - HandleExit(); - } - MUS_LOG( "mus: [MUSUI ] <- CMusUiAppUi::HandleError" ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiAppUi::HandleExit() - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiAppUi::HandleExit" ); - if ( !iExit ) - { - iExit = ETrue; - PrepareToExit(); - - RemoveView( KMusUidLiveSharingView ); - RemoveView( KMusUidClipSharingView ); - RemoveView( KMusUidReceivingView ); - - User::Exit( KErrNone ); - } - MUS_LOG( "mus: [MUSUI ] <- CMusUiAppUi::HandleExit" ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -TBool CMusUiAppUi::OrientationCanBeChanged() const - { - return CAknAppUiBase::OrientationCanBeChanged(); - } - - -// ----------------------------------------------------------------------------- -// From base class CEikAppUi. Handles a change to the application's -// resources which are shared across the environment. -// ----------------------------------------------------------------------------- -// -void CMusUiAppUi::HandleResourceChangeL( TInt aResourceChangeType ) - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiAppUi::HandleResourceChangeL" ); - CAknAppUi::HandleResourceChangeL( aResourceChangeType ); - - if ( aResourceChangeType == KEikDynamicLayoutVariantSwitch && iView ) - { - MUS_LOG( "mus: [MUSUI ] CMusUiAppUi::HandleResourceChangeL:\ - aResourceChangeType == KEikDynamicLayoutVariantSwitch" ); - - iView->Toolbar()->HandleResourceChange( aResourceChangeType ); - - CMusUiGeneralView* activatedView = - static_cast( iView ); - if ( !IsForeground() ) - { - MUS_LOG( "mus: [MUSUI ] <- CMusUiAppUi::HandleResourceChangeL" ); - return; - } - - if ( activatedView ) - { - activatedView->RefreshView(); - } - } - - MUS_LOG( "mus: [MUSUI ] <- CMusUiAppUi::HandleResourceChangeL" ); - } - - -// ----------------------------------------------------------------------------- -// takes care of key event handling -// ----------------------------------------------------------------------------- -// -TKeyResponse CMusUiAppUi::HandleKeyEventL( const TKeyEvent& aKeyEvent, - TEventCode /*aType*/ ) - { - MUS_LOG1( "mus: [MUSUI ] -> CMusUiAppUi::HandleKeyEventL: %d", - aKeyEvent.iScanCode ); - MUS_LOG1( "mus: [MUSUI ] -> CMusUiAppUi::HandleKeyEventL: %d", - aKeyEvent.iCode ); - - if ( aKeyEvent.iScanCode == EStdKeyDevice1 /*165*/ ) // Cancel in Options - { - SetToolbarVisibility( ETrue ); - } - MUS_LOG( "mus: [MUSUI ] <- CMusUiAppUi::HandleKeyEventL" ); - return EKeyWasNotConsumed; - } - - -// ----------------------------------------------------------------------------- -// takes care of command handling -// ----------------------------------------------------------------------------- -// -void CMusUiAppUi::HandleCommandL( TInt aCommand ) - { - MUS_LOG1( "mus: [MUSUI ] -> CMusUiAppUi::HandleCommandL [%d]", - aCommand ); - switch ( aCommand ) - { - case EMusuiGenCmdExit: - case EAknSoftkeyExit: - case EEikCmdExit: - { - CMusUiGeneralView* activatedView = - static_cast( iView ); - activatedView->HandleCommandL( EAknSoftkeyExit ); - - break; - } - default: - break; - } - MUS_LOG( "mus: [MUSUI ] <-> CMusUiAppUi::HandleCommandL" ); - } - -// ----------------------------------------------------------------------------- -// CMusUiAppUi::GetVolumeFromUi() -// ----------------------------------------------------------------------------- -// -TInt CMusUiAppUi::GetUiVolumeValue() - { - return iStatusPaneHandler->GetVolumeControlValue(); - } - -// ----------------------------------------------------------------------------- -// CMusUiAppUi::ResourceHandler() -// ----------------------------------------------------------------------------- -// -CMusUiResourceHandler* CMusUiAppUi::ResourceHandler() - { - return iResourceHandler; - } - -// ----------------------------------------------------------------------------- -// CMusUiAppUi::AppHelpContextL() -// ----------------------------------------------------------------------------- -// -CArrayFix* CMusUiAppUi::HelpContextL() const - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiAppUi::HelpContextL" ); - CArrayFix* contexts = - new (ELeave) CArrayFixFlat(1); - CleanupStack::PushL(contexts); - - TCoeHelpContext help; - help.iMajor.iUid = KMusUiUid; - - if ( iView->Id() == KMusUidLiveSharingView ) - { - help.iContext = KMSH_HLP_LIVE; - } - else if ( iView->Id() == KMusUidClipSharingView ) - { - help.iContext = KMSH_HLP_CLIP; - } - else if ( iView->Id() == KMusUidReceivingView ) - { - help.iContext = KMSH_HLP_RECEIVE; - } - - contexts->AppendL(help); - CleanupStack::Pop(); // contexts - - MUS_LOG( "mus: [MUSUI ] <- CMusUiAppUi::HelpContextL" ); - return contexts; - } - - -// ----------------------------------------------------------------------------- -// We might get PartialFocusLost also for some notes and -// overally items that are somehow overlapping screen instead of -// FocusLost. In those cases we should not put app to background. -// ----------------------------------------------------------------------------- -// -void CMusUiAppUi::DoHandleForegroundEventL( TInt aEventType ) - { - MUS_LOG1( "mus: [MUSUI ] -> CMusUiAppUi::DoHandleForegroundEventL, event:%d", - aEventType ); - - __ASSERT_ALWAYS( aEventType == KAknFullOrPartialForegroundGained || - aEventType == KAknFullOrPartialForegroundLost || - aEventType == EEventFocusLost || - aEventType == EEventFocusGained, User::Leave( KErrArgument ) ); - - TBool handleEvent( EFalse ); - TBool foreground( - aEventType == KAknFullOrPartialForegroundGained || - aEventType == EEventFocusGained ); - - const TInt windowGroupId = - iCoeEnv->WsSession().GetFocusWindowGroup(); - - MUS_LOG1( "mus: [MUSUI ] focus wgid:%d", windowGroupId ); - - if ( foreground ) - { - iCoeEnv->RootWin().EnableFocusChangeEvents(); - handleEvent = ETrue; - } - else if ( ( windowGroupId != iThisApplicationWgId ) && - ( windowGroupId != iEikonServerWgId ) && - ( windowGroupId != iAknNfyServerWgId ) ) - { - iCoeEnv->RootWin().DisableFocusChangeEvents(); - handleEvent = ETrue; - } - else - { - // NOP - } - - if ( handleEvent && iView && foreground != iForeground ) - { - iForeground = foreground; - - CMusUiGeneralView* activatedView = - static_cast( iView ); - - activatedView->DoHandleForegroundEventL( foreground ); - } - - MUS_LOG( "mus: [MUSUI ] <- CMusUiAppUi::DoHandlerForegroundEventL" ); - } - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiAppUi::FindWindowGroupIdentifiersL() - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiAppUi::FindWindowGroupIdentifiersL" ); - - // Name of the EIKON server window group. - _LIT( KMusUiEikonServer, "EikonServer" ); - - // Name of the AknCapServer window group. - _LIT( KMusUiAknCapServer, "*akncapserver*" ); - - // Name of the AknNotifierServer window group. - _LIT( KMusUiAknNotifierServer, "*aknnfysrv*" ); - - CEikonEnv& eikEnv = *( iEikonEnv ); - eikEnv.SetSystem( ETrue ); - eikEnv.WsSession().ComputeMode( RWsSession::EPriorityControlDisabled ); - - iThisApplicationWgId = eikEnv.RootWin().Identifier(); - MUS_LOG1( "mus: [MUSUI ] own wgid:%d", iThisApplicationWgId ); - iEikonServerWgId = - eikEnv.WsSession().FindWindowGroupIdentifier( 0, KMusUiEikonServer ); - MUS_LOG1( "mus: [MUSUI ] eikonserv wgid:%d", iEikonServerWgId ); - iAknCapServerWgId = - eikEnv.WsSession().FindWindowGroupIdentifier( 0, KMusUiAknCapServer ); - MUS_LOG1( "mus: [MUSUI ] akncapserv wgid:%d", iAknCapServerWgId ); - iAknNfyServerWgId = - eikEnv.WsSession().FindWindowGroupIdentifier( 0, - KMusUiAknNotifierServer ); - MUS_LOG1( "mus: [MUSUI ] aknnotifserv wgid:%d", iAknNfyServerWgId ); - - eikEnv.RootWin().EnableFocusChangeEvents(); - - MUS_LOG( "mus: [MUSUI ] <- CMusUiAppUi::FindWindowGroupIdentifiersL" ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiAppUi::HandleControlEventL(CCoeControl* aControl,TCoeEvent aEventType) - { - CAknVolumePopup* popup = iStatusPaneHandler->GetVolumePopup(); - if ( popup && popup->IsVisible() && (popup == aControl) && - (aEventType == MCoeControlObserver::EEventStateChanged) ) - { - MUS_LOG1( "mus: [MUSUI ] CMusUiAppUi::HandleControlEventL(): volume[%d]", - popup->Value() ); - CMusUiGeneralView* activatedView = - static_cast( iView ); - activatedView->HandleCommandL( EMusuiCmdViewVolumeChanged ); - } - - } -// end of file diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshui/src/musuibackgroundviewcontainer.cpp --- a/mmsharing/mmshui/src/musuibackgroundviewcontainer.cpp Thu Aug 19 09:51:39 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,274 +0,0 @@ -/* -* 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: The MUS application's UI class. -* -*/ - -#include "musuibackgroundviewcontainer.h" -#include "musuiappui.h" -#include "muslogger.h" // debug logging - -#include -#include -#include -#include // StringLoader -#include -#include -#include -#include - - -// Hidden window group. magic number 32 hiddens window -_LIT( KMusUiBackgroundWindowGroupName,"32MusUiBackground" ); - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -CMusUiBackgroundViewContainer* CMusUiBackgroundViewContainer::NewL( - const TRect& aRect, - TInt aOrdinalPosition ) - { - CMusUiBackgroundViewContainer* self = - new( ELeave )CMusUiBackgroundViewContainer( aOrdinalPosition ); - CleanupStack::PushL( self ); - self->ConstructL( aRect ); - CleanupStack::Pop( self ); - return self; - } - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -CMusUiBackgroundViewContainer::CMusUiBackgroundViewContainer( - TInt aOrdinalPosition ) : iOrdinalPosition( aOrdinalPosition ) - { - } - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiBackgroundViewContainer::ConstructL( const TRect& aRect ) - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiBackgroundViewContainer::ConstructL()" ); - - RWindowGroup iMyWindowGroup = RWindowGroup( iCoeEnv->WsSession() ); - User::LeaveIfError( iMyWindowGroup.Construct( ( TUint32 )&iMyWindowGroup) ); - - iMyWindowGroup.SetName( KMusUiBackgroundWindowGroupName ); - iMyWindowGroup.SetOrdinalPosition( iOrdinalPosition, ECoeWinPriorityNormal ); - iMyWindowGroup.EnableReceiptOfFocus( EFalse ); - iMyWindowGroup.AutoForeground( EFalse ); - iMyWindowGroup.SetNonFading( ETrue ); - - CreateWindowL(&iMyWindowGroup); - - iGroupIdentifier = iMyWindowGroup.Identifier(); - - iBackGround = CAknsBasicBackgroundControlContext::NewL( - KAknsIIDQsnBgAreaMain, - aRect, - EFalse ); - - SetRect( aRect ); - - ActivateL(); - - MUS_LOG( "mus: [MUSUI ] <- CMusUiBackgroundViewContainer::ConstructL()" ); - } - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -CMusUiBackgroundViewContainer::~CMusUiBackgroundViewContainer() - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiBackgroundViewContainer::~CMusUiBackgroundViewContainer()" ); - delete iBackGround; - MUS_LOG( "mus: [MUSUI ] <- CMusUiBackgroundViewContainer::~CMusUiBackgroundViewContainer()" ); - } - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiBackgroundViewContainer::RefreshView() - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiBackgroundViewContainer::RefreshView()" ); - - DrawNow(); - - MUS_LOG( "mus: [MUSUI ] <- CMusUiBackgroundViewContainer::RefreshView()" ); - } - - -// ----------------------------------------------------------------------------- -// Set's this group right ordinal position -// ----------------------------------------------------------------------------- -// -void CMusUiBackgroundViewContainer::SetOrdinalPosition() - { - MUS_LOG1( "mus: [MUSUI ] -> CMusUiBackgroundViewContainer::SetOrdinalPosition(): %d", - iOrdinalPosition ); - MakeVisible( ETrue ); - - iCoeEnv->WsSession().SetWindowGroupOrdinalPosition( iGroupIdentifier, - iOrdinalPosition ); - - DrawNow(); - MUS_LOG( "mus: [MUSUI ] <- CMusUiBackgroundViewContainer::SetOrdinalPosition()" ); - } - -// ----------------------------------------------------------------------------- -// Set's this group right ordinal position -// ----------------------------------------------------------------------------- -// -void CMusUiBackgroundViewContainer::SetOrdinalPosition( TInt aOrdianlPosition) - { - MUS_LOG1( "mus: [MUSUI ] -> CMusUiBackgroundViewContainer::SetOrdinalPosition(): %d", - aOrdianlPosition ); - MakeVisible( ETrue ); - - iCoeEnv->WsSession().SetWindowGroupOrdinalPosition( iGroupIdentifier, - aOrdianlPosition ); - - DrawNow(); - MUS_LOG( "mus: [MUSUI ] <- CMusUiBackgroundViewContainer::SetOrdinalPosition()" ); - } - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiBackgroundViewContainer::UpdateOrdinalPositionValue( TBool aUp ) - { - MUS_LOG1( "mus: [MUSUI ] -> CMusUiBackgroundViewContainer::UpdateOrdinalPositionValue(): %d", - aUp ); - if ( aUp ) - { - ++iOrdinalPosition; - } - else - { - --iOrdinalPosition; - } - SetOrdinalPosition(); - MUS_LOG( "mus: [MUSUI ] <- CMusUiBackgroundViewContainer::UpdateOrdinalPositionValue()" ); - } - - -// ----------------------------------------------------------------------------- -// Called by framework when the view size is changed -// ----------------------------------------------------------------------------- -// -void CMusUiBackgroundViewContainer::SizeChanged() - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiBackgroundViewContainer::SizeChanged()" ); - TRect parentRect(Rect()); - if (iBackGround) - { - (static_cast(iBackGround))->SetRect(parentRect); - } - - SetOrdinalPosition(); - //MakeVisible( EFalse ); - MUS_LOG( "mus: [MUSUI ] <- CMusUiBackgroundViewContainer::SizeChanged()" ); - } - - -// ----------------------------------------------------------------------------- -// Called by framework when to retrieve the no. of controls. -// ----------------------------------------------------------------------------- -// -TInt CMusUiBackgroundViewContainer::CountComponentControls() const - { - return 0; // return nbr of controls inside this container - } - - -// ----------------------------------------------------------------------------- -// Called by framework to retrieve the control specified by index. -// ----------------------------------------------------------------------------- -// -CCoeControl* CMusUiBackgroundViewContainer::ComponentControl( TInt /*aIndex*/ ) const - { - return NULL; - } - - -// ----------------------------------------------------------------------------- -// Called by framework to redraw the screen area. -// ----------------------------------------------------------------------------- -// -void CMusUiBackgroundViewContainer::Draw( const TRect& aRect ) const - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiBackgroundViewContainer::Draw()" ); - - CWindowGc& gc = SystemGc(); - - MAknsSkinInstance* skin = AknsUtils::SkinInstance(); - MAknsControlContext* cc = AknsDrawUtils::ControlContext( this ); - if(!AknsDrawUtils::Background( skin, cc,this,gc,aRect,KAknsDrawParamDefault )) - { - MUS_LOG( "mus: [MUSUI ] Skin not valid or not found" ); - gc.SetBrushColor( iEikonEnv->ControlColor( EColorWindowBackground, *this ) ); - gc.SetBrushStyle( CGraphicsContext::ESolidBrush ); - gc.Clear( aRect ); - } - - MUS_LOG( "mus: [MUSUI ] <- CMusUiBackgroundViewContainer::Draw()" ); - } - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiBackgroundViewContainer::HandleControlEventL( - CCoeControl* /*aControl*/,TCoeEvent /*aEventType*/) - { - // TODO: Add your control event handler code here - } - - -// ----------------------------------------------------------------------------- -// Called by framework to act on key events if required. -// ----------------------------------------------------------------------------- -// -TKeyResponse CMusUiBackgroundViewContainer::OfferKeyEventL( - const TKeyEvent& /*aKeyEvent*/, - TEventCode /*aType*/ ) - { - return EKeyWasNotConsumed; - } - - -// ----------------------------------------------------------------------------- -// Supply the Mob Object for background skin drawing -// ----------------------------------------------------------------------------- -// -TTypeUid::Ptr CMusUiBackgroundViewContainer::MopSupplyObject( TTypeUid aId ) - { - if (aId.iUid == MAknsControlContext::ETypeId && iBackGround ) - { - return MAknsControlContext::SupplyMopObject( aId, iBackGround ); - } - return CCoeControl::MopSupplyObject( aId ); - } - - - -// end of file diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshui/src/musuibitmapdecoder.cpp --- a/mmsharing/mmshui/src/musuibitmapdecoder.cpp Thu Aug 19 09:51:39 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,166 +0,0 @@ -/* -* 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: -* -*/ - - - -#include "musuibitmapdecoder.h" -#include "musuibitmapdecoderobserver.h" -#include "muslogger.h" // debug logging - -#include - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -CMusUiBitmapDecoder::~CMusUiBitmapDecoder() - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiBitmapDecoder::~CMusUiBitmapDecoder" ); - Cancel(); - iFs.Close(); - delete iData; - delete iDecoder; - MUS_LOG( "mus: [MUSUI ] <- CMusUiBitmapDecoder::~CMusUiBitmapDecoder" ); - } - - -// ----------------------------------------------------------------------------- -// Symbian two-phase constructor. -// ----------------------------------------------------------------------------- -// -CMusUiBitmapDecoder* CMusUiBitmapDecoder::NewL( - MMusUiBitmapDecoderObserver& aObserver ) - { - CMusUiBitmapDecoder* self = new (ELeave) CMusUiBitmapDecoder( aObserver ); - CleanupStack::PushL( self ); - self->ConstructL(); - CleanupStack::Pop( self ); - return self; - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -CMusUiBitmapDecoder::CMusUiBitmapDecoder( - MMusUiBitmapDecoderObserver& aObserver ) : - CActive( EPriorityNormal ), - iObserver( aObserver ) - { - // nothing - } - - -// ----------------------------------------------------------------------------- -// Symbian second-phase constructor. -// ----------------------------------------------------------------------------- -// -void CMusUiBitmapDecoder::ConstructL() - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiBitmapDecoder::ConstructL" ); - User::LeaveIfError( iFs.Connect() ); - //delete iData; - iData = NULL; - //delete iDecoder; - iDecoder = NULL; - CActiveScheduler::Add( this ); - MUS_LOG( "mus: [MUSUI ] <- CMusUiBitmapDecoder::ConstructL" ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiBitmapDecoder::ConvertL( HBufC8* aData, CFbsBitmap* aBitmap ) - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiBitmapDecoder::ConvertL" ); - - if ( IsActive() ) - { - Cancel(); - } - - iData = aData->AllocL(); - iBitmap = aBitmap; - - delete iDecoder; - iDecoder = NULL; - iDecoder = CImageDecoder::DataNewL( iFs, *iData ); - - iBitmap->Create( iDecoder->FrameInfo().iFrameCoordsInPixels.Size(), - iDecoder->FrameInfo().iFrameDisplayMode ); - - iDecoder->Convert( &iStatus, *iBitmap, 0 ); - SetActive(); - - MUS_LOG( "mus: [MUSUI ] <- CMusUiBitmapDecoder::ConvertL" ); - - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiBitmapDecoder::DoCancel() - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiBitmapDecoder::DoCancel" ); - iDecoder->Cancel(); - Cancel(); - MUS_LOG( "mus: [MUSUI ] <- CMusUiBitmapDecoder::DoCancel" ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiBitmapDecoder::RunL() - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiBitmapDecoder::RunL" ); - if (iStatus == KErrNone) - { - iObserver.UpdateBitmap( iBitmap ); - } - else - { - MUS_LOG1( "mus: [MUSUI ] CMusUiBitmapDecoder::RunL: iStatus: [%d]", - iStatus.Int() ); - User::Leave( iStatus.Int() ); - } - MUS_LOG( "mus: [MUSUI ] <- CMusUiBitmapDecoder::RunL" ); - } - -// ------------------------------------------------------------------------- -// If RunL() leaves,It should be handled here. -// ------------------------------------------------------------------------- -// -TInt CMusUiBitmapDecoder::RunError( TInt aError ) - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiBitmapDecoder::RunError" ); - // Nothing can be done here. - aError = KErrNone; - - MUS_LOG( "mus: [MUSUI ] <- CMusUiBitmapDecoder::RunError" ); - return aError; - } - - -// end of file diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshui/src/musuicallbackservice.cpp --- a/mmsharing/mmshui/src/musuicallbackservice.cpp Thu Aug 19 09:51:39 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,183 +0,0 @@ -/* -* Copyright (c) 2005-2006 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: Asynchronous callback service provider. -* -*/ - - - -#include "musuicallbackservice.h" -#include "musuicallbackobserver.h" // callback observer interface -#include "muslogger.h" - - -// ----------------------------------------------------------------------------- -// Two-phased constructor. -// ----------------------------------------------------------------------------- -// -CMusUiCallbackService* CMusUiCallbackService::NewL( - MMusUiCallbackObserver& aCallbackObserver ) - { - CMusUiCallbackService* self = - new ( ELeave ) CMusUiCallbackService( - aCallbackObserver ); - CleanupStack::PushL( self ); - self->ConstructL(); - CleanupStack::Pop( self ); - return self; - } - - -// ----------------------------------------------------------------------------- -// Destructor. -// ----------------------------------------------------------------------------- -// -CMusUiCallbackService::~CMusUiCallbackService() - { - // Cancel active object - MUS_LOG( "mus: [MUSUI ] -> CMusUiCallbackService::~CMusUiCallbackService" ); - Cancel(); - MUS_LOG( "mus: [MUSUI ] <- CMusUiCallbackService::~CMusUiCallbackService" ); - } - - -// ----------------------------------------------------------------------------- -// C++ default constructor. -// ----------------------------------------------------------------------------- -// -CMusUiCallbackService::CMusUiCallbackService( - MMusUiCallbackObserver& aCallbackObserver ) - : CActive( EPriorityStandard ), - iCallbackObserver( aCallbackObserver ), - iEventId( EMusUiAsyncUninitialized ) - { - CActiveScheduler::Add( this ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiCallbackService::ConstructL() - { - } - - -// ----------------------------------------------------------------------------- -// Buffer a request to trigger an event. -// ----------------------------------------------------------------------------- -// -void CMusUiCallbackService::AsyncEventL( TMusUiAsyncEvent aEventId ) - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiCallbackService::AsyncEventL" ); - iEventId = aEventId; - Activate(); - MUS_LOG( "mus: [MUSUI ] <- CMusUiCallbackService::AsyncEventL" ); - } - - -// ----------------------------------------------------------------------------- -// Cancels the active request. -// ----------------------------------------------------------------------------- -// -void CMusUiCallbackService::Cancel() - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiCallbackService::Cancel" ); - CActive::Cancel(); - iStatus = NULL; - MUS_LOG( "mus: [MUSUI ] <- CMusUiCallbackService::Cancel" ); - } - -// ----------------------------------------------------------------------------- -// Check what event is currently pending. -// ----------------------------------------------------------------------------- -// -TMusUiAsyncEvent CMusUiCallbackService::CurrentEvent() const - { - if ( IsActive() ) - { - return iEventId; - } - return EMusUiAsyncUninitialized; - } - -// ----------------------------------------------------------------------------- -// From CActive. Called when a request completes. -// ----------------------------------------------------------------------------- -// -void CMusUiCallbackService::RunL() - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiCallbackService::RunL" ); - if ( iEventId ) - { - // Copy the id from member to local so the member can be cleared. - TMusUiAsyncEvent eventId = iEventId; - iEventId = EMusUiAsyncUninitialized; - // Issue the call to the observer interface. - iCallbackObserver.HandleAsyncEventL( eventId ); - MUS_LOG( "mus: [MUSUI ] <- CMusUiCallbackService::RunL returns" ); - return; - } - MUS_LOG( "mus: [MUSUI ] <- CMusUiCallbackService::RunL" ); - } - - -// ----------------------------------------------------------------------------- -// From CActive. Called when a leave occurres in RunL. -// ----------------------------------------------------------------------------- -// -TInt CMusUiCallbackService::RunError( TInt aError ) - { - MUS_LOG1( "mus: [MUSUI ] CMusUiCallbackService::RunError [%d]", - aError ); - iCallbackObserver.HandleAsyncError( aError ); - - return KErrNone; - } - - -// ----------------------------------------------------------------------------- -// From CActive. Called when a request is cancelled. -// ----------------------------------------------------------------------------- -// -void CMusUiCallbackService::DoCancel() - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiCallbackService::DoCancel" ); - MUS_LOG( "mus: [MUSUI ] <- CMusUiCallbackService::DoCancel" ); - } - - -// ----------------------------------------------------------------------------- -// Activate the object. -// ----------------------------------------------------------------------------- -// -void CMusUiCallbackService::Activate() - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiCallbackService::Activate" ); - // Call SetActive() so RunL() will be called by the active scheduler - if ( IsActive() ) - { - Cancel(); - } - SetPriority( EPriorityHigh ); - SetActive(); - iStatus = KRequestPending; - TRequestStatus* stat = &iStatus; - User::RequestComplete( stat, KErrNone ); - - MUS_LOG( "mus: [MUSUI ] <- CMusUiCallbackService::Activate" ); - } - - diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshui/src/musuiclipsharingcontroller.cpp --- a/mmsharing/mmshui/src/musuiclipsharingcontroller.cpp Thu Aug 19 09:51:39 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1230 +0,0 @@ -/* -* 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: Application's UI class. -* -*/ - - - -#include "musuiclipsharingcontroller.h" -#include "musuicallbackservice.h" -#include "musuieventobserver.h" -#include "musuisharingobserver.h" -#include "musuisendobserver.h" -#include "musuiclipsharingobserver.h" -#include "musuidialogutil.h" -#include "musengclipsession.h" -#include "mussettings.h" -#include "mussettingskeys.h" -#include "musuiresourcehandler.h" -#include "musui.hrh" -#include "muslogger.h" // debug logging -#include "musuiactivetimer.h" -#include "musuigeneralview.h" - -#include -#include -#include - -#include -#include - -// CONSTANTS -const TInt KMusTimeToCloseAfterClipEndedStandard = 60 * 1000000; // 60 seconds -const TInt KMusTimeToCloseAfterClipEndedOpVariant = 1 * 1000000; // 1 second - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -CMusUiClipSharingController* CMusUiClipSharingController::NewL( - MMusUiEventObserver& aEventObserver, - MMusUiSharingObserver& aSharingObserver, - MMusUiSendObserver& aSendObserver, - MMusUiClipSharingObserver& aClipObserver, - const TRect& aRect ) - { - CMusUiClipSharingController* self = - new( ELeave ) CMusUiClipSharingController( aEventObserver, - aSharingObserver, - aSendObserver, - aClipObserver ); - CleanupStack::PushL( self ); - self->ConstructL( aRect ); - CleanupStack::Pop( self ); - return self; - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -CMusUiClipSharingController::~CMusUiClipSharingController() - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiClipSharingController::~CMusUiClipSharingController" ); - delete iCloseTimer; - DeleteEngineSession(); - delete iFileName; - MUS_LOG( "mus: [MUSUI ] <- CMusUiClipSharingController::~CMusUiClipSharingController" ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -CMusUiClipSharingController::CMusUiClipSharingController( - MMusUiEventObserver& aEventObserver, - MMusUiSharingObserver& aSharingObserver, - MMusUiSendObserver& aSendObserver, - MMusUiClipSharingObserver& aClipObserver ) - :CMusUiSendController( aEventObserver, aSharingObserver, aSendObserver ), - iClipObserver( aClipObserver ) - { - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiClipSharingController::ConstructL( const TRect& aRect ) - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiClipSharingController::ConstructL" ); - - CMusUiSendController::ConstructL(); // Base class construction - - iRect = aRect; - iSession = CMusEngClipSession::NewL( iRect, - *this, - *this, - *this, - iSipProfileId ); - iSession->SetAudioRoutingObserver( this ); - iSession->SetVolumeChangeObserver( this ); - - if ( iSession->AudioRoutingCanBeChanged() && !iSession->IsAudioRoutingHeadset() ) - { - iSession->EnableLoudspeakerL( ELoudspeakerEnabled, ETrue ); - } - - if ( iVideoCodec && iVideoCodec->Length() > 0 ) - { - iSession->SetSupportedVideoCodecListL( *iVideoCodec ); - } - - iCallbackService->AsyncEventL( EMusUiAsyncStartMediaGallery ); - - iCloseTimer = CMusUiActiveTimer::NewL( this ); - - MUS_LOG( "mus: [MUSUI ] <- CMusUiClipSharingController::ConstructL" ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiClipSharingController::HandleAsyncEventL( TMusUiAsyncEvent aEventId ) - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiClipSharingController::HandleAsyncEventL" ); - switch ( aEventId ) - { - case EMusUiAsyncStartMediaGallery: - { - iTranscode = EFalse; - iTranscodingGoing = EFalse; - - if ( !iSession ) - { - iSession = CMusEngClipSession::NewL( iRect, - *this, - *this, - *this, - iSipProfileId ); - iSession->SetAudioRoutingObserver( this ); - } - - // Do fetching guarded. If registration completes during fetching, - // there is no need to do anything. - iFileFetchingOngoing = ETrue; - iClipObserver.RunFetchDialogL(); - iFileFetchingOngoing = EFalse; - - TRAPD( error, - iSession->SetClipL( *iFileName ) ) - MUS_LOG_TDESC( "mus: [MUSUI ] File name: ", - iFileName->Des() ) - if ( error == KErrNone) - { - if ( iSession->AudioRoutingCanBeChanged() ) - { - iSession->EnableLoudspeakerL( ELoudspeakerEnabled, ETrue ); - } - iClipEnded = EFalse; - StartInvitationL(); - } - else if ( error == KErrPermissionDenied ) - { - MusUiDialogUtil::ShowInformationDialogL( - R_MUS_VIEW_DRM_INFO_SEND_FORBID ); - DeleteEngineSession(); - delete iFileName; - iFileName = NULL; - iSession = CMusEngClipSession::NewL( iRect, - *this, - *this, - *this, - iSipProfileId ); - iSession->SetAudioRoutingObserver( this ); - if ( iSession->AudioRoutingCanBeChanged() ) - { - iSession->EnableLoudspeakerL( ELoudspeakerEnabled, ETrue ); - } - iCallbackService->AsyncEventL( EMusUiAsyncStartMediaGallery ); - } - else - { - HandleExitL(); - } - - break; - } - case EMusUiAsyncStartTranscoding: - { - // Parse Target Filename for the transcoding result - // and start transcoding: - //iSession->TranscodeL( VideoFileNameL() ); - // Show progress dialog: - //iObserver->ShowTranscodingProgressDialogL(); - iTranscodingGoing = ETrue; - break; - } - - default: - { - // Not clip specific, let the base class handle - CMusUiSendController::HandleAsyncEventL( aEventId ); - } - } - MUS_LOG( "mus: [MUSUI ] <- CMusUiClipSharingController::HandleAsyncEventL" ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiClipSharingController::DeleteEngineSession() - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiClipSharingController::DeleteEngineSession" ); - - CMusUiSendController::DeleteEngineSession(); - // Cancel transcoding - if ( iSession && iTranscodingGoing ) - { - MUS_LOG( "mus: [MUSUI ] CMusUiClipSharingController::DeleteEngineSession:\ - Canceling transcoding..." ); - DismissWaitDialog(); - TRAP_IGNORE( MusUiDialogUtil::ShowGlobalErrorDialogL( - R_MUS_VIEW_NOTE_UNABLE_TO_CONVERT ); - iSession->CancelTranscodeL() ); - } - if ( iSession && iSession->IsAudioRoutingLoudSpeaker() ) - { - iShowDialog = ETrue; - } - delete iSession; - iSession = NULL; - MUS_LOG( "mus: [MUSUI ] <- CMusUiClipSharingController::DeleteEngineSession" ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -CMusEngMceOutSession* CMusUiClipSharingController::EngineOutSession() - { - return iSession; // Clip session is CMusEngMceOutSession - } - - -// ----------------------------------------------------------------------------- -// Handles status changes specific to sending sharing types. -// Calls base class version for status changes that are not sending specific. -// ----------------------------------------------------------------------------- -// -void CMusUiClipSharingController::HandleChangedStatusL( - TMusAvailabilityStatus aStatus ) - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiClipSharingController::HandleChangedStatusL" ) - - switch( aStatus ) - { - case EMultimediaSharingAvailable: - { - MUS_LOG( "mus: [MUSUI ] EMultimediaSharingAvailable" ) - - if ( iSipRegistrationPending ) - { - iSipRegistrationPending = EFalse; - - // If fecth dialog is still open, there is no need to do anything - if ( !iFileFetchingOngoing ) - { - iSipRegistrationPending = EFalse; - // Set callback service, Call StartInvitationL when wait dialog dismissed - TRAPD( err, iSharingObserver.SetWaitDialogCallbackL( - &iWaitDialogCallback ) ); - // Dismiss pending wait note - iSharingObserver.DismissWaitDialogL(); - if ( err == KErrNotReady ) - { - StartInvitationL(); - } - } - } - break; - } - default: - { - // Not clip specific, let the base class handle - CMusUiSendController::HandleChangedStatusL( aStatus ); - break; - } - } - MUS_LOG( "mus: [MUSUI ] <- CMusUiClipSharingController::HandleChangedStatusL" ) - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiClipSharingController::InviteL( const TDesC& aRecipient ) - { - MUS_LOG_TDESC( "mus: [MUSUI ] -> CMusUiClipSharingController::InviteL:", - aRecipient ); - - // Registration must not be pending in this phase - __ASSERT_ALWAYS( !iSipRegistrationPending, - iEventObserver.HandleError( KErrNotReady ) ); - - delete iAddress; - iAddress = NULL; - iAddress = aRecipient.AllocL(); - - - TBool inviteProceeding = DoInviteL(); - if ( !inviteProceeding ) - { - MUS_LOG( "mus: [MUSUI ] <- CMusUiClipSharingController::InviteL, invite failed" ); - return; - } - if( iTranscode ) - { - MUS_LOG( "mus: [MUSUI ] Starting transcode..." ); - iTranscode = EFalse; - - // Start transcoding - iTranscodingGoing = ETrue; - - SetFileNameL( VideoFileNameL() ); - TRAPD( err, iSession->TranscodeL( *iFileName ) ); - - if ( err != KErrNone ) - { - MUS_LOG1( "mus: [MUSUI ] Transcoding failed: %d", err ); - iTranscodingGoing = EFalse; - if ( iTranscodeDueUnknownRemoteCapas ) - { - MUS_LOG( "mus: [MUSUI ] Retry invite without transcoding" ); - // Still retry the clip without transcoding as other end might support current codec. - iVideoToBeSaved = EFalse; - inviteProceeding = DoInviteL(); - } - else if ( err == KErrNotFound ) // No Video Editor Engine - { - MusUiDialogUtil::ShowGlobalErrorDialogL( - R_MUS_LIVE_SHARING_VIEW_NOTE_TRANSCODING_NOT_SUPPORTED ); - DeleteEngineSession(); - iVideoToBeSaved = EFalse; - HandleExitL(); - inviteProceeding = EFalse; - } - else - { - // Unable to convert clip, if transc. leaves. - // After note return back to the media gallery. - TranscodingFailed(); - inviteProceeding = EFalse; - } - } - else - { - // Show progress dialog: - iClipObserver.ShowTranscodingProgressDialogL(); - inviteProceeding = EFalse; - } - } - - if ( inviteProceeding ) - { - SetConnectionInitialized( ETrue ); - ShowInvitingWaitDialogL(); - } - - MUS_LOG( "mus: [MUSUI ] <- CMusUiClipSharingController::InviteL" ); - } - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -TBool CMusUiClipSharingController::DoInviteL() - { - __ASSERT_ALWAYS( iAddress, User::Leave( KErrNotReady ) ); - TRAPD( err, iSession->InviteL( *iAddress ) ); - MUS_LOG( "mus: [MUSUI ] CMusUiClipSharingController::DoInviteL: After TRAPD" ); - - // If address is in wrong format, Manual Address Entry Dialog - // is displayed - if ( err != KErrNone ) - { - DismissWaitDialog(); - MusUiDialogUtil::ShowGlobalErrorDialogL( - R_MUS_LIVE_SHARING_VIEW_NOTE_INVITE_ERROR ); - if ( ( ++iTriedInvitations < 2 ) && ( err == KErrArgument ) ) - { - MUS_LOG( "mus: [MUSUI ] CMusUiLiveSharingController::DoInviteL: iTriedInvitations < 2" ); - iManualAddressTyped = ETrue; - iResourceHandler->RequestKeypadL( ETrue ); - - // If the address has to be queried again...: - iTranscode = EFalse; - - MUS_LOG_TDESC( "mus: [MUSUI ] CMusUiClipSharingController::DoInviteL: ", - iFileName->Des() ) - - iSendObserver.ManualAddressEntryL( *iRemoteSipAddressProposal ); - } - else - { - MUS_LOG( "mus: [MUSUI ] CMusUiLiveSharingController::DoInviteL: ++iTriedInvitations > 1" ); - DeleteEngineSession(); - HandleExitL(); - } - } - return ( err == KErrNone ); - } - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiClipSharingController::HandleSliderValueChangeL( TInt aNewLevel ) - { - MUS_LOG1( "mus: [MUSUI ] -> CMusUiClipSharingController::HandleSliderValueChangeL(%d)", - aNewLevel ) - - __ASSERT_ALWAYS( !ExitOccured(), User::Leave( KErrDied ) ); - __ASSERT_ALWAYS( iConnectionEstablished, User::Leave( KErrNotReady ) ); - - iSession->SetPositionL( TTimeIntervalSeconds( aNewLevel ) ); - - MUS_LOG( "mus: [MUSUI ] <- CMusUiClipSharingController::HandleSliderValueChangeL" ) - } - - - -void CMusUiClipSharingController::OfferToolbarEventL( TInt aCommand ) - { - MUS_LOG1( "mus: [MUSUI ] -> CMusUiClipSharingController::OfferToolbarEventL [%d]", - aCommand ); - - switch ( aCommand ) - { - case EMusuiCmdToolbarPause: - { - HandleCommandL( EMusuiCmdViewPause ); - iSharingObserver.ReplaceToolbarCommand( EMusuiCmdToolbarPause, - EMusuiCmdToolbarUnPause, - ETrue ); - break; - } - case EMusuiCmdToolbarUnPause: - { - HandleCommandL( EMusuiCmdViewContinue ); - iSharingObserver.ReplaceToolbarCommand( EMusuiCmdToolbarUnPause, - EMusuiCmdToolbarPause, - ETrue ); - break; - } - case EMusuiCmdToolbarFFRev: - { - iToolbarFFRevSelected = !iToolbarFFRevSelected; - iClipObserver.SetDurationValue( iSession->DurationL().Int() ); - if ( iToolbarFFRevSelected ) - { - iWasPlayingBeforeWinding = iSession->IsPlayingL(); - PauseL(); - } - else - { - StopWindingL(); - if ( iWasPlayingBeforeWinding ) - { - PlayL(); - } - } -// iClipObserver.SetDurationVisible(); - iSharingObserver.HighlightSelectedToolbarItem( EMusuiCmdToolbarFFRev ); - break; - } - default: // Not clip specific, let the base class handle - { - CMusUiEventController::OfferToolbarEventL( aCommand ); - break; - } - } - - MUS_LOG( "mus: [MUSUI ] <- CMusUiClipSharingController::OfferToolbarEventL" ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiClipSharingController::HandleCommandL(TInt aCommand) - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiClipSharingController::HandleCommandL" ); - - __ASSERT_ALWAYS( !ExitOccured(), User::Leave( KErrDied ) ); - - switch ( aCommand ) - { - case EMusuiCmdViewPause: - { - PauseL(); - iEventObserver.ShowNaviPaneIconL( EMusUiNaviIconPause ); - break; - } - case EMusuiCmdViewContinue: - { - PlayL(); - iEventObserver.ShowNaviPaneIconL( EMusUiNaviIconPlay ); - break; - } - - case EMusuiCmdViewReplay: - { - if( !MUS_NO_TOOLBAR ) - { - if (!AknLayoutUtils::PenEnabled()) - { - iEventObserver.SetToolbarVisibility( ETrue ); - } - - if ( ClipEnded() ) - { - iEventObserver.SetToolbarVisibility( ETrue ); - // Simulate press of play in toolbar - OfferToolbarEventL( EMusuiCmdToolbarUnPause ); - } - } - break; - } - - case EMusuiCmdViewShareVideo: - { - PauseL(); - // TODO: Change to video sharing - break; - } - case EMusuiCmdViewShareImage: - { - PauseL(); - // TODO: Change to image sharing - break; - } - case EMusuiCmdViewShareLive: - { - // TODO: Change to live sharing - break; - } - - case EMusuiCmdViewAudioNormal: - { - if( !MUS_NO_TOOLBAR ) - { - if (!AknLayoutUtils::PenEnabled()) - { - iEventObserver.SetToolbarVisibility( ETrue ); - } - } - iSession->UnmuteL(); - break; - } - case EMusuiCmdViewAudioMute: - { - if (!AknLayoutUtils::PenEnabled()) - { - iEventObserver.SetToolbarVisibility( ETrue ); - } - - iSession->MuteL(); - break; - } - case EMusuiCmdViewFastForward: - { - MUS_LOG( "mus: [MUSUI ] CMusUiClipSharingController::HandleCommandL: EMusuiCmdViewFastForward" ); - if ( DoFastForwardingL( ETrue ) ) - { - iEventObserver.ShowNaviPaneIconL( EMusUiNaviIconForward ); - iClipObserver.SetPositionValueL( iSession->PositionL().Int() ); - //iClipObserver.SetDurationVisible(); - } - MUS_LOG( "mus: [MUSUI ] CMusUiClipSharingController::HandleCommandL: EMusuiCmdViewFastForward END" ); - break; - } - case EMusuiCmdViewFastReverse: - { - MUS_LOG( "mus: [MUSUI ] CMusUiClipSharingController::HandleCommandL: EMusuiCmdViewFastReverse" ); - if ( DoFastRewindingL( ETrue ) ) - { - iEventObserver.ShowNaviPaneIconL( EMusUiNaviIconRew ); - iClipObserver.SetPositionValueL( iSession->PositionL().Int() ); - //iClipObserver.SetDurationVisible(); - } - MUS_LOG( "mus: [MUSUI ] CMusUiClipSharingController::HandleCommandL: EMusuiCmdViewFastReverse END" ); - break; - } - case EMusuiCmdViewFastForwardEnd: - { - if ( DoFastForwardingL( EFalse ) ) - { - iEventObserver.ShowNaviPaneIconL( EMusUiNaviIconPause ); - PauseL(); - } - break; - } - case EMusuiCmdViewFastReverseEnd: - { - if ( DoFastRewindingL( EFalse ) ) - { - iEventObserver.ShowNaviPaneIconL( EMusUiNaviIconPause ); - PauseL(); - } - break; - } - default: - { - // Try more general handling - CMusUiEventController::HandleCommandL( aCommand ); - break; - } - } - - MUS_LOG( "mus: [MUSUI ] <- CMusUiClipSharingController::HandleCommandL" ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiClipSharingController::SetFileNameL( const TDesC& aFileName ) - { - iFileName = aFileName.AllocL(); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -TBool CMusUiClipSharingController::ClipEnded() - { - return iClipEnded; - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -TBool CMusUiClipSharingController::ClipMutedL() - { - return iSession->IsMutedL(); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -TBool CMusUiClipSharingController::ClipContainsAudioL() - { - if ( !iConnectionInitialized || !iSession ) - { - return EFalse; // We cannot be sure yet - } - - return iSession->ContainsAudioL(); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiClipSharingController::CancelTranscodingL() - { - if ( iSession && iTranscodingGoing ) - { - iTranscodingGoing = EFalse; - iSession->CancelTranscodeL(); - } - iVideoToBeSaved = EFalse; - HandleExitL(); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiClipSharingController::StopWindingL() - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiClipSharingController::StopWindingL" ); - - if ( DoFastForwardingL( EFalse ) || DoFastRewindingL( EFalse ) ) - { - iEventObserver.ShowNaviPaneIconL( EMusUiNaviIconPause ); - } - - MUS_LOG( "mus: [MUSUI ] <- CMusUiClipSharingController::StopWindingL" ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -TBool CMusUiClipSharingController::ToolbarFFRevSelected() - { - return iToolbarFFRevSelected; - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiClipSharingController::TranscodingProgressedL( TInt aPercentage ) - { - MUS_LOG1( "mus: [MUSUI ] -> CMusUiClipSharingController::TranscodingProgressedL ( %d )", aPercentage ); - if ( aPercentage < KMusOneHundredPercent ) - { - iTranscodingGoing = ETrue; - iClipObserver.UpdateClipTranscodingPercentageL( aPercentage ); - } - MUS_LOG( "mus: [MUSUI ] <- CMusUiClipSharingController::TranscodingProgressedL" ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiClipSharingController::TranscodingCompletedInitL() - { - MUS_LOG( - "mus: [MUSUI ] -> CMusUiClipSharingController::TranscodingCompletedInitL" ); - if ( iTranscodingGoing ) - { - iVideoToBeSaved = ETrue; - iTranscodingGoing = EFalse; - iClipObserver.CancelTranscodingDialogL(); - MusUiDialogUtil::ShowInformationDialogL( R_MUS_VIEW_NOTE_TRANSCODING_COMPLETE ); - } - MUS_LOG( - "mus: [MUSUI ] <- CMusUiClipSharingController::TranscodingCompletedInitL" ); - } - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiClipSharingController::TranscodingCompletedFinalizeL() - { - MUS_LOG( - "mus: [MUSUI ] -> CMusUiClipSharingController::TranscodingCompletedFinalizeL" ); - SetConnectionInitialized( ETrue ); - if ( !iTranscodingGoing ) - { - ShowInvitingWaitDialogL(); - } - MUS_LOG( - "mus: [MUSUI ] <- CMusUiClipSharingController::TranscodingCompletedFinalizeL" ); - } - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -const TDesC& CMusUiClipSharingController::FormattedDurationString( - const TTimeIntervalSeconds& aDurationSeconds, - const TTimeIntervalSeconds& aPositionSeconds ) - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiClipSharingController::FormattedDurationString" ); - _LIT( KDurationAndPositionSeparator, "/" ); - - iDurationStringBuffer.SetLength( 0 ); - TLocale locale; - _LIT( KZeroSymbol, "0" ); - - TInt durationMinutes( 0 ); - TInt durationSeconds( aDurationSeconds.Int() ); - if ( aDurationSeconds.Int() > ( KMusOneMinuteInSeconds - 1 ) ) - { - durationMinutes = (int)( aDurationSeconds.Int() / KMusOneMinuteInSeconds ); - durationSeconds = durationSeconds - ( durationMinutes * KMusOneMinuteInSeconds ); - } - - iDurationStringBuffer.AppendNum( durationMinutes ); - iDurationStringBuffer.Append( locale.TimeSeparator( KMusLocaleMinutesAndSecondsSeparator ) ); - if ( durationSeconds < KMusNumberValueTen ) - { - iDurationStringBuffer.Append( KZeroSymbol ); - } - iDurationStringBuffer.AppendNum( durationSeconds ); - iDurationStringBuffer.Append( KDurationAndPositionSeparator ); - - TInt positionMinutes( 0 ); - TInt positionSeconds( aPositionSeconds.Int() ); - if ( aPositionSeconds.Int() > ( KMusOneMinuteInSeconds - 1 ) ) - { - positionMinutes = (int)( aPositionSeconds.Int() / KMusOneMinuteInSeconds ); - positionSeconds = positionSeconds - ( positionMinutes * KMusOneMinuteInSeconds ); - } - - iDurationStringBuffer.AppendNum( positionMinutes ); - iDurationStringBuffer.Append( locale.TimeSeparator( KMusLocaleMinutesAndSecondsSeparator ) ); - if ( positionSeconds < KMusNumberValueTen ) - { - iDurationStringBuffer.Append( KZeroSymbol ); - } - iDurationStringBuffer.AppendNum( positionSeconds ); - - - MUS_LOG( "mus: [MUSUI ] <- CMusUiClipSharingController::FormattedDurationString" ); - return iDurationStringBuffer; - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiClipSharingController::EndOfClip() - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiClipSharingController::EndOfClip" ); - iClipEnded = ETrue; - - TRAP_IGNORE( iEventObserver.ShowNaviPaneIconL( EMusUiNaviIconStop ) ); - if(!MUS_NO_TOOLBAR) - { - iSharingObserver.ReplaceToolbarCommand( EMusuiCmdToolbarPause, - EMusuiCmdToolbarUnPause, - ETrue ); - } - iCloseTimer->Cancel(); - iCloseTimer->After( iOperatorSpecificFunctionality ? - KMusTimeToCloseAfterClipEndedOpVariant : - KMusTimeToCloseAfterClipEndedStandard ); - MUS_LOG( "mus: [MUSUI ] <- CMusUiClipSharingController::EndOfClip" ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiClipSharingController::TranscodingNeeded(TBool aDueUnknownRemoteCapabilities) - { - MUS_LOG1( "mus: [MUSUI ] -> CMusUiClipSharingController::TranscodingNeeded, %d", - aDueUnknownRemoteCapabilities); - iTranscode = ETrue; - iTranscodeDueUnknownRemoteCapas = aDueUnknownRemoteCapabilities; - MUS_LOG( "mus: [MUSUI ] <- CMusUiClipSharingController::TranscodingNeeded" ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiClipSharingController::TranscodingProgressed( TInt aPercentage ) - { - MUS_LOG1( "mus: [MUSUI ] -> CMusUiClipSharingController::TranscodingProgressed %d", - aPercentage ); - TRAP_IGNORE( TranscodingProgressedL( aPercentage ) ) - MUS_LOG( "mus: [MUSUI ] <- CMusUiClipSharingController::TranscodingProgressed" ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiClipSharingController::TranscodingCompletedInit() - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiClipSharingController::TranscodingCompleted" ); - TRAPD( error, TranscodingCompletedInitL() ); - if ( error != KErrNone ) - { - HandleError( error ); - } - MUS_LOG( "mus: [MUSUI ] <- CMusUiClipSharingController::TranscodingCompleted" ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiClipSharingController::TranscodingCompletedFinalize() - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiClipSharingController::TranscodingCompleted" ); - TRAPD( error, TranscodingCompletedFinalizeL() ); - if ( error != KErrNone ) - { - HandleError( error ); - } - MUS_LOG( "mus: [MUSUI ] <- CMusUiClipSharingController::TranscodingCompleted" ); - } - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiClipSharingController::TranscodingFailed() - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiClipSharingController::TranscodingFailed" ); - iTranscodingGoing = EFalse; - DismissWaitDialog(); - TRAP_IGNORE( iClipObserver.CancelTranscodingDialogL(); - MusUiDialogUtil::ShowGlobalErrorModalDialogL( - R_MUS_VIEW_NOTE_UNABLE_TO_CONVERT ) ); - DeleteEngineSession(); - delete iFileName; - iFileName = NULL; - TRAPD( error, - iCallbackService->AsyncEventL( EMusUiAsyncStartMediaGallery ) ); - if ( error != KErrNone ) - { - HandleError( error ); - } - MUS_LOG( "mus: [MUSUI ] <- CMusUiClipSharingController::TranscodingFailed" ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiClipSharingController::SessionRecipientNotFound() - { - MUS_LOG1( "mus: [MUSUI ] -> CMusUiClipSharingController::SessionRecipientNotFound [%d]", iTriedInvitations ); - - // If the address has to be queried again...: - iTranscode = EFalse; - - CMusUiSendController::SessionRecipientNotFound(); - - MUS_LOG( "mus: [MUSUI ] <- CMusUiClipSharingController::SessionRecipientNotFound" ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiClipSharingController::SessionTerminated() - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiClipSharingController::SessionTerminated" ); - DismissWaitDialog(); - if ( iTranscodingGoing ) - { - TRAP_IGNORE( MusUiDialogUtil::ShowGlobalErrorDialogL( - R_MUS_VIEW_NOTE_UNABLE_TO_CONVERT ) ); - } - - TRAP_IGNORE( iCallbackService->AsyncEventL( EMusUiAsyncHandleExit ) ); - - MUS_LOG( "mus: [MUSUI ] <- CMusUiClipSharingController::SessionTerminated" ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiClipSharingController::SessionConnectionLost() - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiClipSharingController::SessionConnectionLost" ); - DismissWaitDialog(); - TRAP_IGNORE( MusUiDialogUtil::ShowGlobalErrorDialogL( - R_MUS_LIVE_SHARING_VIEW_NOTE_CONNECTION_LOST ) ); - - TRAP_IGNORE( iCallbackService->AsyncEventL( EMusUiAsyncHandleExit ) ); - - MUS_LOG( "mus: [MUSUI ] <- CMusUiClipSharingController::SessionConnectionLost" ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiClipSharingController::SessionFailed() - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiClipSharingController::SessionFailed" ); - DismissWaitDialog(); - if ( iTranscodingGoing ) - { - TRAP_IGNORE( MusUiDialogUtil::ShowGlobalErrorDialogL( - R_MUS_VIEW_NOTE_UNABLE_TO_CONVERT ) ); - } - - TRAP_IGNORE( iCallbackService->AsyncEventL( EMusUiAsyncHandleExit ) ); - - MUS_LOG( "mus: [MUSUI ] <- CMusUiClipSharingController::SessionFailed" ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiClipSharingController::StreamIdle() - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiClipSharingController::StreamIdle" ); - iClipObserver.InvalidVideoFrame( ETrue ); - TRAPD( error, StreamIdleL() ); - if ( error != KErrNone ) - { - iEventObserver.HandleError( error ); - } - MUS_LOG( "mus: [MUSUI ] <- CMusUiClipSharingController::StreamIdle" ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiClipSharingController::StreamStreaming() - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiClipSharingController::StreamStreaming" ); - iClipObserver.InvalidVideoFrame( EFalse ); - TRAPD( error, StreamStreamingL() ); - if ( error != KErrNone ) - { - iEventObserver.HandleError( error ); - } - MUS_LOG( "mus: [MUSUI ] <- CMusUiClipSharingController::StreamStreaming" ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiClipSharingController::SessionTimeChanged( - const TTimeIntervalSeconds& aSeconds ) - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiClipSharingController::SessionTimeChanged" ); - TRAP_IGNORE( SessionTimeChangedL( aSeconds ) ); - MUS_LOG( "mus: [MUSUI ] <- CMusUiClipSharingController::SessionTimeChanged" ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiClipSharingController::InactivityTimeout() - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiClipSharingController::InactivityTimeout" ); - DismissWaitDialog(); - TRAP_IGNORE( MusUiDialogUtil::ShowGlobalErrorDialogL( - R_MUS_LIVE_SHARING_VIEW_NOTE_SERVICE_N_A ) ); - - TRAP_IGNORE( iCallbackService->AsyncEventL( EMusUiAsyncHandleExit ) ); - - MUS_LOG( "mus: [MUSUI ] <- CMusUiClipSharingController::InactivityTimeout" ); - } - - -// ----------------------------------------------------------------------------- -// Called when predefined time elapsed -// after the clip had reached the end -// ----------------------------------------------------------------------------- -// -void CMusUiClipSharingController::TimerComplete( CMusUiActiveTimer* /*aTimer*/ ) - { - MUS_LOG( "mus: [MUSUI ] Close time elapsed from clip ending => \ - closing session" ); - TRAP_IGNORE( HandleExitL() ) - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiClipSharingController::StreamStreamingL() - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiClipSharingController::StreamStreamingL" ); - - if ( ConnectionEstablished() ) - { - iClipEnded = EFalse; - iCloseTimer->Cancel(); - iEventObserver.ShowNaviPaneIconL( EMusUiNaviIconPlay ); - } - - MUS_LOG( "mus: [MUSUI ] <- CMusUiClipSharingController::StreamStreamingL" ); - } - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiClipSharingController::StreamIdleL() - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiClipSharingController::StreamIdleL" ); - - if ( ConnectionEstablished() ) - { - iEventObserver.ShowNaviPaneIconL( EMusUiNaviIconPause ); - } - - MUS_LOG( "mus: [MUSUI ] <- CMusUiClipSharingController::StreamIdleL" ); - } - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiClipSharingController::SessionTimeChangedL( const TTimeIntervalSeconds& aSeconds ) - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiClipSharingController::SessionTimeChangedL" ); - if ( aSeconds.Int() > -1 ) - { - TTimeIntervalSeconds clipDuration = iSession->DurationL(); - TTimeIntervalSeconds clipPosition = iSession->PositionL(); - - iSharingObserver.UpdateSessionTime( SessionTimeFormatted( aSeconds ) ); - iClipObserver.UpdateClipPositionL( clipPosition.Int(), - FormattedDurationString( - clipPosition, - clipDuration ) ); - } - MUS_LOG( "mus: [MUSUI ] <- CMusUiClipSharingController::SessionTimeChangedL" ); - } - - -// ----------------------------------------------------------------------------- -// CMusUiClipSharingController::SessionEstablished() -// ----------------------------------------------------------------------------- -// -void CMusUiClipSharingController::SessionEstablished() - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiClipSharingController::SessionEstablished" ); - - TRAPD( error, iResourceHandler->RequestVideoPlayerL( ETrue ) ); - if ( error != KErrNone ) - { - MUS_LOG1( "mus: [MUSUI ] RequestVideoPlayerL leave code: %d", error ) - } - - // Duration setting visible - TRAP( error, iClipObserver.SetDurationValue( iSession->DurationL().Int() ) ) - if ( error != KErrNone ) - { - HandleError( error ); - } - iClipObserver.SetDurationVisible(); - - // General handling - CMusUiSendController::SessionEstablished(); // Base class handling - - MUS_LOG( "mus: [MUSUI ] <- CMusUiClipSharingController::SessionEstablished" ); - } - - -// ----------------------------------------------------------------------------- -// CMusUiClipSharingController::DoFastForwardingL() -// ----------------------------------------------------------------------------- -// -TBool CMusUiClipSharingController::DoFastForwardingL( TBool aUseWinding ) - { - if( iFastForward ^ aUseWinding ) - { - iSession->FastForwardL( aUseWinding ); - iFastForward = aUseWinding; - return ETrue; - } - return EFalse; - } - - -// ----------------------------------------------------------------------------- -// CMusUiClipSharingController::DoFastRewindingL() -// ----------------------------------------------------------------------------- -// -TBool CMusUiClipSharingController::DoFastRewindingL( TBool aUseWinding ) - { - if( iFastRewind ^ aUseWinding ) - { - iSession->FastRewindL( aUseWinding ); - iFastRewind = aUseWinding; - return ETrue; - } - return EFalse; - } - - -// ----------------------------------------------------------------------------- -// CMusUiClipSharingController::RewindFromEndL() -// ----------------------------------------------------------------------------- -// -void CMusUiClipSharingController::RewindFromEndL() - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiClipSharingController::RewindFromEndL" ); - PauseL(); - iEventObserver.ShowNaviPaneIconL( EMusUiNaviIconPause ); - iSharingObserver.ReplaceToolbarCommand( EMusuiCmdToolbarPause, - EMusuiCmdToolbarUnPause, - ETrue ); - MUS_LOG( "mus: [MUSUI ] <- CMusUiClipSharingController::RewindFromEndL" ); - } -// End of file - diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshui/src/musuiclipsharingview.cpp --- a/mmsharing/mmshui/src/musuiclipsharingview.cpp Thu Aug 19 09:51:39 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,677 +0,0 @@ -/* -* 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: The MUS application's UI class. -* -*/ - - - -#include "musuiclipsharingview.h" -#include "musuiclipsharingviewcontainer.h" -#include "musuibackgroundviewcontainer.h" -#include "musuiclipsharingcontroller.h" -#include "musuiactivitymanger.h" -#include "musuiappui.h" -#include "musuistatuspanehandler.h" -#include "musui.hrh" -#include "musuidefinitions.h" -#include "muslogger.h" // debug logging -#include -#include -#include "musuidialogutil.h" - -#include -#include -#include -#include -#include - - -const TInt KMusUiContainerHeight = 50; -const TInt KDefaultResolutionHeight = 640; - -// ----------------------------------------------------------------------------- -// EPOC two-phased constructor -// ----------------------------------------------------------------------------- -// -void CMusUiClipSharingView::ConstructL() - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiClipSharingView::ConstructL" ); - - CMusUiSendView::ConstructL(); - - Toolbar()->SetToolbarObserver( this ); - Toolbar()->UpdateBackground(); - - MUS_LOG( "mus: [MUSUI ] <- CMusUiClipSharingView::ConstructL" ); - } - - -// ----------------------------------------------------------------------------- -// Destructor -// ----------------------------------------------------------------------------- -// -CMusUiClipSharingView::~CMusUiClipSharingView() - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiClipSharingView::~CMusUiClipSharingView" ); - if ( iContainer ) - { - AppUi()->RemoveFromViewStack( *this, iContainer ); - } - delete iContainer; - - delete iController; - - MUS_LOG( "mus: [MUSUI ] <- CMusUiClipSharingView::~CMusUiClipSharingView" ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -TUid CMusUiClipSharingView::Id() const - { - return KMusUidClipSharingView; - } - -// ----------------------------------------------------------------------------- -// From MEikMenuObserver, Called by framework before constructing menupane -// ----------------------------------------------------------------------------- -// -void CMusUiClipSharingView::DynInitMenuPaneL( TInt aResourceId, - CEikMenuPane* aMenuPane ) - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiClipSharingView::DynInitMenuPaneL" ); - - - // Base class initiated initialization first - CMusUiGeneralView::DynInitMenuPaneL( aResourceId, aMenuPane ); - - if(! MUS_NO_TOOLBAR ) - { - SetInitialFocusedItemL(); - } - - if ( aResourceId == R_MUSUI_VIEW_MENU ) - { - - // Delete items not related to clip sharing: - aMenuPane->DeleteMenuItem( EMusuiCmdRecord ); - aMenuPane->DeleteMenuItem( EMusuiCmdStopRecording ); - - aMenuPane->DeleteMenuItem( EMusuiCmdToolbarZoom ); - aMenuPane->DeleteMenuItem( EMusuiCmdToolbarBrightness ); - aMenuPane->DeleteMenuItem( EMusuiCmdViewZoom ); - aMenuPane->DeleteMenuItem( EMusuiCmdViewBrightness ); - aMenuPane->DeleteMenuItem( EMusuiCmdViewFullScreen ); - - // Delete EMusuiCmdViewAudioNormal or EMusuiCmdViewAudioMute - // depending on the audio state of the clip: - if ( iController->ClipContainsAudioL() ) - { - aMenuPane->DeleteMenuItem( iController->ClipMutedL() ? - EMusuiCmdViewAudioMute : - EMusuiCmdViewAudioNormal ); - } - else - { - aMenuPane->DeleteMenuItem( EMusuiCmdViewAudioMute ); - aMenuPane->DeleteMenuItem( EMusuiCmdViewAudioNormal ); - } - - // Delete "Replay" item, if the end of the clip not reached: - if ( !iController->ClipEnded() ) - { - aMenuPane->DeleteMenuItem( EMusuiCmdViewReplay ); - } - - } - MUS_LOG( "mus: [MUSUI ] <- CMusUiClipSharingView::DynInitMenuPaneL" ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiClipSharingView::HandleToolbarCommandL( TInt aCommand ) - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiClipSharingView::HandleToolbarCommandL" ); - - __ASSERT_ALWAYS( iController, User::Leave( KErrNotReady ) ); - - switch ( aCommand ) - { - case EKeyLeftArrow: - { - HandleCommandL( - iController->ToolbarVolumeSelected() ? EMusuiCmdViewVolumeDown : - iController->ToolbarFFRevSelected() ? EMusuiCmdViewFastReverse : - EMusUiCmdToolbarLastIndex ); - break; - } - case EKeyRightArrow: - { - HandleCommandL( - iController->ToolbarVolumeSelected() ? EMusuiCmdViewVolumeUp : - iController->ToolbarFFRevSelected() ? EMusuiCmdViewFastForward : - EMusUiCmdToolbarLastIndex ); - break; - } - case EKeyUpArrow: - { - HandleCommandL( - iController->ToolbarVolumeSelected() ? EMusuiCmdViewVolumeUp : - iController->ToolbarFFRevSelected() ? EMusuiCmdViewFastForward : - EMusUiCmdToolbarLastIndex ); - break; - } - case EKeyDownArrow: - { - HandleCommandL( - iController->ToolbarVolumeSelected() ? EMusuiCmdViewVolumeDown : - iController->ToolbarFFRevSelected() ? EMusuiCmdViewFastReverse : - EMusUiCmdToolbarLastIndex ); - break; - } - case EMusuiCmdViewVolumeDown: - { - HandleCommandL( EMusuiCmdViewVolumeDown ); - break; - } - case EMusuiCmdViewVolumeUp: - { - HandleCommandL( EMusuiCmdViewVolumeUp ); - break; - } - default: - { - break; - } - } - MUS_LOG( "mus: [MUSUI ] <- CMusUiClipSharingView::HandleToolbarCommandL" ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiClipSharingView::HandleKeyUpEvent( TInt /*aKeyCode*/ ) - { - TRAP_IGNORE( iController->StopWindingL() ) - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiClipSharingView::SetInitialFocusedItemL() - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiClipSharingView::SetInitialFocusedItemL" ); - - __ASSERT_ALWAYS( iController, User::Leave( KErrNotReady ) ); - - if ( iOperatorSpecificFunctionality && !AknLayoutUtils::PenEnabled() ) - { - MUS_LOG( "Focus changed in OPERATOR mode !!!!!!!!!!!!!" ); - - if ( !( iController->DeviceHasDedicatedVolumeKeys() ) ) - { - Toolbar()->SetFocusedItemL( EMusuiCmdToolbarVolume ); - } - else - { - - Toolbar()->SetFocusedItemL( EventControllerL().IsMicMutedL() ? - EMusuiCmdToolbarUnmute : - EMusuiCmdToolbarMute ); - } - - } - - MUS_LOG( "mus: [MUSUI ] <- CMusUiClipSharingView::SetInitialFocusedItemL" ); - } - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiClipSharingView::DynInitToolbarL( TInt aResourceId, - CAknToolbar* aToolbar ) - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiClipSharingView::DynInitToolbarL" ); - - // Items to be removed in Clip Sharing View: - - - if (!AknLayoutUtils::PenEnabled())//(aResourceId == R_MUS_TOOLBAR_NONTOUCH)// - { - if ( iController->DeviceHasDedicatedVolumeKeys() ) - { - aToolbar->RemoveItem( EMusuiCmdToolbarVolume ); - } - else - { - aToolbar->SetFocusedItemL( EMusuiCmdToolbarVolume ); - } - - aToolbar->RemoveItem( EMusuiCmdToolbarZoom ); - aToolbar->RemoveItem( EMusuiCmdToolbarBrightness ); - } - - Toolbar()->RemoveItem( EMusuiCmdToolbarPauseLive ); - Toolbar()->RemoveItem( EMusuiCmdToolbarUnPauseLive ); - Toolbar()->RemoveItem( EMusuiCmdToolbarFullScreen ); - - - if ( iOperatorSpecificFunctionality ) - { - // Remove pause/unpause functionality in operator variant case - Toolbar()->RemoveItem( EMusuiCmdToolbarPause ); - Toolbar()->RemoveItem( EMusuiCmdToolbarUnPause ); - - if ( aToolbar->FocusedItem() == KErrNotFound && - !AknLayoutUtils::PenEnabled() ) - { - aToolbar->SetFocusedItemL( EventControllerL().IsMicMutedL() ? - EMusuiCmdToolbarUnmute : - EMusuiCmdToolbarMute ); - } - - } - else - { - // Toggled items to be hidden: - Toolbar()->HideItem( iPauseSelected ? - EMusuiCmdToolbarPause : - EMusuiCmdToolbarUnPause, - ETrue, - ETrue ); - if ( aToolbar->FocusedItem() == KErrNotFound && - !AknLayoutUtils::PenEnabled() ) - { - aToolbar->SetFocusedItemL( EMusuiCmdToolbarPause ); - } - Toolbar()->RemoveItem( EMusuiCmdToolbarBlank ); - } - - // Last generic base class functionality - CMusUiGeneralView::DynInitToolbarL( aResourceId, aToolbar ); - - MUS_LOG( "mus: [MUSUI ] <- CMusUiClipSharingView::DynInitToolbarL" ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiClipSharingView::RunFetchDialogL() - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiClipSharingView::RunFetchDialogL" ); - iContainer->RunFetchDialogL(); - if ( iContainer->FileSelected() ) - { - iController->SetFileNameL( iContainer->FetchedFileName() ); - RefreshView(); - } - else - { - if ( SendController() && SendController()->IsAudioRoutingLoudSpeaker() ) - { - MusUiDialogUtil::ShowGlobalInformationDialogL( - R_MUS_NOTE_HF_DEACTIVATED ); - } - MusAppUi()->HandleExit(); - } - MUS_LOG( "mus: [MUSUI ] <- CMusUiClipSharingView::RunFetchDialogL" ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiClipSharingView::ShowTranscodingProgressDialogL() - { - iContainer->ShowTranscodingProgressDialogL(); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiClipSharingView::UpdateClipTranscodingPercentageL( TInt aPercetage ) - { - iContainer->UpdateClipTranscodingPercentageL( aPercetage ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiClipSharingView::CancelTranscodingDialogL() - { - iContainer->CancelTranscodingL(); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiClipSharingView::UpdateClipPositionL( - TInt aPositionInSeconds, - const TDesC& aFormattedPosition ) - { - MUS_LOG_TDESC( "mus: [MUSUI ] -> CMusUiClipSharingView::UpdateClipPositionL: ", - aFormattedPosition ); - - MusAppUi()->MusStatusPane()->SetRightLabelL( aFormattedPosition ); - iContainer->SetPositionValueL( aPositionInSeconds ); - - MUS_LOG( "mus: [MUSUI ] <- CMusUiClipSharingView::UpdateClipPositionL" ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiClipSharingView::SetDurationValue( TInt aDurationValue ) - { - iContainer->SetDurationValue( aDurationValue ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiClipSharingView::SetPositionValueL( TInt aDurationValue ) - { - iContainer->SetPositionValueL( aDurationValue ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiClipSharingView::SetDurationVisible() - { - MUS_LOG1( "mus: [MUSUI ] -> CMusUiLiveSharingView::SetDurationVisible: %d", - iToolbarItemSelected ); - if ( !iToolbarItemSelected ) - { - iContainer->SetDurationIndicatorVisible( ETrue ); - } - else - { - iContainer->SetDurationIndicatorVisible( EFalse ); - } - MUS_LOG( "mus: [MUSUI ] <- CMusUiLiveSharingView::SetDurationVisible" ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiClipSharingView::ReplaceToolbarCommand( TInt aOldCommand, - TInt aNewCommand, - TBool aSetNewCommandFocused ) - { - MUS_LOG1( "mus: [MUSUI ] -> CMusUiClipSharingView::ReplaceToolbarCommand: %d", - aOldCommand ); - switch ( aOldCommand ) - { - case EMusuiCmdToolbarPause: - { - iPauseSelected = ETrue; - break; - } - case EMusuiCmdToolbarUnPause: - { - iPauseSelected = EFalse; - break; - } - default: - { - break; - } - - } - - // Call base class version for generic part - - CMusUiGeneralView::ReplaceToolbarCommand( aOldCommand, - aNewCommand, - aSetNewCommandFocused ); - - MUS_LOG1( "mus: [MUSUI ] <- CMusUiClipSharingView::ReplaceToolbarCommand: %d", - aOldCommand ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiClipSharingView::RefreshView() - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiClipSharingView::RefreshView" ); - - RefreshBackgroundContainer(); - - if ( iContainer ) - { - TInt height = MusAppUi()->ApplicationRect().Height(); - MUS_LOG1( "mus: [MUSUI ] -> application rect height: %d", height ); - TInt containerHeight = (KMusUiContainerHeight * height) / KDefaultResolutionHeight; - - MUS_LOG1( "mus: [MUSUI ] -> container rect height: %d", containerHeight ); - TRect containerRect( - ClientRect().iTl.iX, - ClientRect().iBr.iY - ToolbarPlaceHolderHeight() - - containerHeight,//KMusUiContainerHeight, - ClientRect().iBr.iX, - ClientRect().iBr.iY - ToolbarPlaceHolderHeight() ); - - if (!AknLayoutUtils::PenEnabled()) - { - containerRect = TRect( - ClientRect().iTl.iX, - ClientRect().iTl.iY, - ClientRect().iBr.iX, - ClientRect().iTl.iY + containerHeight ); - } - iContainer->SetRect( containerRect ); - - if ( iController ) - { - - TRect videoRect( ClientRect().iTl.iX, - ClientRect().iTl.iY, - ClientRect().iBr.iX, - ClientRect().iBr.iY - ToolbarPlaceHolderHeight() - - iContainer->Size().iHeight ); - - if (!AknLayoutUtils::PenEnabled()) - { - TInt dy = iContainer->Size().iHeight; - videoRect.Move(0, dy); - } - iController->SetRect( videoRect ); - - } - } - - MUS_LOG( "mus: [MUSUI ] <- CMusUiClipSharingView::RefreshView" ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiClipSharingView::CancelTranscodingL() - { - if ( iController ) - { - iController->CancelTranscodingL(); - } - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -CMusUiSendController* CMusUiClipSharingView::SendController() const - { - return iController; - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -CMusUiSendViewContainer* CMusUiClipSharingView::SendContainer() const - { - return iContainer; - } - - -// ----------------------------------------------------------------------------- -// From CAknView, Gets called from framework when activating this view -// ----------------------------------------------------------------------------- -// -void CMusUiClipSharingView::DoActivateL( const TVwsViewId& aPrevViewId, - TUid aCustomMessageId, - const TDesC8& aCustomMessage ) - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiClipSharingView::DoActivateL" ); - - // Base class activation first - CMusUiSendView::DoActivateL( aPrevViewId, - aCustomMessageId, - aCustomMessage ); - - TInt height = MusAppUi()->ApplicationRect().Height(); - MUS_LOG1( "mus: [MUSUI ] -> application rect height: %d", height ); - TInt containerHeight = (KMusUiContainerHeight * height) / KDefaultResolutionHeight; - - MUS_LOG1( "mus: [MUSUI ] -> container rect height: %d", containerHeight ); - TRect containerRect( - ClientRect().iTl.iX, - ClientRect().iBr.iY - ToolbarPlaceHolderHeight() - - containerHeight,//KMusUiContainerHeight, - ClientRect().iBr.iX, - ClientRect().iBr.iY - ToolbarPlaceHolderHeight() ); - - if (!AknLayoutUtils::PenEnabled()) - { - containerRect = TRect( - ClientRect().iTl.iX, - ClientRect().iTl.iY, - ClientRect().iBr.iX, - ClientRect().iTl.iY + containerHeight ); - } - - if ( !iContainer ) - { - MUS_LOG( "mus: [MUSUI ] CMusUiClipSharingView::DoActivateL: !iContainer" ); - iContainer = new ( ELeave ) CMusUiClipSharingViewContainer(); - iContainer->SetMopParent( this ); - iContainer->ConstructL( this, containerRect ); - AppUi()->AddToViewStackL( *this, iContainer ); - } - - /* Increase the ordinal position of background container - * So that other control will be drawn first. - */ - UpdateBackgroundOrdinalPosition( ETrue ); - - TRect videoRect( ClientRect().iTl.iX, - ClientRect().iTl.iY, - ClientRect().iBr.iX, - ClientRect().iBr.iY - ToolbarPlaceHolderHeight() - - iContainer->Size().iHeight ); - - if (!AknLayoutUtils::PenEnabled()) - { - TInt dy = iContainer->Size().iHeight; - videoRect.Move(0, dy); - } - if ( !iController ) - { - MUS_LOG( "mus: [MUSUI ] CMusUiClipSharingView::DoActivateL: !iController" ); - iController = CMusUiClipSharingController::NewL( *MusAppUi(), - *this, - *this, - *this, - videoRect ); - } - - iContainer->SetController( iController ); - - MUS_LOG( "mus: [MUSUI ] <- CMusUiClipSharingView::DoActivateL" ); - } - - -// ----------------------------------------------------------------------------- -// From AknView, Gets called from framework when deactivating this view -// ----------------------------------------------------------------------------- -// -void CMusUiClipSharingView::DoDeactivate() - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiClipSharingView::DoDeactivate" ); - - CMusUiSendView::DoDeactivate(); // Base class deactivation first - - if ( iContainer ) - { - AppUi()->RemoveFromViewStack( *this, iContainer ); - delete iContainer; - iContainer = NULL; - } - - MUS_LOG( "mus: [MUSUI ] <- CMusUiClipSharingView::DoDeactivate" ); - } - -// ----------------------------------------------------------------------------- -// When Mmc is removed, dimmed the pause icon on toolbar -// ----------------------------------------------------------------------------- -// -void CMusUiClipSharingView::InvalidVideoFrame( TBool aInvalid ) - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiClipSharingView::InvalidVideoFrame" ); - Toolbar()->SetItemDimmed( iPauseSelected ? - EMusuiCmdToolbarUnPause : - EMusuiCmdToolbarPause, - aInvalid ? - ETrue : - EFalse, - ETrue ); - MUS_LOG( "mus: [MUSUI ] <- CMusUiClipSharingView::InvalidVideoFrame" ); - } - -// end of file diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshui/src/musuiclipsharingviewcontainer.cpp --- a/mmsharing/mmshui/src/musuiclipsharingviewcontainer.cpp Thu Aug 19 09:51:39 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,428 +0,0 @@ -/* -* 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: The MUS application's UI class. -* -*/ - - -#include "musuidefinitions.h" -#include "musuiclipsharingviewcontainer.h" -#include "musuieventcontroller.h" -#include "musuilevelindicator.h" -#include "musuiclipsharingview.h" -#include "musuiappui.h" -#include "musuidialogutil.h" -#include "musui.hrh" -#include "muslogger.h" // debug logging -#include "mussettings.h" -#include - - -#include -#include -#include // CEikProgressInfo -#include -#include -#include - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiClipSharingViewContainer::ConstructL( CMusUiGeneralView* aView, - const TRect& aRect ) - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiClipSharingViewContainer::ConstructL" ); - - CMusUiSendViewContainer::ConstructL( aView, - aRect, - EAknOrientationHorizontal, - ETrue, - EFalse ); - // check if operator specific functionality is needed - iOperatorSpecificFunctionality = - ( MultimediaSharingSettings::OperatorVariantSettingL() == - MusSettingsKeys::EOperatorSpecific ); - - MUS_LOG( "mus: [MUSUI ] <- CMusUiClipSharingViewContainer::ConstructL" ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -CMusUiClipSharingViewContainer::~CMusUiClipSharingViewContainer() - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiClipSharingViewContainer::~CMusUiClipSharingViewContainer" ); - - delete iFileName; - - TRAP_IGNORE( CancelTranscodingL() ); - - if ( iTranscodingDialog ) - { - TRAP_IGNORE( iTranscodingDialog->ProcessFinishedL() ); - } - - MUS_LOG( "mus: [MUSUI ] <- CMusUiClipSharingViewContainer::~CMusUiClipSharingViewContainer" ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiClipSharingViewContainer::ShowTranscodingProgressDialogL() - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiClipSharingViewContainer::ShowTranscodingProgressDialogL" ); - iTranscodingOngoing = ETrue; - HBufC* transcodText; - iTranscodingDialog = - new ( ELeave ) CAknProgressDialog( - ( reinterpret_cast( &iTranscodingDialog ) ) ); - - iTranscodingDialog->SetCallback( this ); - transcodText = iEikonEnv->AllocReadResourceLC( - R_MUS_PROGRESS_NOTE_CONVERTING_CLIP ); - iTranscodingDialog->SetCurrentLabelL( EAknCtNote, *transcodText ); - CleanupStack::PopAndDestroy( transcodText ); - iTranscodingDialog->ExecuteLD( R_MUS_VIEW_TRANSCODING_WAIT_NOTE ); - MUS_LOG( "mus: [MUSUI ] <- CMusUiClipSharingViewContainer::ShowTranscodingProgressDialogL" ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiClipSharingViewContainer::UpdateClipTranscodingPercentageL( - TInt aPercentage ) - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiClipSharingViewContainer::UpdateClipTranscodingPercentageL" ); - if ( iTranscodingDialog ) - { - if ( aPercentage < KMusOneHundredPercent ) - { - iTranscodingProgress = iTranscodingDialog->GetProgressInfoL(); - iTranscodingProgress->SetFinalValue( KMusOneHundredPercent ); - if ( iTranscodingProgress ) - { - iTranscodingProgress->IncrementAndDraw( - aPercentage - iTranscodingProgress->CurrentValue() ); - } - } - else - { - iTranscodingOngoing = EFalse; - iTranscodingDialog->ProcessFinishedL(); - iTranscodingDialog = NULL; - } - } - MUS_LOG( "mus: [MUSUI ] <- CMusUiClipSharingViewContainer::UpdateClipTranscodingPercentageL" ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiClipSharingViewContainer::CancelTranscodingL() - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiClipSharingViewContainer::CancelTranscodingL" ); - if ( iTranscodingOngoing ) - { - iTranscodingOngoing = EFalse; - MUS_LOG( "mus: [MUSUI ] CMusUiClipSharingViewContainer::CancelTranscodingL: iTranscodingOngoing" ); - if ( iTranscodingDialog ) - { - MUS_LOG( "mus: [MUSUI ] CMusUiClipSharingViewContainer::CancelTranscodingL: iTranscodingDialog" ); - iTranscodingDialog->ProcessFinishedL(); - iTranscodingDialog = NULL; - MUS_LOG( "mus: [MUSUI ] CMusUiClipSharingViewContainer::CancelTranscodingL: ProcessFinishedL()" ); - } - } - MUS_LOG( "mus: [MUSUI ] <- CMusUiClipSharingViewContainer::CancelTranscodingL" ); - } - - -// ----------------------------------------------------------------------------- -// Runs the Media Gallery Fetch dialog. -// ----------------------------------------------------------------------------- -// -void CMusUiClipSharingViewContainer::RunFetchDialogL() - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiClipSharingViewContainer::RunFetchDialogL" ); - - // Create array of descriptors for the selected files - CDesCArrayFlat* fileArray = new ( ELeave ) CDesCArrayFlat( KMusDefaultArrayGranularity ); - CleanupStack::PushL( fileArray ); - - // Open the dialog. - TBool ret = MGFetch::RunL( - *fileArray, // When dialog is closed, fileArray contains selected files - EVideoFile, // Displays only media files of type aMediaType - EFalse, // Not used in S60 2.0 ( single or multiple file selection ) - this // Pointer to class implementing MMGFetchVerifier; - // when user has selected file( s ), - // MMGFetchVerifier::VerifySelectionL is called. - ); - - if ( ret ) - { - iFileSelected = ETrue; - iFileName = fileArray->MdcaPoint( 0 ).AllocL(); - } - else - { - // The user has not selected any file - iFileSelected = EFalse; - } - - CleanupStack::PopAndDestroy( fileArray ); - - MUS_LOG( "mus: [MUSUI ] <- CMusUiClipSharingViewContainer::RunFetchDialogL" ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -const TDesC& CMusUiClipSharingViewContainer::FetchedFileName() - { - MUS_LOG( "mus: [MUSUI ] CMusUiClipSharingViewContainer::FetchedFileName" ); - return *iFileName; - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -TBool CMusUiClipSharingViewContainer::FileSelected() - { - MUS_LOG( "mus: [MUSUI ] CMusUiClipSharingViewContainer::FileSelected" ); - return iFileSelected; - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiClipSharingViewContainer::SetDurationValue( TInt aDurationValue ) - { - const TInt KMinLevel = 0; - iIndicator->SetRange( KMinLevel, aDurationValue, EFalse ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiClipSharingViewContainer::SetPositionValueL( TInt aPositionValue ) - { - iIndicator->SetLevelL( EMusUiIndicatorTypeDuration, - aPositionValue, - EFalse /*never use timer*/ ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiClipSharingViewContainer::SetDurationIndicatorVisible( TBool aVisible ) - { - iIndicator->SetIndicatorType(EMusUiIndicatorTypeDuration); - iIndicator->MakeVisible( aVisible ); - } - - -// ----------------------------------------------------------------------------- -// Verifies the current user selection. -// ----------------------------------------------------------------------------- -// -TBool CMusUiClipSharingViewContainer::VerifySelectionL( const MDesCArray* - aSelectedFiles ) - { - MUS_LOG( "mus: [MUSUI ] CMusUiClipSharingViewContainer::\ - VerifySelectionL" ); - return ( aSelectedFiles->MdcaCount() > 0 ) ? ETrue : EFalse; - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiClipSharingViewContainer::DialogDismissedL( TInt /*aButtonId*/ ) - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiClipSharingViewContainer::DialogDismissedL" ); - if ( iTranscodingOngoing ) - { - (static_cast (MusUiView()))->CancelTranscodingL(); - iTranscodingOngoing = EFalse; - } - MUS_LOG( "mus: [MUSUI ] <- CMusUiClipSharingViewContainer::DialogDismissedL" ); - } - - -// ----------------------------------------------------------------------------- -// Called by framework when to retrieve the no. of controls. -// ----------------------------------------------------------------------------- -// -TInt CMusUiClipSharingViewContainer::CountComponentControls() const - { - return 1; // return nbr of controls inside this container - } - - -// ----------------------------------------------------------------------------- -// Called by framework to retrieve the control specified by index. -// ----------------------------------------------------------------------------- -// -CCoeControl* CMusUiClipSharingViewContainer::ComponentControl( TInt aIndex ) const - { - CCoeControl* control = NULL; - - switch ( aIndex ) - { - case 0: - control = iIndicator; - break; - default: - break; - } - return control; - } - -// ----------------------------------------------------------------------------- -// Called by framework to redraw the screen area. -// ----------------------------------------------------------------------------- -// -void CMusUiClipSharingViewContainer::Draw( const TRect& aRect ) const - { - CWindowGc& gc = SystemGc(); - - MAknsSkinInstance* skin = AknsUtils::SkinInstance(); - MAknsControlContext* cc = AknsDrawUtils::ControlContext( this ); - if(!AknsDrawUtils::Background( skin, cc,this,gc,aRect,KAknsDrawParamDefault )) - { - MUS_LOG( "mus: [MUSUI ] Skin not valid or not found" ); - gc.SetBrushColor( iEikonEnv->ControlColor( EColorWindowBackground, *this ) ); - gc.SetBrushStyle( CGraphicsContext::ESolidBrush ); - gc.Clear( aRect ); - } - } - -// ----------------------------------------------------------------------------- -// Called by framework to act on key events if required. -// ----------------------------------------------------------------------------- -// -TKeyResponse CMusUiClipSharingViewContainer::OfferKeyEventL( - const TKeyEvent& aKeyEvent, - TEventCode aType ) - { - MUS_LOG1( "mus: [MUSUI ] -> CMusUiClipSharingViewContainer::OfferKeyEventL: %d", - aKeyEvent.iCode ); - MUS_LOG1( "mus: [MUSUI ] -> CMusUiClipSharingViewContainer::OfferKeyEventL: %d", - aKeyEvent.iScanCode ); - - TKeyResponse ret( EKeyWasNotConsumed ); - - /** - * special keys have scancode - */ - switch( aKeyEvent.iScanCode ) - { - // Fast Forward: - case EStdKeyUpArrow: // EKeyUpArrow: - { - if ( !MUS_NO_TOOLBAR ) - { - if( aType == EEventKeyDown ) - { - (static_cast - (MusUiView()))->HandleCommandL( EMusuiCmdViewFastForward ); - } - - if( aType == EEventKeyUp ) - { - (static_cast - (MusUiView()))->HandleCommandL( EMusuiCmdViewFastForwardEnd ); - } - } - return EKeyWasConsumed; - } - - // Fast Reverse: - case EStdKeyDownArrow: // EKeyDownArrow: - { - if ( !MUS_NO_TOOLBAR ) - { - if( aType == EEventKeyDown ) - { - (static_cast - (MusUiView()))->HandleCommandL( EMusuiCmdViewFastReverse ); - } - if( aType == EEventKeyUp ) - { - (static_cast - (MusUiView()))->HandleCommandL( EMusuiCmdViewFastReverseEnd ); - } - } - return EKeyWasConsumed; - } - default: - { - ret = EKeyWasNotConsumed; - break; - } - } - - - switch ( aKeyEvent.iCode ) - { - // Volume Control - case EKeyLeftArrow: - { - (static_cast - (MusUiView()))->HandleCommandL( EMusuiCmdViewVolumeDown ); - ret = EKeyWasConsumed; - break; - } - case EKeyRightArrow: - { - (static_cast - (MusUiView()))->HandleCommandL( EMusuiCmdViewVolumeUp ); - ret = EKeyWasConsumed; - break; - } - - default: - { - ret = EKeyWasNotConsumed; - break; - } - } - - return ret; - } - - -// end of file diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshui/src/musuicontactutil.cpp --- a/mmsharing/mmshui/src/musuicontactutil.cpp Thu Aug 19 09:51:39 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,388 +0,0 @@ -/* -* Copyright (c) 2006 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: -* -*/ - - -#include "musuicontactutil.h" -#include "musuidefinitions.h" -#include "muslogger.h" -#include "musenguriparser.h" -#include "musuid.hrh" - -#include // Phonebook view resource -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -TBool MusUiContactUtil::ShareViewFieldExistsL( CCoeEnv& aEnv, TInt aContactId ) - { - MUS_LOG( "mus: [MUSUI ] -> MusUiContactUtil::ShareViewFieldExistsL" ); - - TBool ret( EFalse ); - - RPbkViewResourceFile pbkResourceFile( aEnv ); - CleanupClosePushL( pbkResourceFile ); - pbkResourceFile.OpenL(); - CPbkContactEngine* pbkContactEngine = CPbkContactEngine::NewL(); - CleanupStack::PushL( pbkContactEngine ); - CPbkContactItem* contactItem = NULL; - CleanupStack::PushL( contactItem ); - if ( aContactId > 0 ) - { - contactItem = pbkContactEngine->OpenContactL( aContactId ); - if ( contactItem->FindField( EPbkFieldIdShareView ) ) - { - MUS_LOG( "mus: [MUSUI ] EPbkFieldIdShareView found!!" ); - ret = ETrue; - } - else if ( contactItem->FindField( EPbkFieldIdSIPID ) ) - { - MUS_LOG( "mus: [MUSUI ] EPbkFieldIdSIPID found, NOT EPbkFieldIdShareView defined!!!" ); - ret = ETrue; - } - else - { - ret = EFalse; - } - } - else - { - ret = EFalse; - } - CleanupStack::PopAndDestroy( 3 ); // contactItem, pbkContactEngine, &pbkResourceFile - MUS_LOG( "mus: [MUSUI ] <- MusUiContactUtil::ShareViewFieldExistsL" ); - return ret; - - } - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -TBool MusUiContactUtil::CheckPbContactForVSAddressesL( CCoeEnv& aEnv, - const TDesC& aOriginator, - TInt aContactId) -{ - MUS_LOG( "mus: [MUSUI ] -> MusUiContactUtil::CheckPbContactForVSAddressesL" ); - - TBool sipAddrMatches(EFalse); - TBool shareViewAddrMatches(EFalse); - TBool ret(EFalse); - - if(MatchTextWithPbFieldsL(aEnv, EPbkFieldIdSIPID, aOriginator, aContactId)) - { - sipAddrMatches=ETrue; - } - if(MatchTextWithPbFieldsL(aEnv, EPbkFieldIdShareView, aOriginator, aContactId)) - { - shareViewAddrMatches=ETrue; - } - - if(aOriginator.Find(KMusPrefixSipUri) != KErrNotFound) - { - //pb field without sip:-prefix are checked. - HBufC * withoutPrefix; - withoutPrefix = HBufC::NewLC(aOriginator.Length()); - *withoutPrefix = aOriginator; - TPtr ptr = withoutPrefix->Des(); - ptr.Delete(0,KMusPrefixMaxLength); - - if(MatchTextWithPbFieldsL(aEnv, EPbkFieldIdSIPID, *withoutPrefix, aContactId)) - { - sipAddrMatches=ETrue; - } - if(MatchTextWithPbFieldsL(aEnv, EPbkFieldIdShareView, *withoutPrefix, aContactId)) - { - shareViewAddrMatches=ETrue; - } - - CleanupStack::PopAndDestroy(withoutPrefix); - } - - if(sipAddrMatches||shareViewAddrMatches) - { - ret=ETrue; - } - else - { - ret=EFalse; - } - - MUS_LOG( "mus: [MUSUI ] -> MusUiContactUtil::CheckPbContactForVSAddressesL" ); - return ret; -} -// ----------------------------------------------------------------------------- -// @function MatchTextWithPbFieldsL -// searches all contactId´s fieldIds of same type for a text -// returns ETrue if text is found from at least one of them. -// ----------------------------------------------------------------------------- -// -TBool MusUiContactUtil::MatchTextWithPbFieldsL( CCoeEnv& aEnv, - TPbkFieldId aFieldId, - const TDesC& aText, - TInt aContactId ) -{ - MUS_LOG( "mus: [MUSUI ] -> MusUiContactUtil::MatchTextWithPbFieldsL" ); - - TBool textMatch(EFalse); - - RPbkViewResourceFile pbkResourceFile(aEnv); - CleanupClosePushL( pbkResourceFile ); - pbkResourceFile.OpenL(); - CPbkContactEngine* pbkContactEngine = CPbkContactEngine::NewL(); - CleanupStack::PushL( pbkContactEngine ); - CPbkContactItem* contactItem = NULL; - CleanupStack::PushL( contactItem ); - - if ( aContactId > 0 ) - { - contactItem = pbkContactEngine->OpenContactL( aContactId ); - - TInt index(0); - - while(index!=KErrNotFound) - { - TPbkContactItemField* contactItemField = - contactItem->FindField( aFieldId, index ); - - if( contactItemField ) - { - if( contactItemField->Text() == aText && !textMatch ) - { - textMatch=ETrue; - } - } - - if( index != KErrNotFound ) - { - index++; - } - } - - } - - CleanupStack::PopAndDestroy( 3 ); // contactItem, pbkContactEngine, &pbkResourceFile - - MUS_LOG( "mus: [MUSUI ] <- MusUiContactUtil::MatchTextWithPbFieldsL" ); - return textMatch; - -} -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void MusUiContactUtil::ActivateContactViewL( CCoeEnv& aEnv, - TContactItemId aId, - const TDesC& aTypedAddress, - const TDesC& aMusTelNumberValue ) - { - MUS_LOG( "mus: [MUSUI ] -> MusUiContactUtil::ActivateContactViewL" ); - RPbkViewResourceFile pbkResourceFile( aEnv ); - CleanupClosePushL( pbkResourceFile ); - pbkResourceFile.OpenL(); - CPbkContactEngine* pbkContactEngine = CPbkContactEngine::NewL(); - CleanupStack::PushL( pbkContactEngine ); - - CPbkContactItem* contactItem = NULL; - CleanupStack::PushL( contactItem ); - - if ( aId > 0 ) - { - MUS_LOG( "mus: [MUSUI ] MusUiContactUtil::ActivateContactViewL\ - TContactItemId > 0 => Opening Existing Contact..." ); - contactItem = pbkContactEngine->OpenContactL( aId ); - EditContactL( *contactItem, - EFalse, - pbkContactEngine, - aTypedAddress, - aMusTelNumberValue, - aId ); - } - else - { - MUS_LOG( "mus: [MUSUI ] MusUiContactUtil::ActivateContactViewL\ - TContactItemId < 1 => Creating new Contact..." ); - contactItem = pbkContactEngine->CreateEmptyContactL(); - EditContactL( *contactItem, - ETrue, - pbkContactEngine, - aTypedAddress, - aMusTelNumberValue, - aId ); - } - - CleanupStack::PopAndDestroy( 3 ); // contactItem, pbkContactEngine, &pbkResourceFile - MUS_LOG( "mus: [MUSUI ] <- MusUiContactUtil::ActivateContactViewL" ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void MusUiContactUtil::EditContactL( CPbkContactItem& aContact, - TBool aNewOne, - CPbkContactEngine* aPbkContactEngine, - const TDesC& aTypedAddress, - const TDesC& aMusTelNumberValue, - TContactItemId aContactId ) - { - MUS_LOG( "mus: [MUSUI ] -> MusUiContactUtil::EditContactL" ); - - TMusEngUriParser parser( aTypedAddress ); - parser.ParseUriL(); - HBufC* uri = NULL; - CleanupStack::PushL( uri ); - - CContactTextField* addressField = NULL; - CleanupStack::PushL( addressField ); - - if ( parser.UriType() == TMusEngUriParser::ESip ) - { - MUS_LOG( "mus: [MUSUI ] MusUiContactUtil::EditContactL\ - parser.UriType() == TMusEngUriParser::ESip" ); - addressField = EditableContactFieldL( - aContact, - EPbkFieldIdShareView, - aPbkContactEngine ); - uri = parser.GetUri16L( ETrue ); - } - else if ( parser.UriType() == TMusEngUriParser::ETel ) - { - MUS_LOG( "mus: [MUSUI ] MusUiContactUtil::EditContactL\ - parser.UriType() == TMusEngUriParser::ETel" ); - addressField = EditableContactFieldL( - aContact, - EPbkFieldIdPhoneNumberMobile, - aPbkContactEngine ); - uri = parser.GetUri16L( EFalse ); - } - - if ( addressField ) - { - MUS_LOG( "mus: [MUSUI ] MusUiContactUtil::EditContactL\ - addressField OK" ); - addressField->SetTextL( *uri ); - } - - if ( ( aMusTelNumberValue.Length() > 0 ) && aContactId == KErrNotFound ) - { - MUS_LOG( "mus: [MUSUI ] MusUiContactUtil::EditContactL\ - !iPhoneNumberFieldFound" ); - CContactTextField* phoneNumberField = EditableContactFieldL( - aContact, - EPbkFieldIdPhoneNumberMobile, - aPbkContactEngine ); - if ( phoneNumberField ) - { - MUS_LOG( "mus: [MUSUI ] MusUiContactUtil::EditContactL\ - phoneNumberField OK" ); - phoneNumberField->SetTextL( aMusTelNumberValue ); - } - } - - MUS_LOG( "mus: [MUSUI ] MusUiContactUtil::EditContactL: Creating dialog..." ); - - // Bring MuSh UI foreground - RWsSession wsSession; - User::LeaveIfError( wsSession.Connect() ); - CleanupClosePushL( wsSession ); - TApaTaskList taskList( wsSession ); - TUid appUid; - appUid.iUid = KMusUiUid; - TApaTask task = taskList.FindApp( appUid ); - task.BringToForeground(); - CleanupStack::PopAndDestroy( &wsSession ); - - // Launch pbk new entry editor dlg - CPbkContactEditorDlg* editorDlg = CPbkContactEditorDlg::NewL( - *aPbkContactEngine, - aContact, - aNewOne, - -1, // Move focus to the topmost field - ETrue ); - editorDlg->ResetWhenDestroyed( &editorDlg ); - editorDlg->HideExitCommand(); - editorDlg->ExecuteLD(); - - CleanupStack::Pop( 2 ); // uri, addressField - - MUS_LOG( "mus: [MUSUI ] <- MusUiContactUtil::EditContactL" ); - } - - -// ----------------------------------------------------------------------------- -// Get editable contact field. -// ----------------------------------------------------------------------------- -// -CContactTextField* MusUiContactUtil::EditableContactFieldL( - CPbkContactItem& aContact, - TInt aFieldId, - CPbkContactEngine* aPbkContactEngine ) - { - MUS_LOG( "mus: [MUSUI ] -> MusUiContactUtil::EditableContactFieldL" ); - - // Get fields info from pbk engine - const CPbkFieldsInfo& fieldsInfo = aPbkContactEngine->FieldsInfo(); - - // Try to get the SIP URI storage field for this contact - TPbkContactItemField* itemField = aContact.FindField( aFieldId ); - - if ( !itemField ) - { - MUS_LOG( "mus: [MUSUI ] MusUiContactUtil::EditableContactFieldL: !itemField" ); - CPbkFieldInfo* fieldInfo = fieldsInfo.Find( aFieldId ); - // Add field to this contact - if ( fieldInfo ) - { - MUS_LOG( "mus: [MUSUI ] MusUiContactUtil::EditableContactFieldL\ - fieldInfo OK" ); - // Contact takes ownership of the field. - aContact.AddFieldL( *fieldInfo ); - itemField = aContact.FindField( aFieldId ); - return ( itemField ) ? itemField->TextStorage() : NULL; - } - else - { - MUS_LOG( "mus: [MUSUI ] MusUiContactUtil::EditableContactFieldL\ - fieldInfo == NULL" ); - return NULL; - } - } - else - { - // Does not pass ownership. - MUS_LOG( "mus: [MUSUI ] MusUiContactUtil::EditableContactFieldL\ - itemField OK" ); - return itemField->TextStorage(); - } - } - - -// end of file diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshui/src/musuidialogutil.cpp --- a/mmsharing/mmshui/src/musuidialogutil.cpp Thu Aug 19 09:51:39 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,193 +0,0 @@ -/* -* Copyright (c) 2006 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: -* -*/ - - -#include "musuidialogutil.h" -#include - -#include -#include -#include -#include -#include - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -TBool MusUiDialogUtil::ShowGlobalConfirmationQueryDialogL( const TDesC& aPrompt ) - { - CAknGlobalConfirmationQuery* dlg = CAknGlobalConfirmationQuery::NewLC(); - TRequestStatus status; - dlg->ShowConfirmationQueryL( status, aPrompt, R_AVKON_SOFTKEYS_YES_NO ); - User::WaitForRequest( status ); - CleanupStack::PopAndDestroy( dlg ); - return ( status == EAknSoftkeyYes ) ? ETrue : EFalse; - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void MusUiDialogUtil::ShowInformationDialogL( const TDesC& aPrompt ) - { - CAknInformationNote* dlg = new ( ELeave ) CAknInformationNote( ETrue ); - dlg->ExecuteLD( aPrompt ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void MusUiDialogUtil::ShowInformationDialogL( TInt aResourceId ) - { - HBufC* dlgPrompt = StringLoader::LoadLC( aResourceId ); - ShowInformationDialogL( *dlgPrompt ); - CleanupStack::PopAndDestroy( dlgPrompt ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void MusUiDialogUtil::ShowGlobalInformationDialogL( const TDesC& aMessage ) - { - TRequestStatus status; - CAknGlobalNote* dlg= CAknGlobalNote::NewLC(); - dlg->ShowNoteL( status, EAknGlobalInformationNote, aMessage ); - User::WaitForRequest( status ); - CleanupStack::PopAndDestroy( dlg ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void MusUiDialogUtil::ShowGlobalInformationDialogL( TInt aResourceId ) - { - HBufC* dlgPrompt = StringLoader::LoadLC( aResourceId ); - ShowGlobalInformationDialogL( *dlgPrompt ); - CleanupStack::PopAndDestroy( dlgPrompt ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void MusUiDialogUtil::ShowGlobalErrorDialogL( const TDesC& aMessage ) - { - CAknGlobalNote* dlg = CAknGlobalNote::NewLC(); - dlg->ShowNoteL( EAknGlobalErrorNote, aMessage ); - CleanupStack::PopAndDestroy( dlg ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void MusUiDialogUtil::ShowGlobalErrorDialogL( TInt aResourceId ) - { - HBufC* dlgPrompt = StringLoader::LoadLC( aResourceId ); - ShowGlobalErrorDialogL( *dlgPrompt ); - CleanupStack::PopAndDestroy( dlgPrompt ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void MusUiDialogUtil::ShowGlobalErrorModalDialogL( const TDesC& aMessage ) - { - CAknGlobalNote* dlg = CAknGlobalNote::NewLC(); - TRequestStatus status; - dlg->ShowNoteL( status , EAknGlobalErrorNote, aMessage ); - User::WaitForRequest( status ); - CleanupStack::PopAndDestroy( dlg ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void MusUiDialogUtil::ShowGlobalErrorModalDialogL( TInt aResourceId ) - { - HBufC* dlgPrompt = StringLoader::LoadLC( aResourceId ); - ShowGlobalErrorModalDialogL( *dlgPrompt ); - CleanupStack::PopAndDestroy( dlgPrompt ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -TBool MusUiDialogUtil::SelectAddressDialogL( CDesCArray* aAddressArray, - TDes& aSelectedAddress ) - { - __ASSERT_ALWAYS( aAddressArray, User::Leave( KErrArgument ) ); - __ASSERT_ALWAYS( aAddressArray->Count() > 0, User::Leave( KErrArgument ) ); - - TInt selectedIndex( 0 ); - CAknListQueryDialog* dlg = new ( ELeave ) CAknListQueryDialog( &selectedIndex ); - dlg->PrepareLC( R_MUS_LIVESHARINGVIEW_ADDRESS_QUERY ); - dlg->SetItemTextArray( aAddressArray ); - dlg->SetOwnershipType( ELbmDoesNotOwnItemArray ); - TInt dlgResponse( dlg->RunLD() ); - aSelectedAddress = (*aAddressArray)[ selectedIndex ]; - delete aAddressArray; - aAddressArray = NULL; - return dlgResponse; - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -TBool MusUiDialogUtil::ShowTextQueryDialogL( const TDesC& aPrompt, TDes& aValue ) - { - CAknTextQueryDialog* dlg = CAknTextQueryDialog::NewL( aValue ); - CleanupStack::PushL( dlg ); - dlg->SetPromptL( aPrompt ); - CleanupStack::Pop( dlg ); - return dlg->ExecuteLD( R_MUS_TEXT_QUERY_DIALOG ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -TBool MusUiDialogUtil::ShowTextQueryDialogL( TInt aPromptResourceId, TDes& aValue ) - { - TBool retval( EFalse ); - HBufC* dlgPrompt = StringLoader::LoadLC( aPromptResourceId ); - retval = ShowTextQueryDialogL( *dlgPrompt, aValue ); - CleanupStack::PopAndDestroy( dlgPrompt ); - return retval; - } - - -// end of file diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshui/src/musuidocument.cpp --- a/mmsharing/mmshui/src/musuidocument.cpp Thu Aug 19 09:51:39 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,78 +0,0 @@ -/* -* 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: Document class of MUS App. -* -*/ - - - -#include "musuidocument.h" // Header for this class -#include "musuiappui.h" // Application UI class - -#include -#include - - -// ----------------------------------------------------------------------------- -// CMusUiDocument::CMusUiDocument -// C++ default constructor. -// ----------------------------------------------------------------------------- -CMusUiDocument::CMusUiDocument( CEikApplication& aApp ) : CAknDocument( aApp ) - { - } - - -// ----------------------------------------------------------------------------- -// CMusUiDocument::NewL -// Two-phased constructor. -// ----------------------------------------------------------------------------- -CMusUiDocument* CMusUiDocument::NewL( CEikApplication& aApp ) - { - CMusUiDocument* self = new( ELeave ) CMusUiDocument( aApp ); - CleanupStack::PushL( self ); - self->ConstructL(); - CleanupStack::Pop( self ); - return self; - } - - -// ----------------------------------------------------------------------------- -// CMusUiDocument::ConstructL -// Symbian 2nd phase constructor. -// ----------------------------------------------------------------------------- -void CMusUiDocument::ConstructL() - { - } - - -// ----------------------------------------------------------------------------- -// CMusUiDocument::~CMusUiDocument -// Destructor. -// ----------------------------------------------------------------------------- -CMusUiDocument::~CMusUiDocument() - { - } - - -// ----------------------------------------------------------------------------- -// CMusUiDocument::CreateAppUiL() -// Constructs CMusUiAppUi. -// ----------------------------------------------------------------------------- -CEikAppUi* CMusUiDocument::CreateAppUiL() - { - return new ( ELeave ) CMusUiAppUi( ); - } - - -// end of file diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshui/src/musuieventcontroller.cpp --- a/mmsharing/mmshui/src/musuieventcontroller.cpp Thu Aug 19 09:51:39 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1124 +0,0 @@ -/* -* 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: Application's UI class. -* -*/ - - - -#include "musuieventcontroller.h" -#include "musuieventobserver.h" -#include "musuisharingobserver.h" -#include "musuipropertywatch.h" -#include "musuicallbackservice.h" -#include "musuiactivitymanger.h" -#include "musuifileutil.h" -#include "musuidialogutil.h" -#include "musuicontactutil.h" -#include "mussessionproperties.h" -#include "musuibitmapdecoder.h" -#include "muscommon.h" -#include "mussettings.h" -#include "musenguriparser.h" -#include "musuimmcmonitor.h" -#include "musresourceproperties.h" -#include "musuiresourcehandler.h" -#include "musui.hrh" -#include "muslogger.h" // debug logging -#include "musuigeneralview.h" - -#include "musengmcesession.h" - -#include - -#include -#include - -#include -#include -#include -#include // for feature definitions -#include - -#include // HlpLauncher -#include -#include - -using namespace MusSettingsKeys; -using namespace NMusSessionApi; - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -CMusUiEventController::~CMusUiEventController() - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiEventController::~CMusUiEventController" ); - delete iStatusPropertyWatch; - delete iContactName; - delete iTelNumber; - delete iVideoCodec; - delete iDialogPrompt; - delete iCallbackService; - delete iMmcMonitor; - delete iActivityManager; - delete iMicMuteStatusPropertyWatch; - FeatureManager::UnInitializeLib(); - MUS_LOG( "mus: [MUSUI ] <- CMusUiEventController::~CMusUiEventController" ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiEventController::ConstructL() - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiEventController::ConstructL" ); - - TInt error( KErrNotFound ); - - FeatureManager::InitializeLibL(); - - iCallbackService = CMusUiCallbackService::NewL( *this ); - - // read ps properties (no need to read again later) - - TRAP( error, iVideoCodec = CMusUiPropertyWatch::ReadDescPropertyL( - KVideoCodecs ) ); - if ( error != KErrNone ) - { - iVideoCodec = KNullDesC().AllocL(); - } - - TRAP( error, iTelNumber = CMusUiPropertyWatch::ReadDescPropertyL( - KTelNumber ) ); - if ( error != KErrNone ) - { - iTelNumber = KNullDesC().AllocL(); - } - - TRAP( error, iSipProfileId = CMusUiPropertyWatch::ReadIntPropertyL( - NMusSessionApi::KSipProfileId ) ); - if ( error != KErrNone ) - { - iSipProfileId = KErrNotFound; - } - - TRAP( error, - iContactId = CMusUiPropertyWatch::ReadIntPropertyL( KContactId ) ); - if ( error != KErrNone ) - { - iContactId = KErrNotFound; - } - - TRAP( error, iContactName = CMusUiPropertyWatch::ReadDescPropertyL( - KContactName ) ); - - if ( error != KErrNone ) - { - iContactName = KNullDesC().AllocL(); - } - - // follow session status property - iStatusPropertyWatch = CMusUiPropertyWatch::NewL( - *this, - NMusSessionApi::KCategoryUid, - KStatus ); - - iMmcMonitor = CMusUiMmcMonitor::NewL( *this ); - - iResourceHandler = iEventObserver.ResourceHandler(); - __ASSERT_ALWAYS( iResourceHandler, User::Leave( KErrNotFound ) ); - - //Mic mute status property - iMicMuteStatusPropertyWatch = CMusUiPropertyWatch::NewL( - *this, - KPSUidTelMicrophoneMuteStatus, - KTelMicrophoneMuteState ); - - // start monitoring activity - iActivityManager = CMusUiActivityManager::NewL( KMusBacklightTimeOut ); - iActivityManager->Reset(); - - // check if operator specific functionality is needed - iOperatorSpecificFunctionality = - ( MultimediaSharingSettings::OperatorVariantSettingL() == - EOperatorSpecific ); - - iShutdownState = EMusUiShutdownNotDefined; - - MUS_LOG( "mus: [MUSUI ] <- CMusUiEventController::ConstructL" ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -CMusUiEventController::CMusUiEventController( - MMusUiEventObserver& aEventObserver, - MMusUiSharingObserver& aSharingObserver ) - : iEventObserver( aEventObserver ), - iSharingObserver( aSharingObserver ), - iForeground( ETrue ), - iShowDialog( EFalse ), - iActiveCall( ETrue ) - - { - } - - -// ----------------------------------------------------------------------------- -// Called by CMusUiPropertyWatch, when resource key values change in P&S -// Sets the member values common to all sharing types. -// ----------------------------------------------------------------------------- -// -void CMusUiEventController::PropertyChanged( const TUint aKey, - const TInt aValue ) - { - MUS_LOG2( "mus: [MUSUI ] -> CMusUiEventController::ResourcePropertyChanged:\ - aKey: [%u] aValue: [%d]", aKey, aValue ); - switch( aKey ) - { - case KTelMicrophoneMuteState: - { - if ( aValue == EPSTelMicMuteOff) - { - iSharingObserver.ReplaceToolbarCommand( EMusuiCmdToolbarUnmute, - EMusuiCmdToolbarMute,ETrue ); - } - else if ( aValue == EPSTelMicMuteOn ) - { - iSharingObserver.ReplaceToolbarCommand( EMusuiCmdToolbarMute, - EMusuiCmdToolbarUnmute,ETrue ); - } - break; - } - case KStatus: - { - TRAP_IGNORE( - HandleChangedStatusL( ( TMusAvailabilityStatus ) aValue ) ); - break; - } - default: - { - break; - } - } - MUS_LOG( "mus: [MUSUI ] <- CMusUiEventController::ResourcePropertyChanged" ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiEventController::HandlePropertyError( const TInt aReason ) - { - MUS_LOG1( "mus: [MUSUI ] -> CMusUiEventController::HandleError [%d]", - aReason ); - - HandleError( aReason ); - - MUS_LOG( "mus: [MUSUI ] <- CMusUiEventController::HandleError" ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiEventController::HandleAsyncEventL( TMusUiAsyncEvent aEventId ) - { - MUS_LOG1( "mus: [MUSUI ] -> CMusUiEventController::HandleAsyncEventL [%d]", - aEventId ); - - switch ( aEventId ) - { - case EMusUiAsyncHandleExit: - { - MUS_LOG( "mus: [MUSUI ] CMusUiEventController::\ - HandleAsyncEventL: EMusUiAsyncHandleExit" ); - HandleExitL(); - break; - } - default: - { - break; - } - } - MUS_LOG( "mus: [MUSUI ] <- CMusUiEventController::HandleAsyncEventL" ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -TInt CMusUiEventController::HandleAsyncError( TInt aError ) - { - iEventObserver.HandleError( aError ); // Stop the execution - - return KErrNone; - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiEventController::MmcRemoved() - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiEventController::MmcRemoved" ); - TRAP_IGNORE( MusUiDialogUtil::ShowInformationDialogL( - R_MUS_LIVE_SHARING_VIEW_NOTE_SHARING_ENDED ) ) - - iEventObserver.HandleExit(); - - MUS_LOG( "mus: [MUSUI ] <- CMusUiEventController::MmcRemoved" ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiEventController::SessionEstablished() - { - TRAPD( error, iSharingObserver.ShowStatusPaneTitleL() ) - - if ( error != KErrNone ) - { - iEventObserver.HandleError( error ); - } - - if ( MUS_NO_TOOLBAR ) - { - TRAPD( error, iSharingObserver.EnableMiddleSoftkeyL( IsLoudSpeakerEnabled() ? - R_MUSUI_VIEW_OPS_MSK_IHF_OFF : - R_MUSUI_VIEW_OPS_MSK_IHF_ON )); - if ( error != KErrNone ) - { - iEventObserver.HandleError( error ); - } - } - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiEventController::AudioRoutingChanged( TBool aShowNote ) - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiEventController::AudioRoutingChanged" ); - - if ( aShowNote ) - { - if ( IsLoudSpeakerEnabled() ) - { - MUS_LOG( "mus: [MUSUI ] show activated note" ); - TRAP_IGNORE( - MusUiDialogUtil::ShowGlobalInformationDialogL( R_MUS_NOTE_HF_ACTIVATED ) ) - } - } - - iSharingObserver.RefreshAudioRoutingToolbarButton(); - - MUS_LOG( "mus: [MUSUI ] <- CMusUiEventController::AudioRoutingChanged" ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -TBool CMusUiEventController::AudioRouteChangeAllowed() const - { - // Do not allow audio routing if call has ended - return iActiveCall; - } - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiEventController::VolumeChanged( TInt aVolume, TBool aAudioRouteChanged ) - { - // Set Volume: - //If volume changed due to audio route change, we want to update volume - //popup control only if it is already visible - TBool onlyIfVisible = aAudioRouteChanged; - TRAP_IGNORE( iSharingObserver.ActivateVolumeControlL(aVolume, onlyIfVisible) ); - } -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiEventController::SetRect(const TRect& aRect) - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiEventController::SetRect" ); - - if ( EngineSession() ) - { - TRAPD( err, EngineSession()->SetRectL( aRect ) ); - if ( err != KErrNone ) - { - iEventObserver.HandleError( err ); - } - } - - MUS_LOG( "mus: [MUSUI ] <- CMusUiEventController::SetRect" ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -const TDesC& CMusUiEventController::MusContactName() - { - return *iContactName; - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -const TDesC& CMusUiEventController::MusVideoCodecValue() - { - return *iVideoCodec; - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -const TDesC& CMusUiEventController::MusTelNumberValue() - { - MUS_LOG_TDESC("mus: [MUSUI ] <> CMusUiEventController::MusTelNumberValue()", - iTelNumber->Des() ) - return *iTelNumber; - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -const TDesC& CMusUiEventController::SessionTimeFormatted( - const TTimeIntervalSeconds& aSeconds ) - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiEventController::SessionTimeFormatted" ); - iTimeBuffer.SetLength( 0 ); - TLocale locale; - _LIT( KZeroSymbol, "0" ); - TInt sessionHours( 0 ); - TInt sessionMinutes( 0 ); - TInt sessionSeconds( aSeconds.Int() ); - if ( aSeconds.Int() > ( KMusOneMinuteInSeconds - 1 ) ) - { - sessionMinutes = (int)(aSeconds.Int() / KMusOneMinuteInSeconds ); - sessionSeconds = sessionSeconds - ( sessionMinutes * KMusOneMinuteInSeconds ); - } - if ( sessionMinutes > ( KMusOneMinuteInSeconds - 1 ) ) - { - sessionHours = (int)( sessionMinutes / KMusOneMinuteInSeconds ); - sessionMinutes = sessionMinutes - ( sessionHours * KMusOneMinuteInSeconds ); - } - if ( sessionHours != 0 ) - { - iTimeBuffer.AppendNum( sessionHours ); - iTimeBuffer.Append( locale.TimeSeparator( KMusLocaleHoursAndMinutesSeparator ) ); - if ( sessionMinutes < KMusNumberValueTen ) - { - iTimeBuffer.Append( KZeroSymbol ); - } - } - - iTimeBuffer.AppendNum( sessionMinutes ); - iTimeBuffer.Append( locale.TimeSeparator( KMusLocaleMinutesAndSecondsSeparator ) ); - if ( sessionSeconds < KMusNumberValueTen ) - { - iTimeBuffer.Append( KZeroSymbol ); - } - iTimeBuffer.AppendNum( sessionSeconds ); - MUS_LOG( "mus: [MUSUI ] <- CMusUiEventController::SessionTimeFormatted" ); - return iTimeBuffer; - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiEventController::SaveContactQueryL() - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiEventController::SaveContactQueryL" ); - if ( !MusUiContactUtil::ShareViewFieldExistsL( *iEventObserver.EikonEnv(), - iContactId ) ) - { - delete iDialogPrompt; - iDialogPrompt = NULL; - iDialogPrompt = StringLoader::LoadL( R_MUS_VIEW_SAVE_ADDRESS_QUERY_TXT ); - iEventObserver.ShowAsyncConfirmationQueryDialogL( *iDialogPrompt ); - } - else - { - AsyncQueryDialogAcceptedL( EFalse ); - } - MUS_LOG( "mus: [MUSUI ] <- CMusUiEventController::SaveContactQueryL" ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiEventController::HandleError( const TInt aError ) - { - MUS_LOG1( "mus: [MUSUI ] -> CMusUiEventController::HandleError %d", - aError ); - - iEventObserver.HandleError( aError ); - - MUS_LOG( "mus: [MUSUI ] <- CMusUiEventController::HandleError" ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -TBool CMusUiEventController::ExitOccured() - { - return ( iShutdownState != EMusUiShutdownNotDefined ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -TBool CMusUiEventController::AudioRoutingCanBeChanged() - { - return ( EngineSession() && EngineSession()->AudioRoutingCanBeChanged() ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -TBool CMusUiEventController::IsLoudSpeakerEnabled() - { - return ( EngineSession() && EngineSession()->IsLoudSpeakerEnabled() ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -TBool CMusUiEventController::DeviceHasDedicatedVolumeKeys() - { - return FeatureManager::FeatureSupported( KFeatureIdSideVolumeKeys ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiEventController::HandleExitL( TBool aTerminateCall ) - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiEventController::HandleExitL" ); - if ( iShutdownState == EMusUiShutdownNotDefined ) - { - iShutdownState = EMusUiShutdownStarted; - - if ( iStatusPropertyWatch ) - { - iStatusPropertyWatch->Cancel(); - } - - if ( iMmcMonitor ) - { - iMmcMonitor->Cancel(); - } - - if ( iActivityManager ) - { - iActivityManager->Cancel(); - } - - if ( iCallbackService ) - { - iCallbackService->Cancel(); - } - - iEventObserver.SetToolbarVisibility( EFalse ); - - // This must be done before showing the end note, because showing of - // note may cause the session to continue for extra few seconds. - DeleteEngineSession(); - if ( iShowDialog ) - { - MusUiDialogUtil::ShowGlobalInformationDialogL( - R_MUS_NOTE_HF_DEACTIVATED ); - } - // Sharing Ended note - MusUiDialogUtil::ShowGlobalInformationDialogL( - R_MUS_LIVE_SHARING_VIEW_NOTE_SHARING_ENDED ); - - if( aTerminateCall ) - { - iEventObserver.TerminateCall(); - } - - // TODO: Continue Recording query, if sharing live video and receiving end - // terminates the sharing session - - ExitProcedureL( EFalse ); - - } - MUS_LOG( "mus: [MUSUI ] <- CMusUiEventController::HandleExitL" ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiEventController::ExitProcedureL( TBool aUserAcceptance ) - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiEventController::ExitProcedureL" ); - - iSharingObserver.DismissMenuBar(); - - switch ( iShutdownState ) - { - case EMusUiShutdownStarted: - { - MUS_LOG( "mus: [MUSUI ] ExitProcedureL: EMusUiShutdownStarted" ); - // No general functionality, skip the state - iShutdownState = EMusUiShutdownVideoSaved; - ExitProcedureL( EFalse ); - break; - } - case EMusUiShutdownVideoSaved: - { - MUS_LOG( "mus: [MUSUI ] ExitProcedureL: EMusuiShutdownVideoSaved" ); - iEventObserver.HandleExit(); - break; - } - - case EMusUiShutdownContactSavingQueried: - { - MUS_LOG( "mus: [MUSUI ] ExitProcedureL: EMusUiShutdownContactSavingQueried" ); - // Stop app execution - if ( aUserAcceptance ) - { - if ( iResourceHandler->RequestKeypadL( EFalse ) ) - { - MusUiContactUtil::ActivateContactViewL( - *iEventObserver.EikonEnv(), - iContactId, - TypedAddress(), - MusTelNumberValue() ); - } - } - iEventObserver.HandleExit(); - break; - } - case EMusUiShutdownOver: - { - iEventObserver.HandleExit(); - break; - } - case EMusUiShutdownNotDefined: - default: - { - break; - } - } - - MUS_LOG( "mus: [MUSUI ] <- CMusUiEventController::ExitProcedureL" ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiEventController::AsyncQueryDialogAcceptedL( TBool aAccepted ) - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiEventController::AsyncQueryDialogAcceptedL" ); - - if ( ExitOccured() ) - { - ExitProcedureL( aAccepted ); - } - - MUS_LOG( "mus: [MUSUI ] <- CMusUiEventController::AsyncQueryDialogAcceptedL" ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -TBool CMusUiEventController::ConnectionEstablished() const - { - return iConnectionEstablished; - } - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiEventController::SetConnectionInitialized( - TBool aConnectionInitialized ) - { - MUS_LOG1( - "mus: [MUSUI ] -> CMusUiEventController::SetConnectionInitialized ( %d )", - aConnectionInitialized ); - - iConnectionInitialized = aConnectionInitialized; - - if ( !iForeground && !ExitOccured() ) - { - TRAP_IGNORE( EnableDisplayL(EFalse) ) - } - } - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -TBool CMusUiEventController::ConnectionInitialized() const - { - return iConnectionInitialized; - } - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiEventController::EnableDisplayL( TBool aEnable ) - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiEventController::EnableDisplayL" ); - if ( EngineSession() ) - { - EngineSession()->EnableDisplayL( aEnable ); - } - MUS_LOG( "mus: [MUSUI ] <- CMusUiEventController::EnableDisplayL" ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiEventController::ChangeOrientationL( - CAknAppUiBase::TAppUiOrientation aOrientation ) - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiEventController::ChangeOrientationL" ); - iEventObserver.SwitchOrientationL( aOrientation ); - MUS_LOG( "mus: [MUSUI ] <- CMusUiEventController::ChangeOrientationL" ); - } - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -TBool CMusUiEventController::IsDisplayEnabledL() - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiEventController::IsDisplayEnabledL" ); - TBool ret = EFalse; - if ( EngineSession() ) - { - ret = EngineSession()->IsDisplayEnabledL(); - } - MUS_LOG1( "mus: [MUSUI ] <- CMusUiEventController::IsDisplayEnabledL, %d", ret ); - return ret; - } - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -TBool CMusUiEventController::IsAudioRoutingLoudSpeaker() - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiEventController::IsAudioRoutingLoudSpeaker" ); - TBool ret = EFalse; - if ( EngineSession() ) - { - ret = EngineSession()->IsAudioRoutingLoudSpeaker(); - } - MUS_LOG1( "mus: [MUSUI ] <- CMusUiEventController::IsAudioRoutingLoudSpeaker, %d", ret ); - return ret; - } - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -TBool CMusUiEventController::ToolbarVolumeSelected() - { - return iToolbarVolumeSelected; - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -TBool CMusUiEventController::IsMicMutedL() - { - __ASSERT_ALWAYS( EngineSession(), User::Leave( KErrNotReady ) ); - - return EngineSession()->IsMicMutedL(); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -TBool CMusUiEventController::ManualAddressTyped() const - { - return EFalse; - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiEventController::HandleForegroundEventL( TBool aForeground ) - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiEventController::HandleForegroundEventL" ); - - iForeground = aForeground; - - if ( ConnectionInitialized() && !ExitOccured() ) - { - EnableDisplayL( aForeground ); - - // Change toolbar according to a real state. Other items than speaker - // and mic states cannot be changed from phone app and thus there is - // no need to check them - if ( aForeground ) - { - if ( MUS_NO_TOOLBAR ) - { - iSharingObserver.EnableMiddleSoftkeyL( IsLoudSpeakerEnabled() ? - R_MUSUI_VIEW_OPS_MSK_IHF_OFF : - R_MUSUI_VIEW_OPS_MSK_IHF_ON ); - } - else - { - if ( IsMicMutedL() ) - { - iSharingObserver.ReplaceToolbarCommand( EMusuiCmdToolbarMute, - EMusuiCmdToolbarUnmute, - EFalse ); - } - else - { - iSharingObserver.ReplaceToolbarCommand( EMusuiCmdToolbarUnmute, - EMusuiCmdToolbarMute, - EFalse ); - } - - if ( IsLoudSpeakerEnabled() ) - { - iSharingObserver.ReplaceToolbarCommand( - EMusuiCmdToolbarSpeakerOn, - EMusuiCmdToolbarSpeakerOff, - EFalse ); - } - else - { - iSharingObserver.ReplaceToolbarCommand( - EMusuiCmdToolbarSpeakerOff, - EMusuiCmdToolbarSpeakerOn, - EFalse ); - } - if ( ConnectionEstablished() ) - { - iEventObserver.SetToolbarVisibility( aForeground ); - } - - } - } - - } - - - MUS_LOG( "mus: [MUSUI ] <- CMusUiEventController::HandleForegroundEventL" ); - } - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -TBool CMusUiEventController::IsForeground() const - { - return iForeground; - } - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiEventController::OfferToolbarEventL( TInt aCommand ) - { - MUS_LOG1( "mus: [MUSUI ] -> CMusUiEventController::OfferToolbarEventL [%d]", - aCommand ); - - __ASSERT_ALWAYS( EngineSession(), User::Leave( KErrNotReady ) ); - - switch ( aCommand ) - { - case EMusuiCmdToolbarVolume: - { - iToolbarVolumeSelected = !iToolbarVolumeSelected; - iSharingObserver.HighlightSelectedToolbarItem( - EMusuiCmdToolbarVolume ); - iSharingObserver.ActivateVolumeControlL( - EngineSession()->VolumeL() ); - break; - } - case EMusuiCmdToolbarMute: - { - EngineSession()->MuteMicL( ETrue ); - iSharingObserver.ReplaceToolbarCommand( EMusuiCmdToolbarMute, - EMusuiCmdToolbarUnmute, - ETrue ); - break; - } - case EMusuiCmdToolbarUnmute: - { - EngineSession()->MuteMicL( EFalse ); - iSharingObserver.ReplaceToolbarCommand( EMusuiCmdToolbarUnmute, - EMusuiCmdToolbarMute, - ETrue ); - break; - } - case EMusuiCmdToolbarSpeakerOff: - { - EngineSession()->EnableLoudspeakerL( ELoudspeakerDisabled, EFalse ); - // Toolbar will be changed when asynchronous request is completed - break; - } - case EMusuiCmdToolbarSpeakerOn: - { - EngineSession()->EnableLoudspeakerL( ELoudspeakerEnabled, EFalse ); - // Toolbar will be changed when asynchronous request is completed - break; - } - default: // Never should be the case - { - HandleExitL(); - break; - } - - } - - MUS_LOG1( "mus: [MUSUI ] <- CMusUiEventController::OfferToolbarEventL [%d]", - aCommand ); - - } - - -// ----------------------------------------------------------------------------- -// Handles commands common to all sharing types. -// ----------------------------------------------------------------------------- -// -void CMusUiEventController::HandleCommandL( TInt aCommand ) - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiEventController::HandleCommandL" ); - - switch ( aCommand ) - { - case EMusuiCmdViewVolumeUp: - { - // Set Volume: - __ASSERT_ALWAYS( EngineSession(), User::Leave( KErrNotReady ) ); - EngineSession()->VolumeUpL(); - // Status pane update will be done later. When we get - // VolumeChanged() callback - break; - } - case EMusuiCmdViewVolumeDown: - { - // Set Volume: - __ASSERT_ALWAYS( EngineSession(), User::Leave( KErrNotReady ) ); - EngineSession()->VolumeDownL(); - // Status pane update will be done later. When we get - // VolumeChanged() callback - break; - } - case EMusuiCmdViewVolumeChanged: - { - __ASSERT_ALWAYS( EngineSession(), User::Leave( KErrNotReady ) ); - TInt volumeFromEngine = EngineSession()->VolumeL(); - TInt volumeFromUi = iEventObserver.GetUiVolumeValue(); - if ( volumeFromUi != volumeFromEngine ) - { - EngineSession()->SetVolumeL( volumeFromUi ); - } - break; - } - - case EMusuiCmdViewLoadspeaker: - { - EngineSession()->EnableLoudspeakerL( ELoudspeakerEnabled, ETrue ); - break; - } - - case EMusuiCmdViewHandset: - { - EngineSession()->EnableLoudspeakerL( ELoudspeakerDisabled, ETrue ); - break; - } - - case EMusuiCmdViewMicrophoneMute: - { - EngineSession()->MuteMicL( ETrue ); - break; - } - - case EMusuiCmdViewMicrophoneUnmute: - { - EngineSession()->MuteMicL( EFalse ); - break; - } - - case EMusuiCmdViewEndActiveCall: - { - MUS_LOG( "mus: [MUSUI ] CMusUiReceiveController::ConstructL:\ - EMusuiCmdViewEndActiveCall" ); - HandleExitL( ETrue ); - break; - } - case EMusuiGenCmdExit: - case EAknSoftkeyExit: - { - HandleExitL(); - break; - } - - case EAknCmdHelp: - { - if ( FeatureManager::FeatureSupported( KFeatureIdHelp ) ) - { - HlpLauncher::LaunchHelpApplicationL( - iEventObserver.EikonEnv()->WsSession(), - iEventObserver.EikonEnv()->AppUi()->AppHelpContextL() ); - } - break; - } - - default: - { - //NOP - break; - } - } - - MUS_LOG( "mus: [MUSUI ] <- CMusUiEventController::HandleCommandL" ); - } - - -// ----------------------------------------------------------------------------- -// Handles status changes common to all sharing types. -// ----------------------------------------------------------------------------- -// -void CMusUiEventController::HandleChangedStatusL( - TMusAvailabilityStatus aStatus ) - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiEventController::HandleChangedStatusL" ); - switch( aStatus ) - { - case EErrNoActiveCall: - { - MUS_LOG( "mus: [MUSUI ] EErrNoActiveCall" ); - iActiveCall = EFalse; - HandleExitL(); - break; - } - case EErrCallOnHold: - case EErrConferenceCall: - case EMultimediaSharingNotAvailable: - { - MUS_LOG( "mus: [MUSUI ]\ - EErrCallOnHold, EErrConferenceCall, EMultimediaSharingNotAvailable" ); - HandleExitL(); - break; - } - case EErrSipRegistration: - { - MUS_LOG( "mus: [MUSUI ] EErrSipRegistration" ); - MusUiDialogUtil::ShowInformationDialogL( - R_MUS_LIVE_SHARING_VIEW_NOTE_SERVICE_N_A ); - HandleExitL(); - break; - } - case EErrRoaming: - { - MUS_LOG( "mus: [MUSUI ] EErrRoaming" ); - HandleExitL(); - break; - } - case EErrNetwork: - { - MUS_LOG( "mus: [MUSUI ] EErrNetwork" ); - MusUiDialogUtil::ShowInformationDialogL( - R_MUS_LIVE_SHARING_VIEW_NOTE_SERVICE_N_A ); - HandleExitL(); - break; - } - case EErrConnection: - { - MUS_LOG( "mus: [MUSUI ] EErrConnection" ); - MusUiDialogUtil::ShowInformationDialogL( - R_MUS_LIVE_SHARING_VIEW_NOTE_ONLY_3G ); - HandleExitL(); - break; - } - - case EErrServerShutDown: - { - MUS_LOG( "mus: [MUSUI ] EErrServerShutDown" ); - HandleExitL(); - break; - } - - default: - { - MUS_LOG( "mus: [MUSUI ] Default" ); - // TODO - break; - } - } - MUS_LOG( "mus: [MUSUI ] <- CMusUiEventController::HandleChangedStatusL" ); - } - - diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshui/src/musuifileutil.cpp --- a/mmsharing/mmshui/src/musuifileutil.cpp Thu Aug 19 09:51:39 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,188 +0,0 @@ -/* -* Copyright (c) 2006 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: -* -*/ - - -#include "musuifileutil.h" -#include "muslogger.h" // debug logging -#include "musuidefinitions.h" -#include "musuidialogutil.h" -#include "mussettings.h" -#include - -#include -#include -#include -#include - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -TBool MusUiFileUtil::FileExists( const TDesC& aFullFileName ) - { - MUS_LOG( "mus: [MUSUI ] -> MusUiFileUtil::FileExists" ); - - TBool fileExists( EFalse ); - RFs fs; - - if ( fs.Connect() == KErrNone ) - { - TUint att; - fileExists = ( fs.Att( aFullFileName, att ) != KErrNotFound ); - fs.Close(); - } - - MUS_LOG( "mus: [MUSUI ] <- MusUiFileUtil::FileExists" ); - - return fileExists; - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void MusUiFileUtil::VideoFilePathExistsL( const TDesC& aVideoFilePath) - { - MUS_LOG( "mus: [MUSUI ] -> MusUiFileUtil::VideoFilePathExistsL" ); - - RFs fs; - - User::LeaveIfError( fs.Connect() ); - CleanupClosePushL( fs ); - TInt error = fs.MkDirAll( aVideoFilePath ); - CleanupStack::PopAndDestroy( &fs ); - - MUS_LOG1( "mus: [MUSUI ] <- MusUiFileUtil::VideoFilePathExistsL,%d",error ); - User::Leave(error); - } - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void MusUiFileUtil::CreateVideoFileNameL( const TDesC& aVideoFilePath, - TFileName& aFileName ) - { - MUS_LOG( "mus: [MUSUI ] -> MusUiFileUtil::CreateVideoFileNameL" ); - - RFs fs; - TParse parse; - TFileName fullFileName; - TUint att; - - User::LeaveIfError( fs.Connect() ); - CleanupClosePushL( fs ); - - if ( fs.Att( aVideoFilePath, att ) == KErrNone ) - { - if ( MultimediaSharingSettings::OperatorVariantSettingL() == - MusSettingsKeys::EStandard ) - { - HBufC* temp = StringLoader::LoadLC( R_MUS_VIEW_SAVED_FILENAME ); - User::LeaveIfError( parse.Set( aVideoFilePath, temp, NULL ) ); - CleanupStack::PopAndDestroy( temp ); - fullFileName = parse.FullName(); - fullFileName.Append( KMusVideoFileNameExtension ); - User::LeaveIfError( - CApaApplication::GenerateFileName( fs, fullFileName ) ); - User::LeaveIfError( parse.Set( fullFileName, NULL, NULL ) ); - } - else // operator specific case - { - RBuf newName; - newName.CreateL( KMaxFileName ); - CleanupClosePushL( newName ); - - TEntry entry; - TInt i = 1; - // path + 'VS' + date + 'V' + counter + extension - _LIT( KFormatStringOne, "%S%S%S%S%02d%S" ); - _LIT( KFormatStringTwo, "%S%S%S%S%d%S" ); - TBuf<16> format; - format = KFormatStringOne; - - // get current date - _LIT( KDateFormat, "%F%M%D%*Y" ); - TTime time; - time.UniversalTime(); - TBuf<6> dateString; - time.FormatL( dateString, KDateFormat ); - - // generate a valid filename that doesn't already exist... - do - { - TPtrC driveAndPath = aVideoFilePath; - TPtrC date = dateString; - newName.Format( format, - &driveAndPath, &KMusVideoFileNameBegining, - &date, &KMusVideoFileNameVersion, - i++, &KMusVideoFileNameExtension ); - - if ( newName.Length() > KMaxFileName ) - { - User::Leave( KErrOverflow ); - } - - if ( i >= 100 ) - { - format = KFormatStringTwo; - } - } // Continue until DoesNotExist - while ( fs.Entry( newName, entry ) == KErrNone ); - - fullFileName.Copy( newName ); - User::LeaveIfError( parse.Set( newName, NULL, NULL ) ); - - CleanupStack::PopAndDestroy( &newName ); - } - - RFile file; - CleanupClosePushL( file ); - User::LeaveIfError( - file.Create( fs, fullFileName, EFileWrite | EFileShareExclusive ) ); - CleanupStack::PopAndDestroy( &file ); - } - - CleanupStack::PopAndDestroy( &fs ); - - aFileName = parse.Name(); - - MUS_LOG( "mus: [MUSUI ] < - MusUiFileUtil::CreateVideoFileNameL" ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void MusUiFileUtil::DeleteFileL( const TDesC& aFileName ) - { - RFs fs; - User::LeaveIfError( fs.Connect() ); - CleanupClosePushL( fs ); - TInt error = fs.Delete( aFileName ); - if ( ( error != KErrNone ) && ( error != KErrNotFound ) ) - { - User::Leave( error ); - } - CleanupStack::PopAndDestroy( &fs ); - } - - -// end of file diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshui/src/musuigeneralview.cpp --- a/mmsharing/mmshui/src/musuigeneralview.cpp Thu Aug 19 09:51:39 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,930 +0,0 @@ -/* -* 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: Mus Applications Event Observer Interface -* -*/ - - - -#include "musuigeneralview.h" -#include "musui.hrh" -#include "musuiappui.h" // Application UI class -#include "musuistatuspanehandler.h" -#include "musuieventcontroller.h" -#include "musuiviewcontainer.h" -#include "musuidefinitions.h" -#include "mussettings.h" -#include "mussettingskeys.h" -#include "muslogger.h" // debug logging -#include "musuiactivetimer.h" -#include "musuibackgroundviewcontainer.h" -#include -#include - -#include // Eikon enviroment -#include -#include -#include -#include -#include -#include -#include - -const TInt KBackgroundIntervalForClose = 10 * 1000 * 1000; // 10s -const TInt KMusFgBgEventFiltering = 200 * 1000; // 200 ms - -// ----------------------------------------------------------------------------- -// EPOC two-phased constructor -// ----------------------------------------------------------------------------- -// -void CMusUiGeneralView::ConstructL() - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiGeneralView::ConstructL" ); - - BaseConstructL( R_MUSUI_VIEW ); - TInt toolbarId = R_MUS_TOOLBAR; - if (!AknLayoutUtils::PenEnabled()) - { - toolbarId = R_MUS_TOOLBAR_NONTOUCH; - } - CreateAndSetToolbarL(toolbarId); - - // check if operator specific functionality is needed - iOperatorSpecificFunctionality = - ( MultimediaSharingSettings::OperatorVariantSettingL() == - MusSettingsKeys::EOperatorSpecific ); - - iIncallBubble = CAknIncallBubble::NewL(); - iSessionEndTimer = CMusUiActiveTimer::NewL( this ); - - iFgBgTimer = CMusUiActiveTimer::NewL( this ); - - if( MUS_NO_TOOLBAR ) - { - MUS_LOG( "mus: [MUSUI ] Operator variant hides toolbar!" ); - Toolbar()->SetToolbarVisibility( EFalse ); - Toolbar()->MakeVisible(EFalse); - } - - MUS_LOG( "mus: [MUSUI ] <- CMusUiGeneralView::ConstructL" ); - } - - -// ----------------------------------------------------------------------------- -// Destructor -// ----------------------------------------------------------------------------- -// -CMusUiGeneralView::~CMusUiGeneralView() - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiGeneralView::~CMusUiGeneralView" ); - - delete iSessionEndTimer; - - delete iFgBgTimer; - - if ( iIncallBubble ) - { - TRAP_IGNORE( iIncallBubble->SetIncallBubbleAllowedInUsualL( ETrue ) ) - } - delete iIncallBubble; - - /* Remove and delete background container */ - if ( iBackgroundContainer ) - { - AppUi()->RemoveFromViewStack( *this, iBackgroundContainer ); - } - delete iBackgroundContainer; - - MUS_LOG( "mus: [MUSUI ] <- CMusUiGeneralView::~CMusUiGeneralView" ); - } - - -// ----------------------------------------------------------------------------- -// Fetches a pointer to the application's AppUi class ( CMusUiAppUi ) -// ----------------------------------------------------------------------------- -// -CMusUiAppUi* CMusUiGeneralView::MusAppUi() const - { - MUS_LOG( "mus: [MUSUI ] CMusUiGeneralView::MusAppUi()" ); - return static_cast( iEikonEnv->AppUi() ); - } - - - -// ----------------------------------------------------------------------------- -// To be overridden in subclasses -// ----------------------------------------------------------------------------- -// -void CMusUiGeneralView::HandleKeyUpEvent( TInt /*aKeyCode*/ ) - { - // NOP - } - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiGeneralView::SetToolbarVisibility( TBool aVisible ) - { - MUS_LOG1( "mus: [MUSUI ] -> CMusUiGeneralView::SetToolbarVisibility: %d", - aVisible ); - - if( MUS_NO_TOOLBAR ) - { - MUS_LOG( "mus: [MUSUI ] Operator variant hides toolbar!" ); - Toolbar()->SetToolbarVisibility( EFalse ); - Toolbar()->MakeVisible(EFalse); - return; - } - - // Show toolbar only after established session and before of exit procedure - if ( aVisible && - EventController() && - !EventController()->ExitOccured() && - EventController()->ConnectionEstablished() ) - { - MUS_LOG( "mus: [MUSUI ] setting toolbar visible" ); - - if ( SharingContainer().WaitDialogShown() ) - { - // Cannot show toolbar at the moment as it would go over the dialog. - // Instead, request container to set visibility once dialog - // is dismissed. - SharingContainer().RequestToolbarVisibilityOnceDialogDismissed( this ); - } - else - { - Toolbar()->SetToolbarVisibility( ETrue ); - Toolbar()->MakeVisible(ETrue); - } - } - else if ( !aVisible && EventController()->ExitOccured() ) - { - Toolbar()->SetToolbarVisibility( EFalse ); - Toolbar()->MakeVisible(EFalse); - } - else - { - MUS_LOG( "mus: [MUSUI ] We do not set fixed toolbar invisible" ); - if (!AknLayoutUtils::PenEnabled()) - { - Toolbar()->SetToolbarVisibility( EFalse ); - Toolbar()->MakeVisible(EFalse); - } - - SharingContainer().RequestToolbarVisibilityOnceDialogDismissed( NULL ); - } - - MUS_LOG( "mus: [MUSUI ] <- CMusUiGeneralView::SetToolbarVisibility" ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiGeneralView::AsyncQueryDialogAcceptedL( TBool aAccepted ) - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiGeneralView::AsyncQueryDialogAcceptedL" ); - - EventControllerL().AsyncQueryDialogAcceptedL( aAccepted ); - - MUS_LOG( "mus: [MUSUI ] <- CMusUiGeneralView::AsyncQueryDialogAcceptedL" ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -TInt CMusUiGeneralView::FocusedToolbarItem() const - { - MUS_LOG( "mus: [MUSUI ] <-> CMusUiGeneralView::FocusedToolbarItem" ); - return Toolbar()->FocusedItem(); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiGeneralView::DynInitToolbarL( TInt /*aResourceId*/, - CAknToolbar* /*aToolbar*/ ) - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiGeneralView::DynInitToolbarL" ); - - Toolbar()->SetWithSliding( EFalse ); - - // Hide items according to states of speaker and microphone: - - Toolbar()->HideItem( EventControllerL().IsMicMutedL() ? - EMusuiCmdToolbarMute : - EMusuiCmdToolbarUnmute, - ETrue, - ETrue ); - - TBool loudSpeakerEnabled( EventControllerL().IsLoudSpeakerEnabled() ); - - Toolbar()->HideItem( loudSpeakerEnabled ? - EMusuiCmdToolbarSpeakerOn : - EMusuiCmdToolbarSpeakerOff, - ETrue, - ETrue ); - - // Dim audio routing button if audio routing cannot be changed - // or when some button is selected - TBool dimAudioRouting( iToolbarItemSelected || - !EventControllerL().AudioRoutingCanBeChanged() ); - - Toolbar()->SetItemDimmed( loudSpeakerEnabled ? - EMusuiCmdToolbarSpeakerOff : - EMusuiCmdToolbarSpeakerOn, - dimAudioRouting, - ETrue ); - - - MUS_LOG( "mus: [MUSUI ] <- CMusUiGeneralView::DynInitToolbarL" ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiGeneralView::OfferToolbarEventL( TInt aCommand ) - { - MUS_LOG1( "mus: [MUSUI ] -> CMusUiGeneralView::OfferToolbarEventL: %d", - aCommand ); - EventControllerL().OfferToolbarEventL( aCommand ); - MUS_LOG( "mus: [MUSUI ] <- CMusUiGeneralView::OfferToolbarEventL" ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -TBool CMusUiGeneralView::ShowWaitDialogL( const TDesC& aPrompt, - TInt aTimerInSeconds, - TInt aExpirationMessageResourceId ) - { - MUS_LOG_TDESC( "mus: [MUSUI ] -> CMusUiGeneralView::ShowWaitDialogL: ", - aPrompt ); - - TBool retVal = SharingContainer().RunWaitDialogL( - aPrompt, - aTimerInSeconds, - aExpirationMessageResourceId ); - - MUS_LOG1( "mus: [MUSUI ] <- CMusUiGeneralView::ShowWaitDialogL: retVal = %d", - retVal ) - - return retVal; - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiGeneralView::DismissWaitDialogL( TBool aReturnValue ) - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiGeneralView::DismissWaitDialogL" ); - - SharingContainer().DismissWaitDialogL( aReturnValue ); - - MUS_LOG( "mus: [MUSUI ] <- CMusUiGeneralView::DismissWaitDialogL" ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiGeneralView::SetWaitDialogCallbackL( MProgressDialogCallback* aCallback ) - { - SharingContainer().SetWaitDialogCallbackL( aCallback ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiGeneralView::ShowStatusPaneTitleL() - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiGeneralView::ShowStatusPaneTitleL" ); - - MusAppUi()->MusStatusPane()->ActivateNaviPaneMediaL(); - - // Status Pane Title: - if ( EventControllerL().MusContactName().Length() > 0 ) - { - MusAppUi()->MusStatusPane()->SetTitleL( - EventControllerL().MusContactName() ); - } - else if ( EventControllerL().MusTelNumberValue().Length() > 0 ) - { - MusAppUi()->MusStatusPane()->SetTitleL( - EventControllerL().MusTelNumberValue() ); - } - else - { - MusAppUi()->MusStatusPane()->SetTitleFromResourceL( - R_MUS_LIVE_SHARING_VIEW_TITLE ); - } - - MUS_LOG( "mus: [MUSUI ] <- CMusUiGeneralView::ShowStatusPaneTitleL" ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiGeneralView::EnableMiddleSoftkeyL( TInt aResourceId ) - { - // Update Middle softkey - CEikButtonGroupContainer* cba = Cba(); - if ( cba ) - { - cba->SetCommandL( CEikButtonGroupContainer::EMiddleSoftkeyPosition, - aResourceId ); - cba->DrawDeferred(); - } - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiGeneralView::ActivateVolumeControlL( TInt aValue, TBool aOnlyIfVisible ) - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiGeneralView::ActivateVolumeControlL" ); - MusAppUi()->MusStatusPane()->ActivateVolumeControlL( aValue, aOnlyIfVisible ); - - MUS_LOG( "mus: [MUSUI ] <- CMusUiGeneralView::ActivateVolumeControlL" ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiGeneralView::HighlightSelectedToolbarItem( TInt aCommand ) - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiGeneralView::HightlightSelectedToolbarItem" ); - iToolbarItemSelected = !iToolbarItemSelected; - CAknButton* button = static_cast( Toolbar()->ControlOrNull( - aCommand ) ); - button->SetCurrentState( iToolbarItemSelected ? 1 : 0, ETrue ); - - TBool dimAudioRouting( iToolbarItemSelected || - !( EventController() && - EventController()->AudioRoutingCanBeChanged() ) ); - - for ( TInt i = EMusuiCmdToolbarVolume; i < EMusUiCmdToolbarLastIndex; i++ ) - { - // Undim audio routing buttons only if changing the routing is allowed - if ( i == EMusuiCmdToolbarSpeakerOn ) - { - Toolbar()->SetItemDimmed( - EMusuiCmdToolbarSpeakerOn, - dimAudioRouting, - ETrue ); - } - else if ( i == EMusuiCmdToolbarSpeakerOff ) - { - Toolbar()->SetItemDimmed( - EMusuiCmdToolbarSpeakerOff, - dimAudioRouting, - ETrue ); - } - else if ( i != aCommand ) - { - Toolbar()->SetItemDimmed( i, iToolbarItemSelected, ETrue ); - } - else - { - // NOP - } - } - - MUS_LOG( "mus: [MUSUI ] <- CMusUiGeneralView::HightlightSelectedToolbarItem" ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiGeneralView::ReplaceToolbarCommand( TInt aOldCommand, - TInt aNewCommand, - TBool aSetNewCommandFocused ) - { - MUS_LOG1( "mus: [MUSUI ] -> CMusUiGeneralView::ReplaceToolbarCommand: %d", - aNewCommand ); - - // Hide the old item: - Toolbar()->HideItem( aOldCommand, ETrue, EFalse ); - // Show new item: - Toolbar()->HideItem( aNewCommand, EFalse, ETrue ); - - TBool dimAudioRouting( iToolbarItemSelected || - !( EventController() && - EventController()->AudioRoutingCanBeChanged() ) ); - - if ( aNewCommand == EMusuiCmdToolbarSpeakerOn || - aNewCommand == EMusuiCmdToolbarSpeakerOff ) - { - // Dim audio routing button if audio routing cannot be changed - Toolbar()->SetItemDimmed( aNewCommand, - dimAudioRouting, - ETrue ); - } - - if ( aSetNewCommandFocused && - !AknLayoutUtils::PenEnabled() ) - { - TRAP_IGNORE( Toolbar()->SetFocusedItemL( aNewCommand ) ); - } - - MUS_LOG1( "mus: [MUSUI ] <- CMusUiGeneralView::ReplaceToolbarCommand: %d", - aNewCommand ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiGeneralView::DismissMenuBar() - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiGeneralView::DismissMenuBar" ); - StopDisplayingMenuBar(); - MUS_LOG( "mus: [MUSUI ] <- CMusUiGeneralView::DismissMenuBar" ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiGeneralView::RefreshAudioRoutingToolbarButton() - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiGeneralView::RefreshAudioRoutingToolbarButton" ) - TBool loudSpeakerEnabled( EventController() && - EventController()->IsLoudSpeakerEnabled() ); - if ( MUS_NO_TOOLBAR ) - { - TRAP_IGNORE( EnableMiddleSoftkeyL( loudSpeakerEnabled ? - R_MUSUI_VIEW_OPS_MSK_IHF_OFF : - R_MUSUI_VIEW_OPS_MSK_IHF_ON ) ); - } - else if ( Toolbar()->IsShown() ) - { - // If toolbar is not shown, it will be refreshed automatically when shown. - TInt focusedItem( Toolbar()->FocusedItem() ); - TBool focusInAudioRouting( focusedItem == EMusuiCmdToolbarSpeakerOff || - focusedItem == EMusuiCmdToolbarSpeakerOn ); - - TBool loudSpeakerEnabled( EventController() && - EventController()->IsLoudSpeakerEnabled() ); - - // Hide old audio routing buttton - Toolbar()->HideItem( loudSpeakerEnabled ? - EMusuiCmdToolbarSpeakerOn : - EMusuiCmdToolbarSpeakerOff, - ETrue, - EFalse ); - - // Show new audio routing button - Toolbar()->HideItem( loudSpeakerEnabled ? - EMusuiCmdToolbarSpeakerOff : - EMusuiCmdToolbarSpeakerOn, - EFalse, - ETrue ); - - // Dim new audio routing button if audio routing cannot be changed - // or when some button is selected - TBool dimAudioRouting( iToolbarItemSelected || - !( EventController() && - EventController()->AudioRoutingCanBeChanged() ) ); - - Toolbar()->SetItemDimmed( loudSpeakerEnabled ? - EMusuiCmdToolbarSpeakerOff : - EMusuiCmdToolbarSpeakerOn, - dimAudioRouting, - ETrue ); - - // If audio routing button has been focused, focus also the new button - // if it is not dimmed - if ( focusInAudioRouting && - !dimAudioRouting && - !AknLayoutUtils::PenEnabled() ) - { - TRAP_IGNORE( Toolbar()->SetFocusedItemL( loudSpeakerEnabled ? - EMusuiCmdToolbarSpeakerOff : - EMusuiCmdToolbarSpeakerOn ) ) - } - - - } - - MUS_LOG( "mus: [MUSUI ] <- CMusUiGeneralView::RefreshAudioRoutingToolbarButton" ) - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiGeneralView::UpdateSessionTime( const TDesC& aSessionTime ) - { - MUS_LOG_TDESC( "mus: [MUSUI ] -> CMusUiGeneralView::UpdateSessionTime: ", - aSessionTime ); - - TRAPD( err, MusAppUi()->MusStatusPane()->SetLeftLabelL( aSessionTime ) ); - if ( err != KErrNone ) - { - EventController()->HandleError( err ); - } - - MUS_LOG( "mus: [MUSUI ] <- CMusUiGeneralView::UpdateSessionTime" ); - } - - -// ----------------------------------------------------------------------------- -// takes care of view command handling -// ----------------------------------------------------------------------------- -// -void CMusUiGeneralView::HandleCommandL( TInt aCommand ) - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiGeneralView::HandleCommandL" ); - - EventControllerL().HandleCommandL( aCommand ); - - MUS_LOG( "mus: [MUSUI ] <- CMusUiGeneralView::HandleCommandL" ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -CMusUiEventController& CMusUiGeneralView::EventControllerL() const - { - __ASSERT_ALWAYS( EventController(), User::Leave( KErrNotFound ) ); - - return *EventController(); - } - - -// ----------------------------------------------------------------------------- -// Called when focus event occurs. Timer is started once coming to foreground -// as often in such case we receive burst of foreground/background events. -// Timer is used to filter that burst and to determine the final condition. -// ----------------------------------------------------------------------------- -// -void CMusUiGeneralView::HandleForegroundEventL( TBool aForeground, TBool aExit ) - { - MUS_LOG1( "mus: [MUSUI ] -> CMusUiGeneralView::HandleForegroundEventL: %d", - aForeground ); - - SetCurrentFgBgEvent( ( aForeground ? EMusFgEvent : EMusBgEvent ) ); - iCurrentExitSetting = aExit; - - if ( !iFgBgTimer->IsActive() ) - { - if ( aForeground ) - { - MUS_LOG( "mus: [MUSUI ] delayed to fg" ); - } - else - { - DoBackgroundEventL( iCurrentExitSetting ); - MUS_LOG( "mus: [MUSUI ] <- CMusUiGeneralView::HandleForegroundEventL,\ -immediately to bg" ); - return; - } - } - - iFgBgTimer->After( KMusFgBgEventFiltering ); - - MUS_LOG( "mus: [MUSUI ] <- CMusUiGeneralView::HandleForegroundEventL" ); - } - - -// ----------------------------------------------------------------------------- -// From MMusUiActiveTimerObserver -// ----------------------------------------------------------------------------- -// -void CMusUiGeneralView::TimerComplete( CMusUiActiveTimer* aTimer ) - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiGeneralView::TimerComplete" ); - - if ( aTimer == iSessionEndTimer ) - { - MUS_LOG( "mus: [MUSUI ] Close application because of going \ -in background" ); - - TRAP_IGNORE( EventControllerL().HandleExitL() ) - } - else - { - TRAP_IGNORE( CompleteForegroundEventL() ) - } - - MUS_LOG( "mus: [MUSUI ] <- CMusUiGeneralView::TimerComplete" ); - } - - -// ----------------------------------------------------------------------------- -// From MEikMenuObserver, Called by framework before constructing menupane. -// Initializes menu items common to all sharing types. -// ----------------------------------------------------------------------------- -// -void CMusUiGeneralView::DynInitMenuPaneL( TInt aResourceId, - CEikMenuPane* aMenuPane ) - { - MUS_LOG1( "mus: [MUSUI ] -> CMusUiGeneralView::DynInitMenuPaneL [%d]", - aResourceId ); - - if ( aResourceId == R_MUSUI_VIEW_MENU ) - { - - // Delete Single session items: - aMenuPane->DeleteMenuItem( EMusuiCmdViewShareVideo ); - aMenuPane->DeleteMenuItem( EMusuiCmdViewShareImage ); - aMenuPane->DeleteMenuItem( EMusuiCmdViewShareLive ); - if ( MUS_NO_TOOLBAR ) - { - aMenuPane->DeleteMenuItem( EventControllerL().IsMicMutedL() ? - EMusuiCmdViewMicrophoneMute : - EMusuiCmdViewMicrophoneUnmute ); - } - else - { - aMenuPane->DeleteMenuItem( EMusuiCmdViewMicrophoneMute ); - aMenuPane->DeleteMenuItem( EMusuiCmdViewMicrophoneUnmute ); - } - - if ( !FeatureManager::FeatureSupported( KFeatureIdHelp ) ) - { - aMenuPane->DeleteMenuItem( EAknCmdHelp ); - } - } - - MUS_LOG( "mus: [MUSUI ] <- CMusUiGeneralView::DynInitMenuPaneL" ); - } - - -// ----------------------------------------------------------------------------- -// CMusUiGeneralView::DoActivateL -// From CAknView, Gets called from framework when activating this view -// ----------------------------------------------------------------------------- -void CMusUiGeneralView::DoActivateL( const TVwsViewId& /*aPrevViewId*/, - TUid /*aCustomMessageId*/, - const TDesC8& /*aCustomMessage*/ ) - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiGeneralView::DoActivateL()" ) - - - MusAppUi()->MusStatusPane()->ClearNaviPaneL(); - MusAppUi()->MusStatusPane()->SetTitleFromResourceL( - R_MUS_LIVE_SHARING_VIEW_TITLE ); - - iIncallBubble->SetIncallBubbleAllowedInUsualL( EFalse ); - - /* Draw the skin background in the client rectangle area.*/ - if ( !iBackgroundContainer ) - { - /* Construct background container with clientrect area and - * Ordinal position of 0 ie highest so that it draws the initial - * skin background first. - */ - iBackgroundContainer = - CMusUiBackgroundViewContainer::NewL( ClientRect(), 0 ); - /* Add container to view stack so that it get view events */ - AppUi()->AddToViewStackL( *this, iBackgroundContainer ); - } - else - { - /* Set the windows ordinal position to highest ie 0, - * so that background gets priority and drawn first. - */ - iBackgroundContainer->SetOrdinalPosition( 0 ); - } - /* Draw the skin background now */ - iBackgroundContainer->DrawNow(); - - MUS_LOG( "mus: [MUSUI ] <- CMusUiGeneralView::DoActivateL()" ) - } - - -// ----------------------------------------------------------------------------- -// CMusUiGeneralView::DoDeactivate -// From AknView, Gets called from framework when deactivating this view -// ----------------------------------------------------------------------------- -void CMusUiGeneralView::DoDeactivate() - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiGeneralView::DoDeactivate()" ) - if ( iBackgroundContainer ) - { - AppUi()->RemoveFromViewStack( *this, iBackgroundContainer ); - delete iBackgroundContainer; - iBackgroundContainer = NULL; - } - MUS_LOG( "mus: [MUSUI ] <- CMusUiGeneralView::DoDeactivate()" ) - } - - -// ----------------------------------------------------------------------------- -// Asynchronous completion of last fg/bg condition. -// ----------------------------------------------------------------------------- -// -void CMusUiGeneralView::CompleteForegroundEventL() - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiGeneralView::CompleteForegroundEventL()" ) - - if ( iCurrentFgBgEvent == EMusFgEvent ) - { - DoForegroundEventL(); - } - else if ( iCurrentFgBgEvent == EMusBgEvent && EventControllerL().IsForeground() ) - { - // Bg handling when already at bg would cause problems in state - // restoring phase when coming back to fg. Easiest to deal with that - // at this level. - DoBackgroundEventL( iCurrentExitSetting ); - } - - SetCurrentFgBgEvent( EMusFgBgEventNone ); - - MUS_LOG( "mus: [MUSUI ] <- CMusUiGeneralView::CompleteForegroundEventL()" ) - } - - -// ----------------------------------------------------------------------------- -// Complete foreground event. -// ----------------------------------------------------------------------------- -// -void CMusUiGeneralView::DoForegroundEventL() - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiGeneralView::DoForegroundEventL()" ) - - RefreshView(); - - iSessionEndTimer->Cancel(); - - EventControllerL().HandleForegroundEventL( ETrue ); - iIncallBubble->SetIncallBubbleAllowedInUsualL( EFalse ); - - MUS_LOG( "mus: [MUSUI ] <- CMusUiGeneralView::DoForegroundEventL()" ) - } - - -// ----------------------------------------------------------------------------- -// Complete background event. -// ----------------------------------------------------------------------------- -// -void CMusUiGeneralView::DoBackgroundEventL( TBool aExit ) - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiGeneralView::DoBackgroundEventL()" ) - - if ( aExit ) - { - MUS_LOG( "mus: [MUSUI ] Go to background, \ - wait some seconds before closing..." ); - iSessionEndTimer->After( KBackgroundIntervalForClose ); - } - if ( !MusAppUi()->ExitValue() ) - { - MUS_LOG( "mus: [MUSUI ] Calling EventControllerL()" ); - EventControllerL().HandleForegroundEventL( EFalse ); - // If exiting, next will be called by destructor - iIncallBubble->SetIncallBubbleAllowedInUsualL( ETrue ); - } - - SetCurrentFgBgEvent( EMusFgBgEventNone ); - - MUS_LOG( "mus: [MUSUI ] <- CMusUiGeneralView::DoBackgroundEventL()" ) - } - -// ----------------------------------------------------------------------------- -// Set current fg/bg condition. -// ----------------------------------------------------------------------------- -// -void CMusUiGeneralView::SetCurrentFgBgEvent( TMusFgBgEventType aEventType ) - { - MUS_LOG1( "mus: [MUSUI ] -> CMusUiGeneralView::SetCurrentFgBgEvent() event:%d", - aEventType ) - - iCurrentFgBgEvent = aEventType; - } - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -TBool CMusUiGeneralView::OperatorSpecificFunctionality() const - { - return iOperatorSpecificFunctionality; - } - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -TInt CMusUiGeneralView::ToolbarPlaceHolderHeight() const - { - TInt toolbarPlaceHolderHeight( 0 ); - CAknAppUiBase::TAppUiOrientation orientation = MusAppUi()->AppOrientation(); - if ( !Toolbar()->IsShown() && - orientation == CAknAppUiBase::EAppUiOrientationPortrait && - AknLayoutUtils::PenEnabled() ) - { - // In touch UI in portrait mode the toolbar - // fills the whole lower part of the screen - toolbarPlaceHolderHeight = Toolbar()->Size().iHeight; - } - return toolbarPlaceHolderHeight; - } - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -TInt CMusUiGeneralView::ToolbarPlaceHolderWidth() const - { - TInt toolbarPlaceHolderWidth( 0 ); - CAknAppUiBase::TAppUiOrientation orientation = MusAppUi()->AppOrientation(); - if ( !Toolbar()->IsShown() && - orientation == CAknAppUiBase::EAppUiOrientationLandscape && - AknLayoutUtils::PenEnabled() ) - { - // In touch UI in EAppUiOrientationLandscape mode the toolbar - // fills the whole lower part of the screen - toolbarPlaceHolderWidth = Toolbar()->Size().iWidth; - } - return toolbarPlaceHolderWidth; - } - -// ----------------------------------------------------------------------------- -// Increase/Decrease background container ordinal so that other controls -// can preceed background -// ----------------------------------------------------------------------------- -// -void CMusUiGeneralView::UpdateBackgroundOrdinalPosition( TBool aUp ) - { - // If there is no background container then do not care - if ( iBackgroundContainer ) - { - iBackgroundContainer->UpdateOrdinalPositionValue( aUp ); - } - } - -// ----------------------------------------------------------------------------- -// Do refresh for background container only if display is disabled. -// Refreshing if display is enabled would cause bg container -// to draw itself on top of display area, making it invisible. -// ----------------------------------------------------------------------------- -// -void CMusUiGeneralView::RefreshBackgroundContainer() - { - if ( !iBackgroundContainer ) - { - return; - } - TBool displayEnabled( EFalse ); - if ( EventController() ) - { - TRAP_IGNORE( displayEnabled = EventController()->IsDisplayEnabledL() ) - } - - if ( !displayEnabled ) - { - MUS_LOG( "mus: [MUSUI ] <-> CMusUiGeneralView::RefreshBackgroundContainer()" ) - iBackgroundContainer->SetRect( ClientRect() ); - } - } - -// end of file - - - - - - diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshui/src/musuiinvitationquery.cpp --- a/mmsharing/mmshui/src/musuiinvitationquery.cpp Thu Aug 19 09:51:39 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,193 +0,0 @@ -/* -* 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: The MUS application's UI class. -* -*/ - - -#include "musuiinvitationquery.h" -#include "musuiinvitationqueryobserver.h" -#include "musuidefinitions.h" -#include "musuiactivetimer.h" -#include "muslogger.h" -#include "musunittesting.h" - -#include -#include -#include -#include - - -// ----------------------------------------------------------------------------- -// Two phase constructor -// ----------------------------------------------------------------------------- -// -CMusUiInvitationQuery* CMusUiInvitationQuery::NewL( - MMusUiInvitationQueryObserver& aView ) - { - CMusUiInvitationQuery* self - = new( ELeave ) CMusUiInvitationQuery( aView ); - - CleanupStack::PushL( self ); - self->ConstructL(); - CleanupStack::Pop( self ); - - return self; - } - - -// ----------------------------------------------------------------------------- -// Destructor -// ----------------------------------------------------------------------------- -// -CMusUiInvitationQuery::~CMusUiInvitationQuery() - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiInvitationQuery::~CMusUiInvitationQuery" ); - - delete iGlobalQuery; - delete iPrompt; - - delete iActiveTimer; - - MUS_LOG( "mus: [MUSUI ] <- CMusUiInvitationQuery::~CMusUiInvitationQuery" ); - } - - -// ----------------------------------------------------------------------------- -// Constructor -// ----------------------------------------------------------------------------- -// -CMusUiInvitationQuery::CMusUiInvitationQuery( MMusUiInvitationQueryObserver& aView ) - : CActive( EPriorityNormal ), iObserver( aView ) - { - CActiveScheduler::Add( this ); - } - - -// ----------------------------------------------------------------------------- -// Second phase constructor -// ----------------------------------------------------------------------------- -// -void CMusUiInvitationQuery::ConstructL() - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiInvitationQuery::ConstructL" ); - - iGlobalQuery = CAknGlobalConfirmationQuery::NewL(); - iPrompt = NULL; - - iActiveTimer = CMusUiActiveTimer::NewL( this ); - - MUS_LOG( "mus: [MUSUI ] <- CMusUiInvitationQuery::ConstructL" ); - } - - -// ----------------------------------------------------------------------------- -// Shows the confirmation query dialog -// ----------------------------------------------------------------------------- -// -void CMusUiInvitationQuery::ShowL( const TDesC& aContact ) - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiInvitationQuery::ShowL" ); - if ( iPrompt ) - { - delete iPrompt; - iPrompt = NULL; - } - - iPrompt = StringLoader::LoadL( - R_MUS_RECEIVE_VIEW_NOTE_INCOMING_VIDEO_REQUEST, - aContact ); - if ( iActiveTimer->IsActive() ) - { - // If Timer is active already , dont know what to do - // It might mean a invitation ongoing. - } - else - { - iActiveTimer->After( KMusInviteExpireTimeout * KMusOneSecond ); - iGlobalQuery->ShowConfirmationQueryL( - iStatus, - *iPrompt, - R_AVKON_SOFTKEYS_YES_NO ); - SetActive(); - } - - MUS_LOG( "mus: [MUSUI ] <- CMusUiInvitationQuery::ShowL" ); - } - - -// ----------------------------------------------------------------------------- -// Timer Expiry event. -// ----------------------------------------------------------------------------- -// -void CMusUiInvitationQuery::TimerComplete( CMusUiActiveTimer* /*aTimer*/ ) - { - Cancel(); - TRAP_IGNORE( iObserver.InvitationRejectedL() ); - } - - -// ----------------------------------------------------------------------------- -// CActive RunL implementation. -// ----------------------------------------------------------------------------- -// -void CMusUiInvitationQuery::RunL() - { - MUS_LOG1( "mus: [MUSUI ] -> CMusUiInvitationQuery::RunL [%d]", iStatus.Int() ); - iActiveTimer->Cancel(); - if ( iStatus == EAknSoftkeyYes ) - { - MUS_LOG( "mus: [MUSUI ] CMusUiInvitationQuery::RunL: if" ); - iObserver.InvitationAcceptedL(); - } - else // EAknSoftkeyNo - { - MUS_LOG( "mus: [MUSUI ] CMusUiInvitationQuery::RunL: else" ); - iObserver.InvitationRejectedL(); - } - Cancel(); - MUS_LOG( "mus: [MUSUI ] <- CMusUiInvitationQuery::RunL" ); - } - - -// ----------------------------------------------------------------------------- -// Cancel() will call this -// ----------------------------------------------------------------------------- -// -void CMusUiInvitationQuery::DoCancel() - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiInvitationQuery::DoCancel" ); - iGlobalQuery->CancelConfirmationQuery(); - MUS_LOG( "mus: [MUSUI ] <- CMusUiInvitationQuery::DoCancel" ); - } - - -// ----------------------------------------------------------------------------- -// If RunL() leaves should be handled here. -// ----------------------------------------------------------------------------- -// -TInt CMusUiInvitationQuery::RunError( TInt aError ) - { - MUS_LOG1( "mus: [MUSUI ] -> CMusUiInvitationQuery::RunError [%d]", aError ); - - // Handle the error fully here. No cleanup needed in this case. - // default active scheduler will panic by calling Error() if - // it not handled here. so return KErrNone. - aError = KErrNone; - - return aError; - } - - -// end of file diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshui/src/musuilevelindicator.cpp --- a/mmsharing/mmshui/src/musuilevelindicator.cpp Thu Aug 19 09:51:39 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,490 +0,0 @@ -/* -* Copyright (c) 2003, 2004 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: Class for displaying level indicator icons -* -*/ - - -// USER -#include "musuilevelindicator.h" -#include "musuilevelindicatorobserver.h" -#include "muslogger.h" -#include "musresourcefinderutil.h" -#include "musuiactivetimer.h" -#include -#include - -// SYSTEM -#include -#include -#include -#include -#include -#include -#include -#include - - -// CONSTANTS -const TInt KMusUiLevelDisableTime = 4000000; -const TInt KMusUiSliderEventDelay = 300000; - - -_LIT( KMyBitmapRomFile, "Z:\\resource\\apps\\musuiicons.mif" ); -//_LIT( KMyBitmapRamFile, "C:\\resource\\apps\\musuiicons.mif" ); - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -CMusUiLevelIndicator::CMusUiLevelIndicator( - TInt aMinLevel, - TInt aMaxLevel, - MMusUiLevelIndicatorObserver* aObserver ) - : iMinLevel( aMinLevel ), - iMaxLevel( aMaxLevel ), - iObserver( aObserver ) - { - MUS_LOG( "mus: mus: [MUSUI ] -> CMusUiLevelIndicator::CMusUiLevelIndicator()" ); - // pass - MUS_LOG( "mus: [MUSUI ] <- CMusUiLevelIndicator::CMusUiLevelIndicator()" ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -CMusUiLevelIndicator* CMusUiLevelIndicator::NewL( - TAknOrientation aLayout, - TInt aMinLevel, - TInt aMaxLevel, - CCoeControl* aParent, - const TRect& aRect, - MMusUiLevelIndicatorObserver* aObserver ) - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiLevelIndicator::NewL()" ); - - CMusUiLevelIndicator* self = NewLC( aLayout, - aMinLevel, - aMaxLevel, - aParent, - aRect, - aObserver ); - CleanupStack::Pop( self ); - - MUS_LOG( "mus: [MUSUI ] <- CMusUiLevelIndicator::NewL()" ); - - return self; - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -CMusUiLevelIndicator* CMusUiLevelIndicator::NewLC( - TAknOrientation aLayout, - TInt aMinLevel, - TInt aMaxLevel, - CCoeControl* aParent, - const TRect& aRect, - MMusUiLevelIndicatorObserver* aObserver ) - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiLevelIndicator::NewLC()" ); - - CMusUiLevelIndicator* self = new ( ELeave ) CMusUiLevelIndicator( - aMinLevel, - aMaxLevel, - aObserver ); - CleanupStack::PushL( self ); - self->ConstructL( aLayout, aParent, aRect ); - - MUS_LOG( "mus: [MUSUI ] <- CMusUiLevelIndicator::NewLC()" ); - - return self; - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -CMusUiLevelIndicator::~CMusUiLevelIndicator() - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiLevelIndicator::~CMusUiLevelIndicator()" ); - - delete iSlider; - delete iSliderEventTimer; - delete iDisableLevelTimer; - - MUS_LOG( "mus: [MUSUI ] <- CMusUiLevelIndicator::~CMusUiLevelIndicator()" ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiLevelIndicator::ConstructL( TAknOrientation aLayout, - CCoeControl* aParent, - const TRect& aRect ) - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiLevelIndicator::ConstructL()" ); - - SetRect(aRect); - - if( iMinLevel > iMaxLevel ) - { - User::Leave( KErrArgument ); - } - - iDisableLevelTimer = CMusUiActiveTimer::NewL( this ); - iSliderEventTimer = CMusUiActiveTimer::NewL( this ); - - iSlider = new CAknSlider(); - - TResourceReader reader; - - if( aLayout == EAknOrientationHorizontal ) - { - iEikonEnv->CreateResourceReaderLC( reader, R_MUS_SLIDER_HORIZONTAL ); - MUS_LOG( "mus: [MUSUI ] -> ConstructFromResourceL" ); - iSlider->ConstructFromResourceL( aParent, 0, reader); - CleanupStack::PopAndDestroy(); // reader - iSlider->SetRange( iMinLevel, iMaxLevel ); - iSlider->SetRect( aRect ); - } - else - { - iEikonEnv->CreateResourceReaderLC( reader, R_MUS_SLIDER_VERTICAL ); - iSlider->ConstructFromResourceL( aParent, 0 ,reader); - CleanupStack::PopAndDestroy(); // reader - TRect rect = TRect( TPoint( (aRect.iBr.iX - iSlider->Size().iWidth),(aRect.iTl.iY) ),TSize( iSlider->Size() ) ); - iSlider->SetRect(rect); - - /* Draw the Min and Max Zoom */ - TParse parse; - parse.Set( KMyBitmapRomFile, &KDC_APP_RESOURCE_DIR, NULL ); - CFbsBitmap* bitmap = NULL; - CFbsBitmap* mask = NULL; - AknsUtils::CreateIconL(AknsUtils::SkinInstance(), - KAknsIIDQsnBgScreen, - bitmap, - mask, - parse.FullName(), - EMbmMusuiiconsQgn_indi_browser_tb_zoom_in, - EMbmMusuiiconsQgn_indi_browser_tb_zoom_in_mask); - iSlider->SetGraphics(CAknSlider::EElemEmptyLeftCap,bitmap,mask); - AknsUtils::CreateIconL(AknsUtils::SkinInstance(), - KAknsIIDQsnBgScreen, - bitmap, - mask, - parse.FullName(), - EMbmMusuiiconsQgn_indi_browser_tb_zoom_out, - EMbmMusuiiconsQgn_indi_browser_tb_zoom_out_mask); - iSlider->SetGraphics(CAknSlider::EElemEmptyRightCap,bitmap,mask); - } - - iSlider->HandleResourceChange( - KEikMessageCaptionedControlEditableStateChange ); - iSlider->SetObserver( this ); - iSlider->SetPositionIndicators( CAknSlider::EPosMarker ); - iSlider->SetTicksEnabled( EFalse ); - iSlider->EnableDrag(); - iSlider->SetStepSize( 1 ); - - MUS_LOG( "mus: [MUSUI ] <- CMusUiLevelIndicator::ConstructL()" ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiLevelIndicator::SetLevelL( TMusUiIndicatorType aType, - TInt aLevel, - TBool aUseTimer ) - { - MUS_LOG1( "mus: [MUSUI ] -> CMusUiLevelIndicator::SetLevelL( %d ) ", - aLevel ); - if ( aLevel >= iMinLevel && aLevel <= iMaxLevel ) - { - switch(aType) - { - case EMusUiIndicatorTypeZoom: - { - iZoomLevel=aLevel; - break; - } - case EMusUiIndicatorTypeBrightness: - { - iBrightnessLevel=aLevel; - break; - } - case EMusUiIndicatorTypeDuration: - { - iDurationLevel=aLevel; - break; - } - } - } - - // Set it to the slider - if ( !iSliderEventTimer->IsActive() ) - { - iSlider->SetValueL( aLevel ); - } - - DrawNow(); - - if ( aUseTimer ) - { - iDisableLevelTimer->After( KMusUiLevelDisableTime ); - } - - MUS_LOG( "mus: [MUSUI ] <- CMusUiLevelIndicator::SetLevelL()" ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -TInt CMusUiLevelIndicator::GetLevel( TMusUiIndicatorType aType ) - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiLevelIndicator::GetLevel()" ); - - TInt ret=KErrNotFound; - - switch(aType) - { - case EMusUiIndicatorTypeZoom: - { - ret=iZoomLevel; - break; - } - case EMusUiIndicatorTypeBrightness: - { - ret=iBrightnessLevel; - break; - } - - case EMusUiIndicatorTypeDuration: - { - ret = iSlider->Value(); - break; - } - } - - MUS_LOG( "mus: [MUSUI ] <- CMusUiLevelIndicator::GetLevel()" ); - return ret; - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiLevelIndicator::SetRange( TInt aMinLevel, - TInt aMaxLevel, - TBool aUseTimer) - { - MUS_LOG2( "mus: [MUSUI ] -> CMusUiLevelIndicator::SetRange( %d - %d ) ", - aMinLevel, aMaxLevel ); - - if( aMinLevel < aMaxLevel ) - { - iMinLevel = aMinLevel; - iMaxLevel = aMaxLevel; - iSlider->SetRange( iMinLevel, iMaxLevel ); - } - - if ( aUseTimer ) - { - iDisableLevelTimer->After( KMusUiLevelDisableTime ); - } - - MUS_LOG( "mus: [MUSUI ] <- CMusUiLevelIndicator::SetRange()" ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiLevelIndicator::SetIndicatorType( TMusUiIndicatorType aType ) - { - iIndicatorType = aType; - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -TMusUiIndicatorType CMusUiLevelIndicator::GetIndicatorType() - { - return iIndicatorType; - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiLevelIndicator::SizeChanged() - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiLevelIndicator::SizeChanged()" ); - - if ( iSlider ) - { - iSlider->SetRect( Rect() ); - } - - DrawNow(); - - MUS_LOG( "mus: [MUSUI ] <- CMusUiLevelIndicator::SizeChanged()" ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -void CMusUiLevelIndicator::Draw( const TRect& aRect ) const - { - CWindowGc& gc = SystemGc(); - gc.SetBrushColor( iEikonEnv->ControlColor( EColorWindowBackground, *this ) ); - gc.SetBrushStyle( CGraphicsContext::ESolidBrush ); - gc.Clear( aRect ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -TInt CMusUiLevelIndicator::CountComponentControls() const - { - return 1; // return nbr of controls inside this container - } - - -// ----------------------------------------------------------------------------- -// Called by framework to retrieve the control specified by index. -// ----------------------------------------------------------------------------- -// -CCoeControl* CMusUiLevelIndicator::ComponentControl( TInt aIndex ) const - { - switch ( aIndex ) - { - case 0: - { - return iSlider; - } - default: - { - return NULL; - } - } - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiLevelIndicator::HandleResourceChange( TInt aType ) - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiLevelIndicator::HandleResourceChange()" ); - - if( aType==KEikDynamicLayoutVariantSwitch ) - { - if ( iSlider ) // Force a re-layout - { - iSlider->SetRect( Rect() ); - } - } - - DrawNow(); - - MUS_LOG( "mus: [MUSUI ] <- CMusUiLevelIndicator::HandleResourceChange()" ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiLevelIndicator::HandleControlEventL( CCoeControl* aControl, - TCoeEvent aEventType) - { - // No logging due to huge amount of events - - if ( aControl == iSlider && - aEventType == MCoeControlObserver::EEventStateChanged ) - { - // Restart the disable timer if running - if ( iDisableLevelTimer->IsActive() ) - { - iDisableLevelTimer->After( KMusUiLevelDisableTime ); - } - - if ( iObserver ) - { - iSliderEventTimer->After( KMusUiSliderEventDelay ); - } - } - - // No logging due to huge amount of events - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiLevelIndicator::TimerComplete( CMusUiActiveTimer* aTimer ) - { - if ( aTimer == iSliderEventTimer ) - { - MUS_LOG( "mus: [MUSUI ] Slider event timer complete" ); - - if ( iObserver ) - { - iObserver->IndicatorLevelChanged( iSlider->Value() ); - } - } - else if ( aTimer == iDisableLevelTimer ) - { - MUS_LOG( "mus: [MUSUI ] Slider visibility timer complete" ); - - if ( iObserver ) - { - iObserver->SetLevelIndicatorVisibility( EFalse ); - } - } - else - { - // NOP - } - } - - - -// End of File - - - diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshui/src/musuilivesharingcontroller.cpp --- a/mmsharing/mmshui/src/musuilivesharingcontroller.cpp Thu Aug 19 09:51:39 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,991 +0,0 @@ -/* -* 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: Application's UI class. -* -*/ - - - -#include "musuilivesharingcontroller.h" -#include "musuicallbackservice.h" -#include "musuieventobserver.h" -#include "musuisharingobserver.h" -#include "musuisendobserver.h" -#include "musuilivesharingobserver.h" -#include "musuidialogutil.h" -#include "musenglivesession.h" -#include "musuiresourcehandler.h" -#include "musui.hrh" -#include "mussettings.h" -#include "mussettingskeys.h" -#include "muslogger.h" // debug logging -#include "musuigeneralview.h" -#include "musuiactivetimer.h" - -#include -#include -#include - -#include - -using namespace NMusResourceApi; -using namespace MusSettingsKeys; - -const TInt KMusUiPauseResumeGuardPeriod = 500000; - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -CMusUiLiveSharingController* CMusUiLiveSharingController::NewL( - MMusUiEventObserver& aEventObserver, - MMusUiSharingObserver& aSharingObserver, - MMusUiSendObserver& aSendObserver, - MMusUiLiveSharingObserver& aLiveObserver, - const TRect& aRect ) - { - CMusUiLiveSharingController* self = - new( ELeave ) CMusUiLiveSharingController( aEventObserver, - aSharingObserver, - aSendObserver, - aLiveObserver ); - CleanupStack::PushL( self ); - self->ConstructL( aRect ); - CleanupStack::Pop( self ); - return self; - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -CMusUiLiveSharingController::~CMusUiLiveSharingController() - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiLiveSharingController::~CMusUiLiveSharingController" ); - delete iSession; - delete iPauseResumeGuardTimer; - MUS_LOG( "mus: [MUSUI ] <- CMusUiLiveSharingController::~CMusUiLiveSharingController" ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -CMusUiLiveSharingController::CMusUiLiveSharingController( - MMusUiEventObserver& aEventObserver, - MMusUiSharingObserver& aSharingObserver, - MMusUiSendObserver& aSendObserver, - MMusUiLiveSharingObserver& aLiveObserver ) - : CMusUiSendController( aEventObserver, aSharingObserver, aSendObserver ), - iLiveObserver( aLiveObserver ) - { - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiLiveSharingController::ConstructL( const TRect& aRect ) - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiLiveSharingController::ConstructL" ); - - CMusUiSendController::ConstructL(); // Base class construction - - iSession = CMusEngLiveSession::NewL( VideoFileNameL(), - aRect, - *this, - *this, - *this, - iSipProfileId ); - - iSession->SetAudioRoutingObserver( this ); - iSession->SetVolumeChangeObserver( this ); - - if ( iSession->AudioRoutingCanBeChanged() && !iSession->IsAudioRoutingHeadset() ) - { - iSession->EnableLoudspeakerL( ELoudspeakerEnabled, ETrue ); - } - - if ( iVideoCodec && iVideoCodec->Length() > 0 ) - { - iSession->SetSupportedVideoCodecListL( *iVideoCodec ); - } - - iPauseResumeGuardTimer = CMusUiActiveTimer::NewL( NULL ); - - MUS_LOG( "mus: [MUSUI ] <- CMusUiLiveSharingController::ConstructL" ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiLiveSharingController::PlayL() - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiLiveSharingController::PlayL" ); - - CMusUiSendController::PlayL(); - iEventObserver.ShowNaviPaneIconL( - (!iDiskFull) ? RecordIcon() : EMusUiNaviIconRecordNot ); - - MUS_LOG( "mus: [MUSUI ] <- CMusUiLiveSharingController::PlayL" ); - } - - -// ----------------------------------------------------------------------------- -// When orientation changed , Camera instances has to be recreated inorder -// to receive proper orientated frames. -// ----------------------------------------------------------------------------- -// -void CMusUiLiveSharingController::RefreshCameraOrientationL() - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiLiveSharingController::RefreshCameraOrientationL" ); - - if ( EngineSession() ){ - EngineSession()->RefreshOrientationL(); - } - - MUS_LOG( "mus: [MUSUI ] <- CMusUiLiveSharingController::RefreshCameraOrientationL" ); - } - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiLiveSharingController::PauseL() - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiLiveSharingController::PauseL" ); - - CMusUiSendController::PauseL(); - iEventObserver.ShowNaviPaneIconL( EMusUiNaviIconPause ); - - MUS_LOG( "mus: [MUSUI ] <- CMusUiLiveSharingController::PauseL" ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiLiveSharingController::DeleteEngineSession() - { - CMusUiSendController::DeleteEngineSession(); - if ( iSession && iSession->IsAudioRoutingLoudSpeaker() ) - { - iShowDialog = ETrue; - } - delete iSession; - iSession = NULL; - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -CMusEngMceOutSession* CMusUiLiveSharingController::EngineOutSession() - { - return iSession; // Live session is CMusEngMceOutSession - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiLiveSharingController::InviteL( const TDesC& aRecipient ) - { - MUS_LOG_TDESC( "mus: [MUSUI ] -> CMusUiLiveSharingController::InviteL:", - aRecipient ); - - // Registration must not be pending in this phase - __ASSERT_ALWAYS( !iSipRegistrationPending, - iEventObserver.HandleError( KErrNotReady ) ); - - delete iAddress; - iAddress = NULL; - iAddress = aRecipient.AllocL(); - - - TRAPD( err, iSession->InviteL( aRecipient ) ); - MUS_LOG( "mus: [MUSUI ] CMusUiLiveSharingController::InviteL: After TRAPD" ); - - // If address is in wrong format, Manual Address Entry Dialog - // is displayed - if ( err != KErrNone ) - { - // Display the error message - DismissWaitDialog(); - if ( !ExitOccured() ) - { - MusUiDialogUtil::ShowGlobalErrorDialogL( - R_MUS_LIVE_SHARING_VIEW_NOTE_INVITE_ERROR ); - } - if ( ( ++iTriedInvitations < 2 ) && ( err == KErrArgument ) ) - { - MUS_LOG( "mus: [MUSUI ] CMusUiLiveSharingController::InviteL: iTriedInvitations < 2" ); - iManualAddressTyped = ETrue; - iResourceHandler->RequestKeypadL( ETrue ); - iSendObserver.ManualAddressEntryL( *iRemoteSipAddressProposal ); - return; - } - else - { - MUS_LOG( "mus: [MUSUI ] CMusUiLiveSharingController::InviteL: ++iTriedInvitations > 1" ); - HandleExitL(); - return; - } - } - - SetConnectionInitialized( ETrue ); - - ShowInvitingWaitDialogL(); - - - MUS_LOG( "mus: [MUSUI ] <- CMusUiLiveSharingController::InviteL" ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiLiveSharingController::HandleSliderValueChangeL( TInt aNewLevel ) - { - MUS_LOG1( "mus: [MUSUI ] -> CMusUiLiveSharingController::HandleSliderValueChangeL(%d)", - aNewLevel ) - - __ASSERT_ALWAYS( !ExitOccured(), User::Leave( KErrDied ) ); - __ASSERT_ALWAYS( iConnectionEstablished, User::Leave( KErrNotReady ) ); - - if ( iToolbarZoomSelected ) - { - iSession->SetZoomL( aNewLevel ); - iLiveObserver.SetZoomL( iSession->CurrentZoomL() ); - } - else - { - iSession->SetBrightnessL( aNewLevel ); - iLiveObserver.SetBrightnessL( iSession->CurrentBrightnessL() ); - } - - MUS_LOG( "mus: [MUSUI ] <- CMusUiLiveSharingController::HandleSliderValueChangeL" ) - } - - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiLiveSharingController::OfferToolbarEventL( TInt aCommand ) - { - MUS_LOG1( "mus: [MUSUI ] -> CMusUiLiveSharingController::OfferToolbarEventL [%d]", - aCommand ); - - iLiveObserver.SetZoomVisible( EFalse ); - iLiveObserver.SetBrightnessVisible( EFalse ); - - switch ( aCommand ) - { - case EMusuiCmdToolbarPauseLive: - { - HandleCommandL( EMusuiCmdViewPause ); - HandlePauseResumeInToolbar(); - break; - } - - case EMusuiCmdToolbarUnPauseLive: - { - HandleCommandL( EMusuiCmdViewContinue ); - HandlePauseResumeInToolbar(); - break; - } - case EMusuiCmdToolbarZoom: - { - iToolbarZoomSelected = !iToolbarZoomSelected; - - if ( iToolbarZoomSelected ) - { - iLiveObserver.SetZoomValues( iSession->MinZoomL(), - iSession->MaxZoomL() ); - iLiveObserver.SetZoomL( iSession->CurrentZoomL() ); - } - - iLiveObserver.SetZoomVisible( iToolbarZoomSelected ); - iSharingObserver.HighlightSelectedToolbarItem( EMusuiCmdToolbarZoom ); - - break; - } - case EMusuiCmdToolbarBrightness: - { - iToolbarBrightnessSelected = !iToolbarBrightnessSelected; - - if ( iToolbarBrightnessSelected ) - { - MUS_LOG1( "mus: [MUSUI ] CMusUiLiveSharingController::OfferToolbarEventL: Brightness %d", - iSession->CurrentBrightnessL() ); - - iLiveObserver.SetBrightnessValues( iSession->MinBrightnessL(), - iSession->MaxBrightnessL() ); - - iLiveObserver.SetBrightnessL( iSession->CurrentBrightnessL() ); - } - - iLiveObserver.SetBrightnessVisible( iToolbarBrightnessSelected ); - iSharingObserver.HighlightSelectedToolbarItem( EMusuiCmdToolbarBrightness ); - - break; - } - default: // Not live specific, let the base class handle - { - CMusUiEventController::OfferToolbarEventL( aCommand ); - break; - } - } - MUS_LOG( "mus: [MUSUI ] <- CMusUiLiveSharingController::OfferToolbarEventL" ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiLiveSharingController::HandleCommandL( TInt aCommand ) - { - MUS_LOG1( "mus: [MUSUI ] -> CMusUiLiveSharingController::HandleCommandL [%d]", - aCommand ); - - __ASSERT_ALWAYS( !ExitOccured(), User::Leave( KErrDied ) ); - - switch ( aCommand ) - { - case EMusuiCmdViewPause: - { - UserInitiatedCameraStateChangeL(EFalse); - break; - } - case EMusuiCmdViewContinue: - { - UserInitiatedCameraStateChangeL(ETrue); - break; - } - - case EMusuiCmdViewShareVideo: - { - PauseL(); - // TODO: Change to video sharing - break; - } - case EMusuiCmdViewShareImage: - { - PauseL(); - // TODO: Change to image sharing - break; - } - - case EMusuiCmdToolbarZoom: - { - iToolbarZoomSelected = ETrue; - iToolbarBrightnessSelected = EFalse; - iLiveObserver.SetZoomValues( iSession->MinZoomL(), - iSession->MaxZoomL() ); - iLiveObserver.SetZoomL( iSession->CurrentZoomL() ); - - iLiveObserver.SetZoomVisible( iToolbarZoomSelected ); - break; - } - case EMusuiCmdViewMiddleSoftkeyOk: - { - HandleMiddleSoftkeyOkL(); - break; - } - - case EMusuiCmdViewZoom: - { - ZoomL(); - break; - } - - case EMusuiCmdViewZoomIn: - { - iLiveObserver.SetZoomVisible( MUS_NO_TOOLBAR ? iZoomSelected : iToolbarZoomSelected ); - iSession->ZoomInL(); - iLiveObserver.SetZoomL( iSession->CurrentZoomL() ); - break; - } - case EMusuiCmdViewZoomOut: - { - iLiveObserver.SetZoomVisible( MUS_NO_TOOLBAR ? iZoomSelected : iToolbarZoomSelected ); - iSession->ZoomOutL(); - iLiveObserver.SetZoomL( iSession->CurrentZoomL() ); - break; - } - - case EMusuiCmdToolbarBrightness: - { - iToolbarZoomSelected = EFalse; - iToolbarBrightnessSelected = ETrue; - iLiveObserver.SetBrightnessValues( iSession->MinBrightnessL(), - iSession->MaxBrightnessL() ); - iLiveObserver.SetBrightnessL( iSession->CurrentBrightnessL() ); - - iLiveObserver.SetBrightnessVisible( iToolbarBrightnessSelected ); - break; - } - case EMusuiCmdViewBrightness: - { - BrightnessL(); - break; - } - - case EMusuiCmdViewIncreaseBrightness: - { - iLiveObserver.SetBrightnessVisible( MUS_NO_TOOLBAR ? iBrightnessSelected : iToolbarBrightnessSelected ); - iSession->IncreaseBrightnessL(); - iLiveObserver.SetBrightnessL( iSession->CurrentBrightnessL() ); - break; - } - case EMusuiCmdViewDecreaseBrightness: - { - iLiveObserver.SetBrightnessVisible( MUS_NO_TOOLBAR ? iBrightnessSelected : iToolbarBrightnessSelected ); - iSession->DecreaseBrightnessL(); - iLiveObserver.SetBrightnessL( iSession->CurrentBrightnessL() ); - break; - } - - case EMusuiCmdRecord: - { - // Show toolbar hidden while showing options menu - iEventObserver.SetToolbarVisibility( ETrue ); - - if ( iDiskFull ) - { - DiskFull(); - } - else - { - iSession->RecordL( ETrue ); - iEventObserver.ShowNaviPaneIconL( EMusUiNaviIconRecord ); - } - break; - } - case EMusuiCmdStopRecording: - { - // Show toolbar hidden while showing options menu - iEventObserver.SetToolbarVisibility( ETrue ); - - iSession->RecordL( EFalse ); - iEventObserver.ShowNaviPaneIconL( EMusUiNaviIconRecordNot ); - break; - } - - default: - { - // Try more general handling - CMusUiEventController::HandleCommandL( aCommand ); - break; - } - } - MUS_LOG( "mus: [MUSUI ] <- CMusUiLiveSharingController::HandleCommandL" ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiLiveSharingController::LevelIndicatorDismissed() - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiLiveSharingController::LevelIndicatorDismissed" ); - if ( MUS_NO_TOOLBAR ) - { - iZoomSelected = EFalse; - iBrightnessSelected = EFalse; - TRAP_IGNORE( iSharingObserver.EnableMiddleSoftkeyL( IsLoudSpeakerEnabled() ? - R_MUSUI_VIEW_OPS_MSK_IHF_OFF : - R_MUSUI_VIEW_OPS_MSK_IHF_ON ) ); - } - else - { - if ( iToolbarZoomSelected ) - { - iToolbarZoomSelected = EFalse; - if ( !AknLayoutUtils::PenEnabled() ) - { - TRAP_IGNORE( iSharingObserver.HighlightSelectedToolbarItem(EMusuiCmdToolbarZoom) ); - } - } - else if( iToolbarBrightnessSelected ) - { - iToolbarBrightnessSelected = EFalse; - if ( !AknLayoutUtils::PenEnabled() ) - { - TRAP_IGNORE( iSharingObserver.HighlightSelectedToolbarItem(EMusuiCmdToolbarBrightness) ); - } - } - - } - - MUS_LOG( "mus: [MUSUI ] <- CMusUiLiveSharingController::LevelIndicatorDismissed" ); - } - - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -TMusUiNaviMediaDecorator CMusUiLiveSharingController::RecordIcon() - { - MUS_LOG( "mus: [MUSUI ] CMusUiLiveSharingController::RecordIcon" ); - - return (iSession->IsRecording() == EFalse) ? - EMusUiNaviIconRecordNot : - EMusUiNaviIconRecord; - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -TBool CMusUiLiveSharingController::IsBrightnessSupported() - { - if ( !iSession ) - { - return EFalse; - } - TRAPD( error, iSession->SetBrightnessL( iSession->CurrentBrightnessL() ) ) - return ( error == KErrNotSupported ) ? EFalse : ETrue; - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -TBool CMusUiLiveSharingController::IsDiskFull() - { - return iDiskFull; - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -TBool CMusUiLiveSharingController::ToolbarZoomSelected() - { - return iToolbarZoomSelected; - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -TBool CMusUiLiveSharingController::ToolbarBrightnessSelected() - { - return iToolbarBrightnessSelected; - } - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -TBool CMusUiLiveSharingController::ZoomSelected() - { - return iZoomSelected; - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -TBool CMusUiLiveSharingController::BrightnessSelected() - { - return iBrightnessSelected; - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiLiveSharingController::ZoomL() - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiLiveSharingController::ZoomL" ); - iZoomSelected = ETrue; - iLiveObserver.SetZoomValues( iSession->MinZoomL(), iSession->MaxZoomL() ); - iLiveObserver.SetZoomL( iSession->CurrentZoomL() ); - iLiveObserver.SetZoomVisible( ETrue ); - - if ( MUS_NO_TOOLBAR ) - { - iSharingObserver.EnableMiddleSoftkeyL( R_MUSUI_VIEW_MSK_OK ); - } - MUS_LOG( "mus: [MUSUI ] <- CMusUiLiveSharingController::ZoomL" ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiLiveSharingController::BrightnessL() - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiLiveSharingController::BrightnessL" ); - iBrightnessSelected = ETrue; - iLiveObserver.SetBrightnessValues( iSession->MinBrightnessL(), - iSession->MaxBrightnessL() ); - iLiveObserver.SetBrightnessL( iSession->CurrentBrightnessL() ); - iLiveObserver.SetBrightnessVisible( ETrue ); - - if ( MUS_NO_TOOLBAR ) - { - iSharingObserver.EnableMiddleSoftkeyL( R_MUSUI_VIEW_MSK_OK ); - } - MUS_LOG( "mus: [MUSUI ] <- CMusUiLiveSharingController::BrightnessL" ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiLiveSharingController::HandleMiddleSoftkeyOkL() - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiLiveSharingController::HandleMiddleSoftkeyOkL" ); - - if ( iZoomSelected ) - { - iZoomSelected = EFalse; - iLiveObserver.SetZoomVisible( EFalse ); - } - else if ( iBrightnessSelected ) - { - iZoomSelected = EFalse; - iLiveObserver.SetBrightnessVisible( EFalse ); - } - - iSharingObserver.EnableMiddleSoftkeyL( IsLoudSpeakerEnabled() ? - R_MUSUI_VIEW_OPS_MSK_IHF_OFF : - R_MUSUI_VIEW_OPS_MSK_IHF_ON ); - - MUS_LOG( "mus: [MUSUI ] <- CMusUiLiveSharingController::HandleMiddleSoftkeyOkL" ); - } - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiLiveSharingController::ZoomInL() - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiLiveSharingController::ZoomInL" ); - iSession->ZoomInL(); - MUS_LOG( "mus: [MUSUI ] <- CMusUiLiveSharingController::ZoomInL" ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiLiveSharingController::ZoomOutL() - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiLiveSharingController::ZoomOutL" ); - iSession->ZoomOutL(); - MUS_LOG( "mus: [MUSUI ] <- CMusUiLiveSharingController::ZoomOutL" ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiLiveSharingController::IncreaseBrightnessL() - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiLiveSharingController::IncreaseBrightnessL" ); - iSession->IncreaseBrightnessL(); - MUS_LOG( "mus: [MUSUI ] <- CMusUiLiveSharingController::IncreaseBrightnessL" ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiLiveSharingController::DecreaseBrightnessL() - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiLiveSharingController::DecreaseBrightnessL" ); - iSession->DecreaseBrightnessL(); - MUS_LOG( "mus: [MUSUI ] <- CMusUiLiveSharingController::DecreaseBrightnessL" ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiLiveSharingController::DiskFull() - { - // Update the icon: - TRAP_IGNORE( iEventObserver.ShowNaviPaneIconL( EMusUiNaviIconRecordNot ); - DismissWaitDialog(); - // Saving ends when disk is full but streaming continues (user is notified) - TRAP_IGNORE( MusUiDialogUtil::ShowGlobalErrorDialogL( R_MUS_VIEW_NOTE_MEMORY_LOW ) ) ); - iDiskFull = ETrue; - } - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiLiveSharingController::OrientationRefreshEnded() - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiLiveSharingController::OrientationRefreshEnded" ); - iLiveObserver.DoRefreshView(); - MUS_LOG( "mus: [MUSUI ] <- CMusUiLiveSharingController::OrientationRefreshEnded" ); - } - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiLiveSharingController::SessionEstablished() - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiLiveSharingController::SessionEstablished" ); - - iSessionEstablished = ETrue; - - TRAPD( error, iResourceHandler->RequestCameraL( ETrue ) ); - if ( error != KErrNone ) - { - MUS_LOG1( "mus: [MUSUI ] RequestCameraL leave code: %d", error ) - } - - CMusUiSendController::SessionEstablished(); // Base class handling - - iVideoToBeSaved = ETrue; - - MusSettingsKeys::TAutoRecord autoRecordValue = EAutoRecordOff; - TRAPD ( errAutoRecord, autoRecordValue = - MultimediaSharingSettings::AutoRecordSettingL() ); - if ( errAutoRecord != KErrNone ) - { - MUS_LOG1( "mus: [MUSUI ] AutoRecordSettingL leave code: %d", errAutoRecord ) - HandleError( errAutoRecord ); - } - - if ( autoRecordValue != EAutoRecordOff ) - { - TRAPD ( errRecordL, iSession->RecordL( ETrue ) ); - if ( errRecordL != KErrNone ) - { - MUS_LOG1( "mus: [MUSUI ] RecordL leave code: %d", errRecordL ) - HandleError( errRecordL ); - } - } - - TRAP_IGNORE( iEventObserver.ShowNaviPaneIconL( RecordIcon() ) ) - - MUS_LOG( "mus: [MUSUI ] <- CMusUiLiveSharingController::SessionEstablished" ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiLiveSharingController::SessionTerminated() - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiLiveSharingController::SessionTerminated" ); - iSessionEstablished = EFalse; - if ( !ExitOccured() ) - { - DismissWaitDialog(); - - TRAP_IGNORE( iCallbackService->AsyncEventL( EMusUiAsyncHandleExit ) ); - } - MUS_LOG( "mus: [MUSUI ] <- CMusUiLiveSharingController::SessionTerminated" ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiLiveSharingController::SessionConnectionLost() - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiLiveSharingController::SessionConnectionLost" ); - iSessionEstablished = EFalse; - DismissWaitDialog(); - if ( !ExitOccured() ) - { - TRAP_IGNORE( MusUiDialogUtil::ShowGlobalErrorDialogL( - R_MUS_LIVE_SHARING_VIEW_NOTE_CONNECTION_LOST ) ); - } - - TRAP_IGNORE( iCallbackService->AsyncEventL( EMusUiAsyncHandleExit ) ); - - MUS_LOG( "mus: [MUSUI ] <- CMusUiLiveSharingController::SessionConnectionLost" ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiLiveSharingController::SessionFailed() - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiLiveSharingController::SessionFailed" ); - iSessionEstablished = EFalse; - if ( !ExitOccured() ) - { - DismissWaitDialog(); - - TRAP_IGNORE( iCallbackService->AsyncEventL( EMusUiAsyncHandleExit ) ); - } - - MUS_LOG( "mus: [MUSUI ] <- CMusUiLiveSharingController::SessionFailed" ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiLiveSharingController::StreamIdle() - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiLiveSharingController::StreamIdle" ); - DismissWaitDialog(); - MUS_LOG( "mus: [MUSUI ] <- CMusUiLiveSharingController::StreamIdle" ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiLiveSharingController::StreamStreaming() - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiLiveSharingController::StreamStreaming" ); - //DismissWaitDialog(); - MUS_LOG( "mus: [MUSUI ] <- CMusUiLiveSharingController::StreamStreaming" ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiLiveSharingController::SessionTimeChanged( - const TTimeIntervalSeconds& aSeconds ) - { - if ( aSeconds.Int() > -1 ) - { - iSharingObserver.UpdateSessionTime( SessionTimeFormatted( aSeconds ) ); - } - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiLiveSharingController::InactivityTimeout() - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiLiveSharingController::InactivityTimeout" ); - DismissWaitDialog(); - if ( !ExitOccured() ) - { - TRAP_IGNORE( MusUiDialogUtil::ShowGlobalErrorDialogL( - R_MUS_LIVE_SHARING_VIEW_NOTE_SERVICE_N_A ) ); - } - - TRAP_IGNORE( iCallbackService->AsyncEventL( EMusUiAsyncHandleExit ) ); - - MUS_LOG( "mus: [MUSUI ] <- CMusUiLiveSharingController::InactivityTimeout" ); - } - -// ----------------------------------------------------------------------------- -// Determines whether Session established or not -// ----------------------------------------------------------------------------- -// -TBool CMusUiLiveSharingController::IsSessionEstablished() - { - return iSessionEstablished; - } - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiLiveSharingController::HandlePauseResumeInToolbar() - { - TBool isPlaying( EFalse ); - TRAP_IGNORE( isPlaying = IsPlayingL() ) - if ( isPlaying ) - { - iSharingObserver.ReplaceToolbarCommand( EMusuiCmdToolbarUnPauseLive, - EMusuiCmdToolbarPauseLive, - ETrue ); - } - else - { - iSharingObserver.ReplaceToolbarCommand( EMusuiCmdToolbarPauseLive, - EMusuiCmdToolbarUnPauseLive, - ETrue ); - } - } - -// ----------------------------------------------------------------------------- -// Workaround for problem at lower level (encoder side) which causes crash -// if several sequential pause/resumes are done too rapidly. Discard state change -// attempt if it occurs too quickly after previous state change. -// ----------------------------------------------------------------------------- -// -void CMusUiLiveSharingController::UserInitiatedCameraStateChangeL( TBool aEnable ) - { - MUS_LOG1( "mus: [MUSUI ] -> CMusUiLiveSharingController::UserInitiatedCameraStateChangeL, enable:", - aEnable ); - - if ( iPauseResumeGuardTimer->IsActive() ){ - MUS_LOG( "mus: [MUSUI ] <- State change ignored as guard timer is running!" ); - return; - } - - if ( aEnable ) - { - PlayL(); - } - else - { - PauseL(); - } - - iPauseResumeGuardTimer->After( KMusUiPauseResumeGuardPeriod ); - - MUS_LOG( "mus: [MUSUI ] <- CMusUiLiveSharingController::UserInitiatedCameraStateChangeL" ); - } - - -// End of file - diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshui/src/musuilivesharingview.cpp --- a/mmsharing/mmshui/src/musuilivesharingview.cpp Thu Aug 19 09:51:39 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,786 +0,0 @@ -/* -* 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: The MUS application's UI class. -* -*/ - - - -#include "musenglivesession.h" -#include "musuilivesharingview.h" -#include "musuilivesharingviewcontainer.h" -#include "musuibackgroundviewcontainer.h" -#include "musuilivesharingcontroller.h" -#include "musuiactivitymanger.h" -#include "musuiappui.h" -#include "musuistatuspanehandler.h" -#include "musui.hrh" -#include "musuidefinitions.h" -#include "muslogger.h" // debug logging -#include -#include -#include "musengmcesession.h" - -#include -#include -#include -#include - - -const TInt KMusUiContainerWidth = 30; - - -// ----------------------------------------------------------------------------- -// EPOC two-phased constructor -// ----------------------------------------------------------------------------- -// -void CMusUiLiveSharingView::ConstructL() - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiLiveSharingView::ConstructL" ); - - CMusUiSendView::ConstructL(); - - Toolbar()->SetToolbarObserver( this ); - Toolbar()->UpdateBackground(); -/* - if( MUS_NO_TOOLBAR ) - { - MUS_LOG( "mus: [MUSUI ] Operator variant hides toolbar!" ); - Toolbar()->SetToolbarVisibility( EFalse ); - Toolbar()->MakeVisible(EFalse); - } -*/ - MUS_LOG( "mus: [MUSUI ] <- CMusUiLiveSharingView::ConstructL" ); - } - - -// ----------------------------------------------------------------------------- -// Destructor -// ----------------------------------------------------------------------------- -// -CMusUiLiveSharingView::~CMusUiLiveSharingView() - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiLiveSharingView::~CMusUiLiveSharingView" ); - if ( iContainer ) - { - AppUi()->RemoveFromViewStack( *this, iContainer ); - } - delete iContainer; - delete iController; - - MUS_LOG( "mus: [MUSUI ] <- CMusUiLiveSharingView::~CMusUiLiveSharingView" ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -TUid CMusUiLiveSharingView::Id() const - { - MUS_LOG( "mus: [MUSUI ] CMusUiLiveSharingView::Id()" ); - return KMusUidLiveSharingView; - } - - -// ----------------------------------------------------------------------------- -// Handle EKeyUpArrow key presses -// ----------------------------------------------------------------------------- -// -void CMusUiLiveSharingView::HandleKeyUpArrowL() - { - HandleCommandL( - iController->ZoomSelected() ? EMusuiCmdViewZoomIn : - iController->BrightnessSelected() ? EMusuiCmdViewIncreaseBrightness : - EMusUiCmdToolbarLastIndex ); - } - - -// ----------------------------------------------------------------------------- -// Handle EKeyDownArrow key presses -// ----------------------------------------------------------------------------- -// -void CMusUiLiveSharingView::HandleKeyDownArrowL() - { - HandleCommandL( - iController->ZoomSelected() ? EMusuiCmdViewZoomOut : - iController->BrightnessSelected() ? EMusuiCmdViewDecreaseBrightness : - EMusUiCmdToolbarLastIndex ); - } - - - - -// ----------------------------------------------------------------------------- -// From MEikMenuObserver, Called by framework before constructing menupane -// ----------------------------------------------------------------------------- -// -void CMusUiLiveSharingView::DynInitMenuPaneL( TInt aResourceId, - CEikMenuPane* aMenuPane ) - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiLiveSharingView::DynInitMenuPaneL [%d]" ); - SetZoomVisible(EFalse); - SetBrightnessVisible(EFalse); - // Base class initiated initialization first - CMusUiGeneralView::DynInitMenuPaneL( aResourceId, aMenuPane ); - if( !MUS_NO_TOOLBAR ) - { - SetInitialFocusedItemL(); - } - - if ( aResourceId == R_MUSUI_VIEW_MENU ) - { - // Delete items not related to live sharing: - aMenuPane->DeleteMenuItem( EMusuiCmdViewReplay ); - aMenuPane->DeleteMenuItem( EMusuiCmdViewAudioMute ); - aMenuPane->DeleteMenuItem( EMusuiCmdViewAudioNormal ); - aMenuPane->DeleteMenuItem( EMusuiCmdViewFullScreen ); - - if ( iController->ConnectionEstablished() - && !iController->IsDiskFull() ) - { - CMusEngLiveSession *session = dynamic_cast - ( iController->EngineOutSession() ); - - if ( session->IsPlayingL() ) - { - aMenuPane->DeleteMenuItem( session->IsRecording() ? - EMusuiCmdRecord : - EMusuiCmdStopRecording ); - } - else - { - // when camera source was paused, hide the command - aMenuPane->DeleteMenuItem( EMusuiCmdRecord ); - aMenuPane->DeleteMenuItem( EMusuiCmdStopRecording ); - } - } - else - { - // Hide recording commands if the session is not established - // TODO: check autorecord on/off - aMenuPane->DeleteMenuItem( EMusuiCmdRecord ); - aMenuPane->DeleteMenuItem( EMusuiCmdStopRecording ); - } - - __ASSERT_ALWAYS( iController, User::Leave( KErrNotReady ) ); - - if( MUS_NO_TOOLBAR ) - { - aMenuPane->DeleteMenuItem( EMusuiCmdToolbarBrightness ); - aMenuPane->DeleteMenuItem( EMusuiCmdToolbarZoom ); - if ( !iController->IsBrightnessSupported() || - !SendController()->IsPlayingL() ) - { - aMenuPane->DeleteMenuItem( EMusuiCmdViewBrightness ); - } - - if ( !SendController()->IsPlayingL() ) - { - aMenuPane->DeleteMenuItem( EMusuiCmdViewZoom ); - } - } - else - { - aMenuPane->DeleteMenuItem( EMusuiCmdViewBrightness ); - aMenuPane->DeleteMenuItem( EMusuiCmdViewZoom ); - if ( !iController->IsBrightnessSupported() || - !SendController()->IsPlayingL() || - !AknLayoutUtils::PenEnabled() ) - { - aMenuPane->DeleteMenuItem( EMusuiCmdToolbarBrightness ); - } - - if ( !SendController()->IsPlayingL() || - !AknLayoutUtils::PenEnabled() ) - { - aMenuPane->DeleteMenuItem( EMusuiCmdToolbarZoom ); - } - } - } - MUS_LOG( "mus: [MUSUI ] <- CMusUiLiveSharingView::DynInitMenuPaneL" ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiLiveSharingView::HandleToolbarCommandL( TInt aCommand ) - { - MUS_LOG1( "mus: [MUSUI ] -> CMusUiLiveSharingView::HandleToolbarCommandL: %d", - aCommand ); - - __ASSERT_ALWAYS( iController, User::Leave( KErrNotReady ) ); - - switch ( aCommand ) - { - case EKeyLeftArrow: - { - if( MUS_NO_TOOLBAR ) - { - HandleCommandL( - iController->ToolbarVolumeSelected() ? EMusuiCmdViewVolumeDown : - iController->BrightnessSelected() ? EMusuiCmdViewDecreaseBrightness : - iController->ZoomSelected() ? EMusuiCmdViewZoomOut : - EMusUiCmdToolbarLastIndex ); - } - else - { - HandleCommandL( - iController->ToolbarVolumeSelected() ? EMusuiCmdViewVolumeDown : - iController->ToolbarBrightnessSelected() ? EMusuiCmdViewDecreaseBrightness : - iController->ToolbarZoomSelected() ? EMusuiCmdViewZoomOut : - EMusUiCmdToolbarLastIndex ); - } - break; - } - case EKeyRightArrow: - { - if( MUS_NO_TOOLBAR ) - { - HandleCommandL( - iController->ToolbarVolumeSelected() ? EMusuiCmdViewVolumeUp : - iController->BrightnessSelected() ? EMusuiCmdViewIncreaseBrightness : - iController->ZoomSelected() ? EMusuiCmdViewZoomIn : - EMusUiCmdToolbarLastIndex ); - } - else - { - HandleCommandL( - iController->ToolbarVolumeSelected() ? EMusuiCmdViewVolumeUp : - iController->ToolbarBrightnessSelected() ? EMusuiCmdViewIncreaseBrightness : - iController->ToolbarZoomSelected() ? EMusuiCmdViewZoomIn : - EMusUiCmdToolbarLastIndex ); - } - break; - } - case EKeyUpArrow: - { - if( MUS_NO_TOOLBAR ) - { - HandleCommandL( - iController->ZoomSelected() ? EMusuiCmdViewZoomIn : - iController->BrightnessSelected() ? EMusuiCmdViewIncreaseBrightness : - iController->ToolbarVolumeSelected() ? EMusuiCmdViewVolumeUp : - EMusUiCmdToolbarLastIndex ); - } - else - { - HandleCommandL( - iController->ToolbarZoomSelected() ? EMusuiCmdViewZoomIn : - iController->ToolbarBrightnessSelected() ? EMusuiCmdViewIncreaseBrightness : - iController->ToolbarVolumeSelected() ? EMusuiCmdViewVolumeUp : - EMusUiCmdToolbarLastIndex ); - } - break; - } - case EKeyDownArrow: - { - if( MUS_NO_TOOLBAR ) - { - HandleCommandL( - iController->ZoomSelected() ? EMusuiCmdViewZoomOut : - iController->BrightnessSelected() ? EMusuiCmdViewDecreaseBrightness : - iController->ToolbarVolumeSelected() ? EMusuiCmdViewVolumeDown : - EMusUiCmdToolbarLastIndex ); - } - else - { - HandleCommandL( - iController->ToolbarZoomSelected() ? EMusuiCmdViewZoomOut : - iController->ToolbarBrightnessSelected() ? EMusuiCmdViewDecreaseBrightness : - iController->ToolbarVolumeSelected() ? EMusuiCmdViewVolumeDown : - EMusUiCmdToolbarLastIndex ); - } - break; - } - case EMusuiCmdViewVolumeDown: - { - HandleCommandL( EMusuiCmdViewVolumeDown ); - break; - } - case EMusuiCmdViewVolumeUp: - { - HandleCommandL( EMusuiCmdViewVolumeUp ); - break; - } - default: - { - break; - } - } - MUS_LOG( "mus: [MUSUI ] <- CMusUiLiveSharingView::HandleToolbarCommandL" ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiLiveSharingView::SetInitialFocusedItemL() - { - MUS_LOG( "mus: [MUSUI ] -> MusUiLiveSharingView::SetInitialFocusedItemL" ); - - __ASSERT_ALWAYS( iController, User::Leave( KErrNotReady ) ); - - if ( iOperatorSpecificFunctionality && !AknLayoutUtils::PenEnabled() ) - { - MUS_LOG( "Focus changed in OPERATOR mode !!!!!!!!!!!!!" ); - Toolbar()->SetFocusedItemL( EMusuiCmdToolbarZoom ); - - } - MUS_LOG( "mus: [MUSUI ] <- CMusUiLiveSharingView::SetInitialFocusedItemL" ); - } - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiLiveSharingView::DynInitToolbarL( TInt aResourceId, - CAknToolbar* aToolbar ) - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiLiveSharingView::DynInitToolbarL" ); - - // Items to be removed in Live Sharing View: - if (!AknLayoutUtils::PenEnabled())//(aResourceId == R_MUS_TOOLBAR_NONTOUCH)// - { - Toolbar()->RemoveItem( EMusuiCmdToolbarFFRev ); - - // Items to be removed in Live Sharing View: - if ( iController->DeviceHasDedicatedVolumeKeys() ) - { - Toolbar()->RemoveItem( EMusuiCmdToolbarVolume ); - } - else - { - aToolbar->SetFocusedItemL( EMusuiCmdToolbarVolume ); - } - - - if ( !iController->IsBrightnessSupported() ) - { - Toolbar()->HideItem( EMusuiCmdToolbarBrightness, ETrue, ETrue ); - } - else - { - if ( aToolbar->FocusedItem() == KErrNotFound ) - { - aToolbar->SetFocusedItemL( EMusuiCmdToolbarBrightness ); - } - } - } - Toolbar()->RemoveItem( EMusuiCmdToolbarPause ); - Toolbar()->RemoveItem( EMusuiCmdToolbarUnPause ); - Toolbar()->RemoveItem( EMusuiCmdToolbarFullScreen ); - - if ( iOperatorSpecificFunctionality ) - { - // Remove pause/unpause functionality in operator variant case - Toolbar()->RemoveItem( EMusuiCmdToolbarPauseLive ); - Toolbar()->RemoveItem( EMusuiCmdToolbarUnPauseLive ); - if ( (aToolbar->FocusedItem() == KErrNotFound ) && - !AknLayoutUtils::PenEnabled() ) - { - aToolbar->SetFocusedItemL( EMusuiCmdToolbarZoom ); - } - } - else - { - // Toggled items to be hidden: - Toolbar()->HideItem( iPauseSelected ? - EMusuiCmdToolbarPauseLive : - EMusuiCmdToolbarUnPauseLive, - ETrue, - ETrue ); - if ( aToolbar->FocusedItem() == KErrNotFound && - !AknLayoutUtils::PenEnabled() ) - { - aToolbar->SetFocusedItemL( EMusuiCmdToolbarPauseLive ); - } - Toolbar()->RemoveItem( EMusuiCmdToolbarBlank ); - } - - // Last generic base class functionality - CMusUiGeneralView::DynInitToolbarL( aResourceId, aToolbar ); - - MUS_LOG1( "aToolbar Focused Item: %d", aToolbar->FocusedItem() ); - MUS_LOG1( "toolbar() Focused Item: %d", Toolbar()->FocusedItem() ); - - MUS_LOG( "mus: [MUSUI ] <- CMusUiLiveSharingView::DynInitToolbarL" ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiLiveSharingView::SetZoomValues( TInt aMinZoom, TInt aMaxZoom ) - { - iContainer->SetZoomValues( aMinZoom, aMaxZoom ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiLiveSharingView::SetBrightnessValues( TInt aMinBrightness, - TInt aMaxBrightness ) - { - iContainer->SetBrightnessValues( aMinBrightness, aMaxBrightness ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiLiveSharingView::SetZoomL( TInt aZoomLevel ) - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiLiveSharingView::SetZoomL" ); - iContainer->SetZoomL( aZoomLevel ); - MUS_LOG( "mus: [MUSUI ] <- CMusUiLiveSharingView::SetZoomL" ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiLiveSharingView::SetBrightnessL( TInt aBrightnessLevel ) - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiLiveSharingView::SetBrightnessL" ); - iContainer->SetBrightnessL( aBrightnessLevel ); - MUS_LOG( "mus: [MUSUI ] <- CMusUiLiveSharingView::SetBrightnessL" ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiLiveSharingView::SetZoomVisible( TBool aVisible ) - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiLiveSharingView::SetZoomVisible" ); - - iContainer->SetZoomVisible( aVisible ); - - MUS_LOG( "mus: [MUSUI ] <- CMusUiLiveSharingView::SetZoomVisible" ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiLiveSharingView::SetBrightnessVisible( TBool aVisible ) - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiLiveSharingView::SetBrightnessVisible" ); - - iContainer->SetBrightnessVisible( aVisible ); - - MUS_LOG( "mus: [MUSUI ] <- CMusUiLiveSharingView::SetBrightnessVisible" ); - } - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiLiveSharingView::LevelIndicatorDismissed() - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiLiveSharingView::LevelIndicatorDismissed" ); - iController->LevelIndicatorDismissed(); - MUS_LOG( "mus: [MUSUI ] <- CMusUiLiveSharingView::LevelIndicatorDismissed" ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiLiveSharingView::RefreshAudioRoutingButton() - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiLiveSharingView::RefreshAudioRoutingButton" ); - //We ignore audio routing change event in case there is Zoom/Brightness - //adjustment ongoing in operator variant. Middle softkey will be - //updated once adjustment is done - if ( !MUS_NO_TOOLBAR || - ( !iController->ZoomSelected() && - !iController->BrightnessSelected() ) ) - { - CMusUiGeneralView::RefreshAudioRoutingToolbarButton(); - } - - MUS_LOG( "mus: [MUSUI ] <- CMusUiLiveSharingView::RefreshAudioRoutingButton" ); - } - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiLiveSharingView::ReplaceToolbarCommand( TInt aOldCommand, - TInt aNewCommand, - TBool aSetNewCommandFocused ) - { - MUS_LOG1( "mus: [MUSUI ] -> CMusUiLiveSharingView::ReplaceToolbarCommand: %d", - aOldCommand ); - switch ( aOldCommand ) - { - case EMusuiCmdToolbarPauseLive: - { - iPauseSelected = ETrue; - /* Hide pause related toolbar items */ - HideToolbarCommandForPause(ETrue); - break; - } - case EMusuiCmdToolbarUnPauseLive: - { - iPauseSelected = EFalse; - /* Unhide pause related toolbar items */ - HideToolbarCommandForPause(EFalse); - break; - } - default: - { - break; - } - } - - // Call base class version for generic part - - CMusUiGeneralView::ReplaceToolbarCommand( aOldCommand, - aNewCommand, - aSetNewCommandFocused ); - - MUS_LOG1( "mus: [MUSUI ] <- CMusUiLiveSharingView::ReplaceToolbarCommand: %d", - aNewCommand ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiLiveSharingView::RefreshView() - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiLiveSharingView::RefreshView" ); - if ( iController ) - { - DoRefreshView(); - } - MUS_LOG( "mus: [MUSUI ] <- CMusUiLiveSharingView::RefreshView" ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiLiveSharingView::DoRefreshView() - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiLiveSharingView::DoRefreshView" ); - - // Refresh background container before and after as display status - // may change due async orientation change handling. - RefreshBackgroundContainer(); - - if ( iContainer ) - { - TRect containerRect( ClientRect().iBr.iX - KMusUiContainerWidth, - ClientRect().iTl.iY, - ClientRect().iBr.iX, - ClientRect().iBr.iY - ToolbarPlaceHolderHeight() ); - iContainer->SetRect( containerRect ); - } - - if ( iController ) - { - TRect videoRect( ClientRect().iTl.iX, - ClientRect().iTl.iY, - ClientRect().iBr.iX, - ClientRect().iBr.iY - ToolbarPlaceHolderHeight() ); - // if this function leaves we can nothing to do for camera orientation. - // Alteast we can try further to set right rectangle for display - TRAPD(err,RefreshCameraOrientationL(videoRect)); - if( err ) - { - MUS_LOG1( "mus: [MUSUI ] -> Orientation can not be changed =%d",err ); - } - iController->SetRect( videoRect ); - } - - RefreshBackgroundContainer(); - - MUS_LOG( "mus: [MUSUI ] <- CMusUiLiveSharingView::DoRefreshView" ); - } - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -CMusUiSendController* CMusUiLiveSharingView::SendController() const - { - return iController; - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -CMusUiSendViewContainer* CMusUiLiveSharingView::SendContainer() const - { - return iContainer; - } - - -// ----------------------------------------------------------------------------- -// From CAknView, Gets called from framework when activating this view -// ----------------------------------------------------------------------------- -// -void CMusUiLiveSharingView::DoActivateL( const TVwsViewId& aPrevViewId, - TUid aCustomMessageId, - const TDesC8& aCustomMessage ) - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiLiveSharingView::DoActivateL" ); - - // Base class activation first - CMusUiSendView::DoActivateL( aPrevViewId, - aCustomMessageId, - aCustomMessage ); - - TRect clientRect = ClientRect(); - clientRect.iBr.iX -= ToolbarPlaceHolderWidth(); - clientRect.iBr.iY -= ToolbarPlaceHolderHeight(); - - TRect containerRect( clientRect.iBr.iX - KMusUiContainerWidth, - clientRect.iTl.iY, - clientRect.iBr.iX, - clientRect.iBr.iY ); - - if ( !iContainer ) - { - MUS_LOG( "mus: [MUSUI ] CMusUiLiveSharingView::DoActivateL: !iContainer" ); - iContainer = new ( ELeave ) CMusUiLiveSharingViewContainer(); - iContainer->SetMopParent( this ); - iContainer->ConstructL( this, - containerRect ); - AppUi()->AddToViewStackL( *this, iContainer ); - } - - /* Increase the ordinal position of background container - * So that other control will be drawn first. - */ - UpdateBackgroundOrdinalPosition( ETrue ); - - TRect videoRect( ClientRect().iTl.iX, - ClientRect().iTl.iY, - ClientRect().iBr.iX, - ClientRect().iBr.iY - ToolbarPlaceHolderHeight() ); - - if ( !iController ) - { - MUS_LOG( "mus: [MUSUI ] CMusUiLiveSharingView::DoActivateL: !iController" ); - iController = CMusUiLiveSharingController::NewL( *MusAppUi(), - *this, - *this, - *this, - videoRect ); - iController->StartInvitationL(); - } - - iContainer->SetController( iController ); - - MUS_LOG( "mus: [MUSUI ] <- CMusUiLiveSharingView::DoActivateL" ); - } - - -// ----------------------------------------------------------------------------- -// From AknView, Gets called from framework when deactivating this view -// ----------------------------------------------------------------------------- -// -void CMusUiLiveSharingView::DoDeactivate() - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiLiveSharingView::DoDeactivate" ); - - CMusUiSendView::DoDeactivate(); // Base class deactivation first - - if ( iContainer ) - { - AppUi()->RemoveFromViewStack( *this, iContainer ); - delete iContainer; - iContainer = NULL; - } - - MUS_LOG( "mus: [MUSUI ] <- CMusUiLiveSharingView::DoDeactivate" ); - } - -// ----------------------------------------------------------------------------- -// When orientation changed , Camera instances has to be recreated inorder -// to receive proper orientated frames. -// ----------------------------------------------------------------------------- -// -void CMusUiLiveSharingView::RefreshCameraOrientationL(TRect& aNewRect) - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiLiveSharingView::RefreshCameraOrientation" ); - if ( !iController || !iController->EngineSession() ) - { - MUS_LOG( "mus: [MUSUI ] <- CMusUiLiveSharingView::RefreshCameraOrientation, no session" ); - return; - } - TRect oldRect = iController->EngineSession()->Rect(); - MUS_LOG2( "mus: [MUSUI ] -> Old Rect (width = %d,height=%d)",oldRect.Width(),oldRect.Height() ); - MUS_LOG2( "mus: [MUSUI ] -> New Rect (width = %d,height=%d)",aNewRect.Width(),aNewRect.Height() ); - if ( !( ( ( oldRect.Width() > oldRect.Height() ) && //check lanscape - ( aNewRect.Width() > aNewRect.Height() ) - ) - || - ( - ( oldRect.Width() < oldRect.Height() ) && // check portrait - ( aNewRect.Width() < aNewRect.Height() ) - ) - ) - ) - { - MUS_LOG( "mus: [MUSUI ] -> Orientation Changed.Restart Camera" ); - iController->RefreshCameraOrientationL(); - } - else - { - MUS_LOG( "mus: [MUSUI ] -> Orientation Not changed. dont restart camera"); - } - - - - MUS_LOG( "mus: [MUSUI ] <- CMusUiLiveSharingView::RefreshCameraOrientation" ); - } - -// ----------------------------------------------------------------------------- -// When Live sharing paused , camera source will be unavilable, hence -// it is inappropriate to show the zoom and brightness -// so hide those item. And unhide it again when unpaused. -// ----------------------------------------------------------------------------- -// -void CMusUiLiveSharingView::HideToolbarCommandForPause( TBool aIsPaused ) - { - MUS_LOG1( "mus: [MUSUI ] -> CMusUiLiveSharingView::HideToolbarCommandForPause() %d",aIsPaused); - /* Hide brightness toolbar item if paused else unhide. Draw immediately.*/ - Toolbar()->HideItem( EMusuiCmdToolbarBrightness, aIsPaused, ETrue ); - /* Hide zoom toolbar item if paused else unhide. Draw immediately.*/ - Toolbar()->HideItem( EMusuiCmdToolbarZoom, aIsPaused, ETrue ); - MUS_LOG( "mus: [MUSUI ] <- CMusUiLiveSharingView::HideToolbarCommandForPause"); - } - -// end of file diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshui/src/musuilivesharingviewcontainer.cpp --- a/mmsharing/mmshui/src/musuilivesharingviewcontainer.cpp Thu Aug 19 09:51:39 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,258 +0,0 @@ -/* -* 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: The MUS application's UI class. -* -*/ - - -#include "musuidefinitions.h" -#include "musuilivesharingviewcontainer.h" -#include "musuieventcontroller.h" -#include "musuigeneralview.h" -#include "musuilivesharingview.h" -#include "musuiappui.h" -#include "musuilevelindicator.h" -#include "musuidialogutil.h" -#include "musui.hrh" -#include "muslogger.h" // debug logging -#include "mussettings.h" -#include - -#include -#include - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiLiveSharingViewContainer::ConstructL( CMusUiGeneralView* aView, - const TRect& aRect ) - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiLiveSharingViewContainer::ConstructL" ); - - CMusUiSendViewContainer::ConstructL( aView, - aRect, - EAknOrientationVertical ); - // check if operator specific functionality is needed - iOperatorSpecificFunctionality = - ( MultimediaSharingSettings::OperatorVariantSettingL() == - MusSettingsKeys::EOperatorSpecific ); - - MUS_LOG( "mus: [MUSUI ] <- CMusUiLiveSharingViewContainer::ConstructL" ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -CMusUiLiveSharingViewContainer::~CMusUiLiveSharingViewContainer() - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiLiveSharingViewContainer::~CMusUiLiveSharingViewContainer" ); - // NOP - MUS_LOG( "mus: [MUSUI ] <- CMusUiLiveSharingViewContainer::~CMusUiLiveSharingViewContainer" ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiLiveSharingViewContainer::SetZoomValues( TInt aMinZoom, TInt aMaxZoom ) - { - iIndicator->SetRange( aMinZoom, aMaxZoom, ETrue ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiLiveSharingViewContainer::SetBrightnessValues( TInt aMinBrightness, - TInt aMaxBrightness ) - { - iIndicator->SetRange( aMinBrightness, aMaxBrightness, ETrue ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiLiveSharingViewContainer::SetZoomL( TInt aZoomLevel ) - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiLiveSharingViewContainer::SetZoomL" ) - - iIndicator->SetLevelL( EMusUiIndicatorTypeZoom, - aZoomLevel, - ETrue /* use timer */ ); - - MUS_LOG( "mus: [MUSUI ] <- CMusUiLiveSharingViewContainer::SetZoomL" ) - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiLiveSharingViewContainer::SetBrightnessL( TInt aBrightnessLevel ) - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiLiveSharingViewContainer::SetBrightnessL" ) - - iIndicator->SetLevelL( EMusUiIndicatorTypeBrightness, - aBrightnessLevel, - ETrue /* use timer */ ); - - MUS_LOG( "mus: [MUSUI ] <- CMusUiLiveSharingViewContainer::SetBrightnessL" ) - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiLiveSharingViewContainer::SetZoomVisible( TBool aVisible ) - { - iIndicator->SetIndicatorType( EMusUiIndicatorTypeZoom ); - MakeVisible( aVisible ); - SetGloballyCapturing( aVisible ); - SetPointerCapture( aVisible ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiLiveSharingViewContainer::SetBrightnessVisible( TBool aVisible) - { - iIndicator->SetIndicatorType(EMusUiIndicatorTypeBrightness); - MakeVisible( aVisible ); - SetGloballyCapturing( aVisible ); - SetPointerCapture( aVisible ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -TMusUiIndicatorType CMusUiLiveSharingViewContainer::GetIndicatorType() - { - return iIndicator->GetIndicatorType(); - } - - -// ----------------------------------------------------------------------------- -// Called by framework when to retrieve the no. of controls. -// ----------------------------------------------------------------------------- -// -TInt CMusUiLiveSharingViewContainer::CountComponentControls() const - { - return 1; // return nbr of controls inside this container - } - - -// ----------------------------------------------------------------------------- -// Called by framework to retrieve the control specified by index. -// ----------------------------------------------------------------------------- -// -CCoeControl* CMusUiLiveSharingViewContainer::ComponentControl( TInt aIndex ) const - { - CCoeControl* control = NULL; - switch ( aIndex ) - { - case 0: - control = iIndicator; - break; - default: - break; - } - return control; - } - - -// ----------------------------------------------------------------------------- -// Called by framework to act on key events if required. -// ----------------------------------------------------------------------------- -// -TKeyResponse CMusUiLiveSharingViewContainer::OfferKeyEventL( - const TKeyEvent& aKeyEvent, - TEventCode /*aType*/ ) - { - MUS_LOG1( "mus: [MUSUI ] -> CMusUiLiveSharingViewContainer::OfferKeyEventL: %d", - aKeyEvent.iCode ); - MUS_LOG1( "mus: [MUSUI ] -> CMusUiLiveSharingViewContainer::OfferKeyEventL: %d", - aKeyEvent.iScanCode ); - - TKeyResponse ret( EKeyWasNotConsumed ); - - if ( MUS_NO_TOOLBAR ) - { - CMusUiLiveSharingView* view = - static_cast< CMusUiLiveSharingView* >( MusUiView() ); - switch ( aKeyEvent.iCode ) - { - case EKeyLeftArrow: - { - view->HandleCommandL( EMusuiCmdViewVolumeDown ); - ret = EKeyWasConsumed; - break; - } - case EKeyRightArrow: - { - view->HandleCommandL( EMusuiCmdViewVolumeUp ); - ret = EKeyWasConsumed; - break; - } - case EKeyUpArrow: - { - view->HandleKeyUpArrowL(); - ret = EKeyWasConsumed; - break; - } - case EKeyDownArrow: - { - view->HandleKeyDownArrowL(); - ret = EKeyWasConsumed; - break; - } - default: - break; - } - } - - MUS_LOG( "mus: [MUSUI ] <- CMusUiLiveSharingViewContainer::OfferKeyEventL" ); - return ret; - } - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiLiveSharingViewContainer::HandlePointerEventL( - const TPointerEvent& aPointerEvent) - { - // Forward to base class in order to use slider - CCoeControl::HandlePointerEventL( aPointerEvent ); - - if ( !Rect().Contains( aPointerEvent.iPosition ) ) - { - MakeVisible( EFalse ); - } - } - - -// end of file diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshui/src/musuimmcmonitor.cpp --- a/mmsharing/mmshui/src/musuimmcmonitor.cpp Thu Aug 19 09:51:39 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,196 +0,0 @@ -/* -* 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: -* -*/ - - -#include "musuimmcmonitor.h" -#include "muslogger.h" // debug logging - -#include - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -CMusUiMmcMonitor* CMusUiMmcMonitor::NewL( MMusUiMmcObserver& aObserver ) - { - CMusUiMmcMonitor* self = new ( ELeave ) CMusUiMmcMonitor( aObserver ); - CleanupStack::PushL( self ); - self->ConstructL(); - CleanupStack::Pop( self ); - return self; - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiMmcMonitor::ConstructL() - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiMmcMonitor::ConstructL" ); - User::LeaveIfError( iFs.Connect() ); - const TDesC& memoryCardPath = PathInfo::MemoryCardRootPath(); - TInt driveNumber = 0; - if ( memoryCardPath.Length() > 0 ) - { - MUS_LOG( "mus: [MUSUI ] CMusUiMmcMonitor::ConstructL: \ - ( memoryCardPath.Length() > 0 )" ); - TChar driveChar( memoryCardPath[0] ); - iFs.CharToDrive( driveChar, driveNumber ); - iDriveNumber = static_cast(driveNumber); - } - else - { - MUS_LOG( "mus: [MUSUI ] CMusUiMmcMonitor::ConstructL: else" ); - TParsePtrC parser( RProcess().FileName() ); - TChar driveChar( parser.Drive()[0] ); - iFs.CharToDrive( driveChar, driveNumber ); - iDriveNumber = static_cast(driveNumber); - } - - iRemovableDrive = IsRemovableDrive( iDriveNumber ); - iDriveRemoved = DriveRemoved(); - MonitorMmc(); - MUS_LOG( "mus: [MUSUI ] <- CMusUiMmcMonitor::ConstructL" ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -CMusUiMmcMonitor::CMusUiMmcMonitor( MMusUiMmcObserver& aObserver ) - : CActive( CActive::EPriorityStandard ), - iObserver( aObserver ) - { - CActiveScheduler::Add( this ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -CMusUiMmcMonitor::~CMusUiMmcMonitor() - { - Cancel(); - iFs.Close(); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiMmcMonitor::RunL() - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiMmcMonitor::RunL" ); - if( DriveRemoved() ) - { - iObserver.MmcRemoved(); - } - else // continue monitoring - { - MonitorMmc(); - } - MUS_LOG( "mus: [MUSUI ] <- CMusUiMmcMonitor::RunL" ); - } - -// ------------------------------------------------------------------------- -// If RunL() leaves,It should be handled here. -// ------------------------------------------------------------------------- -// -TInt CMusUiMmcMonitor::RunError( TInt aError ) - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiMmcMonitor::RunError" ); - // Nothing can be done here. - aError = KErrNone; - - MUS_LOG( "mus: [MUSUI ] <- CMusUiMmcMonitor::RunError" ); - return aError; - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiMmcMonitor::DoCancel() - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiMmcMonitor::DoCancel" ); - iFs.NotifyChangeCancel(); - MUS_LOG( "mus: [MUSUI ] <- CMusUiMmcMonitor::DoCancel" ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiMmcMonitor::MonitorMmc() - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiMmcMonitor::MonitorMmc" ); - if( !IsActive() && iRemovableDrive && !iDriveRemoved ) - { - MUS_LOG( "mus: [MUSUI ] CMusUiMmcMonitor::MonitorMmc: calling iFs.NotifyChange" ); - iFs.NotifyChange( ENotifyDisk, iStatus ); - SetActive(); - } - MUS_LOG( "mus: [MUSUI ] <- CMusUiMmcMonitor::MonitorMmc" ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -TBool CMusUiMmcMonitor::DriveRemoved() - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiMmcMonitor::DriveRemoved" ); - if ( iDriveRemoved ) - { - return iDriveRemoved; - } - - TDriveInfo driveInfo; - iFs.Drive( driveInfo, iDriveNumber ); - - if ( driveInfo.iType == EMediaNotPresent ) - { - iDriveRemoved = ETrue; - } - - MUS_LOG( "mus: [MUSUI ] <- CMusUiMmcMonitor::DriveRemoved" ); - return iDriveRemoved; - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -TBool CMusUiMmcMonitor::IsRemovableDrive( TDriveNumber aDriveNumber ) - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiMmcMonitor::IsRemovableDrive" ); - TDriveInfo driveInfo; - iFs.Drive( driveInfo, aDriveNumber ); - MUS_LOG( "mus: [MUSUI ] <- CMusUiMmcMonitor::IsRemovableDrive" ); - return ( driveInfo.iDriveAtt & KDriveAttRemovable ); - } - -// End of File diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshui/src/musuinavimediaanimator.cpp --- a/mmsharing/mmshui/src/musuinavimediaanimator.cpp Thu Aug 19 09:51:39 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,333 +0,0 @@ -/* -* 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: -* -*/ - - - -#include "musuinavimediaanimator.h" -#include "musuidefinitions.h" -#include "muslogger.h" // debug logging -#include -//#include -//#include -#include -#include "musresourcefinderutil.h" - -#include // KDC_APP_BITMAP_DIR -#include -#include // CAknNavigationControlContainer -#include // CEikStatusPaneBase -#include -#include // scalable UI -#include // SetSize for the icons -#include -#include -#include -#include -#include - -using namespace AppLayout; - - -// CONSTANTS -const TInt KMusUiAnimatorTimer = 50000; // Default 50 ms, 20 fps - -const TInt KIconArraySize = 15; - -_LIT( KMyBitmapRomFile, "Z:\\resource\\apps\\musuiicons.mif" ); -_LIT( KMyBitmapRamFile, "C:\\resource\\apps\\musuiicons.mif" ); - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -CMusUiNaviMediaAnimator* CMusUiNaviMediaAnimator::NewL( - MMusUiNaviMediaAnimatorObserver& aObserver, TSize aImageSize ) - { - CMusUiNaviMediaAnimator* self = - new( ELeave ) CMusUiNaviMediaAnimator( aObserver, aImageSize ); - CleanupStack::PushL( self ); - self->ConstructL(); - CleanupStack::Pop( self ); - return self; - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -CMusUiNaviMediaAnimator::~CMusUiNaviMediaAnimator() - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiNaviMediaAnimator::~CMusUiNaviMediaAnimator" ); - - if ( iAnimationTimer->IsActive() ) - { - iAnimationTimer->Cancel(); - } - delete iAnimationTimer; - delete iBitmapArray; - - MUS_LOG( "mus: [MUSUI ] <- CMusUiNaviMediaAnimator::~CMusUiNaviMediaAnimator" ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -CMusUiNaviMediaAnimator::CMusUiNaviMediaAnimator( - MMusUiNaviMediaAnimatorObserver& aObserver, TSize aImageSize ) - : iObserver( aObserver ) - { - iSize = aImageSize; - MUS_LOG1( "mus: [MUSUI ] -> \ - CMusUiNaviMediaAnimator::CMusUiNaviMediaAnimator(): iSize.iWidth %d", - iSize.iWidth ) - MUS_LOG1( "mus: [MUSUI ] -> \ - CMusUiNaviMediaAnimator::CMusUiNaviMediaAnimator(): iSize.iHeight %d", - iSize.iHeight ) - iBitmapArray = NULL; - iInterval = KMusUiAnimatorTimer; - iIndex = 0; - - - - -/* iAnimationTimer->Start( iInterval, - iInterval, - TCallBack( AnimationInterval, this ) ); - */ - } - - -// ----------------------------------------------------------------------------- -// -// -// ----------------------------------------------------------------------------- -// -void CMusUiNaviMediaAnimator::ConstructL() - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiNaviMediaAnimator::ConstructL" ); - - if( MusResourceFinderUtil::IsExistL( KMyBitmapRomFile ) ) - { - iResourceRam = EFalse; - } - else if( MusResourceFinderUtil::IsExistL( KMyBitmapRamFile ) ) - { - iResourceRam = ETrue; - } - else - { - MUS_LOG( "mus: [MUSUI ] Icon File Not Found " ); - User::Leave(KErrNotFound); - } - - - LoadImagesL(); - - iAnimationTimer = CPeriodic::NewL( CActive::EPriorityStandard ); - - iAnimationTimer->Start( iInterval, - iInterval, - TCallBack( AnimationInterval, this ) ); - - - MUS_LOG( "mus: [MUSUI ] <- CMusUiNaviMediaAnimator::ConstructL" ); - } - - -// ----------------------------------------------------------------------------- -// -// -// ----------------------------------------------------------------------------- -// -void CMusUiNaviMediaAnimator::SetInterval( const TInt aAnimationInterval ) - { - iInterval = aAnimationInterval; - - - if ( iAnimationTimer->IsActive() ) - { - iAnimationTimer->Cancel(); - } - - iAnimationTimer->Start( iInterval, - iInterval, - TCallBack( AnimationInterval, this ) ); - } - - -// ----------------------------------------------------------------------------- -// Callback for disable level indicator. -// ----------------------------------------------------------------------------- -// -TInt CMusUiNaviMediaAnimator::AnimationInterval( TAny* aThis ) - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiNaviMediaAnimator::AnimationInterval()" ); - CMusUiNaviMediaAnimator* animator = - static_cast< CMusUiNaviMediaAnimator* > ( aThis ); - - - if ( animator->iBitmapArray ) - { - animator->iObserver.SetIcon( animator->iBitmapArray->At( animator->iIndex ) ); - if( animator->iIndex < ( animator->iBitmapArray->Count() - 1 ) ) - { - animator->iIndex++; - } - else - { - animator->iIndex = 0; - } - } - - MUS_LOG( "mus: [MUSUI ] <- CMusUiNaviMediaAnimator::AnimationInterval()" ); - return KErrNone; - } - - -// ----------------------------------------------------------------------------- -// Layouts the text depending on current icon situation. -// ----------------------------------------------------------------------------- -// -void CMusUiNaviMediaAnimator::LoadImagesL() - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiNaviMediaAnimator::DoLayoutText" ); - - delete iBitmapArray; - iBitmapArray = NULL; - iBitmapArray = new ( ELeave ) CAknIconArray( KIconArraySize ); - - TParse parse; - if( iResourceRam ) - { - parse.Set( KMyBitmapRamFile, &KDC_APP_RESOURCE_DIR, NULL ); - } - else - { - parse.Set( KMyBitmapRomFile, &KDC_APP_RESOURCE_DIR, NULL ); - } - - - MAknsSkinInstance* skin = AknsUtils::SkinInstance(); - - TAknsItemID item; - item.Set( 0xFFCC, 0xC ); // It's a kind a magic - - ConstructImageL( skin, - item, - EMbmMusuiiconsQgn_indi_video_wait1, - EMbmMusuiiconsQgn_indi_video_wait1_mask, - parse ); - - ConstructImageL( skin, - item, - EMbmMusuiiconsQgn_indi_video_wait2, - EMbmMusuiiconsQgn_indi_video_wait2_mask, - parse ); - - ConstructImageL( skin, - item, - EMbmMusuiiconsQgn_indi_video_wait3, - EMbmMusuiiconsQgn_indi_video_wait3_mask, - parse ); - - ConstructImageL( skin, - item, - EMbmMusuiiconsQgn_indi_video_wait4, - EMbmMusuiiconsQgn_indi_video_wait4_mask, - parse ); - - ConstructImageL( skin, - item, - EMbmMusuiiconsQgn_indi_video_wait5, - EMbmMusuiiconsQgn_indi_video_wait5_mask, - parse ); - - ConstructImageL( skin, - item, - EMbmMusuiiconsQgn_indi_video_wait6, - EMbmMusuiiconsQgn_indi_video_wait6_mask, - parse ); - - ConstructImageL( skin, - item, - EMbmMusuiiconsQgn_indi_video_wait7, - EMbmMusuiiconsQgn_indi_video_wait7_mask, - parse ); - - ConstructImageL( skin, - item, - EMbmMusuiiconsQgn_indi_video_wait8, - EMbmMusuiiconsQgn_indi_video_wait8_mask, - parse ); - - - - MUS_LOG( "mus: [MUSUI ] <- CMusUiNaviMediaAnimator::DoLayoutText" ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiNaviMediaAnimator::ConstructImageL( MAknsSkinInstance* aSkin, - const TAknsItemID& aId, - TInt aBitmapId, - TInt aMaskId, - TParse parse ) - - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiNaviMediaAnimator::ConstructImageL()" ); - - CFbsBitmap* bitmap = NULL; - CFbsBitmap* mask = NULL; - - - AknsUtils::CreateIconL(aSkin, - aId, - bitmap, - mask, - parse.FullName(), - aBitmapId, - aMaskId); - - AknIconUtils::SetSize( bitmap, iSize ); - AknIconUtils::SetSize( mask, iSize ); - - MUS_LOG1( "mus: [MUSUI ] -> CMusUiNaviMediaAnimator::ConstructImageL(): iSize.iWidth %d", - iSize.iWidth ) - MUS_LOG1( "mus: [MUSUI ] -> CMusUiNaviMediaAnimator::ConstructImageL(): iSize.iHeight %d", - iSize.iHeight ) - - CGulIcon* icon = CGulIcon::NewL(); - icon->SetBitmap( bitmap ); - icon->SetMask( mask ); - - CleanupStack::PushL( icon ); - iBitmapArray->AppendL( icon ); - CleanupStack::Pop( icon ); - - //aImage->SetPicture(bitmap, mask); // Owership transferred to CEikImage - - MUS_LOG( "mus: [MUSUI ] <- CMusUiNaviMediaAnimator::ConstructImageL()" ); - - } - diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshui/src/musuinavimediadecorator.cpp --- a/mmsharing/mmshui/src/musuinavimediadecorator.cpp Thu Aug 19 09:51:39 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,546 +0,0 @@ -/* -* 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: -* -*/ - - - -#include "musuinavimediadecorator.h" -#include "musuinavimediaanimator.h" -#include "musuidefinitions.h" -#include "muslogger.h" // debug logging -#include -//#include -//#include -#include -#include "musresourcefinderutil.h" - -#include // KDC_APP_BITMAP_DIR -#include -#include // CAknNavigationControlContainer -#include // CEikStatusPaneBase -#include -#include // scalable UI -#include // SetSize for the icons -#include -#include -#include -#include -#include - -using namespace AppLayout; - - -const TInt KMusDecoratorStability = 0; -const TInt KIconArraySize = 15; - -_LIT( KMyBitmapRomFile, "Z:\\resource\\apps\\musuiicons.mif" ); -_LIT( KMyBitmapRamFile, "C:\\resource\\apps\\musuiicons.mif" ); - - -#ifndef __MIN -#define __MIN(A, B) ((A) < (B) ? (A): (B)) -#endif -//macro -//_LIT( KMyMbmFileName, "z:Camcorder.mbm"); - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -CMusUiNaviMediaDecorator* CMusUiNaviMediaDecorator::NewL() - { - CMusUiNaviMediaDecorator* self = new( ELeave ) CMusUiNaviMediaDecorator(); - CleanupStack::PushL( self ); - self->ConstructL(); - CleanupStack::Pop( self ); - return self; - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -CMusUiNaviMediaDecorator::~CMusUiNaviMediaDecorator() - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiNaviMediaDecorator::~CMusUiNaviMediaDecorator" ); - delete iLeftLabel; - delete iRightLabel; - delete iIconArray; - delete iAnimation; - - MUS_LOG( "mus: [MUSUI ] <- CMusUiNaviMediaDecorator::~CMusUiNaviMediaDecorator" ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -CMusUiNaviMediaDecorator::CMusUiNaviMediaDecorator() - { - iMiddle = 0; - iLeftTextSize = TSize( 0, 0 ); - iRightTextSize = TSize( 0, 0 ); - iIcon = NULL; - iIconLeft = 50; // Only defaylt valut, it's overrided right away - iImageSize = TSize( 18, 18 ); // Only default value, it's overrided right avay - } - - -// ----------------------------------------------------------------------------- -// -// -// ----------------------------------------------------------------------------- -// -void CMusUiNaviMediaDecorator::ConstructL() - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiNaviMediaDecorator::ConstructL" ); - iLeftLabel = HBufC16::NewL(0); - iRightLabel = HBufC16::NewL(0); - - - iIconLayout.LayoutRect( Rect(), R_MUS_NAVI_MEDIA_ICON_LAYOUT_SIZE ); - iImageSize.iWidth = iIconLayout.Rect().Width(); - iImageSize.iHeight = iIconLayout.Rect().Height(); - - MUS_LOG1( "mus: [MUSUI ] -> CMusUiNaviMediaDecorator::ConstructL(): iImageSize.iWidth %d", - iImageSize.iWidth ) - MUS_LOG1( "mus: [MUSUI ] -> CMusUiNaviMediaDecorator::ConstructL(): iImageSize.iHeight %d", - iImageSize.iHeight ) - iLeftTextLayout.LayoutText( Rect(), - R_MUS_NAVI_MEDIA_TEXT_LEFT_LAYOUT ); - iRightTextLayout.LayoutText( Rect(), - R_MUS_NAVI_MEDIA_TEXT_RIGHT_LAYOUT ); - - - if( MusResourceFinderUtil::IsExistL( KMyBitmapRomFile ) ) - { - iResourceRam = EFalse; - } - else if( MusResourceFinderUtil::IsExistL( KMyBitmapRamFile ) ) - { - iResourceRam = ETrue; - } - else - { - MUS_LOG( "mus: [MUSUI ] Icon File Not Found " ); - User::Leave(KErrNotFound); - } - - LoadImagesL(); - - MUS_LOG( "mus: [MUSUI ] <- CMusUiNaviMediaDecorator::ConstructL" ); - } - - -// ----------------------------------------------------------------------------- -// -// -// ----------------------------------------------------------------------------- -// -void CMusUiNaviMediaDecorator::SetLeftLabelL( const TDesC& aLabel ) - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiNaviMediaDecorator::SetLabelL" ); - HBufC* newLabel = aLabel.AllocL(); - delete iLeftLabel; // after the AllocL succeeds - iLeftLabel = NULL; - iLeftLabel = newLabel; - TPtr ptr( iLeftLabel->Des() ); - AknTextUtils::LanguageSpecificNumberConversion( ptr ); - DoLayoutText(); - MUS_LOG( "mus: [MUSUI ] <- CMusUiNaviMediaDecorator::SetLabelL" ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiNaviMediaDecorator::SetRightLabelL( const TDesC& aLabel ) - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiNaviMediaDecorator::SetLabelL" ); - HBufC* newLabel = aLabel.AllocL(); - delete iRightLabel; // after the AllocL succeeds - iRightLabel = NULL; - iRightLabel = newLabel; - TPtr ptr( iRightLabel->Des() ); - AknTextUtils::LanguageSpecificNumberConversion( ptr ); - DoLayoutText(); - MUS_LOG( "mus: [MUSUI ] <- CMusUiNaviMediaDecorator::SetLabelL" ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiNaviMediaDecorator::ShowIcon( TMusUiNaviMediaDecorator aIcon ) - { - MUS_LOG1( "mus: [MUSUI ] -> CMusUiNaviMediaDecorator::ShowIcon( \ - TMusMediaNaviIcons aIcon ) #%d", aIcon ); - - delete iAnimation; - iAnimation = NULL; - - if( aIcon == EMusUiNaviIconNone ) - { - iIcon = NULL; - return; - } - else if( aIcon == EMusUiNaviIconWaitAnim ) - { - iIcon = NULL; - iIconLayout.LayoutRect( Rect(), R_MUS_NAVI_MEDIA_ICON_LAYOUT_SIZE ); - iImageSize.iWidth = iIconLayout.Rect().Width(); - iImageSize.iHeight = iIconLayout.Rect().Height(); - TRAPD( err, iAnimation = CMusUiNaviMediaAnimator::NewL( *this, iImageSize ); ) - if( err == KErrNone ) - { - //iAnimation->SetInterval( 50000 ); - } - } - else if( iIconArray->Count() > aIcon ) - { - iIcon = static_cast< CGulIcon* > ( iIconArray->At( aIcon) ); - } - else - { - iIcon = NULL; - } - if( !iAnimation ) - { - DrawNow(); - } - - MUS_LOG( "mus: [MUSUI ] <- CMusUiNaviMediaDecorator::ShowIcon( \ - TMusMediaNaviIcons aIcon )" ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiNaviMediaDecorator::SetIcon( CGulIcon* aIcon ) - { - iIcon = aIcon; - DrawNow(); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiNaviMediaDecorator::SizeChanged() - { - AknsUtils::RegisterControlPosition( this ); - DoLayoutText(); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiNaviMediaDecorator::Draw( const TRect& aRect ) const - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiNaviMediaDecorator::Draw" ); - - CWindowGc& gc = SystemGc(); - MAknsSkinInstance* skin = AknsUtils::SkinInstance(); - // Get skinned bitmap - CFbsBitmap* skinBitmap = - AknsUtils::GetCachedBitmap( skin, KAknsIIDQsnIconColors ); - if( iIcon ) - { - MAknsControlContext* cc = AknsDrawUtils::ControlContext( this ); - AknsDrawUtils::Background( skin, cc,this, gc , aRect , KAknsDrawParamDefault ); - gc.BitBltMasked( TPoint( iIconLeft,1), - iIcon->Bitmap(), - iIconLayout.Rect(), - iIcon->Mask(), - EFalse ); - } - // draw time indicator - - //TRgb color = iLeftTextLayout.Color(); - - TRgb color; - - AknsUtils::GetCachedColor( skin, color, KAknsIIDQsnTextColors, EAknsCIQsnTextColorsCG2 ); - - gc.SetPenColor( color ); - gc.UseFont( iLeftTextLayout.Font() ); - - - TInt flTop = ( ( aRect.Height() >> 1 ) - - ( iLeftTextLayout.Font()->AscentInPixels() >> 1 ) ) - + aRect.iTl.iY - 1; // -1 because some rounding things - - gc.DrawText( *iLeftLabel, - TRect( aRect.iTl.iX+1, flTop, aRect.iBr.iX, aRect.iBr.iY ), - iLeftTextLayout.Font()->AscentInPixels() + 1, - iLeftTextLayout.Align() ); - - TInt frTop = ( ( aRect.Height() >> 1 ) - - ( iRightTextLayout.Font()->AscentInPixels() >> 1 ) ) - + aRect.iTl.iY - 1; // -1 because some rounding things - - TInt frLeft; - TInt frRight; - - if ( AknLayoutUtils::LayoutMirrored() ) - { - frLeft = aRect.iTl.iX; - frRight = iRightTextSize.iWidth + 1; - } - else - { - frLeft = aRect.iBr.iX - iRightTextSize.iWidth - 1; - frRight = aRect.iBr.iX; - } - - gc.DrawText( *iRightLabel, - TRect( frLeft, frTop, frRight, aRect.iBr.iY ), - iRightTextLayout.Font()->AscentInPixels() + 1, - iRightTextLayout.Align() ); - - - MUS_LOG( "mus: [MUSUI ] <- CMusUiNaviMediaDecorator::Draw " ); - } - - -// ----------------------------------------------------------------------------- -// Layouts the text depending on current icon situation. -// ----------------------------------------------------------------------------- -// -void CMusUiNaviMediaDecorator::DoLayoutText() - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiNaviMediaDecorator::DoLayoutText" ); - TRect parent( Rect() ); - if ( parent.IsEmpty() ) - { - MUS_LOG( "mus: [MUSUI ] <- CMusUiNaviMediaDecorator::DoLayoutText: return" ); - return; - } - - TInt minsize = __MIN( parent.Width(), parent.Height() ); - iImageSize = TSize( minsize-2, minsize-2 ); - - - // Reassign text sizes - TAknTextLineLayout txtLayout = AppLayout::Navipanetexts_Line_2(); - const TInt spaceBetweenIconsAndText = 1; - txtLayout.il = spaceBetweenIconsAndText; - - iLeftTextLayout.LayoutText( parent, txtLayout ); - iRightTextLayout.LayoutText( parent, txtLayout ); - - TSize parentSize = TSize( parent.iBr.iX - parent.iTl.iX, - parent.iBr.iY - parent.iTl.iY ); - - //TInt clientWidth = parent.iBr.iX - parent.iTl.iX; - - iLeftTextSize.iWidth = - iLeftTextLayout.Font()->TextWidthInPixels( iLeftLabel->Des() ); - iRightTextSize.iWidth = - iRightTextLayout.Font()->TextWidthInPixels( iRightLabel->Des() ); - - // First testing elements total width - if( iLeftTextSize.iWidth + iRightTextSize.iWidth + iIconLayout.Rect().iBr.iX - > parentSize.iWidth ) - { - // Whole stuff is too large - _LIT( KMusStringThreeDots, "..."); - TRAP_IGNORE( SetRightLabelL( KMusStringThreeDots ) ); - } - - // Middle point of Icon box in current text parameters - TInt middle = parent.iTl.iX + ( parentSize.iWidth >> 1 ); - - // If there collision, calculates middle of the text fields - iIconLeft = middle - parent.iTl.iX - ( iIconLayout.Rect().iBr.iX >> 1 ); - TInt iconRight = - middle - parent.iTl.iX + ( iIconLayout.Rect().iBr.iX >> 1 ); - - if( iLeftTextSize.iWidth > iIconLeft || - ( parentSize.iWidth - iRightTextSize.iWidth ) < iconRight ) - { - middle = (( parentSize.iWidth - - ( iLeftTextSize.iWidth + iRightTextSize.iWidth )) >> 1 ) - + parent.iTl.iX + iLeftTextSize.iWidth; - } - - - // Move only if middle place moves enough eq. ignoring jumping - if( middle < ( iMiddle - KMusDecoratorStability ) - || middle > ( iMiddle + KMusDecoratorStability ) ) - { - iMiddle = middle; - } - - iLeftTextSize.iHeight = iLeftTextLayout.Font()->HeightInPixels(); - iRightTextSize.iHeight = iRightTextLayout.Font()->HeightInPixels(); - - MUS_LOG( "mus: [MUSUI ] <- CMusUiNaviMediaDecorator::DoLayoutText" ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiNaviMediaDecorator::LoadImagesL() - { - - delete iIconArray; - iIconArray = NULL; - iIconArray = new ( ELeave ) CAknIconArray( KIconArraySize ); - - TParse parse; - if( iResourceRam ) - { - parse.Set( KMyBitmapRamFile, &KDC_APP_RESOURCE_DIR, NULL ); - } - else - { - parse.Set( KMyBitmapRomFile, &KDC_APP_RESOURCE_DIR, NULL ); - } - - - MAknsSkinInstance* skin = AknsUtils::SkinInstance(); - - TAknsItemID item; - item.Set( 0xFFCC, 0xC ); // It's a kind a magic - - - ConstructImageL( skin, - item, - EMbmMusuiiconsQgn_indi_video_forw, - EMbmMusuiiconsQgn_indi_video_forw_mask, - parse, - EFalse ); - - ConstructImageL( skin, - item, - EMbmMusuiiconsQgn_indi_video_pause, - EMbmMusuiiconsQgn_indi_video_pause_mask, - parse, - EFalse ); - - ConstructImageL( skin, - item, - EMbmMusuiiconsQgn_indi_video_play, - EMbmMusuiiconsQgn_indi_video_play_mask, - parse, - ETrue ); - - ConstructImageL( skin, - item, - EMbmMusuiiconsQgn_indi_video_record, - EMbmMusuiiconsQgn_indi_video_record_mask, - parse, - ETrue ); - - ConstructImageL( skin, - item, - EMbmMusuiiconsQgn_indi_video_record_not, - EMbmMusuiiconsQgn_indi_video_record_not_mask, - parse, - ETrue ); - - ConstructImageL( skin, - item, - EMbmMusuiiconsQgn_indi_video_rew, - EMbmMusuiiconsQgn_indi_video_rew_mask, - parse, - EFalse ); - - ConstructImageL( skin, - item, - EMbmMusuiiconsQgn_indi_video_stop, - EMbmMusuiiconsQgn_indi_video_stop_mask, - parse, - EFalse ); - - } - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiNaviMediaDecorator::ConstructImageL( MAknsSkinInstance* aSkin, - const TAknsItemID& aId, - TInt aBitmapId, - TInt aMaskId, - TParse parse, - TBool aIconHasOwnColor ) - - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiNaviMediaDecorator::ConstructImageL()" ); - - CFbsBitmap* bitmap = NULL; - CFbsBitmap* mask = NULL; - - if (aIconHasOwnColor) - { - AknsUtils::CreateIconL(aSkin, - aId, - bitmap, - mask, - parse.FullName(), - aBitmapId, - aMaskId); - - } - else - { - AknsUtils::CreateColorIconL(aSkin, - aId, - KAknsIIDQsnIconColors, - EAknsCIQsnIconColorsCG7, - bitmap, - mask, - parse.FullName(), - aBitmapId, - aMaskId, - KRgbBlack); - } - - AknIconUtils::SetSize( bitmap, iImageSize ); - AknIconUtils::SetSize( mask, iImageSize ); - MUS_LOG1( "mus: [MUSUI ] -> CMusUiNaviMediaDecorator::ConstructIconL(): iImageSize.iWidth %d", - iImageSize.iWidth ) - MUS_LOG1( "mus: [MUSUI ] -> CMusUiNaviMediaDecorator::ConstructIconL(): iImageSize.iHeight %d", - iImageSize.iHeight ) - - - CGulIcon* icon = CGulIcon::NewL(); - icon->SetBitmap( bitmap ); - icon->SetMask( mask ); - - CleanupStack::PushL( icon ); - iIconArray->AppendL( icon ); - CleanupStack::Pop( icon ); - - MUS_LOG( "mus: [MUSUI ] <- CMusUiNaviMediaDecorator::ConstructIconL()" ); - - } - -// end of file diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshui/src/musuipropertywatch.cpp --- a/mmsharing/mmshui/src/musuipropertywatch.cpp Thu Aug 19 09:51:39 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,178 +0,0 @@ -/* -* 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: -* -*/ - - - -#include "musuipropertywatch.h" -#include "musuipropertyobserver.h" -#include "mussessionproperties.h" -#include "musresourceproperties.h" -#include "muslogger.h" // debug logging - -using namespace NMusSessionApi; - -// ----------------------------------------------------------------------------- -// Symbian two-phase constructor. -// ----------------------------------------------------------------------------- -// -CMusUiPropertyWatch* CMusUiPropertyWatch::NewL( - MMusUiPropertyObserver& aObserver, - TUid aCategory, - const TInt aPropertyName ) - { - CMusUiPropertyWatch* self = new (ELeave) CMusUiPropertyWatch( - aObserver, - aCategory, - aPropertyName ); - CleanupStack::PushL( self ); - self->ConstructL(); - CleanupStack::Pop( self ); - return self; - } - - -// ----------------------------------------------------------------------------- -// C++ destructor. -// ----------------------------------------------------------------------------- -// -CMusUiPropertyWatch::~CMusUiPropertyWatch() - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiPropertyWatch::~CMusUiPropertyWatch" ); - if ( IsActive() ) - { - Cancel(); - } - iProperty.Close(); - MUS_LOG( "mus: [MUSUI ] <- CMusUiPropertyWatch::~CMusUiPropertyWatch" ); - } - - -// ----------------------------------------------------------------------------- -// C++ constructor. -// ----------------------------------------------------------------------------- -// -CMusUiPropertyWatch::CMusUiPropertyWatch( MMusUiPropertyObserver& aObserver, - TUid aCategory, - const TInt aPropertyName ) : - CActive( EPriorityNormal ), - iObserver( aObserver ) - { - iPropertyCategory = aCategory; - iPropertyKey = aPropertyName; - } - - -// ----------------------------------------------------------------------------- -// Symbian second-phase constructor. -// ----------------------------------------------------------------------------- -// -void CMusUiPropertyWatch::ConstructL( ) - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiPropertyWatch::ConstructL" ); - User::LeaveIfError( iProperty.Attach( iPropertyCategory, - iPropertyKey) ); - CActiveScheduler::Add( this ); - RunL(); - MUS_LOG( "mus: [MUSUI ] <- CMusUiPropertyWatch::ConstructL" ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -TInt CMusUiPropertyWatch::ReadIntPropertyL( TUint aKey ) - { - MUS_LOG1( "mus: [MUSUI ] -> CMusUiPropertyWatch::ReadIntPropertyL: aKey: [%d]", - aKey ); - TInt val; - User::LeaveIfError( RProperty::Get( KCategoryUid, - aKey, - val ) ); - MUS_LOG1( "mus: [MUSUI ] <- CMusUiPropertyWatch::ReadIntPropertyL: val: [%d]", - val ); - return val; - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -HBufC* CMusUiPropertyWatch::ReadDescPropertyL( TUint aKey ) - { - MUS_LOG1( "mus: [MUSUI ] -> CMusUiPropertyWatch::ReadDescPropertyL: aKey: [%d]", - aKey ); - TBuf buffer; - - User::LeaveIfError( RProperty::Get( KCategoryUid, - aKey, - buffer ) ); - HBufC* desc = buffer.AllocL(); - MUS_LOG_TDESC( "mus: [MUSUI ] <- CMusUiPropertyWatch::ReadDescPropertyL: val: ", - (*desc) ); - return desc; - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiPropertyWatch::DoCancel() - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiPropertyWatch::DoCancel" ); - iProperty.Cancel(); - MUS_LOG( "mus: [MUSUI ] <- CMusUiPropertyWatch::DoCancel" ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiPropertyWatch::RunL() - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiPropertyWatch::RunL" ); - TInt val; - - User::LeaveIfError( RProperty::Get( iPropertyCategory, - iPropertyKey, - val ) ); - iProperty.Subscribe( iStatus ); - SetActive(); - - iObserver.PropertyChanged( iPropertyKey, val ); - - MUS_LOG( "mus: [MUSUI ] <- CMusUiPropertyWatch::RunL" ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -TInt CMusUiPropertyWatch::RunError( TInt aError ) - { - MUS_LOG1( "mus: [MUSUI ] -> CMusUiPropertyWatch::RunError [%d]", aError ); - iObserver.HandlePropertyError( aError ); - MUS_LOG( "mus: [MUSUI ] <- CMusUiPropertyWatch::RunError" ); - return KErrNone; - } - - -// end of file diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshui/src/musuireceivecontainer.cpp --- a/mmsharing/mmshui/src/musuireceivecontainer.cpp Thu Aug 19 09:51:39 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,341 +0,0 @@ -/* -* 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: The MUS application's UI class. -* -*/ - - -#include "musuireceivecontainer.h" -#include "musuieventcontroller.h" -#include "musuigeneralview.h" -#include "musuireceiveview.h" -#include "musuiinvitationquery.h" -#include "musuiinvitationqueryobserver.h" -#include "musuiappui.h" -#include "musuidialogutil.h" -#include "musuidefinitions.h" -#include "musui.hrh" -#include "muslogger.h" // debug logging -#include - -#include -#include -#include -#include -#include - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -CMusUiReceiveContainer* CMusUiReceiveContainer::NewL( - CMusUiReceiveView& aView, - const TRect aRect ) - { - CMusUiReceiveContainer* self - = new( ELeave ) CMusUiReceiveContainer( aView ); - - CleanupStack::PushL( self ); - self->ConstructL( aRect ); - CleanupStack::Pop( self ); - - return self; - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -CMusUiReceiveContainer::~CMusUiReceiveContainer() - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiReceiveContainer::~CMusUiReceiveContainer" ); - - if ( iInvitationQuery ) - { - iInvitationQuery->Cancel(); - delete iInvitationQuery; - iInvitationQuery = NULL; - } - - delete iBackGround; - MUS_LOG( "mus: [MUSUI ] <- CMusUiReceiveContainer::~CMusUiReceiveContainer" ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -CMusUiReceiveContainer::CMusUiReceiveContainer( CMusUiReceiveView& aView ) - : iView( aView ) - { - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiReceiveContainer::ConstructL( const TRect& aRect ) - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiReceiveContainer::ConstructL" ); - CreateWindowL(); - iBackGround = CAknsBasicBackgroundControlContext::NewL( - KAknsIIDQsnBgAreaMain, - aRect, - EFalse ); - iFullScreen = EFalse; - SetRect( aRect ); - ActivateL(); - - iOperatorSpecificFunctionality = iView.OperatorSpecificFunctionality(); - MUS_LOG( "mus: [MUSUI ] <- CMusUiReceiveContainer::ConstructL" ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiReceiveContainer::ShowInvitationQueryL( - const TDesC& aContact, - MMusUiInvitationQueryObserver& aObserver ) - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiReceiveContainer::ShowInvitationQueryL" ); - if ( !iInvitationQuery ) - { - iInvitationQuery = CMusUiInvitationQuery::NewL( aObserver ); - } - iInvitationQuery->ShowL( aContact ); - MUS_LOG( "mus: [MUSUI ] <- CMusUiReceiveContainer::ShowInvitationQueryL" ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiReceiveContainer::DismissInvitationQuery( TBool aDelete ) - { - if ( iInvitationQuery ) - { - iInvitationQuery->Cancel(); - if ( aDelete ) - { - delete iInvitationQuery; - iInvitationQuery = NULL; - } - } - } - - -// ----------------------------------------------------------------------------- -// Fetches a pointer to the view that owns this container. -// ----------------------------------------------------------------------------- -// -CMusUiGeneralView* CMusUiReceiveContainer::MusUiView() const - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiReceiveContainer::MusUiView" ); - MUS_LOG( "mus: [MUSUI ] <- CMusUiReceiveContainer::MusUiView" ); - return &iView; - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiReceiveContainer::SetFullScreen( TBool aFullScreen, TRect aRect ) - { - MUS_LOG1( "mus: [MUSUI ] -> CMusUiReceiveContainer::SetFullScreen: %d", - aFullScreen ); - iFullScreen = aFullScreen; - - if ( aFullScreen ) - { - // In order to capture pointer events this container must be visible. - // Thus we make it as small as possible. - SetRect( TRect( 0, 0, 0, 0) ); - MakeVisible( ETrue ); - SetGloballyCapturing( ETrue ); - SetPointerCapture( ETrue ); - } - else - { - SetRect( aRect ); - SetPointerCapture( EFalse ); - MakeVisible( EFalse ); - } - - MUS_LOG( "mus: [MUSUI ] <- CMusUiReceiveContainer::SetFullScreen" ); - } - - -// ----------------------------------------------------------------------------- -// Called by framework when the view size is changed -// ----------------------------------------------------------------------------- -// -void CMusUiReceiveContainer::SizeChanged() - { - TRect parentRect(Rect()); - if (iBackGround) - { - (static_cast(iBackGround))->SetRect(parentRect); - } - MakeVisible( EFalse ); - } - - -// ----------------------------------------------------------------------------- -// Called by framework when to retrieve the no. of controls. -// ----------------------------------------------------------------------------- -// -TInt CMusUiReceiveContainer::CountComponentControls() const - { - return 0; // return nbr of controls inside this container - } - - -// ----------------------------------------------------------------------------- -// Called by framework to retrieve the control specified by index. -// ----------------------------------------------------------------------------- -// -CCoeControl* CMusUiReceiveContainer::ComponentControl( TInt aIndex ) const - { - switch ( aIndex ) - { - default: - return NULL; - } - } - - -// ----------------------------------------------------------------------------- -// Called by framework to redraw the screen area. -// ----------------------------------------------------------------------------- -// -void CMusUiReceiveContainer::Draw( const TRect& aRect ) const - { - CWindowGc& gc = SystemGc(); - - gc.Clear( aRect ); - MAknsSkinInstance* skin = AknsUtils::SkinInstance(); - MAknsControlContext* cc = AknsDrawUtils::ControlContext( this ); - if(!AknsDrawUtils::Background( skin, cc,this,gc,aRect,KAknsDrawParamDefault )) - { - gc.SetBrushColor( iEikonEnv->ControlColor( EColorWindowBackground, *this ) ); - gc.SetBrushStyle( CGraphicsContext::ESolidBrush ); - gc.Clear( aRect ); - } - } - - -// ----------------------------------------------------------------------------- -// Called by framework -// ----------------------------------------------------------------------------- -// -TKeyResponse CMusUiReceiveContainer::OfferKeyEventL( const TKeyEvent& aEvent, - TEventCode aType ) - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiReceiveContainer::OfferKeyEventL" ); - - if ( iFullScreen && aType == EEventKey ) - { - // We respond to whatever key by returning from fullscreen - if( MUS_NO_TOOLBAR ) - { - (static_cast - (MusUiView()))->HandleCommandL( EMusuiCmdViewFullScreen ); - } - else - { - (static_cast - (MusUiView()))->HandleCommandL( EMusuiCmdToolbarFullScreen ); - } - return EKeyWasConsumed; - } - - switch ( aEvent.iCode ) - { - // Volume Control - case EKeyLeftArrow: - { - (static_cast - (MusUiView()))->HandleCommandL( EMusuiCmdViewVolumeDown ); - return EKeyWasConsumed; - } - case EKeyRightArrow: - { - (static_cast - (MusUiView()))->HandleCommandL( EMusuiCmdViewVolumeUp ); - return EKeyWasConsumed; - } - - // TODO: - case EKeyUpArrow: - { - break; - } - case EKeyDownArrow: - { - break; - } - default: - return EKeyWasNotConsumed; - } - - MUS_LOG( "mus: [MUSUI ] <- CMusUiReceiveContainer::OfferKeyEventL" ); - return EKeyWasNotConsumed; - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiReceiveContainer::HandlePointerEventL( const TPointerEvent& ) - { - if ( iFullScreen ) - { - // We respond to whatever pointer event by returning from fullscreen - (static_cast - (MusUiView()))->HandleCommandL( EMusuiCmdToolbarFullScreen ); - } - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiReceiveContainer::UpdatePointerCapture() - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiReceiveContainer::UpdatePointerCapture" ); - - if ( iFullScreen ) - { - // In order to capture pointer events this container must be visible. - // Thus we make it as small as possible. - SetRect( TRect( 0, 0, 0, 0 ) ); - MakeVisible( ETrue ); - SetGloballyCapturing( ETrue ); - SetPointerCapture( ETrue ); - } - - MUS_LOG( "mus: [MUSUI ] <- CMusUiReceiveContainer::UpdatePointerCapture" ); - } - -// end of file diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshui/src/musuireceivecontroller.cpp --- a/mmsharing/mmshui/src/musuireceivecontroller.cpp Thu Aug 19 09:51:39 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,876 +0,0 @@ -/* -* 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: Application's UI class. -* Version : %version: be1sipx1#75.1.17 % << Don't touch! Updated by Synergy at check-out. -* -*/ - - - -#include "musuireceivecontroller.h" -#include "musuieventobserver.h" -#include "musuisharingobserver.h" -#include "musuireceiveobserver.h" -#include "musuicallbackservice.h" -#include "musuiactivetimer.h" -#include "musuidialogutil.h" -#include "musuicontactutil.h" -#include "mussettings.h" -#include "mussettingskeys.h" -#include "musuiresourcehandler.h" -#include "musengreceivesession.h" -#include "musenguriparser.h" -#include "mussessionproperties.h" -#include "muslogger.h" // debug logging -#include "musuiappui.h" -#include "musuireceiveview.h" -#include "musuipropertywatch.h" -#include "mussesseioninformationapi.h" -#include "musui.hrh" -#include - -#include -#include -#include - -using namespace MusSettingsKeys; -using namespace NMusSessionApi; - -const TInt KMusMinDigitCountInValidTelNumber = 7; - -/* - * Private number. -*/ -_LIT( KPrivateNumber, "" ); - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -CMusUiReceiveController* CMusUiReceiveController::NewL( - MMusUiEventObserver& aEventObserver, - MMusUiSharingObserver& aSharingObserver, - MMusUiReceiveObserver& aReceiveObserver, - const TRect& aRect ) - { - CMusUiReceiveController* self = new( ELeave ) CMusUiReceiveController( - aEventObserver, - aSharingObserver, - aReceiveObserver ); - CleanupStack::PushL( self ); - self->ConstructL( aRect ); - CleanupStack::Pop( self ); - return self; - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -CMusUiReceiveController::~CMusUiReceiveController() - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiReceiveController::~CMusUiReceiveController" ); - delete iSession; - delete iOriginator; - delete iTimer; - MUS_LOG( "mus: [MUSUI ] <- CMusUiReceiveController::~CMusUiReceiveController" ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -CMusUiReceiveController::CMusUiReceiveController( - MMusUiEventObserver& aEventObserver, - MMusUiSharingObserver& aSharingObserver, - MMusUiReceiveObserver& aReceiveObserver ) - : CMusUiEventController( aEventObserver, aSharingObserver ), - iReceiveObserver( aReceiveObserver ) - { - - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiReceiveController::ConstructL( const TRect& aRect ) - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiReceiveController::ConstructL" ); - - // construct event listener - CMusUiEventController::ConstructL(); - - // construct an engine session - iSession = CMusEngReceiveSession::NewL( aRect, *this, *this ); - iSession->SetAudioRoutingObserver( this ); - iSession->SetVolumeChangeObserver( this ); - - iTimer = CMusUiActiveTimer::NewL( this ); - iTimer->After( KMusReceiveTimeout ); - - MUS_LOG( "mus: [MUSUI ] <- CMusUiReceiveController::ConstructL" ); - } - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiReceiveController::ChangeFullScreenModeL() - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiReceiveController::ChangeFullScreenModeL" ); - - iFullScreenSelected = !iFullScreenSelected; - - if ( !MUS_NO_TOOLBAR ) - { - iSharingObserver.HighlightSelectedToolbarItem( EMusuiCmdToolbarFullScreen ); - } - - iReceiveObserver.SetFullScreenL( iFullScreenSelected ); - - if ( ( iEventObserver.AppOrientation()!= CAknAppUiBase::EAppUiOrientationLandscape ) - && iFullScreenSelected ) - { - if( !iEventObserver.OrientationCanBeChanged() ) - { - MUS_LOG( "mus: [MUSUI ] !OrientationCanBeChanged()" ); - iSession->SetOrientationL( CMusEngMceSession::ELandscape ); - } - } - else if ( ( iSession->OrientationL() != iOriginalMceOrientation ) - && !iFullScreenSelected ) - { - if( !iEventObserver.OrientationCanBeChanged() ) - { - MUS_LOG( "mus: [MUSUI ] !OrientationCanBeChanged()" ); - iSession->SetOrientationL( iOriginalMceOrientation ); - } - } - - MUS_LOG( "mus: [MUSUI ] <- CMusUiReceiveController::ChangeFullScreenModeL" ); - } - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiReceiveController::OfferToolbarEventL( TInt aCommand ) - { - MUS_LOG1( "mus: [MUSUI ] -> CMusUiReceiveController::OfferToolbarEventL [%d]", - aCommand ); - - switch ( aCommand ) - { - case EMusuiCmdToolbarFullScreen: - { - ChangeFullScreenModeL(); - break; - } - default: // Not receive specific, let the base class handle - { - CMusUiEventController::OfferToolbarEventL( aCommand ); - break; - } - - } - MUS_LOG( "mus: [MUSUI ] <- CMusUiReceiveController::OfferToolbarEventL" ); - } - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiReceiveController::HandleCommandL( TInt aCommand ) - { - MUS_LOG1( "mus: [MUSUI ] -> CMusUiReceiveController::HandleCommandL: %d", - aCommand ); - - switch ( aCommand ) - { - // Menu commands from view's HandleCommandL: - case EMusuiCmdViewAudioNormal: - { - MUS_LOG( "mus: [MUSUI ] CMusUiReceiveController::ConstructL:\ - EMusuiCmdViewAudioNormal" ); - if ( iSession->ContainsAudioL() ) - { - iSession->UnmuteL(); - } - break; - } - case EMusuiCmdViewAudioMute: - { - MUS_LOG( "mus: [MUSUI ] CMusUiReceiveController::ConstructL:\ - EMusuiCmdViewAudioMute" ); - if ( iSession->ContainsAudioL() ) - { - iSession->MuteL(); - } - break; - } - case EMusuiCmdToolbarFullScreen: - { - OfferToolbarEventL( EMusuiCmdToolbarFullScreen ); - break; - } - case EMusuiCmdViewFullScreen: - { - ChangeFullScreenModeL(); - break; - } - default: - { - // Try more general handling - CMusUiEventController::HandleCommandL( aCommand ); - break; - } - } - MUS_LOG( "mus: [MUSUI ] <- CMusUiReceiveController::HandleCommandL" ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiReceiveController::HandleIncomingSessionL( - const TDesC& aOriginator, - const TDesC& aOriginatorIdentity ) - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiReceiveController::HandleIncomingSessionL" ) - - delete iOriginator; - iOriginator = NULL; - TInt privacyStatus(0); - - - MUS_LOG( "mus: [MUSUI ] Check private number" ) - TRAPD( errorPrivacyStatus, privacyStatus = - CMusUiPropertyWatch::ReadIntPropertyL( NMusSessionApi::KPrivacyStatus ) ); - if ( errorPrivacyStatus != KErrNone ) - { - MUS_LOG1( "mus: [MUSUI ] ReadIntPropertyL leave code: %d", errorPrivacyStatus ) - HandleError( errorPrivacyStatus ); - } - - if ( privacyStatus == 1 && !iOperatorSpecificFunctionality ) - { - MUS_LOG( "mus: [MUSUI ] Call is from private number" ) - iOriginator = KPrivateNumber().AllocL(); - } - else if( iOperatorSpecificFunctionality ) - { - iOriginator = aOriginatorIdentity.AllocL(); - } - else - { - iOriginator = aOriginator.AllocL(); - } - - // Cancel the 10 seconds timer: - iTimer->Cancel(); - - // Display the query dialog: - - if ( privacyStatus == 1 && !iOperatorSpecificFunctionality ) - { - iReceiveObserver.ShowInvitationQueryL( *iOriginator ); - } - else if ( iOperatorSpecificFunctionality && aOriginatorIdentity.Length() != 0 ) - { - // We compare last seven digits, since that is the minimum amount - // that can make up a valid telephone number. - MUS_LOG_TDESC( "mus: [MUSUI ] Right7 of MusTelNumberValue(): ", - MusTelNumberValue().Right( KMusMinDigitCountInValidTelNumber ) ) - MUS_LOG_TDESC( "mus: [MUSUI ] Right7 of aOriginatorIdentity: ", - aOriginatorIdentity.Right( KMusMinDigitCountInValidTelNumber ) ) - MUS_LOG_TDESC( "mus: [MUSUI ] MusContactName: ", MusContactName() ) - - if ( !( MusTelNumberValue().Length() >= - KMusMinDigitCountInValidTelNumber && - aOriginatorIdentity.Length() >= - KMusMinDigitCountInValidTelNumber && - MusTelNumberValue().Right( KMusMinDigitCountInValidTelNumber ) == - aOriginatorIdentity.Right( KMusMinDigitCountInValidTelNumber ) && - MusContactName().Length() > 0 ) ) - { - // In some very rare scenario a valid session may come from MSISDN - // that is not the same as the one received from manager. To avoid - // showing of wrong MSISDN, we replace phone number with one - // received from P-Asserted-Identity header. Since in this scenario - // we cannot be sure about contact name either, we replace it with - // phone number. Replacing of contact name must happen also when we - // have no name for contact. - delete iTelNumber; - iTelNumber = NULL; - iTelNumber = aOriginatorIdentity.AllocL(); - - delete iContactName; - iContactName = NULL; - iContactName = aOriginatorIdentity.AllocL(); - } - - iReceiveObserver.ShowInvitationQueryL( MusContactName() ); - - } - else - { - if( MusUiContactUtil::CheckPbContactForVSAddressesL( - *( iEventObserver.EikonEnv() ), *iOriginator, iContactId ) ) - { - if ( MusContactName().Length() < 1 ) - { // originator is defined in Contacts but the name is empty - iReceiveObserver.ShowInvitationQueryL( *iOriginator ); - } - else - { - iReceiveObserver.ShowInvitationQueryL( MusContactName() ); - } - } - else - { - iReceiveObserver.ShowInvitationQueryL( *iOriginator ); - } - } - - MUS_LOG( "mus: [MUSUI ] <- CMusUiReceiveController::HandleIncomingSessionL" ) - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -TBool CMusUiReceiveController::ClipMutedL() - { - return iSession->IsMutedL(); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -TBool CMusUiReceiveController::ClipContainsAudioL() - { - if ( !ConnectionInitialized() ) - { - return EFalse; // We cannot be sure yet - } - - return iSession->ContainsAudioL(); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -CMusEngMceSession* CMusUiReceiveController::EngineSession() - { - return iSession; // CMusEngReceiveSession is CMusEngMceSession - } - - -// ----------------------------------------------------------------------------- -// Virtual function from CMusUiEventController -// ----------------------------------------------------------------------------- -// -void CMusUiReceiveController::HandleAsyncEventL( TMusUiAsyncEvent aEventId ) - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiReceiveController::HandleAsyncEventL" ); - switch ( aEventId ) - { - case EMusUiAsyncInviteAccepted: - { - ShowWaitDialogL(); - break; - } - default: - { - // Not receive specific, let the base class handle - CMusUiEventController::HandleAsyncEventL( aEventId ); - } - } - MUS_LOG( "mus: [MUSUI ] <- CMusUiReceiveController::HandleAsyncEventL" ); - } - - -// ----------------------------------------------------------------------------- -// Virtual function from CMusUiEventController -// ----------------------------------------------------------------------------- -// -const TDesC& CMusUiReceiveController::TypedAddress() const - { - return *iOriginator; - } - - -// ----------------------------------------------------------------------------- -// Virtual function from CMusUiEventController -// ----------------------------------------------------------------------------- -// -void CMusUiReceiveController::DeleteEngineSession() - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiReceiveController::DeleteEngineSession" ); - if ( iSession && iSession->IsAudioRoutingLoudSpeaker() ) - { - iShowDialog = ETrue; - } - delete iSession; - iSession = NULL; - MUS_LOG( "mus: [MUSUI ] <- CMusUiReceiveController::DeleteEngineSession" ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -TBool CMusUiReceiveController::FullScreenSelected() - { - return iFullScreenSelected; - } - - -// ----------------------------------------------------------------------------- -// From MMusEngReceiveSessionObserver -// ----------------------------------------------------------------------------- -// -void CMusUiReceiveController::IncomingSessionPreNotification() - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiReceiveController::IncomingSessionPreNotification" ); - iTimer->Cancel(); - MUS_LOG( "mus: [MUSUI ] <- CMusUiReceiveController::IncomingSessionPreNotification" ); - } - - -// ----------------------------------------------------------------------------- -// From MMusEngReceiveSessionObserver -// ----------------------------------------------------------------------------- -// -void CMusUiReceiveController::IncomingSession( const TDesC& aOriginator, - const TDesC& aOriginatorIdentity ) - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiReceiveController::IncomingSession" ); - TRAPD( err, HandleIncomingSessionL( aOriginator, aOriginatorIdentity ) ); - if ( err != KErrNone ) - { - iEventObserver.HandleError( err ); - } - else - { - SetConnectionInitialized( ETrue ); - } - MUS_LOG( "mus: [MUSUI ] <- CMusUiReceiveController::IncomingSession" ); - } - - -// ----------------------------------------------------------------------------- -// From MMusEngReceiveSessionObserver -// ----------------------------------------------------------------------------- -// -void CMusUiReceiveController::StreamBuffering() - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiReceiveController::StreamBuffering" ); - if ( iStreamPaused ) - { - MUS_LOG( "mus: [MUSUI ] Stream was paused, not show buffering state" ); - } - else - { - TRAPD( err, iEventObserver.ShowNaviPaneIconL( EMusUiNaviIconWaitAnim ) ); - if ( err != KErrNone ) - { - iEventObserver.HandleError( err ); - } - } - - MUS_LOG( "mus: [MUSUI ] -> CMusUiReceiveController::StreamBuffering" ); - } - - -// ----------------------------------------------------------------------------- -// From MMusEngSessionObserver -// ----------------------------------------------------------------------------- -// -void CMusUiReceiveController::SessionEstablished() - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiReceiveController::SessionEstablished" ); - - // Common handling first - CMusUiEventController::SessionEstablished(); - - TRAPD( error, SessionEstablishedL() ) - - if ( error != KErrNone ) - { - iEventObserver.HandleError( error ); - } - - MUS_LOG( "mus: [MUSUI ] <- CMusUiReceiveController::SessionEstablished" ); - } - - -// ----------------------------------------------------------------------------- -// From MMusEngSessionObserver -// ----------------------------------------------------------------------------- -// -void CMusUiReceiveController::SessionTerminated() - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiReceiveController::SessionTerminated" ); - if ( !ConnectionEstablished() ) - { - iReceiveObserver.DismissInvitationQuery( ETrue ); - TRAP_IGNORE( MusUiDialogUtil::ShowInformationDialogL( - R_MUS_LIVE_SHARING_VIEW_NOTE_INVITATION_CANCELLED ) ) - iEventObserver.HandleExit(); - } - else - { - TRAP_IGNORE( iSharingObserver.DismissWaitDialogL() ); - - TRAP_IGNORE( iCallbackService->AsyncEventL( EMusUiAsyncHandleExit ) ); - - } - MUS_LOG( "mus: [MUSUI ] <- CMusUiReceiveController::SessionTerminated" ); - } - - -// ----------------------------------------------------------------------------- -// From MMusEngSessionObserver -// ----------------------------------------------------------------------------- -// -void CMusUiReceiveController::SessionConnectionLost() - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiReceiveController::SessionConnectionLost" ); - TRAPD( err, - iSharingObserver.DismissWaitDialogL(); - MusUiDialogUtil::ShowGlobalErrorDialogL( - R_MUS_LIVE_SHARING_VIEW_NOTE_CONNECTION_LOST ) ); - if ( err != KErrNone ) - { - iEventObserver.HandleError( err ); - } - - TRAP_IGNORE( iCallbackService->AsyncEventL( EMusUiAsyncHandleExit ) ); - - MUS_LOG( "mus: [MUSUI ] <- CMusUiReceiveController::SessionConnectionLost" ); - } - - -// ----------------------------------------------------------------------------- -// From MMusEngSessionObserver -// ----------------------------------------------------------------------------- -// -void CMusUiReceiveController::SessionFailed() - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiReceiveController::SessionFailed" ); - TRAPD( error, iSharingObserver.DismissWaitDialogL() ); - if ( error != KErrNone ) - { - iEventObserver.HandleError( error ); - } - MUS_LOG( "mus: [MUSUI ] <- CMusUiReceiveController::SessionFailed" ); - } - - -// ----------------------------------------------------------------------------- -// From MMusEngSessionObserver -// ----------------------------------------------------------------------------- -// -void CMusUiReceiveController::StreamIdle() - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiReceiveController::StreamIdle" ); - iStreamPaused = ETrue; - TRAPD( err, iEventObserver.ShowNaviPaneIconL( EMusUiNaviIconPause ) ); - if ( iFullScreenSelected ) - { - TRAP_IGNORE( ChangeFullScreenModeL() ); - } - if ( err != KErrNone ) - { - iEventObserver.HandleError( err ); - } - MUS_LOG( "mus: [MUSUI ] <- CMusUiReceiveController::StreamIdle" ); - } - - -// ----------------------------------------------------------------------------- -// From MMusEngSessionObserver -// ----------------------------------------------------------------------------- -// -void CMusUiReceiveController::StreamStreaming() - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiReceiveController::StreamStreaming" ); - - if ( ConnectionEstablished() ) - { - TRAP_IGNORE( iSharingObserver.DismissWaitDialogL() ) - TRAPD( err, iEventObserver.ShowNaviPaneIconL( EMusUiNaviIconPlay ) ) - - if ( err != KErrNone ) - { - iEventObserver.HandleError( err ); - } - iStreamPaused = EFalse; - } - - MUS_LOG( "mus: [MUSUI ] <- CMusUiReceiveController::StreamStreaming" ); - } - - -// ----------------------------------------------------------------------------- -// From MMusEngSessionObserver -// ----------------------------------------------------------------------------- -// -void CMusUiReceiveController::SessionTimeChanged( - const TTimeIntervalSeconds& aSeconds ) - { - if ( aSeconds.Int() > -1 ) - { - iSharingObserver.UpdateSessionTime( SessionTimeFormatted( aSeconds ) ); - } - } - - -// ----------------------------------------------------------------------------- -// From MMusEngSessionObserver -// ----------------------------------------------------------------------------- -// -void CMusUiReceiveController::InactivityTimeout() - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiReceiveController::InactivityTimeout" ); - TRAP_IGNORE( iSharingObserver.DismissWaitDialogL(); - MusUiDialogUtil::ShowGlobalErrorDialogL( - R_MUS_LIVE_SHARING_VIEW_NOTE_SERVICE_N_A ) ); - - TRAP_IGNORE( iCallbackService->AsyncEventL( EMusUiAsyncHandleExit ) ); - - MUS_LOG( "mus: [MUSUI ] <- CMusUiReceiveController::InactivityTimeout" ); - } - - -// ----------------------------------------------------------------------------- -// From MMusUiInvitationQueryObserver: Invitation accepted by the user -// ----------------------------------------------------------------------------- -// -void CMusUiReceiveController::InvitationAcceptedL() - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiReceiveController::InvitationAcceptedL" ); - __ASSERT_ALWAYS( iSession, User::Leave( KErrNotReady ) ); - - // Enable loud speaker already before answering but disable it immediately - // if accepting fails for some reason - if ( iSession->AudioRoutingCanBeChanged() && !iSession->IsAudioRoutingHeadset() ) - { - iSession->EnableLoudspeakerL( ELoudspeakerEnabled, ETrue ); - } - - TRAPD( err, iSession->AcceptInvitationL( ETrue ) ); - if ( err ) - { - if ( iSession->AudioRoutingCanBeChanged() ) - { - iSession->EnableLoudspeakerL( ELoudspeakerDisabled, ETrue ); - } - User::Leave( err ); - } - - iCallbackService->AsyncEventL( EMusUiAsyncInviteAccepted ); - - - MUS_LOG( "mus: [MUSUI ] <- CMusUiReceiveController::InvitationAcceptedL" ); - } - - -// ----------------------------------------------------------------------------- -// From MMusUiInvitationQueryObserver: Invitation rejected by the user -// ----------------------------------------------------------------------------- -// -void CMusUiReceiveController::InvitationRejectedL() - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiReceiveController::InvitationRejectedL" ); - __ASSERT_ALWAYS( iSession, User::Leave( KErrNotReady ) ); - iSession->AcceptInvitationL( EFalse ); - HandleExitL(); - MUS_LOG( "mus: [MUSUI ] <- CMusUiReceiveController::InvitationRejectedL" ); - } - - -// ----------------------------------------------------------------------------- -// From MMusUiActiveTimerObserver -// ----------------------------------------------------------------------------- -// -void CMusUiReceiveController::TimerComplete( CMusUiActiveTimer* /*aTimer*/ ) - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiReceiveController::TimerComplete" ); - iEventObserver.HandleExit(); - MUS_LOG( "mus: [MUSUI ] <- CMusUiReceiveController::TimerComplete" ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiReceiveController::ExitProcedureL( TBool aUserAcceptance ) - { - - MUS_LOG( "mus: [MUSUI ] -> CMusUiReceiveController::ExitProcedureL" ); - - switch ( iShutdownState ) - { - case EMusUiShutdownVideoSaved: - { - MUS_LOG( "mus: [MUSUI ] ExitProcedureL: EMusuiShutdownVideoSaved" ); - - // Check if our address is valid sip or tel uri. If not, there is no - // reason to query user about permission to save it to contacts. - - TInt error = KErrNotFound; - if ( iOriginator ) - { - TMusEngUriParser parser( *iOriginator ); - TRAP( error, parser.ParseUriL() ) - } - - // Save Address to Contacts query if contact found and - // there is no address in contacts - // and if is the standard variant. - if ( !iOperatorSpecificFunctionality && iContactId > 0 && - !MusUiContactUtil::ShareViewFieldExistsL( - *( iEventObserver.EikonEnv() ), iContactId ) && - error == KErrNone ) - { - iShutdownState = EMusUiShutdownContactSavingQueried; - iEventObserver.SetToolbarVisibility( EFalse ); - SaveContactQueryL(); - } - else - { - // Nothing receive specific, let the base class handle - CMusUiEventController::ExitProcedureL( aUserAcceptance ); - } - break; - } - - default: - { - // Nothing receive specific, let the base class handle - CMusUiEventController::ExitProcedureL( aUserAcceptance ); - break; - } - } - - MUS_LOG( "mus: [MUSUI ] <- CMusUiReceiveController::ExitProcedureL" ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiReceiveController::ShowWaitDialogL() - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiReceiveController::ShowWaitDialogL" ); - - delete iDialogPrompt; - iDialogPrompt = NULL; - - iDialogPrompt = StringLoader::LoadL( - R_MUS_RECEIVE_VIEW_WAITING_FOR_STREAM, - ( MusContactName().Length() > 0 ) ? - MusContactName() : - *iOriginator ); - - if ( !iSharingObserver.ShowWaitDialogL( - *iDialogPrompt, - KMusInviteExpireTimeout, - R_MUS_LIVE_SHARING_VIEW_NOTE_TIMEOUT_EXPIRED ) ) - { - HandleExitL(); - } - - MUS_LOG( "mus: [MUSUI ] <- CMusUiReceiveController::ShowWaitDialogL" ); - } - - -// ----------------------------------------------------------------------------- -// From MMusEngSessionObserver -// ----------------------------------------------------------------------------- -// -void CMusUiReceiveController::SessionEstablishedL() - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiReceiveController::SessionEstablishedL" ); - - iConnectionEstablished = ETrue; - iSharingObserver.DismissWaitDialogL(); - - if ( iCallbackService->CurrentEvent() == EMusUiAsyncInviteAccepted ) - { - iCallbackService->Cancel(); - } - - // Orientation for video player - iResourceHandler->RequestVideoPlayerL( ETrue ); - - iOriginalMceOrientation = iSession->OrientationL(); - - // set the mce orientation if different than videoplayer orientation - CAknAppUiBase::TAppUiOrientation currentOrientation = - STATIC_CAST(CMusUiReceiveView&,iReceiveObserver).MusAppUi()->Orientation(); - - if( (iOriginalMceOrientation == CMusEngMceSession::EPortrait && - currentOrientation== CAknAppUiBase::EAppUiOrientationPortrait ) || - (iOriginalMceOrientation == CMusEngMceSession::ELandscape && - currentOrientation== CAknAppUiBase::EAppUiOrientationLandscape )) - { - MUS_LOG( "mus: [MUSUI ] -> MCE & Videoplayer orientation is same" ); - // Both MCE and Videoplayer has same orientation. - } - else - { - if(currentOrientation == CAknAppUiBase::EAppUiOrientationPortrait) - { - MUS_LOG( "mus: [MUSUI ] -> Setting MCE Orientation to Portrait" ); - iSession->SetOrientationL(CMusEngMceSession::EPortrait); - } - else if(currentOrientation == CAknAppUiBase::EAppUiOrientationLandscape) - { - MUS_LOG( "mus: [MUSUI ] -> Setting MCE Orientation to Landscape" ); - iSession->SetOrientationL(CMusEngMceSession::ELandscape); - } - else - { - MUS_LOG( "mus: [MUSUI ] -> Undefined Orientation. " ); - } - } - - if ( iForeground ) - { - EnableDisplayL( ETrue ); - iEventObserver.SetToolbarVisibility( ETrue ); - } - - MUS_LOG( "mus: [MUSUI ] <- CMusUiReceiveController::SessionEstablishedL" ); - } - - -// End of file - diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshui/src/musuireceiveview.cpp --- a/mmsharing/mmshui/src/musuireceiveview.cpp Thu Aug 19 09:51:39 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,503 +0,0 @@ -/* -* 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: The MUS application's UI class. -* -*/ - - - -#include "musuireceiveview.h" -#include "musuireceivecontainer.h" -#include "musuibackgroundviewcontainer.h" -#include "musuireceivecontroller.h" -#include "musuiactivitymanger.h" -#include "musuiappui.h" -#include "musuistatuspanehandler.h" -#include "musui.hrh" -#include "musuidefinitions.h" -#include "muslogger.h" // debug logging -#include -#include - -#include -#include -#include -#include - - -// ----------------------------------------------------------------------------- -// EPOC two-phased constructor -// ----------------------------------------------------------------------------- -// -void CMusUiReceiveView::ConstructL() - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiReceiveView::ConstructL" ); - - CMusUiGeneralView::ConstructL(); - - Toolbar()->SetToolbarObserver( this ); - Toolbar()->UpdateBackground(); - - MUS_LOG( "mus: [MUSUI ] <- CMusUiReceiveView::ConstructL" ); - } - - -// ----------------------------------------------------------------------------- -// Destructor -// ----------------------------------------------------------------------------- -// -CMusUiReceiveView::~CMusUiReceiveView() - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiReceiveView::~CMusUiReceiveView" ); - if ( iContainer ) - { - AppUi()->RemoveFromViewStack( *this, iContainer ); - } - delete iContainer; - - delete iController; - - MUS_LOG( "mus: [MUSUI ] <- CMusUiReceiveView::~CMusUiReceiveView" ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -TUid CMusUiReceiveView::Id() const - { - return KMusUidReceivingView; - } - -// ----------------------------------------------------------------------------- -// From MEikMenuObserver, Called by framework before constructing menupane -// ----------------------------------------------------------------------------- -// -void CMusUiReceiveView::DynInitMenuPaneL( TInt aResourceId, - CEikMenuPane* aMenuPane ) - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiReceiveView::DynInitMenuPaneL" ); - - // Base class initiated initialization first - CMusUiGeneralView::DynInitMenuPaneL( aResourceId, aMenuPane ); - if(!MUS_NO_TOOLBAR) - { - SetInitialFocusedItemL(); - } - - if ( aResourceId == R_MUSUI_VIEW_MENU ) - { - // Delete item which is present on toolbar - if ( !MUS_NO_TOOLBAR ) - { - aMenuPane->DeleteMenuItem( EMusuiCmdViewFullScreen ); - } - - // Delete items not related to receiving side: - aMenuPane->DeleteMenuItem( EMusuiCmdViewReplay ); - aMenuPane->DeleteMenuItem( EMusuiCmdToolbarZoom ); - aMenuPane->DeleteMenuItem( EMusuiCmdToolbarBrightness ); - aMenuPane->DeleteMenuItem( EMusuiCmdViewZoom ); - aMenuPane->DeleteMenuItem( EMusuiCmdViewBrightness ); - aMenuPane->DeleteMenuItem( EMusuiCmdRecord ); - aMenuPane->DeleteMenuItem( EMusuiCmdStopRecording ); - - // Delete EMusuiCmdViewAudioNormal or EMusuiCmdViewAudioMute - // depending on the audio state of the clip: - if ( iController->ClipContainsAudioL() ) - { - aMenuPane->DeleteMenuItem( iController->ClipMutedL() ? - EMusuiCmdViewAudioMute : - EMusuiCmdViewAudioNormal ); - } - else - { - aMenuPane->DeleteMenuItem( EMusuiCmdViewAudioMute ); - aMenuPane->DeleteMenuItem( EMusuiCmdViewAudioNormal ); - } - - } - MUS_LOG( "mus: [MUSUI ] <- CMusUiReceiveView::DynInitMenuPaneL" ); - } - - -// ----------------------------------------------------------------------------- -// Called when focus event occurs. -// ----------------------------------------------------------------------------- -// -void CMusUiReceiveView::DoHandleForegroundEventL( TBool aForeground ) - { - CMusUiGeneralView::HandleForegroundEventL( aForeground, EFalse ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiReceiveView::HandleToolbarCommandL( TInt aCommand ) - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiReceiveView::HandleToolbarCommandL" ); - - __ASSERT_ALWAYS( iController, User::Leave( KErrNotReady ) ); - - switch ( aCommand ) - { - case EKeyLeftArrow: - { - HandleCommandL( - iController->ToolbarVolumeSelected() ? EMusuiCmdViewVolumeDown : - EMusUiCmdToolbarLastIndex ); - break; - } - case EKeyRightArrow: - { - HandleCommandL( - iController->ToolbarVolumeSelected() ? EMusuiCmdViewVolumeUp : - EMusUiCmdToolbarLastIndex ); - break; - } - case EKeyUpArrow: - { - HandleCommandL( - iController->ToolbarVolumeSelected() ? EMusuiCmdViewVolumeUp : - EMusUiCmdToolbarLastIndex ); - break; - } - case EKeyDownArrow: - { - HandleCommandL( - iController->ToolbarVolumeSelected() ? EMusuiCmdViewVolumeDown : - EMusUiCmdToolbarLastIndex ); - break; - } - case EMusuiCmdViewVolumeDown: - { - HandleCommandL( EMusuiCmdViewVolumeDown ); - break; - } - case EMusuiCmdViewVolumeUp: - { - HandleCommandL( EMusuiCmdViewVolumeUp ); - break; - } - default: - { - break; - } - } - MUS_LOG( "mus: [MUSUI ] <- CMusUiReceiveView::HandleToolbarCommandL" ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiReceiveView::SetInitialFocusedItemL() - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiReceiveView::SetInitialFocusedItemL" ); - - __ASSERT_ALWAYS( iController, User::Leave( KErrNotReady ) ); - - if ( iOperatorSpecificFunctionality && !AknLayoutUtils::PenEnabled() ) - { - MUS_LOG( "Focus changed in OPERATOR mode !!!!!!!!!!!!!" ); - if ( !( iController->DeviceHasDedicatedVolumeKeys() ) ) - { - Toolbar()->SetFocusedItemL( EMusuiCmdToolbarVolume ); - } - else - { - - Toolbar()->SetFocusedItemL( EMusuiCmdToolbarFullScreen ); - } - - } - MUS_LOG( "mus: [MUSUI ] -> CMusUiReceiveView::SetInitialFocusedItemL" ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiReceiveView::SetToolbarVisibility( TBool aVisible ) - { - MUS_LOG1( "mus: [MUSUI ] -> CMusUiReceiveView::SetToolbarVisibility: %d", - aVisible ); - if ( MUS_NO_TOOLBAR ) - { - MUS_LOG( " Operator variant, no toolbar! Ignoring.." ) - MUS_LOG( "mus: [MUSUI ] <- CMusUiReceiveView::SetToolbarVisibility" ); - return; - } - - // Show toolbar only after established session and before of exit procedure - if ( iController->FullScreenSelected() ) - { - MUS_LOG( "mus: [MUSUI ] setting toolbar invisible" ); - - Toolbar()->SetToolbarVisibility( EFalse ); - - SharingContainer().RequestToolbarVisibilityOnceDialogDismissed( NULL ); - } - else - { - CMusUiGeneralView::SetToolbarVisibility( aVisible ); - } - - MUS_LOG( "mus: [MUSUI ] <- CMusUiGeneralView::SetToolbarVisibility" ); - } - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiReceiveView::DynInitToolbarL( TInt aResourceId, - CAknToolbar* aToolbar ) - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiReceiveView::DynInitToolbarL" ); - - // Items to be removed in Receive View: - if (!AknLayoutUtils::PenEnabled())//(aResourceId == R_MUS_TOOLBAR_NONTOUCH)// - { - if ( iController->DeviceHasDedicatedVolumeKeys() ) - { - MUS_LOG( "mus: [MUSUI ] CMusUiReceiveView::DynInitToolbarL\ - DeviceHasDedicatedVolumeKeys" ); - Toolbar()->RemoveItem( EMusuiCmdToolbarVolume ); - } - else - { - aToolbar->SetFocusedItemL( EMusuiCmdToolbarVolume ); - } - - Toolbar()->RemoveItem( EMusuiCmdToolbarFFRev ); - Toolbar()->RemoveItem( EMusuiCmdToolbarZoom ); - Toolbar()->RemoveItem( EMusuiCmdToolbarBrightness); - } - - Toolbar()->RemoveItem( EMusuiCmdToolbarPauseLive ); - Toolbar()->RemoveItem( EMusuiCmdToolbarUnPauseLive ); - Toolbar()->RemoveItem( EMusuiCmdToolbarPause ); - Toolbar()->RemoveItem( EMusuiCmdToolbarUnPause ); - - if ( aToolbar->FocusedItem() == KErrNotFound && - !AknLayoutUtils::PenEnabled() ) - { - aToolbar->SetFocusedItemL( EMusuiCmdToolbarFullScreen ); - } - - Toolbar()->RemoveItem( EMusuiCmdToolbarBlank ); - - // Last generic base class functionality - CMusUiGeneralView::DynInitToolbarL( aResourceId, aToolbar ); - - MUS_LOG( "mus: [MUSUI ] <- CMusUiReceiveView::DynInitToolbarL" ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiReceiveView::ShowInvitationQueryL( const TDesC& aQuery ) - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiReceiveView::ShowInvitationQueryL" ); - iContainer->ShowInvitationQueryL( aQuery, *iController ); - MUS_LOG( "mus: [MUSUI ] <- CMusUiReceiveView::ShowInvitationQueryL" ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiReceiveView::DismissInvitationQuery( TBool aDelete ) - { - iContainer->DismissInvitationQuery( aDelete ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiReceiveView::SetFullScreenL( TBool aFullScreen ) - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiReceiveView::SetFullScreenL" ); - - if ( aFullScreen ) - { - Cba()->MakeVisible( EFalse ); - SetToolbarVisibility( EFalse ); - MusAppUi()->StatusPane()->MakeVisible( EFalse ); - - if( MusAppUi()->CurrentFixedToolbar() ) - MusAppUi()->CurrentFixedToolbar()->MakeVisible( EFalse ); - - if( MusAppUi()->CurrentPopupToolbar() ) - MusAppUi()->CurrentPopupToolbar()->MakeVisible( EFalse ); - - if( MusAppUi()->PopupToolbar() ) - MusAppUi()->PopupToolbar()->MakeVisible( EFalse ); - iController->ChangeOrientationL( CAknAppUiBase::EAppUiOrientationLandscape ); - - iContainer->SetFullScreen( ETrue, MusAppUi()->ApplicationRect() ); - iController->SetRect( MusAppUi()->ApplicationRect() ); - } - else - { - if( MusAppUi()->CurrentFixedToolbar() ) - MusAppUi()->CurrentFixedToolbar()->MakeVisible( ETrue ); - - if( MusAppUi()->CurrentPopupToolbar() ) - MusAppUi()->CurrentPopupToolbar()->MakeVisible( ETrue ); - - if( MusAppUi()->PopupToolbar() ) - MusAppUi()->PopupToolbar()->MakeVisible( ETrue); - // First make toolbar, cba and statuspane visible as those affect - // to client rect - MusAppUi()->StatusPane()->MakeVisible( ETrue ); - SetToolbarVisibility( ETrue ); - Cba()->MakeVisible( ETrue ); - - iController->ChangeOrientationL( CAknAppUiBase::EAppUiOrientationAutomatic ); - iContainer->SetFullScreen( EFalse, ClientRect() ); - iController->SetRect( ClientRect() ); - } - - MUS_LOG( "mus: [MUSUI ] <- CMusUiReceiveView::SetFullScreenL" ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiReceiveView::RefreshView() - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiReceiveView::RefreshView" ); - - RefreshBackgroundContainer(); - - if ( iContainer ) - { - iContainer->SetRect( ClientRect() ); - iContainer->UpdatePointerCapture(); - } - - TRect videoRect( ClientRect().iTl.iX, - ClientRect().iTl.iY, - ClientRect().iBr.iX, - ClientRect().iBr.iY - ToolbarPlaceHolderHeight() ); - - if ( iController ) - { - iController->SetRect( videoRect ); - } - - MUS_LOG( "mus: [MUSUI ] <- CMusUiReceiveView::RefreshView" ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -CMusUiEventController* CMusUiReceiveView::EventController() const - { - return iController; - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -CMusUiViewContainer& CMusUiReceiveView::SharingContainer() const - { - return *iContainer; - } - - -// ----------------------------------------------------------------------------- -// From CAknView, Gets called from framework when activating this view -// ----------------------------------------------------------------------------- -// -void CMusUiReceiveView::DoActivateL( const TVwsViewId& aPrevViewId, - TUid aCustomMessageId, - const TDesC8& aCustomMessage ) - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiReceiveView::DoActivateL" ); - - // Base class activation first - CMusUiGeneralView::DoActivateL( aPrevViewId, - aCustomMessageId, - aCustomMessage ); - - if ( !iContainer ) - { - // create the container and then add myself to the view stack - iContainer = CMusUiReceiveContainer::NewL( *this, ClientRect() ); - iContainer->SetMopParent( this ); - AppUi()->AddToViewStackL( *this, iContainer ); - } - - /* Increase the ordinal position of background container - * So that other control will be drawn first. - */ - UpdateBackgroundOrdinalPosition( ETrue ); - - TRect videoRect( ClientRect().iTl.iX, - ClientRect().iTl.iY, - ClientRect().iBr.iX, - ClientRect().iBr.iY - ToolbarPlaceHolderHeight() ); - - if ( !iController ) - { - iController = CMusUiReceiveController::NewL( *MusAppUi(), - *this, - *this, - videoRect ); - } - - MUS_LOG( "mus: [MUSUI ] <- CMusUiReceiveView::DoActivateL" ); - } - - -// ----------------------------------------------------------------------------- -// From AknView, Gets called from framework when deactivating this view -// ----------------------------------------------------------------------------- -// -void CMusUiReceiveView::DoDeactivate() - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiReceiveView::DoDeactivate" ); - - CMusUiGeneralView::DoDeactivate(); // Base class deactivation first - - if ( iContainer ) - { - AppUi()->RemoveFromViewStack( *this, iContainer ); - delete iContainer; - iContainer = NULL; - } - - MUS_LOG( "mus: [MUSUI ] <- CMusUiReceiveView::DoDeactivate" ); - } - - -// end of file diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshui/src/musuiresourcehandler.cpp --- a/mmsharing/mmshui/src/musuiresourcehandler.cpp Thu Aug 19 09:51:39 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,558 +0,0 @@ -/* -* Copyright (c) 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: Handler for camera, keypad and video player resources -* -*/ - - - -#include "musuiresourcehandler.h" -#include "musuipropertywatch.h" -#include "musuieventobserver.h" -#include "musuidialogutil.h" -#include "muslogger.h" -#include "mussettings.inl" - -#include -#include -#include - -using namespace NMusResourceApi; - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -CMusUiResourceHandler::~CMusUiResourceHandler() - { - delete iCameraResourceWatch; - delete iKeypadResourceWatch; - - delete iChangeProductModeDialog; - delete iDialogPrompt; - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -CMusUiResourceHandler* CMusUiResourceHandler::NewL( - MMusUiEventObserver& aObserver ) - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiResourceHandler::NewL()" ) - - CMusUiResourceHandler* self = - new ( ELeave ) CMusUiResourceHandler( aObserver ); - CleanupStack::PushL( self ); - self->ConstructL(); - CleanupStack::Pop( self ); - - MUS_LOG( "mus: [MUSUI ] <- CMusUiResourceHandler::NewL()" ) - return self; - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -TBool CMusUiResourceHandler::RequestKeypadL( TBool aMandatory ) - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiResourceHandler::RequestKeypadL" ) - - TBool keypadAvailable( EFalse ); - - switch ( iKeypadAvailability ) - { - case NMusResourceApi::EAvailable: - { - MUS_LOG( "mus: [MUSUI ] Keypad is available" ) - break; - } - case NMusResourceApi::ENotAvailable: - { - MUS_LOG( "mus: [MUSUI ] Keypad is not available, changing mode" ) - iKeypadAvailibilityInProgress = ETrue; - delete iDialogPrompt; - iDialogPrompt = NULL; - iDialogPrompt = StringLoader::LoadL( R_MUS_CHANGE_KEYPAD_MODE_TXT ); - ShowChangeProductModeDialogL( *iDialogPrompt ); - MUS_LOG( " Product mode changed" ) - MUS_LOG1( " Keypad availability is %d", - iKeypadAvailability ) - break; - } - default: - { - MUS_LOG( "mus: [MUSUI ] availability default." ) - break; - } - - } - - switch(iKeypadUsability) - { - case MusSettingsKeys::EUsabilityLandscape: - { - MUS_LOG( "mus: [MUSUI ] Keypad is usable in landscape" ) - iObserver.SwitchOrientationL( - CAknAppUiBase::EAppUiOrientationLandscape ); - break; - } - case MusSettingsKeys::EUsabilityPortrait: - { - MUS_LOG( "mus: [MUSUI ] Keypad is usable in portrait" ) - iObserver.SwitchOrientationL( - CAknAppUiBase::EAppUiOrientationPortrait ); - break; - } - case MusSettingsKeys::EUsabilityAlways: - { - MUS_LOG( "mus: [MUSUI ] Keypad is usable in all mode" ) - keypadAvailable = ETrue; - } - break; - default: - MUS_LOG( "mus: [MUSUI ] usuability default ." ) - break; - } - - keypadAvailable = IsCurrentlyAvailable( iKeypadAvailability, - iKeypadUsability ); - - if ( aMandatory && !keypadAvailable ) - { - MUS_LOG( "mus: [MUSUI ] Mandatory keypad not available, exiting" ) - MusUiDialogUtil::ShowGlobalInformationDialogL( - R_MUS_LIVE_SHARING_VIEW_NOTE_SHARING_ENDED ); - iObserver.HandleExit(); - } - - MUS_LOG1( "mus: [MUSUI ] <- CMusUiResourceHandler::RequestKeypadL( %d )", - keypadAvailable ) - - return keypadAvailable; - - - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -TBool CMusUiResourceHandler::RequestCameraL( TBool aMandatory ) - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiResourceHandler::RequestCameraL" ) - - TBool cameraAvailable( EFalse ); - - switch ( iCameraAvailability ) - { - case NMusResourceApi::EAvailable: - { - MUS_LOG( "mus: [MUSUI ] Camera is available" ) - cameraAvailable = ETrue; - break; - } - - case NMusResourceApi::ENotAvailable: - { - MUS_LOG( "mus: [MUSUI ] Camera is not available, changing mode" ) - - iCameraAvailibilityInProgress = ETrue; - delete iDialogPrompt; - iDialogPrompt = NULL; - iDialogPrompt = StringLoader::LoadL( - R_MUS_LIVE_SHARING_VIEW_OPEN_CAMERA_LENS_COVER_WAIT_NOTE_TXT ); - ShowChangeProductModeDialogL( *iDialogPrompt ); - - MUS_LOG( " Product mode changed" ) - MUS_LOG1( " Camera availability is %d", - iCameraAvailability ) - break; - } - default: - MUS_LOG( "mus: [MUSUI ] availability default." ) - break; - } - - switch(iCameraUsability) - { - case MusSettingsKeys::EUsabilityLandscape: - { - MUS_LOG( "mus: [MUSUI ] Camera is usable in landscape" ) - iObserver.SwitchOrientationL( - CAknAppUiBase::EAppUiOrientationLandscape ); - break; - } - case MusSettingsKeys::EUsabilityPortrait: - { - MUS_LOG( "mus: [MUSUI ] Camera is usable in portrait" ) - iObserver.SwitchOrientationL( - CAknAppUiBase::EAppUiOrientationPortrait ); - break; - } - case MusSettingsKeys::EUsabilityAlways: - { - MUS_LOG( "mus: [MUSUI ] camera is usable in all mode" ) - cameraAvailable = ETrue; - } - default: - { - MUS_LOG( "mus: [MUSUI ] usuability default." ) - break; - } - } - - cameraAvailable = IsCurrentlyAvailable( iCameraAvailability, - iCameraUsability ); - if ( aMandatory && !cameraAvailable ) - { - MUS_LOG( "mus: [MUSUI ] Mandatory camera not available, exiting" ) - MusUiDialogUtil::ShowGlobalInformationDialogL( - R_MUS_LIVE_SHARING_VIEW_NOTE_SHARING_ENDED ); - iObserver.HandleExit(); - } - - MUS_LOG1( "mus: [MUSUI ] <- CMusUiResourceHandler::RequestCameraL( %d )", - cameraAvailable ) - - return cameraAvailable; - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -TBool CMusUiResourceHandler::RequestVideoPlayerL( TBool aMandatory ) - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiResourceHandler::RequestVideoPlayerL" ) - - TBool videoPlayerAvailable( EFalse ); - - /* Video Player will be always available. There is no dynamic variation */ - NMusResourceApi::TAvailability vpAvailability = NMusResourceApi::EAvailable; - - switch ( iVideoplayerUsability ) - { - case MusSettingsKeys::EUsabilityAlways: - { - MUS_LOG( "mus: [MUSUI ] Video player is usuable in all mode" ) - videoPlayerAvailable = ETrue; - break; - } - case MusSettingsKeys::EUsabilityLandscape: - { - MUS_LOG( "mus: [MUSUI ] Video player is usable in landscape" ) - - iObserver.SwitchOrientationL( - CAknAppUiBase::EAppUiOrientationLandscape ); - videoPlayerAvailable = IsCurrentlyAvailable( vpAvailability, - iVideoplayerUsability ); - break; - } - case MusSettingsKeys::EUsabilityPortrait: - { - MUS_LOG( "mus: [MUSUI ] Video player is usable in portrait" ) - - iObserver.SwitchOrientationL( - CAknAppUiBase::EAppUiOrientationPortrait ); - videoPlayerAvailable = IsCurrentlyAvailable( vpAvailability, - iVideoplayerUsability ); - break; - } - default: - { - MUS_LOG( "mus: [MUSUI ] usuability default." ) - break; - } - } - - if ( aMandatory && !videoPlayerAvailable ) - { - MUS_LOG( "mus: [MUSUI ] Mandatory player not available, exiting" ) - MusUiDialogUtil::ShowGlobalInformationDialogL( - R_MUS_LIVE_SHARING_VIEW_NOTE_SHARING_ENDED ); - iObserver.HandleExit(); - } - - MUS_LOG1( "mus: [MUSUI ] <- CMusUiResourceHandler::RequestVideoPlayerL(%d)", - videoPlayerAvailable ) - - return videoPlayerAvailable; - } - - -// ----------------------------------------------------------------------------- -// Called by CMusUiPropertyWatch, when resource key values change in P&S -// ----------------------------------------------------------------------------- -// -void CMusUiResourceHandler::PropertyChanged( const TUint aKey, - const TInt aValue ) - { - - MUS_LOG2( "mus: [MUSUI ] -> CMusUiResourceHandler::ResourcePropertyChanged:\ - aKey: [%u] aValue: [%d]", aKey, aValue ) - - switch( aKey ) - { - case NMusResourceApi::KCameraAvailability: - { - MUS_LOG( "mus: [MUSUI ] KCameraAvailability " ) - iCameraAvailability = static_cast< TAvailability >( aValue ); - if ( iCameraAvailibilityInProgress && iChangeProductModeDialog ) - { - TRAP_IGNORE( iChangeProductModeDialog->ProcessFinishedL() ); - } - iCameraAvailibilityInProgress = EFalse; - break; - } - case NMusResourceApi::KKeypadAvailability: - { - MUS_LOG( "mus: [MUSUI ] KKeypadAvailability " ) - iKeypadAvailability = static_cast< TAvailability >( aValue ); - if ( iKeypadAvailibilityInProgress && iChangeProductModeDialog ) - { - TRAP_IGNORE( iChangeProductModeDialog->ProcessFinishedL() ); - } - iKeypadAvailibilityInProgress = EFalse; - break; - } - default: - { - MUS_LOG( "mus: [MUSUI ] avilability property watch default." ) - break; - } - - } - - MUS_LOG( "mus: [MUSUI ] <- CMusUiResourceHandler::ResourcePropertyChanged" ) - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiResourceHandler::HandlePropertyError( const TInt aReason ) - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiResourceHandler::HandlePropertyError()" ) - - iObserver.HandleError( aReason ); - } - - -// ----------------------------------------------------------------------------- -// C++ constructor -// ----------------------------------------------------------------------------- -// -CMusUiResourceHandler::CMusUiResourceHandler( MMusUiEventObserver& aObserver ) - :iObserver( aObserver ), - iCameraAvailability(NMusResourceApi::EAvailable), - iKeypadAvailability(NMusResourceApi::EAvailable), - iCameraUsability(MusSettingsKeys::EUsabilityAlways), - iKeypadUsability(MusSettingsKeys::EUsabilityAlways), - iVideoplayerUsability(MusSettingsKeys::EUsabilityAlways) - { - } - - -// ----------------------------------------------------------------------------- -// Symbian second phase constructor -// ----------------------------------------------------------------------------- -// -void CMusUiResourceHandler::ConstructL() - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiResourceHandler::ConstructL()" ) - - iCameraAvailibilityInProgress = EFalse; - iKeypadAvailibilityInProgress = EFalse; - - // Read the value from cenrep and check whether camera,keypad - // and videoplayer usability. - MultimediaSharingSettings::ResourceUsability( iCameraUsability , - iKeypadUsability, - iVideoplayerUsability); - - // Read the value from cenrep and check whether camera and keypad - // available dynamically. - MusSettingsKeys::TAvailability camera,keypad; - MultimediaSharingSettings::ResourceAvailability( camera , - keypad); - - TInt err = KErrNone; - - // Set Camera availability - if(camera == MusSettingsKeys::EAvailabilityDynamic) - { - // read the PS key intial value - err = RProperty::Get( - NMusResourceApi::KCategoryUid, - NMusResourceApi::KCameraAvailability, - (TInt&)iCameraAvailability ); - if(err) - { - MUS_LOG1( "mus: [MUSUI ] Error = %d",err ) - iCameraAvailability = NMusResourceApi::ENotAvailable; - } - // watch the camera ps key for further change - iCameraResourceWatch = CMusUiPropertyWatch::NewL( - *this, - NMusResourceApi::KCategoryUid, - KCameraAvailability ); - } - else - { - iCameraAvailability = NMusResourceApi::EAvailable; - } - - // Set Keypad availability - if(keypad == MusSettingsKeys::EAvailabilityDynamic) - { - // read the PS key intial value - err = RProperty::Get( - NMusResourceApi::KCategoryUid, - NMusResourceApi::KKeypadAvailability, - (TInt&)iKeypadAvailability ); - if(err) - { - MUS_LOG1( "mus: [MUSUI ] Error = %d",err ) - iKeypadAvailability = NMusResourceApi::ENotAvailable; - } - // watch the keypad ps key - iKeypadResourceWatch = CMusUiPropertyWatch::NewL( - *this, - NMusResourceApi::KCategoryUid, - KKeypadAvailability ); - } - else - { - iKeypadAvailability = NMusResourceApi::EAvailable; - } - - // Videoplayer availability always static - - MUS_LOG( "mus: [MUSUI ] <- CMusUiResourceHandler::ConstructL()" ) - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -TBool CMusUiResourceHandler::ShowChangeProductModeDialogL( - const TDesC& aPrompt ) - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiResourceHandler::ShowChangeProductModeDialogL()" ) - - TBool returnValue = EFalse; - - if ( !iChangeProductModeDialog ) - { - iChangeProductModeDialog = new ( ELeave ) CAknWaitDialog( ( - reinterpret_cast( &iChangeProductModeDialog ) ), - ETrue ); - - iChangeProductModeDialog->SetTextL( aPrompt ); - - iChangeProductModeDialog->PrepareLC( - R_MUS_LIVE_SHARING_VIEW_ACTIVATE_CAMERA_WAIT_NOTE ); - returnValue = iChangeProductModeDialog->RunLD(); - - iChangeProductModeDialog = NULL; - } - - MUS_LOG( "mus: [MUSUI ] <- CMusUiResourceHandler::ShowChangeProductModeDialogL()" ) - - return returnValue; - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -TBool CMusUiResourceHandler::IsCurrentlyAvailable( - NMusResourceApi::TAvailability aResourceAvailability, - MusSettingsKeys::TUsability aResourceUsability - ) - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiResourceHandler::IsCurrentlyAvailable()" ) - - CAknAppUiBase::TAppUiOrientation orientation = iObserver.AppOrientation(); - - MUS_LOG( "mus: [MUSUI ] <- CMusUiResourceHandler::IsCurrentlyAvailable()" ) - - return ( aResourceAvailability == NMusResourceApi::EAvailable && - ( - aResourceUsability == MusSettingsKeys::EUsabilityAlways || - (aResourceUsability == MusSettingsKeys::EUsabilityLandscape && - orientation == CAknAppUiBase::EAppUiOrientationLandscape) || - (aResourceUsability == MusSettingsKeys::EUsabilityPortrait && - orientation == CAknAppUiBase::EAppUiOrientationPortrait) - ) - ); - } - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiResourceHandler::CheckInitialOrientationL(MultimediaSharing::TMusUseCase aUsecase ) - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiResourceHandler::CheckInitialOrientationL()" ) - if ( aUsecase != MultimediaSharing::EMusLiveVideo && - aUsecase != MultimediaSharing::EMusClipVideo && - aUsecase != MultimediaSharing::EMusReceive ) - { - return; - } - - MusSettingsKeys::TUsability usability = ( aUsecase == MultimediaSharing::EMusLiveVideo ) ? - iCameraUsability : iVideoplayerUsability; - if ( usability == MusSettingsKeys::EUsabilityPortrait ) - { - iObserver.SwitchOrientationL( CAknAppUiBase::EAppUiOrientationPortrait ); - } - else if ( usability == MusSettingsKeys::EUsabilityLandscape ) - { - iObserver.SwitchOrientationL( CAknAppUiBase::EAppUiOrientationLandscape ); - } - MUS_LOG( "mus: [MUSUI ] <- CMusUiResourceHandler::CheckInitialOrientationL()" ) - } - - - - - - - - - - - - - - - - - - - - - diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshui/src/musuisendcontroller.cpp --- a/mmsharing/mmshui/src/musuisendcontroller.cpp Thu Aug 19 09:51:39 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1077 +0,0 @@ -/* -* Copyright (c) 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: -* -*/ - - - -#include "musuisendcontroller.h" -#include "musuieventobserver.h" -#include "musuisharingobserver.h" -#include "musuisendobserver.h" -#include "musuidialogutil.h" -#include "musuicallbackservice.h" -#include "musuifileutil.h" -#include "mussettings.h" -#include "musuipropertywatch.h" -#include "mussessionproperties.h" -#include "mussettingskeys.h" -#include "musuiresourcehandler.h" -#include "muslogger.h" // debug logging - -#include "musengmceoutsession.h" -#include "musenguriparser.h" -#include - -#include -#include -#include - - -using namespace NMusSessionApi; - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -CMusUiSendController::~CMusUiSendController() - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiSendController::~CMusUiSendController" ); - - delete iAddress; - delete iRemoteSipAddress; - delete iRemoteSipAddressProposal; - TRAP_IGNORE( DeleteFileL() ); - delete iVideoFileName; - delete iLocalizer; - - MUS_LOG( "mus: [MUSUI ] <- CMusUiSendController::~CMusUiSendController" ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -CMusEngMceSession* CMusUiSendController::EngineSession() - { - return EngineOutSession(); // Engine out session is CMusEngMceSession - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiSendController::DeleteEngineSession() - { - // Cancel invite - if ( EngineOutSession() && !ConnectionEstablished() ) - { - MUS_LOG( "mus: [MUSUI ] CMusUiSendController::DeleteEngineSession:\ - Canceling inviting..." ); - TRAP_IGNORE( EngineOutSession()->CancelInviteL() ); - } - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiSendController::HandlePropertyError( const TInt aReason ) - { - MUS_LOG1( "mus: [MUSUI ] -> CMusUiEventController::HandleError [%d]", - aReason ); - TRAP_IGNORE( DeleteVideoL() ); - - CMusUiEventController::HandlePropertyError( aReason ); // For the base class - - MUS_LOG( "mus: [MUSUI ] <- CMusUiEventController::HandleError" ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiSendController::HandleAsyncEventL( TMusUiAsyncEvent aEventId ) - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiSendController::HandleAsyncEventL" ); - switch ( aEventId ) - { - case EMusUiAsyncInviteCancel: - { - MUS_LOG( "mus: [MUSUI ] CMusUiSendController::\ - HandleAsyncEventL: EMusUiAsyncInviteCancel" ); - HandleExitL(); - break; - } - case EMusUiAsyncManualAddressEntry: - { - iResourceHandler->RequestKeypadL( ETrue ); // Exits on fail - iSendObserver.ManualAddressEntryL( *iRemoteSipAddressProposal ); - break; - } - case EMusUiAsyncStartInvitation: - { - MUS_LOG( "mus: [MUSUI ] CMusUiSendController::\ - HandleAsyncEventL: EMusUiAsyncStartInvitation" ); - InviteL(); - break; - } - default: - { - // Not send specific, let the base class handle - CMusUiEventController::HandleAsyncEventL( aEventId ); - } - } - MUS_LOG( "mus: [MUSUI ] <- CMusUiSendController::HandleAsyncEventL" ); - - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -const TDesC& CMusUiSendController::TypedAddress() const - { - return *iAddress; - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -TBool CMusUiSendController::ManualAddressTyped() const - { - return iManualAddressTyped; - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiSendController::StartInvitationL() - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiSendController::StartInvitationL" ); - - iCallbackService->AsyncEventL( EMusUiAsyncStartInvitation ); - - MUS_LOG( "mus: [MUSUI ] <- CMusUiSendController::StartInvitationL" ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiSendController::InviteL() - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiSendController::InviteL" ); - - if ( !iSipRegistrationPending ) - { - TRAPD( error, - iRemoteSipAddress = CMusUiPropertyWatch::ReadDescPropertyL( - KRemoteSipAddress ) ); - if ( error != KErrNone ) - { - iRemoteSipAddress = KNullDesC().AllocL(); - } - - TRAP( error, iRemoteSipAddressProposal = - CMusUiPropertyWatch::ReadDescPropertyL( - KRemoteSipAddressProposal ) ); - if ( error != KErrNone ) - { - iRemoteSipAddressProposal = KNullDesC().AllocL(); - } - - if ( iRemoteSipAddress->Length() > 0 ) - { - if ( iRemoteSipAddress->Find( KMusCommaSymbol ) == KErrNotFound ) - { - InviteL( *iRemoteSipAddress ); - } - else - { - // Split the addresses using KMusCommaSymbol as a separator - CDesCArray* addressArray = - new ( ELeave ) CDesCArrayFlat( - KMusSipAddressesMaxAmount ); - SplitL( *iRemoteSipAddress, KMusCommaSymbol, addressArray ); - // Show List Query Dialog - TBuf selectedAddress; - if ( MusUiDialogUtil::SelectAddressDialogL( addressArray, - selectedAddress ) ) - { - // Invite with the chosen address - InviteL( selectedAddress ); - } - else - { - HandleExitL(); - } - } - } - else - { - iResourceHandler->RequestKeypadL( ETrue ); // Exits on failure - iManualAddressTyped = ETrue; - iSendObserver.ManualAddressEntryL( *iRemoteSipAddressProposal ); - } - } - else - { - // Show waiting dialog - delete iDialogPrompt; - iDialogPrompt = NULL; - iDialogPrompt = StringLoader::LoadL( - R_MUS_REGISTRATION_PENDING_WAIT_NOTE_TXT ); - - if ( !iSharingObserver.ShowWaitDialogL( - *iDialogPrompt, - KMusInviteExpireTimeout, //Reuse 1 min timer - R_MUS_LIVE_SHARING_VIEW_NOTE_NO_REG ) ) - { - iEventObserver.HandleExit(); - } - - } - - MUS_LOG( "mus: [MUSUI ] <- CMusUiSendController::InviteL" ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiSendController::CancelInvitationL() - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiSendController::CancelInvitationL" ); - - if ( EngineOutSession() && !ConnectionEstablished() ) - { - TRAP_IGNORE( EngineOutSession()->CancelInviteL() ); - } - - HandleExitL(); - - MUS_LOG( "mus: [MUSUI ] <- CMusUiSendController::CancelInvitationL" ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiSendController::HandleForegroundEventL( TBool aForeground ) - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiSendController::HandleForegroundEventL" ); - - CMusUiEventController::HandleForegroundEventL( aForeground ); - - if ( ConnectionEstablished() && !ExitOccured() ) - { - if ( aForeground ) - { - if ( iContinuePlayingWhenForeground ) - { - MUS_LOG( "mus: [MUSUI ] Resume playing" ); - PlayL(); - } - } - else - { - MUS_LOG( "mus: [MUSUI ] Pause playing" ); - if ( EngineOutSession() ) - { - iContinuePlayingWhenForeground = IsPlayingL(); - } - PauseL(); - } - } - - MUS_LOG( "mus: [MUSUI ] <- CMusUiSendController::HandleForegroundEventL" ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiSendController::PlayL() - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiSendController::PlayL" ); - if ( EngineOutSession() ) - { - EngineOutSession()->PlayL(); - } - MUS_LOG( "mus: [MUSUI ] <- CMusUiSendController::PlayL" ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiSendController::PauseL() - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiSendController::PauseL" ); - if ( EngineOutSession() ) - { - EngineOutSession()->PauseL(); - } - MUS_LOG( "mus: [MUSUI ] <- CMusUiSendController::PauseL" ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -TBool CMusUiSendController::IsPlayingL() - { - TBool isPlaying( EFalse ); - - if ( EngineOutSession() ) - { - isPlaying = EngineOutSession()->IsPlayingL(); - } - - return isPlaying; - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiSendController::SessionEstablished() - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiSendController::SessionEstablished" ); - - // Common handling first - CMusUiEventController::SessionEstablished(); - - iConnectionEstablished = ETrue; - DismissWaitDialog(); - - if ( iForeground ) - { - MUS_LOG( "mus: [MUSUI ] Enable display and start playing" ); - TRAP_IGNORE( PlayL(); - EnableDisplayL( ETrue ); ) - - iEventObserver.SetToolbarVisibility( ETrue ); - - } - else - { - MUS_LOG( "mus: [MUSUI ] In background, don't start playing yet" ); - iContinuePlayingWhenForeground = ETrue; - } - - MUS_LOG( "mus: [MUSUI ] <- CMusUiSendController::SessionEstablished" ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiSendController::SessionRejected() - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiSendController::SessionRejected" ); - DismissWaitDialog(); - TRAP_IGNORE ( - MusUiDialogUtil::ShowInformationDialogL( - R_MUS_LIVE_SHARING_VIEW_NOTE_CONNECTION_REJECTED ) ); - - TRAP_IGNORE( iCallbackService->AsyncEventL( EMusUiAsyncHandleExit ) ); - - MUS_LOG( "mus: [MUSUI ] <- CMusUiSendController::SessionRejected" ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiSendController::SessionBadRequest() - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiSendController::SessionBadRequest" ); - - DismissWaitDialog(); - TRAP_IGNORE( iCallbackService->AsyncEventL( EMusUiAsyncHandleExit ) ); - - MUS_LOG( "mus: [MUSUI ] <- CMusUiSendController::SessionBadRequest" ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiSendController::SessionUnauthorized() - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiSendController::SessionUnauthorized" ); - - DismissWaitDialog(); - TRAP_IGNORE( iCallbackService->AsyncEventL( EMusUiAsyncHandleExit ) ); - - MUS_LOG( "mus: [MUSUI ] <- CMusUiSendController::SessionUnauthorized" ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiSendController::SessionPaymentRequired() - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiSendController::SessionPaymentRequired" ); - - DismissWaitDialog(); - TRAP_IGNORE( iCallbackService->AsyncEventL( EMusUiAsyncHandleExit ) ); - - MUS_LOG( "mus: [MUSUI ] <- CMusUiSendController::SessionPaymentRequired" ); - } - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiSendController::SessionRecipientNotFound() - { - MUS_LOG1( "mus: [MUSUI ] -> CMusUiSendController::SessionRecipientNotFound [%d]", - iTriedInvitations ); - DismissWaitDialog(); - if ( ExitOccured() ) - { - return; - } - if ( ++iTriedInvitations > 1 ) - { - TRAP_IGNORE( MusUiDialogUtil::ShowInformationDialogL( - R_MUS_LIVE_SHARING_VIEW_NOTE_WRONG_ADDRESS ) ); - - TRAP_IGNORE( iCallbackService->AsyncEventL( EMusUiAsyncInviteCancel ) ); - - } - else - { - TRAP_IGNORE( MusUiDialogUtil::ShowInformationDialogL( - R_MUS_LIVE_SHARING_VIEW_NOTE_WRONG_ADDRESS ) ); - iManualAddressTyped = ETrue; - - TRAP_IGNORE( - iCallbackService->AsyncEventL( EMusUiAsyncManualAddressEntry ) ); - - } - MUS_LOG( "mus: [MUSUI ] <- CMusUiSendController::SessionRecipientNotFound" ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiSendController::SessionProxyAuthenticationRequired() - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiSendController::SessionProxyAuthenticationRequired" ); - - DismissWaitDialog(); - TRAP_IGNORE( iCallbackService->AsyncEventL( EMusUiAsyncHandleExit ) ); - - MUS_LOG( "mus: [MUSUI ] <- CMusUiSendController::SessionProxyAuthenticationRequired" ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiSendController::SessionRequestTimeOut() - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiSendController::SessionRequestTimeOut" ); - DismissWaitDialog(); - TRAP_IGNORE( MusUiDialogUtil::ShowInformationDialogL( - R_MUS_LIVE_SHARING_VIEW_NOTE_NO_RESPONSE ) ); - - TRAP_IGNORE( iCallbackService->AsyncEventL( EMusUiAsyncHandleExit ) ); - - MUS_LOG( "mus: [MUSUI ] <- CMusUiSendController::SessionRequestTimeOut" ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiSendController::SessionUnsupportedMediaType() - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiSendController::SessionUnsupportedMediaType" ); - DismissWaitDialog(); - if ( !ExitOccured() ) - { - TRAP_IGNORE( MusUiDialogUtil::ShowGlobalErrorDialogL( - R_MUS_LIVE_SHARING_VIEW_NOTE_APP_N_A ) ); - } - - TRAP_IGNORE( iCallbackService->AsyncEventL( EMusUiAsyncHandleExit ) ); - - MUS_LOG( "mus: [MUSUI ] <- CMusUiSendController::SessionUnsupportedMediaType" ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiSendController::SessionBusyHere() - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiSendController::SessionBusyHere" ); - DismissWaitDialog(); - TRAP_IGNORE( - MusUiDialogUtil::ShowInformationDialogL( - R_MUS_LIVE_SHARING_VIEW_NOTE_RECIPIENT_N_A ) ); - - TRAP_IGNORE( iCallbackService->AsyncEventL( EMusUiAsyncHandleExit ) ); - - MUS_LOG( "mus: [MUSUI ] <- CMusUiSendController::SessionBusyHere" ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiSendController::SessionRequestCancelled() - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiSendController::SessionRequestCancelled" ); - DismissWaitDialog(); - TRAP_IGNORE( - MusUiDialogUtil::ShowInformationDialogL( - R_MUS_LIVE_SHARING_VIEW_NOTE_INVITATION_CANCELLED ) ); - - TRAP_IGNORE( iCallbackService->AsyncEventL( EMusUiAsyncHandleExit ) ); - - MUS_LOG( "mus: [MUSUI ] <- CMusUiSendController::SessionRequestCancelled" ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiSendController::SessionTemporarilyNotAvailable() - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiSendController::SessionRequestCancelled" ); - DismissWaitDialog(); - if ( !ExitOccured() ) - { - TRAP_IGNORE( MusUiDialogUtil::ShowGlobalErrorDialogL( - R_MUS_LIVE_SHARING_VIEW_NOTE_SERVICE_N_A ) ); - } - - TRAP_IGNORE( iCallbackService->AsyncEventL( EMusUiAsyncHandleExit ) ); - - MUS_LOG( "mus: [MUSUI ] <- CMusUiSendController::SessionRequestCancelled" ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiSendController::ConstructL() - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiSendController::ConstructL" ); - - CMusUiEventController::ConstructL(); // Base class construction - iLocalizer = CDirectoryLocalizer::NewL(); - - MUS_LOG( "mus: [MUSUI ] <- CMusUiSendController::ConstructL" ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -CMusUiSendController::CMusUiSendController( - MMusUiEventObserver& aEventObserver, - MMusUiSharingObserver& aSharingObserver, - MMusUiSendObserver& aSendObserver ) - : CMusUiEventController( aEventObserver, aSharingObserver ), - iSendObserver( aSendObserver ), - iTriedInvitations( 0 ), - iContinuePlayingWhenForeground( ETrue ), - iWaitDialogCallback( *this ) - { - - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiSendController::ExitProcedureL( TBool aUserAcceptance ) - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiSendController::ExitProcedureL" ); - - DismissWaitDialog(); - - switch ( iShutdownState ) - { - case EMusUiShutdownStarted: - { - MUS_LOG( "mus: [MUSUI ] ExitProcedureL: EMusuiShutdownStarted" ); - - if ( iVideoToBeSaved && - iVideoFileName && - MusUiFileUtil::FileExists( *iVideoFileName ) ) - { - iShutdownState = EMusUiShutdownVideoSaved; - ShowVideoSavedDialogL(); - ExitProcedureL( ETrue ); // Accept saving - } - else - { - CMusUiEventController::ExitProcedureL( aUserAcceptance ); - } - break; - } - - case EMusUiShutdownVideoSaved: - { - MUS_LOG( "mus: [MUSUI ] ExitProcedureL: EMusuiShutdownVideoSaved" ); - - // Check if our address is valid sip or tel uri. If not, there is no - // point to query user about permission to save it to contacts. - - TInt error = KErrNotFound; - if ( iAddress ) - { - TMusEngUriParser parser( *iAddress ); - TRAP( error, parser.ParseUriL() ) - } - - // Save Address to Contacts query if manually entered - // and if is the standard variant. - // NOTE: KErrNotSupported means there is more than one contact id. - if ( !iOperatorSpecificFunctionality && ManualAddressTyped() && - iContactId != KErrNotSupported && - error == KErrNone ) - { - iShutdownState = EMusUiShutdownContactSavingQueried; - SaveContactQueryL(); - } - else - { - // Nothing send specific, let the base class handle - CMusUiEventController::ExitProcedureL( aUserAcceptance ); - } - break; - } - - default: - { - // Nothing send specific, let the base class handle - CMusUiEventController::ExitProcedureL( aUserAcceptance ); - break; - } - } - - MUS_LOG( "mus: [MUSUI ] <- CMusUiSendController::ExitProcedureL" ); - } - - -// ----------------------------------------------------------------------------- -// Handles status changes specific to sending sharing types. -// Calls base class version for status changes that are not sending specific. -// ----------------------------------------------------------------------------- -// -void CMusUiSendController::HandleChangedStatusL( - TMusAvailabilityStatus aStatus ) - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiSendController::HandleChangedStatusL" ) - switch( aStatus ) - { - case ESipRegistrationPending: - { - MUS_LOG( "mus: [MUSUI ] ESipRegistrationPending" ); - iSipRegistrationPending = ETrue; - break; - } - case ESipOptionsNotSent: // FALLTHROUGH - case ESipOptionsSent: // FALLTHROUGH - { - break; - } - case EManualActivation: // FALLTHROUGH - case EMultimediaSharingAvailable: - { - MUS_LOG( "mus: [MUSUI ] EManualActivation or EMultimediaSharingAvailable" ) - - if( iSipRegistrationPending ) - { - iSipRegistrationPending = EFalse; - // Set callback service, Call StartInvitationL when wait dialog dismissed - TRAPD( err, iSharingObserver.SetWaitDialogCallbackL( - &iWaitDialogCallback ) ); - // Dismiss pending wait note - iSharingObserver.DismissWaitDialogL(); - if ( err == KErrNotReady ) - { - StartInvitationL(); - } - } - break; - } - - default: - { - // Not sending specific, let the base class handle - CMusUiEventController::HandleChangedStatusL( aStatus ); - break; - } - } - MUS_LOG( "mus: [MUSUI ] <- CMusUiSendController::HandleChangedStatusL" ) - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -const TDesC& CMusUiSendController::VideoFileNameL() - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiSendController::VideoFileNameL" ); - - TParse parse; - TPtrC rootPath; - - SetVideoPathValueL();//sets video rootpath according to setting value. - - if ( parse.Set( iVideoFilePath,NULL,NULL) != KErrBadName ) - { - - if(parse.Drive().Compare( PathInfo::MemoryCardRootPath())) - { - TRAPD(error,MusUiFileUtil::VideoFilePathExistsL(iVideoFilePath)); - - switch(error) - { - case KErrNotReady: - case KErrCorrupt: - case KErrLocked: - { - MusUiDialogUtil::ShowGlobalInformationDialogL( - R_MUS_VIEW_NOTE_MEMORYCARD_PROBLEM); - - MUS_LOG( "mus: [MUSUI ] -> Changing to Phone Memory " ); - rootPath.Set(PathInfo::PhoneMemoryRootPath()); - TParsePtrC pathPtr(rootPath); - iVideoFilePath = rootPath; - iVideoFilePath += PathInfo::VideosPath(); - // Make sure the new path exists - TRAP_IGNORE( MusUiFileUtil::VideoFilePathExistsL(iVideoFilePath) ) - break; - } - case KErrAlreadyExists: - case KErrNone: - { - MUS_LOG( "mus: [MUSUI ] -> Using MMC " ); - rootPath.Set(PathInfo::MemoryCardRootPath()); - break; - } - default: - { - delete iVideoFileName; - iVideoFileNamePlain = KNullDesC; - iVideoFileName = iVideoFileNamePlain.AllocL(); - HandleError( error); - break; - } - } - } - else//Phone memory is being used. - { - TRAPD(error,MusUiFileUtil::VideoFilePathExistsL(iVideoFilePath)); - - switch(error) - { - case KErrAlreadyExists: - case KErrNone: - { - MUS_LOG( "mus: [MUSUI ] -> Using Phone memory" ); - rootPath.Set(PathInfo::PhoneMemoryRootPath()); - break; - } - default: - { - delete iVideoFileName; - iVideoFileNamePlain = KNullDesC; - iVideoFileName = iVideoFileNamePlain.AllocL(); - HandleError( error); - break; - } - } - } - - } - else - { - delete iVideoFileName; - iVideoFileNamePlain = KNullDesC; - iVideoFileName = iVideoFileNamePlain.AllocL(); - HandleError(KErrBadName); - } - - TParsePtrC pathPtr(rootPath); - iVideoFilePath += pathPtr.NameAndExt(); - MusUiFileUtil::CreateVideoFileNameL(iVideoFilePath, - iVideoFileNamePlain); - - delete iVideoFileName; - TFileName videoFileName; - videoFileName += iVideoFilePath; - videoFileName += iVideoFileNamePlain; - videoFileName += KMusVideoFileNameExtension; - iVideoFileName = videoFileName.AllocL(); - - MUS_LOG_TDESC( "mus: [MUSUI ] <- CMusUiSendController::VideoFileNameL:", - iVideoFileName->Des() ); - return *iVideoFileName; - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiSendController::ShowInvitingWaitDialogL() - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiSendController::ShowWaitDialogL" ); - delete iDialogPrompt; - iDialogPrompt = NULL; - iDialogPrompt = StringLoader::LoadL( - R_MUS_LIVE_SHARING_VIEW_INVITING_WAIT_NOTE_TXT, - MusContactName().Length() > 0 ? - MusContactName() : iOperatorSpecificFunctionality ? - MusTelNumberValue() : *iAddress ); - - if ( !iSharingObserver.ShowWaitDialogL( - *iDialogPrompt, - KMusInviteExpireTimeout, - R_MUS_LIVE_SHARING_VIEW_NOTE_NO_RESPONSE ) ) - { - CancelInvitationL(); - } - - - MUS_LOG( "mus: [MUSUI ] <- CMusUiSendController::ShowWaitDialogL" ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiSendController::DismissWaitDialog() - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiSendController::DismissWaitDialog" ); - TRAPD( err, iSharingObserver.DismissWaitDialogL(); ); - if ( err != KErrNone ) - { - HandleError( err ); - } - MUS_LOG( "mus: [MUSUI ] <- CMusUiSendController::DismissWaitDialog" ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiSendController::SplitL( const TDesC& aDes, - const TDesC& aChar, - CDesCArray* aArray ) - { - TInt charPos( 0 ); - TPtrC ptr( aDes ); - TBool found = EFalse; - while( ( charPos = ptr.Find( aChar ) ) > 0 ) - { - found = ETrue; - TPtrC str = ptr.Left( charPos ); - aArray->AppendL( str ); - ptr.Set( ptr.Right( ptr.Length() - str.Length() - 1 ) ); - } - if ( found && ptr.Length() > 0 ) - { - aArray->AppendL( ptr ); - } - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiSendController::SetVideoPathValueL() - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiSendController::SetVideoPathValueL" ); - TInt drive = MultimediaSharingSettings::VideoLocationSettingL(); - - TFileName rootPath; - User::LeaveIfError( PathInfo::GetRootPath( rootPath, drive ) ); - - TParsePtrC pathPtr(rootPath); - iVideoFilePath = rootPath; - iVideoFilePath += PathInfo::VideosPath(); - MUS_LOG_TDESC( "mus: [MUSUI ] <- CMusUiSendController::SetVideoPathValueL: ", - iVideoFilePath ); - iLocalizer->SetFullPath( iVideoFilePath ); - if ( iLocalizer->IsLocalized() ) - { - iLocalizedVideoFilePath =iLocalizer->LocalizedName(); - } - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiSendController::ShowVideoSavedDialogL() - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiSendController::ShowVideoSavedDialogL" ); - //MUS_LOG_TDESC( "mus: [MUSUI ] ", iVideoFileNamePlain ); - //MUS_LOG_TDESC( "mus: [MUSUI ] ", iVideoFilePath ); - - delete iDialogPrompt; - iDialogPrompt = NULL; - - TBuf buf; - TFileName videoFileName; - videoFileName += iVideoFileNamePlain; - videoFileName += KMusVideoFileNameExtension; - buf = videoFileName; - - CDesCArrayFlat* savingTextsArray = - new ( ELeave ) CDesCArrayFlat( KMusStringSubstArrayGranularity ); - CleanupStack::PushL( savingTextsArray ); - //"File %0U saved to folder %1U" - //%0U = iVideoFileName - //%1U = iVideoFilePath - savingTextsArray->InsertL( 0, videoFileName ); - - if ( MultimediaSharingSettings::OperatorVariantSettingL() == - MusSettingsKeys::EOperatorSpecific ) // For AT&T products - { - HBufC* folder = StringLoader::LoadLC( R_MUS_VIDEO_SAVE_FOLDER_NAME ); - savingTextsArray->InsertL( 1, *folder ); - CleanupStack::PopAndDestroy( folder ); - } - else // Standard products - { - if ( iLocalizer->IsLocalized() ) - { - savingTextsArray->InsertL( 1, iLocalizedVideoFilePath ); - } - else - { - savingTextsArray->InsertL( 1, iVideoFilePath ); - } - } - - MUS_LOG_TDESC( "mus: [MUSUI ] filename:", savingTextsArray->MdcaPoint( 0 ) ); - MUS_LOG_TDESC( "mus: [MUSUI ] path:", savingTextsArray->MdcaPoint( 1 ) ); - - iDialogPrompt = StringLoader::LoadL( R_MUS_VIEW_NOTE_VIDEO_SAVED, - *savingTextsArray ); - CleanupStack::Pop( savingTextsArray ); - - MUS_LOG_TDESC( "mus: [MUSUI ] ", iDialogPrompt->Des() ); - - MusUiDialogUtil::ShowGlobalInformationDialogL( *iDialogPrompt ); - MUS_LOG( "mus: [MUSUI ] <- CMusUiSendController::ShowVideoSavedDialogL" ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiSendController::DeleteVideoL() - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiSendController::DeleteVideoL" ); - if ( iVideoFileName ) - { - MusUiFileUtil::DeleteFileL( *iVideoFileName ); - } - MUS_LOG( "mus: [MUSUI ] <- CMusUiSendController::DeleteVideoL" ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiSendController::DeleteFileL() - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiSendController::DeleteFileL" ); - if ( iVideoFileName && - MusUiFileUtil::FileExists( *iVideoFileName ) && !iVideoToBeSaved ) - { - DeleteVideoL(); - } - MUS_LOG( "mus: [MUSUI ] <- CMusUiSendController::DeleteFileL" ); - } - - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -CMusUiSendController:: -TWaitDialogCallback::TWaitDialogCallback( CMusUiSendController& aController ) - : iController( aController ) - { - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiSendController:: -TWaitDialogCallback::DialogDismissedL( TInt /*aButtonId*/ ) - { - iController.StartInvitationL(); - } - -// End of file - diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshui/src/musuisendview.cpp --- a/mmsharing/mmshui/src/musuisendview.cpp Thu Aug 19 09:51:39 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,148 +0,0 @@ -/* -* 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: The MUS application's UI class. -* -*/ - - -#include "musuisendview.h" -#include "musuiappui.h" -#include "musuisendcontroller.h" -#include "musuisendviewcontainer.h" -#include "musuidefinitions.h" -#include "musuidialogutil.h" -#include "muslogger.h" // debug logging - -#include - -#include - - -// ----------------------------------------------------------------------------- -// EPOC two-phased constructor -// ----------------------------------------------------------------------------- -// -void CMusUiSendView::ConstructL() - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiSendView::ConstructL" ); - CMusUiGeneralView::ConstructL(); - MUS_LOG( "mus: [MUSUI ] <- CMusUiSendView::ConstructL" ); - } - - -// ----------------------------------------------------------------------------- -// Destructor -// ----------------------------------------------------------------------------- -// -CMusUiSendView::~CMusUiSendView() - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiSendView::~CMusUiSendView" ); - MUS_LOG( "mus: [MUSUI ] <- CMusUiSendView::~CMusUiSendView" ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiSendView::ManualAddressEntryL( const TDesC& aAddress ) - { - MUS_LOG_TDESC( "mus: [MUSUI ] -> CMusUiSendView::ManualAddressEntryL: ", - aAddress ); - - - TBuf address( aAddress ); - if ( SendController() && MusUiDialogUtil::ShowTextQueryDialogL( - R_MUS_TEXT_ENTER_ADDRESS_DIALOG_PROMPT, - address ) ) - { - SendController()->InviteL( address ); - } - else - { - if ( SendController() && SendController()->IsAudioRoutingLoudSpeaker() ) - { - MusUiDialogUtil::ShowGlobalInformationDialogL( - R_MUS_NOTE_HF_DEACTIVATED ); - } - MusUiDialogUtil::ShowGlobalInformationDialogL( - R_MUS_LIVE_SHARING_VIEW_NOTE_SHARING_ENDED ); - MusAppUi()->HandleExit(); - } - - MUS_LOG( "mus: [MUSUI ] <- CMusUiSendView::ManualAddressEntryL" ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -CMusUiEventController* CMusUiSendView::EventController() const - { - return SendController(); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -CMusUiViewContainer& CMusUiSendView::SharingContainer() const - { - return *SendContainer(); - } - - -// ----------------------------------------------------------------------------- -// From CAknView, Gets called from framework when activating this view -// ----------------------------------------------------------------------------- -// -void CMusUiSendView::DoActivateL( const TVwsViewId& aPrevViewId, - TUid aCustomMessageId, - const TDesC8& aCustomMessage ) - { - // Base class activation first - CMusUiGeneralView::DoActivateL( aPrevViewId, - aCustomMessageId, - aCustomMessage ); - - } - - -// ----------------------------------------------------------------------------- -// From AknView, Gets called from framework when deactivating this view -// ----------------------------------------------------------------------------- -// -void CMusUiSendView::DoDeactivate() - { - CMusUiGeneralView::DoDeactivate(); // Base class deactivation first - } - - -// ----------------------------------------------------------------------------- -// Called when focus event occurs. -// ----------------------------------------------------------------------------- -// -void CMusUiSendView::DoHandleForegroundEventL( TBool aForeground ) - { - CMusUiGeneralView::HandleForegroundEventL( - aForeground, - iOperatorSpecificFunctionality && - EventControllerL().ConnectionEstablished() && - !EventControllerL().ExitOccured() ); - } - - -// end of file diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshui/src/musuisendviewcontainer.cpp --- a/mmsharing/mmshui/src/musuisendviewcontainer.cpp Thu Aug 19 09:51:39 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,220 +0,0 @@ -/* -* Copyright (c) 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: The MUS application's UI class. -* -*/ - - -#include "musuiclipsharingviewcontainer.h" -#include "musuisendview.h" -#include "musuilevelindicator.h" -#include "musuidialogutil.h" -#include "musuidefinitions.h" -#include "musuisendcontroller.h" -#include "muslogger.h" // debug logging -#include - -#include -#include -#include -#include - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -CMusUiSendViewContainer::CMusUiSendViewContainer() - { - // NOP - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiSendViewContainer::ConstructL( CMusUiGeneralView* aView, - const TRect& aRect, - TAknOrientation aIndicatorLayout, - TBool aContainerVisible, - TBool aIndicatorVisible ) - { - MUS_LOG2( "mus: [MUSUI ] -> CMusUiSendViewContainer::ConstructL, visibilty:%d,%d", - aContainerVisible, aIndicatorVisible ); - - CreateWindowL(); - iView = aView; - iBackGround = CAknsBasicBackgroundControlContext::NewL( - KAknsIIDQsnBgAreaMain, - aRect, - EFalse ); - - iIndicator = CMusUiLevelIndicator::NewL( aIndicatorLayout, - 0, - 100, - this, - aRect, - this ); - iIndicator->SetContainerWindowL( *this ); - - iVideoRect = aRect; - - SetRect( aRect ); - - iIndicator->SetRect( Rect() ); - - if ( aContainerVisible && !aIndicatorVisible ) - { - iIndicator->MakeVisible( aIndicatorVisible ); - } - - MakeVisible( aContainerVisible ); - ActivateL(); - - MUS_LOG( "mus: [MUSUI ] <- CMusUiSendViewContainer::ConstructL" ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -CMusUiSendViewContainer::~CMusUiSendViewContainer() - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiSendViewContainer::~CMusUiSendViewContainer" ); - - delete iIndicator; - delete iBackGround; - - MUS_LOG( "mus: [MUSUI ] <- CMusUiSendViewContainer::~CMusUiSendViewContainer" ); - } - - -// ----------------------------------------------------------------------------- -// Fetches a pointer to the view that owns this container. -// ----------------------------------------------------------------------------- -// -CMusUiGeneralView* CMusUiSendViewContainer::MusUiView() const - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiSendViewContainer::MusUiView" ); - MUS_LOG( "mus: [MUSUI ] <- CMusUiSendViewContainer::MusUiView" ); - return iView; - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiSendViewContainer::SetController( CMusUiSendController* aController ) - { - iSendController = aController; - } - - -// ----------------------------------------------------------------------------- -// Called by framework to redraw the screen area. -// ----------------------------------------------------------------------------- -// -void CMusUiSendViewContainer::Draw( const TRect& aRect ) const - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiSendViewContainer::Draw" ); - CWindowGc& gc = SystemGc(); - - MAknsSkinInstance* skin = AknsUtils::SkinInstance(); - MAknsControlContext* cc = AknsDrawUtils::ControlContext( this ); - if(!AknsDrawUtils::Background( skin, - cc, - this, - gc, - iVideoRect, - KAknsDrawParamDefault )) - { - MUS_LOG( "mus: [MUSUI ] Skin not valid or not found" ); - gc.SetBrushColor( iEikonEnv->ControlColor( EColorWindowBackground, *this ) ); - gc.SetBrushStyle( CGraphicsContext::ESolidBrush ); - gc.Clear( aRect ); - } - - MUS_LOG( "mus: [MUSUI ] <- CMusUiSendViewContainer::Draw" ); - } - - -// ----------------------------------------------------------------------------- -// Called by framework when the view size is changed -// ----------------------------------------------------------------------------- -// -void CMusUiSendViewContainer::SizeChanged() - { - if (iBackGround) - { - static_cast - ( iBackGround )->SetRect( Rect() ); - } - iIndicator->SetRect( Rect() ); - } - - -// ----------------------------------------------------------------------------- -// Supply the Mob Object for background skin drawing -// ----------------------------------------------------------------------------- -// -TTypeUid::Ptr CMusUiSendViewContainer::MopSupplyObject( TTypeUid aId ) - { - if (aId.iUid == MAknsControlContext::ETypeId && iBackGround ) - { - return MAknsControlContext::SupplyMopObject( aId, iBackGround ); - } - return CCoeControl::MopSupplyObject( aId ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiSendViewContainer::SetLevelIndicatorVisibility( TBool aVisible) - { - MUS_LOG1( "mus: [MUSUI ] -> CMusUiSendViewContainer::SetLevelIndicatorVisibility( %d )", - aVisible ) - - MakeVisible( aVisible ); - - MUS_LOG( "mus: [MUSUI ] <- CMusUiSendViewContainer::SetLevelIndicatorVisibility" ) - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiSendViewContainer::IndicatorLevelChanged( TInt aNewLevel ) - { - if ( iSendController ) - { - TRAPD( error, iSendController->HandleSliderValueChangeL( aNewLevel ) ) - - if ( error != KErrNone ) - { - MUS_LOG1( "mus: [MUSUI ] Error during handling of slider value change( %d )", - error ) - - iSendController->HandleError( error ); - } - } - } - - - -// end of file diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshui/src/musuistartcontroller.cpp --- a/mmsharing/mmshui/src/musuistartcontroller.cpp Thu Aug 19 09:51:39 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,53 +0,0 @@ -/* -* 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: Application's UI class. -* -*/ - - - -#include "musuistartcontroller.h" -#include "musmanagercommon.h" -#include "mussessionproperties.h" -#include "muslogger.h" // debug logging - -#include - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -MusUiStartController::MusUiStartController() - { - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -MultimediaSharing::TMusUseCase MusUiStartController::ReadUseCaseL() - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiStartController::UseCasePropertyL()" ); - TInt val; - User::LeaveIfError( RProperty::Get( NMusSessionApi::KCategoryUid, - NMusSessionApi::KUseCase, - val ) ); - - MUS_LOG1( "mus: [MUSUI ] <- CMusUiStartController::UseCasePropertyL():\ - [%d]", val ); - - return static_cast< MultimediaSharing::TMusUseCase >( val ); - } diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshui/src/musuistatuspanehandler.cpp --- a/mmsharing/mmshui/src/musuistatuspanehandler.cpp Thu Aug 19 09:51:39 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,325 +0,0 @@ -/* -* 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: -* -*/ - - - -#include "musuistatuspanehandler.h" -#include "musuidefinitions.h" -#include "muslogger.h" // debug logging -#include - -#include -#include -#include -#include -#include -#include -#include -#include // Navi pane container ( CAknNavigationControlContainer ) -#include -#include -#include -#include - - -// constants -#define KMUSMBMFILENAME iEikonEnvironment.EikAppUi()->Application()->BitmapStoreName() - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -CMusUiStatusPaneHandler* CMusUiStatusPaneHandler::NewL( CEikonEnv& aEikonEnv ) - { - CMusUiStatusPaneHandler* self = - new ( ELeave ) CMusUiStatusPaneHandler( aEikonEnv ); - CleanupStack::PushL( self ); - self->ConstructL(); - CleanupStack::Pop( self ); - return self; - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -CMusUiStatusPaneHandler::~CMusUiStatusPaneHandler() - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiStatusPaneHandler::~CMusUiStatusPaneHandler" ); - - delete iNaviPaneText; - delete iMediaControl; - delete iVolumePopup; - - MUS_LOG( "mus: [MUSUI ] <- CMusUiStatusPaneHandler::~CMusUiStatusPaneHandler" ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -CMusUiStatusPaneHandler::CMusUiStatusPaneHandler( CEikonEnv& aEikonEnv ) - :iEikonEnvironment( aEikonEnv ) - { - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiStatusPaneHandler::ConstructL() - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiStatusPaneHandler::ConstructL" ); - - CEikStatusPane* statusPane = iEikonEnvironment.AppUiFactory()->StatusPane(); - - iNaviPane = STATIC_CAST( - CAknNavigationControlContainer*, - statusPane->ControlL( TUid::Uid( EEikStatusPaneUidNavi ) ) ); - iTitlePane = STATIC_CAST( - CAknTitlePane*, - statusPane->ControlL( TUid::Uid( EEikStatusPaneUidTitle ) ) ); - iContextPane = STATIC_CAST( - CAknContextPane*, - statusPane->ControlL( TUid::Uid( EEikStatusPaneUidContext ) ) ); - - iVolumePopup = CAknVolumePopup::ConstructFromResourceL( - R_AVKON_NAVI_PANE_VOLUME_INDICATOR ); - - iMediaControl = CreateMediaNaviL(); - - MUS_LOG( "mus: [MUSUI ] <- CMusUiStatusPaneHandler::ConstructL" ); - } - - -// ----------------------------------------------------------------------------- -// Updates statuspane icons -// ----------------------------------------------------------------------------- -// -void CMusUiStatusPaneHandler::SetStatusPaneIconsL( TInt32 aIconId, - TInt32 aIconMaskId ) - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiStatusPaneHandler::SetStatusPaneIconsL" ) - - iContextPane->SetPictureFromFileL( KMUSMBMFILENAME, aIconId, aIconMaskId ); - - MUS_LOG( "mus: [MUSUI ] <- CMusUiStatusPaneHandler::SetStatusPaneIconsL" ) - } - - -// ----------------------------------------------------------------------------- -// Updates statuspane icons -// ----------------------------------------------------------------------------- -// -void CMusUiStatusPaneHandler::SetStatusPaneIconsL( CFbsBitmap* aBitmap ) - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiStatusPaneHandler::SetStatusPaneIconsL" ); - CEikImage* image = new (ELeave) CEikImage(); - image->SetBitmap( aBitmap ); - CEikImage* oldImage = iContextPane->SwapPicture( image ); - delete oldImage; - MUS_LOG( "mus: [MUSUI ] <- CMusUiStatusPaneHandler::SetStatusPaneIconsL" ); - } - - -// ----------------------------------------------------------------------------- -// Hides navi-pane decorators and clears text -// ----------------------------------------------------------------------------- -// -void CMusUiStatusPaneHandler::ClearNaviPaneL() - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiStatusPaneHandler::ClearNaviPaneL" ); - delete iNaviPaneText; - iNaviPaneText = NULL; - - // Pushes default decorator object (empty one) to top of the stack - // and draws it - iNaviPane->PushDefaultL(); - - MUS_LOG( "mus: [MUSUI ] <- CMusUiStatusPaneHandler::ClearNaviPaneL" ); - } - - -// ----------------------------------------------------------------------------- -// Sets title-pane text -// ----------------------------------------------------------------------------- -// -void CMusUiStatusPaneHandler::SetTitleL( const TDesC& aTitle ) - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiStatusPaneHandler::SetTitleL" ); - iTitlePane->SetTextL( aTitle ); - MUS_LOG( "mus: [MUSUI ] <- CMusUiStatusPaneHandler::SetTitleL" ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiStatusPaneHandler::SetTitleFromResourceL( TInt aResourceId ) - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiStatusPaneHandler::SetTitleFromResourceL" ); - HBufC* titlePaneTitle = StringLoader::LoadLC( aResourceId ); - iTitlePane->SetTextL( *titlePaneTitle ); - CleanupStack::PopAndDestroy( titlePaneTitle ); - MUS_LOG( "mus: [MUSUI ] <- CMusUiStatusPaneHandler::SetTitleFromResourceL" ); - } - - -// ----------------------------------------------------------------------------- -// Get the current volume setting. -// ----------------------------------------------------------------------------- -// -TInt CMusUiStatusPaneHandler::GetVolumeControlValue() const - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiStatusPaneHandler::GetVolumeControlValue" ); - - TInt volume = iVolumePopup->Value(); - - MUS_LOG1( "mus: [MUSUI ] <- CMusUiStatusPaneHandler::GetVolumeControlValue: [%d]", - volume ); - return volume; - } - - -// ----------------------------------------------------------------------------- -// Activates volume control. -// ----------------------------------------------------------------------------- -// -void CMusUiStatusPaneHandler::ActivateVolumeControlL( TInt aVolume, TBool aOnlyIfVisible ) - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiStatusPaneHandler::ActivateVolumeControlL" ); - - if ( aVolume < KMusVolumeMuted || aVolume > KMusVolumeMaximum ) - { - MUS_LOG( "mus: [MUSUI ] <- CMusUiStatusPaneHandler::SetVolumeControlValue: returning" ); - return; - } - - if ( !aOnlyIfVisible || (aOnlyIfVisible && iVolumePopup->IsVisible()) ) - { - iVolumePopup->SetValue( aVolume ); - iVolumePopup->ShowVolumePopupL(); - } - MUS_LOG( "mus: [MUSUI ] <- CMusUiStatusPaneHandler::ActivateVolumeControlL" ); - } - - -// ----------------------------------------------------------------------------- -// Activate media navi pane. -// ----------------------------------------------------------------------------- -// -void CMusUiStatusPaneHandler::ActivateNaviPaneMediaL() - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiStatusPaneHandler::ActivateNaviPaneMediaL" ); - iNaviPane->PushL( *iMediaControl ); - MUS_LOG( "mus: [MUSUI ] <- CMusUiStatusPaneHandler::ActivateNaviPaneMediaL" ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiStatusPaneHandler::ShowNaviPaneIconL( - TMusUiNaviMediaDecorator aIcon ) - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiStatusPaneHandler::ShowNaviPaneIconL" ); - CMusUiNaviMediaDecorator* mediaNavi = - static_cast( - iMediaControl->DecoratedControl() ); - mediaNavi->ShowIcon( aIcon ); - MUS_LOG( "mus: [MUSUI ] <- CMusUiStatusPaneHandler::ShowNaviPaneIconL" ); - } - - -// ----------------------------------------------------------------------------- -// Sets navi-pane label for left side -// ----------------------------------------------------------------------------- -// -void CMusUiStatusPaneHandler::SetLeftLabelL( const TDesC& aLabel ) - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiStatusPaneHandler::SetLeftLabelL" ); - - static_cast - ( iMediaControl->DecoratedControl() )->SetLeftLabelL( aLabel ); - iNaviPane->DrawNow(); - - MUS_LOG( "mus: [MUSUI ] <- CMusUiStatusPaneHandler::SetLeftLabelL" ); - } - - -// ----------------------------------------------------------------------------- -// Sets navi-pane label for right side -// ----------------------------------------------------------------------------- -// -void CMusUiStatusPaneHandler::SetRightLabelL( const TDesC& aLabel ) - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiStatusPaneHandler::SetRightLabelL" ); - - static_cast - ( iMediaControl->DecoratedControl() )->SetRightLabelL( aLabel ); - iNaviPane->DrawNow(); - - MUS_LOG( "mus: [MUSUI ] <- CMusUiStatusPaneHandler::SetRightLabelL" ); - } - - -// ----------------------------------------------------------------------------- -// Create media navi pane. -// ----------------------------------------------------------------------------- -// -CAknNavigationDecorator* CMusUiStatusPaneHandler::CreateMediaNaviL() - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiStatusPaneHandler::CreateMediaNaviL" ); - CMusUiNaviMediaDecorator* naviDecorator = CMusUiNaviMediaDecorator::NewL(); - CleanupStack::PushL( naviDecorator ); - - CAknNavigationDecorator* decoratedFolder = - CAknNavigationDecorator::NewL( - iNaviPane, - naviDecorator, - CAknNavigationDecorator::ENotSpecified ); - CleanupStack::Pop( naviDecorator );// decoratedFolder owns naviDecorator now - - CleanupStack::PushL( decoratedFolder ); - decoratedFolder->SetContainerWindowL( *iNaviPane ); - naviDecorator->SetContainerWindowL( *decoratedFolder ); - CleanupStack::Pop( decoratedFolder ); - - decoratedFolder->MakeScrollButtonVisible( EFalse ); - - MUS_LOG( "mus: [MUSUI ] <- CMusUiStatusPaneHandler::CreateMediaNaviL" ); - return decoratedFolder; - } - - -// ----------------------------------------------------------------------------- -// Get Volump Popup control pointer -// ----------------------------------------------------------------------------- -// -CAknVolumePopup* CMusUiStatusPaneHandler::GetVolumePopup() const - { - return iVolumePopup; - } - - -// end of file diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshui/src/musuiviewcontainer.cpp --- a/mmsharing/mmshui/src/musuiviewcontainer.cpp Thu Aug 19 09:51:39 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,219 +0,0 @@ -/* -* Copyright (c) 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: The MUS application's UI class. -* -*/ - - -#include "musuiviewcontainer.h" -#include "musuidialogutil.h" -#include "musuidefinitions.h" -#include "muslogger.h" // debug logging -#include "musuigeneralview.h" -#include - -#include - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -CMusUiViewContainer::~CMusUiViewContainer() - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiViewContainer::~CMusUiViewContainer" ); - - CancelWaitTimer(); - delete iWaitDialogTimer; - - if ( iWaitDialog ) - { - TRAP_IGNORE( iWaitDialog->ProcessFinishedL() ); - } - - MUS_LOG( "mus: [MUSUI ] <- CMusUiViewContainer::~CMusUiViewContainer" ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiViewContainer::CancelWaitTimer() - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiViewContainer::CancelWaitTimer" ); - if ( iWaitDialogTimer ) - { - iWaitDialogTimer->Cancel(); - } - MUS_LOG( "mus: [MUSUI ] <- CMusUiViewContainer::CancelWaitTimer" ); - } - - -// ----------------------------------------------------------------------------- -// Dismisses the current active wait note, if any. -// ----------------------------------------------------------------------------- -// -void CMusUiViewContainer::DismissWaitDialogL( TBool aReturnValue ) - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiViewContainer::DismissWaitDialogL" ); - - if ( iWaitDialog ) - { - iInvitationWaitDialogDismissed = ETrue; - iWaitDialogReturnValueWhenDismissed = aReturnValue; - - iWaitDialog->ProcessFinishedL(); - iWaitDialog = NULL; - } - - MUS_LOG( "mus: [MUSUI ] <- CMusUiViewContainer::DismissWaitDialogL" ); - } - - -// ----------------------------------------------------------------------------- -// Runs the Inviting recipient wait note -// ----------------------------------------------------------------------------- -// -TBool CMusUiViewContainer::RunWaitDialogL( const TDesC& aPrompt, - TInt aTimerInSeconds, - TInt aExpirationMessageResourceId ) - { - MUS_LOG_TDESC( "mus: [MUSUI ] -> CMusUiViewContainer::RunWaitDialogL: ", aPrompt ); - - __ASSERT_ALWAYS( !iWaitDialog, User::Leave( KErrAlreadyExists ) ); - __ASSERT_ALWAYS( !iWaitDialogTimer, User::Leave( KErrAlreadyExists ) ); - - MUS_LOG( " No previous wait dialog, continue " ) - - iExpirationMessageResourceId = aExpirationMessageResourceId; - - iWaitDialog = new( ELeave ) CAknWaitDialog( - reinterpret_cast(&iWaitDialog) ); - - iWaitDialog->SetTextL( aPrompt ); - - TBool retVal = ETrue; - iWaitDialog->PrepareLC( R_MUS_VIEW_INVITING_WAIT_NOTE ); - - if ( aTimerInSeconds > 0 ) - { - iWaitDialogTimer = CPeriodic::NewL( CActive::EPriorityStandard ); - iWaitDialogTimer->Start( KMusOneSecond * aTimerInSeconds, - KMusOneSecond * aTimerInSeconds, - TCallBack( DoWaitNoteTimeout, this ) ); - } - - iShowingWaitDialog = ETrue; - retVal = iWaitDialog->RunLD(); - iShowingWaitDialog = EFalse; - iWaitDialog = NULL; - - MUS_LOG( " Wait dialog's RunLD returned" ) - - if ( iToolbarHandler ) - { - MUS_LOG( " Completing toobar request" ) - iToolbarHandler->SetToolbarVisibility( ETrue ); - iToolbarHandler = NULL; - } - - // Cancel timer when dialog returns. - CancelWaitTimer(); - delete iWaitDialogTimer; - iWaitDialogTimer = NULL; - - if ( iInvitationWaitDialogDismissed ) - { - iInvitationWaitDialogDismissed = EFalse; - retVal = iWaitDialogReturnValueWhenDismissed; - } - - MUS_LOG( "mus: [MUSUI ] <- CMusUiViewContainer::RunWaitDialogL" ); - return retVal; - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiViewContainer::SetWaitDialogCallbackL( MProgressDialogCallback* aCallback ) - { - __ASSERT_ALWAYS( iWaitDialog, User::Leave( KErrNotReady ) ); - iWaitDialog->SetCallback( aCallback ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -TBool CMusUiViewContainer::WaitDialogShown() const - { - return iShowingWaitDialog; - } - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiViewContainer::RequestToolbarVisibilityOnceDialogDismissed( - CMusUiGeneralView* aToolbarHandler ) - { - MUS_LOG1( - "mus: [MUSUI ] <-> \ -CMusUiViewContainer::RequestToolbarVisibilityOnceDialogDismissed, handler:%d", - reinterpret_cast( aToolbarHandler ) ); - - iToolbarHandler = aToolbarHandler; - } - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -CMusUiViewContainer::CMusUiViewContainer() - { - // NOP - } - - -// ----------------------------------------------------------------------------- -// Tick handler, callback function directly called by periodic timer -// ----------------------------------------------------------------------------- -// -TInt CMusUiViewContainer::DoWaitNoteTimeout( TAny* aObject ) - { - // Cast, and call non-static function. - MUS_LOG( "mus: [MUSUI ] -> CMusUiViewContainer::DoWaitNoteTimeout" ); - - CMusUiViewContainer* self = - static_cast( aObject ); - - TRAP_IGNORE( self->DismissWaitDialogL( EFalse ) ); - - if ( self->iExpirationMessageResourceId != 0 ) - { - TRAP_IGNORE( MusUiDialogUtil::ShowGlobalInformationDialogL( - self->iExpirationMessageResourceId ) ) - } - - MUS_LOG( "mus: [MUSUI ] <- CMusUiViewContainer::DoWaitNoteTimeout" ); - // Return 0 ( false ) to indicate that we don't want more ticks - return KErrNone; - } - - -// end of file diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshui/src/musuizoomindicator.cpp --- a/mmsharing/mmshui/src/musuizoomindicator.cpp Thu Aug 19 09:51:39 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,483 +0,0 @@ -/* -* Copyright (c) 2003, 2004 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: Class for displaying icons in viewfinder view -* -*/ - - -// USER -#include "musuizoomindicator.h" -#include "muslogger.h" -#include "musuizoomindicatorobserver.h" - -// SYSTEM -#include -#include -#include -#include -#include -#include -#include - - - -// CONSTANTS -const TInt KMusUiZoomDisableTime = 3000000; - - -using namespace AknLayoutScalable_Apps; - -_LIT( KMyMbmFileName, "z:Camcorder.mbm"); - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -CMusUiZoomIndicator::CMusUiZoomIndicator( - TInt aZoomMin, - TInt aZoomMax, - MMusUiZoomIndicatorObserver* aObserver ) - : iZoomMin( aZoomMin ), - iZoomMax( aZoomMax ), - iZoomLevel( aZoomMin ), - iObserver( aObserver ) - { - MUS_LOG( "mus: mus: [MUSUI ] -> CMusUiZoomIndicator::CMusUiZoomIndicator()" ); - // pass - iDisableZoomTimer = NULL; - iTopMargin = 5; - iBottomMargin = 5; - - MUS_LOG( "mus: [MUSUI ] <- CMusUiZoomIndicator::CMusUiZoomIndicator()" ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -CMusUiZoomIndicator* CMusUiZoomIndicator::NewLC( - TInt aZoomMin, - TInt aZoomMax, - MMusUiZoomIndicatorObserver* aObserver ) - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiZoomIndicator::NewLC()" ); - CMusUiZoomIndicator* self = new ( ELeave ) CMusUiZoomIndicator( - aZoomMin, - aZoomMax, - aObserver ); - CleanupStack::PushL( self ); - self->ConstructL(); - - MUS_LOG( "mus: [MUSUI ] <- CMusUiZoomIndicator::NewLC()" ); - return self; - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -CMusUiZoomIndicator* CMusUiZoomIndicator::NewL( - TInt aZoomMin, - TInt aZoomMax, - MMusUiZoomIndicatorObserver* aObserver ) - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiZoomIndicator::NewL()" ); - CMusUiZoomIndicator* self = NewLC( aZoomMin, - aZoomMax, - aObserver ); - CleanupStack::Pop( self ); - - MUS_LOG( "mus: [MUSUI ] <- CMusUiZoomIndicator::NewL()" ); - return self; - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiZoomIndicator::ConstructL() - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiZoomIndicator::ConstructL()" ); - - if( iZoomMin > iZoomMax ) - { - User::Leave( KErrArgument ); - } - - iIconElevator = new (ELeave) CEikImage(); - iIconElevator->SetContainerWindowL( *this ); - - iIconMin = new (ELeave) CEikImage(); - iIconMin->SetContainerWindowL( *this ); - - iIconMax = new (ELeave) CEikImage(); - iIconMax->SetContainerWindowL( *this ); - - iIconBg = new (ELeave) CEikImage(); - iIconBg->SetContainerWindowL( *this ); - - - ConstructImageL( iIconMin, - AknsUtils::SkinInstance(), - KAknsIIDQsnIconColors, - EMbmCamcorderQgn_indi_cams_zoom_bg_min, - EMbmCamcorderQgn_indi_cams_zoom_bg_min); - - ConstructImageL( iIconMax, - AknsUtils::SkinInstance(), - KAknsIIDQsnIconColors, - EMbmCamcorderQgn_indi_cams_zoom_bg_max, - EMbmCamcorderQgn_indi_cams_zoom_bg_max); - - ConstructImageL( iIconBg, - AknsUtils::SkinInstance(), - KAknsIIDQsnIconColors, - EMbmCamcorderQgn_indi_cams_zoom_bg, - EMbmCamcorderQgn_indi_cams_zoom_bg); - - ConstructImageL( iIconElevator, - AknsUtils::SkinInstance(), - KAknsIIDQsnIconColors, - EMbmCamcorderQgn_indi_cams_zoom_elevator, - EMbmCamcorderQgn_indi_cams_zoom_elevator); - - - UpdateZoomLayout(); - - MUS_LOG( "mus: [MUSUI ] <- CMusUiZoomIndicator::ConstructL()" ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -CMusUiZoomIndicator::~CMusUiZoomIndicator() - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiZoomIndicator::~CMusUiZoomIndicator()" ); - - DisableTimer(); - delete iDisableZoomTimer; - - delete iIconElevator; - delete iIconMin; - delete iIconMax; - delete iIconBg; - - MUS_LOG( "mus: [MUSUI ] <- CMusUiZoomIndicator::~CMusUiZoomIndicator()" ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiZoomIndicator::SetZoomLevel( TInt aZoomLevel ) - { - MUS_LOG1( "mus: [MUSUI ] -> CMusUiZoomIndicator::SetZoomLevel( %d ) ", - aZoomLevel ); - if( aZoomLevel >= iZoomMin && aZoomLevel <= iZoomMax ) - { - iZoomLevel = aZoomLevel; - } - DisableTimer(); - UpdateZoomLayout(); - EnableTimer(); - MUS_LOG( "mus: [MUSUI ] <- CMusUiZoomIndicator::SetZoomLevel()" ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -TInt CMusUiZoomIndicator::GetZoomLevel() - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiZoomIndicator::GetZoomLevel()" ); - MUS_LOG( "mus: [MUSUI ] <- CMusUiZoomIndicator::GetZoomLevel()" ); - return iZoomLevel; - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiZoomIndicator::SetZoomMin( TInt aZoomMin ) - { - MUS_LOG1( "mus: [MUSUI ] -> CMusUiZoomIndicator::SetZoomMin( %d ) ", aZoomMin ); - if( aZoomMin >= 0 && aZoomMin < iZoomMax ) - { - iZoomMin = aZoomMin; - } - DisableTimer(); - UpdateZoomLayout(); - EnableTimer(); - MUS_LOG( "mus: [MUSUI ] <- CMusUiZoomIndicator::SetZoomMin()" ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiZoomIndicator::SetZoomMax( TInt aZoomMax ) - { - MUS_LOG1( "mus: [MUSUI ] -> CMusUiZoomIndicator::SetZoomMax( %d ) ", aZoomMax ); - if( aZoomMax >= iZoomMin ) - { - iZoomMax = aZoomMax; - } - DisableTimer(); - UpdateZoomLayout(); - EnableTimer(); - MUS_LOG( "mus: [MUSUI ] <- CMusUiZoomIndicator::SetZoomMax()" ); - } - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiZoomIndicator::SetFullRect( const TRect aRect ) - { - iFullRect = aRect; - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiZoomIndicator::SizeChanged() - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiZoomIndicator::SizeChanged()" ); - UpdateZoomLayout(); - MUS_LOG( "mus: [MUSUI ] <- CMusUiZoomIndicator::SizeChanged()" ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiZoomIndicator::Draw( const TRect& aRect ) const - { - - CWindowGc& gc = SystemGc(); - - TRect rect( 0,0, iFullRect.Width(), iFullRect.Height() ); - //TRect rect( iFullRect.Width()-20, iFullRect.iTl.iY, iFullRect.iBr.iX, iFullRect.iBr.iY ); //TRect( 40,0,380,382 ) ); - -/* - AknsUtils::RegisterControlPosition( this, TPoint( iFullRect.Width()-20, iFullRect.iTl.iY ) ); - // gc.Clear( aRect ); - MAknsSkinInstance* skin = AknsUtils::SkinInstance(); - MAknsControlContext* cc = AknsDrawUtils::ControlContext( this ); - if(!AknsDrawUtils::Background( skin, cc,this,gc,rect,KAknsDrawParamDefault )) - { -*/ - MUS_LOG( "mus: [MUSUI ] Skin not valid or not found" ); - gc.SetBrushColor( iEikonEnv->ControlColor( EColorWindowBackground, *this ) ); - gc.SetBrushStyle( CGraphicsContext::ESolidBrush ); - gc.Clear( aRect ); -// } - -} - - -// ----------------------------------------------------------------------------- -// Draw all icons and texts to given graphics context. -// ----------------------------------------------------------------------------- -// -void CMusUiZoomIndicator::DrawIcons( const TRect& /*aRect*/ ) - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiZoomIndicator::DrawIcons()" ); - MUS_LOG( "mus: [MUSUI ] <- CMusUiZoomIndicator::DrawIcons()" ); - } - - -// ----------------------------------------------------------------------------- -// Draw all icons and texts to given graphics context. -// ----------------------------------------------------------------------------- -// -void CMusUiZoomIndicator::UpdateZoomLayout() - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiZoomIndicator::UpdateZoomLayout()" ); - - TSize sz = iIconBg->MinimumSize(); - - TRect rect = Rect(); - - // TODO: Remove all magic constants! - AknLayoutUtils::LayoutImage(iIconMax, Rect(), 0, 0, 0, 0, 0, 20, 20 ); - AknLayoutUtils::LayoutImage(iIconMin, Rect(), 0, 0, 68, 0, 0, 20, 20 ); - AknLayoutUtils::LayoutImage(iIconBg, Rect(), 0, 0, 20, 0, 0, 20, 48 ); - - // 20 - 68 - iScaleStep = ( 48 << 8 ) / - ( ( iZoomMax - iZoomMin ) ); - iScaleY = ( 58 ) - - ( ( iScaleStep * iZoomLevel ) >> 8 ); - - - AknLayoutUtils::LayoutImage(iIconElevator, Rect(), 0, 0, iScaleY, 0, 0, 20, 20 ); - - DrawNow(); - - MUS_LOG( "mus: [MUSUI ] <- CMusUiZoomIndicator::UpdateZoomLayout()" ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -TInt CMusUiZoomIndicator::CountComponentControls() const - { - return 4; //iIconElevator ? 1 : 0; // return nbr of controls inside this container - //return 0; // return nbr of controls inside this container - } - - -// -------------------------------------------------------------------------- -// Called by framework to retrieve the control specified by index. -// -------------------------------------------------------------------------- -// -CCoeControl* CMusUiZoomIndicator::ComponentControl( TInt aIndex ) const - { - switch ( aIndex ) - { - - case 0: - return iIconMin; - case 1: - return iIconMax; - case 2: - return iIconBg; - case 3: - return iIconElevator; - - default: - return NULL; - } - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiZoomIndicator::ConstructImageL( CEikImage* aImage, - MAknsSkinInstance* aSkin, - const TAknsItemID& aId, - TInt aBitmapId, - TInt aMaskId ) - - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiZoomIndicator::ConstructIconL()" ); - - CFbsBitmap* bitmap = NULL; - CFbsBitmap* mask = NULL; - - TParse parse; - parse.Set( KMyMbmFileName, &KDC_APP_RESOURCE_DIR, NULL ); - - AknsUtils::CreateIconL(aSkin, - aId, - bitmap, - mask, - parse.FullName(), - aBitmapId, - aMaskId); - - aImage->SetPicture(bitmap, mask); // Owership transferred to CEikImage - - - - MUS_LOG( "mus: [MUSUI ] <- CMusUiZoomIndicator::ConstructIconL()" ); - - } - - - -// ----------------------------------------------------------------------------- -// Callback for disable zoom indicator. -// ----------------------------------------------------------------------------- -// -TInt CMusUiZoomIndicator::DisableZoomIndicator( TAny* aThis ) - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiZoomIndicator::DisableZoomIndicator()" ); - CMusUiZoomIndicator* indicator = - static_cast< CMusUiZoomIndicator* > ( aThis ); - indicator->DisableTimer(); - if( indicator->iObserver ) - { - indicator->iObserver->DisableZoomIndicator(); - } - MUS_LOG( "mus: [MUSUI ] <- CMusUiZoomIndicator::DisableZoomIndicator()" ); - return KErrNone; - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiZoomIndicator::DisableTimer() - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiZoomIndicator::DisableTimer()" ); - if ( iDisableZoomTimer ) - { - if ( iDisableZoomTimer->IsActive() ) - { - iDisableZoomTimer->Cancel(); - } - } - MUS_LOG( "mus: [MUSUI ] <- CMusUiZoomIndicator::DisableTimer()" ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusUiZoomIndicator::EnableTimer() - { - MUS_LOG( "mus: [MUSUI ] -> CMusUiZoomIndicator::EnableTimer()" ); - - if ( !iDisableZoomTimer ) - { - TRAP_IGNORE( iDisableZoomTimer = CPeriodic::NewL( CActive::EPriorityStandard ) ); - } - else - { - DisableTimer(); - } - - // Start disable timer; callback triggers exit. - iDisableZoomTimer->Start( KMusUiZoomDisableTime, - KMusUiZoomDisableTime, - TCallBack( DisableZoomIndicator, this ) ); - MUS_LOG( "mus: [MUSUI ] <- CMusUiZoomIndicator::EnableTimer()" ); - } - - -// End of File - - - diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshui/tsrc/ut_ui/BWINS/ut_uiU.DEF --- a/mmsharing/mmshui/tsrc/ut_ui/BWINS/ut_uiU.DEF Thu Aug 19 09:51:39 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,2 +0,0 @@ -EXPORTS - ?CreateTestSuiteL@@YAPAVMEUnitTest@@XZ @ 1 NONAME ; class MEUnitTest * __cdecl CreateTestSuiteL(void) \ No newline at end of file diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshui/tsrc/ut_ui/group/bld.inf --- a/mmsharing/mmshui/tsrc/ut_ui/group/bld.inf Thu Aug 19 09:51:39 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,20 +0,0 @@ -/* -* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - initial contribution. -* -* Contributors: -* -* Description: -* -*/ -PRJ_TESTMMPFILES - -//../../../../internal/stubs/mceclientstub/group/mceclientstub.mmp -ut_ui.mmp diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshui/tsrc/ut_ui/group/ut_ui.mmp --- a/mmsharing/mmshui/tsrc/ut_ui/group/ut_ui.mmp Thu Aug 19 09:51:39 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,230 +0,0 @@ -/* -* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - initial contribution. -* -* Contributors: -* -* Description: -* -*/ - -// To get the APP_LAYER_SYSTEMINCLUDE-definition -#include -#include - -TARGET ut_ui.dll -TARGETTYPE dll -TARGETPATH /DigiaEUnit/Tests -UID 0x1000af5a 0x01700000 - -CAPABILITY EUNIT_CAPS -VENDORID VID_DEFAULT - -MACRO UNIT_TESTING - - -SOURCEPATH ../../../../../tsrc/multimediasharingsettingsstub/src -SOURCE mussettings.cpp - - -// Test suite classes -SOURCEPATH ../src -SOURCE ut_musuidllmain.cpp - -// Defines, stubs and other test helpers -SOURCEPATH ../src -//SOURCE musengstubs.cpp - -SOURCEPATH ../../../../../tsrc/musenginestub/src -SOURCE musengsession.cpp -SOURCE musengmcesession.cpp -SOURCE musengmceoutsession.cpp -SOURCE musenglivesession.cpp -SOURCE musengreceivesession.cpp -SOURCE musengsessiondurationtimer.cpp -SOURCE musengclipsession.cpp - -//SOURCE musengmceutils.cpp - -//SOURCEPATH ../../../../../tsrc/rfsstub/src -//SOURCE f32file.cpp - -SOURCEPATH ../../../../../tsrc/fbsbitmapstub/src -SOURCE fbs.cpp - -SOURCEPATH ../../../../../tsrc/imagedecoderstub/src -SOURCE imageconversion.cpp - -//SOURCEPATH ../../../../../tsrc/centralrepositorystub/src -//SOURCE centralrepositorystub.cpp - -SOURCEPATH ../../../../../tsrc/stringloaderstub/src -SOURCE stringloader.cpp - -SOURCEPATH ../../../../../tsrc/propertystub/src -SOURCE e32property.cpp - -SOURCEPATH ../../../../../tsrc/aknstub/src -SOURCE aknappui.cpp - - -//SOURCE sipstub.cpp -//SOURCE sipprofileregistrybasestub.cpp -//SOURCE sipprofileregistrystub.cpp -//SOURCE sipprofilestub.cpp - -//SOURCEPATH ../../../../../tsrc/telephonyaudioroutingstub/src -//SOURCE telephonyaudioroutingstub.cpp - -//SOURCEPATH ../../../../../tsrc/centralrepositorystub/src -//SOURCE centralrepositorystub.cpp - -//SOURCEPATH ../../../../../tsrc/drmstub/src -//SOURCE drmcommonstub.cpp - -// Test classes -SOURCEPATH ../src -SOURCE ut_musuiclipsharingcontroller.cpp -SOURCE ut_musuieventcontroller.cpp -SOURCE ut_musuilivesharingcontroller.cpp -SOURCE ut_musuipropertywatch.cpp -SOURCE ut_musuireceivecontroller.cpp -SOURCE ut_musuistartcontroller.cpp -SOURCE musuipropertyobserveradapter.cpp -SOURCE musuicallbackobserveradapter.cpp -SOURCE musuilivesharingobserveradapter.cpp -SOURCE musuieventobserveradapter.cpp -SOURCE musuiclipsharingobserveradapter.cpp -SOURCE musuireceiveobserveradapter.cpp - -// Tested classes -SOURCEPATH ../../../src -//SOURCE musuiapp.cpp -//SOURCE musuidocument.cpp -//SOURCE musuiappui.cpp -//SOURCE musuigeneralview.cpp -//SOURCE musuisendview.cpp -//SOURCE musuinullview.cpp -//SOURCE musuilivesharingview.cpp -//SOURCE musuilivesharingviewcontainer.cpp -//SOURCE musuireceiveview.cpp -//SOURCE musuiclipsharingview.cpp -//SOURCE musuireceivecontainer.cpp -//SOURCE musuiclipsharingviewcontainer.cpp - -//SOURCE musuistatuspanehandler.cpp -//SOURCE musuinavimediadecorator.cpp -//SOURCE musuiinvitationquery.cpp -//SOURCE musuizoomindicator.cpp - -SOURCE musuistartcontroller.cpp -SOURCE musuipropertywatch.cpp - -SOURCE musuieventcontroller.cpp -SOURCE musuilivesharingcontroller.cpp -SOURCE musuireceivecontroller.cpp -SOURCE musuiclipsharingcontroller.cpp -SOURCE musuibitmapdecoder.cpp -//SOURCE musuiactivitymanger.cpp - -SOURCE musuicallbackservice.cpp - -// Includes - - -USERINCLUDE ../inc -USERINCLUDE ../../../inc - -// Must be before common -USERINCLUDE ../../../../../tsrc/multimediasharingsettingsstub/inc - -USERINCLUDE ../../../../mmshshared/inc - -// to replace musengine with a stub -USERINCLUDE ../../../../../tsrc/musenginestub/inc //TODO: added 4.11. -USERINCLUDE ../../../../mmshengine/inc //TODO: commented 4.11. -USERINCLUDE ../../../../inc -USERINCLUDE ../../../../../inc - -// to replace musengine with a stub -SYSTEMINCLUDE ../../../../../tsrc/musenginestub/inc -//SYSTEMINCLUDE ../../../../../tsrc/rfsstub/inc -SYSTEMINCLUDE ../../../../../tsrc/fbsbitmapstub/inc -SYSTEMINCLUDE ../../../../../tsrc/imagedecoderstub/inc -//SYSTEMINCLUDE ../../../../../tsrc/centralrepositorystub/inc -SYSTEMINCLUDE ../../../../../tsrc/stringloaderstub/inc - -//SYSTEMINCLUDE ../../../../../tsrc/contactdatabasestub/inc -SYSTEMINCLUDE ../../../../../tsrc/propertystub/inc - -SYSTEMINCLUDE ../../../../../tsrc/aknstub/inc - - - - - -// ui internal stub - - -// to replace MCE API with a stub: -//SYSTEMINCLUDE ../../../../../tsrc/mceclientstub/inc -// to replace telephony audio routing with a stub: -//SYSTEMINCLUDE ../../../../../tsrc/telephonyaudioroutingstub/src -// to replace DRMCommon with a tub -//SYSTEMINCLUDE ../../../../../tsrc/drmstub/inc - -APP_LAYER_SYSTEMINCLUDE - - -LIBRARY euser.lib -LIBRARY eunit.lib - -LIBRARY musenginestub.lib -LIBRARY pbkeng.lib // PhoneBook Engine API -LIBRARY phoneclient.lib // Phone client -LIBRARY fbscli.lib // CFbsBitmap -LIBRARY centralrepository.lib // Central repository -LIBRARY cntmodel.lib // Contact Model - - -LIBRARY apgrfx.lib // AppArc server client APIs -LIBRARY apparc.lib // Application framework API -LIBRARY bafl.lib // Resource readers -LIBRARY cone.lib // Cone framework API -LIBRARY efsrv.lib // File Server API -LIBRARY eikcoctl.lib // Control framework API -LIBRARY eikcore.lib // Eikon core controls API -LIBRARY eikctl.lib // Eikon controls -LIBRARY eikdlg.lib // Eikon Dialog API -LIBRARY ws32.lib // Window server client API - -// S60 libraries: -LIBRARY aknnotify.lib // CAknGlobalNote -LIBRARY aknskins.lib // Avkon Skins Utils -LIBRARY avkon.lib // Avkon Utils -LIBRARY commonengine.lib // StringLoader -LIBRARY featmgr.lib // S60 Feature manager API -LIBRARY mgfetch.lib // Media Gallery Fetch Dialog -LIBRARY MGXMediaFileApi.lib // Media Gallery File manager, for updating -LIBRARY pbkview.lib // PhoneBook view API -LIBRARY platformenv.lib // PathInfo -LIBRARY aknicon.lib // AknIconUtils -LIBRARY aknlayout.lib // CdlEngine -LIBRARY gdi.lib // CFont -LIBRARY imageconversion.lib // CIImageDecoder -LIBRARY egul.lib // CGulIcon - - -DEBUGLIBRARY flogger.lib - -//EXPORTUNFROZEN - - -// End of file diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshui/tsrc/ut_ui/inc/musengtestdefs.h --- a/mmsharing/mmshui/tsrc/ut_ui/inc/musengtestdefs.h Thu Aug 19 09:51:39 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,96 +0,0 @@ -/* -* 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: -* -*/ - - - -#ifndef MUSENGTESTDEFS_H -#define MUSENGTESTDEFS_H - -#include -#include - -// Next row is to disable warning emerging from EUnit code. -// Placement is due to a fact that most test case files -// include this file. Directive can be removed when -// EUnit is fixed. -#pragma warn_illtokenpasting off - -// Test values - -_LIT( KTestRecipientSipUri, "sip:TestRecipient@host.domain" ); -_LIT( KTestRecipientSipUriNoSipPrefix, "TestRecipient@host.domain" ); -_LIT( KTestRecipientTelUri, "tel:+3581111111"); -_LIT( KTestRecipientTelUriNoTelPrefix, "+3581111111" ); - -_LIT( KTestRecipientRandomText, "sfjsfjklsjdkfsj" ); -_LIT( KTestRecipientSipUriWithSpace, "s:re cipi ent@" ); -_LIT( KTestRecipientTelUriWithAtSign, "tel:+3581111111@host.domain" ); //invalid - -_LIT8( KTestRecipientSipUri8, "sip:TestRecipient@host.domain" ); -_LIT8( KTestRecipientTelUri8, "tel:+3581111111"); -_LIT8( KTestRecipientRandomText8, "sfjsfjklsjdkfsj" ); - -_LIT8( KTestOriginator, "Frank Swis" ); - -_LIT( KTestAudioFileName, "audiofile" ); -_LIT( KTestVideoFileName, "videofile" ); -_LIT( KTestAnotherVideoFileName, "another" ); - -const TInt KSipStatusCodeNoCodeSet = 0; -const TInt KSipStatusCode200OK = 200; -const TInt KSipStatusCode400BadRequest = 400; -const TInt KSipStatusCode401Unauthorized = 401; -const TInt KSipStatusCode402PaymentRequired = 402; -const TInt KSipStatusCode404RecipientNotFound = 404; -const TInt KSipStatusCode407ProxyAuthenticationRequired = 407; -const TInt KSipStatusCode408ConnectionTimeOut = 408; -const TInt KSipStatusCode415UnsupportedMediaType = 415; -const TInt KSipStatusCode487RequestCancelled = 487; -const TInt KSipStatusCodeUnknown = 10000; -const TInt KTelephonyVolumeMinValue = 1; -const TInt KTelephonyVolumeDefaultValue = 4; -const TInt KTelephonyVolumeMaxValue = 1; - -// Values originally introduced in telephonyinternalcrkeys.h - -const TUid KCRUidCallHandling = {0x101F8784}; -const TUint32 KTelephonyIncallEarVolume = 0x00000001; -const TUint32 KTelephonyIncallLoudspeakerVolume = 0x00000002; - - -// Helper macros - -#define MUS_TEST_FORWARD_ALLOC_FAILURE( error )\ - if ( error == KErrNoMemory )\ - {\ - User::Leave( error );\ - } - -#define ESTABLISH_OUT_SESSION( outSession )\ - outSession->InviteL( KTestRecipientSipUri );\ - outSession->iSession->iState = CMceSession::EEstablished;\ - if ( outSession->iSession->iManager &&\ - outSession->iSession->iManager->iSessionObserver )\ - {\ - outSession->iSession->iManager->iSessionObserver->SessionStateChanged(\ - *(outSession->iSession),\ - outSession->iSession->iManager->iContainer );\ - } - - -#endif // MUSENGTESTDEFS_H - diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshui/tsrc/ut_ui/inc/musuicallbackobserveradapter.h --- a/mmsharing/mmshui/tsrc/ut_ui/inc/musuicallbackobserveradapter.h Thu Aug 19 09:51:39 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,81 +0,0 @@ -/* -* Copyright (c) 2006 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: -* -*/ - - - -#ifndef UT_MUSUIOBSERVERSSTUB_H -#define UT_MUSUIOBSERVERSSTUB_H - - -#include "musuiclipsharingobserver.h" -#include "musuipropertyobserver.h" -#include "musuicallbackobserver.h" - - -#include -#include - - -/** -* -* @lib musengine.lib -* @since S60 v3.2 -*/ -class CMusUiCallbackObserverAdapter : public CBase, - public MMusUiCallbackObserver - { - - - - public: - - CMusUiCallbackObserverAdapter(); - - ~CMusUiCallbackObserverAdapter(); - - - - - //virtual void HandleError( const TInt aReason ) = 0; - - public: // MMusUiCallbackObserver - - void HandleAsyncEventL( TMusUiAsyncEvent aEventId ); - - - public: // data - - enum TMusUiCallbackObserverFunction - { - ENone, // default value - EHandleAsyncEventL - }; - - - - TMusUiCallbackObserverFunction iCalledObserver; - TInt iErrorCode; - - TMusUiAsyncEvent iHandleAsyncEventId; - - }; - - - - -#endif // UT_MUSSTUBS_H - diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshui/tsrc/ut_ui/inc/musuiclipsharingobserveradapter.h --- a/mmsharing/mmshui/tsrc/ut_ui/inc/musuiclipsharingobserveradapter.h Thu Aug 19 09:51:39 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,111 +0,0 @@ -/* -* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - initial contribution. -* -* Contributors: -* -* Description: -* -*/ - -#ifndef __MUSUICLIPSHARINGOBSERVER_H__ -#define __MUSUICLIPSHARINGOBSERVER_H__ - -#include "musuiclipsharingobserver.h" - -#include - - - -class CMusUiClipSharingObserverAdapter : public CBase, - public MMusUiClipSharingObserver - { - - - - public: - - CMusUiClipSharingObserverAdapter(); - - ~CMusUiClipSharingObserverAdapter(); - - - public: - - // MMusUiClipSharingObserver - void RunFetchDialogL(); - - TBool SelectAddressDialogL( CDesCArray* aAddressArray, - TDes& aSelectedAddress ); - - void ManualAddressEntryL( const TDesC& aAddress ); - - void ShowWaitDialogL( const TDesC& aPrompt ); - - void DismissWaitDialogL( ); - - void DismissWaitDialogL( const TDesC& aReason ); - - void ShowErrorDialogL( const TDesC& aMessage ); - - void ShowInformationDialogL( TInt aResourceId ); - - void ShowClipSharingPanesL(); - - void ChangeOrientationL( - CAknAppUiBase::TAppUiOrientation aOrientation ); - - void ShowNaviPaneIconL( TMusUiNaviMediaDecorator aIcon, - TBool aVisible ); - - void UpdateSessionTime( const TDesC& aSessionTime ); - - void SetVolume( TBool aUp ); - - void HandleError( TInt aError ); - - void HandleExitL(); - - void EndOfClip(); - - - enum TMusUiClipSharingObserverFunction - { - ENone, // default value - ERunFetchDialogL, - ESelectAddressDialogL, - EManualAddressEntryL, - EShowWaitDialogL, - EDismissWaitDialogL, - EDismissWaitDialogL2, - EShowErrorDialogL, - EShowInformationDialogL, - EShowClipSharingPanesL, - EChangeOrientationL, - EShowNaviPaneIconL, - EUpdateSessionTime, - ESetVolume, - EHandleError, - EHandleExitL, - EEndOfClip - - }; - - - TMusUiClipSharingObserverFunction iCalledObserver; - TInt iErrorCode; - TInt iError; - TInt iShowErrorDialogErrorCode ; - - HBufC* iAddress; - - }; - -#endif \ No newline at end of file diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshui/tsrc/ut_ui/inc/musuieventobserveradapter.h --- a/mmsharing/mmshui/tsrc/ut_ui/inc/musuieventobserveradapter.h Thu Aug 19 09:51:39 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,112 +0,0 @@ -/* -* Copyright (c) 2006 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: -* -*/ - - - -#ifndef UT_MUSUIOBSERVERSSTUB_H -#define UT_MUSUIOBSERVERSSTUB_H - - -#include "musuieventobserver.h" - - -#include -#include - -/** -* -* @lib musengine.lib -* @since S60 v3.2 -*/ -class CMusUiEventObserverAdapter : public CBase, - public MMusUiEventObserver - { - - - - public: - - CMusUiEventObserverAdapter(); - - ~CMusUiEventObserverAdapter(); - - - public: // MMusUiEventObserver - - void ActivateLocalMusViewL( TUid aViewId ); - void ActivateLocalMusViewL( TUid aViewId, - TUid aCustomMessageId, - const TDesC8& aCustomMessage ); - TBool ShowConfirmationQueryDialogL( const TDesC& aPrompt ); - void ShowInformationDialogL( const TDesC& aPrompt ); - void ActivateContactViewL( TContactItemId aId ); - void HandleError( const TInt aReason ); // All ready defined - void HandleExitL(); - - - public: // Helper - - /** - * ETrue if all boolean member variables are set to EFalse and all the - * pointers are NULL - */ - TBool IsReseted(); - - /** - * Resets all the boolean member variable values to EFalse and deletes - * and nullifies all the pointer variables. - */ - void Reset(); - - public: // Data - - enum TMusUiEventObserverFunction - { - ENone, // default value - - // MMusUiEventObserver - EActivateLocalMusViewL, - EActivateLocalMusViewL2, - EShowConfirmationQueryDialogL, - EShowInformationDialogL, - EActivateContactViewL, - EHandleError, - EHandleExitL, - - }; - - - TInt iHandleErrorReason; - TContactItemId iActivatedContactId; - - TMusUiEventObserverFunction iCalledObserver; - - TBool iBoolReturn; - TInt iErrorCode; - - TUid iViewId; - - HBufC* iPrompt; - - - }; - - - - -#endif // UT_MUSSTUBS_H - diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshui/tsrc/ut_ui/inc/musuilivesharingobserveradapter.h --- a/mmsharing/mmshui/tsrc/ut_ui/inc/musuilivesharingobserveradapter.h Thu Aug 19 09:51:39 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,115 +0,0 @@ -/* -* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - initial contribution. -* -* Contributors: -* -* Description: -* -*/ - -#ifndef MUSUILIVESHARINGOBSERVERADAPTER_H -#define MUSUILIVESHARINGOBSERVERADAPTER_H - -#include "musuidefinitions.h" -#include "musuilivesharingobserver.h" - -#include -#include -#include - -class CMusUiLiveSharingObserverAdapter : public MMusUiLiveSharingObserver - { - - public: - - CMusUiLiveSharingObserverAdapter(); - ~CMusUiLiveSharingObserverAdapter(); - - - TBool SelectAddressDialogL( CDesCArray* aAddressArray, - TDes& aSelectedAddress ); - void ManualAddressEntryL( const TDesC& aAddress ); - - void ShowWaitDialogL( const TDesC& aPrompt ); - - void DismissWaitDialogL( ); - - void ShowErrorDialogL( const TDesC& aMessage ); - - void ShowInformationDialogL( TInt aResourceId ); - - void ShowLiveSharingPanesL(); - - void ChangeOrientationL( - CAknAppUiBase::TAppUiOrientation aOrientation ); - - void ShowNaviPaneIconL( - TMusUiNaviMediaDecorator aIcon, - TBool aVisible ); - - void UpdateSessionTime( const TDesC& aSessionTime ); - - void SetVolume( TBool aUp ); - - void SetZoom( TBool aIn ); - - void HandleError( TInt aError ); - - void HandleExitL(); - - void CancelInvitationTimer(); - - - enum TMusUiLiveSharingObserverFuncion - { - ENone, // default value - ESelectAddressDialogL, - EManualAddressEntryL, - EShowWaitDialogL, - EDismissWaitDialogL, - EShowErrorDialogL, - EShowInformationDialogL, - EShowLiveSharingPanesL, - EChangeOrientationL, - EShowNaviPaneIconL, - EUpdateSessionTime, - ESetVolume, - ESetZoom, - EHandleError, - EHandleExitL, - ECancelInvitationTimer - }; - - - - TMusUiLiveSharingObserverFuncion iCalledObserver; - - // Return values - TBool iBoolReturn; - - // Error code - TInt iErrorCode; - - TMusUiNaviMediaDecorator iIcon; - - CAknAppUiBase::TAppUiOrientation iOrientation; - - HBufC* iAddress; - - TInt iError; - TInt iShowErrorDialogErrorCode; - - - }; - -#endif - -// end of file diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshui/tsrc/ut_ui/inc/musuipropertyobserveradapter.h --- a/mmsharing/mmshui/tsrc/ut_ui/inc/musuipropertyobserveradapter.h Thu Aug 19 09:51:39 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,53 +0,0 @@ -/* -* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - initial contribution. -* -* Contributors: -* -* Description: -* -*/ - -#ifndef __MUSUIPROPERTYOBSERVERADAPTER_H__ -#define __MUSUIPROPERTYOBSERVERADAPTER_H__ - -#include "musuipropertyobserver.h" - -class CMusUiPropertyObserverAdapter : public CBase, - public MMusUiPropertyObserver - - { - - public: // MMusUiPropertyObserver - - CMusUiPropertyObserverAdapter(); - ~CMusUiPropertyObserverAdapter(); - - void ResourcePropertyChanged( const TUint aKey, const TInt aValue ); - void SessionPropertyChanged( const TUint aKey, const TInt aValue ); - void HandleError( const TInt aReason ); - - - enum TMusUiPropertyObserverFunction - { - ENone, // default value - EResourcePropertyChanged, - ESessionPropertyChanged, - EHandleError - }; - - - TMusUiPropertyObserverFunction iCalledObserver; - TInt iErrorCode; - - - }; - -#endif \ No newline at end of file diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshui/tsrc/ut_ui/inc/musuireceiveobserveradapter.h --- a/mmsharing/mmshui/tsrc/ut_ui/inc/musuireceiveobserveradapter.h Thu Aug 19 09:51:39 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,113 +0,0 @@ -/* -* 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: Mus Applications Event Observer Interface -* -*/ - - - -#ifndef __MUSUIRECEIVEOBSERVERADAPTER_H__ -#define __MUSUIRECEIVEOBSERVERADAPTER_H__ - -#include "musuidefinitions.h" -#include "musuireceiveobserver.h" - -#include -#include -//#include - -class CMusUiReceiveObserverAdapter : public MMusUiReceiveObserver - { - - public: - - CMusUiReceiveObserverAdapter(); - ~CMusUiReceiveObserverAdapter(); - - void ShowErrorDialog( const TDesC& aPrompt ); - - void ShowErrorDialogL( const TDesC& aMessage ); - - void ShowInvitationQueryL( const TDesC& aQuery ); - - void DismissInvitationQuery( TBool aDelete ); - - void ShowWaitDialogL( const TDesC& aPrompt ); - - void DismissWaitDialogL( ); - - void ShowInformationDialogL( TInt aResourceId ); - - void ShowNaviPaneIconL( TMusUiNaviMediaDecorator aIcon, - TBool aVisible ); - - void ShowStatusPaneL( TBool aVisible ); - - void ChangeOrientationL( - CAknAppUiBase::TAppUiOrientation aOrientation ); - - void UpdateSessionTime( const TDesC& aSessionTime ); - - void SetVolume( TBool aUp ); - - void HandleError( TInt aError ); - - void HandleExitL(); - - - enum TMusUiReceiveObserverFuncion - { - ENone, // default value - EShowErrorDialog, - EShowErrorDialogL, - EShowInvitationQueryL, - EDismissInvitationQuery, - EShowWaitDialogL, - EDismissWaitDialogL, - EShowInformationDialogL, - EShowNaviPaneIconL, - EShowStatusPaneL, - EChangeOrientationL, - EUpdateSessionTime, - ESetVolume, - EHandleError, - EHandleExitL - }; - - - - TMusUiReceiveObserverFuncion iCalledObserver; - - // Return values - TBool iBoolReturn; - - // Error code - TInt iErrorCode; - - TMusUiNaviMediaDecorator iIcon; - - CAknAppUiBase::TAppUiOrientation iOrientation; - - HBufC* iAddress; - - TInt iError; - TInt iShowErrorDialogErrorCode; - TBool iVisible; - TInt iResourceId; - - }; - -#endif - -// end of file diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshui/tsrc/ut_ui/inc/musuitestdefines.h --- a/mmsharing/mmshui/tsrc/ut_ui/inc/musuitestdefines.h Thu Aug 19 09:51:39 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,36 +0,0 @@ -/* -* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - initial contribution. -* -* Contributors: -* -* Description: -* -*/ -#ifndef __MUSUITESTDEFINES_H__ -#define __MUSUITESTDEFINES_H__ - -#include - - -// MusUiPropertyWatch -const TInt KMusUiTestPropertyReadInteger = 0xCCCC; - -const TInt KMusUiTestKey = 1; - -_LIT(KMusUiTestPropertyReadDesc, "Test property value"); - - - - - - - -#endif \ No newline at end of file diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshui/tsrc/ut_ui/inc/ut_musuiclipsharingcontroller.h --- a/mmsharing/mmshui/tsrc/ut_ui/inc/ut_musuiclipsharingcontroller.h Thu Aug 19 09:51:39 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,120 +0,0 @@ -/* -* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - initial contribution. -* -* Contributors: -* -* Description: -* -*/ - - -#ifndef __UT_MUSUICLIPSHARINGCONTROLLER_H__ -#define __UT_MUSUICLIPSHARINGCONTROLLER_H__ - - -// EXTERNAL INCLUDES -#include -#include - -// FORWARD DECLARATIONS -class CMusUiClipSharingObserverAdapter; -class CMusUiClipSharingController; -class CMusUiEventObserverAdapter; -class CMusUiEventController; - -// CLASS DEFINITION -/** - * Tester class for CMusEngSession. - * Since CMusEngSession is abstract, it is tested via object of its' - * concrete descendant class CMusEngLiveSession. Only concrete - * implementations are tested in this tester class. - * - */ -NONSHARABLE_CLASS( UT_CMusUiClipSharingController ): public CEUnitTestSuiteClass - { - public: // Constructors and destructors - - /** - * Two phase construction - */ - static UT_CMusUiClipSharingController* NewL(); - static UT_CMusUiClipSharingController* NewLC(); - - /** - * Destructor - */ - ~UT_CMusUiClipSharingController(); - - private: // Constructors and destructors - - UT_CMusUiClipSharingController(); - void ConstructL(); - - private: // Test case setup and teardown - - void SetupL(); - - void Teardown(); - - private: // Test methods - - - void UT_CMusUiClipSharingController_StartInvitationLL(); - void UT_CMusUiClipSharingController_AddressFoundLL(); - void UT_CMusUiClipSharingController_InviteLL(); - void UT_CMusUiClipSharingController_InviteL2L(); - void UT_CMusUiClipSharingController_SetRectL(); - void UT_CMusUiClipSharingController_CancelInvitationLL(); - void UT_CMusUiClipSharingController_HandleCommandLL(); - void UT_CMusUiClipSharingController_PlayingL(); - void UT_CMusUiClipSharingController_SetFileNameLL(); - void UT_CMusUiClipSharingController_ClipEndedL(); - void UT_CMusUiClipSharingController_ZoomInLL(); - void UT_CMusUiClipSharingController_ZoomOutLL(); - void UT_CMusUiClipSharingController_SplitLL(); - void UT_CMusUiClipSharingController_ShowErrorDialogL(); - void UT_CMusUiClipSharingController_DismissWaitDialogL(); - void UT_CMusUiClipSharingController_EndOfClipL(); - void UT_CMusUiClipSharingController_SessionRejectedL(); - void UT_CMusUiClipSharingController_SessionBadRequestL(); - void UT_CMusUiClipSharingController_SessionUnauthorizedL(); - void UT_CMusUiClipSharingController_SessionPaymentRequiredL(); - void UT_CMusUiClipSharingController_SessionRecipientNotFoundL(); - void UT_CMusUiClipSharingController_SessionProxyAuthenticationRequiredL(); - void UT_CMusUiClipSharingController_SessionRequestTimeOutL(); - void UT_CMusUiClipSharingController_SessionUnsupportedMediaTypeL(); - void UT_CMusUiClipSharingController_SessionRequestCancelledL(); - void UT_CMusUiClipSharingController_SessionEstablishedL(); - void UT_CMusUiClipSharingController_SessionTerminatedL(); - void UT_CMusUiClipSharingController_SessionConnectionLostL(); - void UT_CMusUiClipSharingController_SessionFailedL(); - void UT_CMusUiClipSharingController_StreamIdleL(); - void UT_CMusUiClipSharingController_StreamStreamingL(); - void UT_CMusUiClipSharingController_SessionTimeChangedL(); - void UT_CMusUiClipSharingController_InactivityTimeoutL(); - - - private: // Data - - CMusUiClipSharingObserverAdapter* iClipSharingObserverAdapter; - CMusUiEventObserverAdapter* iEventObserver; - - CMusUiClipSharingController* iClipSharingController; - CMusUiEventController* iEventController; - - - EUNIT_DECLARE_TEST_TABLE; - - }; - -#endif // __UT_MUSENGSESSION_H__ - -// End of file diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshui/tsrc/ut_ui/inc/ut_musuieventcontroller.h --- a/mmsharing/mmshui/tsrc/ut_ui/inc/ut_musuieventcontroller.h Thu Aug 19 09:51:39 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,163 +0,0 @@ -/* -* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - initial contribution. -* -* Contributors: -* -* Description: -* -*/ - - -#ifndef __UT_MUSUIEVENTCONTROLLER_H__ -#define __UT_MUSUIEVENTCONTROLLER_H__ - - -// EXTERNAL INCLUDES -#include -#include - - -// FORWARD DECLARATIONS -//class CMusEngLiveSession; -//class CMusEngObserverStub; -class CMusUiEventController; -class CMusUiLiveSharingController; -class CMusUiEventObserverAdapter; -class CMusUiLiveSharingObserverAdapter; - -// CLASS DEFINITION -/** - * Tester class for CMusEngSession. - * Since CMusEngSession is abstract, it is tested via object of its' - * concrete descendant class CMusEngLiveSession. Only concrete - * implementations are tested in this tester class. - * - */ -NONSHARABLE_CLASS( UT_CMusUiEventController ): public CEUnitTestSuiteClass - { - public: // Constructors and destructors - - /** - * Two phase construction - */ - static UT_CMusUiEventController* NewL(); - static UT_CMusUiEventController* NewLC(); - - /** - * Destructor - */ - ~UT_CMusUiEventController(); - - private: // Constructors and destructors - - UT_CMusUiEventController(); - void ConstructL(); - - private: // Test case setup and teardown - - void SetupL(); - - void Teardown(); - - private: // Test methods - - - public: // From MMusUiPropertyObserver - - void UT_CMusUiEventController_ResourcePropertyChangedL(); - - void UT_CMusUiEventController_SessionPropertyChangedL(); - - void UT_CMusUiEventController_SessionPropertyChanged2L(); - - void UT_CMusUiEventController_HandleErrorL(); - - - public: // From MMusUiBitmapDecoderObserver - - void UT_CMusUiEventController_UpdateBitmapL(); - - - public: // New functions - - void UT_CMusUiEventController_SetEventObserverL(); - - void UT_CMusUiEventController_HandleForegroundEventLL(); - - void UT_CMusUiEventController_SetCameraStatusL(); - - void UT_CMusUiEventController_SetKeypadStatusL(); - - void UT_CMusUiEventController_SetVideoPlayerStatusL(); - - void UT_CMusUiEventController_SetCameraAvailabilityInProgressL(); - - void UT_CMusUiEventController_CameraAvailableL(); - - void UT_CMusUiEventController_KeypadAvailableL(); - - void UT_CMusUiEventController_VideoPlayerAvailableL(); - - void UT_CMusUiEventController_CameraAvailibilityInProgressL(); - - void UT_CMusUiEventController_MusRemoteSipAddressValueL(); - - void UT_CMusUiEventController_MusProposalAddressValueL(); - - void UT_CMusUiEventController_MusContactNameL(); - - void UT_CMusUiEventController_MusContactBitmapL(); - - void UT_CMusUiEventController_MusVideoCodecValueL(); - - void UT_CMusUiEventController_MusTelNumberValueL(); - - void UT_CMusUiEventController_SipProfileIdL(); - - void UT_CMusUiEventController_SipRegistrationPendingL(); - - void UT_CMusUiEventController_SessionTimeFormattedL(); - - void UT_CMusUiEventController_SaveContactL(); - - void UT_CMusUiEventController_HandleExitLL(); - - void UT_CMusUiEventController_InspectKeypadLL(); - - void UT_CMusUiEventController_UpdateContactLL(); - - void UT_CMusUiEventController_UpdateContactNameL(); - - void UT_CMusUiEventController_UpdateContactPictureLL(); - - void UT_CMusUiEventController_HandleChangedStatusLL(); - - - private: // Data - - - CMusUiLiveSharingObserverAdapter* iLiveSharingObserverAdapter; - CMusUiEventObserverAdapter* iEventObserver; - - CMusUiLiveSharingController* iLiveSharingController; - CMusUiEventController* iEventController; - - - HBufC* _iReturnValue; - HBufC* iVideoFolder; - - EUNIT_DECLARE_TEST_TABLE; - - }; - -#endif // __UT_MUSENGSESSION_H__ - -// End of file diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshui/tsrc/ut_ui/inc/ut_musuilivesharingcontroller.h --- a/mmsharing/mmshui/tsrc/ut_ui/inc/ut_musuilivesharingcontroller.h Thu Aug 19 09:51:39 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,138 +0,0 @@ -/* -* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - initial contribution. -* -* Contributors: -* -* Description: -* -*/ - - -#ifndef __UT_MUSUILIVESHARINGCONTROLLER_H__ -#define __UT_MUSUILIVESHARINGCONTROLLER_H__ - - -// EXTERNAL INCLUDES -#include -#include - -// FORWARD DECLARATIONS -class CMusUiLiveSharingObserverAdapter; -class CMusUiLiveSharingController; -class CMusUiEventObserverAdapter; -class CMusUiEventController; - - -// CLASS DEFINITION -/** - * Tester class for CMusEngSession. - * Since CMusEngSession is abstract, it is tested via object of its' - * concrete descendant class CMusEngLiveSession. Only concrete - * implementations are tested in this tester class. - * - */ -NONSHARABLE_CLASS( UT_CMusUiLiveSharingController ): public CEUnitTestSuiteClass - { - public: // Constructors and destructors - - /** - * Two phase construction - */ - static UT_CMusUiLiveSharingController* NewL(); - static UT_CMusUiLiveSharingController* NewLC(); - - /** - * Destructor - */ - ~UT_CMusUiLiveSharingController(); - - private: // Constructors and destructors - - UT_CMusUiLiveSharingController(); - void ConstructL(); - - private: // Test case setup and teardown - - void SetupL(); - - void Teardown(); - - private: // Test methods - - //public: // new functions: - - void UT_CMusUiLiveSharingController_StartInvitationLL(); - void UT_CMusUiLiveSharingController_AddressFoundLL(); - void UT_CMusUiLiveSharingController_InviteLL(); - void UT_CMusUiLiveSharingController_InviteL2L(); - void UT_CMusUiLiveSharingController_SetRectL(); - void UT_CMusUiLiveSharingController_CancelInvitationLL(); - void UT_CMusUiLiveSharingController_HandleCommandLL(); - void UT_CMusUiLiveSharingController_PlayingL(); - void UT_CMusUiLiveSharingController_CurrentZoomLL(); - void UT_CMusUiLiveSharingController_MinZoomLL(); - void UT_CMusUiLiveSharingController_MaxZoomLL(); - - //private: // new functions: - - void UT_CMusUiLiveSharingController_CenteredRectL(); - void UT_CMusUiLiveSharingController_ZoomInLL(); - void UT_CMusUiLiveSharingController_ZoomOutLL(); - void UT_CMusUiLiveSharingController_SplitLL(); - void UT_CMusUiLiveSharingController_ShowErrorDialogL(); - void UT_CMusUiLiveSharingController_DismissWaitDialogL(); - - - //public: // From MMusEngLiveSessionObserver - - // Empty so far - - //public: // from MMusEngOutSessionObserver - - void UT_CMusUiLiveSharingController_SessionRejectedL(); // e.g. 603 DECLINE - void UT_CMusUiLiveSharingController_SessionBadRequestL(); // 400 - void UT_CMusUiLiveSharingController_SessionUnauthorizedL(); // 401 - void UT_CMusUiLiveSharingController_SessionPaymentRequiredL(); // 402 - void UT_CMusUiLiveSharingController_SessionRecipientNotFoundL(); // 404 - void UT_CMusUiLiveSharingController_SessionProxyAuthenticationRequiredL(); // 407 - void UT_CMusUiLiveSharingController_SessionRequestTimeOutL(); // 408 - void UT_CMusUiLiveSharingController_SessionUnsupportedMediaTypeL(); // 415 - void UT_CMusUiLiveSharingController_SessionRequestCancelledL(); // 487 - - //public: // from MMusEngSessionObserver - - void UT_CMusUiLiveSharingController_SessionEstablishedL(); - void UT_CMusUiLiveSharingController_SessionTerminatedL(); - void UT_CMusUiLiveSharingController_SessionConnectionLostL(); - void UT_CMusUiLiveSharingController_SessionFailedL(); - void UT_CMusUiLiveSharingController_StreamIdleL(); - void UT_CMusUiLiveSharingController_StreamStreamingL(); - void UT_CMusUiLiveSharingController_SessionTimeChangedL(); - void UT_CMusUiLiveSharingController_InactivityTimeoutL(); - - private: // Data - - CMusUiLiveSharingObserverAdapter* iLiveSharingObserverAdapter; - CMusUiEventObserverAdapter* iEventObserver; - - CMusUiLiveSharingController* iLiveSharingController; - CMusUiEventController* iEventController; - - - - - EUNIT_DECLARE_TEST_TABLE; - - }; - -#endif // __UT_MUSENGSESSION_H__ - -// End of file diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshui/tsrc/ut_ui/inc/ut_musuipropertywatch.h --- a/mmsharing/mmshui/tsrc/ut_ui/inc/ut_musuipropertywatch.h Thu Aug 19 09:51:39 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,91 +0,0 @@ -/* -* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - initial contribution. -* -* Contributors: -* -* Description: -* -*/ - - -#ifndef __UT_MUSUIPROPERYWATCH_H__ -#define __UT_MUSUIPROPERYWATCH_H__ - - -// EXTERNAL INCLUDES -#include -#include - -// FORWARD DECLARATIONS -//class CMusEngLiveSession; -//class CMusEngObserverStub; -class CMusUiPropertyWatch; -class CMusUiPropertyObserverAdapter; - -// CLASS DEFINITION -/** - * Tester class for CMusEngSession. - * Since CMusEngSession is abstract, it is tested via object of its' - * concrete descendant class CMusEngLiveSession. Only concrete - * implementations are tested in this tester class. - * - */ -NONSHARABLE_CLASS( UT_CMusUiPropertyWatch ): public CEUnitTestSuiteClass - { - public: // Constructors and destructors - - /** - * Two phase construction - */ - static UT_CMusUiPropertyWatch* NewL(); - static UT_CMusUiPropertyWatch* NewLC(); - - /** - * Destructor - */ - ~UT_CMusUiPropertyWatch(); - - private: // Constructors and destructors - - UT_CMusUiPropertyWatch(); - void ConstructL(); - - private: // Test case setup and teardown - - void SetupL(); - - void Teardown(); - - private: // Test methods - - void UT_CMusUiPropertyWatch_ReadIntPropertyLL(); - void UT_CMusUiPropertyWatch_ReadDescPropertyLL(); - void UT_CMusUiPropertyWatch_DoCancelL(); - void UT_CMusUiPropertyWatch_RunLL(); - void UT_CMusUiPropertyWatch_RunErrorL(); - - - private: // Data - - /* - CMusEngLiveSession* iLiveSession; - CMusEngObserverStub* iObserver; - */ - CMusUiPropertyObserverAdapter* iPropertyObserver; - CMusUiPropertyWatch* iPropertyWatch; - - EUNIT_DECLARE_TEST_TABLE; - - }; - -#endif // __UT_MUSENGSESSION_H__ - -// End of file diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshui/tsrc/ut_ui/inc/ut_musuireceivecontroller.h --- a/mmsharing/mmshui/tsrc/ut_ui/inc/ut_musuireceivecontroller.h Thu Aug 19 09:51:39 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,138 +0,0 @@ -/* -* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - initial contribution. -* -* Contributors: -* -* Description: -* -*/ - - -#ifndef __UT_MUSUIRECEIVECONTROLLER_H__ -#define __UT_MUSUIRECEIVECONTROLLER_H__ - - -// EXTERNAL INCLUDES -#include -#include - -// FORWARD DECLARATIONS -class CMusUiReceiveObserverAdapter; -class CMusUiReceiveController; -class CMusUiEventObserverAdapter; -class CMusUiEventController; - - - -// CLASS DEFINITION -/** - * Tester class for CMusEngSession. - * Since CMusEngSession is abstract, it is tested via object of its' - * concrete descendant class CMusEngLiveSession. Only concrete - * implementations are tested in this tester class. - * - */ -NONSHARABLE_CLASS( UT_CMusUiReceiveController ): public CEUnitTestSuiteClass - { - public: // Constructors and destructors - - /** - * Two phase construction - */ - static UT_CMusUiReceiveController* NewL(); - static UT_CMusUiReceiveController* NewLC(); - - /** - * Destructor - */ - ~UT_CMusUiReceiveController(); - - private: // Constructors and destructors - - UT_CMusUiReceiveController(); - void ConstructL(); - - private: // Test case setup and teardown - - void SetupL(); - - void Teardown(); - - private: // Test methods - - void UT_CMusUiReceiveController_HandleCommandLL(); - void UT_CMusUiReceiveController_SizeChangedL(); - void UT_CMusUiReceiveController_ShowErrorDialogLL(); - void UT_CMusUiReceiveController_HandleIncomingSessionLL(); - void UT_CMusUiReceiveController_CancelInvitationLL(); - - public: // from CMusUiEventController - - void UT_CMusUiReceiveController_ContinueInvitationLL(); - void UT_CMusUiReceiveController_HandleAsyncEventLL(); - void UT_CMusUiReceiveController_ConnectionEstablishedL(); - void UT_CMusUiReceiveController_PlayLL(); - void UT_CMusUiReceiveController_PauseLL(); - void UT_CMusUiReceiveController_EnableDisplayLL(); - void UT_CMusUiReceiveController_ShowNaviPaneIconLL(); - void UT_CMusUiReceiveController_ChangeOrientationLL(); - void UT_CMusUiReceiveController_CenteredRectL(); - void UT_CMusUiReceiveController_ManualAddressTypedL(); - void UT_CMusUiReceiveController_ShowInformationDialogLL(); - void UT_CMusUiReceiveController_ShutdownLL(); - - public: // from MMusEngReceiveSessionObserver - - void UT_CMusUiReceiveController_IncomingSessionL(); - void UT_CMusUiReceiveController_StreamBufferingL(); - - public: // from MMusEngSessionObserver - - void UT_CMusUiReceiveController_SessionEstablishedL(); - void UT_CMusUiReceiveController_SessionTerminatedL(); - void UT_CMusUiReceiveController_SessionConnectionLostL(); - void UT_CMusUiReceiveController_SessionFailedL(); - void UT_CMusUiReceiveController_StreamIdleL(); - void UT_CMusUiReceiveController_StreamStreamingL(); - void UT_CMusUiReceiveController_SessionTimeChangedL(); - void UT_CMusUiReceiveController_InactivityTimeoutL(); - - public: // from MMusUiInvitationQueryObserver - - void UT_CMusUiReceiveController_InvitationAcceptedLL(); - void UT_CMusUiReceiveController_InvitationRejectedLL(); - - private: // new functions: - - void UT_CMusUiReceiveController_UpdateStatusPaneLL(); - void UT_CMusUiReceiveController_InspectVideoPlayerLL(); - void UT_CMusUiReceiveController_ShowWaitDialogLL(); - - - - - - private: // Data - - CMusUiReceiveObserverAdapter* iReceiveObserverAdapter; - CMusUiEventObserverAdapter* iEventObserver; - - CMusUiReceiveController* iReceiveController; - CMusUiEventController* iEventController; - - - EUNIT_DECLARE_TEST_TABLE; - - }; - -#endif // __UT_MUSENGSESSION_H__ - -// End of file diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshui/tsrc/ut_ui/inc/ut_musuistartcontroller.h --- a/mmsharing/mmshui/tsrc/ut_ui/inc/ut_musuistartcontroller.h Thu Aug 19 09:51:39 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,89 +0,0 @@ -/* -* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - initial contribution. -* -* Contributors: -* -* Description: -* -*/ - - -#ifndef __UT_MUSUISTARTCONTROLLER_H__ -#define __UT_MUSUISTARTCONTROLLER_H__ - - -// EXTERNAL INCLUDES -#include -#include - -// FORWARD DECLARATIONS -//class CMusEngLiveSession; -//class CMusEngObserverStub; -class CMusUiEventObserverAdapter; - -// CLASS DEFINITION -/** - * Tester class for CMusEngSession. - * Since CMusEngSession is abstract, it is tested via object of its' - * concrete descendant class CMusEngLiveSession. Only concrete - * implementations are tested in this tester class. - * - */ -NONSHARABLE_CLASS( UT_CMusUiStartController ): public CEUnitTestSuiteClass - { - public: // Constructors and destructors - - /** - * Two phase construction - */ - static UT_CMusUiStartController* NewL(); - static UT_CMusUiStartController* NewLC(); - - /** - * Destructor - */ - ~UT_CMusUiStartController(); - - private: // Constructors and destructors - - UT_CMusUiStartController(); - void ConstructL(); - - private: // Test case setup and teardown - - void SetupL(); - - void Teardown(); - - private: // Test methods - - void UT_CMusUiStartController_UseCasePropertyLL(); - void UT_CMusUiStartController_SetStartViewLL(); - - - - private: // Data - - - CMusUiEventObserverAdapter* iEventObserver; - - /* - CMusEngLiveSession* iLiveSession; - CMusEngObserverStub* iEventObserver; - */ - - EUNIT_DECLARE_TEST_TABLE; - - }; - -#endif // __UT_MUSENGSESSION_H__ - -// End of file diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshui/tsrc/ut_ui/src/musuicallbackobserveradapter.cpp --- a/mmsharing/mmshui/tsrc/ut_ui/src/musuicallbackobserveradapter.cpp Thu Aug 19 09:51:39 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,37 +0,0 @@ -/* -* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - initial contribution. -* -* Contributors: -* -* Description: -* -*/ - -#include "musuicallbackobserveradapter.h" - - -CMusUiCallbackObserverAdapter::CMusUiCallbackObserverAdapter() - { - iCalledObserver = ENone; - } - - -CMusUiCallbackObserverAdapter::~CMusUiCallbackObserverAdapter() - { - } - - -void CMusUiCallbackObserverAdapter::HandleAsyncEventL( TMusUiAsyncEvent aEventId ) - { - iHandleAsyncEventId = aEventId; - iCalledObserver = EHandleAsyncEventL; - User::LeaveIfError( iErrorCode ); - } \ No newline at end of file diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshui/tsrc/ut_ui/src/musuiclipsharingobserveradapter.cpp --- a/mmsharing/mmshui/tsrc/ut_ui/src/musuiclipsharingobserveradapter.cpp Thu Aug 19 09:51:39 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,159 +0,0 @@ -/* -* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - initial contribution. -* -* Contributors: -* -* Description: -* -*/ - -#include "musuiclipsharingobserveradapter.h" - - -CMusUiClipSharingObserverAdapter::CMusUiClipSharingObserverAdapter() - { - iAddress = NULL; - iCalledObserver = ENone; - iErrorCode = KErrNone; - iShowErrorDialogErrorCode = KErrNone; - } - - -CMusUiClipSharingObserverAdapter::~CMusUiClipSharingObserverAdapter() - { - delete iAddress; - } - - -void CMusUiClipSharingObserverAdapter::RunFetchDialogL() - { - iCalledObserver = ERunFetchDialogL; - User::LeaveIfError( iErrorCode ); - } - -TBool CMusUiClipSharingObserverAdapter::SelectAddressDialogL( CDesCArray* aAddressArray, - TDes& aSelectedAddress ) - { - - TInt selectedIndex( 0 ); - aSelectedAddress = (*aAddressArray)[ selectedIndex ]; - delete aAddressArray; - aAddressArray = NULL; - - iCalledObserver = ESelectAddressDialogL; - User::LeaveIfError( iErrorCode ); - return ETrue; - } - - -void CMusUiClipSharingObserverAdapter::ManualAddressEntryL( const TDesC& aAddress ) - { - delete iAddress; - iAddress = aAddress.AllocL(); - iCalledObserver = EManualAddressEntryL; - User::LeaveIfError( iErrorCode ); - } - - -void CMusUiClipSharingObserverAdapter::ShowWaitDialogL( const TDesC& aPrompt ) - { - iCalledObserver = EShowWaitDialogL; - User::LeaveIfError( iErrorCode ); - } - - -void CMusUiClipSharingObserverAdapter::DismissWaitDialogL( ) - { - iCalledObserver = EDismissWaitDialogL; - User::LeaveIfError( iErrorCode ); - } - - -void CMusUiClipSharingObserverAdapter::DismissWaitDialogL( const TDesC& aReason ) - { - iCalledObserver = EDismissWaitDialogL2; - User::LeaveIfError( iErrorCode ); - } - - -void CMusUiClipSharingObserverAdapter::ShowErrorDialogL( const TDesC& aMessage ) - { - - iCalledObserver = EShowErrorDialogL; - User::LeaveIfError( iShowErrorDialogErrorCode ); - } - - -void CMusUiClipSharingObserverAdapter::ShowInformationDialogL( TInt aResourceId ) - { - iCalledObserver = EShowInformationDialogL; - User::LeaveIfError( iErrorCode ); - } - - -void CMusUiClipSharingObserverAdapter::ShowClipSharingPanesL() - { - iCalledObserver = EShowClipSharingPanesL; - User::LeaveIfError( iErrorCode ); - } - - -void CMusUiClipSharingObserverAdapter::ChangeOrientationL( - CAknAppUiBase::TAppUiOrientation aOrientation ) - { - iCalledObserver = EChangeOrientationL; - User::LeaveIfError( iErrorCode ); - } - - -void CMusUiClipSharingObserverAdapter::ShowNaviPaneIconL( TMusUiNaviMediaDecorator aIcon, - TBool aVisible ) - { - iCalledObserver = EShowNaviPaneIconL; - User::LeaveIfError( iErrorCode ); - } - - -void CMusUiClipSharingObserverAdapter::UpdateSessionTime( const TDesC& aSessionTime ) - { - iCalledObserver = EUpdateSessionTime; - User::LeaveIfError( iErrorCode ); - } - - -void CMusUiClipSharingObserverAdapter::SetVolume( TBool aUp ) - { - iCalledObserver = ESetVolume; - User::LeaveIfError( iErrorCode ); - } - - -void CMusUiClipSharingObserverAdapter::HandleError( TInt aError ) - { - iError = aError; - iCalledObserver = EHandleError; - //User::LeaveIfError( iErrorCode ); - } - - -void CMusUiClipSharingObserverAdapter::HandleExitL() - { - iCalledObserver = EHandleExitL; - User::LeaveIfError( iErrorCode ); - } - - -void CMusUiClipSharingObserverAdapter::EndOfClip() - { - iCalledObserver = EEndOfClip; - User::LeaveIfError( iErrorCode ); - } - diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshui/tsrc/ut_ui/src/musuieventobserveradapter.cpp --- a/mmsharing/mmshui/tsrc/ut_ui/src/musuieventobserveradapter.cpp Thu Aug 19 09:51:39 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,105 +0,0 @@ -/* -* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - initial contribution. -* -* Contributors: -* -* Description: -* -*/ - -#include "musuieventobserveradapter.h" - - -// ---- MEMBER FUNCTIONS OF CMusUiObserversStub -------------------------------- - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -CMusUiEventObserverAdapter::CMusUiEventObserverAdapter() - { - // NOP - // Initialize... - iCalledObserver = ENone; - iBoolReturn = EFalse; - iErrorCode = KErrUnknown; - iPrompt = NULL; - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -CMusUiEventObserverAdapter::~CMusUiEventObserverAdapter() - { - delete iPrompt; - } - - -// -------- Functions from MMusUiEventObserver ----------------- - -void CMusUiEventObserverAdapter::ActivateLocalMusViewL( TUid aViewId ) - { - iCalledObserver = EActivateLocalMusViewL; - iViewId = aViewId; - User::LeaveIfError( iErrorCode ); - } - - -void CMusUiEventObserverAdapter::ActivateLocalMusViewL( TUid aViewId, - TUid aCustomMessageId, - const TDesC8& aCustomMessage ) - { - iCalledObserver = EActivateLocalMusViewL2; - iViewId = aViewId; - User::LeaveIfError( iErrorCode ); - } - - -TBool CMusUiEventObserverAdapter::ShowConfirmationQueryDialogL( const TDesC& aPrompt ) - { - iPrompt = aPrompt.AllocL(); - iCalledObserver = EShowConfirmationQueryDialogL; - User::LeaveIfError( iErrorCode ); - } - -void CMusUiEventObserverAdapter::ShowInformationDialogL( const TDesC& aPrompt ) - { - iCalledObserver = EShowInformationDialogL; - User::LeaveIfError( iErrorCode ); - } - - - -void CMusUiEventObserverAdapter::ActivateContactViewL( TContactItemId aId ) - { - iCalledObserver = EActivateContactViewL; - iActivatedContactId = aId; - User::LeaveIfError( iErrorCode ); - } - - - -void CMusUiEventObserverAdapter::HandleError( const TInt aReason ) - { - iHandleErrorReason = aReason; - iCalledObserver = EHandleError; - } - - -void CMusUiEventObserverAdapter::HandleExitL() - { - iCalledObserver = EHandleExitL; - User::LeaveIfError( iErrorCode ); - } - diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshui/tsrc/ut_ui/src/musuilivesharingobserveradapter.cpp --- a/mmsharing/mmshui/tsrc/ut_ui/src/musuilivesharingobserveradapter.cpp Thu Aug 19 09:51:39 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,168 +0,0 @@ -/* -* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - initial contribution. -* -* Contributors: -* -* Description: -* -*/ - -#include "musuilivesharingobserveradapter.h" - - -CMusUiLiveSharingObserverAdapter::CMusUiLiveSharingObserverAdapter() - { - iAddress = NULL; - iErrorCode = KErrNone; - iShowErrorDialogErrorCode = KErrNone; - } - -CMusUiLiveSharingObserverAdapter::~CMusUiLiveSharingObserverAdapter() - { - delete iAddress; - } - - -TBool CMusUiLiveSharingObserverAdapter::SelectAddressDialogL( CDesCArray* aAddressArray, - TDes& aSelectedAddress ) - { - - - TInt selectedIndex( 0 ); - aSelectedAddress = (*aAddressArray)[ selectedIndex ]; - delete aAddressArray; - aAddressArray = NULL; - - iCalledObserver = ESelectAddressDialogL; - User::LeaveIfError( iErrorCode ); - return ETrue; - } - - -void CMusUiLiveSharingObserverAdapter::ManualAddressEntryL( const TDesC& aAddress ) - { - delete iAddress; - iAddress = aAddress.AllocL(); - iCalledObserver = EManualAddressEntryL; - User::LeaveIfError( iErrorCode ); - } - - - -void CMusUiLiveSharingObserverAdapter::ShowWaitDialogL( const TDesC& aPrompt ) - { - iCalledObserver = EShowWaitDialogL; - User::LeaveIfError( iErrorCode ); - } - - - -void CMusUiLiveSharingObserverAdapter::DismissWaitDialogL( ) - { - iCalledObserver = EDismissWaitDialogL; - User::LeaveIfError( iErrorCode ); - } - - - -void CMusUiLiveSharingObserverAdapter::ShowErrorDialogL( const TDesC& aMessage ) - { - iCalledObserver = EShowErrorDialogL; - User::LeaveIfError( iShowErrorDialogErrorCode ); - } - - - -void CMusUiLiveSharingObserverAdapter::ShowInformationDialogL( TInt aResourceId ) - { - iCalledObserver = EShowInformationDialogL; - User::LeaveIfError( iErrorCode ); - } - - - -void CMusUiLiveSharingObserverAdapter::ShowLiveSharingPanesL() - { - iCalledObserver = EShowLiveSharingPanesL; - User::LeaveIfError( iErrorCode ); - } - - - -void CMusUiLiveSharingObserverAdapter::ChangeOrientationL( - CAknAppUiBase::TAppUiOrientation aOrientation ) - { - iOrientation = aOrientation; - iCalledObserver = EChangeOrientationL; - User::LeaveIfError( iErrorCode ); - } - - - -void CMusUiLiveSharingObserverAdapter::ShowNaviPaneIconL( - TMusUiNaviMediaDecorator aIcon, - TBool aVisible ) - { - iIcon = aIcon; - iCalledObserver = EShowNaviPaneIconL; - User::LeaveIfError( iErrorCode ); - } - - - -void CMusUiLiveSharingObserverAdapter::UpdateSessionTime( const TDesC& aSessionTime ) - { - iCalledObserver = EUpdateSessionTime; - User::LeaveIfError( iErrorCode ); - } - - - -void CMusUiLiveSharingObserverAdapter::SetVolume( TBool aUp ) - { - iCalledObserver = ESetVolume; - User::LeaveIfError( iErrorCode ); - } - - - -void CMusUiLiveSharingObserverAdapter::SetZoom( TBool aIn ) - { - iCalledObserver = ESetZoom; - User::LeaveIfError( iErrorCode ); - } - - - -void CMusUiLiveSharingObserverAdapter::HandleError( TInt aError ) - { - iError = aError; - iCalledObserver = EHandleError; - //User::LeaveIfError( iErrorCode ); - } - - - -void CMusUiLiveSharingObserverAdapter::HandleExitL() - { - iCalledObserver = EHandleExitL; - User::LeaveIfError( iErrorCode ); - } - - - -void CMusUiLiveSharingObserverAdapter::CancelInvitationTimer() - { - iCalledObserver = ECancelInvitationTimer; - User::LeaveIfError( iErrorCode ); - } - - diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshui/tsrc/ut_ui/src/musuipropertyobserveradapter.cpp --- a/mmsharing/mmshui/tsrc/ut_ui/src/musuipropertyobserveradapter.cpp Thu Aug 19 09:51:39 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,51 +0,0 @@ -/* -* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - initial contribution. -* -* Contributors: -* -* Description: -* -*/ - -#include "musuipropertyobserveradapter.h" - - - -CMusUiPropertyObserverAdapter::CMusUiPropertyObserverAdapter() - { - //iCalledObserver = ENone; - } - - -CMusUiPropertyObserverAdapter::~CMusUiPropertyObserverAdapter() - { - } - - -void CMusUiPropertyObserverAdapter::ResourcePropertyChanged( const TUint aKey, const TInt aValue ) - { - iCalledObserver = EResourcePropertyChanged; - User::LeaveIfError( iErrorCode ); - } - - -void CMusUiPropertyObserverAdapter::SessionPropertyChanged( const TUint aKey, const TInt aValue ) - { - iCalledObserver = ESessionPropertyChanged; - User::LeaveIfError( iErrorCode ); - } - - -void CMusUiPropertyObserverAdapter::HandleError( const TInt aReason ) - { - iCalledObserver = EHandleError; - User::LeaveIfError( iErrorCode ); - } diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshui/tsrc/ut_ui/src/musuireceiveobserveradapter.cpp --- a/mmsharing/mmshui/tsrc/ut_ui/src/musuireceiveobserveradapter.cpp Thu Aug 19 09:51:39 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,138 +0,0 @@ -/* -* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - initial contribution. -* -* Contributors: -* -* Description: -* -*/ - -#include "musuireceiveobserveradapter.h" - - -CMusUiReceiveObserverAdapter::CMusUiReceiveObserverAdapter() - { - iAddress = NULL; - iErrorCode = KErrNone; - iShowErrorDialogErrorCode = KErrNone; - } - -CMusUiReceiveObserverAdapter::~CMusUiReceiveObserverAdapter() - { - delete iAddress; - } - - - -void CMusUiReceiveObserverAdapter::ShowErrorDialog( const TDesC& aPrompt ) - { - iCalledObserver = EShowErrorDialog; - } - - - -void CMusUiReceiveObserverAdapter::ShowErrorDialogL( const TDesC& aMessage ) - { - iCalledObserver = EShowErrorDialogL; - User::LeaveIfError( iShowErrorDialogErrorCode ); - } - - -void CMusUiReceiveObserverAdapter::ShowInvitationQueryL( const TDesC& aQuery ) - { - iCalledObserver = EShowInvitationQueryL; - User::LeaveIfError( iErrorCode ); - } - - -void CMusUiReceiveObserverAdapter::DismissInvitationQuery( TBool aDelete ) - { - iCalledObserver = EDismissInvitationQuery; - } - - - -void CMusUiReceiveObserverAdapter::ShowWaitDialogL( const TDesC& aPrompt ) - { - iCalledObserver = EShowWaitDialogL; - User::LeaveIfError( iErrorCode ); - } - - -void CMusUiReceiveObserverAdapter::DismissWaitDialogL( ) - { - iCalledObserver = EDismissWaitDialogL; - User::LeaveIfError( iErrorCode ); - } - - -void CMusUiReceiveObserverAdapter::ShowInformationDialogL( TInt aResourceId ) - { - iResourceId = aResourceId; - iCalledObserver = EShowInformationDialogL; - User::LeaveIfError( iErrorCode ); - } - - -void CMusUiReceiveObserverAdapter::ShowNaviPaneIconL( - TMusUiNaviMediaDecorator aIcon, - TBool aVisible ) - { - iIcon = aIcon; - iVisible = aVisible; - iCalledObserver = EShowNaviPaneIconL; - User::LeaveIfError( iErrorCode ); - } - - -void CMusUiReceiveObserverAdapter::ShowStatusPaneL( TBool aVisible ) - { - iCalledObserver = EShowStatusPaneL; - User::LeaveIfError( iErrorCode ); - } - - -void CMusUiReceiveObserverAdapter::ChangeOrientationL( - CAknAppUiBase::TAppUiOrientation aOrientation ) - { - iOrientation = aOrientation; - iCalledObserver = EChangeOrientationL; - User::LeaveIfError( iErrorCode ); - } - - -void CMusUiReceiveObserverAdapter::UpdateSessionTime( const TDesC& aSessionTime ) - { - iCalledObserver = EUpdateSessionTime; - User::LeaveIfError( iErrorCode ); - } - - -void CMusUiReceiveObserverAdapter::SetVolume( TBool aUp ) - { - iCalledObserver = ESetVolume; - User::LeaveIfError( iErrorCode ); - } - - -void CMusUiReceiveObserverAdapter::HandleError( TInt aError ) - { - iError = aError; - iCalledObserver = EHandleError; - //User::LeaveIfError( iErrorCode ); - } - - -void CMusUiReceiveObserverAdapter::HandleExitL() - { - iCalledObserver = EHandleExitL; - User::LeaveIfError( iErrorCode ); - } diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshui/tsrc/ut_ui/src/ut_musuiclipsharingcontroller.cpp --- a/mmsharing/mmshui/tsrc/ut_ui/src/ut_musuiclipsharingcontroller.cpp Thu Aug 19 09:51:39 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,730 +0,0 @@ -/* -* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - initial contribution. -* -* Contributors: -* -* Description: -* -*/ - - -// INTERNAL INCLUDES -#include "ut_musuiclipsharingcontroller.h" -#include "musuiclipsharingcontroller.h" -#include "musuiclipsharingobserveradapter.h" -#include "musuieventobserveradapter.h" -#include "musuidefinitions.h" -#include "musengclipsession.h" -#include -//#include "musestubs.h" -//#include "musengtestdefs.h" - -// SYSTEM INCLUDES -#include -//#include -//#include - - - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -UT_CMusUiClipSharingController* UT_CMusUiClipSharingController::NewL() - { - UT_CMusUiClipSharingController* self = UT_CMusUiClipSharingController::NewLC(); - CleanupStack::Pop( self ); - return self; - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -UT_CMusUiClipSharingController* UT_CMusUiClipSharingController::NewLC() - { - UT_CMusUiClipSharingController* self = new( ELeave ) UT_CMusUiClipSharingController(); - CleanupStack::PushL( self ); - self->ConstructL(); - return self; - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -UT_CMusUiClipSharingController::~UT_CMusUiClipSharingController() - { - // NOP - } - - -// ----------------------------------------------------------------------------- -// Default constructor -// ----------------------------------------------------------------------------- -// -UT_CMusUiClipSharingController::UT_CMusUiClipSharingController() - { - // NOP - } - - -// ----------------------------------------------------------------------------- -// Second phase construct -// ----------------------------------------------------------------------------- -// -void UT_CMusUiClipSharingController::ConstructL() - { - // The ConstructL from the base class CEUnitTestSuiteClass must be called. - // It generates the test case table. - CEUnitTestSuiteClass::ConstructL(); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void UT_CMusUiClipSharingController::SetupL() - { - iEventObserver = new (ELeave) CMusUiEventObserverAdapter(); - EUNIT_ASSERT( iEventObserver ); - - iClipSharingObserverAdapter = new (ELeave) CMusUiClipSharingObserverAdapter(); - EUNIT_ASSERT( iClipSharingObserverAdapter ); - - - RProperty::iIntProperty = 0; - RProperty::iErrorCode = KErrNone; - - - iClipSharingController = CMusUiClipSharingController::NewL( iClipSharingObserverAdapter, TRect( 0,0,100,100)); - iEventController = static_cast - ( iClipSharingController ); - - EUNIT_ASSERT( iEventController ); - iEventController->SetEventObserver( iEventObserver ); - EUNIT_ASSERT( iEventController->iObserver == iEventObserver ); - - // Need fake active object event... - _LIT( KFileName , "clip.3gp" ); - iClipSharingController->iFileName = KFileName().AllocL(); - iClipSharingController->HandleAsyncEventL( EMusUiAsyncStartMediaGallery ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void UT_CMusUiClipSharingController::Teardown() - { - delete iClipSharingController; - iEventController = NULL; - delete iEventObserver; - delete iClipSharingObserverAdapter; - } - - - -// TEST CASES - - -void UT_CMusUiClipSharingController::UT_CMusUiClipSharingController_StartInvitationLL() - { - // TODO: - EUNIT_ASSERT( EFalse ); - } - - -void UT_CMusUiClipSharingController::UT_CMusUiClipSharingController_AddressFoundLL() - { - EUNIT_ASSERT( EFalse ); - } - - -void UT_CMusUiClipSharingController::UT_CMusUiClipSharingController_InviteLL() - { - // Precondititions - iClipSharingObserverAdapter->iErrorCode = KErrNone; - iEventController->iCameraAvailable = EAvailable; - iEventController->iSipRegistrationPending = EFalse; - - // sip address length > 0 and no separator - _LIT( KRes, "address" ); - delete iEventController->iRemoteSipAddress; - iEventController->iRemoteSipAddress = KRes().AllocL(); - iClipSharingController->InviteL(); - - EUNIT_ASSERT( iClipSharingController->iSession->iInvited ); - EUNIT_ASSERT( iClipSharingObserverAdapter->iCalledObserver == CMusUiClipSharingObserverAdapter::EShowWaitDialogL ); - - - // sip address length > 0 and separator - _LIT( KRes2, "Address1, Address2, Address3" ); - delete iEventController->iRemoteSipAddress; - iEventController->iRemoteSipAddress = KRes2().AllocL(); - iClipSharingController->iSession->iInvited = EFalse; - iClipSharingObserverAdapter->iCalledObserver == CMusUiClipSharingObserverAdapter::ENone; - - iClipSharingController->InviteL(); - EUNIT_ASSERT( iClipSharingController->iSession->iInvited ); - EUNIT_ASSERT( iClipSharingObserverAdapter->iCalledObserver == CMusUiClipSharingObserverAdapter::EShowWaitDialogL ); - - - // sip addres length = 0 - _LIT( KRes3, "" ); - delete iEventController->iRemoteSipAddress; - iEventController->iRemoteSipAddress = KRes3().AllocL(); - iClipSharingController->iSession->iInvited = EFalse; - iClipSharingObserverAdapter->iCalledObserver == CMusUiClipSharingObserverAdapter::ENone; - - iClipSharingController->InviteL(); - EUNIT_ASSERT( iClipSharingObserverAdapter->iCalledObserver == CMusUiClipSharingObserverAdapter::EManualAddressEntryL ); - - } - - -void UT_CMusUiClipSharingController::UT_CMusUiClipSharingController_InviteL2L() - { - // Precondititions - iClipSharingObserverAdapter->iErrorCode = KErrNone; - - // registration not pending and triedinvitations > 1 - iEventController->iSipRegistrationPending = EFalse; - iClipSharingController->iSession->iInvited = EFalse; - iClipSharingController->iManualAddressTyped = EFalse; - iClipSharingController->iTriedInvitations = 2; - - _LIT( KRes, "address" ); - iClipSharingController->InviteL( KRes ); - EUNIT_ASSERT( iClipSharingController->iSession->iInvited ); - EUNIT_ASSERT( iClipSharingObserverAdapter->iCalledObserver == CMusUiClipSharingObserverAdapter::EShowWaitDialogL ); - - - // registration not pending and triedinvitations > 1 - iClipSharingController->iSession->iErrorCode = KErrArgument; - - iEventController->iSipRegistrationPending = EFalse; - iClipSharingController->iSession->iInvited = EFalse; - iClipSharingController->iManualAddressTyped = EFalse; - iClipSharingController->iTriedInvitations = 2; - - iClipSharingController->InviteL( KRes ); - EUNIT_ASSERT( iClipSharingController->iSession->iInvited ); - EUNIT_ASSERT( iClipSharingObserverAdapter->iCalledObserver == CMusUiClipSharingObserverAdapter::EHandleExitL ); - - - // registration not pending and triedinvitations = 0 - iClipSharingController->iSession->iErrorCode = KErrArgument; - - iEventController->iSipRegistrationPending = EFalse; - iClipSharingController->iSession->iInvited = EFalse; - iClipSharingController->iManualAddressTyped = EFalse; - iClipSharingController->iTriedInvitations = 0; - - _LIT( KProposal, "proposal_address" ); - delete iEventController->iRemoteSipAddressProposal; - iEventController->iRemoteSipAddressProposal = KProposal().AllocL(); - - // Manual address entry - iClipSharingController->InviteL( KRes ); - EUNIT_ASSERT( iClipSharingController->iSession->iInvited ); - EUNIT_ASSERT( iClipSharingObserverAdapter->iCalledObserver == CMusUiClipSharingObserverAdapter::EShowWaitDialogL ); - EUNIT_ASSERT( iClipSharingController->iTriedInvitations == 1 ); - EUNIT_ASSERT( iClipSharingObserverAdapter->iAddress->Des().Compare( KProposal ) == 0 ); - } - - -void UT_CMusUiClipSharingController::UT_CMusUiClipSharingController_SetRectL() - { - TRect rect = TRect( 0,0, 100,100 ); - - iClipSharingController->iSession->iErrorCode = KErrArgument; - iClipSharingController->SetRect( rect ); - EUNIT_ASSERT( iClipSharingObserverAdapter->iCalledObserver == CMusUiClipSharingObserverAdapter::EHandleError ); - EUNIT_ASSERT( iClipSharingObserverAdapter->iError == KErrArgument ); - - iClipSharingController->iSession->iErrorCode = KErrNone; - iClipSharingController->SetRect( rect ); - EUNIT_ASSERT( iClipSharingController->iSession->iRect == rect ); - } - - -void UT_CMusUiClipSharingController::UT_CMusUiClipSharingController_CancelInvitationLL() - { - // Connection established cancel - iClipSharingController->iSession->iInvited = ETrue; - iClipSharingController->iConnectionEstablished = ETrue; - iClipSharingController->iManualAddressTyped = EFalse; - - iClipSharingController->CancelInvitationL(); - EUNIT_ASSERT( iClipSharingController->iSession->iInvited ); - EUNIT_ASSERT( iClipSharingObserverAdapter->iCalledObserver == CMusUiClipSharingObserverAdapter::EHandleExitL ); - - - // No connection cancel - iClipSharingController->iSession->iInvited = ETrue; - iClipSharingController->iConnectionEstablished = EFalse; - iClipSharingController->iManualAddressTyped = EFalse; - - iClipSharingController->CancelInvitationL(); - EUNIT_ASSERT( !iClipSharingController->iSession->iInvited ); - EUNIT_ASSERT( iClipSharingObserverAdapter->iCalledObserver == CMusUiClipSharingObserverAdapter::EHandleExitL ); - } - - -void UT_CMusUiClipSharingController::UT_CMusUiClipSharingController_HandleCommandLL() - { - EUNIT_ASSERT( EFalse ); - } - - -void UT_CMusUiClipSharingController::UT_CMusUiClipSharingController_PlayingL() - { - iClipSharingController->iPlaying = ETrue; - EUNIT_ASSERT( iClipSharingController->Playing() ); - } - - -void UT_CMusUiClipSharingController::UT_CMusUiClipSharingController_SetFileNameLL() - { - _LIT( KRes, "filename" ); - delete iClipSharingController->iFileName; - iClipSharingController->SetFileNameL( KRes ); - EUNIT_ASSERT( iClipSharingController->iFileName->Des().Compare( KRes ) == 0 ); - } - - -void UT_CMusUiClipSharingController::UT_CMusUiClipSharingController_ClipEndedL() - { - iClipSharingController->iClipEnded = ETrue; - EUNIT_ASSERT( iClipSharingController->ClipEnded() ); - } - - -void UT_CMusUiClipSharingController::UT_CMusUiClipSharingController_ZoomInLL() - { - iClipSharingController->ZoomInL(); - EUNIT_ASSERT( ETrue ); - } - - -void UT_CMusUiClipSharingController::UT_CMusUiClipSharingController_ZoomOutLL() - { - iClipSharingController->ZoomOutL(); - EUNIT_ASSERT( ETrue ); - } - - -void UT_CMusUiClipSharingController::UT_CMusUiClipSharingController_SplitLL() - { - EUNIT_ASSERT( EFalse ); - } - - -void UT_CMusUiClipSharingController::UT_CMusUiClipSharingController_ShowErrorDialogL() - { - iClipSharingObserverAdapter->iErrorCode = KErrNone; - iClipSharingController->ShowErrorDialog( 1 ); - EUNIT_ASSERT( iClipSharingObserverAdapter->iCalledObserver == CMusUiClipSharingObserverAdapter::EShowErrorDialogL ); - - iClipSharingObserverAdapter->iErrorCode = KErrNone; - iClipSharingObserverAdapter->iShowErrorDialogErrorCode = KErrArgument; - iClipSharingController->ShowErrorDialog( 1 ); - EUNIT_ASSERT( iClipSharingObserverAdapter->iCalledObserver == CMusUiClipSharingObserverAdapter::EHandleError ); - } - - -void UT_CMusUiClipSharingController::UT_CMusUiClipSharingController_DismissWaitDialogL() - { - iClipSharingObserverAdapter->iErrorCode = KErrNone; - iClipSharingController->DismissWaitDialog(); - EUNIT_ASSERT( iClipSharingObserverAdapter->iCalledObserver == CMusUiClipSharingObserverAdapter::EDismissWaitDialogL ); - - iClipSharingObserverAdapter->iErrorCode = KErrArgument; - iClipSharingController->DismissWaitDialog(); - EUNIT_ASSERT( iClipSharingObserverAdapter->iCalledObserver == CMusUiClipSharingObserverAdapter::EHandleError ); - EUNIT_ASSERT( iClipSharingObserverAdapter->iError == KErrArgument ); - } - -void UT_CMusUiClipSharingController::UT_CMusUiClipSharingController_EndOfClipL() - { - iClipSharingController->iClipEnded = EFalse; - iClipSharingController->EndOfClip(); - EUNIT_ASSERT( iClipSharingController->iClipEnded ); - } - - -void UT_CMusUiClipSharingController::UT_CMusUiClipSharingController_SessionRejectedL() - { - iClipSharingController->SessionRejected(); - EUNIT_ASSERT( iClipSharingObserverAdapter->iCalledObserver == CMusUiClipSharingObserverAdapter::EHandleExitL ); - } - - -void UT_CMusUiClipSharingController::UT_CMusUiClipSharingController_SessionBadRequestL() - { - iClipSharingController->SessionBadRequest(); - EUNIT_ASSERT( ETrue ); - } - - -void UT_CMusUiClipSharingController::UT_CMusUiClipSharingController_SessionUnauthorizedL() - { - iClipSharingController->SessionUnauthorized(); - EUNIT_ASSERT( ETrue ); - } - - -void UT_CMusUiClipSharingController::UT_CMusUiClipSharingController_SessionPaymentRequiredL() - { - iClipSharingController->SessionPaymentRequired(); - EUNIT_ASSERT( ETrue ); - } - - -void UT_CMusUiClipSharingController::UT_CMusUiClipSharingController_SessionRecipientNotFoundL() - { - EUNIT_ASSERT( EFalse ); - } - - -void UT_CMusUiClipSharingController::UT_CMusUiClipSharingController_SessionProxyAuthenticationRequiredL() - { - iClipSharingController->SessionProxyAuthenticationRequired(); - EUNIT_ASSERT( ETrue ); - } - - -void UT_CMusUiClipSharingController::UT_CMusUiClipSharingController_SessionRequestTimeOutL() - { - iClipSharingController->SessionRequestTimeOut(); - EUNIT_ASSERT( iClipSharingObserverAdapter->iCalledObserver == CMusUiClipSharingObserverAdapter::EHandleExitL ); - } - - -void UT_CMusUiClipSharingController::UT_CMusUiClipSharingController_SessionUnsupportedMediaTypeL() - { - iClipSharingController->SessionUnsupportedMediaType(); - EUNIT_ASSERT( iClipSharingObserverAdapter->iCalledObserver == CMusUiClipSharingObserverAdapter::EHandleExitL ); - } - - -void UT_CMusUiClipSharingController::UT_CMusUiClipSharingController_SessionRequestCancelledL() - { - iClipSharingController->SessionRequestCancelled(); - EUNIT_ASSERT( iClipSharingObserverAdapter->iCalledObserver == CMusUiClipSharingObserverAdapter::EHandleExitL ); - } - - -void UT_CMusUiClipSharingController::UT_CMusUiClipSharingController_SessionEstablishedL() - { - iClipSharingController->SessionEstablished(); - EUNIT_ASSERT( iClipSharingObserverAdapter->iCalledObserver == CMusUiClipSharingObserverAdapter::EShowClipSharingPanesL ); - } - - -void UT_CMusUiClipSharingController::UT_CMusUiClipSharingController_SessionTerminatedL() - { - iClipSharingController->SessionTerminated(); - EUNIT_ASSERT( iClipSharingObserverAdapter->iCalledObserver == CMusUiClipSharingObserverAdapter::EHandleExitL ); - } - - -void UT_CMusUiClipSharingController::UT_CMusUiClipSharingController_SessionConnectionLostL() - { - iClipSharingController->SessionConnectionLost(); - EUNIT_ASSERT( iClipSharingObserverAdapter->iCalledObserver == CMusUiClipSharingObserverAdapter::EHandleExitL ); - } - - -void UT_CMusUiClipSharingController::UT_CMusUiClipSharingController_SessionFailedL() - { - iClipSharingController->SessionFailed(); - EUNIT_ASSERT( ETrue ); - } - - -void UT_CMusUiClipSharingController::UT_CMusUiClipSharingController_StreamIdleL() - { - iClipSharingController->StreamIdle(); - EUNIT_ASSERT( ETrue ); - } - - -void UT_CMusUiClipSharingController::UT_CMusUiClipSharingController_StreamStreamingL() - { - iClipSharingController->StreamStreaming(); - EUNIT_ASSERT( ETrue ); - } - - -void UT_CMusUiClipSharingController::UT_CMusUiClipSharingController_SessionTimeChangedL() - { - iClipSharingController->SessionTimeChanged( TTimeIntervalSeconds( 1 ) ); - EUNIT_ASSERT( iClipSharingObserverAdapter->iCalledObserver == CMusUiClipSharingObserverAdapter::EUpdateSessionTime ); - } - - -void UT_CMusUiClipSharingController::UT_CMusUiClipSharingController_InactivityTimeoutL() - { - iClipSharingController->InactivityTimeout(); - EUNIT_ASSERT( iClipSharingObserverAdapter->iCalledObserver == CMusUiClipSharingObserverAdapter::EHandleExitL ); - } - - - - -// TEST TABLE - -EUNIT_BEGIN_TEST_TABLE( - UT_CMusUiClipSharingController, - "UT_CMusUiClipSharingController", - "UNIT" ) - -EUNIT_TEST( - "StartInvitationL - test ", - "CMusUiClipSharingController", - "StartInvitationL", - "FUNCTIONALITY", - SetupL, UT_CMusUiClipSharingController_StartInvitationLL, Teardown) - -EUNIT_TEST( - "AddressFoundL - test ", - "CMusUiClipSharingController", - "AddressFoundL", - "FUNCTIONALITY", - SetupL, UT_CMusUiClipSharingController_AddressFoundLL, Teardown) - -EUNIT_TEST( - "InviteL - test ", - "CMusUiClipSharingController", - "InviteL", - "FUNCTIONALITY", - SetupL, UT_CMusUiClipSharingController_InviteLL, Teardown) - -EUNIT_TEST( - "InviteL2 - test ", - "CMusUiClipSharingController", - "InviteL2", - "FUNCTIONALITY", - SetupL, UT_CMusUiClipSharingController_InviteL2L, Teardown) - -EUNIT_TEST( - "SetRect - test ", - "CMusUiClipSharingController", - "SetRect", - "FUNCTIONALITY", - SetupL, UT_CMusUiClipSharingController_SetRectL, Teardown) - -EUNIT_TEST( - "CancelInvitationL - test ", - "CMusUiClipSharingController", - "CancelInvitationL", - "FUNCTIONALITY", - SetupL, UT_CMusUiClipSharingController_CancelInvitationLL, Teardown) - -EUNIT_TEST( - "HandleCommandL - test ", - "CMusUiClipSharingController", - "HandleCommandL", - "FUNCTIONALITY", - SetupL, UT_CMusUiClipSharingController_HandleCommandLL, Teardown) - -EUNIT_TEST( - "Playing - test ", - "CMusUiClipSharingController", - "Playing", - "FUNCTIONALITY", - SetupL, UT_CMusUiClipSharingController_PlayingL, Teardown) - -EUNIT_TEST( - "SetFileNameL - test ", - "CMusUiClipSharingController", - "SetFileNameL", - "FUNCTIONALITY", - SetupL, UT_CMusUiClipSharingController_SetFileNameLL, Teardown) - -EUNIT_TEST( - "ClipEnded - test ", - "CMusUiClipSharingController", - "ClipEnded", - "FUNCTIONALITY", - SetupL, UT_CMusUiClipSharingController_ClipEndedL, Teardown) - -EUNIT_TEST( - "ZoomInL - test ", - "CMusUiClipSharingController", - "ZoomInL", - "FUNCTIONALITY", - SetupL, UT_CMusUiClipSharingController_ZoomInLL, Teardown) - -EUNIT_TEST( - "ZoomOutL - test ", - "CMusUiClipSharingController", - "ZoomOutL", - "FUNCTIONALITY", - SetupL, UT_CMusUiClipSharingController_ZoomOutLL, Teardown) - -EUNIT_TEST( - "SplitL - test ", - "CMusUiClipSharingController", - "SplitL", - "FUNCTIONALITY", - SetupL, UT_CMusUiClipSharingController_SplitLL, Teardown) - -EUNIT_TEST( - "ShowErrorDialog - test ", - "CMusUiClipSharingController", - "ShowErrorDialog", - "FUNCTIONALITY", - SetupL, UT_CMusUiClipSharingController_ShowErrorDialogL, Teardown) - -EUNIT_TEST( - "DismissWaitDialog - test ", - "CMusUiClipSharingController", - "DismissWaitDialog", - "FUNCTIONALITY", - SetupL, UT_CMusUiClipSharingController_DismissWaitDialogL, Teardown) - -EUNIT_TEST( - "EndOfClip - test ", - "CMusUiClipSharingController", - "EndOfClip", - "FUNCTIONALITY", - SetupL, UT_CMusUiClipSharingController_EndOfClipL, Teardown) - -EUNIT_TEST( - "SessionRejected - test ", - "CMusUiClipSharingController", - "SessionRejected", - "FUNCTIONALITY", - SetupL, UT_CMusUiClipSharingController_SessionRejectedL, Teardown) - -EUNIT_TEST( - "SessionBadRequest - test ", - "CMusUiClipSharingController", - "SessionBadRequest", - "FUNCTIONALITY", - SetupL, UT_CMusUiClipSharingController_SessionBadRequestL, Teardown) - -EUNIT_TEST( - "SessionUnauthorized - test ", - "CMusUiClipSharingController", - "SessionUnauthorized", - "FUNCTIONALITY", - SetupL, UT_CMusUiClipSharingController_SessionUnauthorizedL, Teardown) - -EUNIT_TEST( - "SessionPaymentRequired - test ", - "CMusUiClipSharingController", - "SessionPaymentRequired", - "FUNCTIONALITY", - SetupL, UT_CMusUiClipSharingController_SessionPaymentRequiredL, Teardown) - -EUNIT_TEST( - "SessionRecipientNotFound - test ", - "CMusUiClipSharingController", - "SessionRecipientNotFound", - "FUNCTIONALITY", - SetupL, UT_CMusUiClipSharingController_SessionRecipientNotFoundL, Teardown) - -EUNIT_TEST( - "SessionProxyAuthenticationRequired - test ", - "CMusUiClipSharingController", - "SessionProxyAuthenticationRequired", - "FUNCTIONALITY", - SetupL, UT_CMusUiClipSharingController_SessionProxyAuthenticationRequiredL, Teardown) - -EUNIT_TEST( - "SessionRequestTimeOut - test ", - "CMusUiClipSharingController", - "SessionRequestTimeOut", - "FUNCTIONALITY", - SetupL, UT_CMusUiClipSharingController_SessionRequestTimeOutL, Teardown) - -EUNIT_TEST( - "SessionUnsupportedMediaType - test ", - "CMusUiClipSharingController", - "SessionUnsupportedMediaType", - "FUNCTIONALITY", - SetupL, UT_CMusUiClipSharingController_SessionUnsupportedMediaTypeL, Teardown) - -EUNIT_TEST( - "SessionRequestCancelled - test ", - "CMusUiClipSharingController", - "SessionRequestCancelled", - "FUNCTIONALITY", - SetupL, UT_CMusUiClipSharingController_SessionRequestCancelledL, Teardown) - -EUNIT_TEST( - "SessionEstablished - test ", - "CMusUiClipSharingController", - "SessionEstablished", - "FUNCTIONALITY", - SetupL, UT_CMusUiClipSharingController_SessionEstablishedL, Teardown) - -EUNIT_TEST( - "SessionTerminated - test ", - "CMusUiClipSharingController", - "SessionTerminated", - "FUNCTIONALITY", - SetupL, UT_CMusUiClipSharingController_SessionTerminatedL, Teardown) - -EUNIT_TEST( - "SessionConnectionLost - test ", - "CMusUiClipSharingController", - "SessionConnectionLost", - "FUNCTIONALITY", - SetupL, UT_CMusUiClipSharingController_SessionConnectionLostL, Teardown) - -EUNIT_TEST( - "SessionFailed - test ", - "CMusUiClipSharingController", - "SessionFailed", - "FUNCTIONALITY", - SetupL, UT_CMusUiClipSharingController_SessionFailedL, Teardown) - -EUNIT_TEST( - "StreamIdle - test ", - "CMusUiClipSharingController", - "StreamIdle", - "FUNCTIONALITY", - SetupL, UT_CMusUiClipSharingController_StreamIdleL, Teardown) - -EUNIT_TEST( - "StreamStreaming - test ", - "CMusUiClipSharingController", - "StreamStreaming", - "FUNCTIONALITY", - SetupL, UT_CMusUiClipSharingController_StreamStreamingL, Teardown) - -EUNIT_TEST( - "SessionTimeChanged - test ", - "CMusUiClipSharingController", - "SessionTimeChanged", - "FUNCTIONALITY", - SetupL, UT_CMusUiClipSharingController_SessionTimeChangedL, Teardown) - -EUNIT_TEST( - "InactivityTimeout - test ", - "CMusUiClipSharingController", - "InactivityTimeout", - "FUNCTIONALITY", - SetupL, UT_CMusUiClipSharingController_InactivityTimeoutL, Teardown) - -EUNIT_END_TEST_TABLE - -// END OF FILE diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshui/tsrc/ut_ui/src/ut_musuidllmain.cpp --- a/mmsharing/mmshui/tsrc/ut_ui/src/ut_musuidllmain.cpp Thu Aug 19 09:51:39 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,63 +0,0 @@ -/* -* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - initial contribution. -* -* Contributors: -* -* Description: -* -*/ - -// USER INCLUDES -#include "ut_musuiclipsharingcontroller.h" -#include "ut_musuieventcontroller.h" -#include "ut_musuilivesharingcontroller.h" -#include "ut_musuipropertywatch.h" -#include "ut_musuireceivecontroller.h" -#include "ut_musuistartcontroller.h" - -// SYSTEM INCLUDES -#include - - -// ----------------------------------------------------------------------------- -// Test suite factory function. -// ----------------------------------------------------------------------------- -// -EXPORT_C MEUnitTest* CreateTestSuiteL() - { - - CEUnitTestSuite* rootSuite = CEUnitTestSuite::NewLC( _L( "Main suite" ) ); - - //rootSuite->AddL( UT_MusEngMceUtils::NewLC() ); - //CleanupStack::Pop(); - - rootSuite->AddL( UT_CMusUiClipSharingController::NewLC() ); - CleanupStack::Pop(); - - rootSuite->AddL( UT_CMusUiEventController::NewLC() ); - CleanupStack::Pop(); - - rootSuite->AddL( UT_CMusUiLiveSharingController::NewLC() ); - CleanupStack::Pop(); - - rootSuite->AddL( UT_CMusUiPropertyWatch::NewLC() ); - CleanupStack::Pop(); - - rootSuite->AddL( UT_CMusUiReceiveController::NewLC() ); - CleanupStack::Pop(); - - rootSuite->AddL( UT_CMusUiStartController::NewLC() ); - CleanupStack::Pop(); - - CleanupStack::Pop( rootSuite ); - - return rootSuite; - } diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshui/tsrc/ut_ui/src/ut_musuieventcontroller.cpp --- a/mmsharing/mmshui/tsrc/ut_ui/src/ut_musuieventcontroller.cpp Thu Aug 19 09:51:39 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,761 +0,0 @@ -/* -* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - initial contribution. -* -* Contributors: -* -* Description: -* -*/ - - -// INTERNAL INCLUDES -#include "ut_musuieventcontroller.h" -#include "musuieventcontroller.h" -#include "musuilivesharingcontroller.h" - -#include "musuilivesharingobserveradapter.h" -#include "musuieventobserveradapter.h" - -#include "musresourceproperties.h" -#include "mussessionproperties.h" -#include "musuidefinitions.h" -#include "musenglivesession.h" -#include "mussettings.h" - - -#include -#include -#include - -//#include "musestubs.h" -//#include "musengtestdefs.h" - -// SYSTEM INCLUDES -#include -//#include -//#include - -using namespace NMusSessionApi; - - - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -UT_CMusUiEventController* UT_CMusUiEventController::NewL() - { - UT_CMusUiEventController* self = UT_CMusUiEventController::NewLC(); - CleanupStack::Pop( self ); - return self; - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -UT_CMusUiEventController* UT_CMusUiEventController::NewLC() - { - UT_CMusUiEventController* self = new( ELeave ) UT_CMusUiEventController(); - CleanupStack::PushL( self ); - self->ConstructL(); - return self; - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -UT_CMusUiEventController::~UT_CMusUiEventController() - { - // NOP - } - - -// ----------------------------------------------------------------------------- -// Default constructor -// ----------------------------------------------------------------------------- -// -UT_CMusUiEventController::UT_CMusUiEventController() - { - // NOP - } - - -// ----------------------------------------------------------------------------- -// Second phase construct -// ----------------------------------------------------------------------------- -// -void UT_CMusUiEventController::ConstructL() - { - // The ConstructL from the base class CEUnitTestSuiteClass must be called. - // It generates the test case table. - CEUnitTestSuiteClass::ConstructL(); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void UT_CMusUiEventController::SetupL() - { - _LIT( KPath, "\\private\\1000af5a\\" ); - iVideoFolder = KPath().AllocL(); - - //MultimediaSharingSettings::iVideoFolder = iVideoFolder; - MultimediaSharingSettings::iAutoRecord = MusSettingsKeys::EAutoRecordOff; - MultimediaSharingSettings::iVideoLocation = 2; - - _LIT( KReturn, "savedfilename" ); - _iReturnValue = KReturn().AllocL(); - StringLoader::iReturnValue = _iReturnValue; - - - iEventObserver = new (ELeave) CMusUiEventObserverAdapter(); - EUNIT_ASSERT( iEventObserver ); - - iLiveSharingObserverAdapter = new (ELeave) CMusUiLiveSharingObserverAdapter(); - EUNIT_ASSERT( iLiveSharingObserverAdapter ); - - - RProperty::iIntProperty = 0; - RProperty::iErrorCode = KErrNone; - - - iLiveSharingController = CMusUiLiveSharingController::NewL( iLiveSharingObserverAdapter, TRect( 0,0,100,100)); - iEventController = static_cast - ( iLiveSharingController ); - - EUNIT_ASSERT( iEventController ); - iEventController->SetEventObserver( iEventObserver ); - EUNIT_ASSERT( iEventController->iObserver == iEventObserver ); - - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void UT_CMusUiEventController::Teardown() - { - delete iLiveSharingController; - iEventController = NULL; - delete iEventObserver; - delete iLiveSharingObserverAdapter; - - delete iVideoFolder; - iVideoFolder = NULL; - //MultimediaSharingSettings::iVideoFolder = NULL; - - delete _iReturnValue ; - _iReturnValue = NULL; - // StringLoader::iReturnValue = NULL; - //StringLoader::Cleanup(); - //MultimediaSharingSettings::Cleanup(); - - } - - -// TEST CASES - -void UT_CMusUiEventController::UT_CMusUiEventController_ResourcePropertyChangedL() - { - // test for setting status - - // Camera availability - iEventController->iCameraAvailibilityInProgress = EFalse; - iEventController->iCameraAvailable = TAvailability(1); - iEventController->ResourcePropertyChanged( KCameraAvailability, 0 ); - EUNIT_ASSERT( iEventController->iCameraAvailable == 0 ); - EUNIT_ASSERT( iEventController->iCameraAvailibilityInProgress == EFalse ); - - _LIT( KRes, "address" ); // Needed for fake, MUS_LOG leaves if null - iLiveSharingController->iAddress = KRes().AllocL(); - iEventController->iCameraAvailibilityInProgress = ETrue; - iEventController->iCameraAvailable = TAvailability(0); - iEventController->ResourcePropertyChanged( KCameraAvailability, 1 ); - EUNIT_ASSERT( iEventController->iCameraAvailable == 1 ); - EUNIT_ASSERT( iEventController->iCameraAvailibilityInProgress == EFalse ); - EUNIT_ASSERT( iLiveSharingObserverAdapter->iCalledObserver == CMusUiLiveSharingObserverAdapter::EShowWaitDialogL ); - - - // Keypad availablity - iEventController->iKeypadAvailable = TAvailability(0); - iEventController->ResourcePropertyChanged( KKeypadAvailability, 2 ); - EUNIT_ASSERT( iEventController->iKeypadAvailable == 2 ); - - // Videoplayer availability - iEventController->iVideoPlayerAvailable = TAvailability(0); - iEventController->ResourcePropertyChanged( KVideoPlayerAvailability, 3 ); - EUNIT_ASSERT( iEventController->iVideoPlayerAvailable == 3 ); - - //Other case - iEventController->ResourcePropertyChanged( -99, 0 ); - EUNIT_ASSERT( iEventController->iCameraAvailable == 1 ); - EUNIT_ASSERT( iEventController->iKeypadAvailable == 2 ); - EUNIT_ASSERT( iEventController->iVideoPlayerAvailable == 3 ); - - } - - -void UT_CMusUiEventController::UT_CMusUiEventController_SessionPropertyChangedL() - { - - iEventController->SessionPropertyChanged( KStatus, ESipRegistrationPending ); - EUNIT_ASSERT( iEventController->iSipRegistrationPending ); - - // TODO: Cannot test UpdateContactL it leaves CleanupStack::PopAndDestroy function - // Need to do changes on code - iEventController->SessionPropertyChanged( KContactId, 0 ); - - } - - -void UT_CMusUiEventController::UT_CMusUiEventController_SessionPropertyChanged2L() - { - // TODO: Is this functions alive? - // EUNIT_ASSERT( EFalse ); - } - - -void UT_CMusUiEventController::UT_CMusUiEventController_HandleErrorL() - { - - iEventController->HandleError( KErrUnknown ); - EUNIT_ASSERT( iEventObserver->iCalledObserver == CMusUiEventObserverAdapter::EHandleError ); - EUNIT_ASSERT( iEventObserver->iHandleErrorReason == KErrUnknown ); - - } - -void UT_CMusUiEventController::UT_CMusUiEventController_UpdateBitmapL() - { - delete iEventController->iContactBitmap; - iEventController->iContactBitmap = NULL; - CFbsBitmap* bitmap = new (ELeave) CFbsBitmap(); - iEventController->UpdateBitmap( bitmap ); - EUNIT_ASSERT( iEventController->iContactBitmap == bitmap ); - } - - -void UT_CMusUiEventController::UT_CMusUiEventController_SetEventObserverL() - { - // Tested in SetupL(); - EUNIT_ASSERT( ETrue ); - } - - -void UT_CMusUiEventController::UT_CMusUiEventController_HandleForegroundEventLL() - { - // Initalization - iLiveSharingController->iConnectionEstablished = ETrue; // Need for testing - iLiveSharingObserverAdapter->iErrorCode = KErrNone; - - // Enable display - iEventController->HandleForegroundEventL( ETrue ); - EUNIT_ASSERT( iLiveSharingController->iSession->iDisplayEnabled ); - EUNIT_ASSERT( iLiveSharingController->iSession->iPlaying ); - EUNIT_ASSERT( iEventController->iPlaying ); - EUNIT_ASSERT( iLiveSharingObserverAdapter->iCalledObserver == CMusUiLiveSharingObserverAdapter::EShowNaviPaneIconL ); - EUNIT_ASSERT( iLiveSharingObserverAdapter->iIcon == EMusUiNaviIconPlay ); - - // Disable display - iEventController->HandleForegroundEventL( EFalse ); - EUNIT_ASSERT( !iLiveSharingController->iSession->iDisplayEnabled ); - EUNIT_ASSERT( !iLiveSharingController->iSession->iPlaying ); - EUNIT_ASSERT( !iEventController->iPlaying ); - EUNIT_ASSERT( iLiveSharingObserverAdapter->iCalledObserver == CMusUiLiveSharingObserverAdapter::EShowNaviPaneIconL ); - EUNIT_ASSERT( iLiveSharingObserverAdapter->iIcon == EMusUiNaviIconPause ); - - } - - -void UT_CMusUiEventController::UT_CMusUiEventController_SetCameraStatusL() - { - iEventController->iCameraAvailable = TAvailability( 0 ); - iEventController->SetCameraStatus( TAvailability( 2 ) ); - EUNIT_ASSERT( iEventController->iCameraAvailable == 2 ); - } - - -void UT_CMusUiEventController::UT_CMusUiEventController_SetKeypadStatusL() - { - iEventController->iKeypadAvailable = TAvailability(0); - iEventController->SetKeypadStatus( TAvailability( 2 ) ); - EUNIT_ASSERT( iEventController->iKeypadAvailable == 2 ); - } - - -void UT_CMusUiEventController::UT_CMusUiEventController_SetVideoPlayerStatusL() - { - iEventController->iVideoPlayerAvailable = TAvailability(0); - iEventController->SetVideoPlayerStatus( TAvailability( 3 ) ); - EUNIT_ASSERT( iEventController->iVideoPlayerAvailable == 3 ); - } - - -void UT_CMusUiEventController::UT_CMusUiEventController_SetCameraAvailabilityInProgressL() - { - iEventController->iCameraAvailibilityInProgress = 0; - iEventController->SetCameraAvailabilityInProgress( 1 ); - EUNIT_ASSERT( iEventController->iCameraAvailibilityInProgress == 1 ); - } - - -void UT_CMusUiEventController::UT_CMusUiEventController_CameraAvailableL() - { - iEventController->iCameraAvailable = TAvailability( 2 ); - EUNIT_ASSERT( iEventController->CameraAvailable() == 2 ); - } - - -void UT_CMusUiEventController::UT_CMusUiEventController_KeypadAvailableL() - { - iEventController->iKeypadAvailable = TAvailability( 2 ); - EUNIT_ASSERT( iEventController->KeypadAvailable() == 2 ); - } - - -void UT_CMusUiEventController::UT_CMusUiEventController_VideoPlayerAvailableL() - { - iEventController->iVideoPlayerAvailable = TAvailability( 2 ); - EUNIT_ASSERT( iEventController->VideoPlayerAvailable() == 2 ); - } - - -void UT_CMusUiEventController::UT_CMusUiEventController_CameraAvailibilityInProgressL() - { - iEventController->iCameraAvailibilityInProgress = 1; - EUNIT_ASSERT( iEventController->CameraAvailibilityInProgress() == 1 ); - } - - -void UT_CMusUiEventController::UT_CMusUiEventController_MusRemoteSipAddressValueL() - { - _LIT( KRes, "remote_address"); - delete iEventController->iRemoteSipAddress; - iEventController->iRemoteSipAddress = KRes().AllocL(); - EUNIT_ASSERT( iEventController->MusRemoteSipAddressValue().Compare( KRes ) == 0 ); - } - - -void UT_CMusUiEventController::UT_CMusUiEventController_MusProposalAddressValueL() - { - _LIT( KRes, "remote_address"); - delete iEventController->iRemoteSipAddressProposal; - iEventController->iRemoteSipAddressProposal = KRes().AllocL(); - EUNIT_ASSERT( iEventController->MusProposalAddressValue().Compare( KRes ) == 0 ); - } - - -void UT_CMusUiEventController::UT_CMusUiEventController_MusContactNameL() - { - _LIT( KRes, "remote_address"); - delete iEventController->iContactName; - iEventController->iContactName = KRes().AllocL(); - EUNIT_ASSERT( iEventController->MusContactName().Compare( KRes ) == 0 ); - } - - -void UT_CMusUiEventController::UT_CMusUiEventController_MusContactBitmapL() - { - delete iEventController->iContactBitmap; - iEventController->iContactBitmap = new (ELeave) CFbsBitmap(); - EUNIT_ASSERT( iEventController->MusContactBitmap() == iEventController->iContactBitmap ); - } - - -void UT_CMusUiEventController::UT_CMusUiEventController_MusVideoCodecValueL() - { - _LIT( KRes, "codec_value"); - delete iEventController->iVideoCodec; - iEventController->iVideoCodec = KRes().AllocL(); - EUNIT_ASSERT( iEventController->MusVideoCodecValue().Compare( KRes ) == 0 ); - } - - -void UT_CMusUiEventController::UT_CMusUiEventController_MusTelNumberValueL() - { - _LIT( KRes, "telnumber"); - delete iEventController->iTelNumber; - iEventController->iTelNumber = KRes().AllocL(); - EUNIT_ASSERT( iEventController->MusTelNumberValue().Compare( KRes ) == 0 ); - } - - -void UT_CMusUiEventController::UT_CMusUiEventController_SipProfileIdL() - { - iEventController->iSipProfileId = 99; - EUNIT_ASSERT( iEventController->SipProfileId() == 99 ); - } - - -void UT_CMusUiEventController::UT_CMusUiEventController_SipRegistrationPendingL() - { - - iEventController->iSipRegistrationPending = ETrue; - EUNIT_ASSERT( iEventController->SipRegistrationPending() ); - } - - -void UT_CMusUiEventController::UT_CMusUiEventController_SessionTimeFormattedL() - { - - // Localized time format like "00:00:00" - - //TLocale locale; - //locale.TimeSeparator( 2 ) - - //EUNIT_ASSERT( iEventController->MusTelNumberValue().Compare( iEventController->iTelNumber->Des() ) ); - EUNIT_ASSERT( EFalse ); - } - - -void UT_CMusUiEventController::UT_CMusUiEventController_SaveContactL() - { - - //iEventController->iContactId = TContactItemId( 1 ); - - //iEventController->SaveContact(); - //EUNIT_ASSERT( iEventObserver->iActivatedContactId == TContactItemId( 1 ) ); - - EUNIT_ASSERT( EFalse ); - } - - -void UT_CMusUiEventController::UT_CMusUiEventController_HandleExitLL() - { - - - - EUNIT_ASSERT( EFalse ); - } - - -void UT_CMusUiEventController::UT_CMusUiEventController_InspectKeypadLL() - { - - // Initalize - iLiveSharingObserverAdapter->iErrorCode = KErrNone; - iEventObserver->iErrorCode = KErrNone; - - - // Basic case cannot test, nothing changes - // iEventController->iKeypadAvailable = EAvailable; - // iEventController->InspectKeypadL(); - - - // case EAvailableInLandscapeOrientation - iEventController->iKeypadAvailable = EAvailableInLandscapeOrientation; - iEventController->InspectKeypadL(); - EUNIT_ASSERT( iLiveSharingObserverAdapter->iCalledObserver == CMusUiLiveSharingObserverAdapter::EChangeOrientationL ); - EUNIT_ASSERT( iLiveSharingObserverAdapter->iOrientation == CAknAppUiBase::EAppUiOrientationLandscape ); - - - // case EAvailableInPortraitOrientation - iEventController->iKeypadAvailable = EAvailableInPortraitOrientation; - iEventController->InspectKeypadL(); - EUNIT_ASSERT( iLiveSharingObserverAdapter->iCalledObserver == CMusUiLiveSharingObserverAdapter::EChangeOrientationL ); - EUNIT_ASSERT( iLiveSharingObserverAdapter->iOrientation == CAknAppUiBase::EAppUiOrientationPortrait ); - - // case ENotDefined - iEventController->iKeypadAvailable = ENotDefined; - iEventController->InspectKeypadL(); - EUNIT_ASSERT( iEventObserver->iCalledObserver == CMusUiEventObserverAdapter::EHandleExitL ); - - // case ENotAvailable - iEventController->iKeypadAvailable = ENotAvailable; - iEventController->InspectKeypadL(); - EUNIT_ASSERT( iEventObserver->iCalledObserver == CMusUiEventObserverAdapter::EHandleExitL ); - - - } - - -void UT_CMusUiEventController::UT_CMusUiEventController_UpdateContactLL() - { - EUNIT_ASSERT( EFalse ); - } - - -void UT_CMusUiEventController::UT_CMusUiEventController_UpdateContactNameL() - { - EUNIT_ASSERT( EFalse ); - } - - -void UT_CMusUiEventController::UT_CMusUiEventController_UpdateContactPictureLL() - { - EUNIT_ASSERT( EFalse ); - } - - -void UT_CMusUiEventController::UT_CMusUiEventController_HandleChangedStatusLL() - { - EUNIT_ASSERT( EFalse ); - } - - - -// TEST TABLE - -EUNIT_BEGIN_TEST_TABLE( - UT_CMusUiEventController, - "UT_CMusUiEventController", - "UNIT" ) - -EUNIT_TEST( - "ResourcePropertyChangedL - test ", - "CMusUiEventController", - "ResourcePropertyChangedL", - "FUNCTIONALITY", - SetupL, UT_CMusUiEventController_ResourcePropertyChangedL, Teardown) - -EUNIT_TEST( - "SessionPropertyChangedL - test ", - "CMusUiEventController", - "SessionPropertyChangedL", - "FUNCTIONALITY", - SetupL, UT_CMusUiEventController_SessionPropertyChangedL, Teardown) - -EUNIT_TEST( - "HandleError - test ", - "CMusUiEventController", - "HandleError", - "FUNCTIONALITY", - SetupL, UT_CMusUiEventController_HandleErrorL, Teardown) - -EUNIT_TEST( - "UpdateBitmap - test ", - "CMusUiEventController", - "UpdateBitmap", - "FUNCTIONALITY", - SetupL, UT_CMusUiEventController_UpdateBitmapL, Teardown) - -EUNIT_TEST( - "SetEventObserver - test ", - "CMusUiEventController", - "SetEventObserver", - "FUNCTIONALITY", - SetupL, UT_CMusUiEventController_SetEventObserverL, Teardown) - -EUNIT_TEST( - "HandleForegroundEventL - test ", - "CMusUiEventController", - "HandleForegroundEventL", - "FUNCTIONALITY", - SetupL, UT_CMusUiEventController_HandleForegroundEventLL, Teardown) - -EUNIT_TEST( - "SetCameraStatus - test ", - "CMusUiEventController", - "SetCameraStatus", - "FUNCTIONALITY", - SetupL, UT_CMusUiEventController_SetCameraStatusL, Teardown) - -EUNIT_TEST( - "SetKeypadStatus - test ", - "CMusUiEventController", - "SetKeypadStatus", - "FUNCTIONALITY", - SetupL, UT_CMusUiEventController_SetKeypadStatusL, Teardown) - -EUNIT_TEST( - "SetVideoPlayerStatus - test ", - "CMusUiEventController", - "SetVideoPlayerStatus", - "FUNCTIONALITY", - SetupL, UT_CMusUiEventController_SetVideoPlayerStatusL, Teardown) - -EUNIT_TEST( - "SetCameraAvailabilityInProgress - test ", - "CMusUiEventController", - "SetCameraAvailabilityInProgress", - "FUNCTIONALITY", - SetupL, UT_CMusUiEventController_SetCameraAvailabilityInProgressL, Teardown) - -EUNIT_TEST( - "EnableLoudspeaker - test ", - "CMusUiEventController", - "EnableLoudspeaker", - "FUNCTIONALITY", - SetupL, UT_CMusUiEventController_SetCameraStatusL, Teardown) - -EUNIT_TEST( - "CameraAvailable - test ", - "CMusUiEventController", - "CameraAvailable", - "FUNCTIONALITY", - SetupL, UT_CMusUiEventController_CameraAvailableL, Teardown) - -EUNIT_TEST( - "KeypadAvailable - test ", - "CMusUiEventController", - "KeypadAvailable", - "FUNCTIONALITY", - SetupL, UT_CMusUiEventController_KeypadAvailableL, Teardown) - -EUNIT_TEST( - "VideoPlayerAvailable - test ", - "CMusUiEventController", - "VideoPlayerAvailable", - "FUNCTIONALITY", - SetupL, UT_CMusUiEventController_VideoPlayerAvailableL, Teardown) - -EUNIT_TEST( - "CameraAvailibilityInProgress - test ", - "CMusUiEventController", - "CameraAvailibilityInProgress", - "FUNCTIONALITY", - SetupL, UT_CMusUiEventController_CameraAvailibilityInProgressL, Teardown) - -EUNIT_TEST( - "MusRemoteSipAddressValue - test ", - "CMusUiEventController", - "MusRemoteSipAddressValue", - "FUNCTIONALITY", - SetupL, UT_CMusUiEventController_MusRemoteSipAddressValueL, Teardown) - -EUNIT_TEST( - "MusProposalAddressValue - test ", - "CMusUiEventController", - "MusProposalAddressValue", - "FUNCTIONALITY", - SetupL, UT_CMusUiEventController_MusProposalAddressValueL, Teardown) - -EUNIT_TEST( - "MusContactName - test ", - "CMusUiEventController", - "MusContactName", - "FUNCTIONALITY", - SetupL, UT_CMusUiEventController_MusContactNameL, Teardown) - -EUNIT_TEST( - "EnableLoudspeakerL - test ", - "CMusUiEventController", - "EnableLoudspeakerL", - "FUNCTIONALITY", - SetupL, UT_CMusUiEventController_SetCameraStatusL, Teardown) - -EUNIT_TEST( - "MusContactBitmap - test ", - "CMusUiEventController", - "MusContactBitmap", - "FUNCTIONALITY", - SetupL, UT_CMusUiEventController_MusContactBitmapL, Teardown) - -EUNIT_TEST( - "MusVideoCodecValue - test ", - "CMusUiEventController", - "MusVideoCodecValue", - "FUNCTIONALITY", - SetupL, UT_CMusUiEventController_MusVideoCodecValueL, Teardown) - -EUNIT_TEST( - "MusTelNumberValue - test ", - "CMusUiEventController", - "MusTelNumberValue", - "FUNCTIONALITY", - SetupL, UT_CMusUiEventController_MusTelNumberValueL, Teardown) - -EUNIT_TEST( - "SipProfileId - test ", - "CMusUiEventController", - "SipProfileId", - "FUNCTIONALITY", - SetupL, UT_CMusUiEventController_SipProfileIdL, Teardown) - -EUNIT_TEST( - "SipRegistrationPending - test ", - "CMusUiEventController", - "SipRegistrationPending", - "FUNCTIONALITY", - SetupL, UT_CMusUiEventController_SipRegistrationPendingL, Teardown) - -EUNIT_TEST( - "SessionTimeFormatted - test ", - "CMusUiEventController", - "SessionTimeFormatted", - "FUNCTIONALITY", - SetupL, UT_CMusUiEventController_SessionTimeFormattedL, Teardown) - -EUNIT_TEST( - "EnableLoudspeakerL - test ", - "CMusUiEventController", - "EnableLoudspeakerL", - "FUNCTIONALITY", - SetupL, UT_CMusUiEventController_SetCameraStatusL, Teardown) - -EUNIT_TEST( - "SaveContact - test ", - "CMusUiEventController", - "SaveContact", - "FUNCTIONALITY", - SetupL, UT_CMusUiEventController_SaveContactL, Teardown) - -EUNIT_TEST( - "SetCameraStatus - test ", - "CMusUiEventController", - "SetCameraStatus", - "FUNCTIONALITY", - SetupL, UT_CMusUiEventController_SetCameraStatusL, Teardown) - -EUNIT_TEST( - "HandleExitL - test ", - "CMusUiEventController", - "HandleExitL", - "FUNCTIONALITY", - SetupL, UT_CMusUiEventController_HandleExitLL, Teardown) - - -EUNIT_TEST( - "InspectKeypadL - test ", - "CMusUiEventController", - "InspectKeypadL", - "FUNCTIONALITY", - SetupL, UT_CMusUiEventController_InspectKeypadLL, Teardown) - -EUNIT_TEST( - "UpdateContactL - test ", - "CMusUiEventController", - "UpdateContactL", - "FUNCTIONALITY", - SetupL, UT_CMusUiEventController_UpdateContactLL, Teardown) - -EUNIT_TEST( - "UpdateContactName - test ", - "CMusUiEventController", - "UpdateContactName", - "FUNCTIONALITY", - SetupL, UT_CMusUiEventController_UpdateContactNameL, Teardown) - -EUNIT_TEST( - "UpdateContactPictureL - test ", - "CMusUiEventController", - "UpdateContactPictureL", - "FUNCTIONALITY", - SetupL, UT_CMusUiEventController_UpdateContactPictureLL, Teardown) - -EUNIT_TEST( - "HandleChangedStatusL - test ", - "CMusUiEventController", - "HandleChangedStatusL", - "FUNCTIONALITY", - SetupL, UT_CMusUiEventController_HandleChangedStatusLL, Teardown) - -EUNIT_END_TEST_TABLE - - -// END OF FILE diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshui/tsrc/ut_ui/src/ut_musuilivesharingcontroller.cpp --- a/mmsharing/mmshui/tsrc/ut_ui/src/ut_musuilivesharingcontroller.cpp Thu Aug 19 09:51:39 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,888 +0,0 @@ -/* -* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - initial contribution. -* -* Contributors: -* -* Description: -* -*/ - - -// INTERNAL INCLUDES -#include "ut_musuilivesharingcontroller.h" -#include "musuilivesharingcontroller.h" -#include "musuilivesharingobserveradapter.h" -//#include "musestubs.h" -//#include "musengtestdefs.h" -#include "musuieventobserveradapter.h" -#include "musuidefinitions.h" -#include - -// SYSTEM INCLUDES -#include -#include - -//#include -//#include - -using namespace NMusResourceApi; - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -UT_CMusUiLiveSharingController* UT_CMusUiLiveSharingController::NewL() - { - UT_CMusUiLiveSharingController* self = UT_CMusUiLiveSharingController::NewLC(); - CleanupStack::Pop( self ); - return self; - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -UT_CMusUiLiveSharingController* UT_CMusUiLiveSharingController::NewLC() - { - UT_CMusUiLiveSharingController* self = new( ELeave ) UT_CMusUiLiveSharingController(); - CleanupStack::PushL( self ); - self->ConstructL(); - return self; - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -UT_CMusUiLiveSharingController::~UT_CMusUiLiveSharingController() - { - // NOP - } - - -// ----------------------------------------------------------------------------- -// Default constructor -// ----------------------------------------------------------------------------- -// -UT_CMusUiLiveSharingController::UT_CMusUiLiveSharingController() - { - // NOP - } - - -// ----------------------------------------------------------------------------- -// Second phase construct -// ----------------------------------------------------------------------------- -// -void UT_CMusUiLiveSharingController::ConstructL() - { - // The ConstructL from the base class CEUnitTestSuiteClass must be called. - // It generates the test case table. - CEUnitTestSuiteClass::ConstructL(); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void UT_CMusUiLiveSharingController::SetupL() - { - - iEventObserver = new (ELeave) CMusUiEventObserverAdapter(); - EUNIT_ASSERT( iEventObserver ); - - iLiveSharingObserverAdapter = new (ELeave) CMusUiLiveSharingObserverAdapter(); - EUNIT_ASSERT( iLiveSharingObserverAdapter ); - - - RProperty::iIntProperty = 0; - RProperty::iErrorCode = KErrNone; - - - iLiveSharingController = CMusUiLiveSharingController::NewL( iLiveSharingObserverAdapter, TRect( 0,0,100,100)); - iEventController = static_cast - ( iLiveSharingController ); - - EUNIT_ASSERT( iEventController ); - iEventController->SetEventObserver( iEventObserver ); - EUNIT_ASSERT( iEventController->iObserver == iEventObserver ); - - - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void UT_CMusUiLiveSharingController::Teardown() - { - delete iLiveSharingController; - iEventController = NULL; - delete iEventObserver; - delete iLiveSharingObserverAdapter; - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void UT_CMusUiLiveSharingController::UT_CMusUiLiveSharingController_StartInvitationLL() - { - - //iLiveSharingController->StartInvitationL(); - //EUNIT_ASSERT( iLiveSharingObserverAdapter->iCalledObserver == CMusUiLiveSharingObserverAdapter::EHandleAsyncEventL ); - //EUNIT_ASSERT( iLiveSharingObserverAdapter->iHandleAsyncEventId == EMusUiAsyncStartInvitation ); - EUNIT_ASSERT( EFalse ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void UT_CMusUiLiveSharingController::UT_CMusUiLiveSharingController_AddressFoundLL() - { - EUNIT_ASSERT( EFalse ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void UT_CMusUiLiveSharingController::UT_CMusUiLiveSharingController_InviteLL() - { - - // Precondititions - iLiveSharingObserverAdapter->iErrorCode = KErrNone; - iEventController->iCameraAvailable = EAvailable; - iEventController->iSipRegistrationPending = EFalse; - - // sip address length > 0 and no separator - _LIT( KRes, "address" ); - delete iEventController->iRemoteSipAddress; - iEventController->iRemoteSipAddress = KRes().AllocL(); - iLiveSharingController->InviteL(); - - EUNIT_ASSERT( iLiveSharingController->iSession->iInvited ); - EUNIT_ASSERT( iLiveSharingObserverAdapter->iCalledObserver == CMusUiLiveSharingObserverAdapter::EShowWaitDialogL ); - - - // sip address length > 0 and separator - _LIT( KRes2, "Address1, Address2, Address3" ); - delete iEventController->iRemoteSipAddress; - iEventController->iRemoteSipAddress = KRes2().AllocL(); - iLiveSharingController->iSession->iInvited = EFalse; - iLiveSharingObserverAdapter->iCalledObserver == CMusUiLiveSharingObserverAdapter::ENone; - - iLiveSharingController->InviteL(); - EUNIT_ASSERT( iLiveSharingController->iSession->iInvited ); - EUNIT_ASSERT( iLiveSharingObserverAdapter->iCalledObserver == CMusUiLiveSharingObserverAdapter::EShowWaitDialogL ); - - - // sip addres length = 0 - _LIT( KRes3, "" ); - delete iEventController->iRemoteSipAddress; - iEventController->iRemoteSipAddress = KRes3().AllocL(); - iLiveSharingController->iSession->iInvited = EFalse; - iLiveSharingObserverAdapter->iCalledObserver == CMusUiLiveSharingObserverAdapter::ENone; - - iLiveSharingController->InviteL(); - EUNIT_ASSERT( iLiveSharingObserverAdapter->iCalledObserver == CMusUiLiveSharingObserverAdapter::EManualAddressEntryL ); - - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void UT_CMusUiLiveSharingController::UT_CMusUiLiveSharingController_InviteL2L() - { - // Precondititions - iLiveSharingObserverAdapter->iErrorCode = KErrNone; - - // registration not pending and triedinvitations > 1 - iEventController->iSipRegistrationPending = EFalse; - iLiveSharingController->iSession->iInvited = EFalse; - iLiveSharingController->iManualAddressTyped = EFalse; - iLiveSharingController->iTriedInvitations = 2; - - _LIT( KRes, "address" ); - iLiveSharingController->InviteL( KRes ); - EUNIT_ASSERT( iLiveSharingController->iSession->iInvited ); - EUNIT_ASSERT( iLiveSharingObserverAdapter->iCalledObserver == CMusUiLiveSharingObserverAdapter::EShowWaitDialogL ); - - - // registration not pending and triedinvitations > 1 - iLiveSharingController->iSession->iErrorCode = KErrArgument; - - iEventController->iSipRegistrationPending = EFalse; - iLiveSharingController->iSession->iInvited = EFalse; - iLiveSharingController->iManualAddressTyped = EFalse; - iLiveSharingController->iTriedInvitations = 2; - - iLiveSharingController->InviteL( KRes ); - EUNIT_ASSERT( iLiveSharingController->iSession->iInvited ); - EUNIT_ASSERT( iLiveSharingObserverAdapter->iCalledObserver == CMusUiLiveSharingObserverAdapter::EHandleExitL ); - - - // registration not pending and triedinvitations = 0 - iLiveSharingController->iSession->iErrorCode = KErrArgument; - - iEventController->iSipRegistrationPending = EFalse; - iLiveSharingController->iSession->iInvited = EFalse; - iLiveSharingController->iManualAddressTyped = EFalse; - iLiveSharingController->iTriedInvitations = 0; - - _LIT( KProposal, "proposal_address" ); - delete iEventController->iRemoteSipAddressProposal; - iEventController->iRemoteSipAddressProposal = KProposal().AllocL(); - - // Manual address entry - iLiveSharingController->InviteL( KRes ); - EUNIT_ASSERT( iLiveSharingController->iSession->iInvited ); - EUNIT_ASSERT( iLiveSharingObserverAdapter->iCalledObserver == CMusUiLiveSharingObserverAdapter::EShowWaitDialogL ); - EUNIT_ASSERT( iLiveSharingController->iTriedInvitations == 1 ); - EUNIT_ASSERT( iLiveSharingObserverAdapter->iAddress->Des().Compare( KProposal ) == 0 ); - - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void UT_CMusUiLiveSharingController::UT_CMusUiLiveSharingController_SetRectL() - { - - TRect rect = TRect( 0,0, 100,100 ); - - iLiveSharingController->iSession->iErrorCode = KErrArgument; - iLiveSharingController->SetRect( rect ); - EUNIT_ASSERT( iLiveSharingObserverAdapter->iCalledObserver == CMusUiLiveSharingObserverAdapter::EHandleError ); - EUNIT_ASSERT( iLiveSharingObserverAdapter->iError == KErrArgument ); - - iLiveSharingController->iSession->iErrorCode = KErrNone; - iLiveSharingController->SetRect( rect ); - EUNIT_ASSERT( iLiveSharingController->iSession->iRect == iLiveSharingController->CenteredRect( rect ) ); - - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void UT_CMusUiLiveSharingController::UT_CMusUiLiveSharingController_CancelInvitationLL() - { - - // Connection established cancel - iLiveSharingController->iSession->iInvited = ETrue; - iLiveSharingController->iConnectionEstablished = ETrue; - iLiveSharingController->iManualAddressTyped = EFalse; - - iLiveSharingController->CancelInvitationL(); - EUNIT_ASSERT( iLiveSharingController->iSession->iInvited ); - EUNIT_ASSERT( iLiveSharingObserverAdapter->iCalledObserver == CMusUiLiveSharingObserverAdapter::EHandleExitL ); - - - // No connection cancel - iLiveSharingController->iSession->iInvited = ETrue; - iLiveSharingController->iConnectionEstablished = EFalse; - iLiveSharingController->iManualAddressTyped = EFalse; - - iLiveSharingController->CancelInvitationL(); - EUNIT_ASSERT( !iLiveSharingController->iSession->iInvited ); - EUNIT_ASSERT( iLiveSharingObserverAdapter->iCalledObserver == CMusUiLiveSharingObserverAdapter::EHandleExitL ); - - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void UT_CMusUiLiveSharingController::UT_CMusUiLiveSharingController_HandleCommandLL() - { - // TODO: - - EUNIT_ASSERT( EFalse ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void UT_CMusUiLiveSharingController::UT_CMusUiLiveSharingController_PlayingL() - { - iLiveSharingController->iPlaying = ETrue; - EUNIT_ASSERT( iLiveSharingController->Playing() ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void UT_CMusUiLiveSharingController::UT_CMusUiLiveSharingController_CurrentZoomLL() - { - iLiveSharingController->iSession->iCurrentZoom = 14; - EUNIT_ASSERT( iLiveSharingController->CurrentZoomL() == 14 ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void UT_CMusUiLiveSharingController::UT_CMusUiLiveSharingController_MinZoomLL() - { - iLiveSharingController->iSession->iCurrentZoom = 13; - EUNIT_ASSERT( iLiveSharingController->CurrentZoomL() == 13 ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void UT_CMusUiLiveSharingController::UT_CMusUiLiveSharingController_MaxZoomLL() - { - iLiveSharingController->iSession->iCurrentZoom = 12; - EUNIT_ASSERT( iLiveSharingController->CurrentZoomL() == 12 ); - } - -//private: // new functions: - - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void UT_CMusUiLiveSharingController::UT_CMusUiLiveSharingController_CenteredRectL() - { - EUNIT_ASSERT( EFalse ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void UT_CMusUiLiveSharingController::UT_CMusUiLiveSharingController_ZoomInLL() - { - iLiveSharingController->iSession->iCurrentZoom = 12; - EUNIT_ASSERT( iLiveSharingController->CurrentZoomL() == 13 ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void UT_CMusUiLiveSharingController::UT_CMusUiLiveSharingController_ZoomOutLL() - { - iLiveSharingController->iSession->iCurrentZoom = 12; - EUNIT_ASSERT( iLiveSharingController->CurrentZoomL() == 11 ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void UT_CMusUiLiveSharingController::UT_CMusUiLiveSharingController_SplitLL() - { - EUNIT_ASSERT( EFalse ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void UT_CMusUiLiveSharingController::UT_CMusUiLiveSharingController_ShowErrorDialogL() - { - iLiveSharingObserverAdapter->iErrorCode = KErrNone; - iLiveSharingController->ShowErrorDialog( 1 ); - EUNIT_ASSERT( iLiveSharingObserverAdapter->iCalledObserver == CMusUiLiveSharingObserverAdapter::EShowErrorDialogL ); - - iLiveSharingObserverAdapter->iErrorCode = KErrNone; - iLiveSharingObserverAdapter->iShowErrorDialogErrorCode = KErrArgument; - iLiveSharingController->ShowErrorDialog( 1 ); - EUNIT_ASSERT( iLiveSharingObserverAdapter->iCalledObserver == CMusUiLiveSharingObserverAdapter::EHandleError ); - - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void UT_CMusUiLiveSharingController::UT_CMusUiLiveSharingController_DismissWaitDialogL() - { - iLiveSharingObserverAdapter->iErrorCode = KErrNone; - iLiveSharingController->DismissWaitDialog(); - EUNIT_ASSERT( iLiveSharingObserverAdapter->iCalledObserver == CMusUiLiveSharingObserverAdapter::EDismissWaitDialogL ); - - iLiveSharingObserverAdapter->iErrorCode = KErrArgument; - iLiveSharingController->DismissWaitDialog(); - EUNIT_ASSERT( iLiveSharingObserverAdapter->iCalledObserver == CMusUiLiveSharingObserverAdapter::EHandleError ); - EUNIT_ASSERT( iLiveSharingObserverAdapter->iError == KErrArgument ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void UT_CMusUiLiveSharingController::UT_CMusUiLiveSharingController_SessionRejectedL() - { - iLiveSharingController->SessionRejected(); - EUNIT_ASSERT( iLiveSharingObserverAdapter->iCalledObserver == CMusUiLiveSharingObserverAdapter::EHandleExitL ); - } // e.g. 603 DECLINE - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void UT_CMusUiLiveSharingController::UT_CMusUiLiveSharingController_SessionBadRequestL() - { - iLiveSharingController->SessionBadRequest(); - EUNIT_ASSERT( ETrue ); - } // 400 - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void UT_CMusUiLiveSharingController::UT_CMusUiLiveSharingController_SessionUnauthorizedL() - { - iLiveSharingController->SessionUnauthorized(); - EUNIT_ASSERT( ETrue ); - } // 401 - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void UT_CMusUiLiveSharingController::UT_CMusUiLiveSharingController_SessionPaymentRequiredL() - { - iLiveSharingController->SessionPaymentRequired(); - EUNIT_ASSERT( ETrue ); - } // 402 - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void UT_CMusUiLiveSharingController::UT_CMusUiLiveSharingController_SessionRecipientNotFoundL() - { - EUNIT_ASSERT( EFalse ); - } // 404 - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void UT_CMusUiLiveSharingController::UT_CMusUiLiveSharingController_SessionProxyAuthenticationRequiredL() - { - iLiveSharingController->SessionProxyAuthenticationRequired(); - EUNIT_ASSERT( ETrue ); - } // 407 - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void UT_CMusUiLiveSharingController::UT_CMusUiLiveSharingController_SessionRequestTimeOutL() - { - iLiveSharingController->SessionRequestTimeOut(); - EUNIT_ASSERT( iLiveSharingObserverAdapter->iCalledObserver == CMusUiLiveSharingObserverAdapter::EHandleExitL ); - } // 408 - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void UT_CMusUiLiveSharingController::UT_CMusUiLiveSharingController_SessionUnsupportedMediaTypeL() - { - iLiveSharingController->SessionUnsupportedMediaType(); - EUNIT_ASSERT( iLiveSharingObserverAdapter->iCalledObserver == CMusUiLiveSharingObserverAdapter::EHandleExitL ); - } // 415 - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void UT_CMusUiLiveSharingController::UT_CMusUiLiveSharingController_SessionRequestCancelledL() - { - iLiveSharingController->SessionRequestCancelled(); - EUNIT_ASSERT( iLiveSharingObserverAdapter->iCalledObserver == CMusUiLiveSharingObserverAdapter::EHandleExitL ); - } // 487 - -//public: // from MMusEngSessionObserver - - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void UT_CMusUiLiveSharingController::UT_CMusUiLiveSharingController_SessionEstablishedL() - { - - iLiveSharingController->SessionEstablished(); - EUNIT_ASSERT( iLiveSharingObserverAdapter->iCalledObserver == CMusUiLiveSharingObserverAdapter::EHandleExitL ); - - - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void UT_CMusUiLiveSharingController::UT_CMusUiLiveSharingController_SessionTerminatedL() - { - iLiveSharingController->SessionTerminated(); - EUNIT_ASSERT( iLiveSharingObserverAdapter->iCalledObserver == CMusUiLiveSharingObserverAdapter::EHandleExitL ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void UT_CMusUiLiveSharingController::UT_CMusUiLiveSharingController_SessionConnectionLostL() - { - iLiveSharingController->SessionConnectionLost(); - EUNIT_ASSERT( iLiveSharingObserverAdapter->iCalledObserver == CMusUiLiveSharingObserverAdapter::EHandleExitL ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void UT_CMusUiLiveSharingController::UT_CMusUiLiveSharingController_SessionFailedL() - { - iLiveSharingController->SessionFailed(); - EUNIT_ASSERT( ETrue ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void UT_CMusUiLiveSharingController::UT_CMusUiLiveSharingController_StreamIdleL() - { - iLiveSharingController->StreamIdle(); - EUNIT_ASSERT( ETrue ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void UT_CMusUiLiveSharingController::UT_CMusUiLiveSharingController_StreamStreamingL() - { - iLiveSharingController->StreamStreaming(); - EUNIT_ASSERT( ETrue ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void UT_CMusUiLiveSharingController::UT_CMusUiLiveSharingController_SessionTimeChangedL() - { - iLiveSharingController->SessionTimeChanged( TTimeIntervalSeconds( 1 ) ); - EUNIT_ASSERT( iLiveSharingObserverAdapter->iCalledObserver == CMusUiLiveSharingObserverAdapter::EUpdateSessionTime ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void UT_CMusUiLiveSharingController::UT_CMusUiLiveSharingController_InactivityTimeoutL() - { - iLiveSharingController->InactivityTimeout(); - EUNIT_ASSERT( iLiveSharingObserverAdapter->iCalledObserver == CMusUiLiveSharingObserverAdapter::EHandleExitL ); - } - - - -// TEST CASES - - -// TEST TABLE - -EUNIT_BEGIN_TEST_TABLE( - UT_CMusUiLiveSharingController, - "UT_CMusUiLiveSharingController", - "UNIT" ) - -EUNIT_TEST( - "StartInvitationL - test ", - "UT_CMusUiLiveSharingController", - "StartInvitationL", - "FUNCTIONALITY", - SetupL, UT_CMusUiLiveSharingController_StartInvitationLL, Teardown) - -EUNIT_TEST( - "AddressFoundL - test ", - "UT_CMusUiLiveSharingController", - "AddressFoundL", - "FUNCTIONALITY", - SetupL, UT_CMusUiLiveSharingController_AddressFoundLL, Teardown) - -EUNIT_TEST( - "InviteL - test ", - "UT_CMusUiLiveSharingController", - "InviteL", - "FUNCTIONALITY", - SetupL, UT_CMusUiLiveSharingController_InviteLL, Teardown) - -EUNIT_TEST( - "InviteL2 - test ", - "UT_CMusUiLiveSharingController", - "InviteL2", - "FUNCTIONALITY", - SetupL, UT_CMusUiLiveSharingController_InviteL2L, Teardown) - -EUNIT_TEST( - "SetRect - test ", - "UT_CMusUiLiveSharingController", - "SetRect", - "FUNCTIONALITY", - SetupL, UT_CMusUiLiveSharingController_SetRectL, Teardown) - -EUNIT_TEST( - "CancelInvitationL - test ", - "UT_CMusUiLiveSharingController", - "CancelInvitationL", - "FUNCTIONALITY", - SetupL, UT_CMusUiLiveSharingController_CancelInvitationLL, Teardown) - -EUNIT_TEST( - "HandleCommandL - test ", - "UT_CMusUiLiveSharingController", - "HandleCommandL", - "FUNCTIONALITY", - SetupL, UT_CMusUiLiveSharingController_HandleCommandLL, Teardown) - -EUNIT_TEST( - "PlayingL - test ", - "UT_CMusUiLiveSharingController", - "PlayingL", - "FUNCTIONALITY", - SetupL, UT_CMusUiLiveSharingController_PlayingL, Teardown) - -EUNIT_TEST( - "CurrentZoomL - test ", - "UT_CMusUiLiveSharingController", - "CurrentZoomL", - "FUNCTIONALITY", - SetupL, UT_CMusUiLiveSharingController_CurrentZoomLL, Teardown) - -EUNIT_TEST( - "MinZoomL - test ", - "UT_CMusUiLiveSharingController", - "MinZoomL", - "FUNCTIONALITY", - SetupL, UT_CMusUiLiveSharingController_MinZoomLL, Teardown) - -EUNIT_TEST( - "MaxZoomL - test ", - "UT_CMusUiLiveSharingController", - "MaxZoomL", - "FUNCTIONALITY", - SetupL, UT_CMusUiLiveSharingController_MaxZoomLL, Teardown) - -EUNIT_TEST( - "CenteredRect - test ", - "UT_CMusUiLiveSharingController", - "CenteredRect", - "FUNCTIONALITY", - SetupL, UT_CMusUiLiveSharingController_CenteredRectL, Teardown) - -EUNIT_TEST( - "ZoomInL - test ", - "UT_CMusUiLiveSharingController", - "ZoomInL", - "FUNCTIONALITY", - SetupL, UT_CMusUiLiveSharingController_ZoomInLL, Teardown) - -EUNIT_TEST( - "ZoomOutL - test ", - "UT_CMusUiLiveSharingController", - "ZoomOutL", - "FUNCTIONALITY", - SetupL, UT_CMusUiLiveSharingController_ZoomOutLL, Teardown) - -EUNIT_TEST( - "SplitL - test ", - "UT_CMusUiLiveSharingController", - "SplitL", - "FUNCTIONALITY", - SetupL, UT_CMusUiLiveSharingController_SplitLL, Teardown) - -EUNIT_TEST( - "ShowErrorDialog - test ", - "UT_CMusUiLiveSharingController", - "ShowErrorDialog", - "FUNCTIONALITY", - SetupL, UT_CMusUiLiveSharingController_ShowErrorDialogL, Teardown) - -EUNIT_TEST( - "DismissWaitDialog - test ", - "UT_CMusUiLiveSharingController", - "DismissWaitDialog", - "FUNCTIONALITY", - SetupL, UT_CMusUiLiveSharingController_DismissWaitDialogL, Teardown) - -EUNIT_TEST( - "SessionRejected - test ", - "UT_CMusUiLiveSharingController", - "SessionRejected", - "FUNCTIONALITY", - SetupL, UT_CMusUiLiveSharingController_SessionRejectedL, Teardown) - -EUNIT_TEST( - "SessionUnauthorized - test ", - "UT_CMusUiLiveSharingController", - "SessionUnauthorized", - "FUNCTIONALITY", - SetupL, UT_CMusUiLiveSharingController_SessionUnauthorizedL, Teardown) - -EUNIT_TEST( - "SessionPaymentRequired - test ", - "UT_CMusUiLiveSharingController", - "SessionPaymentRequired", - "FUNCTIONALITY", - SetupL, UT_CMusUiLiveSharingController_SessionPaymentRequiredL, Teardown) - -EUNIT_TEST( - "SessionRecipientNotFound - test ", - "UT_CMusUiLiveSharingController", - "SessionRecipientNotFound", - "FUNCTIONALITY", - SetupL, UT_CMusUiLiveSharingController_SessionRecipientNotFoundL, Teardown) - -EUNIT_TEST( - "SessionProxyAuthenticationRequired - test ", - "UT_CMusUiLiveSharingController", - "SessionProxyAuthenticationRequired", - "FUNCTIONALITY", - SetupL, UT_CMusUiLiveSharingController_SessionProxyAuthenticationRequiredL, Teardown) - -EUNIT_TEST( - "SessionRequestTimeOut - test ", - "UT_CMusUiLiveSharingController", - "SessionRequestTimeOut", - "FUNCTIONALITY", - SetupL, UT_CMusUiLiveSharingController_SessionRequestTimeOutL, Teardown) - -EUNIT_TEST( - "SessionUnsupportedMediaType - test ", - "UT_CMusUiLiveSharingController", - "SessionUnsupportedMediaType", - "FUNCTIONALITY", - SetupL, UT_CMusUiLiveSharingController_SessionUnsupportedMediaTypeL, Teardown) - -EUNIT_TEST( - "SessionRequestCancelled - test ", - "UT_CMusUiLiveSharingController", - "SessionRequestCancelled", - "FUNCTIONALITY", - SetupL, UT_CMusUiLiveSharingController_SessionRequestCancelledL, Teardown) - -EUNIT_TEST( - "SessionEstablished - test ", - "UT_CMusUiLiveSharingController", - "SessionEstablished", - "FUNCTIONALITY", - SetupL, UT_CMusUiLiveSharingController_SessionEstablishedL, Teardown) - -EUNIT_TEST( - "SessionTerminated - test ", - "UT_CMusUiLiveSharingController", - "SessionTerminated", - "FUNCTIONALITY", - SetupL, UT_CMusUiLiveSharingController_SessionTerminatedL, Teardown) - -EUNIT_TEST( - "SessionConnectionLost - test ", - "UT_CMusUiLiveSharingController", - "SessionConnectionLost", - "FUNCTIONALITY", - SetupL, UT_CMusUiLiveSharingController_SessionConnectionLostL, Teardown) - -EUNIT_TEST( - "SessionFailed - test ", - "UT_CMusUiLiveSharingController", - "SessionFailed", - "FUNCTIONALITY", - SetupL, UT_CMusUiLiveSharingController_SessionFailedL, Teardown) - -EUNIT_TEST( - "StreamIdle - test ", - "UT_CMusUiLiveSharingController", - "StreamIdle", - "FUNCTIONALITY", - SetupL, UT_CMusUiLiveSharingController_StreamIdleL, Teardown) - -EUNIT_TEST( - "StreamStreaming - test ", - "UT_CMusUiLiveSharingController", - "StreamStreaming", - "FUNCTIONALITY", - SetupL, UT_CMusUiLiveSharingController_StreamStreamingL, Teardown) - -EUNIT_TEST( - "SessionTimeChanged - test ", - "UT_CMusUiLiveSharingController", - "SessionTimeChanged", - "FUNCTIONALITY", - SetupL, UT_CMusUiLiveSharingController_SessionTimeChangedL, Teardown) - -EUNIT_TEST( - "InactivityTimeout - test ", - "UT_CMusUiLiveSharingController", - "InactivityTimeout", - "FUNCTIONALITY", - SetupL, UT_CMusUiLiveSharingController_InactivityTimeoutL, Teardown) - -EUNIT_END_TEST_TABLE - -// END OF FILE diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshui/tsrc/ut_ui/src/ut_musuipropertywatch.cpp --- a/mmsharing/mmshui/tsrc/ut_ui/src/ut_musuipropertywatch.cpp Thu Aug 19 09:51:39 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,277 +0,0 @@ -/* -* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - initial contribution. -* -* Contributors: -* -* Description: -* -*/ - - -// INTERNAL INCLUDES -#include "ut_musuipropertywatch.h" -#include "musuipropertywatch.h" -//#include "musestubs.h" -//#include "musengtestdefs.h" -#include "musuitestdefines.h" - -#include "musuipropertyobserveradapter.h" -#include "mussessionproperties.h" - -// SYSTEM INCLUDES -#include -//#include -//#include - - -using namespace NMusSessionApi; - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -UT_CMusUiPropertyWatch* UT_CMusUiPropertyWatch::NewL() - { - UT_CMusUiPropertyWatch* self = UT_CMusUiPropertyWatch::NewLC(); - CleanupStack::Pop( self ); - return self; - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -UT_CMusUiPropertyWatch* UT_CMusUiPropertyWatch::NewLC() - { - UT_CMusUiPropertyWatch* self = new( ELeave ) UT_CMusUiPropertyWatch(); - CleanupStack::PushL( self ); - self->ConstructL(); - return self; - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -UT_CMusUiPropertyWatch::~UT_CMusUiPropertyWatch() - { - // NOP - } - - -// ----------------------------------------------------------------------------- -// Default constructor -// ----------------------------------------------------------------------------- -// -UT_CMusUiPropertyWatch::UT_CMusUiPropertyWatch() - { - // NOP - } - - -// ----------------------------------------------------------------------------- -// Second phase construct -// ----------------------------------------------------------------------------- -// -void UT_CMusUiPropertyWatch::ConstructL() - { - // The ConstructL from the base class CEUnitTestSuiteClass must be called. - // It generates the test case table. - CEUnitTestSuiteClass::ConstructL(); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void UT_CMusUiPropertyWatch::SetupL() - { - // Iniatalize - iPropertyObserver = new (ELeave) CMusUiPropertyObserverAdapter(); - - TUid tmp = { 0 }; // Unit testing dummy - iPropertyWatch = CMusUiPropertyWatch::NewL( *iPropertyObserver, - tmp, - 0 ); // Unit testing dummy - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void UT_CMusUiPropertyWatch::Teardown() - { - delete iPropertyWatch; - delete iPropertyObserver; - } - - - -// TEST CASES - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void UT_CMusUiPropertyWatch::UT_CMusUiPropertyWatch_ReadIntPropertyLL() - { - - // Teesting leave - RProperty::iErrorCode = KErrNotFound; - RProperty::iIntProperty = KMusUiTestPropertyReadInteger; - TInt value; - TRAPD( err, value = CMusUiPropertyWatch::ReadIntPropertyL( KMusUiTestKey ) ); - EUNIT_ASSERT( err == KErrNotFound ); - - // Testing return value - RProperty::iErrorCode = KErrNone; - RProperty::iIntProperty = KMusUiTestPropertyReadInteger; - EUNIT_ASSERT( CMusUiPropertyWatch::ReadIntPropertyL( KMusUiTestKey ) == - KMusUiTestPropertyReadInteger ); - - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void UT_CMusUiPropertyWatch::UT_CMusUiPropertyWatch_ReadDescPropertyLL() - { - // Teesting leave - RProperty::iErrorCode = KErrNotFound; - TRAPD( err, CMusUiPropertyWatch::ReadDescPropertyL( KMusUiTestKey ) ); - EUNIT_ASSERT( err == KErrNotFound ); - - // Testing return value - RProperty::iErrorCode = KErrNone; - HBufC* result = CMusUiPropertyWatch::ReadDescPropertyL( KMusUiTestKey ); - EUNIT_ASSERT( KMusUiTestPropertyReadDesc().Compare( result->Des() ) ); - delete result; - - //EUNIT_ASSERT( EFalse ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void UT_CMusUiPropertyWatch::UT_CMusUiPropertyWatch_DoCancelL() - { - RProperty::iErrorCode = KErrNone; - iPropertyWatch->Cancel(); - EUNIT_ASSERT( RProperty::iCalledFunction == RProperty::ECancel ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void UT_CMusUiPropertyWatch::UT_CMusUiPropertyWatch_RunLL() - { - - // Leave test - RProperty::iErrorCode = KErrNotFound; - iPropertyWatch->Cancel(); - TRAPD( err, iPropertyWatch->RunL() ); - EUNIT_ASSERT( err == KErrNotFound ); - - - // SessionPropertyChanged - RProperty::iErrorCode = KErrNone; - iPropertyWatch->iPropertyKey = KStatus; - iPropertyWatch->Cancel(); - iPropertyWatch->RunL(); - EUNIT_ASSERT( iPropertyObserver->iCalledObserver == - CMusUiPropertyObserverAdapter::ESessionPropertyChanged ); - - - RProperty::iErrorCode = KErrNone; - iPropertyWatch->iPropertyKey = KTelNumber; - iPropertyWatch->Cancel(); - iPropertyWatch->RunL(); - EUNIT_ASSERT( iPropertyObserver->iCalledObserver == - CMusUiPropertyObserverAdapter::EResourcePropertyChanged ); - - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void UT_CMusUiPropertyWatch::UT_CMusUiPropertyWatch_RunErrorL() - { - - // Allways returns KErrNone - RProperty::iErrorCode = KErrNone; - EUNIT_ASSERT( iPropertyWatch->RunError( KErrNotFound ) == KErrNone ); - - // is right observer called - RProperty::iErrorCode = KErrNone; - EUNIT_ASSERT( iPropertyObserver->iCalledObserver == - CMusUiPropertyObserverAdapter::EHandleError ); - } - - - -// TEST TABLE - -EUNIT_BEGIN_TEST_TABLE( - UT_CMusUiPropertyWatch, - "UT_CMusUiPropertyWatch", - "UNIT" ) - -EUNIT_TEST( - "ReadIntPropertyLL - test ", - "CMusUiPropertyWatch", - "ReadIntPropertyLL", - "FUNCTIONALITY", - SetupL, UT_CMusUiPropertyWatch_ReadIntPropertyLL, Teardown) - -EUNIT_TEST( - "ReadDescPropertyLL - test ", - "CMusUiPropertyWatch", - "ReadDescPropertyLL", - "FUNCTIONALITY", - SetupL, UT_CMusUiPropertyWatch_ReadDescPropertyLL, Teardown) - -EUNIT_TEST( - "DoCancelL - test ", - "CMusUiPropertyWatch", - "DoCancelL", - "FUNCTIONALITY", - SetupL, UT_CMusUiPropertyWatch_DoCancelL, Teardown) - -EUNIT_TEST( - "RunLL - test ", - "CMusUiPropertyWatch", - "RunLL", - "FUNCTIONALITY", - SetupL, UT_CMusUiPropertyWatch_RunLL, Teardown) - -EUNIT_TEST( - "RunErrorL - test ", - "CMusUiPropertyWatch", - "RunErrorL", - "FUNCTIONALITY", - SetupL, UT_CMusUiPropertyWatch_RunErrorL, Teardown) - - -EUNIT_END_TEST_TABLE - -// END OF FILE diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshui/tsrc/ut_ui/src/ut_musuireceivecontroller.cpp --- a/mmsharing/mmshui/tsrc/ut_ui/src/ut_musuireceivecontroller.cpp Thu Aug 19 09:51:39 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,758 +0,0 @@ -/* -* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - initial contribution. -* -* Contributors: -* -* Description: -* -*/ - - -// INTERNAL INCLUDES -#include "ut_musuireceivecontroller.h" -#include "musuireceivecontroller.h" -#include "musuireceiveobserveradapter.h" -//#include "musestubs.h" -//#include "musengtestdefs.h" -#include "musuieventobserveradapter.h" -#include "musuidefinitions.h" -#include -#include - -// SYSTEM INCLUDES -#include -#include -#include - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -UT_CMusUiReceiveController* UT_CMusUiReceiveController::NewL() - { - UT_CMusUiReceiveController* self = UT_CMusUiReceiveController::NewLC(); - CleanupStack::Pop( self ); - return self; - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -UT_CMusUiReceiveController* UT_CMusUiReceiveController::NewLC() - { - UT_CMusUiReceiveController* self = new( ELeave ) UT_CMusUiReceiveController(); - CleanupStack::PushL( self ); - self->ConstructL(); - return self; - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -UT_CMusUiReceiveController::~UT_CMusUiReceiveController() - { - // NOP - } - - -// ----------------------------------------------------------------------------- -// Default constructor -// ----------------------------------------------------------------------------- -// -UT_CMusUiReceiveController::UT_CMusUiReceiveController() - { - // NOP - } - - -// ----------------------------------------------------------------------------- -// Second phase construct -// ----------------------------------------------------------------------------- -// -void UT_CMusUiReceiveController::ConstructL() - { - // The ConstructL from the base class CEUnitTestSuiteClass must be called. - // It generates the test case table. - CEUnitTestSuiteClass::ConstructL(); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void UT_CMusUiReceiveController::SetupL() - { - - iEventObserver = new (ELeave) CMusUiEventObserverAdapter(); - EUNIT_ASSERT( iEventObserver ); - - iReceiveObserverAdapter = new (ELeave) CMusUiReceiveObserverAdapter(); - EUNIT_ASSERT( iReceiveObserverAdapter ); - - - RProperty::iIntProperty = 0; - RProperty::iErrorCode = KErrNone; - - - iReceiveController = CMusUiReceiveController::NewL( *iReceiveObserverAdapter, TRect( 0,0,100,100)); - iEventController = static_cast - ( iReceiveController ); - - EUNIT_ASSERT( iEventController ); - iEventController->SetEventObserver( iEventObserver ); - EUNIT_ASSERT( iEventController->iObserver == iEventObserver ); - - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void UT_CMusUiReceiveController::Teardown() - { - delete iReceiveController; - iEventController = NULL; - delete iEventObserver; - delete iReceiveObserverAdapter; - } - - - -// TEST CASES - - - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void UT_CMusUiReceiveController::UT_CMusUiReceiveController_HandleCommandLL() - { - EUNIT_ASSERT( EFalse ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void UT_CMusUiReceiveController::UT_CMusUiReceiveController_SizeChangedL() - { - - TRect rect = TRect( 0,0, 100, 100 ); - - iReceiveController->iSession->iRect = rect; - iReceiveController->SizeChanged( rect ); - EUNIT_ASSERT( iReceiveController->iSession->iRect == iReceiveController->CenteredRect( rect ) ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void UT_CMusUiReceiveController::UT_CMusUiReceiveController_ShowErrorDialogLL() - { - _LIT( KRes, "res" ); - //StringLoader::iReturnValue = KRes().AllocLC(); - iReceiveController->ShowErrorDialogL( 1 ); - EUNIT_ASSERT( iReceiveObserverAdapter->iCalledObserver == CMusUiReceiveObserverAdapter::EShowErrorDialog ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void UT_CMusUiReceiveController::UT_CMusUiReceiveController_HandleIncomingSessionLL() - { - _LIT( KRes, "originator" ); - - // Not initalized - delete iReceiveController->iOriginator; - iReceiveController->iOriginator = NULL; - iReceiveController->HandleIncomingSessionL( KRes ); - EUNIT_ASSERT( iReceiveController->iOriginator->Des().Compare( KRes ) == 0 ); - EUNIT_ASSERT( iReceiveObserverAdapter->iCalledObserver == CMusUiReceiveObserverAdapter::EShowInvitationQueryL ); - - - _LIT( KEmpty, "" ); - // Initalized - delete iReceiveController->iOriginator; - iReceiveController->iOriginator = KEmpty().AllocL(); - iReceiveController->HandleIncomingSessionL( KRes ); - EUNIT_ASSERT( iReceiveController->iOriginator->Des().Compare( KRes ) == 0 ); - EUNIT_ASSERT( iReceiveObserverAdapter->iCalledObserver == CMusUiReceiveObserverAdapter::EShowInvitationQueryL ); - - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void UT_CMusUiReceiveController::UT_CMusUiReceiveController_CancelInvitationLL() - { - iReceiveController->CancelInvitationL(); - EUNIT_ASSERT( !iReceiveController->iSession->iAccepInvitation ); - } - - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void UT_CMusUiReceiveController::UT_CMusUiReceiveController_ContinueInvitationLL() - { - iReceiveController->ContinueInvitationL(); - EUNIT_ASSERT( ETrue ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void UT_CMusUiReceiveController::UT_CMusUiReceiveController_HandleAsyncEventLL() - { - EUNIT_ASSERT( EFalse ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void UT_CMusUiReceiveController::UT_CMusUiReceiveController_ConnectionEstablishedL() - { - iReceiveController->iConnectionEstablished = ETrue; - EUNIT_ASSERT( iReceiveController->ConnectionEstablished() ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void UT_CMusUiReceiveController::UT_CMusUiReceiveController_PlayLL() - { - iReceiveController->PlayL(); - EUNIT_ASSERT( ETrue ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void UT_CMusUiReceiveController::UT_CMusUiReceiveController_PauseLL() - { - iReceiveController->PauseL(); - EUNIT_ASSERT( ETrue ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void UT_CMusUiReceiveController::UT_CMusUiReceiveController_EnableDisplayLL() - { - iReceiveController->iSession->iDisplayEnabled = EFalse; - iReceiveController->EnableDisplayL( ETrue ); - EUNIT_ASSERT( iReceiveController->iSession->iDisplayEnabled ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void UT_CMusUiReceiveController::UT_CMusUiReceiveController_ShowNaviPaneIconLL() - { - iReceiveController->ShowNaviPaneIconL( EMusUiNaviIconPlay ); - EUNIT_ASSERT( iReceiveObserverAdapter->iIcon == EMusUiNaviIconPlay ); - EUNIT_ASSERT( iReceiveObserverAdapter->iVisible ); - EUNIT_ASSERT( iReceiveObserverAdapter->iCalledObserver == CMusUiReceiveObserverAdapter::EShowNaviPaneIconL ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void UT_CMusUiReceiveController::UT_CMusUiReceiveController_ChangeOrientationLL() - { - - iReceiveController->ChangeOrientationL( CAknAppUiBase::EAppUiOrientationPortrait ); - EUNIT_ASSERT( iReceiveObserverAdapter->iOrientation == CAknAppUiBase::EAppUiOrientationPortrait ); - EUNIT_ASSERT( iReceiveObserverAdapter->iCalledObserver == CMusUiReceiveObserverAdapter::EChangeOrientationL ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void UT_CMusUiReceiveController::UT_CMusUiReceiveController_CenteredRectL() - { - - - EUNIT_ASSERT( EFalse ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void UT_CMusUiReceiveController::UT_CMusUiReceiveController_ManualAddressTypedL() - { - EUNIT_ASSERT( !iReceiveController->ManualAddressTyped() ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void UT_CMusUiReceiveController::UT_CMusUiReceiveController_ShowInformationDialogLL() - { - iReceiveController->ShowInformationDialogL( 12 ); - EUNIT_ASSERT( iReceiveObserverAdapter->iResourceId == 12 ); - EUNIT_ASSERT( iReceiveObserverAdapter->iCalledObserver == CMusUiReceiveObserverAdapter::EShowInformationDialogL ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void UT_CMusUiReceiveController::UT_CMusUiReceiveController_ShutdownLL() - { - iReceiveController->HandleExitL(); - EUNIT_ASSERT( iReceiveObserverAdapter->iCalledObserver == CMusUiReceiveObserverAdapter::EHandleExitL ); - } - - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void UT_CMusUiReceiveController::UT_CMusUiReceiveController_IncomingSessionL() - { - EUNIT_ASSERT( EFalse ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void UT_CMusUiReceiveController::UT_CMusUiReceiveController_StreamBufferingL() - { - EUNIT_ASSERT( EFalse ); - } - - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void UT_CMusUiReceiveController::UT_CMusUiReceiveController_SessionEstablishedL() - { - EUNIT_ASSERT( EFalse ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void UT_CMusUiReceiveController::UT_CMusUiReceiveController_SessionTerminatedL() - { - EUNIT_ASSERT( EFalse ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void UT_CMusUiReceiveController::UT_CMusUiReceiveController_SessionConnectionLostL() - { - EUNIT_ASSERT( EFalse ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void UT_CMusUiReceiveController::UT_CMusUiReceiveController_SessionFailedL() - { - iReceiveController->SessionFailed(); - EUNIT_ASSERT( iReceiveObserverAdapter->iCalledObserver == CMusUiReceiveObserverAdapter::EDismissWaitDialogL ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void UT_CMusUiReceiveController::UT_CMusUiReceiveController_StreamIdleL() - { - iReceiveController->StreamIdle(); - EUNIT_ASSERT( ETrue ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void UT_CMusUiReceiveController::UT_CMusUiReceiveController_StreamStreamingL() - { - EUNIT_ASSERT( EFalse ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void UT_CMusUiReceiveController::UT_CMusUiReceiveController_SessionTimeChangedL() - { - iReceiveController->SessionTimeChanged( TTimeIntervalSeconds( 13 ) ); - EUNIT_ASSERT( iReceiveObserverAdapter->iCalledObserver == CMusUiReceiveObserverAdapter::EUpdateSessionTime ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void UT_CMusUiReceiveController::UT_CMusUiReceiveController_InactivityTimeoutL() - { - iReceiveController->HandleExitL(); - EUNIT_ASSERT( iReceiveObserverAdapter->iCalledObserver == CMusUiReceiveObserverAdapter::EHandleExitL ); - } - - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void UT_CMusUiReceiveController::UT_CMusUiReceiveController_InvitationAcceptedLL() - { - EUNIT_ASSERT( EFalse ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void UT_CMusUiReceiveController::UT_CMusUiReceiveController_InvitationRejectedLL() - { - iReceiveController->InvitationRejectedL(); - EUNIT_ASSERT( !iReceiveController->iSession->iAccepInvitation ); - EUNIT_ASSERT( iReceiveObserverAdapter->iCalledObserver == CMusUiReceiveObserverAdapter::EHandleExitL ); - } - - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void UT_CMusUiReceiveController::UT_CMusUiReceiveController_UpdateStatusPaneLL() - { - EUNIT_ASSERT( EFalse ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void UT_CMusUiReceiveController::UT_CMusUiReceiveController_InspectVideoPlayerLL() - { - EUNIT_ASSERT( EFalse ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void UT_CMusUiReceiveController::UT_CMusUiReceiveController_ShowWaitDialogLL() - { - EUNIT_ASSERT( EFalse ); - } - - - - -// TEST TABLE - -EUNIT_BEGIN_TEST_TABLE( - UT_CMusUiReceiveController, - "UT_CMusUiReceiveController", - "UNIT" ) - -EUNIT_TEST( - "HandleCommandLL - test ", - "CMusUiReceiveController", - "HandleCommandLL", - "FUNCTIONALITY", - SetupL, UT_CMusUiReceiveController_HandleCommandLL, Teardown) - -EUNIT_TEST( - "SizeChangedL - test ", - "CMusUiReceiveController", - "SizeChangedL", - "FUNCTIONALITY", - SetupL, UT_CMusUiReceiveController_SizeChangedL, Teardown) - -EUNIT_TEST( - "ShowErrorDialogLL - test ", - "CMusUiReceiveController", - "ShowErrorDialogLL", - "FUNCTIONALITY", - SetupL, UT_CMusUiReceiveController_ShowErrorDialogLL, Teardown) - -EUNIT_TEST( - "HandleIncomingSessionLL - test ", - "CMusUiReceiveController", - "HandleIncomingSessionLL", - "FUNCTIONALITY", - SetupL, UT_CMusUiReceiveController_HandleIncomingSessionLL, Teardown) - -EUNIT_TEST( - "CancelInvitationLL - test ", - "CMusUiReceiveController", - "CancelInvitationLL", - "FUNCTIONALITY", - SetupL, UT_CMusUiReceiveController_CancelInvitationLL, Teardown) - -EUNIT_TEST( - "ContinueInvitationLL - test ", - "CMusUiReceiveController", - "ContinueInvitationLL", - "FUNCTIONALITY", - SetupL, UT_CMusUiReceiveController_ContinueInvitationLL, Teardown) - -EUNIT_TEST( - "HandleAsyncEventLL - test ", - "CMusUiReceiveController", - "HandleAsyncEventLL", - "FUNCTIONALITY", - SetupL, UT_CMusUiReceiveController_HandleAsyncEventLL, Teardown) - -EUNIT_TEST( - "ConnectionEstablishedL - test ", - "CMusUiReceiveController", - "ConnectionEstablishedL", - "FUNCTIONALITY", - SetupL, UT_CMusUiReceiveController_ConnectionEstablishedL, Teardown) - -EUNIT_TEST( - "PlayLL - test ", - "CMusUiReceiveController", - "PlayLL", - "FUNCTIONALITY", - SetupL, UT_CMusUiReceiveController_PlayLL, Teardown) - -EUNIT_TEST( - "PauseLL - test ", - "CMusUiReceiveController", - "PauseLL", - "FUNCTIONALITY", - SetupL, UT_CMusUiReceiveController_PauseLL, Teardown) - -EUNIT_TEST( - "EnableDisplayLL - test ", - "CMusUiReceiveController", - "EnableDisplayLL", - "FUNCTIONALITY", - SetupL, UT_CMusUiReceiveController_EnableDisplayLL, Teardown) - -EUNIT_TEST( - "ShowNaviPaneIconLL - test ", - "CMusUiReceiveController", - "ShowNaviPaneIconLL", - "FUNCTIONALITY", - SetupL, UT_CMusUiReceiveController_ShowNaviPaneIconLL, Teardown) - -EUNIT_TEST( - "ChangeOrientationLL - test ", - "CMusUiReceiveController", - "ChangeOrientationLL", - "FUNCTIONALITY", - SetupL, UT_CMusUiReceiveController_ChangeOrientationLL, Teardown) - -EUNIT_TEST( - "CenteredRectL - test ", - "CMusUiReceiveController", - "CenteredRectL", - "FUNCTIONALITY", - SetupL, UT_CMusUiReceiveController_CenteredRectL, Teardown) - -EUNIT_TEST( - "ManualAddressTypedL - test ", - "CMusUiReceiveController", - "ManualAddressTypedL", - "FUNCTIONALITY", - SetupL, UT_CMusUiReceiveController_ManualAddressTypedL, Teardown) - -EUNIT_TEST( - "ShowInformationDialogLL - test ", - "CMusUiReceiveController", - "ShowInformationDialogLL", - "FUNCTIONALITY", - SetupL, UT_CMusUiReceiveController_ShowInformationDialogLL, Teardown) - -EUNIT_TEST( - "ShowInformationDialogLL - test ", - "CMusUiReceiveController", - "ShowInformationDialogLL", - "FUNCTIONALITY", - SetupL, UT_CMusUiReceiveController_ShowInformationDialogLL, Teardown) - -EUNIT_TEST( - "ShutdownLL - test ", - "CMusUiReceiveController", - "ShutdownLL", - "FUNCTIONALITY", - SetupL, UT_CMusUiReceiveController_ShutdownLL, Teardown) - -EUNIT_TEST( - "IncomingSessionL - test ", - "CMusUiReceiveController", - "IncomingSessionL", - "FUNCTIONALITY", - SetupL, UT_CMusUiReceiveController_IncomingSessionL, Teardown) - -EUNIT_TEST( - "StreamBufferingL - test ", - "CMusUiReceiveController", - "StreamBufferingL", - "FUNCTIONALITY", - SetupL, UT_CMusUiReceiveController_StreamBufferingL, Teardown) - -EUNIT_TEST( - "SessionEstablishedL - test ", - "CMusUiReceiveController", - "SessionEstablishedL", - "FUNCTIONALITY", - SetupL, UT_CMusUiReceiveController_SessionEstablishedL, Teardown) - -EUNIT_TEST( - "SessionTerminatedL - test ", - "CMusUiReceiveController", - "SessionTerminatedL", - "FUNCTIONALITY", - SetupL, UT_CMusUiReceiveController_SessionTerminatedL, Teardown) - -EUNIT_TEST( - "SessionConnectionLostL - test ", - "CMusUiReceiveController", - "SessionConnectionLostL", - "FUNCTIONALITY", - SetupL, UT_CMusUiReceiveController_SessionConnectionLostL, Teardown) - -EUNIT_TEST( - "SessionFailedL - test ", - "CMusUiReceiveController", - "SessionFailedL", - "FUNCTIONALITY", - SetupL, UT_CMusUiReceiveController_SessionFailedL, Teardown) - -EUNIT_TEST( - "StreamIdleL - test ", - "CMusUiReceiveController", - "StreamIdleL", - "FUNCTIONALITY", - SetupL, UT_CMusUiReceiveController_StreamIdleL, Teardown) - -EUNIT_TEST( - "StreamStreamingL - test ", - "CMusUiReceiveController", - "StreamStreamingL", - "FUNCTIONALITY", - SetupL, UT_CMusUiReceiveController_StreamStreamingL, Teardown) - -EUNIT_TEST( - "SessionTimeChangedL - test ", - "CMusUiReceiveController", - "SessionTimeChangedL", - "FUNCTIONALITY", - SetupL, UT_CMusUiReceiveController_SessionTimeChangedL, Teardown) - -EUNIT_TEST( - "InactivityTimeoutL - test ", - "CMusUiReceiveController", - "InactivityTimeoutL", - "FUNCTIONALITY", - SetupL, UT_CMusUiReceiveController_InactivityTimeoutL, Teardown) - -EUNIT_TEST( - "InvitationAcceptedLL - test ", - "CMusUiReceiveController", - "InvitationAcceptedLL", - "FUNCTIONALITY", - SetupL, UT_CMusUiReceiveController_InvitationAcceptedLL, Teardown) - -EUNIT_TEST( - "InvitationRejectedLL - test ", - "CMusUiReceiveController", - "InvitationRejectedLL", - "FUNCTIONALITY", - SetupL, UT_CMusUiReceiveController_InvitationRejectedLL, Teardown) - -EUNIT_TEST( - "UpdateStatusPaneLL - test ", - "CMusUiReceiveController", - "UpdateStatusPaneLL", - "FUNCTIONALITY", - SetupL, UT_CMusUiReceiveController_UpdateStatusPaneLL, Teardown) - -EUNIT_TEST( - "InspectVideoPlayerLL - test ", - "CMusUiReceiveController", - "InspectVideoPlayerLL", - "FUNCTIONALITY", - SetupL, UT_CMusUiReceiveController_InspectVideoPlayerLL, Teardown) - -EUNIT_TEST( - "ShowWaitDialogLL - test ", - "CMusUiReceiveController", - "ShowWaitDialogLL", - "FUNCTIONALITY", - SetupL, UT_CMusUiReceiveController_ShowWaitDialogLL, Teardown) - - -EUNIT_END_TEST_TABLE - -// END OF FILE diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshui/tsrc/ut_ui/src/ut_musuistartcontroller.cpp --- a/mmsharing/mmshui/tsrc/ut_ui/src/ut_musuistartcontroller.cpp Thu Aug 19 09:51:39 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,231 +0,0 @@ -/* -* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - initial contribution. -* -* Contributors: -* -* Description: -* -*/ - - -// INTERNAL INCLUDES -#include "ut_musuistartcontroller.h" -#include "musuistartcontroller.h" - -#include "musuidefinitions.h" -#include "musmanagercommon.h" - -#include "musuieventobserveradapter.h" - -#include - - -// SYSTEM INCLUDES -#include -//#include -//#include - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -UT_CMusUiStartController* UT_CMusUiStartController::NewL() - { - UT_CMusUiStartController* self = UT_CMusUiStartController::NewLC(); - CleanupStack::Pop( self ); - return self; - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -UT_CMusUiStartController* UT_CMusUiStartController::NewLC() - { - UT_CMusUiStartController* self = new( ELeave ) UT_CMusUiStartController(); - CleanupStack::PushL( self ); - self->ConstructL(); - return self; - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -UT_CMusUiStartController::~UT_CMusUiStartController() - { - // NOP - } - - -// ----------------------------------------------------------------------------- -// Default constructor -// ----------------------------------------------------------------------------- -// -UT_CMusUiStartController::UT_CMusUiStartController() - { - // NOP - } - - -// ----------------------------------------------------------------------------- -// Second phase construct -// ----------------------------------------------------------------------------- -// -void UT_CMusUiStartController::ConstructL() - { - // The ConstructL from the base class CEUnitTestSuiteClass must be called. - // It generates the test case table. - CEUnitTestSuiteClass::ConstructL(); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void UT_CMusUiStartController::SetupL() - { - iEventObserver = new (ELeave) CMusUiEventObserverAdapter(); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void UT_CMusUiStartController::Teardown() - { - - delete iEventObserver; - - // Tests are made in construction phase - // Because class implementation is constructor based - - } - - - -// TEST CASES - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void UT_CMusUiStartController::UT_CMusUiStartController_UseCasePropertyLL() - { - EUNIT_ASSERT( iEventObserver ); - - // Testing leave - RProperty::iErrorCode = KErrNotFound; - TRAPD( err, CMusUiStartController::NewL( *iEventObserver ) ); - EUNIT_ASSERT( err == KErrNotFound ); - - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void UT_CMusUiStartController::UT_CMusUiStartController_SetStartViewLL() - { - EUNIT_ASSERT( iEventObserver ); - - // Testing leave - RProperty::iErrorCode = KErrNotFound; - RProperty::iIntProperty = -9999; - iEventObserver->iErrorCode = KErrNone; - TRAPD( err, CMusUiStartController::NewL( *iEventObserver ) ); - EUNIT_ASSERT( err == KErrNotFound ); - - // Testing leave - RProperty::iErrorCode = KErrNone; - RProperty::iIntProperty = -9999; - iEventObserver->iErrorCode = KErrCancel; - TRAP( err, CMusUiStartController::NewL( *iEventObserver ) ); - EUNIT_ASSERT( err == KErrCancel ); - - // case default - - RProperty::iErrorCode = KErrNone; - RProperty::iIntProperty = -9999; - iEventObserver->iErrorCode = KErrNone; - CMusUiStartController* scdefault = CMusUiStartController::NewL( *iEventObserver ); - EUNIT_ASSERT( iEventObserver->iCalledObserver == CMusUiEventObserverAdapter::EHandleExitL ); - - delete scdefault; - - // case EMusLiveVideo - - RProperty::iErrorCode = KErrNone; - RProperty::iIntProperty = EMusLiveVideo; - iEventObserver->iErrorCode = KErrNone; - CMusUiStartController* sclive = CMusUiStartController::NewL( *iEventObserver ); - EUNIT_ASSERT( iEventObserver->iCalledObserver == CMusUiEventObserverAdapter::EActivateLocalMusViewL ); - EUNIT_ASSERT( iEventObserver->iViewId == KMusUidLiveSharingView ); - - delete sclive; - - // case EMusClipVideo - - RProperty::iErrorCode = KErrNone; - RProperty::iIntProperty = EMusClipVideo; - iEventObserver->iErrorCode = KErrNone; - CMusUiStartController* scclip = CMusUiStartController::NewL( *iEventObserver ); - EUNIT_ASSERT( iEventObserver->iCalledObserver == CMusUiEventObserverAdapter::EActivateLocalMusViewL ); - EUNIT_ASSERT( iEventObserver->iViewId == KMusUidClipSharingView ); - - delete scclip; - - // case EMusReceive - - RProperty::iErrorCode = KErrNone; - RProperty::iIntProperty = EMusReceive; - iEventObserver->iErrorCode = KErrNone; - CMusUiStartController* screceive = CMusUiStartController::NewL( *iEventObserver ); - EUNIT_ASSERT( iEventObserver->iCalledObserver == CMusUiEventObserverAdapter::EActivateLocalMusViewL ); - EUNIT_ASSERT( iEventObserver->iViewId == KMusUidReceivingView ); - - delete screceive; - - } - - - - -// TEST TABLE - -EUNIT_BEGIN_TEST_TABLE( - UT_CMusUiStartController, - "UT_CMusUiStartController", - "UNIT" ) - -EUNIT_TEST( - "UseCasePropertyLL - test ", - "CMusUiStartController", - "UseCasePropertyLL", - "FUNCTIONALITY", - SetupL, UT_CMusUiStartController_UseCasePropertyLL, Teardown) - -EUNIT_TEST( - "SetStartViewLL - test ", - "CMusUiStartController", - "SetStartViewLL", - "FUNCTIONALITY", - SetupL, UT_CMusUiStartController_SetStartViewLL, Teardown) - -EUNIT_END_TEST_TABLE - -// END OF FILE diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharinguis.pro --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharinguis.pro Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,32 @@ +# +# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +# All rights reserved. +# This component and the accompanying materials are made available +# under the terms of "Eclipse Public License v1.0" +# which accompanies this distribution, and is available +# at the URL "http://www.eclipse.org/legal/epl-v10.html". +# +# Initial Contributors: +# Nokia Corporation - initial contribution. +# +# Contributors: +# +# Description: +# +# + +TEMPLATE = subdirs +CONFIG += ordered + +symbian: { + :BLD_INF_RULES.prj_exports += "$${LITERAL_HASH}include " + :BLD_INF_RULES.prj_exports += "rom/multimediasharing.iby CORE_APP_LAYER_IBY_EXPORT_PATH(multimediasharing.iby)" + :BLD_INF_RULES.prj_exports += "rom/multimediasharingresources.iby LANGUAGE_APP_LAYER_IBY_EXPORT_PATH(multimediasharingresources.iby)" + :BLD_INF_RULES.prj_exports += "rom/multimediasharing_stub.SIS /epoc32/data/z/system/install/multimediasharing_stub.SIS" + + :BLD_INF_RULES.prj_mmpfiles += $$LITERAL_HASH"include \"mmsharinguis_plat/group/bld.inf\"" + :BLD_INF_RULES.prj_mmpfiles += $$LITERAL_HASH"include \"mmshplugins/group/bld.inf\"" + :BLD_INF_RULES.prj_mmpfiles += $$LITERAL_HASH"include \"mmsharing/mmshapp/help/group/bld.inf\"" +} + +SUBDIRS += mmsharing/group diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharinguis_plat/group/bld.inf --- a/mmsharinguis_plat/group/bld.inf Thu Aug 19 09:51:39 2010 +0300 +++ b/mmsharinguis_plat/group/bld.inf Tue Aug 31 15:12:07 2010 +0300 @@ -17,7 +17,7 @@ */ - +#include "../live_comms_plugin_api/group/bld.inf" #include "../multimedia_sharing_settings_api/group/bld.inf" #include "../multimedia_sharing_resource_api/group/bld.inf" #include "../multimedia_sharing_manager_api/group/bld.inf" diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharinguis_plat/live_comms_plugin_api/group/bld.inf --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharinguis_plat/live_comms_plugin_api/group/bld.inf Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,40 @@ +/* +* Copyright (c) 2006 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: The exported files for Live Comms plug-in API +* +*/ + + +#include + +PRJ_PLATFORMS +DEFAULT + +PRJ_EXPORTS + +../inc/lcaudiocontrol.h APP_LAYER_PLATFORM_EXPORT_PATH(lcaudiocontrol.h) +../inc/lcbrightnesscontrol.h APP_LAYER_PLATFORM_EXPORT_PATH(lcbrightnesscontrol.h) +../inc/lccameracontrol.h APP_LAYER_PLATFORM_EXPORT_PATH(lccameracontrol.h) +../inc/lcdestinationfilecontrol.h APP_LAYER_PLATFORM_EXPORT_PATH(lcdestinationfilecontrol.h) +../inc/lcengine.h APP_LAYER_PLATFORM_EXPORT_PATH(lcengine.h) +../inc/lcengine.inl APP_LAYER_PLATFORM_EXPORT_PATH(lcengine.inl) +../inc/lcsession.h APP_LAYER_PLATFORM_EXPORT_PATH(lcsession.h) +../inc/lcsessionobserver.h APP_LAYER_PLATFORM_EXPORT_PATH(lcsessionobserver.h) +../inc/lcsourcefilecontrol.h APP_LAYER_PLATFORM_EXPORT_PATH(lcsourcefilecontrol.h) +../inc/lcuiprovider.h APP_LAYER_PLATFORM_EXPORT_PATH(lcuiprovider.h) +../inc/lcvideoplayer.h APP_LAYER_PLATFORM_EXPORT_PATH(lcvideoplayer.h) +../inc/lcwindow.h APP_LAYER_PLATFORM_EXPORT_PATH(lcwindow.h) +../inc/lczoomcontrol.h APP_LAYER_PLATFORM_EXPORT_PATH(lczoomcontrol.h) + +PRJ_TESTMMPFILES \ No newline at end of file diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharinguis_plat/live_comms_plugin_api/inc/lcaudiocontrol.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharinguis_plat/live_comms_plugin_api/inc/lcaudiocontrol.h Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,102 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + +#ifndef MLCAUDIOCONTROL_H +#define MLCAUDIOCONTROL_H + +// INCLUDES +#include + +// CLASS DECLARATION +/** +* Class for adjusting the audio related settings +* such as muting and unmuting the audio and changing its volume level. +*/ +class MLcAudioControl + { + public: + + /** + * Checks whether the local audio has been muted. + * @return ETrue if the local audio has been muted, otherwise EFalse. + */ + virtual TBool IsLcAudioMutedL() = 0; + + /** + * Mutes / unmutes the local audio. + * @param aMute ETrue mutes the audio, EFalse unmutes it. + */ + virtual void MuteLcAudioL( TBool aMute ) = 0; + + /** + * Checks whether the microphone has been muted, + * @return ETrue if the microphone has been muted, otherwise EFalse. + */ + virtual TBool IsLcMicMutedL() = 0; + + /** + * Mutes / unmutes the microphone. + * @param aMute ETrue mutes the microphone, EFalse unmutes it. + */ + virtual void MuteLcMicL( TBool aMute ) = 0; + + /** + * Checks whether it is allowed + * to enable the loudspeaker by calling EnableLcLoudspeakerL. + * @return ETrue if enabling the loudspeaker is allowed, otherwise EFalse. + */ + virtual TBool IsEnablingLcLoudspeakerAllowed() = 0; + + /** + * Enables / disables the loudspeaker. + * @pre IsEnablingLcLoudspeakerAllowed() == ETrue + * @param aEnabled ETrue enables the loudspeaker, EFalse disables it. + */ + virtual void EnableLcLoudspeakerL( TBool aEnabled ) = 0; + + /** + * Checks whether the loudspeaker has been enabled. + * @return ETrue if the loudspeaker has been enabled, otherwise EFalse. + */ + virtual TBool IsLcLoudspeakerEnabled() = 0; + + /** + * Returns the current volume level. + * @return the current volume level + */ + virtual TInt LcVolumeL() = 0; + + /** + * Sets the volume level. + * @param aValue the volume level + */ + virtual void SetLcVolumeL( TInt aValue ) = 0; + + /** + * Increases the volume level by one step. + */ + virtual void IncreaseLcVolumeL() = 0; + + /** + * Decreases the volume level by one step. + */ + virtual void DecreaseLcVolumeL() = 0; + }; + +#endif // MLCAUDIOCONTROL_H + +// end of file diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharinguis_plat/live_comms_plugin_api/inc/lcbrightnesscontrol.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharinguis_plat/live_comms_plugin_api/inc/lcbrightnesscontrol.h Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,70 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + +#ifndef MLCBRIGHTNESSCONTROL_H +#define MLCBRIGHTNESSCONTROL_H + +// INCLUDES +#include + +// CLASS DECLARATION +/** +* Class for adjusting the brightness of a video. +*/ +class MLcBrightnessControl + { + public: + + /** + * Returns the minimum brightness level. + * @return the minimum brightness level + */ + virtual TInt MinLcBrightnessL() = 0; + + /** + * Returns the maximum brightness level. + * @return the maximum brightness level + */ + virtual TInt MaxLcBrightnessL() = 0; + + /** + * Returns the current brightness level. + * @return the current brightness level + */ + virtual TInt LcBrightnessL() = 0; + + /** + * Sets the brightness level. + * @pre aValue >= MinLcBrightnessL && aValue <= MaxLcBrightnessL + * @param aValue the new brightness level + */ + virtual void SetLcBrightnessL( TInt aValue ) = 0; + + /** + * Increments the brightness level by one step. + */ + virtual void IncreaseLcBrightnessL() = 0; + + /** + * Decrements the brightness level by one step. + */ + virtual void DecreaseLcBrightnessL() = 0; + }; + +#endif // MLCBRIGHTNESSCONTROL_H + +// end of file diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharinguis_plat/live_comms_plugin_api/inc/lccameracontrol.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharinguis_plat/live_comms_plugin_api/inc/lccameracontrol.h Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,57 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + +#ifndef MLCCAMERACONTROL_H +#define MLCCAMERACONTROL_H + +// INCLUDES +#include + +// CLASS DECLARATION +/** +* Class for querying the device's camera capabilities +* and switching between the device's cameras. +*/ +class MLcCameraControl + { + public: + + /** + * Returns the count of cameras available in the device. + * @return the count of cameras in the device + */ + virtual TInt LcCameraCountL() = 0; + + /** + * Return the index of the currently used camera. + * @return the camera index + */ + virtual TInt CurrentLcCameraIndex() = 0; + + /** + * Switches to the next camera available in the device. + * For example, if there are three cameras in the device, + * the first call switches from camera 1 to camera 2, + * the second call switches from camera 2 to camera 3 and + * the third call switches from camera 3 to camera 1. + */ + virtual void ToggleLcCameraL() = 0; + }; + +#endif // MLCCAMERACONTROL_H + +// end of file diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharinguis_plat/live_comms_plugin_api/inc/lcdestinationfilecontrol.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharinguis_plat/live_comms_plugin_api/inc/lcdestinationfilecontrol.h Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,57 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + +#ifndef MLCDESTINATIONFILECONTROL_H +#define MLCDESTINATIONFILECONTROL_H + +// INCLUDES +#include + +// CLASS DECLARATION +/** +* Class for controlling the usage of a destination file for a player. +*/ +class MLcDestinationFileControl + { + public: + + /** + * Sets the name of the destination file. + * @param aFileName the file name + */ + virtual void SetLcFileNameL( const TFileName& aFileName ) = 0; + + /** + * Returns the name of the destination file. + * @return the file name + */ + virtual TFileName& LcFileName() = 0; + + /** + * Starts or pauses recording + */ + virtual void LcRecordL( TBool aRecord ) = 0; + + /** + * Checks whether recording is paused or not + */ + virtual TBool LcIsRecording() = 0; + }; + +#endif // MLCDESTINATIONFILECONTROL_H + +// end of file diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharinguis_plat/live_comms_plugin_api/inc/lcengine.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharinguis_plat/live_comms_plugin_api/inc/lcengine.h Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,96 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + +#ifndef CLCENGINE_H +#define CLCENGINE_H + +// INCLUDES +#include + +// FORWARD DECLARATIONS +class MLcSession; + +// CONSTANTS +/** Interface UID of this ECOM interface */ +const TUid KLcEngineInterfaceUid = { 0x20021340 }; + +// CLASS DECLARATION +/** +* A base class for ECom plug-ins implementing +* the Live Comms engine plug-in API. +*/ +class CLcEngine : public CBase + { + public: // Enumerations + + /** + * The list of plug-in configurable features. + */ + enum TLcFeature + { + ELcShowInvitingNote, + ELcShowWaitingNote, + ELcShowAcceptQuery, + ELcSendVideoQuery + }; + + public: // Constructors and destructor + + /** + * Loads and creats an instance of the plug-in. + * @param aEngineName used in finding the correct implementation. + * Matched to the IMPLEMENTATION_INFO / default_data of the plug-in. + * @return a new instance of CLcEngine, the ownership is transferred + */ + inline static CLcEngine* NewL( const TDesC8& aEngineName ); + + /** + * Destructor + */ + inline ~CLcEngine(); + + public: // New pure virtual functions + + /** + * Returns a reference to the session created by the plug-in. + * @return the session + */ + virtual MLcSession& Session() = 0; + + public: // New virtual functions + + /** + * Checks if a feature should be used with the particular engine. + * @param aLcFeature the identifier of the feature + * @return ETrue if the feature is supported, otherwise EFalse. + */ + inline virtual TBool IsFeatureSupported( TLcFeature aLcFeature ); + + protected: // Constructors + + inline CLcEngine(); + + public: // Data + + TUid iInstanceKey; + }; + +#include "lcengine.inl" + +#endif // CLCENGINE_H + +// end of file diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharinguis_plat/live_comms_plugin_api/inc/lcengine.inl --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharinguis_plat/live_comms_plugin_api/inc/lcengine.inl Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,67 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + +#ifndef CLCENGINE_INL +#define CLCENGINE_INL + +// INCLUDES +#include + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +CLcEngine* CLcEngine::NewL( const TDesC8& aEngineName ) + { + TEComResolverParams resolverParams; + resolverParams.SetDataType( aEngineName ); + return reinterpret_cast< CLcEngine* >( + REComSession::CreateImplementationL( + KLcEngineInterfaceUid, + _FOFF( CLcEngine, iInstanceKey ), + resolverParams ) ); + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +CLcEngine::CLcEngine() + { + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +CLcEngine::~CLcEngine() + { + REComSession::DestroyedImplementation( iInstanceKey ); + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +TBool CLcEngine::IsFeatureSupported( TLcFeature /*aLcFeature*/ ) + { + return EFalse; + } + +#endif // CLCENGINE_INL + +// End of File diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharinguis_plat/live_comms_plugin_api/inc/lcsession.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharinguis_plat/live_comms_plugin_api/inc/lcsession.h Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,186 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + +#ifndef MLCSESSION_H +#define MLCSESSION_H + +// INCLUDES +#include + +// FORWARD DECLARATIONS +class MLcSessionObserver; +class MLcUiProvider; +class MLcVideoPlayer; + +// CLASS DECLARATION +/** +* A class representing a Live Comms session. +*/ +class MLcSession + { + public: + + /** + * The list of possible session states. + */ + enum TLcSessionState + { + EUninitialized, + EInitialized, + EReceived, + EOpening, + EOpen, + EClosing, + EClosed + }; + + /** + * The possible failure reasons for a session. + */ + enum TLcSessionFailure + { + ENoAnswer = 1, + ERecipientNotFound, + ESessionCancelled, + ESessionRejected, + ERecipientBusy, + ERecipientTemporarilyNotAvailable, + EDiskFull, + EConnectionLost, + EMediaInactivityTimeout, + }; + + /** + * Returns the current session state. + * @return the session state + */ + virtual TLcSessionState LcSessionState() const = 0; + + /** + * Sets the observer for the session related events. + * @param aObserver the observer + */ + virtual void SetLcSessionObserver( MLcSessionObserver* aObserver ) = 0; + + /** + * Sets the callback for the UI prompts. + * @param aUiProvider callback for UI prompts + */ + virtual void SetLcUiProvider( MLcUiProvider* aUiProvider ) = 0; + + /** + * Establishes the session. + * In case of a MO session initiates the session negotiation. + * In case of a MT session accepts the incoming session. + */ + virtual void EstablishLcSessionL() = 0; + + /** + * Terminates the session. + * Can be used for terminating an existing session as well as + * cancelling a MO session that has not yet been established. + * Can also be used for rejecting an incoming session. + */ + virtual void TerminateLcSessionL() = 0; + + /** + * Returns the video player for the received media. + * Is present if the session contains video + * received from the remote participant. + * @return the remote video player or NULL if not present + */ + virtual MLcVideoPlayer* RemoteVideoPlayer() = 0; + + /** + * Returns the video player for the media that is being sent. + * Is present if the session contains outgoing video. + * @return the local video player or NULL if not present + */ + virtual MLcVideoPlayer* LocalVideoPlayer() = 0; + + /** + * Returns the own display name for the session. + * @return the local display name or KNullDesC if local + * display name is not known + */ + virtual const TDesC& LocalDisplayName() = 0; + + /** + * Returns the remote party's display name for the session. + * @return the remote display name or KNullDesC if remote + * display name is not known + */ + virtual const TDesC& RemoteDisplayName() = 0; + + /** + * Sets a parameter for the session. + * The parameters can be plug-in specific. + * @param aId the identifier for the parameter + * @param aValue the value for the parameter + */ + virtual TInt SetParameter( TInt aId, TInt aValue ) = 0; + + /** + * Returns a value for a session parameter. + * @param aId the identifier for the parameter + * @return the value for the parameter or an error if not present + */ + virtual TInt ParameterValue( TInt aId ) = 0; + + /** + * Checks whether application should be started in background mode. + * In background mode session will be pre-set up without user + * interaction and will be in paused state. + * @return ETrue if background mode should be used + */ + virtual TBool IsBackgroundStartup() = 0; + + /** + * Engine can be informed about application foreground status via + * this method. + * @param aIsForeground ETrue if application is at foreground, EFalse + * if at background + * @return KErrNone if succesfully handled + */ + virtual TInt SetForegroundStatus( TBool aIsForeground ) = 0; + + /** + * Returns remote party details for the session + * @return remote party details or KNullDesC if those are not known + */ + virtual const TDesC& RemoteDetails() = 0; + + /** + * Updates established session. + * All the changes, if they are not yet delivered, to players, windows + * and session parameters has been commited after the call. + */ + virtual void UpdateLcSessionL() = 0; + + /** + * Send DTMF signals. + * @param aKey Key pressed from dialpad. Key can be [0-9],*,#,A,B,C,D. + * which is 16 key combination of DTMF. + * Send DTMF signals to remote party. + * @return ETrue upon success else EFalse. + */ + virtual TBool SendDialTone( TChar aKey) = 0; + }; + +#endif // MLCSESSION_H + +// end of file diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharinguis_plat/live_comms_plugin_api/inc/lcsessionobserver.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharinguis_plat/live_comms_plugin_api/inc/lcsessionobserver.h Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,95 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + +#ifndef MLCSESSIONOBSERVER_H +#define MLCSESSIONOBSERVER_H + +// INCLUDES +#include + +// FORWARD DECLARATIONS +class MLcSession; +class MLcVideoPlayer; + +// CLASS DECLARATION +/** +* A callback for a Live Comms session related events. +*/ +class MLcSessionObserver + { + public: + + /** + * The state of the session has changed. + * The new state can be obtained from the session. + * @param aSession the session + */ + virtual void StateChanged( MLcSession& aSession ) = 0; + + /** + * The state of the player has changed. + * The new state can be obtained from the player. + * @param aPlayer the player + */ + virtual void StateChanged( MLcVideoPlayer& aPlayer ) = 0; + + /** + * The session has been updated. + * For example a new player has been added. + * @param aSession the updated session + */ + virtual void Updated( MLcSession& aSession ) = 0; + + /** + * The session has been updated. + * For example a new control has been added or + * an existing control has been updated. + * @param aPlayer the updated player + */ + virtual void Updated( MLcVideoPlayer& aPlayer ) = 0; + + /** + * The session has failed. + * @param aSession the failed session + * @param aError the reason for the failure + */ + virtual void Failed( + MLcSession& aSession, + TInt aError ) = 0; + + /** + * The player has failed. + * @param aPlayer the failed player + * @param aError the reason for the failure + */ + virtual void Failed( + MLcVideoPlayer& aPlayer, + TInt aError ) = 0; + + /** + * The session duration time has changed. + * @param aSession the session + * @param aSeconds the current session duration. + */ + virtual void SessionTimeChanged( + MLcSession& aSession, + const TTimeIntervalSeconds& aSeconds ) = 0; + }; + +#endif // MLCSESSIONOBSERVER_H + +// end of file diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharinguis_plat/live_comms_plugin_api/inc/lcsourcefilecontrol.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharinguis_plat/live_comms_plugin_api/inc/lcsourcefilecontrol.h Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,80 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + +#ifndef MLCSOURCEFILECONTROL_H +#define MLCSOURCEFILECONTROL_H + +// INCLUDES +#include + +// CLASS DECLARATION +/** +* Class for controlling the usage of a source file for a player. +*/ +class MLcSourceFileControl + { + public: + + /** + * Sets the name of the source file. + * @param aFileName the file name + */ + virtual void SetLcFileNameL( const TFileName& aFileName ) = 0; + + /** + * Returns the name of the source file. + * @return the file name + */ + virtual TFileName& LcFileName() = 0; + + /** + * Starts or stops fast forwarding the file. + * The file is left paused after stopping the fast forwarding. + * @param aUseFFWD ETrue to start FFWD, EFalse to stop it. + */ + virtual void LcFastForwardL( TBool aUseFFWD ) = 0; + + /** + * Starts or stops fast rewinding the file. + * The file is left paused after stopping the fast rewinding. + * @param aUseFRWD ETrue to start FRWD, EFalse to stop it. + */ + virtual void LcFastRewindL( TBool aUseFRWD ) = 0; + + /** + * Returns duration of the file as time interval. + * @return the duration of the file + */ + virtual TTimeIntervalSeconds LcFileDurationL() = 0; + + /** + * Returns current file position as time interval. + * @return the current position + */ + virtual TTimeIntervalSeconds LcFilePositionL() = 0; + + /** + * Sets the file position as time interval. + * @param aPosition the new position + */ + virtual void SetLcFilePositionL( + const TTimeIntervalSeconds& aPosition ) = 0; + }; + +#endif // MLCSOURCEFILECONTROL_H + +// end of file diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharinguis_plat/live_comms_plugin_api/inc/lcuiprovider.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharinguis_plat/live_comms_plugin_api/inc/lcuiprovider.h Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,74 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + +#ifndef MLCUIPROVIDER_H +#define MLCUIPROVIDER_H + +// INCLUDES +#include +#include + +// CLASS DECLARATION +/** +* A callback for fetching session related information from the end user. +*/ +class MLcUiProvider + { + public: + + /** + * Asks to select the recipient for the session from + * a predefined list of recipients. + * @param aRecipientAddresses the list of possible recipients + * @param aSelectedRecipientAddress on return contains + * the selected recipient + * @return ETrue if the recipient was selected, otherwise EFalse + */ + virtual TBool SelectRecipient( + MDesCArray& aRecipientAddresses, + TDes& aSelectedRecipientAddress ) = 0; + + /** + * Asks to input the recipient for the session. + * @param aRecipientAddress on return contains the recipient address + * @return ETrue if the recipient was inserted, otherwise EFalse + */ + virtual TBool InputRecipient( TDes& aRecipientAddress ) = 0; + + /** + * The application foreground status has to be changed. + * @param aForeground ETrue if application should be brought to + * foreground. + */ + virtual void HandleForegroundStatus( TBool aForeground ) = 0; + + /** + * UI needs to be blocked/unblocked. If engine is processing + * asynchronous operation and cannot handle other actions meanwhile, + * it can ask UI to block user controls until asynchronous operation + * completes. NOTE: session termination is allowed even if blocking + * is active. + * @param aBlocked, ETrue is UI should be blocked, EFalse + * if UI can be unblocked. + */ + virtual void BlockUi( TBool aBlocked ) = 0; + }; + + +#endif // MLCUIPROVIDER_H + +// end of file diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharinguis_plat/live_comms_plugin_api/inc/lcvideoplayer.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharinguis_plat/live_comms_plugin_api/inc/lcvideoplayer.h Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,144 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + +#ifndef MLCVIDEOPLAYER_H +#define MLCVIDEOPLAYER_H + +// INCLUDES +#include + +// FORWARD DECLARATIONS +class MLcWindow; +class MLcCameraControl; +class MLcCamera; +class MLcSourceFileControl; +class MLcDestinationFileControl; +class MLcAudioControl; +class MLcZoomControl; +class MLcBrightnessControl; + +// CLASS DECLARATION +/** +* A class representing a video player and its controls. +*/ +class MLcVideoPlayer + { + public: + + + /** + * The list of possible video player sources. + */ + enum TLcVideoPlayerSource + { + ECameraSource, + EFileSource + }; + + /** + * The list of possible video player states. + */ + enum TLcVideoPlayerState + { + EInit, + EPreparing, + EBuffering, + EPlaying, + EPaused, + EUnavailable + }; + + /** + * Returns the current video player state. + * @return the video player state + */ + virtual TLcVideoPlayerState LcVideoPlayerState() const = 0; + + /** + * Checks whether the video is currently being played. + * @return ETrue if the video is being played, otherwise EFalse. + */ + virtual TBool LcIsPlayingL() = 0; + + /** + * Returns the current video player source. + * @return the video player source. + */ + virtual TLcVideoPlayerSource LcVideoPlayerSourceL() { return ECameraSource; }; + + /** + * Starts to play the source mentioned in the argument + * @aSource : One of the sources in TLcVideoPlayerSource enum. + * default : Play from camera. + */ + virtual void LcPlayL( TLcVideoPlayerSource aSource=ECameraSource ) = 0; + + /** + * Pauses the playing of the video. + */ + virtual void LcPauseL() = 0; + + /** + * Returns the window for the player, if present. + * @return the window for the player or NULL if not present + */ + virtual MLcWindow* LcWindow() = 0; + + /** + * Returns the camera control, + * if the video player uses the device's camera + * as the source of the played video. + * @return the camera control or NULL if not present + */ + virtual MLcCameraControl* LcCameraControl() = 0; + + /** + * Returns the source file control for the video player, + * if the video is played from a local video file. + * @return the source file control or NULL if not present + */ + virtual MLcSourceFileControl* LcSourceFileControl() = 0; + + /** + * Returns the destination file control for the video player, + * if the video is being recorded to a local video file. + * @return the destination file control or NULL if not present + */ + virtual MLcDestinationFileControl* LcDestinationFileControl() = 0; + + /** + * Returns the audio control for the player, if present. + * @return the audio control for the player or NULL if not present + */ + virtual MLcAudioControl* LcAudioControl() = 0; + + /** + * Returns the zoom control for the player, if present. + * @return the zoom control for the player or NULL if not present + */ + virtual MLcZoomControl* LcZoomControl() = 0; + + /** + * Returns the brightness control for the player, if present. + * @return the brightness control for the player or NULL if not present + */ + virtual MLcBrightnessControl* LcBrightnessControl() = 0; + }; + +#endif // MLCVIDEOPLAYER_H + +// end of file diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharinguis_plat/live_comms_plugin_api/inc/lcwindow.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharinguis_plat/live_comms_plugin_api/inc/lcwindow.h Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,82 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + +#ifndef MLCWINDOW_H +#define MLCWINDOW_H + +// INCLUDES +#include + +// CLASS DECLARATION +/** +* Class representing a window for a video player. +*/ +class MLcWindow + { + public: + + /** + * The possible window orientations. + */ + enum TLcWindowOrientation + { + EPortrait, // Normal + ELandscape // 90 degree's clockwise rotation + }; + + /** + * Enables / disables the window into use + * and start / stops to show the video in it. + * @param aEnabled ETrue enables the window, EFalse disables it. + */ + virtual void EnableLcWindowL( TBool aEnable ) = 0; + + /** + * Checks whether the window has been enabled. + * @return ETrue if the window has been enabled, otherwise EFalse. + */ + virtual TBool IsLcWindowEnabled() = 0; + + /** + * Sets the rectangle for the window. + * @param aRect the rectangle for the window + */ + virtual void SetLcWindowRectL( TRect aRect ) = 0; + + /** + * Returns the current rectangle for the window. + * @return the current rectangle for the window + */ + virtual TRect LcWindowRect() = 0; + + /** + * Sets the window orientation. + * @param aOrientation the current window orientation + */ + virtual void SetLcWindowOrientationL( + TLcWindowOrientation aOrientation ) = 0; + + /** + * Returns the current window orientation. + * @return the current window orientation + */ + virtual TLcWindowOrientation LcWindowOrientationL() = 0; + }; + +#endif // MLCWINDOW_H + +// end of file diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharinguis_plat/live_comms_plugin_api/inc/lczoomcontrol.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharinguis_plat/live_comms_plugin_api/inc/lczoomcontrol.h Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,70 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + +#ifndef MLCZOOMCONTROL_H +#define MLCZOOMCONTROL_H + +// INCLUDES +#include + +// CLASS DECLARATION +/** +* Class for controlling the zoom level of a video player. +*/ +class MLcZoomControl + { + public: + + /** + * Returns the minimum zoom value. + * @return the minimum zoom value + */ + virtual TInt MinLcZoomL() = 0; + + /** + * Returns the maximum zoom value. + * @return the maximum zoom value + */ + virtual TInt MaxLcZoomL() = 0; + + /** + * Returns the current value for the zoom. + * @return the current zoom value + */ + virtual TInt LcZoomValueL() = 0; + + /** + * Sets the current zoom level. + * @pre aValue >= MinLcZoomL && aValue <= MaxLcZoomL + * @param aValue the new zoom level + */ + virtual void SetLcZoomValueL( TInt aValue ) = 0; + + /** + * Zooms in by one step. + */ + virtual void LcZoomInL() = 0; + + /** + * Zooms out by one step. + */ + virtual void LcZoomOutL() = 0; + }; + +#endif // MLCZOOMCONTROL_H + +// end of file diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharinguis_plat/multimedia_sharing_manager_api/inc/musmanager.h --- a/mmsharinguis_plat/multimedia_sharing_manager_api/inc/musmanager.h Thu Aug 19 09:51:39 2010 +0300 +++ b/mmsharinguis_plat/multimedia_sharing_manager_api/inc/musmanager.h Tue Aug 31 15:12:07 2010 +0300 @@ -52,6 +52,7 @@ { ESipOptions = 0x1028238D, ESipInviteDesired = 0x10282391, + ESipInviteDesired2WayVideo = 0x10282392, ESipInviteNotDesired = 0x1028238D }; diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharinguis_plat/multimedia_sharing_manager_api/inc/musmanagercommon.h --- a/mmsharinguis_plat/multimedia_sharing_manager_api/inc/musmanagercommon.h Thu Aug 19 09:51:39 2010 +0300 +++ b/mmsharinguis_plat/multimedia_sharing_manager_api/inc/musmanagercommon.h Tue Aug 31 15:12:07 2010 +0300 @@ -61,7 +61,9 @@ EMusClipVideo, // video clip sharing EMusStillImage, // still image sharing EMusReceive, // receive video - EMusContinue // continue running the existing application + EMusContinue, // continue running the existing application + EMusTwoWayVideo, // two-way sharing + EMusReceiveTwoWayVideo // two-way receive video }; /** Contains the possible commands of MultimediaSharing. */ enum TCommandType diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharinguis_plat/multimedia_sharing_settings_api/inc/mussettingskeys.h --- a/mmsharinguis_plat/multimedia_sharing_settings_api/inc/mussettingskeys.h Thu Aug 19 09:51:39 2010 +0300 +++ b/mmsharinguis_plat/multimedia_sharing_settings_api/inc/mussettingskeys.h Tue Aug 31 15:12:07 2010 +0300 @@ -202,19 +202,84 @@ * Contains UID of the encoding device meant to be used. Read by MuS Engine */ const TInt KEncodingDevice( 0x0F ); + + /** + * Defines whether multimediasharing is restricted to CS call type only. + * Default value will be 0 ( EFalse ) means it is allowed in all call types + * for example VOIP and Skype calls. + */ + const TInt KAllowOnlyWithActiveCSCall( 0x10 ); + /** Contains the possible values of KAllowedCSOnly key. */ + enum TAllowedCSOnly + { + EAllowedAllCalls, + EAllowedCSOnly + }; + + /** + * Defines whether multimediasharing is restricted to 3G bearer only. + * Default value will be 0 ( EFalse ) means it is allowed in all bearer types + * for example 3G,WLAN etc. + */ + const TInt KAllowOnlyIn3GNetwork( 0x11 ); + /** Contains the possible values of KAllowed3GOnly key. */ + enum TAllowed3GOnly + { + EAllowedAllBearers, + EAllowed3GOnly + }; + + /** + * Defines which and how cameras are used. The default value + * is EUseCameraSwapping. To disable camera swapping and roll back + * old behaviuor, value must be set to EUseOnlyMainCamera. + * to the menu or to the toolbar. + */ + const TInt KCameraUsage( 0x12 ); + + /** Contains the possible values of KCameraUsage key. */ + enum TUseCamera + { + EUseOnlyMainCamera, + EUseOnlySecondaryCamera, + EUseCameraSwapping + }; + + /** + * Defines whether multimediasharing is supporting 2-way video. The + * default value is EOneWayVideo. + */ + const TInt KVideoDirection( 0x13 ); - /** Defines the type of privcy exchange. - Defines that how are SIP PRIVACY id handled */ - const TInt KPrivacyExchange( 0x10 ); - - enum TPrivacyExchange + /** Contains the possible values of KVideoDirection key. */ + enum TVideoDirection { - EPrivacy = 1, - ENoPrivacy + EOneWayVideo, + ETwoWayVideo }; - + + /** + * Defines whether b=AS and b=TIAS SDP attributes are used. Zero value + * means that usage of TIAS is disabled, only AS will be used (hard coded + * value). Positive value means AS in KBits per second. TIAS value will + * be set to AS multiplied by 1000. + */ + const TInt KVideoBandwidth( 0x14 ); + + /** + * Defines whether multimediasharing is supporting fast startup mode + */ + const TInt KFastStartupMode( 0x15 ); + + /** Contains the possible values of KFastStartupMode key. */ + enum TFastMode + { + EFastModeOn, + EFastModeOff, + EFastModeDisabled + }; } - + #endif // MUSSETTINGSKEYS_H diff -r 33a5d2bbf6fc -r 73a1feb507fb mmshplugins/group/bld.inf --- a/mmshplugins/group/bld.inf Thu Aug 19 09:51:39 2010 +0300 +++ b/mmshplugins/group/bld.inf Tue Aug 31 15:12:07 2010 +0300 @@ -23,6 +23,6 @@ #include "../mmshaoplugin/group/bld.inf" #include "../mmshaiwplugin/group/bld.inf" #include "../mmshsipcrplugin/group/bld.inf" -#include "../mmshsettingsuiplugin/group/bld.inf" +//#include "../mmshsettingsuiplugin/group/bld.inf" #include "../mmshwpadapterplugin/group/bld.inf" //#include "../mmcctranscoder/group/bld.inf" diff -r 33a5d2bbf6fc -r 73a1feb507fb mmshplugins/mmcctranscoder/tsrc/stubs/group/ABLD.BAT --- a/mmshplugins/mmcctranscoder/tsrc/stubs/group/ABLD.BAT Thu Aug 19 09:51:39 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,15 +0,0 @@ -@ECHO OFF - -REM Bldmake-generated batch file - ABLD.BAT -REM ** DO NOT EDIT ** - -perl -S ABLD.PL "\IPAS_Domain\IPAS_Domain\ipappsrv\multimediacommscontroller\mmcctranscoder\tsrc\stubs\group\\" %1 %2 %3 %4 %5 %6 %7 %8 %9 -if errorlevel==1 goto CheckPerl -goto End - -:CheckPerl -perl -v >NUL -if errorlevel==1 echo Is Perl, version 5.003_07 or later, installed? -goto End - -:End diff -r 33a5d2bbf6fc -r 73a1feb507fb mmshplugins/mmcctranscoder/tsrc/ut_transcoder/group/bld.inf --- a/mmshplugins/mmcctranscoder/tsrc/ut_transcoder/group/bld.inf Thu Aug 19 09:51:39 2010 +0300 +++ b/mmshplugins/mmcctranscoder/tsrc/ut_transcoder/group/bld.inf Tue Aug 31 15:12:07 2010 +0300 @@ -24,5 +24,5 @@ PRJ_EXPORTS -PRJ_TESTMMPFILES +PRJ_MMPFILES ut_transcoder.mmp diff -r 33a5d2bbf6fc -r 73a1feb507fb mmshplugins/mmcctranscoder/tsrc/ut_transcoder/group/ut_transcoder.pkg --- a/mmshplugins/mmcctranscoder/tsrc/ut_transcoder/group/ut_transcoder.pkg Thu Aug 19 09:51:39 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,32 +0,0 @@ -; -; Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). -; All rights reserved. -; This component and the accompanying materials are made available -; under the terms of "Eclipse Public License v1.0" -; which accompanies this distribution, and is available -; at the URL "http://www.eclipse.org/legal/epl-v10.html". -; -; Initial Contributors: -; Nokia Corporation - initial contribution. -; -; Contributors: -; -; Description: -; - -;Languages -&EN - -;Header -#{"EUnit: MMSHMTRANSC"},(0x01700000),1,0,0 - -(0x101F7961), 0, 0, 0, {"Series60ProductID"} - -;Localised Vendor name -%{"Nokia"} - -;Unique vendor name -:"Nokia" - -;DLL files -"\epoc32\release\armv5\urel\ut_transcoder.dll"-"c:\sys\bin\ut_transcoder.dll" diff -r 33a5d2bbf6fc -r 73a1feb507fb mmshplugins/mmshaiwplugin/data/10282389.rss --- a/mmshplugins/mmshaiwplugin/data/10282389.rss Thu Aug 19 09:51:39 2010 +0300 +++ b/mmshplugins/mmshaiwplugin/data/10282389.rss Tue Aug 31 15:12:07 2010 +0300 @@ -57,3 +57,8 @@ } }; } + +// end of file + + + diff -r 33a5d2bbf6fc -r 73a1feb507fb mmshplugins/mmshaiwplugin/group/musaiwprovider.mmp --- a/mmshplugins/mmshaiwplugin/group/musaiwprovider.mmp Thu Aug 19 09:51:39 2010 +0300 +++ b/mmshplugins/mmshaiwplugin/group/musaiwprovider.mmp Tue Aug 31 15:12:07 2010 +0300 @@ -52,6 +52,7 @@ // MultimediaSharing libraries LIBRARY musmanagerclient.lib +LIBRARY musindicator.lib // SymbianOS/Series60 libraries LIBRARY aknnotify.lib diff -r 33a5d2bbf6fc -r 73a1feb507fb mmshplugins/mmshaiwplugin/inc/musaiwprovider.h --- a/mmshplugins/mmshaiwplugin/inc/musaiwprovider.h Thu Aug 19 09:51:39 2010 +0300 +++ b/mmshplugins/mmshaiwplugin/inc/musaiwprovider.h Tue Aug 31 15:12:07 2010 +0300 @@ -144,6 +144,9 @@ void OperatorVariantStartUpL( TFileName& aFileName, CAiwMenuPane& aMenuPane, TInt aIndex ); + + void FastModeStartUpL( + TFileName& aFileName, CAiwMenuPane& aMenuPane, TInt aIndex ); void ShowErrorNoteL( TInt aError ); @@ -152,9 +155,16 @@ HBufC8* ErrorNoteText8L( TInt aError, RResourceFile& aResourceFile ); void DoInitialiseL(); - - void DoInitializeMenuPaneL( CAiwMenuPane& aMenuPane, TInt aIndex ); + TBool AvailabilityOk( + MultimediaSharing::TMusAvailabilityStatus aAvailability ) const; + + TBool HiddenFromFastSwapL(); + + TBool IsFastStartupModeL(); + + void StartApplicationL( + CMusManager& aManager, MultimediaSharing::TMusUseCase aUseCase ); private: // data @@ -166,6 +176,8 @@ /** To Differentiate Error and Warning Notes */ TBool iIsWarning ; + + CMusIndicatorApi* iIndicator; }; diff -r 33a5d2bbf6fc -r 73a1feb507fb mmshplugins/mmshaiwplugin/src/musaiwprovider.cpp --- a/mmshplugins/mmshaiwplugin/src/musaiwprovider.cpp Thu Aug 19 09:51:39 2010 +0300 +++ b/mmshplugins/mmshaiwplugin/src/musaiwprovider.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -27,6 +27,8 @@ #include "musresourcefinderutil.h" #include "mussettings.h" #include "mussesseioninformationapi.h" +#include "musindicatorapi.h" +#include "mussessionproperties.h" #include @@ -48,6 +50,7 @@ #include #include #include +#include //////// public -- constructor and destructor //////// @@ -77,8 +80,9 @@ { MUS_LOG( "mus: [AIWPRO] -> CMusAiwProvider::~CMusAiwProvider" ) delete iResourceFileName ; - iResourceFileName = NULL ; - + iResourceFileName = NULL ; + delete iIndicator; + iIndicator = NULL ; MUS_LOG( "mus: [AIWPRO] <- CMusAiwProvider::~CMusAiwProvider" ) } @@ -143,25 +147,7 @@ TInt /* aCascadeId */, const CAiwGenericParamList& /* aInParamList */ ) { - FeatureManager::InitializeLibL(); - TBool support = FeatureManager::FeatureSupported( KFeatureIdMultimediaSharing ); - FeatureManager::UnInitializeLib(); - if( support ) - { - DoInitializeMenuPaneL( aMenuPane, aIndex ); - } - } - - -// ----------------------------------------------------------------------------- -// Initializes menu pane by adding provider-specific menu items. -// ----------------------------------------------------------------------------- -// -void CMusAiwProvider::DoInitializeMenuPaneL( - CAiwMenuPane& aMenuPane, - TInt aIndex) - { - MUS_LOG1( "mus: [AIWPRO] -> CMusAiwProvider::DoInitializeMenuPaneL( %d )", + MUS_LOG1( "mus: [AIWPRO] -> CMusAiwProvider::InitializeMenuPaneL( %d )", aIndex ) if( iResourceFileName == NULL ) @@ -172,7 +158,10 @@ TFileName filename ( *iResourceFileName ); MUS_LOG_TDESC( "mus: [AIWPRO] Resource filename: ", filename ) - if( ApplicationRunningL() ) + // If app running but hidden from fast swap it means that application + // is hidden from user and options menu should look same as + // when application is not yet started + if( ApplicationRunningL() && !HiddenFromFastSwapL() ) { MUS_LOG( "mus: [AIWPRO] Application already running:\ giving _continue sharing_ menu command" ) @@ -191,6 +180,10 @@ { OperatorVariantStartUpL( filename, aMenuPane, aIndex ); } + else if ( IsFastStartupModeL() ) + { + FastModeStartUpL( filename, aMenuPane, aIndex ); + } else { NoVariationStartUpL( filename, aMenuPane, aIndex ); @@ -198,7 +191,7 @@ } - MUS_LOG( "mus: [AIWPRO] <- CMusAiwProvider::DoInitializeMenuPaneL" ) + MUS_LOG( "mus: [AIWPRO] <- CMusAiwProvider::InitializeMenuPaneL" ) } // ----------------------------------------------------------------------------- @@ -209,7 +202,12 @@ void CMusAiwProvider::DoInitialiseL() { MUS_LOG( "mus: [AIWPRO] -> CMusAiwProvider::DoInitialiseL") - + + if ( !iIndicator ) + { + MUS_LOG( "mus: [AIWPRO] : creating indicator") + iIndicator = CMusIndicatorApi::NewL(); + } MUS_LOG( "mus: [AIWPRO] <- CMusAiwProvider::DoInitialiseL") } @@ -252,19 +250,10 @@ 3.When iAvailability plugin says OK ( Based on call,network,settingui item) 4.Also in confrence and hold cases */ - if ( iAvailability == MultimediaSharing::ESipRegistrationPending || - iAvailability == MultimediaSharing::ESipOptionsSent || - iAvailability == MultimediaSharing::EMultimediaSharingAvailable || - iAvailability == MultimediaSharing::EErrCallOnHold || - iAvailability == MultimediaSharing::EErrConferenceCall || - iAvailability == MultimediaSharing::ESipOptionsNotCapable || - iAvailability == MultimediaSharing::ESipOptionsNotSent || - iAvailability == MultimediaSharing::EErrNetwork || - iAvailability == MultimediaSharing::EManualActivation || - iAvailability == MultimediaSharing::EErrConnection || - iAvailability == MultimediaSharing::EErrSipRegistration ) + if ( AvailabilityOk( iAvailability ) ) { - MUS_LOG1( "mus: [AIWPRO] Showing AIW Menu -> iAvailability = %d ",iAvailability ) + MUS_LOG1( "mus: [AIWPRO] Showing AIW Menu -> iAvailability = %d ", + iAvailability ) TInt resourceID = R_MUSAIWPROVIDER_BASIC_CASCADED_SUBMENU ; if ( !FeatureManager::FeatureSupported( KFeatureIdCamera ) ) { @@ -278,7 +267,8 @@ } else { - MUS_LOG1( "mus: [AIWPRO] Not Showing AIW Menu -> iAvailability = %d ",iAvailability ) + MUS_LOG1( "mus: [AIWPRO] Not Showing AIW Menu -> iAvailability = %d ", + iAvailability ) } CleanupStack::PopAndDestroy( manager ); MUS_LOG( "mus: [AIWPRO] <- CMusAiwProvider::NoVariationStartUpL" ) @@ -300,7 +290,8 @@ // should be shown in call menu only if iAvailability plugin returns OK if ( iAvailability == MultimediaSharing::EMultimediaSharingAvailable ) { - MUS_LOG1( "mus: [AIWPRO] Showing AIW Menu -> iAvailability = %d ", iAvailability ) + MUS_LOG1( "mus: [AIWPRO] Showing AIW Menu -> iAvailability = %d ", + iAvailability ) TInt resourceID = R_MUSAIWPROVIDER_BASIC_CASCADED_SUBMENU ; if ( !FeatureManager::FeatureSupported( KFeatureIdCamera ) ) { @@ -314,7 +305,8 @@ } else { - MUS_LOG1( "mus: [AIWPRO] Not Showing AIW Menu -> iAvailability = %d ",iAvailability ) + MUS_LOG1( "mus: [AIWPRO] Not Showing AIW Menu -> iAvailability = %d ", + iAvailability ) } CleanupStack::PopAndDestroy( manager ); @@ -323,6 +315,60 @@ } // ----------------------------------------------------------------------------- +// In fast mode, Multimediasharing Menu items +// should not be shown before options queries have completed. Outcome +// of queries does not matter. +// ----------------------------------------------------------------------------- +// +void CMusAiwProvider::FastModeStartUpL( + TFileName& aFileName, CAiwMenuPane& aMenuPane, TInt aIndex ) + { + MUS_LOG( "mus: [AIWPRO] -> CMusAiwProvider::FastModeStartUpL" ) + + if ( MultimediaSharingSettings::CapabilityQuerySettingL() != + MusSettingsKeys::EParallel ) + { + // If parallel capability query is not enabled, use normal startup as + // capability query is essential for fast session setup + NoVariationStartUpL( aFileName, aMenuPane, aIndex ); + } + else + { + CMusManager* manager = CMusManager::NewLC(); + iAvailability = manager->AvailabilityL(); + + if ( iAvailability == MultimediaSharing::ESipRegistrationPending || + iAvailability == MultimediaSharing::ESipOptionsSent || + !AvailabilityOk( iAvailability ) ) + { + // Need to wait for options to complete + MUS_LOG1( "mus: [AIWPRO] Not Showing AIW Menu -> iAvailability = %d ", + iAvailability ) + } + else + { + // It does not matter what was result of query + MUS_LOG1( "mus: [AIWPRO] Showing AIW Menu -> iAvailability = %d ", + iAvailability ) + TInt resourceID = R_MUSAIWPROVIDER_BASIC_CASCADED_SUBMENU ; + if ( !FeatureManager::FeatureSupported( KFeatureIdCamera ) ) + { + MUS_LOG( "mus: [AIWPRO] Camera Not Available" ) + resourceID = R_MUSAIWPROVIDER_NOCAMERA_CASCADED_SUBMENU ; + } + aMenuPane.AddMenuItemsL( aFileName, + resourceID, + KMusAiwProviderUid, + aIndex ); + } + + CleanupStack::PopAndDestroy( manager ); + } + + MUS_LOG( "mus: [AIWPRO] <- CMusAiwProvider::FastModeStartUpL" ) + } + +// ----------------------------------------------------------------------------- // // ----------------------------------------------------------------------------- // @@ -501,32 +547,29 @@ { MUS_LOG( "mus: [AIWPRO] \ EMusCommandLiveShare: Will now attempt to start Mus." ) - TRAP( error, manager->StartApplicationL( - MultimediaSharing::EMusLiveVideo ) ); + TRAP( error, StartApplicationL( *manager, MultimediaSharing::EMusLiveVideo ) ); break; } case EMusCommandClipShare: { MUS_LOG( "mus: [AIWPRO] \ - EMusCommandClipShare: Will now attempt to start Mus." ) - TRAP( error, manager->StartApplicationL( - MultimediaSharing::EMusClipVideo ) ); + EMusCommandClipShare: Will now attempt to start Mus." ) + TRAP( error, StartApplicationL( *manager, MultimediaSharing::EMusClipVideo ) ); + break; } case EMusCommandImageShare: { MUS_LOG( "mus: [AIWPRO] \ EMusCommandImageShare: Will now attempt to start Mus." ) - TRAP( error, manager->StartApplicationL( - MultimediaSharing::EMusStillImage ) ); + TRAP( error, StartApplicationL( *manager, MultimediaSharing::EMusStillImage ) ); break; } case EMusCommandContinue: { MUS_LOG( "mus: [AIWPRO] \ EMusCommandContinue: Will now attempt to start/continue Mus." ) - TRAP( error, manager->StartApplicationL( - MultimediaSharing::EMusContinue ) ); + TRAP( error, StartApplicationL( *manager, MultimediaSharing::EMusContinue ) ); break; } default: @@ -548,4 +591,129 @@ MUS_LOG( "mus: [AIWPRO] <- CMusAiwProvider::HandleMenuCmdL" ) } +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +TBool CMusAiwProvider::AvailabilityOk( + MultimediaSharing::TMusAvailabilityStatus aAvailability ) const + { + return ( + aAvailability == MultimediaSharing::ESipRegistrationPending || + aAvailability == MultimediaSharing::ESipOptionsSent || + aAvailability == MultimediaSharing::EMultimediaSharingAvailable || + aAvailability == MultimediaSharing::EErrCallOnHold || + aAvailability == MultimediaSharing::EErrConferenceCall || + aAvailability == MultimediaSharing::ESipOptionsNotCapable || + aAvailability == MultimediaSharing::ESipOptionsNotSent || + aAvailability == MultimediaSharing::EErrNetwork || + aAvailability == MultimediaSharing::EManualActivation || + aAvailability == MultimediaSharing::EErrConnection || + aAvailability == MultimediaSharing::EErrSipRegistration ); + } + +// ----------------------------------------------------------------------------- +// App's fastswap visibility status is interesting only in fast mode. +// ----------------------------------------------------------------------------- +// +TBool CMusAiwProvider::HiddenFromFastSwapL() + { + MUS_LOG( "mus: [AIWPRO] -> CMusAiwProvider::HiddenFromFastSwapL" ) + + TBool hidden( EFalse ); + if ( !IsFastStartupModeL() ) + { + MUS_LOG( "mus: [AIWPRO] <- CMusAiwProvider::HiddenFromFastSwapL" ) + return hidden; + } + + const TInt KMusAiwMaxHiddenAppSizeMod = 4; + TBuf16 hiddenList; + TInt err = RProperty::Get( KPSUidUikon, KUikAppHiddenList, hiddenList ); + MUS_LOG1( "mus: [AIWPRO] Hidden list read:%d", err ) + + if ( err == KErrNone ) + { + TBool continueFinding( ETrue ); + MUS_LOG1( "mus: [AIWPRO] Hidden list len:%d", hiddenList.Length() ) + for ( TInt i = 0; i < KMaxHiddenApps && continueFinding; i++ ) + { + // 32-bit uid values are retrieved in two 16-bit parts + __ASSERT_ALWAYS( hiddenList.Length() > i + 1, User::Leave( KErrEof ) ); + TUint32 listValue = hiddenList[ i ] << 16; + listValue += hiddenList[ ++i ]; + // the value NULL marks the end of array -> leave the loop + if ( listValue ) + { + MUS_LOG1( "mus: [AIWPRO] Hidden uid:%d", listValue ) + if ( listValue == KMusUiUid ) + { + hidden = ETrue; + continueFinding = EFalse; + } + } + else + { + // Zero value means ending of list + continueFinding = EFalse; + } + } + } + + MUS_LOG1( "mus: [AIWPRO] <- CMusAiwProvider::HiddenFromFastSwapL:%d", hidden ) + + return hidden; + } + +// ----------------------------------------------------------------------------- +// Check whether fast mode is enabled, take in count that key +// might not be present. +// ----------------------------------------------------------------------------- +// +TBool CMusAiwProvider::IsFastStartupModeL() + { + TBool fastModeEnabled( EFalse ); + MusSettingsKeys::TFastMode fastMode( MusSettingsKeys::EFastModeOff ); + TRAPD( err, fastMode = MultimediaSharingSettings::FastStartupModeL() ); + if ( err == KErrNoMemory ) + { + User::Leave( err ); + } + if ( err == KErrNone ) + { + fastModeEnabled = ( fastMode == MusSettingsKeys::EFastModeOn ); + } + return fastModeEnabled; + } + +// ----------------------------------------------------------------------------- +// If fast mode is enabled and app is running and hidden, it has been started +// with live use-case but user does not know that. If user tries to do +// clip usecase in such situation, use case is just updated and engine +// takes case of bringing hidden application to foreground. +// ----------------------------------------------------------------------------- +// +void CMusAiwProvider::StartApplicationL( + CMusManager& aManager, MultimediaSharing::TMusUseCase aUseCase ) + { + MUS_LOG( "mus: [AIWPRO] -> CMusAiwProvider::StartApplicationL" ) + + TBool startApp( ETrue ); + if ( IsFastStartupModeL() && aUseCase == MultimediaSharing::EMusClipVideo && + ApplicationRunningL() && HiddenFromFastSwapL() ) + { + MUS_LOG( "mus: [AIWPRO] App already running hidden, change only usecase!" ) + User::LeaveIfError( RProperty::Set( + NMusSessionApi::KCategoryUid, NMusSessionApi::KUseCase, aUseCase ) ); + startApp = EFalse; + } + + if ( startApp ) + { + aManager.StartApplicationL( aUseCase ); + } + + MUS_LOG( "mus: [AIWPRO] <- CMusAiwProvider::StartApplicationL" ) + } + // end of file diff -r 33a5d2bbf6fc -r 73a1feb507fb mmshplugins/mmshaiwplugin/tsrc/ut_aiwplugin/group/bld.inf --- a/mmshplugins/mmshaiwplugin/tsrc/ut_aiwplugin/group/bld.inf Thu Aug 19 09:51:39 2010 +0300 +++ b/mmshplugins/mmshaiwplugin/tsrc/ut_aiwplugin/group/bld.inf Tue Aug 31 15:12:07 2010 +0300 @@ -15,6 +15,6 @@ * */ -PRJ_TESTMMPFILES +PRJ_MMPFILES ut_musaiwprovider.mmp diff -r 33a5d2bbf6fc -r 73a1feb507fb mmshplugins/mmshaiwplugin/tsrc/ut_aiwplugin/group/ut_aiwprovider.pkg --- a/mmshplugins/mmshaiwplugin/tsrc/ut_aiwplugin/group/ut_aiwprovider.pkg Thu Aug 19 09:51:39 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,32 +0,0 @@ -; -; Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). -; All rights reserved. -; This component and the accompanying materials are made available -; under the terms of "Eclipse Public License v1.0" -; which accompanies this distribution, and is available -; at the URL "http://www.eclipse.org/legal/epl-v10.html". -; -; Initial Contributors: -; Nokia Corporation - initial contribution. -; -; Contributors: -; -; Description: -; - -;Languages -&EN - -;Header -#{"EUnit: MMSHAIWPr"},(0x01700000),1,0,0 - -(0x101F7961), 0, 0, 0, {"Series60ProductID"} - -;Localised Vendor name -%{"Nokia"} - -;Unique vendor name -:"Nokia" - -;DLL files -"\epoc32\release\armv5\urel\ut_musaiwprovider.dll"-"c:\sys\bin\ut_musaiwprovider.dll" diff -r 33a5d2bbf6fc -r 73a1feb507fb mmshplugins/mmshaiwplugin/tsrc/ut_aiwplugin/group/ut_musaiwprovider.mmp --- a/mmshplugins/mmshaiwplugin/tsrc/ut_aiwplugin/group/ut_musaiwprovider.mmp Thu Aug 19 09:51:39 2010 +0300 +++ b/mmshplugins/mmshaiwplugin/tsrc/ut_aiwplugin/group/ut_musaiwprovider.mmp Tue Aug 31 15:12:07 2010 +0300 @@ -17,7 +17,7 @@ // To get the APP_LAYER_SYSTEMINCLUDE-definition #include -#include +#include TARGET ut_musaiwprovider.dll TARGETTYPE dll @@ -25,7 +25,7 @@ TARGETPATH /z/sys/bin UID 0x1000af5a 0x01700a22 -CAPABILITY EUNIT_CAPS +CAPABILITY EUNIT_CAPS VENDORID VID_DEFAULT MACRO UNIT_TESTING @@ -47,8 +47,11 @@ SOURCEPATH ../../../../../tsrc/featmgrstub/src SOURCE FeatMgr.cpp +SOURCEPATH ../../../../../tsrc/propertystub/src +SOURCE e32property.cpp + SOURCEPATH ../../../../../tsrc/musmanagerstub/src -SOURCE musmanagerstub.cpp +SOURCE musmanagerstub.cpp // Test classes SOURCEPATH ../src SOURCE ut_musaiwproviderdllmain.cpp @@ -60,13 +63,27 @@ SOURCE musaiwprovider.cpp +// Centrep Stub +SOURCEPATH ../../../../../tsrc/centralrepositorystub/src +SOURCE centralrepositorystub.cpp + + +// Stup User Includes +USERINCLUDE ../../../../../tsrc/resourcefilestub/inc +USERINCLUDE ../../../../../tsrc/propertystub/inc +USERINCLUDE ../../../../../tsrc/centralrepositorystub/inc + +// Actual User Includes USERINCLUDE ../inc -USERINCLUDE ../../../inc +USERINCLUDE ../../../inc + +// Test Includes. USERINCLUDE ../../../../../tsrc/musmanagerstub/inc USERINCLUDE ../../../../../tsrc/ututils/inc USERINCLUDE ../../../../../inc USERINCLUDE ../../../../../tsrc/Apastub/inc -USERINCLUDE ../../../../../tsrc/resourcefilestub/inc +USERINCLUDE ../../../../../tsrc/featmgrstub/inc + // to replace FeatMgr.h with a stub @@ -78,6 +95,12 @@ // to replace barsc.h with a stub SYSTEMINCLUDE ../../../../../tsrc/resourcefilestub/inc +// to replace RProperty with a stub +SYSTEMINCLUDE ../../../../../tsrc/propertystub/inc + +// Centrep stub +SYSTEMINCLUDE ../../../../../tsrc/centralrepositorystub/inc + // Default system include paths for application layer modules. APP_LAYER_SYSTEMINCLUDE @@ -93,8 +116,7 @@ LIBRARY eikcore.lib LIBRARY eunit.lib LIBRARY charconv.lib -LIBRARY centralrepository.lib - +//LIBRARY centralrepository.lib LIBRARY flogger.lib LIBRARY servicehandler.lib // AIW Consumer API diff -r 33a5d2bbf6fc -r 73a1feb507fb mmshplugins/mmshaiwplugin/tsrc/ut_aiwplugin/inc/ut_musaiwprovider.h --- a/mmshplugins/mmshaiwplugin/tsrc/ut_aiwplugin/inc/ut_musaiwprovider.h Thu Aug 19 09:51:39 2010 +0300 +++ b/mmshplugins/mmshaiwplugin/tsrc/ut_aiwplugin/inc/ut_musaiwprovider.h Tue Aug 31 15:12:07 2010 +0300 @@ -25,6 +25,8 @@ #include class CMusAiwProvider; +class CAiwMenuPane; +class CEikMenuPane; /** * Main plugin class @@ -96,17 +98,23 @@ void UT_CMusAiwProvider_InitializeMenuPaneL4L(); void UT_CMusAiwProvider_InitializeMenuPaneL5L(); void UT_CMusAiwProvider_InitializeMenuPaneL6L(); - void UT_CMusAiwProvider_InitializeMenuPaneL7L(); + void UT_CMusAiwProvider_InitializeMenuPaneLFastModeL(); + void UT_CMusAiwProvider_InitializeMenuPaneLFastMode2L(); - void UT_CMusAiwProvider_HandleMenuCmdLL(); + void UT_CMusAiwProvider_HandleMenuCmdLFastModeL(); void UT_CMusAiwProvider_ApplicationRunningLL(); void UT_CMusAiwProvider_ShowErrorNoteLL(); void UT_CMusAiwProvider_ErrorNoteTextLCL(); void UT_CMusAiwProvider_ErrorNoteText8LL(); - void UT_ImplementationGroupProxyL(); + void UT_ImplementationGroupProxyL(); + void UT_HiddenFromFastSwapL(); + public: // Helpers + + CAiwMenuPane* CreateAiwMenuPaneLC( CEikMenuPane** aEikPane ); + private: // data CMusAiwProvider* iProvider; diff -r 33a5d2bbf6fc -r 73a1feb507fb mmshplugins/mmshaiwplugin/tsrc/ut_aiwplugin/src/ut_musaiwprovider.cpp --- a/mmshplugins/mmshaiwplugin/tsrc/ut_aiwplugin/src/ut_musaiwprovider.cpp Thu Aug 19 09:51:39 2010 +0300 +++ b/mmshplugins/mmshaiwplugin/tsrc/ut_aiwplugin/src/ut_musaiwprovider.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -15,7 +15,7 @@ * */ -#include + #include "ut_musaiwprovider.h" #include "musaiwprovider.h" #include "musaiwprovider.hrh" @@ -27,6 +27,7 @@ #include "mussesseioninformationapi.h" #include "mussettings.h" #include "mustesthelp.h" +#include "mussessionproperties.h" #define MUS_MEMORY_LEAVE_CHECKING_ON #include @@ -38,6 +39,8 @@ #include #include #include +#include +#include // Next row is to disable warning emerging from EUnit code. @@ -49,6 +52,8 @@ _LIT( KMusAiwProviderResource, "c:\\sys\\bin\\musaiwproviderui.rsc" ); _LIT( KResourceFilenameRom,"z:\\sys\\bin\\musaiwproviderui.rsc" ); +_LIT( KMusOnHold, "On hold" ); + _LIT8( KMusOnHold8, "On hold" ); _LIT8( KMusNetworkIncompatible8, "Network incompatible" ); _LIT8( KMusConferenceCall8, "Conference call" ); @@ -159,6 +164,8 @@ CMusManager::SetUseCase( MultimediaSharing::EMusContinue ); CMusManager::SetStartError( KErrNone ); CMusManager::SetAvailability( KErrNone ); + MultimediaSharingSettings::SetPropertyValueL( + MusSettingsKeys::KFastStartupMode, MusSettingsKeys::EFastModeOff ); } @@ -170,6 +177,7 @@ void UT_CMusAiwProvider::Teardown( ) { delete iProvider; + PropertyHelper::Close(); } @@ -273,28 +281,17 @@ // void UT_CMusAiwProvider::UT_CMusAiwProvider_InitializeMenuPaneLL() { - - RFs fs; User::LeaveIfError( fs.Connect() ); - CleanupClosePushL( fs ); - + BaflUtils::CopyFile( fs, KMusAiwProviderResource(), KResourceFilenameRom() ); CAiwGenericParamList* list = CAiwGenericParamList::NewLC(); - CEikMenuPane* eikPane = new( ELeave ) CEikMenuPane( this ); - CleanupStack::PushL( eikPane ); - - // Constructing eikPane is not compulsory for testing and leads to a memory - // leak. - //eikPane->ConstructL( NULL, this ); - - CAiwMenuPane* aiwPane = new( ELeave ) CAiwMenuPane( *eikPane, 0 ); //Takes ownership - CleanupStack::Pop( eikPane ); - CleanupStack::PushL( aiwPane ); + CEikMenuPane* eikPane = NULL; + CAiwMenuPane* aiwPane = CreateAiwMenuPaneLC( &eikPane ); // ResourceFile is empty delete iProvider->iResourceFileName; @@ -372,28 +369,18 @@ void UT_CMusAiwProvider::UT_CMusAiwProvider_InitializeMenuPaneL2L() { - RFs fs; User::LeaveIfError( fs.Connect() ); - CleanupClosePushL( fs ); - + BaflUtils::CopyFile( fs, KMusAiwProviderResource(), KResourceFilenameRom() ); CAiwGenericParamList* list = CAiwGenericParamList::NewLC(); - CEikMenuPane* eikPane = new( ELeave ) CEikMenuPane( this ); - CleanupStack::PushL( eikPane ); - - // Constructing eikPane is not compulsory for testing and leads to a memory - // leak. - //eikPane->ConstructL( NULL, this ); - - CAiwMenuPane* aiwPane = new( ELeave ) CAiwMenuPane( *eikPane, 0 ); //Takes ownership - CleanupStack::Pop( eikPane ); - CleanupStack::PushL( aiwPane ); - + CEikMenuPane* eikPane = NULL; + CAiwMenuPane* aiwPane = CreateAiwMenuPaneLC( &eikPane ); + // ResourceFile is empty delete iProvider->iResourceFileName; @@ -441,27 +428,17 @@ void UT_CMusAiwProvider::UT_CMusAiwProvider_InitializeMenuPaneL3L() { - RFs fs; User::LeaveIfError( fs.Connect() ); - CleanupClosePushL( fs ); - + BaflUtils::CopyFile( fs, KMusAiwProviderResource(), KResourceFilenameRom() ); CAiwGenericParamList* list = CAiwGenericParamList::NewLC(); - CEikMenuPane* eikPane = new( ELeave ) CEikMenuPane( this ); - CleanupStack::PushL( eikPane ); - - // Constructing eikPane is not compulsory for testing and leads to a memory - // leak. - //eikPane->ConstructL( NULL, this ); - - CAiwMenuPane* aiwPane = new( ELeave ) CAiwMenuPane( *eikPane, 0 ); //Takes ownership - CleanupStack::Pop( eikPane ); - CleanupStack::PushL( aiwPane ); + CEikMenuPane* eikPane = NULL; + CAiwMenuPane* aiwPane = CreateAiwMenuPaneLC( &eikPane ); // ResourceFile is empty delete iProvider->iResourceFileName; @@ -508,27 +485,17 @@ void UT_CMusAiwProvider::UT_CMusAiwProvider_InitializeMenuPaneL4L() { - RFs fs; User::LeaveIfError( fs.Connect() ); - CleanupClosePushL( fs ); - + BaflUtils::CopyFile( fs, KMusAiwProviderResource(), KResourceFilenameRom() ); CAiwGenericParamList* list = CAiwGenericParamList::NewLC(); - CEikMenuPane* eikPane = new( ELeave ) CEikMenuPane( this ); - CleanupStack::PushL( eikPane ); - - // Constructing eikPane is not compulsory for testing and leads to a memory - // leak. - //eikPane->ConstructL( NULL, this ); - - CAiwMenuPane* aiwPane = new( ELeave ) CAiwMenuPane( *eikPane, 0 ); //Takes ownership - CleanupStack::Pop( eikPane ); - CleanupStack::PushL( aiwPane ); + CEikMenuPane* eikPane = NULL; + CAiwMenuPane* aiwPane = CreateAiwMenuPaneLC( &eikPane ); // ResourceFile is empty delete iProvider->iResourceFileName; @@ -575,27 +542,17 @@ void UT_CMusAiwProvider::UT_CMusAiwProvider_InitializeMenuPaneL5L() { - RFs fs; User::LeaveIfError( fs.Connect() ); - CleanupClosePushL( fs ); - + BaflUtils::CopyFile( fs, KMusAiwProviderResource(), KResourceFilenameRom() ); CAiwGenericParamList* list = CAiwGenericParamList::NewLC(); - CEikMenuPane* eikPane = new( ELeave ) CEikMenuPane( this ); - CleanupStack::PushL( eikPane ); - - // Constructing eikPane is not compulsory for testing and leads to a memory - // leak. - //eikPane->ConstructL( NULL, this ); - - CAiwMenuPane* aiwPane = new( ELeave ) CAiwMenuPane( *eikPane, 0 ); //Takes ownership - CleanupStack::Pop( eikPane ); - CleanupStack::PushL( aiwPane ); + CEikMenuPane* eikPane = NULL; + CAiwMenuPane* aiwPane = CreateAiwMenuPaneLC( &eikPane ); // ResourceFile is empty delete iProvider->iResourceFileName; @@ -644,27 +601,17 @@ void UT_CMusAiwProvider::UT_CMusAiwProvider_InitializeMenuPaneL6L() { - RFs fs; User::LeaveIfError( fs.Connect() ); - CleanupClosePushL( fs ); - + BaflUtils::CopyFile( fs, KMusAiwProviderResource(), KResourceFilenameRom() ); CAiwGenericParamList* list = CAiwGenericParamList::NewLC(); - CEikMenuPane* eikPane = new( ELeave ) CEikMenuPane( this ); - CleanupStack::PushL( eikPane ); - - // Constructing eikPane is not compulsory for testing and leads to a memory - // leak. - //eikPane->ConstructL( NULL, this ); - - CAiwMenuPane* aiwPane = new( ELeave ) CAiwMenuPane( *eikPane, 0 ); //Takes ownership - CleanupStack::Pop( eikPane ); - CleanupStack::PushL( aiwPane ); + CEikMenuPane* eikPane = NULL; + CAiwMenuPane* aiwPane = CreateAiwMenuPaneLC( &eikPane ); // ResourceFile is empty delete iProvider->iResourceFileName; @@ -710,30 +657,19 @@ } - -void UT_CMusAiwProvider::UT_CMusAiwProvider_InitializeMenuPaneL7L() +void UT_CMusAiwProvider::UT_CMusAiwProvider_InitializeMenuPaneLFastModeL() { - RFs fs; User::LeaveIfError( fs.Connect() ); - CleanupClosePushL( fs ); - + BaflUtils::CopyFile( fs, KMusAiwProviderResource(), KResourceFilenameRom() ); CAiwGenericParamList* list = CAiwGenericParamList::NewLC(); - CEikMenuPane* eikPane = new( ELeave ) CEikMenuPane( this ); - CleanupStack::PushL( eikPane ); - - // Constructing eikPane is not compulsory for testing and leads to a memory - // leak. - //eikPane->ConstructL( NULL, this ); - - CAiwMenuPane* aiwPane = new( ELeave ) CAiwMenuPane( *eikPane, 0 ); //Takes ownership - CleanupStack::Pop( eikPane ); - CleanupStack::PushL( aiwPane ); + CEikMenuPane* eikPane = NULL; + CAiwMenuPane* aiwPane = CreateAiwMenuPaneLC( &eikPane ); // ResourceFile is empty delete iProvider->iResourceFileName; @@ -744,31 +680,35 @@ // Menu item counter TInt menuPaneCount = eikPane->NumberOfItemsInPane(); - // test "forbidden" feature: mus NOT allowed, operator variant set to operator - MultimediaSharingSettings::SetOperatorVariantSettingL( - MusSettingsKeys::EOperatorSpecific ); - RProperty::Set( NMusSessionInformationApi::KCategoryUid, - NMusSessionInformationApi::KMUSForbidden, - NMusSessionInformationApi::EMUSForbidden ); - EUNIT_ASSERT( eikPane->NumberOfItemsInPane() == menuPaneCount ) - // set operator back to standard and allow mus RProperty::Set( NMusSessionInformationApi::KCategoryUid , NMusSessionInformationApi::KMUSForbidden , NMusSessionInformationApi::EMUSAllowed ); MultimediaSharingSettings::SetOperatorVariantSettingL( MusSettingsKeys::EStandard ); - - // Cases for "Mush not supported" - FeatureManager::MultimediaSharingNotSupported(); - CMusManager::SetAvailability( MultimediaSharing::EMultimediaSharingAvailable ); + MultimediaSharingSettings::SetPropertyValueL( + MusSettingsKeys::KFastStartupMode, MusSettingsKeys::EFastModeOn ); + + // Options not enabled, mus shown in menu + // + MultimediaSharingSettings::SetCapabilityQuerySettingL( + MusSettingsKeys::ENoOptions ); + CMusManager::SetAvailability(MultimediaSharing::EMultimediaSharingAvailable); menuPaneCount = eikPane->NumberOfItemsInPane(); iProvider->InitializeMenuPaneL( *aiwPane, 0, 0, *list ); - MUS_CHECK_MEMORY_LEAVE( eikPane->NumberOfItemsInPane() == menuPaneCount ) - FeatureManager::MultimediaSharingSupported(); + + MUS_CHECK_MEMORY_LEAVE( eikPane->NumberOfItemsInPane() == menuPaneCount + 3 ) - // set camera support on - FeatureManager::CameraSupported(); + // Options supported, not yet available, mus not shown in menu + // + MultimediaSharingSettings::SetCapabilityQuerySettingL( + MusSettingsKeys::EParallel ); + CMusManager::SetAvailability(MultimediaSharing::ESipOptionsSent); + menuPaneCount = eikPane->NumberOfItemsInPane(); + iProvider->InitializeMenuPaneL( *aiwPane, 0, 0, *list ); + + MUS_CHECK_MEMORY_LEAVE( eikPane->NumberOfItemsInPane() == menuPaneCount ) + CleanupStack::PopAndDestroy( aiwPane ); CleanupStack::PopAndDestroy( list ); BaflUtils::DeleteFile( fs, KResourceFilenameRom() ); @@ -776,8 +716,53 @@ CleanupStack::PopAndDestroy(); // fs } - - + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_CMusAiwProvider::UT_CMusAiwProvider_InitializeMenuPaneLFastMode2L() + { + RFs fs; + User::LeaveIfError( fs.Connect() ); + CleanupClosePushL( fs ); + + BaflUtils::CopyFile( fs, KMusAiwProviderResource(), + KResourceFilenameRom() ); + + CAiwGenericParamList* list = CAiwGenericParamList::NewLC(); + + CEikMenuPane* eikPane = NULL; + CAiwMenuPane* aiwPane = CreateAiwMenuPaneLC( &eikPane ); + + // ResourceFile is empty + delete iProvider->iResourceFileName; + + iProvider->iResourceFileName = NULL ; + iProvider->InitializeMenuPaneL( *aiwPane, 0, 0, *list ); + EUNIT_ASSERT( iProvider->iResourceFileName != NULL ) + + // Options supported, available, mus shown in menu + // + MultimediaSharingSettings::SetPropertyValueL( + MusSettingsKeys::KFastStartupMode, MusSettingsKeys::EFastModeOn ); + + MultimediaSharingSettings::SetCapabilityQuerySettingL( + MusSettingsKeys::EParallel ); + + CMusManager::SetAvailability(MultimediaSharing::EMultimediaSharingAvailable); + TInt menuPaneCount = eikPane->NumberOfItemsInPane(); + iProvider->InitializeMenuPaneL( *aiwPane, 0, 0, *list ); + + MUS_CHECK_MEMORY_LEAVE( eikPane->NumberOfItemsInPane() == menuPaneCount + 3 ) + + CleanupStack::PopAndDestroy( aiwPane ); + CleanupStack::PopAndDestroy( list ); + BaflUtils::DeleteFile( fs, KResourceFilenameRom() ); + + CleanupStack::PopAndDestroy(); // fs + } + // ----------------------------------------------------------------------------- // // ----------------------------------------------------------------------------- @@ -792,12 +777,15 @@ EUNIT_ASSERT( CMusManager::UseCase() == MultimediaSharing::EMusLiveVideo ) iProvider->HandleMenuCmdL( EMusCommandClipShare, *pl, *pl, 0, this ); + MUS_CHECK_MEMORY_LEAVE( CMusManager::UseCase() == MultimediaSharing::EMusClipVideo ) EUNIT_ASSERT( CMusManager::UseCase() == MultimediaSharing::EMusClipVideo ) iProvider->HandleMenuCmdL( EMusCommandImageShare, *pl, *pl, 0, this ); + MUS_CHECK_MEMORY_LEAVE( CMusManager::UseCase() == MultimediaSharing::EMusStillImage ) EUNIT_ASSERT( CMusManager::UseCase() == MultimediaSharing::EMusStillImage ) iProvider->HandleMenuCmdL( EMusCommandContinue, *pl, *pl, 0, this ); + MUS_CHECK_MEMORY_LEAVE( CMusManager::UseCase() == MultimediaSharing::EMusContinue ) EUNIT_ASSERT( CMusManager::UseCase() == MultimediaSharing::EMusContinue ) CMusManager::SetStartError( @@ -838,9 +826,59 @@ // // ----------------------------------------------------------------------------- // +void UT_CMusAiwProvider::UT_CMusAiwProvider_HandleMenuCmdLFastModeL() + { + CAiwGenericParamList* pl = CAiwGenericParamList::NewLC(); + + MultimediaSharingSettings::SetPropertyValueL( + MusSettingsKeys::KFastStartupMode, MusSettingsKeys::EFastModeOn ); + + // Fast mode, start live sharing (handle normally) + CMusManager::SetUseCase( MultimediaSharing::EMusContinue ); + iProvider->HandleMenuCmdL( EMusCommandLiveShare, *pl, *pl, 0, this ); + MUS_CHECK_MEMORY_LEAVE( CMusManager::UseCase() == MultimediaSharing::EMusLiveVideo ) + EUNIT_ASSERT( CMusManager::UseCase() == MultimediaSharing::EMusLiveVideo ) + + // Fast mode, start clip sharing, app not running nor hidden (handle normally) + CMusManager::SetUseCase( MultimediaSharing::EMusContinue ); + iProvider->HandleMenuCmdL( EMusCommandClipShare, *pl, *pl, 0, this ); + MUS_CHECK_MEMORY_LEAVE( CMusManager::UseCase() == MultimediaSharing::EMusClipVideo ) + EUNIT_ASSERT( CMusManager::UseCase() == MultimediaSharing::EMusClipVideo ) + + // Fast mode, start clip sharing, app running and hidden (mus mgr is not + // used for starting application, only usecase P&S value is changed) + CMusManager::SetUseCase( MultimediaSharing::EMusContinue ); + + TApaTask::iApplicationExist = ETrue; + + TBuf16< 10 > listOkMus; + TUint16 upperBits = KMusUiUid >> 16; + listOkMus.Append( upperBits ); + listOkMus.Append( KMusUiUid ); + listOkMus.Append( 0 ); + listOkMus.Append( 0 ); + RProperty::Set( KPSUidUikon, KUikAppHiddenList, listOkMus ); + + RProperty::Set( NMusSessionApi::KCategoryUid, NMusSessionApi::KUseCase, MultimediaSharing::EMusContinue ); + + iProvider->HandleMenuCmdL( EMusCommandClipShare, *pl, *pl, 0, this ); + EUNIT_ASSERT( CMusManager::UseCase() == MultimediaSharing::EMusContinue ) + + TInt usecaseAfterFakeStart( 0 ); + RProperty::Get( NMusSessionApi::KCategoryUid, NMusSessionApi::KUseCase, usecaseAfterFakeStart ); + EUNIT_ASSERT( usecaseAfterFakeStart == MultimediaSharing::EMusClipVideo ); + + CleanupStack::PopAndDestroy( pl ); + + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// void UT_CMusAiwProvider::UT_CMusAiwProvider_ApplicationRunningLL() { - // Stub returns EFalse as default + TApaTask::iApplicationExist = EFalse; EUNIT_ASSERT( !iProvider->ApplicationRunningL() ) // Use stub to mimic the existence of application @@ -971,8 +1009,90 @@ ImplementationGroupProxy( tableCount ); } +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_CMusAiwProvider::UT_HiddenFromFastSwapL() + { + // Normal mode + MultimediaSharingSettings::SetPropertyValueL( + MusSettingsKeys::KFastStartupMode, MusSettingsKeys::EFastModeOff ); + EUNIT_ASSERT( !iProvider->HiddenFromFastSwapL() ) + + // Fast mode + // + MultimediaSharingSettings::SetPropertyValueL( + MusSettingsKeys::KFastStartupMode, MusSettingsKeys::EFastModeOn ); + + // Key not found + PropertyHelper::SetErrorCode( KErrNotFound ); + EUNIT_ASSERT( !iProvider->HiddenFromFastSwapL() ) + + // Malformed key value + PropertyHelper::SetErrorCode( KErrNone ); + TBuf16< 5 > listMalformed; + listMalformed.Copy( _L("05645") ); + RProperty::Set( KPSUidUikon, KUikAppHiddenList, listMalformed ); + MUS_EUNIT_ASSERT_SPECIFIC_LEAVE( iProvider->HiddenFromFastSwapL(), KErrEof ); + + // No musuid in value list + TBuf16< 6 > listOkNoMus; + TUint32 uid1 = 10002000; + TUint32 uid2 = 20003000; + // avkoncapserver publishes values in following manner + TUint16 upperBits = uid1 >> 16; + listOkNoMus.Append( upperBits ); + listOkNoMus.Append( uid1 ); + upperBits = uid2 >> 16; + listOkNoMus.Append( upperBits ); + listOkNoMus.Append( uid2 ); + listOkNoMus.Append( 0 ); + listOkNoMus.Append( 0 ); + RProperty::Set( KPSUidUikon, KUikAppHiddenList, listOkNoMus ); + EUNIT_ASSERT( !iProvider->HiddenFromFastSwapL() ) + + // Musuid in value list + TBuf16< 10 > listOkMus; + TUint32 uid3 = 30005000; + upperBits = uid1 >> 16; + listOkMus.Append( upperBits ); + listOkMus.Append( uid1 ); + upperBits = uid2 >> 16; + listOkMus.Append( upperBits ); + listOkMus.Append( uid2 ); + + upperBits = KMusUiUid >> 16; + listOkMus.Append( upperBits ); + listOkMus.Append( KMusUiUid ); + + upperBits = uid3 >> 16; + listOkMus.Append( upperBits ); + listOkMus.Append( uid3 ); + + listOkMus.Append( 0 ); + listOkMus.Append( 0 ); + RProperty::Set( KPSUidUikon, KUikAppHiddenList, listOkMus ); + EUNIT_ASSERT( iProvider->HiddenFromFastSwapL() ) + } +// HELPERS +CAiwMenuPane* UT_CMusAiwProvider::CreateAiwMenuPaneLC( CEikMenuPane** aEikPane ) + { + CEikMenuPane* eikPane = new( ELeave ) CEikMenuPane( this ); + CleanupStack::PushL( eikPane ); + + // Constructing eikPane is not compulsory for testing and leads to a memory + // leak. + //eikPane->ConstructL( NULL, this ); + + CAiwMenuPane* aiwPane = new( ELeave ) CAiwMenuPane( *eikPane, 0 ); //Takes ownership + CleanupStack::Pop( eikPane ); + CleanupStack::PushL( aiwPane ); + *aEikPane = eikPane; + return aiwPane; + } // TEST TABLE @@ -1033,14 +1153,21 @@ "InitializeMenuPaneL", "FUNCTIONALITY", SetupL, UT_CMusAiwProvider_InitializeMenuPaneL6L, Teardown) - + EUNIT_TEST( - "InitializeMenuPaneL - test7", + "InitializeMenuPaneL - fast mode", "CMusAiwProvider", "InitializeMenuPaneL", "FUNCTIONALITY", - SetupL, UT_CMusAiwProvider_InitializeMenuPaneL7L, Teardown) - + SetupL, UT_CMusAiwProvider_InitializeMenuPaneLFastModeL, Teardown) + +EUNIT_TEST( + "InitializeMenuPaneL - fast mode 2", + "CMusAiwProvider", + "InitializeMenuPaneL", + "FUNCTIONALITY", + SetupL, UT_CMusAiwProvider_InitializeMenuPaneLFastMode2L, Teardown) + EUNIT_TEST( "HandleMenuCmdL - test", "CMusAiwProvider", @@ -1049,6 +1176,13 @@ SetupL, UT_CMusAiwProvider_HandleMenuCmdLL, Teardown) EUNIT_TEST( + "HandleMenuCmdL - fastmode test", + "CMusAiwProvider", + "HandleMenuCmdL", + "FUNCTIONALITY", + SetupL, UT_CMusAiwProvider_HandleMenuCmdLFastModeL, Teardown) + +EUNIT_TEST( "ApplicationRunningL - test", "CMusAiwProvider", "ApplicationRunningL", @@ -1082,6 +1216,13 @@ "ImplementationGroupProxy", "FUNCTIONALITY", SetupL, UT_ImplementationGroupProxyL, Teardown) + +EUNIT_TEST( + "HiddenFromFastSwapL", + "CMusAiwProvider", + "HiddenFromFastSwapL", + "FUNCTIONALITY", + SetupL, UT_HiddenFromFastSwapL, Teardown) EUNIT_END_TEST_TABLE diff -r 33a5d2bbf6fc -r 73a1feb507fb mmshplugins/mmshaoplugin/group/musaoplugin.mmp --- a/mmshplugins/mmshaoplugin/group/musaoplugin.mmp Thu Aug 19 09:51:39 2010 +0300 +++ b/mmshplugins/mmshaoplugin/group/musaoplugin.mmp Tue Aug 31 15:12:07 2010 +0300 @@ -42,7 +42,8 @@ SOURCE muscallstatusmonitor.cpp SOURCE muscallconferencemonitor.cpp SOURCE muscallconferenceeventmonitor.cpp -SOURCE musclirmonitor.cpp +SOURCE musvoipcallmonitor.cpp + USERINCLUDE ../inc USERINCLUDE ../../../inc @@ -55,8 +56,8 @@ LIBRARY etel.lib LIBRARY etelmm.lib LIBRARY centralrepository.lib -LIBRARY etel3rdparty.lib - +LIBRARY telephonyservice.lib +LIBRARY serviceprovidersettings.lib // MultimediaSharing libraries: LIBRARY musmanagerclient.lib LIBRARY featmgr.lib diff -r 33a5d2bbf6fc -r 73a1feb507fb mmshplugins/mmshaoplugin/inc/mmuscallstateobserver.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmshplugins/mmshaoplugin/inc/mmuscallstateobserver.h Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,39 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: The observer class to monitor MuSh call state change +* +*/ + + +#ifndef MMUSCALLSTATEOBSERVER_H_ +#define MMUSCALLSTATEOBSERVER_H_ + + +/** + * The observer class for call state monitor + */ + +class MMusCallStateObserver + { +public: + /** + * Notify Mush call state changed + */ + virtual void MusCallStateChanged() = 0; + }; + +#endif /*MMUSCALLSTATEOBSERVER_H_*/ + + +// End of File. diff -r 33a5d2bbf6fc -r 73a1feb507fb mmshplugins/mmshaoplugin/inc/musaoplugin.h --- a/mmshplugins/mmshaoplugin/inc/musaoplugin.h Thu Aug 19 09:51:39 2010 +0300 +++ b/mmshplugins/mmshaoplugin/inc/musaoplugin.h Tue Aug 31 15:12:07 2010 +0300 @@ -28,6 +28,8 @@ #include #include "musunittesting.h" +#include "mmuscallstateobserver.h" +#include "musmanager.h" // Enable the below line if Kodiak Ptt has to be monitered //class CMusPttCallMonitor; @@ -41,7 +43,8 @@ * * @lib musaoplugin.dll */ -class CMusAoPlugin : public CAlwaysOnlineEComInterface +class CMusAoPlugin : public CAlwaysOnlineEComInterface, + public MMusCallStateObserver { public: @@ -75,6 +78,12 @@ */ void DeleteProperties(); + + +public: // from MMusCallStateObserver + + void MusCallStateChanged(); + private: // constructors @@ -98,10 +107,22 @@ */ void DefinePropertyL(TInt aKey,RProperty::TType aType,const TDesC& aVal); - /** + /** * Utility function to delete keys. */ void DeleteProperty(TInt aKey); + + /** + * Starts Mus Manager Client.In turn it will start Mus Manager + * Server and Availability Plugin. + */ + void StartMusClientL(); + + /* + * Stops Mus Manager Client. + */ + void StopMusClient(); + public: // from base class CAlwaysOnlineEComInterface @@ -118,6 +139,12 @@ private: // data + /** + * Instance of MusManager Client. Owned. + */ + CMusManager* iManager; + + /* Property Monitor */ CMusPropertyMonitor* iPropertyMonitor; @@ -147,7 +174,6 @@ TInt iError; MUS_UNITTEST( UT_CMusAoPlugin ) - }; #endif // MUSAOPLUGIN_H diff -r 33a5d2bbf6fc -r 73a1feb507fb mmshplugins/mmshaoplugin/inc/muscallconferencemonitor.h --- a/mmshplugins/mmshaoplugin/inc/muscallconferencemonitor.h Thu Aug 19 09:51:39 2010 +0300 +++ b/mmshplugins/mmshaoplugin/inc/muscallconferencemonitor.h Tue Aug 31 15:12:07 2010 +0300 @@ -58,6 +58,12 @@ */ void SetStateL(); + /** + * Get Conference Call Status + */ + + RMobileConferenceCall::TMobileConferenceStatus GetConfStatus(); + private: /** @@ -134,8 +140,8 @@ */ CMusCallConferenceEventMonitor* iConfCallEvent; - MUS_UNITTEST( UT_CMusCallConferenceMonitor ) - + MUS_UNITTEST( UT_CMusCallConferenceMonitor ) + MUS_UNITTEST( UT_CMusTsyPropertyMonitor ) }; #endif // MUSCALLCONFERENCEMONITOR_H diff -r 33a5d2bbf6fc -r 73a1feb507fb mmshplugins/mmshaoplugin/inc/muscalleventmonitor.h --- a/mmshplugins/mmshaoplugin/inc/muscalleventmonitor.h Thu Aug 19 09:51:39 2010 +0300 +++ b/mmshplugins/mmshaoplugin/inc/muscalleventmonitor.h Tue Aug 31 15:12:07 2010 +0300 @@ -22,6 +22,7 @@ #include "musunittesting.h" #include "muscallmonitorbase.h" +#include "mmuscallstateobserver.h" #include #include @@ -40,7 +41,9 @@ * aCall is not owned. * @return CMusCallEventMonitor object. */ - static CMusCallEventMonitor* NewL(const RMobileCall& aCall, MMusTsyPropertyObserver& aObserver ); + static CMusCallEventMonitor* NewL(const RMobileCall& aCall, + MMusTsyPropertyObserver& aObserver, + MMusCallStateObserver& aCallStateObserver ); /** * Destructor. @@ -52,7 +55,8 @@ /** * C++ constructor. */ - CMusCallEventMonitor( const RMobileCall& aCall, MMusTsyPropertyObserver& aObserver ); + CMusCallEventMonitor( const RMobileCall& aCall, MMusTsyPropertyObserver& aObserver, + MMusCallStateObserver& aCallStateObserver ); /** * Symbian 2nd-phase constructor. diff -r 33a5d2bbf6fc -r 73a1feb507fb mmshplugins/mmshaoplugin/inc/muscallmonitor.h --- a/mmshplugins/mmshaoplugin/inc/muscallmonitor.h Thu Aug 19 09:51:39 2010 +0300 +++ b/mmshplugins/mmshaoplugin/inc/muscallmonitor.h Tue Aug 31 15:12:07 2010 +0300 @@ -22,6 +22,7 @@ #include "musunittesting.h" #include "mustsypropertymonitor.h" +#include "mmuscallstateobserver.h" #include #include @@ -54,7 +55,8 @@ /** * Starts to monitor call status,event and conference. */ - void StartMonitorL( RMobileLine& aLine, MMusTsyPropertyObserver& aObserver ); + void StartMonitorL( RMobileLine& aLine, MMusTsyPropertyObserver& aObserver, + MMusCallStateObserver& aCallStateObserver ); /** * Stops monitoring call status,event and conference. @@ -88,6 +90,11 @@ */ void SetStateL(NMusSessionInformationApi::TMusCallEvent aVal); + /** + * Checks from CS call f required data is ready. + */ + TBool IsDataReadyL(); + private: @@ -106,6 +113,7 @@ * ETrue to increase. EFalse to decrease. */ void SetCallCountL(TBool aIncrease); + private: diff -r 33a5d2bbf6fc -r 73a1feb507fb mmshplugins/mmshaoplugin/inc/muscallmonitorbase.h --- a/mmshplugins/mmshaoplugin/inc/muscallmonitorbase.h Thu Aug 19 09:51:39 2010 +0300 +++ b/mmshplugins/mmshaoplugin/inc/muscallmonitorbase.h Tue Aug 31 15:12:07 2010 +0300 @@ -23,6 +23,7 @@ #include "musunittesting.h" #include "mussesseioninformationapi.h" #include "mmustsypropertyobserver.h" +#include "mmuscallstateobserver.h" #include #include @@ -57,6 +58,11 @@ * CActive Implentation */ TInt RunError( TInt aError ); + + /** + * Checks if it the data is ready for the CS Call + */ + TBool IsDataReadyL(); protected: @@ -64,30 +70,15 @@ /** * C++ constructor. */ - CMusCallMonitorBase( const RMobileCall& aCall, MMusTsyPropertyObserver& aObserver ); + CMusCallMonitorBase( const RMobileCall& aCall, + MMusTsyPropertyObserver& aObserver, + MMusCallStateObserver& aCallStateObserver ); /** * Notify observer that our state changed */ virtual void NotifyCallStateChanged( NMusSessionInformationApi::TMusCallEvent aVal ); - /** - * Inspect the dialled number and set the PS key controlling whether - * to add Privacy-header accordingly. - */ - void SetClirSetting( const TDesC& aDialledNumber ) const; - - /** - * Should set the privacy ps key to on off based on incoming cs call privacy settings. - * aCallInfo : Callinfo package read from current cs call. - */ - void SetTerminatingPrivacy( const RMobileCall& aCall ) const; - - /** - * Removes privacy prefix away from phone number - * @return returns dialed number witout prefix. - */ - HBufC* RemovePrefix( const TDesC& aOriginator ) const; protected: @@ -112,11 +103,17 @@ * Observer to get nofitied when RCall status changed */ MMusTsyPropertyObserver& iTsyObserver; + + + /* + * Reference of callstate observer not owned + */ + MMusCallStateObserver& iCallStateObserver; + MUS_UNITTEST( UT_CMusCallMonitor ) - MUS_UNITTEST( UT_CMusCallEventMonitor ) - MUS_UNITTEST( UT_CMusCallStatusMonitor ) - MUS_UNITTEST( UT_CMusCallMonitorBase ) + MUS_UNITTEST( UT_CMusCallEventMonitor ) + MUS_UNITTEST( UT_CMusCallStatusMonitor ) }; #endif // MUSAOCALLMONITORBASE_H diff -r 33a5d2bbf6fc -r 73a1feb507fb mmshplugins/mmshaoplugin/inc/muscallstatusmonitor.h --- a/mmshplugins/mmshaoplugin/inc/muscallstatusmonitor.h Thu Aug 19 09:51:39 2010 +0300 +++ b/mmshplugins/mmshaoplugin/inc/muscallstatusmonitor.h Tue Aug 31 15:12:07 2010 +0300 @@ -23,6 +23,7 @@ #include "mussesseioninformationapi.h" #include "muscallmonitorbase.h" #include "musunittesting.h" +#include "mmuscallstateobserver.h" #include #include @@ -42,7 +43,9 @@ * aCall is not owned. * @return CMusCallStatusMonitor object. */ - static CMusCallStatusMonitor* NewL( const RMobileCall& aCall, MMusTsyPropertyObserver& aObserver ); + static CMusCallStatusMonitor* NewL( const RMobileCall& aCall, + MMusTsyPropertyObserver& aObserver, + MMusCallStateObserver& aCallStateObserver ); /** * Destructor. @@ -54,7 +57,8 @@ /** * C++ constructor. */ - CMusCallStatusMonitor(const RMobileCall& aCall, MMusTsyPropertyObserver& aObserver ); + CMusCallStatusMonitor(const RMobileCall& aCall, MMusTsyPropertyObserver& aObserver, + MMusCallStateObserver& aCallStateObserver ); /** * Symbian 2nd-phase constructor. diff -r 33a5d2bbf6fc -r 73a1feb507fb mmshplugins/mmshaoplugin/inc/musclirmonitor.h --- a/mmshplugins/mmshaoplugin/inc/musclirmonitor.h Thu Aug 19 09:51:39 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,96 +0,0 @@ -/* -* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - initial contribution. -* -* Contributors: -* -* Description: Monitor that observes the calling line identity restriction -* setting -* -*/ - - - -#ifndef MUSCLIRMONITOR_H -#define MUSCLIRMONITOR_H - -#include "musunittesting.h" - -#include -#include -#include - - -/** - * Monitor, which observes status of CLIR setting that controls whether the - * caller's phone number/id is shown to the called party. - * - * @lib musaoplugin.dll - */ -class CMusClirMonitor : public CActive - { - - public: // constructors and destructor - - /** - * Two-phased constructor. Leaves on failure. - */ - static CMusClirMonitor* NewL(); - - /** - * Destructor. - */ - ~CMusClirMonitor(); - - - public: // API - - /** - * Starts the asynchronous reading of CLIR setting. When reading - * completes, the PS key is updated. - */ - void ReadClir(); - - private: - - /** - * C++ constructor. - */ - CMusClirMonitor(); - - private: // functions from base class CActive - - void ConstructL(); - - void RunL(); - - void DoCancel(); - - TInt RunError( TInt aError ); - - void TranslateResult( CTelephony::TIdentityServiceStatus aResult ); - - private: // Data - - CTelephony* iTelephony; //owned - CTelephony::TIdentityServiceV1 iTIdentityServiceV1; - CTelephony::TIdentityServiceV1Pckg iTIdentityServiceV1Pckg; - - // Tells if phone's number/id is allowed to be sent to the remove party - TBool iAllowed; - - // How many times RunL has been completed with an error in a row - TInt iErrorCount; - - MUS_UNITTEST( UT_CMusClirMonitor ) - - }; - -#endif // MUSCLIRMONITOR_H diff -r 33a5d2bbf6fc -r 73a1feb507fb mmshplugins/mmshaoplugin/inc/muspropertymonitor.h --- a/mmshplugins/mmshaoplugin/inc/muspropertymonitor.h Thu Aug 19 09:51:39 2010 +0300 +++ b/mmshplugins/mmshaoplugin/inc/muspropertymonitor.h Tue Aug 31 15:12:07 2010 +0300 @@ -21,6 +21,7 @@ #define MUSPROPERTYMONITOR_H #include "musunittesting.h" +#include "mmuscallstateobserver.h" #include #include #include @@ -40,36 +41,35 @@ /** * Two-phased constructor. Leaves on failure. */ - static CMusPropertyMonitor* NewL(); + static CMusPropertyMonitor* NewL( MMusCallStateObserver& aCallStateObserver ); /** * Destructor. */ ~CMusPropertyMonitor(); + + + public: // other public functions + + /* + * Checks from P/S Keys about call state + * @return EFalse if call state is ENoCall otherwise ETrue + */ + TBool IsCallConnected(); + private: /** * C++ constructor. */ - CMusPropertyMonitor(); + CMusPropertyMonitor( MMusCallStateObserver& aCallStateObserve ); /** * Symbian 2nd-phase constructor. */ void ConstructL(); - /** - * Starts Mus Manager Client.In turn it will start Mus Manager - * Server and Availability Plugin. - */ - void StartMusClientL(); - - /* - * Stops Mus Manager Client. - */ - void StopMusClient(); - private: @@ -98,12 +98,12 @@ /** * Instance of RProperty. */ - RProperty iPropertyEvent; - - /** - * Instance of MusManager Client. Owned. + RProperty iPropertyEvent; + + /* + * Reference of callstate observer not owned */ - CMusManager* iManager; + MMusCallStateObserver& iCallStateObserver; MUS_UNITTEST( UT_CMusPropertyMonitor ) diff -r 33a5d2bbf6fc -r 73a1feb507fb mmshplugins/mmshaoplugin/inc/mustsypropertymonitor.h --- a/mmshplugins/mmshaoplugin/inc/mustsypropertymonitor.h Thu Aug 19 09:51:39 2010 +0300 +++ b/mmshplugins/mmshaoplugin/inc/mustsypropertymonitor.h Tue Aug 31 15:12:07 2010 +0300 @@ -16,23 +16,26 @@ */ - #ifndef MUSTSYPROPERTYMONITOR_H #define MUSTSYPROPERTYMONITOR_H +// Enable the below line if Kodiak Ptt has to be monitered +// #include "mmusptteventobserver.h" +#include +#include +#include +#include +#include + #include "musunittesting.h" #include "mussesseioninformationapi.h" #include "mmustsypropertyobserver.h" -// Enable the below line if Kodiak Ptt has to be monitered -// #include "mmusptteventobserver.h" -#include -#include -#include +#include "mmuscallstateobserver.h" class CMusCallMonitor; +class CMusVoipCallMonitor; class CMusPTTCallMonitor; class CMusCallConferenceMonitor; -class CMusClirMonitor; /** * This class monitors the line event,if call is connected @@ -53,7 +56,8 @@ /** * Two-phased constructor. */ - static CMusTsyPropertyMonitor* NewL( RMobilePhone& aPhone ); + static CMusTsyPropertyMonitor* NewL( RMobilePhone& aPhone, + MMusCallStateObserver& aCallStateObserver ); /** * Destructor. @@ -70,19 +74,24 @@ * Function from MMusTsyPropertyObserver */ void NotifyCallStateChanged(NMusSessionInformationApi::TMusCallEvent aVal, TName& aCallName); + + /** + * Checks from the corresponding monitors if the data is ready. + */ + TBool IsDataReadyL(); private: /** * C++ constructor. */ - CMusTsyPropertyMonitor( RMobilePhone& aPhone ); + CMusTsyPropertyMonitor( RMobilePhone& aPhone, MMusCallStateObserver& aCallStateObserve ); /** * Symbian 2nd-phase constructor. */ void ConstructL(); - + private: // functions from base class CActive @@ -135,7 +144,44 @@ /** * Add / Remove Call Monitors based on Mus criteria */ - void MonitorCallL(); + void MonitorCallL(const TPSCTsyCallState& aCallState, + const TPSCTsyCallType& aCallType); + + /** + * Add / Remove Call Monitors based on Mus criteria + */ + void MonitorCSCallL(); + + private: // Voip related + /* + * If the call Monitor doesnt exist then it creats one new + * CMusCallMonitor class and add into array. + * Leavs if objects creation fails. + */ + void AddVoipCallMonitorL( TName& aCallName ); + + /* + * It removs the CMusCallMonitor object from array + * based on the call name. + */ + + void RemoveVoipCallMonitor( TName& aCallName ); + + /** + * Add / Remove Call Monitors based on Mus criteria + */ + void MonitorVoipCallL(const TPSCTsyCallState& aCallState); + + /** + * Removes and reset the voip call monitor array + */ + void RemoveAllVoipCallMonitors( ); + + /** + * Checks multimediasharing call criteria's + */ + void CheckCallCriteriaL(); + /** * Delete all call monitor @@ -184,6 +230,11 @@ RPointerArray iCallMonitorArray; /** + * Array of voip Call Monitors. + */ + RPointerArray iVoipCallMonitorArray; + + /** * Conference call monitor, owned. */ CMusCallConferenceMonitor* iConferenceMonitor; @@ -191,13 +242,16 @@ /** * Instance of RProperty. */ - RProperty iPropertyEvent; + RProperty iPropertyEvent; - CMusClirMonitor* iClirMonitor; - + /* + * Reference of callstate observer not owned + */ + MMusCallStateObserver& iCallStateObserver; MUS_UNITTEST( UT_CMusTsyPropertyMonitor ) - + MUS_UNITTEST( UT_CMusAoPlugin ) + }; #endif // MUSTSYPROPERTYMONITOR_H diff -r 33a5d2bbf6fc -r 73a1feb507fb mmshplugins/mmshaoplugin/inc/musvoipcallmonitor.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmshplugins/mmshaoplugin/inc/musvoipcallmonitor.h Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,155 @@ +/* +* 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: Monitors the VOIP calls. +* +*/ + + +#ifndef MUSVOIPCALLMONITOR_H_ +#define MUSVOIPCALLMONITOR_H_ + +#include + +#include +#include +#include + +#include "mussesseioninformationapi.h" +#include "musunittesting.h" +#include "mmuscallstateobserver.h" + +/** + * Monitors the Internet telephony calls ( VOIP ) + * Same condition of CS call criteria applies here to + * for Mush. + * @lib musaoplugin.dll + */ +class CMusVoipCallMonitor : public CActive + { + + public: // constructors and destructor + /** + * Symbian two-phased constructor. + */ + static CMusVoipCallMonitor* NewL( TName& aCallName, + MMusCallStateObserver& aCallStateObserver ); + + /** + * Symbian two-phased constructor. + */ + static CMusVoipCallMonitor* NewLC( TName& aCallName ); + + /** + * Destructor. + */ + ~CMusVoipCallMonitor(); + + private: // functions from base class CActive + + void RunL(); + + void DoCancel(); + + TInt RunError( TInt aError ); + + private: + + /** + * C++ constructor. + */ + CMusVoipCallMonitor( TName& aCallName, MMusCallStateObserver& aCallStateObserver ); + + /** + * Symbian 2nd-phase constructor. + */ + void ConstructL( ); + + public: + + /** + * Compares the call names (aName == iCallName) + * + * @return ETrue if matches else EFalse + */ + TBool IsEqual(TName& aName); + + /** + * Sets the call state PS Key value. + * + * @aVal one of the call event types + */ + void SetStateL(NMusSessionInformationApi::TMusCallEvent aVal); + + /** + * Checks from voip call monitor if required data is ready. + */ + TBool IsDataReadyL(); + + private: + + /** + * Sets the call Information like call direction and remote address + */ + void SetCallInfoL(); + + /** + * Sets the call Provider Information (CallProvider Name is PS Key) + */ + void SetCallProviderInfoL( TUint32 aServiceId ); + + TBool RemoteInfoExistsL(); + + void MonitorForRemoteInfoL(); + + void StopRemoteInfoMonitoring(); + + void ReportStateChangeL( NMusSessionInformationApi::TMusCallEvent aVal ); + + static TInt GuardTimerExpired( TAny* aPtr ); + + /** + * Returns current connected call Service ID. + * @return Current connected call service ID, if there is at least one + * call in connected state, otherwise KErrNotFound + */ + TUint32 CallServiceIdL(); + + void AddDomainFromOwnUsernameL( TUint32 aServiceId, TDes16& aUri ); + + // Resets the Call Provider Information. + void ResetCallProviderName(); + + + private: + /* + * Name of the call. + */ + TName& iCallName ; + + RProperty iPropertyEvent; + + /* + * Reference of callstate observer not owned + */ + MMusCallStateObserver& iCallStateObserver; + + CDeltaTimer* iGuardTimer; + TCallBack iGuardTimerCallBack; + TDeltaTimerEntry iGuardTimerEntry; + + MUS_UNITTEST( UT_CMusVoipCallMonitor ) + + }; + +#endif /* MUSVOIPCALLMONITOR_H_ */ diff -r 33a5d2bbf6fc -r 73a1feb507fb mmshplugins/mmshaoplugin/src/musaoplugin.cpp --- a/mmshplugins/mmshaoplugin/src/musaoplugin.cpp Thu Aug 19 09:51:39 2010 +0300 +++ b/mmshplugins/mmshaoplugin/src/musaoplugin.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -16,6 +16,7 @@ */ +#include "musmanager.h" #include "musresourceproperties.h" #include "mussesseioninformationapi.h" #include "mussettingskeys.h" @@ -32,9 +33,6 @@ #include #include #include -#include - -using namespace NMusSessionInformationApi; // ----------------------------------------------------------------------------- // Symbian two-phase constructor. @@ -67,19 +65,14 @@ void CMusAoPlugin::ConstructL() { MUS_LOG( "mus: [MUSAO] -> CMusAoPlugin::ConstructL" ) - FeatureManager::InitializeLibL(); - TBool support = FeatureManager::FeatureSupported( KFeatureIdMultimediaSharing ); - FeatureManager::UnInitializeLib(); - if ( support ) - { - DefinePropertiesL(); - User::LeaveIfError( iServer.Connect() ); - User::LeaveIfError( iPhone.Open( iServer, KMmTsyPhoneName() ) ); - iTsyPropertyMonitor = CMusTsyPropertyMonitor::NewL(iPhone); - iPropertyMonitor = CMusPropertyMonitor::NewL(); - // Enable the below line if Kodiak Ptt has to be monitered - // iPttCallMonitor = CMusPttCallMonitor::NewL(*iLineMonitor); - } + DefinePropertiesL(); + User::LeaveIfError( iServer.Connect() ); + User::LeaveIfError( iPhone.Open( iServer, KMmTsyPhoneName() ) ); + iTsyPropertyMonitor = CMusTsyPropertyMonitor::NewL(iPhone, *this ); + iPropertyMonitor = CMusPropertyMonitor::NewL(*this); + // Enable the below line if Kodiak Ptt has to be monitered + // iPttCallMonitor = CMusPttCallMonitor::NewL(*iLineMonitor); + MUS_LOG( "mus: [MUSAO] <- CMusAoPlugin::ConstructL" ) } @@ -91,6 +84,7 @@ { MUS_LOG( "-> CMusAoPlugin::~CMusAoPlugin" ) // should never come here, because service should always be on + delete iManager; delete iPropertyMonitor; delete iTsyPropertyMonitor; // Enable the below line if Kodiak Ptt has to be monitered @@ -142,12 +136,10 @@ RProperty::EInt,( TInt ) NMusSessionInformationApi::EMUSAllowed); DefinePropertyL(NMusSessionInformationApi::KMusCallDirection, RProperty::EInt,( TInt ) NMusSessionInformationApi::ENoDirection); - DefinePropertyL(NMusSessionInformationApi::KMUSPrivacy, - RProperty::EInt,( TInt ) NMusSessionInformationApi::EPrivacyOff); - DefinePropertyL(KMusClirSetting, - RProperty::EInt,( TInt ) ESendOwnNumber); - - + _LIT( KEmptyCallProvider,"" ); + DefinePropertyL(NMusSessionInformationApi::KMUSCallProvider, + RProperty::EText,KEmptyCallProvider); + MUS_LOG( "mus: [MUSAO] <- CMusAoPlugin::DefineResourceProperties" ) } @@ -228,10 +220,9 @@ DeleteProperty(NMusSessionInformationApi::KMusCallEvent); DeleteProperty(NMusSessionInformationApi::KMusCallCount); DeleteProperty(NMusSessionInformationApi::KMusTelNumber); + DeleteProperty(NMusSessionInformationApi::KMUSCallProvider); DeleteProperty(NMusSessionInformationApi::KMUSForbidden); DeleteProperty(NMusSessionInformationApi::KMusCallDirection); - DeleteProperty(NMusSessionInformationApi::KMUSPrivacy); - DeleteProperty(KMusClirSetting); MUS_LOG( "mus: [MUSAO] <- CMusAoPlugin::DeleteResourcePropertiesL" ) } @@ -259,5 +250,72 @@ return &iError;; } +// ----------------------------------------------------------------------------- +// CMusAoPlugin::StartMusClient() +// This will start the MusManager Client which inturn should start +// MusManager Server and Availability Plugin. +// ----------------------------------------------------------------------------- +// +void CMusAoPlugin::StartMusClientL() + { + MUS_LOG( "mus: [MUSAO] -> CMusAoPlugin::StartMusClient" ) + if( !iManager ) + { + iManager = CMusManager::NewL(); + } + iManager->ExamineAvailabilityL(); + MUS_LOG( "mus: [MUSAO] <- CMusAoPlugin::StartMusClient" ) + } + +// ----------------------------------------------------------------------------- +// CMusAoPlugin::StopMusClient() +// This will stop the MusManager Client which inturn should stop +// MusManager Server and Availability Plugin. +// ----------------------------------------------------------------------------- +// +void CMusAoPlugin::StopMusClient() + { + MUS_LOG( "mus: [MUSAO] -> CMusAoPlugin::StopMusClient" ) + if( iManager ) + { + delete iManager; + iManager = NULL; + } + MUS_LOG( "mus: [MUSAO] <- CMusAoPlugin::StopMusClient" ) + } + +// ----------------------------------------------------------------------------- +// From MMusCallStateObserver +// CMusAoPlugin::MusCallStateChanged() +// ----------------------------------------------------------------------------- +// +void CMusAoPlugin::MusCallStateChanged( ) + { + MUS_LOG( "mus: [MUSAO] -> CMusAoPlugin::MusCallStateChanged" ) + + TBool dataReady = EFalse; + TRAPD( error, dataReady = iTsyPropertyMonitor->IsDataReadyL() ) + + if ( error == KErrNone && + dataReady && + iPropertyMonitor->IsCallConnected() ) + { + MUS_LOG( "mus: [MUSAO] Starting Mush Client" ) + TRAP( error, StartMusClientL() ) + + MUS_LOG1("mus: [MUSAO] Error Ocurred = %d",error ) + + if ( error != KErrNone ) + { + StopMusClient(); + } + } + else + { + MUS_LOG( "mus: [MUSAO] Stopping Mush Client" ) + StopMusClient(); + } + MUS_LOG( "mus: [MUSAO] <- CMusAoPlugin::MusCallStateChanged" ) + } // End of file diff -r 33a5d2bbf6fc -r 73a1feb507fb mmshplugins/mmshaoplugin/src/muscallconferenceeventmonitor.cpp --- a/mmshplugins/mmshaoplugin/src/muscallconferenceeventmonitor.cpp Thu Aug 19 09:51:39 2010 +0300 +++ b/mmshplugins/mmshaoplugin/src/muscallconferenceeventmonitor.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -113,7 +113,6 @@ SetStateL( NMusSessionInformationApi::EConferenceCall ); break; case RMobileConferenceCall::EConferenceTerminated: - SetStateL( NMusSessionInformationApi::EConferenceTerminated ); MonitorCallL(); break; case RMobileConferenceCall::EConferenceSwapped: @@ -180,14 +179,6 @@ else { // No point of reporting it . - //EConferenceTerminated must be set every time to notify avaeventmonitor - if ( aVal == NMusSessionInformationApi::EConferenceTerminated ) - { - User::LeaveIfError(RProperty::Set( NMusSessionInformationApi::KCategoryUid, - NMusSessionInformationApi::KMusCallEvent, - aVal )); - } - } MUS_LOG( "mus: [MUSAO] <- CMusCallConferenceEventMonitor::SetStateL" ) } diff -r 33a5d2bbf6fc -r 73a1feb507fb mmshplugins/mmshaoplugin/src/muscallconferencemonitor.cpp --- a/mmshplugins/mmshaoplugin/src/muscallconferencemonitor.cpp Thu Aug 19 09:51:39 2010 +0300 +++ b/mmshplugins/mmshaoplugin/src/muscallconferencemonitor.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -245,6 +245,19 @@ MUS_LOG( "mus: [MUSAO] -> CMusCallConferenceMonitor::CheckCallStatus") } + +// -------------------------------------------------------------------------------- +// TMobileConferenceStatus GetCconfStatus() +// Get the Conference Call Status +// -------------------------------------------------------------------------------- +// +RMobileConferenceCall::TMobileConferenceStatus CMusCallConferenceMonitor::GetConfStatus() + { + return iConfStatus; + } + + + // End of file diff -r 33a5d2bbf6fc -r 73a1feb507fb mmshplugins/mmshaoplugin/src/muscalleventmonitor.cpp --- a/mmshplugins/mmshaoplugin/src/muscalleventmonitor.cpp Thu Aug 19 09:51:39 2010 +0300 +++ b/mmshplugins/mmshaoplugin/src/muscalleventmonitor.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -30,10 +30,12 @@ // Symbian two-phase constructor. // ------------------------------------------------------------------------------ // -CMusCallEventMonitor* CMusCallEventMonitor::NewL( const RMobileCall& aCall, MMusTsyPropertyObserver& aObserver ) +CMusCallEventMonitor* CMusCallEventMonitor::NewL( const RMobileCall& aCall, + MMusTsyPropertyObserver& aObserver, + MMusCallStateObserver& aCallStateObserver ) { MUS_LOG( "mus: [MUSAO] -> CMusCallEventMonitor::NewL" ) - CMusCallEventMonitor* self = new (ELeave) CMusCallEventMonitor(aCall, aObserver); + CMusCallEventMonitor* self = new (ELeave) CMusCallEventMonitor(aCall, aObserver, aCallStateObserver ); CleanupStack::PushL( self ); self->ConstructL(); CleanupStack::Pop( self ); @@ -71,11 +73,13 @@ // C++ constructor. // ------------------------------------------------------------------------------ // -CMusCallEventMonitor::CMusCallEventMonitor( const RMobileCall& aCall, MMusTsyPropertyObserver& aObserver ) - : CMusCallMonitorBase(aCall, aObserver) +CMusCallEventMonitor::CMusCallEventMonitor( const RMobileCall& aCall, + MMusTsyPropertyObserver& aObserver, + MMusCallStateObserver& aCallStateObserver ) + : CMusCallMonitorBase(aCall, aObserver, aCallStateObserver) { - + } diff -r 33a5d2bbf6fc -r 73a1feb507fb mmshplugins/mmshaoplugin/src/muscallmonitor.cpp --- a/mmshplugins/mmshaoplugin/src/muscallmonitor.cpp Thu Aug 19 09:51:39 2010 +0300 +++ b/mmshplugins/mmshaoplugin/src/muscallmonitor.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -89,14 +89,15 @@ // // ----------------------------------------------------------------------------- // -void CMusCallMonitor::StartMonitorL(RMobileLine& aLine, MMusTsyPropertyObserver& aObserver) +void CMusCallMonitor::StartMonitorL(RMobileLine& aLine, + MMusTsyPropertyObserver& aObserver, + MMusCallStateObserver& aCallStateObserver) { MUS_LOG( "mus: [MUSAO] -> CMusCallMonitor::StartMonitorL" ) if(IsMonitored())User::Leave(KErrAlreadyExists); User::LeaveIfError( iCall.OpenExistingCall( aLine, iCallName ) ); - iCallStatusMonitor = CMusCallStatusMonitor::NewL( iCall, aObserver ); - iCallEventMonitor = CMusCallEventMonitor::NewL( iCall, aObserver ); - + iCallStatusMonitor = CMusCallStatusMonitor::NewL( iCall, aObserver, aCallStateObserver ); + iCallEventMonitor = CMusCallEventMonitor::NewL( iCall, aObserver, aCallStateObserver ); MUS_LOG( "mus: [MUSAO] <- CMusCallMonitor::StartMonitorL" ) } @@ -187,4 +188,16 @@ } +// -------------------------------------------------------------------------------- +// CMusCallMonitor::IsDataReadyL() +// Checks if Data is ready CS Call. +// -------------------------------------------------------------------------------- + +TBool CMusCallMonitor::IsDataReadyL() + { + // Wrapper Function for Monitoring CS Call Data + return iCallStatusMonitor->IsDataReadyL(); + } + // End of file + diff -r 33a5d2bbf6fc -r 73a1feb507fb mmshplugins/mmshaoplugin/src/muscallmonitorbase.cpp --- a/mmshplugins/mmshaoplugin/src/muscallmonitorbase.cpp Thu Aug 19 09:51:39 2010 +0300 +++ b/mmshplugins/mmshaoplugin/src/muscallmonitorbase.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -19,7 +19,6 @@ #include "mussesseioninformationapi.h" #include "muscallmonitorbase.h" #include "muslogger.h" -#include "mussettings.h" #include #include @@ -27,9 +26,6 @@ #include #include -_LIT( KDoNotSendOwnNumber, "#31#" ); -_LIT( KDoSendOwnNumber, "*31#" ); - // ----------------------------------------------------------------------------- // C++ destructor. @@ -45,8 +41,12 @@ // C++ constructor. // ----------------------------------------------------------------------------- // -CMusCallMonitorBase::CMusCallMonitorBase(const RMobileCall& aCall, MMusTsyPropertyObserver& aObserver ) - : CActive( EPriorityNormal ),iCall(aCall),iTsyObserver( aObserver ) +CMusCallMonitorBase::CMusCallMonitorBase(const RMobileCall& aCall, + MMusTsyPropertyObserver& aObserver, + MMusCallStateObserver& aCallStateObserver ) + : CActive( EPriorityNormal ),iCall(aCall),iTsyObserver( aObserver ), + iCallStateObserver( aCallStateObserver ) + { // Intialize the remote call event state to Resume , means connected. @@ -67,6 +67,16 @@ User::LeaveIfError(RProperty::Get( NMusSessionInformationApi::KCategoryUid, NMusSessionInformationApi::KMusCallCount,callCount)); MUS_LOG1( "mus: [MUSAO] - CallCount = %d",callCount ) + + RMobileCall::TMobileCallInfoV3 callInfo; + RMobileCall::TMobileCallInfoV3Pckg pckg( callInfo ); + iCall.GetMobileCallInfo( pckg ); + if( callInfo.iEmergency ) + { + User::LeaveIfError(RProperty::Set( NMusSessionInformationApi::KCategoryUid, + NMusSessionInformationApi::KMusCallEvent, + ( TInt ) NMusSessionInformationApi::ENoCall )); + } /* * CountOfCallMonitors is number of CallMonitor Objects.Static Reference Count. * = No of active calls . @@ -74,22 +84,12 @@ * if call count is more than one , should be taken care by conference call or * multicall criteria. */ - if( callCount == 1) + else if( callCount == 1 ) { TInt currentVal; User::LeaveIfError(RProperty::Get( NMusSessionInformationApi::KCategoryUid, NMusSessionInformationApi::KMusCallEvent,currentVal)); MUS_LOG1( "mus: [MUSAO] - Remote State = %d",iRemoteCallEvent ) - - - /* - If Call is Connected then set the Call info. - */ - if( aVal==NMusSessionInformationApi::ECallConnected ) - { - SetCallInfoL(); - } - /* If current event is callconnected and remote is not in hold set the property value to CallConnected.Else set it to CallHold. Note : We can be sure about Local is connected when it goes to @@ -109,33 +109,37 @@ NMusSessionInformationApi::KMusCallEvent, aVal )); } - } - else if( aVal==NMusSessionInformationApi::EConferenceCall) - { - User::LeaveIfError(RProperty::Set( NMusSessionInformationApi::KCategoryUid, - NMusSessionInformationApi::KMusCallEvent, - NMusSessionInformationApi::EConferenceCall )); - } + } else if( aVal==NMusSessionInformationApi::ECallHold || iRemoteCallEvent==RMobileCall::ERemoteHold ) { User::LeaveIfError(RProperty::Set( NMusSessionInformationApi::KCategoryUid, NMusSessionInformationApi::KMusCallEvent, NMusSessionInformationApi::ECallHold )); } - if( aVal != NMusSessionInformationApi::ENoCall) + else if( aVal==NMusSessionInformationApi::ENoCall ) + { + User::LeaveIfError(RProperty::Set( NMusSessionInformationApi::KCategoryUid, + NMusSessionInformationApi::KMusCallEvent, + NMusSessionInformationApi::ENoCall )); + } + else if( aVal==NMusSessionInformationApi::EConferenceCall ) + { + User::LeaveIfError(RProperty::Set( NMusSessionInformationApi::KCategoryUid, + NMusSessionInformationApi::KMusCallEvent, + NMusSessionInformationApi::EConferenceCall )); + } + + /* + If Call is Connected then set the Call info. + */ + if( aVal==NMusSessionInformationApi::ECallConnected ) { - RMobileCall::TMobileCallInfoV3 callInfo; - RMobileCall::TMobileCallInfoV3Pckg pckg( callInfo ); - - User::LeaveIfError(iCall.GetMobileCallInfo( pckg )); - if( callInfo.iEmergency ) - { - User::LeaveIfError(RProperty::Set( NMusSessionInformationApi::KCategoryUid, - NMusSessionInformationApi::KMusCallEvent, - ( TInt ) NMusSessionInformationApi::ENoCall )); - } + SetCallInfoL(); } + // All P/S Keys are Set + //Check if preconditions are met to start or stop the MushClient. + iCallStateObserver.MusCallStateChanged(); } MUS_LOG( "mus: [MUSAO] <- CMusCallMonitorBase::SetStateL" ) @@ -155,7 +159,6 @@ callInfo.iRemoteParty.iRemoteNumber; // Set telephone number HBufC* telNo( NULL ); - HBufC* cleanTelNo( NULL ); if( remoteNumber.iTelNumber.Length() > 0 ) { MUS_LOG( "mus: [MUSAO] remoteNumber.iTelNumber.Lenght > 0" ) @@ -163,27 +166,18 @@ } else { - MUS_LOG( "mus: [MUSAO] remoteNumber.iTelNumber.Lenght =< 0" ) + MUS_LOG( "mus: [CALLMN] remoteNumber.iTelNumber.Lenght =< 0" ) RMobilePhone::TMobileAddress dialledParty = callInfo.iDialledParty; telNo = dialledParty.iTelNumber.AllocLC(); - } - if ( MultimediaSharingSettings::PrivacySetting() ) - { - SetClirSetting( *telNo ); - } - cleanTelNo = RemovePrefix( *telNo ); - CleanupStack::PushL( cleanTelNo ); - User::LeaveIfError(RProperty::Set( NMusSessionInformationApi::KCategoryUid, NMusSessionInformationApi::KMusTelNumber, - *cleanTelNo )); - MUS_LOG_TDESC("mus: [MUSAO] telNo = ", (*cleanTelNo)) - CleanupStack::PopAndDestroy(cleanTelNo); + *telNo )); + MUS_LOG_TDESC("mus: [MUSAO] telNo = ", (*telNo)) CleanupStack::PopAndDestroy(telNo); - // Set call direction. + // Set call direction. RMobileCall::TMobileCallDirection direction = callInfo.iRemoteParty.iDirection; MUS_LOG1( "mus: [MUSAO] Call Direction = %d",direction ) @@ -196,7 +190,6 @@ } else if ( direction == RMobileCall::EMobileTerminated ) { - SetTerminatingPrivacy( iCall ); User::LeaveIfError(RProperty::Set( NMusSessionInformationApi::KCategoryUid, NMusSessionInformationApi::KMusCallDirection, @@ -208,8 +201,14 @@ NMusSessionInformationApi::KCategoryUid, NMusSessionInformationApi::KMusCallDirection, ( TInt ) NMusSessionInformationApi::ENoDirection )); - } + } + + /* Set the call provider information to some dummy Value */ + User::LeaveIfError(RProperty::Set( + NMusSessionInformationApi::KCategoryUid, + NMusSessionInformationApi::KMUSCallProvider, + KNullDesC)); MUS_LOG( "mus: [MUSAO] <- CMusCallMonitorBase::SetCallInfoL" ) } @@ -242,90 +241,42 @@ iTsyObserver.NotifyCallStateChanged( aVal, callInfo.iCallName ); } -// -------------------------------------------------------------------------- -// void CMusCallMonitorBase::SetClirSetting() -// Determine CLIR setting from dialled digits -// -------------------------------------------------------------------------- -// -void CMusCallMonitorBase::SetClirSetting( const TDesC& aDialledNumber ) const - { - MUS_LOG( "mus: [MUSAO] -> CMusCallMonitorBase::SetClirSetting" ); - NMusSessionInformationApi::TMusClirSetting - sendNumber( NMusSessionInformationApi::ESendOwnNumber ); +// -------------------------------------------------------------------------------- +// CMusCallConferenceMonitor::IsDataReadyL() +// Checks if Data is ready CS Call. +// -------------------------------------------------------------------------------- - TPtrC prefix = aDialledNumber.Left( KDoNotSendOwnNumber().Length() ); - if ( prefix == KDoNotSendOwnNumber() ) - { - sendNumber = NMusSessionInformationApi::EDoNotSendOwnNumber; - } - RProperty::Set( NMusSessionInformationApi::KCategoryUid, - NMusSessionInformationApi::KMusClirSetting, sendNumber ); - MUS_LOG1( "mus: [MUSAO] <- CMusCallMonitorBase::SetClirSetting send nbr=%d", - sendNumber == NMusSessionInformationApi::ESendOwnNumber ); - } +TBool CMusCallMonitorBase::IsDataReadyL() + { + // This function need to be updated when new + // P/S key is published in Call monitor - -// -------------------------------------------------------------------------- -// void CMusCallMonitorBase::RemovePrefix() -// -------------------------------------------------------------------------- -// -HBufC* CMusCallMonitorBase::RemovePrefix( const TDesC& aOriginator ) const - { - MUS_LOG( "mus: [MUSAO] -> CMusCallMonitorBase::removePrefix" ); - - HBufC * withoutPrefix(NULL); + MUS_LOG( "mus: [MUSAO] -> CMusCallMonitorBase::IsDataReadyL" ) - TPtrC prefix = aOriginator.Left( KDoNotSendOwnNumber().Length() ); - if ( prefix == KDoNotSendOwnNumber()|| prefix == KDoSendOwnNumber() ) - { - MUS_LOG( "Number have a prefix" ); - withoutPrefix = aOriginator.AllocL(); - *withoutPrefix = aOriginator; - TPtr ptr = withoutPrefix->Des(); - ptr.Delete(0,KDoNotSendOwnNumber().Length()); - } - else - { - withoutPrefix = aOriginator.AllocL(); - } - - MUS_LOG( "mus: [MUSAO] <- CMusCallMonitorBase::RemovePrefix" ); - return withoutPrefix; - } - + // Ensure there is tel Number. + HBufC* telNumInfo = HBufC::NewLC( RProperty::KMaxPropertySize ); + TPtr ptelInfo = telNumInfo->Des(); + TInt err = KErrNone; + + err = RProperty::Get( NMusSessionInformationApi::KCategoryUid, + NMusSessionInformationApi::KMusTelNumber, + ptelInfo ); -// -------------------------------------------------------------------------- -// void CMusCallMonitorBase::SetTerminatingPrivacy() -// -------------------------------------------------------------------------- -// -void CMusCallMonitorBase::SetTerminatingPrivacy( const RMobileCall& aCall ) const - { - MUS_LOG( "mus: [MUSAO] -> CMusCallMonitorBase::SetTerminatingPrivacy" ) - RMobileCall::TMobileCallInfoV3 callInfo; - RMobileCall::TMobileCallInfoV3Pckg callInfoPckg( callInfo ); - if( aCall.GetMobileCallInfo( callInfoPckg ) != KErrNone ) - { - return; // error cannot do - } - MUS_LOG( "mus: [MUSAO] Get remote status" ) - RMobileCall::TMobileCallRemoteIdentityStatus remoteStatus = - callInfo.iRemoteParty.iRemoteIdStatus; - - if( remoteStatus == RMobileCall::ERemoteIdentitySuppressed ) - { - RProperty::Set( NMusSessionInformationApi::KCategoryUid, - NMusSessionInformationApi::KMUSPrivacy, - ( TInt ) NMusSessionInformationApi::EPrivacyOn ); - } - else - { - RProperty::Set( NMusSessionInformationApi::KCategoryUid, - NMusSessionInformationApi::KMUSPrivacy, - ( TInt ) NMusSessionInformationApi::EPrivacyOff ); - } - MUS_LOG1( "mus: [MUSAO] Remote status = %d",remoteStatus ) - MUS_LOG( "mus: [MUSAO] <- CMusCallMonitorBase::SetTerminatingPrivacy" ) + TBool telInfoExisit ( err == KErrNone && telNumInfo->Des().Length() > 0 ); + CleanupStack::PopAndDestroy( telNumInfo ); + + // Ensure Call direction info is there + TInt callDirection = NMusSessionInformationApi::ENoDirection; + err = RProperty::Get( + NMusSessionInformationApi::KCategoryUid, + NMusSessionInformationApi::KMusCallDirection, + callDirection ); + + TBool callInfoExisit ( err == KErrNone && callDirection != NMusSessionInformationApi::ENoDirection ); + + MUS_LOG( "mus: [MUSAO] <- CMusCallMonitorBase::IsDataReadyL" ) + return telInfoExisit && callInfoExisit; } // End of file diff -r 33a5d2bbf6fc -r 73a1feb507fb mmshplugins/mmshaoplugin/src/muscallstatusmonitor.cpp --- a/mmshplugins/mmshaoplugin/src/muscallstatusmonitor.cpp Thu Aug 19 09:51:39 2010 +0300 +++ b/mmshplugins/mmshaoplugin/src/muscallstatusmonitor.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -30,11 +30,12 @@ // CMusCallStatusMonitor* CMusCallStatusMonitor::NewL( const RMobileCall& aCall, - MMusTsyPropertyObserver& aObserver ) + MMusTsyPropertyObserver& aObserver, + MMusCallStateObserver& aCallStateObserver ) { MUS_LOG( "mus: [MUSAO] -> CMusCallStatusMonitor::NewL" ) CMusCallStatusMonitor* self = - new( ELeave )CMusCallStatusMonitor( aCall, aObserver ); + new( ELeave )CMusCallStatusMonitor( aCall, aObserver, aCallStateObserver ); CleanupStack::PushL( self ); self->ConstructL(); CleanupStack::Pop( self ); @@ -75,8 +76,9 @@ // CMusCallStatusMonitor::CMusCallStatusMonitor( const RMobileCall& aCall, - MMusTsyPropertyObserver& aObserver ) - : CMusCallMonitorBase( aCall, aObserver ) + MMusTsyPropertyObserver& aObserver, + MMusCallStateObserver& aCallStateObserver ) + : CMusCallMonitorBase( aCall, aObserver, aCallStateObserver ) { } diff -r 33a5d2bbf6fc -r 73a1feb507fb mmshplugins/mmshaoplugin/src/musclirmonitor.cpp --- a/mmshplugins/mmshaoplugin/src/musclirmonitor.cpp Thu Aug 19 09:51:39 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,209 +0,0 @@ -/* -* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - initial contribution. -* -* Contributors: -* -* Description: Monitor that observes the calling line identity restriction -* setting -* -*/ - - -#include "musclirmonitor.h" -#include "muslogger.h" -#include "mussesseioninformationapi.h" -#include -#include - -const TInt KMaxErrorsBeforeStop = 5; - -using namespace NMusSessionInformationApi; - -// ----------------------------------------------------------------------------- -// CMusClirMonitor::NewL -// ----------------------------------------------------------------------------- -// -CMusClirMonitor* CMusClirMonitor::NewL() - { - MUS_LOG( "mus: [CALLMN] -> CMusClirMonitor::NewL" ) - - CMusClirMonitor* self = new (ELeave) CMusClirMonitor; - CleanupStack::PushL( self ); - self->ConstructL(); - CleanupStack::Pop( self ); - MUS_LOG( "mus: [CALLMN] <- CMusClirMonitor::NewL" ) - return self; - } - - -// ----------------------------------------------------------------------------- -// CMusClirMonitor::~CMusClirMonitor -// ----------------------------------------------------------------------------- -// -CMusClirMonitor::~CMusClirMonitor() - { - MUS_LOG( "mus: [CALLMN] -> CMusClirMonitor::~CMusClirMonitor" ) - - Cancel(); - delete iTelephony; - - MUS_LOG( "mus: [CALLMN] <- CMusClirMonitor::~CMusClirMonitor" ) - } - - -// ----------------------------------------------------------------------------- -// CMusClirMonitor::CMusClirMonitor -// Read the parameter's current value -// ----------------------------------------------------------------------------- -// -CMusClirMonitor::CMusClirMonitor() : - CActive( EPriorityNormal ), - iTIdentityServiceV1Pckg( iTIdentityServiceV1 ), - iAllowed( ETrue ), - iErrorCount( 0 ) - { - MUS_LOG( "mus: [CALLMN] -> CMusClirMonitor::CMusClirMonitor" ) - - CActiveScheduler::Add( this ); - - MUS_LOG( "mus: [CALLMN] <- CMusClirMonitor::CMusClirMonitor" ) - } - - -// ----------------------------------------------------------------------------- -// CMusClirMonitor::ConstructL -// ----------------------------------------------------------------------------- -// -void CMusClirMonitor::ConstructL() - { - iTelephony = CTelephony::NewL(); - ReadClir(); // Read the initial value - } - - -// ----------------------------------------------------------------------------- -// CMusClirMonitor::RunL -// ----------------------------------------------------------------------------- -// -void CMusClirMonitor::RunL() - { - MUS_LOG1( "mus: [CALLMN] -> CMusClirMonitor::RunL iStatus=%d", - iStatus.Int() ) - - if ( iStatus == KErrNone ) - { - TranslateResult( iTIdentityServiceV1.iIdentityStatus ); - iErrorCount = 0; - } - else - { - ++iErrorCount; - MUS_LOG1( "mus: [CALLMN] Failed, error count(%d)", iErrorCount ) - - // If reading fails, retry few times - if ( iErrorCount <= KMaxErrorsBeforeStop ) - { - ReadClir(); - } - } - - MUS_LOG( "mus: [CALLMN] <- CMusClirMonitor::RunL" ) - } - - -// ----------------------------------------------------------------------------- -// CMusClirMonitor::DoCancel -// ----------------------------------------------------------------------------- -// -void CMusClirMonitor::DoCancel() - { - MUS_LOG( "mus: [CALLMN] -> CMusClirMonitor::DoCancel" ) - - iTelephony->CancelAsync( CTelephony::EGetIdentityServiceStatusCancel ); - - MUS_LOG( "mus: [CALLMN] <- CMusClirMonitor::DoCancel" ) - } - - -// ----------------------------------------------------------------------------- -// CMusClirMonitor::RunError -// Ignore errors and continue -// ----------------------------------------------------------------------------- -// -TInt CMusClirMonitor::RunError( TInt aError ) - { - MUS_LOG1( "mus: [CALLMN] <-> CMusClirMonitor::RunError aError %d", aError ) - aError = KErrNone; // Get rid of "aError is not used" warning in UREL - return aError; - } - - -// ----------------------------------------------------------------------------- -// CMusClirMonitor::ReadClir -// ----------------------------------------------------------------------------- -// -void CMusClirMonitor::ReadClir() - { - MUS_LOG( "mus: [CALLMN] -> CMusClirMonitor::ReadClir" ) - - if ( !IsActive( )) - { - CTelephony::TIdentityService condition = - CTelephony::EIdServiceCallerRestriction; - iTelephony->GetIdentityServiceStatus( iStatus, - condition, - iTIdentityServiceV1Pckg ); - SetActive(); - } - - MUS_LOG( "mus: [CALLMN] <- CMusClirMonitor::ReadClir" ) - } - - -// ----------------------------------------------------------------------------- -// CMusClirMonitor::TranslateResult -// ----------------------------------------------------------------------------- -// -void -CMusClirMonitor::TranslateResult( CTelephony::TIdentityServiceStatus aResult ) - { - MUS_LOG1( "mus: [CALLMN] -> CMusClirMonitor::TranslateResult aResult=%d", - aResult ) - - switch ( aResult ) - { - case CTelephony::EIdServiceActivePermanent: - case CTelephony::EIdServiceActiveDefaultRestricted: - iAllowed = EFalse; - break; - - case CTelephony::EIdServiceActiveDefaultAllowed: - case CTelephony::EIdServiceNotProvisioned: - iAllowed = ETrue; - break; - - case CTelephony::EIdServiceUnknown: - default: - ; // retain current value - } - - TMusClirSetting sendNumber( EDoNotSendOwnNumber ); - if ( iAllowed ) - { - sendNumber = ESendOwnNumber; - } - RProperty::Set( KCategoryUid, KMusClirSetting, sendNumber ); - - MUS_LOG1( "mus: [CALLMN] <- CMusClirMonitor::TranslateResult allowed=%d", - iAllowed ) - } - -// end of file diff -r 33a5d2bbf6fc -r 73a1feb507fb mmshplugins/mmshaoplugin/src/muspropertymonitor.cpp --- a/mmshplugins/mmshaoplugin/src/muspropertymonitor.cpp Thu Aug 19 09:51:39 2010 +0300 +++ b/mmshplugins/mmshaoplugin/src/muspropertymonitor.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -17,7 +17,6 @@ #include "muspropertymonitor.h" -#include "musmanager.h" #include "mussesseioninformationapi.h" #include "muslogger.h" @@ -26,10 +25,10 @@ // Symbian two-phase constructor. // ----------------------------------------------------------------------------- // -CMusPropertyMonitor* CMusPropertyMonitor::NewL() +CMusPropertyMonitor* CMusPropertyMonitor::NewL( MMusCallStateObserver& aCallStateObserver ) { MUS_LOG( "mus: [MUSAO] -> CMusPropertyMonitor::NewL" ) - CMusPropertyMonitor* self = new (ELeave) CMusPropertyMonitor(); + CMusPropertyMonitor* self = new (ELeave) CMusPropertyMonitor( aCallStateObserver ); CleanupStack::PushL( self ); self->ConstructL(); CleanupStack::Pop( self ); @@ -41,8 +40,8 @@ // C++ constructor. // ----------------------------------------------------------------------------- // -CMusPropertyMonitor::CMusPropertyMonitor() - :CActive( EPriorityNormal ) +CMusPropertyMonitor::CMusPropertyMonitor( MMusCallStateObserver& aCallStateObserver ) + :CActive( EPriorityNormal ), iCallStateObserver ( aCallStateObserver ) { } @@ -73,7 +72,6 @@ MUS_LOG( "mus: [MUSAO] -> CMusPropertyMonitor::~CMusPropertyMonitor" ) Cancel(); iPropertyEvent.Close(); - delete iManager; MUS_LOG( "mus: [MUSAO] -> <- CMusPropertyMonitor::~CMusPropertyMonitor" ) } @@ -86,40 +84,14 @@ void CMusPropertyMonitor::RunL() { MUS_LOG( "mus: [MUSAO] -> CMusPropertyMonitor::RunL" ) + // resubscribe before processing new value to prevent missing updates iPropertyEvent.Subscribe( iStatus ); SetActive(); - TInt value = NMusSessionInformationApi::ENoCall; - User::LeaveIfError(iPropertyEvent.Get( value )); - switch(value) - { - /* CallHold and ConferenceCall are Error Cases.Will be handled by - Availability Plugin and Inform to AIW. - */ - case NMusSessionInformationApi::ECallHold: - MUS_LOG( "mus: [MUSAO] CallEvent = ECallHold" ) - break; - case NMusSessionInformationApi::EConferenceCall: - MUS_LOG( "mus: [MUSAO] CallEvent = EConferenceCall" ) - break; - /* When Call is connected , start the MusClient */ - case NMusSessionInformationApi::ECallConnected: - MUS_LOG( "mus: [MUSAO] CallEvent = ECallConnected" ) - StartMusClientL(); - break; - /* When Call is disconnected , stop the MusClient */ - case NMusSessionInformationApi::ENoCall: - MUS_LOG( "mus: [MUSAO] CallEvent = ENoCall" ) - StopMusClient(); - break; - case NMusSessionInformationApi::EConferenceTerminated: - MUS_LOG( "mus: [MUSAO] CallEvent = EConferenceTerminated" ) - break; - - default: - MUS_LOG( "mus: [MUSAO] CallEvent = default. Treated ENoCall" ) - StopMusClient(); - } + + //Check if preconditions are met to start or stop the MushClient. + iCallStateObserver.MusCallStateChanged(); + MUS_LOG( "mus: [MUSAO] <- CMusPropertyMonitor::RunL" ) } @@ -137,41 +109,6 @@ } // ----------------------------------------------------------------------------- -// CMusPropertyMonitor::StartMusClient() -// This will start the MusManager Client which inturn should start -// MusManager Server and Availability Plugin. -// ----------------------------------------------------------------------------- -// -void CMusPropertyMonitor::StartMusClientL() - { - MUS_LOG( "mus: [MUSAO] -> CMusPropertyMonitor::StartMusClient" ) - if( !iManager ) - { - iManager = CMusManager::NewL(); - } - iManager->ExamineAvailabilityL(); - MUS_LOG( "mus: [MUSAO] <- CMusPropertyMonitor::StartMusClient" ) - } - -// ----------------------------------------------------------------------------- -// CMusPropertyMonitor::StopMusClient() -// This will stop the MusManager Client which inturn should stop -// MusManager Server and Availability Plugin. -// ----------------------------------------------------------------------------- -// -void CMusPropertyMonitor::StopMusClient() - { - MUS_LOG( "mus: [MUSAO] -> CMusPropertyMonitor::StopMusClient" ) - if( iManager ) - { - delete iManager; - iManager = NULL; - } - MUS_LOG( "mus: [MUSAO] <- CMusPropertyMonitor::StopMusClient" ) - - } - -// ----------------------------------------------------------------------------- // CMusPropertyMonitor::RunError() // Implemented for CActive.It will be called automatically // when a leave occurs in RunL() @@ -180,14 +117,37 @@ TInt CMusPropertyMonitor::RunError(TInt aError) { MUS_LOG1( "mus: [MUSAO] -> CMusPropertyMonitor::RunError = %d",aError ) - if( iManager ) - { - delete iManager; - iManager = NULL; - } + + // Monitoring Error Occurred, Terminate the MushSession. + TInt err = RProperty::Set( NMusSessionInformationApi::KCategoryUid, + NMusSessionInformationApi::KMusCallEvent, + NMusSessionInformationApi::ENoCall); + + iCallStateObserver.MusCallStateChanged(); + aError = KErrNone; // We handled this error already. So return KErrNone. MUS_LOG( "mus: [MUSAO] <- CMusPropertyMonitor::RunError " ) return aError; } +// ----------------------------------------------------------------------------- +// CMusPropertyMonitor::IsCallConnected() +// Checks if the call is connected: +// ----------------------------------------------------------------------------- +// +TBool CMusPropertyMonitor::IsCallConnected() + { + MUS_LOG( "mus: [MUSAO] -> CMusPropertyMonitor::IsCallConnected" ) + TInt callState = ( TInt ) NMusSessionInformationApi::ENoCall; + TInt err = KErrNone; + + err = RProperty::Get( NMusSessionInformationApi::KCategoryUid, + NMusSessionInformationApi::KMusCallEvent, + callState ); + + MUS_LOG( "mus: [MUSAO] <- CMusPropertyMonitor::IsCallConnected" ) + + return ( err == KErrNone && callState != NMusSessionInformationApi::ENoCall ); + } + // End of file diff -r 33a5d2bbf6fc -r 73a1feb507fb mmshplugins/mmshaoplugin/src/mustsypropertymonitor.cpp --- a/mmshplugins/mmshaoplugin/src/mustsypropertymonitor.cpp Thu Aug 19 09:51:39 2010 +0300 +++ b/mmshplugins/mmshaoplugin/src/mustsypropertymonitor.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -19,11 +19,11 @@ #include "mustsypropertymonitor.h" #include "muscallconferencemonitor.h" #include "muscallmonitor.h" +#include "musvoipcallmonitor.h" #include "muslogger.h" -#include "mussettings.h" -#include "musclirmonitor.h" +#include "musfactorysettings.h" -#include + #include #include #include @@ -33,10 +33,11 @@ // Symbian two-phase constructor. // ----------------------------------------------------------------------------- // -CMusTsyPropertyMonitor* CMusTsyPropertyMonitor::NewL( RMobilePhone& aPhone ) +CMusTsyPropertyMonitor* CMusTsyPropertyMonitor::NewL( RMobilePhone& aPhone, + MMusCallStateObserver& aCallStateObserver ) { MUS_LOG( "mus: [MUSAO] -> CMusTsyPropertyMonitor::NewL" ) - CMusTsyPropertyMonitor* self = new (ELeave) CMusTsyPropertyMonitor(aPhone); + CMusTsyPropertyMonitor* self = new (ELeave) CMusTsyPropertyMonitor( aPhone, aCallStateObserver ); CleanupStack::PushL( self ); self->ConstructL(); CleanupStack::Pop( self ); @@ -53,9 +54,10 @@ { MUS_LOG( "mus: [MUSAO] -> CMusTsyPropertyMonitor::~CMusTsyPropertyMonitor" ) Cancel(); - delete iConferenceMonitor; - delete iClirMonitor; - iCallMonitorArray.ResetAndDestroy(); + delete iConferenceMonitor; + iCallMonitorArray.ResetAndDestroy(); + iCallMonitorArray.Close(); + RemoveAllVoipCallMonitors(); iLine.Close(); MUS_LOG( "mus: [MUSAO] <- CMusTsyPropertyMonitor::~CMusTsyPropertyMonitor" ) } @@ -70,13 +72,7 @@ CActiveScheduler::Add(this); User::LeaveIfError( iLine.Open( iPhone, KMmTsyVoice1LineName() ) ); iConferenceMonitor = CMusCallConferenceMonitor::NewL( - iPhone,iLine,iCallMonitorArray); - - if (MultimediaSharingSettings::PrivacySetting()) - { - iClirMonitor = CMusClirMonitor::NewL(); - } - + iPhone,iLine,iCallMonitorArray); User::LeaveIfError( iPropertyEvent.Attach( KPSUidCtsyCallInformation, KCTsyCallState ) ); @@ -89,8 +85,8 @@ // C++ constructor. // ----------------------------------------------------------------------------- // -CMusTsyPropertyMonitor::CMusTsyPropertyMonitor(RMobilePhone& aPhone) - : CActive( EPriorityNormal ),iPhone(aPhone) +CMusTsyPropertyMonitor::CMusTsyPropertyMonitor(RMobilePhone& aPhone, MMusCallStateObserver& aCallStateObserver ) + : CActive( EPriorityNormal ),iPhone(aPhone), iCallStateObserver ( aCallStateObserver ) { } @@ -106,24 +102,36 @@ // subscribe , so that we dont miss any events. iPropertyEvent.Subscribe( iStatus ); SetActive(); - TInt value = EPSCTsyCallStateUninitialized; - User::LeaveIfError(iPropertyEvent.Get( value )); - MUS_LOG1( "mus: [MUSAO] iTsyCallMonitor->CallState = %d",value ) - switch(value) + TPSCTsyCallState callState = EPSCTsyCallStateUninitialized; + User::LeaveIfError(iPropertyEvent.Get( (TInt&)callState )); + TPSCTsyCallType callType = EPSCTsyCallTypeUninitialized; + User::LeaveIfError(RProperty::Get(KPSUidCtsyCallInformation,KCTsyCallType, + (TInt&)callType)); + MUS_LOG1( "mus: [MUSAO] iTsyCallMonitor->CallState = %d",callState ) + switch(callState) { - case EPSCTsyCallStateNone: + case EPSCTsyCallStateNone: + MUS_LOG( "mus: [MUSAO] EPSCTsyCallStateNone" ) SetStateL(NMusSessionInformationApi::ENoCall); // Sometimes disconnected call goes stright to this state // so we have to call this function to remove call monitors. - RemoveAllCallMonitor(); - break; - case EPSCTsyCallStateDisconnecting: - case EPSCTsyCallStateAnswering: - case EPSCTsyCallStateConnected: - case EPSCTsyCallStateHold: - // in all above states if multible call exist then - // we have to find all the calls state and do accordingly. - MonitorCallL(); + MonitorCallL( callState,callType); + break; + case EPSCTsyCallStateDisconnecting: + MUS_LOG( "mus: [MUSAO] EPSCTsyCallStateDisconnecting" ) + MonitorCallL( callState,callType); + break; + case EPSCTsyCallStateAnswering: + MUS_LOG( "mus: [MUSAO] EPSCTsyCallStateAnswering" ) + MonitorCallL( callState,callType); + break; + case EPSCTsyCallStateConnected: + MUS_LOG( "mus: [MUSAO] EPSCTsyCallStateConnected" ) + MonitorCallL( callState,callType); + break; + case EPSCTsyCallStateHold: + MUS_LOG( "mus: [MUSAO] EPSCTsyCallStateHold" ) + SetStateL(NMusSessionInformationApi::ECallHold); break; default: MUS_LOG( "mus: [MUSAO] Undesired CallState " ) @@ -179,19 +187,13 @@ } MUS_LOG1( "mus: [MUSAO] Call Exist = %d ",isCallExist ) if( !isCallExist ) - { - if ( iClirMonitor ) - { - //Start async reading of CLIR from phone settings - iClirMonitor->ReadClir(); - } - + { CMusCallMonitor* callMonitor = CMusCallMonitor::NewL( aCallName, IsPttCallExist() ); CleanupStack::PushL( callMonitor ); iCallMonitorArray.AppendL( callMonitor ); CleanupStack::Pop( callMonitor ); - callMonitor->StartMonitorL(iLine, *this); + callMonitor->StartMonitorL(iLine, *this, iCallStateObserver ); } MUS_LOG( "mus: [MUSAO] <- CMusTsyPropertyMonitor::AddCallMonitorL" ) } @@ -320,13 +322,52 @@ MUS_LOG( "mus: [MUSAO] <- CMusTsyPropertyMonitor::SetStateL" ) } - // ----------------------------------------------------------------------------- // CMusTsyPropertyMonitor::MonitorCallL() -// Monitors the call and if needed adds/removes call monitor. +// Decides which call monitor (CS,VOIP etc ) has to be called. // ----------------------------------------------------------------------------- // -void CMusTsyPropertyMonitor::MonitorCallL() +void CMusTsyPropertyMonitor::MonitorCallL( const TPSCTsyCallState& aCallState, + const TPSCTsyCallType& aCallType) + { + MUS_LOG( "mus: [MUSAO] -> CCMusTsyPropertyMonitor::MonitorCallL" ) + switch( aCallType ) + { + case EPSCTsyCallTypeUninitialized: + case EPSCTsyCallTypeNone: + case EPSCTsyCallTypeFax: + case EPSCTsyCallTypeData: + case EPSCTsyCallTypeHSCSD: + case EPSCTsyCallTypeH324Multimedia: + break;// dont care + case EPSCTsyCallTypeCSVoice: + MonitorCSCallL(); + break; + case EPSCTsyCallTypeVoIP: + { + // if error occured when reading factory setting key + // behave default ie all calls supported. + TBool supported = ETrue; + TRAP_IGNORE( supported = MusFactorySettings::IsSupportedL( aCallType ) ) + if( supported) + { + MonitorVoipCallL( aCallState ); + } + break; + } + default: + break; + } + // Check now for multimediasharing call criteria. + CheckCallCriteriaL(); + MUS_LOG( "mus: [MUSAO] <- CCMusTsyPropertyMonitor::MonitorCallL" ) + } +// ----------------------------------------------------------------------------- +// CMusTsyPropertyMonitor::MonitorCSCallL() +// Monitors the CS call and if needed adds/removes call monitor. +// ----------------------------------------------------------------------------- +// +void CMusTsyPropertyMonitor::MonitorCSCallL() { MUS_LOG( "mus: [MUSAO] -> CMusTsyPropertyMonitor::MonitorCallL") TInt callCount; @@ -349,22 +390,173 @@ { AddCallMonitorL(callInfo.iCallName); } - } - // Sometimes when call get disconnected then call object disappears.So - // check the call state or open the call , if there is an error or undesired - // call state , remove that callmonitor from array. - RemoveUnUsedCallMonitors(); + } + MUS_LOG( "mus: [MUSAO] <- CMusTsyPropertyMonitor::MonitorCallL") + } - if(iCallMonitorArray.Count() > 1) +// ----------------------------------------------------------------------------- +// CMusTsyPropertyMonitor::MonitorVoipCallL() +// Monitors the voip call and if needed adds/removes call monitor. +// ----------------------------------------------------------------------------- +// +void CMusTsyPropertyMonitor::MonitorVoipCallL( const TPSCTsyCallState& aCallState) + { + MUS_LOG( "mus: [MUSAO] -> CMusTsyPropertyMonitor::MonitorVoipCallL") + // TODO : Call Name should be read from covergence api [CCE/CCH] + // which is not available as of now 22-Dec-2008 + TName callName(_L("Voip 1")); + switch(aCallState) + { + case EPSCTsyCallStateDisconnecting: + MUS_LOG( "mus: [MUSAO] EPSCTsyCallStateDisconnecting" ) + RemoveVoipCallMonitor(callName); + break; + case EPSCTsyCallStateAnswering: + case EPSCTsyCallStateConnected: + MUS_LOG( "mus: [MUSAO] EPSCTsyCallStateAnswering/EPSCTsyCallStateConnected" ) + AddVoipCallMonitorL(callName); + break; + default: + break; + } + MUS_LOG( "mus: [MUSAO] <- CMusTsyPropertyMonitor::MonitorVoipCallL") + } + +// ----------------------------------------------------------------------------- +// CMusTsyPropertyMonitor::AddVoipCallMonitorL( TName aCallName ) +// Adds new voip call monitor if the call is not monitored already. +// ----------------------------------------------------------------------------- +// +void CMusTsyPropertyMonitor::AddVoipCallMonitorL(TName& aCallName) + { + MUS_LOG_TDESC( "mus: [MUSAO] -> CMusTsyPropertyMonitor::AddCallMonitorL"\ + ,aCallName ) + TBool isCallExist = EFalse; + for ( TInt i = 0; i < iVoipCallMonitorArray.Count() && !isCallExist; i++ ) + { + if( iVoipCallMonitorArray[i]->IsEqual( aCallName ) ) + { + isCallExist = ETrue; + } + } + MUS_LOG1( "mus: [MUSAO] Call Exist = %d ",isCallExist ) + if( !isCallExist ) { - // it is already multicall so atleast one should be hold. - // so set the state first to hold - SetStateL(NMusSessionInformationApi::ECallHold); - // still we dont know here about conference state so - // let the conference call monitor decide . - iConferenceMonitor->SetStateL(); + CMusVoipCallMonitor* callMonitor = + CMusVoipCallMonitor::NewL( aCallName, iCallStateObserver ); + CleanupStack::PushL( callMonitor ); + iVoipCallMonitorArray.AppendL( callMonitor ); + CleanupStack::Pop( callMonitor ); + } + MUS_LOG( "mus: [MUSAO] <- CMusTsyPropertyMonitor::AddCallMonitorL" ) + } + + +// ----------------------------------------------------------------------------- +// CMusTsyPropertyMonitor::RemoveCallEventMonitorL( TName aCallName ) +// Remove the Call Monitor if it exist in array. +// ----------------------------------------------------------------------------- +// +void CMusTsyPropertyMonitor::RemoveVoipCallMonitor( TName& aCallName ) + { + MUS_LOG_TDESC( "mus: [MUSAO] -> CMusTsyPropertyMonitor::RemoveCallMonitor " + ,aCallName ) + for ( TInt i = 0; i < iVoipCallMonitorArray.Count(); i++ ) + { + if( iVoipCallMonitorArray[i]->IsEqual( aCallName ) ) + { + delete iVoipCallMonitorArray[i]; + iVoipCallMonitorArray.Remove(i); + break; + } } - MUS_LOG( "mus: [MUSAO] <- CMusTsyPropertyMonitor::MonitorCallL") + MUS_LOG( "mus: [MUSAO] <- CMusTsyPropertyMonitor::RemoveCallMonitor" ) + } + +// ----------------------------------------------------------------------------- +// CMusTsyPropertyMonitor::RemoveAllVoipCallMonitors +// Remove all voip call monitors +// ----------------------------------------------------------------------------- +// +void CMusTsyPropertyMonitor::RemoveAllVoipCallMonitors( ) + { + MUS_LOG( "mus: [MUSAO] -> CMusTsyPropertyMonitor::RemoveAllVoipCallMonitors ") + iVoipCallMonitorArray.ResetAndDestroy(); + iVoipCallMonitorArray.Close(); + MUS_LOG( "mus: [MUSAO] <- CMusTsyPropertyMonitor::RemoveAllVoipCallMonitors" ) + } + +// ----------------------------------------------------------------------------- +// CMusTsyPropertyMonitor::CheckCallCriteria +// Checks the Multimediasharing call criterias +// ----------------------------------------------------------------------------- +// +void CMusTsyPropertyMonitor::CheckCallCriteriaL() + { + TInt csCall = iCallMonitorArray.Count(); + TInt voipCall = iVoipCallMonitorArray.Count(); + switch( csCall ) + { + case 0 : + { + switch( voipCall ) + { + /* No cs call or voip call */ + case 0 : + { + User::LeaveIfError( + RProperty::Set( NMusSessionInformationApi::KCategoryUid, + NMusSessionInformationApi::KMusCallEvent, + 0 )); + SetStateL(NMusSessionInformationApi::ENoCall); + break; + } + /* No cs call but one voip call */ + case 1 : + { + iVoipCallMonitorArray[0]-> + SetStateL(NMusSessionInformationApi::ECallConnected); + break; + } + /* No cs call but more than one voip call */ + default: SetStateL(NMusSessionInformationApi::ECallHold); + break; + } + break; + } + case 1 : + { + switch( voipCall ) + { + /* One cs call but no voip call */ + case 0 : break;// Will be handled by cs call monitors. + /* One cs call and one or more voip calls */ + default : SetStateL(NMusSessionInformationApi::ECallHold); + break; + } + break; + } + default: // 2 or more CS calls + { + /* Sometimes when call get disconnected then call object disappears.So + * check the call state or open the call , if there is an error or undesired + * call state , remove that callmonitor from array. + */ + RemoveUnUsedCallMonitors(); + + /* It is already multicall so atleast one should be under hold. + * so set the state first to hold and then let the conference + * monitor decide the conference state. + */ + SetStateL(NMusSessionInformationApi::ECallHold); + + /* Still we dont know here about conference state so + * let the conference call monitor decide . + */ + iConferenceMonitor->SetStateL(); + break; + } + } } @@ -449,4 +641,41 @@ MUS_LOG( "mus: [MUSAO] <- CMusTsyPropertyMonitor::NotifyCallStateChanged" ) } + + + +// ----------------------------------------------------------------------------- +// CMusTsyPropertyMonitor::IsDataReadyL +// ----------------------------------------------------------------------------- +// +TBool CMusTsyPropertyMonitor::IsDataReadyL() + { + MUS_LOG( "mus: [MUSAO] -> CMusTsyPropertyMonitor::IsDataReadyL" ) + + TBool dataReady = EFalse; + TInt csCall = iCallMonitorArray.Count(); + TInt voipCall = iVoipCallMonitorArray.Count(); + + // In case of Conference Notify that data is ready. + if ( iConferenceMonitor->GetConfStatus() != RMobileConferenceCall::EConferenceIdle ) + { + MUS_LOG( "mus: [MUSAO] Conference CASE" ) + dataReady = ETrue; + } + else if ( csCall == 1 && !voipCall ) + { + MUS_LOG( "mus: [MUSAO] CS CALL" ) + dataReady = iCallMonitorArray[0]->IsDataReadyL(); + } + else if ( voipCall == 1 && !csCall ) + { + MUS_LOG( "mus: [MUSAO] VOIP CALL" ) + dataReady = iVoipCallMonitorArray[0]->IsDataReadyL(); + } + + MUS_LOG1( "mus: [MUSAO] <- CMusTsyPropertyMonitor::IsDataReadyL = %d",dataReady) + return dataReady; + } + // End of file + diff -r 33a5d2bbf6fc -r 73a1feb507fb mmshplugins/mmshaoplugin/src/musvoipcallmonitor.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmshplugins/mmshaoplugin/src/musvoipcallmonitor.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,502 @@ +/* +* 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: Monitors the VOIP calls. +* +*/ + + +#include +#include + +// Call Information API +#include + +// SP Settings +#include +#include +#include +#include + +#include "musvoipcallmonitor.h" +#include "mussesseioninformationapi.h" +#include "muslogger.h" + +const TUint KMusAoRemoteInfoMonitoringTimeout = 2000000; // 2 seconds +_LIT( KSipAt, "@" ); + +// ----------------------------------------------------------------------------- +// Symbian two-phase constructor. +// ----------------------------------------------------------------------------- +// +CMusVoipCallMonitor* CMusVoipCallMonitor::NewL( TName& aCallName, + MMusCallStateObserver& aCallStateObserver ) + { + MUS_LOG( "mus: [MUSAO] -> CMusVoipCallMonitor::NewL" ) + CMusVoipCallMonitor* self = + new (ELeave) CMusVoipCallMonitor( aCallName, aCallStateObserver ); + CleanupStack::PushL( self ); + self->ConstructL( ); + CleanupStack::Pop( self ); + MUS_LOG( "mus: [MUSAO] <- CMusVoipCallMonitor::NewL" ) + return self; + } + + +// ----------------------------------------------------------------------------- +// C++ destructor. +// ----------------------------------------------------------------------------- +// +CMusVoipCallMonitor::~CMusVoipCallMonitor() + { + MUS_LOG( "mus: [MUSAO] -> CMusVoipCallMonitor::~CMusVoipCallMonitor" ) + + ResetCallProviderName(); + + StopRemoteInfoMonitoring(); + + iPropertyEvent.Close(); + + delete iGuardTimer; + + MUS_LOG( "mus: [MUSAO] <- CMusVoipCallMonitor::~CMusVoipCallMonitor" ) + } + + +// ----------------------------------------------------------------------------- +// C++ constructor. +// ----------------------------------------------------------------------------- +// +CMusVoipCallMonitor::CMusVoipCallMonitor( TName& aCallName, + MMusCallStateObserver& aCallStateObserver ): + CActive( CActive::EPriorityStandard ), + iCallName ( aCallName ), + iCallStateObserver ( aCallStateObserver ), + iGuardTimerCallBack( GuardTimerExpired, this ) + { + CActiveScheduler::Add( this ); + + iGuardTimerEntry.Set( iGuardTimerCallBack ); + } + + +// ----------------------------------------------------------------------------- +// Symbian second-phase constructor. +// ----------------------------------------------------------------------------- +// +void CMusVoipCallMonitor::ConstructL( ) + { + MUS_LOG( "mus: [MUSAO] -> CMusVoipCallMonitor::ConstructL" ) + + User::LeaveIfError( iPropertyEvent.Attach( + KPSUidTelRemotePartyInformation, + KTelCLINumber ) ); + + iGuardTimer = CDeltaTimer::NewL( CActive::EPriorityStandard ); + + MUS_LOG( "mus: [MUSAO] <- CMusVoipCallMonitor::ConstructL" ) + } + +// ----------------------------------------------------------------------------- +// CMusVoipCallMonitor::SetStateL( ) +// Sets the call state property key.See mussesseioninformationapi.h +// Also sets the call information if call state is Connected. +// If call is connected but remote info cannot be found, information +// publishing is delayed until remote info comes available or monitoring +// for the info timeouts. In voip case, remote info should be basically +// always available, but in some cases it is not immediately available +// when call status changes to connected. +// ----------------------------------------------------------------------------- +// +void CMusVoipCallMonitor::SetStateL(NMusSessionInformationApi::TMusCallEvent aVal) + { + MUS_LOG1( "mus: [MUSAO] -> CMusVoipCallMonitor::SetStateL, aVal %d", aVal ) + // set the call state only if the call count is one else it should be decided + // by conference monitor or line/tsy monitor. + + TBool delayStateChange( EFalse ); + if ( aVal == NMusSessionInformationApi::ECallConnected ) + { + if ( !RemoteInfoExistsL() ) + { + MonitorForRemoteInfoL(); + delayStateChange = ETrue; + } + } + else + { + StopRemoteInfoMonitoring(); + } + + if ( delayStateChange ) + { + MUS_LOG( "mus: [MUSAO] state change delayed!" ) + } + else + { + ReportStateChangeL( aVal ); + } + + MUS_LOG( "mus: [MUSAO] <- CMusVoipCallMonitor::SetStateL" ) + } + +///----------------------------------------------------------------------------- +// CMusVoipCallMonitor::SetCallInfoL( ) +// ----------------------------------------------------------------------------- +// +void CMusVoipCallMonitor::SetCallInfoL() + { + MUS_LOG( "mus: [MUSAO] -> CMusVoipCallMonitor::SetCallInfoL") + + // Set Call Provider Information + TUint32 serviceId = CallServiceIdL(); + SetCallProviderInfoL( serviceId ); + + HBufC* remoteUri = HBufC::NewLC( RProperty::KMaxPropertySize ); + TPtr rUri = remoteUri->Des(); + TInt err = RProperty::Get( KPSUidTelRemotePartyInformation, + KTelCLINumber, + rUri ); + + if ( err == KErrNone && remoteUri->Des().Length() > 0 ) + { + MUS_LOG_TDESC( "mus: [MUSAO] voip remote name: ", remoteUri->Des()); + + // Add "sip:" prefix to remoteUri unless it already exists + _LIT( KSipPrefix, "sip:" ); + TPtr prefix = remoteUri->Des().LeftTPtr( KSipPrefix().Length() ); + if ( prefix.Compare( KSipPrefix ) != 0 ) + { + if ( remoteUri->Des().Length() + KSipPrefix().Length() > + remoteUri->Des().MaxLength() ) + { + User::Leave( KErrOverflow ); + } + remoteUri->Des().Insert( 0, KSipPrefix ); + } + //if domain not present, add domain from voip profile (username) + if ( remoteUri->Find( KSipAt ) == KErrNotFound ) + { + rUri.Set( remoteUri->Des() ); + AddDomainFromOwnUsernameL( serviceId, rUri ); + MUS_LOG_TDESC ( "mus: [MUSAO] full voip remote name:", (*remoteUri) ) + } + } + else + { + remoteUri->Des().Zero(); + } + + User::LeaveIfError( RProperty::Set( + NMusSessionInformationApi::KCategoryUid, + NMusSessionInformationApi::KMusTelNumber, remoteUri->Des() ) ); + + CleanupStack::PopAndDestroy(remoteUri); + MUS_LOG( "mus: [MUSAO] <- CMusVoipCallMonitor::SetCallInfoL" ) + } + +///----------------------------------------------------------------------------- +// CMusVoipCallMonitor::AddDomainFromOwnUsernameL( ) +// ----------------------------------------------------------------------------- +// +void CMusVoipCallMonitor::AddDomainFromOwnUsernameL( + TUint32 /*aServiceId*/, + TDes16& /*aUri*/ ) + { + MUS_LOG( "mus: [MUSAO] -> CMusVoipCallMonitor::AddDomainFromOwnUsernameL") + MUS_LOG( "mus: [MUSAO] -> CMusVoipCallMonitor::AddDomainFromOwnUsernameL, NOT SUPPORTED") + MUS_LOG( "mus: [MUSAO] <- CMusVoipCallMonitor::AddDomainFromOwnUsernameL") + } + +///----------------------------------------------------------------------------- +// CMusVoipCallMonitor::CallServiceIdL( ) +// ----------------------------------------------------------------------------- +// +TUint32 CMusVoipCallMonitor::CallServiceIdL() + { + MUS_LOG( "mus: [MUSAO] -> CMusVoipCallMonitor::CallServiceIdL") + TUint32 serviceId( 0 ); + MUS_LOG( "mus: [MUSAO] <- CMusVoipCallMonitor::CallServiceIdL, NOT SUPPORTED") + MUS_LOG( "mus: [MUSAO] <- CMusVoipCallMonitor::CallServiceIdL") + return serviceId; + } + +///----------------------------------------------------------------------------- +// CMusVoipCallMonitor::SetCallProviderInfoL( ) +// ----------------------------------------------------------------------------- +// +void CMusVoipCallMonitor::SetCallProviderInfoL( TUint32 aServiceId ) + { + MUS_LOG( "mus: [MUSAO] -> CMusVoipCallMonitor::SetCallProviderInfoL") + CSPSettings* settings = CSPSettings::NewLC(); + CSPEntry* entry = CSPEntry::NewLC(); + + TInt errorCode = settings->FindEntryL( aServiceId, *entry ); + + if ( errorCode == KErrNone && entry != NULL ) + { + const TDesC& name = entry->GetServiceName(); + + MUS_LOG_TDESC ( "mus: [MUSAO]] CallProviderName IS -->", name ) + User::LeaveIfError(RProperty::Set( + NMusSessionInformationApi::KCategoryUid, + NMusSessionInformationApi::KMUSCallProvider, + name)); + } + + CleanupStack::PopAndDestroy( entry ); + CleanupStack::PopAndDestroy( settings ); + MUS_LOG( "mus: [MUSAO] <- CMusVoipCallMonitor::SetCallProviderInfoL" ) + } + + +// ----------------------------------------------------------------------------- +// Checks the aName is equal to this monitors name. +// @return ETrue if matches else EFalse +// ----------------------------------------------------------------------------- +// +TBool CMusVoipCallMonitor::IsEqual(TName& aName) + { + MUS_LOG( "mus: [MUSAO] -> CMusVoipCallMonitor::IsEqual" ) + MUS_LOG_TDESC( "mus: [MUSAO] -> aName : ", aName ); + MUS_LOG_TDESC( "mus: [MUSAO] -> iCallName : ", iCallName ); + TBool val = EFalse ; + val = ( aName == iCallName ); + MUS_LOG1( "mus: [MUSAO] <- CMusCallMonitor::IsEqual = %d",val ) + return val; + } + +// ----------------------------------------------------------------------------- +// CMusVoipCallMonitor::RunL +// ----------------------------------------------------------------------------- +// +void CMusVoipCallMonitor::RunL() + { + MUS_LOG( "mus: [MUSAO] -> CMusVoipCallMonitor::RunL" ) + + if ( RemoteInfoExistsL() ) + { + // Connected state reporting was delayed because not having + // remote info, now it can be reported and monitoring is not needed anymore + StopRemoteInfoMonitoring(); + ReportStateChangeL( NMusSessionInformationApi::ECallConnected ); + } + else + { + // resubscribe + iPropertyEvent.Subscribe( iStatus ); + SetActive(); + } + + MUS_LOG( "mus: [MUSAO] <- CMusVoipCallMonitor::RunL" ) + } + + +// ----------------------------------------------------------------------------- +// CMusVoipCallMonitor::DoCancel +// ----------------------------------------------------------------------------- +// +void CMusVoipCallMonitor::DoCancel() + { + MUS_LOG( "mus: [MUSAO] -> CMusVoipCallMonitor::DoCancel" ) + + iPropertyEvent.Cancel(); + + MUS_LOG( "mus: [MUSAO] <- CMusVoipCallMonitor::DoCancel" ) + } + +// ----------------------------------------------------------------------------- +// CMusVoipCallMonitor::RunError +// ----------------------------------------------------------------------------- +// +TInt CMusVoipCallMonitor::RunError( TInt aError ) + { + MUS_LOG1( "mus: [MUSAO] -> CMusVoipCallMonitor::RunError = %d", aError ) + if ( aError != KErrNoMemory ) + { + aError = KErrNone; + } + MUS_LOG( "mus: [MUSAO] <- CMusVoipCallMonitor::RunError" ) + return aError; + } + +// ----------------------------------------------------------------------------- +// CMusVoipCallMonitor::RemoteInfoExistsL +// ----------------------------------------------------------------------------- +// +TBool CMusVoipCallMonitor::RemoteInfoExistsL() + { + MUS_LOG( "mus: [MUSAO] -> CMusVoipCallMonitor::RemoteInfoExistsL" ) + + HBufC* remoteUri = HBufC::NewLC(RProperty::KMaxPropertySize); + TPtr rUri = remoteUri->Des(); + + TInt err = RProperty::Get( KPSUidTelRemotePartyInformation, + KTelCLINumber, + rUri ); + + TBool remoteInfoExists( err == KErrNone && remoteUri->Des().Length() > 0 ); + CleanupStack::PopAndDestroy(remoteUri); + + MUS_LOG1( "mus: [MUSAO] <- CMusVoipCallMonitor::RemoteInfoExistsL = %d", + remoteInfoExists ) + + return remoteInfoExists; + } + +// ----------------------------------------------------------------------------- +// CMusVoipCallMonitor::MonitorForRemoteInfoL +// Start monitoring remote info P&S key. Guard timer is started +// to prevent waiting for the infomation forever. +// ----------------------------------------------------------------------------- +// +void CMusVoipCallMonitor::MonitorForRemoteInfoL() + { + MUS_LOG( "mus: [MUSAO] -> CMusVoipCallMonitor::MonitorForRemoteInfoL" ) + + if ( !IsActive() ) + { + MUS_LOG( "mus: [MUSAO] activate" ) + + iGuardTimer->Remove( iGuardTimerEntry ); + TTimeIntervalMicroSeconds32 interval( KMusAoRemoteInfoMonitoringTimeout ); + iGuardTimer->Queue( interval, iGuardTimerEntry ); + + iPropertyEvent.Subscribe( iStatus ); + SetActive(); + } + + MUS_LOG( "mus: [MUSAO] <- CMusVoipCallMonitor::MonitorForRemoteInfoL" ) + } + +// ----------------------------------------------------------------------------- +// CMusVoipCallMonitor::MonitorForRemoteInfoL +// ----------------------------------------------------------------------------- +// +void CMusVoipCallMonitor::StopRemoteInfoMonitoring() + { + MUS_LOG( "mus: [MUSAO] -> CMusVoipCallMonitor::StopRemoteInfoMonitoring" ) + + if ( iGuardTimer ) + { + iGuardTimer->Remove( iGuardTimerEntry ); + } + + Cancel(); + + MUS_LOG( "mus: [MUSAO] <- CMusVoipCallMonitor::StopRemoteInfoMonitoring" ) + } + +// ----------------------------------------------------------------------------- +// CMusVoipCallMonitor::ReportStateChangeL +// ----------------------------------------------------------------------------- +// +void CMusVoipCallMonitor::ReportStateChangeL( + NMusSessionInformationApi::TMusCallEvent aVal ) + { + MUS_LOG( "mus: [MUSAO] -> CMusVoipCallMonitor::ReportStateChangeL" ) + + TInt currentVal = 0; + User::LeaveIfError(RProperty::Get( NMusSessionInformationApi::KCategoryUid, + NMusSessionInformationApi::KMusCallEvent, + currentVal)); + + + // Report only if the value changed else do not publish. + if(currentVal != (TInt)aVal) + { + User::LeaveIfError(RProperty::Set( + NMusSessionInformationApi::KCategoryUid, + NMusSessionInformationApi::KMusCallEvent, + aVal )); + } + // When call is connected and the callcount is one, + // set the call informations. + if( aVal==NMusSessionInformationApi::ECallConnected ) + { + SetCallInfoL(); + } + + iCallStateObserver.MusCallStateChanged(); + MUS_LOG( "mus: [MUSAO] <- CMusVoipCallMonitor::ReportStateChangeL" ) + } + +// ----------------------------------------------------------------------------- +// CMusVoipCallMonitor::GuardTimerExpired +// If timer expired, it took too long to get remote party information via +// P&S monitoring. Because of monitoring, call connected was not yet informed, +// inform it now. +// ----------------------------------------------------------------------------- +// +TInt CMusVoipCallMonitor::GuardTimerExpired( TAny* aPtr ) + { + MUS_LOG( "mus: [MUSAO] -> CMusVoipCallMonitor::GuardTimerExpired" ) + if ( aPtr ) + { + CMusVoipCallMonitor* self = reinterpret_cast( aPtr ); + self->StopRemoteInfoMonitoring(); + TRAP_IGNORE( + self->ReportStateChangeL( NMusSessionInformationApi::ECallConnected ) ) + } + MUS_LOG( "mus: [MUSAO] <- CMusVoipCallMonitor::GuardTimerExpired" ) + + return KErrNone; + } + +// -------------------------------------------------------------------------------- +// CMusCallConferenceMonitor::IsDataReadyL() +// Checks if Data is ready VoIP Call. +// -------------------------------------------------------------------------------- + +TBool CMusVoipCallMonitor::IsDataReadyL() + { + //This function need to updated if some other P/S Key is published + //to ensure correct behaviour. + + MUS_LOG( "mus: [MUSAO] -> CMusVoipCallMonitor::IsDataReadyL" ) + + // Ensure Provider Information is Availble. + HBufC* providerInfo = HBufC::NewLC( RProperty::KMaxPropertySize ); + TPtr pInfo = providerInfo->Des(); + TInt err = KErrNone; + + err = RProperty::Get( NMusSessionInformationApi::KCategoryUid, + NMusSessionInformationApi::KMUSCallProvider, + pInfo ); + + TBool providerInfoExisit ( err == KErrNone && providerInfo->Des().Length() > 0 ); + CleanupStack::PopAndDestroy( providerInfo ); + + MUS_LOG( "mus: [MUSAO] <- CMusVoipCallMonitor::IsDataReadyL" ) + return !IsActive() && providerInfoExisit; + } + + +// -------------------------------------------------------------------------------- +// Reset the Call Provider Information. +// -------------------------------------------------------------------------------- + +void CMusVoipCallMonitor::ResetCallProviderName( ) + { + MUS_LOG( "mus: [MUSAO] <- CMusVoipCallMonitor::ResetCallProviderName" ) + TInt errorCode = RProperty::Set( NMusSessionInformationApi::KCategoryUid, + NMusSessionInformationApi::KMUSCallProvider, + KNullDesC ); + + // Error Code is just for debug only + MUS_LOG1( "mus: [MUSAO] ErrorCode = %d", errorCode ) + MUS_LOG( "mus: [MUSAO] <- CMusVoipCallMonitor::ResetCallProviderName" ) + } + + +// End of file diff -r 33a5d2bbf6fc -r 73a1feb507fb mmshplugins/mmshaoplugin/tsrc/ut_aoplugin/Stubs/inc/callinformation.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmshplugins/mmshaoplugin/tsrc/ut_aoplugin/Stubs/inc/callinformation.h Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,153 @@ +/* +* Copyright (c) 2008-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: Call state information +* +*/ + + +#ifndef CALLINFORMATION_H +#define CALLINFORMATION_H + +#include +#include + +/** The category UID for the messages in this header file. */ +const TUid KCatCallInformation = { 0x102078FD }; + +/** Version number of this API */ +const TInt KCallInformationVersionMajor( 1 ); +const TInt KCallInformationVersionMinor( 0 ); +const TInt KCallInformationVersionBuild( 0 ); + +#include + +/** + * Holds single calls information. + * + * @since S60 v5.1 + */ +NONSHARABLE_CLASS( TCallInfo ) : public MCall + { +public: + + TInt CallIndex() const { return iIndex; } + + CCPCall::TCallType CallType() const { return iType; } + + CCPCall::TCallState CallState() const { return iState; } + + TUint32 ServiceId() const { return iServiceId; } + + CCPCall::TCallDirection CallDirection() const { return iDirection; } + + CCPCall::TCallState iState; + CCPCall::TCallType iType; + CCPCall::TCallDirection iDirection; + TInt iIndex; + TInt iIdentifier; + TUint32 iServiceId; + }; + + +/** + * Class holding information about calls. + * Can be packed for IPC purposes. + * + * @since S60 v5.1 + */ +NONSHARABLE_CLASS( CCallInfos ) : public CBase + { +public: + + /** + * Two-phased constructor. + */ + static CCallInfos* NewL(); + + /** + * Two-phased constructor. + */ + static CCallInfos* NewLC(); + + /** + * Destructor. + */ + virtual ~CCallInfos(); + + /** + * Adds information about a call. + * + * @since S60 v5.1 + * @param aCallInfo Call information to be added. + */ + inline void AddL( TCallInfo& aCallInfo ); + + /** + * Returns information about all calls. + * + * @since S60 v5.1 + * @return Reference to call info array + */ + inline const RArray& CallInfos() const; + + /** + * Packages this class for IPC transfer. + * + * @since S60 v5.1 + * @return Pointer to descriptor holding the class. + */ + inline HBufC8* ExternalizeL() const; + + /** + * Intializes the class from descriptor + * + * @since S60 v5.1 + * @param aCallInfos Reference to descriptor containg the class data. + */ + inline void InternalizeL( const TDesC8& aCallInfos ); + + + // Helper function for the STUB ONLY: + inline void AddCallInfosL(); + +private: + + inline CCallInfos(); + + +private: + RArray iCallInfos; + }; + +/** + * Commands + */ +enum TCallInformationCommands + { + EGetAllCallStates = 0 + }; + +/** + * Events + */ +enum TCallInformationEvents + { + EChangesInCallStates = 0 + }; + + +// Implementation is stubed. +#include "ccallinfos_stub.inl" + +#endif // CALLINFORMATION_H diff -r 33a5d2bbf6fc -r 73a1feb507fb mmshplugins/mmshaoplugin/tsrc/ut_aoplugin/Stubs/inc/ccallinfoiter.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmshplugins/mmshaoplugin/tsrc/ut_aoplugin/Stubs/inc/ccallinfoiter.h Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,137 @@ +/* +* Copyright (c) 2007-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: Iterator class for going through ongoing calls. +* +*/ + + +#ifndef C_CALLINFOITER_H +#define C_CALLINFOITER_H + +// INCLUDES +#include +#include + +// forward declarations +class CCallInfos; +class MCall; + +// CLASS DECLARATION + +/** + * Class to be used for going through ongoing calls. + * + * @code + * 1) Go trough all calls, no need to call Count() first. + * CCallInfoIter& iter = iCallInfo->GetCallsL(); + * + * for( iter.First(); !iter.IsDone(); iter.Next() ) + * { + * const MCall& call( iter.Current() ); + * DoSomethingWhenCallDetected( call ); + * } + * + * 2) Check if there are any calls + * CCallInfoIter& iter = iCallInfo->GetCallsL(); + * TInt amountOfCalls = iter.Count(); + * + * if ( amountOfCalls == 0) + * { + * DoSomethingBecauseAllCallsHaveEnded(); + * } + * + * @endcode + * + * @lib telephonyservice.lib + * @since S60 v5.1 + */ +NONSHARABLE_CLASS( CCallInfoIter ) : public CBase + { +public: + + /** + * Two-phased constructor. + * @param aCallInfos Container for call information. + */ + static CCallInfoIter* NewL( CCallInfos& aCallInfos ); + + /** + * Two-phased constructor. + * @param aCallInfos Container for call information. + */ + static CCallInfoIter* NewLC( CCallInfos& aCallInfos ); + + /** + * Destructor. + */ + ~CCallInfoIter(); + + /** + * Intializes the current call to the first call + * + * @since S60 v5.1 + */ + IMPORT_C void First(); + + /** + * Tests whether all calls are went through + * + * @since S60 v5.1 + */ + IMPORT_C TBool IsDone() const; + + /** + * Advances the current call to the next call + * + * @since S60 v5.1 + */ + IMPORT_C void Next(); + + /** + * Returns the count of calls + * + * @since S60 v5.1 + * @return Amount of calls + */ + IMPORT_C TInt Count() const; + + /** + * Returns the current call. Panic happens if there are no calls. + * + * @since S60 v5.1 + * @return Reference to the call. + */ + IMPORT_C const MCall& Current() const; + +private: + + /** + * Constructor for performing 1st stage construction + */ + CCallInfoIter( CCallInfos& aCallInfos ); + + /** + * EPOC default constructor for performing 2nd stage construction + */ + void ConstructL(); + +private: // data + + CCallInfos& iCallInfos; + + TInt iCurrentIndex; + + }; + +#endif // C_CALLINFOITER_H diff -r 33a5d2bbf6fc -r 73a1feb507fb mmshplugins/mmshaoplugin/tsrc/ut_aoplugin/Stubs/inc/ccallinformation.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmshplugins/mmshaoplugin/tsrc/ut_aoplugin/Stubs/inc/ccallinformation.h Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,116 @@ +/* +* Copyright (c) 2007-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: Provides information about ongoing calls. +* +*/ + + +#ifndef C_CALLINFORMATION_H +#define C_CALLINFORMATION_H + +#include +#include "callinformation.h" +#include "mcall.h" + + +// forward declarations +class MCallInformationObserver; +class CCallInformationImpl; +class CCallInfoIter; + + +/** + * Class to be used for receiving information about ongoing calls. + * + * @code + * // create the CCallInformation instance e.g. when the client component is created + * iCallInfo = CCallInformation::NewL(); + * iCallInfo->NotifyCallInformationChanges(*iObserver); + * + * // and use it when needed + * CCallInfoIter& iter = iCallInfo->GetCallsL(); + * @endcode + * + * @lib telephonyservice.lib + * @since S60 v5.1 + */ +NONSHARABLE_CLASS( CCallInformation ) : public CBase + { + +public: + + /** + * Two-phased constructor. + */ + IMPORT_C static CCallInformation* NewL(); + + + /** + * Destructor. + */ + virtual ~CCallInformation(); + + /** + * Allows a client to be notified when there are changes in current calls. + * There can be only one observer per CCallInformation instance. + * + * @since S60 v5.1 + * @param aObserver Observer for notifications. + */ + IMPORT_C void NotifyCallInformationChanges( MCallInformationObserver& aObserver ); + + /** + * Used to cancel previously placed NotifyCallInformationChanges call. + * + * @since S60 v5.1 + */ + IMPORT_C void CancelNotification(); + + /** + * Gets the snapshot of ongoing calls. + * + * @since S60 v5.1 + * @return Ongoing calls. + */ + IMPORT_C CCallInfoIter& GetCallsL( ); + + /** + * Get calls by given state. + * + * @since S60 v5.1 + * @param aState Specifies a call state that is used as a search key. + * @return Calls in state aSate, e.g. in case of conference call several + * calls have the same state. + */ + IMPORT_C CCallInfoIter& GetCallsL( CCPCall::TCallState aState ); + + +private: + + CCallInformation(); + + void ConstructL(); + + +private: // data + + CCallInformationImpl* iImpl; + + // Helper Data Needed by STUB Implemenation. + CCallInfoIter* iInfoIter; + CCallInfos* iInfos; + }; + + +#endif // C_CALLINFORMATION_H diff -r 33a5d2bbf6fc -r 73a1feb507fb mmshplugins/mmshaoplugin/tsrc/ut_aoplugin/Stubs/inc/ccallinfos_stub.inl --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmshplugins/mmshaoplugin/tsrc/ut_aoplugin/Stubs/inc/ccallinfos_stub.inl Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,89 @@ +/* +* Copyright (c) 2007-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: ?Description +* +*/ + + +#include + +const TInt KCallServiceId = 5; + +// --------------------------------------------------------------------------- +// C++ constructor +// --------------------------------------------------------------------------- +// +CCallInfos::CCallInfos() + { + //Nothing to be done Here. + } + +// ----------------------------------------------------------------------------- +// Constructor. +// ----------------------------------------------------------------------------- +// +inline CCallInfos* CCallInfos::NewL() + { + return new( ELeave )CCallInfos(); + } + +// ----------------------------------------------------------------------------- +// Constructor. +// ----------------------------------------------------------------------------- +// +inline CCallInfos* CCallInfos::NewLC() + { + CCallInfos* self = new( ELeave )CCallInfos(); + CleanupStack::PushL( self ); + return self; + } + + +// ----------------------------------------------------------------------------- +// Desctructor. +// ----------------------------------------------------------------------------- +// +inline CCallInfos::~CCallInfos() + { + if ( iCallInfos.Count()) + { + iCallInfos.Reset(); + } + iCallInfos.Close(); + } + +// ----------------------------------------------------------------------------- +// Returns information about all calls. +// ----------------------------------------------------------------------------- +// +inline const RArray& CCallInfos::CallInfos( ) const + { + return iCallInfos; + } + + + +// ----------------------------------------------------------------------------- +// Add Dummy Call Info. +// ----------------------------------------------------------------------------- +// +inline void CCallInfos::AddCallInfosL( ) + { + } + + +// End of File. + + + diff -r 33a5d2bbf6fc -r 73a1feb507fb mmshplugins/mmshaoplugin/tsrc/ut_aoplugin/Stubs/inc/cch.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmshplugins/mmshaoplugin/tsrc/ut_aoplugin/Stubs/inc/cch.h Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,142 @@ +/* +* Copyright (c) 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: The new cch client api class +* +*/ + + + +#ifndef C_CCH_H +#define C_CCH_H + +#include + +//class CCchImpl; +class CCchServiceStub; + +const TInt KServiceId = 5; + +/** + * Class for cch service management + * + * CCchService is used for launching various kinds of service functions + * @code + * ?good_class_usage_example(s) + * @endcode + * + * @lib ?library + */ +class CCchService : public CBase + { + +public: + + +protected: + + virtual ~CCchService() { }; + }; + +/** + * Class for basic cch functionality, getting services + * + * @code + * ?good_class_usage_example(s) + * @endcode + * + * @lib cch + */ +class CCch : public CBase + { + +public: + + /** + * Two-phased constructor. + */ + IMPORT_C static CCch* NewL(); + + /** + * Two-phased constructor. + */ + IMPORT_C static CCch* NewLC(); + + /** + * Destructor. + */ + ~CCch(); + + /** + * Returns one service + * + * @param aId Service id + * @return Service or NULL if not found. Ownership is not transferred. + */ + IMPORT_C CCchService* GetService( TInt aId ); + + /** + * Returns service ids of all configured services + * + * @param aIds Array of TInt to be filled with ids + * @return Symbian error code + */ + IMPORT_C TInt GetServiceIds( RArray& aIds ) const; + + /** + * Returns ETrue if connectivity dialogs are allowed in service enabling. + * + * @return ETrue if connectivity dialogs are allowed in service enabling + */ + IMPORT_C TBool ConnectivityDialogsAllowed() const; + + /** + * For allowing/disallowing connectivity dialogs showing in + * service enabling. + * + * @param aConnectivityDialogsAllowed Boolean to set connectivity dialogs + * allowed/disallowed + */ + IMPORT_C void SetConnectivityDialogsAllowed( + TBool aConnectivityDialogsAllowed ); + + + +protected: + + /** + * The constructor + */ + CCch(); + +private: + + /** + * By default Symbian 2nd phase constructor is private. + */ + void ConstructL(); + +private: // data + + CCchServiceStub* iServiceStub; + }; + + +class HelpData + { +public: + static HBufC* iUserName; + static TInt iGetConnectionParamError; + }; + +#endif // C_CCH_H diff -r 33a5d2bbf6fc -r 73a1feb507fb mmshplugins/mmshaoplugin/tsrc/ut_aoplugin/Stubs/inc/spentry.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmshplugins/mmshaoplugin/tsrc/ut_aoplugin/Stubs/inc/spentry.h Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,238 @@ +/* +* Copyright (c) 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: Service Provider Settings entry +* +*/ + + +#ifndef C_SPENTRY_H +#define C_SPENTRY_H + +#include + +#include "spdefinitions.h" + +class CSPProperty; + + +/** + * Service Provider Settings entry. + * Container class for service attributes and settings properties + * + * @lib serviceprovidersettings.lib + * @since S60 V3.2 + */ +NONSHARABLE_CLASS( CSPEntry ): public CBase + { + + public: // Constructors and destructor + /** + * Two-phased constructor. + */ + IMPORT_C static CSPEntry* NewL(); + + /** + * Two-phased constructor. + */ + IMPORT_C static CSPEntry* NewLC(); + + /** + * Destructors. + */ + IMPORT_C virtual ~CSPEntry(); + + public: // Member functions + /** + * Returns service Id of this entry. + * + * @since S60 V3.2 + * @return Service ID + */ + IMPORT_C TServiceId GetServiceId() const; + + /** + * Sets unique service provider ID for this entry. + * This ID is generated automatically when new entry is added. + * Service ID is also required when user updates entry in service table + * + * @since S60 V3.2 + * @param aServiceId service ID + */ + void SetServiceId( TServiceId aServiceId ); + + /** + * Returns service name of this entry. + * + * @since S60 V3.2 + * @return Service name + */ + IMPORT_C const TDesC& GetServiceName() const; + + /** + * Sets service name for this entry. + * + * @since S60 V3.2 + * @param aServiceName service name + */ + IMPORT_C TInt SetServiceName( const TDesC& aServiceName ); + + /** + * Adds new property to this entry. + * + * @since S60 V3.2 + * @param aProperty new property pointer + * @return KErrNone if addition succeeded, + * system wide error code otherwise. + */ + IMPORT_C TInt AddPropertyL( const CSPProperty& aProperty ); + + /** + * Updates content of property in this entry. + * + * @since S60 V3.2 + * @param aPropertyName property name + * @param aValue new TInt value + * @return KErrNone if update succeeded. + */ + IMPORT_C TInt UpdateProperty( TServicePropertyName aPropertyName, TInt aValue ); + + /** + * Updates content of property in this entry. + * + * @since S60 V3.2 + * @param aPropertyName property name + * @param aValue new TDesC value + * @return KErrNone if update succeeded. + */ + IMPORT_C TInt UpdateProperty( TServicePropertyName aPropertyName, const TDesC& aValue ); + + /** + * Updates content of property in this entry. + * + * @since S60 V3.2 + * @param aPropertyName property name + * @param aValue new TOnOff value + * @return KErrNone if update succeeded. + */ + IMPORT_C TInt UpdateProperty( TServicePropertyName aPropertyName, TOnOff aValue ); + + /** + * Returns property of this entry by property name. + * + * @since S60 V3.2 + * @param aProperty On return, reference to requested property + * @param aPropertyName Name of requested property + * @return error code + */ + IMPORT_C TInt GetProperty( const CSPProperty*& aProperty, + TServicePropertyName aPropertyName ) const; + + /** + * Returns property of this entry by property index. + * + * @since S60 V3.2 + * @param aProperty On return, reference to requested property + * @param aIndex index of requested property + * @return error code + */ + IMPORT_C TInt GetProperty( const CSPProperty*& aProperty, + TInt aIndex ) const; + + /** + * Deletes property from this entry by index. + * + * @since S60 V3.2 + * @param aIndex index of requested property + * @return error code + */ + IMPORT_C TInt DeleteProperty( TInt aIndex ); + + /** + * Deletes property from this entry by property name. + * + * @since S60 V3.2 + * @param aProperty property name + * @return error code + */ + IMPORT_C TInt DeleteProperty( TServicePropertyName aProperty ); + + /** + * Returns all properties of this entry. + * + * @since S60 V3.2 + * @return Reference to array of properties + */ + IMPORT_C const RPropertyArray& GetAllProperties() const; + + /** + * Returns count of properties in this entry + * + * @since S60 V3.2 + * @return Count of properties + */ + IMPORT_C TInt PropertyCount() const; + + /** + * reset service entry + * + * @since S60 V3.2 + * @return Count of properties + */ + IMPORT_C void Reset(); + + + private: + + /** + * C++ default constructor. + */ + CSPEntry(); + + /** + * By default Symbian 2nd phase constructor is private. + */ + void ConstructL(); + + /** + * Search index of requested property in iPropertyArray + * + * @since S60 ?S60_version + * @param aProperty + * @return Index of property or KErrNotFound + */ + TInt SearchProperty( TServicePropertyName aProperty ) const; + + private: // data + + /** + * Id of service settings entry ( unique ) + */ + TServiceId iServiceId; + + /** + * Name of settings entry ( unique ) + * Own. + */ + RBuf iServiceName; + + /** + * Service settings properties owned by this entry + * Own. + */ + RPropertyArray iPropertyArray; + + }; + + +#endif // C_SPENTRY_H diff -r 33a5d2bbf6fc -r 73a1feb507fb mmshplugins/mmshaoplugin/tsrc/ut_aoplugin/Stubs/inc/spsettings.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmshplugins/mmshaoplugin/tsrc/ut_aoplugin/Stubs/inc/spsettings.h Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,313 @@ +/* +* Copyright (c) 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: Service Provider Settings API +* +*/ + + +#ifndef C_SPSETTINGS_H +#define C_SPSETTINGS_H + +#include +#include + +#include "spdefinitions.h" + +class CSPSettingsEngine; +class CSPEntry; +class CSPProperty; + +/** + * Service provider settings API class + * + * Main class of managing service provider settings + * + * @code example code of how to add a new service entry to service table + * CSPEntry* entry = CSPEntry::NewL(); + * TInt err = entry->SetServiceName( _L("somename" ) ); + * CSPProperty* property = CSPProperty::NewL(); + * err = property->SetName( EPropertyServiceAttributeMask ); + * property->SetValue( 100 ); + * err = entry->AddProperty( property ); + * // iSettings is instance of CSPSettings + * TInt err = iSettings->AddEntryL( *entry ); + * @endcode + * + * @lib serviceprovidersettings.lib + * @since S60 v3.2 + */ +NONSHARABLE_CLASS( CSPSettings ): public CBase + { + + public: // Constructors and destructor + + /** + * Two-phased constructor. + */ + IMPORT_C static CSPSettings* NewL(); + + /** + * Two-phased constructor. + */ + IMPORT_C static CSPSettings* NewLC(); + + /** + * Destructors. + */ + IMPORT_C virtual ~CSPSettings(); + + public: + + /** + * Stores new service provider settings entry, + * service Id is returned inside aEntry object + * + * @since S60 v3.2 + * @param aEntry New service provider settings entry, on return service Id is filled in + * @return error code + */ + IMPORT_C TInt AddEntryL( CSPEntry& aEntry ); + + /** + * Search service provider settings entry by service ID. + * + * @since S60 v3.2 + * @param aServiceId Id of requested xSP settings entry + * @param aEntry on return, SP settings entry corresponding to aServiceId. + * @return error code, KErrNone if succeeded, otherwise system wide error code + */ + IMPORT_C TInt FindEntryL( TServiceId aServiceId, CSPEntry& aEntry ); + + + /** + * Updates service provider settings entry to settings storage. + * Service ID must be set to entry before update. + * + * @since S60 v3.2 + * @param aEntry Updated service provider settings entry + * @return error code, KErrNone if update succeeded, otherwise system wide error code + */ + IMPORT_C TInt UpdateEntryL( const CSPEntry& aEntry ); + + /** + * Deletes service provider settings entry from storage by service ID. + * + * @since S60 v3.2 + * @param aEntryId Id of settings entry which is going to be deleted + * @return error code, KErrNone if delete succeeded, otherwise system wide error code + */ + IMPORT_C TInt DeleteEntryL( TServiceId aServiceId ); + + /** + * Search property of service provider settings entry from storage. + * + * @since S60 v3.2 + * @param aServiceId The service ID of requested service entry + * @param aPropertyName property name to be found + * @param aProperty on return, requested property + * @return error code, KErrNone if succeeded, otherwise system wide error code + */ + IMPORT_C TInt FindPropertyL( TServiceId aServiceId, + TServicePropertyName aPropertyName, + CSPProperty& aProperty ); + + /** + * Add or update properties of service provider settings entry to storage. + * If property name exists, update property. If property doesn't exist, + * add property + * + * @since S60 v3.2 + * @param aServiceId The ID of updated service entry + * @param aPropertyArray new properties to be added or updated + * @return error code, KErrNone if update succeeded, otherwise system wide error code + */ + IMPORT_C TInt AddOrUpdatePropertiesL( TServiceId aServiceId, + const RPropertyArray& aPropertyArray ); + + + /** + * Add or update one property of service provider settings entry to storage. + * If property name exists, update property. If property doesn't exist, + * add property + * + * @since S60 v3.2 + * @param aServiceId The ID of updated service entry + * @param aProperty new property to be added or updated + * @return error code, KErrNone if update succeeded, otherwise system wide error code + */ + IMPORT_C TInt AddOrUpdatePropertyL( TServiceId aServiceId, + const CSPProperty& aProperty ); + + /** + * Return count of service provider settings entries in storage. + * + * @since S60 v3.2 + * @return Count of stored service provider settings. + */ + IMPORT_C TInt SettingsCountL(); + + /** + * Search all service provider IDs from storage + * + * @since S60 v3.2 + * @param aServiceIds An array containing returned service IDs + * @return error code + */ + IMPORT_C TInt FindServiceIdsL( RIdArray& aServiceIds ); + + + /** + * Search all service names from settings storage by given service IDs. + * Removes ID from array if it is not found from settings storage. + * + * @since S60 v3.2 + * @param aServiceIds An array of service IDs + * @param aServiceNames on return, array which saves found service names + * @return error code + */ + IMPORT_C TInt FindServiceNamesL( RIdArray& aServiceIds, + CDesCArray& aServiceNames ); + + + /** + * Search subservice properties of requested service provider settings entry by ID + * and subservice type + * + * @since S60 v3.2 + * @param aServiceId The ID of requested service entry + * @param aPropertyType property type of sub service + * @param aPropertyArray on return, array which saves found subservice properties + * @return error code + */ + IMPORT_C TInt FindSubServicePropertiesL( TServiceId aServiceId, + TSPItemType aPropertyType, + RPropertyArray& aPropertyArray ); + + /** + * Deletes service properties by service ID and property name. + * + * @since S60 v3.2 + * @param aServiceId The service ID of requested service entry + * @param aNameArray name of properties to be deleted + * @return error code + */ + IMPORT_C TInt DeleteServicePropertiesL( TServiceId aServiceId, + const RPropertyNameArray& aNameArray ); + + /** + * Find service IDs with same properties + * + * @since S60 v3.2 + * @param aPropertyArray property array + * @param on return, service Ids with same properties + * @return error code + */ + IMPORT_C TInt FindServiceIdsFromPropertiesL( const RPropertyArray& aPropertyArray, + RIdArray& aServiceIds ); + + /** + * Get SIP VoIP software version. + * + * @since S60 v3.2 + * @return SIP VoIP software version + */ + IMPORT_C static const TDesC& GetSIPVoIPSWVersion(); + + /** + * Check feature is supported or not + * + * @since S60 v3.2 + * @return SIP VoIP software version + */ + IMPORT_C TBool IsFeatureSupported( TSPServiceFeature aFeature ); + + private: + + /** + * C++ default constructor. + */ + CSPSettings(); + + /** + * By default Symbian 2nd phase constructor is private. + */ + void ConstructL(); + + /** + * Commit or rollback transaction + * @since S60 v3.2 + * @param aError error code of CenRep operation + * @param aServiceId changed service Id + * @return error code + */ + TInt CommitOrRollbackL( TInt aError, TServiceId aServiceId ); + + /** + * Check is VoIP Service Id and then are Properties VoIP related + * + * @since S60 v3.2.3 + * @return KErrNotSupported if VoIP not supported and checking + * of Service Id and Properties gives true + */ + TInt CheckSupportedL( TServiceId aServiceId, const RPropertyNameArray& aNameArray ); + + /** + * Check is VoIP Service Id + * + * @since S60 v3.2.3 + * @return KErrNotSupported if VoIP not supported and checking + * of Service Id gives true + */ + TInt CheckSupportedL( TServiceId aServiceId ); + + /** + * Check is SP item type VoIP related + * + * @since S60 v3.2.3 + * @return KErrNotSupported if VoIP not supported and checking + * of SP item type gives true + */ + TInt CheckSupportedL( TSPItemType aPropertyType ); + + /** + * Check does an array have Properties VoIP related + * + * @since S60 v3.2.3 + * @return KErrNotSupported if VoIP not supported and checking + * of the array gives true + */ + TInt CheckSupportedL( const RPropertyArray& aPropertyArray ); + + private: // data + + /** + * Settings engine + * Own. + */ + CSPSettingsEngine* iSettingsEngine; + + + /** + * Feature manager support VoIP + * Own. + */ + TBool iFeatureManagerSupportVoIP; + /** + * Writing settings allowed + */ + TBool iSettingsWriteAllowed; + + }; + +#endif // C_SPSETTINGS_H diff -r 33a5d2bbf6fc -r 73a1feb507fb mmshplugins/mmshaoplugin/tsrc/ut_aoplugin/Stubs/src/ccallinfoiter_stub.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmshplugins/mmshaoplugin/tsrc/ut_aoplugin/Stubs/src/ccallinfoiter_stub.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,104 @@ +/* +* Copyright (c) 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: Iterator class for going through ongoing calls. +* +*/ + + +#include //Call Information Mediator API +#include "ccallinfoiter.h" +#include "mcall.h" + + +// ======== MEMBER FUNCTIONS ======== + + +// --------------------------------------------------------------------------- +// C++ constructor. +// --------------------------------------------------------------------------- +// +CCallInfoIter::CCallInfoIter( CCallInfos& aCallInfos ): iCallInfos( aCallInfos ) + { + First(); + } + +// --------------------------------------------------------------------------- +// Destructor +// --------------------------------------------------------------------------- +// +CCallInfoIter::~CCallInfoIter() + { + } + +// --------------------------------------------------------------------------- +// Two-phased constructor. +// --------------------------------------------------------------------------- +// +CCallInfoIter* CCallInfoIter::NewLC( CCallInfos& aCallInfos ) + { + CCallInfoIter* self = new (ELeave)CCallInfoIter( aCallInfos ); + CleanupStack::PushL(self); + self->ConstructL(); + return self; + } + +// --------------------------------------------------------------------------- +// Two-phased constructor. +// --------------------------------------------------------------------------- +// +CCallInfoIter* CCallInfoIter::NewL( CCallInfos& aCallInfos ) + { + CCallInfoIter* self = CCallInfoIter::NewLC( aCallInfos ); + CleanupStack::Pop(self); + return self; + } + +// --------------------------------------------------------------------------- +// Symbian second-phase constructor. +// --------------------------------------------------------------------------- +// +void CCallInfoIter::ConstructL() + { + } + +// --------------------------------------------------------------------------- +// Returns the amount of calls +// --------------------------------------------------------------------------- +// +EXPORT_C TInt CCallInfoIter::Count() const + { + TUint count = 1; + return count; + } + +// --------------------------------------------------------------------------- +// Returns the current call. +// --------------------------------------------------------------------------- +// +EXPORT_C const MCall& CCallInfoIter::Current() const + { + return iCallInfos.CallInfos()[iCurrentIndex]; + } + +// --------------------------------------------------------------------------- +// Intializes the current call to the first call. +// --------------------------------------------------------------------------- +// +EXPORT_C void CCallInfoIter::First() + { + iCurrentIndex = 0; + } + + +// End of File. diff -r 33a5d2bbf6fc -r 73a1feb507fb mmshplugins/mmshaoplugin/tsrc/ut_aoplugin/Stubs/src/ccallinformation_stub.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmshplugins/mmshaoplugin/tsrc/ut_aoplugin/Stubs/src/ccallinformation_stub.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,90 @@ +/* +* Copyright (c) 2007-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: Provides information about ongoing calls. +* +*/ + +#include "ccallinformation.h" +#include "callinformation.h" +#include "ccallinfoiter.h" + +// --------------------------------------------------------------------------- +// C++ constructor. +// --------------------------------------------------------------------------- +// +CCallInformation::CCallInformation() + { + } + +// --------------------------------------------------------------------------- +// Symbian second-phase constructor. +// --------------------------------------------------------------------------- +// +void CCallInformation::ConstructL() + { + //iImpl = CCallInformationImpl::NewL(); + + iInfos = CCallInfos::NewL(); + iInfoIter = CCallInfoIter::NewL( *iInfos ); + } + + +// --------------------------------------------------------------------------- +// Two-phased constructor. +// --------------------------------------------------------------------------- +// +EXPORT_C CCallInformation* CCallInformation::NewL() + { + CCallInformation* self = new (ELeave) CCallInformation( ); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + return self; + } + + +// --------------------------------------------------------------------------- +// Destructor +// --------------------------------------------------------------------------- +// +CCallInformation::~CCallInformation() + { + //delete iImpl; + if ( iInfos ) + { + delete iInfos; + iInfos = NULL; + } + if ( iInfoIter ) + { + delete iInfoIter; + iInfoIter = NULL; + } + } + + +// --------------------------------------------------------------------------- +// Get calls by given state. +// --------------------------------------------------------------------------- +// + +EXPORT_C CCallInfoIter& CCallInformation::GetCallsL( CCPCall::TCallState aState ) + { + //return iImpl->GetCallsL( aState ); + // Add dummy data to call infos + iInfos->AddCallInfosL(); + return *iInfoIter; + } + +// End of File. diff -r 33a5d2bbf6fc -r 73a1feb507fb mmshplugins/mmshaoplugin/tsrc/ut_aoplugin/Stubs/src/spentry_stub.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmshplugins/mmshaoplugin/tsrc/ut_aoplugin/Stubs/src/spentry_stub.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,87 @@ +/* +* Copyright (c) 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: Service Provider Settings entry. +* +*/ + +#include "spentry.h" +#include "spproperty.h" +//#include "spdefaultvalues.h" + + +// ======== MEMBER FUNCTIONS ======== + + +// --------------------------------------------------------------------------- +// Constructor +// --------------------------------------------------------------------------- +// +CSPEntry::CSPEntry() + { + } + +// --------------------------------------------------------------------------- +// Constructor +// --------------------------------------------------------------------------- +// +void CSPEntry::ConstructL() + { + } + +// --------------------------------------------------------------------------- +// Constructor +// --------------------------------------------------------------------------- +// +EXPORT_C CSPEntry* CSPEntry::NewL() + { + CSPEntry* self = CSPEntry::NewLC(); + CleanupStack::Pop( self ); + return self; + } + +// --------------------------------------------------------------------------- +// Constructor +// --------------------------------------------------------------------------- +// +EXPORT_C CSPEntry* CSPEntry::NewLC() + { + CSPEntry* self = new( ELeave ) CSPEntry; + CleanupStack::PushL( self ); + self->ConstructL(); + return self; + } + +// --------------------------------------------------------------------------- +// Destructor +// --------------------------------------------------------------------------- +// +EXPORT_C CSPEntry::~CSPEntry() + { + iServiceName.Close(); + iPropertyArray.ResetAndDestroy(); + iPropertyArray.Close(); + } + +// --------------------------------------------------------------------------- +// Returns service name of this entry +// --------------------------------------------------------------------------- +// +EXPORT_C const TDesC& CSPEntry::GetServiceName() const + { + _LIT( KTestProvideName, "VoIP" ); + return KTestProvideName; + } + + +// End of File. diff -r 33a5d2bbf6fc -r 73a1feb507fb mmshplugins/mmshaoplugin/tsrc/ut_aoplugin/Stubs/src/spsettings_stub.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmshplugins/mmshaoplugin/tsrc/ut_aoplugin/Stubs/src/spsettings_stub.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,88 @@ +/* +* Copyright (c) 2007-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: STUB implementation for SP Settings. +* +*/ + +#include "spsettings.h" + + +// ======== MEMBER FUNCTIONS ======== + +// --------------------------------------------------------------------------- +// Default Constructor +// --------------------------------------------------------------------------- +// +CSPSettings::CSPSettings() + { + // Nothing to be done + } + +// --------------------------------------------------------------------------- +// Destructor +// --------------------------------------------------------------------------- +// +EXPORT_C CSPSettings::~CSPSettings() + { + // Nothing to be done + } + + +// --------------------------------------------------------------------------- +// Constructor +// --------------------------------------------------------------------------- +// +EXPORT_C CSPSettings* CSPSettings::NewL() + { + CSPSettings* self = CSPSettings::NewLC(); + CleanupStack::Pop( self ); + return self; + } + + +// --------------------------------------------------------------------------- +// Constructor +// --------------------------------------------------------------------------- +// +EXPORT_C CSPSettings* CSPSettings::NewLC() + { + CSPSettings* self = new( ELeave ) CSPSettings; + CleanupStack::PushL( self ); + self->ConstructL(); + return self; + } + +// --------------------------------------------------------------------------- +// Constructor +// --------------------------------------------------------------------------- +// +void CSPSettings::ConstructL() + { + //Nothing to be done + } + +// --------------------------------------------------------------------------- +// Find service provider settings entry by service ID +// --------------------------------------------------------------------------- +// +EXPORT_C TInt CSPSettings::FindEntryL( TServiceId aServiceId, CSPEntry& /*aEntry*/ ) + { + TInt serviceID = 5; + aServiceId = serviceID; + return KErrNone; + } + + +// End of File + diff -r 33a5d2bbf6fc -r 73a1feb507fb mmshplugins/mmshaoplugin/tsrc/ut_aoplugin/group/bld.inf --- a/mmshplugins/mmshaoplugin/tsrc/ut_aoplugin/group/bld.inf Thu Aug 19 09:51:39 2010 +0300 +++ b/mmshplugins/mmshaoplugin/tsrc/ut_aoplugin/group/bld.inf Tue Aug 31 15:12:07 2010 +0300 @@ -15,5 +15,5 @@ * */ -PRJ_TESTMMPFILES +PRJ_MMPFILES ut_aoplugin.mmp \ No newline at end of file diff -r 33a5d2bbf6fc -r 73a1feb507fb mmshplugins/mmshaoplugin/tsrc/ut_aoplugin/group/ut_aoplugin.mmp --- a/mmshplugins/mmshaoplugin/tsrc/ut_aoplugin/group/ut_aoplugin.mmp Thu Aug 19 09:51:39 2010 +0300 +++ b/mmshplugins/mmshaoplugin/tsrc/ut_aoplugin/group/ut_aoplugin.mmp Tue Aug 31 15:12:07 2010 +0300 @@ -42,7 +42,15 @@ SOURCE ut_musresourcefinderutil.cpp SOURCE ut_muscallconferenceeventmonitor.cpp SOURCE ut_muscallmonitorbase.cpp -SOURCE ut_musclirmonitor.cpp +SOURCE ut_musfactorysettings.cpp + +// STUBs for telephonyservice and serviceprovidersettings +SOURCEPATH ../Stubs/src +SOURCE ccallinfoiter_stub.cpp +SOURCE ccallinformation_stub.cpp +SOURCE spentry_stub.cpp +SOURCE spsettings_stub.cpp + SOURCEPATH ../../../src SOURCE musaopluginmain.cpp @@ -56,7 +64,7 @@ SOURCE muscallstatusmonitor.cpp SOURCE muscallconferencemonitor.cpp SOURCE muscallconferenceeventmonitor.cpp -SOURCE musclirmonitor.cpp +SOURCE musvoipcallmonitor.cpp SOURCEPATH ../../../../../tsrc/etelstub/src SOURCE etelstub.cpp @@ -65,22 +73,23 @@ SOURCEPATH ../../../../../tsrc/centralrepositorystub/src SOURCE centralrepositorystub.cpp SOURCEPATH ../../../../../tsrc/musmanagerstub/src -SOURCE musmanagerstub.cpp -SOURCEPATH ../../../../../tsrc/featmgrstub/src -SOURCE FeatMgr.cpp +SOURCE musmanagerstub.cpp -USERINCLUDE ../../../../../tsrc/featmgrstub/inc USERINCLUDE ../inc +USERINCLUDE ../../../inc +USERINCLUDE ../Stubs/inc USERINCLUDE ../../../../../tsrc/propertystub/inc USERINCLUDE ../../../../../tsrc/etelstub/inc USERINCLUDE ../../../../../tsrc/centralrepositorystub/inc +USERINCLUDE ../../../../../tsrc/musmanagerstub/inc SYSTEMINCLUDE ../../../inc SYSTEMINCLUDE ../../../../../inc SYSTEMINCLUDE ../../../../../tsrc/etelstub/inc SYSTEMINCLUDE ../../../../../tsrc/propertystub/inc SYSTEMINCLUDE ../../../../../tsrc/centralrepositorystub/inc -SYSTEMINCLUDE ../../../../../tsrc/musmanagerstub/inc +SYSTEMINCLUDE ../../../../../tsrc/musmanagerstub/inc +SYSTEMINCLUDE /epoc32/include/platform/digia/eunit APP_LAYER_SYSTEMINCLUDE @@ -90,6 +99,6 @@ LIBRARY euser.lib LIBRARY bafl.lib LIBRARY efsrv.lib -LIBRARY etel3rdparty.lib +LIBRARY charconv.lib // End of file diff -r 33a5d2bbf6fc -r 73a1feb507fb mmshplugins/mmshaoplugin/tsrc/ut_aoplugin/group/ut_aoplugin.pkg --- a/mmshplugins/mmshaoplugin/tsrc/ut_aoplugin/group/ut_aoplugin.pkg Thu Aug 19 09:51:39 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,32 +0,0 @@ -; -; Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). -; All rights reserved. -; This component and the accompanying materials are made available -; under the terms of "Eclipse Public License v1.0" -; which accompanies this distribution, and is available -; at the URL "http://www.eclipse.org/legal/epl-v10.html". -; -; Initial Contributors: -; Nokia Corporation - initial contribution. -; -; Contributors: -; -; Description: -; - -;Languages -&EN - -;Header -#{"EUnit: MMSHAOPlg"},(0x01700000),1,0,0 - -(0x101F7961), 0, 0, 0, {"Series60ProductID"} - -;Localised Vendor name -%{"Nokia"} - -;Unique vendor name -:"Nokia" - -;DLL files -"\epoc32\release\armv5\urel\ut_aoplugin.dll"-"c:\sys\bin\ut_aoplugin.dll" diff -r 33a5d2bbf6fc -r 73a1feb507fb mmshplugins/mmshaoplugin/tsrc/ut_aoplugin/inc/muscommonstubs.h --- a/mmshplugins/mmshaoplugin/tsrc/ut_aoplugin/inc/muscommonstubs.h Thu Aug 19 09:51:39 2010 +0300 +++ b/mmshplugins/mmshaoplugin/tsrc/ut_aoplugin/inc/muscommonstubs.h Tue Aug 31 15:12:07 2010 +0300 @@ -16,7 +16,6 @@ */ - #ifndef UT_MUSCOMMONSTUBS_H #define UT_MUSCOMMONSTUBS_H @@ -44,8 +43,8 @@ // From MMusCallMonitorObserver - void CallConnectedL( const TDesC& aTelNumber ); - void CallHoldL( const TDesC& aTelNumber ); + void CallConnectedL( const TDesC& aTelNumber, TBool aIsSipUri ); + void CallHoldL( const TDesC& aTelNumber, TBool aIsSipUri ); void ConferenceCallL(); void NoActiveCallL(); @@ -70,6 +69,7 @@ TBool iCallHoldCalled; TBool iConferenceCallCalled; TBool iNoActiveCallCalled; + TBool iIsSipUri; HBufC* iTelNumber; RMobileCall::TMobileCallEvent iCallEvent; diff -r 33a5d2bbf6fc -r 73a1feb507fb mmshplugins/mmshaoplugin/tsrc/ut_aoplugin/inc/ut_musaocalleventmonitor.h --- a/mmshplugins/mmshaoplugin/tsrc/ut_aoplugin/inc/ut_musaocalleventmonitor.h Thu Aug 19 09:51:39 2010 +0300 +++ b/mmshplugins/mmshaoplugin/tsrc/ut_aoplugin/inc/ut_musaocalleventmonitor.h Tue Aug 31 15:12:07 2010 +0300 @@ -16,7 +16,6 @@ */ - #ifndef UT_MUSAOCALLEVENTMONITOR_H #define UT_MUSAOCALLEVENTMONITOR_H @@ -67,9 +66,9 @@ private: // test MMusCallMonitorObserver - virtual void CallConnectedL( const TDesC& aTelNumber ); + virtual void CallConnectedL( const TDesC& aTelNumber, TBool aIsSipUri ); - virtual void CallHoldL( const TDesC& aTelNumber ); + virtual void CallHoldL( const TDesC& aTelNumber, TBool aIsSipUri ); virtual void ConferenceCallL(); diff -r 33a5d2bbf6fc -r 73a1feb507fb mmshplugins/mmshaoplugin/tsrc/ut_aoplugin/inc/ut_musaoplugin.h --- a/mmshplugins/mmshaoplugin/tsrc/ut_aoplugin/inc/ut_musaoplugin.h Thu Aug 19 09:51:39 2010 +0300 +++ b/mmshplugins/mmshaoplugin/tsrc/ut_aoplugin/inc/ut_musaoplugin.h Tue Aug 31 15:12:07 2010 +0300 @@ -67,13 +67,15 @@ public: // test functions - void NewLL(); void DefinePropertiesLL(); void DefinePropertyL_IntPropertyL(); void DefinePropertyL_DesCPropertyL(); void DeletePropertiesL(); void UT_HandleServerCommandLL(); + void UT_StartMusClientL(); + void UT_StopMusClientL(); + void UT_MusCallStateChangedL(); private: // data diff -r 33a5d2bbf6fc -r 73a1feb507fb mmshplugins/mmshaoplugin/tsrc/ut_aoplugin/inc/ut_muscallconferencemonitor.h --- a/mmshplugins/mmshaoplugin/tsrc/ut_aoplugin/inc/ut_muscallconferencemonitor.h Thu Aug 19 09:51:39 2010 +0300 +++ b/mmshplugins/mmshaoplugin/tsrc/ut_aoplugin/inc/ut_muscallconferencemonitor.h Tue Aug 31 15:12:07 2010 +0300 @@ -72,6 +72,7 @@ void UT_CMusCallConferenceMonitor_DoCancelL(); void UT_CMusCallConferenceMonitor_RunErrorL(); void UT_CMusCallConferenceMonitor_MonitorCallLL(); + void UT_CMusCallConferenceMonitor_GetConfStatus(); private: // Data diff -r 33a5d2bbf6fc -r 73a1feb507fb mmshplugins/mmshaoplugin/tsrc/ut_aoplugin/inc/ut_muscalleventmonitor.h --- a/mmshplugins/mmshaoplugin/tsrc/ut_aoplugin/inc/ut_muscalleventmonitor.h Thu Aug 19 09:51:39 2010 +0300 +++ b/mmshplugins/mmshaoplugin/tsrc/ut_aoplugin/inc/ut_muscalleventmonitor.h Tue Aug 31 15:12:07 2010 +0300 @@ -26,6 +26,7 @@ #include "etelmm.h" #include "mussesseioninformationapi.h" #include "mmustsypropertyobserver.h" +#include "mmuscallstateobserver.h" // FORWARD DECLARATIONS class CMusCallEventMonitor; @@ -42,7 +43,9 @@ * */ NONSHARABLE_CLASS( UT_CMusCallEventMonitor ): public CEUnitTestSuiteClass, - MMusTsyPropertyObserver + MMusTsyPropertyObserver, + MMusCallStateObserver + { public: // Constructors and destructors @@ -67,6 +70,10 @@ virtual void NotifyCallStateChanged( NMusSessionInformationApi::TMusCallEvent aVal, TName& aCallName ); + public: // from MMusCallStateObserver. + + virtual void MusCallStateChanged(); + private: // Constructors and destructors diff -r 33a5d2bbf6fc -r 73a1feb507fb mmshplugins/mmshaoplugin/tsrc/ut_aoplugin/inc/ut_muscallmonitor.h --- a/mmshplugins/mmshaoplugin/tsrc/ut_aoplugin/inc/ut_muscallmonitor.h Thu Aug 19 09:51:39 2010 +0300 +++ b/mmshplugins/mmshaoplugin/tsrc/ut_aoplugin/inc/ut_muscallmonitor.h Tue Aug 31 15:12:07 2010 +0300 @@ -26,6 +26,8 @@ #include "etelmm.h" #include "mussesseioninformationapi.h" #include "mmustsypropertyobserver.h" +#include "mmuscallstateobserver.h" + // Forward declaration class CMusCallMonitor; @@ -42,7 +44,8 @@ * */ NONSHARABLE_CLASS( UT_CMusCallMonitor ): public CEUnitTestSuiteClass, - MMusTsyPropertyObserver + MMusTsyPropertyObserver, + MMusCallStateObserver { public: //Two phase construction @@ -61,6 +64,11 @@ virtual void NotifyCallStateChanged( NMusSessionInformationApi::TMusCallEvent aVal, TName& aCallName ); + public: // from MMusCallStateObserver. + + virtual void MusCallStateChanged(); + + private: // Constructor UT_CMusCallMonitor(); void ConstructL(); diff -r 33a5d2bbf6fc -r 73a1feb507fb mmshplugins/mmshaoplugin/tsrc/ut_aoplugin/inc/ut_muscallmonitorbase.h --- a/mmshplugins/mmshaoplugin/tsrc/ut_aoplugin/inc/ut_muscallmonitorbase.h Thu Aug 19 09:51:39 2010 +0300 +++ b/mmshplugins/mmshaoplugin/tsrc/ut_aoplugin/inc/ut_muscallmonitorbase.h Tue Aug 31 15:12:07 2010 +0300 @@ -27,6 +27,8 @@ #include "muscallmonitorbase.h" #include "mussesseioninformationapi.h" #include "mmustsypropertyobserver.h" +#include "mmuscallstateobserver.h" + // Forward declaration @@ -42,7 +44,8 @@ public: CMusCallMonitorMock( const RMobileCall& aCall, - MMusTsyPropertyObserver& aObserver ); + MMusTsyPropertyObserver& aObserver, + MMusCallStateObserver& aCallStateObserver ); ~CMusCallMonitorMock(); private: @@ -59,7 +62,8 @@ * */ NONSHARABLE_CLASS( UT_CMusCallMonitorBase ): public CEUnitTestSuiteClass, - MMusTsyPropertyObserver + MMusTsyPropertyObserver, + MMusCallStateObserver { public: //Two phase construction @@ -78,6 +82,9 @@ virtual void NotifyCallStateChanged( NMusSessionInformationApi::TMusCallEvent aVal, TName& aCallName ); + public: // from MMusCallStateObserver. + virtual void MusCallStateChanged(); + private: // Constructor UT_CMusCallMonitorBase(); @@ -92,16 +99,14 @@ private: // Test methdods void UT_SetStateLL(); void UT_SetCallInfoLL(); - void UT_RunErrorL(); - - void UT_SetClirSettingL(); - void UT_SetTerminatingPrivacyL(); - void UT_RemovePrefixL(); + void UT_RunErrorL(); + void UT_CMusCallMonitorBase_IsDataReadyLL(); private: // Data CMusCallMonitorBase* iCallMonitorBase; RMobileCall iCall; + TBool iCallStateObserverInvoked; EUNIT_DECLARE_TEST_TABLE; diff -r 33a5d2bbf6fc -r 73a1feb507fb mmshplugins/mmshaoplugin/tsrc/ut_aoplugin/inc/ut_muscallstatusmonitor.h --- a/mmshplugins/mmshaoplugin/tsrc/ut_aoplugin/inc/ut_muscallstatusmonitor.h Thu Aug 19 09:51:39 2010 +0300 +++ b/mmshplugins/mmshaoplugin/tsrc/ut_aoplugin/inc/ut_muscallstatusmonitor.h Tue Aug 31 15:12:07 2010 +0300 @@ -26,6 +26,7 @@ #include "etelmm.h" #include "mussesseioninformationapi.h" #include "mmustsypropertyobserver.h" +#include "mmuscallstateobserver.h" // FORWARD DECLARATIONS class CMusCommonObserverStub; @@ -43,7 +44,9 @@ * */ NONSHARABLE_CLASS( UT_CMusCallStatusMonitor ): public CEUnitTestSuiteClass, - MMusTsyPropertyObserver + MMusTsyPropertyObserver, + MMusCallStateObserver + { public: // Constructors and destructors @@ -67,6 +70,10 @@ */ virtual void NotifyCallStateChanged( NMusSessionInformationApi::TMusCallEvent aVal, TName& aCallName ); + + public: // from MMusCallStateObserver. + + virtual void MusCallStateChanged(); private: // Constructors and destructors diff -r 33a5d2bbf6fc -r 73a1feb507fb mmshplugins/mmshaoplugin/tsrc/ut_aoplugin/inc/ut_musfactorysettings.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmshplugins/mmshaoplugin/tsrc/ut_aoplugin/inc/ut_musfactorysettings.h Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,71 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + + +#ifndef __UT_CMusFactorySettings_H__ +#define __UT_CMusFactorySettings_H__ + + +// EXTERNAL INCLUDES +#include +#include + + +// Forward declaration +class MusFactorySettings; +class CRepository; + +// Next row is to disable warning emerging from EUnit code. +// Placement is due to a fact that most test case files +// include this file. Directive can be removed when +// EUnit is fixed. +#pragma warn_illtokenpasting off + +// CLASS DEFINITION +/** + * Tester class for CMusCallMonitorBase. + * + */ +NONSHARABLE_CLASS( UT_CMusFactorySettings ): public CEUnitTestSuiteClass + { + public: + //Two phase construction + static UT_CMusFactorySettings* NewL(); + static UT_CMusFactorySettings* NewLC(); + // Destructor + ~UT_CMusFactorySettings(); + + private: // Constructor + UT_CMusFactorySettings(); + void ConstructL(); + + private: // Test case setup and teardown + void SetupL(); + void Teardown(); + + private: // Test methdods + void UT_CMusFactorySettings_IsSupportedLL(); + + private: // Data + CRepository* iMusCentralRepository ; + EUNIT_DECLARE_TEST_TABLE; + + }; + +#endif // __UT_CMusFactorySettings_H__ + +// End of file diff -r 33a5d2bbf6fc -r 73a1feb507fb mmshplugins/mmshaoplugin/tsrc/ut_aoplugin/inc/ut_muslineeventmonitor.h --- a/mmshplugins/mmshaoplugin/tsrc/ut_aoplugin/inc/ut_muslineeventmonitor.h Thu Aug 19 09:51:39 2010 +0300 +++ b/mmshplugins/mmshaoplugin/tsrc/ut_aoplugin/inc/ut_muslineeventmonitor.h Tue Aug 31 15:12:07 2010 +0300 @@ -21,7 +21,7 @@ #define MUSLINEEVENTMONITORTEST_H //#include -#include +#include //#include "ut_musaocallmonitor.h" #include "muscallstatusmonitorobserver.h" diff -r 33a5d2bbf6fc -r 73a1feb507fb mmshplugins/mmshaoplugin/tsrc/ut_aoplugin/inc/ut_muspropertymonitor.h --- a/mmshplugins/mmshaoplugin/tsrc/ut_aoplugin/inc/ut_muspropertymonitor.h Thu Aug 19 09:51:39 2010 +0300 +++ b/mmshplugins/mmshaoplugin/tsrc/ut_aoplugin/inc/ut_muspropertymonitor.h Tue Aug 31 15:12:07 2010 +0300 @@ -20,6 +20,10 @@ #define __UT_CMusPropertyMonitor_H__ +// USER INCLUDES + +#include "mmuscallstateobserver.h" + // EXTERNAL INCLUDES #include #include @@ -38,7 +42,8 @@ * Tester class for CMusTsyPropertyMonitor. * */ -NONSHARABLE_CLASS( UT_CMusPropertyMonitor ): public CEUnitTestSuiteClass +NONSHARABLE_CLASS( UT_CMusPropertyMonitor ): public CEUnitTestSuiteClass, + MMusCallStateObserver { public: // Constructors and destructors @@ -52,6 +57,12 @@ * Destructor */ ~UT_CMusPropertyMonitor(); + + + public: // MMusCallStateObserver + + virtual void MusCallStateChanged(); + private: // Constructors and destructors @@ -68,10 +79,13 @@ void UT_CMusPropertyMonitor_RunLL(); void UT_CMusPropertyMonitor_DoCancelL(); - void UT_CMusPropertyMonitor_RunErrorL(); + void UT_CMusPropertyMonitor_RunErrorL(); + void UT_CMusPropertyMonitor_IsCallConnected(); private: // Data CMusPropertyMonitor* iMusPropertyMonitor; + TBool iMusCallStateObserverInovked; + EUNIT_DECLARE_TEST_TABLE; diff -r 33a5d2bbf6fc -r 73a1feb507fb mmshplugins/mmshaoplugin/tsrc/ut_aoplugin/inc/ut_mustsypropertymonitor.h --- a/mmshplugins/mmshaoplugin/tsrc/ut_aoplugin/inc/ut_mustsypropertymonitor.h Thu Aug 19 09:51:39 2010 +0300 +++ b/mmshplugins/mmshaoplugin/tsrc/ut_aoplugin/inc/ut_mustsypropertymonitor.h Tue Aug 31 15:12:07 2010 +0300 @@ -20,6 +20,9 @@ #define __UT_CMusTsyPropertyMonitor_H__ +// USER INCLUDE +#include "mmuscallstateobserver.h" + // EXTERNAL INCLUDES #include #include @@ -27,6 +30,7 @@ // FORWARD DECLARATIONS class CMusCommonObserverStub; class CMusTsyPropertyMonitor; +class CRepository; // Next row is to disable warning emerging from EUnit code. // Placement is due to a fact that most test case files @@ -39,7 +43,8 @@ * Tester class for CMusTsyPropertyMonitor. * */ -NONSHARABLE_CLASS( UT_CMusTsyPropertyMonitor ): public CEUnitTestSuiteClass +NONSHARABLE_CLASS( UT_CMusTsyPropertyMonitor ): public CEUnitTestSuiteClass, + MMusCallStateObserver { public: // Constructors and destructors @@ -48,11 +53,17 @@ */ static UT_CMusTsyPropertyMonitor* NewL(); static UT_CMusTsyPropertyMonitor* NewLC(); - + /** * Destructor */ ~UT_CMusTsyPropertyMonitor(); + + + public: // MMusCallStateObserver + + virtual void MusCallStateChanged(); + private: // Constructors and destructors @@ -62,7 +73,6 @@ private: // Test case setup and teardown void SetupL(); - void Setup2L(); void Teardown(); private: // Test methdods @@ -73,14 +83,17 @@ void UT_CMusTsyPropertyMonitor_RunErrorL(); void UT_CMusTsyPropertyMonitor_AddCallMonitorLL(); void UT_CMusTsyPropertyMonitor_RemoveCallMonitorL(); + void UT_CMusTsyPropertyMonitor_MonitorCSCallLL(); + void UT_CMusTsyPropertyMonitor_MonitorVoipCallLL(); void UT_CMusTsyPropertyMonitor_MonitorCallLL(); - void UT_CMusTsyPropertyMonitor_MonitorCallL_2L(); void UT_CMusTsyPropertyMonitor_RemoveUnUsedCallMonitorsL(); + void UT_CMusTsyPropertyMonitor_CheckCallCriteriaLL(); + void UT_CMusTsyPropertyMonitor_IsDataReadyLL(); private: // Data CMusTsyPropertyMonitor* iMusTsyPropertyMonitor; RMobilePhone iPhone; - + CRepository* iMusCentralRepository ; EUNIT_DECLARE_TEST_TABLE; diff -r 33a5d2bbf6fc -r 73a1feb507fb mmshplugins/mmshaoplugin/tsrc/ut_aoplugin/inc/ut_musvoipcallmonitor.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmshplugins/mmshaoplugin/tsrc/ut_aoplugin/inc/ut_musvoipcallmonitor.h Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,93 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + + +#ifndef __UT_CMusVoipCallMonitor_H__ +#define __UT_CMusVoipCallMonitor_H__ + +// USER INCLUDE +#include "mmuscallstateobserver.h" + +// EXTERNAL INCLUDES +#include +#include +#include + +// INTERNAL INCLUDES + +// Forward declaration +class CMusVoipCallMonitor; + + +// Next row is to disable warning emerging from EUnit code. +// Placement is due to a fact that most test case files +// include this file. Directive can be removed when +// EUnit is fixed. +#pragma warn_illtokenpasting off + +// CLASS DEFINITION +/** + * Tester class for CMusCallMonitorBase. + * + */ +NONSHARABLE_CLASS( UT_CMusVoipCallMonitor ): public CEUnitTestSuiteClass, + MMusCallStateObserver + { + public: + //Two phase construction + static UT_CMusVoipCallMonitor* NewL(); + static UT_CMusVoipCallMonitor* NewLC(); + // Destructor + ~UT_CMusVoipCallMonitor(); + + public: // From MMusCallStateObserver + + virtual void MusCallStateChanged(); + + private: // Constructor + UT_CMusVoipCallMonitor(); + void ConstructL(); + + private: // Test case setup and teardown + void SetupL(); + void Teardown(); + + private: // Test methdods + void UT_CMusVoipCallMonitor_IsEqualL(); + void UT_CMusVoipCallMonitor_SetStateLL(); + void UT_CMusVoipCallMonitor_SetCallInfoLL(); + void UT_CMusVoipCallMonitor_SetCallInfoLOverflowL(); + + void TestSetCallInfoLL( const TDesC& aSipUriFromTelephony, + const TDesC& aSipUriPassedToMus ); + void UT_CMusVoipCallMonitor_SetCallProviderInfoLL(); + void UT_CMusVoipCallMonitor_AddDomainFromOwnUsernameLL(); + + void UT_CMusVoipCallMonitor_IsDataReadyLL(); + void UT_CMusVoipCallMonitor_ResetCallProviderNameL(); + + private: // Data + CMusVoipCallMonitor* iVoipCallMonitor; + RTelServer iTelServer; + + EUNIT_DECLARE_TEST_TABLE; + + }; + +#endif // __UT_CMusVoipCallMonitor_H__ + +// End of file diff -r 33a5d2bbf6fc -r 73a1feb507fb mmshplugins/mmshaoplugin/tsrc/ut_aoplugin/src/muscommonstubs.cpp --- a/mmshplugins/mmshaoplugin/tsrc/ut_aoplugin/src/muscommonstubs.cpp Thu Aug 19 09:51:39 2010 +0300 +++ b/mmshplugins/mmshaoplugin/tsrc/ut_aoplugin/src/muscommonstubs.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -16,7 +16,6 @@ */ - #include "muscommonstubs.h" @@ -52,11 +51,14 @@ // // ----------------------------------------------------------------------------- // -void CMusCommonObserverStub::CallConnectedL( const TDesC& aTelNumber ) +void CMusCommonObserverStub::CallConnectedL( const TDesC& aTelNumber, + TBool aIsSipUri ) { delete iTelNumber; + iTelNumber = NULL; iTelNumber = aTelNumber.AllocL(); iCallConnectedCalled = ETrue; + iIsSipUri = aIsSipUri; } @@ -64,11 +66,14 @@ // // ----------------------------------------------------------------------------- // -void CMusCommonObserverStub::CallHoldL( const TDesC& aTelNumber ) +void CMusCommonObserverStub::CallHoldL( const TDesC& aTelNumber, + TBool aIsSipUri ) { delete iTelNumber; + iTelNumber = NULL; iTelNumber = aTelNumber.AllocL(); iCallHoldCalled = ETrue; + iIsSipUri = aIsSipUri; } diff -r 33a5d2bbf6fc -r 73a1feb507fb mmshplugins/mmshaoplugin/tsrc/ut_aoplugin/src/ut_aopluginDllMain.cpp --- a/mmshplugins/mmshaoplugin/tsrc/ut_aoplugin/src/ut_aopluginDllMain.cpp Thu Aug 19 09:51:39 2010 +0300 +++ b/mmshplugins/mmshaoplugin/tsrc/ut_aoplugin/src/ut_aopluginDllMain.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -15,7 +15,6 @@ * */ - // EXTERNAL INCLUDES #include @@ -30,7 +29,8 @@ #include "ut_muscallmonitorbase.h" #include "ut_musresourcefinderutil.h" #include "ut_mustsypropertymonitor.h" -#include "ut_musclirmonitor.h" +#include "ut_musvoipcallmonitor.h" +#include "ut_musfactorysettings.h" /** * Test suite factory function. @@ -71,9 +71,9 @@ rootSuite->AddL( UT_CMusCallMonitorBase::NewLC() ); CleanupStack::Pop(); - - rootSuite->AddL( UT_CMusClirMonitor::NewLC() ); - CleanupStack::Pop(); + + rootSuite->AddL( UT_CMusFactorySettings::NewLC() ); + CleanupStack::Pop(); CleanupStack::Pop( rootSuite ); return rootSuite; @@ -86,3 +86,5 @@ + + diff -r 33a5d2bbf6fc -r 73a1feb507fb mmshplugins/mmshaoplugin/tsrc/ut_aoplugin/src/ut_musaocalleventmonitor.cpp --- a/mmshplugins/mmshaoplugin/tsrc/ut_aoplugin/src/ut_musaocalleventmonitor.cpp Thu Aug 19 09:51:39 2010 +0300 +++ b/mmshplugins/mmshaoplugin/tsrc/ut_aoplugin/src/ut_musaocalleventmonitor.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -15,7 +15,6 @@ * */ - #include "ut_musaocalleventmonitor.h" #include "musaocalleventmonitor.h" #include "mussesseioninformationapi.h" @@ -66,7 +65,8 @@ // // ----------------------------------------------------------------------------- // -void UT_CMusAoCallEventMonitor::CallConnectedL( const TDesC& /*aTelNumber*/ ) +void UT_CMusAoCallEventMonitor::CallConnectedL( const TDesC& /*aTelNumber*/, + TBool /*aIsSipUri*/ ) { iCallConnected = ETrue; } @@ -76,7 +76,8 @@ // // ----------------------------------------------------------------------------- // -void UT_CMusAoCallEventMonitor::CallHoldL( const TDesC& /*aTelNumber*/ ) +void UT_CMusAoCallEventMonitor::CallHoldL( const TDesC& /*aTelNumber*/, + TBool /*aIsSipUri*/ ) { iCallHold = ETrue; } diff -r 33a5d2bbf6fc -r 73a1feb507fb mmshplugins/mmshaoplugin/tsrc/ut_aoplugin/src/ut_musaoplugin.cpp --- a/mmshplugins/mmshaoplugin/tsrc/ut_aoplugin/src/ut_musaoplugin.cpp Thu Aug 19 09:51:39 2010 +0300 +++ b/mmshplugins/mmshaoplugin/tsrc/ut_aoplugin/src/ut_musaoplugin.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -28,13 +28,14 @@ #include #include #include -#include "FeatMgr.h" - - +#include #pragma warn_illtokenpasting off _LIT( KEmptyTelNumber, ""); +_LIT( KEmptyProviderName, ""); + +_LIT(KTestTelNumber,"+3585050"); // ----------------------------------------------------------------------------- @@ -101,63 +102,8 @@ delete iPlugin; iPlugin = NULL ; PropertyHelper::Close(); - } - - -//// ----------------------------------------------------------------------------- -//// -//// ----------------------------------------------------------------------------- -//// -void UT_CMusAoPlugin::NewLL() - { - - TInt res = KErrNone; - TInt ret = KErrNone; - FeatureManager::MultimediaSharingNotSupported(); - iPlugin->DeleteProperties(); - delete iPlugin; - iPlugin = NULL ; - iPlugin = CMusAoPlugin::NewL(); - EUNIT_ASSERT( iPlugin ); - EUNIT_ASSERT( iPlugin->iTsyPropertyMonitor == NULL); - EUNIT_ASSERT( iPlugin->iPropertyMonitor == NULL); - // camera information property - ret = RProperty::Get( NMusResourceApi::KCategoryUid, - NMusResourceApi::KCameraInformation, - res ); - EUNIT_ASSERT_EQUALS( ret, KErrNotFound ) - ret = KErrNone; - // call event - ret = RProperty::Get( NMusSessionInformationApi::KCategoryUid, - NMusSessionInformationApi::KMusCallEvent, - res ); - EUNIT_ASSERT_EQUALS( ret, KErrNotFound ) - ret = KErrNone; - - // phone number - TBuf<15> telnumber; // TODO change to des - User::LeaveIfError( RProperty::Get( - NMusSessionInformationApi::KCategoryUid, - NMusSessionInformationApi::KMusTelNumber, - telnumber ) ); - EUNIT_ASSERT_EQUALS( telnumber.Compare( KEmptyTelNumber ), KErrNone ) - - // Mus allowed - ret = RProperty::Get( NMusSessionInformationApi::KCategoryUid, - NMusSessionInformationApi::KMUSForbidden, - res ); - EUNIT_ASSERT_EQUALS( ret, KErrNotFound ) - ret = KErrNone; - - // Call direction - ret = RProperty::Get( NMusSessionInformationApi::KCategoryUid, - NMusSessionInformationApi::KMusCallDirection, - res ); - EUNIT_ASSERT_EQUALS( ret, KErrNotFound ) - FeatureManager::MultimediaSharingSupported(); - } // ----------------------------------------------------------------------------- // @@ -165,7 +111,9 @@ // void UT_CMusAoPlugin::DefinePropertiesLL() { -/* Test 1 */ +/* Test 1 */ + TInt res = KErrNone; + TInt err = KErrNone; /* Set Product Mode variation key value to 00 - VideoPlayer always available 0-Keypad available dynamic @@ -180,7 +128,7 @@ iPlugin->DefinePropertiesL(); // It should not configure any PS keys for camera // Check the stub whether define is called. - TInt err = RProperty::Get( NMusResourceApi::KCategoryUid, + err = RProperty::Get( NMusResourceApi::KCategoryUid, NMusResourceApi::KCameraAvailability, keyValue ); EUNIT_ASSERT(keyValue == KErrNotFound ); @@ -230,8 +178,9 @@ iPlugin->DefinePropertiesL(); + res = KErrNone; // camera information property - TInt res = RProperty::Get( NMusResourceApi::KCategoryUid, + res = RProperty::Get( NMusResourceApi::KCategoryUid, NMusResourceApi::KCameraInformation, keyValue ); EUNIT_ASSERT_EQUALS( keyValue, NMusResourceApi::EUsePrimaryCamera ) @@ -250,6 +199,17 @@ telnumber ) ); EUNIT_ASSERT_EQUALS( telnumber.Compare( KEmptyTelNumber ), KErrNone ) + // callprovider + TBuf<15> callprovider; + User::LeaveIfError( RProperty::Get( + NMusSessionInformationApi::KCategoryUid, + NMusSessionInformationApi::KMUSCallProvider, + callprovider ) ); + EUNIT_ASSERT_EQUALS( callprovider.Compare( KEmptyProviderName ), KErrNone ) + + + + // Mus allowed RProperty::Get(NMusSessionInformationApi::KCategoryUid, NMusSessionInformationApi::KMUSForbidden, @@ -402,13 +362,6 @@ NMusSessionInformationApi::KMusCallDirection, res ); EUNIT_ASSERT_EQUALS( ret, KErrNotFound ) - - // Call privacy - ret = RProperty::Get( NMusSessionInformationApi::KCategoryUid, - NMusSessionInformationApi::KMUSPrivacy, - res ); - EUNIT_ASSERT_EQUALS( ret, KErrNotFound ) - } @@ -424,6 +377,103 @@ } + +// ----------------------------------------------------------------------------- +// Test Starting MushClient +// ----------------------------------------------------------------------------- +// + +void UT_CMusAoPlugin::UT_StartMusClientL() + { + // Ensure MushAO Plugin Exisit + EUNIT_ASSERT( iPlugin); + // Mush Manager Client process is not Created + EUNIT_ASSERT( !iPlugin->iManager ); + + // Test1: Ensure Start really creates the MushClient process + iPlugin->StartMusClientL(); + EUNIT_ASSERT( iPlugin->iManager ); + + // Test2: Trying to Create Client process again if it already exisit. + iPlugin->StartMusClientL(); + EUNIT_ASSERT( iPlugin->iManager ); + + //Reset Plugin Data. + iPlugin->StopMusClient(); + } + + +// ----------------------------------------------------------------------------- +// Test Starting MushClient +// ----------------------------------------------------------------------------- +// + +void UT_CMusAoPlugin::UT_StopMusClientL() + { + EUNIT_ASSERT( iPlugin); + EUNIT_ASSERT( !iPlugin->iManager ); + + // Test1: Deleteing Mush Cient when it does not exisit + iPlugin->StopMusClient(); + EUNIT_ASSERT( !iPlugin->iManager ); + + // Create Mush Client process + iPlugin->StartMusClientL(); + EUNIT_ASSERT( iPlugin->iManager ); + + // Test2: Deleting Mush Client when it Exisit. + iPlugin->StopMusClient(); + EUNIT_ASSERT( !iPlugin->iManager ); + } + + +// ----------------------------------------------------------------------------- +// From MMusCallStateObserver +// Test MushCall State Changed +// ----------------------------------------------------------------------------- +// + +void UT_CMusAoPlugin::UT_MusCallStateChangedL() + { + TName cs_call_1(_L("cs_call_1")); + + // Test 1: Data Ready: Call Connected: -> Start Mush + + // Add Some dummy CS Call + // Set Call Connected: + // Set the Required Data. + iPlugin->iTsyPropertyMonitor->AddCallMonitorL( cs_call_1); + + User::LeaveIfError(RProperty::Set( + NMusSessionInformationApi::KCategoryUid, + NMusSessionInformationApi::KMusCallEvent, + NMusSessionInformationApi::ECallConnected )); + + User::LeaveIfError( RProperty::Set( NMusSessionInformationApi::KCategoryUid, + NMusSessionInformationApi::KMusTelNumber, + KTestTelNumber )); + + User::LeaveIfError( RProperty::Set( NMusSessionInformationApi::KCategoryUid, + NMusSessionInformationApi::KMusCallDirection, + NMusSessionInformationApi::ECallOrginated )); + + // This can not be tested easily wit M-ALLOC + EUNIT_DISABLE_ALLOC_DECORATOR; + iPlugin->MusCallStateChanged(); + + EUNIT_ASSERT( iPlugin->iManager ) + EUNIT_ENABLE_ALLOC_DECORATOR; + + // Test 2: Data Not Ready: Call Connected: -> Stop Mush + User::LeaveIfError(RProperty::Set( + NMusSessionInformationApi::KCategoryUid, + NMusSessionInformationApi::KMusCallEvent, + NMusSessionInformationApi::ENoCall )); + + iPlugin->MusCallStateChanged(); + EUNIT_ASSERT( !iPlugin->iManager ) + } + // TEST TABLE EUNIT_BEGIN_TEST_TABLE( @@ -432,13 +482,6 @@ "UNIT") EUNIT_TEST( - "UT_NewLL", - "CMusAoPlugin", - "NewL", - "FUNCTIONALITY", - SetupL, NewLL, Teardown) - -EUNIT_TEST( "DefinePropertiesLL", "CMusAoPlugin", "DefinePropertiesL", @@ -466,8 +509,6 @@ "FUNCTIONALITY", SetupL, DeletePropertiesL, Teardown) - - EUNIT_TEST( "HandleServerCommandL", "CMusAoPlugin", @@ -475,12 +516,26 @@ "FUNCTIONALITY", SetupL, UT_HandleServerCommandLL, Teardown) - -EUNIT_END_TEST_TABLE - - +EUNIT_TEST( + "StartMusClient", + "CMusAoPlugin", + "StartMusClient", + "FUNCTIONALITY", + SetupL, UT_StartMusClientL, Teardown) - - - - +EUNIT_TEST( + "StopMusClient", + "CMusAoPlugin", + "StopMusClient", + "FUNCTIONALITY", + SetupL, UT_StopMusClientL, Teardown) + +EUNIT_TEST( + "MusCallStateChanged", + "CMusAoPlugin", + "MusCallStateChanged", + "FUNCTIONALITY", + SetupL, UT_MusCallStateChangedL, Teardown) + + +EUNIT_END_TEST_TABLE diff -r 33a5d2bbf6fc -r 73a1feb507fb mmshplugins/mmshaoplugin/tsrc/ut_aoplugin/src/ut_muscallconferenceeventmonitor.cpp --- a/mmshplugins/mmshaoplugin/tsrc/ut_aoplugin/src/ut_muscallconferenceeventmonitor.cpp Thu Aug 19 09:51:39 2010 +0300 +++ b/mmshplugins/mmshaoplugin/tsrc/ut_aoplugin/src/ut_muscallconferenceeventmonitor.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -164,13 +164,14 @@ val ); EUNIT_ASSERT( val==NMusSessionInformationApi::EConferenceCall); - RTelHelper::SetConfEvent( RMobileConferenceCall::EConferenceTerminated ); + RTelHelper::SetConfEvent( RMobileConferenceCall::EConferenceTerminated ); + iConferenceCallEventMonitor->SetStateL( NMusSessionInformationApi::ENoCall ); iConferenceCallEventMonitor->Cancel(); // Cancel the active object iConferenceCallEventMonitor->RunL(); RProperty::Get( NMusSessionInformationApi::KCategoryUid, NMusSessionInformationApi::KMusCallEvent, val ); - EUNIT_ASSERT( val==NMusSessionInformationApi::EConferenceTerminated); + EUNIT_ASSERT( val==NMusSessionInformationApi::ENoCall); RTelHelper::SetConfEvent( RMobileConferenceCall::EConferenceSwapped ); iConferenceCallEventMonitor->SetStateL( NMusSessionInformationApi::ENoCall ); diff -r 33a5d2bbf6fc -r 73a1feb507fb mmshplugins/mmshaoplugin/tsrc/ut_aoplugin/src/ut_muscallconferencemonitor.cpp --- a/mmshplugins/mmshaoplugin/tsrc/ut_aoplugin/src/ut_muscallconferencemonitor.cpp Thu Aug 19 09:51:39 2010 +0300 +++ b/mmshplugins/mmshaoplugin/tsrc/ut_aoplugin/src/ut_muscallconferencemonitor.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -96,6 +96,9 @@ NMusSessionInformationApi::KMusCallCount, 1 ); */ + + RTelHelper::SetConfStatus( RMobileConferenceCall::EConferenceIdle ); + RProperty::Set( NMusSessionInformationApi::KCategoryUid, NMusSessionInformationApi::KMusCallEvent, 0 ); @@ -104,7 +107,6 @@ CMusCallConferenceMonitor::NewL( iMobilePhone, iLine , iCallMonitorArray ); - } @@ -218,6 +220,14 @@ } +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_CMusCallConferenceMonitor::UT_CMusCallConferenceMonitor_GetConfStatus() + { + EUNIT_ASSERT( iConferenceCallMonitor->GetConfStatus() == RMobileConferenceCall::EConferenceIdle ); + } // TEST TABLE @@ -261,6 +271,13 @@ "FUNCTIONALITY", SetupL, UT_CMusCallConferenceMonitor_MonitorCallLL, Teardown) +EUNIT_TEST( + "GetCconfStatusL - test ", + "CMusConferenceCallMonitor", + "GetCconfStatus", + "FUNCTIONALITY", + SetupL, UT_CMusCallConferenceMonitor_GetConfStatus, Teardown) + EUNIT_END_TEST_TABLE diff -r 33a5d2bbf6fc -r 73a1feb507fb mmshplugins/mmshaoplugin/tsrc/ut_aoplugin/src/ut_muscalleventmonitor.cpp --- a/mmshplugins/mmshaoplugin/tsrc/ut_aoplugin/src/ut_muscalleventmonitor.cpp Thu Aug 19 09:51:39 2010 +0300 +++ b/mmshplugins/mmshaoplugin/tsrc/ut_aoplugin/src/ut_muscalleventmonitor.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -111,7 +111,7 @@ NMusSessionInformationApi::KMusCallEvent, 0 ); - iCallEventMonitor = CMusCallEventMonitor::NewL( iCall, *this ); + iCallEventMonitor = CMusCallEventMonitor::NewL( iCall, *this, *this ); } @@ -170,17 +170,13 @@ // Test : Local Transfered. Means no call. iCallEventMonitor->Cancel(); - RProperty::Get( NMusSessionInformationApi::KCategoryUid, - NMusSessionInformationApi::KMusCallEvent, - val ); - TInt callEnt = val; RTelHelper::SetCallEvent( RMobileCall::ELocalTransfer ); iCallEventMonitor->RunL(); RProperty::Get( NMusSessionInformationApi::KCategoryUid, NMusSessionInformationApi::KMusCallEvent, val ); - EUNIT_ASSERT( callEnt==val ); + EUNIT_ASSERT( val==NMusSessionInformationApi::ENoCall); // Test : Remote is on hold iCallEventMonitor->Cancel(); @@ -216,16 +212,12 @@ // Test : Remote is on conference iCallEventMonitor->Cancel(); - RProperty::Get( NMusSessionInformationApi::KCategoryUid, - NMusSessionInformationApi::KMusCallEvent, - val ); - callEnt = val; RTelHelper::SetCallEvent( RMobileCall::ERemoteConferenceCreate ); iCallEventMonitor->RunL(); RProperty::Get( NMusSessionInformationApi::KCategoryUid, NMusSessionInformationApi::KMusCallEvent, val ); - EUNIT_ASSERT( callEnt==val ); + EUNIT_ASSERT( val==NMusSessionInformationApi::EConferenceCall); // Test : Remote conference transfer iCallEventMonitor->Cancel(); @@ -234,7 +226,7 @@ RProperty::Get( NMusSessionInformationApi::KCategoryUid, NMusSessionInformationApi::KMusCallEvent, val ); - EUNIT_ASSERT( val==callEnt ); + EUNIT_ASSERT( val==NMusSessionInformationApi::EConferenceCall);//Previous state. // remote is connected state and local resume iCallEventMonitor->Cancel(); @@ -300,12 +292,18 @@ { EUNIT_ASSERT( iCallEventMonitor ); TInt error = KErrNotFound; - EUNIT_ASSERT_EQUALS(iCallEventMonitor->RunError(error), KErrNone); - EUNIT_ASSERT_EQUALS(iCallEventMonitor->RunError(KErrNone), KErrNone); + iCallEventMonitor->RunError(error); } - +// ----------------------------------------------------------------------------- +// MusCallStateChanged from the MusCallStateObserver +// ----------------------------------------------------------------------------- +// +void UT_CMusCallEventMonitor::MusCallStateChanged() + { + //NOP: + } // TEST TABLE diff -r 33a5d2bbf6fc -r 73a1feb507fb mmshplugins/mmshaoplugin/tsrc/ut_aoplugin/src/ut_muscallmonitor.cpp --- a/mmshplugins/mmshaoplugin/tsrc/ut_aoplugin/src/ut_muscallmonitor.cpp Thu Aug 19 09:51:39 2010 +0300 +++ b/mmshplugins/mmshaoplugin/tsrc/ut_aoplugin/src/ut_muscallmonitor.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -135,12 +135,12 @@ EUNIT_ASSERT( !iCallMonitor->iCallStatusMonitor ); EUNIT_ASSERT( !iCallMonitor->iCallEventMonitor ); - iCallMonitor->StartMonitorL( iLine, *this ); + iCallMonitor->StartMonitorL( iLine, *this, *this ); EUNIT_ASSERT( iCallMonitor->iCallStatusMonitor ); EUNIT_ASSERT( iCallMonitor->iCallEventMonitor ); - EUNIT_ASSERT_LEAVE( iCallMonitor->StartMonitorL( iLine, *this ) ); + EUNIT_ASSERT_LEAVE( iCallMonitor->StartMonitorL( iLine, *this , *this) ); } @@ -158,7 +158,7 @@ EUNIT_ASSERT( !iCallMonitor->iCallStatusMonitor ); EUNIT_ASSERT( !iCallMonitor->iCallEventMonitor ); - iCallMonitor->StartMonitorL( iLine, *this ); + iCallMonitor->StartMonitorL( iLine, *this, *this ); EUNIT_ASSERT( iCallMonitor->iCallStatusMonitor ); EUNIT_ASSERT( iCallMonitor->iCallEventMonitor ); @@ -193,13 +193,21 @@ EUNIT_ASSERT( !iCallMonitor->IsMonitored() ); - iCallMonitor->StartMonitorL( iLine, *this ); + iCallMonitor->StartMonitorL( iLine, *this, *this ); EUNIT_ASSERT( iCallMonitor->IsMonitored() ); } +// ----------------------------------------------------------------------------- +// MusCallStateChanged from the MusCallStateObserver +// ----------------------------------------------------------------------------- +// +void UT_CMusCallMonitor::MusCallStateChanged() + { + // NOP + } diff -r 33a5d2bbf6fc -r 73a1feb507fb mmshplugins/mmshaoplugin/tsrc/ut_aoplugin/src/ut_muscallmonitorbase.cpp --- a/mmshplugins/mmshaoplugin/tsrc/ut_aoplugin/src/ut_muscallmonitorbase.cpp Thu Aug 19 09:51:39 2010 +0300 +++ b/mmshplugins/mmshaoplugin/tsrc/ut_aoplugin/src/ut_muscallmonitorbase.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -24,10 +24,16 @@ // SYSTEM INCLUDES #include +// Test configurations +_LIT(KEmptyProvider,""); +_LIT(KTestTelNumber,"+3585050"); + + CMusCallMonitorMock::CMusCallMonitorMock( const RMobileCall& aCall, - MMusTsyPropertyObserver& aObserver ) - : CMusCallMonitorBase( aCall, aObserver ) + MMusTsyPropertyObserver& aObserver, + MMusCallStateObserver& aCallStateObserver ) + : CMusCallMonitorBase( aCall, aObserver, aCallStateObserver ) { } @@ -107,12 +113,25 @@ // UT_CMusCallMonitorBase::NotifyCallStateChanged() // ----------------------------------------------------------------------------- // -void -UT_CMusCallMonitorBase::NotifyCallStateChanged( NMusSessionInformationApi::TMusCallEvent /*aVal*/, - TName& /*aCallName*/ ) +void UT_CMusCallMonitorBase::NotifyCallStateChanged( + NMusSessionInformationApi::TMusCallEvent /*aVal*/, + TName& /*aCallName*/ ) { } + + +// ----------------------------------------------------------------------------- +// MusCallStateChanged from the MusCallStateObserver +// ----------------------------------------------------------------------------- +// +void UT_CMusCallMonitorBase::MusCallStateChanged() + { + iCallStateObserverInvoked = ETrue; + } + + + // ----------------------------------------------------------------------------- // // ----------------------------------------------------------------------------- @@ -123,13 +142,15 @@ NMusSessionInformationApi::KMusCallEvent, 0 ); RTelHelper::SetCallDirection( RMobileCall::EDirectionUnknown ); - iCallMonitorBase = new CMusCallMonitorMock( iCall, *this ); + iCallMonitorBase = new CMusCallMonitorMock( iCall, *this, *this ); + iCallStateObserverInvoked = EFalse; } void UT_CMusCallMonitorBase::Setup2L() { - iCallMonitorBase = new CMusCallMonitorMock( iCall, *this ); + iCallStateObserverInvoked = EFalse; + iCallMonitorBase = new CMusCallMonitorMock( iCall, *this, *this ); } // ----------------------------------------------------------------------------- @@ -155,7 +176,6 @@ void UT_CMusCallMonitorBase::UT_SetStateLL() { TInt tmp; - EUNIT_ASSERT ( RProperty::Get( NMusSessionInformationApi::KCategoryUid, NMusSessionInformationApi::KMusCallEvent, tmp ) != KErrNone ); @@ -173,9 +193,13 @@ { User::Leave( KErrNoMemory ); } - + + EUNIT_ASSERT (!iCallStateObserverInvoked ) iCallMonitorBase->SetStateL( NMusSessionInformationApi::ECallHold ); + + EUNIT_ASSERT ( iCallStateObserverInvoked ) + RProperty::Get( NMusSessionInformationApi::KCategoryUid, NMusSessionInformationApi::KMusCallEvent, tmp ); @@ -213,7 +237,7 @@ telnro ); EUNIT_ASSERT( telnro == KTelnro ); - + RProperty::Get( NMusSessionInformationApi::KCategoryUid, NMusSessionInformationApi::KMusCallDirection, direction ); @@ -251,7 +275,16 @@ EUNIT_ASSERT( direction == NMusSessionInformationApi::ECallTerminated ); - + /* Test for call provider */ + // Call Provider info is only Set for VoIP Calls + iCallMonitorBase->SetCallInfoL(); + TBuf provider; + RProperty::Get( NMusSessionInformationApi::KCategoryUid, + NMusSessionInformationApi::KMUSCallProvider, + provider ); + + + EUNIT_ASSERT( provider == KEmptyProvider ); } @@ -266,81 +299,41 @@ // ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void UT_CMusCallMonitorBase::UT_SetClirSettingL() - { - TInt tmp; - _LIT( KTestNumber1, "11111" ); - _LIT( KTestNumber2, "#31#11111" ); - - iCallMonitorBase->SetClirSetting( KTestNumber1() ); - RProperty::Get( NMusSessionInformationApi::KCategoryUid, - NMusSessionInformationApi::KMusClirSetting, - tmp ); - EUNIT_ASSERT( tmp==NMusSessionInformationApi::ESendOwnNumber); - - iCallMonitorBase->SetClirSetting( KTestNumber2() ); - RProperty::Get( NMusSessionInformationApi::KCategoryUid, - NMusSessionInformationApi::KMusClirSetting, - tmp ); - EUNIT_ASSERT( tmp==NMusSessionInformationApi::EDoNotSendOwnNumber); - - } - -// ----------------------------------------------------------------------------- -// +// UT_CMusCallMonitorBase::UT_CMusCallMonitorBase_IsDataReadyLL() +// Test if required Data is ready for CS calls // ----------------------------------------------------------------------------- // -void UT_CMusCallMonitorBase::UT_SetTerminatingPrivacyL() +void UT_CMusCallMonitorBase::UT_CMusCallMonitorBase_IsDataReadyLL() { - TInt tmp; - - iCallMonitorBase->SetTerminatingPrivacy( iCallMonitorBase->iCall ); - RProperty::Get( NMusSessionInformationApi::KCategoryUid, - NMusSessionInformationApi::KMUSPrivacy, - tmp ); - EUNIT_ASSERT( tmp==NMusSessionInformationApi::EPrivacyOff); - - RTelHelper::SetRemoteIdStatus( RMobileCall::ERemoteIdentitySuppressed ); - iCallMonitorBase->SetTerminatingPrivacy( iCallMonitorBase->iCall ); - RProperty::Get( NMusSessionInformationApi::KCategoryUid, - NMusSessionInformationApi::KMUSPrivacy, - tmp ); - EUNIT_ASSERT( tmp==NMusSessionInformationApi::EPrivacyOn); + TBool dataReady = EFalse; - - } + //Test-1: Date Ready: + User::LeaveIfError( RProperty::Set( NMusSessionInformationApi::KCategoryUid, + NMusSessionInformationApi::KMusTelNumber, + KTestTelNumber )); -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void UT_CMusCallMonitorBase::UT_RemovePrefixL() - { - _LIT( KTestNumber1, "11111" ); - _LIT( KTestNumber2, "#31#11111" ); - _LIT( KTestNumber3, "*31#11111" ); - + User::LeaveIfError( RProperty::Set( NMusSessionInformationApi::KCategoryUid, + NMusSessionInformationApi::KMusCallDirection, + NMusSessionInformationApi::ECallOrginated )); + + dataReady = iCallMonitorBase->IsDataReadyL(); + EUNIT_ASSERT_EQUALS( dataReady, ETrue ) - HBufC* test1 = iCallMonitorBase->RemovePrefix( KTestNumber1 ); - CleanupStack::PushL( test1 ); - EUNIT_ASSERT( *test1 == KTestNumber1 ); - CleanupStack::PopAndDestroy( test1 ); - - HBufC* test2 = iCallMonitorBase->RemovePrefix( KTestNumber3 ); - CleanupStack::PushL( test2 ); - EUNIT_ASSERT( *test2 == KTestNumber1 ); - CleanupStack::PopAndDestroy( test2 ); - - HBufC* test3 = iCallMonitorBase->RemovePrefix( KTestNumber2 ); - CleanupStack::PushL( test3 ); - EUNIT_ASSERT( *test3 == KTestNumber1 ); - CleanupStack::PopAndDestroy( test3 ); - - - + //Test-2: Partial Data is Ready + User::LeaveIfError( RProperty::Set( NMusSessionInformationApi::KCategoryUid, + NMusSessionInformationApi::KMusTelNumber, + KNullDesC )); + dataReady = iCallMonitorBase->IsDataReadyL(); + EUNIT_ASSERT_EQUALS( dataReady, EFalse ) + + + //Test-3: Data Not Ready. + User::LeaveIfError(RProperty::Set( NMusSessionInformationApi::KCategoryUid, + NMusSessionInformationApi::KMusCallEvent, + ( TInt ) NMusSessionInformationApi::ENoCall )); + + dataReady = iCallMonitorBase->IsDataReadyL(); + EUNIT_ASSERT_EQUALS( dataReady, EFalse ) } @@ -372,30 +365,15 @@ "FUNCTIONALITY", SetupL, UT_RunErrorL, Teardown) + EUNIT_TEST( - "SetClirSetting - test", - "CMusCallMonitorBase", - "SetClirSetting", - "FUNCTIONALITY", - SetupL, UT_SetClirSettingL, Teardown) - -EUNIT_TEST( - "SetTerminatingPrivacy - test", + "IsDataReadyL - test", "CMusCallMonitorBase", - "SetTerminatingPrivacy", + "IsDataReadyL", "FUNCTIONALITY", - SetupL, UT_SetTerminatingPrivacyL, Teardown) - -EUNIT_TEST( - "RemovePrefix - test", - "CMusCallMonitorBase", - "RemovePrefix", - "FUNCTIONALITY", - SetupL, UT_RemovePrefixL, Teardown) + SetupL, UT_CMusCallMonitorBase_IsDataReadyLL, Teardown) EUNIT_END_TEST_TABLE // END OF FILE - - diff -r 33a5d2bbf6fc -r 73a1feb507fb mmshplugins/mmshaoplugin/tsrc/ut_aoplugin/src/ut_muscallstatusmonitor.cpp --- a/mmshplugins/mmshaoplugin/tsrc/ut_aoplugin/src/ut_muscallstatusmonitor.cpp Thu Aug 19 09:51:39 2010 +0300 +++ b/mmshplugins/mmshaoplugin/tsrc/ut_aoplugin/src/ut_muscallstatusmonitor.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -111,7 +111,7 @@ NMusSessionInformationApi::KMusCallEvent, NMusSessionInformationApi::ENoCall ); - iCallStatusMonitor = CMusCallStatusMonitor::NewL( iCall, *this ); + iCallStatusMonitor = CMusCallStatusMonitor::NewL( iCall, *this, *this ); } @@ -173,40 +173,34 @@ callEvent ) // RMobileCall::EStatusDisconnecting - User::LeaveIfError( - RProperty::Get( NMusSessionInformationApi::KCategoryUid, - NMusSessionInformationApi::KMusCallEvent, - callEvent ) ); - TInt callEnt = callEvent; iCallStatusMonitor->iCallStatus = RMobileCall::EStatusDisconnecting; iCallStatusMonitor->CheckStateL(); User::LeaveIfError( RProperty::Get( NMusSessionInformationApi::KCategoryUid, NMusSessionInformationApi::KMusCallEvent, callEvent ) ); - EUNIT_ASSERT( callEnt==callEvent ); + EUNIT_ASSERT_EQUALS( + static_cast< TInt >( NMusSessionInformationApi::ENoCall ), + callEvent ) EUNIT_ASSERT( iCallStatusMonitor == NULL ) // RMobileCall::EStatusDisconnectingWithInband // iCallStatusMonitor was deleted by the previous call - iCallStatusMonitor = CMusCallStatusMonitor::NewL( iCall, *this ); - User::LeaveIfError( - RProperty::Get( NMusSessionInformationApi::KCategoryUid, - NMusSessionInformationApi::KMusCallEvent, - callEvent ) ); - callEnt = callEvent; + iCallStatusMonitor = CMusCallStatusMonitor::NewL( iCall, *this, *this ); iCallStatusMonitor->iCallStatus = RMobileCall::EStatusDisconnectingWithInband; iCallStatusMonitor->CheckStateL(); User::LeaveIfError( RProperty::Get( NMusSessionInformationApi::KCategoryUid, NMusSessionInformationApi::KMusCallEvent, callEvent ) ); - EUNIT_ASSERT( callEnt == callEvent ); + EUNIT_ASSERT_EQUALS( + static_cast< TInt >( NMusSessionInformationApi::ENoCall ), + callEvent ) EUNIT_ASSERT( iCallStatusMonitor == NULL ) // RMobileCall::EStatusHold // iCallStatusMonitor was deleted by the previous call - iCallStatusMonitor = CMusCallStatusMonitor::NewL( iCall, *this ); + iCallStatusMonitor = CMusCallStatusMonitor::NewL( iCall, *this, *this ); iCallStatusMonitor->iCallStatus = RMobileCall::EStatusHold; iCallStatusMonitor->CheckStateL(); User::LeaveIfError( @@ -300,7 +294,14 @@ } - +// ----------------------------------------------------------------------------- +// MusCallStateChanged from the MusCallStateObserver +// ----------------------------------------------------------------------------- +// +void UT_CMusCallStatusMonitor::MusCallStateChanged() + { + // NOP + } // TEST TABLE diff -r 33a5d2bbf6fc -r 73a1feb507fb mmshplugins/mmshaoplugin/tsrc/ut_aoplugin/src/ut_musclirmonitor.cpp --- a/mmshplugins/mmshaoplugin/tsrc/ut_aoplugin/src/ut_musclirmonitor.cpp Thu Aug 19 09:51:39 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,291 +0,0 @@ -/* -* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - initial contribution. -* -* Contributors: -* -* Description: Monitor that observes the calling line identity restriction -* setting -* -*/ - -#include "musclirmonitor.h" -#include "ut_musclirmonitor.h" -#include "e32property.h" - -#include -#include -#include -#include - - -#pragma warn_illtokenpasting off - -// Constants - - -// ----------------------------------------------------------------------------- -// UT_CMusClirMonitor::NewLC -// ----------------------------------------------------------------------------- -// -UT_CMusClirMonitor* UT_CMusClirMonitor::NewLC() - { - UT_CMusClirMonitor* self = new (ELeave) UT_CMusClirMonitor(); - CleanupStack::PushL( self ); - self->ConstructL(); - return self; - } - - -// ----------------------------------------------------------------------------- -// UT_CMusClirMonitor::ConstructL -// ----------------------------------------------------------------------------- -// -void UT_CMusClirMonitor::ConstructL() - { - CEUnitTestSuiteClass::ConstructL(); - } - - -// ----------------------------------------------------------------------------- -// UT_CMusClirMonitor::UT_CMusClirMonitor -// ----------------------------------------------------------------------------- -// -UT_CMusClirMonitor::UT_CMusClirMonitor() : - CEUnitTestSuiteClass() - { - } - - -// ----------------------------------------------------------------------------- -// UT_CMusClirMonitor::~UT_CMusClirMonitor -// ----------------------------------------------------------------------------- -// -UT_CMusClirMonitor::~UT_CMusClirMonitor() - { - } - - -// ----------------------------------------------------------------------------- -// UT_CMusClirMonitor::UT_ReadClir -// ----------------------------------------------------------------------------- -// -void UT_CMusClirMonitor::UT_ReadClir() - { - // Cancel initial request - iMonitor->Cancel(); - - iMonitor->ReadClir(); - EUNIT_ASSERT( iMonitor->IsActive() ); - - // Monitor is already reading, new attempts do nothing - iMonitor->ReadClir(); - iMonitor->ReadClir(); - - EUNIT_ASSERT_EQUALS( iMonitor->iErrorCount, 0 ); - } - - -// ----------------------------------------------------------------------------- -// UT_CMusClirMonitor::UT_RunL -// ----------------------------------------------------------------------------- -// -void UT_CMusClirMonitor::UT_RunL() - { - CTelephony::TIdentityServiceStatus value1 = - CTelephony::EIdServiceActivePermanent; - CTelephony::TIdentityServiceStatus value2 = - CTelephony::EIdServiceNotProvisioned; - - EUNIT_ASSERT( iMonitor->iAllowed ); - iMonitor->Cancel(); - iMonitor->iTIdentityServiceV1.iIdentityStatus = value1; - iMonitor->iStatus = KErrNone; - iMonitor->RunL(); - EUNIT_ASSERT( !iMonitor->iAllowed ); - EUNIT_ASSERT_EQUALS( iMonitor->iErrorCount, 0 ); - - - iMonitor->Cancel(); - iMonitor->iTIdentityServiceV1.iIdentityStatus = value2; - iMonitor->iStatus = KErrGeneral; - iMonitor->RunL(); - // iAllowed value does not change because request completed with error - EUNIT_ASSERT( !iMonitor->iAllowed ); - EUNIT_ASSERT_EQUALS( iMonitor->iErrorCount, 1 ); - - - iMonitor->Cancel(); - iMonitor->iTIdentityServiceV1.iIdentityStatus = value2; - iMonitor->iStatus = KErrNone; - iMonitor->RunL(); - EUNIT_ASSERT( iMonitor->iAllowed ); - // After successful read, error count is reset - EUNIT_ASSERT_EQUALS( iMonitor->iErrorCount, 0 ); - } - - -// ----------------------------------------------------------------------------- -// UT_CMusClirMonitor::UT_RunLErrorsL -// Test that if reading fails, it is retried few times. -// ----------------------------------------------------------------------------- -// -void UT_CMusClirMonitor::UT_RunLErrorsL() - { - // Must have same value as in musclirmonitor.cpp - const TInt KMaxErrorsBeforeStop = 5; - - EUNIT_ASSERT_EQUALS( iMonitor->iErrorCount, 0 ); - - for ( TInt i = 1; i <= KMaxErrorsBeforeStop; ++i ) - { - // Reading fails - iMonitor->Cancel(); - iMonitor->iStatus = KErrNotSupported; - iMonitor->RunL(); - EUNIT_ASSERT_EQUALS( iMonitor->iErrorCount, i ); - // Retry started - EUNIT_ASSERT( iMonitor->IsActive() ); - } - - // Reading fails - iMonitor->Cancel(); - iMonitor->iStatus = KErrNotSupported; - iMonitor->RunL(); - EUNIT_ASSERT_EQUALS( iMonitor->iErrorCount, KMaxErrorsBeforeStop + 1 ); - - // No more retries - EUNIT_ASSERT( !iMonitor->IsActive() ); - } - -// ----------------------------------------------------------------------------- -// UT_CMusClirMonitor::UT_DoCancel -// ----------------------------------------------------------------------------- -// -void UT_CMusClirMonitor::UT_DoCancel() - { - EUNIT_ASSERT( iMonitor->IsActive() ); - - // Can't call DoCancel directly, must call it via the CActive::Cancel - iMonitor->Cancel(); - - EUNIT_ASSERT( !iMonitor->IsActive() ); - } - - -// ----------------------------------------------------------------------------- -// UT_CMusClirMonitor::UT_RunError -// ----------------------------------------------------------------------------- -// -void UT_CMusClirMonitor::UT_RunError() - { - EUNIT_ASSERT( iMonitor->RunError( KErrNone ) == KErrNone ); - EUNIT_ASSERT( iMonitor->RunError( KErrGeneral ) == KErrNone ); - EUNIT_ASSERT( iMonitor->RunError( 48 ) == KErrNone ); - EUNIT_ASSERT( iMonitor->RunError( -2092 ) == KErrNone ); - } - - -// ----------------------------------------------------------------------------- -// UT_CMusClirMonitor::UT_TranslateResult -// ----------------------------------------------------------------------------- -// -void UT_CMusClirMonitor::UT_TranslateResult() - { - iMonitor->iAllowed = EFalse; - - iMonitor->TranslateResult( CTelephony::EIdServiceActiveDefaultAllowed ); - EUNIT_ASSERT( iMonitor->iAllowed ); - - iMonitor->TranslateResult( CTelephony::EIdServiceActivePermanent ); - EUNIT_ASSERT( !iMonitor->iAllowed ); - - iMonitor->TranslateResult( CTelephony::EIdServiceNotProvisioned ); - EUNIT_ASSERT( iMonitor->iAllowed ); - - iMonitor->TranslateResult( CTelephony::EIdServiceActiveDefaultRestricted ); - EUNIT_ASSERT( !iMonitor->iAllowed ); - - iMonitor->TranslateResult( CTelephony::EIdServiceUnknown ); - EUNIT_ASSERT( !iMonitor->iAllowed ); - } - -// ----------------------------------------------------------------------------- -// UT_CMusClirMonitor::SetupL -// ----------------------------------------------------------------------------- -// -void UT_CMusClirMonitor::SetupL() - { - iMonitor = CMusClirMonitor::NewL(); - } - - -// ----------------------------------------------------------------------------- -// UT_CMusClirMonitor::Teardown -// ----------------------------------------------------------------------------- -// -void UT_CMusClirMonitor::Teardown() - { - delete iMonitor; - iMonitor = NULL; - PropertyHelper::Close(); - - } - -// test table - -EUNIT_BEGIN_TEST_TABLE( - UT_CMusClirMonitor, - "UT_CMusClirMonitor", - "UNIT" ) - -EUNIT_TEST( - "UT_ReadClir", - "CMusClirMonitor", - "ReadClir", - "FUNCTIONALITY", - SetupL, UT_ReadClir, Teardown) - -EUNIT_TEST( - "UT_RunL", - "CMusClirMonitor", - "RunL", - "FUNCTIONALITY", - SetupL, UT_RunL, Teardown) - -EUNIT_TEST( - "UT_RunLErrorsL", - "CMusClirMonitor", - "RunL", - "FUNCTIONALITY", - SetupL, UT_RunLErrorsL, Teardown) - -EUNIT_TEST( - "UT_DoCancel", - "CMusClirMonitor", - "DoCancel", - "FUNCTIONALITY", - SetupL, UT_DoCancel, Teardown) - -EUNIT_TEST( - "UT_RunError", - "CMusClirMonitor", - "RunError", - "FUNCTIONALITY", - SetupL, UT_RunError, Teardown) - -EUNIT_TEST( - "UT_TranslateResult", - "CMusClirMonitor", - "TranslateResult", - "FUNCTIONALITY", - SetupL, UT_TranslateResult, Teardown) - -EUNIT_END_TEST_TABLE diff -r 33a5d2bbf6fc -r 73a1feb507fb mmshplugins/mmshaoplugin/tsrc/ut_aoplugin/src/ut_musclirmonitor.h --- a/mmshplugins/mmshaoplugin/tsrc/ut_aoplugin/src/ut_musclirmonitor.h Thu Aug 19 09:51:39 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,90 +0,0 @@ -/* -* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - initial contribution. -* -* Contributors: -* -* Description: Monitor that observes the calling line identity restriction -* setting -* -*/ - - - -#ifndef UT_MUSCLIRMONITORTEST_H -#define UT_MUSCLIRMONITORTEST_H - -#include -#include - - -class CMusClirMonitor; -class CMusAoPlugin; - - -NONSHARABLE_CLASS( UT_CMusClirMonitor ) - : public CEUnitTestSuiteClass - { - -public: // constructors and destructor - - /** - * Destructor. - */ - ~UT_CMusClirMonitor(); - - /** - * Two-phased constructor. Leaves on failure. - * @return The constructed UT_CMusClirMonitor object. - */ - static UT_CMusClirMonitor* NewLC(); - -private: - - /** - * C++ constructor. - */ - UT_CMusClirMonitor(); - - /** - * Symbian 2nd-phase constructor. - */ - void ConstructL(); - -public: - - void UT_ReadClir(); - - void UT_RunL(); - - void UT_RunLErrorsL(); - - void UT_DoCancel(); - - void UT_RunError(); - - void UT_TranslateResult(); - -private: - - void SetupL(); - - void Teardown(); - -private: // data - - // Owned - CMusClirMonitor* iMonitor; - - EUNIT_DECLARE_TEST_TABLE; - - }; - -#endif // UT_MUSCLIRMONITORTEST_H diff -r 33a5d2bbf6fc -r 73a1feb507fb mmshplugins/mmshaoplugin/tsrc/ut_aoplugin/src/ut_muscommondllmain.cpp --- a/mmshplugins/mmshaoplugin/tsrc/ut_aoplugin/src/ut_muscommondllmain.cpp Thu Aug 19 09:51:39 2010 +0300 +++ b/mmshplugins/mmshaoplugin/tsrc/ut_aoplugin/src/ut_muscommondllmain.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -17,6 +17,7 @@ // USER INCLUDES #include "ut_muscallmonitor.h" +#include "ut_musvoipcallmonitor.h" #include "ut_muscallstatusmonitor.h" #include "ut_muscalleventmonitor.h" #include "ut_muscallconferenceeventmonitor.h" @@ -24,6 +25,7 @@ #include "ut_muscallmonitorbase.h" #include "ut_musresourcefinderutil.h" #include "ut_mustsypropertymonitor.h" +#include "ut_musfactorysettings.h" // SYSTEM INCLUDES #include @@ -52,7 +54,6 @@ rootSuite->AddL( UT_CMusTsyPropertyMonitor::NewLC() ); CleanupStack::Pop(); - rootSuite->AddL( UT_MusResourceFinderUtil::NewLC() ); CleanupStack::Pop(); @@ -63,6 +64,12 @@ rootSuite->AddL( UT_CMusCallMonitorBase::NewLC() ); CleanupStack::Pop(); + rootSuite->AddL( UT_CMusVoipCallMonitor::NewLC() ); + CleanupStack::Pop(); + + rootSuite->AddL( UT_CMusFactorySettings::NewLC() ); + CleanupStack::Pop(); + CleanupStack::Pop( rootSuite ); return rootSuite; diff -r 33a5d2bbf6fc -r 73a1feb507fb mmshplugins/mmshaoplugin/tsrc/ut_aoplugin/src/ut_musconferencecallmonitor.cpp --- a/mmshplugins/mmshaoplugin/tsrc/ut_aoplugin/src/ut_musconferencecallmonitor.cpp Thu Aug 19 09:51:39 2010 +0300 +++ b/mmshplugins/mmshaoplugin/tsrc/ut_aoplugin/src/ut_musconferencecallmonitor.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -126,9 +126,6 @@ { EUNIT_ASSERT_EQUALS( iMonitor->RunError( KErrNone ), KErrNone ) - // Make sure RunError handles the error compleatly and returns - // KErrNone - EUNIT_ASSERT( iMonitor->RunError( KErrGeneral ) == KErrNone ); } // ----------------------------------------------------------------------------- diff -r 33a5d2bbf6fc -r 73a1feb507fb mmshplugins/mmshaoplugin/tsrc/ut_aoplugin/src/ut_musfactorysettings.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmshplugins/mmshaoplugin/tsrc/ut_aoplugin/src/ut_musfactorysettings.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,194 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + + +// INTERNAL INCLUDES +#include +#include "etelmm.h" +#include "ut_musfactorysettings.h" +#include "musfactorysettings.h" +#include "centralrepository.h" +#include "e32property.h" + + +// SYSTEM INCLUDES +#include + +// ----------------------------------------------------------------------------- +// Two phase symbian constructor +// ----------------------------------------------------------------------------- +// +UT_CMusFactorySettings* UT_CMusFactorySettings::NewL() + { + UT_CMusFactorySettings* self = UT_CMusFactorySettings::NewLC(); + CleanupStack::Pop( self ); + return self; + } + + +// ----------------------------------------------------------------------------- +// Two phase symbian constructor +// ----------------------------------------------------------------------------- +// +UT_CMusFactorySettings* UT_CMusFactorySettings::NewLC() + { + UT_CMusFactorySettings* self = new( ELeave ) UT_CMusFactorySettings(); + CleanupStack::PushL( self ); + self->ConstructL(); + return self; + } + + +// ----------------------------------------------------------------------------- +// Destructor +// ----------------------------------------------------------------------------- +// +UT_CMusFactorySettings::~UT_CMusFactorySettings() + { + + } + + +// ----------------------------------------------------------------------------- +// Default constructor +// ----------------------------------------------------------------------------- +// +UT_CMusFactorySettings::UT_CMusFactorySettings() + { + // NOP + } + + +// ----------------------------------------------------------------------------- +// Second phase construct +// ----------------------------------------------------------------------------- +// +void UT_CMusFactorySettings::ConstructL() + { + // The ConstructL from the base class CEUnitTestSuiteClass must be called. + // It generates the test case table. + CEUnitTestSuiteClass::ConstructL(); + + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_CMusFactorySettings::SetupL() + { + iMusCentralRepository = CRepository::NewL( MusSettingsKeys::KRepositoryUid ); + CRepository::ResetStubGlobal(); + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_CMusFactorySettings::Teardown() + { + delete iMusCentralRepository; + iMusCentralRepository = NULL; + CRepository::ResetStubGlobal(); + PropertyHelper::Close(); // CRepository puts stuff to RProperty static + } + +// TEST CASES + +// ----------------------------------------------------------------------------- +// SetCallInfo test function +// ----------------------------------------------------------------------------- +// +void UT_CMusFactorySettings::UT_CMusFactorySettings_IsSupportedLL() + { + // call cases + // all call types allowed + TPSCTsyCallType callType = EPSCTsyCallTypeCSVoice; + User::LeaveIfError( CRepository::SetStubGlobal(MusSettingsKeys::KAllowOnlyWithActiveCSCall, + MusSettingsKeys::EAllowedAllCalls) ); + EUNIT_ASSERT( MusFactorySettings::IsSupportedL( callType )); + + // allowed csonly and call type is voip + callType = EPSCTsyCallTypeVoIP; + User::LeaveIfError( CRepository::SetStubGlobal(MusSettingsKeys::KAllowOnlyWithActiveCSCall, + MusSettingsKeys::EAllowedCSOnly) ); + EUNIT_ASSERT( !MusFactorySettings::IsSupportedL( callType )); + + // allowed csonly and call type is cs + callType = EPSCTsyCallTypeCSVoice; + User::LeaveIfError( CRepository::SetStubGlobal(MusSettingsKeys::KAllowOnlyWithActiveCSCall, + MusSettingsKeys::EAllowedCSOnly) ); + EUNIT_ASSERT( MusFactorySettings::IsSupportedL( callType )); + + // allowed csonly and call type is EPSCTsyCallTypeNone + callType = EPSCTsyCallTypeNone; + User::LeaveIfError( CRepository::SetStubGlobal(MusSettingsKeys::KAllowOnlyWithActiveCSCall, + MusSettingsKeys::EAllowedCSOnly) ); + EUNIT_ASSERT( !MusFactorySettings::IsSupportedL( callType )); + + // network cases + // all bearer types allowed + RMobilePhone::TMobilePhoneNetworkMode networkType = RMobilePhone::ENetworkModeGsm; + User::LeaveIfError( CRepository::SetStubGlobal(MusSettingsKeys::KAllowOnlyIn3GNetwork, + MusSettingsKeys::EAllowedAllBearers) ); + EUNIT_ASSERT( MusFactorySettings::IsSupportedL( networkType )); + + // 3g only and network type is gsm + networkType = RMobilePhone::ENetworkModeGsm; + User::LeaveIfError( CRepository::SetStubGlobal(MusSettingsKeys::KAllowOnlyIn3GNetwork, + MusSettingsKeys::EAllowed3GOnly) ); + EUNIT_ASSERT( !MusFactorySettings::IsSupportedL( networkType )); + + // 3g only and network type is 3g + networkType = RMobilePhone::ENetworkModeWcdma; + User::LeaveIfError( CRepository::SetStubGlobal(MusSettingsKeys::KAllowOnlyIn3GNetwork, + MusSettingsKeys::EAllowed3GOnly) ); + EUNIT_ASSERT( MusFactorySettings::IsSupportedL( networkType )); + + // if allowed3gonly setting cenrep key not found + // then function should not leave and should behave like in default + // case ie all bearer supported. so it should return ETrue + networkType = RMobilePhone::ENetworkModeGsm; + User::LeaveIfError( CRepository::SetStubGlobal(MusSettingsKeys::KAllowOnlyIn3GNetwork, + MusSettingsKeys::EAllowed3GOnly) ); + CRepository::iForceFailWithCode = KErrNotFound; + TBool supported = EFalse; + EUNIT_ASSERT_NO_LEAVE( supported = MusFactorySettings::IsSupportedL( networkType )) + EUNIT_ASSERT( supported ); + } + +// TEST TABLE + +EUNIT_BEGIN_TEST_TABLE( + UT_CMusFactorySettings, + "UT_CMusFactorySettings", + "UNIT" ) + +EUNIT_TEST( + "IsSupportedL - test", + "CMusFactorySettings", + "IsSupportedL", + "FUNCTIONALITY", + SetupL, UT_CMusFactorySettings_IsSupportedLL, Teardown) + +EUNIT_END_TEST_TABLE + +// END OF FILE + + diff -r 33a5d2bbf6fc -r 73a1feb507fb mmshplugins/mmshaoplugin/tsrc/ut_aoplugin/src/ut_muspropertymonitor.cpp --- a/mmshplugins/mmshaoplugin/tsrc/ut_aoplugin/src/ut_muspropertymonitor.cpp Thu Aug 19 09:51:39 2010 +0300 +++ b/mmshplugins/mmshaoplugin/tsrc/ut_aoplugin/src/ut_muspropertymonitor.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -92,8 +92,9 @@ // void UT_CMusPropertyMonitor::SetupL() { - iMusPropertyMonitor = CMusPropertyMonitor::NewL(); + iMusPropertyMonitor = CMusPropertyMonitor::NewL(*this); iMusPropertyMonitor->iPropertyEvent.iPValue = NMusSessionInformationApi::ENoCall; + iMusCallStateObserverInovked = EFalse; } @@ -108,10 +109,6 @@ } - - - - // TEST CASES // ----------------------------------------------------------------------------- @@ -121,43 +118,11 @@ void UT_CMusPropertyMonitor::UT_CMusPropertyMonitor_RunLL() { EUNIT_ASSERT( iMusPropertyMonitor); - EUNIT_ASSERT( !iMusPropertyMonitor->iManager ); - + EUNIT_ASSERT( !iMusCallStateObserverInovked ); iMusPropertyMonitor->iPropertyEvent.iPValue = NMusSessionInformationApi::ENoCall; iMusPropertyMonitor->Cancel(); iMusPropertyMonitor->RunL(); - EUNIT_ASSERT( !iMusPropertyMonitor->iManager ); - - iMusPropertyMonitor->iPropertyEvent.iPValue = NMusSessionInformationApi::ECallConnected; - iMusPropertyMonitor->Cancel(); - iMusPropertyMonitor->RunL(); - EUNIT_ASSERT( iMusPropertyMonitor->iManager ); - - iMusPropertyMonitor->iPropertyEvent.iPValue = NMusSessionInformationApi::EConferenceTerminated; - iMusPropertyMonitor->Cancel(); - iMusPropertyMonitor->RunL(); - EUNIT_ASSERT( iMusPropertyMonitor->iManager ); - - iMusPropertyMonitor->iPropertyEvent.iPValue = NMusSessionInformationApi::ECallHold; - iMusPropertyMonitor->Cancel(); - iMusPropertyMonitor->RunL(); - EUNIT_ASSERT( iMusPropertyMonitor->iManager ); - - iMusPropertyMonitor->iPropertyEvent.iPValue = NMusSessionInformationApi::EConferenceCall; - iMusPropertyMonitor->Cancel(); - iMusPropertyMonitor->RunL(); - EUNIT_ASSERT( iMusPropertyMonitor->iManager ); - - iMusPropertyMonitor->iPropertyEvent.iPValue = NMusSessionInformationApi::ENoCall; - iMusPropertyMonitor->Cancel(); - iMusPropertyMonitor->RunL(); - EUNIT_ASSERT( !iMusPropertyMonitor->iManager ); - - iMusPropertyMonitor->iPropertyEvent.iPValue = 555; - iMusPropertyMonitor->Cancel(); - iMusPropertyMonitor->RunL(); - EUNIT_ASSERT( !iMusPropertyMonitor->iManager ); - + EUNIT_ASSERT( iMusCallStateObserverInovked ); } @@ -181,14 +146,70 @@ // void UT_CMusPropertyMonitor::UT_CMusPropertyMonitor_RunErrorL() { + EUNIT_ASSERT( !iMusCallStateObserverInovked ); EUNIT_ASSERT( iMusPropertyMonitor ); + TInt CallState; TInt error = KErrNotFound; - iMusPropertyMonitor->RunError(error); + + // Call is Established: + User::LeaveIfError( RProperty::Set( NMusSessionInformationApi::KCategoryUid, + NMusSessionInformationApi::KMusCallEvent, + NMusSessionInformationApi::ECallConnected ) ); + + // Test1: Invoking Error Situation, Ensure Calll is disconected. + User::LeaveIfError( iMusPropertyMonitor->RunError(error)); + User::LeaveIfError( RProperty::Get( NMusSessionInformationApi::KCategoryUid, + NMusSessionInformationApi::KMusCallEvent, + CallState ) ); + EUNIT_ASSERT( CallState == NMusSessionInformationApi::ENoCall ); + EUNIT_ASSERT( iMusCallStateObserverInovked ); } +// ----------------------------------------------------------------------------- +// UT_CMusPropertyMonitor::UT_CMusPropertyMonitor_IsCallConnected() +// Checks from the P/S keys if the Call is connected. +// ----------------------------------------------------------------------------- +// +void UT_CMusPropertyMonitor::UT_CMusPropertyMonitor_IsCallConnected() + { + // Test1: Call Not Connected: + TBool callConnected = EFalse; + User::LeaveIfError( RProperty::Set( NMusSessionInformationApi::KCategoryUid, + NMusSessionInformationApi::KMusCallEvent, + NMusSessionInformationApi::ENoCall ) ); + + callConnected = iMusPropertyMonitor->IsCallConnected(); + EUNIT_ASSERT( callConnected == EFalse ); + + // Test2: Call Connected: + User::LeaveIfError( RProperty::Set( NMusSessionInformationApi::KCategoryUid, + NMusSessionInformationApi::KMusCallEvent, + NMusSessionInformationApi::ECallConnected ) ); - + callConnected = iMusPropertyMonitor->IsCallConnected(); + EUNIT_ASSERT( callConnected == ETrue ); + + + // Test3: Hold and Conference are concidered as call connected + User::LeaveIfError( RProperty::Set( NMusSessionInformationApi::KCategoryUid, + NMusSessionInformationApi::KMusCallEvent, + NMusSessionInformationApi::ECallHold ) ); + + callConnected = iMusPropertyMonitor->IsCallConnected(); + EUNIT_ASSERT( callConnected == ETrue ); + } + + +// ----------------------------------------------------------------------------- +// MusCallStateChanged from the MusCallStateObserver +// ----------------------------------------------------------------------------- +// +void UT_CMusPropertyMonitor::MusCallStateChanged() + { + iMusCallStateObserverInovked = ETrue; + } + // TEST TABLE @@ -219,6 +240,13 @@ "FUNCTIONALITY", SetupL, UT_CMusPropertyMonitor_RunErrorL, Teardown) +EUNIT_TEST( + "IsCallConnected - test", + "CMusCallStatusMonitor", + "IsCallConnected", + "FUNCTIONALITY", + SetupL, UT_CMusPropertyMonitor_IsCallConnected, Teardown) + EUNIT_END_TEST_TABLE // END OF FILE diff -r 33a5d2bbf6fc -r 73a1feb507fb mmshplugins/mmshaoplugin/tsrc/ut_aoplugin/src/ut_mustsypropertymonitor.cpp --- a/mmshplugins/mmshaoplugin/tsrc/ut_aoplugin/src/ut_mustsypropertymonitor.cpp Thu Aug 19 09:51:39 2010 +0300 +++ b/mmshplugins/mmshaoplugin/tsrc/ut_aoplugin/src/ut_mustsypropertymonitor.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -19,17 +19,27 @@ // INTERNAL INCLUDES #include "etelmm.h" #include "e32property.h" +#include "centralrepository.h" #include "ut_mustsypropertymonitor.h" #include "mustsypropertymonitor.h" -#include "mussettings.h" - +#include "muscallmonitor.h" +#include "musvoipcallmonitor.h" +#include "muscallconferencemonitor.h" // SYSTEM INCLUDES #include #include +#include + _LIT(KTelNo,"1234"); +_LIT( KTestProvideName, "VoIP" ); +_LIT( KDefaultSipUri, "sip:default@uri" ); +TName cs_call_1(_L("cs_call_1")); +TName cs_call_2(_L("cs_call_2")); +TName voip_call_1(_L("voip_call_1")); +TName voip_call_2(_L("voip_call_2")); // ----------------------------------------------------------------------------- // @@ -93,34 +103,13 @@ // void UT_CMusTsyPropertyMonitor::SetupL() { + iMusCentralRepository = CRepository::NewL( MusSettingsKeys::KRepositoryUid ); RProperty::Set( NMusSessionInformationApi::KCategoryUid, NMusSessionInformationApi::KMusCallEvent, 0 ); - MultimediaSharingSettings::SetPropertyValueL( - MusSettingsKeys::KPrivacyExchange, - MusSettingsKeys::EPrivacy ); - iMusTsyPropertyMonitor = CMusTsyPropertyMonitor::NewL( iPhone ); + iMusTsyPropertyMonitor = CMusTsyPropertyMonitor::NewL( iPhone, *this ); iMusTsyPropertyMonitor->iPropertyEvent.iPValue = EPSCTsyCallStateUninitialized; - - } - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void UT_CMusTsyPropertyMonitor::Setup2L() - { - RProperty::Set( NMusSessionInformationApi::KCategoryUid, - NMusSessionInformationApi::KMusCallEvent, - 0 ); - MultimediaSharingSettings::SetPropertyValueL( - MusSettingsKeys::KPrivacyExchange, - MusSettingsKeys::ENoPrivacy ); - - iMusTsyPropertyMonitor = CMusTsyPropertyMonitor::NewL( iPhone ); - iMusTsyPropertyMonitor->iPropertyEvent.iPValue = EPSCTsyCallStateUninitialized; - } @@ -130,6 +119,8 @@ // void UT_CMusTsyPropertyMonitor::Teardown() { + delete iMusCentralRepository; + iMusCentralRepository = NULL; delete iMusTsyPropertyMonitor; PropertyHelper::Close(); iPhone.Close(); @@ -144,30 +135,23 @@ // // ----------------------------------------------------------------------------- // -void UT_CMusTsyPropertyMonitor::UT_CMusTsyPropertyMonitor_NewLL() - { - EUNIT_ASSERT( iMusTsyPropertyMonitor); - EUNIT_ASSERT( MultimediaSharingSettings::PrivacySetting() );//feature is on by default - EUNIT_ASSERT( iMusTsyPropertyMonitor->iClirMonitor ); - - MultimediaSharingSettings::SetPropertyValueL( MusSettingsKeys::KPrivacyExchange, - MusSettingsKeys::ENoPrivacy ); - delete iMusTsyPropertyMonitor; - iMusTsyPropertyMonitor = NULL; - - iMusTsyPropertyMonitor = CMusTsyPropertyMonitor::NewL( iPhone ); - EUNIT_ASSERT( !MultimediaSharingSettings::PrivacySetting() );//feature is on by default - EUNIT_ASSERT( !iMusTsyPropertyMonitor->iClirMonitor ); - - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// void UT_CMusTsyPropertyMonitor::UT_CMusTsyPropertyMonitor_RunLL() { + + // Set intial call type too unintialiazed. + if ( RProperty::Set( KPSUidCtsyCallInformation,KCTsyCallType, + EPSCTsyCallTypeUninitialized )) + { + User::Leave( KErrNoMemory ); + } + // Set intial call count + if ( RProperty::Set( NMusSessionInformationApi::KCategoryUid, + NMusSessionInformationApi::KMusCallCount, + 0 ) != KErrNone ) + { + User::Leave( KErrNoMemory ); + } + EUNIT_ASSERT( iMusTsyPropertyMonitor); TInt val = KErrNone; @@ -225,13 +209,12 @@ iMusTsyPropertyMonitor->iPropertyEvent.iPValue = EPSCTsyCallStateHold; iMusTsyPropertyMonitor->SetStateL( NMusSessionInformationApi::ENoCall ); - if ( RProperty::Set( NMusSessionInformationApi::KCategoryUid, - NMusSessionInformationApi::KMusCallCount, - 1 ) != KErrNone ) - { - User::Leave( KErrNoMemory ); - } - + if ( RProperty::Set( NMusSessionInformationApi::KCategoryUid, + NMusSessionInformationApi::KMusCallCount, + 1 ) != KErrNone ) + { + User::Leave( KErrNoMemory ); + } //simulate multicall scenario TName callName(_L("Voice1")); iMusTsyPropertyMonitor->AddCallMonitorL( callName ); @@ -306,65 +289,155 @@ // // ----------------------------------------------------------------------------- // -void UT_CMusTsyPropertyMonitor::UT_CMusTsyPropertyMonitor_MonitorCallLL() +void UT_CMusTsyPropertyMonitor::UT_CMusTsyPropertyMonitor_MonitorCSCallLL() { + if ( RProperty::Set( NMusSessionInformationApi::KCategoryUid, + NMusSessionInformationApi::KMusCallCount, + 0 ) != KErrNone ) + { + User::Leave( KErrNoMemory ); + } RTelHelper::SetCallStatus( (RMobileCall::TMobileCallStatus)RCall::EStatusIdle ); + EUNIT_ASSERT( iMusTsyPropertyMonitor->iCallMonitorArray.Count() == 0 ); + iMusTsyPropertyMonitor->MonitorCSCallL(); + EUNIT_ASSERT( iMusTsyPropertyMonitor->iCallMonitorArray.Count() == 0 ); + + RTelHelper::SetCallStatus( (RMobileCall::TMobileCallStatus)RCall::EStatusHangingUp ); + iMusTsyPropertyMonitor->MonitorCSCallL(); EUNIT_ASSERT( iMusTsyPropertyMonitor->iCallMonitorArray.Count() == 0 ); - iMusTsyPropertyMonitor->MonitorCallL(); + RTelHelper::SetCallStatus( (RMobileCall::TMobileCallStatus)RCall::EStatusConnected ); + iMusTsyPropertyMonitor->MonitorCSCallL(); + EUNIT_ASSERT( iMusTsyPropertyMonitor->iCallMonitorArray.Count() == 1 ); + + iMusTsyPropertyMonitor->iCallMonitorArray.ResetAndDestroy(); + RTelHelper::SetCallStatus( (RMobileCall::TMobileCallStatus)RCall::EStatusAnswering ); + iMusTsyPropertyMonitor->MonitorCSCallL(); + EUNIT_ASSERT( iMusTsyPropertyMonitor->iCallMonitorArray.Count() == 1 ); + + iMusTsyPropertyMonitor->iCallMonitorArray.ResetAndDestroy(); + RTelHelper::SetCallStatus( (RMobileCall::TMobileCallStatus)RCall::EStatusIdle ); + iMusTsyPropertyMonitor->MonitorCSCallL(); EUNIT_ASSERT( iMusTsyPropertyMonitor->iCallMonitorArray.Count() == 0 ); - RTelHelper::SetCallStatus( (RMobileCall::TMobileCallStatus)RCall::EStatusHangingUp ); - - iMusTsyPropertyMonitor->MonitorCallL(); - EUNIT_ASSERT( iMusTsyPropertyMonitor->iCallMonitorArray.Count() == 0 ); - - RTelHelper::SetCallStatus( (RMobileCall::TMobileCallStatus)RCall::EStatusConnected ); + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_CMusTsyPropertyMonitor::UT_CMusTsyPropertyMonitor_MonitorVoipCallLL() + { + EUNIT_ASSERT( iMusTsyPropertyMonitor->iVoipCallMonitorArray.Count() == 0 ); if ( RProperty::Set( NMusSessionInformationApi::KCategoryUid, NMusSessionInformationApi::KMusCallCount, 0 ) != KErrNone ) { User::Leave( KErrNoMemory ); } - iMusTsyPropertyMonitor->MonitorCallL(); - EUNIT_ASSERT( iMusTsyPropertyMonitor->iCallMonitorArray.Count() == 1 ); + + // State connected + TPSCTsyCallState callState = EPSCTsyCallStateConnected; + iMusTsyPropertyMonitor->MonitorVoipCallL( callState ); + EUNIT_ASSERT( iMusTsyPropertyMonitor->iVoipCallMonitorArray.Count() == 1 ); - RTelHelper::SetCallStatus( (RMobileCall::TMobileCallStatus)RCall::EStatusAnswering ); - //already exist - iMusTsyPropertyMonitor->MonitorCallL(); - EUNIT_ASSERT( iMusTsyPropertyMonitor->iCallMonitorArray.Count() == 1 ); + // State answering + iMusTsyPropertyMonitor->iVoipCallMonitorArray.ResetAndDestroy(); + EUNIT_ASSERT( iMusTsyPropertyMonitor->iVoipCallMonitorArray.Count() == 0 ); + callState = EPSCTsyCallStateAnswering ; + iMusTsyPropertyMonitor->MonitorVoipCallL( callState ); + EUNIT_ASSERT( iMusTsyPropertyMonitor->iVoipCallMonitorArray.Count() == 1 ); + // State disconnecting ( Atleast one previous voip call is present ) + callState = EPSCTsyCallStateDisconnecting; + iMusTsyPropertyMonitor->MonitorVoipCallL( callState ); + EUNIT_ASSERT( iMusTsyPropertyMonitor->iVoipCallMonitorArray.Count() == 0 ); + } - RTelHelper::SetCallStatus( (RMobileCall::TMobileCallStatus)RCall::EStatusUnknown ); - - iMusTsyPropertyMonitor->MonitorCallL(); - EUNIT_ASSERT( iMusTsyPropertyMonitor->iCallMonitorArray.Count() == 0 ); - - RTelHelper::SetCallStatus( (RMobileCall::TMobileCallStatus)RCall::EStatusIdle ); - iMusTsyPropertyMonitor->MonitorCallL(); - - EUNIT_ASSERT( iMusTsyPropertyMonitor->iCallMonitorArray.Count() == 0 ); - } // ----------------------------------------------------------------------------- // // ----------------------------------------------------------------------------- // -void UT_CMusTsyPropertyMonitor::UT_CMusTsyPropertyMonitor_MonitorCallL_2L() +void UT_CMusTsyPropertyMonitor::UT_CMusTsyPropertyMonitor_MonitorCallLL() { - EUNIT_ASSERT( iMusTsyPropertyMonitor->iCallMonitorArray.Count() == 0 ); - EUNIT_ASSERT( !iMusTsyPropertyMonitor->iClirMonitor ); - - RTelHelper::SetCallStatus( (RMobileCall::TMobileCallStatus)RCall::EStatusConnected ); + TInt tmp = 0; if ( RProperty::Set( NMusSessionInformationApi::KCategoryUid, - NMusSessionInformationApi::KMusCallCount, - 0 ) != KErrNone ) + NMusSessionInformationApi::KMusCallCount, + 0 ) != KErrNone ) + { + User::Leave( KErrNoMemory ); + } + iMusTsyPropertyMonitor->iCallMonitorArray.ResetAndDestroy(); + iMusTsyPropertyMonitor->iVoipCallMonitorArray.ResetAndDestroy(); + // Test : Cs call and call state is connected + TPSCTsyCallState callState = EPSCTsyCallStateConnected; + RTelHelper::SetCallStatus( (RMobileCall::TMobileCallStatus)RCall::EStatusConnected ); + TPSCTsyCallType callType = EPSCTsyCallTypeCSVoice; + iMusTsyPropertyMonitor->MonitorCallL(callState,callType); + EUNIT_ASSERT( iMusTsyPropertyMonitor->iCallMonitorArray.Count() == 1 ); + EUNIT_ASSERT( iMusTsyPropertyMonitor->iVoipCallMonitorArray.Count() == 0 ); + RProperty::Get( NMusSessionInformationApi::KCategoryUid, + NMusSessionInformationApi::KMusCallEvent, + tmp ); + EUNIT_ASSERT( tmp==NMusSessionInformationApi::ECallConnected); + + // Test : unknown call type + iMusTsyPropertyMonitor->iCallMonitorArray.ResetAndDestroy(); + callType = EPSCTsyCallTypeNone; + iMusTsyPropertyMonitor->MonitorCallL(callState,callType); + EUNIT_ASSERT( iMusTsyPropertyMonitor->iCallMonitorArray.Count() == 0 ); + EUNIT_ASSERT( iMusTsyPropertyMonitor->iVoipCallMonitorArray.Count() == 0 ); + RProperty::Get( NMusSessionInformationApi::KCategoryUid, + NMusSessionInformationApi::KMusCallEvent, + tmp ); + EUNIT_ASSERT( tmp==NMusSessionInformationApi::ENoCall); + + // Test : Voip call and call state is connected and factory settings not found + // if key not found then it should behave default = AllowedAllCalls. + callState = EPSCTsyCallStateConnected; + callType = EPSCTsyCallTypeVoIP; + iMusTsyPropertyMonitor->MonitorCallL(callState,callType); + EUNIT_ASSERT( iMusTsyPropertyMonitor->iCallMonitorArray.Count() == 0 ); + EUNIT_ASSERT( iMusTsyPropertyMonitor->iVoipCallMonitorArray.Count() == 1 ); + RProperty::Get( NMusSessionInformationApi::KCategoryUid, + NMusSessionInformationApi::KMusCallEvent, + tmp ); + EUNIT_ASSERT( tmp==NMusSessionInformationApi::ECallConnected); + + + // Test : Voip call and call state is connected and factory settings set to + // all call supported. + iMusTsyPropertyMonitor->iVoipCallMonitorArray.ResetAndDestroy(); + iMusCentralRepository->Set(MusSettingsKeys::KAllowOnlyWithActiveCSCall, + MusSettingsKeys::EAllowedAllCalls); + callState = EPSCTsyCallStateConnected; + callType = EPSCTsyCallTypeVoIP; + iMusTsyPropertyMonitor->MonitorCallL(callState,callType); + EUNIT_ASSERT( iMusTsyPropertyMonitor->iCallMonitorArray.Count() == 0 ); + EUNIT_ASSERT( iMusTsyPropertyMonitor->iVoipCallMonitorArray.Count() == 1 ); + RProperty::Get( NMusSessionInformationApi::KCategoryUid, + NMusSessionInformationApi::KMusCallEvent, + tmp ); + EUNIT_ASSERT( tmp==NMusSessionInformationApi::ECallConnected); + + // Test : Voip call and call state is connected but factory settings are cs only + iMusTsyPropertyMonitor->iVoipCallMonitorArray.ResetAndDestroy(); + iMusCentralRepository->Set(MusSettingsKeys::KAllowOnlyWithActiveCSCall,MusSettingsKeys::EAllowedCSOnly); + callState = EPSCTsyCallStateConnected; + callType = EPSCTsyCallTypeVoIP; + iMusTsyPropertyMonitor->MonitorCallL(callState,callType); + EUNIT_ASSERT( iMusTsyPropertyMonitor->iCallMonitorArray.Count() == 0 ); + if ( iMusTsyPropertyMonitor->iVoipCallMonitorArray.Count() != 0 ) { - User::Leave( KErrNoMemory ); + User::Leave( KErrNoMemory ); // Call was not removed because of memory running out was "silenty" handled. } - iMusTsyPropertyMonitor->MonitorCallL(); - EUNIT_ASSERT( iMusTsyPropertyMonitor->iCallMonitorArray.Count() == 1 ); - + EUNIT_ASSERT( iMusTsyPropertyMonitor->iVoipCallMonitorArray.Count() == 0 ); + RProperty::Get( NMusSessionInformationApi::KCategoryUid, + NMusSessionInformationApi::KMusCallEvent, + tmp ); + EUNIT_ASSERT( tmp==NMusSessionInformationApi::ENoCall); } // ----------------------------------------------------------------------------- @@ -387,9 +460,191 @@ iMusTsyPropertyMonitor->RemoveUnUsedCallMonitors(); EUNIT_ASSERT( iMusTsyPropertyMonitor->iCallMonitorArray.Count()==0 ); } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_CMusTsyPropertyMonitor::UT_CMusTsyPropertyMonitor_CheckCallCriteriaLL() + { + if ( RProperty::Set( NMusSessionInformationApi::KCategoryUid, + NMusSessionInformationApi::KMusCallCount, + 0 ) != KErrNone ) + { + User::Leave( KErrNoMemory ); + } + TInt tmp = 0; + iMusTsyPropertyMonitor->iCallMonitorArray.ResetAndDestroy(); + iMusTsyPropertyMonitor->iVoipCallMonitorArray.ResetAndDestroy(); + + User::LeaveIfError( RProperty::Set( KPSUidTelRemotePartyInformation, + KTelCLINumber, + _L( "sip:somebody@somewhere" ) ) ); + // Test : no cs call , one voip call + iMusTsyPropertyMonitor->AddVoipCallMonitorL( voip_call_1 ); + iMusTsyPropertyMonitor->CheckCallCriteriaL(); + RProperty::Get( NMusSessionInformationApi::KCategoryUid, + NMusSessionInformationApi::KMusCallEvent, + tmp ); + EUNIT_ASSERT( tmp==NMusSessionInformationApi::ECallConnected); + // Test : one cs call , multiple voip calls + iMusTsyPropertyMonitor->iCallMonitorArray.ResetAndDestroy(); + iMusTsyPropertyMonitor->iVoipCallMonitorArray.ResetAndDestroy(); + iMusTsyPropertyMonitor->AddCallMonitorL( cs_call_1 ); + iMusTsyPropertyMonitor->AddVoipCallMonitorL( voip_call_1 ); + iMusTsyPropertyMonitor->AddVoipCallMonitorL( voip_call_2 ); + iMusTsyPropertyMonitor->CheckCallCriteriaL(); + RProperty::Get( NMusSessionInformationApi::KCategoryUid, + NMusSessionInformationApi::KMusCallEvent, + tmp ); + EUNIT_ASSERT( tmp==NMusSessionInformationApi::ECallHold); + // Test: multiple cs call, one voip call + iMusTsyPropertyMonitor->iCallMonitorArray.ResetAndDestroy(); + iMusTsyPropertyMonitor->iVoipCallMonitorArray.ResetAndDestroy(); + iMusTsyPropertyMonitor->AddCallMonitorL( cs_call_1 ); + iMusTsyPropertyMonitor->AddCallMonitorL( cs_call_2 ); + iMusTsyPropertyMonitor->AddVoipCallMonitorL( voip_call_1 ); + iMusTsyPropertyMonitor->CheckCallCriteriaL(); + RProperty::Get( NMusSessionInformationApi::KCategoryUid, + NMusSessionInformationApi::KMusCallEvent, + tmp ); + EUNIT_ASSERT( tmp==NMusSessionInformationApi::ECallHold); + + // Test : multiple cs call , multiple voip calls + iMusTsyPropertyMonitor->iCallMonitorArray.ResetAndDestroy(); + iMusTsyPropertyMonitor->iVoipCallMonitorArray.ResetAndDestroy(); + iMusTsyPropertyMonitor->AddCallMonitorL( cs_call_1 ); + iMusTsyPropertyMonitor->AddCallMonitorL( cs_call_2 ); + iMusTsyPropertyMonitor->AddVoipCallMonitorL( voip_call_1 ); + iMusTsyPropertyMonitor->AddVoipCallMonitorL( voip_call_2 ); + iMusTsyPropertyMonitor->CheckCallCriteriaL(); + RProperty::Get( NMusSessionInformationApi::KCategoryUid, + NMusSessionInformationApi::KMusCallEvent, + tmp ); + EUNIT_ASSERT( tmp==NMusSessionInformationApi::ECallHold); + // Test : one cs call , one voip call + iMusTsyPropertyMonitor->iCallMonitorArray.ResetAndDestroy(); + iMusTsyPropertyMonitor->iVoipCallMonitorArray.ResetAndDestroy(); + iMusTsyPropertyMonitor->AddCallMonitorL( cs_call_1 ); + iMusTsyPropertyMonitor->AddVoipCallMonitorL( voip_call_1 ); + iMusTsyPropertyMonitor->CheckCallCriteriaL(); + RProperty::Get( NMusSessionInformationApi::KCategoryUid, + NMusSessionInformationApi::KMusCallEvent, + tmp ); + EUNIT_ASSERT( tmp==NMusSessionInformationApi::ECallHold); + // Test: one cs call , no voip call + iMusTsyPropertyMonitor->iCallMonitorArray.ResetAndDestroy(); + iMusTsyPropertyMonitor->iVoipCallMonitorArray.ResetAndDestroy(); + RTelHelper::SetCallStatus( RMobileCall::EStatusConnected ); + iMusTsyPropertyMonitor->AddCallMonitorL( cs_call_1 ); + iMusTsyPropertyMonitor->CheckCallCriteriaL(); + RProperty::Get( NMusSessionInformationApi::KCategoryUid, + NMusSessionInformationApi::KMusCallEvent, + tmp ); + EUNIT_ASSERT( tmp==NMusSessionInformationApi::ECallConnected); + } + +// ----------------------------------------------------------------------------- +// UT_CMusTsyPropertyMonitor::UT_CMusTsyPropertyMonitor_IsDataReadyLL() +// Test to query from corresponding monitors if they are ready. +// ----------------------------------------------------------------------------- +// + + +void UT_CMusTsyPropertyMonitor::UT_CMusTsyPropertyMonitor_IsDataReadyLL() + { + TBool dataReady = EFalse; + + // Test-1: CS Call Ready: + iMusTsyPropertyMonitor->iCallMonitorArray.ResetAndDestroy(); + iMusTsyPropertyMonitor->iVoipCallMonitorArray.ResetAndDestroy(); + + if ( RProperty::Set( NMusSessionInformationApi::KCategoryUid, + NMusSessionInformationApi::KMusCallCount, + 0 ) != KErrNone ) + { + User::Leave( KErrNoMemory ); + } + + User::LeaveIfError( RProperty::Set( NMusSessionInformationApi::KCategoryUid, + NMusSessionInformationApi::KMusTelNumber, + KTelNo )); + + User::LeaveIfError( RProperty::Set( NMusSessionInformationApi::KCategoryUid, + NMusSessionInformationApi::KMusCallDirection, + NMusSessionInformationApi::ECallOrginated )); + + iMusTsyPropertyMonitor->AddCallMonitorL( cs_call_1 ); + dataReady = iMusTsyPropertyMonitor->IsDataReadyL(); + EUNIT_ASSERT_EQUALS( dataReady, ETrue ) + + // Test-2: CS Call NotReady: + User::LeaveIfError( RProperty::Set( NMusSessionInformationApi::KCategoryUid, + NMusSessionInformationApi::KMusTelNumber, + KNullDesC )); + + dataReady = iMusTsyPropertyMonitor->IsDataReadyL(); + EUNIT_ASSERT_EQUALS( dataReady, EFalse ) + + // Test-3 VoIP Call Ready + iMusTsyPropertyMonitor->iCallMonitorArray.ResetAndDestroy(); + iMusTsyPropertyMonitor->AddVoipCallMonitorL( voip_call_1 ); + + User::LeaveIfError( RProperty::Set( + NMusSessionInformationApi::KCategoryUid, + NMusSessionInformationApi::KMusTelNumber, + KDefaultSipUri )); + + User::LeaveIfError(RProperty::Set( + NMusSessionInformationApi::KCategoryUid, + NMusSessionInformationApi::KMUSCallProvider, + KTestProvideName )); + + dataReady = iMusTsyPropertyMonitor->IsDataReadyL(); + EUNIT_ASSERT_EQUALS( dataReady, ETrue ) + + + // Test-4 VoIP Call Not Ready + User::LeaveIfError( RProperty::Set( + NMusSessionInformationApi::KCategoryUid, + NMusSessionInformationApi::KMUSCallProvider, + KNullDesC )); + + dataReady = iMusTsyPropertyMonitor->IsDataReadyL(); + + EUNIT_ASSERT_EQUALS( dataReady, EFalse ) + + // Test-5: Conference Case + iMusTsyPropertyMonitor->iCallMonitorArray.ResetAndDestroy(); + iMusTsyPropertyMonitor->iVoipCallMonitorArray.ResetAndDestroy(); + + iMusTsyPropertyMonitor->AddVoipCallMonitorL( voip_call_1 ); + iMusTsyPropertyMonitor->AddVoipCallMonitorL( voip_call_2 ); + + dataReady = iMusTsyPropertyMonitor->IsDataReadyL(); + EUNIT_ASSERT_EQUALS( dataReady, EFalse ) + iMusTsyPropertyMonitor->iVoipCallMonitorArray.ResetAndDestroy(); + + // Test-3 Handling conference case. + iMusTsyPropertyMonitor->iConferenceMonitor->iConfStatus = RMobileConferenceCall::EConferenceActive; + dataReady = iMusTsyPropertyMonitor->IsDataReadyL(); + EUNIT_ASSERT_EQUALS( dataReady, ETrue ) + iMusTsyPropertyMonitor->iConferenceMonitor->iConfStatus = RMobileConferenceCall::EConferenceIdle; + } + + +// ----------------------------------------------------------------------------- +// MusCallStateChanged from the MusCallStateObserver +// ----------------------------------------------------------------------------- +// +void UT_CMusTsyPropertyMonitor::MusCallStateChanged() + { + // NOP + } + // TEST TABLE EUNIT_BEGIN_TEST_TABLE( @@ -397,14 +652,6 @@ "UT_CMusTsyPropertyMonitor", "UNIT" ) - -EUNIT_TEST( - "NewL - test", - "CMusTsyPropertyMonitor", - "NewL", - "FUNCTIONALITY", - SetupL, UT_CMusTsyPropertyMonitor_NewLL, Teardown) - EUNIT_TEST( "RunL - test", "CMusTsyPropertyMonitor", @@ -427,7 +674,7 @@ SetupL, UT_CMusTsyPropertyMonitor_RunErrorL, Teardown) EUNIT_TEST( - "RemoveUnUsedCallMonitorsL", + "UT_CMusTsyPropertyMonitor_RemoveUnUsedCallMonitorsL", "CMusCallStatusMonitor", "RemoveUnUsedCallMonitors", "FUNCTIONALITY", @@ -453,14 +700,35 @@ "MonitorCallL", "FUNCTIONALITY", SetupL, UT_CMusTsyPropertyMonitor_MonitorCallLL, Teardown) + +EUNIT_TEST( + "MonitorCsCallL - test", + "CMusTsyPropertyMonitor", + "MonitorCsCallL", + "FUNCTIONALITY", + SetupL, UT_CMusTsyPropertyMonitor_MonitorCSCallLL, Teardown) + +EUNIT_TEST( + "MonitorVoipCallL - test", + "CMusTsyPropertyMonitor", + "MonitorVoipCallL", + "FUNCTIONALITY", + SetupL, UT_CMusTsyPropertyMonitor_MonitorVoipCallLL, Teardown) EUNIT_TEST( - "MonitorCallL no clir - test", + "CheckCallCriteriaL - test", "CMusTsyPropertyMonitor", - "MonitorCallL", + "CheckCallCriteriaL", "FUNCTIONALITY", - Setup2L, UT_CMusTsyPropertyMonitor_MonitorCallL_2L, Teardown) - + SetupL, UT_CMusTsyPropertyMonitor_CheckCallCriteriaLL, Teardown) + +EUNIT_TEST( + "IsDataReadyL - test", + "CMusTsyPropertyMonitor", + "IsDataReadyL", + "FUNCTIONALITY", + SetupL, UT_CMusTsyPropertyMonitor_IsDataReadyLL, Teardown) + EUNIT_END_TEST_TABLE // END OF FILE diff -r 33a5d2bbf6fc -r 73a1feb507fb mmshplugins/mmshsettingsuiplugin/data/mussettingsuirsc.rss --- a/mmshplugins/mmshsettingsuiplugin/data/mussettingsuirsc.rss Thu Aug 19 09:51:39 2010 +0300 +++ b/mmshplugins/mmshsettingsuiplugin/data/mussettingsuirsc.rss Tue Aug 31 15:12:07 2010 +0300 @@ -12,7 +12,7 @@ * Contributors: * * Description: Resource file for MUSSettingsPlugin. -* Version : %version: be1sipx1#19 % << Don't touch! Updated by Synergy at check-out. +* Version : %version: 19 % << Don't touch! Updated by Synergy at check-out. * */ @@ -229,6 +229,20 @@ } // --------------------------------------------------------------------------- +// r_vs_video_saving_setting_page +// Video saving setting page. +// --------------------------------------------------------------------------- +// +RESOURCE AVKON_SETTING_PAGE r_vs_video_saving_setting_page + { + number = EAknSettingPageNoOrdinalDisplayed; + label = qtn_msh_set_saving_title; + softkey_resource = R_AVKON_SOFTKEYS_OK_CANCEL__OK; + type = EAknSetListBox; + editor_resource_id = r_setting_listbox; + } + +// --------------------------------------------------------------------------- // r_vs_recorded_video_saving_setting_page // Recorded video saving setting page. // --------------------------------------------------------------------------- @@ -285,7 +299,7 @@ { LBUF { - txt = qtn_msh_set_activation_on; + txt = qtn_msh_set_activation_always; }, LBUF { @@ -294,7 +308,6 @@ }; } - // --------------------------------------------------------------------------- // r_activation_setting_page_lbx // Activation setting page's listbox. @@ -415,11 +428,11 @@ MENU_TITLE { menu_pane = r_vs_menu_item_exit; - }/*, + }, MENU_TITLE { menu_pane = r_vs_menu_item_change; - }*/ + } }; } @@ -448,7 +461,7 @@ } }; } -/* + // --------------------------------------------------------------------------- // r_vs_settings_menu_item_change // Options menu item 'Change'. @@ -465,7 +478,7 @@ } }; } -*/ + // --------------------------------------------------------------------------- // r_setting_listbox // Common listbox editor resource for setting pages. diff -r 33a5d2bbf6fc -r 73a1feb507fb mmshplugins/mmshsettingsuiplugin/inc/mmussipprofilehandler.h --- a/mmshplugins/mmshsettingsuiplugin/inc/mmussipprofilehandler.h Thu Aug 19 09:51:39 2010 +0300 +++ b/mmshplugins/mmshsettingsuiplugin/inc/mmussipprofilehandler.h Tue Aug 31 15:12:07 2010 +0300 @@ -13,7 +13,6 @@ * * Description: Mixin-class that provides functionality for manipulating * MuS specific settings. -* Version : %version: 6 % << Don't touch! Updated by Synergy at check-out. * */ @@ -21,15 +20,13 @@ #ifndef M_MMUSSIPPROFILEHANDLER_H #define M_MMUSSIPPROFILEHANDLER_H -#include -#include - -class CSIPProfile; +#include /** * MMusSIPProfileHandler class * Mixin class for SIP profile manipulation. * Handles SIP profile manipulations. +* @since S60 v3.2 */ class MMusSIPProfileHandler { @@ -41,17 +38,17 @@ * default SIP profile. */ virtual TInt DefaultProfileIndex() = 0; - + /** - * Returns a reference to the SIP profile array. + * Returns pointer to the SIP profile array, does not change ownership. * Note that previously returned value goes out of scope after a new * call to ProfileArrayL. So it is not advised to store return value * in long persistent variable, but rather to be used like stack * variables for safety. * - * @return Reference to internally cached SIP profile array. + * @return Pointer to internally cached SIP profile array. */ - virtual RPointerArray& ProfileArrayL() = 0; + virtual CArrayPtr* ProfileArrayL() = 0; /** * Returns the id of the default SIP profile. @@ -59,12 +56,6 @@ * default SIP profile. */ virtual TUint32 DefaultProfileId() = 0; - - /* - * - * - */ - virtual void DisableProfileL() = 0; /** * Returns profile id based on index. diff -r 33a5d2bbf6fc -r 73a1feb507fb mmshplugins/mmshsettingsuiplugin/inc/mussettingscontainer.h --- a/mmshplugins/mmshsettingsuiplugin/inc/mussettingscontainer.h Thu Aug 19 09:51:39 2010 +0300 +++ b/mmshplugins/mmshsettingsuiplugin/inc/mussettingscontainer.h Tue Aug 31 15:12:07 2010 +0300 @@ -185,6 +185,11 @@ MusSettingsKeys::TOperatorVariant iOperatorVariant; /** + * VS activation current value. + */ + MusSettingsKeys::TActivation iVSActication; + + /** * Listbox items. */ CGSListBoxItemTextArray* iListboxItemArray; diff -r 33a5d2bbf6fc -r 73a1feb507fb mmshplugins/mmshsettingsuiplugin/inc/mussettingsmodel.h --- a/mmshplugins/mmshsettingsuiplugin/inc/mussettingsmodel.h Thu Aug 19 09:51:39 2010 +0300 +++ b/mmshplugins/mmshsettingsuiplugin/inc/mussettingsmodel.h Tue Aug 31 15:12:07 2010 +0300 @@ -12,7 +12,6 @@ * Contributors: * * Description: MUSSettingsPlugin model class. -* Version : %version: 11 % << Don't touch! Updated by Synergy at check-out. * */ @@ -21,17 +20,20 @@ #ifndef C_MUSSETTINGSMODEL_H #define C_MUSSETTINGSMODEL_H -#include -#include +#include "mussettings.h" class MMusSIPProfileHandler; class CMusSIPProfileModel; +class MultimediaSharingSettings; + class CAknMemorySelectionDialogMultiDrive; /** * CMusSettingsModel is the model class of GS application. * It provides functions to get and set setting values. + * + * @since S60 v3.2 */ class CMusSettingsModel : public CBase { @@ -50,52 +52,111 @@ ~CMusSettingsModel(); /** + * Returns operator variant mode. + * @return 0: Standard (MusSettingsKeys::EStandard) + * 1: Operator Specific (MusSettingsKeys::EOperatorSpecific) + */ + MusSettingsKeys::TOperatorVariant VSSettingsOperatorVariantL(); + + /** + * Returns VS activation mode. + * @return 0: Always (MusSettingsKeys::EAlwaysActive) + * 1: Automatic (MusSettingsKeys::EActiveInHomeNetworks) + * 2: Off (MusSettingsKeys::ENever) + */ + MusSettingsKeys::TActivation VSSettingsActivationL(); + + /** + * Returns SIP profile mode. + * @return 0: Use default SIP profile. + * 1: Use user selected SIP profile. + */ + TInt VSSettingsProfileL(); + + /** + * Returns video autorecord mode. + * @return 0: on (MusSettingsKeys::EAutoRecordOn) + * 1: off (MusSettingsKeys::EAutoRecordOff) + */ + MusSettingsKeys::TAutoRecord VSSettingsAutoRecordL(); + + /** * Returns recorded video saving mode. * @return 2: phone memory * 4: memory card */ TInt VSSettingsRecordedVideoSavingL(); - + /** - * operator specific variant - * Sets activation item - * @param aActive (enabled/disabled). + * Returns state of note (on/off). This setting is called "Capability + * auditory note" in standard variant and "Alerts" in operator specific + * variant. + * @return 0: enabled (MusSettingsKeys::EAuditoryNotificationOn) + * 1: disabled (MusSettingsKeys::EAuditoryNotificationOff) */ - void SetActivationItem( TBool aActive ); + MusSettingsKeys::TAuditoryNotification VSSettingsNoteL(); + + /** + * Sets packet data VS activation mode. + * @param aActivation Activation mode. + */ + void SetVSSettingsActivationL( + const MusSettingsKeys::TActivation aActivation ); /** - * operator specific variant - * @return activation item + * Sets SIP profile mode. + * @param aProfile Profile id. + */ + void SetVSSettingsProfileL( const TInt aProfile ); + + /** + * Sets video autorecord mode. + * @param aAutoRecord save mode of video. */ - TBool ActivationItem(); - + void SetVSSettingsAutoRecordL( + const MusSettingsKeys::TAutoRecord aAutoRecord ); + + /** + * Sets location of video saving. + * @param aVideoLocation location of video + */ + void SetVSSettingsRecordedVideoSavingL( const TInt aVideoLocation ); + + /** + * Sets mode of note ("Capability auditory note" in standard variant and + * "Alerts" in operator specific variant). + * @param aValue New state for note (enabled/disabled). + */ + void SetVSSettingsNoteL( + const MusSettingsKeys::TAuditoryNotification aValue ); + /** * Returns the array containing the profile names. * NOTE! The ownership of the array is transferred to the caller. * @return Array consisting of the names of the SIP profiles. */ - CDesCArray* ListOfProfileNamesL(); + CDesCArray* ListOfProfileNamesL(); /** * Gets a SIP profile name by ID. * Ownership is transferred to caller. * @return SIP profile name. */ - HBufC* ProfileNameL( TInt aId ); + HBufC* ProfileNameL( TInt aId ); /** * Gets the index of the default SIP profile. * @return KErrNotFound, if one does not exist, otherwise index of the * default SIP profile. */ - TInt DefaultProfileIndex(); + TInt DefaultProfileIndex(); /** * Gets the id of the default SIP profile. * @return KErrNotFound, if one does not exist, otherwise id of the * default SIP profile. */ - TUint32 DefaultProfileId(); + TUint32 DefaultProfileId(); /** * Returns SIP profile index on locally cached array based on id. @@ -118,27 +179,23 @@ */ CAknMemorySelectionDialogMultiDrive* MemorySelectionDialogLC(); - /** - * Initialize SIP profile enabler data. - */ - void InitializeProfileEnablerL(); public: // constants /** * Default SIP profile. */ - static const TInt KVsSipProfileDefault; - + static const TInt KVsSipProfileDefault; + /** * SIP profile select. */ - static const TInt KVsSipProfileSelect; + static const TInt KVsSipProfileSelect; /** * Null selection SIP profile. */ - static const TInt KVsSipProfileSelectNone; + static const TInt KVsSipProfileSelectNone; private: @@ -147,7 +204,7 @@ * @param aHandler Reference to SIP profile manipulator. */ CMusSettingsModel( MMusSIPProfileHandler& aHandler ); - + void ConstructL(); private: // data @@ -156,11 +213,12 @@ * SIP profile handler. */ MMusSIPProfileHandler& iHandler; - + /** - * Operator variant. If SIP profile disabled + * Central repository keys of video sharing. + * Own. */ - TBool iProfileDisabled; + MultimediaSharingSettings* iMSSettingsKeys; }; diff -r 33a5d2bbf6fc -r 73a1feb507fb mmshplugins/mmshsettingsuiplugin/inc/mussettingsplugin.h --- a/mmshplugins/mmshsettingsuiplugin/inc/mussettingsplugin.h Thu Aug 19 09:51:39 2010 +0300 +++ b/mmshplugins/mmshsettingsuiplugin/inc/mussettingsplugin.h Tue Aug 31 15:12:07 2010 +0300 @@ -12,7 +12,6 @@ * Contributors: * * Description: MUSSettingsPlugin implementation. -* Version : %version: 21 % << Don't touch! Updated by Synergy at check-out. * */ @@ -128,7 +127,7 @@ * TGSPluginProviderCategory. */ virtual TInt PluginProviderCategory() const; - + public: // From MEikMenuObserver @@ -142,9 +141,6 @@ CMusSettingsPlugin(); void ConstructL(); - - void OpenResourceFileL(); - void CloseResourceFile(); /** * Hides non-virtual member from base class CGSBaseView. @@ -185,6 +181,16 @@ private: /** + * Shows VS activation Setting dialog. + */ + void ShowVSSettingsActivationSettingDialogL(); + + /** + * Shows Operator specific VS activation Setting dialog. + */ + void ShowOperatorSpecificActivationSettingDialogL(); + + /** * Shows Profile Setting dialog. */ void ShowVSSettingsProfileSettingDialogL(); @@ -232,15 +238,16 @@ protected: // data - HBufC* iCaption; - bool iResourceFileOpen; - /** * Instance of SIP profile handler to manage SIP profiles. * Own. */ CMusSIPProfileModel* iHandler; + /** + * Instance of SIP profile handler to manage SIP profiles. + * Own. + */ /** * Pointer of model class of this application. diff -r 33a5d2bbf6fc -r 73a1feb507fb mmshplugins/mmshsettingsuiplugin/inc/mussipprofilemodel.h --- a/mmshplugins/mmshsettingsuiplugin/inc/mussipprofilemodel.h Thu Aug 19 09:51:39 2010 +0300 +++ b/mmshplugins/mmshsettingsuiplugin/inc/mussipprofilemodel.h Tue Aug 31 15:12:07 2010 +0300 @@ -12,7 +12,6 @@ * Contributors: * * Description: Class implementing SIP profile model. -* Version : %version: 9 % << Don't touch! Updated by Synergy at check-out. * */ @@ -24,21 +23,25 @@ #include "mmussipprofilehandler.h" #include +#include +#include #include -#include -#include + class CSIPManagedProfileRegistry; -class CMusSettingsModel; + /** * CMusSIPProfileModel model class. * Model class implementing SIP profile model. + * + * @since S60 v3.2 */ -class CMusSIPProfileModel : public CBase, - public MSIPProfileRegistryObserver, - public MMusSIPProfileHandler -{ +class CMusSIPProfileModel + :public CBase, + public MSIPProfileRegistryObserver, + public MMusSIPProfileHandler + { public: static CMusSIPProfileModel* NewL(); @@ -54,32 +57,17 @@ * From MMusSIPProfileHandler. * Returns the index of the default SIP profile. * @return KErrNotFound, if one does not exist, otherwise index of the - * default SIP profile. + * default SIP profile. */ - TInt DefaultProfileIndex(); + virtual TInt DefaultProfileIndex(); /** * From MMusSIPProfileHandler. * Returns the id of the default SIP profile. * @return KErrNotFound, if one does not exist, otherwise id of the - * default SIP profile. - */ - TUint32 DefaultProfileId(); - - /* - * Disables MUS profile + * default SIP profile. */ - void DisableProfileL(); - - /* - * Enables MUS profile - */ - void EnableProfileL(); - - /* - * Checks, if MUS profile is enabled - */ - TBool ProfileEnabledL(); + virtual TUint32 DefaultProfileId(); /** * From MMusSIPProfileHandler. @@ -87,7 +75,7 @@ * @param aId Profile id * @return Profile index or KErrNotFound if no matching profile is found. */ - TInt ProfileIndexByIdL( TUint32 aId ); + virtual TInt ProfileIndexByIdL( TUint32 aId ); /** * From MMusSIPProfileHandler. @@ -95,19 +83,19 @@ * @param aIndex Profile index * @return Profile id or KUnknownProfileId if no matching profile is found. */ - TUint32 ProfileIdByIndex( TUint aIndex ); + virtual TUint32 ProfileIdByIndex( TUint aIndex ); /** * From MMusSIPProfileHandler. - * Returns a reference to the SIP profile array. + * Returns pointer to the SIP profile array, does not change ownership. * Note that previously returned value goes out of scope after a new * call to ProfileArrayL. So it is not advised to store return value * in long persistent variable, but rather to be used like stack * variables for safety. * - * @return Reference to internally cached SIP profile array. + * @return Pointer to internally cached SIP profile array. */ - RPointerArray& ProfileArrayL(); + virtual CArrayPtr* ProfileArrayL(); public: // From base class MSIPProfileRegistryObserver. @@ -116,65 +104,68 @@ * SIP profile information event. * @param aProfileId Id of SIP profile in question. * @param aEvent Type of information event. - */ - void ProfileRegistryEventOccurred( + */ + virtual void ProfileRegistryEventOccurred( TUint32 aSIPProfileId, TEvent aEvent ); - /** - * From MSIPProfileRegistryObserver. - * An asynchronous error has occurred related to SIP profile. - * @param aSIPProfileId Id of the failed profile. - * @param aError An error code. - */ - void ProfileRegistryErrorOccurred( - TUint32 aSIPProfileId, - TInt aError ); - - -public: - - /** - * Set CMusSettingsModel to handle ProfileRegistry Event. - * @param aCMusSettingsModel the CMusSettingsModel to handle ProfileRegistry Event - */ - void SetCMusSettingsModel(CMusSettingsModel* aCMusSettingsModel); + /** + * From MSIPProfileRegistryObserver. + * An asynchronous error has occurred related to SIP profile. + * @param aSIPProfileId Id of the failed profile. + * @param aError An error code. + */ + virtual void ProfileRegistryErrorOccurred( + TUint32 aSIPProfileId, + TInt aError ); protected: /** + * Reads the profile array from SIP Profile Client. + */ + void ReadArrayFromEngineL(); + + /** * Sorts internal array of SIP profiles by id. */ void SortProfilesL(); + /** + * Deletes internally cached profiles. + */ + void DeleteProfiles(); + + /** + * Reads profile list from the engine; if reading fails, + * keeps the old list safe. + */ + void ReadProfileListFromEngineSafeL(); private: CMusSIPProfileModel(); void ConstructL(); - + + /** + * For deleting RPointerArray in case of leave. + */ + static void ResetAndDestroy( TAny* aPointerArray ); private: // data /** - * Instance of the SIP profile registry engine for managing SIP profiles. - * Own. - */ + * Instance of the SIP profile registry engine for managing SIP profiles. + * Own. + */ CSIPManagedProfileRegistry* iEngine; /** - * Locally cached array of SIP profiles. - */ - RPointerArray iProfiles; - - /** - * CMusSettingsModel to handle ProfileRegistry - * Event - */ - CMusSettingsModel* iCMusSettingsModel; - - + * Locally cached array of SIP profiles. + * Own. + */ + CArrayPtrFlat* iProfiles; }; diff -r 33a5d2bbf6fc -r 73a1feb507fb mmshplugins/mmshsettingsuiplugin/src/mussettingscontainer.cpp --- a/mmshplugins/mmshsettingsuiplugin/src/mussettingscontainer.cpp Thu Aug 19 09:51:39 2010 +0300 +++ b/mmshplugins/mmshsettingsuiplugin/src/mussettingscontainer.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -12,34 +12,31 @@ * Contributors: * * Description: Container for MUSSettingsPlugin. -* Version : %version: be1sipx1#22 % << Don't touch! Updated by Synergy at check-out. * */ -#include "mussettingscontainer.h" -#include "mussettingsplugin.h" -#include "mussettingsmodel.h" -#include "gslistbox.h" -#include "mussettingsplugin.hrh" -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include +#include "mussettingscontainer.h" +#include "mussettingsplugin.h" +#include "mussettingsmodel.h" +#include "gslistbox.h" +#include "mussettingsplugin.hrh" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include -#ifdef RD_MULTIPLE_DRIVE #include -#endif /** default SIP profile is selected */ const TInt KDefaultSipProfile = 0; @@ -65,7 +62,7 @@ { MUS_LOG( "[MUSSET] -> CMusSettingsContainer::ConstructL()" ) - iOperatorVariant = MultimediaSharingSettings::OperatorVariantSettingL(); + iOperatorVariant = iModel.VSSettingsOperatorVariantL(); iListBox = new( ELeave ) CAknSettingStyleListBox; @@ -86,17 +83,17 @@ { MUS_LOG( "[MUSSET] -> CMusSettingsContainer::~CMusSettingsContainer()" ) delete iActivationItems; - delete iProfileItems; - delete iAutoRecordItems; - delete iNoteItems; - delete iListboxItemArray; + delete iProfileItems; + delete iAutoRecordItems; + delete iListboxItemArray; + delete iNoteItems; MUS_LOG( "[MUSSET] <- CMusSettingsContainer::~CMusSettingsContainer()" ) } -// ----------------------------------------------------------------------------- +// --------------------------------------------------------------------------- // Constructs a listbox from a specified resource id. -// ----------------------------------------------------------------------------- +// --------------------------------------------------------------------------- // void CMusSettingsContainer::ConstructListBoxL( TInt aResLbxId ) { @@ -107,10 +104,17 @@ iListBox->Model()->SetItemTextArray( iListboxItemArray ); iListBox->Model()->SetOwnershipType( ELbmDoesNotOwnItemArray ); - // OCC: removed "Automatic in home network" choice - iActivationItems = - iCoeEnv->ReadDesC16ArrayResourceL( - R_OPERATOR_ACTIVATION_SETTING_PAGE_LBX ); + if ( iOperatorVariant == MusSettingsKeys::EStandard ) + { + iActivationItems = iCoeEnv->ReadDesC16ArrayResourceL( + R_ACTIVATION_SETTING_PAGE_LBX ); + } + else + { + iActivationItems = + iCoeEnv->ReadDesC16ArrayResourceL( + R_OPERATOR_ACTIVATION_SETTING_PAGE_LBX ); + } iAutoRecordItems = iCoeEnv->ReadDesC16ArrayResourceL( R_VS_VIDEO_SAVING_SETTING_PAGE_LBX ); @@ -118,9 +122,17 @@ iProfileItems = iCoeEnv->ReadDesC16ArrayResourceL( R_SIP_PROFILE_SETTING_PAGE_LBX ); - iNoteItems = iCoeEnv->ReadDesC16ArrayResourceL( - R_VS_AUDIO_SETTING_PAGE_LBX ); - + if ( iOperatorVariant == MusSettingsKeys::EStandard ) + { + iNoteItems = iCoeEnv->ReadDesC16ArrayResourceL( + R_VS_AUDIO_SETTING_PAGE_LBX ); + } + else + { + iNoteItems = iCoeEnv->ReadDesC16ArrayResourceL( + R_VS_NOTE_SETTING_PAGE_LBX ); + } + CreateListBoxItemsL(); // Operator variant mode needs some item should not be visible to user. @@ -129,8 +141,7 @@ { // Hide VS Activation Settings. If needed in future it can be made // visible. - // - //HideItemsL( KGSSettIdVSActivation ); + HideItemsL( KGSSettIdVSActivation ); // Hide SIP Profile choosing option.If needed in future it can be made // visible. HideItemsL( KGSSettIdSIPProfile ); @@ -139,9 +150,9 @@ } -// ----------------------------------------------------------------------------- +// --------------------------------------------------------------------------- // Populates listbox items. -// ----------------------------------------------------------------------------- +// --------------------------------------------------------------------------- // void CMusSettingsContainer::CreateListBoxItemsL() { @@ -162,9 +173,9 @@ } -// ----------------------------------------------------------------------------- +// --------------------------------------------------------------------------- // Updates a specified feature (item in listbox). -// ----------------------------------------------------------------------------- +// --------------------------------------------------------------------------- // void CMusSettingsContainer::UpdateListBoxL( TInt aFeatureId ) { @@ -181,19 +192,19 @@ { MakeOperatorActivationItemL(); } - break; + break; case KGSSettIdSIPProfile: MakeSIPProfileItemL(); break; case KGSSettIdAutoRecord: MakeAutoRecordItemL(); - break; + break; case KGSSettIdRecordedVideoSaving: - MakeRecordedVideoSavingItemL(); - break; + MakeRecordedVideoSavingItemL(); + break; case KGSSettIdNote: - MakeNoteItemL(); - break; + MakeNoteItemL(); + break; default: break; } @@ -203,116 +214,109 @@ } -// ----------------------------------------------------------------------------- +// --------------------------------------------------------------------------- // Generic method to add an item to listbox and make it visible. -// ----------------------------------------------------------------------------- +// --------------------------------------------------------------------------- // void CMusSettingsContainer::AddItemL( TInt aId, const TPtrC aText ) - { - MUS_LOG( "[MUSSET] -> CMusSettingsContainer::AddItemL()" ) + { + MUS_LOG( "[MUSSET] -> CMusSettingsContainer::AddItemL()" ) iListboxItemArray->SetDynamicTextL( aId, aText ); iListboxItemArray->SetItemVisibilityL( aId, - CGSListBoxItemTextArray::EVisible ); - MUS_LOG( "[MUSSET] <- CMusSettingsContainer::AddItemL()" ) - } + CGSListBoxItemTextArray::EVisible ); + MUS_LOG( "[MUSSET] <- CMusSettingsContainer::AddItemL()" ) + } -// ----------------------------------------------------------------------------- +// --------------------------------------------------------------------------- // Adds activation setting item to listbox. -// ----------------------------------------------------------------------------- +// --------------------------------------------------------------------------- // void CMusSettingsContainer::MakeActivationItemL() { MUS_LOG( "[MUSSET] -> CMusSettingsContainer::MakeActivationItemL()" ) - MusSettingsKeys::TActivation activation = - MultimediaSharingSettings::ActivationSettingL(); - - if ( activation != MusSettingsKeys::EAlwaysActive ) - { - // We make sure that if someone has written to CenRep value bigger - // than 1 (which after OCC changes means 'Off') we treat it as 'Off'. - activation = MusSettingsKeys::EActiveInHomeNetworks; - } - - AddItemL( KGSSettIdVSActivation, ( *iActivationItems )[ activation ] ); + iVSActication = iModel.VSSettingsActivationL(); + AddItemL( KGSSettIdVSActivation, ( *iActivationItems )[ iVSActication ] ); MUS_LOG( "[MUSSET] <- CMusSettingsContainer::MakeActivationItemL()" ) } -// ----------------------------------------------------------------------------- +// --------------------------------------------------------------------------- // Adds operator specific activation setting item to listbox. -// ----------------------------------------------------------------------------- +// --------------------------------------------------------------------------- // void CMusSettingsContainer::MakeOperatorActivationItemL() { MUS_LOG( "[MUSSET] -> CMusSettingsContainer::MakeOperatorActivationItemL()" ) - - //sync with real value, if op specifig - iModel.InitializeProfileEnablerL(); - - MUS_LOG1( "Activation item=%d (0=VS enabled, 1=VS disabled)", iModel.ActivationItem() ) - AddItemL( KGSSettIdVSActivation, ( *iActivationItems )[ iModel.ActivationItem() ] ); + + iVSActication = iModel.VSSettingsActivationL(); + if ( iVSActication == MusSettingsKeys::ENever ) // ==2 + { // operator specific one is different from usual one + iVSActication = MusSettingsKeys::EActiveInHomeNetworks; //==1 + } + + AddItemL( KGSSettIdVSActivation, ( *iActivationItems )[ iVSActication ] ); MUS_LOG( "[MUSSET] <- CMusSettingsContainer::MakeOperatorActivationItemL()" ) } -// ----------------------------------------------------------------------------- +// --------------------------------------------------------------------------- // Adds SIP profile setting item to settings listbox. Item will contain // indication of [no SIP profile selected], [using default SIP profile] or // [name of SIP profile specified to be used] -// ----------------------------------------------------------------------------- +// --------------------------------------------------------------------------- // void CMusSettingsContainer::MakeSIPProfileItemL() { MUS_LOG( "[MUSSET] -> CMusSettingsContainer::MakeSIPProfileItemL()" ) - TInt profile = MultimediaSharingSettings::SipProfileSettingL(); + TInt profile = iModel.VSSettingsProfileL(); if ( profile != KDefaultSipProfile && profile != KNoSipProfileSelected ) { - // profile id defined, get profile name - HBufC* name = iModel.ProfileNameL( profile ); + // profile id defined, get profile name + HBufC* name = iModel.ProfileNameL( profile ); - if ( name ) - { - CleanupStack::PushL( name ); - AddItemL( KGSSettIdSIPProfile, *name ); - CleanupStack::PopAndDestroy( name ); - } + if ( name ) + { + CleanupStack::PushL( name ); + AddItemL( KGSSettIdSIPProfile, *name ); + CleanupStack::PopAndDestroy( name ); + } else - { - // show profile value not selected - AddItemL( KGSSettIdSIPProfile, - ( *iProfileItems )[ CMusSettingsModel::KVsSipProfileSelectNone ] ); - } - } + { + // show profile value not selected + AddItemL( KGSSettIdSIPProfile, + ( *iProfileItems )[ CMusSettingsModel::KVsSipProfileSelectNone ] ); + } + } else if ( profile == KNoSipProfileSelected ) { AddItemL( KGSSettIdSIPProfile, ( *iProfileItems )[ CMusSettingsModel::KVsSipProfileSelectNone ] ); - } + } else { - AddItemL( - KGSSettIdSIPProfile, - ( *iProfileItems )[ CMusSettingsModel::KVsSipProfileDefault ] ); - } + AddItemL( + KGSSettIdSIPProfile, + ( *iProfileItems )[ CMusSettingsModel::KVsSipProfileDefault ] ); + } MUS_LOG( "[MUSSET] <- CMusSettingsContainer::MakeSIPProfileItemL()" ) } -// ----------------------------------------------------------------------------- +// --------------------------------------------------------------------------- // Adds autorecord item to listbox. -// ----------------------------------------------------------------------------- +// --------------------------------------------------------------------------- // void CMusSettingsContainer::MakeAutoRecordItemL() { MUS_LOG( "[MUSSET] -> CMusSettingsContainer::MakeAutoRecordItemL()" ) - TInt autoRecordMode = MultimediaSharingSettings::AutoRecordSettingL(); + TInt autoRecordMode = iModel.VSSettingsAutoRecordL(); MUS_LOG1( "[MUSSET] autoRecordMode: %d", autoRecordMode ) MUS_LOG1( "[MUSSET] iAutoRecordItems.Count: %d", iAutoRecordItems->Count() ) @@ -330,9 +334,9 @@ } -// ----------------------------------------------------------------------------- +// --------------------------------------------------------------------------- // Adds recorded video saving item to listbox. -// ----------------------------------------------------------------------------- +// --------------------------------------------------------------------------- // void CMusSettingsContainer::MakeRecordedVideoSavingItemL() { @@ -348,12 +352,12 @@ if ( index == KErrNotFound ) { - MUS_LOG( "[MUSSET] Preferred drive doesn't exist anymore, " ) - MUS_LOG( "[MUSSET] e.g. remote drive deleted, using system drive" ) + MUS_LOG( "[MUSSET] -> preferred drive doesn't exist anymore \ +(e.g. remote drive deleted), taking system drive..." ) driveNumber = RFs::GetSystemDrive(); index = dlg->FindIndexByDrive( driveNumber ); - MultimediaSharingSettings::SetVideoLocationSettingL( driveNumber ); + iModel.SetVSSettingsRecordedVideoSavingL( driveNumber ); } TFileName item( KNullDesC ); @@ -369,38 +373,38 @@ } -// ----------------------------------------------------------------------------- +// --------------------------------------------------------------------------- // Adds note item to listbox. (Alerts setting). Present only with operator // variant set. -// ----------------------------------------------------------------------------- +// --------------------------------------------------------------------------- // void CMusSettingsContainer::MakeNoteItemL() { - MUS_LOG( "[MUSSET] -> CMusSettingsContainer::MakeNoteItemL()" ) + MUS_LOG( + "[MUSSET] -> CMusSettingsContainer::MakeNoteItemL()" ) - MusSettingsKeys::TAuditoryNotification auditoryNotification = - MultimediaSharingSettings::AuditoryNotificationSettingL(); + TInt savingMode = iModel.VSSettingsNoteL(); - MUS_LOG1( "[MUSSET] -> CMusSettingsContainer::Mode:%d()", - auditoryNotification ) + MUS_LOG1( "[MUSSET] -> CMusSettingsContainer::Mode:%d()", savingMode ); // If unset, use and set default value - if ( auditoryNotification < 0 || auditoryNotification > 1 ) - { - auditoryNotification = MusSettingsKeys::EAuditoryNotificationOff; - MultimediaSharingSettings::SetAuditoryNotificationSettingL( - MusSettingsKeys::EAuditoryNotificationOff ); - } + if ( savingMode < 0 || savingMode > 1 ) + { + savingMode = 0; + iModel.SetVSSettingsNoteL( + MusSettingsKeys::EAuditoryNotificationOff ); + } - AddItemL( KGSSettIdNote, ( *iNoteItems )[ auditoryNotification ] ); - - MUS_LOG( "[MUSSET] <- CMusSettingsContainer::MakeNoteItemL()" ) + AddItemL( KGSSettIdNote, ( *iNoteItems )[ savingMode ] ); + + MUS_LOG( + "[MUSSET] <- CMusSettingsContainer::MakeNoteItemL()" ) } -// ----------------------------------------------------------------------------- +// --------------------------------------------------------------------------- // Gets help context. -// ----------------------------------------------------------------------------- +// --------------------------------------------------------------------------- // void CMusSettingsContainer::GetHelpContext( TCoeHelpContext& aContext ) const { @@ -411,9 +415,9 @@ } -// ----------------------------------------------------------------------------- +// --------------------------------------------------------------------------- // Returns currently selected feature (listbox item). -// ----------------------------------------------------------------------------- +// --------------------------------------------------------------------------- // TInt CMusSettingsContainer::CurrentFeatureId() const { @@ -422,48 +426,45 @@ } -// ----------------------------------------------------------------------------- +// ---------------------------------------------------------------------------- // If call is on, informs user with note that new profile is going to be active // after current call. -// ----------------------------------------------------------------------------- +// ---------------------------------------------------------------------------- // void CMusSettingsContainer::ShowNewProfileActiveAfterCallL() { MUS_LOG( "[MUSSET] -> CMusSettingsContainer::ShowNewProfileActiveAfterCallL()" ) - TPSCTsyCallState callState; - User::LeaveIfError( RProperty::Get( KPSUidCtsyCallInformation, - KCTsyCallState, - (TInt&)callState) ); - - if ( callState == EPSCTsyCallStateAlerting || - callState == EPSCTsyCallStateRinging || - callState == EPSCTsyCallStateDialling || - callState == EPSCTsyCallStateAnswering || - callState == EPSCTsyCallStateDisconnecting || - callState == EPSCTsyCallStateConnected || - callState == EPSCTsyCallStateHold) - { - HBufC* infoTxt = StringLoader::LoadLC( R_QTN_MSH_SET_PROFILE_NOTE ); - CAknInformationNote* note = new ( ELeave ) CAknInformationNote( ETrue ); - note->ExecuteLD( infoTxt->Des() ); - CleanupStack::PopAndDestroy( infoTxt ); - } - - MUS_LOG( - "[MUSSET] <- CMusSettingsContainer::ShowNewProfileActiveAfterCallL()" ) + TPSCTsyCallState callState; + User::LeaveIfError( RProperty::Get( KPSUidCtsyCallInformation, + KCTsyCallState, + (TInt&)callState) ); + if ( callState == EPSCTsyCallStateAlerting || + callState == EPSCTsyCallStateRinging || + callState == EPSCTsyCallStateDialling || + callState == EPSCTsyCallStateAnswering || + callState == EPSCTsyCallStateDisconnecting || + callState == EPSCTsyCallStateConnected || + callState == EPSCTsyCallStateHold) + { + HBufC* infoTxt = StringLoader::LoadLC( R_QTN_MSH_SET_PROFILE_NOTE ); + CAknInformationNote* note = new ( ELeave ) CAknInformationNote( ETrue ); + note->ExecuteLD( infoTxt->Des() ); + CleanupStack::PopAndDestroy( infoTxt ); + MUS_LOG( + "[MUSSET] <- CMusSettingsContainer::ShowNewProfileActiveAfterCallL()" ) + } } -// ----------------------------------------------------------------------------- +// ---------------------------------------------------------------------------- // void CMusSettingsContainer::HideItemsL(TInt aItemIndex) // Some items are unwanted by operators.Hide those items from listbox item -// ----------------------------------------------------------------------------- +// ---------------------------------------------------------------------------- // void CMusSettingsContainer::HideItemsL(TInt aItemIndex) { MUS_LOG1("[MUSSET] -> CMusSettingsContainer::HideItemsL() %d",aItemIndex ) iListboxItemArray->SetItemVisibilityL( aItemIndex, CGSListBoxItemTextArray::EInvisible ); - MUS_LOG("[MUSSET] <- CMusSettingsContainer::HideItemsL()" ) + MUS_LOG("[MUSSET] <- CMusSettingsContainer::HideItemsL()" ) } - diff -r 33a5d2bbf6fc -r 73a1feb507fb mmshplugins/mmshsettingsuiplugin/src/mussettingsmodel.cpp --- a/mmshplugins/mmshsettingsuiplugin/src/mussettingsmodel.cpp Thu Aug 19 09:51:39 2010 +0300 +++ b/mmshplugins/mmshsettingsuiplugin/src/mussettingsmodel.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -12,19 +12,18 @@ * Contributors: * * Description: Document model class for MUSSettingsPlugin. -* Version : %version: 18 % << Don't touch! Updated by Synergy at check-out. * */ + +#include "mmussipprofilehandler.h" #include "mussettingsmodel.h" -#include "muslogger.h" #include "mussipprofilemodel.h" -#include "mussettings.h" -#include "mmussipprofilehandler.h" +#include "muslogger.h" +#include +#include -#include -#include #include #include #include // GUI Resource @@ -40,10 +39,6 @@ // ======== MEMBER FUNCTIONS ======== -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// CMusSettingsModel* CMusSettingsModel::NewL( MMusSIPProfileHandler& aHandler ) { MUS_LOG( "[MUSSET] -> CMusSettingsModel::NewL()" ) @@ -57,10 +52,6 @@ } -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// CMusSettingsModel::CMusSettingsModel( MMusSIPProfileHandler& aHandler ) : iHandler( aHandler ) { @@ -68,82 +59,224 @@ } -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// void CMusSettingsModel::ConstructL() { MUS_LOG( "[MUSSET] -> CMusSettingsModel::ConstructL()" ) - InitializeProfileEnablerL(); - static_cast (&iHandler)->SetCMusSettingsModel(this); + iMSSettingsKeys = new (ELeave) MultimediaSharingSettings; MUS_LOG( "[MUSSET] <- CMusSettingsModel::ConstructL()" ) } -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// CMusSettingsModel::~CMusSettingsModel() { MUS_LOG( "[MUSSET] -> CMusSettingsModel::~CMusSettingsModel()" ) + delete iMSSettingsKeys; + iMSSettingsKeys = NULL; MUS_LOG( "[MUSSET] <- CMusSettingsModel::~CMusSettingsModel()" ) } -// ----------------------------------------------------------------------------- + +// ---------------------------------------------------------------------------- +// Returns operator variant mode (normal or operator specific. This is used for +// runtime variation of Settings UI. +// ---------------------------------------------------------------------------- +// +MusSettingsKeys::TOperatorVariant CMusSettingsModel::VSSettingsOperatorVariantL() + { + MUS_LOG( "[MUSSET] -> CMusSettingsModel::VSSettingsOperatorVariantL()" ) + + MusSettingsKeys::TOperatorVariant operatorVariant = + iMSSettingsKeys->OperatorVariantSettingL(); + + MUS_LOG1( + "[MUSSET] <- CMusSettingsContainer::VSSettingsOperatorVariantL()( %d )", + operatorVariant ) + return operatorVariant; + } + + +// ---------------------------------------------------------------------------- +// Returns VS activation mode. +// ---------------------------------------------------------------------------- +// +MusSettingsKeys::TActivation CMusSettingsModel::VSSettingsActivationL() + { + MUS_LOG( "[MUSSET] -> CMusSettingsModel::VSSettingsActivationL()" ) + MusSettingsKeys::TActivation activationMode = + iMSSettingsKeys->ActivationSettingL(); + MUS_LOG1( + "[MUSSET] <- CMusSettingsContainer::VSSettingsActivationL()( %d )", + activationMode ) + return activationMode; + } + + +// ---------------------------------------------------------------------------- +// Returns SIP profile mode. +// ---------------------------------------------------------------------------- +// +TInt CMusSettingsModel::VSSettingsProfileL() + { + MUS_LOG( "[MUSSET] -> CMusSettingsModel::VSSettingsProfileL()" ) + TInt vsProfileMode = iMSSettingsKeys->SipProfileSettingL(); + MUS_LOG1( + "[MUSSET] <- CMusSettingsContainer::VSSettingsProfileL()( %d )", + vsProfileMode ) + return vsProfileMode; + } + + +// ---------------------------------------------------------------------------- +// Returns video autorecord mode. +// ---------------------------------------------------------------------------- +// +MusSettingsKeys::TAutoRecord CMusSettingsModel::VSSettingsAutoRecordL() + { + MUS_LOG( "[MUSSET] -> CMusSettingsModel::VSSettingsAutoRecordL()" ) + MusSettingsKeys::TAutoRecord vsAutoRecordMode = + iMSSettingsKeys->AutoRecordSettingL(); + MUS_LOG1( + "[MUSSET] <- CMusSettingsContainer::VSSettingsAutoRecordL()( %d )", + vsAutoRecordMode ) + return vsAutoRecordMode; + } + + +// ---------------------------------------------------------------------------- // Returns recorded video saving mode. -// ----------------------------------------------------------------------------- +// ---------------------------------------------------------------------------- // TInt CMusSettingsModel::VSSettingsRecordedVideoSavingL() { MUS_LOG( "[MUSSET] -> CMusSettingsModel::VSSettingsRecordedVideoSavingL()" ) - TInt vsVideoLocationMode = MultimediaSharingSettings::VideoLocationSettingL(); + TInt vsVideoLocationMode = iMSSettingsKeys->VideoLocationSettingL(); MUS_LOG1( - "[MUSSET] <- CMusSettingsModel::VSSettingsRecordedVideoSavingL()( %d )", + "[MUSSET] <- CMusSettingsContainer::VSSettingsRecordedVideoSavingL()( %d )", vsVideoLocationMode ) return vsVideoLocationMode; } + // ---------------------------------------------------------------------------- -// Change Activation. +// Returns mode of audible note. +// ---------------------------------------------------------------------------- +// +MusSettingsKeys::TAuditoryNotification CMusSettingsModel::VSSettingsNoteL() + { + MUS_LOG( "[MUSSET] -> CMusSettingsModel::VSSettingsNoteL()" ) + MusSettingsKeys::TAuditoryNotification vsNoteMode = + iMSSettingsKeys->AuditoryNotificationSettingL(); + MUS_LOG1( + "[MUSSET] <- CMusSettingsContainer::VSSettingsNoteL()( %d )", + vsNoteMode ) + return vsNoteMode; + } + + +// ---------------------------------------------------------------------------- +// Sets VS activation mode. +// ---------------------------------------------------------------------------- +// +void CMusSettingsModel::SetVSSettingsActivationL( + const MusSettingsKeys::TActivation aActivation) + { + MUS_LOG1( + "[MUSSET] -> CMusSettingsContainer::SetVSSettingsActivationL()( %d )", + aActivation ) + iMSSettingsKeys->SetActivationSettingL( aActivation ); + MUS_LOG( "[MUSSET] <- CMusSettingsModel::SetVSSettingsActivationL()" ) + } + + +// ---------------------------------------------------------------------------- +// Sets SIP Profile mode. +// ---------------------------------------------------------------------------- +// +void CMusSettingsModel::SetVSSettingsProfileL( const TInt aProfile ) + { + MUS_LOG1( + "[MUSSET] -> CMusSettingsContainer::SetVSSettingsProfileL()( %d )", + aProfile ) + iMSSettingsKeys->SetSipProfileSettingL( aProfile ); + MUS_LOG( "[MUSSET] <- CMusSettingsModel::SetVSSettingsProfileL()" ) + } + + +// ---------------------------------------------------------------------------- +// Sets video autorecord mode. // ---------------------------------------------------------------------------- // -void CMusSettingsModel::SetActivationItem( TBool aActive ) +void CMusSettingsModel::SetVSSettingsAutoRecordL( + const MusSettingsKeys::TAutoRecord aAutoRecord ) { - MUS_LOG( "[MUSSET] -> CMusSettingsModel::SetActivationItem()" ) - MUS_LOG1( " Profile disabled? ( %d )", aActive ) - iProfileDisabled = aActive; - MUS_LOG( "[MUSSET] <- CMusSettingsModel::SetActivationItem()" ) + MUS_LOG1( + "[MUSSET] -> CMusSettingsContainer::SetVSSettingsAutoRecordL()( %d )", + aAutoRecord ) + iMSSettingsKeys->SetAutoRecordSettingL( aAutoRecord ); + MUS_LOG( "[MUSSET] <- CMusSettingsModel::SetVSSettingsAutoRecordL()" ) } + // ---------------------------------------------------------------------------- -// Get Activation item. +// Sets video location. +// ---------------------------------------------------------------------------- +// +void CMusSettingsModel::SetVSSettingsRecordedVideoSavingL( + const TInt aVideoLocation ) + { + MUS_LOG1( + "[MUSSET] -> CMusSettingsContainer::SetVSSettingsRecordedVideoSavingL()( %d )", + aVideoLocation ) + iMSSettingsKeys->SetVideoLocationSettingL( aVideoLocation ); + MUS_LOG( + "[MUSSET] <- CMusSettingsModel::SetVSSettingsRecordedVideoSavingL()" ) + } + + +// ---------------------------------------------------------------------------- +// Sets mode of auditory note. In operator specific variants auditory note also +// sets mode of popup notification setting. // ---------------------------------------------------------------------------- // -TBool CMusSettingsModel::ActivationItem() +void CMusSettingsModel::SetVSSettingsNoteL( + const MusSettingsKeys::TAuditoryNotification aValue ) { - MUS_LOG( "[MUSSET] -> CMusSettingsModel::ActivationItem()" ) - MUS_LOG( "[MUSSET] <- CMusSettingsModel::ActivationItem()" ) - return iProfileDisabled; + MUS_LOG1( + "[MUSSET] -> CMusSettingsContainer::SetVSSettingsNoteL()( %d )", aValue ) + iMSSettingsKeys->SetAuditoryNotificationSettingL( aValue ); + + if ( VSSettingsOperatorVariantL() == MusSettingsKeys::EOperatorSpecific ) + { + if ( MusSettingsKeys::EAuditoryNotificationOn == aValue ) + { + iMSSettingsKeys->SetPopupNotificationSettingL( + MusSettingsKeys::EPopupNotificationOn ); + } + else + { + iMSSettingsKeys->SetPopupNotificationSettingL( + MusSettingsKeys::EPopupNotificationOff ); + } + } } + // ----------------------------------------------------------------------------- // Returns the list of profile names // ----------------------------------------------------------------------------- CDesCArray* CMusSettingsModel::ListOfProfileNamesL() { MUS_LOG( "[MUSSET] -> CMusSettingsModel::ListOfProfileNamesL()" ) - RPointerArray& list = iHandler.ProfileArrayL(); + CArrayPtr* list = iHandler.ProfileArrayL(); CDesCArray* array = new ( ELeave ) CDesCArrayFlat( KSIPGranularity ); CleanupStack::PushL( array ); - for ( TInt i = 0; i < list.Count(); i++ ) + for ( TInt i = 0; i < list->Count(); i++ ) { const TDesC8* providerName = 0; User::LeaveIfError( - list[i]->GetParameter( KSIPProviderName, providerName ) ); + list->At(i)->GetParameter( KSIPProviderName, providerName ) ); HBufC8* decodedProvider = EscapeUtils::EscapeDecodeL( *providerName ); @@ -171,7 +304,7 @@ HBufC* CMusSettingsModel::ProfileNameL( TInt aId ) { MUS_LOG1( - "[MUSSET] -> CMusSettingsModel::ProfileNameL()( %d )", + "[MUSSET] -> CMusSettingsContainer::ProfileNameL()( %d )", aId ) const TDesC8* providerName = 0; TInt index = ProfileIndexByIdL( aId ); @@ -179,7 +312,7 @@ if ( index >= 0 ) { - if ( KErrNone == iHandler.ProfileArrayL()[index]-> + if ( KErrNone == iHandler.ProfileArrayL()->At( index )-> GetParameter( KSIPProviderName, providerName ) ) { HBufC8* decodedProvider = @@ -202,9 +335,9 @@ } -// ----------------------------------------------------------------------------- +// ---------------------------------------------------------------------------- // Returns default SIP profile index. -// ----------------------------------------------------------------------------- +// ---------------------------------------------------------------------------- TInt CMusSettingsModel::DefaultProfileIndex() { MUS_LOG( "[MUSSET] <- CMusSettingsModel::DefaultProfileIndex()" ) @@ -212,9 +345,9 @@ } -// ----------------------------------------------------------------------------- +// ---------------------------------------------------------------------------- // Returns id of default SIP profile. -// ----------------------------------------------------------------------------- +// ---------------------------------------------------------------------------- TUint32 CMusSettingsModel::DefaultProfileId() { MUS_LOG( "[MUSSET] <- CMusSettingsModel::DefaultProfileId()" ) @@ -222,9 +355,9 @@ } -// ----------------------------------------------------------------------------- +// ---------------------------------------------------------------------------- // Returns SIP profile index based on the Id of SIP profile. -// ----------------------------------------------------------------------------- +// ---------------------------------------------------------------------------- TInt CMusSettingsModel::ProfileIndexByIdL( TUint32 aId ) { MUS_LOG( "[MUSSET] <- CMusSettingsModel::ProfileIndexByIdL()" ) @@ -232,41 +365,19 @@ } -// ----------------------------------------------------------------------------- +// ---------------------------------------------------------------------------- // Returns SIP profile Id based on the index of SIP profile. -// ----------------------------------------------------------------------------- +// ---------------------------------------------------------------------------- TUint32 CMusSettingsModel::ProfileIdByIndex( TUint aIndex ) { MUS_LOG( "[MUSSET] <- CMusSettingsModel::ProfileIdByIndex()" ) return iHandler.ProfileIdByIndex( aIndex ); } -// ----------------------------------------------------------------------------- -// Initialize SIP profile enabler data. -// ----------------------------------------------------------------------------- -void CMusSettingsModel::InitializeProfileEnablerL() - { - MUS_LOG( "[MUSSET] -> CMusSettingsModel::InitializeProfileEnabler()" ) - if ( MultimediaSharingSettings::OperatorVariantSettingL() == - MusSettingsKeys::EOperatorSpecific ) - { - TBool enabled(EFalse); - - CMusSIPProfileModel& handler = - static_cast( iHandler ); - TRAPD( error, enabled = handler.ProfileEnabledL()); - enabled = error != KErrNone ? EFalse : enabled; - MUS_LOG2("SIP registration service( %d ), error( %d )", enabled, error ) - //profile enabled - activation disabled = false - //profile disabled - activation disabled = true - SetActivationItem( !enabled ); - } - MUS_LOG( "[MUSSET] <- CMusSettingsModel::InitializeProfileEnabler()" ) - } -// ----------------------------------------------------------------------------- +// ---------------------------------------------------------------------------- // Returns memory selction dialog pointer. -// ----------------------------------------------------------------------------- +// ---------------------------------------------------------------------------- CAknMemorySelectionDialogMultiDrive* CMusSettingsModel::MemorySelectionDialogLC() { MUS_LOG( "[MUSSET] -> CMusSettingsModel::MemorySelectionDialogLC()" ) diff -r 33a5d2bbf6fc -r 73a1feb507fb mmshplugins/mmshsettingsuiplugin/src/mussettingsplugin.cpp --- a/mmshplugins/mmshsettingsuiplugin/src/mussettingsplugin.cpp Thu Aug 19 09:51:39 2010 +0300 +++ b/mmshplugins/mmshsettingsuiplugin/src/mussettingsplugin.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -12,7 +12,6 @@ * Contributors: * * Description: MUSSettingsPlugin implementation. -* Version : %version: be1sipx1#38 % << Don't touch! Updated by Synergy at check-out. * */ @@ -55,20 +54,13 @@ // ======== MEMBER FUNCTIONS ======== -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// CMusSettingsPlugin::CMusSettingsPlugin() : iResources( *iCoeEnv ) { MUS_LOG( "[MUSSET] <- CMusSettingsPlugin::CMusSettingsPlugin()" ) } -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// + CMusSettingsPlugin::~CMusSettingsPlugin() { MUS_LOG( "[MUSSET] -> CMusSettingsPlugin::~CMusSettingsPlugin()" ) @@ -79,31 +71,29 @@ delete iContainer; iContainer = NULL; } - - CloseResourceFile(); + + iResources.Close(); delete iModel; iModel = NULL; delete iHandler; iHandler = NULL; delete iDiskNotifyHandler; - delete iCaption; MUS_LOG( "[MUSSET] <- CMusSettingsPlugin::~CMusSettingsPlugin()" ) } -// ----------------------------------------------------------------------------- -// -// -// ----------------------------------------------------------------------------- -// + void CMusSettingsPlugin::ConstructL() { MUS_LOG( "[MUSSET] -> CMusSettingsPlugin::ConstructL()" ) FeatureManager::InitializeLibL(); - - iResourceFileOpen = false; - OpenResourceFileL(); + HBufC* fileName = MusResourceFinderUtil::ResourcePathL( + KVSSettingsResourceFileName ); + TFileName fName(*fileName); + delete fileName; + MUS_LOG_TDESC( "[MUSSET] Resource FileName ",fName ) + iResources.OpenL(fName); MUS_LOG( "[MUSSET] Constructing the Base " ) BaseConstructL( R_GS_VS_VIEW ); iHandler = CMusSIPProfileModel::NewL(); @@ -111,20 +101,11 @@ iModel = CMusSettingsModel::NewL( *iHandler ); iDiskNotifyHandler = CDiskNotifyHandler::NewL( *this, iEikonEnv->FsSession() ); - // Subscribe disk notifications - User::LeaveIfError( iDiskNotifyHandler->NotifyDisk() ); - - iCaption = StringLoader::LoadL( R_GS_VS_PLUGIN_CAPTION ); - CloseResourceFile(); - + User::LeaveIfError( iDiskNotifyHandler->NotifyDisk() ); // Subscribe disk notifications MUS_LOG( "[MUSSET] <- CMusSettingsPlugin::ConstructL()" ) } -// ----------------------------------------------------------------------------- -// -// -// ----------------------------------------------------------------------------- -// + CMusSettingsPlugin* CMusSettingsPlugin::NewL( TAny* /*aInitParams*/ ) { MUS_LOG( "[MUSSET] -> CMusSettingsPlugin::NewL()" ) @@ -136,10 +117,11 @@ return self; } -// ----------------------------------------------------------------------------- + +// ---------------------------------------------------------------------------- // From class CAknView. // Returns UID of *this* settings plugin. -// ----------------------------------------------------------------------------- +// ---------------------------------------------------------------------------- // TUid CMusSettingsPlugin::Id() const { @@ -148,10 +130,11 @@ return KGSVSSettingsPluginUID; } -// ----------------------------------------------------------------------------- + +// ---------------------------------------------------------------------------- // Hides non-virtual member from base class CGSBaseView. // Handles a change in client rectangle size. -// ----------------------------------------------------------------------------- +// ---------------------------------------------------------------------------- // void CMusSettingsPlugin::HandleClientRectChange() { @@ -163,10 +146,11 @@ MUS_LOG( "[MUSSET] <- CMusSettingsPlugin::HandleClientRectChange()" ) } -// ----------------------------------------------------------------------------- + +// ---------------------------------------------------------------------------- // From class CAknView. // Called by framework when *this* control is to be activated/focused. -// ----------------------------------------------------------------------------- +// ---------------------------------------------------------------------------- // void CMusSettingsPlugin::DoActivateL( const TVwsViewId& aPrevViewId, @@ -174,39 +158,69 @@ const TDesC8& aCustomMessage ) { MUS_LOG( "[MUSSET] -> CMusSettingsPlugin::DoActivateL()" ) - OpenResourceFileL(); CGSBaseView::DoActivateL( aPrevViewId, aCustomMessageId, aCustomMessage ); MUS_LOG( "[MUSSET] <- CMusSettingsPlugin::DoActivateL()" ) } -// ----------------------------------------------------------------------------- + +// ---------------------------------------------------------------------------- // From class CAknView. // Called by framework when *this* control is to be deactivated. -// ----------------------------------------------------------------------------- +// ---------------------------------------------------------------------------- // void CMusSettingsPlugin::DoDeactivate() { MUS_LOG( "[MUSSET] -> CMusSettingsPlugin::DoDeactivate()" ) CGSBaseView::DoDeactivate(); - CloseResourceFile(); MUS_LOG( "[MUSSET] <- CMusSettingsPlugin::DoDeactivate()" ) } -// ----------------------------------------------------------------------------- + +// ---------------------------------------------------------------------------- // From class CAknView. // Handles a user selected menu command. -// ----------------------------------------------------------------------------- +// ---------------------------------------------------------------------------- // void CMusSettingsPlugin::HandleCommandL( TInt aCommand ) { MUS_LOG1( "[MUSSET] -> CMusSettingsPlugin::HandleCommandL()( %d )", aCommand ) + CMusSettingsContainer& container = + *static_cast( iContainer ); + const TInt currentItem = container.CurrentFeatureId(); + switch ( aCommand ) { case EGSMSKCmdAppChange: -// case EGSCmdAppChange: + case EGSCmdAppChange: { - HandleListBoxSelectionL(); + if ( currentItem == KGSSettIdVSActivation + && aCommand == EGSCmdAppChange ) + { + if ( iModel->VSSettingsOperatorVariantL() == + MusSettingsKeys::EOperatorSpecific ) + { + ShowOperatorSpecificActivationSettingDialogL(); + } + else + { + ShowVSSettingsActivationSettingDialogL(); + } + } + else if ( currentItem == KGSSettIdRecordedVideoSaving + && aCommand == EGSCmdAppChange ) + { + ShowVSSettingsRecordedVideoSavingSettingDialogL(); + } + else if ( KGSSettIdNote == currentItem + && EGSCmdAppChange == aCommand ) + { + ShowVSSettingsNoteSettingDialogL(); + } + else + { + HandleListBoxSelectionL(); + } break; } @@ -235,26 +249,26 @@ MUS_LOG( "[MUSSET] <- CMusSettingsPlugin::HandleCommandL()" ) } -// ----------------------------------------------------------------------------- + +// ---------------------------------------------------------------------------- // From class CGSPluginInterface. // Gets caption text of *this* plugin. -// ----------------------------------------------------------------------------- +// ---------------------------------------------------------------------------- // void CMusSettingsPlugin::GetCaptionL( TDes& aCaption ) const { MUS_LOG( "[MUSSET] -> CMusSettingsPlugin::GetCaptionL()" ) - if ( iCaption && iCaption->Length() <= aCaption.MaxLength() ) - { - aCaption.Copy( *iCaption ); - } - + HBufC* result = StringLoader::LoadL( R_GS_VS_PLUGIN_CAPTION ); + aCaption.Copy( *result ); + delete result; MUS_LOG( "[MUSSET] <- CMusSettingsPlugin::GetCaptionL()" ) } -// ----------------------------------------------------------------------------- + +// ---------------------------------------------------------------------------- // From class CGSPluginInterface. // Returns provider category of *this* plugin. -// ----------------------------------------------------------------------------- +// ---------------------------------------------------------------------------- // TInt CMusSettingsPlugin::PluginProviderCategory() const { @@ -262,10 +276,11 @@ return KGSPluginProviderInternal; } -// ----------------------------------------------------------------------------- + +// ---------------------------------------------------------------------------- // From class MEikMenuObserver. // Called by framework before creating menus -// ----------------------------------------------------------------------------- +// ---------------------------------------------------------------------------- // void CMusSettingsPlugin::DynInitMenuPaneL( TInt aResourceId, CEikMenuPane* aMenuPane ) @@ -279,11 +294,12 @@ } } } + -// ----------------------------------------------------------------------------- +// ---------------------------------------------------------------------------- // From MDiskNotifyHandlerCallback // Called by framework When disk status changed -// ----------------------------------------------------------------------------- +// ---------------------------------------------------------------------------- // void CMusSettingsPlugin::HandleNotifyDisk( TInt /*aError*/, const TDiskEvent& /*aEvent*/ ) @@ -303,10 +319,11 @@ MUS_LOG( "[MUSSET] <- CMusSettingsPlugin::HandleNotifyDisk()" ) } -// ----------------------------------------------------------------------------- + +// ---------------------------------------------------------------------------- // From class CGSBaseView. // Called by GS framework to create a GS container for *this* plugin. -// ----------------------------------------------------------------------------- +// ---------------------------------------------------------------------------- // void CMusSettingsPlugin::NewContainerL() { @@ -314,10 +331,11 @@ iContainer = new( ELeave ) CMusSettingsContainer( *iModel ); } -// ----------------------------------------------------------------------------- + +// ---------------------------------------------------------------------------- // From class CGSBaseView. // Handles users "middle click" aka MSK on selected feature. -// ----------------------------------------------------------------------------- +// ---------------------------------------------------------------------------- // void CMusSettingsPlugin::HandleListBoxSelectionL() { @@ -325,35 +343,61 @@ CMusSettingsContainer& container = *static_cast( iContainer ); const TInt currentItem = container.CurrentFeatureId(); - MUS_LOG1( "[MUSSET] Item selected: ", currentItem ) + + RDebug::Print( _L( + "[CMusSettingsPlugin] Item selected: %d" ), + currentItem ); + + MusSettingsKeys::TOperatorVariant operatorVarValue = + iModel->VSSettingsOperatorVariantL(); switch ( currentItem ) { case KGSSettIdVSActivation: { - SwitchOnOffValueL( KGSSettIdVSActivation ); - break; + if ( operatorVarValue == MusSettingsKeys::EOperatorSpecific ) + { + SwitchOnOffValueL( KGSSettIdVSActivation ); + container.UpdateListBoxL( KGSSettIdVSActivation ); + } + else + { + ShowVSSettingsActivationSettingDialogL(); + } + break; } + case KGSSettIdSIPProfile: { ShowVSSettingsProfileSettingDialogL(); break; } + case KGSSettIdAutoRecord: { SwitchOnOffValueL( KGSSettIdAutoRecord ); - break; + container.UpdateListBoxL( KGSSettIdAutoRecord ); + break; } + case KGSSettIdRecordedVideoSaving: { - ShowVSSettingsRecordedVideoSavingSettingDialogL(); - break; + + ShowVSSettingsRecordedVideoSavingSettingDialogL(); + +// SwitchOnOffValueL( KGSSettIdRecordedVideoSaving ); +// container.UpdateListBoxL( KGSSettIdRecordedVideoSaving ); + + break; } + case KGSSettIdNote: { - SwitchOnOffValueL( KGSSettIdNote ); - break; + SwitchOnOffValueL( KGSSettIdNote ); + container.UpdateListBoxL( KGSSettIdNote ); + break; } + default: { break; @@ -362,11 +406,12 @@ MUS_LOG( "[MUSSET] <- CMusSettingsPlugin::HandleListBoxSelectionL()" ) } -// ----------------------------------------------------------------------------- + +// ---------------------------------------------------------------------------- // From class CGSBaseView. // Returns container class of *this* plugin. iContainer is always garanteed to // be of type CMusSettingsContainer*. -// ----------------------------------------------------------------------------- +// ---------------------------------------------------------------------------- // CMusSettingsContainer* CMusSettingsPlugin::Container() { @@ -374,17 +419,115 @@ return static_cast( iContainer ); } -// ----------------------------------------------------------------------------- + +// ---------------------------------------------------------------------------- +// Shows a dialog for user to modify VS activation setting. Note that this +// method has an alternative method for operator specific variant. +// ---------------------------------------------------------------------------- +// +void CMusSettingsPlugin::ShowVSSettingsActivationSettingDialogL() + { + MUS_LOG( + "[MUSSET] -> CMusSettingsPlugin::ShowVSSettingsActivationSettingDialogL()" + ) + + MusSettingsKeys::TActivation currentValue = + iModel->VSSettingsActivationL(); + + CDesCArrayFlat* items = iCoeEnv->ReadDesC16ArrayResourceL( + R_ACTIVATION_SETTING_PAGE_LBX ); + + CleanupStack::PushL( items ); + TInt intCurrentValue = static_cast( currentValue ); + + CAknRadioButtonSettingPage* dlg = + new ( ELeave ) CAknRadioButtonSettingPage( + R_ACTIVATION_SETTING_PAGE, + intCurrentValue, + items); + + if ( dlg->ExecuteLD( CAknSettingPage::EUpdateWhenChanged ) ) + { + currentValue = + static_cast( intCurrentValue ); + + iModel->SetVSSettingsActivationL( currentValue ); + Container()->UpdateListBoxL( KGSSettIdVSActivation ); + } + + CleanupStack::PopAndDestroy( items ); + MUS_LOG( + "[MUSSET] <- CMusSettingsPlugin::ShowVSSettingsActivationSettingDialogL()" ) + } + + +// ---------------------------------------------------------------------------- +// Shows a dialog for user to modify VS activation setting. Note that this +// method is used only for operator specific variant. Alternative method for +// "standard" variant exists. Note that because standard variant contains 3 +// different values and operator variant contains only 2 values (0,2) the value +// 2 (MusSettingsKeys::ENever) is converted to value 1 +// (MusSettingsKeys::EActiveInHomeNetworks) in operator variant just before +// showing the dialog. After showing the dialog the conversion mentioned above +// is reversed. This temporarily conversion is done solely to use values 0 and +// 1 for direct mapping to items array. +// ---------------------------------------------------------------------------- +// +void CMusSettingsPlugin::ShowOperatorSpecificActivationSettingDialogL() + { + MUS_LOG( + "[MUSSET] -> CMusSettingsPlugin::ShowOperatorSpecificActivationSettingDialogL()" + ) + + MusSettingsKeys::TActivation currentValue = + iModel->VSSettingsActivationL(); + + if ( currentValue == MusSettingsKeys::ENever ) + { + currentValue = MusSettingsKeys::EActiveInHomeNetworks; + } + + CDesCArrayFlat* items = iCoeEnv->ReadDesC16ArrayResourceL( + R_OPERATOR_ACTIVATION_SETTING_PAGE_LBX); + + CleanupStack::PushL( items ); + TInt intCurrentValue = static_cast(currentValue); + + CAknRadioButtonSettingPage* dlg = + new ( ELeave ) CAknRadioButtonSettingPage( + R_ACTIVATION_SETTING_PAGE, + intCurrentValue, + items ); + + if ( dlg->ExecuteLD( CAknSettingPage::EUpdateWhenChanged ) ) + { + currentValue = + static_cast( intCurrentValue ); + if ( currentValue == MusSettingsKeys::EActiveInHomeNetworks ) + { + currentValue = MusSettingsKeys::ENever; + } + iModel->SetVSSettingsActivationL( currentValue ); + Container()->UpdateListBoxL( KGSSettIdVSActivation ); + } + + CleanupStack::PopAndDestroy( items ); + MUS_LOG( + "[MUSSET] <- CMusSettingsPlugin::ShowOperatorSpecificActivationSettingDialogL()" ) + } + + +// ---------------------------------------------------------------------------- // Shows SIP profile setting dialog (i.e. "use default profile" or "select // profile from list"). If select profile from list is selected, a list of // SIP profiles is provided for user to choose wanted SIP profile. -// ----------------------------------------------------------------------------- +// ---------------------------------------------------------------------------- // void CMusSettingsPlugin::ShowVSSettingsProfileSettingDialogL() { MUS_LOG( "[MUSSET] -> CMusSettingsPlugin::ShowVSSettingsProfileSettingDialogL()" ) - TInt cenRepValue = MultimediaSharingSettings::SipProfileSettingL(); + TInt cenRepValue = iModel->VSSettingsProfileL(); TInt profileMode = CMusSettingsModel::KVsSipProfileDefault; if ( cenRepValue != CMusSettingsModel::KVsSipProfileDefault ) { @@ -405,29 +548,29 @@ if ( dlg->ExecuteLD( CAknSettingPage::EUpdateWhenChanged ) ) { if ( profileMode == CMusSettingsModel::KVsSipProfileDefault ) - { - if ( oldProfileMode != profileMode ) - { - MultimediaSharingSettings::SetSipProfileSettingL( - CMusSettingsModel::KVsSipProfileDefault ); - Container()->ShowNewProfileActiveAfterCallL(); - Container()->UpdateListBoxL( KGSSettIdSIPProfile ); - } - } + { + if ( oldProfileMode != profileMode ) + { + iModel->SetVSSettingsProfileL( + CMusSettingsModel::KVsSipProfileDefault ); + Container()->ShowNewProfileActiveAfterCallL(); + Container()->UpdateListBoxL( KGSSettIdSIPProfile ); + } + } else - { + { ShowVSSettingsSelectSipProfileDialogL(); - } + } } CleanupStack::PopAndDestroy( items ); MUS_LOG( "[MUSSET] <- CMusSettingsPlugin::ShowVSSettingsProfileSettingDialogL()" ) } -// ----------------------------------------------------------------------------- +// ---------------------------------------------------------------------------- // Provides user a list of SIP profiles to select from. If no SIP profiles // exist an error note is displayed. -// ----------------------------------------------------------------------------- +// ---------------------------------------------------------------------------- // void CMusSettingsPlugin::ShowVSSettingsSelectSipProfileDialogL() { @@ -436,48 +579,50 @@ CleanupStack::PushL( array ); if ( array->Count() < 1 ) - { - ShowNoProfilesNotificationL(); - } + { + ShowNoProfilesNotificationL(); + } else - { - TInt selectedIndex = iModel->ProfileIndexByIdL( - MultimediaSharingSettings::SipProfileSettingL() ); - TInt currentIndex ( selectedIndex ); + { + TInt selectedIndex = iModel->ProfileIndexByIdL( + iModel->VSSettingsProfileL() ); + TInt currentIndex ( selectedIndex ); - if ( selectedIndex == KErrNotFound ) - { - // first profile in the list - selectedIndex = CMusSettingsModel::KVsSipProfileDefault; - } + if ( selectedIndex == KErrNotFound ) + { + // first profile in the list + selectedIndex = CMusSettingsModel::KVsSipProfileDefault; + } - // Create and display the pop-up list - CAknRadioButtonSettingPage* defaultPopUp = - new ( ELeave ) CAknRadioButtonSettingPage( - R_VS_SIP_PROFILE_LIST_VIEW_SELECT_SETTING_PAGE, - selectedIndex, - array ); - if ( defaultPopUp->ExecuteLD( CAknSettingPage::EUpdateWhenChanged ) ) - { - if ( selectedIndex != currentIndex ) - { - // User has changed the selected profile, set new - // setting to persistent storage - TUint newValue = iModel->ProfileIdByIndex( selectedIndex ); - MultimediaSharingSettings::SetSipProfileSettingL( newValue ); - Container()->ShowNewProfileActiveAfterCallL(); - Container()->UpdateListBoxL( KGSSettIdSIPProfile ); - } - } - } + // Create and display the pop-up list + CAknRadioButtonSettingPage* defaultPopUp = + new ( ELeave ) CAknRadioButtonSettingPage( + R_VS_SIP_PROFILE_LIST_VIEW_SELECT_SETTING_PAGE, + selectedIndex, + array ); + if ( defaultPopUp->ExecuteLD( + CAknSettingPage::EUpdateWhenChanged ) ) + { + if ( selectedIndex != currentIndex ) + { + // User has changed the selected profile, set new + // setting to persistent storage + TUint newValue = iModel->ProfileIdByIndex( selectedIndex ); + iModel->SetVSSettingsProfileL( newValue ); + Container()->ShowNewProfileActiveAfterCallL(); + Container()->UpdateListBoxL( KGSSettIdSIPProfile ); + } + } + } CleanupStack::PopAndDestroy( array ); // array } -// ----------------------------------------------------------------------------- + +// ---------------------------------------------------------------------------- // Provides a dialog for user to choose saving location for recorderded video. // (locations are naturally phone memory or memory card). -// ----------------------------------------------------------------------------- +// ---------------------------------------------------------------------------- // void CMusSettingsPlugin::ShowVSSettingsRecordedVideoSavingSettingDialogL() { @@ -487,9 +632,20 @@ TParsePtrC( PathInfo::PhoneMemoryRootPath() ).Drive() ); TDriveUnit mmcUnit( TParsePtrC( PathInfo::MemoryCardRootPath() ).Drive() ); TInt currentValue = iModel->VSSettingsRecordedVideoSavingL(); + + + CAknMemorySelectionDialogMultiDrive* dlg = + iModel->MemorySelectionDialogLC(); + + // Use ECFDDialogTypeSave to have double list box in the query +/* CAknMemorySelectionDialog* dlg = CAknMemorySelectionDialog::NewL( + ECFDDialogTypeSave, + R_VS_RECORDED_VIDEO_SAVING_SETTING_PAGE, + EFalse ); + CleanupStack::PushL( dlg ); +*/ + - CAknMemorySelectionDialogMultiDrive* dlg = - iModel->MemorySelectionDialogLC(); TBool result( EFalse ); TDriveNumber driveNumber((TDriveNumber)currentValue); @@ -498,37 +654,67 @@ if ( result != CAknCommonDialogsBase::TReturnKey( CAknCommonDialogsBase::ERightSoftkey) ) { - if ( /*( TInt )*/ driveNumber != currentValue ) + if ( ( TInt ) driveNumber != currentValue ) { - MultimediaSharingSettings::SetVideoLocationSettingL( ( TInt ) driveNumber ); + iModel->SetVSSettingsRecordedVideoSavingL( ( TInt ) driveNumber ); } Container()->UpdateListBoxL( KGSSettIdRecordedVideoSaving ); } +/* CAknMemorySelectionDialog::TMemory mem; + if ( currentValue == ( TInt )mmcUnit ) + { + mem = CAknMemorySelectionDialog::EMemoryCard; + } + else + { + mem = CAknMemorySelectionDialog::EPhoneMemory; + } + + TFileName ignore; + TFileName path; + + if ( dlg->ExecuteL( mem, &path, &ignore ) ) + { + if ( mem == CAknMemorySelectionDialog::EPhoneMemory + && currentValue != ( TInt ) phoneMemUnit ) + { + iModel->SetVSSettingsRecordedVideoSavingL( ( TInt )phoneMemUnit ); + Container()->UpdateListBoxL( KGSSettIdRecordedVideoSaving ); + } + else if ( mem == CAknMemorySelectionDialog::EMemoryCard + && currentValue != ( TInt )mmcUnit ) + { + iModel->SetVSSettingsRecordedVideoSavingL( ( TInt )mmcUnit ); + Container()->UpdateListBoxL( KGSSettIdRecordedVideoSaving ); + } + } +*/ + CleanupStack::PopAndDestroy(dlg); MUS_LOG( "[MUSSET] <- CMusSettingsPlugin::ShowVSSettingsRecordedVideoSavingSettingDialogL()" ) } -// ----------------------------------------------------------------------------- + +// ---------------------------------------------------------------------------- // In standard variant provides user a "Capability auditory note" setting // dialog, and in operator variant provides user an "Alerts" setting dialog. // Note that in both variants the different dialogs toggle the same setting. -// ----------------------------------------------------------------------------- +// ---------------------------------------------------------------------------- // void CMusSettingsPlugin::ShowVSSettingsNoteSettingDialogL() { MUS_LOG( "[MUSSET] -> CMusSettingsPlugin::ShowVSSettingsNoteSettingDialogL()" ) MusSettingsKeys::TAuditoryNotification currentValue = - MultimediaSharingSettings::AuditoryNotificationSettingL(); + iModel->VSSettingsNoteL(); TInt intCurrentValue = static_cast( currentValue ); CAknRadioButtonSettingPage* dlg; CDesCArrayFlat* items; - if ( MultimediaSharingSettings::OperatorVariantSettingL() == - MusSettingsKeys::EStandard ) + if ( iModel->VSSettingsOperatorVariantL() == MusSettingsKeys::EStandard ) { items = iCoeEnv->ReadDesC16ArrayResourceL( R_VS_AUDIO_SETTING_PAGE_LBX ); @@ -552,9 +738,9 @@ if ( dlg->ExecuteLD( CAknSettingPage::EUpdateWhenChanged ) ) { currentValue = - static_cast( intCurrentValue ); - MultimediaSharingSettings::SetAuditoryNotificationSettingL( - currentValue ); + static_cast + ( intCurrentValue ); + iModel->SetVSSettingsNoteL( currentValue ); Container()->UpdateListBoxL( KGSSettIdNote ); } @@ -563,9 +749,10 @@ "[MUSSET] <- CMusSettingsPlugin::ShowVSSettingsNoteSettingDialogL()" ) } -// ----------------------------------------------------------------------------- + +// ---------------------------------------------------------------------------- // Shows a notifications that no SIP profiles exists. -// ----------------------------------------------------------------------------- +// ---------------------------------------------------------------------------- // void CMusSettingsPlugin::ShowNoProfilesNotificationL() { @@ -577,133 +764,84 @@ MUS_LOG( "[MUSSET] <- CMusSettingsPlugin::ShowNoProfilesNotificationL()" ) } -// ----------------------------------------------------------------------------- + +// --------------------------------------------------------------------------- // Switches between two possible values from one to another (i.e. toggles a // setting on/off). Toggled setting is passed in aValue parameter. -// ----------------------------------------------------------------------------- +// --------------------------------------------------------------------------- // void CMusSettingsPlugin::SwitchOnOffValueL( TInt aValue ) { - MUS_LOG( "[MUSSET] -> CMusSettingsPlugin::SwitchOnOffValueL()" ) - switch( aValue ) - { - case KGSSettIdVSActivation: - { - MusSettingsKeys::TOperatorVariant operatorVarValue = - MultimediaSharingSettings::OperatorVariantSettingL(); - - if ( operatorVarValue == MusSettingsKeys::EOperatorSpecific ) - { - - TInt aCallCount = 0; - RProperty::Get( NMusSessionInformationApi::KCategoryUid, - NMusSessionInformationApi::KMusCallCount, - aCallCount ); - MUS_LOG1( "[MUSSET] CallCount ( %d )", aCallCount) - if ( aCallCount == 0 ) - { - MUS_LOG( "[MUSSET] no calls. Set VS on/off" ) - TBool enabled = EFalse; - TRAPD( error, enabled = iHandler->ProfileEnabledL( )); - MUS_LOG2( "[MUSSET] VS now %d (err=%d)", enabled, error ) - if ( !error ) - { - if( enabled ) //currently enabled => disable - { - TRAPD( error, iHandler->DisableProfileL() ); - MUS_LOG1( "[MUSSET] VS is off (err=%d)", error ) - //activation disabled = true - iModel->SetActivationItem( enabled ); - - if ( error == KErrNone ) - { - MUS_LOG( "[MUSSET] Activation setting set off" ) - //MusSettingsKeys::ENever = 2 can not be used anymore - //EActiveInHomeNetworks = 1 is used instead -> off - MultimediaSharingSettings::SetActivationSettingL( - MusSettingsKeys::EActiveInHomeNetworks ); - } - } - else//currently disabled => enable - { - TRAPD( error, iHandler->EnableProfileL() ); - MUS_LOG1( "[MUSSET] VS is on (err=%d)", error ) - //if failed activation disabled = true - enabled = error != KErrNone; - //activation disabled = false/true(if failed) - iModel->SetActivationItem( enabled ); - - if ( error == KErrNone ) - { - MUS_LOG( "[MUSSET] Activation setting set on" ) - MultimediaSharingSettings::SetActivationSettingL( - MusSettingsKeys::EAlwaysActive ); - } - } - } - } - } - else - { - if ( MusSettingsKeys::EAlwaysActive == - MultimediaSharingSettings::ActivationSettingL() ) - { - MUS_LOG( "[MUSSET] Activation setting set off" ) - //MusSettingsKeys::ENever = 2 can not be used anymore - //EActiveInHomeNetworks = 1 is used instead -> off - MultimediaSharingSettings::SetActivationSettingL( - MusSettingsKeys::EActiveInHomeNetworks ); - } - else - { - MUS_LOG( "[MUSSET] Activation setting set on" ) - MultimediaSharingSettings::SetActivationSettingL( - MusSettingsKeys::EAlwaysActive ); - } - } - break; - } - case KGSSettIdAutoRecord: - { - if ( MusSettingsKeys::EAutoRecordOff == - MultimediaSharingSettings::AutoRecordSettingL() ) - { - MultimediaSharingSettings::SetAutoRecordSettingL( - MusSettingsKeys::EAutoRecordOn ); - } - else - { - MultimediaSharingSettings::SetAutoRecordSettingL( - MusSettingsKeys::EAutoRecordOff ); - } - break; - } - case KGSSettIdNote: - { - if ( MusSettingsKeys::EAuditoryNotificationOn == - MultimediaSharingSettings::AuditoryNotificationSettingL() ) - { - MultimediaSharingSettings::SetAuditoryNotificationSettingL( - MusSettingsKeys::EAuditoryNotificationOff ); - } - else - { - MultimediaSharingSettings::SetAuditoryNotificationSettingL( - MusSettingsKeys::EAuditoryNotificationOn ); - } - break; - } - default: - { - MUS_LOG( "[MUSSET] -> CMusSettingsPlugin::SwitchOnOffValueL() - error unknown setting" ) - User::Leave( KErrArgument ); - } - } - - Container()->UpdateListBoxL( aValue ); - - MUS_LOG( "[MUSSET] <- CMusSettingsPlugin::SwitchOnOffValueL()" ) + { + case KGSSettIdVSActivation: + { + if ( MusSettingsKeys::EAlwaysActive + == iModel->VSSettingsActivationL() ) + { + iModel->SetVSSettingsActivationL( MusSettingsKeys::ENever ); + } + else + { + iModel->SetVSSettingsActivationL( + MusSettingsKeys::EAlwaysActive ); + } + break; + } + case KGSSettIdAutoRecord: + { + if ( MusSettingsKeys::EAutoRecordOff == + iModel->VSSettingsAutoRecordL() ) + { + iModel->SetVSSettingsAutoRecordL( + MusSettingsKeys::EAutoRecordOn ); + } + else + { + iModel->SetVSSettingsAutoRecordL( + MusSettingsKeys::EAutoRecordOff ); + } + break; + } + case KGSSettIdRecordedVideoSaving: + { + TDriveUnit phoneMemUnit( + TParsePtrC( PathInfo::PhoneMemoryRootPath() ).Drive() ); + TDriveUnit mmcUnit( + TParsePtrC( PathInfo::MemoryCardRootPath() ).Drive() ); + + if ( ( TInt )phoneMemUnit + == iModel->VSSettingsRecordedVideoSavingL() ) + { + iModel->SetVSSettingsRecordedVideoSavingL( ( TInt )mmcUnit ); + } + else + { + iModel->SetVSSettingsRecordedVideoSavingL( ( TInt )phoneMemUnit ); + } + break; + } + case KGSSettIdNote: + { + if ( MusSettingsKeys::EAuditoryNotificationOn + == iModel->VSSettingsNoteL() ) + { + iModel->SetVSSettingsNoteL( + MusSettingsKeys::EAuditoryNotificationOff ); + } + else + { + iModel->SetVSSettingsNoteL( + MusSettingsKeys::EAuditoryNotificationOn ); + } + break; + } + default: + { + MUS_LOG( "[MUSSET] -> CMusSettingsPlugin::SwitchOnOffValueL() - error unknown setting" ) + User::Leave( KErrArgument ); + } + } } // ----------------------------------------------------------------------------- @@ -721,18 +859,16 @@ CleanupStack::PopAndDestroy( dlg ); } -// ----------------------------------------------------------------------------- +// ---------------------------------------------------------------------------- // From class CGSPluginInterface. // Creates a new icon of desired type. Overrided to provide custom icons. // Ownership of the created icon is transferred to the caller. -// ----------------------------------------------------------------------------- +// ---------------------------------------------------------------------------- // CGulIcon* CMusSettingsPlugin::CreateIconL( const TUid aIconType ) { MUS_LOG( "[MUSSET] -> CMusSettingsPlugin::CreateIconL()" ) - OpenResourceFileL(); - CGulIcon* icon; if( aIconType == KGSIconTypeLbxItem ) @@ -766,37 +902,3 @@ return icon; } -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusSettingsPlugin::OpenResourceFileL() - { - MUS_LOG( "[MUSSET] -> CMusSettingsPlugin::OpenResourceFileL()" ) - - if (!iResourceFileOpen) - { - HBufC* fileName = MusResourceFinderUtil::ResourcePathL( - KVSSettingsResourceFileName ); - TFileName fName(*fileName); - delete fileName; - MUS_LOG_TDESC( "[MUSSET] Resource FileName ",fName ) - iResources.OpenL(fName); - iResourceFileOpen = true; - } - - MUS_LOG( "[MUSSET] <- CMusSettingsPlugin::OpenResourceFileL()" ) - } - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusSettingsPlugin::CloseResourceFile() - { - MUS_LOG( "[MUSSET] -> CMusSettingsPlugin::CloseResourceFile()" ) - iResources.Close(); - iResourceFileOpen = false; - MUS_LOG( "[MUSSET] <- CMusSettingsPlugin::CloseResourceFile()" ) - } - diff -r 33a5d2bbf6fc -r 73a1feb507fb mmshplugins/mmshsettingsuiplugin/src/mussettingspluginimplementationtable.cpp --- a/mmshplugins/mmshsettingsuiplugin/src/mussettingspluginimplementationtable.cpp Thu Aug 19 09:51:39 2010 +0300 +++ b/mmshplugins/mmshsettingsuiplugin/src/mussettingspluginimplementationtable.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -20,7 +20,7 @@ #include "mussettingsplugin.h" #include #include -#include "muslogger.h" + // ======== LOCAL FUNCTIONS ======== @@ -41,7 +41,7 @@ EXPORT_C const TImplementationProxy* ImplementationGroupProxy( TInt& aTableCount ) { - MUS_LOG( "[GSLog] ImplementationGroupProxy()" ); + RDebug::Print(_L("[GSLog] ImplementationGroupProxy()" )); aTableCount = sizeof(KGSVSSettingsPluginImplementationTable) / sizeof(TImplementationProxy); return KGSVSSettingsPluginImplementationTable; diff -r 33a5d2bbf6fc -r 73a1feb507fb mmshplugins/mmshsettingsuiplugin/src/mussipprofilemodel.cpp --- a/mmshplugins/mmshsettingsuiplugin/src/mussipprofilemodel.cpp Thu Aug 19 09:51:39 2010 +0300 +++ b/mmshplugins/mmshsettingsuiplugin/src/mussipprofilemodel.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -12,56 +12,40 @@ * Contributors: * * Description: Model for managing SIP profiles. -* Version : %version: 19 % << Don't touch! Updated by Synergy at check-out. * */ -#include -#include #include "mussipprofilemodel.h" #include "muslogger.h" -#include "mussettings.inl" -#include "mussettingsmodel.h" +#include +#include +#include +#include +const TInt KSIPGranularity = 5; const TInt KUnknownProfileId = 0; // ======== MEMBER FUNCTIONS ======== -// ---------------------------------------------------------------------------- -// -// ---------------------------------------------------------------------------- -// CMusSIPProfileModel::CMusSIPProfileModel() { + MUS_LOG( "[MUSSET] <- CMusSIPProfileModel::CMusSIPProfileModel()" ) } -// ---------------------------------------------------------------------------- -// -// ---------------------------------------------------------------------------- -// + void CMusSIPProfileModel::ConstructL() { MUS_LOG( "[MUSSET] <- CMusSIPProfileModel::ConstructL()" ) - - MUS_LOG( "[MUSSET] Creating CSIPManagedProfileRegistry " ) iEngine = CSIPManagedProfileRegistry::NewL( *this ); - MUS_LOG( "[MUSSET] Done " ) - MUS_LOG( "[MUSSET] Getting profiles " ) - iEngine->ProfilesL( iProfiles ); - MUS_LOG( "[MUSSET] Done " ) - SortProfilesL(); - MUS_LOG( "[MUSSET] -> CMusSIPProfileModel::ConstructL()" ) + ReadArrayFromEngineL(); } -// ---------------------------------------------------------------------------- -// -// ---------------------------------------------------------------------------- -// + CMusSIPProfileModel* CMusSIPProfileModel::NewL() { MUS_LOG( "[MUSSET] -> CMusSIPProfileModel::NewL()" ) @@ -75,28 +59,30 @@ return self; } -// ---------------------------------------------------------------------------- -// -// ---------------------------------------------------------------------------- -// + CMusSIPProfileModel::~CMusSIPProfileModel() { MUS_LOG( "[MUSSET] -> CMusSIPProfileModel::~CMusSIPProfileModel()" ) - iProfiles.ResetAndDestroy(); + DeleteProfiles(); delete iEngine; + iEngine = NULL; MUS_LOG( "[MUSSET] <- CMusSIPProfileModel::~CMusSIPProfileModel()" ) } + // ---------------------------------------------------------------------------- -// Returns reference to the locally cached SIP profile array. +// Returns pointer to the locally cached SIP profile array. // ---------------------------------------------------------------------------- // -RPointerArray& CMusSIPProfileModel::ProfileArrayL() +CArrayPtr* CMusSIPProfileModel::ProfileArrayL() { - MUS_LOG( "[MUSSET] <-> CMusSIPProfileModel::ProfileArrayL()" ) + MUS_LOG( "[MUSSET] -> CMusSIPProfileModel::ProfileArrayL()" ) + ReadProfileListFromEngineSafeL(); + MUS_LOG( "[MUSSET] <- CMusSIPProfileModel::ProfileArrayL()" ) return iProfiles; } + // ---------------------------------------------------------------------------- // Returns index to the default SIP profile in locally cached array. // ---------------------------------------------------------------------------- @@ -106,12 +92,12 @@ MUS_LOG( "[MUSSET] -> CMusSIPProfileModel::DefaultProfileIndex()" ) TInt index( KErrNotFound ); - for ( TInt i = 0; i < iProfiles.Count(); i++ ) + for ( TInt i = 0; i < iProfiles->Count(); i++ ) { TBool defProfile( EFalse ); if ( KErrNone == - iProfiles[i]->GetParameter( KSIPDefaultProfile, defProfile ) + iProfiles->At( i )->GetParameter( KSIPDefaultProfile, defProfile ) && defProfile ) { index = i; @@ -124,6 +110,7 @@ return index; } + // ---------------------------------------------------------------------------- // Returns id of the default SIP profile. If default SIP profile is not found // KUnknownProfileId is returned. @@ -134,14 +121,16 @@ MUS_LOG( "[MUSSET] -> CMusSIPProfileModel::DefaultProfileId()" ) TUint32 id( KUnknownProfileId ); - for ( TInt i = 0; i < iProfiles.Count(); i++ ) + for ( TInt i = 0; i < iProfiles->Count(); i++ ) { TBool defProfile( EFalse ); - TInt error = iProfiles[i]->GetParameter( KSIPDefaultProfile, defProfile ); - if ( error == KErrNone && defProfile ) + if ( + KErrNone == + iProfiles->At( i )->GetParameter( KSIPDefaultProfile, defProfile ) + && defProfile ) { - iProfiles[i]->GetParameter( KSIPProfileId, id ); - break; + iProfiles->At( i )->GetParameter( KSIPProfileId, id ); + break; } } @@ -150,66 +139,6 @@ return id; } -// ----------------------------------------------------------------------------- -// Disable SIP Registration. -// ----------------------------------------------------------------------------- -// -void CMusSIPProfileModel::DisableProfileL() - { - MUS_LOG( "[MUSSET] -> CMusSIPProfileModel::DisableProfileL " ) - CSIPManagedProfile* managedProfile = static_cast( - iEngine->ProfileL( DefaultProfileId()) ); - CleanupStack::PushL( managedProfile ); - MUS_LOG( "[MUSSET] Add registration parameter to profile.dat file " ) - //set autoregistration off (i.e. when needed) => disable profile - User::LeaveIfError( managedProfile->SetParameter( KSIPAutoRegistration, EFalse ) ); - MUS_LOG( "[MUSSET] Saving profile " ) - iEngine->SaveL( *managedProfile ); - MUS_LOG( "[MUSSET] Saved" ) - CleanupStack::PopAndDestroy( managedProfile ); - MUS_LOG( "[MUSSET] <- CMusSIPProfileModel::DisableProfileL " ) - } - -// ----------------------------------------------------------------------------- -// Enable SIP Registration. -// ----------------------------------------------------------------------------- -// -void CMusSIPProfileModel::EnableProfileL() - { - MUS_LOG( "[MUSSET] -> CMusSIPProfileModel::EnableProfileL " ) - CSIPManagedProfile* managedProfile = static_cast( - iEngine->ProfileL( DefaultProfileId() ) ); - CleanupStack::PushL( managedProfile ); - MUS_LOG( "[MUSSET] Add registration parameters to profile.dat file " ) - //set autoregistration on (i.e. always on) => enable profile - User::LeaveIfError( managedProfile->SetParameter( KSIPAutoRegistration, ETrue ) ); - MUS_LOG( "[MUSSET] Saving profile " ) - iEngine->SaveL( *managedProfile ); - MUS_LOG( "[MUSSET] Saved" ) - CleanupStack::PopAndDestroy( managedProfile ); - MUS_LOG( "[MUSSET] <- CMusSIPProfileModel::EnableRegisterL " ) - } - -// ----------------------------------------------------------------------------- -// if SIP Registration enabled. -// ----------------------------------------------------------------------------- -// -TBool CMusSIPProfileModel::ProfileEnabledL() - { - MUS_LOG( "[MUSSET] -> CMusSIPProfileModel::ProfileEnabledL " ) - CSIPManagedProfile* managedProfile = static_cast( - iEngine->ProfileL( DefaultProfileId() ) ); - CleanupStack::PushL( managedProfile ); - TBool enabled; - MUS_LOG( "[MUSSET] Getting KSIPAutoRegistration" ) - User::LeaveIfError( - managedProfile->GetParameter( KSIPAutoRegistration, enabled ) ); - MUS_LOG( "[MUSSET] Done" ) - MUS_LOG1( "[MUSSET] KSIPAutoRegistration=%d", enabled ) - CleanupStack::PopAndDestroy( managedProfile ); - MUS_LOG( "[MUSSET] <- CMusSIPProfileModel::ProfileEnabledL " ) - return enabled; - } // ---------------------------------------------------------------------------- // Returns index of the default SIP profile on locally cached array. If default @@ -220,12 +149,14 @@ { MUS_LOG( "[MUSSET] -> CMusSIPProfileModel::ProfileIndexByIdL()" ) TInt index( KErrNotFound ); - - for ( TInt i = 0; i < iProfiles.Count(); i++ ) + + ReadProfileListFromEngineSafeL(); + for ( TInt i = 0; i < iProfiles->Count(); i++ ) { TUint32 id( KUnknownProfileId ); - TInt error = iProfiles[i]->GetParameter( KSIPProfileId, id ); - if ( error == KErrNone && id == aId ) + + if ( KErrNone == iProfiles->At( i )->GetParameter( KSIPProfileId, id ) + && id == aId ) { index = i; break; @@ -247,9 +178,10 @@ MUS_LOG1( "[MUSSET] -> CMusSIPProfileModel::ProfileIdByIndex()( %d )", aIndex ) TUint32 profileId( KUnknownProfileId ); - if ( aIndex < iProfiles.Count() ) + if ( iProfiles->Count() > aIndex ) { - if ( iProfiles[aIndex]->GetParameter( KSIPProfileId, profileId ) ) + if ( iProfiles->At( aIndex )->GetParameter( + KSIPProfileId, profileId ) ) { profileId = KUnknownProfileId; } @@ -259,6 +191,41 @@ return profileId; } + +// ---------------------------------------------------------------------------- +// Reads SIP profiles from SIP Profile Client array to locally cached array. +// ---------------------------------------------------------------------------- +// +void CMusSIPProfileModel::ReadArrayFromEngineL() + { + MUS_LOG( "[MUSSET] -> CMusSIPProfileModel::ReadArrayFromEngineL()" ) + + DeleteProfiles(); + + // Create the profile pointer array + iProfiles = + new ( ELeave ) CArrayPtrFlat( KSIPGranularity ); + + RPointerArray profilePointerArray; + TCleanupItem clItem( ResetAndDestroy, &profilePointerArray ); + CleanupStack::PushL( clItem ); + + iEngine->ProfilesL( profilePointerArray ); + for ( TInt i = 0; i < profilePointerArray.Count(); i++ ) + { + iProfiles->AppendL( + static_cast( profilePointerArray[i] ) ); + } + + profilePointerArray.Reset(); + CleanupStack::PopAndDestroy(); // clItem (profilePointerArray) + + SortProfilesL(); + + MUS_LOG( "[MUSSET] <- CMusSIPProfileModel::ReadArrayFromEngineL()" ) + } + + // ---------------------------------------------------------------------------- // Sorts internal array of SIP profiles by id. Used algorithm is generally // slower than quicksort and selectionsort but very feasible for expected @@ -269,69 +236,52 @@ { TUint32 profileIdFirst( 0 ); TUint32 profileIdSecond( 0 ); - for ( TInt a = 0; a < iProfiles.Count() - 1; a++ ) + for ( TInt a = 0; a < iProfiles->Count() - 1; a++ ) { - for ( TInt b = a + 1; b < iProfiles.Count(); b++ ) + for ( TInt b = a + 1; b < iProfiles->Count(); b++ ) { - User::LeaveIfError( iProfiles[a]->GetParameter( + User::LeaveIfError( iProfiles->At( a )->GetParameter( KSIPProfileId, profileIdFirst ) ); - User::LeaveIfError( iProfiles[b]->GetParameter( + User::LeaveIfError( iProfiles->At( b )->GetParameter( KSIPProfileId, profileIdSecond ) ); if ( profileIdFirst > profileIdSecond ) { - CSIPProfile* tmp = iProfiles[b]; - iProfiles[b] = iProfiles[a]; - iProfiles[a] = tmp; + CSIPManagedProfile* tmp = iProfiles->At( b ); + iProfiles->At( b ) = iProfiles->At( a ); + iProfiles->At( a ) = tmp; } } } } + +// ---------------------------------------------------------------------------- +// Deletes internally cached SIP profiles. +// ---------------------------------------------------------------------------- +// +void CMusSIPProfileModel::DeleteProfiles() + { + if ( iProfiles ) + { + iProfiles->ResetAndDestroy(); + delete iProfiles; + iProfiles = NULL; + } + } + + // ---------------------------------------------------------------------------- // From class MSIPProfileRegistryObserver. // Notifies of an event in SIP profile registry. // ---------------------------------------------------------------------------- // void CMusSIPProfileModel::ProfileRegistryEventOccurred( - TUint32 aSIPProfileId, TEvent aEvent ) - { - MUS_LOG("[MUSSET] -> CMusSIPProfileModel::ProfileRegistryEventOccurred()" ) - MUS_LOG2(" SIPProfileId is %d,Event is %d",aSIPProfileId,aEvent) - - // We revert back to default settings if the profile used by MuS is deleted - if ( aEvent == EProfileDestroyed ) - { - TRAP_IGNORE( - //if the profile is the profile used by mush - if ( MultimediaSharingSettings::SipProfileSettingL() == - aSIPProfileId ) - { - //set the profile to default - MultimediaSharingSettings::SetSipProfileSettingL( - CMusSettingsModel::KVsSipProfileDefault ); - //set mush off - MultimediaSharingSettings::SetActivationSettingL( - MusSettingsKeys::EActiveInHomeNetworks ); - } - ); - } - - if ( aEvent == EProfileCreated || - aEvent == EProfileUpdated || - aEvent == EProfileDestroyed ) - { - // Profiles have been manipulated in SIP side, we must delete client - // side profile objects and retrieve them again. If fetching fails, - // we have empty array which is better than showing wrong values to - // user. - iProfiles.ResetAndDestroy(); - TRAP_IGNORE( iEngine->ProfilesL( iProfiles ) ); - TRAP_IGNORE( SortProfilesL() ); - } - + TUint32 /*aSIPProfileId*/, TEvent /*aEvent*/ ) + { MUS_LOG( "[MUSSET] <- CMusSIPProfileModel::ProfileRegistryEventOccurred()" ) } + // ---------------------------------------------------------------------------- // From class MSIPProfileRegistryObserver. // An asynchronous error has occurred related to SIP profile @@ -344,11 +294,50 @@ MUS_LOG( "[MUSSET] <- CMusSIPProfileModel::ProfileRegistryErrorOccurred()" ) } + // ---------------------------------------------------------------------------- -//Set CMusSettingsModel to handle ProfileRegistry Event. +// Reads SIP profile list from engine; if reading fails, old cached list is +// kept and returned. // ---------------------------------------------------------------------------- // -void CMusSIPProfileModel::SetCMusSettingsModel(CMusSettingsModel* aCMusSettingsModel) - { - iCMusSettingsModel = aCMusSettingsModel; - } +void CMusSIPProfileModel::ReadProfileListFromEngineSafeL() + { + MUS_LOG( + "[MUSSET] -> CMusSIPProfileModel::ReadProfileListFromEngineSafeL()" ) + // To prevent complete disaster it we'll save the pointer of the old array + CArrayPtrFlat* profiles = iProfiles; + iProfiles = 0; + TRAPD( error, ReadArrayFromEngineL() ); + + if ( error ) + { + // Problems with re-reading profiles; use existing array + DeleteProfiles(); + iProfiles = profiles; + User::Leave( error ); + } + else + { + // No problems; delete backup array + profiles->ResetAndDestroy(); + delete profiles; + } + MUS_LOG( + "[MUSSET] <- CMusSIPProfileModel::ReadProfileListFromEngineSafeL()" ) + } + + +// ---------------------------------------------------------------------------- +// For deleting RPointerArray in case of leave (used in association with +// TCleanupItem). +// ---------------------------------------------------------------------------- +// +void CMusSIPProfileModel::ResetAndDestroy( TAny* aPointerArray ) + { + MUS_LOG( "[MUSSET] -> CMusSIPProfileModel::ResetAndDestroy()" ) + RPointerArray* array = + static_cast*>( aPointerArray ); + array->ResetAndDestroy(); + array->Close(); + MUS_LOG( "[MUSSET] <- CMusSIPProfileModel::ResetAndDestroy()" ) + } diff -r 33a5d2bbf6fc -r 73a1feb507fb mmshplugins/mmshsipcrplugin/group/mussipcrplugin.mmp --- a/mmshplugins/mmshsipcrplugin/group/mussipcrplugin.mmp Thu Aug 19 09:51:39 2010 +0300 +++ b/mmshplugins/mmshsipcrplugin/group/mussipcrplugin.mmp Tue Aug 31 15:12:07 2010 +0300 @@ -51,8 +51,9 @@ LIBRARY sipclient.lib // SIP Client API LIBRARY sipprofilecli.lib // SIP Profile Agent Client API LIBRARY sipcodec.lib // SIP Codec -LIBRARY featmgr.lib +LIBRARY sdpcodec.lib // SDP Codec +LIBRARY centralrepository.lib // for MultimediaSharingSettings + DEBUGLIBRARY flogger.lib // file logger PAGED - diff -r 33a5d2bbf6fc -r 73a1feb507fb mmshplugins/mmshsipcrplugin/inc/mussipcrplugin.h --- a/mmshplugins/mmshsipcrplugin/inc/mussipcrplugin.h Thu Aug 19 09:51:39 2010 +0300 +++ b/mmshplugins/mmshsipcrplugin/inc/mussipcrplugin.h Tue Aug 31 15:12:07 2010 +0300 @@ -26,6 +26,7 @@ #include class CMusManager; +class CSdpMediaField; IMPORT_C const TImplementationProxy* ImplementationGroupProxy( TInt& aTableCount ); @@ -86,14 +87,20 @@ */ const TDesC8& Capabilities(); -private: // data - - TUid DoChannelL( RStringF aMethod ); - +private: // New functions + + /** + * Check whether video field has sendrecv attribute + * @return ETrue if video has sendrecv attribute, EFalse otherwise + */ + TBool CheckForSendRecvAttributeL( + RPointerArray& aFields ) const; + private: // data CMusManager* iManager; - + TBool iCloseStringPool; + }; diff -r 33a5d2bbf6fc -r 73a1feb507fb mmshplugins/mmshsipcrplugin/src/mussipcrplugin.cpp --- a/mmshplugins/mmshsipcrplugin/src/mussipcrplugin.cpp Thu Aug 19 09:51:39 2010 +0300 +++ b/mmshplugins/mmshsipcrplugin/src/mussipcrplugin.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -24,10 +24,20 @@ #include "musmanager.h" #include "musuid.hrh" #include "musunittesting.h" +#include "mussettings.h" +#include #include #include -#include +#include +#include +#include +#include +#include + +_LIT8( KSendRecv, "sendrecv"); // For attribute checks +_LIT8( KRecvOnly, "recvonly"); // For attribute checks +_LIT8( KSendOnly, "sendonly" ); // For attribute checks _LIT8(KCapabilities, "\ @@ -45,6 +55,7 @@ \ "); + // ------------------------------------------------------------------------- // Two-phased constructor. // ------------------------------------------------------------------------- @@ -69,6 +80,10 @@ { MUS_LOG( "mus: [MUSSCR] -> CMusSipCrPlugin::~CMusSipCrPlugin()" ); delete iManager; + if ( iCloseStringPool ) + { + SdpCodecStringPool::Close(); + } MUS_LOG( "mus: [MUSSCR] <- CMusSipCrPlugin::~CMusSipCrPlugin()" ); } @@ -90,6 +105,31 @@ { MUS_LOG( "mus: [MUSSCR] -> CMusSipCrPlugin::ConstructL()" ); iManager = CMusManager::NewL(); + + TRAPD( err, SdpCodecStringPool::OpenL() ); + + switch ( err ) + { + case KErrNone: + { + //close pool at destructor, not opened by others + iCloseStringPool = ETrue; + break; + } + + case KErrAlreadyExists: + { + //already opened, do not try to close at destructor + iCloseStringPool = EFalse; + break; + } + + default: + { + User::Leave( err ); + } + } + MUS_LOG( "mus: [MUSSCR] <- CMusSipCrPlugin::ConstructL()" ); } @@ -101,34 +141,16 @@ TUid CMusSipCrPlugin::ChannelL( RStringF aMethod, const TDesC8& /*aRequestUri*/, const RPointerArray& /*aHeaders*/, - const TDesC8& /*aContent*/, - const CSIPContentTypeHeader* /*aContentType*/) + const TDesC8& aContent, + const CSIPContentTypeHeader* /*aContentType*/ ) { - FeatureManager::InitializeLibL(); - TBool support = FeatureManager::FeatureSupported( KFeatureIdMultimediaSharing ); - FeatureManager::UnInitializeLib(); - TUid uid; - uid.iUid = ( TInt ) CMusManager::ESipInviteNotDesired; - if ( support ) - { - uid = DoChannelL( aMethod ); - } - return uid; - } - - -// ------------------------------------------------------------------------- -// CMusSipCrPlugin::DoChannelL -// ------------------------------------------------------------------------- -TUid CMusSipCrPlugin::DoChannelL( RStringF aMethod ) - { - MUS_LOG( "mus: [MUSSCR] -> CMusSipCrPlugin::DoChannelL()" ); - + MUS_LOG( "mus: [MUSSCR] -> CMusSipCrPlugin::ChannelL()" ); + if ( aMethod == SIPStrings::StringF( SipStrConsts::EOptions ) ) { TUid uid; uid.iUid = ( TInt ) CMusManager::ESipOptions; - MUS_LOG1( "mus: [MUSSCR] <- CMusSipCrPlugin::DoChannelL(): KSipOptions %d", + MUS_LOG1( "mus: [MUSSCR] <- CMusSipCrPlugin::ChannelL(): KSipOptions %d", uid.iUid ); return uid; } @@ -142,7 +164,7 @@ { TUid uid; uid.iUid = ( TInt ) CMusManager::ESipInviteNotDesired; - MUS_LOG1( "mus: [MUSSCR] <- CMusSipCrPlugin::DoChannelL(): \ + MUS_LOG1( "mus: [MUSSCR] <- CMusSipCrPlugin::ChannelL(): \ KNotAllowedSipInvite %d", uid.iUid ); return uid; } @@ -150,14 +172,90 @@ { TUid uid; uid.iUid = ( TInt ) CMusManager::ESipInviteDesired; - MUS_LOG1( "mus: [MUSSCR] <- CMusSipCrPlugin::DoChannelL(): \ + TBool twoWaySupported = MultimediaSharingSettings::VideoDirectionL() == + MusSettingsKeys::ETwoWayVideo; + + if ( ( aContent.Length() > 0 ) && twoWaySupported ) + { + MUS_LOG( "mus: [MUSSCR] 2 way supported, parsing SDP..." ); + CSdpDocument* sdpDocument = CSdpDocument::DecodeLC( aContent ); + TBool sendRecv = CheckForSendRecvAttributeL( sdpDocument->MediaFields() ); + if ( sendRecv ) + { + uid.iUid = ( TInt ) CMusManager::ESipInviteDesired2WayVideo; + } + + CleanupStack::PopAndDestroy( sdpDocument ); + } + + MUS_LOG1( "mus: [MUSSCR] <- CMusSipCrPlugin::ChannelL(): \ KAllowedSipInvite %d", uid.iUid ); return uid; } } } - +// ------------------------------------------------------------------------- +// CMusSipCrPlugin::CheckForSendRecvAttribute +// ------------------------------------------------------------------------- +// +TBool CMusSipCrPlugin::CheckForSendRecvAttributeL( + RPointerArray& aFields ) const + { + MUS_LOG( "mus: [MUSSCR] -> CMusSipCrPlugin::CheckForSendRecvAttribute()" ); + + TBool sendRecv = EFalse; + TBool sendAttrFound = EFalse; + TBool videoFound = EFalse; + RStringF videoType = SdpCodecStringPool::StringPoolL().StringF( + SdpCodecStringConstants::EMediaVideo, + SdpCodecStringPool::StringTableL() ); + const TInt fieldcount = aFields.Count(); + + for ( TInt i = 0; i < fieldcount && !videoFound; i++ ) + { + CSdpMediaField* mField = aFields[i]; + + //only check video fields + videoFound = mField->Media() == videoType; + + if ( videoFound ) + { + RPointerArray< CSdpAttributeField > attrList = + mField->AttributeFields(); + + TInt attrCount = attrList.Count(); + for (TInt j = 0; j < attrCount && !sendAttrFound; j++ ) + { + CSdpAttributeField* attributeField = attrList[j]; + RStringF attribute = attributeField->Attribute(); + + if ( KErrNotFound != attribute.DesC().FindF( KSendRecv ) ) + { + sendRecv = ETrue; + sendAttrFound = ETrue; + MUS_LOG( "mus: [MUSSCR] attribute found!" ); + } + else if ( ( KErrNotFound != attribute.DesC().FindF( KSendOnly ) ) || + ( KErrNotFound != attribute.DesC().FindF( KRecvOnly ) ) ) + { + MUS_LOG( "mus: [MUSSCR] / attribute found!" ); + sendAttrFound = ETrue; + } + } + + if ( !sendAttrFound ) + { + MUS_LOG( "mus: [MUSSCR] no send/recv related attributes found!" ); + sendRecv = ETrue; + } + } + } + MUS_LOG1( "mus: [MUSSCR] <- CMusSipCrPlugin::CheckForSendRecvAttribute(), \ + sendrecv: %d", sendRecv ); + + return sendRecv; + } // ------------------------------------------------------------------------- // CMusSipCrPlugin::ConnectL @@ -168,6 +266,7 @@ MUS_LOG1( "mus: [MUSSCR] -> CMusSipCrPlugin::ConnectL( %d )", aUid.iUid ); if ( aUid.iUid == CMusManager::ESipOptions || aUid.iUid == CMusManager::ESipInviteDesired || + aUid.iUid == CMusManager::ESipInviteDesired2WayVideo || aUid.iUid == CMusManager::ESipInviteNotDesired ) { iManager->HandleSipRequestL(( CMusManager::TRequestType ) aUid.iUid ); diff -r 33a5d2bbf6fc -r 73a1feb507fb mmshplugins/mmshsipcrplugin/tsrc/ut_sipcrplugin/group/bld.inf --- a/mmshplugins/mmshsipcrplugin/tsrc/ut_sipcrplugin/group/bld.inf Thu Aug 19 09:51:39 2010 +0300 +++ b/mmshplugins/mmshsipcrplugin/tsrc/ut_sipcrplugin/group/bld.inf Tue Aug 31 15:12:07 2010 +0300 @@ -15,5 +15,5 @@ * */ -PRJ_TESTMMPFILES +PRJ_MMPFILES ut_sipcrplugin.mmp \ No newline at end of file diff -r 33a5d2bbf6fc -r 73a1feb507fb mmshplugins/mmshsipcrplugin/tsrc/ut_sipcrplugin/group/ut_sipcrplugin.mmp --- a/mmshplugins/mmshsipcrplugin/tsrc/ut_sipcrplugin/group/ut_sipcrplugin.mmp Thu Aug 19 09:51:39 2010 +0300 +++ b/mmshplugins/mmshsipcrplugin/tsrc/ut_sipcrplugin/group/ut_sipcrplugin.mmp Tue Aug 31 15:12:07 2010 +0300 @@ -17,7 +17,7 @@ #include -#include +#include TARGET ut_sipcrplugin.dll TARGETTYPE dll @@ -25,8 +25,7 @@ TARGETPATH /DigiaEUnit/Tests UID 0x1000af5a 0x01700a21 -CAPABILITY EUNIT_CAPS - +CAPABILITY EUNIT_CAPS VENDORID VID_DEFAULT MACRO UNIT_TESTING @@ -42,10 +41,10 @@ SOURCEPATH ../../../../../tsrc/musmanagerstub/src SOURCE musmanagerstub.cpp -SOURCEPATH ../../../../../tsrc/featmgrstub/src -SOURCE FeatMgr.cpp +SOURCEPATH ../../../../../tsrc/multimediasharingsettingsstub/src +SOURCE mussettings.cpp -USERINCLUDE ../../../../../tsrc/featmgrstub/inc +USERINCLUDE ../../../../../tsrc/multimediasharingsettingsstub/inc USERINCLUDE ../inc USERINCLUDE ../../../inc USERINCLUDE ../../../../../inc @@ -61,6 +60,9 @@ LIBRARY sipclient.lib // SIP Client API LIBRARY sipprofilecli.lib // SIP Profile Agent Client API LIBRARY sipcodec.lib // SIP Codec +LIBRARY sdpcodec.lib // SDP Codec +LIBRARY bafl.lib // Basic Application Framework Library + EXPORTUNFROZEN diff -r 33a5d2bbf6fc -r 73a1feb507fb mmshplugins/mmshsipcrplugin/tsrc/ut_sipcrplugin/group/ut_sipcrplugin.pkg --- a/mmshplugins/mmshsipcrplugin/tsrc/ut_sipcrplugin/group/ut_sipcrplugin.pkg Thu Aug 19 09:51:39 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,32 +0,0 @@ -; -; Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). -; All rights reserved. -; This component and the accompanying materials are made available -; under the terms of "Eclipse Public License v1.0" -; which accompanies this distribution, and is available -; at the URL "http://www.eclipse.org/legal/epl-v10.html". -; -; Initial Contributors: -; Nokia Corporation - initial contribution. -; -; Contributors: -; -; Description: -; - -;Languages -&EN - -;Header -#{"EUnit: MMSHSIPCRPl"},(0x01700000),1,0,0 - -(0x101F7961), 0, 0, 0, {"Series60ProductID"} - -;Localised Vendor name -%{"Nokia"} - -;Unique vendor name -:"Nokia" - -;DLL files -"\epoc32\release\armv5\urel\ut_sipcrplugin.dll"-"c:\sys\bin\ut_sipcrplugin.dll" diff -r 33a5d2bbf6fc -r 73a1feb507fb mmshplugins/mmshsipcrplugin/tsrc/ut_sipcrplugin/inc/mussipcrplugintest.h --- a/mmshplugins/mmshsipcrplugin/tsrc/ut_sipcrplugin/inc/mussipcrplugintest.h Thu Aug 19 09:51:39 2010 +0300 +++ b/mmshplugins/mmshsipcrplugin/tsrc/ut_sipcrplugin/inc/mussipcrplugintest.h Tue Aug 31 15:12:07 2010 +0300 @@ -63,6 +63,8 @@ public: // Test functions + void UT_ConstructL(); + void UT_ChannelL(); void UT_ConnectL(); @@ -71,6 +73,7 @@ void UT_ImplementationGroupProxy(); + void UT_CheckForSendRecvAttributeL(); public: void SetupL(); diff -r 33a5d2bbf6fc -r 73a1feb507fb mmshplugins/mmshsipcrplugin/tsrc/ut_sipcrplugin/src/mussipcrplugintest.cpp --- a/mmshplugins/mmshsipcrplugin/tsrc/ut_sipcrplugin/src/mussipcrplugintest.cpp Thu Aug 19 09:51:39 2010 +0300 +++ b/mmshplugins/mmshsipcrplugin/tsrc/ut_sipcrplugin/src/mussipcrplugintest.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -15,25 +15,76 @@ * */ -#include + #include "musunittesting.h" #include "musmanagerstub.h" #include "mussipcrplugin.h" #include "mussipcrplugintest.h" #include "muslogger.h" #include "musmanager.h" +#include "mussettings.h" #include #include #include #include +#include #include -#include "FeatMgr.h" - +#include +#include // Next row is to disable warning emerging from EUnit code. #pragma warn_illtokenpasting off +_LIT8( KSdpSendOnly, "v=0\r\n\ +o=Inviter2008 63241204263093750 132223800 IN IP4 10.0.0.6\r\n\ +s=-\r\n\ +c=IN IP4 10.0.0.6\r\n\ +t=0 0\r\n\ +m=video 49152 RTP/AVP 98\r\n\ +a=sendonly\r\n\ +a=rtpmap:98 H264/90000\r\n" ); + +_LIT8( KSdpSendRecv, "v=0\r\n\ +o=Inviter2008 63241204263093750 132223800 IN IP4 10.0.0.6\r\n\ +s=-\r\n\ +c=IN IP4 10.0.0.6\r\n\ +t=0 0\r\n\ +m=video 49152 RTP/AVP 98\r\n\ +a=sendrecv\r\n\ +a=rtpmap:98 H264/90000\r\n" ); + +_LIT8( KSdpNoMedia, "v=0\r\n\ +o=Inviter2008 63241204263093750 132223800 IN IP4 10.0.0.6\r\n\ +s=-\r\n\ +c=IN IP4 10.0.0.6\r\n\ +t=0 0\r\n" ); + +_LIT8( KSdpNoVideo, "v=0\r\n\ +o=Inviter2008 63241204263093750 132223800 IN IP4 10.0.0.6\r\n\ +s=-\r\n\ +c=IN IP4 10.0.0.6\r\n\ +t=0 0\r\n\ +m=audio 5000 RTP/AVP 106 8 0\r\n\ +a=sendrecv\r\n\ +a=rtpmap:106 AMR/8000\r\n" ); + +_LIT8( KSdpVideoNoAttributes, "v=0\r\n\ +o=Inviter2008 63241204263093750 132223800 IN IP4 10.0.0.6\r\n\ +s=-\r\n\ +c=IN IP4 10.0.0.6\r\n\ +t=0 0\r\n\ +m=video 49152 RTP/AVP 98\r\n" ); + +_LIT8( KSdpRecvOnly, "v=0\r\n\ +o=Inviter2008 63241204263093750 132223800 IN IP4 10.0.0.6\r\n\ +s=-\r\n\ +c=IN IP4 10.0.0.6\r\n\ +t=0 0\r\n\ +m=video 49152 RTP/AVP 98\r\n\ +a=recvonly\r\n\ +a=rtpmap:98 H264/90000\r\n" ); + // -------------------------------------------------------------------------- // C++ constructor. @@ -89,6 +140,7 @@ void CMusSipCrPluginTest::SetupL( ) { iPlugin = CMusSipCrPlugin::NewL(); + SIPStrings::OpenL(); } @@ -98,6 +150,7 @@ // void CMusSipCrPluginTest::Teardown( ) { + SIPStrings::Close(); delete iPlugin; } @@ -105,6 +158,29 @@ // ------------------------- Test functions begin --------------------------- +// -------------------------------------------------------------------------- +// +// -------------------------------------------------------------------------- +// +void CMusSipCrPluginTest::UT_ConstructL() + { + // 1. String pool was opend by us + EUNIT_ASSERT( iPlugin->iCloseStringPool ); + + // 2. String pool was already opened by someone else, KErrAlreadyExists + delete iPlugin; + iPlugin = NULL; + SdpCodecStringPool::OpenL(); + TRAPD( err, iPlugin = CMusSipCrPlugin::NewL() ); + if ( err != KErrNone ) + { + SdpCodecStringPool::Close(); + User::Leave(err); + } + EUNIT_ASSERT( !iPlugin->iCloseStringPool ); + SdpCodecStringPool::Close(); + } + // -------------------------------------------------------------------------- // @@ -112,8 +188,6 @@ // void CMusSipCrPluginTest::UT_ChannelL() { - SIPStrings::OpenL(); - RPointerArray array; TUid response; @@ -128,7 +202,7 @@ EUNIT_ASSERT( response.iUid == CMusManager::ESipOptions ) - // Everything is OK + // Everything is OK, 2-way video not supported CMusManager::SetAvailability( ( MultimediaSharing::TMusAvailabilityStatus ) KErrNone ); @@ -162,53 +236,28 @@ NULL ); EUNIT_ASSERT( response.iUid == CMusManager::ESipInviteNotDesired ) - //Feature Manager testing - FeatureManager::MultimediaSharingNotSupported(); - response = iPlugin->ChannelL( - SIPStrings::StringF( SipStrConsts::EOptions ), - KNullDesC8(), - array, - KNullDesC8(), - NULL ); - - EUNIT_ASSERT( response.iUid == CMusManager::ESipInviteNotDesired ) - // Everything is OK + + // 2-way video is supported and sendrecv not present in SDP + MultimediaSharingSettings::iVideoDirection = MusSettingsKeys::ETwoWayVideo; CMusManager::SetAvailability( ( MultimediaSharing::TMusAvailabilityStatus ) KErrNone ); - + response = iPlugin->ChannelL( SIPStrings::StringF( SipStrConsts::EMessage ), KNullDesC8(), array, - KNullDesC8(), + KSdpSendOnly(), NULL ); + + EUNIT_ASSERT( response.iUid == CMusManager::ESipInviteDesired ) - EUNIT_ASSERT( response.iUid == CMusManager::ESipInviteNotDesired ) - - // Server is shut down - CMusManager::SetAvailability( MultimediaSharing::EErrServerShutDown ); - + // 2-way video is supported and sendrecv is present in SDP response = iPlugin->ChannelL( SIPStrings::StringF( SipStrConsts::EMessage ), KNullDesC8(), array, - KNullDesC8(), + KSdpSendRecv(), NULL ); - - EUNIT_ASSERT( response.iUid == CMusManager::ESipInviteNotDesired ) - - // Mus is not supported - CMusManager::SetAvailability( - ( MultimediaSharing::TMusAvailabilityStatus ) KErrNotSupported ); - - response = iPlugin->ChannelL( SIPStrings::StringF( SipStrConsts::EMessage ), - KNullDesC8(), - array, - KNullDesC8(), - NULL ); - - EUNIT_ASSERT( response.iUid == CMusManager::ESipInviteNotDesired ) - FeatureManager::MultimediaSharingSupported(); - SIPStrings::Close(); - + + EUNIT_ASSERT( response.iUid == CMusManager::ESipInviteDesired2WayVideo ) } @@ -269,6 +318,45 @@ } +// -------------------------------------------------------------------------- +// +// -------------------------------------------------------------------------- +// +void CMusSipCrPluginTest::UT_CheckForSendRecvAttributeL() + { + CSdpDocument* sdpDocument; + TBool sendRecv; + + // 1. SDP doesn't have a single media field + sdpDocument = CSdpDocument::DecodeLC( KSdpNoMedia() ); + sendRecv = iPlugin->CheckForSendRecvAttributeL( sdpDocument->MediaFields() ); + CleanupStack::PopAndDestroy( sdpDocument ); + EUNIT_ASSERT( !sendRecv ); + + // 2. SDP has audio field, but no video + sdpDocument = CSdpDocument::DecodeLC( KSdpNoVideo() ); + sendRecv = iPlugin->CheckForSendRecvAttributeL( sdpDocument->MediaFields() ); + CleanupStack::PopAndDestroy( sdpDocument ); + EUNIT_ASSERT( !sendRecv ); + + // 3. SDP has video field without any attributes + sdpDocument = CSdpDocument::DecodeLC( KSdpVideoNoAttributes() ); + sendRecv = iPlugin->CheckForSendRecvAttributeL( sdpDocument->MediaFields() ); + CleanupStack::PopAndDestroy( sdpDocument ); + EUNIT_ASSERT( sendRecv ); + + // 4. SDP has video with "sendrecv" attribute + sdpDocument = CSdpDocument::DecodeLC( KSdpSendRecv() ); + sendRecv = iPlugin->CheckForSendRecvAttributeL( sdpDocument->MediaFields() ); + CleanupStack::PopAndDestroy( sdpDocument ); + EUNIT_ASSERT( sendRecv ); + + // 5. SDP has video with "recvonly" attribute + sdpDocument = CSdpDocument::DecodeLC( KSdpRecvOnly() ); + sendRecv = iPlugin->CheckForSendRecvAttributeL( sdpDocument->MediaFields() ); + CleanupStack::PopAndDestroy( sdpDocument ); + EUNIT_ASSERT( !sendRecv ); + } // TEST TABLE @@ -277,6 +365,13 @@ CMusSipCrPluginTest, "CMusSipCrPluginTest", "CMusSipCrPluginTest" ) + +EUNIT_TEST( + "ConstructL - test", + "CMusSipCrPluginTest", + "UT_ConstructL", + "FUNCTIONALITY", + SetupL, UT_ConstructL, Teardown) EUNIT_TEST( "CMusSipCrPluginTest", @@ -306,5 +401,12 @@ "FUNCTIONALITY", SetupL, UT_ImplementationGroupProxy, Teardown) +EUNIT_TEST( + "CheckForSendRecvAttribute - stest", + "CMusSipCrPluginTest", + "UT_CheckForSendRecvAttribute", + "FUNCTIONALITY", + SetupL, UT_CheckForSendRecvAttributeL, Teardown) + EUNIT_END_TEST_TABLE diff -r 33a5d2bbf6fc -r 73a1feb507fb mmshplugins/mmshwpadapterplugin/src/muswpitem.cpp --- a/mmshplugins/mmshwpadapterplugin/src/muswpitem.cpp Thu Aug 19 09:51:39 2010 +0300 +++ b/mmshplugins/mmshwpadapterplugin/src/muswpitem.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -210,7 +210,7 @@ } else if ( aValue == KMusWpActivationConditionInHome() ) { - iActivationCondition = MusSettingsKeys::EAlwaysActive; + iActivationCondition = MusSettingsKeys::EActiveInHomeNetworks; } else if ( aValue == KMusWpActivationConditionNever ) { diff -r 33a5d2bbf6fc -r 73a1feb507fb mmshplugins/mmshwpadapterplugin/tsrc/ut_wpadapterplugin/group/bld.inf --- a/mmshplugins/mmshwpadapterplugin/tsrc/ut_wpadapterplugin/group/bld.inf Thu Aug 19 09:51:39 2010 +0300 +++ b/mmshplugins/mmshwpadapterplugin/tsrc/ut_wpadapterplugin/group/bld.inf Tue Aug 31 15:12:07 2010 +0300 @@ -15,6 +15,6 @@ * */ -PRJ_TESTMMPFILES +PRJ_MMPFILES ut_muswpadapter.mmp diff -r 33a5d2bbf6fc -r 73a1feb507fb mmshplugins/mmshwpadapterplugin/tsrc/ut_wpadapterplugin/group/ut_muswpadapter.pkg --- a/mmshplugins/mmshwpadapterplugin/tsrc/ut_wpadapterplugin/group/ut_muswpadapter.pkg Thu Aug 19 09:51:39 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,32 +0,0 @@ -; -; Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). -; All rights reserved. -; This component and the accompanying materials are made available -; under the terms of "Eclipse Public License v1.0" -; which accompanies this distribution, and is available -; at the URL "http://www.eclipse.org/legal/epl-v10.html". -; -; Initial Contributors: -; Nokia Corporation - initial contribution. -; -; Contributors: -; -; Description: -; - -;Languages -&EN - -;Header -#{"EUnit: MMSHWPAda"},(0x01700000),1,0,0 - -(0x101F7961), 0, 0, 0, {"Series60ProductID"} - -;Localised Vendor name -%{"Nokia"} - -;Unique vendor name -:"Nokia" - -;DLL files -"\epoc32\release\armv5\urel\ut_muswpadapter.dll"-"c:\sys\bin\ut_muswpadapter.dll" diff -r 33a5d2bbf6fc -r 73a1feb507fb mmshplugins/mmshwpadapterplugin/tsrc/ut_wpadapterplugin/src/ut_muswpitem.cpp --- a/mmshplugins/mmshwpadapterplugin/tsrc/ut_wpadapterplugin/src/ut_muswpitem.cpp Thu Aug 19 09:51:39 2010 +0300 +++ b/mmshplugins/mmshwpadapterplugin/tsrc/ut_wpadapterplugin/src/ut_muswpitem.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -277,7 +277,7 @@ MusSettingsKeys::EAlwaysActive ) iWpItem->SetActivationCondition( KMusWpParamValue2() ); // Home EUNIT_ASSERT( iWpItem->iActivationCondition == - MusSettingsKeys::EAlwaysActive ) + MusSettingsKeys::EActiveInHomeNetworks ) iWpItem->SetActivationCondition( KMusWpParamValue3() ); // Never EUNIT_ASSERT( iWpItem->iActivationCondition == MusSettingsKeys::ENever ) diff -r 33a5d2bbf6fc -r 73a1feb507fb rom/multimediasharing.iby --- a/rom/multimediasharing.iby Thu Aug 19 09:51:39 2010 +0300 +++ b/rom/multimediasharing.iby Tue Aug 31 15:12:07 2010 +0300 @@ -21,52 +21,62 @@ #define __MULTIMEDIASHARING_IBY__ +#if defined(__MULTIMEDIA_SHARING) || defined(__CS_VIDEO_TELEPHONY) + +/*======================================================================== +* Livecomms UI dll for both MUS and VT +* ======================================================================== +*/ +file=ABI_DIR\UREL\livecommsui.dll SHARED_LIB_DIR\livecommsui.dll + +/*======================================================================== +* MUS SIS stub +* ======================================================================== +*/ +data=DATAZ_\system\install\multimediasharing_stub.sis system\install\multimediasharing_stub.sis + +#endif + + #ifdef __MULTIMEDIA_SHARING - /*======================================================================== * MUS UI * ======================================================================== */ -S60_APP_EXE(musui) -S60_APP_AIF_ICONS(musui) -data=DATAZ_\BITMAP_DIR\musuiicons.mif BITMAP_DIR\musuiicons.mif -data=DATAZ_\BITMAP_DIR\musuitoolbaricons.mif BITMAP_DIR\musuitoolbaricons.mif -data=ZPRIVATE\10003A3F\APPS\musui_reg.rsc PRIVATE\10003A3F\IMPORT\APPS\musui_reg.rsc -#ifndef RD_APPS_TO_EXES -SCALABLE_IMAGE(System\Apps\musui,System\Apps\musui,musui) -#else -SCALABLE_IMAGE(APP_BITMAP_DIR,APP_BITMAP_DIR,musui) -#endif + +//file=ABI_DIR\UREL\musui.exe PROGRAMS_DIR\musui.exe +//data=DATAZ_\resource\apps\musui.rsc \resource\apps\musui.rsc +//data=DATAZ_\private\10003a3f\import\apps\musui_reg.rsc \private\10003a3f\import\apps\musui_reg.rsc /*======================================================================== * MUS General * ======================================================================== */ -file=ABI_DIR\urel\musmanagerserver.exe PROGRAMS_DIR\musmanagerserver.exe -file=ABI_DIR\urel\musmanagerclient.dll SHARED_LIB_DIR\musmanagerclient.dll -file=ABI_DIR\urel\musengine.dll SHARED_LIB_DIR\musengine.dll -file=ABI_DIR\urel\musindicator.dll SHARED_LIB_DIR\musindicator.dll -data=DATAZ_\private\1028238D\tone.amr private\1028238D\tone.amr -data=DATAZ_\BITMAP_DIR\musindicatoricons.mif BITMAP_DIR\musindicatoricons.mif -data=DATAZ_\BITMAP_DIR\musindicatoricons.mbm BITMAP_DIR\musindicatoricons.mbm +//file=ABI_DIR\UREL\musmanagerserver.exe PROGRAMS_DIR\musmanagerserver.exe +//file=ABI_DIR\UREL\musmanagerclient.dll SHARED_LIB_DIR\musmanagerclient.dll +//file=ABI_DIR\UREL\musindicator.dll SHARED_LIB_DIR\musindicator.dll +//data=DATAZ_\private\1028238D\tone.amr private\1028238D\tone.amr +//data=DATAZ_\BITMAP_DIR\musindicatoricons.mif BITMAP_DIR\musindicatoricons.mif +//data=DATAZ_\BITMAP_DIR\musindicatoricons.mbm BITMAP_DIR\musindicatoricons.mbm /*======================================================================== * MUS Ecom Plugins * ======================================================================== */ -ECOM_PLUGIN(musaoplugin.dll,musaoplugin.rsc) +//ECOM_PLUGIN(musaoplugin.dll,musaoplugin.rsc) -ECOM_PLUGIN(musaiwprovider.dll,musaiwprovider.rsc) -ECOM_PLUGIN(musavailabilityplugin.dll,musavailabilityplugin.rsc) -ECOM_PLUGIN(muswpadapter.dll,muswpadapter.rsc) +//ECOM_PLUGIN(musaiwprovider.dll,musaiwprovider.rsc) +//ECOM_PLUGIN(musavailabilityplugin.dll,musavailabilityplugin.rsc) +//ECOM_PLUGIN(muswpadapter.dll,muswpadapter.rsc) //ECOM_PLUGIN(mmcctranscoder.dll,10282896.rsc) +//ECOM_PLUGIN(musengineplugin.dll,musengineplugin.rsc) // In __VOIP terminals, MuS uses same client resolver plugin as VoIP. // In all other terminals, a separate resolver plugin is needed #ifndef __VOIP -ECOM_PLUGIN(mussipcrplugin.dll,mussipcrplugin.rsc) +//ECOM_PLUGIN(mussipcrplugin.dll,mussipcrplugin.rsc) #endif @@ -74,15 +84,8 @@ * MUS Settings UI * ======================================================================== */ -ECOM_PLUGIN( mussettingsui.dll,mussettingsui.rsc ) -data=DATAZ_\BITMAP_DIR\mussettingsplugin.mif BITMAP_DIR\mussettingsplugin.mif - - -/*======================================================================== -* MUS SIS stub -* ======================================================================== -*/ -data=DATAZ_\system\install\multimediasharing_stub.sis system\install\multimediasharing_stub.sis +//ECOM_PLUGIN( mussettingsui.dll,mussettingsui.rsc ) +//data=DATAZ_\BITMAP_DIR\mussettingsplugin.mif BITMAP_DIR\mussettingsplugin.mif /*======================================================================== @@ -92,7 +95,7 @@ * in centralrepository. Hence central repositary uid should be specified as proxy data owner. * ======================================================================== */ -data=DATAZ_\private\1028238D\backup_registration.xml private\1028238D\backup_registration.xml +//data=DATAZ_\private\1028238D\backup_registration.xml private\1028238D\backup_registration.xml #endif diff -r 33a5d2bbf6fc -r 73a1feb507fb rom/multimediasharing_stub.SIS Binary file rom/multimediasharing_stub.SIS has changed diff -r 33a5d2bbf6fc -r 73a1feb507fb rom/multimediasharingresources.iby --- a/rom/multimediasharingresources.iby Thu Aug 19 09:51:39 2010 +0300 +++ b/rom/multimediasharingresources.iby Tue Aug 31 15:12:07 2010 +0300 @@ -20,37 +20,46 @@ #ifndef __MULTIMEDIASHARINGRESOURCES_IBY__ #define __MULTIMEDIASHARINGRESOURCES_IBY__ +#if defined(__MULTIMEDIA_SHARING) || defined(__CS_VIDEO_TELEPHONY) +data=DATAZ_\data\others\lcvtview.docml data\others\lcvtview.docml +#endif + #ifdef __MULTIMEDIA_SHARING /*======================================================================== -* MUS UI +* MUS UI DOCML * ======================================================================== */ -S60_APP_RESOURCE( musui ) +data=DATAZ_\data\others\lcidleview.docml data\others\lcidleview.docml +data=DATAZ_\data\others\lcreceiveview.docml data\others\lcreceiveview.docml +data=DATAZ_\data\others\lcsendview.docml data\others\lcsendview.docml +data=DATAZ_\data\others\lctwowayview.docml data\others\lctwowayview.docml +data=DATAZ_\data\others\lcreceiveonlyview.docml data\others\lcreceiveonlyview.docml + /*======================================================================== * MUS Settings UI * ======================================================================== */ -data=DATAZ_\RESOURCE_FILES_DIR\mussettingsuirsc.rsc RESOURCE_FILES_DIR\mussettingsuirsc.rsc +//data=DATAZ_\RESOURCE_FILES_DIR\mussettingsuirsc.rsc RESOURCE_FILES_DIR\mussettingsuirsc.rsc /*======================================================================== * MUS wireless provisioning adapter * ======================================================================== */ -data=DATAZ_\RESOURCE_FILES_DIR\muswpadapterresource.rsc RESOURCE_FILES_DIR\muswpadapterresource.rsc +//data=DATAZ_\RESOURCE_FILES_DIR\muswpadapterresource.rsc RESOURCE_FILES_DIR\muswpadapterresource.rsc /*======================================================================== * MUS AIW Provider Ecom Plugin * ======================================================================== */ -data=DATAZ_\RESOURCE_FILES_DIR\musaiwproviderui.rsc RESOURCE_FILES_DIR\musaiwproviderui.rsc +//data=DATAZ_\RESOURCE_FILES_DIR\musaiwproviderui.rsc RESOURCE_FILES_DIR\musaiwproviderui.rsc /*======================================================================== * MUS Indicator dll * ======================================================================== */ -data=DATAZ_\RESOURCE_FILES_DIR\musindicator.rsc RESOURCE_FILES_DIR\musindicator.rsc +//data=DATAZ_\RESOURCE_FILES_DIR\musindicator.rsc RESOURCE_FILES_DIR\musindicator.rsc #endif diff -r 33a5d2bbf6fc -r 73a1feb507fb sysdef_1_5_1.dtd --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/sysdef_1_5_1.dtd Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,88 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff -r 33a5d2bbf6fc -r 73a1feb507fb tsrc/CenrepEditor/Src/cenrepeditorappui.cpp --- a/tsrc/CenrepEditor/Src/cenrepeditorappui.cpp Thu Aug 19 09:51:39 2010 +0300 +++ b/tsrc/CenrepEditor/Src/cenrepeditorappui.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -63,8 +63,7 @@ { iTabGroup = (CAknTabGroup*) iDecoratedTabGroup->DecoratedControl(); } - iPhoneResources = CPhoneResources::NewL(); - iPhoneResources->ReadL(); + iPhoneResources = CPhoneResources::NewL(); CCenrepEditorView1* view1 = new (ELeave) CCenrepEditorView1; CleanupStack::PushL( view1 ); @@ -72,8 +71,7 @@ AddViewL( view1 ); // transfer ownership to CAknViewAppUi CleanupStack::Pop(); // view1 - iOtherResources = COtherResources::NewL(); - iOtherResources->ReadL(); + iOtherResources = COtherResources::NewL(); CCenrepEditorView2* view2 = new (ELeave) CCenrepEditorView2; CleanupStack::PushL( view2 ); diff -r 33a5d2bbf6fc -r 73a1feb507fb tsrc/CenrepEditor/Src/cenrepeditorlistbox2.cpp --- a/tsrc/CenrepEditor/Src/cenrepeditorlistbox2.cpp Thu Aug 19 09:51:39 2010 +0300 +++ b/tsrc/CenrepEditor/Src/cenrepeditorlistbox2.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -16,10 +16,9 @@ */ #include #include + #include "cenrepeditorListbox2.h" -#include "cenrepeditorListbox2.h" -#include CAknSettingItem* COtherResourcesListbox::CreateSettingItemL( TInt aIdentifier ) { @@ -49,9 +48,6 @@ case EOtherResourceSessionSetupMethod: settingItem=ConstructByValueL( aIdentifier,iOtherResources->iSessionSetupMethod); break; - case EOtherRResourcePrivacyVariationMode: - settingItem=ConstructByValueL( aIdentifier, iOtherResources->iPrivacyVariation ); - break; case EOtherResourceAutoRecord: settingItem=ConstructByValueL( aIdentifier,iOtherResources->iAutoRecord); break; @@ -81,8 +77,28 @@ break; case EOtherResourceEncodingDevice: settingItem = new (ELeave) - CAknTextSettingItem( aIdentifier, iOtherResources->iEncodingDeviceStr ); - break; + CAknTextSettingItem( aIdentifier, iOtherResources->iEncodingDeviceStr ); + settingItem->SetSettingPageFlags(CAknTextSettingPage::EZeroLengthAllowed); + break; + case EOtherResourceAllowOnlyWithActiveCSCall: + settingItem=ConstructByValueL( aIdentifier,iOtherResources->iOnlyWithActiveCSCall ); + break; + case EOtherResourceAllowOnlyIn3GNetwork: + settingItem=ConstructByValueL( aIdentifier,iOtherResources->iOnlyIn3GNetwork ); + break; + case EOtherResourceCameraUsage: + settingItem=ConstructByValueL( aIdentifier,iOtherResources->iCameraUsage ); + break; + case EOtherResourceVideoDirection: + settingItem=ConstructByValueL( aIdentifier,iOtherResources->iVideoDirection ); + break; + case EOtherResourceVideoBandwidth: + settingItem = new (ELeave) + CAknIntegerEdwinSettingItem( aIdentifier,iOtherResources->iVideoBandwidth ); + break; + case EOtherResourceFastMode: + settingItem = ConstructByValueL( aIdentifier, iOtherResources->iFastMode ); + break; default: break; } @@ -104,47 +120,9 @@ } -// ------------------------------------------------------------------ -// CPhoneResourcesListbox::ConstructByValueL( aIdentifier, ) -// ------------------------------------------------------------------ -// - -CAknSettingItem* COtherResourcesListbox::ConstructByValueL( TInt aIdentifier, - TInt& aVal ) +CAknSettingItem* COtherResourcesListbox::ConstructByValueL( + TInt aIdentifier, + TInt& aVal) { - CAknSettingItem* settingItem = NULL ; - if(aVal<0 ) - { - settingItem = new (ELeave) CAknSettingItem(aIdentifier); - settingItem->SetProtectionState(CAknSettingItem::ESettingItemProtected); - } - else - { - settingItem = new (ELeave) - CAknEnumeratedTextPopupSettingItem(aIdentifier,aVal); - } - return settingItem ; + return new (ELeave) CAknEnumeratedTextPopupSettingItem(aIdentifier,aVal); } - - -void COtherResourcesListbox::EditItemL(TInt aIndex, TBool aCalledFromMenu) - { - CAknSettingItemList::EditItemL(aIndex, aCalledFromMenu); - - CAknSettingItem* currentItem = SettingItemArray()->At(aIndex); - if ( currentItem->Identifier() == EOtherResourceEncodingDevice ) - { - TLex lex( currentItem->SettingTextL() ); - TUint uid; - TInt err = lex.Val(uid, EHex); - - if ( (err != KErrNone) || !lex.Eos() ) - { - currentItem->LoadL(); - currentItem->UpdateListBoxTextL(); - - CAknWarningNote* warningNote = new (ELeave) CAknWarningNote; - warningNote->ExecuteLD(_L("Invalid value")); - } - } - } diff -r 33a5d2bbf6fc -r 73a1feb507fb tsrc/CenrepEditor/Src/cenrepeditormodel.cpp --- a/tsrc/CenrepEditor/Src/cenrepeditormodel.cpp Thu Aug 19 09:51:39 2010 +0300 +++ b/tsrc/CenrepEditor/Src/cenrepeditormodel.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -40,7 +40,6 @@ CPhoneResources* CPhoneResources::NewLC() { - // create a new expense object CPhoneResources* self = new (ELeave) CPhoneResources(); CleanupStack::PushL(self); self->ConstructL(); @@ -54,112 +53,79 @@ return self; } +CPhoneResources::~CPhoneResources() + { + } + void CPhoneResources::ConstructL() { - iCameraAvailability = -1; - iKeypadAvailability = -1 ; - iVideoPlayerAvailability = -1; - iCameraInformation = -1; - iKodiakPhoneCall = -1; - iDummy = 1; // just a postive value , dirty idea but just works at this time - } + // If a P&S key is not found, set it to KErrNotFound. + // This is why the RProperty::Get return values are not handled below. + iCameraAvailability = KErrNotFound; + RProperty::Get(NMusResourceApi::KCategoryUid, + NMusResourceApi::KCameraAvailability, + iCameraAvailability); + + iKeypadAvailability = KErrNotFound; + RProperty::Get(NMusResourceApi::KCategoryUid, + NMusResourceApi::KKeypadAvailability, + iKeypadAvailability); -void CPhoneResources::ReadL() - { - TInt err = KErrNone; - // 1. camera property - err = RProperty::Get( NMusResourceApi::KCategoryUid, - NMusResourceApi::KCameraAvailability, - iCameraAvailability); - if(err)HandleError(ETrue,err,_L("CameraAvailability")); - // 2. keypad property - err = RProperty::Get( NMusResourceApi::KCategoryUid, - NMusResourceApi::KKeypadAvailability, - iKeypadAvailability ); - if(err)HandleError(ETrue , err,_L("KeypadAvailability")); - // 3. video player property - err = RProperty::Get( NMusResourceApi::KCategoryUid, - NMusResourceApi::KVideoPlayerAvailability, - iVideoPlayerAvailability ); - if(err)HandleError( ETrue, err ,_L("VideoPlayerAvailability")); - // 3. video player property - err = RProperty::Get( NMusResourceApi::KCategoryUid, - NMusResourceApi::KCameraInformation, - iCameraInformation ); - if(err)HandleError( ETrue, err ,_L("CameraInformation")); - err = RProperty::Get( KPSUidCtsyCallInformation, - KCTsyKodiakPtt, - iKodiakPhoneCall ); - if(err) + iVideoPlayerAvailability = KErrNotFound; + RProperty::Get(NMusResourceApi::KCategoryUid, + NMusResourceApi::KVideoPlayerAvailability, + iVideoPlayerAvailability ); + + iCameraInformation = KErrNotFound; + RProperty::Get(NMusResourceApi::KCategoryUid, + NMusResourceApi::KCameraInformation, + iCameraInformation ); + + iKodiakPhoneCall = KErrNotFound; + TInt err = RProperty::Get(KPSUidCtsyCallInformation, + KCTsyKodiakPtt, + iKodiakPhoneCall ); + if (err != KErrNone) { iKodiakPhoneCall = EPSCTsyKodiakPttNotActive; RProperty::Define(KPSUidCtsyCallInformation,KCTsyKodiakPtt,EPSCTsyKodiakPttNotActive); - } - } - - -CPhoneResources::~CPhoneResources() - { + } } void CPhoneResources::SaveL() { - //TInt err = KErrNone; + SetValueL(NMusResourceApi::KCategoryUid, + NMusResourceApi::KCameraAvailability, + iCameraAvailability); + + SetValueL(NMusResourceApi::KCategoryUid, + NMusResourceApi::KKeypadAvailability, + iKeypadAvailability); - User::LeaveIfError(SetValueL( NMusResourceApi::KCategoryUid, - NMusResourceApi::KCameraAvailability, - iCameraAvailability)); - //if(err)HandleError( EFalse, err ,_L("CameraAvailability")); - // 2. keypad property - User::LeaveIfError(SetValueL( NMusResourceApi::KCategoryUid, - NMusResourceApi::KKeypadAvailability, - iKeypadAvailability )); - //if(err)HandleError(EFalse, err,_L("KeypadAvailability")); - // 3. video player property - User::LeaveIfError(SetValueL( NMusResourceApi::KCategoryUid, - NMusResourceApi::KVideoPlayerAvailability, - iVideoPlayerAvailability )); - //if(err)HandleError(EFalse, err,_L("VideoPlayerAvailability")); - // 3. video player property - User::LeaveIfError(SetValueL( NMusResourceApi::KCategoryUid, - NMusResourceApi::KCameraInformation, - iCameraInformation )); - //if(err)HandleError(EFalse, err,_L("CameraInformation")); - // 4. Kodiak PS Key - User::LeaveIfError(SetValueL( KPSUidCtsyCallInformation, - KCTsyKodiakPtt, - iKodiakPhoneCall )); - //if(err)HandleError( EFalse, err ,_L("KodiakPSKeyInformation")); + SetValueL(NMusResourceApi::KCategoryUid, + NMusResourceApi::KVideoPlayerAvailability, + iVideoPlayerAvailability); + + SetValueL(NMusResourceApi::KCategoryUid, + NMusResourceApi::KCameraInformation, + iCameraInformation); + + SetValueL(KPSUidCtsyCallInformation, + KCTsyKodiakPtt, + iKodiakPhoneCall); } -TInt CPhoneResources::SetValueL(TUid aCategory, TUint aKey, TInt aValue) - { - if(aValue<0)return KErrNone; // dont care if the key is not read intially - return RProperty::Set( aCategory, aKey, aValue ); - } - - -void CPhoneResources::HandleError(TBool aType ,TInt aError , TPtrC aKeyName ) +void CPhoneResources::SetValueL(TUid aCategory, TUint aKey, TInt aValue) { - CAknErrorNote *dlg = new CAknErrorNote(ETrue); - TBuf<100> buf; - if(aType) + // Don't care if the key is not found initially + if (aValue >= 0) { - buf.Append(_L("Unable to Read Key ")); + User::LeaveIfError(RProperty::Set(aCategory, aKey, aValue)); } - else - { - buf.Append(_L("Unable to Save ")); - } - buf.Append(aKeyName); - buf.Append(_L(" Error ")); - buf.AppendNum(aError); - dlg->ExecuteLD(buf); } COtherResources* COtherResources::NewLC() { - // create a new expense object COtherResources* self = new (ELeave) COtherResources(); CleanupStack::PushL(self); self->ConstructL(); @@ -175,185 +141,157 @@ void COtherResources::ConstructL() { - iActivation = -1 ; - iOperatorVariant = -1 ; - iAuditoryNotification = -1; - iPopupNotification = -1 ; - iPopupNotificationType = -1 ; - iEdgeDtmSupport = -1 ; - iSessionSetupMethod = -1 ; - iAutoRecord = -1 ; - iVideoLocation = -1 ; - iSipProfileId = -1 ; - iUiOrientation = -1 ; - iCapabilityQuery = -1; - iProductModeVariation=-1; - iEncodingDevice = -1; - iPrivacyVariation = -1; - iDummy = 1; // just a postive value + iRepository = CRepository::NewL(MusSettingsKeys::KRepositoryUid); + + // If a CenRep key is not found, set it to KErrNotFound. + // This is why the CRepository::Get return values are not handled below. + iActivation = KErrNotFound; + iRepository->Get(MusSettingsKeys::KActivation, iActivation); + + iOperatorVariant = KErrNotFound; + iRepository->Get(MusSettingsKeys::KOperatorVariant,iOperatorVariant); + + iAuditoryNotification = KErrNotFound; + iRepository->Get(MusSettingsKeys::KAuditoryNotification, iAuditoryNotification); + + iPopupNotification = KErrNotFound; + iRepository->Get(MusSettingsKeys::KPopupNotification, iPopupNotification); + + iPopupNotificationType = KErrNotFound; + iRepository->Get(MusSettingsKeys::KPopupNotificationType, iPopupNotificationType); + + iEdgeDtmSupport = KErrNotFound; + iRepository->Get(MusSettingsKeys::KEdgeDtmSupport, iEdgeDtmSupport); + + iSessionSetupMethod = KErrNotFound; + iRepository->Get(MusSettingsKeys::KForceInternetSignaling, iSessionSetupMethod); + + iAutoRecord = KErrNotFound; + iRepository->Get(MusSettingsKeys::KAutoRecord, iAutoRecord); + + iVideoLocation = KErrNotFound; + iRepository->Get(MusSettingsKeys::KVideoLocation, iVideoLocation); + + iSipProfileId = KErrNotFound; + iRepository->Get(MusSettingsKeys::KSipProfileId, iSipProfileId); + + iUiOrientation = KErrNotFound; + iRepository->Get(MusSettingsKeys::KUiOrientation, iUiOrientation); + + iCapabilityQuery = KErrNotFound; + iRepository->Get(MusSettingsKeys::KCapabilityQuery, iCapabilityQuery); + + iProductModeVariation = KErrNotFound; + iRepository->Get(MusSettingsKeys::KProductModeVariation, iProductModeVariation); + + iRepository->Get(MusSettingsKeys::KEncoderConfigurationInfo, iEncoderInfo ); + + iEncodingDevice = KErrNotFound; + iRepository->Get(MusSettingsKeys::KEncodingDevice, iEncodingDevice ); + iEncodingDeviceStr.Zero(); + if ( iEncodingDevice >= 0 ) + { + iEncodingDeviceStr.AppendNum(iEncodingDevice, EHex); + } + + iOnlyWithActiveCSCall = KErrNotFound; + iRepository->Get(MusSettingsKeys::KAllowOnlyWithActiveCSCall, iOnlyWithActiveCSCall); + + iOnlyIn3GNetwork = KErrNotFound; + iRepository->Get(MusSettingsKeys::KAllowOnlyIn3GNetwork, iOnlyIn3GNetwork); + + iCameraUsage = KErrNotFound; + iRepository->Get(MusSettingsKeys::KCameraUsage, iCameraUsage); + + iVideoDirection = KErrNotFound; + iRepository->Get(MusSettingsKeys::KVideoDirection, iVideoDirection); + + iVideoBandwidth = KErrNotFound; + iRepository->Get(MusSettingsKeys::KVideoBandwidth, iVideoBandwidth); + + iFastMode = KErrNotFound; + iRepository->Get(MusSettingsKeys::KFastStartupMode, iFastMode); } -void COtherResources::ReadL() - { - - TRAPD(err,ReadCRKeyValuesL()); - if(err) HandleError (ETrue,err,_L("Read Error")); - - } - -void COtherResources::ReadCRKeyValuesL() -{ - - TInt err=KErrNone; - CRepository* cr = NULL ; - TRAP(err,cr = CRepository::NewL( MusSettingsKeys::KRepositoryUid )); - cr->CleanupCancelTransactionPushL(); - if(err) - { - CAknErrorNote *dlg = new CAknErrorNote(ETrue); - dlg->ExecuteLD(_L(\ - "Unable to Construct CRepository for UID 0x1028238B")); - return ; // dont leave - } - - ReadKeyValueL( cr, MusSettingsKeys::KActivation,iActivation ); - ReadKeyValueL( cr, MusSettingsKeys::KOperatorVariant,iOperatorVariant); - ReadKeyValueL( cr, MusSettingsKeys::KAuditoryNotification, iAuditoryNotification); - ReadKeyValueL( cr, MusSettingsKeys::KPopupNotification, iPopupNotification); - ReadKeyValueL( cr, MusSettingsKeys::KPopupNotificationType, iPopupNotificationType); - ReadKeyValueL( cr, MusSettingsKeys::KEdgeDtmSupport, iEdgeDtmSupport); - ReadKeyValueL( cr, MusSettingsKeys::KForceInternetSignaling, iSessionSetupMethod); - ReadKeyValueL( cr, MusSettingsKeys::KAutoRecord, iAutoRecord); - ReadKeyValueL( cr, MusSettingsKeys::KVideoLocation, iVideoLocation); - ReadKeyValueL( cr, MusSettingsKeys::KSipProfileId, iSipProfileId); - ReadKeyValueL( cr, MusSettingsKeys::KUiOrientation, iUiOrientation); - ReadKeyValueL( cr, MusSettingsKeys::KCapabilityQuery, iCapabilityQuery); - ReadKeyValueL( cr, MusSettingsKeys::KProductModeVariation, iProductModeVariation); - ReadKeyValueL( cr, MusSettingsKeys::KEncoderConfigurationInfo, iEncoderInfo ); - ReadKeyValueL( cr, MusSettingsKeys::KEncodingDevice, iEncodingDevice ); - ReadKeyValueL( cr, MusSettingsKeys::KPrivacyExchange, iPrivacyVariation ); - - iEncodingDeviceStr.Zero(); - iEncodingDeviceStr.AppendNum(iEncodingDevice, EHex); - - CleanupStack::PopAndDestroy(cr); - delete cr; - -} - - COtherResources::~COtherResources() - { - } + { + delete iRepository; + } void COtherResources::SaveL() { - - TRAPD(err,SaveCRKeyValuesL()); - if(err) HandleError (ETrue,err,_L("Save Error")); + User::LeaveIfError( + iRepository->StartTransaction(CRepository::EConcurrentReadWriteTransaction)); + iRepository->CleanupCancelTransactionPushL(); - } - -void COtherResources::SaveCRKeyValuesL() - { - CRepository* cr = NULL ; - TRAPD(err,cr = CRepository::NewL( MusSettingsKeys::KRepositoryUid )); - cr->CleanupCancelTransactionPushL(); - if(err) - { - CAknErrorNote *dlg = new CAknErrorNote(ETrue); - dlg->ExecuteLD(_L(\ - "Unable to Construct CRepository for UID 0x1028238B")); - User::Leave(err); - } - SetKeyValueL( cr,MusSettingsKeys::KActivation, iActivation); - SetKeyValueL( cr,MusSettingsKeys::KOperatorVariant, iOperatorVariant); - SetKeyValueL( cr,MusSettingsKeys::KAuditoryNotification, iAuditoryNotification); - SetKeyValueL( cr,MusSettingsKeys::KPopupNotification, iPopupNotification); - SetKeyValueL( cr,MusSettingsKeys::KPopupNotificationType, iPopupNotificationType); - SetKeyValueL( cr,MusSettingsKeys::KEdgeDtmSupport, iEdgeDtmSupport); - SetKeyValueL( cr,MusSettingsKeys::KForceInternetSignaling, iSessionSetupMethod); - SetKeyValueL( cr,MusSettingsKeys::KAutoRecord, iAutoRecord); - SetKeyValueL( cr,MusSettingsKeys::KVideoLocation, iVideoLocation); - SetKeyValueL( cr,MusSettingsKeys::KSipProfileId, iSipProfileId); - SetKeyValueL( cr,MusSettingsKeys::KUiOrientation, iUiOrientation); - SetKeyValueL( cr,MusSettingsKeys::KCapabilityQuery, iCapabilityQuery); - SetKeyValueL( cr,MusSettingsKeys::KProductModeVariation, iProductModeVariation); - SetKeyValueL( cr,MusSettingsKeys::KEncoderConfigurationInfo, iEncoderInfo ); - SetKeyValueL( cr,MusSettingsKeys::KPrivacyExchange, iPrivacyVariation ); - + SetKeyValueL(MusSettingsKeys::KActivation, iActivation); + SetKeyValueL(MusSettingsKeys::KOperatorVariant, iOperatorVariant); + SetKeyValueL(MusSettingsKeys::KAuditoryNotification, iAuditoryNotification); + SetKeyValueL(MusSettingsKeys::KPopupNotification, iPopupNotification); + SetKeyValueL(MusSettingsKeys::KPopupNotificationType, iPopupNotificationType); + SetKeyValueL(MusSettingsKeys::KEdgeDtmSupport, iEdgeDtmSupport); + SetKeyValueL(MusSettingsKeys::KForceInternetSignaling, iSessionSetupMethod); + SetKeyValueL(MusSettingsKeys::KAutoRecord, iAutoRecord); + SetKeyValueL(MusSettingsKeys::KVideoLocation, iVideoLocation); + SetKeyValueL(MusSettingsKeys::KSipProfileId, iSipProfileId); + SetKeyValueL(MusSettingsKeys::KUiOrientation, iUiOrientation); + SetKeyValueL(MusSettingsKeys::KCapabilityQuery, iCapabilityQuery); + SetKeyValueL(MusSettingsKeys::KProductModeVariation, iProductModeVariation); + User::LeaveIfError( + iRepository->Set(MusSettingsKeys::KEncoderConfigurationInfo, iEncoderInfo)); TLex lex( iEncodingDeviceStr ); - TUint uid; - err = lex.Val(uid, EHex); - if ( (err == KErrNone) && lex.Eos() ) + TUint tmpUid; + lex.SkipSpace(); + if ( lex.Val(tmpUid, EHex) == KErrNone ) { - iEncodingDevice = uid; - SetKeyValueL( cr, MusSettingsKeys::KEncodingDevice, iEncodingDevice ); - } - - CleanupStack::PopAndDestroy(cr); - delete cr; - } - -void COtherResources::SetKeyValueL(CRepository* repository, const TInt & aKey , TInt & aVal) - { - if(aVal<0) return; // dont care if key is not intially read - TUint32 key(aKey); - User::LeaveIfError(repository->StartTransaction( - CRepository::EConcurrentReadWriteTransaction)); - User::LeaveIfError(repository->Set(key,aVal)); - User::LeaveIfError(repository->CommitTransaction(key)); - } - -void COtherResources::ReadKeyValueL(CRepository* repository, const TInt & aKey , TInt & aVal) - { - TUint32 key(aKey); - User::LeaveIfError(repository->StartTransaction( - CRepository::EConcurrentReadWriteTransaction)); - User::LeaveIfError(repository->Get(key,aVal)); - User::LeaveIfError(repository->CommitTransaction(key)); - } - -void COtherResources::SetKeyValueL(CRepository* repository, TInt aKey, const TDesC& aVal) - { - TUint32 key(aKey); - User::LeaveIfError(repository->StartTransaction( - CRepository::EConcurrentReadWriteTransaction)); - User::LeaveIfError(repository->Set(key,aVal)); - User::LeaveIfError(repository->CommitTransaction(key)); - } - -void COtherResources::ReadKeyValueL(CRepository* repository, TInt aKey, TDes& aVal) - { - TUint32 key(aKey); - User::LeaveIfError(repository->StartTransaction( - CRepository::EConcurrentReadWriteTransaction)); - User::LeaveIfError(repository->Get(key,aVal)); - User::LeaveIfError(repository->CommitTransaction(key)); - } - -void COtherResources::HandleError(TBool aType , - TInt aError , TPtrC aKeyName ) - { - CAknErrorNote *dlg = new CAknErrorNote(ETrue); - TBuf<100> buf; - if(aType) - { - buf.Append(_L("Unable to Read Key ")); + iEncodingDevice = tmpUid; } else { - buf.Append(_L("Unable to Save Key ")); + iEncodingDevice = KErrNotFound; } - buf.Append(aKeyName); - buf.Append(_L(" Error ")); - buf.AppendNum(aError); - dlg->ExecuteLD(buf); + SetKeyValueL(MusSettingsKeys::KEncodingDevice, iEncodingDevice); + SetKeyValueL(MusSettingsKeys::KAllowOnlyWithActiveCSCall, iOnlyWithActiveCSCall); + SetKeyValueL(MusSettingsKeys::KAllowOnlyIn3GNetwork, iOnlyIn3GNetwork); + SetKeyValueL(MusSettingsKeys::KCameraUsage, iCameraUsage); + SetKeyValueL(MusSettingsKeys::KVideoDirection, iVideoDirection); + SetKeyValueL(MusSettingsKeys::KVideoBandwidth, iVideoBandwidth); + SetKeyValueL(MusSettingsKeys::KFastStartupMode, iFastMode); + + TUint32 modifiedKeyCount(0); + User::LeaveIfError(iRepository->CommitTransaction(modifiedKeyCount)); + CleanupStack::Pop(); // transaction + } + +void COtherResources::SetKeyValueL( + const TUint32& aKey, + TInt& aVal) + { + TBool keyExistsInRepository(EFalse); + TInt tmpVal(0); + keyExistsInRepository = (iRepository->Get(aKey,tmpVal) == KErrNone); + if (aVal < 0) + { + if (keyExistsInRepository) + { + User::LeaveIfError(iRepository->Delete(aKey)); + } + } + else + { + if (keyExistsInRepository) + { + User::LeaveIfError(iRepository->Set(aKey,aVal)); + } + else + { + User::LeaveIfError(iRepository->Create(aKey,aVal)); + } + } } CMusApplication* CMusApplication::NewLC() { - // create a new expense object CMusApplication* self = new (ELeave) CMusApplication(); CleanupStack::PushL(self); self->ConstructL(); @@ -370,8 +308,8 @@ void CMusApplication::ConstructL() { iUseCase = MultimediaSharing::EMusLiveVideo; - //iMultimediasharing=CMusManager::NewL(); - //iMultimediasharing->ExamineAvailabilityL(); + iMultimediasharing=CMusManager::NewL(); + iMultimediasharing->ExamineAvailabilityL(); } CMusApplication::~CMusApplication() @@ -392,10 +330,10 @@ TBool CMusApplication::Start(TInt aUseCase) { - /*TRAPD(err,iMultimediasharing->StartApplicationL( + TRAPD(err,iMultimediasharing->StartApplicationL( MultimediaSharing::TMusUseCase(aUseCase))); if(err)HandleError(err,_L("MusStart ")); - return (err)?EFalse :ETrue; */ + return (err)?EFalse :ETrue; } TBool CMusApplication::Stop() @@ -414,21 +352,9 @@ } TInt CMusApplication::MonitorAvailability() { - TInt status = KErrGeneral; - /*TRequestStatus requestStatus; - TRAPD(err,iMultimediasharing-> - MonitorAvailabilityL( - requestStatus, - MultimediaSharing::TMusAvailabilityStatus(status)) - ); - if(err)HandleError(err,_L("MusAvailability ")); - User::WaitForRequest(requestStatus); - */ - return status; + return KErrGeneral; } - - TBool CMusApplication::AvailabilityInfo() { TBuf<100> buf(_L("Availability Info: ")); @@ -516,8 +442,6 @@ (aStart) ? buf.Append(_L("Started")) : buf.Append(_L("Stoped")); dlg->ExecuteLD(buf); } - - // End of File diff -r 33a5d2bbf6fc -r 73a1feb507fb tsrc/CenrepEditor/data/cenrepeditor.rss --- a/tsrc/CenrepEditor/data/cenrepeditor.rss Thu Aug 19 09:51:39 2010 +0300 +++ b/tsrc/CenrepEditor/data/cenrepeditor.rss Tue Aug 31 15:12:07 2010 +0300 @@ -137,27 +137,28 @@ { type = ENaviDecoratorControlTabGroup; control = TAB_GROUP - { - tab_width = EAknTabWidthWithThreeTabs; // three tabs - active = 0; - tabs = { - TAB - { + { + tab_width = EAknTabWidthWithThreeTabs; // three tabs + active = 0; + tabs = + { + TAB + { id = EAvkonViewExampleView1Tab; // from application hrh txt = qtn_view1_tab; }, - TAB - { + TAB + { id = EAvkonViewExampleView2Tab; txt = qtn_view2_tab; - }, - TAB - { + }, + TAB + { id = EAvkonViewExampleView3Tab; txt = qtn_view3_tab; - } - }; - }; + } + }; + }; } @@ -175,21 +176,22 @@ } RESOURCE CBA r_cenrepeditor_softkeys_save_exit - { - buttons = - { - CBA_BUTTON - { - id = EAknSoftKeySave; - txt = qtn_cenrepeditor_cba_text_save; - }, - CBA_BUTTON - { - id = EAknSoftKeyExit; - txt = qtn_cenrepeditor_cba_text_Exit; - } - }; - } + { + buttons = + { + CBA_BUTTON + { + id = EAknSoftKeySave; + txt = qtn_cenrepeditor_cba_text_save; + }, + CBA_BUTTON + { + id = EAknSoftKeyExit; + txt = qtn_cenrepeditor_cba_text_Exit; + } + }; + } + RESOURCE AVKON_SETTING_ITEM_LIST r_phone_resource_details_settings_list { flags= EAknSettingItemNumberedStyle; @@ -200,85 +202,60 @@ AVKON_SETTING_ITEM { identifier = EPhoneResouceCamera; - setting_page_resource = r_availability_settings_page; + setting_page_resource = r_popup_settings_page; name = "CameraAvailability"; associated_resource = r_availability_settings_page_texts; }, AVKON_SETTING_ITEM { identifier = EPhoneResouceKeypad; - setting_page_resource = r_availability_settings_page; + setting_page_resource = r_popup_settings_page; name = "KeypadAvailability"; associated_resource = r_availability_settings_page_texts; }, - AVKON_SETTING_ITEM - { - identifier = EPhoneResouceVideoPlayer; - setting_page_resource = r_availability_settings_page; - name = "VideoPlayerAvailability"; + AVKON_SETTING_ITEM + { + identifier = EPhoneResouceVideoPlayer; + setting_page_resource = r_popup_settings_page; + name = "VideoPlayerAvailability"; associated_resource = r_availability_settings_page_texts; - }, - AVKON_SETTING_ITEM - { - identifier = EPhoneResouceCameraInformation; - setting_page_resource = r_CameraInformation_settings_page; - name = "CameraInformation"; + }, + AVKON_SETTING_ITEM + { + identifier = EPhoneResouceCameraInformation; + setting_page_resource = r_popup_settings_page; + name = "CameraInformation"; associated_resource = r_CameraInformation_settings_page_texts; - }, + }, AVKON_SETTING_ITEM - { - identifier = EKodiakPhoneCall; - setting_page_resource = r_kodiak_call_settings_page; - name = "KodiakPTT"; + { + identifier = EKodiakPhoneCall; + setting_page_resource = r_popup_settings_page; + name = "KodiakPTT"; associated_resource = r_kodiak_call_settings_page_texts; - } + } }; } //camera -RESOURCE AVKON_SETTING_PAGE r_availability_settings_page - { - number = 1; - type = EAknCtPopupSettingList; - editor_resource_id = r_enumerated_text_setting_other_editor; - } - - RESOURCE AVKON_POPUP_SETTING_TEXTS r_availability_settings_page_texts { setting_texts_resource = r_availability_page_texts_array; - popped_up_texts_resource = r_availability_settings_page_popedup; } RESOURCE ARRAY r_availability_page_texts_array { - items = - { + items = + { AVKON_ENUMERATED_TEXT { value=1; text = "1.EAvailable"; }, AVKON_ENUMERATED_TEXT { value=2; text = "2.ENotAvailable"; } }; } -RESOURCE ARRAY r_availability_settings_page_popedup - { - items = - { - LBUF { txt = "1.EAvailable"; }, - LBUF { txt = "2.ENotAvailable"; } - }; - } //camera information -RESOURCE AVKON_SETTING_PAGE r_CameraInformation_settings_page - { - number = 1; - label = "Value"; - type = EAknCtPopupSettingList; - editor_resource_id = r_enumerated_text_setting_other_editor; - } - RESOURCE AVKON_POPUP_SETTING_TEXTS r_CameraInformation_settings_page_texts { setting_texts_resource = r_CameraInformation_settings_page_texts_array; @@ -287,7 +264,7 @@ RESOURCE ARRAY r_CameraInformation_settings_page_texts_array { - items = + items = { AVKON_ENUMERATED_TEXT { value=1; text = "1.EUsePrimaryCamera"; }, AVKON_ENUMERATED_TEXT { value=2; text = "2.EUseSecondaryCamera"; } @@ -296,45 +273,28 @@ RESOURCE ARRAY r_CameraInformation_settings_page_popedup { - items = - { + items = + { LBUF { txt = "1.EUsePrimaryCamera"; }, LBUF { txt = "2.EUseSecondaryCamera"; } }; } //kodiak PTT -RESOURCE AVKON_SETTING_PAGE r_kodiak_call_settings_page - { - number = 1; - type = EAknCtPopupSettingList; - editor_resource_id = r_enumerated_text_setting_other_editor; - } - RESOURCE AVKON_POPUP_SETTING_TEXTS r_kodiak_call_settings_page_texts { setting_texts_resource = r_kodiak_call_settings_page_texts_array; - popped_up_texts_resource = r_kodiak_call_settings_page_popedup; } RESOURCE ARRAY r_kodiak_call_settings_page_texts_array { - items = + items = { AVKON_ENUMERATED_TEXT { value=0; text = "0.EPSCTsyKodiakPttNotActive"; }, AVKON_ENUMERATED_TEXT { value=1; text = "1.EPSCTsyKodiakPttActive"; } }; } -RESOURCE ARRAY r_kodiak_call_settings_page_popedup - { - items = - { - LBUF { txt = "0.EPSCTsyKodiakPttNotActive"; }, - LBUF { txt = "1.EPSCTsyKodiakPttActive"; } - }; - } - RESOURCE POPUP_SETTING_LIST r_enumerated_text_setting_other_editor { // other="-1.Undefined"; @@ -361,477 +321,406 @@ RESOURCE AVKON_SETTING_ITEM_LIST r_other_resource_details_settings_list - { + { flags= EAknSettingItemNumberedStyle; - title = qtn_otherresource_details; - initial_number = 1; - items = - { - AVKON_SETTING_ITEM - { - identifier = EOtherResourceActivation; - setting_page_resource = r_activation_editor_settings_page; - name = "Activation"; + title = qtn_otherresource_details; + initial_number = 1; + items = + { + AVKON_SETTING_ITEM + { + identifier = EOtherResourceActivation; + setting_page_resource = r_popup_settings_page; + name = "Activation"; associated_resource = r_activation_editor_settings_page_texts; - }, - AVKON_SETTING_ITEM - { - identifier = EOtherResourceOperatorVariant; - setting_page_resource = r_operator_editor_settings_page; - name = "OperatorVariant"; + }, + AVKON_SETTING_ITEM + { + identifier = EOtherResourceOperatorVariant; + setting_page_resource = r_popup_settings_page; + name = "OperatorVariant"; associated_resource = r_operator_editor_settings_page_texts; - }, - AVKON_SETTING_ITEM - { - identifier = EOtherResourceAuditoryNotification; - setting_page_resource = r_Auditory_editor_settings_page; - name = "AuditoryNotification"; + }, + AVKON_SETTING_ITEM + { + identifier = EOtherResourceAuditoryNotification; + setting_page_resource = r_popup_settings_page; + name = "AuditoryNotification"; associated_resource = r_Auditory_editor_settings_page_texts; - }, - AVKON_SETTING_ITEM - { - identifier = EOtherResourcePopupNotification; - setting_page_resource = r_Popup_editor_settings_page; - name = "PopupNotification"; + }, + AVKON_SETTING_ITEM + { + identifier = EOtherResourcePopupNotification; + setting_page_resource = r_popup_settings_page; + name = "PopupNotification"; associated_resource = r_Popup_editor_settings_page_texts; - }, - AVKON_SETTING_ITEM - { - identifier = EOtherResourcePopupNotificationType; - setting_page_resource = r_PopupType_editor_settings_page; - name = "PopupNotificationType"; + }, + AVKON_SETTING_ITEM + { + identifier = EOtherResourcePopupNotificationType; + setting_page_resource = r_popup_settings_page; + name = "PopupNotificationType"; associated_resource = r_PopupType_editor_settings_page_texts; - }, - AVKON_SETTING_ITEM - { - identifier = EOtherResourceEdgeDtmSupport; - setting_page_resource = r_edgedtm_editor_settings_page; - name = "EdgeDtmSupport"; + }, + AVKON_SETTING_ITEM + { + identifier = EOtherResourceEdgeDtmSupport; + setting_page_resource = r_popup_settings_page; + name = "EdgeDtmSupport"; associated_resource = r_edgedtm_editor_settings_page_texts; - }, - AVKON_SETTING_ITEM - { - identifier = EOtherResourceSessionSetupMethod; - setting_page_resource = r_signal_editor_settings_page; - name = "ForceInternetSignaling"; + }, + AVKON_SETTING_ITEM + { + identifier = EOtherResourceSessionSetupMethod; + setting_page_resource = r_popup_settings_page; + name = "ForceInternetSignaling"; associated_resource = r_signal_editor_settings_page_texts; - }, - AVKON_SETTING_ITEM - { - identifier = EOtherResourceAutoRecord; - setting_page_resource = r_videosaving_editor_settings_page; - name = "AutoRecord"; + }, + AVKON_SETTING_ITEM + { + identifier = EOtherResourceAutoRecord; + setting_page_resource = r_popup_settings_page; + name = "AutoRecord"; associated_resource = r_videosaving_editor_settings_page_texts; - }, - AVKON_SETTING_ITEM - { - identifier = EOtherResourceVideoLocation; - setting_page_resource = r_editor_settings_page; - name = "VideoLocation"; - }, - AVKON_SETTING_ITEM - { - identifier = EOtherResourceSipProfileId; - setting_page_resource = r_editor_settings_page; - name = "SipProfileId"; - }, - AVKON_SETTING_ITEM - { - identifier = EOtherResourceUiOrientation; - setting_page_resource = r_uiorientation_editor_settings_page; - name = "UiOrientation"; + }, + AVKON_SETTING_ITEM + { + identifier = EOtherResourceVideoLocation; + setting_page_resource = r_editor_settings_page; + name = "VideoLocation"; + }, + AVKON_SETTING_ITEM + { + identifier = EOtherResourceSipProfileId; + setting_page_resource = r_editor_settings_page; + name = "SipProfileId"; + }, + AVKON_SETTING_ITEM + { + identifier = EOtherResourceUiOrientation; + setting_page_resource = r_popup_settings_page; + name = "UiOrientation"; associated_resource = r_uiorientation_editor_settings_page_texts; - }, - AVKON_SETTING_ITEM - { - identifier = EOtherResourceCapabilityQuery; - setting_page_resource = r_capquery_editor_settings_page; - name = "CapabilityQuery"; + }, + AVKON_SETTING_ITEM + { + identifier = EOtherResourceCapabilityQuery; + setting_page_resource = r_popup_settings_page; + name = "CapabilityQuery"; associated_resource = r_capquery_editor_settings_page_texts; - }, - AVKON_SETTING_ITEM - { - identifier = EOtherResourceProductModeVariationKey; - setting_page_resource = r_editor_settings_page; - name = "ProductModeVariation"; - }, - AVKON_SETTING_ITEM + }, + AVKON_SETTING_ITEM + { + identifier = EOtherResourceProductModeVariationKey; + setting_page_resource = r_editor_settings_page; + name = "ProductModeVariation"; + }, + AVKON_SETTING_ITEM + { + identifier = EOtherResourceEncoderConfigurationInfo; + setting_page_resource = r_encoder_info_settings_page; + name = "EncoderConfigurationInfo"; + }, + AVKON_SETTING_ITEM + { + identifier = EOtherResourceEncodingDevice; + setting_page_resource = r_encoding_device_settings_page; + name = "EncodingDevice"; + }, + AVKON_SETTING_ITEM + { + identifier = EOtherResourceAllowOnlyWithActiveCSCall; + setting_page_resource = r_popup_settings_page; + name = "AllowWithCSCallOnly"; + associated_resource = r_activecscall_editor_settings_page_texts; + }, + AVKON_SETTING_ITEM { - identifier = EOtherRResourcePrivacyVariationMode; - setting_page_resource = r_privacy_settings_page; - name = "Privacy variation"; - associated_resource = r_privacy_editor_settings_page_texts; + identifier = EOtherResourceAllowOnlyIn3GNetwork; + setting_page_resource = r_popup_settings_page; + name = "AllowIn3GNetworkOnly"; + associated_resource = r_3gnetwork_editor_settings_page_texts; + }, + AVKON_SETTING_ITEM + { + identifier = EOtherResourceCameraUsage; + setting_page_resource = r_popup_settings_page; + name = "CameraUsage"; + associated_resource = r_camera_usage_settings_page_texts; }, - AVKON_SETTING_ITEM - { - identifier = EOtherResourceEncoderConfigurationInfo; - setting_page_resource = r_encoder_info_settings_page; - name = "EncoderConfigurationInfo"; - }, - AVKON_SETTING_ITEM - { - identifier = EOtherResourceEncodingDevice; - setting_page_resource = r_encoding_device_settings_page; - name = "EncodingDevice"; - } - }; - } + AVKON_SETTING_ITEM + { + identifier = EOtherResourceVideoDirection; + setting_page_resource = r_popup_settings_page; + name = "VideoDirection"; + associated_resource = r_video_direction_settings_page_texts; + }, + AVKON_SETTING_ITEM + { + identifier = EOtherResourceVideoBandwidth; + setting_page_resource = r_editor_settings_page; + name = "VideoBandwidth,KBits"; + }, + AVKON_SETTING_ITEM + { + identifier = EOtherResourceFastMode; + setting_page_resource = r_popup_settings_page; + name = "FastStartupMode"; + associated_resource = r_fast_mode_settings_page_texts; + } + }; + } //activation -RESOURCE AVKON_SETTING_PAGE r_activation_editor_settings_page - { - number = 1; - type = EAknCtPopupSettingList; - editor_resource_id = r_enumerated_text_setting_other_editor; - } - RESOURCE AVKON_POPUP_SETTING_TEXTS r_activation_editor_settings_page_texts { setting_texts_resource = r_activation_editor_settings_page_texts_array; - popped_up_texts_resource = r_activation_editor_settings_page_popedup; } RESOURCE ARRAY r_activation_editor_settings_page_texts_array { - items = + items = { - AVKON_ENUMERATED_TEXT { value=0; text = "0.EAlwaysActive"; }, - AVKON_ENUMERATED_TEXT { value=1; text = "1.ENever"; } - }; - } - -RESOURCE ARRAY r_activation_editor_settings_page_popedup - { - items = - { - LBUF { txt = "0.EAlwaysActive"; }, - LBUF { txt = "1.ENever"; } + AVKON_ENUMERATED_TEXT { value=-1; text = "Not defined"; }, + AVKON_ENUMERATED_TEXT { value=0; text = "0.EAlwaysActive"; }, + AVKON_ENUMERATED_TEXT { value=1; text = "1.EActiveInHomeNetworks"; }, + AVKON_ENUMERATED_TEXT { value=2; text = "2.ENever"; } }; } //operator variant -RESOURCE AVKON_SETTING_PAGE r_operator_editor_settings_page - { - number = 1; - type = EAknCtPopupSettingList; - editor_resource_id = r_enumerated_text_setting_other_editor; - } - RESOURCE AVKON_POPUP_SETTING_TEXTS r_operator_editor_settings_page_texts { setting_texts_resource = r_operator_editor_settings_page_texts_array; - popped_up_texts_resource = r_operator_editor_settings_page_popedup; } RESOURCE ARRAY r_operator_editor_settings_page_texts_array { - items = + items = { + AVKON_ENUMERATED_TEXT { value=-1; text = "Not defined"; }, AVKON_ENUMERATED_TEXT { value=0; text = "0.EStandard"; }, AVKON_ENUMERATED_TEXT { value=1; text = "1.EOperatorSpecific"; } }; } -RESOURCE ARRAY r_operator_editor_settings_page_popedup - { - items = - { - LBUF { txt = "0.EStandard"; }, - LBUF { txt = "1.EOperatorSpecific"; } - }; - } - //Auditory Notification -RESOURCE AVKON_SETTING_PAGE r_Auditory_editor_settings_page - { - number = 1; - type = EAknCtPopupSettingList; - editor_resource_id = r_enumerated_text_setting_other_editor; - } - RESOURCE AVKON_POPUP_SETTING_TEXTS r_Auditory_editor_settings_page_texts { setting_texts_resource = r_Auditory_editor_settings_page_texts_array; - popped_up_texts_resource = r_Auditory_editor_settings_page_popedup; } RESOURCE ARRAY r_Auditory_editor_settings_page_texts_array { - items = + items = { + AVKON_ENUMERATED_TEXT { value=-1; text = "Not defined"; }, AVKON_ENUMERATED_TEXT { value=0; text = "0.EAuditoryNotificationOn"; }, AVKON_ENUMERATED_TEXT { value=1; text = "1.EAuditoryNotificationOff"; } }; } -RESOURCE ARRAY r_Auditory_editor_settings_page_popedup - { - items = - { - LBUF { txt = "0.EAuditoryNotificationOn"; }, - LBUF { txt = "1.EAuditoryNotificationOff"; } - }; - } - - //Popup Notification -RESOURCE AVKON_SETTING_PAGE r_Popup_editor_settings_page - { - number = 1; - type = EAknCtPopupSettingList; - editor_resource_id = r_enumerated_text_setting_other_editor; - } - RESOURCE AVKON_POPUP_SETTING_TEXTS r_Popup_editor_settings_page_texts { setting_texts_resource = r_Popup_editor_settings_page_texts_array; - popped_up_texts_resource = r_Popup_editor_settings_page_popedup; } RESOURCE ARRAY r_Popup_editor_settings_page_texts_array { - items = + items = { + AVKON_ENUMERATED_TEXT { value=-1; text = "Not defined"; }, AVKON_ENUMERATED_TEXT { value=0; text = "0.EPopupNotificationOn"; }, AVKON_ENUMERATED_TEXT { value=1; text = "1.EPopupNotificationOff"; } }; } -RESOURCE ARRAY r_Popup_editor_settings_page_popedup - { - items = - { - LBUF { txt = "0.EPopupNotificationOn"; }, - LBUF { txt = "1.EPopupNotificationOff"; } - }; - } - //Popup Notification Type -RESOURCE AVKON_SETTING_PAGE r_PopupType_editor_settings_page - { - number = 1; - type = EAknCtPopupSettingList; - editor_resource_id = r_enumerated_text_setting_other_editor; - } - RESOURCE AVKON_POPUP_SETTING_TEXTS r_PopupType_editor_settings_page_texts { setting_texts_resource = r_PopupType_editor_settings_page_texts_array; - popped_up_texts_resource = r_PopupType_editor_settings_page_popedup; } RESOURCE ARRAY r_PopupType_editor_settings_page_texts_array { - items = + items = { + AVKON_ENUMERATED_TEXT { value=-1; text = "Not defined"; }, AVKON_ENUMERATED_TEXT { value=0; text = "0.ENotificationTypeQueryUser"; }, AVKON_ENUMERATED_TEXT { value=1; text = "1.ENotificationTypePopup"; } }; } -RESOURCE ARRAY r_PopupType_editor_settings_page_popedup - { - items = - { - LBUF { txt = "0.ENotificationTypeQueryUser"; }, - LBUF { txt = "1.ENotificationTypePopup"; } - }; - } - - //EDGE/DTM -RESOURCE AVKON_SETTING_PAGE r_edgedtm_editor_settings_page - { - number = 1; - type = EAknCtPopupSettingList; - editor_resource_id = r_enumerated_text_setting_other_editor; - } - RESOURCE AVKON_POPUP_SETTING_TEXTS r_edgedtm_editor_settings_page_texts { setting_texts_resource = r_edgedtm_editor_settings_page_texts_array; - popped_up_texts_resource = r_edgedtm_editor_settings_page_popedup; } RESOURCE ARRAY r_edgedtm_editor_settings_page_texts_array { - items = + items = { + AVKON_ENUMERATED_TEXT { value=-1; text = "Not defined"; }, AVKON_ENUMERATED_TEXT { value=0; text = "0.EDtmModeAllowed"; }, AVKON_ENUMERATED_TEXT { value=1; text = "1.EDtmModeNotAllowed"; } }; } -RESOURCE ARRAY r_edgedtm_editor_settings_page_popedup - { - items = - { - LBUF { txt = "0.EDtmModeAllowed"; }, - LBUF { txt = "1.EDtmModeNotAllowed"; } - }; - } - //Internet Signalling -RESOURCE AVKON_SETTING_PAGE r_signal_editor_settings_page - { - number = 1; - type = EAknCtPopupSettingList; - editor_resource_id = r_enumerated_text_setting_other_editor; - } - RESOURCE AVKON_POPUP_SETTING_TEXTS r_signal_editor_settings_page_texts { setting_texts_resource = r_signal_editor_settings_page_texts_array; - popped_up_texts_resource = r_signal_editor_settings_page_popedup; } RESOURCE ARRAY r_signal_editor_settings_page_texts_array { - items = + items = { + AVKON_ENUMERATED_TEXT { value=-1; text = "Not defined"; }, AVKON_ENUMERATED_TEXT { value=0; text = "0.EForceInternetSignaling"; }, AVKON_ENUMERATED_TEXT { value=1; text = "1.EFollowProfileConfiguration"; } }; } -RESOURCE ARRAY r_signal_editor_settings_page_popedup - { - items = - { - LBUF { txt = "0.EForceInternetSignaling"; }, - LBUF { txt = "1.EFollowProfileConfiguration"; } - }; - } - //Video Saving -RESOURCE AVKON_SETTING_PAGE r_videosaving_editor_settings_page - { - number = 1; - type = EAknCtPopupSettingList; - editor_resource_id = r_enumerated_text_setting_other_editor; - } - RESOURCE AVKON_POPUP_SETTING_TEXTS r_videosaving_editor_settings_page_texts { setting_texts_resource = r_videosaving_editor_settings_page_texts_array; - popped_up_texts_resource = r_videosaving_editor_settings_page_popedup; } RESOURCE ARRAY r_videosaving_editor_settings_page_texts_array { - items = + items = { + AVKON_ENUMERATED_TEXT { value=-1; text = "Not defined"; }, AVKON_ENUMERATED_TEXT { value=0; text = "0.EAutoRecordOn"; }, AVKON_ENUMERATED_TEXT { value=1; text = "1.EAutoRecordOff"; } }; } -RESOURCE ARRAY r_videosaving_editor_settings_page_popedup - { - items = - { - LBUF { txt = "0.EAutoRecordOn"; }, - LBUF { txt = "1.EAutoRecordOff"; } - }; - } - //UI Orientation -RESOURCE AVKON_SETTING_PAGE r_uiorientation_editor_settings_page - { - number = 1; - type = EAknCtPopupSettingList; - editor_resource_id = r_enumerated_text_setting_other_editor; - } - RESOURCE AVKON_POPUP_SETTING_TEXTS r_uiorientation_editor_settings_page_texts { setting_texts_resource = r_uiorientation_editor_settings_page_texts_array; - popped_up_texts_resource = r_uiorientation_editor_settings_page_popedup; } RESOURCE ARRAY r_uiorientation_editor_settings_page_texts_array { - items = + items = { + AVKON_ENUMERATED_TEXT { value=-1; text = "Not defined"; }, AVKON_ENUMERATED_TEXT { value=0; text = "0.EPortrait"; }, AVKON_ENUMERATED_TEXT { value=1; text = "1.ELandscape"; } }; } -RESOURCE ARRAY r_uiorientation_editor_settings_page_popedup - { - items = - { - LBUF { txt = "0.EPortrait"; }, - LBUF { txt = "1.ELandscape"; } - }; - } //Capability Query -RESOURCE AVKON_SETTING_PAGE r_capquery_editor_settings_page - { - number = 1; - type = EAknCtPopupSettingList; - editor_resource_id = r_enumerated_text_setting_other_editor; - } - RESOURCE AVKON_POPUP_SETTING_TEXTS r_capquery_editor_settings_page_texts { setting_texts_resource = r_capquery_editor_settings_page_texts_array; - popped_up_texts_resource = r_capquery_editor_settings_page_popedup; } RESOURCE ARRAY r_capquery_editor_settings_page_texts_array { - items = + items = { + AVKON_ENUMERATED_TEXT { value=-1; text = "Not defined"; }, AVKON_ENUMERATED_TEXT { value=0; text = "0.ESequential"; }, AVKON_ENUMERATED_TEXT { value=1; text = "1.EParallel"; }, AVKON_ENUMERATED_TEXT { value=2; text = "2.ENoOptions"; } }; } -RESOURCE ARRAY r_capquery_editor_settings_page_popedup + +//Allow multimedia sharing only with active CS call +RESOURCE AVKON_POPUP_SETTING_TEXTS r_activecscall_editor_settings_page_texts { - items = + setting_texts_resource = r_activecscall_editor_settings_page_texts_array; + } + +RESOURCE ARRAY r_activecscall_editor_settings_page_texts_array + { + items = { - LBUF { txt = "0.ESequential"; }, - LBUF { txt = "1.EParallel"; }, - LBUF { txt = "2.ENoOptions"; } + AVKON_ENUMERATED_TEXT { value=-1; text = "Not defined"; }, + AVKON_ENUMERATED_TEXT { value=0; text = "0.EAllowedAllCalls"; }, + AVKON_ENUMERATED_TEXT { value=1; text = "1.EAllowedCSOnly"; } + }; + } + + +//Allow multimedia sharing only in 3G network +RESOURCE AVKON_POPUP_SETTING_TEXTS r_3gnetwork_editor_settings_page_texts + { + setting_texts_resource = r_3gnetwork_editor_settings_page_texts_array; + } + +RESOURCE ARRAY r_3gnetwork_editor_settings_page_texts_array + { + items = + { + AVKON_ENUMERATED_TEXT { value=-1; text = "Not defined"; }, + AVKON_ENUMERATED_TEXT { value=0; text = "0.EAllowedAllBearers"; }, + AVKON_ENUMERATED_TEXT { value=1; text = "1.EAllowed3GOnly"; } }; } -//Privacy -RESOURCE AVKON_SETTING_PAGE r_privacy_settings_page + +//Camera Usage +RESOURCE AVKON_POPUP_SETTING_TEXTS r_camera_usage_settings_page_texts { - number = 1; - type = EAknCtPopupSettingList; - editor_resource_id = r_enumerated_text_setting_other_editor; + setting_texts_resource = r_camera_usage_settings_page_texts_array; } -RESOURCE AVKON_POPUP_SETTING_TEXTS r_privacy_editor_settings_page_texts +RESOURCE ARRAY r_camera_usage_settings_page_texts_array { - setting_texts_resource = r_privacy_editor_settings_page_texts_array; - popped_up_texts_resource = r_privacy_editor_settings_page_popedup; + items = + { + AVKON_ENUMERATED_TEXT { value=-1; text = "Not defined"; }, + AVKON_ENUMERATED_TEXT { value=0; text = "0.EUseOnlyMainCamera"; }, + AVKON_ENUMERATED_TEXT { value=1; text = "1.EUseOnlySecondaryCamera"; }, + AVKON_ENUMERATED_TEXT { value=2; text = "2.EUseCameraSwapping"; } + }; + } + + +//Video direction +RESOURCE AVKON_POPUP_SETTING_TEXTS r_video_direction_settings_page_texts + { + setting_texts_resource = r_video_direction_settings_page_texts_array; } -RESOURCE ARRAY r_privacy_editor_settings_page_texts_array +RESOURCE ARRAY r_video_direction_settings_page_texts_array { - items = + items = { - AVKON_ENUMERATED_TEXT { value=1; text = "0.EPrivacyOn"; }, - AVKON_ENUMERATED_TEXT { value=2; text = "1.ErivacyOff"; } + AVKON_ENUMERATED_TEXT { value=-1; text = "Not defined"; }, + AVKON_ENUMERATED_TEXT { value=0; text = "0.EOneWayVideo"; }, + AVKON_ENUMERATED_TEXT { value=1; text = "1.ETwoWayVideo"; } }; } -RESOURCE ARRAY r_privacy_editor_settings_page_popedup + + +//Fast startup mode +RESOURCE AVKON_POPUP_SETTING_TEXTS r_fast_mode_settings_page_texts { - items = - { - LBUF { txt = "0.EPrivacyOn"; }, - LBUF { txt = "1.ErivacyOfff"; } + setting_texts_resource = r_fast_mode_settings_page_texts_array; + } + +RESOURCE ARRAY r_fast_mode_settings_page_texts_array + { + items = + { + AVKON_ENUMERATED_TEXT { value=-1; text = "Not defined"; }, + AVKON_ENUMERATED_TEXT { value=0; text = "0.EFastModeOn"; }, + AVKON_ENUMERATED_TEXT { value=1; text = "1.EFastModeOff"; } }; } - + + // add setting page and editor resources for "details" field here RESOURCE AVKON_SETTING_PAGE r_editor_settings_page { @@ -841,6 +730,13 @@ editor_resource_id = r_integer_edwin; } +RESOURCE AVKON_SETTING_PAGE r_popup_settings_page + { + number = 1; + type = EAknCtPopupSettingList; + editor_resource_id = r_enumerated_text_setting_other_editor; + } + RESOURCE AVKON_SETTING_PAGE r_encoder_info_settings_page { number = 14; @@ -873,54 +769,54 @@ } RESOURCE CBA r_cenrepeditor_softkeys_start_exit - { - buttons = - { - CBA_BUTTON - { - id = EAknSoftKeyStart; - txt = qtn_cenrepeditor_cba_text_start; - }, - CBA_BUTTON - { - id = EAknSoftKeyExit; - txt = qtn_cenrepeditor_cba_text_Exit; - } - }; - } + { + buttons = + { + CBA_BUTTON + { + id = EAknSoftKeyStart; + txt = qtn_cenrepeditor_cba_text_start; + }, + CBA_BUTTON + { + id = EAknSoftKeyExit; + txt = qtn_cenrepeditor_cba_text_Exit; + } + }; + } RESOURCE CBA r_cenrepeditor_softkeys_stop_exit - { - buttons = - { - CBA_BUTTON - { - id = EAknSoftKeyStop; - txt = qtn_cenrepeditor_cba_text_stop; - }, - CBA_BUTTON - { - id = EAknSoftKeyExit; - txt = qtn_cenrepeditor_cba_text_Exit; - } - }; - } + { + buttons = + { + CBA_BUTTON + { + id = EAknSoftKeyStop; + txt = qtn_cenrepeditor_cba_text_stop; + }, + CBA_BUTTON + { + id = EAknSoftKeyExit; + txt = qtn_cenrepeditor_cba_text_Exit; + } + }; + } RESOURCE AVKON_SETTING_ITEM_LIST r_cenrepeditor_start_stop_settings_list { - flags = EAknSettingItemNumberedStyle; - items = - { - AVKON_SETTING_ITEM - { - name = "Usecase"; - identifier = EApplicationStartStop; - setting_page_resource = r_cenrepeditor_start_stop_settings_list_page; - associated_resource = r_cenrepeditor_start_stop_associated_settings_list_page; - - } - }; + flags = EAknSettingItemNumberedStyle; + items = + { + AVKON_SETTING_ITEM + { + name = "Usecase"; + identifier = EApplicationStartStop; + setting_page_resource = r_cenrepeditor_start_stop_settings_list_page; + associated_resource = r_cenrepeditor_start_stop_associated_settings_list_page; + } + }; } + RESOURCE AVKON_SETTING_PAGE r_cenrepeditor_start_stop_settings_list_page { number = -16380; @@ -936,66 +832,40 @@ RESOURCE AVKON_POPUP_SETTING_TEXTS r_cenrepeditor_start_stop_associated_settings_list_page { setting_texts_resource = r_usecase_array; - popped_up_texts_resource = r_usecase_array_texts; } + RESOURCE ARRAY r_usecase_array { items = { - AVKON_ENUMERATED_TEXT - { - text = "Live"; - value = 0; - }, - AVKON_ENUMERATED_TEXT - { - text = "Clip"; - value = 1; - }, - AVKON_ENUMERATED_TEXT - { - text = "StillImage"; - value = 2; - }, - AVKON_ENUMERATED_TEXT - { - text = "Receive"; - value = 3; - }, - AVKON_ENUMERATED_TEXT - { - text = "Continue"; - value = 4; - } + AVKON_ENUMERATED_TEXT + { + text = "Live"; + value = 0; + }, + AVKON_ENUMERATED_TEXT + { + text = "Clip"; + value = 1; + }, + AVKON_ENUMERATED_TEXT + { + text = "StillImage"; + value = 2; + }, + AVKON_ENUMERATED_TEXT + { + text = "Receive"; + value = 3; + }, + AVKON_ENUMERATED_TEXT + { + text = "Continue"; + value = 4; + } }; } -RESOURCE ARRAY r_usecase_array_texts - { - items = { - LBUF - { - txt = "Live"; - }, - LBUF - { - txt = "Clip"; - }, - LBUF - { - txt = "StillImage"; - }, - LBUF - { - txt = "Receive"; - }, - LBUF - { - txt = "Continue"; - } - }; - } - // ----------------------------------------------------------------------------- // // ----------------------------------------------------------------------------- diff -r 33a5d2bbf6fc -r 73a1feb507fb tsrc/CenrepEditor/group/CenrepEditor.mmp --- a/tsrc/CenrepEditor/group/CenrepEditor.mmp Thu Aug 19 09:51:39 2010 +0300 +++ b/tsrc/CenrepEditor/group/CenrepEditor.mmp Tue Aug 31 15:12:07 2010 +0300 @@ -18,15 +18,13 @@ #include #include #include -#include TARGET CenrepEditor.exe TARGETTYPE exe UID 0x100039CE 0x10282398 VENDORID VID_DEFAULT -CAPABILITY EUNIT_CAPS - +CAPABILITY CAP_APPLICATION EPOCSTACKSIZE 0xF000 @@ -65,7 +63,6 @@ LANG SC USERINCLUDE ../inc -USERINCLUDE ../../../common/inc APP_LAYER_SYSTEMINCLUDE diff -r 33a5d2bbf6fc -r 73a1feb507fb tsrc/CenrepEditor/inc/cenrepeditor.hrh --- a/tsrc/CenrepEditor/inc/cenrepeditor.hrh Thu Aug 19 09:51:39 2010 +0300 +++ b/tsrc/CenrepEditor/inc/cenrepeditor.hrh Tue Aug 31 15:12:07 2010 +0300 @@ -37,41 +37,43 @@ EAknSoftKeySave=1, EAknSoftKeyExit, EAknSoftKeyStart, - - - - - - EAknSoftKeyStop }; + enum TAvkonSettingsItemCommand - { - EPhoneResouceCamera = 1, - EPhoneResouceKeypad, - EPhoneResouceVideoPlayer, - EPhoneResouceCameraInformation, - EKodiakPhoneCall - }; + { + EPhoneResouceCamera = 1, + EPhoneResouceKeypad, + EPhoneResouceVideoPlayer, + EPhoneResouceCameraInformation, + EKodiakPhoneCall + }; + enum TAvkonSettingsItemCommandOther - { - EOtherResourceActivation=1, - EOtherResourceOperatorVariant, - EOtherResourceAuditoryNotification, - EOtherResourcePopupNotification, - EOtherResourcePopupNotificationType, - EOtherResourceEdgeDtmSupport, - EOtherResourceSessionSetupMethod, - EOtherResourceAutoRecord, - EOtherResourceVideoLocation, - EOtherResourceSipProfileId, - EOtherResourceUiOrientation, - EOtherResourceCapabilityQuery, - EOtherResourceProductModeVariationKey, - EOtherResourceEncoderConfigurationInfo, - EOtherResourceEncodingDevice, - EOtherRResourcePrivacyVariationMode - }; + { + EOtherResourceActivation=1, + EOtherResourceOperatorVariant, + EOtherResourceAuditoryNotification, + EOtherResourcePopupNotification, + EOtherResourcePopupNotificationType, + EOtherResourceEdgeDtmSupport, + EOtherResourceSessionSetupMethod, + EOtherResourceAutoRecord, + EOtherResourceVideoLocation, + EOtherResourceSipProfileId, + EOtherResourceUiOrientation, + EOtherResourceCapabilityQuery, + EOtherResourceProductModeVariationKey, + EOtherResourceEncoderConfigurationInfo, + EOtherResourceEncodingDevice, + EOtherResourceAllowOnlyWithActiveCSCall, + EOtherResourceAllowOnlyIn3GNetwork, + EOtherResourceCameraUsage, + EOtherResourceVideoDirection, + EOtherResourceVideoBandwidth, + EOtherResourceFastMode + }; + enum TAvkonViewApplicationStartStop { EApplicationStartStop=1 diff -r 33a5d2bbf6fc -r 73a1feb507fb tsrc/CenrepEditor/inc/cenrepeditorlistbox2.h --- a/tsrc/CenrepEditor/inc/cenrepeditorlistbox2.h Thu Aug 19 09:51:39 2010 +0300 +++ b/tsrc/CenrepEditor/inc/cenrepeditorlistbox2.h Tue Aug 31 15:12:07 2010 +0300 @@ -40,12 +40,6 @@ public: CAknSettingItem* CreateSettingItemL( TInt identifier ); void SetData(COtherResources* iOtherResources); - - public: // Implementation from base class - // void HandleListBoxEventL(CEikListBox* aListBox, TListBoxEvent aEventType); - // TKeyResponse OfferKeyEventL(const TKeyEvent& aKeyEvent,TEventCode aType); - - void EditItemL(TInt aIndex, TBool aCalledFromMenu); private: void SizeChanged(); diff -r 33a5d2bbf6fc -r 73a1feb507fb tsrc/CenrepEditor/inc/cenrepeditormodel.h --- a/tsrc/CenrepEditor/inc/cenrepeditormodel.h Thu Aug 19 09:51:39 2010 +0300 +++ b/tsrc/CenrepEditor/inc/cenrepeditormodel.h Tue Aug 31 15:12:07 2010 +0300 @@ -40,22 +40,13 @@ static COtherResources* NewL(); static COtherResources* NewLC(); ~COtherResources(); - public : + + public: void SaveL(); - void SaveCRKeyValuesL(); - void ReadL(); - void ReadCRKeyValuesL(); - void ReadKeyValueL(CRepository* repository, const TInt & aKey , TInt & aVal); - void SetKeyValueL(CRepository* repository, const TInt & aKey , TInt & aVal); - - void ReadKeyValueL(CRepository* repository, TInt aKey, TDes& aVal); - void SetKeyValueL(CRepository* repository, TInt aKey, const TDesC& aVal); - - private : - void HandleError(TBool aType ,TInt aError , TPtrC aKeyName ); public: + TInt iActivation; TInt iOperatorVariant; TInt iAuditoryNotification; @@ -69,15 +60,22 @@ TInt iUiOrientation; TInt iCapabilityQuery; TInt iProductModeVariation; - TInt iEncodingDevice; - TInt iPrivacyVariation; - TInt iDummy; - + TInt iEncodingDevice; + TInt iOnlyWithActiveCSCall; + TInt iOnlyIn3GNetwork; TBuf iEncoderInfo; TBuf iEncodingDeviceStr; + TInt iCameraUsage; + TInt iVideoDirection; + TInt iVideoBandwidth; + TInt iFastMode; - private : + private: void ConstructL(); + void SetKeyValueL(const TUint32& aKey , TInt& aVal); + + private: + CRepository* iRepository; }; class CPhoneResources : public CBase @@ -86,22 +84,20 @@ static CPhoneResources* NewL(); static CPhoneResources* NewLC(); ~CPhoneResources(); - public : + + public : void SaveL(); - void ReadL(); - private : - void HandleError(TBool aType ,TInt aError , TPtrC aKeyName ); + public: TInt iCameraAvailability; TInt iKeypadAvailability; TInt iVideoPlayerAvailability; TInt iCameraInformation; TInt iKodiakPhoneCall; - TInt iDummy; private : void ConstructL(); - TInt SetValueL(TUid aCategory, TUint aKey, TInt aValue); + void SetValueL(TUid aCategory, TUint aKey, TInt aValue); }; class CMusApplication : public CBase diff -r 33a5d2bbf6fc -r 73a1feb507fb tsrc/CenrepEditor/install/cenrepeditor.sis Binary file tsrc/CenrepEditor/install/cenrepeditor.sis has changed diff -r 33a5d2bbf6fc -r 73a1feb507fb tsrc/CenrepEditor/install/cenrepeditor.sisx Binary file tsrc/CenrepEditor/install/cenrepeditor.sisx has changed diff -r 33a5d2bbf6fc -r 73a1feb507fb tsrc/CenrepEditor/install/cenrepeditor_.sis Binary file tsrc/CenrepEditor/install/cenrepeditor_.sis has changed diff -r 33a5d2bbf6fc -r 73a1feb507fb tsrc/CenrepEditor/install/sis_update_udeb.bat --- a/tsrc/CenrepEditor/install/sis_update_udeb.bat Thu Aug 19 09:51:39 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,19 +0,0 @@ -@rem -@rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). -@rem All rights reserved. -@rem This component and the accompanying materials are made available -@rem under the terms of "Eclipse Public License v1.0" -@rem which accompanies this distribution, and is available -@rem at the URL "http://www.eclipse.org/legal/epl-v10.html". -@rem -@rem Initial Contributors: -@rem Nokia Corporation - initial contribution. -@rem -@rem Contributors: -@rem -@rem Description: -@rem - -makesis cenrepeditor.pkg cenrepeditor-tmp.sis -signsis -cr -s "cenrepeditor-tmp.SIS" "cenrepeditor.sisx" "RDTest_02.der" "RDTest_02.key" -REM del cenrepeditor-tmp.sis diff -r 33a5d2bbf6fc -r 73a1feb507fb tsrc/centralrepositorystub/inc/cenrepnotifyhandler.h --- a/tsrc/centralrepositorystub/inc/cenrepnotifyhandler.h Thu Aug 19 09:51:39 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,121 +0,0 @@ -/* -* Copyright (c) 2010 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: -* -*/ - - - -#ifndef CENREPNOTIFYHANDLER_H -#define CENREPNOTIFYHANDLER_H - -// INCLUDES -#include -#include - -// FORWARD DECLARATIONS -class MCenRepNotifyHandlerCallback; -class CRepository; - - - -class CCenRepNotifyHandler : public CBase//CActive - { - public: - /** - * Defines different key types. Enumeration is used to indicate the - * key type that is listened to. - */ - enum TCenRepKeyType - { - EIntKey, ///< Key holds a TInt value. - ERealKey, ///< Key holds a TReal value. - EStringKey, ///< Key holds a TDesC16 value. - EBinaryKey ///< Key holds a TDesC8 value. - }; - - IMPORT_C static CCenRepNotifyHandler* NewL( MCenRepNotifyHandlerCallback& aCallback, - CRepository& aSession ); - - IMPORT_C static CCenRepNotifyHandler* NewLC( MCenRepNotifyHandlerCallback& aCallback, - CRepository& aSession ); - IMPORT_C void StartListeningL(); - - IMPORT_C void StopListening(); - - - /** - * Destructor. - */ - IMPORT_C virtual ~CCenRepNotifyHandler(); -/* - protected: - - void RunL(); - - TInt RunError( TInt aError ); - - void DoCancel(); -*/ - private: - - CCenRepNotifyHandler( MCenRepNotifyHandlerCallback& aCallback, - CRepository& aSession ); - - private: - - CRepository& iSession; // not owned by this class - MCenRepNotifyHandlerCallback& iCallback; // not owned by this class -// TCenRepKeyType iKeyType; -// TUint32 iId; -// TBool iWholeRepository; // The flag to indicate if listening is for whole repository - }; - - -/** -* Class provides a callback interface for handling the notifification -* events from the Central Repository. The Client derives a class -* from this interface and implements the HandleNotify-methods that -* interest it. -* An empty default implementation is provided for all of the methods. -* In debug build the default implementations print out a debug trace. -* -* @publishedPartner -* @released -*/ -class MCenRepNotifyHandlerCallback - { - - public: - - /** - * This callback method is used to notify the client about - * changes in keys when the whole repository is listened for. - * - * Note: It is not guaranteed that a notification will be received - * for all keys, if multiple keys are changed in rapid succession - * by multiple threads or when the whole repository is reset, - * therefore only listen for whole repository if this is not an issue. - * - * @param aId Id of the key that has changed. If multiple keys were changed by - * whole repository reset, value will be KInvalidNotificationId. - * @capability Dependent Capability required depends on implementation of override. - */ - IMPORT_C virtual void HandleNotifyGeneric( TUint32 aId ); - - }; - -#endif // CENREPNOTIFYHANDLER_H - -// End of File diff -r 33a5d2bbf6fc -r 73a1feb507fb tsrc/centralrepositorystub/inc/centralrepository.h --- a/tsrc/centralrepositorystub/inc/centralrepository.h Thu Aug 19 09:51:39 2010 +0300 +++ b/tsrc/centralrepositorystub/inc/centralrepository.h Tue Aug 31 15:12:07 2010 +0300 @@ -26,6 +26,7 @@ #include +const TInt KCenRepStubGlobalKeyValueMaxLen = 20; // stub stuff namespace NCentralRepositoryConstants /** Namespace encapsulating the CentralRepository constants. @@ -256,6 +257,10 @@ // Deletes heap reserved by previous function. static void DeleteStubAvcConfigKeys(); + // Setter for static cenrep val, note amount of globals is limited + static TInt SetStubGlobal(TUint32 aKey, TInt aValue); + static void ResetStubGlobal(); + public: // Stub data @@ -278,6 +283,16 @@ static TInt iStaticEncoderUid; + class TCenRepStubKeyValueEntry + { + public: + TUint iKey; + TInt iVal; + }; + + static TCenRepStubKeyValueEntry iGlobalKeyVals[ KCenRepStubGlobalKeyValueMaxLen ]; + static TInt iGlobalKeyValsTop; + TUid iRepositoryUid; diff -r 33a5d2bbf6fc -r 73a1feb507fb tsrc/centralrepositorystub/src/cenrepnotifyhandlerstub.cpp --- a/tsrc/centralrepositorystub/src/cenrepnotifyhandlerstub.cpp Thu Aug 19 09:51:39 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,99 +0,0 @@ -/* -* 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: -* -*/ - - -#include "cenrepnotifyhandler.h" -#include "centralrepository.h" - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -CCenRepNotifyHandler::CCenRepNotifyHandler( - MCenRepNotifyHandlerCallback& aCallback, - CRepository& aSession) - : iSession(aSession), iCallback(aCallback) - { - } - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -EXPORT_C CCenRepNotifyHandler* CCenRepNotifyHandler::NewL( - MCenRepNotifyHandlerCallback& aCallback, - CRepository& aSession) - { - CCenRepNotifyHandler* newInstance = NewLC(aCallback, aSession); - CleanupStack::Pop(); - return newInstance; - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -EXPORT_C CCenRepNotifyHandler* CCenRepNotifyHandler::NewLC( - MCenRepNotifyHandlerCallback& aCallback, - CRepository& aSession) - { - CCenRepNotifyHandler* newInstance = new (ELeave) CCenRepNotifyHandler(aCallback, aSession); - CleanupStack::PushL( newInstance ); - - return newInstance; - } - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -EXPORT_C CCenRepNotifyHandler::~CCenRepNotifyHandler() - { - - } - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -EXPORT_C void CCenRepNotifyHandler::StartListeningL() - { - - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -EXPORT_C void CCenRepNotifyHandler::StopListening() - { - - } - - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -EXPORT_C void MCenRepNotifyHandlerCallback::HandleNotifyGeneric(TUint32 /*aId*/) - { - - } diff -r 33a5d2bbf6fc -r 73a1feb507fb tsrc/centralrepositorystub/src/centralrepositorystub.cpp --- a/tsrc/centralrepositorystub/src/centralrepositorystub.cpp Thu Aug 19 09:51:39 2010 +0300 +++ b/tsrc/centralrepositorystub/src/centralrepositorystub.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -37,6 +37,8 @@ TBool CRepository::iStaticWriteAvcKeysToStaticData = EFalse; TInt CRepository::iForceFailWithCode = KErrNone; TInt CRepository::iStaticEncoderUid = 0; +CRepository::TCenRepStubKeyValueEntry CRepository::iGlobalKeyVals[ KCenRepStubGlobalKeyValueMaxLen ]; +TInt CRepository::iGlobalKeyValsTop = 0; // ----------------------------------------------------------------------------- @@ -101,6 +103,7 @@ User::LeaveIfError( self->Set ( MusSettingsKeys::KSipProfileId, 0 /*default profile*/ ) ); + User::LeaveIfError( self->Set ( MusSettingsKeys::KUiOrientation, MusSettingsKeys::EPortrait ) ); @@ -123,9 +126,9 @@ // EXPORT_C CRepository::~CRepository() { - iKeys.Reset(); - iValues.Reset(); - iDesC8Keys.Reset(); + iKeys.Close(); + iValues.Close(); + iDesC8Keys.Close(); delete iDesC8Values; } @@ -203,7 +206,17 @@ } } } - + if ( iGlobalKeyValsTop >= 0 && iGlobalKeyValsTop < KCenRepStubGlobalKeyValueMaxLen ) + { + for ( TInt i = 0; i < iGlobalKeyValsTop; i++ ) + { + if ( iGlobalKeyVals[ i ].iKey == aKey ) + { + aValue = CRepository::iGlobalKeyVals[ i ].iVal; + return KErrNone; + } + } + } return err; } @@ -478,8 +491,32 @@ delete iStaticAvcConfigKeys; iStaticAvcConfigKeys = NULL; } - + +void CRepository::ResetStubGlobal() + { + iGlobalKeyValsTop = 0; + } + +TInt CRepository::SetStubGlobal(TUint32 aKey, TInt aValue) + { + for ( TInt i = 0; i < iGlobalKeyValsTop; i++ ) + { + if ( iGlobalKeyVals[ i ].iKey == aKey ) + { + iGlobalKeyVals[ i ].iVal = aValue; + return KErrNone; + } + } + if ( iGlobalKeyValsTop >= KCenRepStubGlobalKeyValueMaxLen ) + { + return KErrNoMemory; + } + iGlobalKeyVals[ iGlobalKeyValsTop ].iKey = aKey; + iGlobalKeyVals[ iGlobalKeyValsTop ].iVal = aValue; + iGlobalKeyValsTop++; + return KErrNone; + } // ----------------------------------------------------------------------------- // // ----------------------------------------------------------------------------- @@ -487,6 +524,7 @@ CRepository::CRepository( TUid aRepositoryUid ) :iRepositoryUid( aRepositoryUid ) { + } diff -r 33a5d2bbf6fc -r 73a1feb507fb tsrc/cmusavainterfacestub/inc/cmusavainterfacestub.h --- a/tsrc/cmusavainterfacestub/inc/cmusavainterfacestub.h Thu Aug 19 09:51:39 2010 +0300 +++ b/tsrc/cmusavainterfacestub/inc/cmusavainterfacestub.h Tue Aug 31 15:12:07 2010 +0300 @@ -94,6 +94,7 @@ virtual TBool ExtensionAvailability(); virtual TBool Available( MMusAvaObserver::TAvailabilityName aAvailability ); virtual MMusAvaObserver::TAvailabilityStatus AvailabilityState( MMusAvaObserver::TAvailabilityName aAvailability ); + virtual void PrepareForReceivedInviteL(); public: //From MMusAvaObserver diff -r 33a5d2bbf6fc -r 73a1feb507fb tsrc/cmusavainterfacestub/src/cmusavainterfacestub.cpp --- a/tsrc/cmusavainterfacestub/src/cmusavainterfacestub.cpp Thu Aug 19 09:51:39 2010 +0300 +++ b/tsrc/cmusavainterfacestub/src/cmusavainterfacestub.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -202,7 +202,19 @@ } return MMusAvaObserver::EMusAvaStatusNotExecuted; } - + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusAvaInterface2::PrepareForReceivedInviteL() + { + for ( TInt i = 0; i < iAvailabilities.Count(); i++ ) + { + iAvailabilities[i]->PrepareForReceivedInviteL(); + } + } + void CMusAvaInterface2::AvailabilityChanged( TAvailabilityName aName, TAvailabilityStatus aStatus ) @@ -229,23 +241,36 @@ } + +// ----------------------------------------------------------------------------- +// CImplementationInformation::~CImplementationInformation +// ----------------------------------------------------------------------------- +// CImplementationInformation::~CImplementationInformation() { - + delete iData; + delete iDisplayName; + delete iOpaqueData; } - CImplementationInformation* CImplementationInformation::NewL( - TUid /*aUid*/, - TInt /*aVersion*/, - HBufC* /*aName*/, - HBufC8* /*aDataType*/, - HBufC8* /*aOpaqueData*/, - TDriveUnit /*aDrive*/, - TBool /*aRomOnly*/, - TBool /*aRomBased*/) + TUid aUid, + TInt aVersion, + HBufC* aName, + HBufC8* aDataType, + HBufC8* aOpaqueData, + TDriveUnit aDrive, + TBool aRomOnly, + TBool aRomBased) { - return new (ELeave) CImplementationInformation(); + CImplementationInformation* self = new(ELeave)CImplementationInformation(); + CleanupStack::PushL(self); + self->iData = aDataType; + self->iDisplayName = aName; + self->iOpaqueData = aOpaqueData; + CleanupStack::Pop(self); + return self; + //return new (ELeave) CImplementationInformation(); } void REComSession::DestroyedImplementation( TUid ) @@ -253,6 +278,7 @@ } + void REComSession::ListImplementationsL( TUid /*aInterfaceUid*/, RImplInfoPtrArray &aImplInfoArray ) @@ -288,6 +314,34 @@ } - +// ----------------------------------------------------------------------------- +// REComSession::ListImplementationsL +// ----------------------------------------------------------------------------- +// +void REComSession::ListImplementationsL( + TUid aInterfaceUid, + const TEComResolverParams& resolverParams, + RImplInfoPtrArray& aImplInfoArray) + { + _LIT8(KDefaultEngineName,"MultimediaSharing"); + + TUid uid(aInterfaceUid); + TInt version = 1; + HBufC* name = _L("dummy").AllocLC(); + HBufC8* dataType = _L8("MultimediaSharing").AllocLC(); + HBufC8* opaqueData = _L8("dummy").AllocLC(); + TDriveUnit drive; + TBool romOnly(ETrue); + TBool romBased(ETrue); + CImplementationInformation* info = + CImplementationInformation::NewL(uid,version,name,dataType, + opaqueData,drive,romOnly,romBased); + CleanupStack::Pop(3); + CleanupStack::PushL(info); + aImplInfoArray.AppendL(info); + CleanupStack::Pop(info); + } +// End of File + diff -r 33a5d2bbf6fc -r 73a1feb507fb tsrc/contactenginestub/inc/contactenginestub.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tsrc/contactenginestub/inc/contactenginestub.h Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,43 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + + +#ifndef __CONTACTENGINESTUB_H__ +#define __CONTACTENGINESTUB_H__ + +#include + +enum TContactEngineCalledFunction + { + EContactEngineStubNone, + EContactEngineStubSetText + }; + +class ContactEngineStubHelper + { +public: + + static void Reset(); + static void SetErrorCode(TInt aVal); + static TContactEngineCalledFunction GetCalledFunction(); + static void SetSIPFieldFound( TBool aFound ); + static void SetSIPFieldInfoFound( TBool aFound ); + + }; + + +#endif diff -r 33a5d2bbf6fc -r 73a1feb507fb tsrc/contactenginestub/src/contactenginestub.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tsrc/contactenginestub/src/contactenginestub.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,97 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ +#include "contactenginestub.h" + +#include +#include +#include +#include + +static TInt iValue = KErrNone; +static TContactEngineCalledFunction iFunc = EContactEngineStubNone; +static TBool iFindField = EFalse; +static TBool iFindFieldInfo = ETrue; +static CContactTextField iTextField; + +// ----------------------------------------------------------------------------- +// CContactTextField +// ----------------------------------------------------------------------------- +// +void CContactTextField::SetTextL(const TDesC& /*aText*/) + { + iFunc = EContactEngineStubSetText; + } + +CContactTextField::~CContactTextField() + { + + } + +void CContactTextField::InternalizeL(RReadStream& /*aStream*/) + { + + } +void CContactTextField::ExternalizeL(RWriteStream& /*aStream*/) const + { + + } +TStreamId CContactTextField::StoreL(CStreamStore& /*aStore*/) const + { + return TStreamId( 0 ); + } + +void CContactTextField::RestoreL(CStreamStore& /*aStore*/,RReadStream& /*aStream*/) + { + + } + +TBool CContactTextField::IsFull() const + { + return EFalse; + } + +// ----------------------------------------------------------------------------- +// ContactEngineStubHelper +// ----------------------------------------------------------------------------- +// +void ContactEngineStubHelper::Reset() + { + iValue = KErrNone; + iFunc = EContactEngineStubNone; + iFindField = EFalse; + iFindFieldInfo = ETrue; + } + +void ContactEngineStubHelper::SetErrorCode( TInt aVal ) + { + iValue = aVal; + } + +TContactEngineCalledFunction ContactEngineStubHelper::GetCalledFunction() + { + return iFunc; + } + +void ContactEngineStubHelper::SetSIPFieldFound( TBool aFound ) + { + iFindField = aFound; + } + +void ContactEngineStubHelper::SetSIPFieldInfoFound( TBool aFound ) + { + iFindFieldInfo = aFound; + } diff -r 33a5d2bbf6fc -r 73a1feb507fb tsrc/etelstub/inc/etelmm.h --- a/tsrc/etelstub/inc/etelmm.h Thu Aug 19 09:51:39 2010 +0300 +++ b/tsrc/etelstub/inc/etelmm.h Tue Aug 31 15:12:07 2010 +0300 @@ -12665,7 +12665,6 @@ static void SetConfStatus( RMobileConferenceCall::TMobileConferenceStatus aConfStatus ); static void SetCallDirection( RMobileCall::TMobileCallDirection aDirection ); static void SetCallEmergency( TBool aVal ); - static void SetRemoteIdStatus( RMobileCall::TMobileCallRemoteIdentityStatus aStatus ); }; #endif // __ETELMM_H__ diff -r 33a5d2bbf6fc -r 73a1feb507fb tsrc/etelstub/src/etelstub.cpp --- a/tsrc/etelstub/src/etelstub.cpp Thu Aug 19 09:51:39 2010 +0300 +++ b/tsrc/etelstub/src/etelstub.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -27,8 +27,7 @@ static RMobileCall::TMobileCallStatus iCallStatus = RMobileCall::EStatusIdle; static RMobileCall::TMobileCallDirection iDirection = RMobileCall::EDirectionUnknown; static TBool iReqToCancel = EFalse; -static RTelSubSessionBase::TCalledFunction iCalledFunction = RTelSubSessionBase::ENone; -static RMobileCall::TMobileCallRemoteIdentityStatus iRemoteIdStatus = RMobileCall::ERemoteIdentityUnknown; +static RTelSubSessionBase::TCalledFunction iCalledFunction = RTelSubSessionBase::ENone; EXPORT_C TInt RTelServer::Connect( int ) @@ -68,7 +67,9 @@ EXPORT_C void RCall::Close() { - + iCallEvent = RMobileCall::ELocalBarred; + iCallStatus = RMobileCall::EStatusUnknown; + iDirection = RMobileCall::EDirectionUnknown; } EXPORT_C void RLine::Close() @@ -226,7 +227,6 @@ callInfo.iRemoteParty.iRemoteNumber.iTelNumber.Copy( KNumber() ); callInfo.iRemoteParty.iDirection = iDirection; callInfo.iEmergency = iEmergency; - callInfo.iRemoteParty.iRemoteIdStatus = iRemoteIdStatus; RMobileCall::TMobileCallInfoV3Pckg pckg( callInfo ); aBuffer.Copy( pckg ); @@ -365,24 +365,3 @@ { iEmergency = aVal; } -void RTelHelper::SetRemoteIdStatus( RMobileCall::TMobileCallRemoteIdentityStatus aStatus ) - { - iRemoteIdStatus = aStatus; - } - -EXPORT_C void -RMobilePhone::GetIdentityServiceStatus(TRequestStatus& aReqStatus, - TMobilePhoneIdService /*aService*/, - TMobilePhoneIdServiceStatus& /*aStatus*/, - TMobileInfoLocation /*aLocation*/) const - { - aReqStatus = KRequestPending; - } - -EXPORT_C void -RMobilePhone::NotifyIdentityServiceStatus(TRequestStatus& aReqStatus, - const TMobilePhoneIdService /*aService*/, - TMobilePhoneIdServiceStatus& /*aStatus*/) const - { - aReqStatus = KRequestPending; - } diff -r 33a5d2bbf6fc -r 73a1feb507fb tsrc/fbsbitmapstub/inc/fbs.h --- a/tsrc/fbsbitmapstub/inc/fbs.h Thu Aug 19 09:51:39 2010 +0300 +++ b/tsrc/fbsbitmapstub/inc/fbs.h Tue Aug 31 15:12:07 2010 +0300 @@ -15,49 +15,15 @@ * */ -#ifndef __FBSBITMAP__ -#define __FBSBITMAP__ +#ifndef __FBS_H__ +#define __FBS_H__ #include - -enum TDisplayMode - { - ///No display mode - ENoneCopy, - ///Monochrome display mode (1 bpp) - EGray2Copy, - ///Four grayscales display mode (2 bpp) - EGray4Copy, - ///16 grayscales display mode (4 bpp) - EGray16Copy, - ///256 grayscales display mode (8 bpp) - EGray256Copy, - ///Low colour EGA 16 colour display mode (4 bpp) - EColor16Copy, - ///256 colour display mode (8 bpp) - EColor256Copy, - ///64,000 colour display mode (16 bpp) - EColor64KCopy, - ///True colour display mode (24 bpp) - EColor16MCopy, - ///(Not an actual display mode used for moving buffers containing bitmaps) - ERgbCopy, - ///4096 colour display (12 bpp). - EColor4KCopy, - EColor16MUCopy, - ///Display mode with alpha (24bpp colour plus 8bpp alpha) - EColor16MACopy, - //Any new display mode should be insterted here! - //There might be up to 255 display modes, so value of the last - //inserted EColorXXX enum item should be less than 256 - - //BC reasons! - EColorLastCopy, - }; +#include +#include class CFbsBitmap { - - public: CFbsBitmap(); @@ -66,16 +32,30 @@ TInt Create( const TSize& aSizeInPixels, TDisplayMode aDispMode); - TInt CFbsBitmap::Load(const TDesC& /*aFileName*/, - TInt32 /*aId*/,TBool /*aShareIfLoaded*/); - +TInt Load(const TDesC& aFileName,TInt32 aId=0,TBool aShareIfLoaded=ETrue); + TInt Load(const TDesC& aFileName,TInt32 aId,TBool aShareIfLoaded,TUint aFileOffset); + TInt Load(RFile& aFile,TInt32 aId=0,TBool aShareIfLoaded=ETrue); + TInt Load(RFile& aFile,TInt32 aId,TBool aShareIfLoaded,TUint aFileOffset); + + TInt Resize(const TSize& aSizeInPixels); + TSize SizeInPixels() const; + TSize value; - TInt CFbsBitmap::Load(const TDesC& /*aFileName*/, - TInt32 /*aId*/,TBool /*aShareIfLoaded*/, - TUint /*aFileOffset*/); }; -#endif \ No newline at end of file +class CFbsFont + { + }; + +class RFbsSession + { + }; + +class CFbsTypefaceStore + { + }; + +#endif diff -r 33a5d2bbf6fc -r 73a1feb507fb tsrc/fbsbitmapstub/src/fbs.cpp --- a/tsrc/fbsbitmapstub/src/fbs.cpp Thu Aug 19 09:51:39 2010 +0300 +++ b/tsrc/fbsbitmapstub/src/fbs.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -35,17 +35,38 @@ return KErrNone; } -TInt CFbsBitmap::Load(const TDesC& /*aFileName*/, - TInt32 /*aId*/,TBool /*aShareIfLoaded*/) +TInt CFbsBitmap::Load(const TDesC& aFileName, + TInt32 aId,TBool aShareIfLoaded) { return KErrNone; } -TInt CFbsBitmap::Load(const TDesC& /*aFileName*/, - TInt32 /*aId*/,TBool /*aShareIfLoaded*/, - TUint /*aFileOffset*/) +TInt CFbsBitmap::Load(const TDesC& aFileName, + TInt32 aId,TBool aShareIfLoaded, + TUint aFileOffset) + { + return KErrNone; + } + +TInt CFbsBitmap::Load(RFile& aFile,TInt32 aId,TBool aShareIfLoaded) { return KErrNone; } +TInt CFbsBitmap::Load(RFile& aFile,TInt32 aId,TBool aShareIfLoaded,TUint aFileOffset) + { + return KErrNone; + } + +TInt CFbsBitmap::Resize(const TSize& aSizeInPixels) + { + value = aSizeInPixels ; + return KErrNone; + } + +TSize CFbsBitmap::SizeInPixels() const + { + return value; + } + diff -r 33a5d2bbf6fc -r 73a1feb507fb tsrc/install/multimediasharing_udeb.pkg --- a/tsrc/install/multimediasharing_udeb.pkg Thu Aug 19 09:51:39 2010 +0300 +++ b/tsrc/install/multimediasharing_udeb.pkg Tue Aug 31 15:12:07 2010 +0300 @@ -45,7 +45,6 @@ ;MUS GENERAL "\epoc32\release\armv5\udeb\musmanagerserver.exe"-"!:\sys\bin\musmanagerserver.exe" "\epoc32\release\armv5\udeb\musmanagerclient.dll"-"!:\sys\bin\musmanagerclient.dll" -"\epoc32\release\armv5\udeb\musengine.dll"-"!:\sys\bin\musengine.dll" "\epoc32\release\armv5\udeb\musindicator.dll"-"!:\sys\bin\musindicator.dll" "\epoc32\data\z\resource\musindicator.rsc"-"!:\resource\musindicator.rsc" "\epoc32\data\z\private\1028238D\tone.amr"-"!:\private\1028238D\tone.amr" @@ -83,5 +82,9 @@ "\EPOC32\DATA\Z\Resource\apps\mussettingsplugin.mif"-"!:\resource\apps\mussettingsplugin.mif" ;MCC Transcoder -;"\epoc32\RELEASE\armv5\udeb\mmcctranscoder.dll"-"!:\Sys\Bin\mmcctranscoder.dll" -;"\epoc32\data\Z\Resource\Plugins\mmcctranscoder.RSC"-"!:\resource\plugins\mmcctranscoder.RSC" +"\epoc32\RELEASE\armv5\udeb\mmcctranscoder.dll"-"!:\Sys\Bin\mmcctranscoder.dll" +"\epoc32\data\Z\Resource\Plugins\mmcctranscoder.RSC"-"!:\resource\plugins\mmcctranscoder.RSC" + +; Livecomms MusEngine +"\epoc32\release\armv5\udeb\musengineplugin.dll"-"!:\sys\bin\musengineplugin.dll" +"\epoc32\data\z\resource\plugins\musengineplugin.rsc"-"!:\resource\plugins\musengineplugin.rsc" diff -r 33a5d2bbf6fc -r 73a1feb507fb tsrc/install/multimediasharing_update_udeb.pkg --- a/tsrc/install/multimediasharing_update_udeb.pkg Thu Aug 19 09:51:39 2010 +0300 +++ b/tsrc/install/multimediasharing_update_udeb.pkg Tue Aug 31 15:12:07 2010 +0300 @@ -28,62 +28,81 @@ ; ----------------------------------------------------------------------------------- -;MUS FILES -;for S60 3.2 +;Multimediasharing binaries + +; Central repository +;"\epoc32\data\z\private\10202be9\1028238b.txt"-"!:\private\10202BE9\1028238b.txt" -;MUS CENREP KEY -;"\epoc32\DATA\Z\private\10202be9\1028238b.txt"-"!:\private\10202BE9\1028238b.txt" +; Backup registration and restore +;"\epoc32\data\z\private\1028238D\backup_registration.xml"-"!:\private\1028238D\backup_registration.xml" + +; User interface +;"\epoc32\release\armv5\udeb\musui.exe"-"!:\sys\bin\musui.exe" -;MUS UI -"\epoc32\release\armv5\udeb\musui.exe"-"!:\sys\bin\musui.exe" -"\epoc32\data\z\resource\apps\musui.mbm"-"!:\resource\apps\musui.mbm" -"\epoc32\data\z\resource\apps\musui_aif.mif"-"!:\resource\apps\musui_aif.mif" -"\epoc32\data\z\resource\apps\musuiicons.mif"-"!:\resource\apps\musuiicons.mif" -"\epoc32\data\z\resource\apps\musuitoolbaricons.mif"-"!:\resource\apps\musuitoolbaricons.mif" -"\epoc32\data\z\resource\apps\musui.rsc"-"!:\resource\apps\musui.rsc" -"\epoc32\data\z\private\10003a3f\apps\musui_reg.rsc"-"!:\private\10003a3f\import\apps\musui_reg.rsc" +"\epoc32\release\armv5\udeb\livecommsui.dll"-"!:\sys\bin\livecommsui.dll" + +;"\epoc32\data\z\resource\apps\musui.rsc"-"!:\resource\apps\musui.rsc" +;"\epoc32\data\z\private\10003a3f\import\apps\musui_reg.rsc"-"!:\private\10003a3f\import\apps\musui_reg.rsc" + +; User interface DOCMLs +;"\epoc32\data\z\data\others\lcidleview.docml"-"!:\data\others\lcidleview.docml" +;"\epoc32\data\z\data\others\lcreceiveview.docml"-"!:\data\others\lcreceiveview.docml" +;"\epoc32\data\z\data\others\lcsendview.docml"-"!:\data\others\lcsendview.docml" +;"\epoc32\data\z\data\others\lctwowayview.docml"-"!:\data\others\lctwowayview.docml" +;"\epoc32\data\z\data\others\lcvtview.docml"-"!:\data\others\lcvtview.docml" +;"\epoc32\data\z\data\others\lcreceiveonlyview.docml"-"!:\data\others\lcreceiveonlyview.docml" -;MUS GENERAL -"\epoc32\release\armv5\udeb\musmanagerserver.exe"-"!:\sys\bin\musmanagerserver.exe" -"\epoc32\release\armv5\udeb\musmanagerclient.dll"-"!:\sys\bin\musmanagerclient.dll" -"\epoc32\release\armv5\udeb\musengine.dll"-"!:\sys\bin\musengine.dll" -"\epoc32\release\armv5\udeb\musindicator.dll"-"!:\sys\bin\musindicator.dll" -"\epoc32\data\z\resource\musindicator.rsc"-"!:\resource\musindicator.rsc" -"\epoc32\data\z\private\1028238D\tone.amr"-"!:\private\1028238D\tone.amr" -"\epoc32\data\z\resource\apps\musindicatoricons.mif"-"!:\resource\apps\musindicatoricons.mif" -"\epoc32\data\z\resource\apps\musindicatoricons.mbm"-"!:\resource\apps\musindicatoricons.mbm" - -;MUS ECOM PLUGINS +; General components +;"\epoc32\release\armv5\udeb\musmanagerserver.exe"-"!:\sys\bin\musmanagerserver.exe" +;"\epoc32\release\armv5\udeb\musmanagerclient.dll"-"!:\sys\bin\musmanagerclient.dll" +;"\epoc32\release\armv5\udeb\musindicator.dll"-"!:\sys\bin\musindicator.dll" +;"\epoc32\data\z\resource\musindicator.rsc"-"!:\resource\musindicator.rsc" +;"\epoc32\data\z\private\1028238D\tone.amr"-"!:\private\1028238D\tone.amr" +;"\epoc32\data\z\resource\apps\musindicatoricons.mif"-"!:\resource\apps\musindicatoricons.mif" +;"\epoc32\data\z\resource\apps\musindicatoricons.mbm"-"!:\resource\apps\musindicatoricons.mbm" -; Always Online Plugin -"\epoc32\release\armv5\udeb\musaoplugin.dll"-"!:\sys\bin\musaoplugin.dll" -"\EPOC32\DATA\Z\Resource\Plugins\musaoplugin.RSC"-"!:\resource\plugins\musaoplugin.RSC" +; AlwaysOnline Plugin. +;"\epoc32\release\armv5\udeb\musaoplugin.dll"-"!:\sys\bin\musaoplugin.dll" +;"\epoc32\data\z\Resource\Plugins\musaoplugin.RSC"-"!:\resource\plugins\musaoplugin.RSC" -; SIP Client Resolver Plugin -"\epoc32\release\armv5\udeb\mussipcrplugin.dll"-"!:\sys\bin\mussipcrplugin.dll" -"\EPOC32\DATA\Z\Resource\Plugins\mussipcrplugin.RSC"-"!:\resource\plugins\mussipcrplugin.RSC" +; Sip client resolver Plugin +; In VOIP terminals, MuS uses same client resolver plugin as VoIP. +; In all other terminals, a separate resolver plugin is needed. +; So uncomment the below lines if phone do not have VOIP. +;"\epoc32\release\armv5\udeb\mussipcrplugin.dll"-"!:\sys\bin\mussipcrplugin.dll" +;"\epoc32\data\z\Resource\Plugins\mussipcrplugin.RSC"-"!:\resource\plugins\mussipcrplugin.RSC" -; AIW Provider Plugin -"\epoc32\release\armv5\udeb\musaiwprovider.dll"-"!:\sys\bin\musaiwprovider.dll" -"\EPOC32\DATA\Z\Resource\Plugins\musaiwprovider.RSC"-"!:\resource\plugins\musaiwprovider.RSC" -"\EPOC32\DATA\Z\Resource\musaiwproviderui.RSC"-"!:\resource\musaiwproviderui.RSC" +; AIW provider Plugin +;"\epoc32\release\armv5\udeb\musaiwprovider.dll"-"!:\sys\bin\musaiwprovider.dll" +;"\epoc32\data\z\Resource\Plugins\musaiwprovider.RSC"-"!:\resource\plugins\musaiwprovider.RSC" +;"\epoc32\data\z\Resource\musaiwproviderui.RSC"-"!:\resource\musaiwproviderui.RSC" ; Availability Plugin -"\epoc32\release\armv5\udeb\musavailabilityplugin.dll"-"!:\sys\bin\musavailabilityplugin.dll" -"\EPOC32\DATA\Z\Resource\Plugins\musavailabilityplugin.RSC"-"!:\resource\plugins\musavailabilityplugin.RSC" +;"\epoc32\release\armv5\udeb\musavailabilityplugin.dll"-"!:\sys\bin\musavailabilityplugin.dll" +;"\epoc32\data\z\Resource\Plugins\musavailabilityplugin.RSC"-"!:\resource\plugins\musavailabilityplugin.RSC" -; WirelessProvisioning Adapter -"\epoc32\release\armv5\udeb\muswpadapter.dll"-"!:\sys\bin\muswpadapter.dll" -"\EPOC32\DATA\Z\Resource\Plugins\muswpadapter.RSC"-"!:\resource\plugins\muswpadapter.RSC" -"\EPOC32\DATA\Z\Resource\muswpadapterresource.RSC"-"!:\resource\muswpadapterresource.RSC" +; Wireless Provisioning Adapter +;"\epoc32\release\armv5\udeb\muswpadapter.dll"-"!:\sys\bin\muswpadapter.dll" +;"\epoc32\data\z\Resource\Plugins\muswpadapter.RSC"-"!:\resource\plugins\muswpadapter.RSC" +;"\epoc32\data\z\Resource\muswpadapterresource.RSC"-"!:\resource\muswpadapterresource.RSC" + +; Settings UI +;"\epoc32\release\armv5\udeb\mussettingsui.dll"-"!:\sys\bin\mussettingsui.dll" +;"\epoc32\data\z\Resource\Plugins\mussettingsui.RSC"-"!:\resource\plugins\mussettingsui.RSC" +;"\epoc32\data\z\Resource\mussettingsuirsc.RSC"-"!:\resource\mussettingsuirsc.RSC" +;"\epoc32\data\z\Resource\apps\mussettingsplugin.mif"-"!:\resource\apps\mussettingsplugin.mif" -;SETTINGS UI -"\epoc32\release\armv5\udeb\mussettingsui.dll"-"!:\sys\bin\mussettingsui.dll" -"\EPOC32\DATA\Z\Resource\Plugins\mussettingsui.RSC"-"!:\resource\plugins\mussettingsui.RSC" -"\EPOC32\DATA\Z\Resource\mussettingsuirsc.RSC"-"!:\resource\mussettingsuirsc.RSC" -"\EPOC32\DATA\Z\Resource\apps\mussettingsplugin.mif"-"!:\resource\apps\mussettingsplugin.mif" +; MCC Transcoder +;"\epoc32\release\armv5\udeb\mmcctranscoder.dll"-"!:\Sys\Bin\mmcctranscoder.dll" +;"\epoc32\data\z\Resource\Plugins\mmcctranscoder.RSC"-"!:\resource\plugins\mmcctranscoder.RSC" -;MCC Transcoder -;"\epoc32\RELEASE\armv5\udeb\mmcctranscoder.dll"-"!:\Sys\Bin\mmcctranscoder.dll" -;"\epoc32\data\Z\Resource\Plugins\mmcctranscoder.RSC"-"!:\resource\plugins\mmcctranscoder.RSC" +; Help files +;"\epoc32\data\z\Resource\xhtml\01\0x10282491\contents.zip"-"!:\resource\xhtml\01\0x10282491\contents.zip" +;"\epoc32\data\z\Resource\xhtml\01\0x10282491\keywords.xml"-"!:\resource\xhtml\01\0x10282491\keywords.xml" +;"\epoc32\data\z\Resource\xhtml\01\0x10282491\index.xml"-"!:\resource\xhtml\01\0x10282491\index.xml" +;"\epoc32\data\z\Resource\xhtml\01\0x10282491\meta.xml"-"!:\resource\xhtml\01\0x10282491\meta.xml" +; Engine +;"\epoc32\release\armv5\udeb\musengineplugin.dll"-"!:\sys\bin\musengineplugin.dll" +;"\epoc32\data\z\resource\plugins\musengineplugin.rsc"-"!:\resource\plugins\musengineplugin.rsc" + diff -r 33a5d2bbf6fc -r 73a1feb507fb tsrc/install/multimediasharing_update_urel.pkg --- a/tsrc/install/multimediasharing_update_urel.pkg Thu Aug 19 09:51:39 2010 +0300 +++ b/tsrc/install/multimediasharing_update_urel.pkg Tue Aug 31 15:12:07 2010 +0300 @@ -28,61 +28,80 @@ ; ----------------------------------------------------------------------------------- -;MUS FILES -;for S60 3.2 +;Multimediasharing binaries + +; Central repository +;"\epoc32\data\z\private\10202be9\1028238b.txt"-"!:\private\10202BE9\1028238b.txt" -;MUS CENREP KEY -;"\epoc32\DATA\Z\private\10202be9\1028238b.txt"-"!:\private\10202BE9\1028238b.txt" +; Backup registration and restore +;"\epoc32\data\z\private\1028238D\backup_registration.xml"-"!:\private\1028238D\backup_registration.xml" + +; User interface +;"\epoc32\release\armv5\urel\musui.exe"-"!:\sys\bin\musui.exe" -;MUS UI -"\epoc32\release\armv5\urel\musui.exe"-"!:\sys\bin\musui.exe" -"\epoc32\data\z\resource\apps\musui.mbm"-"!:\resource\apps\musui.mbm" -"\epoc32\data\z\resource\apps\musui_aif.mif"-"!:\resource\apps\musui_aif.mif" -"\epoc32\data\z\resource\apps\musuiicons.mif"-"!:\resource\apps\musuiicons.mif" -"\epoc32\data\z\resource\apps\musuitoolbaricons.mif"-"!:\resource\apps\musuitoolbaricons.mif" -"\epoc32\data\z\resource\apps\musui.rsc"-"!:\resource\apps\musui.rsc" -"\epoc32\data\z\private\10003a3f\apps\musui_reg.rsc"-"!:\private\10003a3f\import\apps\musui_reg.rsc" +"\epoc32\release\armv5\urel\livecommsui.dll"-"!:\sys\bin\livecommsui.dll" + +;"\epoc32\data\z\resource\apps\musui.rsc"-"!:\resource\apps\musui.rsc" +;"\epoc32\data\z\private\10003a3f\import\apps\musui_reg.rsc"-"!:\private\10003a3f\import\apps\musui_reg.rsc" + +; User interface DOCMLs +;"\epoc32\data\z\data\others\lcidleview.docml"-"!:\data\others\lcidleview.docml" +;"\epoc32\data\z\data\others\lcreceiveview.docml"-"!:\data\others\lcreceiveview.docml" +;"\epoc32\data\z\data\others\lcsendview.docml"-"!:\data\others\lcsendview.docml" +;"\epoc32\data\z\data\others\lctwowayview.docml"-"!:\data\others\lctwowayview.docml" +;"\epoc32\data\z\data\others\lcvtview.docml"-"!:\data\others\lcvtview.docml" +;"\epoc32\data\z\data\others\lcreceiveonlyview.docml"-"!:\data\others\lcreceiveonlyview.docml" -;MUS GENERAL -"\epoc32\release\armv5\urel\musmanagerserver.exe"-"!:\sys\bin\musmanagerserver.exe" -"\epoc32\release\armv5\urel\musmanagerclient.dll"-"!:\sys\bin\musmanagerclient.dll" -"\epoc32\release\armv5\urel\musengine.dll"-"!:\sys\bin\musengine.dll" -"\epoc32\release\armv5\urel\musindicator.dll"-"!:\sys\bin\musindicator.dll" -"\epoc32\data\z\resource\musindicator.rsc"-"!:\resource\musindicator.rsc" -"\epoc32\data\z\private\1028238D\tone.amr"-"!:\private\1028238D\tone.amr" -"\epoc32\data\z\resource\apps\musindicatoricons.mif"-"!:\resource\apps\musindicatoricons.mif" -"\epoc32\data\z\resource\apps\musindicatoricons.mbm"-"!:\resource\apps\musindicatoricons.mbm" - -;MUS ECOM PLUGINS +; General components +;"\epoc32\release\armv5\urel\musmanagerserver.exe"-"!:\sys\bin\musmanagerserver.exe" +;"\epoc32\release\armv5\urel\musmanagerclient.dll"-"!:\sys\bin\musmanagerclient.dll" +;"\epoc32\release\armv5\urel\musindicator.dll"-"!:\sys\bin\musindicator.dll" +;"\epoc32\data\z\resource\musindicator.rsc"-"!:\resource\musindicator.rsc" +;"\epoc32\data\z\private\1028238D\tone.amr"-"!:\private\1028238D\tone.amr" +;"\epoc32\data\z\resource\apps\musindicatoricons.mif"-"!:\resource\apps\musindicatoricons.mif" +;"\epoc32\data\z\resource\apps\musindicatoricons.mbm"-"!:\resource\apps\musindicatoricons.mbm" -; Always Online Plugin -"\epoc32\release\armv5\urel\musaoplugin.dll"-"!:\sys\bin\musaoplugin.dll" -"\EPOC32\DATA\Z\Resource\Plugins\musaoplugin.RSC"-"!:\resource\plugins\musaoplugin.RSC" +; AlwaysOnline Plugin. +;"\epoc32\release\armv5\urel\musaoplugin.dll"-"!:\sys\bin\musaoplugin.dll" +;"\epoc32\data\z\Resource\Plugins\musaoplugin.RSC"-"!:\resource\plugins\musaoplugin.RSC" -; SIP Client Resolver Plugin -"\epoc32\release\armv5\urel\mussipcrplugin.dll"-"!:\sys\bin\mussipcrplugin.dll" -"\EPOC32\DATA\Z\Resource\Plugins\mussipcrplugin.RSC"-"!:\resource\plugins\mussipcrplugin.RSC" +; Sip client resolver Plugin +; In VOIP terminals, MuS uses same client resolver plugin as VoIP. +; In all other terminals, a separate resolver plugin is needed. +; So uncomment the below lines if phone do not have VOIP. +;"\epoc32\release\armv5\urel\mussipcrplugin.dll"-"!:\sys\bin\mussipcrplugin.dll" +;"\epoc32\data\z\Resource\Plugins\mussipcrplugin.RSC"-"!:\resource\plugins\mussipcrplugin.RSC" -; AIW Provider Plugin -"\epoc32\release\armv5\urel\musaiwprovider.dll"-"!:\sys\bin\musaiwprovider.dll" -"\EPOC32\DATA\Z\Resource\Plugins\musaiwprovider.RSC"-"!:\resource\plugins\musaiwprovider.RSC" -"\EPOC32\DATA\Z\Resource\musaiwproviderui.RSC"-"!:\resource\musaiwproviderui.RSC" +; AIW provider Plugin +;"\epoc32\release\armv5\urel\musaiwprovider.dll"-"!:\sys\bin\musaiwprovider.dll" +;"\epoc32\data\z\Resource\Plugins\musaiwprovider.RSC"-"!:\resource\plugins\musaiwprovider.RSC" +;"\epoc32\data\z\Resource\musaiwproviderui.RSC"-"!:\resource\musaiwproviderui.RSC" ; Availability Plugin -"\epoc32\release\armv5\urel\musavailabilityplugin.dll"-"!:\sys\bin\musavailabilityplugin.dll" -"\EPOC32\DATA\Z\Resource\Plugins\musavailabilityplugin.RSC"-"!:\resource\plugins\musavailabilityplugin.RSC" +;"\epoc32\release\armv5\urel\musavailabilityplugin.dll"-"!:\sys\bin\musavailabilityplugin.dll" +;"\epoc32\data\z\Resource\Plugins\musavailabilityplugin.RSC"-"!:\resource\plugins\musavailabilityplugin.RSC" -; WirelessProvisioning Adapter -"\epoc32\release\armv5\urel\muswpadapter.dll"-"!:\sys\bin\muswpadapter.dll" -"\EPOC32\DATA\Z\Resource\Plugins\muswpadapter.RSC"-"!:\resource\plugins\muswpadapter.RSC" -"\EPOC32\DATA\Z\Resource\muswpadapterresource.RSC"-"!:\resource\muswpadapterresource.RSC" +; Wireless Provisioning Adapter +;"\epoc32\release\armv5\urel\muswpadapter.dll"-"!:\sys\bin\muswpadapter.dll" +;"\epoc32\data\z\Resource\Plugins\muswpadapter.RSC"-"!:\resource\plugins\muswpadapter.RSC" +;"\epoc32\data\z\Resource\muswpadapterresource.RSC"-"!:\resource\muswpadapterresource.RSC" + +; Settings UI +;"\epoc32\release\armv5\urel\mussettingsui.dll"-"!:\sys\bin\mussettingsui.dll" +;"\epoc32\data\z\Resource\Plugins\mussettingsui.RSC"-"!:\resource\plugins\mussettingsui.RSC" +;"\epoc32\data\z\Resource\mussettingsuirsc.RSC"-"!:\resource\mussettingsuirsc.RSC" +;"\epoc32\data\z\Resource\apps\mussettingsplugin.mif"-"!:\resource\apps\mussettingsplugin.mif" -;SETTINGS UI -"\epoc32\release\armv5\urel\mussettingsui.dll"-"!:\sys\bin\mussettingsui.dll" -"\EPOC32\DATA\Z\Resource\Plugins\mussettingsui.RSC"-"!:\resource\plugins\mussettingsui.RSC" -"\EPOC32\DATA\Z\Resource\mussettingsuirsc.RSC"-"!:\resource\mussettingsuirsc.RSC" -"\EPOC32\DATA\Z\Resource\apps\mussettingsplugin.mif"-"!:\resource\apps\mussettingsplugin.mif" +; MCC Transcoder +;"\epoc32\release\armv5\urel\mmcctranscoder.dll"-"!:\Sys\Bin\mmcctranscoder.dll" +;"\epoc32\data\z\Resource\Plugins\mmcctranscoder.RSC"-"!:\resource\plugins\mmcctranscoder.RSC" -;MCC Transcoder -;"\epoc32\RELEASE\armv5\urel\mmcctranscoder.dll"-"!:\Sys\Bin\mmcctranscoder.dll" -;"\epoc32\data\Z\Resource\Plugins\mmcctranscoder.RSC"-"!:\resource\plugins\mmcctranscoder.RSC" +; Help files +;"\epoc32\data\z\Resource\xhtml\01\0x10282491\contents.zip"-"!:\resource\xhtml\01\0x10282491\contents.zip" +;"\epoc32\data\z\Resource\xhtml\01\0x10282491\keywords.xml"-"!:\resource\xhtml\01\0x10282491\keywords.xml" +;"\epoc32\data\z\Resource\xhtml\01\0x10282491\index.xml"-"!:\resource\xhtml\01\0x10282491\index.xml" +;"\epoc32\data\z\Resource\xhtml\01\0x10282491\meta.xml"-"!:\resource\xhtml\01\0x10282491\meta.xml" + +; Engine +;"\epoc32\release\armv5\urel\musengineplugin.dll"-"!:\sys\bin\musengineplugin.dll" +;"\epoc32\data\z\resource\plugins\musengineplugin.rsc"-"!:\resource\plugins\musengineplugin.rsc" diff -r 33a5d2bbf6fc -r 73a1feb507fb tsrc/install/multimediasharing_urel.pkg --- a/tsrc/install/multimediasharing_urel.pkg Thu Aug 19 09:51:39 2010 +0300 +++ b/tsrc/install/multimediasharing_urel.pkg Tue Aug 31 15:12:07 2010 +0300 @@ -45,7 +45,6 @@ ;MUS GENERAL "\epoc32\release\armv5\urel\musmanagerserver.exe"-"!:\sys\bin\musmanagerserver.exe" "\epoc32\release\armv5\urel\musmanagerclient.dll"-"!:\sys\bin\musmanagerclient.dll" -"\epoc32\release\armv5\urel\musengine.dll"-"!:\sys\bin\musengine.dll" "\epoc32\release\armv5\urel\musindicator.dll"-"!:\sys\bin\musindicator.dll" "\epoc32\data\z\resource\musindicator.rsc"-"!:\resource\musindicator.rsc" "\epoc32\data\z\private\1028238D\tone.amr"-"!:\private\1028238D\tone.amr" @@ -83,5 +82,9 @@ "\EPOC32\DATA\Z\Resource\apps\mussettingsplugin.mif"-"!:\resource\apps\mussettingsplugin.mif" ;MCC Transcoder -;"\epoc32\RELEASE\armv5\urel\mmcctranscoder.dll"-"!:\Sys\Bin\mmcctranscoder.dll" -;"\epoc32\data\Z\Resource\Plugins\mmcctranscoder.RSC"-"!:\resource\plugins\mmcctranscoder.RSC" +"\epoc32\RELEASE\armv5\urel\mmcctranscoder.dll"-"!:\Sys\Bin\mmcctranscoder.dll" +"\epoc32\data\Z\Resource\Plugins\mmcctranscoder.RSC"-"!:\resource\plugins\mmcctranscoder.RSC" + +; Livecomms MusEngine +"\epoc32\release\armv5\urel\musengineplugin.dll"-"!:\sys\bin\musengineplugin.dll" +"\epoc32\data\z\resource\plugins\musengineplugin.rsc"-"!:\resource\plugins\musengineplugin.rsc" \ No newline at end of file diff -r 33a5d2bbf6fc -r 73a1feb507fb tsrc/mceclientstub/group/mceclientstub.mmp --- a/tsrc/mceclientstub/group/mceclientstub.mmp Thu Aug 19 09:51:39 2010 +0300 +++ b/tsrc/mceclientstub/group/mceclientstub.mmp Tue Aug 31 15:12:07 2010 +0300 @@ -18,6 +18,7 @@ // To get the APP_LAYER_SYSTEMINCLUDE-definition #include + #include #include @@ -55,7 +56,18 @@ SOURCE mcetransactiondatacontainer.cpp SOURCE staticdllentry.cpp +SOURCEPATH ../../sipprofilestub/src +SOURCE sipprofileregistrybasestub.cpp +SOURCE sipprofileregistrystub.cpp +SOURCE sipprofilestub.cpp + + USERINCLUDE ../inc +USERINCLUDE ../../sipprofilestub/inc + + +// to replace SIP profiles with a stub +SYSTEMINCLUDE ../../sipprofilestub/inc // Default system include paths for application layer modules. APP_LAYER_SYSTEMINCLUDE diff -r 33a5d2bbf6fc -r 73a1feb507fb tsrc/mceclientstub/inc/mcecamerasource.h --- a/tsrc/mceclientstub/inc/mcecamerasource.h Thu Aug 19 09:51:39 2010 +0300 +++ b/tsrc/mceclientstub/inc/mcecamerasource.h Tue Aug 31 15:12:07 2010 +0300 @@ -49,6 +49,8 @@ class CMceCameraSource : public CMceMediaSource { friend class UT_CMusEngLiveSession; + friend class UT_CMusEngTwoWaySession; + friend class UT_TMusEngCameraHandler; public: // Constructors and destructor @@ -64,6 +66,12 @@ */ IMPORT_C static CMceCameraSource* NewLC( CMceManager& aManager ); + /// Not in the real implementation + IMPORT_C static CMceCameraSource* NewL(); + + /// Not in the real implementation + IMPORT_C static CMceCameraSource* NewLC(); + /** * Destructor. */ @@ -210,11 +218,6 @@ * C++ constructor. */ CMceCameraSource(); - - /** - * Second-phase constructor. - */ - void ConstructL( CMceManager* aManager ); private: // Owned data @@ -232,6 +235,7 @@ public: // stub data TInt iCameraIndex; + TInt iCameraCount; TInt iZoomFactor; TInt iDigitalZoomFactor; TInt iContrast; diff -r 33a5d2bbf6fc -r 73a1feb507fb tsrc/mceclientstub/inc/mcedisplaysink.h --- a/tsrc/mceclientstub/inc/mcedisplaysink.h Thu Aug 19 09:51:39 2010 +0300 +++ b/tsrc/mceclientstub/inc/mcedisplaysink.h Tue Aug 31 15:12:07 2010 +0300 @@ -71,6 +71,12 @@ */ IMPORT_C static CMceDisplaySink* NewLC( CMceManager& aManager ); + /// Not in the real implementation + IMPORT_C static CMceDisplaySink* NewL(); + + /// Not in the real implementation + IMPORT_C static CMceDisplaySink* NewLC(); + /** * Destructor. */ @@ -169,11 +175,6 @@ */ CMceDisplaySink(); - /** - * second-phase constructor - */ - void ConstructL( CMceManager* aManager ); - private: // Reserved for future use TAny* iReserved; diff -r 33a5d2bbf6fc -r 73a1feb507fb tsrc/mceclientstub/inc/mceinsession.h --- a/tsrc/mceclientstub/inc/mceinsession.h Thu Aug 19 09:51:39 2010 +0300 +++ b/tsrc/mceclientstub/inc/mceinsession.h Tue Aug 31 15:12:07 2010 +0300 @@ -160,7 +160,7 @@ * Two-phased constructor. * For temporay use only. */ - static CMceInSession* NewL(); + IMPORT_C static CMceInSession* NewL(); /** * C++ default constructor. @@ -196,4 +196,4 @@ }; - #endif \ No newline at end of file + #endif diff -r 33a5d2bbf6fc -r 73a1feb507fb tsrc/mceclientstub/inc/mceoutsession.h --- a/tsrc/mceclientstub/inc/mceoutsession.h Thu Aug 19 09:51:39 2010 +0300 +++ b/tsrc/mceclientstub/inc/mceoutsession.h Tue Aug 31 15:12:07 2010 +0300 @@ -86,6 +86,9 @@ */ IMPORT_C static CMceOutSession* NewL(CMceRefer& aRefer); + /// Note: This function exists only in the stub + IMPORT_C static CMceOutSession* NewL(); + /** * Destructor. */ diff -r 33a5d2bbf6fc -r 73a1feb507fb tsrc/mceclientstub/inc/mcesession.h --- a/tsrc/mceclientstub/inc/mcesession.h Thu Aug 19 09:51:39 2010 +0300 +++ b/tsrc/mceclientstub/inc/mcesession.h Tue Aug 31 15:12:07 2010 +0300 @@ -275,14 +275,15 @@ */ IMPORT_C void SetModifierL( TMceSessionModifier aModifier, TUint aValue ); - - /** + + /** * Returns the identifier of profile used by the sesison. * @return TUint32 Identifier of the used profile. 0, * if session is setup without profile. */ IMPORT_C TUint32 Profile() const; - + + public: CMceManager& Manager() const; diff -r 33a5d2bbf6fc -r 73a1feb507fb tsrc/mceclientstub/src/mcecamerasource.cpp --- a/tsrc/mceclientstub/src/mcecamerasource.cpp Thu Aug 19 09:51:39 2010 +0300 +++ b/tsrc/mceclientstub/src/mcecamerasource.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -56,14 +56,35 @@ // // ----------------------------------------------------------------------------- // -EXPORT_C CMceCameraSource* CMceCameraSource::NewLC( CMceManager& aManager ) +EXPORT_C CMceCameraSource* CMceCameraSource::NewLC( CMceManager& /*aManager*/ ) { - CMceCameraSource* self = new (ELeave) CMceCameraSource(); + CMceCameraSource* self = new( ELeave )CMceCameraSource(); CleanupStack::PushL( self ); - self->ConstructL( &aManager ); return self; } +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +EXPORT_C CMceCameraSource* CMceCameraSource::NewL() + { + CMceCameraSource* self = CMceCameraSource::NewLC(); + CleanupStack::Pop( self ); + return self; + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +EXPORT_C CMceCameraSource* CMceCameraSource::NewLC() + { + CMceCameraSource* self = new( ELeave )CMceCameraSource(); + CleanupStack::PushL( self ); + return self; + } // ----------------------------------------------------------------------------- // @@ -100,7 +121,7 @@ // EXPORT_C TInt CMceCameraSource::CamerasAvailable() const { - return 1; + return iCameraCount; } @@ -127,6 +148,9 @@ EXPORT_C void CMceCameraSource::GetCameraInfo( TCameraInfo& aInfo ) const { aInfo = iCameraInfo; + + aInfo.iMaxZoom += iCameraIndex*5; + aInfo.iMaxDigitalZoom += iCameraIndex*5; } @@ -322,20 +346,11 @@ iContrast( 0 ), iBrightness( 0 ), iExposure( CCamera::EExposureAuto ), - iWhiteBalance( CCamera::EWBAuto ) + iWhiteBalance( CCamera::EWBAuto ), + iCameraCount ( 2 ) { iType = KMceCameraSource; iCameraInfo.iMinZoom = 1; iCameraInfo.iMaxZoom = 3; iCameraInfo.iMaxDigitalZoom = 10; } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMceCameraSource::ConstructL( CMceManager* /*aManager*/ ) - { - } - diff -r 33a5d2bbf6fc -r 73a1feb507fb tsrc/mceclientstub/src/mcedisplaysink.cpp --- a/tsrc/mceclientstub/src/mcedisplaysink.cpp Thu Aug 19 09:51:39 2010 +0300 +++ b/tsrc/mceclientstub/src/mcedisplaysink.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -46,14 +46,35 @@ // // ----------------------------------------------------------------------------- // -EXPORT_C CMceDisplaySink* CMceDisplaySink::NewLC( CMceManager& aManager ) +EXPORT_C CMceDisplaySink* CMceDisplaySink::NewLC( CMceManager& /*aManager*/ ) { CMceDisplaySink* self = new (ELeave) CMceDisplaySink(); CleanupStack::PushL( self ); - self->ConstructL( &aManager ); return self; } +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +EXPORT_C CMceDisplaySink* CMceDisplaySink::NewL() + { + CMceDisplaySink* self = CMceDisplaySink::NewLC(); + CleanupStack::Pop( self ); + return self; + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +EXPORT_C CMceDisplaySink* CMceDisplaySink::NewLC() + { + CMceDisplaySink* self = new( ELeave )CMceDisplaySink(); + CleanupStack::PushL( self ); + return self; + } // ----------------------------------------------------------------------------- // @@ -200,17 +221,3 @@ { iType = KMceDisplaySink; } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMceDisplaySink::ConstructL( CMceManager* /*aManager*/ ) - { - } - - - - - diff -r 33a5d2bbf6fc -r 73a1feb507fb tsrc/mceclientstub/src/mcefilesource.cpp --- a/tsrc/mceclientstub/src/mcefilesource.cpp Thu Aug 19 09:51:39 2010 +0300 +++ b/tsrc/mceclientstub/src/mcefilesource.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -324,8 +324,6 @@ // void CMceFileSource::InitializeL( CMceManager* aManager ) { - __ASSERT_ALWAYS( aManager, User::Leave( KErrArgument ) ); - iDuration = TTimeIntervalMicroSeconds( 100000000 ); iAudioElementCount = 1; diff -r 33a5d2bbf6fc -r 73a1feb507fb tsrc/mceclientstub/src/mceinsession.cpp --- a/tsrc/mceclientstub/src/mceinsession.cpp Thu Aug 19 09:51:39 2010 +0300 +++ b/tsrc/mceclientstub/src/mceinsession.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -52,7 +52,7 @@ // ----------------------------------------------------------------------------- // -CMceInSession* CMceInSession::NewL() +EXPORT_C CMceInSession* CMceInSession::NewL() { CMceInSession* self = new (ELeave) CMceInSession( NULL, 0 ); CleanupStack::PushL( self ); diff -r 33a5d2bbf6fc -r 73a1feb507fb tsrc/mceclientstub/src/mceoutsession.cpp --- a/tsrc/mceclientstub/src/mceoutsession.cpp Thu Aug 19 09:51:39 2010 +0300 +++ b/tsrc/mceclientstub/src/mceoutsession.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -31,10 +31,16 @@ // EXPORT_C CMceOutSession* CMceOutSession::NewL( CMceManager& aManager, - CSIPProfile& /*aProfile*/, + CSIPProfile& aProfile, const TDesC8& aRecipient, HBufC8* aOriginator ) { + // Check that profile has been registered + TBool profileRegistered = EFalse; + + aProfile.GetParameter( KSIPProfileRegistered, profileRegistered ); + __ASSERT_ALWAYS( profileRegistered, User::Leave( KErrCouldNotConnect ) ); + CMceOutSession* self = new (ELeave) CMceOutSession( &aManager, 0 ); CleanupStack::PushL( self ); self->ConstructL( aRecipient, aOriginator ); @@ -60,6 +66,14 @@ return NULL; } +// ----------------------------------------------------------------------------- +// CMceOutSession::NewL +// ----------------------------------------------------------------------------- +// +EXPORT_C CMceOutSession* CMceOutSession::NewL() + { + return new( ELeave )CMceOutSession( NULL, 0 ); + } // ----------------------------------------------------------------------------- // CMceOutSession::~CMceOutSession @@ -104,10 +118,7 @@ delete aContent; delete aContentHeaders; - iState = CMceSession::EOffering; - - - + iState = CMceSession::EOffering; } @@ -160,7 +171,6 @@ // void CMceOutSession::ConstructL( const TDesC8& aRecipient, HBufC8* aOriginator ) { - delete iRecipient; iRecipient = NULL; iRecipient = aRecipient.AllocL(); @@ -174,6 +184,4 @@ } CMceSession::ConstructL(); - - } diff -r 33a5d2bbf6fc -r 73a1feb507fb tsrc/mmusavasettingsstub/inc/mmusavasettingsstub.h --- a/tsrc/mmusavasettingsstub/inc/mmusavasettingsstub.h Thu Aug 19 09:51:39 2010 +0300 +++ b/tsrc/mmusavasettingsstub/inc/mmusavasettingsstub.h Tue Aug 31 15:12:07 2010 +0300 @@ -107,17 +107,6 @@ * @return SIP profile Id. */ virtual TInt SipProfileId() const; - - /** - * Returns the direction of the mobile call. - * - * @return 0, if the direction of the call is unknown. - * 1, call is from public number. - * 2, call is from private number - */ - virtual TInt CallPrivacy(); - - private: // data @@ -166,13 +155,6 @@ * Own. */ CDesCArrayFlat* iAudioCodecs; - - /** - * Call privacy indicator - * - */ - - TInt iCallPrivacy; MUS_UNITTEST( UT_CMusAvailabilityPluginManager ) diff -r 33a5d2bbf6fc -r 73a1feb507fb tsrc/mmusavasettingsstub/src/mmusavasettingsstub.cpp --- a/tsrc/mmusavasettingsstub/src/mmusavasettingsstub.cpp Thu Aug 19 09:51:39 2010 +0300 +++ b/tsrc/mmusavasettingsstub/src/mmusavasettingsstub.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -93,9 +93,3 @@ { return iSipProfileId; } - -TInt CMusAvaSettings2::CallPrivacy() - { - return iCallPrivacy; - } - diff -r 33a5d2bbf6fc -r 73a1feb507fb tsrc/multimediasharingsettingsstub/inc/mussettings.h --- a/tsrc/multimediasharingsettingsstub/inc/mussettings.h Thu Aug 19 09:51:39 2010 +0300 +++ b/tsrc/multimediasharingsettingsstub/inc/mussettings.h Tue Aug 31 15:12:07 2010 +0300 @@ -31,19 +31,26 @@ { public: + static MusSettingsKeys::TOperatorVariant + MultimediaSharingSettings::OperatorVariantSettingL(); + + static MusSettingsKeys::TAuditoryNotification AuditoryNotificationSettingL(); + + static MusSettingsKeys::TPopupNotification PopupNotificationSettingL(); static MusSettingsKeys::TAutoRecord AutoRecordSettingL(); static TInt VideoLocationSettingL(); static HBufC* VideoFolderSettingLC(); + static MusSettingsKeys::TVideoDirection VideoDirectionL(); static HBufC* iVideoFolder; static MusSettingsKeys::TAutoRecord iAutoRecord; static TInt iVideoLocation; - + static MusSettingsKeys::TVideoDirection iVideoDirection; }; -#endif // MUSSETTINGS_H \ No newline at end of file +#endif // MUSSETTINGS_H diff -r 33a5d2bbf6fc -r 73a1feb507fb tsrc/multimediasharingsettingsstub/src/mussettings.cpp --- a/tsrc/multimediasharingsettingsstub/src/mussettings.cpp Thu Aug 19 09:51:39 2010 +0300 +++ b/tsrc/multimediasharingsettingsstub/src/mussettings.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -25,7 +25,7 @@ MusSettingsKeys::TAutoRecord MultimediaSharingSettings::iAutoRecord = MusSettingsKeys::TAutoRecord( 0 ); TInt MultimediaSharingSettings::iVideoLocation = 2; // phone memory C: - +MusSettingsKeys::TVideoDirection MultimediaSharingSettings::iVideoDirection = MusSettingsKeys::EOneWayVideo; HBufC* MultimediaSharingSettings::VideoFolderSettingLC() { @@ -34,6 +34,23 @@ } +MusSettingsKeys::TAuditoryNotification + MultimediaSharingSettings::AuditoryNotificationSettingL() + { + //EAuditoryNotificationOn, + //EAuditoryNotificationOff + TInt value(MusSettingsKeys::EAuditoryNotificationOn); + return ( MusSettingsKeys::TAuditoryNotification ) value; + } + +MusSettingsKeys::TPopupNotification + MultimediaSharingSettings::PopupNotificationSettingL() + { + //EPopupNotificationOn + //EPopupNotificationOff + TInt value(MusSettingsKeys::EPopupNotificationOn); + return ( MusSettingsKeys::TPopupNotification ) value; + } MusSettingsKeys::TAutoRecord MultimediaSharingSettings::AutoRecordSettingL() { @@ -46,3 +63,8 @@ return iVideoLocation; } +MusSettingsKeys::TVideoDirection MultimediaSharingSettings::VideoDirectionL() + { + return iVideoDirection; + } + diff -r 33a5d2bbf6fc -r 73a1feb507fb tsrc/musavaailabilitystub/inc/musavaavailabilitystub.h --- a/tsrc/musavaailabilitystub/inc/musavaavailabilitystub.h Thu Aug 19 09:51:39 2010 +0300 +++ b/tsrc/musavaailabilitystub/inc/musavaavailabilitystub.h Tue Aug 31 15:12:07 2010 +0300 @@ -96,6 +96,8 @@ * @return Name of *this* availability. */ virtual MMusAvaObserver::TAvailabilityName Name(); + + virtual void PrepareForReceivedInviteL(); public: @@ -103,6 +105,7 @@ TBool iExecuteLeave; MMusAvaObserver::TAvailabilityStatus iStatusStub; MMusAvaObserver::TAvailabilityName iNameStub; + TBool iPrepareForInviteCalled; private: @@ -118,4 +121,4 @@ }; -#endif // __MUSAVANETWORKAVAILABILITY_H__ \ No newline at end of file +#endif // __MUSAVANETWORKAVAILABILITY_H__ diff -r 33a5d2bbf6fc -r 73a1feb507fb tsrc/musavaailabilitystub/src/musavaailabilitystub.cpp --- a/tsrc/musavaailabilitystub/src/musavaailabilitystub.cpp Thu Aug 19 09:51:39 2010 +0300 +++ b/tsrc/musavaailabilitystub/src/musavaailabilitystub.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -102,6 +102,15 @@ } // ------------------------------------------------------------------------- +// +// ------------------------------------------------------------------------- +// +void CMusAvaAvailabilityStub::PrepareForReceivedInviteL() + { + iPrepareForInviteCalled = ETrue; + } + +// ------------------------------------------------------------------------- // Constructor function. // ------------------------------------------------------------------------- // diff -r 33a5d2bbf6fc -r 73a1feb507fb tsrc/musenginestub/group/ABLD.BAT --- a/tsrc/musenginestub/group/ABLD.BAT Thu Aug 19 09:51:39 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,15 +0,0 @@ -@ECHO OFF - -REM Bldmake-generated batch file - ABLD.BAT -REM ** DO NOT EDIT ** - -perl -S ABLD.PL "\work\src\internal\stubs\musenginestub\group\\" %1 %2 %3 %4 %5 %6 %7 %8 %9 -if errorlevel==1 goto CheckPerl -goto End - -:CheckPerl -perl -v >NUL -if errorlevel==1 echo Is Perl, version 5.003_07 or later, installed? -goto End - -:End diff -r 33a5d2bbf6fc -r 73a1feb507fb tsrc/musenginestub/group/bld.inf --- a/tsrc/musenginestub/group/bld.inf Thu Aug 19 09:51:39 2010 +0300 +++ b/tsrc/musenginestub/group/bld.inf Tue Aug 31 15:12:07 2010 +0300 @@ -15,5 +15,9 @@ * */ +#include + PRJ_MMPFILES -musenginestub.mmp \ No newline at end of file +musenginepluginstub.mmp + + diff -r 33a5d2bbf6fc -r 73a1feb507fb tsrc/musenginestub/group/musenginepluginstub.mmp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tsrc/musenginestub/group/musenginepluginstub.mmp Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,46 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + +#include + +TARGET musenginepluginstub.dll +TARGETTYPE dll +UID 0x1000008d 0x00000112 // Experimental UID +CAPABILITY CAP_GENERAL_DLL +VENDORID VID_DEFAULT + + +SOURCEPATH ../src +SOURCE musengsessionmanager.cpp +SOURCE musengsession.cpp +SOURCE musengmcesession.cpp +SOURCE musengmceoutsession.cpp +SOURCE musenglivesession.cpp +SOURCE musengreceivesession.cpp +SOURCE musengclipsession.cpp + + +USERINCLUDE ../inc +USERINCLUDE ../../../mmsharing/inc +USERINCLUDE ../../../inc + +APP_LAYER_SYSTEMINCLUDE +SYSTEMINCLUDE /epoc32/include/ecom + +LIBRARY euser.lib +LIBRARY cntmodel.lib ecom.lib +DEBUGLIBRARY flogger.lib diff -r 33a5d2bbf6fc -r 73a1feb507fb tsrc/musenginestub/group/musenginestub.mmp --- a/tsrc/musenginestub/group/musenginestub.mmp Thu Aug 19 09:51:39 2010 +0300 +++ b/tsrc/musenginestub/group/musenginestub.mmp Tue Aug 31 15:12:07 2010 +0300 @@ -1,5 +1,5 @@ /* -* Copyright (c) 2006-2006 Nokia Corporation and/or its subsidiary(-ies). +* Copyright (c) 2006 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" @@ -10,39 +10,74 @@ * Nokia Corporation - initial contribution. * * Contributors: -* -* Description: Definition of project MceClientStub +* +* Description: * */ +// using relative paths for sourcepath and user includes +// exports are unfrozen -// To get the APP_LAYER_SYSTEMINCLUDE-definition #include #include #include +#include "../../../inc/musuid.hrh" -TARGET musenginestub.dll -TARGETTYPE dll -UID 0x1000008d 0x00000112 // Experimental UID +// Capability assignment. +CAPABILITY EUNIT_CAPS + +// Vendor ID assignment. +VENDORID VID_DEFAULT -CAPABILITY EUNIT_CAPS -VENDORID VID_DEFAULT -SOURCEPATH ../src +TARGET musengine.dll +TARGETTYPE dll +UID 0x1000008d KMusEngineUid // 0x10282392 + +//DOCUMENT Generic_Symbian_DLL_ReadMe.txt + +SOURCEPATH ../src SOURCE musengsession.cpp SOURCE musengmcesession.cpp SOURCE musengmceoutsession.cpp SOURCE musenglivesession.cpp +SOURCE musengtwowaysession.cpp +SOURCE musengtwowayrecvsession.cpp SOURCE musengreceivesession.cpp +SOURCE musengtelephoneutils.cpp SOURCE musengsessiondurationtimer.cpp -SOURCE musengclipsession.cpp +SOURCE musengclipsession.cpp +SOURCE musenguriparser.cpp +SOURCE musengmceutils.cpp +SOURCE musengcamerahandler.cpp + +// SIP API +SOURCE mussipprofilehandler.cpp -USERINCLUDE ../inc +USERINCLUDE ../inc +USERINCLUDE ../../mmshshared/inc +USERINCLUDE ../../inc +USERINCLUDE ../../../inc APP_LAYER_SYSTEMINCLUDE +SYSTEMINCLUDE /epoc32/include/ecom -LIBRARY euser.lib +LIBRARY euser.lib +LIBRARY bafl.lib +LIBRARY inetprotutil.lib +LIBRARY phoneclient.lib +LIBRARY centralrepository.lib +LIBRARY sipprofilecli.lib +LIBRARY sipclient.lib +LIBRARY sipcodec.lib +LIBRARY mceclient.lib +LIBRARY drmcommon.lib +LIBRARY charconv.lib +LIBRARY telephonyaudiorouting.lib +LIBRARY pbkeng.lib +LIBRARY cntmodel.lib -EXPORTUNFROZEN \ No newline at end of file +DEBUGLIBRARY flogger.lib + diff -r 33a5d2bbf6fc -r 73a1feb507fb tsrc/musenginestub/inc/musengaudioroutingobserver.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tsrc/musenginestub/inc/musengaudioroutingobserver.h Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,53 @@ +/* +* 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: +* +*/ + + +#ifndef MUSENGAUDIOROUTINGOBSERVER_H +#define MUSENGAUDIOROUTINGOBSERVER_H + + +// CLASS DECLARATION + +/** +* An interface to be implemented by users of Multimedia Sharing Engine if +* they wish to be notified about changes in audio routing. +* +*/ +class MMusEngAudioRoutingObserver + { + + public: + + /** + * Indicates that some other application has changed audio routing. + * @param aShowNote ETrue if notification of current change should be + * shown. + * + */ + virtual void AudioRoutingChanged( TBool aShowNote ) = 0; + + /** + * Observer is required to give information whether audio route change + * is allowed currently. + * @param ETrue if change is allowed, otherwise EFalse + * + */ + virtual TBool AudioRouteChangeAllowed() const = 0; + + }; + +#endif // INCLUDE GUARD \ No newline at end of file diff -r 33a5d2bbf6fc -r 73a1feb507fb tsrc/musenginestub/inc/musengcamerahandler.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tsrc/musenginestub/inc/musengcamerahandler.h Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,255 @@ +/* +* 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: +* +*/ + + +#ifndef MUSHENGCAMERAHANDLER_H +#define MUSHENGCAMERAHANDLER_H + +// USER +#include "musunittesting.h" +#include "mussettings.h" + +// SYSTEM +#include + +// FORWARD DECLARATIONS +class CMceCameraSource; +class CMceSession; + +// CLASS + +class TMusEngCameraHandler + { + MUS_UNITTEST( UT_CMusEngOutSession ) + MUS_UNITTEST( UT_CMusEngLiveSession ) + MUS_UNITTEST( UT_CMusEngTwoWaySession ) + MUS_UNITTEST( UT_CMusEngTwoWayRecvSession ) + MUS_UNITTEST( UT_TMusEngCameraHandler ) + + public: + /* + * Defines current camera to be used + */ + enum TCurrentCamera + { + ENextCamera = -1, + EBackCamera = 0, + EFrontCamera = 1 + }; + + public: + + /** + * Determines the number of cameras on the device. + * + * @param aCurrentCamera returns current camera.. + * + * @return Count of cameras present on the device. + */ + IMPORT_C TInt CamerasAvailableL( TCurrentCamera& aCurrentCamera ); + + /** + * Change current camera to front to back + * + * @param aCurrentCamera Change camera to be used. + */ + IMPORT_C void ChangeCameraL( TCurrentCamera aCurrentCamera ); + + /** + * Gets current zoom factor + * + * @pre Session is established + * @leave KErrNotReady if precondition not fullfilled + */ + IMPORT_C TInt CurrentZoomL() const; + + /** + * Sets new zoom factor + * + * @pre Session is established + * @pre MinZoomL <= aNewZoomFactor <= MaxZoomL + * @leave KErrNotReady if session is not established + */ + IMPORT_C void SetZoomL( TInt aNewZoomFactor ); + + /** + * Gets minimum zoom factor + * + * @pre Session is established + * @leave KErrNotReady if precondition not fullfilled + */ + IMPORT_C TInt MinZoomL() const; + + /** + * Gets maximum zoom factor + * + * @pre Session is established + * @leave KErrNotReady if precondition not fullfilled + */ + IMPORT_C TInt MaxZoomL() const; + + /** + * Increases zoom factor by one. + * + * @pre Session is established + * @leave KErrNotReady if precondition not fullfilled + */ + IMPORT_C void ZoomInL(); + + /** + * Decreases zoom factor by one. + * + * @pre Session is established + * @leave KErrNotReady if precondition not fullfilled + */ + IMPORT_C void ZoomOutL(); + + /** + * Sets zoom factor to default. + * + * @pre Session is established + * @leave KErrNotReady if precondition not fullfilled + */ + IMPORT_C void ZoomDefaultL(); + + /** + * Sets current brightness + * + * @pre Session is established + * @leave KErrNotReady if precondition not fullfilled + */ + IMPORT_C void SetBrightnessL( TInt aBrightness ) const; + + + /** + * Gets current brightness + * + * @pre Session is established + * @leave KErrNotReady if precondition not fullfilled + */ + IMPORT_C TInt CurrentBrightnessL() const; + + /** + * Gets maximum brightness + * + * @pre Session is established + * @leave KErrNotReady if precondition not fullfilled + */ + IMPORT_C TInt MaxBrightnessL() const; + + /** + * Gets minimum brightness + * + * @pre Session is established + * @leave KErrNotReady if precondition not fullfilled + */ + IMPORT_C TInt MinBrightnessL() const; + + /** + * Increases brightness by one. + * + * @pre Session is established + * @leave KErrNotReady if precondition not fullfilled + */ + IMPORT_C void IncreaseBrightnessL(); + + /** + * Decreases brightness by one. + * + * @pre Session is established + * @leave KErrNotReady if precondition not fullfilled + */ + IMPORT_C void DecreaseBrightnessL(); + + /** + * Sets brightness factor to default. + * + * @pre Session is established + * @leave KErrNotReady if precondition not fullfilled + */ + IMPORT_C void BrightnessDefaultL(); + + /** + * Sets brightness to automatic. + * + * @pre Session is established + * @leave KErrNotReady if precondition not fullfilled + */ + IMPORT_C void BrightnessAutoL(); + + /** + * Resumes previously paused session. + * Continues using viewfinder and enables streaming video. + * + */ + IMPORT_C void PlayL(); + + /** + * Pauses session. + * Holds display and disables streaming video to network. + * + */ + IMPORT_C void PauseL(); + + /** + * Tells whether session is paused or not + */ + IMPORT_C TBool IsPlayingL(); + + + public: + + TMusEngCameraHandler(); + + void SetSession( CMceSession* aSession ); + + void InitializeL( CMceCameraSource& aCamera ); + + void InitializeZoomStepSize(); + + void ReadCameraUsageKeyL(); + + TInt ZoomStepSize( TInt64& aTime ); + + void ChangeActiveCameraL( TCurrentCamera aNewCamera ); + + private: + + CMceSession* iSession; // Not owned + + TCameraInfo iCameraInfo; + + TInt iDefaultZoomFactor; + + TInt iDefaultBrightness; + + TInt64 iZoomInTime; + + TInt64 iZoomOutTime; + + TInt iSmallZoomStep; + + TInt iBigZoomStep; + + TCurrentCamera iCurrentCamera; + + MusSettingsKeys::TUseCamera iCameraUsage; + + }; + +#endif + diff -r 33a5d2bbf6fc -r 73a1feb507fb tsrc/musenginestub/inc/musengclipsession.h --- a/tsrc/musenginestub/inc/musengclipsession.h Thu Aug 19 09:51:39 2010 +0300 +++ b/tsrc/musenginestub/inc/musengclipsession.h Tue Aug 31 15:12:07 2010 +0300 @@ -22,153 +22,37 @@ // USER #include "musengmceoutsession.h" - -class MMusEngClipSessionObserver; -class CMusEngLiveSession; -class CMceFileSource; - class CMusEngClipSession : public CMusEngMceOutSession { - + public: /** * - * @since S60 v3.2 */ - IMPORT_C static CMusEngClipSession* NewL( - const TDesC& aFileName, - const TRect& aRect, - MMusEngClipSessionObserver* aSessionObserver, - TUint aSipProfileId = 0 ); - - /** - * - * @since 3.2 - */ - ~CMusEngClipSession(); - - - public: // new API - - /** - * Sets file to be shared during session. - * @pre Session must be established - * @pre New file cannot be DRM protected - * @leave One of the system wide error codes - * @param aFileName Name of the file to be shared - * @since S60 v3.2 - */ - IMPORT_C void ChangeClipL( const TDesC& aFileName ); - - /** - * - * @since S60 v3.2 - */ - IMPORT_C void FastForwardL( TBool aUseFFWD ); - - /** - * - * @since S60 v3.2 - */ - IMPORT_C void FastRewindL( TBool aUseFRWD ); - - /** - * - * @since S60 v3.2 - */ - IMPORT_C TTimeIntervalSeconds PositionL(); - + static CMusEngClipSession* NewL( + const TRect& aRect ); + /** * - * @since S60 v3.2 */ - IMPORT_C TTimeIntervalSeconds DurationL(); - - /** - * - * @since S60 v3.2 - */ - IMPORT_C void SetPositionL (const TTimeIntervalSeconds &aPosition); - - - public: - - /** - * - * @since S60 v3.2 - */ - IMPORT_C void SetSessionObserver( - MMusEngClipSessionObserver* aSessionObserver ); - - - public: // implementation of virtual API from CMusEngMceOutSession - - /** - * Resumes previously paused session. - * Continues showing file on display, resumes clip's audio, continues - * playing file and enables streaming to network. - * - * @since S60 v3.2 - */ - IMPORT_C void PlayL(); - - /** - * Pauses session. - * Holds display, mutes clip's audio, pauses file and - * disables all streaming to network. - * - * @since S60 v3.2 - */ - IMPORT_C void PauseL(); - - - protected: // implementation of virtual helper from CMusEngMceOutSession - - /** - * - * @since S60 v3.2 - */ - void CompleteSessionStructureL(); + ~CMusEngClipSession(); private: /** * - * @since S60 v3.2 */ - CMusEngClipSession( MMusEngClipSessionObserver* aSessionObserver, - const TRect& aRect, - TUint aSipProfileId = 0 ); + CMusEngClipSession( const TRect& aRect ); /** * @leave KErrPermissionDenied if file is DRM protected - * @since S60 v3.2 */ - void ConstructL( const TDesC& aFileName ); + void ConstructL(); - private: // HELPERS - - /** - * - * @since S60 v3.2 - */ - TBool IsProtectedFileL( const TDesC& aClipFile ); - - /** - * Constructs audio stream structure during session completion and adds - * it to session. - * @pre iSession != NULL - * @pre iFileSource != NULL - */ - void ConstructAudioStructureL(); - - public: // Data - - CMceFileSource* iFileSource; - + }; #endif diff -r 33a5d2bbf6fc -r 73a1feb507fb tsrc/musenginestub/inc/musengclipsessionobserver.h --- a/tsrc/musenginestub/inc/musengclipsessionobserver.h Thu Aug 19 09:51:39 2010 +0300 +++ b/tsrc/musenginestub/inc/musengclipsessionobserver.h Tue Aug 31 15:12:07 2010 +0300 @@ -16,28 +16,58 @@ */ -#ifndef MUSHENGCLIPSESSIONOBSERVER_H -#define MUSHENGCLIPSESSIONOBSERVER_H +#ifndef MUSENGCLIPSESSIONOBSERVER_H +#define MUSENGCLIPSESSIONOBSERVER_H // INCLUDES -#include -#include "musengoutsessionobserver.h" +#include // CLASS DECLARATION /** -* An interface to be implemented by users of Multimedia Sharing Engine if they wish to receive -* events from session state changes. +* An interface to be implemented by users of Multimedia Sharing Engine +* if they wish to receive clip sharing specific events. * -* This observer is set using CMSSession::SetSessionObserver function. +* This observer is set using CMusEngClipSession::SetSessionObserver function. * -* @lib ???.lib */ -class MMusEngClipSessionObserver : public MMusEngOutSessionObserver +class MMusEngClipSessionObserver { public: + /** + * Indicates that shared clip has ended. + */ virtual void EndOfClip() = 0; + + /** + * Indicates that chosen clip must be transcoded before sharing. + */ + virtual void TranscodingNeeded() = 0; + + /** + * Indicates that transcoding has progressed. + * @param aPercentage Percentage of completion + */ + virtual void TranscodingProgressed( TInt aPercentage ) = 0; + + /** + * Indicates that transcoding has successfully complited + * but session establishment is not yet proceeding. + */ + virtual void TranscodingCompletedInit() = 0; + + /** + * Indicates that transcoding has successfully complited + * and session establishment continues. + */ + virtual void TranscodingCompletedFinalize() = 0; + + /** + * Indicates that transcoding has failed. + */ + virtual void TranscodingFailed() = 0; + }; #endif \ No newline at end of file diff -r 33a5d2bbf6fc -r 73a1feb507fb tsrc/musenginestub/inc/musenglivesession.h --- a/tsrc/musenginestub/inc/musenglivesession.h Thu Aug 19 09:51:39 2010 +0300 +++ b/tsrc/musenginestub/inc/musenglivesession.h Tue Aug 31 15:12:07 2010 +0300 @@ -21,182 +21,189 @@ // USER #include "musengmceoutsession.h" +#include "musunittesting.h" +#include "mussettings.h" +#include "musengcamerahandler.h" +#include "lcvideoplayer.h" +#include "lccameracontrol.h" +#include "lcbrightnesscontrol.h" +#include "lczoomcontrol.h" +#include "lcfilecontrol.h" // SYSTEM #include // FORWARD DECLARATIONS class MMusEngLiveSessionObserver; +class MLcValueControl; -class CMusEngLiveSession : public CMusEngMceOutSession +class CMusEngLiveSession : + public CMusEngMceOutSession, + public MLcVideoPlayer, + public MLcCameraControl, + public MLcBrightnessControl, + public MLcZoomControl, + public MLcFileControl { - + public: - /** * Creates new MultimediaSharing Live session. * - * @since S60 v3.2 * @param aFileName Media filename * @param aRect UI drawing area. It is allowed handle from engine - * @param aSessionObserver Session specific callbacks - * @param aSipProfileId SIP profile to be used, 0 is default profile + * @param aSessionObserver Interface for session specific callbacks + * @param aOutSessionObserver Interface for outsession specific callbacks + * @param aLiveSessionObserver interface for live session specific + * callbacks * @return CMusEngLiveSession* New instanse of specified class */ - IMPORT_C static CMusEngLiveSession* NewL( - const TDesC& aFileName, - const TRect& aRect, - MMusEngLiveSessionObserver* aSessionObserver, - TUint aSipProfileId = 0); - + static CMusEngLiveSession* NewL( + const TDesC& aFileName, + const TRect& aRect ); + /** * Creates new MultimediaSharing Live session. * - * @since S60 v3.2 * @param aRect UI drawing area. It is allowed handle from engine - * @param aSessionObserver Session specific callbacks - * @param aSipProfileId SIP profile to be used, 0 is default profile + * @param aSessionObserver Interface for session specific callbacks + * @param aOutSessionObserver Interface for outsession specific callbacks + * @param aLiveSessionObserver interface for live session specific + * callbacks * @return CMusEngLiveSession* New instanse of specified class */ - IMPORT_C static CMusEngLiveSession* NewL( - const TRect& aRect, - MMusEngLiveSessionObserver* aSessionObserver, - TUint aSipProfileId = 0 ); + static CMusEngLiveSession* NewL( + const TRect& aRect ); + public: /** * Destructor - * - * @since S60 v3.2 */ ~CMusEngLiveSession(); - - public: // NEW API FUNCTIONS live session specific - - /** - * Sets callback interface pointer - * - * @since S60 v3.2 - * @param aSessionObserver Pointer to class which implements interface - */ - IMPORT_C void SetSessionObserver( - MMusEngLiveSessionObserver* aSessionObserver ); + public: // from MLcSession + + void EstablishLcSessionL(); + + MLcVideoPlayer* LocalVideoPlayer(); + + const TDesC& RemoteDisplayName(); + + + public: // from MLcVideoPlayer + + TLcVideoPlayerState LcVideoPlayerState() const; + + TBool LcIsPlayingL(); + + void LcPlayL(); + + void LcPauseL(); + + MLcWindow* LcWindow(); - /** - * Gets current zoom factor - * - * @pre Session is established - * @leave KErrNotReady if precondition not fullfilled - * @since S60 v3.2 - */ - IMPORT_C TInt CurrentZoomL() const; + MLcCameraControl* LcCameraControl(); + + MLcFileControl* LcSourceFile(); + + MLcFileControl* LcDestinationFile(); + + MLcAudioControl* LcAudioControl(); + + MLcZoomControl* LcZoomControl(); + + MLcBrightnessControl* LcBrightnessControl(); - /** - * Gets maximum zoom factor - * - * @pre Session is established - * @leave KErrNotReady if precondition not fullfilled - * @since S60 v3.2 - */ - IMPORT_C TInt MaxZoomL() const; + RPointerArray< MLcValueControl >& LcExtensionControls(); - IMPORT_C TInt MinZoomL() const; - - /** - * Increases zoom factor by one. - * - * @pre Session is established - * @leave KErrNotReady if precondition not fullfilled - * @since S60 v3.2 - */ - IMPORT_C void ZoomInL(); + public: // from MLcCameraControl + + TInt LcCameraCountL(); - /** - * Decreases zoom factor by one. - * - * @pre Session is established - * @leave KErrNotReady if precondition not fullfilled - * @since S60 v3.2 - */ - IMPORT_C void ZoomOutL(); + void ToggleLcCameraL(); + + public: // MLcBrightnessControl + + TInt MinLcBrightnessL(); + + TInt MaxLcBrightnessL(); + + TInt LcBrightnessL(); - /** - * Sets zoom factor to default. - * - * @pre Session is established - * @leave KErrNotReady if precondition not fullfilled - * @since S60 v3.2 - */ - IMPORT_C void ZoomDefaultL(); - - public: // implementation of virtual API from CMusEngMceOutSession + void SetLcBrightnessL( TInt aValue ); + + void IncreaseLcBrightnessL(); + + void DecreaseLcBrightnessL(); + + public: // from MLcZoomControl + + TInt MinLcZoomL(); - /** - * Resumes previously paused session. - * Continues using viewfinder and enables streaming video. - * - * @since S60 v3.2 - */ - IMPORT_C void PlayL(); + TInt MaxLcZoomL(); + + TInt LcZoomValueL(); - /** - * Pauses session. - * Holds display and disables streaming video to network. - * - * @since S60 v3.2 - */ - IMPORT_C void PauseL(); - + void SetLcZoomValueL( TInt aValue ); + + void LcZoomInL(); + + void LcZoomOutL(); + + public: // from MLcFileControl + + void EnableLcFileL( TBool aEnable ); + + TBool IsLcFileEnabled(); - protected: // inherited from CMusEngMceOutSession - - /** - * - * @since S60 v3.2 - */ - void CompleteSessionStructureL(); - - - private: + void SetLcFileNameL( const TFileName& aFileName ); + + TFileName& LcFileName(); + + protected: /** * Constructor - - * @since S60 v3.2 */ - CMusEngLiveSession( MMusEngLiveSessionObserver* aSessionObserver, - const TRect& aRect, - TUint aSipProfileId = 0 ); + CMusEngLiveSession( const TRect& aRect, + const TDesC& aRecordedFile = KNullDesC ); /** * Second-phase constructor - * - * @since S60 v3.2 */ void ConstructL(); + - public: + protected: /** - * - * @since S60 v3.2 + * File name for recording. If KNullDesC no recording performed. + */ + TFileName iRecordedFile; + + /** + * Dummy member variable to implement MLcVideoPlayer::LcExtensionControls */ - //TCameraInfo iCameraInfo; - - /** - * - * @since S60 v3.2 - */ + RPointerArray< MLcValueControl > iValueControls; + + TMusEngCameraHandler iCameraHandler; + + /* + * Remote Display Name + */ + HBufC* iRemoteDisplayName; + + TInt iCurrentZoom; TInt iDefaultZoomFactor; + TInt iCurrentBrighness; TInt iPlaying; - TInt iCurrentZoom; - - + TBool iFileEnabled; + }; #endif diff -r 33a5d2bbf6fc -r 73a1feb507fb tsrc/musenginestub/inc/musenglivesessionobserver.h --- a/tsrc/musenginestub/inc/musenglivesessionobserver.h Thu Aug 19 09:51:39 2010 +0300 +++ b/tsrc/musenginestub/inc/musenglivesessionobserver.h Tue Aug 31 15:12:07 2010 +0300 @@ -1,5 +1,5 @@ /* -* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies). +* Copyright (c) 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" @@ -19,23 +19,24 @@ #ifndef MUSHENGLIVESESSIONOBSERVER_H #define MUSHENGLIVESESSIONOBSERVER_H -// INCLUDES -#include "musengoutsessionobserver.h" + // CLASS DECLARATION /** -* An interface to be implemented by users of Multimedia Sharing Engine if -* they wish to receive -* events from session state changes. -* -* This observer is set using CMSSession:: function. -* -* @lib musengine.lib -* @since S60 v3.2 +* An interface to be implemented by clients of Multimedia Sharing Engine if +* they wish to receive events about live sharing specific event. */ -class MMusEngLiveSessionObserver : public MMusEngOutSessionObserver +class MMusEngLiveSessionObserver { + + public: + + /** + * Indicates that disk has run out of space during recording. + */ + virtual void DiskFull() = 0; + }; #endif \ No newline at end of file diff -r 33a5d2bbf6fc -r 73a1feb507fb tsrc/musenginestub/inc/musenglogger.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tsrc/musenginestub/inc/musenglogger.h Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,301 @@ +/* +* Copyright (c) 2006 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: ?Description +* +*/ + + +#ifndef MUSENGLOGGER_H +#define MUSENGLOGGER_H + + +#include "muslogger.h" + +#if ( !_DEBUG || UNIT_TESTING ) // release or unit test build; no logs + +#define MUS_ENG_LOG_SESSION_STATE( aSession ) +#define MUS_ENG_LOG_SESSION_STATE_AND_STATUS( aSession, aStatusCode, aReasonPhrase ) +#define MUS_ENG_LOG_STREAM_STATE( aStream ) +#define MUS_ENG_LOG_SINK_STATES( aStream ) +#define MUS_ENG_LOG_SOURCE_STATE( aSource ) +#define MUS_ENG_LOG_SINK_STATE( aSink ) +#define MUS_ENG_LOG_STATUS( aStatusCode, aReasonPhrase ) + +#else // debug build; logs + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define MUS_ENG_LOG_SESSION_STATE( aSession )\ + {\ + TBuf<15> state;\ + switch ( (aSession).State() )\ + {\ + case CMceSession::EIdle:\ + {\ + state = _L("EIdle");\ + break;\ + }\ + case CMceSession::EOffering :\ + {\ + state = _L("EOffering");\ + break;\ + }\ + case CMceSession::EIncoming:\ + {\ + state = _L("EIncoming");\ + break;\ + }\ + case CMceSession::EReserving :\ + {\ + state = _L("EReserving");\ + break;\ + }\ + case CMceSession::EAnswering :\ + {\ + state = _L("EAnswering");\ + break;\ + }\ + case CMceSession::EProceeding :\ + {\ + state = _L("EProceeding");\ + break;\ + }\ + case CMceSession::EEstablished:\ + {\ + state = _L("EEstablished");\ + break;\ + }\ + case CMceSession::ECancelling:\ + {\ + state = _L("ECancelling");\ + break;\ + }\ + case CMceSession::ETerminating:\ + {\ + state = _L("ETerminating");\ + break;\ + }\ + case CMceSession::ETerminated:\ + {\ + state = _L("ETerminated");\ + break;\ + }\ + default:\ + {\ + state = _L("Unknown");\ + break;\ + }\ + }\ + MUS_LOG_TDESC( "mus: [ENGINE] Session state is ", state )\ + } + + +#define MUS_ENG_LOG_SESSION_STATE_AND_STATUS( aSession, aStatusCode, aReasonPhrase )\ + {\ + MUS_ENG_LOG_SESSION_STATE( aSession )\ + MUS_ENG_LOG_STATUS( aStatusCode, aReasonPhrase )\ + } + + +#define MUS_ENG_LOG_STREAM_STATE( aStream )\ + {\ + TBuf<20> streamState;\ + switch ( (aStream).State() )\ + {\ + case CMceMediaStream::EUninitialized:\ + {\ + streamState = _L("EIdle");\ + break;\ + }\ + case CMceMediaStream::EInitialized:\ + {\ + streamState = _L("EInitialized");\ + break;\ + }\ + case CMceMediaStream::EBuffering:\ + {\ + streamState = _L("EBuffering");\ + break;\ + }\ + case CMceMediaStream::EIdle:\ + {\ + streamState = _L("EIdle");\ + break;\ + }\ + case CMceMediaStream::EStreaming:\ + {\ + streamState = _L("EStreaming");\ + break;\ + }\ + case CMceMediaStream::EDisabled:\ + {\ + streamState = _L("EDisabled");\ + break;\ + }\ + case CMceMediaStream::ENoResources:\ + {\ + streamState = _L("ENoResources");\ + break;\ + }\ + case CMceMediaStream::ETranscodingRequired:\ + {\ + streamState = _L("ETranscodingRequired");\ + break;\ + }\ + case CMceMediaStream::ETranscoding:\ + {\ + streamState = _L("ETranscoding");\ + break;\ + }\ + default:\ + {\ + streamState = _L("Unknown");\ + break;\ + }\ + }\ + if ( (aStream).Type() == KMceAudio )\ + {\ + MUS_LOG_TDESC( "mus: [ENGINE] AudioStream state is ", streamState )\ + }\ + else\ + {\ + MUS_LOG_TDESC( "mus: [ENGINE] VideoStream state is ", streamState )\ + }\ + MUS_ENG_LOG_SOURCE_STATE( (aStream).Source() )\ + MUS_ENG_LOG_SINK_STATES( (aStream) )\ + } + + +#define MUS_ENG_LOG_SINK_STATES( aStream )\ + {\ + for ( TInt sinkIndex = 0; sinkIndex < aStream.Sinks().Count(); ++sinkIndex )\ + {\ + MUS_ENG_LOG_SINK_STATE( aStream.Sinks()[ sinkIndex ] )\ + }\ + } + + +#define MUS_ENG_LOG_SOURCE_STATE( aSource )\ + {\ + if ( aSource )\ + {\ + TBuf<10> sourceState;\ + if ( aSource->IsEnabled() )\ + {\ + sourceState = _L("enabled");\ + }\ + else\ + {\ + sourceState = _L("disabled");\ + }\ + switch ( aSource->Type() )\ + {\ + case KMceCameraSource:\ + {\ + MUS_LOG_TDESC( " CameraSource is ", sourceState )\ + break;\ + }\ + case KMceFileSource:\ + {\ + MUS_LOG_TDESC( " FileSource is ", sourceState )\ + break;\ + }\ + case KMceRTPSource:\ + {\ + MUS_LOG_TDESC( " RtpSource is ", sourceState )\ + break;\ + }\ + default:\ + {\ + MUS_LOG_TDESC( " UnknownSource is ", sourceState )\ + break;\ + }\ + }\ + }\ + else\ + {\ + MUS_LOG( " No source in stream" )\ + }\ + } + +#define MUS_ENG_LOG_SINK_STATE( aSink )\ + {\ + if ( aSink )\ + {\ + TBuf<10> sinkState;\ + if ( aSink->IsEnabled() )\ + {\ + sinkState = _L("enabled");\ + }\ + else\ + {\ + sinkState = _L("disabled");\ + }\ + switch ( aSink->Type() )\ + {\ + case KMceDisplaySink:\ + {\ + MUS_LOG_TDESC( " DisplaySink is ", sinkState )\ + break;\ + }\ + case KMceSpeakerSink:\ + {\ + MUS_LOG_TDESC( " SpeakerSink is ", sinkState )\ + break;\ + }\ + case KMceRTPSink:\ + {\ + MUS_LOG_TDESC( " RtpSink is ", sinkState )\ + break;\ + }\ + case KMceFileSink:\ + {\ + MUS_LOG_TDESC( " FileSink is ", sinkState )\ + break;\ + }\ + default:\ + {\ + MUS_LOG_TDESC( " UnknownSink is ", sinkState )\ + break;\ + }\ + }\ + }\ + } + + +#define MUS_ENG_LOG_STATUS( aStatusCode, aReasonPhrase )\ + {\ + MUS_LOG1( " StatusCode is %d", aStatusCode )\ + HBufC16* reasonPhrase = HBufC16::NewLC( aReasonPhrase.Length() );\ + reasonPhrase->Des().Copy( aReasonPhrase );\ + MUS_LOG_TDESC( " ReasonPhrase is ",(*reasonPhrase) )\ + CleanupStack::PopAndDestroy( reasonPhrase );\ + } + + + +#endif // _DEBUG + + +#endif // MUSENGLOGGER_H + +// End of File diff -r 33a5d2bbf6fc -r 73a1feb507fb tsrc/musenginestub/inc/musengmceoutsession.h --- a/tsrc/musenginestub/inc/musengmceoutsession.h Thu Aug 19 09:51:39 2010 +0300 +++ b/tsrc/musenginestub/inc/musengmceoutsession.h Tue Aug 31 15:12:07 2010 +0300 @@ -23,10 +23,6 @@ #include "musengmcesession.h" -// FORWARD DECLARATIONS -class CSIPProfile; -class CMusSipProfileHandler; -class MMusEngOutSessionObserver; // CLASS DECLARATION /** @@ -34,160 +30,29 @@ * CMusEngLiveSession and CMusEngClipSession. * * @lib musengine.lib -* @since S60 v3.2 */ class CMusEngMceOutSession : public CMusEngMceSession { - + public: /** * Destructor - * - * @since S60 v3.2 */ ~CMusEngMceOutSession(); - public: // NEW API FUNCTIONS - - /** - * Sends invite to specified address - * @leave KErrAlreadyExists if session establishment is already - * in progress - * - * @since S60 v3.2 - */ - IMPORT_C void InviteL( const TDesC& aRecipient ); - - /** - * Cancels Invite. - * @pre Invite is sent. - * @since S60 v3.2 - */ - IMPORT_C void CancelInviteL( ); - - - public: // VIRTUAL API - - /** - * Resumes previously paused session. Exact behavior depends on - * exact session type. - * - * @since S60 v3.2 - */ - IMPORT_C virtual void PlayL() = 0; - - /** - * Pauses session. Exact behavior depends on exact session type. - * - * @since S60 v3.2 - */ - IMPORT_C virtual void PauseL() = 0; - - - protected: // Must be implemented in derived class - - /** - * - * @since S60 v3.2 - */ - virtual void CompleteSessionStructureL() = 0; - - - protected: // helper function inherited from CMusEngMceSession - - /** - * Function handling MCE session termination. - * - * @since S60 v3.2 - */ - //void HandleTermination( TMceTransactionDataContainer* aContainer ); - - protected: /** * Constructor - * - * @since S60 v3.2 */ - CMusEngMceOutSession( const TRect& aRect, TUint aSipProfileId = 0 ); + CMusEngMceOutSession( const TRect& aRect ); /** * Second-phase constructor - * - * @since S60 v3.2 */ void ConstructL(); - - protected: // HELPERS - - #if (defined (__WINS__) || defined(__WINSCW__)) - /** - * - * @since S60 v3.2 - */ - void SipProfileChanged(); - #endif - - - private: - - /** - * - * @since S60 v3.2 - */ - void CreateMceSessionStructureL(); - - /** - * - * @since S60 v3.2 - */ - MMusEngOutSessionObserver* OutSessionObserver(); - - /** - * Parses, validates and creates new recipient address - * out of given address. - * @return Parsed recipient URI. Ownership is transferred. - * @since S60 v3.2 - */ - HBufC8* ParseRecipientUriL( const TDesC& aRecipient ); - - - protected: // DATA - - /** - * Repository id of SipProfile - * - * @since S60 v3.2 - */ - TUint iSipProfileId; - - /** - * Owned by iSipProfileHandler - * - * @since S60 v3.2 - */ - //CSIPProfile* iSipProfile; - - /** - * Callback pointer to interface - * - * @since S60 v3.2 - */ - //CMusSipProfileHandler* iSipProfileHandler; - - - public: // DATA - - /** - * - * @since S60 v3.2 - */ - HBufC8* iRecipient; - TBool iInvited; - }; #endif //MUSHENGMCESESSION_H diff -r 33a5d2bbf6fc -r 73a1feb507fb tsrc/musenginestub/inc/musengmcesession.h --- a/tsrc/musenginestub/inc/musengmcesession.h Thu Aug 19 09:51:39 2010 +0300 +++ b/tsrc/musenginestub/inc/musengmcesession.h Tue Aug 31 15:12:07 2010 +0300 @@ -21,28 +21,10 @@ // USER #include "musengsession.h" -#include "musengsessiondurationtimerobserver.h" - -// SYSTEM -/* -#include -#include -#include -#include -*/ +#include "lcsession.h" +#include "lcwindow.h" +#include "lcaudiocontrol.h" -/* -class CMceManager; -class CMceSession; -*/ -class CMusEngSessionDurationTimer; - - -// CONSTANTS - -_LIT8( KMusEngAcceptContactHeader, - "Accept-Contact: *;+g.3gpp.cs-voice; explicit" ); -_LIT8( KMusEngSessionSdpLineXApplication, "a=X-application:com.nokia.rtvs" ); // CLASS DECLARATION @@ -52,252 +34,112 @@ * * CMusEngMceSession encapsulates CMCESession and simplifies use of * MCE Sessions to user interface. Also splits observers messy events -* simplified commands like a SessionDisconnected. +* to simplified function calls. * * @lib musengine.lib -* @since S60 v3.2 */ class CMusEngMceSession : public CMusEngSession, - public MMusEngSessionDurationTimerObserver + public MLcSession, + public MLcWindow, + public MLcAudioControl { - - public: - + + public: + /** * Destructor - * - * @since S60 v3.2 */ ~CMusEngMceSession(); - public: // API FUNCTIONS - - /** - * Terminates session. - * @pre Session is established - * @post Session is ready to be deleted - * @leave KErrNotReady if precondition is not fullfilled - * @since S60 v3.2 - */ - IMPORT_C void TerminateL(); - - /** - * Releases all this session internal observers. This function is needed - * before we could get session store out of this session. - * TODO: Is this function really needed? At least at the moment it is - * not called from UI. -HR 21.8. - * - * @since S60 v3.2 - */ - IMPORT_C void ReleaseInternalObservers(); + public: // from MLcSession + + TLcSessionState LcSessionState() const; + + virtual void EstablishLcSessionL(); + + void TerminateLcSessionL(); + + virtual MLcVideoPlayer* RemoteVideoPlayer(); + + virtual MLcVideoPlayer* LocalVideoPlayer(); + + virtual const TDesC& LocalDisplayName(); + + virtual const TDesC& RemoteDisplayName(); - /** - * Get session time return estabilished session time - * - * @since S60 v3.2 - * @return TTime returns time if connection established else < 0 - */ - IMPORT_C TTimeIntervalSeconds GetSessionTime() const; + TInt SetParameter( TInt aId, TInt aValue ); - /** - * Returns current connection state - * - * @since S60 v3.2 - * @return TBool returns current connection state - */ - IMPORT_C TBool ConnectionActive() const; - - - public: // VIRTUAL API - - // No virtual api - + TInt ParameterValue( TInt aId ); + + void UpdateLcSessionL(); - public: // from CMusEngSession - - /** - * Increases volume level by one - * - * @pre Session is ongoing - * @since S60 v3.2 - */ - IMPORT_C void VolumeUpL(); - - /** - * Decreases volume level by one - * - * @pre Session is ongoing - * @since S60 v3.2 - */ - IMPORT_C void VolumeDownL(); + + public: // from MLcWindow + + void EnableLcWindowL( TBool aEnable ); + + TBool IsLcWindowEnabled(); + + void SetLcWindowRectL( TRect aRect ); + + TRect LcWindowRect(); + + void SetLcWindowOrientationL( + TLcWindowOrientation aOrientation ); + + TLcWindowOrientation LcWindowOrientationL(); + + public: // from MLcAudioControl + + TBool IsLcAudioMutedL(); - /** - * Permission to draw on screen device. - * - * @pre Session is ongoing - * @since S60 v3.2 - */ - IMPORT_C void EnableDisplayL( TBool aEnable ); + void MuteLcAudioL( TBool aMute ); + + TBool IsLcMicMutedL(); + + void MuteLcMicL( TBool aMute ); + + TBool IsLcLoudspeakerEnabled(); - /** - * Implements virtual from CMusEngSession - * - * @pre Session is ongoing - * @since S60 v3.2 - */ - IMPORT_C void MuteL(); - - /** - * Implements virtual from CMusEngSession - * - * @pre Session is ongoing - * @since S60 v3.2 - */ - IMPORT_C void UnmuteL(); - - + void EnableLcLoudspeakerL( TBool aEnabled ); + + TBool IsEnablingLcLoudspeakerAllowed(); + + TInt LcVolumeL(); + + void SetLcVolumeL( TInt aValue ); + + void IncreaseLcVolumeL(); + + void DecreaseLcVolumeL(); + protected: // CONSTRUCTORS /** * Constructor * - * @since S60 v3.2 */ CMusEngMceSession( const TRect& aRect ); /** * Second-phase constructor * - * @since S60 v3.2 */ void ConstructL(); - - - protected: // HELPER FUNCTIONS - - /** - * - * @since S60 v3.2 - */ - void RectChangedL(); - - /** - * Sets session specific SDP line to a session - * - * @since S60 v3.2 - */ - //void SetSessionSdpLinesL( CMceSession& aSession ); - - - protected: // internal API - - /** - * - * @since S60 v3.2 - */ - virtual TBool IsRtpcInactivityTimoutSupported(); - - - private: // HELPER FUNCTIONS + - /** - * Start counting session time - * - * @since S60 v3.2 - */ - void InitializeSessionTimer(); - - /** - * Callback - * - * @since S60 v3.2 - */ - void UpdateTimerEvent(); - - /** - * - * - * @since S60 v3.2 - */ - void DoMuteL( TBool aMute ); - - /** - * Increases or decreases current volume of all speakers in session - * structure by one. - * @pre Current volume of all the speakers is less than MaxVolumeL() - * and at least 1. - */ - void ChangeVolumeByOneL( TBool aIncreaseVolume ); - - - private: // Helpers + private: - /** - * Helper function to avoid three different traps. - * Should be replaced when MCE supports different kind of method - * detecting end of clip. - * - * @since S60 v3.2 - */ - void CheckClipEndL(); - - - public: // MEMBERS - - /** - * Class for connecting to MCE server. - * This class provides the connection to the MCE server and - * provides functions - * for setting observers for asynchronous events. - * The user should create only one instance of this class. - * - * @since S60 v3.2 - */ - //CMceManager* iManager; - - /** - * Base class for MCE sessions, inherited by both CMCEInSession and - * CMCEOutSession. * CMCESession represents peer-to-peer connection - * made with remote terminal. This connection is also known as dialog - * and it is set up using SIP INVITE method. The characteristics of the - * session are defined by user of this class by attaching media streams - * into the session. After the session has been succesfully established, - * it can be later updated and must be finally terminated. If for any - * reason instance of this class is deleted while in established state, - * session is automatically terminated by MCE server. - * - * @since S60 v3.2 - */ - //CMceSession* iSession; - - - public: - - /** - * It is assumed, that user has only one instance of this class. - * The same instance is passed between MCE and user, but the data - * inside of this container is just updated for each event. - * - * @since S60 v3.2 - */ - //TMceTransactionDataContainer iTransactionDataContainer; - - /** - * Session time. Acts simultaneously as RTCP inactivity timer. - * - * @since S60 v3.2 - */ - TTime iStartTime; - - CMusEngSessionDurationTimer* iUpdateTimer; - - /** - * Value indicating seconds gone since last received RTCP sender or - * receiver report. Value 20 indicates RTCP inactivity timeout. - */ - TInt iSecondsFromLastRtcpReport; - TInt iDisplayEnabled; + MLcWindow::TLcWindowOrientation iOrientation; + TBool iMuted; + TBool iMicMuted; + TBool iLoudspeakerEnabled; + TBool iEnablingLoudspeakerAllowed; + TInt iVolume; + TRect iRect; + TBool iWindowEnabled; }; + #endif //MUSHENGMCESESSION_H diff -r 33a5d2bbf6fc -r 73a1feb507fb tsrc/musenginestub/inc/musengmceutils.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tsrc/musenginestub/inc/musengmceutils.h Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,268 @@ +/* +* Copyright (c) 2005-2006 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: Utilities to locate and manipulate MCE sessions, streams, +* sources and sinks +* +*/ + + + +#ifndef MUSENGMCEUTILS_H +#define MUSENGMCEUTILS_H + + +#include +#include +#include + + +class CMceSession; +class CMceDisplaySink; +class CMceCameraSource; +class CMceFileSource; +class CMceVideoStream; +class CMceSpeakerSink; + +const TUint KMusEngNoAssociatedSourceType = KMaxTUint; + +/** +* Static class including utility methods to locate and manipulate MCE +* sessions, streams, sources and sinks +* @lib musengine.lib +*/ +class MusEngMceUtils + { + + public: + + /** + * Tells if a stream is a video stream with rtp source. + * + * @param aStream Stream to be investigated + * @return ETrue if parameter is a video stream with a RTP source + */ + static TBool IsVideoInStream( CMceMediaStream& aStream ); + + /** + * Tells if a stream is a video stream with rtp sink. + * + * @param aStream Stream to be investigated + * @return ETrue if parameter is a video stream with a RTP sink + */ + static TBool IsVideoOutStream( CMceMediaStream& aStream ); + + /** + * Tells if a stream is an audio stream with rtp source. + * + * @param aStream Stream to be investigated + * @return ETrue if parameter is an audio stream with a RTP source + */ + static TBool IsAudioInStream( CMceMediaStream& aStream ); + + /** + * Gets handle to video stream with RTP sink. + * Ownership is not transferred. + * + * @return Outgoing video stream + * @leave KErrNotFound if none exists + * @leave KErrOverflow if session contains more than one outgoing + * video stream + */ + static CMceVideoStream* GetVideoOutStreamL( CMceSession& aSession ); + + /** + * Gets handle to video stream with RTP source. + * Ownership is not transferred. + * + * @return Incoming video stream + * @leave KErrNotFound if none exists + * @leave KErrOverflow if session contains more than one incoming + * video stream + */ + static CMceVideoStream* GetVideoInStreamL( CMceSession& aSession ); + + /** + * Gets handle to video stream with file sink. + * Ownership is not transferred. + * + * @return Recording video stream, NULL if none exists + */ + static CMceVideoStream* GetRecordingStream( CMceSession& aSession ); + + /** + * Gets handle to a media sink of spesified type contained by + * a mediastream. If there are several sink instances, first one is + * returned. If associated source type is defined, sink in stream having + * the source is tried to be searched. If no such match, first matching + * sink is returned. Ownership is not transferred. + * + * @return Media sink of the spesified type. NULL if none exists + */ + static CMceMediaSink* GetMediaSink( + CMceMediaStream& aStream, + TMceSinkType aType, + TMceSourceType aAssociatedSourceType = KMusEngNoAssociatedSourceType ); + + /** + * Gets handle to a media sink of spesified type contained by + * a mediastream. If there are several sink instances, first one is + * returned. If associated source type is defined, sink in stream having + * the source is tried to be searched. If no such match, first matching + * sink is returned. Ownership is not transferred. + * + * @return Media sink of the spesified type. + * @leave KErrNotFound if there is no sink of spesified type + */ + static CMceMediaSink* GetMediaSinkL( + CMceMediaStream& aStream, + TMceSinkType aType, + TMceSourceType aAssociatedSourceType = KMusEngNoAssociatedSourceType ); + + /** + * Gets handle to a media sink of spesified type contained by + * a session. If there are several sink instances, first one is + * returned. If associated source type is defined, sink in stream having + * the source is tried to be searched. If no such match, first matching + * sink is returned. Ownership is not transferred. + * + * @return Media sink of the spesified type. NULL if none exists + */ + static CMceMediaSink* GetMediaSink( + CMceSession& aSession, + TMceSinkType aType, + TMceSourceType aAssociatedSourceType = KMusEngNoAssociatedSourceType, + TBool aStrictMatch = EFalse ); + + /** + * Gets handle to a media sink of spesified type contained by + * a session. If there are several sink instances, first one is + * returned. If associated source type is defined, sink in stream having + * the source is tried to be searched. If no such match, first matching + * sink is returned. Ownership is not transferred. + * + * @return Media sink of the spesified type. + * @leave KErrNotFound if there is no sink of spesified type + */ + static CMceMediaSink* GetMediaSinkL( + CMceSession& aSession, + TMceSinkType aType, + TMceSourceType aAssociatedSourceType = KMusEngNoAssociatedSourceType, + TBool aStrictMatch = EFalse ); + + /** + * Gets handle to a speaker sink contained by specified stream + * or its' bound stream. Ownership is not transferred. + * + * @return Speaker sink, NULL if none exists + */ + static CMceSpeakerSink* GetSpeaker( CMceMediaStream& aStream ); + + /** + * Gets handle to a camera source. Ownership is not transferred. + * + * @return Camera source + * @leave KErrNotFound if none exists + */ + static CMceCameraSource* GetCameraL( CMceSession& aSession ); + + /** + * Gets handle to a file source. Ownership is not transferred. + * + * @return File source + * @leave KErrNotFound if none exists + */ + static CMceFileSource* GetFileSourceL( CMceSession& aSession ); + + /** + * Gets handle to a display sink. Ownership is not transferred. + * + * @return Display sink, NULL if none exists + */ + static CMceDisplaySink* GetDisplay( CMceSession& aSession, + TBool aPreferViewFinder = ETrue ); + + /** + * Gets handle to a display sink. If there are several display + * sink instances view finder is preferred with default arguments. + * Ownership is not transferred. + * + * @return Display sink + * @leave KErrNotFound if there is no display + */ + static CMceDisplaySink* GetDisplayL( CMceSession& aSession, + TBool aPreferViewFinder = ETrue ); + + /** + * Gets handle to a display sink. Ownership is not transferred. + * + * @return Display sink, NULL if none exists + */ + static CMceDisplaySink* GetReceivingDisplay( CMceSession& aSession ); + + /** + * Gets handle to a receiving display sink. Ownership is not transferred. + * + * @return Display sink + * @leave KErrNotFound if there is no display + */ + static CMceDisplaySink* GetReceivingDisplayL( CMceSession& aSession ); + + /** + * Gets handle to a viewfinder display sink. Ownership is not transferred. + * + * @return Display sink + * @leave KErrNotFound if there is no display + */ + static CMceDisplaySink* GetVfDisplay( CMceSession& aSession ); + + /** + * Adds display sink to specified stream if one does not exist already. + * Display rect is set in both cases to a specified one. + * Display is disabled by default. + * + * @param aStream is a stream where display is supposed to be added + * @param aManager reference to used MCE manager + * @param aDisplayRect is desired display area + * @leave KErrArgument if offered stream is not a video stream + */ + static void AddDisplayL( CMceMediaStream& aStream, + CMceManager& aManager, + const TRect& aDisplayRect ); + + /** + * Adds speaker sink to specified stream if one does not exist already. + * Speaker is disabled by default. + * + * @param aStream is a stream where speaker is supposed to be added + * @leave KErrArgument if offered stream is not a video stream + */ + static void AddSpeakerL( CMceMediaStream& aStream ); + + /** + * Disables a specified stream, its' source and all the sinks + * + * @param aStream is a stream to be disabled + */ + static void DisableStreamL( CMceMediaStream& aStream ); + + /** + * Enables or disables display sink. If the state is already correct, + * nothing is done. + */ + static void DoEnableDisplayL( CMceDisplaySink& aDisplay, TBool aEnable ); + + }; + + +#endif // MUSENGMCEUTILS_H diff -r 33a5d2bbf6fc -r 73a1feb507fb tsrc/musenginestub/inc/musengoutsessionobserver.h --- a/tsrc/musenginestub/inc/musengoutsessionobserver.h Thu Aug 19 09:51:39 2010 +0300 +++ b/tsrc/musenginestub/inc/musengoutsessionobserver.h Tue Aug 31 15:12:07 2010 +0300 @@ -16,11 +16,14 @@ */ -#ifndef MUSHENGOUTSESSIONOBSERVER_H -#define MUSHENGOUTSESSIONOBSERVER_H +#ifndef MUSENGOUTSESSIONOBSERVER_H +#define MUSENGOUTSESSIONOBSERVER_H // INCLUDES -#include "musengsessionobserver.h" +#include + +// FORWARD DECLARATIONS +class MMusEngAsyncRetryObserver; // CLASS DECLARATION @@ -28,26 +31,29 @@ * An interface to be implemented by users of Multimedia Sharing Engine if they * wish to receive feedback from outsent INVITE. All the callback functions * represent an answer from network to sent INVITE. -* -* This observer is set using CMusEngSession::SetSessionObserver function. -* -* @lib musengine.lib -* @since S60 v3.2 */ -class MMusEngOutSessionObserver : public MMusEngSessionObserver +class MMusEngOutSessionObserver { public: + /** + * Indicates that preconditions for sending invitation cannot be met. + */ + virtual void UnableToSendInvitation() = 0; + + /** + * Indicates that no response received to invitation + */ + virtual void NoResponseReceivedToInvitation() = 0; + /** - * Indicates that MT has rejected session. ( e.g. 603 DECLINE ) - * @since S60 v3.2 + * Indicates that MT has rejected session. ( e.g. 603 DECLINE ). */ virtual void SessionRejected() = 0; /** * The following functions represent a specific reason in answer * to sent INVITE. - * @since S60 v3.2 */ virtual void SessionBadRequest() = 0; // 400 @@ -56,10 +62,35 @@ virtual void SessionRecipientNotFound() = 0; // 404 virtual void SessionProxyAuthenticationRequired() = 0; // 407 virtual void SessionRequestTimeOut() = 0; // 408 - virtual void SessionUnsupportedMediaType() = 0; // 415 + virtual void SessionUnsupportedMediaType() = 0; // 415 + virtual void SessionBusyHere() = 0; // 486 virtual void SessionRequestCancelled() = 0; // 487 - - + virtual void SessionTemporarilyNotAvailable() = 0; // 480 + + /** + * Indicates possibility to retry session. Recipient proposal is given + * but implementation can query user for new recipient address. + * Retry address should be filled to aRetryAddress on return. + * @return ETrue if retry should be made + */ + virtual TBool RetrySessionSync( const TDesC& aRecipientProposal, + TDes& aRetryAddress ) = 0; + + /** + * Indicates that retry with given address is proceeding. + */ + virtual void RetryProceeding() = 0; + + /** + * Indicates that there's multiple suitable recipient addresses. + * Client can choose what to use. + * @param aAddressArray, list of suitable recipient addresses + * @param aRecipientAddress, on return should contain recipient + * address to be used + * @return ETrue if recipient was selected, otherwise EFalse + */ + virtual TBool SelectRecipientL( CDesCArray& aAddressArray, + TDes& aRecipientAddress ) = 0; }; -#endif \ No newline at end of file +#endif diff -r 33a5d2bbf6fc -r 73a1feb507fb tsrc/musenginestub/inc/musengreceivesession.h --- a/tsrc/musenginestub/inc/musengreceivesession.h Thu Aug 19 09:51:39 2010 +0300 +++ b/tsrc/musenginestub/inc/musengreceivesession.h Tue Aug 31 15:12:07 2010 +0300 @@ -19,17 +19,23 @@ #ifndef MUSHENGREVEIVESESSION_H #define MUSHENGREVEIVESESSION_H - +// INCLUDES +#include "musengmcesession.h" +#include "musenguriparser.h" +#include "musunittesting.h" +#include "lcvideoplayer.h" +#include -#include "musengmcesession.h" +// FORWARD DECLARATIONS +class MMusEngReceiveSessionObserver; +class CMceInSession; -class MMusEngReceiveSessionObserver; - -class CMusEngReceiveSession : public CMusEngMceSession - +class CMusEngReceiveSession : + public CMusEngMceSession, + public MLcVideoPlayer { - + public: // Contructors and destructor /** @@ -40,70 +46,71 @@ * @param aSessionObserver Session specific callbacks * @return CMusEngReceiveSession* New instanse of specified class */ - IMPORT_C static CMusEngReceiveSession* NewL( - const TRect& aRect, - MMusEngReceiveSessionObserver* aSessionObserver ); + static CMusEngReceiveSession* NewL( const TRect& aRect ); /** * Destructor * * @since S60 v3.2 */ ~CMusEngReceiveSession(); - - - public: // API - - /** - * Accept or deny processed invitation - * - * @param aAccept ETrue if session is to be accepted and EFalse if - * to be rejected. - */ - IMPORT_C void AcceptInvitationL(const TBool& aAccept); - + - public: - - /** - * Sets callback interface pointer - * - * @param aSessionObserver Pointer to class which implements interface - */ - IMPORT_C void SetSessionObserver( - MMusEngReceiveSessionObserver* aSessionObserver ); - - - - protected: // internal API + public: // from MLcSession + + void EstablishLcSessionL(); + + MLcVideoPlayer* RemoteVideoPlayer(); + + const TDesC& RemoteDisplayName(); + + + public: // from MLcVideoPlayer + + TLcVideoPlayerState LcVideoPlayerState() const; + + TBool LcIsPlayingL(); + + void LcPlayL(); + + void LcPauseL(); + + MLcWindow* LcWindow(); - /** - * - * @since S60 v3.2 - */ - TBool IsRtpcInactivityTimoutSupported(); - + MLcCameraControl* LcCameraControl(); + + MLcFileControl* LcSourceFile(); + + MLcFileControl* LcDestinationFile(); + + MLcAudioControl* LcAudioControl(); + + MLcZoomControl* LcZoomControl(); + + MLcBrightnessControl* LcBrightnessControl(); - private: // CONSTRUCTORS - - CMusEngReceiveSession( MMusEngReceiveSessionObserver* aSessionObserver, - const TRect& aRect ); - - void ConstructL(); + RPointerArray< MLcValueControl >& LcExtensionControls(); + - public: // HELPERS - - //CMceInSession* InSession(); - - MMusEngReceiveSessionObserver* ReceiveSessionObserver(); + protected: // CONSTRUCTORS + + CMusEngReceiveSession( const TRect& aRect ); - // void CompleteSessionStructureL( CMceInSession& aInSession ); - - - public: // DATA - - // CMceInSession* iTemporaryInSession; // Owned - TBool iAccepInvitation; - + void ConstructL(); + + + protected: // DATA + + // identity of originator parsed form P-Asserted-Identity field + TBuf8 iIdentity; + + HBufC8* iOriginator; + + HBufC* iRemoteDisplayName; + + /** + * Dummy member variable to implement MLcVideoPlayer::LcExtensionControls + */ + RPointerArray< MLcValueControl > iValueControls; }; #endif diff -r 33a5d2bbf6fc -r 73a1feb507fb tsrc/musenginestub/inc/musengreceivesessionobserver.h --- a/tsrc/musenginestub/inc/musengreceivesessionobserver.h Thu Aug 19 09:51:39 2010 +0300 +++ b/tsrc/musenginestub/inc/musengreceivesessionobserver.h Tue Aug 31 15:12:07 2010 +0300 @@ -21,34 +21,38 @@ // INCLUDES -#include "musengsessionobserver.h" +#include // CLASS DECLARATION /** -* -* -* @lib ???.lib +* Observer interface to be implemented by clients interested about notifications +* of receiving (MT) side session specific events. */ -class MMusEngReceiveSessionObserver : public MMusEngSessionObserver +class MMusEngReceiveSessionObserver { public: /** - * - * - * @since S60 v3.2 + * There is new incoming session. + * Session is not yet handled in any way and cannot yet be accepted + * or rejected. User should not be notified at this stage. */ - virtual void IncomingSession( const TDesC& aOriginator ) = 0; - + virtual void IncomingSessionPreNotification() = 0; + + /** + * There is new incoming session ready to be accepted or rejected. + * User can be notified. + */ + virtual void IncomingSession( const TDesC& aOriginator, + const TDesC& aOriginatorIdentity ) = 0; /** * Current receiving session is buffering received RTP. - * - * @since S60 v3.2 */ virtual void StreamBuffering() = 0; + }; #endif \ No newline at end of file diff -r 33a5d2bbf6fc -r 73a1feb507fb tsrc/musenginestub/inc/musengsession.h --- a/tsrc/musenginestub/inc/musengsession.h Thu Aug 19 09:51:39 2010 +0300 +++ b/tsrc/musenginestub/inc/musengsession.h Tue Aug 31 15:12:07 2010 +0300 @@ -16,17 +16,14 @@ */ -#ifndef MUSHENGSESSION_H -#define MUSHENGSESSION_H +#ifndef MUSENGSESSION_H +#define MUSENGSESSION_H -// USER INCLUDES //SYSTEM INCLUDES #include -// FORWARD DECLARATIONS -class MMusEngSessionObserver; // CLASS DECLARATION @@ -38,162 +35,38 @@ * resources. * * @lib musengine.lib -* @since S60 v3.2 */ class CMusEngSession : public CBase { - + public: /** * Desctructor, finalize session * - * @since S60 v3.2 */ ~CMusEngSession(); - public: // API FUNCTIONS - - /** - * Returns currently assigned drawing area - * - * @since S60 v3.2 - * @return TRect This session drawing area recttangle - */ - IMPORT_C TRect Rect() const; - - /** - * Sets new drawing area - * - * @since S60 v3.2 - * @param TRect This session new drawing area rectangle - */ - IMPORT_C void SetRectL( const TRect& aRect ); - - /** - * Activates/deactivates loadspeaker - * - * @since S60 v3.2 - * @param TBool Enable or disable loudspeaker - * @param TBool Show activation dialog - */ - IMPORT_C void EnableLoudspeakerL( TBool aEnable, TBool aShowDialog ); - - /** - * Checks is loudspeaker enabled or disabled. - * - * @since S60 v3.2 - * @return TBool true if enabled - */ - IMPORT_C TBool IsLoudSpeakerEnabled() const; - - /** - * Returns current volume level - * - * @since S60 v3.2 - */ - IMPORT_C TInt VolumeL() const; - - - public: // VIRTUAL API FUNCTIONS - - /** - * Increases volume level by one. - * - * @since S60 v3.2 - */ - IMPORT_C virtual void VolumeUpL(); - - /** - * Decreases volume level by one - * - * @since S60 v3.2 - */ - IMPORT_C virtual void VolumeDownL(); - - /** - * Enables or disables display. Call to this function is considered - * as a permission or denial to draw to the display. - * - * @since S60 v3.2 - */ - IMPORT_C virtual void EnableDisplayL( TBool aEnable ) = 0; - - /** - * Mutes current audio stream meaning that any audio is not played or - * sent to network. - * - * @since S60 v3.2 - */ - IMPORT_C virtual void MuteL() = 0; - - /** - * Unmute current audio stream meaning that all the audio is played - * and if needed also sent to network. - * - * @since S60 v3.2 - */ - IMPORT_C virtual void UnmuteL() = 0; - - - protected: // INTERNAL - - virtual void RectChangedL() = 0; - protected: /** * Constructor, private cannot be instantiate * - * - * @since S60 v3.2 - * @param TRect reserved drawing area for this session + * @param aRect reserved drawing area for this session */ - CMusEngSession( const TRect& aRect ); + CMusEngSession(); protected: /** - * second-phase constructor, called by those session specific + * second-phase constructor, called by those session specific * constructors - * - * @since S60 v3.2 */ void ConstructL(); - - protected: // MEMBERS - - /** - * Callback pointer to interface, not own - * - * @since S60 v3.2 - */ - MMusEngSessionObserver* iSessionObserver; - - - public: // MEMBERS - - /** - * Drawing area rect - * - * @since S60 v3.2 - */ - TRect iRect; - - /** - * Telephone utilities - * - * @since S60 v3.2 - */ - //CMusEngTelephoneUtils* iTelephoneUtils; - - TInt iErrorCode; - - }; -#endif //MUSHENGSESSION_H \ No newline at end of file +#endif //MUSENGSESSION_H diff -r 33a5d2bbf6fc -r 73a1feb507fb tsrc/musenginestub/inc/musengsessiondurationtimer.h --- a/tsrc/musenginestub/inc/musengsessiondurationtimer.h Thu Aug 19 09:51:39 2010 +0300 +++ b/tsrc/musenginestub/inc/musengsessiondurationtimer.h Tue Aug 31 15:12:07 2010 +0300 @@ -21,71 +21,88 @@ // USER INCLUDES +#include "musunittesting.h" -// KERNEL INCLUDES +// KERNEL INCLUDES #include // FORWARD DECLERATIONS class MMusEngSessionDurationTimerObserver; -class CMusEngSessionDurationTimer +class CMusEngSessionDurationTimer : public CActive { + MUS_UNITTEST( UT_CMusEngSessionDurationTimer ) public: - /** - * + /** + * * @since S60 v3.2 */ - static CMusEngSessionDurationTimer* NewL( - MMusEngSessionDurationTimerObserver& aObserver ); + static CMusEngSessionDurationTimer* NewL( + MMusEngSessionDurationTimerObserver& aObserver ); - /** - * + /** + * * @since S60 v3.2 */ ~CMusEngSessionDurationTimer(); - public: // API - - /** - * + public: // API + + /** + * * @since S60 v3.2 */ + void Start( TInt aDelay ); - private: + private: - /** - * + /** + * * @since S60 v3.2 */ - CMusEngSessionDurationTimer( - MMusEngSessionDurationTimerObserver& aObserver ); + CMusEngSessionDurationTimer( + MMusEngSessionDurationTimerObserver& aObserver ); - /** - * + /** + * * @since S60 v3.2 */ void ConstructL(); + + private: // inherited from CActive + + /** + * + * @since S60 v3.2 + */ + void RunL(); + + /** + * + * @since S60 v3.2 + */ + void DoCancel(); - public: // DATA + private: // DATA - /** - * + /** + * * @since S60 v3.2 */ - //RTimer iTimer; + RTimer iTimer; - /** - * + /** + * * @since S60 v3.2 */ MMusEngSessionDurationTimerObserver& iObserver; - + }; #endif // _MUSENGSESSIONDURATIONTIMER_H_ diff -r 33a5d2bbf6fc -r 73a1feb507fb tsrc/musenginestub/inc/musengsessionmanager.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tsrc/musenginestub/inc/musengsessionmanager.h Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,61 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + +#ifndef CMUSENGSESSIONMANAGER_H +#define CMUSENGSESSIONMANAGER_H + +// INCLUDES +#include "lcengine.h" +#include "musmanagercommon.h" + +// FORWARD DECLARATIONS +class MLcSession; +class CMusEngMceSession; +class MLcUiProvider; + + +class CMusEngSessionManager : + public CLcEngine + { + public: + + static CMusEngSessionManager* NewL( TAny* aInitParams ); + ~CMusEngSessionManager(); + + public: // From CLcEngine + + MLcSession& Session(); + + private: // Constructors + + CMusEngSessionManager( TLcEngineParams& aInitParams ); + void ConstructL(); + + private: // New functions + + CMusEngMceSession* CreateMusSessionL( + MultimediaSharing::TMusUseCase aUseCase ); + + private: // Data + + CMusEngMceSession* iSession; + + }; + +#endif // CMUSENGSESSIONMANAGER_H + +// end of file diff -r 33a5d2bbf6fc -r 73a1feb507fb tsrc/musenginestub/inc/musengsessionobserver.h --- a/tsrc/musenginestub/inc/musengsessionobserver.h Thu Aug 19 09:51:39 2010 +0300 +++ b/tsrc/musenginestub/inc/musengsessionobserver.h Tue Aug 31 15:12:07 2010 +0300 @@ -25,7 +25,7 @@ // CLASS DECLARATION /** -* An interface to be implemented by users of Multimedia Sharing Engine if +* An interface to be implemented by users of Multimedia Sharing Engine if * they wish to receive events from session and streaming state changes. * * @lib museng.lib @@ -58,7 +58,7 @@ * * @since S60 v3.2 */ - virtual void SessionConnectionLost() = 0; + virtual void SessionConnectionLost() = 0; /** * Undefined exception has occurred. Session is useless and must be @@ -82,7 +82,7 @@ * * @since S60 v3.2 */ - virtual void StreamStreaming() = 0; + virtual void StreamStreaming() = 0; /** * Update time information of this session @@ -90,7 +90,7 @@ * @since S60 v3.2 */ virtual void SessionTimeChanged( const TTimeIntervalSeconds& aSeconds ) = 0; - + /** * RTCP inactivity timeout has occurred. * diff -r 33a5d2bbf6fc -r 73a1feb507fb tsrc/musenginestub/inc/musengtelephoneutils.h --- a/tsrc/musenginestub/inc/musengtelephoneutils.h Thu Aug 19 09:51:39 2010 +0300 +++ b/tsrc/musenginestub/inc/musengtelephoneutils.h Tue Aug 31 15:12:07 2010 +0300 @@ -20,111 +20,183 @@ #define MUSENGTELEPHONEUTILS_H -//#include "musunittesting.h" +#include "musunittesting.h" // SYSTEM #include -//#include -//#include +#include +#include +#include // FORWARD DECLARATIONS -//class CRepository; -//class CTelephonyAudioRouting; +class CRepository; +class CTelephonyAudioRouting; +class CPhCltCommandHandler; +class MMusEngAudioRoutingObserver; /** -* -* @lib musengine.lib -* @since S60 v3.2 +* Utility class to handle all phone related requests: +* Audio routing, volume control and microphone muting. */ -class CMusEngTelephoneUtils : public CBase - //public MTelephonyAudioRoutingObserver +class CMusEngTelephoneUtils : public CActive, + public MTelephonyAudioRoutingObserver { - public: + MUS_UNITTEST( UT_CMusEngTelephoneUtils ) + MUS_UNITTEST( UT_CMusEngSession ) + + public: + + /** + * + */ + static CMusEngTelephoneUtils* NewL(); - /** - * - * @since S60 v3.2 + /** + * */ - static CMusEngTelephoneUtils* NewL(); - - /** - * - * @since S60 v3.2 - */ - ~CMusEngTelephoneUtils(); + ~CMusEngTelephoneUtils(); - public: // API + public: // API + + /** + * Checks if audio routing can be changed using LoudspeakerL + * + * @return ETrue if audio routing can be changed using LoudspeakerL + */ + TBool AudioRoutingCanBeChanged(); - /** - * - * @since S60 v3.2 + /** + * Changes the audio routing between loudspeaker and handset. + * + * @param aShowDialog if ETrue, user is notified about new audio routing */ void LoudspeakerL( TBool aEnable, TBool aShowDialog ); - /** - * - * @since S60 v3.2 + /** + * + */ + TBool IsLoudSpeakerEnabled() const; + + /** + * */ - TBool IsLoudSpeakerEnabled() const; + TInt GetVolumeL() const; + /** + * + */ + void SetVolumeL( TInt aVolume ); + + /** + * Mutes CS call microphone. + */ + void MuteMicL( TBool aMute ); + /** - * - * @since S60 v3.2 + * Returns current CS call mic mute state. */ - TInt GetVolumeL() const; - + TBool IsMicMutedL(); + /** - * - * @since S60 v3.2 + * Sets audio routing observer. Can be set to NULL in order to indicate + * ending of observing changes in audio routing. */ - void SetVolumeL( TInt aVolume ); - + void SetAudioRoutingObserver( MMusEngAudioRoutingObserver* aObserver ); + + + private: // inherited from CActive - - private: + /** + * + */ + void RunL(); + + /** + * Cancels outstanding request to phone client + */ + void DoCancel(); + + + private: // MTelephonyAudioRoutingObserver functions /** - * - * @since S60 v3.2 + * Available outputs have changed + */ + void AvailableOutputsChanged( + CTelephonyAudioRouting& aTelephonyAudioRouting ); + + /** + * Some other application has changed audio output routing + */ + void OutputChanged( + CTelephonyAudioRouting& aTelephonyAudioRouting ); + + /** + * Our request to change audio output routing has completed + */ + void SetOutputComplete( + CTelephonyAudioRouting& aTelephonyAudioRouting, + TInt aError ); + + /** + * Set output if setting is currently allowed. Leaves with KErrAccessDenied + * if setting is not allowed. */ - CMusEngTelephoneUtils(); + void DoSetOutputL( CTelephonyAudioRouting::TAudioOutput aAudioOutput ); + + private: - /** - * - * @since S60 v3.2 + /** + * Default C++ constructor */ - void ConstructL(); + CMusEngTelephoneUtils(); + + /** + * 2nd phase constructor + */ + void ConstructL(); - private: // HELPER + private: // HELPER + + /** + * Checks that volume value is between 1 and 10. + * + * @return validated volume value + */ + TInt ValidateVolume( const TInt aVolume ) const; + + + private: // DATA /** - * - * @since S60 v3.2 + * Stores the audio routing state at startup. */ - TInt ValidateVolume( const TInt aVolume ) const; - - - public: // DATA - - /** - * Stores the audio routing state at startup. - */ - //CTelephonyAudioRouting::TAudioOutput iAudioOutputAtStartup; - + CTelephonyAudioRouting::TAudioOutput iAudioOutputAtStartup; + /** * Telephony audio routing instance. Owned. */ - //CTelephonyAudioRouting* iTelephonyAudioRouting; + CTelephonyAudioRouting* iTelephonyAudioRouting; /** * Central repository. Owned. - * - * @since S60 v3.2 */ - //CRepository* iRepository; + CRepository* iRepository; + /** + * Command handler for muting the microphone + */ + CPhCltCommandHandler* iPhoneCommandHandler; + + /** + * Not owned. + */ + MMusEngAudioRoutingObserver* iAudioRoutingObserver; + + TBool iShowDialog; + }; diff -r 33a5d2bbf6fc -r 73a1feb507fb tsrc/musenginestub/inc/musengtwowayrecvsession.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tsrc/musenginestub/inc/musengtwowayrecvsession.h Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,151 @@ +/* +* 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: +* +*/ + + +#ifndef MUSHENGTWOWAYRECVSESSION_H +#define MUSHENGTWOWAYRECVSESSION_H + +// USER +#include "musengreceivesession.h" +#include "musunittesting.h" +#include "mussettings.h" +#include "musengcamerahandler.h" + +// SYSTEM +#include + +// FORWARD DECLARATIONS +class MMusEngLiveSessionObserver; +class CMceDisplaySink; +class CMceStreamBundle; + +class CMusEngTwoWayRecvSession : public CMusEngReceiveSession + { + MUS_UNITTEST( UT_CMusEngTwoWayRecvSession ) + + + public: + /** + * Creates new MultimediaSharing two-way receive session. + * + * @param aRemoteRect UI drawing area for received video. + * @param aLocalRect UI drawing area for camera viewfinder. + * @param aSessionObserver Interface for session specific callbacks + * @param aReceiveSessionObserver Interface for receivesession specific callbacks + * @return CMusEngTwoWayRecvSession* New instanse of specified class + */ + IMPORT_C static CMusEngTwoWayRecvSession* NewL( + const TRect& aRemoteRect, + const TRect& aLocalRect, + MMusEngSessionObserver& aSessionObserver, + MMusEngReceiveSessionObserver& aReceiveSessionObserver ); + + + public: + + /** + * Destructor + */ + ~CMusEngTwoWayRecvSession(); + + public: + + void EnableDisplayL( TBool aEnable ); + + CMusEngMceSession::TDisplayOrientation OrientationL(); + + void SetOrientationL( TDisplayOrientation aOrientation ); + + public: + + /** + * Sets both remote (receiving video) and local (viewfinder) rects. + * + */ + IMPORT_C void SetRectsL( const TRect& aRemoteRect, + const TRect& aLocalRect ); + + /** + * Sets local rect (viewfinder). + * + */ + IMPORT_C void SetLocalRectL( const TRect& aLocalRect ); + + /** + * Gets local rect (viewfinder). + * + */ + IMPORT_C TRect LocalRect() const; + + /** + * Gets camera handler (can be used for zooming etc.) + */ + IMPORT_C TMusEngCameraHandler& Camera(); + + protected: // From CMusEngReceiveSession + + void CompleteSessionStructureL(); + + void RectChangedL(); + + + private: // from MMceStreamObserver, + // overrides the functions in ancestor classes + + + void StreamStateChanged( CMceMediaStream& aStream, + CMceMediaSink& aSink ); + + void StreamStateChanged( CMceMediaStream& aStream ); + + private: + + /** + * Constructor + */ + CMusEngTwoWayRecvSession( MMusEngSessionObserver& aSessionObserver, + MMusEngReceiveSessionObserver& aReceiveSessionObserver, + const TRect& aRemoteRect, + const TRect& aLocalRect ); + + /** + * Second-phase constructor + */ + void ConstructL(); + + private: + + void CompleteSessionStructureAudioPartL( + const RPointerArray& aStreams, + CMceStreamBundle& aLocalBundle, + CMceMediaStream* aVideoInStream, + CMceMediaStream* aVideoOutStream ); + + void CompleteSessionStructureInStreamL( CMceMediaStream& aVideoInStream, + CMceStreamBundle& aLocalBundle ); + + void CompleteSessionStructureOutStreamL( CMceMediaStream& aVideoOutStream ); + + private: + + TRect iLocalRect; + + TMusEngCameraHandler iCameraHandler; + }; + +#endif + diff -r 33a5d2bbf6fc -r 73a1feb507fb tsrc/musenginestub/inc/musengtwowaysession.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tsrc/musenginestub/inc/musengtwowaysession.h Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,172 @@ +/* +* 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: +* +*/ + + +#ifndef MUSHENGTWOWAYSESSION_H +#define MUSHENGTWOWAYSESSION_H + +// USER +#include "musenglivesession.h" +#include "musunittesting.h" +#include "mussettings.h" + +// SYSTEM +#include + +// FORWARD DECLARATIONS +class MMusEngLiveSessionObserver; +class CMceDisplaySink; +class MMusEngTwoWaySessionObserver; + +class CMusEngTwoWaySession : public CMusEngLiveSession + { + MUS_UNITTEST( UT_CMusEngOutSession ) + MUS_UNITTEST( UT_CMusEngTwoWaySession ) + + + public: + /** + * Creates new MultimediaSharing Live session. + * + * @param aRect UI drawing area. It is allowed handle from engine + * @param aSessionObserver Interface for session specific callbacks + * @param aOutSessionObserver Interface for outsession specific callbacks + * @param aLiveSessionObserver interface for live session specific + * callbacks + * @return CMusEngTwoWaySession* New instanse of specified class + */ + IMPORT_C static CMusEngTwoWaySession* NewL( + const TRect& aRemoteRect, + const TRect& aLocalRect, + MMusEngSessionObserver& aSessionObserver, + MMusEngOutSessionObserver& aOutSessionObserver, + MMusEngLiveSessionObserver& aLiveSessionObserver, + MMusEngTwoWaySessionObserver& aTwoWayObserver ); + + + public: + + /** + * Destructor + */ + ~CMusEngTwoWaySession(); + + public: + + void EnableDisplayL( TBool aEnable ); + + void SetOrientationL( TDisplayOrientation aOrientation ); + + public: + + /** + * Starts or pauses recording + */ + void RecordL( TBool aRecord ); + + /** + * Tells whether recording is paused or not + */ + TBool IsRecording(); + + /** + * Sets both remote (receiving video) and local (viewfinder) rects. + * + */ + IMPORT_C void SetRectsL( const TRect& aRemoteRect, + const TRect& aLocalRect ); + + /** + * Sets local rect (viewfinder). + * + */ + IMPORT_C void SetLocalRectL( const TRect& aLocalRect ); + + /** + * Gets local rect (viewfinder). + * + */ + IMPORT_C TRect LocalRect() const; + + protected: // inherited from CMusEngMceOutSession + + void RectChangedL(); + + /** + * @param aLocalBundle All local streams are supposed to be added to + * this bundle + */ + void CompleteSessionStructureL( CMceStreamBundle& aLocalBundle ); + + void AddDisplayL( CMceMediaStream& aStream ); + + + protected: // overrides ancestor class versions + + /** + * The state of the session has changed + * @param aSession, the session that has changed. + */ + virtual void HandleSessionStateChanged( CMceSession& aSession, + TInt aStatusCode, + const TDesC8& aReasonPhrase ); + + private: // from MMceStreamObserver, + // overrides the function in CMusEngMceSession + + void StreamStateChanged( CMceMediaStream& aStream ); + + void InactivityTimeout( CMceMediaStream& aStream, + CMceRtpSource& aSource ); + + private: + + /** + * Constructor + */ + CMusEngTwoWaySession( MMusEngSessionObserver& aSessionObserver, + MMusEngOutSessionObserver& aOutSessionObserver, + MMusEngLiveSessionObserver& aLiveSessionObserver, + MMusEngTwoWaySessionObserver& aTwoWayObserver, + const TRect& aRemoteRect, + const TRect& aLocalRect ); + + /** + * Second-phase constructor + */ + void ConstructL(); + + private: + + void ReceivingStarted(); + + void ReceivingStopped(); + + private: + + MMusEngTwoWaySessionObserver& iTwoWayObserver; + + TRect iLocalRect; + + TBool iReceiving; + + TBool iBuffered; + + }; + +#endif + diff -r 33a5d2bbf6fc -r 73a1feb507fb tsrc/musenginestub/inc/musengtwowaysessionobserver.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tsrc/musenginestub/inc/musengtwowaysessionobserver.h Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,43 @@ +/* +* Copyright (c) 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: +* +*/ + + +#ifndef MUSHENGTWOWAYSESSIONOBSERVER_H +#define MUSHENGTWOWAYSESSIONOBSERVER_H + + + +// CLASS DECLARATION + +/** +* An interface to be implemented by clients of Multimedia Sharing Engine if +* they wish to receive two-way sharing specific events. +*/ +class MMusEngTwoWaySessionObserver + { + + public: + + /** + * Indicates that video receiving state has changed + * @param aReceivingVideo, ETrue if receiving, EFalse if not receiving + */ + virtual void ReceivingStateChanged( TBool aReceivingVideo ) = 0; + + }; + +#endif \ No newline at end of file diff -r 33a5d2bbf6fc -r 73a1feb507fb tsrc/musenginestub/inc/musenguriparser.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tsrc/musenginestub/inc/musenguriparser.h Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,101 @@ +/* +* Copyright (c) 2005 - 2006 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: Parser for recipient's address +* +*/ + + +#ifndef MUSENGURIPARSER_H +#define MUSENGURIPARSER_H + +// INCLUDES + +#include "musunittesting.h" +#include + +const TInt KMaxUriLength = 512; +_LIT8( KMusEngAtSign, "@" ); +_LIT8( KMusEngPlusSign, "+" ); +_LIT8( KMusEngSipPrefix, "sip:" ); +_LIT8( KMusEngTelPrefix, "tel:" ); + +// CLASS DECLARATION + +/** +* +*/ +class TMusEngUriParser + { + MUS_UNITTEST( UT_TMusEngUriParser ) + + public: + + enum TMusEngUriType + { + ENotParsed = 0, + ESip, + ETel + }; + + public: + + /** + * Default constructor + */ + IMPORT_C TMusEngUriParser( const TDesC16& aUri ); + + /** + * @returns Uri type + */ + IMPORT_C TMusEngUriType UriType(); + + /** + * @returns Parsed and validated 8-bit version of contained URI + * Ownership is transferred + * @pre UriType() != ENotParsed + * @leave KErrNotReady if precondition is not fulfilled + */ + IMPORT_C HBufC8* GetUri8L(); + + /** + * @param aPrefix if ETrue, also sip: or tel:prefix is returned + * @returns Parsed and validated 16-bit version of contained URI + * Ownership is transferred + * @pre UriType() != ENotParsed + * @leave KErrNotReady if precondition is not fulfilled + */ + IMPORT_C HBufC16* GetUri16L( TBool aPrefix ); + + /** + * Parses and validates contained URI + * @leave KErrCorrupt if URI is not valid SIP or TEL URI + * @post UriType() != ENotParsed + */ + IMPORT_C void ParseUriL(); + + + private: + + void HandleSipUriL(); + void HandleTelUriL(); + void HandleLocalTelUriL(); + + + TBuf8 iUri; + + TMusEngUriType iUriType; + + }; + +#endif diff -r 33a5d2bbf6fc -r 73a1feb507fb tsrc/musenginestub/inc/mussipprofilehandler.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tsrc/musenginestub/inc/mussipprofilehandler.h Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,215 @@ +/* +* Copyright (c) 2005-2006 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: +* Version : %version: 1 % << Don't touch! Updated by Synergy at check-out. +* +*/ + + + +#ifndef MUSSIPPROFILEHANDLER_H +#define MUSSIPPROFILEHANDLER_H + + +// INTERNAL INCLUDE +#include "musunittesting.h" + +// SYSTEM INCLUDE +#include +#include +#include +#include +#include + + +class CSIPProfile; +class CSIPProfileRegistry; +class CSipProfileAlrController; +class CUri8; +class MMusSipProfileUser; + +/** +* +* @lib musengine.lib +*/ +class CMusSipProfileHandler : public CBase, + public MSIPProfileRegistryObserver, + public MSIPObserver, + public MSIPConnectionObserver, + public MSipProfileAlrObserver + { + MUS_UNITTEST( UT_CMusEngSipProfileHandler ) + + public: + + /** + * Creates new instance of CMusSipProfileHandler + * @param aSipProfileId profile id of requested profile + */ + static CMusSipProfileHandler* NewL( MMusSipProfileUser& aUser ); + + /** + * Destructor + * + */ + ~CMusSipProfileHandler(); + + + public: // API + + /** + * Creates the SIP profile used. + * @param aSipProfileId profile ID of requested SIP profile + */ + void CreateProfileL( TUint32 aSipProfileId ); + + /** + * Returns the used SIP profile. + * @pre SipProfileL has been called + * @return SIP profile or NULL if the SIP profile cannot be found, + * The ownership is not transferred. + */ + CSIPProfile* Profile(); + + /** + * Returns the registered public user identity of the used SIP profile + * @pre SipProfileL has been called + * @return a pointer to the URI, the ownership is transferred + */ + CUri8* UserFromProfileLC(); + + /** + * Refreshes the availabilities of the access points + * for the used SIP profile. + * Should be called when a MuS session terminates. + */ + void RefreshIapAvailabilities(); + + /** + * @return ETrue if SIP profile returned by Profile() is registered + */ + TBool IsRegistered(); + + + private: + + /** + * Constructor + */ + CMusSipProfileHandler( MMusSipProfileUser& aUser ); + + /** + * Second-phase constructor + */ + void ConstructL(); + + private: // From MSIPProfileRegistryObserver + + /** + * An event related to SIP Profile has accorred + * + * @param aProfileId a profile Id + * @param aEvent an occurred event + **/ + void ProfileRegistryEventOccurred( + TUint32 aProfileId, + MSIPProfileRegistryObserver::TEvent aEvent ); + + /** + * An asynchronous error has occurred related to SIP profile + * Event is send to those observers, who have the + * corresponding profile instantiated. + * + * @param aProfileId the id of failed profile + * @param aError an occurred error + */ + void ProfileRegistryErrorOccurred( + TUint32 aProfileId, + TInt aError ); + + private: // From MSIPObserver + + void IncomingRequest( TUint32 aIapId, + CSIPServerTransaction* aTransaction ); + + void TimedOut( CSIPServerTransaction& aTransaction ); + + private: // MSIPConnectionObserver must be implemented to enable SIP profile + + void IncomingRequest (CSIPServerTransaction* aTransaction ); + + void IncomingRequest (CSIPServerTransaction* aTransaction, + CSIPDialog& aDialog ); + + void IncomingResponse (CSIPClientTransaction& aTransaction ); + + void IncomingResponse ( CSIPClientTransaction& aTransaction, + CSIPDialogAssocBase& aDialogAssoc ); + + void IncomingResponse ( CSIPClientTransaction& aTransaction, + CSIPInviteDialogAssoc* aDialogAssoc ); + + void IncomingResponse( CSIPClientTransaction& aTransaction, + CSIPRegistrationBinding& aRegistration ); + + void ErrorOccured( TInt aError, CSIPTransactionBase& aTransaction ); + + void ErrorOccured( TInt aError, + CSIPClientTransaction& aTransaction, + CSIPRegistrationBinding& aRegistration ); + + void ErrorOccured( TInt aError, + CSIPTransactionBase& aTransaction, + CSIPDialogAssocBase& aDialogAssoc ); + + void ErrorOccured( TInt aError, CSIPRefresh& aSIPRefresh ); + + void ErrorOccured( TInt aError, + CSIPRegistrationBinding& aRegistration ); + + void ErrorOccured( TInt aError, CSIPDialogAssocBase& aDialogAssoc ); + + void InviteCompleted( CSIPClientTransaction& aTransaction ); + + void InviteCanceled( CSIPServerTransaction& aTransaction ); + + void ConnectionStateChanged( CSIPConnection::TState aState ); + + private: // From MSipProfileAlrObserver + + void AlrEvent( MSipProfileAlrObserver::TEvent aEvent, + TUint32 aProfileId, + TUint32 aSnapId, + TUint32 aIapId ); + + void AlrError( TInt aError, + TUint32 aProfileId, + TUint32 aSnapId, + TUint32 aIapId ); + + private: // New functions + + TUint32 ProfileId() const; + + private: // DATA + + MMusSipProfileUser& iUser; + CSIP* iSip; + CSIPProfileRegistry* iProfileRegistry; + CSipProfileAlrController* iProfileAlrController; + CSIPProfile* iSipProfile; + }; + + +#endif // MUSSIPPROFILEHANDLER_H diff -r 33a5d2bbf6fc -r 73a1feb507fb tsrc/musenginestub/inc/mussipprofileuser.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tsrc/musenginestub/inc/mussipprofileuser.h Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,48 @@ +/* +* 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: +* +*/ + + +#ifndef MUSSIPPROFILEUSER_H +#define MUSSIPPROFILEUSER_H + +// SYSTEM INCLUDE +#include + +/** +* Callbacks for asking permission to roam between access points +* and notifying client about registering event +* @lib musengine.lib +*/ +class MMusSipProfileUser + { + public: + + /** + * Checks whether roaming between access points is allowed. + * @return ETrue is roaming is allowed, otherwise EFalse. + */ + virtual TBool IsRoamingBetweenAPsAllowed() = 0; + + /** + * Indicates that SIP profile has been registered. + */ + virtual void ProfileRegistered() = 0; + + }; + + +#endif // MUSSIPPROFILEUSER_H diff -r 33a5d2bbf6fc -r 73a1feb507fb tsrc/musenginestub/src/musengcamerahandler.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tsrc/musenginestub/src/musengcamerahandler.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,703 @@ +/* +* 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: +* +*/ + + +// USER +#include "musengcamerahandler.h" +#include "musunittesting.h" +#include "musengmceutils.h" +#include "musenglogger.h" + +// SYSTEM +#include +#include +#include +#include +#include +#include +#include + +const TInt KMaxBrightness = 100; +const TInt KMinBrightness = -100; +const TInt KBrightnessStepSize = 10; + + +//Number of big and small zoom steps on Zoom scale +const TInt KZoomBigStepCount = 15; +const TInt KZoomSmallStepCount = KZoomBigStepCount*2; +const TInt KZoomStepMinSize = 1; + +const TInt64 KZoomFasterTime = 333333; // 1/3 second +const TInt KOneCameraOnly = 1; + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +TMusEngCameraHandler::TMusEngCameraHandler() : + iSession( NULL ), + iDefaultZoomFactor( -1 ), + iDefaultBrightness( 0 ), + iZoomInTime(0), + iZoomOutTime(0), + iSmallZoomStep( KZoomStepMinSize ), + iBigZoomStep( KZoomStepMinSize ), + iCameraUsage( MusSettingsKeys::EUseCameraSwapping ) + { + + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void TMusEngCameraHandler::SetSession( CMceSession* aSession ) + { + iSession = aSession; + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void TMusEngCameraHandler::InitializeL( CMceCameraSource& aCamera ) + { + aCamera.GetCameraInfo( iCameraInfo ); + iDefaultZoomFactor = aCamera.ZoomFactorL(); + + InitializeZoomStepSize(); + + iCurrentCamera = EBackCamera; + if ( iCameraUsage == MusSettingsKeys::EUseOnlySecondaryCamera ) + { + iCurrentCamera = EFrontCamera; + } + aCamera.SetCameraIndexL( (TInt)iCurrentCamera ); + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +EXPORT_C void TMusEngCameraHandler::PlayL() + { + MUS_LOG( "mus: [ENGINE] -> TMusEngCameraHandler::PlayL()" ) + + __ASSERT_ALWAYS( iSession, User::Leave( KErrNotReady ) ); + + CMceCameraSource* camera = MusEngMceUtils::GetCameraL( *iSession ); + + if ( !camera->IsEnabled() ) + { + camera->EnableL(); + } + else + { + MUS_LOG( "mus: [ENGINE] Camera already enabled, ignore request" ) + } + + MUS_LOG( "mus: [ENGINE] <- TMusEngCameraHandler::PlayL()" ) + } + + +// ----------------------------------------------------------------------------- +// Disable camera if not already disabled +// ----------------------------------------------------------------------------- +// +EXPORT_C void TMusEngCameraHandler::PauseL() + { + MUS_LOG( "mus: [ENGINE] -> TMusEngCameraHandler::PauseL()" ) + + __ASSERT_ALWAYS( iSession, User::Leave( KErrNotReady ) ); + + CMceCameraSource* camera = MusEngMceUtils::GetCameraL( *iSession ); + + if ( camera->IsEnabled() ) + { + camera->DisableL(); + } + else + { + MUS_LOG( "mus: [ENGINE] Camera already disabled, ignore request" ) + } + + MUS_LOG( "mus: [ENGINE] <- TMusEngCameraHandler::PauseL()" ) + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +EXPORT_C TBool TMusEngCameraHandler::IsPlayingL() + { + __ASSERT_ALWAYS( iSession, User::Leave( KErrNotReady ) ); + + return ( MusEngMceUtils::GetCameraL( *iSession )->IsEnabled() ); + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +EXPORT_C TInt TMusEngCameraHandler::CamerasAvailableL( + TCurrentCamera& aCurrentCamera ) + { + MUS_LOG( "mus: [ENGINE] -> TMusEngCameraHandler::CamerasAvailableL()" ) + __ASSERT_ALWAYS( iSession != NULL, User::Leave( KErrNotReady ) ); + + CMceCameraSource* camera = MusEngMceUtils::GetCameraL( *iSession ); + __ASSERT_ALWAYS( camera != NULL, User::Leave( KErrNotReady ) ); + aCurrentCamera = iCurrentCamera; + TInt camerasAvailable = camera->CamerasAvailable(); + + if ( camerasAvailable > KOneCameraOnly && + iCameraUsage != MusSettingsKeys::EUseCameraSwapping ) + { + camerasAvailable = KOneCameraOnly; + } + + MUS_LOG( "mus: [ENGINE] <- TMusEngCameraHandler::CamerasAvailable()" ) + return camerasAvailable; + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +EXPORT_C void TMusEngCameraHandler::ChangeCameraL( TCurrentCamera aCurrentCamera ) + { + MUS_LOG( "mus: [ENGINE] -> TMusEngCameraHandler::ChangeCameraL()" ) + __ASSERT_ALWAYS( iSession != NULL, User::Leave( KErrNotReady ) ); + + CMceCameraSource* camera = MusEngMceUtils::GetCameraL( *iSession ); + CMceDisplaySink* display = MusEngMceUtils::GetDisplayL( *iSession ); + + if ( camera->CamerasAvailable() ) + { + if ( TMusEngCameraHandler::EFrontCamera == aCurrentCamera && + TMusEngCameraHandler::EFrontCamera != iCurrentCamera ) + { + MUS_LOG( "mus: [ENGINE] Set Front camera" ) + iCurrentCamera = TMusEngCameraHandler::EFrontCamera; + ChangeActiveCameraL( iCurrentCamera ); + } + else if ( TMusEngCameraHandler::EBackCamera == aCurrentCamera && + TMusEngCameraHandler::EBackCamera != iCurrentCamera ) + { + MUS_LOG( "mus: [ENGINE] Set Back camera " ) + iCurrentCamera = TMusEngCameraHandler::EBackCamera; + ChangeActiveCameraL( iCurrentCamera );; + } + else if ( TMusEngCameraHandler::ENextCamera == aCurrentCamera ) + { + if ( iCurrentCamera == TMusEngCameraHandler::EBackCamera ) + { + iCurrentCamera = TMusEngCameraHandler::EFrontCamera; + } + else + { + iCurrentCamera = TMusEngCameraHandler::EBackCamera; + } + ChangeActiveCameraL( iCurrentCamera ); + } + } + MUS_LOG( "mus: [ENGINE] <- TMusEngCameraHandler::ChangeCameraL()" ) + } +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +EXPORT_C TInt TMusEngCameraHandler::CurrentZoomL() const + { + MUS_LOG( "mus: [ENGINE] -> TMusEngCameraHandler::CurrentZoomL()" ) + __ASSERT_ALWAYS( iSession, User::Leave( KErrNotReady ) ); + + CMceCameraSource* camera = MusEngMceUtils::GetCameraL( *iSession ); + + TInt currentZoom = camera->ZoomFactorL() + camera->DigitalZoomFactorL(); + + MUS_LOG1( "mus: [ENGINE] <- TMusEngCameraHandler::CurrentZoomL( %d )", + currentZoom ) + + return currentZoom; + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +EXPORT_C void TMusEngCameraHandler::SetZoomL( TInt aNewZoomFactor ) + { + MUS_LOG1( "mus: [ENGINE] -> TMusEngCameraHandler::SetZoomL( %d )", + aNewZoomFactor ) + + __ASSERT_ALWAYS( iSession, User::Leave( KErrNotReady ) ); + __ASSERT_ALWAYS( aNewZoomFactor <= MaxZoomL() && + aNewZoomFactor >= MinZoomL(), + User::Leave( KErrArgument ) ); + + CMceCameraSource* camera = MusEngMceUtils::GetCameraL( *iSession ); + + if ( aNewZoomFactor <= iCameraInfo.iMaxZoom ) + { + MUS_LOG( "mus: [ENGINE] Optical zoom factor increased" ) + camera->SetZoomFactorL( aNewZoomFactor ); + } + + if ( aNewZoomFactor - iCameraInfo.iMaxZoom > 0 ) + { + camera->SetDigitalZoomFactorL( aNewZoomFactor - iCameraInfo.iMaxZoom ); + MUS_LOG1( "mus: [ENGINE] Digital zoom factor increased to %d", + aNewZoomFactor - iCameraInfo.iMaxZoom ) + } + + MUS_LOG( "mus: [ENGINE] <- TMusEngCameraHandler::SetZoomL()" ) + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +EXPORT_C TInt TMusEngCameraHandler::MinZoomL() const + { + MUS_LOG( "mus: [ENGINE] -> TMusEngCameraHandler::MinZoomL()" ) + __ASSERT_ALWAYS( iSession, User::Leave( KErrNotReady ) ); + + // Although we do not need camera for return value, we have to have it in + // order to have proper iCameraInfo + MusEngMceUtils::GetCameraL( *iSession ); + + MUS_LOG1( "mus: [ENGINE] <- TMusEngCameraHandler::MinZoomL( %d )", + iCameraInfo.iMinZoom ) + + return iCameraInfo.iMinZoom; + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +EXPORT_C TInt TMusEngCameraHandler::MaxZoomL() const + { + MUS_LOG( "mus: [ENGINE] -> TMusEngCameraHandler::MaxZoomL()" ) + __ASSERT_ALWAYS( iSession, User::Leave( KErrNotReady ) ); + + // Although we do not need camera for return value, we have to have it in + // order to have proper iCameraInfo + MusEngMceUtils::GetCameraL( *iSession ); + + TInt maxZoom = iCameraInfo.iMaxZoom + iCameraInfo.iMaxDigitalZoom; + + MUS_LOG1( "mus: [ENGINE] Max optical zoom( %d )", + iCameraInfo.iMaxZoom ) + MUS_LOG1( "mus: [ENGINE] Max digital zoom( %d )", + iCameraInfo.iMaxDigitalZoom ) + MUS_LOG1( "mus: [ENGINE] <- TMusEngCameraHandler::MaxZoomL( %d )", + maxZoom ) + + return maxZoom; + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +EXPORT_C void TMusEngCameraHandler::ZoomInL() + { + MUS_LOG( "mus: [ENGINE] -> TMusEngCameraHandler::ZoomInL()" ) + __ASSERT_ALWAYS( iSession, User::Leave( KErrNotReady ) ); + + CMceCameraSource* camera = MusEngMceUtils::GetCameraL( *iSession ); + + // First try to increase optical zoom factor. If in maximum value, try to + // increase digital zoom factor. + TInt stepSize = ZoomStepSize( iZoomInTime ); + TInt zoomFactor = camera->ZoomFactorL(); + TInt zoomDigitalFactor = camera->DigitalZoomFactorL(); + + //increate optical zoom factor + if ( zoomFactor + stepSize <= iCameraInfo.iMaxZoom ) + { + //optical zoom factor is enough + camera->SetZoomFactorL( zoomFactor + stepSize ); + stepSize = 0; + } + else if (zoomFactor < iCameraInfo.iMaxZoom) + { + stepSize -= iCameraInfo.iMaxZoom - zoomFactor; + camera->SetZoomFactorL( iCameraInfo.iMaxZoom ); + } + + //increate digital zoom factor + if (stepSize > 0) + { + if ( zoomDigitalFactor + stepSize <= iCameraInfo.iMaxDigitalZoom ) + { + camera->SetDigitalZoomFactorL( zoomDigitalFactor + stepSize ); + } + else + { + camera->SetDigitalZoomFactorL( iCameraInfo.iMaxDigitalZoom ); + MUS_LOG( "mus: [ENGINE] TMusEngCameraHandler::ZoomInL(): Optical \ + and digital zoom factors are in maximum value" ) + } + } + + MUS_LOG( "mus: [ENGINE] <- TMusEngCameraHandler::ZoomInL()" ) + + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +EXPORT_C void TMusEngCameraHandler::ZoomOutL() + { + MUS_LOG( "mus: [ENGINE] -> TMusEngCameraHandler::ZoomOutL()" ) + __ASSERT_ALWAYS( iSession, User::Leave( KErrNotReady ) ); + + CMceCameraSource* camera = MusEngMceUtils::GetCameraL( *iSession ); + + // First try to decrease digital zoom factor. If already zero, try to + // decrease optical zoom factor. + TInt stepSize = ZoomStepSize( iZoomOutTime ); + TInt zoomFactor = camera->ZoomFactorL(); + TInt zoomDigitalFactor = camera->DigitalZoomFactorL(); + + //decreate digital zoom factor firstly + if ( zoomDigitalFactor - stepSize >= 0 ) + { + //digital zoom factor is enough + camera->SetDigitalZoomFactorL( zoomDigitalFactor - stepSize ); + stepSize = 0; + } + else if ( zoomDigitalFactor > 0 ) + { + stepSize -= zoomDigitalFactor; + camera->SetDigitalZoomFactorL( 0 ); + MUS_LOG("mus: [ENGINE] Digigal Factor to zero") + } + + //decreate optical zoom factor firstly + if ( stepSize > 0 ) + { + if ( zoomFactor - stepSize > iCameraInfo.iMinZoom ) + { + camera->SetZoomFactorL( zoomFactor - stepSize ); + } + else + { + MUS_LOG( "mus: [ENGINE] TMusEngCameraHandler::ZoomOutL(): Optical and \ + digital zoom factors are in minimum value" ) + camera->SetZoomFactorL( iCameraInfo.iMinZoom ); + } + } + + MUS_LOG( "mus: [ENGINE] <- TMusEngCameraHandler::ZoomOutL()" ) + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +EXPORT_C void TMusEngCameraHandler::ZoomDefaultL() + { + MUS_LOG( "mus: [ENGINE] -> TMusEngCameraHandler::ZoomDefaultL()" ) + + __ASSERT_ALWAYS( iSession, User::Leave( KErrNotReady ) ); + + CMceCameraSource* camera = MusEngMceUtils::GetCameraL( *iSession ); + + camera->SetZoomFactorL( iDefaultZoomFactor ); + camera->SetDigitalZoomFactorL( 0 ); + + MUS_LOG( "mus: [ENGINE] <- TMusEngCameraHandler::ZoomDefaultL()" ) + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +EXPORT_C void TMusEngCameraHandler::SetBrightnessL( TInt aBrightness ) const + { + MUS_LOG1( "mus: [ENGINE] -> TMusEngCameraHandler::SetBrightnessL( %d )", + aBrightness ) + + __ASSERT_ALWAYS( iSession, User::Leave( KErrNotReady ) ); + + CMceCameraSource* camera = MusEngMceUtils::GetCameraL( *iSession ); + camera->SetBrightnessL( aBrightness ); + + MUS_LOG( "mus: [ENGINE] <- TMusEngCameraHandler::SetBrightnessL()" ) + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +EXPORT_C TInt TMusEngCameraHandler::CurrentBrightnessL() const + { + MUS_LOG( "mus: [ENGINE] -> TMusEngCameraHandler::CurrentBrightnessL()" ) + + __ASSERT_ALWAYS( iSession, User::Leave( KErrNotReady ) ); + + CMceCameraSource* camera = MusEngMceUtils::GetCameraL( *iSession ); + TInt currentBrightness = camera->BrightnessL(); + + MUS_LOG1( "mus: [ENGINE] <- TMusEngCameraHandler::CurrentBrightnessL(): %d", + currentBrightness ) + + return currentBrightness; + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +EXPORT_C TInt TMusEngCameraHandler::MaxBrightnessL() const + { + MUS_LOG( "mus: [ENGINE] -> TMusEngCameraHandler::MaxBrightnessL()" ) + + // maximum brightness is not in camera info, but a constant 100 + + MUS_LOG1( "mus: [ENGINE] <- TMusEngCameraHandler::MaxBrightnessL(): %d", + KMaxBrightness ) + + return KMaxBrightness; + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +EXPORT_C TInt TMusEngCameraHandler::MinBrightnessL() const + { + MUS_LOG( "mus: [ENGINE] -> TMusEngCameraHandler::MinBrightnessL()" ) + + // maximum brightness is not in camera info, but a constant -100 + + MUS_LOG1( "mus: [ENGINE] <- TMusEngCameraHandler::MinBrightnessL(): %d", + KMinBrightness ) + + return KMinBrightness; + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +EXPORT_C void TMusEngCameraHandler::IncreaseBrightnessL() + { + MUS_LOG( "mus: [ENGINE] -> TMusEngCameraHandler::IncreaseBrightnessL()" ) + __ASSERT_ALWAYS( iSession, User::Leave( KErrNotReady ) ); + + CMceCameraSource* camera = MusEngMceUtils::GetCameraL( *iSession ); + + TInt newBrightness = camera->BrightnessL() + KBrightnessStepSize; + + if ( newBrightness < KMaxBrightness ) + { + camera->SetBrightnessL( newBrightness ); + } + else + { + camera->SetBrightnessL( KMaxBrightness ); + } + + MUS_LOG( "mus: [ENGINE] <- TMusEngCameraHandler::IncreaseBrightnessL()" ) + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +EXPORT_C void TMusEngCameraHandler::DecreaseBrightnessL() + { + MUS_LOG( "mus: [ENGINE] -> TMusEngCameraHandler::DecreaseBrightnessL()" ) + __ASSERT_ALWAYS( iSession, User::Leave( KErrNotReady ) ); + + CMceCameraSource* camera = MusEngMceUtils::GetCameraL( *iSession ); + + TInt newBrightness = camera->BrightnessL() - KBrightnessStepSize; + + if ( newBrightness > KMinBrightness ) + { + camera->SetBrightnessL( newBrightness ); + } + else + { + camera->SetBrightnessL( KMinBrightness ); + } + + MUS_LOG( "mus: [ENGINE] <- TMusEngCameraHandler::DecreaseBrightnessL()" ) + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +EXPORT_C void TMusEngCameraHandler::BrightnessDefaultL() + { + MUS_LOG( "mus: [ENGINE] -> TMusEngCameraHandler::BrightnessDefaultL()" ) + __ASSERT_ALWAYS( iSession, User::Leave( KErrNotReady ) ); + + CMceCameraSource* camera = MusEngMceUtils::GetCameraL( *iSession ); + + camera->SetBrightnessL( iDefaultBrightness ); + + MUS_LOG( "mus: [ENGINE] <- TMusEngCameraHandler::BrightnessDefaultL()" ) + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +EXPORT_C void TMusEngCameraHandler::BrightnessAutoL() + { + MUS_LOG( "mus: [ENGINE] -> TMusEngCameraHandler::BrightnessAutoL()" ) + __ASSERT_ALWAYS( iSession, User::Leave( KErrNotReady ) ); + + CMceCameraSource* camera = MusEngMceUtils::GetCameraL( *iSession ); + + camera->SetBrightnessL( CCamera::EBrightnessAuto ); + + MUS_LOG( "mus: [ENGINE] <- TMusEngCameraHandler::BrightnessAutoL()" ) + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void TMusEngCameraHandler::InitializeZoomStepSize() + { + MUS_LOG( "mus: [ENGINE] -> TMusEngCameraHandler::InitializeZoomStepSize()" ) + MUS_LOG2( "iMaxZoom = %d, iMinZoom = %d", iCameraInfo.iMaxZoom, iCameraInfo.iMinZoom); + MUS_LOG2( "iMaxDigitalZoom = %d, iMaxDigitalZoomFactor = %d", + iCameraInfo.iMaxDigitalZoom, iCameraInfo.iMaxDigitalZoomFactor); + + iBigZoomStep = ( iCameraInfo.iMaxZoom + iCameraInfo.iMaxDigitalZoom - + iCameraInfo.iMinZoom ) / KZoomBigStepCount; + + if ( iBigZoomStep < KZoomStepMinSize ) + iBigZoomStep = KZoomStepMinSize; + + iSmallZoomStep = ( iCameraInfo.iMaxZoom + iCameraInfo.iMaxDigitalZoom - + iCameraInfo.iMinZoom ) / KZoomSmallStepCount; + + if ( iSmallZoomStep < KZoomStepMinSize ) + iSmallZoomStep = KZoomStepMinSize; + + MUS_LOG2( "mus: [ENGINE] iSmallZoomStep = %d, iBigZoomStep = %d", + iSmallZoomStep, iBigZoomStep ) + MUS_LOG( "mus: [ENGINE] <- TMusEngCameraHandler::InitializeZoomStepSize()" ) + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void TMusEngCameraHandler::ReadCameraUsageKeyL() + { + MUS_LOG( "mus: [ENGINE] -> TMusEngCameraHandler::ReadCameraUsageKeyL()" ) + + // We try to read camera usage. If we do not succeed, we use default + iCameraUsage = MusSettingsKeys::EUseCameraSwapping; + TRAPD( error, + iCameraUsage = MultimediaSharingSettings::CameraUsageL() ) + __ASSERT_ALWAYS( error == KErrNone || error == KErrNotFound, + User::Leave( error ) ); + + MUS_LOG( "mus: [ENGINE] <- TMusEngCameraHandler::ReadCameraUsageKeyL()" ) + + } + +// ----------------------------------------------------------------------------- +// Calculate the zoom step based time escaped +// ----------------------------------------------------------------------------- +TInt TMusEngCameraHandler::ZoomStepSize( TInt64& aTime ) + { + TTime now; + now.HomeTime(); + TInt64 timeNow = now.Int64(); + TInt stepSize = ( ( timeNow - aTime ) <= KZoomFasterTime ) ? iBigZoomStep : iSmallZoomStep; + + aTime = now.Int64(); + + MUS_LOG1( "mus: [ENGINE] stepSize = %d", stepSize ); + + return stepSize; + } + +// ----------------------------------------------------------------------------- +// Disable camera before it changes it. It enables camera after change. +// ----------------------------------------------------------------------------- +void TMusEngCameraHandler::ChangeActiveCameraL( TCurrentCamera aNewCamera ) + { + MUS_LOG( "mus: [ENGINE] -> ChangeActiveCamera()" ) + + CMceCameraSource* camera = MusEngMceUtils::GetCameraL( *iSession ); + CMceDisplaySink* display = MusEngMceUtils::GetDisplayL( *iSession ); + MUS_LOG( "mus: [ENGINE] Camera enabled ?" ) + if ( camera->IsEnabled() ) + { + MUS_LOG( "mus: [ENGINE] Is view finder enabled? " ) + if ( display->IsEnabled() ) + { + MUS_LOG( "mus: [ENGINE] Disable view finder" ) + display->DisableL(); + } + MUS_LOG( "mus: [ENGINE] Disable camera" ) + camera->DisableL(); + camera->SetCameraIndexL( aNewCamera ); + camera->EnableL(); + display->EnableL(); + } + else + { + if ( display->IsEnabled() ) + { + MUS_LOG( "mus: [ENGINE] Disable view finder" ) + display->DisableL(); + } + MUS_LOG( "mus: [ENGINE] set camera index" ) + camera->SetCameraIndexL( aNewCamera ); + MUS_LOG( "mus: [ENGINE] Enable camera" ) + display->EnableL(); + } + + MUS_LOG( "mus: [ENGINE] -> fetching new iCameraInfo..." ) + camera->GetCameraInfo( iCameraInfo ); + iDefaultZoomFactor = camera->ZoomFactorL(); + InitializeZoomStepSize(); + } + diff -r 33a5d2bbf6fc -r 73a1feb507fb tsrc/musenginestub/src/musengclipsession.cpp --- a/tsrc/musenginestub/src/musengclipsession.cpp Thu Aug 19 09:51:39 2010 +0300 +++ b/tsrc/musenginestub/src/musengclipsession.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -18,45 +18,18 @@ // USER #include "musengclipsession.h" -#include "musengclipsessionobserver.h" -#include "musengsessionobserver.h" -#include "musengmceoutsession.h" -#include "musenglivesession.h" - - -// SYSTEM -/*#include -#include -#include -#include -#include -#include -#include -#include -#include -*/ - -// CONSTANTS - -const TInt KMicroSecondsInOneSecond = 1000000; // ----------------------------------------------------------------------------- // // ----------------------------------------------------------------------------- // -EXPORT_C CMusEngClipSession* CMusEngClipSession::NewL( - const TDesC& aFileName, - const TRect& aRect, - MMusEngClipSessionObserver* aSessionObserver, - TUint aSipProfileId ) +CMusEngClipSession* CMusEngClipSession::NewL( + const TRect& aRect ) { - CMusEngClipSession* self = new( ELeave ) CMusEngClipSession( - aSessionObserver, - aRect, - aSipProfileId ); + CMusEngClipSession* self = new( ELeave ) CMusEngClipSession( aRect ); CleanupStack::PushL( self ); - self->ConstructL( aFileName ); + self->ConstructL(); CleanupStack::Pop( self ); return self; } @@ -70,60 +43,12 @@ { } - // ----------------------------------------------------------------------------- // // ----------------------------------------------------------------------------- // -EXPORT_C void CMusEngClipSession::ChangeClipL( const TDesC& aFileName ) - { - } - - -// ----------------------------------------------------------------------------- -// TODO: At the moment behavior of MCE is not known and all the FFWD commands -// are only forwarded to MCE. -// ----------------------------------------------------------------------------- -// -EXPORT_C void CMusEngClipSession::FastForwardL( TBool aUseFFWD ) - { - } - - -// ----------------------------------------------------------------------------- -// TODO: At the moment behavior of MCE is not known and all the FRWD commands -// are only forwarded to MCE. -// ----------------------------------------------------------------------------- -// -EXPORT_C void CMusEngClipSession::FastRewindL( TBool aUseFRWD ) - { - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -EXPORT_C TTimeIntervalSeconds CMusEngClipSession::PositionL() - { - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -EXPORT_C TTimeIntervalSeconds CMusEngClipSession::DurationL() - { - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -EXPORT_C void CMusEngClipSession::SetPositionL ( - const TTimeIntervalSeconds& aPosition ) +CMusEngClipSession::CMusEngClipSession( const TRect& aRect ) + : CMusEngMceOutSession( aRect ) { } @@ -132,78 +57,11 @@ // // ----------------------------------------------------------------------------- // -EXPORT_C void CMusEngClipSession::SetSessionObserver( - MMusEngClipSessionObserver* aSessionObserver) - { - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -EXPORT_C void CMusEngClipSession::PlayL() +void CMusEngClipSession::ConstructL() { - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -EXPORT_C void CMusEngClipSession::PauseL() - { - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusEngClipSession::CompleteSessionStructureL() - { + CMusEngMceOutSession::ConstructL(); } - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -CMusEngClipSession::CMusEngClipSession( - MMusEngClipSessionObserver* aSessionObserver, - const TRect& aRect, - TUint aSipProfileId ) - : CMusEngMceOutSession( aRect, aSipProfileId ) - { - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusEngClipSession::ConstructL( const TDesC& aFileName ) - { - } + +// End of file - -// ----------------------------------------------------------------------------- -// Check is file DRM protected. -// -// ----------------------------------------------------------------------------- -// -TBool CMusEngClipSession::IsProtectedFileL( const TDesC& aClipFile ) - { - } - - -// ----------------------------------------------------------------------------- -// If member file contains audio, add appropriate amount of audio streams to -// session structure -// ----------------------------------------------------------------------------- -// -void CMusEngClipSession::ConstructAudioStructureL() - { - } - - diff -r 33a5d2bbf6fc -r 73a1feb507fb tsrc/musenginestub/src/musenginepluginentry.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tsrc/musenginestub/src/musenginepluginentry.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,42 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + +#include "musengsessionmanager.h" +#include +#include + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +const TImplementationProxy KMusEnginePluginImplementationTable[] = + { + IMPLEMENTATION_PROXY_ENTRY( 0x20021341, CMusEngSessionManager::NewL ) + }; + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +EXPORT_C const TImplementationProxy* ImplementationGroupProxy( TInt& aTableCount ) + { + aTableCount = sizeof( KMusEnginePluginImplementationTable ) / + sizeof( TImplementationProxy ); + + return KMusEnginePluginImplementationTable; + } diff -r 33a5d2bbf6fc -r 73a1feb507fb tsrc/musenginestub/src/musenglivesession.cpp --- a/tsrc/musenginestub/src/musenglivesession.cpp Thu Aug 19 09:51:39 2010 +0300 +++ b/tsrc/musenginestub/src/musenglivesession.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -18,36 +18,49 @@ // USER #include "musenglivesession.h" +#include "musengsessionobserver.h" #include "musenglivesessionobserver.h" -//#include "musunittesting.h" -//#include "musengmceutils.h" +#include "musunittesting.h" +#include "musengmceutils.h" +#include "musenglogger.h" +#include "mussessionproperties.h" // SYSTEM -/* +#include #include #include #include #include +#include #include #include -*/ +#include +#include +// Names of AVC levels in string for config keys stored in CenRep +_LIT8( KMusAvcBitrateLevel1, "AvcBrL1=" ); +_LIT8( KMusAvcBitrateLevel1b, "AvcBrL1b=" ); +_LIT8( KMusAvcBitrateLevel1_1, "AvcBrL1_1=" ); +_LIT8( KMusAvcBitrateLevel1_2, "AvcBrL1_2=" ); +_LIT8( KMusAvcBitrateLevel1_3, "AvcBrL1_3=" ); +_LIT8( KMusAvcBitrateLevel2, "AvcBrL2=" ); + +_LIT8( KMusEncoderInfoTokenizer, ";" ); + + +const TInt KMaxDispName = 512; // ----------------------------------------------------------------------------- // // ----------------------------------------------------------------------------- // -EXPORT_C CMusEngLiveSession* CMusEngLiveSession::NewL( - const TDesC& /*aFileName*/, - const TRect& aRect, - MMusEngLiveSessionObserver* aSessionObserver, - TUint aSipProfileId ) +CMusEngLiveSession* CMusEngLiveSession::NewL( + const TDesC& aFileName, + const TRect& aRect ) { - CMusEngLiveSession* self = new( ELeave ) CMusEngLiveSession( - aSessionObserver, - aRect, - aSipProfileId ); + CMusEngLiveSession* self = new( ELeave ) CMusEngLiveSession( aRect, + aFileName ); CleanupStack::PushL( self ); self->ConstructL(); CleanupStack::Pop( self ); @@ -59,15 +72,10 @@ // // ----------------------------------------------------------------------------- // -EXPORT_C CMusEngLiveSession* CMusEngLiveSession::NewL( - const TRect& aRect, - MMusEngLiveSessionObserver* aSessionObserver, - TUint aSipProfileId ) +CMusEngLiveSession* CMusEngLiveSession::NewL( + const TRect& aRect ) { - CMusEngLiveSession* self = new( ELeave ) CMusEngLiveSession( - aSessionObserver, - aRect, - aSipProfileId); + CMusEngLiveSession* self = new( ELeave ) CMusEngLiveSession( aRect ); CleanupStack::PushL( self ); self->ConstructL(); CleanupStack::Pop( self ); @@ -81,15 +89,322 @@ // CMusEngLiveSession::~CMusEngLiveSession() { + delete iRemoteDisplayName; + } + + + +// ----------------------------------------------------------------------------- +// From MLcSession +// ----------------------------------------------------------------------------- +// +void CMusEngLiveSession::EstablishLcSessionL() + { + } + +// ----------------------------------------------------------------------------- +// From MLcSession +// ----------------------------------------------------------------------------- +// +MLcVideoPlayer* CMusEngLiveSession::LocalVideoPlayer() + { + return this; + } + + + +// ----------------------------------------------------------------------------- +// From MLcSession +// ----------------------------------------------------------------------------- +// + +const TDesC& CMusEngLiveSession::RemoteDisplayName() + { + return *iRemoteDisplayName; + } + + + + +// ----------------------------------------------------------------------------- +// From MLcVideoPlayer +// ----------------------------------------------------------------------------- +// +MLcVideoPlayer::TLcVideoPlayerState CMusEngLiveSession::LcVideoPlayerState() const + { + TLcVideoPlayerState vidPlayerState = MLcVideoPlayer::EUnavailable; + return vidPlayerState; + } + +// ----------------------------------------------------------------------------- +// From MLcVideoPlayer +// ----------------------------------------------------------------------------- +// +TBool CMusEngLiveSession::LcIsPlayingL() + { + return iPlaying; + } + +// ----------------------------------------------------------------------------- +// From MLcVideoPlayer +// ----------------------------------------------------------------------------- +// +void CMusEngLiveSession::LcPlayL() + { + iPlaying = ETrue; + } + +// ----------------------------------------------------------------------------- +// From MLcVideoPlayer +// ----------------------------------------------------------------------------- +// +void CMusEngLiveSession::LcPauseL() + { + iPlaying = EFalse; + } + +// ----------------------------------------------------------------------------- +// From MLcVideoPlayer +// ----------------------------------------------------------------------------- +// +MLcWindow* CMusEngLiveSession::LcWindow() + { + return this; + } + +// ----------------------------------------------------------------------------- +// From MLcVideoPlayer +// ----------------------------------------------------------------------------- +// +MLcCameraControl* CMusEngLiveSession::LcCameraControl() + { + return this; + } + +// ----------------------------------------------------------------------------- +// From MLcVideoPlayer +// ----------------------------------------------------------------------------- +// +MLcFileControl* CMusEngLiveSession::LcSourceFile() + { + return NULL; + } + +// ----------------------------------------------------------------------------- +// From MLcVideoPlayer +// ----------------------------------------------------------------------------- +// +MLcFileControl* CMusEngLiveSession::LcDestinationFile() + { + return this; + } + +// ----------------------------------------------------------------------------- +// From MLcVideoPlayer +// ----------------------------------------------------------------------------- +// +MLcAudioControl* CMusEngLiveSession::LcAudioControl() + { + return this; + } + +// ----------------------------------------------------------------------------- +// From MLcVideoPlayer +// ----------------------------------------------------------------------------- +// +MLcZoomControl* CMusEngLiveSession::LcZoomControl() + { + return this; + } + +// ----------------------------------------------------------------------------- +// From MLcVideoPlayer +// ----------------------------------------------------------------------------- +// +MLcBrightnessControl* CMusEngLiveSession::LcBrightnessControl() + { + return this; + } + +// ----------------------------------------------------------------------------- +// From MLcVideoPlayer +// ----------------------------------------------------------------------------- +// +RPointerArray< MLcValueControl >& CMusEngLiveSession::LcExtensionControls() + { + return iValueControls; } +// ----------------------------------------------------------------------------- +// From MLcCameraControl +// ----------------------------------------------------------------------------- +// +TInt CMusEngLiveSession::LcCameraCountL() + { + return 1; + } + +// ----------------------------------------------------------------------------- +// From MLcCameraControl +// ----------------------------------------------------------------------------- +// +void CMusEngLiveSession::ToggleLcCameraL() + { + } + +// ----------------------------------------------------------------------------- +// From MLcBrightnessControl +// ----------------------------------------------------------------------------- +// +TInt CMusEngLiveSession::MinLcBrightnessL() + { + return iCurrentBrighness; + } + +// ----------------------------------------------------------------------------- +// From MLcBrightnessControl +// ----------------------------------------------------------------------------- +// +TInt CMusEngLiveSession::MaxLcBrightnessL() + { + return iCurrentBrighness; + } + +// ----------------------------------------------------------------------------- +// From MLcBrightnessControl +// ----------------------------------------------------------------------------- +// +TInt CMusEngLiveSession::LcBrightnessL() + { + return iCurrentBrighness; + } + +// ----------------------------------------------------------------------------- +// From MLcBrightnessControl +// ----------------------------------------------------------------------------- +// +void CMusEngLiveSession::SetLcBrightnessL( TInt aValue ) + { + iCurrentBrighness = aValue; + } + +// ----------------------------------------------------------------------------- +// From MLcBrightnessControl +// ----------------------------------------------------------------------------- +// +void CMusEngLiveSession::IncreaseLcBrightnessL() + { + iCurrentBrighness++; + } + +// ----------------------------------------------------------------------------- +// From MLcBrightnessControl +// ----------------------------------------------------------------------------- +// +void CMusEngLiveSession::DecreaseLcBrightnessL() + { + iCurrentBrighness--; + } + +// ----------------------------------------------------------------------------- +// From MLcZoomControl +// ----------------------------------------------------------------------------- +// +TInt CMusEngLiveSession::MinLcZoomL() + { + return iCurrentZoom; + } + +// ----------------------------------------------------------------------------- +// From MLcZoomControl +// ----------------------------------------------------------------------------- +// +TInt CMusEngLiveSession::MaxLcZoomL() + { + return iCurrentZoom; + } + +// ----------------------------------------------------------------------------- +// From MLcZoomControl +// ----------------------------------------------------------------------------- +// +TInt CMusEngLiveSession::LcZoomValueL() + { + return iCurrentZoom; + } + +// ----------------------------------------------------------------------------- +// From MLcZoomControl +// ----------------------------------------------------------------------------- +// +void CMusEngLiveSession::SetLcZoomValueL( TInt aValue ) + { + iCurrentZoom = aValue; + } + +// ----------------------------------------------------------------------------- +// From MLcZoomControl +// ----------------------------------------------------------------------------- +// +void CMusEngLiveSession::LcZoomInL() + { + iCurrentZoom++; + } + +// ----------------------------------------------------------------------------- +// From MLcZoomControl +// ----------------------------------------------------------------------------- +// +void CMusEngLiveSession::LcZoomOutL() + { + iCurrentZoom--; + } + +// ----------------------------------------------------------------------------- +// From MLcFileControl +// ----------------------------------------------------------------------------- +// +void CMusEngLiveSession::EnableLcFileL( TBool aEnable ) + { + iFileEnabled = aEnable; + } + +// ----------------------------------------------------------------------------- +// From MLcFileControl +// ----------------------------------------------------------------------------- +// +TBool CMusEngLiveSession::IsLcFileEnabled() + { + return iFileEnabled; + } + +// ----------------------------------------------------------------------------- +// From MLcFileControl +// ----------------------------------------------------------------------------- +// +void CMusEngLiveSession::SetLcFileNameL( const TFileName& aFileName ) + { + iRecordedFile = aFileName; + } + +// ----------------------------------------------------------------------------- +// From MLcFileControl +// ----------------------------------------------------------------------------- +// +TFileName& CMusEngLiveSession::LcFileName() + { + return iRecordedFile; + } // ----------------------------------------------------------------------------- // // ----------------------------------------------------------------------------- // -EXPORT_C void CMusEngLiveSession::SetSessionObserver( - MMusEngLiveSessionObserver* aSessionObserver ) +CMusEngLiveSession::CMusEngLiveSession( + const TRect& aRect, + const TDesC& aRecordedFile ) + : CMusEngMceOutSession( aRect ), + iRecordedFile( aRecordedFile ) { } @@ -98,114 +413,13 @@ // // ----------------------------------------------------------------------------- // -EXPORT_C TInt CMusEngLiveSession::CurrentZoomL() const - { - return iCurrentZoom; - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -EXPORT_C TInt CMusEngLiveSession::MaxZoomL() const - { - return iCurrentZoom; - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -EXPORT_C TInt CMusEngLiveSession::MinZoomL() const +void CMusEngLiveSession::ConstructL() { - return iCurrentZoom; - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -EXPORT_C void CMusEngLiveSession::ZoomInL() - { - iCurrentZoom++; - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -EXPORT_C void CMusEngLiveSession::ZoomOutL() - { - iCurrentZoom--; - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -EXPORT_C void CMusEngLiveSession::ZoomDefaultL() - { - } - + MUS_LOG( "mus: [ENGINE] -> CMusEngLiveSession::ConstructL()" ) + + CMusEngMceOutSession::ConstructL(); + + iRemoteDisplayName = HBufC::NewL( KMaxDispName ); -// ----------------------------------------------------------------------------- -// Enable camera -// ----------------------------------------------------------------------------- -// -EXPORT_C void CMusEngLiveSession::PlayL() - { - iPlaying = ETrue; - } - - -// ----------------------------------------------------------------------------- -// Disable camera -// ----------------------------------------------------------------------------- -// -EXPORT_C void CMusEngLiveSession::PauseL() - { - iPlaying = EFalse; - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusEngLiveSession::CompleteSessionStructureL() - { + MUS_LOG( "mus: [ENGINE] <- CMusEngLiveSession::ConstructL()" ) } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -CMusEngLiveSession::CMusEngLiveSession( - MMusEngLiveSessionObserver* aSessionObserver, - const TRect& aRect, - TUint aSipProfileId ) - :CMusEngMceOutSession( aRect, aSipProfileId ), - iDefaultZoomFactor( -1 ) - { - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusEngLiveSession::ConstructL( /*const TDesC& aFileName*/ ) - { - } - - - - - - diff -r 33a5d2bbf6fc -r 73a1feb507fb tsrc/musenginestub/src/musengmceoutsession.cpp --- a/tsrc/musenginestub/src/musengmceoutsession.cpp Thu Aug 19 09:51:39 2010 +0300 +++ b/tsrc/musenginestub/src/musengmceoutsession.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -18,32 +18,6 @@ // USER #include "musengmceoutsession.h" -#include "musenglivesessionobserver.h" -//#include "mussipprofilehandler.h" - -// SYSTEM -/* -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include -*/ -const TInt KMaxUriLength = 512; -_LIT8( KMusEngAtSign, "@" ); -_LIT8( KMusEngPlusSign, "+" ); -_LIT8( KMusEngSipPrefix, "sip:" ); -_LIT8( KMusEngTelPrefix, "tel:" ); // ----------------------------------------------------------------------------- // @@ -53,44 +27,13 @@ { } - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -EXPORT_C void CMusEngMceOutSession::InviteL( const TDesC& aRecipient ) - { - iInvited = ETrue; - User::LeaveIfError( iErrorCode ); - - } - - // ----------------------------------------------------------------------------- // // ----------------------------------------------------------------------------- // -EXPORT_C void CMusEngMceOutSession::CancelInviteL() - { - iInvited = EFalse; - User::LeaveIfError( iErrorCode ); - } - - -// ----------------------------------------------------------------------------- -// Handle MCE session termination. Called by MCE observer function of the -// base class. -// ----------------------------------------------------------------------------- -// - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -CMusEngMceOutSession::CMusEngMceOutSession( const TRect& aRect, - TUint aSipProfileId ) - : CMusEngMceSession( aRect ), - iSipProfileId( aSipProfileId ) +CMusEngMceOutSession::CMusEngMceOutSession( + const TRect& aRect) + : CMusEngMceSession( aRect ) { } @@ -103,34 +46,4 @@ { } - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusEngMceOutSession::CreateMceSessionStructureL() - { - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -MMusEngOutSessionObserver* CMusEngMceOutSession::OutSessionObserver() - { - return static_cast(iSessionObserver); - } - - -// ----------------------------------------------------------------------------- -// TODO: Using UTF8 is to wide. It should handle the escape characters -// correctly. UTF7 is not working, since it converts + as +- -// ----------------------------------------------------------------------------- -// -HBufC8* CMusEngMceOutSession::ParseRecipientUriL( const TDesC& aRecipient ) - { - } - - - +// End of file diff -r 33a5d2bbf6fc -r 73a1feb507fb tsrc/musenginestub/src/musengmcesession.cpp --- a/tsrc/musenginestub/src/musengmcesession.cpp Thu Aug 19 09:51:39 2010 +0300 +++ b/tsrc/musenginestub/src/musengmcesession.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -18,118 +18,6 @@ // USER #include "musengmcesession.h" -#include "musengsessiondurationtimer.h" -#include "musengoutsessionobserver.h" -//#include "musengmceutils.h" -//#include "musuid.hrh" -#include "musengclipsessionobserver.h" - -// SYSTEM -/* -#include -#include -#include -#include -#include -#include -#include -#include -*/ - -const TInt KMusEngTimerInterval = 1000000; // 1 second -const TInt KMusEngRtcpInactivityThreshold = 20; // seconds - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -CMusEngMceSession::~CMusEngMceSession() - { - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -EXPORT_C void CMusEngMceSession::TerminateL() - { - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -EXPORT_C void CMusEngMceSession::ReleaseInternalObservers() - { - } - - -// ----------------------------------------------------------------------------- -// Returns estabilished session time. If not established return -// value is < 0 -// ----------------------------------------------------------------------------- -// -EXPORT_C TTimeIntervalSeconds CMusEngMceSession::GetSessionTime() const - { - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -EXPORT_C TBool CMusEngMceSession::ConnectionActive() const - { - return EFalse; - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -EXPORT_C void CMusEngMceSession::VolumeUpL() - { - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -EXPORT_C void CMusEngMceSession::VolumeDownL() - { - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -EXPORT_C void CMusEngMceSession::EnableDisplayL( TBool aEnable ) - { - iDisplayEnabled = aEnable; - } - - -// ----------------------------------------------------------------------------- -// Mutes playback of sended audio streams. Audio data is still streamed. -// ----------------------------------------------------------------------------- -// -EXPORT_C void CMusEngMceSession::MuteL() - { - } - - -// ----------------------------------------------------------------------------- -// Unmutes playback of sended audio streams. -// ----------------------------------------------------------------------------- -// -EXPORT_C void CMusEngMceSession::UnmuteL() - { - } // ----------------------------------------------------------------------------- @@ -137,8 +25,7 @@ // ----------------------------------------------------------------------------- // CMusEngMceSession::CMusEngMceSession( const TRect& aRect ) - : CMusEngSession( aRect ), - iSecondsFromLastRtcpReport ( 0 ) + : iRect ( aRect ) { } @@ -149,71 +36,267 @@ // void CMusEngMceSession::ConstructL() { + CMusEngSession::ConstructL(); // Base class ConstructL -first } - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusEngMceSession::RectChangedL() - { - } - - - - // ----------------------------------------------------------------------------- // // ----------------------------------------------------------------------------- // -TBool CMusEngMceSession::IsRtpcInactivityTimoutSupported() -{ - return EFalse; -} +CMusEngMceSession::~CMusEngMceSession() + { + } // ----------------------------------------------------------------------------- -// Initializes session timer to current time +// From MLcSession // ----------------------------------------------------------------------------- // -void CMusEngMceSession::InitializeSessionTimer() + +MLcSession::TLcSessionState CMusEngMceSession::LcSessionState() const + { + TLcSessionState lcSessionState = MLcSession::EUninitialized; + return lcSessionState; + } + +// ----------------------------------------------------------------------------- +// From MLcSession +// ----------------------------------------------------------------------------- +// +void CMusEngMceSession::EstablishLcSessionL() + { + User::Leave( KErrNotSupported ); + } + +// ----------------------------------------------------------------------------- +// From MLcSession +// ----------------------------------------------------------------------------- +// +void CMusEngMceSession::TerminateLcSessionL() { } +// ----------------------------------------------------------------------------- +// From MLcSession +// ----------------------------------------------------------------------------- +// +MLcVideoPlayer* CMusEngMceSession::RemoteVideoPlayer() + { + return NULL; + } // ----------------------------------------------------------------------------- +// From MLcSession +// ----------------------------------------------------------------------------- +// +MLcVideoPlayer* CMusEngMceSession::LocalVideoPlayer() + { + return NULL; + } + +// ----------------------------------------------------------------------------- +// From MLcSession +// ----------------------------------------------------------------------------- +// +const TDesC& CMusEngMceSession::LocalDisplayName() + { + return KNullDesC; + } + +// ----------------------------------------------------------------------------- +// From MLcSession +// ----------------------------------------------------------------------------- +// +const TDesC& CMusEngMceSession::RemoteDisplayName() + { + return KNullDesC; + } + +// ----------------------------------------------------------------------------- +// From MLcSession +// ----------------------------------------------------------------------------- // +TInt CMusEngMceSession::SetParameter( TInt /*aId*/, TInt /*aValue*/ ) + { + return KErrNotSupported; + } + +// ----------------------------------------------------------------------------- +// From MLcSession +// ----------------------------------------------------------------------------- +// +TInt CMusEngMceSession::ParameterValue( TInt /*aId*/ ) + { + return KErrNotSupported; + } + +// ----------------------------------------------------------------------------- +// From MLcWindow // ----------------------------------------------------------------------------- // -void CMusEngMceSession::UpdateTimerEvent() +void CMusEngMceSession::EnableLcWindowL( TBool aEnable ) + { + iWindowEnabled = aEnable; + } + +// ----------------------------------------------------------------------------- +// From MLcWindow +// ----------------------------------------------------------------------------- +// +TBool CMusEngMceSession::IsLcWindowEnabled() { + return iWindowEnabled; + } + +// ----------------------------------------------------------------------------- +// From MLcWindow +// ----------------------------------------------------------------------------- +// +void CMusEngMceSession::SetLcWindowRectL( TRect aRect ) + { + iRect = aRect; } // ----------------------------------------------------------------------------- -// Enables or disables all the speaker and rtp sinks of all the audio streams +// From MLcWindow +// ----------------------------------------------------------------------------- +// +TRect CMusEngMceSession::LcWindowRect() + { + return iRect; + } + +// ----------------------------------------------------------------------------- +// From MLcWindow +// ----------------------------------------------------------------------------- +// +void CMusEngMceSession::SetLcWindowOrientationL( + TLcWindowOrientation aOrientation ) + { + iOrientation = aOrientation; + } + +// ----------------------------------------------------------------------------- +// From MLcWindow +// ----------------------------------------------------------------------------- +// +MLcWindow::TLcWindowOrientation CMusEngMceSession::LcWindowOrientationL() + { + MLcWindow::TLcWindowOrientation orientation; + if ( iOrientation == ELandscape ) + { + orientation = MLcWindow::ELandscape; + } + else + { + orientation = MLcWindow::EPortrait; + } + return orientation; + } + +// ----------------------------------------------------------------------------- +// From MLcAudioControl +// ----------------------------------------------------------------------------- +// +TBool CMusEngMceSession::IsLcAudioMutedL() + { + return iMuted; + } + +// ----------------------------------------------------------------------------- +// From MLcAudioControl +// ----------------------------------------------------------------------------- +// +void CMusEngMceSession::MuteLcAudioL( TBool aMute ) + { + iMuted = aMute; + } + +// ----------------------------------------------------------------------------- +// From MLcAudioControl +// ----------------------------------------------------------------------------- +// +TBool CMusEngMceSession::IsEnablingLcLoudspeakerAllowed() + { + return iEnablingLoudspeakerAllowed; + } + +// ----------------------------------------------------------------------------- +// From MLcAudioControl // ----------------------------------------------------------------------------- // -void CMusEngMceSession::DoMuteL( TBool aMute ) +TBool CMusEngMceSession::IsLcMicMutedL() + { + return iMicMuted; + } + +// ----------------------------------------------------------------------------- +// From MLcAudioControl +// ----------------------------------------------------------------------------- +// +void CMusEngMceSession::MuteLcMicL( TBool aMute ) + { + iMicMuted = aMute; + } + +// ----------------------------------------------------------------------------- +// From MLcAudioControl +// ----------------------------------------------------------------------------- +// +TBool CMusEngMceSession::IsLcLoudspeakerEnabled() + { + return iLoudspeakerEnabled; + } + +// ----------------------------------------------------------------------------- +// From MLcAudioControl +// ----------------------------------------------------------------------------- +// +void CMusEngMceSession::EnableLcLoudspeakerL( TBool aEnabled ) + { + iLoudspeakerEnabled = aEnabled; + } + +// ----------------------------------------------------------------------------- +// From MLcAudioControl +// ----------------------------------------------------------------------------- +// +TInt CMusEngMceSession::LcVolumeL() + { + return iVolume; + } + +// ----------------------------------------------------------------------------- +// From MLcAudioControl +// ----------------------------------------------------------------------------- +// +void CMusEngMceSession::SetLcVolumeL( TInt aValue ) + { + iVolume = aValue; + } + +// ----------------------------------------------------------------------------- +// From MLcAudioControl +// ----------------------------------------------------------------------------- +// +void CMusEngMceSession::IncreaseLcVolumeL() + { + iVolume++; + } + +// ----------------------------------------------------------------------------- +// From MLcAudioControl +// ----------------------------------------------------------------------------- +// +void CMusEngMceSession::DecreaseLcVolumeL() + { + iVolume--; + } + +void CMusEngMceSession::UpdateLcSessionL() { } -// ----------------------------------------------------------------------------- -// Changes volume of all speaker sinks in the session structure -// ----------------------------------------------------------------------------- -// -void CMusEngMceSession::ChangeVolumeByOneL( TBool aIncreaseVolume ) - { - } - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusEngMceSession::CheckClipEndL() - { - } - - +// End of file diff -r 33a5d2bbf6fc -r 73a1feb507fb tsrc/musenginestub/src/musengmceutils.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tsrc/musenginestub/src/musengmceutils.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,571 @@ +/* +* Copyright (c) 2005-2006 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: Utilities to get and set profile used with SWIS. +* +*/ + + + +// USER + +#include "musengmceutils.h" +#include "muslogger.h" + +// SYSTEM + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + + + + + +// ----------------------------------------------------------------------------- +// Tells if parameter stream is a video stream with RTP source +// ----------------------------------------------------------------------------- +// +TBool MusEngMceUtils::IsVideoInStream( CMceMediaStream& aStream ) + { + return ( aStream.Type() == KMceVideo && + aStream.Source() && + aStream.Source()->Type() == KMceRTPSource ); + } + +// ----------------------------------------------------------------------------- +// Tells if parameter stream is a video stream with RTP sink +// ----------------------------------------------------------------------------- +// +TBool MusEngMceUtils::IsVideoOutStream( CMceMediaStream& aStream ) + { + TBool isOutStream( EFalse ); + if ( aStream.Type() == KMceVideo ) + { + CMceMediaSink* rtpSink = MusEngMceUtils::GetMediaSink( + aStream, + KMceRTPSink ); + + isOutStream = ( rtpSink != NULL ); + } + return isOutStream; + } + +// ----------------------------------------------------------------------------- +// Tells if parameter stream is an audio stream with RTP source +// ----------------------------------------------------------------------------- +// +TBool MusEngMceUtils::IsAudioInStream( CMceMediaStream& aStream ) + { + return ( aStream.Type() == KMceAudio && + aStream.Source() && + aStream.Source()->Type() == KMceRTPSource ); + } + + +// ----------------------------------------------------------------------------- +// Gets handle to video stream with RTP sink. +// ----------------------------------------------------------------------------- +// +CMceVideoStream* MusEngMceUtils::GetVideoOutStreamL( CMceSession& aSession ) + { + MUS_LOG( "mus: [ENGINE] -> MusEngMceUtils::GetVideoOutStreamL()" ) + + const RPointerArray& streams = aSession.Streams(); + + CMceVideoStream* videoOut = NULL; + + for ( TInt i = 0; i < streams.Count(); ++i ) + { + if ( MusEngMceUtils::IsVideoOutStream( *streams[i] ) ) + { + __ASSERT_ALWAYS( !videoOut, User::Leave( KErrOverflow ) ); + + videoOut = static_cast( streams[i] ); + } + + // Check if bound stream is a video stream with RTP sink. + if ( streams[i]->BoundStream() && + MusEngMceUtils::IsVideoOutStream( streams[i]->BoundStreamL() ) ) + { + __ASSERT_ALWAYS( !videoOut, User::Leave( KErrOverflow ) ); + + videoOut = static_cast( + &streams[i]->BoundStreamL() ); + } + } + + __ASSERT_ALWAYS( videoOut, User::Leave( KErrNotFound ) ); + + MUS_LOG( "mus: [ENGINE] <- MusEngMceUtils::GetVideoOutStreamL()" ) + + return videoOut; + } + + +// ----------------------------------------------------------------------------- +// Gets handle to video stream with RTP source. +// ----------------------------------------------------------------------------- +// +CMceVideoStream* MusEngMceUtils::GetVideoInStreamL( CMceSession& aSession ) + { + MUS_LOG( "mus: [ENGINE] -> MusEngMceUtils::GetVideoInStreamL()" ) + + const RPointerArray& streams = aSession.Streams(); + + CMceVideoStream* videoIn = NULL; + + for ( TInt i = 0; i < streams.Count(); ++i ) + { + if ( MusEngMceUtils::IsVideoInStream( *streams[i] ) ) + + { + __ASSERT_ALWAYS( !videoIn, User::Leave( KErrOverflow ) ); + + videoIn = static_cast( streams[i] ); + } + + // Check if bound stream is a video stream with RTP souce. + if ( streams[i]->BoundStream() && + MusEngMceUtils::IsVideoInStream( streams[i]->BoundStreamL() ) ) + { + __ASSERT_ALWAYS( !videoIn, User::Leave( KErrOverflow ) ); + + videoIn = static_cast( + &streams[i]->BoundStreamL() ); + } + } + + __ASSERT_ALWAYS( videoIn, User::Leave( KErrNotFound ) ); + + MUS_LOG( "mus: [ENGINE] <- MusEngMceUtils::GetVideoInStreamL()" ) + + return videoIn; + } + + +// ----------------------------------------------------------------------------- +// Gets handle to video stream with file sink +// ----------------------------------------------------------------------------- +// +CMceVideoStream* MusEngMceUtils::GetRecordingStream( CMceSession& aSession ) + { + MUS_LOG( "mus: [ENGINE] -> MusEngMceUtils::GetRecordingStreamL()" ) + + const RPointerArray& streams = aSession.Streams(); + + CMceVideoStream* recordingStream = NULL; + + for ( TInt i = 0; i < streams.Count(); ++i ) + { + if ( streams[i]->Type() == KMceVideo ) + { + if ( MusEngMceUtils::GetMediaSink( *streams[i], KMceFileSink ) ) + { + recordingStream = static_cast( streams[i] ); + } + } + } + + MUS_LOG( "mus: [ENGINE] <- MusEngMceUtils::GetRecordingStreamL()" ) + + return recordingStream; + } + + +// ----------------------------------------------------------------------------- +// Gets handle to a media sink of spesified type contained by a mediastream. +// ----------------------------------------------------------------------------- +// +CMceMediaSink* MusEngMceUtils::GetMediaSink( CMceMediaStream& aStream, + TMceSinkType aType, + TMceSourceType aAssociatedSourceType ) + { + const RPointerArray& sinks = aStream.Sinks(); + for ( TInt i = 0; i < sinks.Count(); ++i ) + { + if ( sinks[i]->Type() == aType && + ( aAssociatedSourceType == KMusEngNoAssociatedSourceType || + aStream.Source()->Type() == aAssociatedSourceType ) ) + { + return sinks[i]; + } + } + + return NULL; + } + + +// ----------------------------------------------------------------------------- +// Gets handle to a media sink of spesified type contained by a mediastream. +// ----------------------------------------------------------------------------- +// +CMceMediaSink* MusEngMceUtils::GetMediaSinkL( CMceMediaStream& aStream, + TMceSinkType aType, + TMceSourceType aAssociatedSourceType ) + { + + CMceMediaSink* sink = MusEngMceUtils::GetMediaSink( aStream, aType, aAssociatedSourceType ); + + __ASSERT_ALWAYS( sink, User::Leave( KErrNotFound ) ); + + return sink; + } + + +// ----------------------------------------------------------------------------- +// Gets handle to a media sink of spesified type contained by a session. +// ----------------------------------------------------------------------------- +// +CMceMediaSink* MusEngMceUtils::GetMediaSink( CMceSession& aSession, + TMceSinkType aType, + TMceSourceType aAssociatedSourceType, + TBool aStrictMatch ) + { + CMceMediaSink* sink = NULL; + + TRAP_IGNORE( sink = MusEngMceUtils::GetMediaSinkL( + aSession, aType, aAssociatedSourceType, aStrictMatch ) ) + + return sink; + } + + +// ----------------------------------------------------------------------------- +// Gets handle to a media sink of spesified type contained by a session. +// ----------------------------------------------------------------------------- +// +CMceMediaSink* MusEngMceUtils::GetMediaSinkL( CMceSession& aSession, + TMceSinkType aType, + TMceSourceType aAssociatedSourceType, + TBool aStrictMatch ) + { + CMceMediaSink* sink = NULL; + + const RPointerArray& streams = aSession.Streams(); + + for ( TInt i = 0; i < streams.Count(); ++i ) + { + sink = MusEngMceUtils::GetMediaSink( *streams[i], aType, aAssociatedSourceType ); + if ( sink ) + { + return sink; + } + + if ( streams[i]->BoundStream() ) + { + sink = MusEngMceUtils::GetMediaSink( streams[i]->BoundStreamL(), + aType, + aAssociatedSourceType ); + if ( sink ) + { + return sink; + } + } + } + + if ( !sink && aAssociatedSourceType != KMusEngNoAssociatedSourceType && !aStrictMatch ) + { + // No preferred match, try without source preference + sink = GetMediaSinkL( aSession, aType ); + } + + __ASSERT_ALWAYS( sink, User::Leave( KErrNotFound ) ); + + return sink; + } + + +// ----------------------------------------------------------------------------- +// Gets handle to a speaker sink contained by specified stream or bound stream. +// ----------------------------------------------------------------------------- +// +CMceSpeakerSink* MusEngMceUtils::GetSpeaker( CMceMediaStream& aStream ) + { + MUS_LOG( "mus: [ENGINE] -> MusEngMceUtils::GetSpeaker()" ) + + CMceSpeakerSink* speaker = NULL; + + if ( aStream.Type() == KMceAudio ) + { + speaker = static_cast( + MusEngMceUtils::GetMediaSink( aStream, KMceSpeakerSink ) ); + + if ( !speaker && aStream.BoundStream() ) + { + CMceMediaStream* boundStream = NULL; + TRAPD( error, boundStream = &aStream.BoundStreamL() ) + + if ( error == KErrNone ) + { + speaker = static_cast( + MusEngMceUtils::GetMediaSink( *boundStream, + KMceSpeakerSink ) ); + } + } + } + + MUS_LOG( "mus: [ENGINE] <- MusEngMceUtils::GetSpeaker()" ) + + return speaker; + } + + +// ----------------------------------------------------------------------------- +// Gets handle to a camera source. +// ----------------------------------------------------------------------------- +// +CMceCameraSource* MusEngMceUtils::GetCameraL( CMceSession& aSession ) + { + // Camera can be only in out stream + MUS_LOG( "mus: [ENGINE] -> MusEngMceUtils::GetCameraL()" ) + + CMceVideoStream* videoOut = MusEngMceUtils::GetVideoOutStreamL( aSession ); + + if ( !( videoOut->Source() && + videoOut->Source()->Type() == KMceCameraSource ) ) + { + User::Leave( KErrNotFound ); + } + + MUS_LOG( "mus: [ENGINE] <- MusEngMceUtils::GetCameraL()" ) + return static_cast( videoOut->Source() ); + } + + +// ----------------------------------------------------------------------------- +// Gets handle to a file source. +// ----------------------------------------------------------------------------- +// +CMceFileSource* MusEngMceUtils::GetFileSourceL( CMceSession& aSession ) + { + MUS_LOG( "mus: [ENGINE] -> MusEngMceUtils::GetFileSourceL()" ) + + CMceVideoStream* videoOut = MusEngMceUtils::GetVideoOutStreamL( aSession ); + + if ( !( videoOut->Source() && + videoOut->Source()->Type() == KMceFileSource ) ) + { + User::Leave( KErrNotFound ); + } + + MUS_LOG( "mus: [ENGINE] <- MusEngMceUtils::GetFileSourceL()" ) + return static_cast( videoOut->Source() ); + } + + +// ----------------------------------------------------------------------------- +// Gets handle to a display sink. +// ----------------------------------------------------------------------------- +// +CMceDisplaySink* MusEngMceUtils::GetDisplay( + CMceSession& aSession, TBool aPreferViewFinder ) + { + MUS_LOG( "mus: [ENGINE] -> MusEngMceUtils::GetDisplay()" ) + MUS_LOG( "mus: [ENGINE] <- MusEngMceUtils::GetDisplay()" ) + TMceSourceType preferredSource = + aPreferViewFinder ? KMceCameraSource : KMusEngNoAssociatedSourceType; + return static_cast( + MusEngMceUtils::GetMediaSink( aSession, KMceDisplaySink, preferredSource ) ); + + } + + +// ----------------------------------------------------------------------------- +// Gets handle to a display sink. +// ----------------------------------------------------------------------------- +// +CMceDisplaySink* MusEngMceUtils::GetDisplayL( + CMceSession& aSession, TBool aPreferViewFinder ) + { + MUS_LOG( "mus: [ENGINE] -> MusEngMceUtils::GetDisplayL()" ) + + CMceDisplaySink* display = MusEngMceUtils::GetDisplay( aSession, aPreferViewFinder ); + + __ASSERT_ALWAYS( display, User::Leave( KErrNotFound ) ); + + MUS_LOG( "mus: [ENGINE] <- MusEngMceUtils::GetDisplayL()" ) + return display; + } + +// ----------------------------------------------------------------------------- +// Gets handle to a display sink displaying received video. +// ----------------------------------------------------------------------------- +// +CMceDisplaySink* MusEngMceUtils::GetReceivingDisplay( CMceSession& aSession ) + { + MUS_LOG( "mus: [ENGINE] -> MusEngMceUtils::GetReceivingDisplay()" ) + MUS_LOG( "mus: [ENGINE] <- MusEngMceUtils::GetReceivingDisplay()" ) + + // Search display which is connected with rtp source + TMceSourceType preferredSource = KMceRTPSource; + return static_cast( MusEngMceUtils::GetMediaSink( + aSession, KMceDisplaySink, preferredSource, ETrue ) ); + } + +// ----------------------------------------------------------------------------- +// Gets handle to a display sink displaying received video. +// ----------------------------------------------------------------------------- +// +CMceDisplaySink* MusEngMceUtils::GetReceivingDisplayL( CMceSession& aSession ) + { + MUS_LOG( "mus: [ENGINE] -> MusEngMceUtils::GetReceivingDisplayL()" ) + + CMceDisplaySink* display = GetReceivingDisplay( aSession ); + __ASSERT_ALWAYS( display != NULL, User::Leave( KErrNotFound ) ); + + MUS_LOG( "mus: [ENGINE] <- MusEngMceUtils::GetReceivingDisplay()" ) + + return display; + } + +// ----------------------------------------------------------------------------- +// Gets handle to a display sink displaying viewfinder content. +// ----------------------------------------------------------------------------- +// +CMceDisplaySink* MusEngMceUtils::GetVfDisplay( CMceSession& aSession ) + { + MUS_LOG( "mus: [ENGINE] -> MusEngMceUtils::GetVfDisplay()" ) + MUS_LOG( "mus: [ENGINE] <- MusEngMceUtils::GetVfDisplay()" ) + + // Search display which is connected with camera + TMceSourceType preferredSource = KMceCameraSource; + return static_cast( MusEngMceUtils::GetMediaSink( + aSession, KMceDisplaySink, preferredSource, ETrue ) ); + } + +// ----------------------------------------------------------------------------- +// Adds display sink to specified stream if one does not exist already. +// Display rect is set in both cases. +// ----------------------------------------------------------------------------- +// +void MusEngMceUtils::AddDisplayL( CMceMediaStream& aStream, + CMceManager& aManager, + const TRect& aDisplayRect ) + { + MUS_LOG( "mus: [ENGINE] -> MusEngMceUtils::AddDisplayL()" ) + + __ASSERT_ALWAYS( aStream.Type() == KMceVideo, User::Leave( KErrArgument ) ); + + CMceDisplaySink* display = static_cast( + MusEngMceUtils::GetMediaSink( + aStream, + KMceDisplaySink ) ); + + if ( !display ) + { + display = CMceDisplaySink::NewLC( aManager ); + aStream.AddSinkL( display ); + CleanupStack::Pop( display ); + } + + display->SetDisplayRectL( aDisplayRect ); + + MUS_LOG( "mus: [ENGINE] <- MusEngMceUtils::AddDisplayL()" ) + } + + +// ----------------------------------------------------------------------------- +// Adds display sink to specified stream if one does not exist already. +// ----------------------------------------------------------------------------- +// +void MusEngMceUtils::AddSpeakerL( CMceMediaStream& aStream ) + { + MUS_LOG( "mus: [ENGINE] -> MusEngMceUtils::AddSpeakerL()" ) + + __ASSERT_ALWAYS( aStream.Type() == KMceAudio, User::Leave( KErrArgument ) ); + + CMceSpeakerSink* speaker = static_cast( + MusEngMceUtils::GetMediaSink( + aStream, + KMceSpeakerSink ) ); + + if ( !speaker ) + { + speaker = CMceSpeakerSink::NewLC(); + aStream.AddSinkL( speaker ); + CleanupStack::Pop( speaker ); + } + + MUS_LOG( "mus: [ENGINE] <- MusEngMceUtils::AddSpeakerL()" ) + } + + +// ----------------------------------------------------------------------------- +// Disables parameter stream, its' source and all the sinks. +// ----------------------------------------------------------------------------- +// +void MusEngMceUtils::DisableStreamL( CMceMediaStream& aStream ) + { + MUS_LOG( "mus: [ENGINE] -> MusEngMceUtils::DisableStreamL()" ) + + aStream.DisableL(); + + if ( aStream.Source() ) + { + aStream.Source()->DisableL(); + } + + for ( TInt sinkIndex = 0; sinkIndex < aStream.Sinks().Count(); ++sinkIndex ) + { + aStream.Sinks()[ sinkIndex ]->DisableL(); + } + + MUS_LOG( "mus: [ENGINE] -> MusEngMceUtils::DisableStreamL()" ) + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void MusEngMceUtils::DoEnableDisplayL( CMceDisplaySink& aDisplay, TBool aEnable ) + { + MUS_LOG1( "mus: [ENGINE] -> MusEngMceUtils::DoEnableDisplayL() %d", + aEnable ) + + if ( aEnable ) + { + if ( !aDisplay.IsEnabled() ) + { + aDisplay.EnableL(); + MUS_LOG( " Display enabled" ) + } + else + { + MUS_LOG( " Display already enabled, ignore" ) + } + } + else + { + if ( aDisplay.IsEnabled() ) + { + aDisplay.DisableL(); + MUS_LOG( " Display disabled" ) + } + else + { + MUS_LOG( " Display already disabled, ignore" ) + } + } + + MUS_LOG( "mus: [ENGINE] <- MusEngMceUtils::DoEnableDisplayL()") + } + diff -r 33a5d2bbf6fc -r 73a1feb507fb tsrc/musenginestub/src/musengreceivesession.cpp --- a/tsrc/musenginestub/src/musengreceivesession.cpp Thu Aug 19 09:51:39 2010 +0300 +++ b/tsrc/musenginestub/src/musengreceivesession.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -20,24 +20,52 @@ // USER INCLUDES #include "musengreceivesession.h" +#include "musengsessionobserver.h" #include "musengreceivesessionobserver.h" -//#include "musengmceutils.h" -//#include "muslogger.h" +#include "musengmceutils.h" +#include "musenglogger.h" +#include "mussipprofilehandler.h" +#include "mussessionproperties.h" // SYSTEM INCLUDES #include #include +#include #include #include #include #include #include #include +#include +#include +#include #include -const TInt KMaxUriLength = 512; +const TUint8 KMusEngRtpKeepAliveTimer = 5; // this should be 30 sec, this a temporary fix +const TUint8 KMusEngKeepAlivePayloadTypeVideoH263 = 96; +const TUint8 KMusEngKeepAlivePayloadTypeAudio = 97; +const TUint8 KMusEngKeepAlivePayloadTypeVideoAvc = 98; + +const TInt KMusEngJitterBufferLength = 51; //Must be bigger than treshold +// Using following value increases treshold buffer to 1 second from +// default 100 ms +const TInt KMusEngJitterBufferTreshold = 50; +const TInt KMusEngTresholdToSecondsFactor = 20; +const TInt KMusEngOneSecondInMilliSeconds = 1000; +// Use inactivity timer value that is a little bigger than treshold in seconds +const TUint KMusEngInactivityTimer = KMusEngTresholdToSecondsFactor * + KMusEngJitterBufferTreshold + + KMusEngOneSecondInMilliSeconds; + +_LIT8( KMusEngSwisIdentifier, "Require: precondition" ); +_LIT8( KMusEngAssertedIdentity, "P-Asserted-Identity" ); +_LIT8( KMusEngBiggerSign, ">" ); + +const TInt KMusEngSipReasonCodeBusyHere = 486; +_LIT8( KMusEngSipReasonPhraseBusy, "Busy" ); // ----------------------------------------------------------------------------- // @@ -45,23 +73,7 @@ // CMusEngReceiveSession::~CMusEngReceiveSession() { - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -EXPORT_C CMusEngReceiveSession* CMusEngReceiveSession::NewL( - const TRect& aRect, - MMusEngReceiveSessionObserver* aSessionObserver) - { - CMusEngReceiveSession* self = - new( ELeave ) CMusEngReceiveSession( aSessionObserver, aRect ); - CleanupStack::PushL( self ); - self->ConstructL(); - CleanupStack::Pop( self ); - return self; + delete iRemoteDisplayName; } @@ -69,62 +81,155 @@ // // ----------------------------------------------------------------------------- // -EXPORT_C void CMusEngReceiveSession::AcceptInvitationL( - const TBool& aAccept ) +CMusEngReceiveSession* CMusEngReceiveSession::NewL( const TRect& aRect ) { - iAccepInvitation = aAccept; + MUS_LOG( "mus: [ENGINE] -> CMusEngReceiveSession::NewL(...)" ) + + CMusEngReceiveSession* self = new( ELeave ) CMusEngReceiveSession( aRect ); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + + MUS_LOG( "mus: [ENGINE] <- CMusEngReceiveSession::NewL(...)" ) + return self; } // ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -EXPORT_C void CMusEngReceiveSession::SetSessionObserver( - MMusEngReceiveSessionObserver* aSessionObserver) - { - iSessionObserver = aSessionObserver; - } - - - -// ----------------------------------------------------------------------------- -// +// From MLcSession // ----------------------------------------------------------------------------- // -TBool CMusEngReceiveSession::IsRtpcInactivityTimoutSupported() -{ - return ETrue; -} - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -CMusEngReceiveSession::CMusEngReceiveSession( - MMusEngReceiveSessionObserver* aSessionObserver, - const TRect& aRect ) - : CMusEngMceSession( aRect ) +void CMusEngReceiveSession::EstablishLcSessionL() { } +// ----------------------------------------------------------------------------- +// From MLcSession +// ----------------------------------------------------------------------------- +// +MLcVideoPlayer* CMusEngReceiveSession::RemoteVideoPlayer() + { + return this; + } + +// ----------------------------------------------------------------------------- +// From MLcSession +// ----------------------------------------------------------------------------- +// + +const TDesC& CMusEngReceiveSession::RemoteDisplayName() + { + return *iRemoteDisplayName; + } + // ----------------------------------------------------------------------------- +// From MLcVideoPlayer +// ----------------------------------------------------------------------------- // +MLcVideoPlayer::TLcVideoPlayerState CMusEngReceiveSession::LcVideoPlayerState() const + { + TLcVideoPlayerState vidPlayerState = MLcVideoPlayer::EUnavailable; + + return vidPlayerState; + } +// ----------------------------------------------------------------------------- +// From MLcVideoPlayer // ----------------------------------------------------------------------------- // -void CMusEngReceiveSession::ConstructL() +TBool CMusEngReceiveSession::LcIsPlayingL() + { + return EFalse; + } + +// ----------------------------------------------------------------------------- +// From MLcVideoPlayer +// ----------------------------------------------------------------------------- +// +void CMusEngReceiveSession::LcPlayL() { + // NOP + } + +// ----------------------------------------------------------------------------- +// From MLcVideoPlayer +// ----------------------------------------------------------------------------- +// +void CMusEngReceiveSession::LcPauseL() + { + // NOP } +// ----------------------------------------------------------------------------- +// From MLcVideoPlayer +// ----------------------------------------------------------------------------- +// +MLcWindow* CMusEngReceiveSession::LcWindow() + { + return this; + } +// ----------------------------------------------------------------------------- +// From MLcVideoPlayer +// ----------------------------------------------------------------------------- +// +MLcCameraControl* CMusEngReceiveSession::LcCameraControl() + { + return NULL; + } // ----------------------------------------------------------------------------- +// From MLcVideoPlayer +// ----------------------------------------------------------------------------- +// +MLcFileControl* CMusEngReceiveSession::LcSourceFile() + { + return NULL; + } + +// ----------------------------------------------------------------------------- +// From MLcVideoPlayer +// ----------------------------------------------------------------------------- // +MLcFileControl* CMusEngReceiveSession::LcDestinationFile() + { + return NULL; + } + +// ----------------------------------------------------------------------------- +// From MLcVideoPlayer +// ----------------------------------------------------------------------------- +// +MLcAudioControl* CMusEngReceiveSession::LcAudioControl() + { + return this; + } + +// ----------------------------------------------------------------------------- +// From MLcVideoPlayer // ----------------------------------------------------------------------------- // -MMusEngReceiveSessionObserver* CMusEngReceiveSession::ReceiveSessionObserver() +MLcZoomControl* CMusEngReceiveSession::LcZoomControl() { + return NULL; } +// ----------------------------------------------------------------------------- +// From MLcVideoPlayer +// ----------------------------------------------------------------------------- +// +MLcBrightnessControl* CMusEngReceiveSession::LcBrightnessControl() + { + return NULL; + } + +// ----------------------------------------------------------------------------- +// From MLcVideoPlayer +// ----------------------------------------------------------------------------- +// +RPointerArray< MLcValueControl >& CMusEngReceiveSession::LcExtensionControls() + { + return iValueControls; + } + +// End of File diff -r 33a5d2bbf6fc -r 73a1feb507fb tsrc/musenginestub/src/musengsession.cpp --- a/tsrc/musenginestub/src/musengsession.cpp Thu Aug 19 09:51:39 2010 +0300 +++ b/tsrc/musenginestub/src/musengsession.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -18,12 +18,9 @@ // USER INCLUDES #include "musengsession.h" -#include "musengsessionobserver.h" #include "musengtelephoneutils.h" +#include "muslogger.h" -// SYSTEM INCLUDES - -//#include // ----------------------------------------------------------------------------- // @@ -38,38 +35,7 @@ // // ----------------------------------------------------------------------------- // -EXPORT_C TRect CMusEngSession::Rect() const - { - return iRect; - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -EXPORT_C void CMusEngSession::SetRectL( const TRect& aRect ) - { - iRect = aRect; - User::LeaveIfError( iErrorCode ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -EXPORT_C void CMusEngSession::EnableLoudspeakerL( TBool aEnable, - TBool aShowDialog ) - { - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -EXPORT_C TBool CMusEngSession::IsLoudSpeakerEnabled() const +CMusEngSession::CMusEngSession() { } @@ -78,48 +44,8 @@ // // ----------------------------------------------------------------------------- // -EXPORT_C TInt CMusEngSession::VolumeL() const - { - } - - -// ----------------------------------------------------------------------------- -// Increases CS call volume level by one. -// Leaves if error occurs when accessing central repository. -// ----------------------------------------------------------------------------- -// -EXPORT_C void CMusEngSession::VolumeUpL( ) - { - } - - -// ----------------------------------------------------------------------------- -// Decreases CS call volume level by one. -// Leaves if error occurs when accessing central repository. -// ----------------------------------------------------------------------------- -// -EXPORT_C void CMusEngSession::VolumeDownL( ) - { - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -CMusEngSession::CMusEngSession( const TRect& aRect ) - { - iRect = aRect; - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// void CMusEngSession::ConstructL() // second-phase constructor { - iErrorCode = KErrNone; } diff -r 33a5d2bbf6fc -r 73a1feb507fb tsrc/musenginestub/src/musengsessiondurationtimer.cpp --- a/tsrc/musenginestub/src/musengsessiondurationtimer.cpp Thu Aug 19 09:51:39 2010 +0300 +++ b/tsrc/musenginestub/src/musengsessiondurationtimer.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -16,21 +16,21 @@ */ -// USER INCLUDES +// USER INCLUDES #include "musengsessiondurationtimer.h" #include "musengsessiondurationtimerobserver.h" // ----------------------------------------------------------------------------- -// +// // ----------------------------------------------------------------------------- // -CMusEngSessionDurationTimer* CMusEngSessionDurationTimer::NewL( - MMusEngSessionDurationTimerObserver& aObserver ) +CMusEngSessionDurationTimer* CMusEngSessionDurationTimer::NewL( + MMusEngSessionDurationTimerObserver& aObserver ) { - CMusEngSessionDurationTimer* self = - new (ELeave) CMusEngSessionDurationTimer( aObserver ); + CMusEngSessionDurationTimer* self = + new (ELeave) CMusEngSessionDurationTimer( aObserver ); CleanupStack::PushL( self ); self->ConstructL(); CleanupStack::Pop( self) ; @@ -39,31 +39,74 @@ // ----------------------------------------------------------------------------- -// +// // ----------------------------------------------------------------------------- // CMusEngSessionDurationTimer::~CMusEngSessionDurationTimer() { + Cancel(); + iTimer.Close(); + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusEngSessionDurationTimer::Start(TInt aDelay ) + { + if ( !IsActive() ) + { + iTimer.After( iStatus, aDelay ); + SetActive(); + } + + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +CMusEngSessionDurationTimer::CMusEngSessionDurationTimer( + MMusEngSessionDurationTimerObserver& aObserver ) + : CActive( CActive::EPriorityStandard ), + iObserver( aObserver) + { } // ----------------------------------------------------------------------------- -// +// // ----------------------------------------------------------------------------- // -CMusEngSessionDurationTimer::CMusEngSessionDurationTimer( - MMusEngSessionDurationTimerObserver& aObserver ) - : iObserver( aObserver) +void CMusEngSessionDurationTimer::ConstructL() { + CActiveScheduler::Add( this ); + User::LeaveIfError( iTimer.CreateLocal() ); } // ----------------------------------------------------------------------------- -// +// // ----------------------------------------------------------------------------- // -void CMusEngSessionDurationTimer::ConstructL() +void CMusEngSessionDurationTimer::RunL() { + if ( iStatus.Int() == KErrNone ) + { + iObserver.UpdateTimerEvent(); + } } +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusEngSessionDurationTimer::DoCancel() + { + iTimer.Cancel(); + } + + diff -r 33a5d2bbf6fc -r 73a1feb507fb tsrc/musenginestub/src/musengsessionmanager.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tsrc/musenginestub/src/musengsessionmanager.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,113 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + +#include "musengsessionmanager.h" +#include +#include "musenglivesession.h" +#include "musengreceivesession.h" +#include "lcsession.h" +#include "mussessionproperties.h" +#include "lcsessionobserver.h" +#include "lcuiprovider.h" + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +CMusEngSessionManager* CMusEngSessionManager::NewL( TAny* aInitParams ) + { + __ASSERT_ALWAYS( aInitParams != NULL, User::Leave( KErrArgument ) ); + + CMusEngSessionManager* self = + new( ELeave )CMusEngSessionManager( + *reinterpret_cast< TLcEngineParams* >( aInitParams ) ); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + return self; + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +CMusEngSessionManager::~CMusEngSessionManager() + { + delete iSession; + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +CMusEngSessionManager::CMusEngSessionManager( + TLcEngineParams& aInitParams ) + { + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusEngSessionManager::ConstructL() + { + TInt useCase; + User::LeaveIfError( RProperty::Get( NMusSessionApi::KCategoryUid, + NMusSessionApi::KUseCase, + useCase ) ); + iSession = CreateMusSessionL( + static_cast< MultimediaSharing::TMusUseCase >( useCase ) ); + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +MLcSession& CMusEngSessionManager::Session() + { + return *iSession; + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +CMusEngMceSession* CMusEngSessionManager::CreateMusSessionL( + MultimediaSharing::TMusUseCase aUseCase ) + { + CMusEngMceSession* session = NULL; + switch ( aUseCase ) + { + case MultimediaSharing::EMusLiveVideo: + { + session = CMusEngLiveSession::NewL( TRect() ); + break; + } + case MultimediaSharing::EMusReceive: + { + session = CMusEngReceiveSession::NewL( TRect() ); + break; + } + default: + User::Leave( KErrNotSupported ); + break; + } + return session; + } + +// End of File diff -r 33a5d2bbf6fc -r 73a1feb507fb tsrc/musenginestub/src/musengtelephoneutils.cpp --- a/tsrc/musenginestub/src/musengtelephoneutils.cpp Thu Aug 19 09:51:39 2010 +0300 +++ b/tsrc/musenginestub/src/musengtelephoneutils.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -18,12 +18,21 @@ // USER #include "musengtelephoneutils.h" +#include "musengaudioroutingobserver.h" +#include "muslogger.h" // SYSTEM -/* #include -#include -*/ +#include +#include +#include +#include // for CPhCltCommandHandler + +// Constants +const TInt KMusEngMaxVolume = 10; +const TInt KMusEngMinVolume = 0; + + // ----------------------------------------------------------------------------- @@ -46,6 +55,51 @@ // CMusEngTelephoneUtils::~CMusEngTelephoneUtils() { + MUS_LOG( "mus: [ENGINE] -> CMusEngTelephoneUtils::~CMusEngTelephoneUtils()" ) + + Cancel(); + + delete iPhoneCommandHandler; + + if( iTelephonyAudioRouting ) // If 2nd phase construction has succeeded + { + CTelephonyAudioRouting::TAudioOutput currentMode = + iTelephonyAudioRouting->Output(); + if( currentMode != iAudioOutputAtStartup ) + { + // As going down, let audiorouting api to show notification + iTelephonyAudioRouting->SetShowNote( ETrue ); + TRAPD( err, DoSetOutputL( iAudioOutputAtStartup ) ); + MUS_LOG1( "mus: [ENGINE] final route change completed: %d", err ) + err++; + } + } + + delete iRepository; + delete iTelephonyAudioRouting; + MUS_LOG( "mus: [ENGINE] <- CMusEngTelephoneUtils::~CMusEngTelephoneUtils()" ) + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +TBool CMusEngTelephoneUtils::AudioRoutingCanBeChanged() + { + MUS_LOG( "mus: [ENGINE] -> CMusEngTelephoneUtils::AudioRoutingCanBeChanged" ) + + TBool retValue = ( iTelephonyAudioRouting->Output() != + CTelephonyAudioRouting::EWiredAudioAccessory && + iTelephonyAudioRouting->Output() != + CTelephonyAudioRouting::EBTAudioAccessory && + iTelephonyAudioRouting->Output() != + CTelephonyAudioRouting::ETTY ); + + MUS_LOG1( "mus: [ENGINE] <- CMusEngTelephoneUtils::AudioRoutingCanBeChanged: %d", + retValue ) + + return retValue; } @@ -55,6 +109,46 @@ // void CMusEngTelephoneUtils::LoudspeakerL( TBool aEnable, TBool aShowDialog ) { + MUS_LOG1( "mus: [ENGINE] -> CMusEngTelephoneUtils::LoudspeakerL(%d)", + aEnable ) + + if ( aEnable ) + { + if ( iTelephonyAudioRouting->Output() == + CTelephonyAudioRouting::EHandset ) + { + // Disable note shown by audiorouting api as it causes + // application going to background for a while. Instead, display + // note by ourselves once setting output completes. This mechanism + // is needed only for loudspeaker enabling as going to background + // causes problems only at beginning of sharing session. + if ( aShowDialog ) + { + iTelephonyAudioRouting->SetShowNote( EFalse ); + + iShowDialog = aShowDialog; + } + + DoSetOutputL( CTelephonyAudioRouting::ELoudspeaker ); + } + } + else + { + iTelephonyAudioRouting->SetShowNote( aShowDialog ); + + if ( iAudioOutputAtStartup == CTelephonyAudioRouting::ELoudspeaker ) + { + DoSetOutputL( CTelephonyAudioRouting::EHandset ); + } + else + { + DoSetOutputL( iAudioOutputAtStartup ); + } + } + + + + MUS_LOG( "mus: [ENGINE] <- CMusEngTelephoneUtils::LoudspeakerL(...)" ) } @@ -64,6 +158,8 @@ // TBool CMusEngTelephoneUtils::IsLoudSpeakerEnabled() const { + return ( iTelephonyAudioRouting->Output() == + CTelephonyAudioRouting::ELoudspeaker ); } @@ -74,6 +170,19 @@ // TInt CMusEngTelephoneUtils::GetVolumeL() const { + TInt currentVolume = 0; + if ( IsLoudSpeakerEnabled() ) + { + User::LeaveIfError( iRepository->Get( KTelIncallLoudspeakerVolume, + currentVolume ) ); + } + else + { + User::LeaveIfError( iRepository->Get( KTelIncallEarVolume, + currentVolume ) ); + } + + return ValidateVolume( currentVolume ); } @@ -84,6 +193,62 @@ // void CMusEngTelephoneUtils::SetVolumeL( TInt aVolume ) { + TInt newVolume = ValidateVolume( aVolume ); + + if ( GetVolumeL() != newVolume ) + { + if ( IsLoudSpeakerEnabled() ) + { + User::LeaveIfError( iRepository->Set( KTelIncallLoudspeakerVolume, + newVolume ) ); + } + else + { + User::LeaveIfError( iRepository->Set( KTelIncallEarVolume, + newVolume ) ); + } + } + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusEngTelephoneUtils::MuteMicL( TBool aMute ) + { + MUS_LOG1( "mus: [ENGINE] -> CMusEngTelephoneUtils::MuteMicL(%d)", aMute ) + + if ( IsActive() ) + { + MUS_LOG( "mus: [ENGINE] Cancel pending request" ) + Cancel(); + } + + iPhoneCommandHandler->MuteMicrophone( iStatus, aMute ); + SetActive(); + + MUS_LOG( "mus: [ENGINE] <- CMusEngTelephoneUtils::MuteMicL()" ) + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +TBool CMusEngTelephoneUtils::IsMicMutedL() + { + MUS_LOG( "mus: [ENGINE] -> CMusEngTelephoneUtils::IsMicMutedL()" ) + + TInt psVal; + User::LeaveIfError( RProperty::Get( KPSUidTelMicrophoneMuteStatus, + KTelMicrophoneMuteState, + psVal ) ); + + MUS_LOG1( "mus: [ENGINE] Mute status in PS is (%d)", psVal ) + MUS_LOG( "mus: [ENGINE] <- CMusEngTelephoneUtils::IsMicMutedL()" ) + + return ( psVal == EPSTelMicMuteOn ); } @@ -91,8 +256,122 @@ // // ----------------------------------------------------------------------------- // -CMusEngTelephoneUtils::CMusEngTelephoneUtils() +void CMusEngTelephoneUtils::SetAudioRoutingObserver( + MMusEngAudioRoutingObserver* aObserver ) + { + iAudioRoutingObserver = aObserver; + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusEngTelephoneUtils::RunL() + { + MUS_LOG( "mus: [ENGINE] -> CMusEngTelephoneUtils::RunL()" ) + + // NOP, since we really cannot do anything but log the result + MUS_LOG1( "mus: [ENGINE] Asynchronous call completed with code %d", + iStatus.Int() ) + + MUS_LOG( "mus: [ENGINE] <- CMusEngTelephoneUtils::RunL()" ) + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusEngTelephoneUtils::DoCancel() + { + MUS_LOG( "mus: [ENGINE] -> CMusEngTelephoneUtils::DoCancel()" ) + + if ( iPhoneCommandHandler ) + { + iPhoneCommandHandler->CancelAsyncRequest( EPhCltCommandMuteMic ); + } + + MUS_LOG( "mus: [ENGINE] <- CMusEngTelephoneUtils::DoCancel()" ) + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusEngTelephoneUtils::AvailableOutputsChanged( + CTelephonyAudioRouting& /*aTelephonyAudioRouting*/ ) + { + // NOP + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusEngTelephoneUtils::OutputChanged( + CTelephonyAudioRouting& aTelephonyAudioRouting ) { + MUS_LOG( "mus: [ENGINE] -> CMusEngTelephoneUtils::OutputChanged()" ) + + // Some other application has changed audio output routing. We consider + // this as a last will of a user and return to this state after sharing + + iAudioOutputAtStartup = aTelephonyAudioRouting.Output(); + + MUS_LOG1( "mus: [ENGINE] New audio routing is %d", iAudioOutputAtStartup ) + + if ( iAudioRoutingObserver ) + { + iAudioRoutingObserver->AudioRoutingChanged( EFalse ); + } + + MUS_LOG( "mus: [ENGINE] <- CMusEngTelephoneUtils::OutputChanged()" ) + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusEngTelephoneUtils::SetOutputComplete( + CTelephonyAudioRouting& /*aTelephonyAudioRouting*/, + TInt aError ) + { + MUS_LOG( "mus: [ENGINE] -> CMusEngTelephoneUtils::SetOutputComplete()" ) + + if ( aError == KErrNone && iAudioRoutingObserver ) + { + // If audio routing api didn't shown note and show dialog mode is on, + // we know that this completion is for such setoutput call for which + // we need to show the note. Show note mode is turned off only in that + // case. + TBool dialogShownByUs( EFalse ); + TBool dialogShownByAudioRouting( EFalse ); + aError = iTelephonyAudioRouting->GetShowNote( dialogShownByAudioRouting ); + if ( aError == KErrNone && !dialogShownByAudioRouting && iShowDialog ) + { + dialogShownByUs = iShowDialog; + iShowDialog = EFalse; + } + + iAudioRoutingObserver->AudioRoutingChanged( dialogShownByUs ); + } + + MUS_LOG( "mus: [ENGINE] <- CMusEngTelephoneUtils::SetOutputComplete()" ) + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +CMusEngTelephoneUtils::CMusEngTelephoneUtils() + : CActive( CActive::EPriorityStandard ) + { + iAudioOutputAtStartup = CTelephonyAudioRouting::ENotActive; } @@ -102,6 +381,23 @@ // void CMusEngTelephoneUtils::ConstructL() { + MUS_LOG( "mus: [ENGINE] -> CMusEngTelephoneUtils::ConstructL()" ) + + // Volume control + iRepository = CRepository::NewL( KCRUidInCallVolume ); + + // Audio routing control + iTelephonyAudioRouting = CTelephonyAudioRouting::NewL( *this ); + + iAudioOutputAtStartup = iTelephonyAudioRouting->Output(); + + // Phone + MUS_LOG( "mus: [ENGINE] Use static DLL" ) + iPhoneCommandHandler = CPhCltCommandHandler::NewL(); + + CActiveScheduler::Add( this ); + + MUS_LOG( "mus: [ENGINE] <- CMusEngTelephoneUtils::ConstructL()" ) } @@ -112,8 +408,38 @@ // TInt CMusEngTelephoneUtils::ValidateVolume( const TInt aVolume ) const { + if ( aVolume < KMusEngMinVolume ) + { + return KMusEngMinVolume; + } + else if ( aVolume > KMusEngMaxVolume ) + { + return KMusEngMaxVolume; + } + else + { + // NOP, to keep PC-Lint happy + } + + return aVolume; } +// ----------------------------------------------------------------------------- +// Set output if setting is currently allowed. +// ----------------------------------------------------------------------------- +// +void CMusEngTelephoneUtils::DoSetOutputL( + CTelephonyAudioRouting::TAudioOutput aAudioOutput ) + { + MUS_LOG( "mus: [ENGINE] -> CMusEngTelephoneUtils::DoSetOutputL()" ) + if ( iAudioRoutingObserver && !iAudioRoutingObserver->AudioRouteChangeAllowed() ) + { + MUS_LOG( "mus: [ENGINE] change not allowed!" ) + User::Leave( KErrAccessDenied ); + } + iTelephonyAudioRouting->SetOutputL( aAudioOutput ); + MUS_LOG( "mus: [ENGINE] <- CMusEngTelephoneUtils::DoSetOutputL()" ) + } diff -r 33a5d2bbf6fc -r 73a1feb507fb tsrc/musenginestub/src/musengtwowayrecvsession.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tsrc/musenginestub/src/musengtwowayrecvsession.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,540 @@ +/* +* 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: +* +*/ + + +// USER +#include "musengtwowayrecvsession.h" +#include "musengsessionobserver.h" +#include "musengreceivesessionobserver.h" +#include "musunittesting.h" +#include "musengmceutils.h" +#include "musenglogger.h" +#include "mussipprofilehandler.h" + +// SYSTEM +#include +#include +#include +#include +#include +#include +#include +#include + +const TInt KMusEngJitterBufferLength = 51; //Must be bigger than treshold +// Using following value increases treshold buffer to 1 second from +// default 100 ms +const TInt KMusEngJitterBufferTreshold = 50; + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +EXPORT_C CMusEngTwoWayRecvSession* CMusEngTwoWayRecvSession::NewL( + const TRect& aRemoteRect, + const TRect& aLocalRect, + MMusEngSessionObserver& aSessionObserver, + MMusEngReceiveSessionObserver& aReceiveSessionObserver ) + { + CMusEngTwoWayRecvSession* self = new( ELeave ) CMusEngTwoWayRecvSession( + aSessionObserver, + aReceiveSessionObserver, + aRemoteRect, + aLocalRect ); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + return self; + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +CMusEngTwoWayRecvSession::~CMusEngTwoWayRecvSession() + { + MUS_LOG( "mus: [ENGINE] -> CMusEngTwoWayRecvSession::~CMusEngTwoWayRecvSession()" ) + MUS_LOG( "mus: [ENGINE] <- CMusEngTwoWayRecvSession::~CMusEngTwoWayRecvSession()" ) + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusEngTwoWayRecvSession::EnableDisplayL( TBool aEnable ) + { + MUS_LOG1( "mus: [ENGINE] -> CMusEngTwoWayRecvSession::EnableDisplayL() %d", + aEnable ) + + __ASSERT_ALWAYS( iSession, User::Leave( KErrNotReady ) ); + + CMceDisplaySink* display = MusEngMceUtils::GetReceivingDisplayL( *iSession ); + MusEngMceUtils::DoEnableDisplayL( *display, aEnable ); + + CMceDisplaySink* vfDisplay = MusEngMceUtils::GetVfDisplay( *iSession ); + if ( vfDisplay ) + { + MusEngMceUtils::DoEnableDisplayL( *vfDisplay, aEnable ); + } + + MUS_LOG( "mus: [ENGINE] <- CMusEngTwoWayRecvSession::EnableDisplayL()") + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +CMusEngMceSession::TDisplayOrientation CMusEngTwoWayRecvSession::OrientationL() + { + MUS_LOG( "mus: [ENGINE] -> CMusEngTwoWayRecvSession::RotationL()" ) + + __ASSERT_ALWAYS( iSession, User::Leave( KErrNotReady ) ); + + CMceDisplaySink* display = MusEngMceUtils::GetReceivingDisplayL( *iSession ); + + TDisplayOrientation displayOrientation; + CMceDisplaySink::TRotation rotation( display->RotationL() ); + + MUS_LOG1( "mus: [ENGINE] MCE rotation is %d", rotation ) + + if ( rotation == CMceDisplaySink::ENone ) + { + displayOrientation = CMusEngMceSession::EPortrait; + } + else + { + displayOrientation = CMusEngMceSession::ELandscape; + } + + MUS_LOG1( "mus: [ENGINE] <- CMusEngTwoWayRecvSession::RotationL() %d", + displayOrientation ) + + return displayOrientation; + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusEngTwoWayRecvSession::SetOrientationL( TDisplayOrientation aOrientation ) + { + MUS_LOG1( "mus: [ENGINE] -> CMusEngTwoWayRecvSession::SetOrientationL() %d", + aOrientation ) + + __ASSERT_ALWAYS( iSession, User::Leave( KErrNotReady ) ); + + CMceDisplaySink* display = MusEngMceUtils::GetReceivingDisplayL( *iSession ); + + CMceDisplaySink* vfDisplay = MusEngMceUtils::GetVfDisplay( *iSession ); + + CMceDisplaySink::TRotation rotation = ( aOrientation == EPortrait ) ? + CMceDisplaySink::ENone : CMceDisplaySink::EClockwise90Degree; + + display->SetRotationL( rotation ); + if ( vfDisplay ) + { + vfDisplay->SetRotationL( rotation ); + } + + MUS_LOG( "mus: [ENGINE] <- CMusEngTwoWayRecvSession::SetOrientationL()" ) + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +EXPORT_C void CMusEngTwoWayRecvSession::SetRectsL( + const TRect& aRemoteRect, + const TRect& aLocalRect ) + { + MUS_LOG( "mus: [ENGINE] -> CMusEngTwoWayRecvSession::SetRectsL()" ) + + iLocalRect = aLocalRect; + iRect = aRemoteRect; + RectChangedL(); + + MUS_LOG( "mus: [ENGINE] <- CMusEngTwoWayRecvSession::SetRectsL()" ) + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +EXPORT_C void CMusEngTwoWayRecvSession::SetLocalRectL( const TRect& aLocalRect ) + { + MUS_LOG( "mus: [ENGINE] -> CMusEngTwoWayRecvSession::SetLocalRectL()" ) + + iLocalRect = aLocalRect; + RectChangedL(); + + MUS_LOG( "mus: [ENGINE] <- CMusEngTwoWayRecvSession::SetLocalRectL()" ) + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +EXPORT_C TRect CMusEngTwoWayRecvSession::LocalRect() const + { + MUS_LOG( "mus: [ENGINE] -> CMusEngTwoWayRecvSession::LocalRect()" ) + MUS_LOG( "mus: [ENGINE] <- CMusEngTwoWayRecvSession::LocalRect()" ) + return iLocalRect; + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +EXPORT_C TMusEngCameraHandler& CMusEngTwoWayRecvSession::Camera() + { + return iCameraHandler; + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// + +void CMusEngTwoWayRecvSession::RectChangedL() + { + MUS_LOG( "mus: [ENGINE] -> CMusEngTwoWayRecvSession::RectChangedL()" ) + + + // If session is not yet created, do nothing + if ( iSession && iSession->State() != CMceSession::ETerminated ) + { + TRect remoteRect( Rect() ); + MUS_LOG2( "mus: [ENGINE] remote tl.ix=%d tl.iy=%d", + remoteRect.iTl.iX, remoteRect.iTl.iY ) + MUS_LOG2( "mus: [ENGINE] remote brc%d br.iy=%d", + remoteRect.iBr.iX, remoteRect.iBr.iY ) + MUS_LOG2( "mus: [ENGINE] local tl.ix=%d tl.iy=%d", + iLocalRect.iTl.iX, iLocalRect.iTl.iY ) + MUS_LOG2( "mus: [ENGINE] local br.ix=%d br.iy=%d", + iLocalRect.iBr.iX, iLocalRect.iBr.iY ) + + CMceDisplaySink* display = MusEngMceUtils::GetReceivingDisplayL( *iSession ); + display->SetDisplayRectL( remoteRect ); + + CMceDisplaySink* vfDisplay = MusEngMceUtils::GetVfDisplay( *iSession ); + if ( vfDisplay ) + { + vfDisplay->SetDisplayRectL( iLocalRect ); + } + } + + MUS_LOG( "mus: [ENGINE] <- CMusEngTwoWayRecvSession::RectChangedL()" ) + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusEngTwoWayRecvSession::CompleteSessionStructureL() + { + MUS_LOG( "mus: [ENGINE] -> CMusEngTwoWayRecvSession::CompleteSessionStructureL()" ) + + __ASSERT_ALWAYS( iSession, User::Leave( KErrNotReady ) ); + + iCameraHandler.SetSession( iSession ); + + // Force bandwidth line usage in sdp as it is mandatory + // at MT side based on GSMA VS specification IR.74. Bandwidth is set to + // session or to media level based on sender's way of usage. If other end + // is not using bandwidth attribute at all, media level is preferred. + SetSessionSdpLinesL( *iSession, ETrue ); + + CMceStreamBundle* localBundle = + CMceStreamBundle::NewLC( CMceStreamBundle::ELS ); + + const RPointerArray& streams = iSession->Streams(); + + CMceMediaStream* videoInStream = NULL; + CMceMediaStream* videoOutStream = NULL; + + // Search interesting video streams, sendrecv is preferred + TBool sendRecvVideoFound( EFalse ); + for( TInt i = 0; i < streams.Count(); ++i ) + { + if ( MusEngMceUtils::IsVideoInStream( *streams[i] ) && + !sendRecvVideoFound ) + { + videoInStream = streams[i]; + + if ( streams[i]->BoundStream() ) + { + videoOutStream = &streams[i]->BoundStreamL(); + } + } + else if ( streams[i]->BoundStream() && + MusEngMceUtils::IsVideoInStream( streams[i]->BoundStreamL() ) && + !sendRecvVideoFound ) + { + videoInStream = &streams[i]->BoundStreamL(); + + videoOutStream = streams[i]; + } + else + { + // NOP + } + + sendRecvVideoFound = ( videoInStream && videoOutStream ); + } + + CompleteSessionStructureAudioPartL( streams, *localBundle, videoInStream, videoOutStream ); + + if ( videoInStream ) + { + CompleteSessionStructureInStreamL( *videoInStream, *localBundle ); + } + else + { + // At least receiving video stream is required + User::Leave( KErrCorrupt ); + } + + if ( videoOutStream ) + { + CompleteSessionStructureOutStreamL( *videoOutStream ); + } + + // Destroy bundle if it is not needed or transfer ownership + if ( localBundle->Streams().Count() > 1 ) + { + iSession->AddBundleL( localBundle ); + CleanupStack::Pop( localBundle ); + } + else + { + CleanupStack::PopAndDestroy( localBundle ); + } + + AdjustStreamsAndCodecsL(); + + iSession->UpdateL(); + + // Now session state is right to adjust volume + SetSpeakerVolumeL( VolumeL() ); + + iSipProfileHandler->CreateProfileL( iSession->Profile() ); + + MUS_LOG( "mus: [ENGINE] <- CMusEngTwoWayRecvSession::CompleteSessionStructureL()" ) + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusEngTwoWayRecvSession::StreamStateChanged( CMceMediaStream& aStream, + CMceMediaSink& aSink ) + { + MUS_LOG( "mus: [ENGINE] -> CMusEngTwoWayRecvSession::StreamStateChanged( sink )" ) + if ( !iSession ) + { + return; + } + + MUS_ENG_LOG_STREAM_STATE( aStream ) + + // TODO: if display sink buffers, inform ui with some callback + // so that it can modify display rects accordingly + + CMusEngMceSession::StreamStateChanged( aStream, aSink ); + + MUS_LOG( "mus: [ENGINE] <- CMusEngTwoWayRecvSession::StreamStateChanged( sink )" ) + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusEngTwoWayRecvSession::StreamStateChanged( CMceMediaStream& aStream ) + { + MUS_LOG( "mus: [ENGINE] -> CMusEngTwoWayRecvSession::StreamStateChanged()" ) + if ( !iSession ) + { + return; + } + + MUS_ENG_LOG_STREAM_STATE( aStream ) + + // TODO: if receiving video stream buffers, inform ui with some callback + // so that it can modify display rects accordingly + + CMusEngReceiveSession::StreamStateChanged( aStream ); + + MUS_LOG( "mus: [ENGINE] <- CMusEngTwoWayRecvSession::StreamStateChanged()" ) + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +CMusEngTwoWayRecvSession::CMusEngTwoWayRecvSession( + MMusEngSessionObserver& aSessionObserver, + MMusEngReceiveSessionObserver& aReceiveSessionObserver, + const TRect& aRemoteRect, + const TRect& aLocalRect ) : + CMusEngReceiveSession( aSessionObserver, + aReceiveSessionObserver, + aRemoteRect ), + iLocalRect( aLocalRect ) + { + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusEngTwoWayRecvSession::ConstructL() + { + MUS_LOG( "mus: [ENGINE] -> CMusEngTwoWayRecvSession::ConstructL()" ) + + iCameraHandler.ReadCameraUsageKeyL(); + CMusEngReceiveSession::ConstructL(); + + MUS_LOG( "mus: [ENGINE] <- CMusEngTwoWayRecvSession::ConstructL()" ) + } + +// ----------------------------------------------------------------------------- +// When checking audio streams also not interesting streams are removed from +// session. Stream if removed if one of following apply: +// 1. Is not and does not contain incoming video or audio +// 2. We already have one incoming video stream +// 3. Stream is audio and we run operator variant where audio is +// not allowed. +// 4. Two-way video exists and this one is audio +// ----------------------------------------------------------------------------- +// +void CMusEngTwoWayRecvSession::CompleteSessionStructureAudioPartL( + const RPointerArray& aStreams, + CMceStreamBundle& aLocalBundle, + CMceMediaStream* aVideoInStream, + CMceMediaStream* aVideoOutStream ) + { + MUS_LOG( "mus: [ENGINE] -> CMusEngTwoWayRecvSession::CompleteSessionStructureAudioPartL()" ) + + // Audio streams not allowed in two-way session or in operator variant + TBool audioAllowed( !( aVideoInStream && aVideoOutStream ) && !iOperatorVariant ); + + for( TInt i = 0; i < aStreams.Count(); ++i ) + { + // Audio supported currently only in recvonly case + if ( audioAllowed && + MusEngMceUtils::IsAudioInStream( *aStreams[i] ) ) + { + MusEngMceUtils::AddSpeakerL( *aStreams[i] ); + + aLocalBundle.AddStreamL( *aStreams[i] ); + + // Disable possible opposite stream to indicate that sendrecv audio is + // not allowed. + if ( aStreams[i]->BoundStream() ) + { + MusEngMceUtils::DisableStreamL( aStreams[i]->BoundStreamL() ); + } + } + else if ( audioAllowed && + aStreams[i]->BoundStream() && + MusEngMceUtils::IsAudioInStream( aStreams[i]->BoundStreamL() ) ) + { + MusEngMceUtils::AddSpeakerL( aStreams[i]->BoundStreamL() ); + + aLocalBundle.AddStreamL( aStreams[i]->BoundStreamL() ); + + // Disable opposite stream to indicate that sendrecv audio is not allowed. + MusEngMceUtils::DisableStreamL( *aStreams[i] ); + } + else if ( aStreams[ i ] != aVideoInStream && aStreams[ i ] != aVideoOutStream ) + { + iSession->RemoveStreamL( *aStreams[i] ); + + // Since succesfull removal of a stream has decreased the amount + // of streams in array by one, we have to modify the index + --i; + } + else + { + // NOP + } + } + + MUS_LOG( "mus: [ENGINE] <- CMusEngTwoWayRecvSession::CompleteSessionStructureAudioPartL()" ) + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusEngTwoWayRecvSession::CompleteSessionStructureInStreamL( + CMceMediaStream& aVideoInStream, CMceStreamBundle& aLocalBundle ) + { + MUS_LOG( "mus: [ENGINE] -> CMusEngTwoWayRecvSession::CompleteSessionStructureInStreamL()" ) + + SetMediaSdpLinesL( aVideoInStream, ETrue ); + + MusEngMceUtils::AddDisplayL( aVideoInStream, *iManager, Rect() ); + + static_cast(aVideoInStream.Source())->UpdateL( + KMusEngJitterBufferLength, + KMusEngJitterBufferTreshold ); + + aLocalBundle.AddStreamL( aVideoInStream ); + + MUS_LOG( "mus: [ENGINE] <- CMusEngTwoWayRecvSession::CompleteSessionStructureInStreamL()" ) + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusEngTwoWayRecvSession::CompleteSessionStructureOutStreamL( + CMceMediaStream& aVideoOutStream ) + { + MUS_LOG( "mus: [ENGINE] -> CMusEngTwoWayRecvSession::CompleteSessionStructureOutStreamL()" ) + + SetMediaSdpLinesL( aVideoOutStream, ETrue ); + + CMceCameraSource* camera = NULL; + TRAP_IGNORE( camera = MusEngMceUtils::GetCameraL( *iSession ) ) + if ( !camera ) + { + camera = CMceCameraSource::NewLC( *iManager ); + aVideoOutStream.SetSourceL( camera ); + CleanupStack::Pop( camera ); + } + + camera->DisableL(); // Start session in pause mode. + + iCameraHandler.InitializeL( *camera ); + + CMceVideoStream* vfStream = CMceVideoStream::NewLC(); + + vfStream->SetSourceL( aVideoOutStream.Source() ); + + // Complete stream + MusEngMceUtils::AddDisplayL( *vfStream, *iManager, LocalRect() ); + + iSession->AddStreamL( vfStream ); + CleanupStack::Pop( vfStream ); + + MUS_LOG( "mus: [ENGINE] <- CMusEngTwoWayRecvSession::CompleteSessionStructureOutStreamL()" ) + } + +// End of file diff -r 33a5d2bbf6fc -r 73a1feb507fb tsrc/musenginestub/src/musengtwowaysession.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tsrc/musenginestub/src/musengtwowaysession.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,476 @@ +/* +* 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: +* +*/ + + +// USER +#include "musengtwowaysession.h" +#include "musengsessionobserver.h" +#include "musenglivesessionobserver.h" +#include "musunittesting.h" +#include "musengmceutils.h" +#include "musenglogger.h" +#include "musengtwowaysessionobserver.h" + +// SYSTEM +#include +#include +#include +#include +#include +#include +#include + +const TInt KMusEngJitterBufferLength = 51; //Must be bigger than treshold +// Using following value increases treshold buffer to 1 second from +// default 100 ms +const TInt KMusEngJitterBufferTreshold = 50; + +const TUint32 KMusEngTwoWayReceivingActivityTimeout = 3000; // 3 seconds + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +EXPORT_C CMusEngTwoWaySession* CMusEngTwoWaySession::NewL( + const TRect& aRemoteRect, + const TRect& aLocalRect, + MMusEngSessionObserver& aSessionObserver, + MMusEngOutSessionObserver& aOutSessionObserver, + MMusEngLiveSessionObserver& aLiveSessionObserver, + MMusEngTwoWaySessionObserver& aTwoWayObserver ) + { + CMusEngTwoWaySession* self = new( ELeave ) CMusEngTwoWaySession( + aSessionObserver, + aOutSessionObserver, + aLiveSessionObserver, + aTwoWayObserver, + aRemoteRect, + aLocalRect ); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + return self; + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +CMusEngTwoWaySession::~CMusEngTwoWaySession() + { + MUS_LOG( "mus: [ENGINE] -> CMusEngTwoWaySession::~CMusEngTwoWaySession()" ) + MUS_LOG( "mus: [ENGINE] <- CMusEngTwoWaySession::~CMusEngTwoWaySession()" ) + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusEngTwoWaySession::EnableDisplayL( TBool aEnable ) + { + MUS_LOG1( "mus: [ENGINE] -> CMusEngTwoWaySession::EnableDisplayL() %d", + aEnable ) + + __ASSERT_ALWAYS( iSession, User::Leave( KErrNotReady ) ); + + CMceDisplaySink* display = MusEngMceUtils::GetReceivingDisplay( *iSession ); + if ( display ) + { + MusEngMceUtils::DoEnableDisplayL( *display, aEnable ); + } + CMceDisplaySink* vfDisplay = MusEngMceUtils::GetDisplayL( *iSession, ETrue ); + MusEngMceUtils::DoEnableDisplayL( *vfDisplay, aEnable ); + + MUS_LOG( "mus: [ENGINE] <- CMusEngTwoWaySession::EnableDisplayL()") + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusEngTwoWaySession::SetOrientationL( TDisplayOrientation aOrientation ) + { + MUS_LOG1( "mus: [ENGINE] -> CMusEngTwoWaySession::SetOrientationL() %d", + aOrientation ) + + __ASSERT_ALWAYS( iSession, User::Leave( KErrNotReady ) ); + + CMceDisplaySink* display = MusEngMceUtils::GetReceivingDisplay( *iSession ); + CMceDisplaySink* vfDisplay = MusEngMceUtils::GetDisplayL( *iSession, ETrue ); + + CMceDisplaySink::TRotation rotation = ( aOrientation == EPortrait ) ? + CMceDisplaySink::ENone : CMceDisplaySink::EClockwise90Degree; + + vfDisplay->SetRotationL( rotation ); + if ( display ) + { + display->SetRotationL( rotation ); + } + + MUS_LOG( "mus: [ENGINE] <- CMusEngTwoWaySession::SetOrientationL()" ) + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusEngTwoWaySession::RecordL( TBool aRecord ) + { + MUS_LOG1( "mus: [ENGINE] -> CMusEngTwoWaySession::RecordL( %d )", aRecord ) + + User::Leave( KErrNotSupported ); + + MUS_LOG1( "mus: [ENGINE] <- CMusEngTwoWaySession::RecordL( %d )", aRecord ) + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +TBool CMusEngTwoWaySession::IsRecording() + { + MUS_LOG( "mus: [ENGINE] -> CMusEngTwoWaySession::IsRecording()" ) + + return EFalse; + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +EXPORT_C void CMusEngTwoWaySession::SetRectsL( + const TRect& aRemoteRect, + const TRect& aLocalRect ) + { + MUS_LOG( "mus: [ENGINE] -> CMusEngTwoWaySession::SetRectsL()" ) + + iLocalRect = aLocalRect; + iRect = aRemoteRect; + RectChangedL(); + + MUS_LOG( "mus: [ENGINE] <- CMusEngTwoWaySession::SetRectsL()" ) + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +EXPORT_C void CMusEngTwoWaySession::SetLocalRectL( const TRect& aLocalRect ) + { + MUS_LOG( "mus: [ENGINE] -> CMusEngTwoWaySession::SetLocalRectL()" ) + + iLocalRect = aLocalRect; + RectChangedL(); + + MUS_LOG( "mus: [ENGINE] <- CMusEngTwoWaySession::SetLocalRectL()" ) + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +EXPORT_C TRect CMusEngTwoWaySession::LocalRect() const + { + MUS_LOG( "mus: [ENGINE] -> CMusEngTwoWaySession::LocalRect()" ) + MUS_LOG( "mus: [ENGINE] <- CMusEngTwoWaySession::LocalRect()" ) + return iLocalRect; + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusEngTwoWaySession::RectChangedL() + { + MUS_LOG( "mus: [ENGINE] -> CMusEngTwoWaySession::RectChangedL()" ) + + // If session is not yet created, do nothing + if ( iSession && iSession->State() != CMceSession::ETerminated ) + { + TRect remoteRect( Rect() ); + MUS_LOG2( "mus: [ENGINE] remote tl.ix=%d tl.iy=%d", + remoteRect.iTl.iX, remoteRect.iTl.iY ) + MUS_LOG2( "mus: [ENGINE] remote br.ix=%d br.iy=%d", + remoteRect.iBr.iX, remoteRect.iBr.iY ) + MUS_LOG2( "mus: [ENGINE] local tl.ix=%d tl.iy=%d", + iLocalRect.iTl.iX, iLocalRect.iTl.iY ) + MUS_LOG2( "mus: [ENGINE] local br.ix=%d br.iy=%d", + iLocalRect.iBr.iX, iLocalRect.iBr.iY ) + + CMceDisplaySink* display = MusEngMceUtils::GetReceivingDisplay( *iSession ); + if ( display ) + { + display->SetDisplayRectL( remoteRect ); + } + CMceDisplaySink* vfDisplay = MusEngMceUtils::GetDisplayL( *iSession, ETrue ); + vfDisplay->SetDisplayRectL( iLocalRect ); + } + + MUS_LOG( "mus: [ENGINE] <- CMusEngTwoWaySession::RectChangedL()" ) + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusEngTwoWaySession::CompleteSessionStructureL( + CMceStreamBundle& /*aLocalBundle*/ ) + { + MUS_LOG( "mus: [ENGINE] -> CMusEngTwoWaySession::CompleteSessionStructureL()" ) + + __ASSERT_ALWAYS( iSession, User::Leave( KErrNotReady ) ); + + iCameraHandler.SetSession( iSession ); + + // Create outgoing video stream + CMceVideoStream* videoStream = CMceVideoStream::NewLC(); + + CMceRtpSink* rtpsink = CMceRtpSink::NewLC(); + videoStream->AddSinkL( rtpsink ); + CleanupStack::Pop( rtpsink ); + + CMceCameraSource* camera = CMceCameraSource::NewLC( *iManager ); + camera->DisableL(); // Start session in pause mode. + + iCameraHandler.InitializeL( *camera ); + + videoStream->SetSourceL( camera ); + CleanupStack::Pop( camera ); + + // Create incoming video stream + CMceVideoStream* videoInStream = CMceVideoStream::NewL(); + CleanupStack::PushL( videoInStream ); + + MusEngMceUtils::AddDisplayL( *videoInStream, *iManager, Rect() ); + + CMceRtpSource* rtpSource = CMceRtpSource::NewLC( KMusEngJitterBufferLength, + KMusEngJitterBufferTreshold ); + videoInStream->SetSourceL( rtpSource ); + CleanupStack::Pop( rtpSource ); + + videoStream->BindL( videoInStream ); + CleanupStack::Pop( videoInStream ); + + iSession->AddStreamL( videoStream ); + CleanupStack::Pop( videoStream ); + + MUS_LOG( "mus: [ENGINE] <- CMusEngTwoWaySession::CompleteSessionStructureL()" ) + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusEngTwoWaySession::AddDisplayL( CMceMediaStream& aStream ) + { + MusEngMceUtils::AddDisplayL( aStream, + *iManager, + iLocalRect ); + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusEngTwoWaySession::StreamStateChanged( CMceMediaStream& aStream ) + { + MUS_LOG( "mus: [ENGINE] -> CMusEngTwoWaySession::StreamStateChanged()" ) + if ( !iSession ) + { + return; + } + + MUS_ENG_LOG_STREAM_STATE( aStream ) + + if ( aStream.Type() == KMceVideo && + aStream.Source() && + aStream.Source()->Type() == KMceRTPSource ) + { + if ( aStream.State() == CMceMediaStream::EStreaming ) + { + ReceivingStarted(); + } + else if ( aStream.State() == CMceMediaStream::EBuffering ) + { + iBuffered = ETrue; + } + } + + CMusEngMceSession::StreamStateChanged( aStream ); + + MUS_LOG( "mus: [ENGINE] <- CMusEngTwoWaySession::StreamStateChanged()" ) + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusEngTwoWaySession::InactivityTimeout( CMceMediaStream& aStream, + CMceRtpSource& /*aSource*/ ) + { + MUS_LOG( "mus: [ENGINE] -> CMusEngTwoWaySession::InactivityTimeout()" ) + + if ( aStream.Type() == KMceVideo ) + { + ReceivingStopped(); + } + + MUS_LOG( "mus: [ENGINE] <- CMusEngTwoWaySession::InactivityTimeout()" ) + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusEngTwoWaySession::HandleSessionStateChanged( + CMceSession& aSession, + TInt aStatusCode, + const TDesC8& aReasonPhrase ) + { + MUS_LOG( "mus: [ENGINE] -> CMusEngTwoWaySession::HandleSessionStateChanged" ) + + MUS_ENG_LOG_SESSION_STATE_AND_STATUS( aSession, aStatusCode, aReasonPhrase ) + + TBool consumed( EFalse ); + if ( iSession && + iSession == &aSession && + aSession.State() == CMceSession::EEstablished ) + { + // TODO: if receiving stream is disabled, inform ui with some callback + // that it can modify display rects accordingly and continue with + // session. + CMceVideoStream* stream = NULL; + CMceVideoStream* streamout = NULL; + TRAPD( err, stream = MusEngMceUtils::GetVideoInStreamL( *iSession ) ); + TRAPD( errout, streamout = MusEngMceUtils::GetVideoOutStreamL( *iSession ) ); + if ( err == KErrNone && stream && stream->IsEnabled() ) + { + if ( errout != KErrNone || !streamout || !streamout->IsEnabled() ) + { + MUS_LOG( "mus: [ENGINE] sendrecv downgraded to recvonly, terminate!" ) + consumed = ETrue; + iSessionObserver.SessionFailed(); + } + } + else + { + if ( errout == KErrNone && streamout && streamout->IsEnabled() ) + { + MUS_LOG( "mus: [ENGINE] sendrecv downgraded to sendonly, continue!" ) + } + } + } + + if ( !consumed ) + { + CMusEngLiveSession::HandleSessionStateChanged( aSession, + aStatusCode, + aReasonPhrase ); + } + MUS_LOG( "mus: [ENGINE] <- CMusEngTwoWaySession::HandleSessionStateChanged" ) + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +CMusEngTwoWaySession::CMusEngTwoWaySession( + MMusEngSessionObserver& aSessionObserver, + MMusEngOutSessionObserver& aOutSessionObserver, + MMusEngLiveSessionObserver& aLiveSessionObserver, + MMusEngTwoWaySessionObserver& aTwoWayObserver, + const TRect& aRemoteRect, + const TRect& aLocalRect ) : + CMusEngLiveSession( aSessionObserver, + aOutSessionObserver, + aLiveSessionObserver, + aRemoteRect, + KNullDesC ), + iTwoWayObserver( aTwoWayObserver ), + iLocalRect( aLocalRect ) + { + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusEngTwoWaySession::ConstructL() + { + MUS_LOG( "mus: [ENGINE] -> CMusEngTwoWaySession::ConstructL()" ) + + CMusEngLiveSession::ConstructL(); + + MUS_LOG( "mus: [ENGINE] <- CMusEngTwoWaySession::ConstructL()" ) + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusEngTwoWaySession::ReceivingStarted() + { + if ( iSession && !iReceiving && iBuffered ) + { + MUS_LOG( "mus: [ENGINE] -> CMusEngTwoWaySession::ReceivingStarted()" ) + + TInt err( KErrNone ); + CMceMediaSource* source = NULL; + TRAP( err, source = + MusEngMceUtils::GetVideoInStreamL( *iSession )->Source() ); + if ( source && source->Type() == KMceRTPSource ) + { + CMceRtpSource* rtpSource = static_cast( source ); + TRAP( err, rtpSource->EnableInactivityTimerL( + KMusEngTwoWayReceivingActivityTimeout ) ) + } + + if ( err != KErrNone ) + { + MUS_LOG1("mus: [ENGINE] ReceivingStarted failed %d", err) + iSessionObserver.SessionFailed(); + } + else + { + iReceiving = ETrue; + iTwoWayObserver.ReceivingStateChanged( ETrue ); + } + + MUS_LOG( "mus: [ENGINE] <- CMusEngTwoWaySession::ReceivingStarted()" ) + } + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusEngTwoWaySession::ReceivingStopped() + { + if ( iReceiving ) + { + MUS_LOG( "mus: [ENGINE] -> CMusEngTwoWaySession::ReceivingStopped()" ) + + iReceiving = EFalse; + iTwoWayObserver.ReceivingStateChanged( EFalse ); + + MUS_LOG( "mus: [ENGINE] <- CMusEngTwoWaySession::ReceivingStopped()" ) + } + } + +// End of file diff -r 33a5d2bbf6fc -r 73a1feb507fb tsrc/musenginestub/src/musenguriparser.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tsrc/musenginestub/src/musenguriparser.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,281 @@ +/* +* Copyright (c) 2005-2006 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: Parser for recipient's address +* +*/ + + +#include "musenguriparser.h" +#include "mussettings.h" +#include "muslogger.h" + +#include +#include +//#include +#include +#include + + +// ============================ MEMBER FUNCTIONS =============================== + + +// ----------------------------------------------------------------------------- +// UTF7 is not working, since it converts + as +- +// ----------------------------------------------------------------------------- +// +EXPORT_C TMusEngUriParser::TMusEngUriParser( const TDesC16& aUri ) + :iUriType( ENotParsed ) + { + TBuf8 buf; + + if ( CnvUtfConverter::ConvertFromUnicodeToUtf8( buf, aUri ) == 0 ) + { + iUri = buf; + } + else + { + iUri = KNullDesC8(); + } + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +EXPORT_C TMusEngUriParser::TMusEngUriType TMusEngUriParser::UriType() + { + return iUriType; + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +EXPORT_C HBufC8* TMusEngUriParser::GetUri8L() + { + MUS_LOG( "mus: [ENGINE] -> TMusEngUriParser::GetUri8L()" ) + + __ASSERT_ALWAYS( UriType() != TMusEngUriParser::ENotParsed, + User::Leave( KErrNotReady ) ); + + HBufC8* uri8 = iUri.AllocL(); + + MUS_LOG( "mus: [ENGINE] <- TMusEngUriParser::GetUri8L()" ) + + return uri8; + + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +EXPORT_C HBufC16* TMusEngUriParser::GetUri16L( TBool aPrefix ) + { + MUS_LOG( "mus: [ENGINE] -> TMusEngUriParser::GetUri16L()" ) + + __ASSERT_ALWAYS( UriType() != TMusEngUriParser::ENotParsed, + User::Leave( KErrNotReady ) ); + + HBufC16* uri16 = NULL; + + if ( aPrefix ) + { + uri16 = CnvUtfConverter::ConvertToUnicodeFromUtf8L( iUri ); + } + else + { + uri16 = CnvUtfConverter::ConvertToUnicodeFromUtf8L( + iUri.Mid( KMusEngTelPrefix().Length() ) ); + } + + MUS_LOG( "mus: [ENGINE] <- TMusEngUriParser::GetUri16L()" ) + + return uri16; + + } + + +// ----------------------------------------------------------------------------- +// +// +// ----------------------------------------------------------------------------- +// +EXPORT_C void TMusEngUriParser::ParseUriL() + { + MUS_LOG( "mus: [ENGINE] -> TMusEngUriParser::ParseUriL()" ) + + if ( iUri.Find( KMusEngAtSign ) >= 0 ) // Sip uri + { + HandleSipUriL(); + } + else if ( iUri.Find( KMusEngPlusSign ) >= 0 ) // Tel uri + { + HandleTelUriL(); + } + else + { + // check for variant + if ( MultimediaSharingSettings::OperatorVariantSettingL() + != MusSettingsKeys::EOperatorSpecific ) + {// basic behaviour + MUS_LOG( "mus: [ENGINE] -> TMusEngUriParser::ParseUriL() \ + normal behaviour" ) + User::Leave( KErrCorrupt ); + } + else + { // variant behaviour(local tel uri) + HandleLocalTelUriL(); + } + } + } + + +// ----------------------------------------------------------------------------- +// +// +// ----------------------------------------------------------------------------- +// +void TMusEngUriParser::HandleSipUriL() + { + if ( iUri.FindF( KMusEngTelPrefix() ) == 0 ) + { + // SIP uri with prefix "tel:" + User::Leave( KErrCorrupt ); + } + else if ( iUri.FindF( KMusEngSipPrefix() ) != 0 ) + { + // SIP uri without prefix + if ( iUri.Length() + KMusEngSipPrefix().Length() <= + KMaxUriLength ) + { + iUri.Insert( 0, KMusEngSipPrefix() ); + } + else + { + User::Leave( KErrCorrupt ); + } + } + else + { + // SIP uri with prefix + iUri.Replace( 0, KMusEngSipPrefix().Length(), KMusEngSipPrefix() ); + } + + TUriParser8 parser; + + User::LeaveIfError( parser.Parse( iUri ) ); + + User::LeaveIfError( parser.Validate() ); + + iUriType = TMusEngUriParser::ESip; + } + + + + +// ----------------------------------------------------------------------------- +// +// +// ----------------------------------------------------------------------------- +// +void TMusEngUriParser::HandleTelUriL() + { + if ( iUri.FindF( KMusEngTelPrefix() ) != 0 ) + { + // Tel uri without prefix + if ( iUri.Length() + KMusEngTelPrefix().Length() <= + KMaxUriLength ) + { + iUri.Insert( 0, KMusEngTelPrefix() ); + } + else + { + User::Leave( KErrCorrupt ); + } + } + else + { + //Tel uri with prefix + iUri.Replace( 0, KMusEngTelPrefix().Length(), KMusEngTelPrefix() ); + } + + TInt index = KMusEngTelPrefix().Length() + KMusEngPlusSign().Length(); + + while ( index < iUri.Length() ) + { + TChar character = iUri[ index ]; + if ( !character.IsDigit() ) + { + User::Leave( KErrCorrupt ); + } + ++index; + } + + iUriType = TMusEngUriParser::ETel; + } + + +// ----------------------------------------------------------------------------- +// +// +// ----------------------------------------------------------------------------- +// +void TMusEngUriParser::HandleLocalTelUriL() + { + MUS_LOG( "mus: [ENGINE] -> TMusEngUriParser::ParseUriL() \ + variant behaviour" ) + if ( iUri.FindF( KMusEngTelPrefix() ) != 0 ) + { + // local tel uri without prefix + if ( iUri.Length() + KMusEngTelPrefix().Length() <= + KMaxUriLength ) + { + iUri.Insert( 0, KMusEngTelPrefix() ); + } + else + { + User::Leave( KErrCorrupt ); + } + } + else + { + //Tel uri with prefix + iUri.Replace( + 0, + KMusEngTelPrefix().Length(), + KMusEngTelPrefix() ); + } + + TInt index = KMusEngTelPrefix().Length(); + + // check if all chars are digits + while ( index < iUri.Length() ) + { + TChar character = iUri[ index ]; + if ( !character.IsDigit() ) + { + User::Leave( KErrCorrupt ); + } + ++index; + } + + iUriType = TMusEngUriParser::ETel; + } + + +// End of file diff -r 33a5d2bbf6fc -r 73a1feb507fb tsrc/musenginestub/src/mussipprofilehandler.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tsrc/musenginestub/src/mussipprofilehandler.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,448 @@ +/* +* Copyright (c) 2005-2006 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: Utilities to get and set profile used with SWIS. +* Part of : Mus For S60 v3.2 +* Description : Utilities to get and set profile used with SWIS. +* Version : %version: 1 % << Don't touch! Updated by Synergy at check-out. +* +*/ + + +// USER +#include "mussipprofilehandler.h" +#include "musuid.hrh" +#include "muslogger.h" +#include "mussipprofileuser.h" + +// SYSTEM +#include +#include +#include +#include +#include +#include +#include + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +CMusSipProfileHandler* CMusSipProfileHandler::NewL( MMusSipProfileUser& aUser ) + { + CMusSipProfileHandler* self = + new (ELeave) CMusSipProfileHandler( aUser ); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self); + return self; + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +CMusSipProfileHandler::CMusSipProfileHandler( MMusSipProfileUser& aUser ) + : iUser( aUser ) + { + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusSipProfileHandler::ConstructL() + { + MUS_LOG( "mus: [ENGINE] -> CMusSipProfileHandler::ConstructL()" ) + + // Use NULL Uid since we do not want to receive any requests. + // All requests should be handled by MCE. + iSip = CSIP::NewL( TUid::Null(), *this ); + iProfileRegistry = CSIPProfileRegistry::NewL( *iSip, *this ); + iProfileAlrController = + CSipProfileAlrController::NewL( *iProfileRegistry , *this ); + + MUS_LOG( "mus: [ENGINE] <- CMusSipProfileHandler::ConstructL()" ) + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +CMusSipProfileHandler::~CMusSipProfileHandler() + { + delete iProfileAlrController; + delete iSipProfile; + delete iProfileRegistry; + delete iSip; + MUS_LOG( "mus: [ENGINE] CMusSipProfileHandler::~CMusSipProfileHandler()" ) + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusSipProfileHandler::CreateProfileL( TUint32 aSipProfileId ) + { + CSIPProfile* profile( NULL ); + if ( aSipProfileId != 0 ) + { + profile = iProfileRegistry->ProfileL( aSipProfileId ); + } + else + { + profile = iProfileRegistry->DefaultProfileL(); + } + + delete iSipProfile; + iSipProfile = profile; + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +CSIPProfile* CMusSipProfileHandler::Profile() + { + return iSipProfile; + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +CUri8* CMusSipProfileHandler::UserFromProfileLC() + { + MUS_LOG( "mus: [ENGINE] -> CMusSipProfileHandler::UserFromProfileLC()" ); + + __ASSERT_ALWAYS( iSipProfile != NULL, User::Leave( KErrNotReady ) ); + + const MDesC8Array* aors = NULL; + User::LeaveIfError( iSipProfile->GetParameter( KSIPRegisteredAors, aors ) ); + __ASSERT_ALWAYS( aors && aors->MdcaCount() > 0, + User::Leave( KErrArgument ) ); + + TUriParser8 parser; + User::LeaveIfError( parser.Parse( aors->MdcaPoint( 0 ) ) ); + MUS_LOG( "mus: [ENGINE] <- CMusSipProfileHandler::UserFromProfileLC()" ) + + return CUri8::NewLC( parser ); + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusSipProfileHandler::RefreshIapAvailabilities() + { + TRAP_IGNORE( iProfileAlrController->RefreshIapAvailabilityL( ProfileId() ) ) + } + + +// ----------------------------------------------------------------------------- +// This function should never be called before creating a profile, but such +// a situation will be considered as pending registration. +// ----------------------------------------------------------------------------- +// +TBool CMusSipProfileHandler::IsRegistered() + { + MUS_LOG( "mus: [ENGINE] -> CMusSipProfileHandler::IsRegistered()" ) + + TBool profileRegistered = EFalse; + if ( iSipProfile ) + { + iSipProfile->GetParameter( KSIPProfileRegistered, profileRegistered ); + } + + MUS_LOG1( "mus: [ENGINE] <- CMusSipProfileHandler::IsRegistered( %d )", + profileRegistered ) + + return profileRegistered; + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusSipProfileHandler::ProfileRegistryEventOccurred( + TUint32 aProfileId, + MSIPProfileRegistryObserver::TEvent aEvent ) + { + if ( iSipProfile && aProfileId == ProfileId() ) + { + switch ( aEvent ) + { + case MSIPProfileRegistryObserver::EProfileRegistered: + { + iUser.ProfileRegistered(); + break; + } + default: + { + break; + } + } + } + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusSipProfileHandler::ProfileRegistryErrorOccurred( + TUint32 /*aProfileId*/, + TInt /*aError*/) + { + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusSipProfileHandler::IncomingRequest( + TUint32 /*aIapId*/, + CSIPServerTransaction* aTransaction ) + { + // Ownership transferred, should not ever be called by SIP though + delete aTransaction; + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusSipProfileHandler::TimedOut( + CSIPServerTransaction& /*aTransaction*/ ) + { + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusSipProfileHandler::IncomingRequest( + CSIPServerTransaction* aTransaction ) + { + // Ownership transferred, should not ever be called by SIP though + delete aTransaction; + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusSipProfileHandler::IncomingRequest( + CSIPServerTransaction* aTransaction, + CSIPDialog& /*aDialog*/) + { + // Ownership transferred, should not ever be called by SIP though + delete aTransaction; + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusSipProfileHandler::IncomingResponse( + CSIPClientTransaction& /*aTransaction*/) + { + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusSipProfileHandler::IncomingResponse( + CSIPClientTransaction& /*aTransaction*/, + CSIPDialogAssocBase& /*aDialogAssoc*/) + { + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusSipProfileHandler::IncomingResponse( + CSIPClientTransaction& /*aTransaction*/, + CSIPInviteDialogAssoc* aDialogAssoc) + { + // Ownership transferred, should not ever be called by SIP though + delete aDialogAssoc; + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusSipProfileHandler::IncomingResponse( + CSIPClientTransaction& /*aTransaction*/, + CSIPRegistrationBinding& /*aRegistration*/ ) + { + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusSipProfileHandler::ErrorOccured( + TInt /*aError*/, + CSIPTransactionBase& /*aTransaction*/ ) + { + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusSipProfileHandler::ErrorOccured( + TInt /*aError*/, + CSIPClientTransaction& /*aTransaction*/, + CSIPRegistrationBinding& /*aRegistration*/ ) + { + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusSipProfileHandler::ErrorOccured( + TInt /*aError*/, + CSIPTransactionBase& /*aTransaction*/, + CSIPDialogAssocBase& /*aDialogAssoc*/ ) + { + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusSipProfileHandler::ErrorOccured( + TInt /*aError*/, + CSIPRefresh& /*aSIPRefresh*/ ) + { + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusSipProfileHandler::ErrorOccured( + TInt /*aError*/, + CSIPRegistrationBinding& /*aRegistration*/ ) + { + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusSipProfileHandler::ErrorOccured( + TInt /*aError*/, + CSIPDialogAssocBase& /*aDialogAssoc*/ ) + { + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusSipProfileHandler::InviteCompleted( + CSIPClientTransaction& /*aTransaction*/ ) + { + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusSipProfileHandler::InviteCanceled( + CSIPServerTransaction& /*aTransaction*/ ) + { + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusSipProfileHandler::ConnectionStateChanged( + CSIPConnection::TState /*aState*/ ) + { + } + +// ----------------------------------------------------------------------------- +// CMusSipProfileHandler::AlrEvent +// From MSipProfileAlrObserver +// ----------------------------------------------------------------------------- +// +void CMusSipProfileHandler::AlrEvent( + MSipProfileAlrObserver::TEvent aEvent, + TUint32 aProfileId, + TUint32 /*aSnapId*/, + TUint32 aIapId ) + { + if ( aEvent == MSipProfileAlrObserver::EIapAvailable ) + { + if ( iSipProfile && + aProfileId == ProfileId() && + !iUser.IsRoamingBetweenAPsAllowed() ) + { + // Disallow roaming only if the profile is used by MuS and + // the MuS has an ongoing session + TRAP_IGNORE( + iProfileAlrController->DisallowMigrationL( aProfileId, aIapId ) ) + } + else + { + // In all other cases allow roaming + TRAP_IGNORE( + iProfileAlrController->AllowMigrationL( aProfileId, aIapId ) ) + } + } + } + +// ----------------------------------------------------------------------------- +// CMusSipProfileHandler::AlrError +// From MSipProfileAlrObserver +// ----------------------------------------------------------------------------- +// +void CMusSipProfileHandler::AlrError( + TInt /*aError*/, + TUint32 /*aProfileId*/, + TUint32 /*aSnapId*/, + TUint32 /*aIapId*/ ) + { + // Ignore ALR related errors as they should not happen + // as migration is not allowed when + // the instance of CMusSipProfileHandler exists + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +TUint32 CMusSipProfileHandler::ProfileId() const + { + TUint32 sipProfileId( 0 ); + if ( iSipProfile ) + { + iSipProfile->GetParameter( KSIPProfileId, sipProfileId ); + } + return sipProfileId; + } diff -r 33a5d2bbf6fc -r 73a1feb507fb tsrc/musmanagerstub/inc/musmanagerstub.h --- a/tsrc/musmanagerstub/inc/musmanagerstub.h Thu Aug 19 09:51:39 2010 +0300 +++ b/tsrc/musmanagerstub/inc/musmanagerstub.h Tue Aug 31 15:12:07 2010 +0300 @@ -46,6 +46,7 @@ { ESipOptions = 0x1028238D, ESipInviteDesired = 0x10282391, + ESipInviteDesired2WayVideo = 0x10282392, ESipInviteNotDesired = 0x1028238D }; diff -r 33a5d2bbf6fc -r 73a1feb507fb tsrc/mustestapp/data/mustestapp.rss --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tsrc/mustestapp/data/mustestapp.rss Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,218 @@ +/* +* Copyright (c) 2002-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: This file contains all the resources for the AiwTestApp. +* Initial content was generated by Series 60 AppWizard. +* +*/ + +// RESOURCE IDENTIFIER +NAME AIWT // 4 letter ID + +// INCLUDES +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "aiwtestapp.hrh" +#include "aiwtestapp.loc" + +// RESOURCE DEFINITIONS +RESOURCE RSS_SIGNATURE { } +RESOURCE TBUF { buf = "MusTestApp"; } + +//---------------------------------------------------- +// +// eik_app_info +// +//---------------------------------------------------- +// +RESOURCE EIK_APP_INFO + { + hotkeys = r_aiwtest_hotkeys; + menubar = r_aiwtest_menubar; + cba = R_AVKON_SOFTKEYS_OPTIONS_BACK; + } + +//---------------------------------------------------- +// +// r_aiwtest_hotkeys +// +//---------------------------------------------------- +// +RESOURCE HOTKEYS r_aiwtest_hotkeys + { + control = + { + HOTKEY { command = EAknCmdExit; key='e'; } + }; + } + +//---------------------------------------------------- +// +// r_aiwtest_menubar +// +//---------------------------------------------------- +// +RESOURCE MENU_BAR r_aiwtest_menubar + { + titles = + { + MENU_TITLE { menu_pane = r_aiwtest_menu; txt = "File"; } + //MENU_TITLE { menu_pane = r_umasettings_main_menu; txt = "File"; } + }; + } + +//---------------------------------------------------- +// +// r_aiwtest_menu +// +//---------------------------------------------------- +// +RESOURCE MENU_PANE r_aiwtest_menu + { + items = + { + MENU_ITEM { command = 1000; txt = "Manager: Availability inv."; }, + MENU_ITEM { command = 1001; txt = "Manager: Start live"; }, + MENU_ITEM { command = 1002; txt = "Direct: Availability inv."; }, + MENU_ITEM { command = 100000; txt = "Video Sharing"; cascade = AIW_INTELLIGENT_CASCADE_ID; }, + //MENU_ITEM { command = 100001; txt = "Video Sharing"; cascade = AIW_INTELLIGENT_CASCADE_ID| AIW_LOCK_SUBMENU_TITLE; }, + MENU_ITEM { command = EAknCmdExit; txt = qtn_options_exit; } + }; + } + +// ----------------------------------------------------------------------------- +// +// r_core_info_message_query +// +// ----------------------------------------------------------------------------- +// +RESOURCE DIALOG r_core_info_message_query + { + flags = EGeneralQueryFlags | EEikDialogFlagNoBorder | EEikDialogFlagNoShadow; + buttons = R_AVKON_SOFTKEYS_OK_CANCEL; + items= + { + DLG_LINE + { + type = EAknCtPopupHeadingPane; + id = EAknMessageQueryHeaderId; + control = AVKON_HEADING + { + label = "Core info"; + headinglayout = R_AVKON_WML_SIGN_QUERY_HEADING_PANE; + }; + }, + DLG_LINE + { + type = EAknCtMessageQuery; + id = EAknMessageQueryContentId; + control = AVKON_MESSAGE_QUERY + { + message = "a"; + }; + } + }; + } + +// ----------------------------------------------------------------------------- +// +// r_aiwtest_localisable_app_info +// +// ----------------------------------------------------------------------------- +// +RESOURCE LOCALISABLE_APP_INFO r_aiwtest_localisable_app_info + { + short_caption = "MusTestApp"; + caption_and_icon = + CAPTION_AND_ICON_INFO + { + caption = "MusTestApp"; +#ifdef __SCALABLE_ICONS + number_of_icons = 1; +#else + number_of_icons = 2; +#endif + }; + } + +// ----------------------------------------------------------------------------- +// +// r_aiwtestapp_submenu +// +// ----------------------------------------------------------------------------- +// +RESOURCE MENU_PANE r_aiwtestapp_submenu + { + items = + { + MENU_ITEM { command = 100000; txt = ""; } + }; + } + +// ----------------------------------------------------------------------------- +// +// r_aiwtestapp_interest +// +// ----------------------------------------------------------------------------- +// +RESOURCE AIW_INTEREST r_aiwtestapp_interest + { + items = + { + // This application is interested in printing jpeg images + // from menu. + AIW_CRITERIA_ITEM + { + id = 100000; + serviceCmd = KAiwCmdShare; + serviceClass = KAiwClassMenu; + contentType = "*"; + defaultProvider = 0x10282389; + maxProviders = 1; + } + }; + } + +// ----------------------------------------------------------------------------- +// +// r_aiwtestapp_baseinterest +// +// ----------------------------------------------------------------------------- +// +RESOURCE AIW_INTEREST r_aiwtestapp_baseinterest + { + items = + { + // This application is interested in printing jpeg images + // from menu. + AIW_CRITERIA_ITEM + { + id = 100000; + serviceCmd = KAiwCmdShare; + serviceClass = KAiwClassMenu; + contentType = "*"; + defaultProvider = 0x10282389; + maxProviders = 1; + } + }; + } + +// End of File diff -r 33a5d2bbf6fc -r 73a1feb507fb tsrc/mustestapp/data/mustestapp_reg.rss --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tsrc/mustestapp/data/mustestapp_reg.rss Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,32 @@ +/* +* Copyright (c) 2002-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: +* +*/ + +#include +#include +#include + +UID2 KUidAppRegistrationResourceFile +UID3 0x1028239B // Define your application UID here + +RESOURCE APP_REGISTRATION_INFO + { + app_file = "mustestapp"; + localisable_resource_file = APP_RESOURCE_DIR"\\MusTestApp"; + localisable_resource_id = R_AIWTEST_LOCALISABLE_APP_INFO; + } + +// End of File diff -r 33a5d2bbf6fc -r 73a1feb507fb tsrc/mustestapp/group/AiwTestApp.mmp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tsrc/mustestapp/group/AiwTestApp.mmp Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,92 @@ +/* +* Copyright (c) 2002-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: +* +*/ + +// To get the APP_LAYER_SYSTEMINCLUDE-definition +#include + +#include +#include + +TARGET musTestApp.exe +TARGETTYPE exe + +UID 0x100039CE 0x1028239B +VENDORID VID_DEFAULT +CAPABILITY CAP_APPLICATION + +EPOCSTACKSIZE 0xF000 + + + +SOURCEPATH ../../../common/src +SOURCE muscallmonitor.cpp +SOURCE muscalleventmonitor.cpp +SOURCE musconferencecallmonitor.cpp + +SOURCEPATH ../src +SOURCE AiwTestAppApp.cpp +SOURCE AiwTestAppAppUi.cpp +SOURCE AiwTestAppContainer.cpp +SOURCE AiwTestAppDocument.cpp + + +START RESOURCE ../data/musTestApp.rss +HEADER +TARGETPATH APP_RESOURCE_DIR +END + +START RESOURCE ../data/musTestApp_reg.rss +DEPENDS mustestapp.rsg +TARGETPATH /private/10003a3f/apps +END + + + +LANG SC + +USERINCLUDE ../inc +USERINCLUDE ../../../common/inc + +// Default system include paths for application layer modules. +APP_LAYER_SYSTEMINCLUDE SYSTEMINCLUDE +SYSTEMINCLUDE /epoc32/include/ecom + +//SOURCEPATH ../data +//DOCUMENT AIWTestApp.rss +//DOCUMENT AIWTestApp_caption.rss + +LIBRARY apparc.lib +LIBRARY avkon.lib +LIBRARY bafl.lib +LIBRARY cone.lib +LIBRARY ecom.lib +LIBRARY eikcoctl.lib +LIBRARY eikcore.lib +LIBRARY euser.lib +LIBRARY fbscli.lib +LIBRARY efsrv.lib +LIBRARY aknskins.lib // for skin background +LIBRARY CdlEngine.lib // for scalable ui +LIBRARY ServiceHandler.lib +LIBRARY flogger.lib +LIBRARY centralrepository.lib +LIBRARY etel.lib +LIBRARY etelmm.lib + +LIBRARY musmanagerclient.lib + +// End of File diff -r 33a5d2bbf6fc -r 73a1feb507fb tsrc/mustestapp/group/bld.inf --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tsrc/mustestapp/group/bld.inf Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,44 @@ +/* +* Copyright (c) 2002-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: +* +*/ + +PRJ_PLATFORMS +// Specify the platforms your component needs to be built for here +DEFAULT + +PRJ_EXPORTS +// Specify the source file followed by its destination here +// copy will be used to copy the source file to its destination +// If there's no destination then the source file will be copied +// to the same name in /epoc32/include + +PRJ_MMPFILES +// Specify the .mmp files required for building the important component +// releasables. +// +// Specify "tidy" if the component you need to build doesn't need to be +// released. Specify "ignore" if the MMP file exists but should be +// ignored. +AiwTestApp.mmp + +PRJ_TESTMMPFILES +// specify the .mmp files required for building any test programs here + +PRJ_TESTEXPORTS +// specify the files to be copied from the source directories to the releasables' +// directories for use with test programs. + +// End of File diff -r 33a5d2bbf6fc -r 73a1feb507fb tsrc/mustestapp/group/mce.pkg --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tsrc/mustestapp/group/mce.pkg Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,56 @@ +; +; Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +; All rights reserved. +; This component and the accompanying materials are made available +; under the terms of "Eclipse Public License v1.0" +; which accompanies this distribution, and is available +; at the URL "http://www.eclipse.org/legal/epl-v10.html". +; +; Initial Contributors: +; Nokia Corporation - initial contribution. +; +; Contributors: +; +; Description: +; +; A package file for creating an installation file for MCE + + +; Supported languages +&en + +#{"MMcomms"},(0x1020286C),2,0,0,TYPE=SA + + +%{"Vendor-EN"} +:"Nokia" + +(0x101F6F88), 0, 0, 0, {"Series60ProductID"} + + + +; ----------------------------------------------------------------------------------- + +;MCE DLLs +; for S60 3.x +"\epoc32\release\armv5\udeb\mceserver.exe"-"!:\sys\bin\mceserver.exe" +"\epoc32\release\armv5\udeb\mceclient.dll"-"!:\sys\bin\mceclient.dll" +"\epoc32\release\armv5\udeb\fcpluginengine.dll"-"!:\sys\bin\fcpluginengine.dll" +"\epoc32\release\armv5\udeb\MMCCInterface.dll"-"!:\sys\bin\MMCCInterface.dll" +"\epoc32\release\armv5\udeb\MMCCJitterBuffer.dll"-"!:\sys\bin\MMCCJitterBuffer.dll" +"\epoc32\release\armv5\udeb\MMCCSubthreads.dll"-"!:\sys\bin\MMCCSubthreads.dll" +"\epoc32\release\armv5\udeb\FCTBCP.dll"-"!:\sys\bin\FCTBCP.dll" +"\EPOC32\DATA\Z\Resource\Plugins\FCTBCP.RSC"-"!:\resource\plugins\FCTBCP.RSC" + +"\epoc32\release\armv5\udeb\MMCCController.dll"-"!:\sys\bin\MMCCController.dll" +"\EPOC32\DATA\Z\Resource\Plugins\MMCCController.RSC"-"!:\resource\plugins\MMCCController.RSC" +"\epoc32\release\armv5\udeb\MMCCRtpSourceSink.dll"-"!:\sys\bin\MMCCRtpSourceSink.dll" +"\EPOC32\DATA\Z\Resource\Plugins\MMCCRtpSourceSink.RSC"-"!:\resource\plugins\MMCCRtpSourceSink.RSC" +"\epoc32\release\armv5\udeb\MMCCAmrPlFormat.dll"-"!:\sys\bin\MMCCAmrPlFormat.dll" +"\EPOC32\DATA\Z\Resource\Plugins\MMCCAmrPlFormat.RSC"-"!:\resource\plugins\MMCCAmrPlFormat.RSC" +"\epoc32\release\armv5\udeb\MMCCRedPlFormat.dll"-"!:\sys\bin\MMCCRedPlFormat.dll" +"\EPOC32\DATA\Z\Resource\Plugins\MMCCRedPlFormat.RSC"-"!:\resource\plugins\MMCCRedPlFormat.RSC" +"\epoc32\release\armv5\udeb\MMCCDtmfPlFormat.dll"-"!:\sys\bin\MMCCDtmfPlFormat.dll" +"\EPOC32\DATA\Z\Resource\Plugins\MMCCDtmfPlFormat.RSC"-"!:\resource\plugins\MMCCDtmfPlFormat.RSC" +"\epoc32\release\armv5\udeb\MMCCG711PlFormat.dll"-"!:\sys\bin\MMCCG711PlFormat.dll" +"\EPOC32\DATA\Z\Resource\Plugins\MMCCG711PlFormat.RSC"-"!:\resource\plugins\MMCCG711PlFormat.RSC" diff -r 33a5d2bbf6fc -r 73a1feb507fb tsrc/mustestapp/inc/AiwTestApp.hrh --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tsrc/mustestapp/inc/AiwTestApp.hrh Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,33 @@ +/* +* Copyright (c) 2002-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: This file contains declarations for constants of AiwTestApp. +* The file can be included in C++ or resource file. +* Initial content was generated by Series 60 AppWizard. +* +*/ + +#ifndef AIWTESTAPP_HRH +#define AIWTESTAPP_HRH + +enum TAiwTestAppCommandIds + { + EAiwTestAppCmdBATTest = 1, + EAiwTestAppCmdSetLanguage, + EAiwTestAppCmdSetInputMode, + EAiwTestAppCmdCoreInfo, + EAiwTestAppCmdChangeCore, + EAiwTestAppCmdEngineInfo + }; + +#endif // AIWTESTAPP_HRH diff -r 33a5d2bbf6fc -r 73a1feb507fb tsrc/mustestapp/inc/AiwTestApp.loc --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tsrc/mustestapp/inc/AiwTestApp.loc Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,38 @@ +/* +* Copyright (c) 2002-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: This is a localisation file for AiwTestApp. +* A loc file is the one and only place where the logical strings +* to be localised are defined. +* Initial content was generated by Series 60 AppWizard. +* +*/ + + +// LOCALISATION STRINGS + +// d:Command in options menu. +// d:Example application spesific command. +// l:list_single_popup_submenu_pane_1 +// +#define qtn_appl_test "Test" + +// d:Example caption string for app. +// +#define qtn_app_caption_string "" + +// d:Example short caption string for app. +// +#define qtn_app_short_caption_string "" + +// End of File diff -r 33a5d2bbf6fc -r 73a1feb507fb tsrc/mustestapp/inc/AiwTestAppApp.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tsrc/mustestapp/inc/AiwTestAppApp.h Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,56 @@ +/* +* Copyright (c) 2002-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: Declares main application class. +* +*/ + +#ifndef AIWTESTAPP_H +#define AIWTESTAPP_H + +// INCLUDES +#include + +// CONSTANTS +// UID of the application +const TUid KUidAiwTestApp = { 0x1028239B }; + +// CLASS DECLARATION + +/** +* CAiwTestApp application class. +* Provides factory to create concrete document object. +* +*/ +class CAiwTestApp : public CAknApplication + { + public: // Functions from base classes + + private: + /** + * From CApaApplication, creates CAiwTestAppDocument document object. + * @return A pointer to the created document object. + */ + CApaDocument* CreateDocumentL(); + + /** + * From CApaApplication, returns application's UID (KUidAiwTestApp). + * @return The value of KUidAiwTestApp. + */ + TUid AppDllUid() const; + }; + +#endif + +// End of File + diff -r 33a5d2bbf6fc -r 73a1feb507fb tsrc/mustestapp/inc/AiwTestAppAppUi.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tsrc/mustestapp/inc/AiwTestAppAppUi.h Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,127 @@ +/* +* Copyright (c) 2002-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: Declares UI class for application. +* +*/ + +#ifndef AIWTESTAPPUI_H +#define AIWTESTAPPUI_H + +// INCLUDES +#include "musavaobserver.h" +#include "muscallmonitorobserver.h" + +#include +#include +#include +#include +#include + + +// FORWARD DECLARATIONS +class CAiwTestContainer; +class CAiwServiceHandler; +class CMusManager; +class CMusAvaInterface; +class CMusCallMonitor; + +// CLASS DECLARATION + +/** +* Application UI class. +* Provides support for the following features: +* - EIKON control architecture +*/ +class CAiwTestAppUi : public CAknAppUi, public MMusAvaObserver, + public MMusCallMonitorObserver + { + public: // Constructors and destructor + /** + * By default Symbian 2nd phase constructor is private. + */ + void ConstructL(); + + /** + * Destructor. + */ + virtual ~CAiwTestAppUi(); + + public: // New functions + public: // Functions from base classes + + void AvailabilityState( TAvailabilityState aState, + TAvailabilityStatus aStatus, + TAvailabilityName aName ); + + + void StopComplete(); + + + void CallConnectedL( const TDesC& /*aTelNumber*/, TBool /*aIsSipUri*/ ) + { + } + + void CallHold( const TDesC& /*aTelNumber*/, TBool /*aIsSipUri*/ ) + { + } + + void ConferenceCallL() + { + } + + void NoActiveCallL() + { + } + + + private: + /** + * From MEikMenuObserver, dynamically initialises a menu pane. + * @param aResourceId The menu's ID. + * @param aMenuPane The in-memory representation of the menu pane. + */ + void DynInitMenuPaneL(TInt aResourceId, CEikMenuPane* aMenuPane); + + private: + /** + * From CEikAppUi, takes care of command handling. + * @param aCommand command to be handled + */ + void HandleCommandL(TInt aCommand); + + /** + * From CEikAppUi, handles key events. + * @param aKeyEvent Event to handled. + * @param aType Type of the key event. + * @return Response code (EKeyWasConsumed, EKeyWasNotConsumed). + */ + virtual TKeyResponse HandleKeyEventL( + const TKeyEvent& aKeyEvent,TEventCode aType); + + private: + CAiwTestContainer* iAppContainer; + CAiwServiceHandler* iServiceHandler; + + CMusManager* iManager; + CMusAvaInterface* iPlugin; + TAvailabilityStatus iMinimumStatus; + TAvailabilityStatus iMandatoryStatus; + TAvailabilityStatus iExtensionStatus; + + CMusCallMonitor* iCallMonitor; + }; + +#endif + +// End of File diff -r 33a5d2bbf6fc -r 73a1feb507fb tsrc/mustestapp/inc/AiwTestAppContainer.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tsrc/mustestapp/inc/AiwTestAppContainer.h Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,91 @@ +/* +* Copyright (c) 2002-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: Declares container control for application. +* +*/ + +#ifndef AIWTESTCONTAINER_H +#define AIWTESTCONTAINER_H + +// INCLUDES +#include + +// FORWARD DECLARATIONS +class CEikLabel; // for example labels + +// CLASS DECLARATION + +/** +* CAiwTestContainer container control class. +*/ +class CAiwTestContainer : public CCoeControl, MCoeControlObserver + { + public: // Constructors and destructor + /** + * EPOC default constructor. + * @param aRect Frame rectangle for container. + */ + void ConstructL(const TRect& aRect); + + /** + * Destructor. + */ + virtual ~CAiwTestContainer(); + + void SetLabelL(TDesC& aText); + + public: // New functions + + public: // Functions from base classes + + private: // Functions from base classes + + /** + * From CoeControl,SizeChanged. + */ + void SizeChanged(); + + /** + * From CoeControl,CountComponentControls. + */ + TInt CountComponentControls() const; + + /** + * From CCoeControl,ComponentControl. + */ + CCoeControl* ComponentControl(TInt aIndex) const; + + /** + * From CCoeControl,Draw. + */ + void Draw(const TRect& aRect) const; + + /** + * From MCoeControlObserver + * Acts upon changes in the hosted control's state. + * + * @param aControl The control changing its state + * @param aEventType The type of control event + */ + void HandleControlEventL(CCoeControl* aControl,TCoeEvent aEventType); + + private: //data + + CEikLabel* iLabel; // example label + CEikLabel* iToDoLabel; // example label + }; + +#endif + +// End of File diff -r 33a5d2bbf6fc -r 73a1feb507fb tsrc/mustestapp/inc/AiwTestAppDocument.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tsrc/mustestapp/inc/AiwTestAppDocument.h Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,73 @@ +/* +* Copyright (c) 2002-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: Declares document for application. +* +*/ + +#ifndef AIWTESTDOCUMENT_H +#define AIWTESTDOCUMENT_H + +// INCLUDES +#include + +// CONSTANTS + +// FORWARD DECLARATIONS +class CEikAppUi; + +// CLASS DECLARATION + +/** +* CAiwTestDocument application class. +*/ +class CAiwTestDocument : public CAknDocument + { + public: // Constructors and destructor + /** + * Two-phased constructor. + */ + static CAiwTestDocument* NewL(CEikApplication& aApp); + + /** + * Destructor. + */ + virtual ~CAiwTestDocument(); + + public: // New functions + public: // Functions from base classes + protected: // New functions + protected: // Functions from base classes + + private: + /** + * C++ default constructor. + */ + CAiwTestDocument(CEikApplication& aApp); + + /** + * By default Symbian 2nd phase constructor is private. + */ + void ConstructL(); + + private: + /** + * From CEikDocument, create CAiwTestAppUi "App UI" object. + */ + CEikAppUi* CreateAppUiL(); + }; + +#endif + +// End of File + diff -r 33a5d2bbf6fc -r 73a1feb507fb tsrc/mustestapp/install/AIWTestApp_3x.pkg --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tsrc/mustestapp/install/AIWTestApp_3x.pkg Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,44 @@ +; +; Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +; All rights reserved. +; This component and the accompanying materials are made available +; under the terms of "Eclipse Public License v1.0" +; which accompanies this distribution, and is available +; at the URL "http://www.eclipse.org/legal/epl-v10.html". +; +; Initial Contributors: +; Nokia Corporation - initial contribution. +; +; Contributors: +; +; Description: +; +; +; Installation file for AIWTestApp application +; +;Languages +&EN +; +; UID is the app's UID +; +#{"AIWTestApp"},(0x102072D1),1,0,0 +; +; List of localised vendor names +%{"Vendor-EN"} + +; The non-localised, globally unique vendor name (mandatory) +:"Nokia OY" +;Supports Series 60 v 3.x +;This line indicates that this installation is for the Series 60 platform v3.x +;This line must appear _exactly_ as shown below in the sis file +;If this line is missing or incorrect, the sis file will not be able +;to be installed on Series 60 v3.x platforms +(0x101F7961), 0, 0, 0, {"Series60ProductID"} +; +; Three files to install +; +"\epoc32\release\armv5\urel\AIWTestApp.exe" -"!:\sys\bin\AIWTestApp.exe" +"\epoc32\data\z\Resource\apps\AIWTestApp.rsc" -"!:\resource\apps\AIWTestApp.rsc" +"\epoc32\data\Z\private\10003a3f\apps\AiwTestApp_reg.rsc" -"!:\private\10003a3f\import\apps\AiwTestApp_reg.rsc" + + diff -r 33a5d2bbf6fc -r 73a1feb507fb tsrc/mustestapp/install/mustestapp.pkg --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tsrc/mustestapp/install/mustestapp.pkg Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,52 @@ +; +; Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +; All rights reserved. +; This component and the accompanying materials are made available +; under the terms of "Eclipse Public License v1.0" +; which accompanies this distribution, and is available +; at the URL "http://www.eclipse.org/legal/epl-v10.html". +; +; Initial Contributors: +; Nokia Corporation - initial contribution. +; +; Contributors: +; +; Description: +; +; +; Installation file for AIWTestApp application +; +;Languages +&EN +; +; UID is the app's UID +; +#{"AIWTestApp"},(0x102072D1),1,0,0 +; +; List of localised vendor names +%{"Vendor-EN"} + +; The non-localised, globally unique vendor name (mandatory) +:"Nokia OY" +;Supports Series 60 v 3.x +;This line indicates that this installation is for the Series 60 platform v3.x +;This line must appear _exactly_ as shown below in the sis file +;If this line is missing or incorrect, the sis file will not be able +;to be installed on Series 60 v3.x platforms +(0x101F7961), 0, 0, 0, {"Series60ProductID"} +; +; Three files to install +; +"\epoc32\release\armv5\udeb\aiwTestApp.exe" -"!:\sys\bin\AIWTestApp.exe" +"\epoc32\data\z\Resource\apps\aiwTestApp.rsc" -"!:\resource\apps\AIWTestApp.rsc" +"\epoc32\data\Z\private\10003a3f\apps\AiwTestApp_reg.rsc" -"!:\private\10003a3f\import\apps\AiwTestApp_reg.rsc" + + +"\epoc32\release\armv5\urel\musui.app"-"!:\system\apps\About\About.app" +"\epoc32\release\armv5\urel\musui.rsc"-"!:\system\apps\About\About.rsc" +"\epoc32\release\armv5\urel\musui_caption.rsc"-"!:\system\apps\About\About_caption.rsc" +"\epoc32\release\armv5\urel\musui.aif"-"!:\system\apps\About\About.aif" +"\epoc32\release\armv5\urel\musui.mbm"-"!:\system\apps\About\About.mbm" + +"\epoc32\release\armv5\udeb\ + diff -r 33a5d2bbf6fc -r 73a1feb507fb tsrc/mustestapp/src/AiwTestAppApp.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tsrc/mustestapp/src/AiwTestAppApp.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,63 @@ +/* +* Copyright (c) 2002-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: +* +*/ + + +// INCLUDE FILES +#include +#include "aiwtestappapp.h" +#include "aiwtestappdocument.h" + +// ================= MEMBER FUNCTIONS ======================= + +// --------------------------------------------------------- +// CAiwTestApp::AppDllUid() +// Returns application UID +// --------------------------------------------------------- +// +TUid CAiwTestApp::AppDllUid() const + { + return KUidAiwTestApp; + } + +// --------------------------------------------------------- +// CAiwTestApp::CreateDocumentL() +// Creates CAiwTestDocument object +// --------------------------------------------------------- +// +CApaDocument* CAiwTestApp::CreateDocumentL() + { + return CAiwTestDocument::NewL( *this ); + } + +LOCAL_C CApaApplication* NewApplication() + { + return new CAiwTestApp; + } + +// --------------------------------------------------------- +// E32Main() +// Main startup entry point +// Returns: KErrNone +// --------------------------------------------------------- +// +GLDEF_C TInt E32Main() + { + return EikStart::RunApplication(NewApplication); + } + +// End of File + diff -r 33a5d2bbf6fc -r 73a1feb507fb tsrc/mustestapp/src/AiwTestAppAppUi.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tsrc/mustestapp/src/AiwTestAppAppUi.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,265 @@ +/* +* Copyright (c) 2002-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: +* +*/ + + +// INCLUDE FILES +#include "aiwtestappappui.h" +#include "aiwtestappcontainer.h" +#include "musmanager.h" +#include +#include "aiwtestapp.hrh" +#include "musresourceproperties.h" +#include "musavainterface.h" +#include "muscallmonitor.h" + +#include +#include +#include + +#include +#include + +#include +#include + +#include + +// ================= MEMBER FUNCTIONS ======================= +// +// ---------------------------------------------------------- +// CAiwTestAppUi::ConstructL() +// +// ---------------------------------------------------------- +// +void CAiwTestAppUi::ConstructL() + { + BaseConstructL(); + + iPlugin = NULL; + + // Creates a container object and adds it to the application's control stack. + iAppContainer = new (ELeave) CAiwTestContainer; + iAppContainer->SetMopParent( this ); + iAppContainer->ConstructL( ClientRect() ); + AddToStackL( iAppContainer ); + + // Create service handler instance. + iServiceHandler = CAiwServiceHandler::NewL(); + + // Attach menu service interests to AIW framework. + iServiceHandler->AttachMenuL(R_AIWTEST_MENU, R_AIWTESTAPP_INTEREST); + //iServiceHandler->AttachMenuL(R_UMASETTINGS_MAIN_MENU, R_UMASETTINGSUI_INTEREST); + + // Attach base service interests to AIW framework. + iServiceHandler->AttachL(R_AIWTESTAPP_BASEINTEREST); + + iManager = CMusManager::NewL(); + + RProperty::Define( NMusResourceApi::KCategoryUid, + NMusResourceApi::KCameraAvailability, + RProperty::EInt); + + // 2. keypad property + RProperty::Define( NMusResourceApi::KCategoryUid, + NMusResourceApi::KKeypadAvailability, + RProperty::EInt ); + + // 3. video player property + RProperty::Define( NMusResourceApi::KCategoryUid, + NMusResourceApi::KVideoPlayerAvailability, + RProperty::EInt + ); + + RProperty::Set( NMusResourceApi::KCategoryUid, + NMusResourceApi::KCameraAvailability, + ( TInt ) NMusResourceApi::EAvailable ); + + // 2. keypad property + RProperty::Set( NMusResourceApi::KCategoryUid, + NMusResourceApi::KKeypadAvailability, + ( TInt ) NMusResourceApi::EAvailable ); + + // 3. video player property + RProperty::Set( NMusResourceApi::KCategoryUid, + NMusResourceApi::KVideoPlayerAvailability, + ( TInt ) NMusResourceApi::EAvailable ); + + // Next line is an example of how to use base service commands. + //iServiceHandler->ExecuteServiceCmdL(4, iServiceHandler->InParamListL(), + // iServiceHandler->OutParamListL()); + } + +// ---------------------------------------------------- +// CAiwTestAppUi::~CAiwTestAppUi() +// Destructor +// Frees reserved resources +// ---------------------------------------------------- +// +CAiwTestAppUi::~CAiwTestAppUi() + { + delete iServiceHandler; + + if (iAppContainer) + { + RemoveFromStack( iAppContainer ); + delete iAppContainer; + } + + if ( iPlugin ) + { + iPlugin->StopL(); + delete iPlugin; + } + + iManager->StopApplicationL(); + + delete iManager; + } + +// ------------------------------------------------------------------------------ +// CAiwTestAppUi::DynInitMenuPaneL(TInt aResourceId,CEikMenuPane* aMenuPane) +// This function is called by the EIKON framework just before it displays +// a menu pane. Its default implementation is empty, and by overriding it, +// the application can set the state of menu items dynamically according +// to the state of application data. +// ------------------------------------------------------------------------------ +// +void CAiwTestAppUi::DynInitMenuPaneL(TInt aResourceId, CEikMenuPane* aMenuPane) + { + if (iServiceHandler->HandleSubmenuL(*aMenuPane)) + { + return; + } + + if (iServiceHandler->IsAiwMenu(aResourceId)) + { + TFileName filename(_L("image.jpg")); // This is just an axample of how to fill param list. + TAiwVariant variant(filename); + TAiwGenericParam param(EGenericParamFile, variant); + CAiwGenericParamList& inList = iServiceHandler->InParamListL(); + inList.AppendL(param); + + iServiceHandler->InitializeMenuPaneL(*aMenuPane, aResourceId, 5000, + iServiceHandler->InParamListL()); + } + } + +// ---------------------------------------------------- +// CAiwTestAppUi::HandleKeyEventL(const TKeyEvent& aKeyEvent, +// TEventCode aType) +// Takes care of key event handling. +// ---------------------------------------------------- +// +TKeyResponse CAiwTestAppUi::HandleKeyEventL(const TKeyEvent& /*aKeyEvent*/, + TEventCode /*aType*/) + { + return EKeyWasNotConsumed; + } + +// ---------------------------------------------------- +// CAiwTestAppUi::HandleCommandL(TInt aCommand) +// Takes care of command handling. +// ---------------------------------------------------- +// +void CAiwTestAppUi::HandleCommandL(TInt aCommand) + { + switch ( aCommand ) + { + case EAknSoftkeyBack: // fallthrough + case EEikCmdExit: + { + RDebug::Print(_L("This is a debug message - Exit")); + Exit(); + break; + } + case EAiwTestAppCmdBATTest: + { + break; + } + case EAiwTestAppCmdCoreInfo: + { + break; + } + case EAiwTestAppCmdEngineInfo: + { + break; + } + case 1000: // 'Testi' menu item. + { + + iManager->ExamineAvailabilityL(); + } + break; + + + + case 1001: + { + + iManager->StartApplicationL( MultimediaSharing::EMusLiveVideo ); + + } + break; + case 1002: + { + iPlugin = CMusAvaInterface::NewL(); + iPlugin->SetObserver( *this ); + + iPlugin->StartL(); + //iCallMonitor = CMusCallMonitor::NewL( *this ); + //iCallMonitor->StartMonitoringL(); + + + + } + break; + default: + { + + + CAiwGenericParamList& in = iServiceHandler->InParamListL(); + // in.AppendL(param); + + // Executes menu service command. + iServiceHandler->ExecuteMenuCmdL(aCommand, in, iServiceHandler->OutParamListL()); + + //CleanupStack::PopAndDestroy(2); + } + break; + } + } + + void CAiwTestAppUi::AvailabilityState( TAvailabilityState aState, + TAvailabilityStatus aStatus, + TAvailabilityName aName ) + { + if( aState == EMusAvaMinimum ) + iMinimumStatus = aStatus; + else if( aState == EMusAvaMandatory ) + iMandatoryStatus = aStatus; + else if( aState == EMusAvaExtension ) + iExtensionStatus = aStatus; + } + + + void CAiwTestAppUi::StopComplete() + { + + } + + +// End of File diff -r 33a5d2bbf6fc -r 73a1feb507fb tsrc/mustestapp/src/AiwTestAppContainer.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tsrc/mustestapp/src/AiwTestAppContainer.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,127 @@ +/* +* Copyright (c) 2002-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: +* +*/ + + +// INCLUDE FILES +#include "aiwtestappcontainer.h" +#include +#include // for example label control + +// ================= MEMBER FUNCTIONS ======================= + +// --------------------------------------------------------- +// CAiwTestContainer::ConstructL(const TRect& aRect) +// Symbian 2nd phase constructor can leave. +// --------------------------------------------------------- +// +void CAiwTestContainer::ConstructL(const TRect& aRect) + { + CreateWindowL(); + + iLabel = new (ELeave) CEikLabel; + iLabel->SetContainerWindowL( *this ); + iLabel->SetTextL( _L("Label") ); + + iToDoLabel = new (ELeave) CEikLabel; + iToDoLabel->SetContainerWindowL( *this ); + iToDoLabel->SetTextL( _L("TodoLabel") ); + + SetRect(aRect); + ActivateL(); + } + +// --------------------------------------------------------- +// CAiwTestContainer::~CAiwTestContainer() +// Destructor +// --------------------------------------------------------- +// +CAiwTestContainer::~CAiwTestContainer() + { + delete iLabel; + delete iToDoLabel; + } + +// --------------------------------------------------------- +// CAiwTestContainer::SetLabelL(TDesC& aText) +// --------------------------------------------------------- +// +void CAiwTestContainer::SetLabelL(TDesC& /*aText*/) + { + } + +// --------------------------------------------------------- +// CAiwTestContainer::SizeChanged() +// Called by framework when the view size is changed +// --------------------------------------------------------- +// +void CAiwTestContainer::SizeChanged() + { + } + +// --------------------------------------------------------- +// CAiwTestContainer::CountComponentControls() const +// --------------------------------------------------------- +// +TInt CAiwTestContainer::CountComponentControls() const + { + return 2; // return nbr of controls inside this container + } + +// --------------------------------------------------------- +// CAiwTestContainer::ComponentControl(TInt aIndex) const +// --------------------------------------------------------- +// +CCoeControl* CAiwTestContainer::ComponentControl(TInt aIndex) const + { + switch ( aIndex ) + { + case 0: + return iLabel; + case 1: + return iToDoLabel; + default: + return NULL; + } + } + +// --------------------------------------------------------- +// CAiwTestContainer::Draw(const TRect& aRect) const +// --------------------------------------------------------- +// +void CAiwTestContainer::Draw(const TRect& aRect) const + { + CWindowGc& gc = SystemGc(); + + gc.SetPenStyle( CGraphicsContext::ENullPen ); + gc.SetBrushColor( KRgbGray ); + gc.SetBrushStyle( CGraphicsContext::ESolidBrush ); + + gc.DrawRect( aRect ); + } + +// --------------------------------------------------------- +// CAiwTestContainer::HandleControlEventL(CCoeControl* aControl, +// TCoeEvent aEventType) +// --------------------------------------------------------- +// +void CAiwTestContainer::HandleControlEventL(CCoeControl* /*aControl*/, + TCoeEvent /*aEventType*/) + { + // TODO: Add your control event handler code here + } + +// End of File diff -r 33a5d2bbf6fc -r 73a1feb507fb tsrc/mustestapp/src/AiwTestAppDocument.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tsrc/mustestapp/src/AiwTestAppDocument.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,78 @@ +/* +* Copyright (c) 2002-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: +* +*/ + + +// INCLUDE FILES +#include "aiwtestappdocument.h" +#include "aiwtestappappui.h" + +// ================= MEMBER FUNCTIONS ======================= + +// ----------------------------------------------------------------------------- +// CAiwTestDocument::CAiwTestDocument(CEikApplication& aApp) +// C++ default constructor can NOT contain any code, that +// might leave. +// ----------------------------------------------------------------------------- +// +CAiwTestDocument::CAiwTestDocument(CEikApplication& aApp) +: CAknDocument(aApp) + { + } + +// ----------------------------------------------------------------------------- +// CAiwTestDocument::~CAiwTestDocument() +// Destructor. +// ----------------------------------------------------------------------------- +// +CAiwTestDocument::~CAiwTestDocument() + { + } + +// ----------------------------------------------------------------------------- +// CAiwTestDocument::ConstructL() +// Symbian 2nd phase constructor can leave. +// ----------------------------------------------------------------------------- +// +void CAiwTestDocument::ConstructL() + { + } + +// ----------------------------------------------------------------------------- +// CAiwTestDocument::NewL(CEikApplication& aApp) +// Two-phased constructor. +// ----------------------------------------------------------------------------- +// +CAiwTestDocument* CAiwTestDocument::NewL(CEikApplication& aApp) // CAiwTestApp reference + { + CAiwTestDocument* self = new (ELeave) CAiwTestDocument( aApp ); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop(); + return self; + } + +// ---------------------------------------------------- +// CAiwTestDocument::CreateAppUiL() +// Constructs CAiwTestAppUi. +// ---------------------------------------------------- +// +CEikAppUi* CAiwTestDocument::CreateAppUiL() + { + return new (ELeave) CAiwTestAppUi; + } + +// End of File diff -r 33a5d2bbf6fc -r 73a1feb507fb tsrc/propertystub/src/e32property.cpp --- a/tsrc/propertystub/src/e32property.cpp Thu Aug 19 09:51:39 2010 +0300 +++ b/tsrc/propertystub/src/e32property.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -16,12 +16,18 @@ */ #include "e32property.h" +#include "mussessionproperties.h" +#include "mussesseioninformationapi.h" #include static RArray iIntProperty; static TInt iErrorCode = KErrNone; static RProperty::TPropertyCalledFunctions iCalledFunction = RProperty::ENone; -static TName iString = KNullDesC(); +// Large enough to store maximum length descriptor for RProperty +static TBuf iString = KNullDesC(); +static TBuf iVideoCodecList = KNullDesC(); +static TBuf iSessionRecipient = KNullDesC(); +static TBuf iEngineName = KNullDesC(); static TInt iValue = KErrNotFound; @@ -78,6 +84,7 @@ return error; } + TInt RProperty::Get( TUid /*aCategory*/, TUint /*aKey*/, TDes8& aValue) { // This is not widely used in Mush , so who cares in stub. @@ -85,10 +92,26 @@ return iErrorCode; } -TInt RProperty::Get( TUid /*aCategory*/, TUint /*aKey*/, TDes16& aValue ) + +TInt RProperty::Get( TUid /*aCategory*/, TUint aKey, TDes16& aValue ) { - // This is not widely used in Mush , so who cares in stub. - aValue = iString; + if ( aKey == NMusSessionInformationApi::KMUSCallProvider ) + { + aValue = iEngineName; + } + else if ( aKey == NMusSessionApi::KVideoCodecs ) + { + aValue = iVideoCodecList; + } + else if ( aKey == NMusSessionApi::KRemoteSipAddress ) + { + aValue = iSessionRecipient; + } + else + { + aValue = iString; + } + return iErrorCode; } @@ -118,10 +141,27 @@ return iErrorCode; } -TInt RProperty::Set( TUid /*aCategory*/, TUint /*aKey*/, const TDesC& aValue ) + +TInt RProperty::Set( TUid /*aCategory*/, TUint aKey, const TDesC& aValue ) { - // This is not widely used in Mush , so who cares in stub. - iString = aValue; + + if ( aKey == NMusSessionInformationApi::KMUSCallProvider ) + { + iEngineName = aValue; + } + + else if ( aKey == NMusSessionApi::KVideoCodecs ) + { + iVideoCodecList = aValue; + } + else if ( aKey == NMusSessionApi::KRemoteSipAddress ) + { + iSessionRecipient = aValue; + } + else + { + iString = aValue; + } return iErrorCode; } @@ -193,7 +233,7 @@ iErrorCode = KErrNone; iCalledFunction = RProperty::ENone; iString = KNullDesC(); + iEngineName = KNullDesC(); iValue = KErrNotFound; } - diff -r 33a5d2bbf6fc -r 73a1feb507fb tsrc/qtestutils/inc/testresultxmlparser.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tsrc/qtestutils/inc/testresultxmlparser.h Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,68 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + +#ifndef TESTRESULTXMLPARSER_H +#define TESTRESULTXMLPARSER_H + +#include + + +class TestResultXmlParser : public QXmlDefaultHandler +{ +public: // Constructors and destructor + TestResultXmlParser(); + ~TestResultXmlParser(); + +public: // From QXmlContentHandler + bool startElement( + const QString& namespaceURI, + const QString& localName, + const QString& qName, + const QXmlAttributes& atts); + + bool endElement( + const QString& namespaceURI, + const QString& localName, + const QString& qName); + + bool characters(const QString& ch); + +public: // New functions + + int parse(const QString& fileName); + + int parseAndPrintResults( + const QString& fileName, + bool printDetails=false); + + int testCount(); + + QStringList errors(); + +private: // Data + int mTestCount; + QStringList* mErrors; + bool mParsingIncidentElement; + bool mParsingDescriptionElement; + bool mCurrentTestFailed; + QString mCurrentTestName; + QString mCurrentTestFile; + int mCurrentTestFailureLine; +}; + + +#endif // TESTRESULTXMLPARSER_H diff -r 33a5d2bbf6fc -r 73a1feb507fb tsrc/qtestutils/src/testresultxmlparser.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tsrc/qtestutils/src/testresultxmlparser.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,178 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + +#include "testresultxmlparser.h" +#include + +const char testFunctionElement[] = "TestFunction"; +const char incidentElement[] = "Incident"; +const char descriptionElement[] = "Description"; +const char nameAttr[] = "name"; +const char typeAttr[] = "type"; +const char fileAttr[] = "file"; +const char lineAttr[] = "line"; +const char attrValueFail[] = "fail"; + + +// ----------------------------------------------------------------------------- +// TestResultXmlParser::TestResultXmlParser +// ----------------------------------------------------------------------------- +// +TestResultXmlParser::TestResultXmlParser() +: mTestCount(0), + mParsingIncidentElement(false), + mParsingDescriptionElement(false), + mCurrentTestFailed(false), + mCurrentTestFailureLine(0) +{ + mErrors = new QStringList; +} + +// ----------------------------------------------------------------------------- +// TestResultXmlParser::TestResultXmlParser +// ----------------------------------------------------------------------------- +// +TestResultXmlParser::~TestResultXmlParser() +{ + delete mErrors; +} + +// ----------------------------------------------------------------------------- +// TestResultXmlParser::startElement +// ----------------------------------------------------------------------------- +// +bool TestResultXmlParser::startElement( + const QString& /*namespaceURI*/, + const QString& /*localName*/, + const QString& qName, + const QXmlAttributes& atts) +{ + if (qName == testFunctionElement) { + mTestCount++; + mCurrentTestName = atts.value(nameAttr); + return true; + } + if (qName == incidentElement) { + mParsingIncidentElement = true; + if (atts.value(typeAttr) == attrValueFail) { + mCurrentTestFailed = true; + mCurrentTestFile = atts.value(fileAttr); + mCurrentTestFailureLine = atts.value(lineAttr).toInt(); + } + return true; + } + mParsingDescriptionElement = (qName == descriptionElement); + return true; +} + +// ----------------------------------------------------------------------------- +// TestResultXmlParser::endElement +// ----------------------------------------------------------------------------- +// +bool TestResultXmlParser::endElement( + const QString& /*namespaceURI*/, + const QString& /*localName*/, + const QString& qName) +{ + if (qName == incidentElement) { + mParsingIncidentElement = false; + mCurrentTestFailed = false; + return true; + } + if (qName == descriptionElement) { + mParsingDescriptionElement = false; + } + return true; +} + +// ----------------------------------------------------------------------------- +// TestResultXmlParser::characters +// ----------------------------------------------------------------------------- +// +bool TestResultXmlParser::characters(const QString& ch) +{ + if (mParsingIncidentElement && + mParsingDescriptionElement && + mCurrentTestFailed) { + QString testResult = mCurrentTestName + " failed:\n"; + testResult += "File: "; + testResult += mCurrentTestFile; + testResult += "\n"; + testResult += "Line: "; + testResult += QString::number(mCurrentTestFailureLine); + testResult += "\n"; + testResult += "Reason: "; + testResult += ch; + testResult += "\n"; + mErrors->append(testResult); + } + return true; +} + +// ----------------------------------------------------------------------------- +// TestResultXmlParser::parse +// ----------------------------------------------------------------------------- +// +int TestResultXmlParser::parse(const QString& fileName) +{ + QFile file(fileName); + QXmlInputSource inputSource(&file); + QXmlSimpleReader reader; + reader.setContentHandler(this); + return reader.parse(inputSource); +} + +// ----------------------------------------------------------------------------- +// TestResultXmlParser::parseAndPrintResults +// ----------------------------------------------------------------------------- +// +int TestResultXmlParser::parseAndPrintResults( + const QString& fileName, + bool printDetails) +{ + printf("Parsing: %s\n", fileName.toUtf8().data()); + int error = parse(fileName); + printf("%d tests executed. Failed total: %d\n", mTestCount, mErrors->count()); + if (printDetails) { + printf("\n"); + foreach(QString error, *mErrors) { + printf(error.toUtf8().data()); + printf("\n"); + } + } + return error; +} + +// ----------------------------------------------------------------------------- +// TestResultXmlParser::testCount +// ----------------------------------------------------------------------------- +// +int TestResultXmlParser::testCount() +{ + return mTestCount; +} + +// ----------------------------------------------------------------------------- +// TestResultXmlParser::errors +// ----------------------------------------------------------------------------- +// +QStringList TestResultXmlParser::errors() +{ + return *mErrors; +} + +// End of File. diff -r 33a5d2bbf6fc -r 73a1feb507fb tsrc/telephonyaudioroutingstub/inc/telephonyaudiorouting.h --- a/tsrc/telephonyaudioroutingstub/inc/telephonyaudiorouting.h Thu Aug 19 09:51:39 2010 +0300 +++ b/tsrc/telephonyaudioroutingstub/inc/telephonyaudiorouting.h Tue Aug 31 15:12:07 2010 +0300 @@ -56,7 +56,7 @@ static CTelephonyAudioRouting* NewL( MTelephonyAudioRoutingObserver& aObserver ); - virtual ~CTelephonyAudioRouting(); + ~CTelephonyAudioRouting(); /** * Returns array of currently available outputs. @@ -74,7 +74,7 @@ * @param none. * @return TArray& Array of available outputs. */ - virtual const TArray& AvailableOutputs(); + const TArray& AvailableOutputs(); /** * Returns the current output configured by the client application to play @@ -94,7 +94,7 @@ * @param none. * @return TAudioOutput Current output. */ - virtual TAudioOutput Output(); + TAudioOutput Output(); /** * Sends an asynchronous request to Adaptation to set the output @@ -118,7 +118,7 @@ * of the outputs from AvailableOutputs() list or ENotActive. * @return none. */ - virtual void SetOutputL( TAudioOutput aOutput = ENotActive ); + void SetOutputL( TAudioOutput aOutput = ENotActive ); /** * Returns the second last output that was successfully configured to @@ -137,7 +137,7 @@ * audio. ENone will never be returned since telephony apps cannot call * SetOutputL(ENone). */ - virtual TAudioOutput PreviousOutput(); + TAudioOutput PreviousOutput(); /* * Sends the Show Note mode to server along with the next SetOutputL() @@ -155,7 +155,7 @@ * @param TBool aMode Show Note mode. ETrue or EFalse. * @return KErrNone if succesfull, otherwise system-wide error code. */ - virtual TInt SetShowNote( TBool aMode ); + TInt SetShowNote( TBool aMode ); /* * Returns the the Show Note mode for the last succesfully completed @@ -182,7 +182,7 @@ * Show Note mode. EFalse or ETrue. * @return KErrNone if succesfull, otherwise system-wide error code. */ - virtual TInt GetShowNote( TBool& aMode ); + TInt GetShowNote( TBool& aMode ); private: @@ -194,8 +194,8 @@ MTelephonyAudioRoutingObserver& iObserver; RArray iAvailableOutputs; - static TAudioOutput iCurrentOutput; - static TAudioOutput iPreviousOutput; + TAudioOutput iCurrentOutput; + TAudioOutput iPreviousOutput; TBool iShowNoteMode; diff -r 33a5d2bbf6fc -r 73a1feb507fb tsrc/telephonyaudioroutingstub/src/telephonyaudioroutingstub.cpp --- a/tsrc/telephonyaudioroutingstub/src/telephonyaudioroutingstub.cpp Thu Aug 19 09:51:39 2010 +0300 +++ b/tsrc/telephonyaudioroutingstub/src/telephonyaudioroutingstub.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -20,11 +20,6 @@ -CTelephonyAudioRouting::TAudioOutput CTelephonyAudioRouting::iCurrentOutput = - CTelephonyAudioRouting::ENone; -CTelephonyAudioRouting::TAudioOutput CTelephonyAudioRouting::iPreviousOutput = - CTelephonyAudioRouting::ENone; - // ============================ MEMBER FUNCTIONS =============================== @@ -91,7 +86,6 @@ User::Leave( leaveValue ); } - iPreviousOutput = iCurrentOutput; iCurrentOutput = aOutput; } diff -r 33a5d2bbf6fc -r 73a1feb507fb tsrc/unittestrunner/eunitdlls_ctc.txt --- a/tsrc/unittestrunner/eunitdlls_ctc.txt Thu Aug 19 09:51:39 2010 +0300 +++ b/tsrc/unittestrunner/eunitdlls_ctc.txt Tue Aug 31 15:12:07 2010 +0300 @@ -1,35 +1,39 @@ mmsharinguis/mmsharing/mmshengine/tsrc/ut_engine/group ut_musengine.dll -1 +0 mmsharinguis/mmsharing/mmshavailability/tsrc/ut_availability/group ut_availability.dll -1 +0 mmsharinguis/mmshplugins/mmshaoplugin/tsrc/ut_aoplugin/group ut_aoplugin.dll -1 +0 mmsharinguis/mmshplugins/mmshsipcrplugin/tsrc/ut_sipcrplugin/group ut_sipcrplugin.dll -1 +0 mmsharinguis/mmshplugins/mmshaiwplugin/tsrc/ut_aiwplugin/group ut_musaiwprovider.dll -1 +0 mmsharinguis/mmshplugins/mmshwpadapterplugin/tsrc/ut_wpadapterplugin/group ut_muswpadapter.dll -1 +0 mmsharinguis/mmsharing/mmshmanagercli/tsrc/ut_managercli/group ut_musmanagerclient.dll -1 +0 mmsharinguis/mmsharing/mmshmanagersrv/tsrc/ut_managersrv/group ut_musmanagerserver.dll -1 +0 mmsharinguis/mmsharing/mmshindicator/tsrc/ut_indicator/group ut_musindicator.dll -1 +0 + +mmsharinguis/mmshplugins/mmcctranscoder/tsrc/ut_transcoder/group +ut_transcoder.dll +0 diff -r 33a5d2bbf6fc -r 73a1feb507fb tsrc/unittestrunner/eunittest_ctc.pl --- a/tsrc/unittestrunner/eunittest_ctc.pl Thu Aug 19 09:51:39 2010 +0300 +++ b/tsrc/unittestrunner/eunittest_ctc.pl Tue Aug 31 15:12:07 2010 +0300 @@ -42,9 +42,10 @@ $ignoredmodeSourceRelative = "1"; $coverageSymbols = "MON.sym"; -$ctcCommandPart1 = "ctcwrap -i d -n"; -$ctcCommandPart2 = "abld build winscw udeb"; -$ctcCommandPart2Test = "abld test build winscw udeb"; +#$ctcCommandPart1 = "ctcwrap -i d -2comp -no-conf-check -n"; +$ctcCommandPart1 = "ctcwrap -i d -2comp -n"; +$ctcCommandPart2 = "sbs.bat -c winscw_udeb"; +$ctcCommandPart2Test = "sbs -c winscw_udeb.test"; $ctcIgnoredPart1 = " -C \"EXCLUDE+"; $ctcIgnoredPart2 = "\" "; @@ -239,11 +240,12 @@ unlink("$eunitDstDllLocation$currentDllNameLine"); if ($currentBuildModeLine =~ /$eunitTestBuildMode/) { - doSystemCall("abld test reallyclean winscw udeb "); + doSystemCall("sbs -c winscw_udeb.test reallyclean "); } else { - doSystemCall("abld reallyclean winscw udeb "); + #doSystemCall("sbs -c winscw_udeb reallyclean "); + doSystemCall("sbs REALLYCLEAN "); } } else @@ -267,16 +269,15 @@ else { print("previous dll was not from same path - build all!\n"); - doSystemCall("bldmake bldfiles"); if ($currentBuildModeLine =~ /$eunitTestBuildMode/) - { - doSystemCall("abld test reallyclean winscw udeb "); - doSystemCall("$ctcCommandPart1 $coverageResultsDir$coverageSymbols $excludedCmd $ctcCommandPart2Test"); - } + { + doSystemCall("sbs -c winscw_udeb.test reallyclean "); + doSystemCall("$ctcCommandPart1 $coverageResultsDir$coverageSymbols $excludedCmd $ctcCommandPart2Test"); + } else { - doSystemCall("abld reallyclean winscw udeb "); + doSystemCall("sbs REALLYCLEAN "); doSystemCall("$ctcCommandPart1 $coverageResultsDir$coverageSymbols $excludedCmd $ctcCommandPart2"); } } diff -r 33a5d2bbf6fc -r 73a1feb507fb tsrc/unittestrunner/qt_runall.cmd --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tsrc/unittestrunner/qt_runall.cmd Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,22 @@ +@echo off +rem +rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +rem All rights reserved. +rem This component and the accompanying materials are made available +rem under the terms of "Eclipse Public License v1.0" +rem which accompanies this distribution, and is available +rem at the URL "http://www.eclipse.org/legal/epl-v10.html". +rem +rem Initial Contributors: +rem Nokia Corporation - initial contribution. +rem +rem Contributors: +rem +rem Description: +rem +@echo on + +echo --qt_runtest.cmd ut_lcuieng-- +call qt_runtest.cmd ut_lcuieng +echo --qt_runtest.cmd ut_lcui-- +call qt_runtest.cmd ut_lcui diff -r 33a5d2bbf6fc -r 73a1feb507fb tsrc/unittestrunner/qt_runtest.cmd --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tsrc/unittestrunner/qt_runtest.cmd Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,26 @@ +@echo off +rem +rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +rem All rights reserved. +rem This component and the accompanying materials are made available +rem under the terms of "Eclipse Public License v1.0" +rem which accompanies this distribution, and is available +rem at the URL "http://www.eclipse.org/legal/epl-v10.html". +rem +rem Initial Contributors: +rem Nokia Corporation - initial contribution. +rem +rem Contributors: +rem +rem Description: +rem +@echo on + +call del %1.xml + +:FINAL +echo --because xml names are defined in main.cpp this -o is unnecessary at the moment +echo --\epoc32\release\winscw\udeb\%1.exe -xml -o c:\%1.xml +call \epoc32\release\winscw\udeb\%1.exe -xml -o c:\%1.xml +call copy \epoc32\winscw\c\%1.xml . +call type %1.xml \ No newline at end of file diff -r 33a5d2bbf6fc -r 73a1feb507fb tsrc/unittestrunner/qt_runtests.cmd --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tsrc/unittestrunner/qt_runtests.cmd Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,57 @@ +@echo off +rem +rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +rem All rights reserved. +rem This component and the accompanying materials are made available +rem under the terms of "Eclipse Public License v1.0" +rem which accompanies this distribution, and is available +rem at the URL "http://www.eclipse.org/legal/epl-v10.html". +rem +rem Initial Contributors: +rem Nokia Corporation - initial contribution. +rem +rem Contributors: +rem +rem Description: +rem +@echo on + +call del MON.sym +call del MON.dat + +call qmake -platform symbian-abld +call sbs -c winscw_udeb reallyclean + +echo -- Build sbs -c winscw_udeb-- +call sbs -c winscw_udeb + +echo -- Build and instrument for Code coverage -- +echo -- ctcwrap -i f : This instruments the code for function coverage measurement +call ctcwrap -i d -C "EXCLUDE+*/tsrc/*" -C "EXCLUDE+*/*/tsrc/*" -C "EXCLUDE+*/*/*/tsrc/*" -C "EXCLUDE+moc_*" sbs -c winscw_udeb + +echo --qt_runall.cmd +call qt_runall.cmd + +echo --ctcpost MON.sym MON.dat -p profile.txt +call ctcpost MON.sym MON.dat -p profile.txt + +echo --you can give the output directory for the result +echo --e.q qt_runtests.cmd R:\qtresult +echo --ctc2html -i profile.txt -o %1 + +IF ["%1"] EQU [""] GOTO :USEDEFDIR + +call ctc2html -i profile.txt -o %1 +GOTO :ENDDIR + +:USEDEFDIR +echo --default output directory used +call ctc2html -i profile.txt + +:ENDDIR +echo -- Coverage calculated -- + +:END +echo -- Build Complete -- + + diff -r 33a5d2bbf6fc -r 73a1feb507fb tsrc/unittestrunner/tsrc.pro --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tsrc/unittestrunner/tsrc.pro Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,25 @@ +# +# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +# All rights reserved. +# This component and the accompanying materials are made available +# under the terms of "Eclipse Public License v1.0" +# which accompanies this distribution, and is available +# at the URL "http://www.eclipse.org/legal/epl-v10.html". +# +# Initial Contributors: +# Nokia Corporation - initial contribution. +# +# Contributors: +# +# Description: +# +# + +TEMPLATE = subdirs + +SUBDIRS= \ + ..\..\mmsharing\livecommsui\lcui\tsrc\ut_lcui\ + ..\..\mmsharing\livecommsui\lcuiengine\tsrc\ut_lcuieng\ + ..\..\mmsharing\mmshapp\tsrc\ut_mmshapp\ + +include(rom/rom.pri) diff -r 33a5d2bbf6fc -r 73a1feb507fb tsrc/unittestrunner/unittest_ctc.pl --- a/tsrc/unittestrunner/unittest_ctc.pl Thu Aug 19 09:51:39 2010 +0300 +++ b/tsrc/unittestrunner/unittest_ctc.pl Tue Aug 31 15:12:07 2010 +0300 @@ -299,12 +299,12 @@ print("\n*************************************************************\n\n"); print("Script runs by default all multimediasharing eunit tests\n"); print("and creates build, test and coverage results to:\n\n"); - print(" mmsharing/src/internal/unittestrunner/results/\n\n"); + print(" $coverageResultsDirDefault\n\n"); print("Own configuration file (list of components to be processed)\n"); print("can be used as well:\n\n"); print(" >unittest_ctc.pl -eunitdlls=myowneunitcomponents.txt\n\n"); print("The text file should follow the syntax of default configuration file\n"); - print("mmsharing/src/internal/unittestrunner/eunitdlls_ctc.txt\n\n"); + print("$scriptLocation/eunitdlls_ctc.txt\n\n"); print("Alloc failure simulation can be turned on with following command:\n\n"); print(" >unittest_ctc.pl -allocfailure=2\n\n"); print("Any number will turn eunit alloc on.\n"); diff -r 33a5d2bbf6fc -r 73a1feb507fb tsrc/unittestrunner/unittest_qt.pl --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tsrc/unittestrunner/unittest_qt.pl Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,442 @@ +# +# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +# All rights reserved. +# This component and the accompanying materials are made available +# under the terms of "Eclipse Public License v1.0" +# which accompanies this distribution, and is available +# at the URL "http://www.eclipse.org/legal/epl-v10.html". +# +# Initial Contributors: +# Nokia Corporation - initial contribution. +# +# Contributors: +# +# Description: +# +#!/usr/bin/perl + +use File::Copy; +use Cwd; +use Getopt::Long; +use XML::Parser::Expat; +use Data::Dumper; + +#---------------------------------------Initialization------------------------------------------------------# + +$projectrootname = "/"; #is set to correct at run-time +$projectdrive = "z:"; #is set to correct at run-time + +$unitTestRunner = "unittest_qt.pl"; +$scriptLocation = "mmsharinguis/tsrc/unittestrunner"; +$coverageResultsDirDefault = "mmsharinguis/tsrc/unittestrunner/qtresults/"; +$testConfigDefault = "unittest_qt_config.txt"; +$qtProFileDefault = "tsrc.pro"; +$buildResults = "BuildResults.txt"; +$coverageDat = "MON.dat"; +$coverageSymbols = "MON.sym"; +$coverageProfile = "profile.txt"; + +$coverageResultsFile = "CTCHTML/index.html"; +$finalResultsFile = "AllResults.html"; +$cssFile = "CTCHTML/ctc.css"; +$cssLink = " \$param_noclean, + "config:s" => \$testConfig, + "pro:s" => \$qtProFile, + "results:s" => \$coverageResultsDir, + "help" => \$help); + +$startdir = cwd; + +if (defined $help){ + print_help(); + exit; +} + +findProjectDriveAndRoot(); + +createResultsDir(); + +# set target for intrumentation result +$ENV{'CTC_DATA_PATH'}= "$coverageResultsDir"; + +doClean(); + +parseConfigFile(); + +buildTests(); + +runTests(); + +chdir($startdir); + +# create textual output +chdir("$coverageResultsDir"); +doSystemCall("ctcpost $coverageSymbols $coverageDat -p $coverageProfile -T 70"); +doSystemCall("ctc2html -i $coverageProfile -t 70"); + +# clear target for intrumentation result +$ENV{'CTC_DATA_PATH'}= ""; + +combineResults(); + +chdir($startdir); + +#---------------------------------------Main Ends-------------------------------------------------------------# + +# ----------------------------------------------------------------------------- +# +# ----------------------------------------------------------------------------- +# +sub findProjectDriveAndRoot() +{ + $tempStartDir = $startdir; + if ($tempStartDir =~ m/$scriptLocation/){ + # extract project root + for ($tempStartDir) { + s/$scriptLocation+$//; + } + # divide it to drive and root + if ($tempStartDir =~ /^(.:)(.*)/){ + $projectdrive = $1; + $projectrootname = $2; + } + print "project drive: $projectdrive \n"; + print "project root: $projectrootname \n"; + } + else{ + print "cannot determine project drive and root, use defaults!\n"; + } +} + +# ----------------------------------------------------------------------------- +# +# ----------------------------------------------------------------------------- +# +sub createResultsDir() +{ + # create directory for results + if ( defined $coverageResultsDir ){ + if ($coverageResultsDir =~ /^(.:)/){ + print("Drive name given in results dir arg\n"); + } + else{ + $coverageResultsDir = "$projectdrive" . "/" . "$coverageResultsDir"; + } + } + else{ + $coverageResultsDir = "$projectdrive$projectrootname$coverageResultsDirDefault"; + } + print ("Writing results to $coverageResultsDir \n\n"); + if (mkdir("$coverageResultsDir", 0755)){ + print("The results directory was created successfully! \n"); + } + else { + print("The results directory already exists. \n"); + } +} + +# ----------------------------------------------------------------------------- +# +# ----------------------------------------------------------------------------- +# +sub doClean() +{ + if (!defined $param_noclean) + { + # clear previous results + print("Cleaning previous results. \n"); + unlink("$coverageResultsDir$buildResults"); + unlink("$coverageResultsDir$coverageDat"); + unlink("$coverageResultsDir$coverageSymbols"); + unlink("$coverageResultsDir$coverageProfile"); + unlink("$coverageResultsDir$finalResultsFile"); + } +} + +# ----------------------------------------------------------------------------- +# +# ----------------------------------------------------------------------------- +# +sub parseConfigFile() +{ + if ( !defined $testConfig ){ + print("Config file not defined, using default. \n"); + $testConfig = $testConfigDefault; + } + + open(CONFIG, $testConfig) or die("file $testConfig not found!\n"); + + @config_file_content = ; + + + for ($j = 0; $j <= $#config_file_content; $j++) + { + # remove \n from each line + $currline = @config_file_content[$j]; + for ($currline) { + s/\n+$//; + } + @{ $testNamesAndLogFiles [$j] } = split( ",", $currline ); + } + + print Dumper( @testNamesAndLogFiles ); + + close(CONFIG); +} + +# ----------------------------------------------------------------------------- +# +# ----------------------------------------------------------------------------- +# +sub buildTests() +{ + if ( !defined $qtProFile ){ + print("Pro file not defined, using default. \n"); + $qtProFile = $qtProFileDefault; + } + doSystemCall( "qmake $qtProFile" ); + doSystemCall( "sbs reallyclean" ); + doSystemCall( "qmake $qtProFile" ); + + $exclude = "-C \"EXCLUDE+*\tsrc\*\" -C \"EXCLUDE+*/*/tsrc/*\" -C \"EXCLUDE+*/*/*/tsrc/*\" -C \"EXCLUDE+moc_*\""; + + doSystemCall( "call ctcwrap -i d -n $coverageResultsDir$coverageSymbols $exclude -2comp sbs.bat -c winscw_udeb" ); +} + +# ----------------------------------------------------------------------------- +# +# ----------------------------------------------------------------------------- +# +sub runTests() +{ + for $i ( 0 .. $#testNamesAndLogFiles ) { + $testName = $testNamesAndLogFiles[$i][0]; + print("Running tests for: $testName\n"); + + $testCall = "\\epoc32\\release\\winscw\\udeb\\" . $testName . " -xml"; + doSystemCall( $testCall ); + + for $j ( 1 .. $#{ $testNamesAndLogFiles [$i] } ) { + $logFile = $projectdrive . "\\epoc32\\winscw\\c\\" . $testNamesAndLogFiles[$i][$j]; + print("Copying log file: $logFile\n"); + copy( $logFile, "$coverageResultsDir" ); + } + } +} + +# ----------------------------------------------------------------------------- +# +# ----------------------------------------------------------------------------- +# +sub combineResults() +{ + open(COVERAGE, "$coverageResultsDir$coverageResultsFile") or die("file $coverageResultsFile not found!\n"); + @coverageFileContent = ; + + # append coverage information after eunit results + + for ($j = 0; $j <= $#coverageFileContent; $j++){ + $currentLine = @coverageFileContent[$j]; + + if ($currentLine =~ /$cssLink/){ + if ( open(CSSFILE, "$coverageResultsDir$cssFile") ){ + # append css styles to results html + $outputString .= "\n"; + close(CSSFILE); + } + } + else{ + $outputString .= $currentLine; + + if ($currentLine =~ /$outputFileBodyStart/){ + $outputString .= parseXmlResults(); + $outputString .= "

" + } + } + } + + open(NEWRESULTSFILE, "> $coverageResultsDir$finalResultsFile") or die "Cannot open final results file\n"; + print NEWRESULTSFILE "$outputString"; + close(NEWRESULTSFILE); + close(OUTPUT); + close(COVERAGE); +} + +# ----------------------------------------------------------------------------- +# +# ----------------------------------------------------------------------------- +# +sub parseXmlResults() +{ + $qtestOutputString = "QTestLib Results

\n"; + + + for $i ( 0 .. $#testNamesAndLogFiles ) { + $testName = $testNamesAndLogFiles[$i][0]; + + for $j ( 1 .. $#{ $testNamesAndLogFiles [$i] } ) { + $logFile = $testNamesAndLogFiles[$i][$j]; + if ( -e "$coverageResultsDir$logFile" ){ + print("Parsing: $logFile\n"); + open(TESTRESULTS, "$coverageResultsDir$logFile"); + $parser = new XML::Parser::Expat; + $parser->setHandlers('Start' => \&sh, + 'End' => \&eh, + 'Char' => \&ch); + + $totalCount = 0; + $passedCount = 0; + $failedCount = 0; + eval{ + ### try block + $parser->parse(*TESTRESULTS); + }; + if ($@){ + ### catch block + print("$logFile, parsing failed\n"); + $qtestOutputString .= "$logFile parsing failed, testcase execution might have failed
\n"; + }; + close(TESTRESULTS); + + } + else{ + + print("$logFile, not found\n"); + $qtestOutputString .= ""; + $qtestOutputString .= "$testName => "; + $qtestOutputString .= "$logFile not found, testcase building might have failed
\n"; + } + } + } + + return $qtestOutputString; +} + +# ----------------------------------------------------------------------------- +# +# ----------------------------------------------------------------------------- +# +sub sh +{ + my ($p, $el, %atts) = @_; + if ( $el eq $xmlDllLine ) + { + $qtestOutputString .= ""; + $dllName = %atts->{name}; + @dllNameParts = split m!(\\)!, $dllName; + $dllName = $dllNameParts[$#dllNameParts]; + $qtestOutputString .= "$dllName => "; + } + + if ( $el eq $xmlResultLine ) + { + $status = %atts->{type}; + if ( $status eq $xmlCasePassed ) + { + $passedCount++; + } + else + { + $failedCount++; + } + } +} + +# ----------------------------------------------------------------------------- +# +# ----------------------------------------------------------------------------- +# +sub eh +{ + my ($p, $el) = @_; + if ( $el eq $xmlDllLine ) + { + $totalCount = $passedCount + $failedCount; + if ( $failedCount > 0 || $totalCount == 0 ) + { + $qtestOutputString .= "Testcases passed/run: $passedCount/$totalCount
\n"; + } + else + { + $qtestOutputString .= "Testcases passed/run: $passedCount/$totalCount
\n"; + } + $passedCount = 0; + $failedCount = 0; + } +} + +# ----------------------------------------------------------------------------- +# +# ----------------------------------------------------------------------------- +# +sub ch +{ + my ($p, $el) = @_; + #print ("$el\n"); +} + +# ----------------------------------------------------------------------------- +# +# ----------------------------------------------------------------------------- +# +sub doSystemCall +{ + #print("\nDoing system call: $_[0]\n"); + #system($_[0]); + system("echo Doing system call: $_[0] >> $coverageResultsDir$buildResults"); + system("$_[0] >> $coverageResultsDir$buildResults 2>&1"); +} + +# ----------------------------------------------------------------------------- +# +# ----------------------------------------------------------------------------- +# +sub print_help +{ + print("\n*************************************************************\n\n"); + print("Script runs by default all multimediasharing qt tests\n"); + print("and creates build, test and coverage results to:\n\n"); + print(" mmsharing/src/internal/unittestrunner/qtresults/\n\n"); + print("Own configuration file (list of components to be processed)\n"); + print("can be used as well:\n\n"); + print(" >unittest_ctc.pl -config=myowntestcomponents.txt\n\n"); + print("The text file should follow the syntax of default configuration file\n"); + print("mmsharing/src/internal/unittestrunner/unittest_qt_config.txt\n\n"); + print("When running just some set of components you might want to \"merge\" the results"); + print("with existing coverage results.\n"); + print("That is possible with command:\n\n"); + print(" >unittest_ctc.pl -eunitdlls=myowneunitcomponents.txt -noclean\n"); + print("\n*************************************************************\n"); +} diff -r 33a5d2bbf6fc -r 73a1feb507fb tsrc/unittestrunner/unittest_qt_config.txt --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tsrc/unittestrunner/unittest_qt_config.txt Tue Aug 31 15:12:07 2010 +0300 @@ -0,0 +1,3 @@ +ut_lcuieng -noprompt,ut_lcui_lcUiEngine.xml,ut_lcui_lcactivitymanager.xml +ut_lcui -noprompt,ut_lcui_LcViewManager.xml,ut_lcui_LcUiComponentRepository.xml,ut_lcui_LcView.xml,ut_lcui_LcEffectHandler.xml,ut_lcui_LcVideoWidget.xml +ut_mmshapp -noprompt,ut_lcapplication.xml \ No newline at end of file