bluetoothengine/btnotif/src/BTNGenericQueryNotifier.cpp
changeset 0 f63038272f30
child 6 6a29d5ad0713
--- /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 <StringLoader.h>       // Localisation stringloader
+#include <SecondaryDisplay/BTnotifSecondaryDisplayAPI.h>
+#include <e32cmn.h>
+#include <BTNotif.rsg>          // Own resources
+#include <btengsettings.h>
+#include "BTNGenericQueryNotifier.h"      // Own class definition
+#include "btNotifDebug.h"       // Debugging macros
+
+#ifdef __SERIES60_HELP
+#include <hlplch.h>
+#include <csxhelp/bt.hlp.hrh> // 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<TBTGenericQueryNotifierParams> 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