--- a/bluetoothengine/btui/Ecom/src/BTUIMainView.cpp Thu Aug 19 10:05:41 2010 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,1402 +0,0 @@
-/*
-* 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 is the settings view of btui.
-*
-*/
-
-#include <aknViewAppUi.h> // AVKON components
-#include <avkon.hrh>
-#include <akntitle.h>
-#include <featmgr.h> // Feature Manager API
-
-#include "btui.hrh" // Menu commands
-#include "btui.h"
-#include "BTUIMainView.h"
-#include "BTUIMainContainer.h"
-#include "debug.h"
-#include "BTUIKeyWatcher.h"
-#include "BTUIPairedDevicesView.h"
-#include "BTUIBlockedDevicesView.h"
-
-#include <BtuiViewResources.rsg> // Compiled resource ids
-#include <AknGlobalNote.h>
-#include <aknnotewrappers.h>
-#include <aknradiobuttonsettingpage.h>
-#include <akntextsettingpage.h>
-#include <StringLoader.h> // Series 60 localisation stringloader
-#include <aknslidersettingpage.h> //visibility time setting page
-#include <data_caging_path_literals.hrh>
-#include <bautils.h> // BAFL utils (for language file)
-#include <btui.mbg> // application icon for General Setting
-#include <AknMediatorFacade.h>
-#include <AknUtils.h> // For char filter
-#include <CoreApplicationUIsSDKCRKeys.h>
-#include <hlplch.h> // Help launcher
-#include <SecondaryDisplay/BtuiSecondaryDisplayAPI.h>
-#include <btengprivatecrkeys.h>
-#include <gstabhelper.h>
-#include <gsfwviewuids.h>
-#include <gsparentplugin.h>
-#include <utf.h> // CnvUtfConverter
-#include <btfeaturescfg.h> // For EnterpriseEnablementL()
-#include <btnotif.h>
-
-// ---------------------------------------------------------
-// CBTUIMainView::NewL
-// Two phased constructor
-// ---------------------------------------------------------
-//
-CBTUIMainView* CBTUIMainView::NewL(MBtuiPluginViewActivationObserver* aObserver)
- {
- //TRACE_FUNC_ENTRY
-
- CBTUIMainView* self = new (ELeave) CBTUIMainView(aObserver);
-
- // Set construction type, before ConstructL().
- self->iConstructAsGsPlugin = EFalse;
-
- CleanupStack::PushL( self );
- self->ConstructL();
- CleanupStack::Pop(self);
-
- //TRACE_FUNC_EXIT
- return self;
- }
-
-
-// ---------------------------------------------------------
-// CBTUIMainView::NewL
-// Two phased constructor
-// ---------------------------------------------------------
-//
-CBTUIMainView* CBTUIMainView::NewGsPluginL()
- {
- //TRACE_FUNC_ENTRY
-
- CBTUIMainView* self = new (ELeave) CBTUIMainView(NULL);
-
- // Set construction type, before ConstructL().
- self->iConstructAsGsPlugin = ETrue;
-
- CleanupStack::PushL( self );
- self->ConstructL();
-
- CleanupStack::Pop( self );
-
- //TRACE_FUNC_EXIT
- return self;
- }
-
-
-// ---------------------------------------------------------
-// CBTUIMainView::CBTUIMainView
-// ---------------------------------------------------------
-
-CBTUIMainView::CBTUIMainView(MBtuiPluginViewActivationObserver* aObserver )
- :iConstructAsGsPlugin(EFalse), iActivationObserver(aObserver)
- {
- }
-// ---------------------------------------------------------
-// CBTUIMainView::ConstructL
-// Symbian 2nd phase constructor can leave.
-// ---------------------------------------------------------
-//
-void CBTUIMainView::ConstructL()
- {
- TRACE_FUNC_ENTRY
-
- // Plugin load resource manually.
- // These resources are needed by BaseConstructL
-
- iEikEnv = CEikonEnv::Static();
-
- TFileName filename;
- filename += KFileDrive;
- filename += KDC_RESOURCE_FILES_DIR;
- filename += KResourceFileName;
-
- BaflUtils::NearestLanguageFile(iEikEnv->FsSession(),filename);
- iResourceFileFlag=iEikEnv->AddResourceFileL(filename);
-
- // According to Construction type, different softkey resource will be used.
- //
- if(iConstructAsGsPlugin)
- {
- iViewArray = new CArrayPtrFlat<MGSTabbedView>( 3 );
- iTabHelper = CGSTabHelper::NewL();
- iViewArray->AppendL(this);
- iParentViewNotSetYet = ETrue;
-
- iKeyWatcher = CBTUIKeyWatcher::NewL(this, KBTUIPHYCountWatcher);
-
- // Construct OtherDeviceView
- //
- CAknView* pairedDeviceView = CBTUIPairedDevicesView::NewLC( this, iViewArray );
- iAppUi->AddViewL( pairedDeviceView ); // Transfer ownership to CAknViewAppUi
- CleanupStack::Pop(pairedDeviceView );
-
- // Construct BlockDeviceView
- //
- CAknView* blockedDeviceView = CBTUIBlockedDevicesView::NewLC( this, iViewArray );
- iAppUi->AddViewL( blockedDeviceView ); // Transfer ownership to CAknViewAppUi
- CleanupStack::Pop(blockedDeviceView );
-
- BaseConstructL( R_BTUI_MAIN_VIEW_GS_PLUGIN );
- }
- else
- {
- BaseConstructL( R_BTUI_MAIN_VIEW );
- }
-
- iBtEngSettings = CBTEngSettings::NewL(this);
-
- // Sets up TLS, must be done before FeatureManager is used.
- FeatureManager::InitializeLibL();
- iCoverDisplayEnabled = FeatureManager::FeatureSupported(KFeatureIdCoverDisplay);
-
-
- TRACE_FUNC_EXIT
- }
-
-// ---------------------------------------------------------
-// ---------------------------------------------------------
-// Destructor.
-// ---------------------------------------------------------
-//
-CBTUIMainView::~CBTUIMainView()
- {
- TRACE_FUNC_ENTRY
-
- iEikEnv->DeleteResourceFile(iResourceFileFlag);
-
- if ( iContainer )
- {
- AppUi()->RemoveFromViewStack( *this, iContainer );
- }
-
- delete iBtEngSettings;
- delete iContainer;
- delete iIdle;
-
- if(iConstructAsGsPlugin)
- {
- if ( iViewArray )
- {
- iViewArray->Reset();
- delete iViewArray;
- }
-
- delete iTabHelper;
- delete iKeyWatcher;
- }
-
- // Frees the TLS. Must be done after FeatureManager is used.
- FeatureManager::UnInitializeLib();
-
-
- TRACE_FUNC_EXIT
- }
-
-// ----------------------------------------------------
-// CBTUIMainView::PowerStateChanged
-// ----------------------------------------------------
-//
-void CBTUIMainView::PowerStateChanged( TBTPowerStateValue )
- {
- TRACE_FUNC_ENTRY
- if(iContainer)
- {
- iContainer->SettingChanged(EBTMainListItemPowerMode);
- }
-
- if( iConstructAsGsPlugin )
- {
- UpdateParentView();
- }
- TRACE_FUNC_EXIT
- }
-// ----------------------------------------------------
-// CBTUIMainView::VisibilityModeChanged
-// ----------------------------------------------------
-//
-void CBTUIMainView::VisibilityModeChanged( TBTVisibilityMode )
- {
- TRACE_FUNC_ENTRY
- if(iContainer)
- {
- iContainer->SettingChanged(EBTMainListItemVisibilityMode);
- }
-
- if( iConstructAsGsPlugin )
- {
- UpdateParentView();
- }
- }
-
-// ---------------------------------------------------------
-// From CAknView
-// CBTUIMainView::Id
-// ---------------------------------------------------------
-//
-TUid CBTUIMainView::Id() const
- {
- TRACE_FUNC_ENTRY
- if(iConstructAsGsPlugin)
- {
- return KGsBtuiPluginUid; //same as ecom impl UID, required by GS interface.
- }
- else
- {
- return KBtuiPluginUidMainView; //view id
- }
- }
-// ---------------------------------------------------------
-// CBTUIMainView::HandleMiddleSoftkey
-// Handles middle soft key
-// ---------------------------------------------------------
-//
-void CBTUIMainView::HandleMiddleSoftkey()
- {
- TRACE_FUNC_ENTRY
- if( iContainer == NULL ) return;
-
- TInt currentHighLightPosition= iContainer->CurrentItemIndex();
- switch(currentHighLightPosition)
- {
- case EBTMainListItemPowerMode:
- HandleCommand( EBTUICmdChangePowerStateSelect );
- break;
- case EBTMainListItemVisibilityMode:
- HandleCommand( EBTUICmdChangeVisibilitySelect );
- break;
- case EBTMainListItemNameSetting:
- HandleCommand( EBTUICmdChangeBTNameSelect );
- break;
-
- // For Bluetooth SIM Access Profile feature
- //
- case EBTMainListItemSapMode:
- HandleCommand( EBTUICmdChangeSapStateSelect );
- break;
- default:
- break;
- }
- TRACE_FUNC_EXIT
- }
-// ---------------------------------------------------------
-// TUid CBTUIMainView::HandleCommand
-// ---------------------------------------------------------
-//
-void CBTUIMainView::HandleCommand(TInt aCommand)
-{
- TRAP_IGNORE(HandleCommandL(aCommand));
-}
-// ---------------------------------------------------------
-// CBTUIMainView::HandleCommandL
-// Redirects commands to the appui class.
-// ---------------------------------------------------------
-//
-void CBTUIMainView::HandleCommandL(TInt aCommand)
- {
- TRACE_INFO((_L(">> CBTUIMainView::HandleCommandL: %d"), aCommand))
- switch ( aCommand )
- {
- //middle soft key is handled here
- case EBTUICmdMSK:
- HandleMiddleSoftkey();
- break;
- case EAknSoftkeyBack:
- AppUi()->ActivateLocalViewL(iParentView.iViewUid);
- break;
-
- case EAknSoftkeyExit:
- {
- AppUi()->ProcessCommandL(EEikCmdExit);
- break;
- }
-
-#ifdef __SERIES60_HELP
- case EAknCmdHelp:
- {
- HlpLauncher::LaunchHelpApplicationL(
- iEikonEnv->WsSession(), AppUi()->AppHelpContextL());
- break;
- }
-#endif
- case EBTUICmdChangePowerStateMenu:
- {
- AskPowerModeDlgL();
- break;
- }
-
- case EBTUICmdChangePowerStateSelect:
- {
- TBTPowerStateValue powerState;
- iBtEngSettings->GetPowerState(powerState);
- if(powerState==EBTPowerOn)
- {
- SetPowerStatusL( EFalse );
- }
- else
- {
- SetPowerStatusL( ETrue );
- }
- break;
- }
-
- case EBTUICmdChangeVisibilitySelect: // now both select key and menu command will triger the setting page.
- case EBTUICmdChangeVisibilityMenu:
- {
- AskVisibilityDlgL();
- break;
- }
-
- case EBTUICmdChangeBTNameMenu:
- case EBTUICmdChangeBTNameSelect:
- {
- AskNewBtNameDlgL();
- iContainer->SettingChanged(TBTMainListItemIndexes(iContainer->CurrentItemIndex()));
- break;
- }
-
- // For Bluetooth SIM Access Profile feature
- case EBTUICmdChangeSapStateSelect:
- {
-
- if ( BluetoothFeatures::EnterpriseEnablementL() == BluetoothFeatures::EDataProfilesDisabled )
- {
- RNotifier notifier;
- User::LeaveIfError(notifier.Connect());
- CleanupClosePushL(notifier);
- User::LeaveIfError(notifier.StartNotifier(KBTEnterpriseItSecurityInfoNotifierUid, KNullDesC8 ));
- CleanupStack::PopAndDestroy(¬ifier);
- }
- else
- {
- TInt sapStatus;
- CRepository* repository = CRepository::NewL(KCRUidBTEngPrivateSettings);
- CleanupStack::PushL(repository);
- repository->Get(KBTSapEnabled, sapStatus);
- CleanupStack::PopAndDestroy(repository);
-
- if(sapStatus==EBTSapEnabled)
- {
- SetSapStatusL( EBTSapDisabled );
- }
- else
- {
- SetSapStatusL( EBTSapEnabled );
- }
- iContainer->SettingChanged(
- TBTMainListItemIndexes(iContainer->CurrentItemIndex()));
- }
- break;
- }
-
- // For Bluetooth SIM Access Profile feature
- case EBTUICmdChangeSapStateMenu:
- {
- AskSapModeDlgL();
- iContainer->SettingChanged(
- TBTMainListItemIndexes(iContainer->CurrentItemIndex()));
- break;
- }
-
- default:
- {
- AppUi()->HandleCommandL( aCommand );
- iContainer->SettingChanged(
- TBTMainListItemIndexes(iContainer->CurrentItemIndex()));
- break;
- }
- }
- TRACE_FUNC_EXIT
- }
-
-
-// ---------------------------------------------------------
-// From CAknView
-// CBTUIMainView::DoActivateL
-// ---------------------------------------------------------
-//
-void CBTUIMainView::DoActivateL( const TVwsViewId& aPrevViewId,
- TUid /*aCustomMessageId*/,
- const TDesC8& /*aCustomMessage*/)
- {
- TRACE_FUNC_ENTRY
-
-
- if ( BluetoothFeatures::EnterpriseEnablementL() == BluetoothFeatures::EDisabled )
- {
- RNotifier notifier;
- User::LeaveIfError(notifier.Connect());
- CleanupClosePushL(notifier);
- User::LeaveIfError(notifier.StartNotifier(KBTEnterpriseItSecurityInfoNotifierUid, KNullDesC8 ));
- CleanupStack::PopAndDestroy(¬ifier);
-
- AppUi()->ActivateLocalViewL(aPrevViewId.iViewUid); //go back straight away
- return;
- }
-
-
- if( iConstructAsGsPlugin )
- {
- // Only set parent view when entering BT GS setting.
- // since tab change chould make aPrevViewId assign to non-parent views. e.g. paired or blocked view.
- if(iParentViewNotSetYet)
- {
- iParentView = aPrevViewId;
- iParentViewNotSetYet = EFalse;
- }
-
- // Setup tab group
- iTabHelper->CreateTabGroupL( Id(), iViewArray );
- }
-
- iContainer = new (ELeave) CBTUIMainContainer;
- iContainer->SetMopParent(this); // MObjectProvider
- iContainer->ConstructL( ClientRect(), this );
-
- // Setup the title
- //
- HBufC* btTitleMain = iCoeEnv->AllocReadResourceLC(R_BT_TITLE_BLUETOOTH);
- CEikStatusPane* statusPane = StatusPane();
- CAknTitlePane* titlePane;
- titlePane = (CAknTitlePane*) statusPane->ControlL(TUid::Uid(EEikStatusPaneUidTitle));
- titlePane->SetTextL(btTitleMain->Des());
- CleanupStack::PopAndDestroy(btTitleMain); // btTitleMain
- btTitleMain = NULL;
-
- AppUi()->AddToStackL( *this, iContainer );
-
- //Check if the local name has been set. If not ask user to set name
-
- TBool nameStatus = EFalse;
- TInt err = IsLocalNameModifiedL( nameStatus );
-
- if( err || nameStatus == EBTLocalNameDefault )
- {
- InitiateBTLocalNameQueryL(); // Ask local Bluetooth name if not given yet.
- }
-
- // notify observer
- if( iActivationObserver && iConstructAsGsPlugin == EFalse)
- {
- iActivationObserver->PluginViewActivated(EMainViewId);
- }
-
- TRACE_FUNC_EXIT
- }
-
-// ---------------------------------------------------------
-// From CAknView
-// CBTUIMainView::DoDeactivate
-// ---------------------------------------------------------
-//
-void CBTUIMainView::DoDeactivate()
- {
- TRACE_FUNC_ENTRY
-
- if ( iContainer )
- {
- AppUi()->RemoveFromStack( iContainer );
- }
-
- delete iContainer;
- iContainer = NULL;
-
- if(iConstructAsGsPlugin)
- {
- iTabHelper->RemoveTabGroup();
- CGSBaseView::DoDeactivate();
- }
- TRACE_FUNC_EXIT
-
- }
-
-// ---------------------------------------------------------
-// From CAknView
-// CBTUIMainView::DynInitMenuPaneL
-// Shows selected item's context sensitive options menu.
-// ---------------------------------------------------------
-//
-void CBTUIMainView::DynInitMenuPaneL( TInt aResId, CEikMenuPane* aMenu )
- {
- TRACE_FUNC_ENTRY
-
- // dim help if it exists and is not supported
- TInt tmp;
- if ( aMenu->MenuItemExists(EAknCmdHelp,tmp ) )
- {
- aMenu->SetItemDimmed(EAknCmdHelp,
- !FeatureManager::FeatureSupported( KFeatureIdHelp ) );
- }
-
- if ( aResId == R_BTUI_MAIN_VIEW_MENU )
- {
- // Set all menus dimmed at first(hide them all)
- //
- aMenu->SetItemDimmed(EBTUICmdChangePowerStateMenu, ETrue);
- aMenu->SetItemDimmed(EBTUICmdChangeVisibilityMenu, ETrue);
- aMenu->SetItemDimmed(EBTUICmdChangeBTNameMenu, ETrue);
- if ( FeatureManager::FeatureSupported( KFeatureIdBtSap ) )
- aMenu->SetItemDimmed(EBTUICmdChangeSapStateMenu, ETrue);
-
- }
- TRACE_FUNC_EXIT
- }
-
-// ---------------------------------------------------------
-// CBTUIMainView::SettingChangedL
-// Redraws the BT Name field.
-// ---------------------------------------------------------
-//
-void CBTUIMainView::SettingChangedL( TBTMainListItemIndexes aListItem )
- {
- TRACE_FUNC_ENTRY
- if(iContainer)
- {
- iContainer->SettingChanged(aListItem);
- }
-
- }
-
-// ----------------------------------------------------
-// CBTUIMainView::SetPowerStatusL
-// ----------------------------------------------------
-//
-TInt CBTUIMainView::SetPowerStatusL( TBool aValue )
- {
- TRACE_FUNC_ENTRY
-
- TInt errorCode = KErrNone;
- TBTPowerStateValue previousPowerMode;
- errorCode=iBtEngSettings->GetPowerState(previousPowerMode);
- if(errorCode)
- return errorCode;
-
- TBool legalToChange = ETrue;
-
- if ( ( previousPowerMode==EBTPowerOn ) && ( !aValue )) // power ON -> OFF
- {
- TRACE_INFO(_L("power ON -> OFF"))
-
- // Check active connections before query
- if( TBTUIViewsCommonUtils::IsAnyDeviceConnectedL())
- {
- CAknQueryDialog* dlg = CAknQueryDialog::NewL();
-
- if(iCoverDisplayEnabled)
- {
- CleanupStack::PushL(dlg);
- dlg->PublishDialogL(ECmdShowBtSwitchOffAnywayQuery, KUidCoverUiCategoryBtui); // initializes cover support
- CleanupStack::Pop(dlg);
- }
-
- TInt keypress = dlg->ExecuteLD( R_BT_SWITCH_OFF_ANYWAY_QUERY );
- if( !keypress ) // User has not accepted the dialog
- {
- legalToChange = EFalse;
- }
- }
- TRACE_INFO((_L("power ON -> OFF, legalToChange = %d"), legalToChange))
-
- }
- else if ( ( !previousPowerMode ) && ( aValue ) ) // power OFF -> ON
- {
- TRACE_INFO(_L("power OFF -> ON"))
-
- TInt offlineModeOff = 0; // possible values are 0 and 1
- TInt activationEnabled = 0; // possible values are 0 and 1
-
- CRepository* repository = CRepository::NewL(KCRUidCoreApplicationUIs);
- CleanupStack::PushL(repository);
- repository->Get(KCoreAppUIsNetworkConnectionAllowed, offlineModeOff);
- // Closing connection:
- CleanupStack::PopAndDestroy(repository);
- repository =NULL;
- repository = CRepository::NewL(KCRUidBluetoothEngine);
- // Check activation enabled
- CleanupStack::PushL(repository);
- repository->Get(KBTEnabledInOffline, activationEnabled);
- // Closing connection:
- CleanupStack::PopAndDestroy(repository);
-
-
- TRACE_INFO((_L("power OFF -> ON, offlineModeOff = %d"), offlineModeOff ))
- TRACE_INFO((_L("power OFF -> ON, activationEnabled = %d"), activationEnabled ))
-
- // Is offline mode on
- //
- if ( !offlineModeOff )
- {
- // Choose user interaction
- //
- if ( activationEnabled )
- {
- // Create and show query
- //
- CAknQueryDialog* dlg = CAknQueryDialog::NewL();
-
- if(iCoverDisplayEnabled)
- {
- CleanupStack::PushL(dlg);
- dlg->PublishDialogL(ECmdShowBtActivateInOfflineQuery, KUidCoverUiCategoryBtui); // initializes cover support
- CleanupStack::Pop(dlg);
- }
-
- TInt keypress = dlg->ExecuteLD( R_BT_ACTIVATE_IN_OFFLINE_QUERY );
- if( !keypress ) // User has not accepted the dialog
- {
- legalToChange = EFalse;
- }
- }
- else
- {
- legalToChange = EFalse;
-
- // Load a string, create and show a note
- //
- HBufC* stringHolder = StringLoader::LoadLC( R_BT_OFFLINE_DISABLED );
- CAknInformationNote* note = new (ELeave) CAknInformationNote();
-
- if(iCoverDisplayEnabled)
- {
- CleanupStack::PushL(note);
- note->PublishDialogL(ECmdShowBtOfflineDisabledNote, KUidCoverUiCategoryBtui); // initializes cover support
- CleanupStack::Pop(note);
- }
-
- note->ExecuteLD( *stringHolder );
- CleanupStack::PopAndDestroy(stringHolder); //stringHolder
- }
- }
- }
-
- TRACE_INFO((_L("legalToChange = %d"), legalToChange))
-
- // Switch powermode
- //
- if ( legalToChange )
- {
-
- TInt errorCode = KErrNone;
- TBTPowerStateValue powerMode;
- if(aValue)
- {
- powerMode=EBTPowerOn;
- }
- else
- {
- powerMode=EBTPowerOff;
- }
-
- errorCode=iBtEngSettings->SetPowerState(powerMode);
-
- if( (errorCode == KErrNone ) && (aValue))
-
- {
- //Check the visibility mode
- TBTVisibilityMode visiMode;
- errorCode=iBtEngSettings->GetVisibilityMode(visiMode);
- if(errorCode==KErrNone)
- {
- if (visiMode == EBTVisibilityModeHidden)
- {
- //Show note
- CAknNoteDialog* dlg = new (ELeave) CAknNoteDialog( CAknNoteDialog::EConfirmationTone,
- CAknNoteDialog::ELongTimeout );
- if(iCoverDisplayEnabled)
- {
- CleanupStack::PushL(dlg);
- dlg->PublishDialogL(ECmdBtuiShowBtHiddenFromOthersNote, KUidCoverUiCategoryBtui); // initializes cover support
- CleanupStack::Pop(dlg);
- }
-
- dlg->ExecuteLD( R_BT_HIDDEN_FROM_OTHERS );
- }
- }
- }
- if ( errorCode != KErrNone && errorCode != KErrAlreadyExists )
- {
- TRAP_IGNORE(TBTUIViewsCommonUtils::ShowGeneralErrorNoteL());
- }
-
- }
-
- TRACE_INFO((_L("SetPowerStatusL() complete. errorCode = %d"), errorCode))
- return errorCode;
- }
-
-// ----------------------------------------------------------
-// CBTUIMainView::SetVisibilityStatusL
-// ----------------------------------------------------------
-//
-void CBTUIMainView::SetVisibilityStatusL( TBTVisibilityMode aMode )
- {
- TRACE_FUNC_ENTRY
-
- TInt errorCode = KErrNone;
-
- switch( aMode )
- {
- case EBTVisibilityModeGeneral:
- {
- errorCode = iBtEngSettings->SetVisibilityMode(aMode);
-
- if(errorCode == KErrNone)
- {
- CAknNoteDialog* dlg = new (ELeave) CAknNoteDialog( CAknNoteDialog::EConfirmationTone,
- CAknNoteDialog::ELongTimeout );
-
- if(iCoverDisplayEnabled)
- {
- CleanupStack::PushL(dlg);
- dlg->PublishDialogL(ECmdShowBtPhoneVisibToAllNote, KUidCoverUiCategoryBtui); // initializes cover support
- CleanupStack::Pop(dlg);
- }
- dlg->ExecuteLD( R_BT_PHONE_VISIB_TO_OTH_NOTE );
- }
- }
- break;
-
- case EBTVisibilityModeHidden:
- {
- errorCode = iBtEngSettings->SetVisibilityMode(aMode);
-
- if(errorCode == KErrNone)
- {
- CAknNoteDialog* dlg = new (ELeave) CAknNoteDialog( CAknNoteDialog::EConfirmationTone,
- CAknNoteDialog::ELongTimeout );
-
- if(iCoverDisplayEnabled)
- {
- CleanupStack::PushL(dlg);
- dlg->PublishDialogL(ECmdBtuiShowBtHiddenFromOthersNote, KUidCoverUiCategoryBtui); // initializes cover support
- CleanupStack::Pop(dlg);
- }
- dlg->ExecuteLD( R_BT_HIDDEN_FROM_OTHERS );
- }
- }
- break;
-
- case EBTVisibilityModeTemporary:
- {
- // Asks user to turn on Bluetooth, if temporary visibility is chosen.
- if( TBTUIViewsCommonUtils::TurnBTOnIfNeededL(iBtEngSettings,iCoverDisplayEnabled) != KErrNone)
- {
- return;
- }
- TInt sliderValue = 1;
- CAknSettingPage* dlg =
- new(ELeave) CAknSliderSettingPage(R_VISIBILITY_TIME_SETTING_PAGE,
- sliderValue);
-
- if (dlg->ExecuteLD(CAknSettingPage::EUpdateWhenChanged))
- {
- errorCode = iBtEngSettings->SetVisibilityMode( aMode, sliderValue );
- }
- }
- break;
-
- default:
- break;
- }
-
- if((errorCode != KErrNone) && (errorCode != KErrAlreadyExists))
- {
- TRAP_IGNORE(TBTUIViewsCommonUtils::ShowGeneralErrorNoteL());
- }
- TRACE_FUNC_EXIT
- }
-
-// ----------------------------------------------------------
-// CBTUIMainView::GetBTLocalName
-// ----------------------------------------------------------
-//
-TDesC* CBTUIMainView::GetBTLocalName()
- {
- TRACE_FUNC_ENTRY
-
- iTempNameBuffer.Zero(); // Empty Local BT device name
- TInt err=iBtEngSettings->GetLocalName( iTempNameBuffer );// Store name into member variable
- if(err!=KErrNone)
- TRAP_IGNORE(TBTUIViewsCommonUtils::ShowGeneralErrorNoteL());
-
- // Cut the excess part of the name away. The query can handle only
- // KBTUIMaxNameLength characters.
- //
- if( iTempNameBuffer.Length() > KBTUIMaxNameLength )
- {
- iTempNameBuffer.SetLength( KBTUIMaxNameLength );
- }
- TRACE_FUNC_EXIT
- return &iTempNameBuffer; // And return reference for it
- }
-
-// ----------------------------------------------------------
-// CBTUIMainView::AskNewBtNameDlgL
-// ----------------------------------------------------------
-//
-void CBTUIMainView::AskNewBtNameDlgL()
- {
- TRACE_FUNC_ENTRY
-
- // Cut the excess part of the name away. The query can handle only
- // KBTUIMaxNameLength characters.
- //
- if( iTempNameBuffer.Length() > KBTUIMaxNameLength )
- {
- iTempNameBuffer.SetLength( KBTUIMaxNameLength );
- }
-
- FOREVER
- {
- CAknTextSettingPage* dlg = new( ELeave )CAknTextSettingPage( R_BT_NAME_SETTING_PAGE,
- iTempNameBuffer );
- if( dlg->ExecuteLD( CAknSettingPage::EUpdateWhenChanged ))
- {
- // Remove trouble making control chars
- AknTextUtils::StripCharacters(iTempNameBuffer, KAknStripListControlChars);
-
- iTempNameBuffer.TrimAll(); // Remove spaces and check what is left..
- if( iTempNameBuffer.Length() > 0 )
- {
-
- if(iBtEngSettings->SetLocalName(iTempNameBuffer) != KErrNone)
- {
- TBTUIViewsCommonUtils::ShowGeneralErrorNoteL();
- }
- TRACE_FUNC_EXIT
- return;
- }
- }
- else
- {
- TRACE_FUNC_EXIT
- return; // User has cancelled this operation
- }
- }
-
- }
-
-// ----------------------------------------------------------
-// CBTUIMainView::AskPowerModeDlgL
-// ----------------------------------------------------------
-//
-void CBTUIMainView::AskPowerModeDlgL()
- {
- TRACE_FUNC_ENTRY
-
- CDesCArrayFlat* items = iCoeEnv->ReadDesCArrayResourceL( R_BT_POWER_MODES );
- CleanupStack::PushL(items);
- TBTPowerStateValue powerState;
- iBtEngSettings->GetPowerState(powerState);
- TInt currentItem = !powerState; // Implicit cast from Not-TBool to int (inverted)
-
- CAknRadioButtonSettingPage* dlg = new ( ELeave )CAknRadioButtonSettingPage(
- R_BT_POWER_SETTING_PAGE, currentItem, items );
- if( dlg->ExecuteLD( CAknSettingPage::EUpdateWhenChanged ))
- {
- SetPowerStatusL( static_cast<TBool>( !currentItem )); // Cast it back (invert again)
- }
- CleanupStack::PopAndDestroy(items); // items
- TRACE_FUNC_EXIT
- }
-
-// ----------------------------------------------------------
-// CBTUIMainView::AskVisibilityDlgL
-// ----------------------------------------------------------
-//
-void CBTUIMainView::AskVisibilityDlgL()
- {
- TRACE_FUNC_ENTRY
-
- CDesCArrayFlat* items = iCoeEnv->ReadDesCArrayResourceL( R_BT_VISIBILITY_MODES );
- CleanupStack::PushL(items);
-
- TInt currentItem = 0; // Current position at radio button setting page
- TBTVisibilityMode currentMode;
- TInt errorCode(iBtEngSettings->GetVisibilityMode(currentMode));
- if(errorCode==KErrNone)
- {
-
- switch( currentMode ) // Map from mode to radio button position at setting page
- {
- case EBTVisibilityModeGeneral:
- currentItem = 0;
- break;
- case EBTVisibilityModeTemporary: // temp visible
- currentItem = 1;
- break;
- case EBTVisibilityModeHidden:
- currentItem = 1+1;
- break;
- default:
- break;
- }
-
- // Ask new mode from user
-
- CAknRadioButtonSettingPage* dlg = new ( ELeave )CAknRadioButtonSettingPage(
- R_BT_VISIBILITY_SETTING_PAGE, currentItem, items );
- if( dlg->ExecuteLD( CAknSettingPage::EUpdateWhenChanged ))
- {
- switch( currentItem ) // Map it back from radio button position to mode at setting page
- {
- case 0:
- SetVisibilityStatusL( EBTVisibilityModeGeneral );
- break;
-
- case 1:
- SetVisibilityStatusL( EBTVisibilityModeTemporary );
- break;
-
- case 1+1:
- SetVisibilityStatusL( EBTVisibilityModeHidden );
- break;
-
- default:
- break;
- }
- }
- }
- else
- TBTUIViewsCommonUtils::ShowGeneralErrorNoteL();
-
-
- CleanupStack::PopAndDestroy(items); // items
- }
-
-
-// ----------------------------------------------------
-// CBTUIMainView::GetBtSettingsReference
-//
-// This method returns the reference to the settings class
-// ----------------------------------------------------
-//
-CBTEngSettings* CBTUIMainView::GetBtSettingsReference()
- {
- TRACE_FUNC
- return iBtEngSettings;
- }
-
-// ----------------------------------------------------
-// CBTUIMainView::InitiateBTLocalNameQueryL
-//
-// Initiate BT local name query after Symbian OS has entered
-// idle state.
-// ----------------------------------------------------
-//
-void CBTUIMainView::InitiateBTLocalNameQueryL()
- {
- TRACE_FUNC
-
-
- __ASSERT_DEBUG( !iIdle, PANIC(EBTPanicClassMemberVariableNotNull) );
-
- // Launch idle time regognition and execute local BT name query when ready
- iIdle = CIdle::NewL(CActive::EPriorityIdle);
- iIdle->Start(TCallBack(LaunchBTLocalNameQueryL, this));
- }
-
-// ----------------------------------------------------
-// CBTUIMainView::LaunchBTLocalNameQueryL
-//
-// Execute BT local name query. Symbian OS has entered
-// idle state now.
-// ----------------------------------------------------
-//
-TInt CBTUIMainView::LaunchBTLocalNameQueryL(TAny* aMainView)
- {
- //TRACE_FUNC
-
- TInt errorCode = static_cast<CBTUIMainView*>(aMainView)->AskBTLocalNameQueryL();
- if( errorCode != KErrNone )
- {
- CAknNoteDialog* dlg = new (ELeave) CAknNoteDialog( CAknNoteDialog::EErrorTone,
- CAknNoteDialog::ELongTimeout );
- if(static_cast<CBTUIMainView*>(aMainView)->iCoverDisplayEnabled)
- {
- CleanupStack::PushL(dlg);
- dlg->PublishDialogL(ECmdShowBtGeneralErrorNote, KUidCoverUiCategoryBtui); // initializes cover support}
- CleanupStack::Pop(dlg);
- }
- dlg->ExecuteLD( R_BT_GENERAL_ERROR_NOTE );
- }
- return KErrNone;
- }
-
-// ----------------------------------------------------
-// CBTUIMainView::AskBTLocalNameQueryL
-// ----------------------------------------------------
-//
-TInt CBTUIMainView::AskBTLocalNameQueryL()
- {
- TRACE_FUNC_ENTRY
-
- TInt errorCode = KErrNone;
- iTempNameBuffer.Zero(); // Empty Local BT device name
-
- //Get default name if given by e.g. phone product
- errorCode = RProperty::Get( KPropertyUidBluetoothCategory, KPropertyKeyBluetoothSetDeviceName, iTempNameBuffer );
-
- if( errorCode || !iTempNameBuffer.Length() )
- {
- errorCode = RProperty::Get( KPropertyUidBluetoothCategory, KPropertyKeyBluetoothGetDeviceName, iTempNameBuffer );
-
- if( errorCode || !iTempNameBuffer.Length() )
- {
- RBTRegServ btRegServ;
- RBTLocalDevice btReg;
- TBTLocalDevice localDev;
-
- errorCode = btRegServ.Connect();
-
- if( !errorCode )
- {
- errorCode = btReg.Open( btRegServ );
-
- if( !errorCode )
- {
- // Read the BT local name from BT Registry.
- errorCode = btReg.Get( localDev );
-
- if( !errorCode )
- {
- // The error can be > 0 if there are unconverted characters.
- errorCode = CnvUtfConverter::ConvertToUnicodeFromUtf8( iTempNameBuffer, localDev.DeviceName() );
- }
- }
- }
-
- btReg.Close();
- btRegServ.Close();
- }
- }
-
- if(errorCode==KErrNone)
- {
-
- // Cut the excess part of the name away. The query can handle only
- // KBTUIMaxNameLength characters.
- //
- if( iTempNameBuffer.Length() > KBTUIMaxNameLength )
- {
- iTempNameBuffer.SetLength( KBTUIMaxNameLength );
- }
-
- CAknTextQueryDialog* dlg = CAknTextQueryDialog::NewL( iTempNameBuffer );
- TInt keypress = dlg->ExecuteLD( R_BT_ENTER_LOCAL_NAME_QUERY );
-
- if( keypress ) // User has accepted the dialog
- {
- // Remove trouble making control chars
- AknTextUtils::StripCharacters(iTempNameBuffer, KAknStripListControlChars);
-
- iTempNameBuffer.TrimAll(); // Remove extra spaces
- errorCode = iBtEngSettings->SetLocalName(iTempNameBuffer);
-
- this->SettingChangedL(EBTMainListItemNameSetting); // Redraw BT name
- }
- }
-
- delete iIdle; iIdle = NULL;
- TRACE_FUNC_EXIT
- return errorCode;
- }
-
-//---------------------------------------------------------------------
-// CBTUIMainView::GetCaption
-//----------------------------------------------------------------------
-//
-void CBTUIMainView::GetCaptionL( TDes& aCaption ) const
- {
- TRACE_FUNC
-
- // the resource file is already opened.
- HBufC* result = StringLoader::LoadL( R_GS_BTUI_VIEW_CAPTION );
- aCaption.Copy( *result );
- delete result;
- }
-
-
-//---------------------------------------------------------------------
-// CBTUIMainView::CreateIconL
-//----------------------------------------------------------------------
-//
-CGulIcon* CBTUIMainView::CreateIconL( const TUid aIconType )
- {
- TRACE_FUNC_ENTRY
-
- RefreshSettingsStatusL();
- CGulIcon* icon = NULL;
- TFileName bmpFilename;
- bmpFilename += KBitmapFileDrive;
- bmpFilename += KDC_APP_BITMAP_DIR;
- bmpFilename += KBtuiBmpFileName;
-
- if(aIconType == KGSIconTypeLbxItem)
- {
-
- switch(iBtState)
- {
- case EBTOff:
- icon = AknsUtils::CreateGulIconL(
- AknsUtils::SkinInstance(),
- KAknsIIDQgnPropSetAppsBtOff,
- bmpFilename,
- EMbmBtuiQgn_prop_set_apps_bt_off,
- EMbmBtuiQgn_prop_set_apps_bt_off_mask );
- break;
- case EBTOnShown:
- icon = AknsUtils::CreateGulIconL(
- AknsUtils::SkinInstance(),
- KAknsIIDQgnPropSetAppsBtOnShown,
- bmpFilename,
- EMbmBtuiQgn_prop_set_apps_bt_on_shown,
- EMbmBtuiQgn_prop_set_apps_bt_on_shown_mask );
- break;
- case EBTOnHidden:
- icon = AknsUtils::CreateGulIconL(
- AknsUtils::SkinInstance(),
- KAknsIIDQgnPropSetAppsBtOnHidden,
- bmpFilename,
- EMbmBtuiQgn_prop_set_apps_bt_on_hidden,
- EMbmBtuiQgn_prop_set_apps_bt_on_hidden_mask );
- break;
- case EBTConnectedShown:
- icon = AknsUtils::CreateGulIconL(
- AknsUtils::SkinInstance(),
- KAknsIIDQgnPropSetAppsBtConnShown,
- bmpFilename,
- EMbmBtuiQgn_prop_set_apps_bt_conn_shown,
- EMbmBtuiQgn_prop_set_apps_bt_conn_shown_mask );
- break;
- case EBTConnectedHidden:
- icon = AknsUtils::CreateGulIconL(
- AknsUtils::SkinInstance(),
- KAknsIIDQgnPropSetAppsBtConnHidden,
- bmpFilename,
- EMbmBtuiQgn_prop_set_apps_bt_conn_hidden,
- EMbmBtuiQgn_prop_set_apps_bt_conn_hidden_mask );
- break;
- }
- }
- else
- {
- icon = CGSPluginInterface::CreateIconL( aIconType );
- }
-
- return icon;
- }
-
-
-// ---------------------------------------------------------------------------
-// CBTUIMainView::GetValue()
-// Get 2nd row text for parent Connectivity View.
-// ---------------------------------------------------------------------------
-//
-void CBTUIMainView::GetValue( const TGSPluginValueKeys aKey, TDes& aValue )
- {
- TRACE_FUNC_ENTRY
-
- TRAP_IGNORE( GetValueL(aKey, aValue) );
- }
-
-// ---------------------------------------------------------------------------
-// CBTUIMainView::GetValueL()
-// ---------------------------------------------------------------------------
-//
-void CBTUIMainView::GetValueL( const TGSPluginValueKeys aKey, TDes& aValue )
- {
- if(aKey == EGSPluginKeySettingsItemValueString)
- {
- HBufC* secondary = NULL;
- RefreshSettingsStatusL();
- switch(iBtState)
- {
- case EBTOff:
- secondary = StringLoader::LoadL( R_CP_DETAIL_BT_OFF );
- break;
- case EBTOnShown:
- secondary = StringLoader::LoadL( R_CP_DETAIL_BT_ON_SHOWN );
- break;
- case EBTOnHidden:
- secondary = StringLoader::LoadL( R_CP_DETAIL_BT_ON_HIDDEN );
- break;
- case EBTConnectedShown:
- secondary = StringLoader::LoadL( R_CP_DETAIL_BT_CONN_SHOWN );
- break;
- case EBTConnectedHidden:
- secondary = StringLoader::LoadL( R_CP_DETAIL_BT_CONN_HIDDEN );
- break;
- }
- aValue.Copy( *secondary );
- delete secondary;
- }
- }
-
-// ---------------------------------------------------------------------------
-// CBTUIMainView::CreateTabIconL()
-// Creates icon for tab.
-// ---------------------------------------------------------------------------
-//
-CGulIcon* CBTUIMainView::CreateTabIconL()
- {
- TFileName bmpFilename;
- bmpFilename += KBitmapFileDrive;
- bmpFilename += KDC_APP_BITMAP_DIR;
- bmpFilename += KBtuiBmpFileName;
-
- CGulIcon* icon = AknsUtils::CreateGulIconL(
- AknsUtils::SkinInstance(),
- KAknsIIDQgnPropBtSetTab3,
- bmpFilename,
- EMbmBtuiQgn_prop_bt_set_tab3,
- EMbmBtuiQgn_prop_bt_set_tab3_mask );
-
- return icon;
- }
-
-// ---------------------------------------------------------------------------
-// CBTUIMainView::RefreshSettingsStatusL()
-// Get the current BT settings: power, visibility and connection.
-// ---------------------------------------------------------------------------
-//
-void CBTUIMainView::RefreshSettingsStatusL()
- {
-
- if ( BluetoothFeatures::EnterpriseEnablementL() == BluetoothFeatures::EDisabled )
- {
- iBtState = EBTOff;
- }
- else
- {
- TBTPowerStateValue powerState;
- iBtEngSettings->GetPowerState(powerState);
-
- TBTVisibilityMode currentMode;
- iBtEngSettings->GetVisibilityMode(currentMode);
-
- TBool connected = TBTUIViewsCommonUtils::IsAnyDeviceConnectedL();
-
- if(powerState == EBTPowerOff)
- iBtState = EBTOff;
- else
- {
- if( !connected && (currentMode == EBTVisibilityModeGeneral ||
- currentMode == EBTVisibilityModeTemporary))
- iBtState = EBTOnShown;
-
- else if(!connected && currentMode == EBTVisibilityModeHidden)
- iBtState = EBTOnHidden;
-
- else if(connected && (currentMode == EBTVisibilityModeGeneral ||
- currentMode == EBTVisibilityModeTemporary))
- iBtState = EBTConnectedShown;
-
- else if(connected && currentMode == EBTVisibilityModeHidden)
- iBtState = EBTConnectedHidden;
- }
- }
- }
-
-// ----------------------------------------------------
-// CBTUIMainView::UpdateParentView
-//
-// Update Connectivity View when it's the current
-// active view and the key watched is changed.
-// ----------------------------------------------------
-void CBTUIMainView::UpdateParentView()
- {
- if(iConstructAsGsPlugin)
- {
- CGSParentPlugin* parent = static_cast<CGSParentPlugin*>(AppUi()->View( KGSConPluginUid ));
- if( parent )
- {
- parent->UpdateView();
- }
- }
- }
-
-// ---------------------------------------------------------------------------
-// CBTUIMainView::NewContainerL
-// Creates new iContainer.
-// ---------------------------------------------------------------------------
-//
-void CBTUIMainView::NewContainerL()
- {
- //As a transparent view, do nothing here.
- }
-
-// ---------------------------------------------------------------------------
-// CBTUIMainView::HandleListBoxSelectionL
-// Handle any user actions while in the list view.
-// ---------------------------------------------------------------------------
-//
-void CBTUIMainView::HandleListBoxSelectionL()
- {
- //As a base-view, it's transparent, so do nothing here.
- }
-
-// ---------------------------------------------------------------------------
-// CBTUIMainView::GetParentView
-// ---------------------------------------------------------------------------
-//
-TVwsViewId CBTUIMainView::GetParentView()
- {
- return iParentView;
- }
-
-// ---------------------------------------------------------------------------
-// CBTUIMainView::TabbedViews()
-// Returns pointer to tabbed views of application.
-// ---------------------------------------------------------------------------
-//
-CArrayPtrFlat<MGSTabbedView>* CBTUIMainView::TabbedViews()
- {
- return iViewArray;
- }
-
-
-// ---------------------------------------------------------------------------
-// CBTUIMainView::IsLocalNameModified
-// Checks from central repository whether the Bluetooth friendly name
-// has been modified .
-// ---------------------------------------------------------------------------
-//
-TInt CBTUIMainView::IsLocalNameModifiedL( TBool& aStatus )
- {
- TRACE_FUNC_ENTRY
-
- aStatus = (TBool) EBTLocalNameDefault;
-
- TInt val = 0;
- CRepository* cenRep = NULL;
- TInt err = KErrNone;
- TRAP_IGNORE(cenRep = CRepository::NewL( KCRUidBTEngPrivateSettings ));
-
- err = cenRep->Get( KBTLocalNameChanged, val );
-
- if ( val != 0 )
- {
- aStatus = (TBool) EBTLocalNameSet;
- }
- delete cenRep;
- cenRep = NULL;
- TRACE_FUNC_EXIT
- return err;
- }
-