--- /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 <aknnotewrappers.h>
+#include <aknradiobuttonsettingpage.h>
+#include <BtuiViewResources.rsg> // Compiled resource ids
+#include <BTSapDomainPSKeys.h>
+#include <centralrepository.h>
+#include <AknMediatorFacade.h>
+#include <btengconnman.h> // for disconnect type and connection observer
+#include <btengsettings.h>
+#include <btengdevman.h>
+#include <SecondaryDisplay/BtuiSecondaryDisplayAPI.h>
+#include <btfeaturescfg.h> // For EnterpriseEnablementL()
+#include <btnotif.h>
+#include <utf.h>
+#include <bluetoothuiutil.h>
+#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<TBTSapMode>( EBTSapDisabled ) );
+ // Cast it back (invert again)
+ }
+ else
+ {
+ SetSapStatusL( static_cast<TBTSapMode>( 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;
+ }