diff -r 613943a21004 -r 9386f31cc85b bluetoothengine/btui/Ecom/src/BTUISap.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/bluetoothengine/btui/Ecom/src/BTUISap.cpp Wed Sep 01 12:20:04 2010 +0100 @@ -0,0 +1,249 @@ +/* +* Copyright (c) 2002-2007 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: This module is created for Bluetooth SIM Access Profile +* feature variant. +* +*/ + +#include +#include +#include // Compiled resource ids +#include +#include +#include +#include // for disconnect type and connection observer +#include +#include +#include +#include // For EnterpriseEnablementL() +#include +#include +#include +#include "btdevmodel.h" + +#include "debug.h" +#include "BTUIMainView.h" + +// ---------------------------------------------------- +// CBTUIMainView::SetSapStatusL +// ---------------------------------------------------- +// +void CBTUIMainView::SetSapStatusL( TBTSapMode aValue ) + { + TRACE_FUNC_ENTRY + + TInt previousSapMode = GetSapStatusL(); + + if(previousSapMode==EBTSapEnabled) + previousSapMode=ETrue; + + TBool legalToChange = ETrue; + + if ( ( previousSapMode ) && ( !aValue ) ) // SAP Enabled -> Disabled + { + // Check active SAP connections before query + TInt connStatus = EBTSapNotConnected; + RProperty::Get(KPSUidBluetoothSapConnectionState, KBTSapConnectionState, connStatus); + + if(connStatus == EBTSapConnected) + { + //Get name of the currently connected SAP device + + TBTDeviceName connectedSap; + TInt error = GetConnectedSapNameL( connectedSap ); + + if ( error ) + { + TBTUIViewsCommonUtils::ShowGeneralErrorNoteL(); + } + else + { + + // Create confirmation query + RBuf stringholder; + CleanupClosePushL( stringholder ); + BluetoothUiUtil::LoadResourceAndSubstringL( stringholder, + R_BT_DISCONNECT_FROM, connectedSap, 0 ); + CAknQueryDialog* dlg = CAknQueryDialog::NewL(); + + if(iCoverDisplayEnabled) + { + CleanupStack::PushL(dlg); + dlg->PublishDialogL(ECmdShowDisconnectQuery, KUidCoverUiCategoryBtui); // initializes cover support + CAknMediatorFacade* covercl = AknMediatorFacade(dlg); // uses MOP, so control provided + if (covercl) // returns null if __COVER_DISPLAY is not defined + { + covercl->BufStream() << BTDeviceNameConverter::ToUTF8L(connectedSap);// takes copy so consts are ok too + covercl->BufStream().CommitL(); // no more data to send so commit buf + } + CleanupStack::Pop(dlg); + } + + TInt keypress = dlg->ExecuteLD( R_BT_DISCONNECT_FROM_QUERY, stringholder ); + + CleanupStack::PopAndDestroy(&stringholder); // stringholder + + if( keypress ) // User has accepted the dialog + { + legalToChange = ETrue; + } + else + { + legalToChange = EFalse; + } + } + } + } + + else if ( ( !previousSapMode ) && ( aValue ) ) // SAP Disabled -> Enabled + { + + //if Bluetooth is off + TBTPowerStateValue powerState; + iBtEngSettings->GetPowerState(powerState); + if(powerState!=EBTPowerOn) + { + CAknNoteDialog* dlg2 = new (ELeave) CAknNoteDialog( CAknNoteDialog::EConfirmationTone, + CAknNoteDialog::ENoTimeout/*ELongTimeout*/ ); + if(iCoverDisplayEnabled) + { + CleanupStack::PushL(dlg2); + dlg2->PublishDialogL(ECmdShowBtSapEnableNote, KUidCoverUiCategoryBtui); // initializes cover support + CleanupStack::Pop(dlg2); + } + + dlg2->ExecuteLD( R_BT_SAP_ENABLE_NOTE ); + } + + } + + // Switch sapmode + // + if ( legalToChange ) + { + CRepository* cenRep = NULL; + cenRep = CRepository::NewL( KCRUidBTEngPrivateSettings ); + CleanupStack::PushL(cenRep); + TInt err = cenRep->Set( KBTSapEnabled, aValue ); + CleanupStack::PopAndDestroy(cenRep); + } + TRACE_FUNC_EXIT + } + +// ---------------------------------------------------------- +// CBTUIMainView::AskSapModeDlgL +// ---------------------------------------------------------- +// +void CBTUIMainView::AskSapModeDlgL() + { + TRACE_FUNC_ENTRY + + if ( BluetoothFeatures::EnterpriseEnablementL() == BluetoothFeatures::EDataProfilesDisabled ) + { + RNotifier notifier; + User::LeaveIfError(notifier.Connect()); + CleanupClosePushL(notifier); + User::LeaveIfError(notifier.StartNotifier(KBTEnterpriseItSecurityInfoNotifierUid, KNullDesC8 )); + CleanupStack::PopAndDestroy(¬ifier); + } + else + { + CDesCArrayFlat* items = iCoeEnv->ReadDesCArrayResourceL( R_BT_SAP_MODES ); + CleanupStack::PushL(items); + + TInt currentItem = KErrNotFound; + if(GetSapStatusL() == EBTSapEnabled ) + { + currentItem=0; + } + else + { + currentItem=1; + + } + CAknRadioButtonSettingPage* dlg = new ( ELeave )CAknRadioButtonSettingPage( + R_BT_SAP_SETTING_PAGE, currentItem, items ); + if( dlg->ExecuteLD( CAknSettingPage::EUpdateWhenChanged )) + { + if(currentItem == 1) + { + SetSapStatusL( static_cast( EBTSapDisabled ) ); + // Cast it back (invert again) + } + else + { + SetSapStatusL( static_cast( EBTSapEnabled ) ); + // Cast it back (invert again) + } + } + CleanupStack::PopAndDestroy(items); + } + TRACE_FUNC_EXIT + } + +// ---------------------------------------------------------- +// CBTUIMainView::GetSapStatusL +// ---------------------------------------------------------- +// +TInt CBTUIMainView::GetSapStatusL() + { + TRACE_FUNC_ENTRY + TInt sapStatus; + CRepository* repository = CRepository::NewL(KCRUidBTEngPrivateSettings); + CleanupStack::PushL(repository); + repository->Get(KBTSapEnabled, sapStatus); + CleanupStack::PopAndDestroy(repository); + TRACE_FUNC_EXIT + return sapStatus; + } + +// ---------------------------------------------------------- +// CBTUIModel::GetConnectedSapNameL +// ---------------------------------------------------------- +// + +TInt CBTUIMainView::GetConnectedSapNameL( TDes& aName ) + { + TRACE_FUNC_ENTRY + + + CBTEngConnMan* cm = CBTEngConnMan::NewL(NULL); + CleanupStack::PushL(cm); + + RBTDevAddrArray devAddrArray; + cm->GetConnectedAddresses(devAddrArray, EBTProfileSAP); + if(devAddrArray.Count()>0) + { + CBTEngDevMan* devMan = CBTEngDevMan::NewL(NULL); + + TBTRegistrySearch search; + search.FindAddress(devAddrArray[0]); + + CBTDeviceArray* deviceArray= new (ELeave) CBTDeviceArray(devAddrArray.Count()); + //the name is in first CBTDevice in returned CBTDeviceArray. + devMan->GetDevices(search, deviceArray); + + aName = *(CnvUtfConverter::ConvertToUnicodeFromUtf8L(deviceArray->At(0)->DeviceName())); + + deviceArray->ResetAndDestroy(); + delete deviceArray; + + delete devMan; + } + + devAddrArray.Close(); + CleanupStack::PopAndDestroy(cm); + TRACE_FUNC_EXIT + return KErrNone; + }