profilesapplication/Profiles/ProfileApp/SettingsViewSrc/CProfile3dSettingPage.cpp
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Tue, 25 May 2010 12:42:45 +0300
branchRCL_3
changeset 14 232e127a1fe4
parent 2 627793106ff9
permissions -rw-r--r--
Revision: 201019 Kit: 2010121

/*
* 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:  Setting page class for 3D settings.
*
*/



// INCLUDES
#include "CProfile3dSettingPage.h"
#include "ProfileSettingsView.hrh"

#include <CFLDController.h>
#include <profilesettingsview.rsg>
#include <apgcli.h>	// For RApaLsSession
#include <bautils.h> // For BaflUtils
#include <centralrepository.h>
#include <ProfileEngineInternalCRKeys.h>
#include <ProfileInternal.hrh>

// CONSTANTS
namespace
	{
    const TInt K3DEffectBase( 1000 );
    const TInt K3DEchoBase( 2000 );

	const TInt KRepeatDelayInMicroSeconds( 1000000 ); // One second

#ifdef RD_VIDEO_AS_RINGING_TONE
	_LIT( KFLDCommonVideoType, "video/*" );
	_LIT( KFLDRM1VideoMimeType, "application/vnd.rn-realmedia" );
	_LIT( KFLDRM2VideoMimeType, "application/x-pn-realmedia" );
	_LIT( KFLDSDPVideoMimeType, "application/sdp" );
#endif

	}
// ============================ MEMBER FUNCTIONS ===============================

// -----------------------------------------------------------------------------
// CProfile3dSettingPage::CProfile3dSettingPage
// C++ constructor can NOT contain any code, that might leave.
// -----------------------------------------------------------------------------
//
CProfile3dSettingPage::CProfile3dSettingPage(
    TInt aResourceID,
    MAknQueryValue& aQueryValue,
    const TDesC& aRingingTone,
    const TInt& aRingingType,
    const TBool& aVibratingAlert,
    const TInt& aVolume,
    const TInt& a3DEffectOrEcho,
    TInt aIdentifier )
    :   CAknPopupSettingPage( aResourceID, aQueryValue ),
        iRingingTone( aRingingTone ),
        iRingingType( aRingingType ),
        iVibratingAlert( aVibratingAlert ),
        iVolume( aVolume ),
        i3DEffectOrEcho( a3DEffectOrEcho ),
        iIdentifier( aIdentifier )
    {
    }

// -----------------------------------------------------------------------------
// CProfile3dSettingPage::ConstructL
// Symbian 2nd phase constructor can leave.
// -----------------------------------------------------------------------------
//
void CProfile3dSettingPage::ConstructL()
    {
    CAknPopupSettingPage::ConstructL();

	TBool showErrorMsgs( EFalse );
	
    iFs = new ( ELeave ) RFs;
    User::LeaveIfError( iFs->Connect() );

	CheckRingingToneTypeL();

    iController = CFLDController::NewL( showErrorMsgs, KRepeatDelayInMicroSeconds );
	iController->CompleteConstructionL( Window() );
	iController->SetRingingType( iRingingType );
	iController->SetVibra( iVibratingAlert );
	iController->SetVolume( iVolume );
    }

// Destructor.
CProfile3dSettingPage::~CProfile3dSettingPage()
    {
    if( iFs )
    	{
    	iFs->Close();
    	}
    delete iFs;
    delete iController;
    delete iPreviewTone;
    }

// -----------------------------------------------------------------------------
// CProfile3dSettingPage::OfferKeyEventL
// -----------------------------------------------------------------------------
//
TKeyResponse CProfile3dSettingPage::OfferKeyEventL(
    const TKeyEvent& aKeyEvent, TEventCode aType )
    {
    if( aType == EEventKey )
        {
        if( ( aKeyEvent.iCode == EKeyUpArrow ) ||
            ( aKeyEvent.iCode == EKeyDownArrow ) )
            {
            // Get current setting
            TInt currentValue = PopupSettingListBox()->CurrentItemIndex();

            // Call base classes method
            TKeyResponse response( CAknPopupSettingPage::OfferKeyEventL( aKeyEvent, aType ) );

            // Get new setting
            TInt newValue = PopupSettingListBox()->CurrentItemIndex();

            if( newValue != currentValue )
                {
                // Setting has changed
                if( ( iIdentifier == EProfileSetting3dEffectId && newValue != EProfile3DEffectOff ) ||
                	( iIdentifier == EProfileSetting3dEchoId && i3DEffectOrEcho != EProfile3DEffectOff ) )
                	{
                    // Set 3D parameters
                	if( iIdentifier == EProfileSetting3dEffectId )
                		{
                        iController->Set3dEffects( K3DEffectBase + newValue );
                        iController->Set3dEffects( K3DEchoBase + i3DEffectOrEcho );
                		}
                	else
                		{
                        iController->Set3dEffects( K3DEffectBase + i3DEffectOrEcho );
                        iController->Set3dEffects( K3DEchoBase + newValue );
                		}
                	iController->Set3dEffects( ETrue );
                	}
                else
                	{
                	iController->Set3dEffects( EFalse );
                	}
                iController->HandleFileListBoxEventL(
                    MFLDFileListBoxObserver::EFocusChanged, iPreviewTone->Des() );
                }
            return response;
            }
        // Cancels playback on any key event
        iController->HandleFileListBoxEventL(
            MFLDFileListBoxObserver::EOtherKeyEvent, iPreviewTone->Des() );
        }

    return CAknPopupSettingPage::OfferKeyEventL( aKeyEvent, aType );
    }


// -----------------------------------------------------------------------------
// CProfile3dSettingPage::HandlePointerEventL
// -----------------------------------------------------------------------------
//
void CProfile3dSettingPage::HandlePointerEventL(
    const TPointerEvent& aPointerEvent )
    {
    if( aPointerEvent.iType == TPointerEvent::EButton1Down )
        {
        // Get current setting
        iTempValue = PopupSettingListBox()->CurrentItemIndex();
        }
    else if( aPointerEvent.iType == TPointerEvent::EButton1Up )
    	{
	    CAknPopupSettingPage::HandlePointerEventL( aPointerEvent );
        // Get new setting
        TInt newValue = PopupSettingListBox()->CurrentItemIndex();
        if( newValue != iTempValue )
            {
            // Setting has changed
            if( ( iIdentifier == EProfileSetting3dEffectId && newValue != EProfile3DEffectOff ) ||
            	( iIdentifier == EProfileSetting3dEchoId && i3DEffectOrEcho != EProfile3DEffectOff ) )
            	{
                // Set 3D parameters
            	if( iIdentifier == EProfileSetting3dEffectId )
            		{
                    iController->Set3dEffects( K3DEffectBase + newValue );
                    iController->Set3dEffects( K3DEchoBase + i3DEffectOrEcho );
            		}
            	else
            		{
                    iController->Set3dEffects( K3DEffectBase + i3DEffectOrEcho );
                    iController->Set3dEffects( K3DEchoBase + newValue );
            		}
            	iController->Set3dEffects( ETrue );
            	}
            else
            	{
            	iController->Set3dEffects( EFalse );
            	}

            iController->HandleFileListBoxEventL(
                MFLDFileListBoxObserver::EFocusChanged, iPreviewTone->Des() );
            }
        return;
        }
    // Cancels playback on any key event
    iController->HandleFileListBoxEventL(
        MFLDFileListBoxObserver::EOtherKeyEvent, iPreviewTone->Des() );

    CAknPopupSettingPage::HandlePointerEventL( aPointerEvent );
    }


// -----------------------------------------------------------------------------
// CProfile3dSettingPage::CheckRingingToneTypeL
// -----------------------------------------------------------------------------
//
void CProfile3dSettingPage::CheckRingingToneTypeL()
	{
	// Get default tone from cenrep
	TFileName defaultTone;
	CRepository* cenrep = CRepository::NewL( KCRUidProfileEngine );
	CleanupStack::PushL( cenrep );
	User::LeaveIfError( cenrep->Get( KProEngDefaultRingingTone, defaultTone ) );
	CleanupStack::PopAndDestroy( cenrep );

	if( !BaflUtils::FileExists( *iFs, iRingingTone ) )
		{
		// If the file does not exist, use default tone for volume preview
		iPreviewTone = defaultTone.AllocL();
		return;
		}

#ifdef RD_VIDEO_AS_RINGING_TONE
	// Find out MIME type
	RApaLsSession apaLsSession;
	User::LeaveIfError( apaLsSession.Connect() );
	CleanupClosePushL( apaLsSession );
	TUid dummyUid = { 0 }; // instantiate as zero
	TDataType dataType( dummyUid );
	User::LeaveIfError(
		apaLsSession.AppForDocument( iRingingTone, dummyUid, dataType ) );
	CleanupStack::PopAndDestroy(); // apaLsSession.Close()

	// See if this is a video MIME type
	if ( dataType.Des().MatchF( KFLDCommonVideoType ) == 0 ||
		dataType.Des().CompareF( KFLDRM1VideoMimeType ) == 0 ||
		dataType.Des().CompareF( KFLDRM2VideoMimeType ) == 0 ||
		dataType.Des().CompareF( KFLDSDPVideoMimeType ) == 0 )
		{
		iPreviewTone = defaultTone.AllocL();
		}
	else
		{
		iPreviewTone = iRingingTone.AllocL();
		}
#else
	iPreviewTone = iRingingTone.AllocL();
#endif
	}

// End of File