profilesapplication/Profiles/ProfileApp/SettingsViewSrc/CProfileKeypadVolumeSettingPage.cpp
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Mon, 15 Mar 2010 12:40:33 +0200
branchRCL_3
changeset 10 b79ee333c41d
parent 0 ca436256272f
child 14 232e127a1fe4
permissions -rw-r--r--
Revision: 201009 Kit: 201010

/*
* 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:  Setting page class for keypad volume setting.
*
*/



// INCLUDES
#include "CProfileKeypadVolumeSettingPage.h"

#include <AudioPreference.h>
#include <aknsoundsystem.h>
#include <StringLoader.h>	// For StringLoader
#include <aknnotewrappers.h> // For CAknInformationNote
#include <ProfileSettingsView.rsg>

// for power save mode handling
#include <psmsettings.h>
#include <psmsrvdomaincrkeys.h>
#include <centralrepository.h>

namespace
	{
// CONSTANTS
#ifdef __WINS__
	// These constants are for WINS only because sequences are not played in emulator.
	const TInt KKeypadToneFrequency( 1760 ); /// In Hz
	const TInt KKeypadToneDuration( 20000 ); /// In microseconds
#endif // __WINS__
	}
// ============================ MEMBER FUNCTIONS ===============================

// -----------------------------------------------------------------------------
// CProfileKeypadVolumeSettingPage::CProfileKeypadVolumeSettingPage
// C++ constructor can NOT contain any code, that might leave.
// -----------------------------------------------------------------------------
//
CProfileKeypadVolumeSettingPage::CProfileKeypadVolumeSettingPage(
	TInt aResourceID,
	MAknQueryValue& aQueryValue,
	CAknKeySoundSystem* aSoundSystem )
	:	CAknPopupSettingPage( aResourceID, aQueryValue ),
		iSoundSystem( aSoundSystem )
	{
	}

// Destructor.
CProfileKeypadVolumeSettingPage::~CProfileKeypadVolumeSettingPage()
	{
	if( iAudioUtility )
		{
		if( iAudioUtility->State() != EMdaAudioToneUtilityNotReady )
			{
			// Set volume back to original
			iAudioUtility->SetVolume( iOriginalVolume );
			}
		delete iAudioUtility;
		}
	if( iSoundSystem )
		{
		// Re-enable keypad sounds
		iSoundSystem->PopContext();
		}
	}

// -----------------------------------------------------------------------------
// CProfileKeypadVolumeSettingPage::ConstructL
// Symbian 2nd phase constructor can leave.
// -----------------------------------------------------------------------------
//
void CProfileKeypadVolumeSettingPage::ConstructL()
	{
	User::LeaveIfNull( iSoundSystem );

	CAknPopupSettingPage::ConstructL();

	// Own construction starts here

	// Disable keypad sounds
	iSoundSystem->PushContextL( R_AVKON_SILENT_SKEY_LIST );

	// Create audio player and prepare to play a tone
	iAudioUtility = CMdaAudioToneUtility::NewL( *this );

#ifdef __WINS__ // Sequences are not supported on emulator
	iAudioUtility->PrepareToPlayTone( KKeypadToneFrequency,
		TTimeIntervalMicroSeconds( KKeypadToneDuration ) );
#else
	CAknSoundInfo* soundInfo = CAknSoundInfo::NewL();
	CleanupStack::PushL( soundInfo );
	User::LeaveIfError( iSoundSystem->RequestSoundInfoL(
		EAvkonSIDStandardKeyClick, *soundInfo ) );
	iAudioUtility->PrepareToPlayDesSequence( *soundInfo->iSequence );
	CleanupStack::PopAndDestroy( soundInfo );
#endif // __WINS__
	}


// -----------------------------------------------------------------------------
// CProfileKeypadVolumeSettingPage::OkToExitL
// -----------------------------------------------------------------------------
//
TBool CProfileKeypadVolumeSettingPage::OkToExitL( TBool aAccept )
    {
    if( aAccept )
        {
        TInt psm = EPsmsrvModeNormal;
        CRepository* cenrep = CRepository::NewLC( KCRUidPowerSaveMode );
        cenrep->Get( KPsmCurrentMode, psm );
        CleanupStack::PopAndDestroy( cenrep );
        if( psm == EPsmsrvModePowerSave )
            {
            HBufC* buf = StringLoader::LoadLC( R_PROFILE_TEXT_PSM_INFONOTE );
            CAknInformationNote* queryDialog = new (ELeave) CAknInformationNote( EFalse );
         	queryDialog->ExecuteLD( *buf );
            CleanupStack::PopAndDestroy( buf );
            }
        }
    return ETrue;
    }

// -----------------------------------------------------------------------------
// CProfileKeypadVolumeSettingPage::OfferKeyEventL
// -----------------------------------------------------------------------------
//
TKeyResponse CProfileKeypadVolumeSettingPage::OfferKeyEventL(
	const TKeyEvent& aKeyEvent, TEventCode aType )
	{
	// Cache pointer used multiple times
	CAknSetStyleListBox* listBoxControl = ListBoxControl();
	// Get current index from listbox
	TInt oldIndex( listBoxControl->CurrentItemIndex() );
	// Call OfferKeyEventL of base class
	TKeyResponse response( CAknPopupSettingPage::OfferKeyEventL( aKeyEvent, aType ) );
	// Get audio player state
	TInt state( iAudioUtility->State() );
	// Get new index from listbox
	TInt newIndex( listBoxControl->CurrentItemIndex() );

	if( ( oldIndex != newIndex ) && // check if listbox focus has changed
		( newIndex != 0 ) && // check that new focus is not on first item "Off"
		( state != EMdaAudioToneUtilityNotReady ) ) // check that tone player is ready
		{
		// Resolve last index of listbox
		TInt lastIndex( listBoxControl->Model()->MatchableTextArray()->MdcaCount() - 1 );
		// Resolve correct volume from current listbox index
		TInt volume( iAudioUtility->MaxVolume() * newIndex / lastIndex );

		if( state == EMdaAudioToneUtilityPlaying )
			{
			// Cancel play if still playing previous keyclick
	        iAudioUtility->CancelPlay();
			}
		iAudioUtility->SetVolume( volume );
		iAudioUtility->Play();
		}
	return response;
	}

// -----------------------------------------------------------------------------
// CProfileKeypadVolumeSettingPage::MatoPrepareComplete
// -----------------------------------------------------------------------------
//
void CProfileKeypadVolumeSettingPage::MatoPrepareComplete( TInt aError )
	{
	if( !aError )
		{
		// After prepare is completed, store original volume level
		iOriginalVolume = iAudioUtility->Volume();
		// Set priority
		iAudioUtility->SetPriority( KAudioPriorityKeyPress,
			TMdaPriorityPreference( KAudioPrefKeyPressPreview ) );
		}
	}

// -----------------------------------------------------------------------------
// CProfileKeypadVolumeSettingPage::MatoPlayComplete
// Error ignored because if playing of the keypad tone is unsuccesful
// nothing can be done.
// -----------------------------------------------------------------------------
//
void CProfileKeypadVolumeSettingPage::MatoPlayComplete( TInt /*aError*/ )
	{
	}

// End of File