browserplugins/browseraudiovideoplugin/src/BavpController.cpp
changeset 51 48e827313edd
parent 37 481242ead638
child 53 f427d27b98d8
--- a/browserplugins/browseraudiovideoplugin/src/BavpController.cpp	Tue Feb 02 00:12:41 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,880 +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 the License "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:  Base Controller class for handling browser requests to play
-*                audio or video
-*
-*/
-
-
-// INCLUDE FILES
-#include <bautils.h>
-#include <f32file.h>
-#include <utf.h>
-#include <e32cmn.h>
-#include <aknquerydialog.h>                 // Volume list query dialog
-#include <aknlists.h>
-#include <CTSYDomainPSKeys.h>
-
-#include <browseruisdkcrkeys.h>
-#include <BrowserAudioVideoPlugin.rsg>
-
-#include "BavpController.h"
-#include "BavpClipInfo.h"
-#include "BavpView.h"
-#include "BavpLogger.h"
-
-#if defined(BRDO_ASX_FF)
-#include "AsxParser.h"
-#endif //BRDO_ASX_FF
-
-#include "eikon.hrh"
-
-using namespace RT_GestureHelper;
-
-// CONSTANTS
-const TInt KBavpMaxLinkFileSize = 5120; // 5kB
-const TInt KRectPadding = 2;
-
-// Define our static BavpController array
-RPointerArray<CBavpController> CBavpController::iBavpControllerArray;
-
-
-// ============================ MEMBER FUNCTIONS ===============================
-
-// -----------------------------------------------------------------------------
-// CBavpController::CBavpController
-// C++ default constructor can NOT contain any code, that
-// might leave.
-// -----------------------------------------------------------------------------
-CBavpController::CBavpController( MBavpView* aView,
-                                  TUint aAccessPtId )
-    : CActive( EPriorityStandard ),
-      iCurrentState( EBavpNone ),
-      iPreCallState( EBavpNone ),
-      iLastCommand( EBavpCmdUnknown ),
-      iLoopCount( 1 ),
-      iInitLoopCount( 1 ),
-      iInfiniteLoopFlag( EFalse ),
-      iAccessPtId( aAccessPtId ),
-      iBavpView( aView ),
-      iOriginalFileName ( NULL ),
-      iMimeType ( NULL )
-    {
-        CActiveScheduler::Add( this );
-    }
-
-// -----------------------------------------------------------------------------
-// CBavpController::~CBavpController()
-// Destructor
-// -----------------------------------------------------------------------------
-CBavpController::~CBavpController()
-    {
-    Log( EFalse, _L("CBavpController::~CBavpController this="), (TInt)this );
-
-    if ( iClipInfo )
-        {
-        delete iClipInfo;
-        }
-
-    iIncomingCalls.Close();
-
-    // Cancel active object and deleting removes from the ActiveScheduler
-    Cancel();
-
-    if ( iBavpVolumeHandler )
-        {
-        delete iBavpVolumeHandler;
-        }
-
-    // No need to check, if not active, Cancel() does nothing
-    if ( iPositionUpdater )
-        {
-        iPositionUpdater->Cancel();
-        delete iPositionUpdater;
-        }
-
-    if ( iHwKeyEvents )
-        {
-        delete iHwKeyEvents;
-        }
-
-     if ( iOriginalFileName )
-     {
-        delete iOriginalFileName;
-     }
-
-     if ( iMimeType )
-     {
-        delete iMimeType;
-     }
-
-    // Remove this instance from the array
-    TInt index = iBavpControllerArray.Find( this );
-    if ( index != KErrNotFound )
-        {
-        iBavpControllerArray.Remove( index );
-        }
-    if ( iBavpControllerArray.Count() == 0 )
-        {
-        iBavpControllerArray.Close();
-        }
-    }
-
-// -----------------------------------------------------------------------------
-// CBavpController::HandleBrowserNotification
-// Default implementation, override as needed.
-// Handles notification from the Browser concerning the Browser's focus state
-// (Browser is in-focus, out-focus, foreground, or the background application)
-// and if this plugin is in-focus or out-focus. If the Browser is out-focus,
-// this plugin (all plugins) are out-focus. This is not used currently,
-// because we do not react to the Browser changing focus. We historically would
-// stop playing audio when the browser's focus changed (including when option
-// menu is popped up, ie menu top of stack).
-// -----------------------------------------------------------------------------
-void CBavpController::HandleBrowserNotification( TBool aFocus )
-    {
-    Log( EFalse, _L("CBavpController::HandleBrowserNotification: aBrowserFocus="),
-            aFocus );
-    }
-
-// -----------------------------------------------------------------------------
-// CBavpController::HandleError
-// Default implementation, override as needed.
-// This default error handling implementation just displays the broken (bad)
-// content animation and sets state to EBavpBadContent.
-// -----------------------------------------------------------------------------
-void CBavpController::HandleError( TInt aError )
-    {
-    Log( EFalse, _L("CBavpController::HandleError(): aError="), aError );
-
-    if ( aError != KErrNone )
-        {
-        // Any error, display we have bad content
-        iCurrentState = EBavpBadContent;
-        iBavpView->UpdateView();
-        }
-    }
-
-// -----------------------------------------------------------------------------
-// CBavpController::HandleKeysL
-// Default implementation, override as needed.
-// Handles user key presses when the Plugin is Activated.
-// -----------------------------------------------------------------------------
-TKeyResponse CBavpController::HandleKeysL( const TKeyEvent& aKeyEvent,
-                                           TEventCode /*aType*/ )
-    {
-    Log( EFalse, _L("CBavpController::HandleKeysL()") );
-
-    TKeyResponse keyResponse = EKeyWasNotConsumed;
-
-    switch ( aKeyEvent.iCode )
-        {
-        // Cancel key (RSK) was pressed
-        case EKeyDevice1:
-            // Return the focus to the Browser, remove it from Bavp
-            iBavpView->CoeControl().SetFocus( EFalse );
-            keyResponse = EKeyWasConsumed;
-            break;
-
-        // Arrow keys was pressed
-        case EKeyUpArrow:             // North
-
-        case EKeyRightUpArrow:        // Northeast
-        case EStdKeyDevice11:         // Extra KeyEvent supports diagonal event simulator wedge
-
-        case EKeyRightArrow:          // East
-
-        case EKeyRightDownArrow:      // Southeast
-        case EStdKeyDevice12:         // Extra KeyEvent supports diagonal event simulator wedge
-
-        case EKeyDownArrow:           // South
-
-        case EKeyLeftDownArrow:       // Southwest
-        case EStdKeyDevice13:         // Extra KeyEvent supports diagonal event simulator wedge
-
-        case EKeyLeftArrow:           // West
-
-        case EKeyLeftUpArrow:         // Northwest
-        case EStdKeyDevice10:         // Extra KeyEvent supports diagonal event simulator wedge
-
-            // Do nothing with these keys, there is no navigating inside Bavp.
-            keyResponse = EKeyWasConsumed;
-            break;
-
-        default:
-        // Do nothing, let the rest of the key events pass back not consumed
-        break;
-        }   // end of switch
-
-    return keyResponse;
-    }
-
-// -----------------------------------------------------------------------------
-// CBavpController::HandleCommandL
-// Default implementation, override as needed.
-// Handles the commands from the Option Menu defined in TBavpCommandIds
-// -----------------------------------------------------------------------------
-void CBavpController::HandleCommandL( TBavpCommandIds aCommand )
-    {
-    Log( EFalse, _L("CBavpController::HandleCommandL(): aCommand="), (TInt)aCommand );
-
-    switch ( aCommand )
-        {
-        case EBavpCmdPlay:
-            iLastCommand = EBavpCmdPlay;
-            PlayL();
-            break;
-
-        case EBavpCmdStop:
-            iLastCommand = EBavpCmdStop;
-            Stop();
-            break;
-
-        case EBavpCmdPause:
-            iLastCommand = EBavpCmdPause;
-            PauseL();
-            break;
-
-        case EBavpCmdFastForward:
-            iLastCommand = EBavpCmdFastForward;
-            FastForwardL();
-            break;
-
-        case EBavpCmdRewind:
-            iLastCommand = EBavpCmdRewind;
-            RewindL();
-            break;
-
-        case EBavpCmdChangeVolume:
-            iLastCommand = EBavpCmdChangeVolume;
-            CreateVolumeListDlgL();
-            break;
-
-        case EBavpCmdMuteVolume:
-            iLastCommand = EBavpCmdMuteVolume;
-            iBavpVolumeHandler->HandleNotifyInt( KBrowserMediaVolumeControl,
-                                                 KCRVolumeMute );
-            break;
-
-        default:
-            iLastCommand = EBavpCmdUnknown;
-            break;
-        }
-    }
-
-// -----------------------------------------------------------------------------
-// CBavpController::BavpGainedFocus
-// Default implementation, override as needed.
-// Called by CBavpView to CBavpPlugin whenever Bavp Plugin has focus and soft key
-// cancel is hit. When this happens the Browser calls NotifyL with 1.
-// -----------------------------------------------------------------------------
-void CBavpController::BavpFocusChanged( TBool aFocus )
-    {
-    iBavpHasFocus = aFocus;
-    }
-
-// -----------------------------------------------------------------------------
-// CBavpController::SetVolumeFromAttribute
-// Provides CBavpController with the volume attribute from the tags on the
-// HTTP page, i.e. <object volume="high"...
-// -----------------------------------------------------------------------------
-void CBavpController::SetVolumeFromAttribute( TInt aAttributeVolume )
-    {
-    // Use the lower volume:
-    // 1) Current volume (iCurrentVolume)
-    // 2) Volume setting on web page (aAttributeVolume)
-    if ( aAttributeVolume < iCurrentVolume )
-        {
-        iCurrentVolume = aAttributeVolume;
-        iBavpVolumeHandler->HandleNotifyInt( KBrowserMediaVolumeControl,
-                                             iCurrentVolume );
-        }
-    }
-
-// -----------------------------------------------------------------------------
-// CBavpController::SetLoopFromAttribute
-// Provides CBavpController with the loop attribute from the tags on the
-// HTTP page, i.e. <object loop="infinite"... or <object loop="4"...
-// -----------------------------------------------------------------------------
-void CBavpController::SetLoopFromAttribute( TInt aLoopValue, TBool aInfiniteFlag )
-    {
-    // Save the loop count, already checked for valid range
-    iLoopCount = aLoopValue;
-
-    // Save the initial loop count, in case we get an error while looping
-    // through the content
-    iInitLoopCount = iLoopCount;
-
-    // If the loop value is set to "infinite" looping. We currently use
-    // a max loop of 50 for infinite
-    iInfiniteLoopFlag = aInfiniteFlag;
-}
-
-// -----------------------------------------------------------------------------
-// CBavpControllerAudioo::RefreshRectCoordinatesL
-// Refresh the coordinates of rect for display
-// -----------------------------------------------------------------------------
-void CBavpController::RefreshRectCoordinatesL()
-    {
-    Log( EFalse, _L("CBavpController::RefreshRectCoordinatesL()") );
-    }
-
-// -----------------------------------------------------------------------------
-// CBavpController::ParseRamFileL
-// Read the ram file and parse the the url, put into iClipInfo->iUrl
-// -----------------------------------------------------------------------------
-void CBavpController::ParseRamFileL()
-    {
-    Log( EFalse, _L("CBavpController::ParseRamFileL() ") );
-
-    RFs rFs;
-    RFile ramFile;
-
-    // Connect to file server:
-    User::LeaveIfError( rFs.Connect() );
-    CleanupClosePushL( rFs );
-
-    if ( !BaflUtils::FileExists( rFs, *iClipInfo->iFileName ) )
-        {
-        User::Leave( KErrNotFound );
-        }
-
-    User::LeaveIfError( ramFile.Open( rFs, *iClipInfo->iFileName, EFileShareAny ) );
-    CleanupClosePushL( ramFile );
-
-    TInt size;
-    User::LeaveIfError( ramFile. Size( size ) );
-    if ( size > KBavpMaxLinkFileSize )
-        {
-        User::Leave( KErrNotFound );
-        }
-
-    HBufC8* urlBuf = HBufC8::NewLC( size );
-    TPtr8 ptr = urlBuf->Des();
-
-    // Read file to urlBuf
-    User::LeaveIfError( ramFile.Read( ptr ) );
-
-    // Set the iClipInfo->iUrl
-    if ( iClipInfo->iUrl )
-        {
-        delete iClipInfo->iUrl;
-        iClipInfo->iUrl = NULL;
-        }
-    iClipInfo->iUrl = HBufC::NewL( urlBuf->Length() );
-
-    TPtr urlDes = iClipInfo->iUrl->Des();
-
-    // Read to the end of the line that should be a link
-    TInt lineChange = urlBuf->LocateF( EKeyLineFeed );
-    if ( lineChange == KErrNotFound )
-        {
-        // No line change was found --> last line had no line change
-        // Copy last line to (unicode) aLink
-        CnvUtfConverter::ConvertToUnicodeFromUtf8( urlDes, *urlBuf );
-        }
-    else
-        {
-        // Set the descriptor to the  end of the line
-        if ( (lineChange > 0) && (urlBuf->Des()[lineChange - 1] == EKeyEnter) )
-            {
-            lineChange--;
-            }
-
-        // Copy line to (unicode) url
-        CnvUtfConverter::ConvertToUnicodeFromUtf8( urlDes, urlBuf->Left( lineChange ) );
-        }
-
-    CleanupStack::PopAndDestroy( 3 ); // ramFile, urlBuf, rFs
-    }
-
-
-#if defined(BRDO_ASX_FF)
-// -----------------------------------------------------------------------------
-// CBavpController::ParseAsxFileL
-// Read the asx file and parse the the url, put into iClipInfo->iUrl
-// Only retrieve the first URL found
-// -----------------------------------------------------------------------------
-void CBavpController::ParseAsxFileL()
-    {
-    Log( EFalse, _L("CBavpController::ParseAsxFileL() ") );
-
-    TUint urls = 0;
-    TPtrC8 url;
-
-    if ( iClipInfo->iUrl )
-        {
-        delete iClipInfo->iUrl;
-        iClipInfo->iUrl = NULL;
-        }
-
-    CAsxParser* asxParser = CAsxParser::NewL(*iClipInfo->iFileName);
-
-    CleanupStack::PushL( asxParser );
-
-    if ( asxParser )
-        {
-        asxParser->GetUrlCount(urls);
-        if ( urls > 0 )
-            asxParser->GetUrl(1,url);
-        }
-
-    iClipInfo->iUrl = HBufC::NewL( url.Length() );
-    TPtr urlDes = iClipInfo->iUrl->Des();
-    CnvUtfConverter::ConvertToUnicodeFromUtf8( urlDes, url);
-
-    CleanupStack::PopAndDestroy();  // asxparser
-    }
-#endif // BRDO_ASX_FF
-
-
-// CBavpController::GetClipRect
-// Retrieve the rect position. Ex. not intersect with title pane and status pane
-// -----------------------------------------------------------------------------
-TRect CBavpController::GetClipRect( TRect aRect )
-    {
-    TRect clipRect ( aRect );
-    Log( EFalse, _L("GetClipRect") );
-
-    AknLayoutUtils::LayoutMetricsRect( AknLayoutUtils::EMainPane, iNormalScreenRect );
-
-  // Calculate not to cover the bottom or the top of the rect.
-  if ( clipRect.iTl.iX < iNormalScreenRect.iTl.iX )
-    {
-    clipRect.iTl.iX = iNormalScreenRect.iTl.iX;
-    }
-
-  if ( clipRect.iTl.iY < iNormalScreenRect.iTl.iY )
-    {
-    clipRect.iTl.iY = iNormalScreenRect.iTl.iY;
-    }
-
-  if ( clipRect.iBr.iY > iNormalScreenRect.iBr.iY )
-    {
-    clipRect.iBr.iY = iNormalScreenRect.iBr.iY;
-    }
-
-  if ( clipRect.iBr.iX > iNormalScreenRect.iBr.iX )
-    {
-    clipRect.iBr.iX = iNormalScreenRect.iBr.iX - KRectPadding;
-    }
-
-    return clipRect;
-    }
-
-// -----------------------------------------------------------------------------
-// CBavpController::CreateVolumeListDlg
-// Create the volume list query dialog
-// -----------------------------------------------------------------------------
-void CBavpController::CreateVolumeListDlgL()
-{
-    CEikTextListBox* list = new(ELeave) CAknSinglePopupMenuStyleListBox;
-    CleanupStack::PushL( list );
-
-    // Create popup list and PUSH it.
-    CAknPopupList* popupList = CAknPopupList::NewL( list,
-                                                    R_AVKON_SOFTKEYS_OK_CANCEL,
-                                                    AknPopupLayouts::EMenuWindow);
-    CleanupStack::PushL( popupList );
-
-    // Initialize listbox.
-    list->ConstructL( popupList, CEikListBox::ELeftDownInViewRect );
-    list->CreateScrollBarFrameL( ETrue );
-    list->ScrollBarFrame()->SetScrollBarVisibilityL( CEikScrollBarFrame::EOff,
-                                                     CEikScrollBarFrame::EAuto );
-
-    // Make list items and PUSH it
-    CDesCArrayFlat* items =
-            CCoeEnv::Static()->ReadDesCArrayResourceL( R_AKNTAPOPLIST_MENU_VOLUME_ITEMS );
-
-    // Set list items.
-    CTextListBoxModel* model = list->Model();
-    model->SetItemTextArray( items );
-    model->SetOwnershipType( ELbmOwnsItemArray );
-
-    // Using the current volume set to determine the index of the volume value
-    // to highlight in the list
-    TInt volumeIndex( 0 );
-    if ( iCurrentVolume == KCRVolume0 )
-        {
-        volumeIndex = 0;
-        }
-    else if ( iCurrentVolume == KCRVolume2 )
-        {
-        volumeIndex = 1;
-        }
-    else if ( iCurrentVolume == KCRVolume5 )
-        {
-        volumeIndex = 2;
-        }
-    else if ( iCurrentVolume == KCRVolume8 )
-        {
-        volumeIndex = 3;
-        }
-    else if ( iCurrentVolume == KCRVolume10 )
-        {
-        volumeIndex = 4;
-        }
-
-    // Highlight the current item in the list box
-    list->SetCurrentItemIndexAndDraw( volumeIndex );
-
-    HBufC* title = CCoeEnv::Static()->AllocReadResourceLC( R_TEXT_VIDEO_PLUGIN_MEDIA_VOLUME);
-    popupList->SetTitleL( *title );
-    CleanupStack::PopAndDestroy();  // title
-
-    // Show popup list and then show return value.
-    TInt popupOk = popupList->ExecuteLD();
-    CleanupStack::Pop();    // popuplist
-
-    // Handle the returned value from the volume list dialog
-    if ( popupOk )
-        {
-        // Check if there is change for the volume select
-        if ( volumeIndex != list->CurrentItemIndex() )
-            {
-            // Set the current index to volume index
-            volumeIndex = list->CurrentItemIndex();
-
-            // To match the list box data to the values defined in
-            // the Central repository: (mute)0,2,5,8,10(maximum)
-            if ( volumeIndex == 0 )
-                {
-                iCurrentVolume = KCRVolume0;
-                }
-            else if ( volumeIndex == 1 )
-                {
-                iCurrentVolume = KCRVolume2;
-                }
-            else if ( volumeIndex == 2 )
-                {
-                iCurrentVolume = KCRVolume5;
-                }
-            else if ( volumeIndex == 3 )
-                {
-                iCurrentVolume = KCRVolume8;
-                }
-            else if ( volumeIndex == 4 )
-                {
-                iCurrentVolume = KCRVolume10;
-                }
-
-            Log( EFalse, _L("Return Volume from Player="), iCurrentVolume );
-
-            // Tell the volume handler about our new volume the user selected
-            iBavpVolumeHandler->HandleNotifyInt( KBrowserMediaVolumeControl,
-                                                 iCurrentVolume );
-            }
-        }
-
-    CleanupStack::PopAndDestroy();  // list
-}
-
-// -----------------------------------------------------------------------------
-// CBavpController::IsVideoOrAudioCall
-// Check if there is an incoming call
-// -----------------------------------------------------------------------------
-TBool CBavpController::IsVideoOrAudioCall()
-    {
-    Log( EFalse, _L("CBavpController::IsVideoOrAudioCall() entered") );
-
-    // Pause if there is video call
-    TInt callType;
-
-    RProperty::Get( KPSUidCtsyCallInformation,
-                    KCTsyCallType,
-                    callType ); // Ignore errors
-
-    return ( callType == EPSCTsyCallTypeH324Multimedia ||
-             callType == EPSCTsyCallTypeCSVoice );
-    }
-
-// -----------------------------------------------------------------------------
-// CBavpController::BaseConstructL
-// Symbian 2nd phase constructor can leave.
-// -----------------------------------------------------------------------------
-void CBavpController::BaseConstructL( TBavpMediaType aMediaType,
-                                      const TDesC& aFileName )
-    {
-    Log( EFalse, _L("CBavpController::BaseConstructL enter") );
-
-    // Create Clipinfo
-    iClipInfo = new (ELeave) CBavpClipInfo();
-    iClipInfo->iMediaType = aMediaType;
-    iClipInfo->iFileName = aFileName.AllocL();
-    iClipInfo->iUrl = aFileName.AllocL();
-
-    // Watch for incoming calls
-    User::LeaveIfError( iIncomingCalls.Attach( KPSUidCtsyCallInformation,
-                        KCTsyCallState ) );
-    iIncomingCalls.Subscribe( iStatus );
-
-    // Set the AO active. so we will watch for incoming calls, see RunL()
-    SetActive();
-
-    // Create Volume Handler to get the initial volume from settings CR, and
-    // watch the CR for volume changes (browser or system)
-    iBavpVolumeHandler = CBavpVolumeHandler::NewL( this );
-
-    // Create the timer for jumping (skipping) to new position
-    iPositionUpdater = CPeriodic::NewL( CActive::EPriorityStandard );
-
-  //Get normal display screen rect - not including title pane and toolbar pane
-  AknLayoutUtils::LayoutMetricsRect( AknLayoutUtils::EMainPane, iNormalScreenRect );
-    // If the phone has side volume keys, create an observer for the hardware
-    // volume key events
-    if ( HAS_HW_VOLUME_KEYS )
-        {
-        TRAP_IGNORE(iHwKeyEvents = CBavpHwKeyEvents::NewL( *this ) );
-        }
-
-    // Add this BavpController instance to the array
-    iBavpControllerArray.Append( this );
-
-    Log( EFalse, _L("CBavpController::BaseConstructL exited") );
-    }
-
-// -----------------------------------------------------------------------------
-// CBavpControllerVideo::RunL
-// If incoming call arrives, handle the audio or video player content.
-// If incoming call ends, resume the audio or video player
-// -----------------------------------------------------------------------------
-void CBavpController::RunL()
-    {
-    Log( EFalse, _L("CBavpController::RunL() entered") );
-
-    // Do we have an incoming audio or video call
-    if ( IsVideoOrAudioCall() )
-        {
-        // If we are playing content, pause if seekable or stop if streaming
-        if ( iCurrentState == EBavpPlaying )
-            {
-            // Set precall state, so we will resume playing the content,
-            // after the call is done
-            iPreCallState = EBavpPlaying;
-
-            if ( iClipInfo->iSeekable )
-                {
-                // Seekable content, pause, if there is an incoming call
-                PauseL();
-                }
-            else
-                {
-                HandleInComingCallL();
-                // Streaming content, stop, if there is an incoming call
-                Stop();
-                }
-            }
-        // If we are seeking content, pause it (these states only for seekable)
-        else if ( iCurrentState == EBavpFastForwarding ||
-                  iCurrentState == EBavpRewinding )
-            {
-            // Set precall state, so we will not resume playing the content,
-            // after the call is done
-            iPreCallState = EBavpPaused;
-
-            // Stop the position updater
-            if ( iPositionUpdater->IsActive() )
-                {
-                iPositionUpdater->Cancel();
-                }
-            // Seekable content, pause, if there is an incoming call
-            PauseL();
-            }
-        }
-    else
-        {
-        // If the prev status was playing and has been paused by a phone call
-        // or a video call. Try to get the player to the previous state and
-        // invoke play function.
-        if ( iPreCallState == EBavpPlaying )
-            {
-            iPreCallState = EBavpNone;
-            PlayL();
-            }
-        }
-
-    // Listen for the incoming call property changes
-    iIncomingCalls.Subscribe( iStatus );
-
-    SetActive();
-    }
-
-// -----------------------------------------------------------------------------
-// CBavpController::UpdateVolume
-// From MBavpVolumeObserver
-// Provides CBavpController with the media volume from the VolumeHandler
-// -----------------------------------------------------------------------------
-void CBavpController::UpdateVolume( TInt aVolume )
-    {
-    iCurrentVolume = aVolume;
-
-    // Notify Player of volume change
-    SetPlayerVolume( iCurrentVolume );
-    }
-
-// -----------------------------------------------------------------------------
-// CBavpController::BavpHwKeyVolumeChange
-// Handles the change in the Volume that is needed as per the Hardware Volume
-// key events. Remember, all volume levels in CBavpController are CR based,
-// values 0(mute) - 10(max). Use KCRVolumeX values.
-// -----------------------------------------------------------------------------
-void CBavpController::BavpHwKeyVolumeChange( TInt aVolumeChange )
-    {
-    TInt newVolume = iCurrentVolume;
-    newVolume += aVolumeChange;
-
-    Log( EFalse, _L("CBavpController::BavpHwKeyVolumeChange newVolume="), newVolume );
-
-    // Ensure the volume is within range
-    if ( newVolume < KCRVolume0 )
-        {
-        newVolume = KCRVolume0;
-        }
-    else if ( newVolume > KCRVolumeMax )
-        {
-        newVolume = KCRVolumeMax;
-        }
-
-    // Piggyback on this call to set the new volume from
-    iBavpVolumeHandler->HandleNotifyInt( KBrowserMediaVolumeControl, newVolume );
-    }
-
-// -----------------------------------------------------------------------------
-// CBavpController::IsAnotherControllerPlaying
-// Returns ETrue, on the first controller it finds in playing state
-// -----------------------------------------------------------------------------
-TBool CBavpController::IsAnotherControllerPlaying()
-    {
-    if ( iBavpControllerArray.Count() > 1 )
-        {
-        for ( TInt i( 0 ); i < iBavpControllerArray.Count(); i++ )
-            {
-            CBavpController* bavpController = iBavpControllerArray[ i ];
-            if ( ( this != bavpController ) &&
-                 ( bavpController->iCurrentState == EBavpPlaying ) )
-                {
-                return ETrue;
-                }
-            }
-        }
-    return EFalse;
-    }
-
-// -----------------------------------------------------------------------------
-// CBavpController::PauseOtherControllersPlaying
-// This will attempt to pause all of the other controllers (expect this one), if
-// the media can't be paused (ie live stream), it will be stopped.
-// -----------------------------------------------------------------------------
-void CBavpController::PauseOtherControllersPlaying()
-    {
-    if ( iBavpControllerArray.Count() > 1 )
-        {
-        for ( TInt i( 0 ); i < iBavpControllerArray.Count(); i++ )
-            {
-            CBavpController* bavpController = iBavpControllerArray[ i ];
-            if ( this != bavpController )
-                {
-                TRAP_IGNORE( bavpController->PauseL() );
-                iBavpView->UpdateView();
-                }
-            }
-        }
-    }
-
-// --------------------------------------------------------------------------
-// CBavpControllerVideo::HandleMultiInstanceError
-// Handle error codes.
-// NOTES:
-// MMF errors start at -12000, see /epoc32/include/mmf/common/MMFErrors.h
-// MMF also returns -1 (KErrNotFound) and few other system-wide errors
-// -----------------------------------------------------------------------------
-void CBavpController::HandleMultiInstanceError()
-    {
-    // Handle multiple media object case
-    if ( iBavpControllerArray.Count() > 1 && IsAnotherControllerPlaying() )
-        {
-        if ( iLastCommand == EBavpCmdUnknown )
-            {
-            // Another controller is playing, and this controller was
-            // initializing, so our error is because we can only play one
-            // media object at a time. Stop this media and let
-            // the first one initialized continue to play.
-            //TRAP_IGNORE( PauseL() );
-            Stop();
-            iBavpView->UpdateView();
-            }
-        else if ( iLastCommand == EBavpCmdPlay )
-            {
-            // Another controller is playing, and the user wants to play
-            // another media object. Pause (or stop) all of the others and
-            // play this one.
-            PauseOtherControllersPlaying();
-            TRAP_IGNORE( PlayL() );
-            }
-        }
-    }
-
-// -----------------------------------------------------------------------------
-// CBavpController::SetOriginalFileName
-// Sets the file name. Used for scripting functionality
-// -----------------------------------------------------------------------------
-void CBavpController::SetOriginalFileName( const TDesC* originalFile )
-{
-    if ( originalFile )
-    {
-        iOriginalFileName = originalFile->Alloc();
-    }
-}
-
-// -----------------------------------------------------------------------------
-// CBavpController::SetMimeType
-// Sets the mime type. Used for scripting functionality
-// -----------------------------------------------------------------------------
-void CBavpController::SetMimeType( const TDesC8* mimetype )
-{
-    if ( mimetype )
-    {
-        iMimeType = mimetype->Alloc();
-    }
-}
-
-// -----------------------------------------------------------------------------
-// CBavpController::BavpHwKeyCommand
-// Handles transport commands (play, pause, ...) from dedicated hardware keys.
-// -----------------------------------------------------------------------------
-/*
-void CBavpController::BavpHwKeyCommand( TBavpCommandIds aCommand )
-    {
-    // Do some basic checks for the hardware keys
-    if ( aCommand == EBavpCmdPlay && iCurrentState == EBavpPlaying )
-        {
-        // We recieved a play command while playing, therefore make it pause
-        aCommand = EBavpCmdPause;
-        }
-
-    HandleCommandL( aCommand );
-    }
-*/
-
-// -----------------------------------------------------------------------------
-// HandleGesture(TGestureEvent *gesture)
-// -----------------------------------------------------------------------------
-TBool CBavpController::HandleGesture(TGestureEvent* /*gesture*/)
-    {
-    // should be implemented in derrived class.    
-    return EFalse;
-    }
-
-//  End of File