diff -r 000000000000 -r f63038272f30 bluetoothengine/btnotif/src/BTNGenericQueryNotifier.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/bluetoothengine/btnotif/src/BTNGenericQueryNotifier.cpp Mon Jan 18 20:28:57 2010 +0200 @@ -0,0 +1,342 @@ +/* +* 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: Bluetooth visibility timeout notifier class. +* +*/ + + +// INCLUDE FILES + +#include // Localisation stringloader +#include +#include +#include // Own resources +#include +#include "BTNGenericQueryNotifier.h" // Own class definition +#include "btNotifDebug.h" // Debugging macros + +#ifdef __SERIES60_HELP +#include +#include // The bt hrh info is needed, for help launching +#endif + +// ================= MEMBER FUNCTIONS ======================= + +// ---------------------------------------------------------- +// CBTGenericQueryNotifier::NewL +// Two-phased constructor. +// ---------------------------------------------------------- +// +CBTGenericQueryNotifier* CBTGenericQueryNotifier::NewL() + { + CBTGenericQueryNotifier* self=new (ELeave) CBTGenericQueryNotifier(); + CleanupStack::PushL(self); + self->ConstructL(); + CleanupStack::Pop(); + return self; + } + +// ---------------------------------------------------------- +// CBTGenericQueryNotifier::CBTGenericQueryNotifier +// C++ default constructor can NOT contain any code, that +// might leave. +// ---------------------------------------------------------- +// +CBTGenericQueryNotifier::CBTGenericQueryNotifier() + { + } + +// ---------------------------------------------------------- +// Destructor +// ---------------------------------------------------------- +// +CBTGenericQueryNotifier::~CBTGenericQueryNotifier() + { + Cancel(); // Free own resources + delete iName; + delete iQueryMessage; + delete iQueryHeader; + } + +// ---------------------------------------------------------- +// CBTGenericQueryNotifier::RegisterL +// Register notifier. +// ---------------------------------------------------------- +// +CBTGenericQueryNotifier::TNotifierInfo CBTGenericQueryNotifier::RegisterL() + { + iInfo.iUid=KBTGenericQueryNotifierUid; + iInfo.iChannel=KBTGenericQueryNotifierUid; + iInfo.iPriority=ENotifierPriorityHigh; + return iInfo; + } + + +// ---------------------------------------------------------- +// CBTGenericQueryNotifier::StartL +// Synchronic notifier launch. Contructs and shows a global +// note, no parameters need here. +// ---------------------------------------------------------- +// +TPtrC8 CBTGenericQueryNotifier::StartL( const TDesC8& /*aBuffer*/ ) + { + FLOG(_L("[BTNOTIF]\t CBTGenericQueryNotifier::StartL()")); + + TPtrC8 ret(KNullDesC8); + return (ret); + + } + +// ---------------------------------------------------------- +// CBTGenericQueryNotifier::GetParamsL +// Mandatory for BT Notifiers when using asynchronous launch. +// This notifier is synchronous so no implementation is needed. +// ---------------------------------------------------------- +// +void CBTGenericQueryNotifier::GetParamsL(const TDesC8& aBuffer, + TInt aReplySlot, + const RMessagePtr2& aMessage) + { + FLOG(_L("[BTNOTIF]\t CBTGenericQueryNotifier::GetParamsL")); + + if (iMessage.Handle()) + { + aMessage.Complete(KErrInUse); + return; + } + + ProcessParamBufferL(aBuffer); + + iMessage = aMessage; + iReplySlot = aReplySlot; + + ShowQueryAndCompleteL(); + + FLOG(_L("[BTNOTIF]\t CBTGenericQueryNotifier::GetParamsL Complete")); + } + +// ---------------------------------------------------------- +// CBTGenericQueryNotifier::ProcessParamBufferL +// Parse the data out of the message that is sent by the +// client of the notifier. +// ---------------------------------------------------------- +void CBTGenericQueryNotifier::ProcessParamBufferL(const TDesC8& aBuffer) + { + + TBTGenericQueryNotifierParams bParams; + TPckgC bPckg(bParams); + bPckg.Set( aBuffer ); + + if( bPckg().iMessageType == EBTNameQuery ) + { + iIsNameQuery = ETrue; + return; + } + iSecondaryDisplayCommand = ECmdBTnotifUnavailable; + switch (bPckg().iMessageType) + { + case EBTReceiveMessageQuery: + iIsMessageQuery=EFalse; + iMessageResourceId=R_BT_RECEIVE_MESSAGE ; + iSecondaryDisplayCommand=ECmdShowReceiveMessageFromDeviceDlg; + break; + case EBTReceiveMessagePairedQuery: + iIsMessageQuery=EFalse; + iMessageResourceId=R_BT_RECEIVE_MESSAGE_PAIRED; + iSecondaryDisplayCommand= ECmdShowReceiveMessageFromPairedDeviceDlg; + break; + case EBTIsOffQuery: + iIsMessageQuery=EFalse; + iMessageResourceId=R_BT_POWER_IS_OFF ; + iSecondaryDisplayCommand=ECmdShowBtIsOffDlg; + break; + case EBTActivateOffLineQuery: + iIsMessageQuery=EFalse; + iMessageResourceId=R_BT_ACTIVATE_IN_OFFLINE; + iSecondaryDisplayCommand=ECmdShowBtActivateInOfflineDlg; + break; + case EBTNoDevicesFoundQuery: + iIsMessageQuery=EFalse; + iMessageResourceId=R_BT_NO_DEVICES_FOUND; + break; + case EBTAcceptRequestQuery: + iIsMessageQuery=EFalse; + iMessageResourceId=R_BT_AUTHORISATION_NAME ; + iSecondaryDisplayCommand=ECmdShowAcceptConnRequestDlg; + break; + + case EBTIsOffJavaQuery: + iIsMessageQuery=ETrue; + if( bPckg().iNameExists ) + { + iMessageResourceId=R_BT_IS_OFF_JAVA_APPNAME; // when caller provide Java application name. + } + else + { + iMessageResourceId=R_BT_IS_OFF_JAVA; //r_bt_is_hidden_java + } + iSecondaryDisplayCommand=ECmdShowBtBtIsOffJavaDlg; + iQueryHeader=StringLoader::LoadL( R_BT_IS_OFF_JAVA_HEADER); + break; + + case EBTIsNotShownQuery: + iIsMessageQuery=ETrue; + if( bPckg().iNameExists ) + { + iMessageResourceId=R_BT_IS_HIDDEN_JAVA_APPNAME; // when caller provide Java application name. + } + else + { + iMessageResourceId=R_BT_IS_HIDDEN_JAVA; //r_bt_is_hidden_java + } + iSecondaryDisplayCommand=ECmdShowBtIsNotVisibleDlg; + iQueryHeader=StringLoader::LoadL( R_BT_IS_HIDDEN_JAVA_HEADER); + break; + + case EBTBlockConnectionQuery: + case EBTBlockPairedConnectionQuery: + iIsMessageQuery=ETrue; + if( bPckg().iMessageType == EBTBlockConnectionQuery ) + iMessageResourceId = R_BT_BLOCK_DEVICE_NOHELP; + else + iMessageResourceId = R_BT_BLOCK_PAIRED_DEVICE_NOHELP ; + + iQueryHeader= StringLoader::LoadL( R_BT_BLOCK_DEVICE_HEADER ); + break; + + case EBTSwitchOffAnyway: + iIsMessageQuery=EFalse; + iMessageResourceId=R_BT_SWITCH_OFF_ANYWAY; + break; + + default: + FLOG(_L("[BTNOTIF]\t CBTGenericQueryNotifier:: Unkown messageType! ")); + User::Leave(KErrNotFound); + } + + // if the logic string contains substitute indicator "%U", replace it with device name: + // + iQueryMessage = StringLoader::LoadL( iMessageResourceId); + _LIT(PU,"%U"); + if( iQueryMessage->Find(PU) != KErrNotFound) + { + delete iQueryMessage; + iQueryMessage=NULL; + + //if no device name provided, default name will be used: + if( !bPckg().iNameExists ) + iName=StringLoader::LoadL(R_BT_DIALOG_DEF_NAME); + else + { + iName=HBufC::NewL(bPckg().iName.Length() ); + iName->Des().Copy(bPckg().iName); + } + iQueryMessage = StringLoader::LoadL( iMessageResourceId,*iName); + } + else + { + iName=NULL; + } + } + +// ---------------------------------------------------------- +// CBTGenericQueryNotifier::UpdateL +// Update notifier according to new data +// ---------------------------------------------------------- +// +TPtrC8 CBTGenericQueryNotifier::UpdateL(const TDesC8& aBuffer) + { + FLOG(_L("[BTNOTIF]\t CBTGenericQueryNotifier::UpdateL")); + delete iQueryMessage; + iQueryMessage = NULL; + ProcessParamBufferL(aBuffer); + if( !iNotifUiUtil->IsQueryReleased() ) + { + if(iIsMessageQuery ) + { + iNotifUiUtil->UpdateMessageQueryDlgL(*iQueryMessage); + } + else + { + iNotifUiUtil->UpdateQueryDlgL(*iQueryMessage); + } + } + FLOG(_L("[BTNOTIF]\t CBTGenericQueryNotifier::UpdateL complete")); + + TPtrC8 ret(KNullDesC8); + return (ret); + } + +// ---------------------------------------------------------- +// CBTGenericQueryNotifier::ShowQueryAndCompleteL +// Shows the notifier in backround and complete message +// ---------------------------------------------------------- +// +void CBTGenericQueryNotifier::ShowQueryAndCompleteL() + { + FLOG(_L("[BTNOTIF]\t CBTGenericQueryNotifier::ShowQueryAndCompleteL")); + + // Turn lights on and deactivate apps -key + // + iNotifUiUtil->TurnLightsOn(); + if( iIsNameQuery ) + { + TBool nameStatus = IsLocalNameModifiedL(); + if( !nameStatus ) + { + (void) AskLocalBTNameQueryL(); + } + // Check if Local name is set again before turn BT on. + // Turn BT on only when there is local name, since user still has chance + // to ignore the asking name query - like pressing End-key + // + TBTDeviceName localName; + localName.Zero(); + TInt err = iBTEngSettings->GetLocalName(localName); + + if (localName.Length() <= 0) + { + err = KErrCancel; + } + + CompleteMessage( (!err) ? ETrue : EFalse, KErrNone ); + + FLOG(_L("[BTNOTIF]\t CBTGenericQueryNotifier::ShowQueryAndCompleteL iIsNameQuery complete")); + return; + } + + TInt keypress; + TBTDeviceName name(KNullDesC); + if( iName ) + { + name.Copy( *iName ); + } + if( iIsMessageQuery ) + { + + keypress = iNotifUiUtil->ShowMessageQueryL(*iQueryMessage, *iQueryHeader, + R_BT_GENERIC_MESSAGE_QUERY, CAknQueryDialog::EConfirmationTone ); + } + else + { + keypress = iNotifUiUtil->ShowQueryL( *iQueryMessage, R_BT_GENERIC_QUERY, + iSecondaryDisplayCommand, name, CAknQueryDialog::EConfirmationTone ); + } + + CompleteMessage( (keypress) ? ETrue: EFalse, KErrNone ); + + FLOG(_L("[BTNOTIF]\t CBTGenericQueryNotifier::ShowQueryAndCompleteL complete")); + } + +// End of File