diff -r 000000000000 -r f63038272f30 bluetoothengine/btui/Ecom/src/BTUIBlockedDevicesView.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/bluetoothengine/btui/Ecom/src/BTUIBlockedDevicesView.cpp Mon Jan 18 20:28:57 2010 +0200 @@ -0,0 +1,431 @@ +/* +* Copyright (c) 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 view that handles listing and +* unblocking blocked devices view. +* +*/ + +#include // AVKON components +#include +#include +#include // Compiled resource ids +#include // Feature Manager +#include +#include +#include +#include // Series 60 localisation stringloader +#include +#include // Help launcher +#include + +#include "BTUIBlockedDevicesView.h" +#include "BTUIDeviceContainer.h" +#include "debug.h" +#include "btui.h" + +#include +#include // Tab icon for General Setting +#include "BTUIMainView.h" // base View. +// --------------------------------------------------------- +// CBTUIBlockedDevicesView::ConstructL +// Symbian 2nd phase constructor can leave. +// --------------------------------------------------------- +// +void CBTUIBlockedDevicesView::ConstructL() + { + TRACE_FUNC_ENTRY + + BaseConstructL(R_BTUI_BLOCK_DEVICES_VIEW); + + TRACE_FUNC_EXIT + } + +// --------------------------------------------------------- +// CBTUIBlockedDevicesView::ConstructL +// Symbian 2nd phase constructor when served as GS plugin. +// --------------------------------------------------------- +// +void CBTUIBlockedDevicesView::ConstructL( CBTUIMainView* aBaseView, CArrayPtrFlat* aTabViewArray ) + { + iBaseView = aBaseView, + iTabHelper = CGSTabHelper::NewL(); + aTabViewArray->AppendL(this); + + BaseConstructL(R_BTUI_BLOCK_DEVICES_VIEW_GS); + + TRACE_INFO(_L("CBtuiGSPlugin* aBaseView, CArrayPtrFlat* aTabViewArray")) + } + +// --------------------------------------------------------- +// CBTUIBlockedDevicesView::NewL +// Two phased constructor +// --------------------------------------------------------- +// +CBTUIBlockedDevicesView* CBTUIBlockedDevicesView::NewL(MBtuiPluginViewActivationObserver* aObserver) + { + //TRACE_FUNC_ENTRY + CBTUIBlockedDevicesView* self = new (ELeave) CBTUIBlockedDevicesView(aObserver); + CleanupStack::PushL(self); + self->iConstructAsGsPlugin = EFalse; + self->ConstructL(); + CleanupStack::Pop(self); + + return self; + } + +// --------------------------------------------------------- +// CBTUIBlockedDevicesView::NewL +// Two phased constructor +// --------------------------------------------------------- +// +CBTUIBlockedDevicesView* CBTUIBlockedDevicesView::NewLC(CBTUIMainView* aBaseView, CArrayPtrFlat* aTabViewArray) + { + CBTUIBlockedDevicesView* self = new (ELeave) CBTUIBlockedDevicesView(); + CleanupStack::PushL( self ); + + self->iConstructAsGsPlugin = ETrue; + self->ConstructL( aBaseView, aTabViewArray ); + + return self; + } + +// --------------------------------------------------------- +// CBTUIBlockedDevicesView::CBTUIBlockedDevicesView +// --------------------------------------------------------- + +CBTUIBlockedDevicesView::CBTUIBlockedDevicesView(MBtuiPluginViewActivationObserver* aObserver ) + :iActivationObserver(aObserver) + { + } + +// --------------------------------------------------------- +// Destructor +// --------------------------------------------------------- +// +CBTUIBlockedDevicesView::~CBTUIBlockedDevicesView() + { + TRACE_FUNC_ENTRY + if (iContainer) + { + AppUi()->RemoveFromViewStack(*this, iContainer); + } + + delete iContainer; + delete iModel; + + if(iConstructAsGsPlugin) + delete iTabHelper; + + TRACE_FUNC_EXIT + } + +// --------------------------------------------------------- +// From CAknView +// CBTUIBlockedDevicesView::Id +// --------------------------------------------------------- +// +TUid CBTUIBlockedDevicesView::Id() const + { + TRACE_FUNC_ENTRY + return KBtuiPluginUidBlockedDevicesView;//KBTBlockDevicesViewId; + } + +// --------------------------------------------------------- +// From CAknView +// CBTUIBlockedDevicesView::HandleCommandL +// --------------------------------------------------------- +// +void CBTUIBlockedDevicesView::HandleCommandL(TInt aCommand) + { + TRACE_FUNC_ENTRY + TInt bItemIndex; + switch (aCommand) + { + case EAknSoftkeyBack: + // do not exit if devicechange is in progress. + if(iModel->DeviceChangeInProgress() ) + return; + AppUi()->ActivateLocalViewL(iBaseView->GetParentView().iViewUid ); + break; + + case EAknSoftkeyExit: + // do not exit if devicechange is in progress. + if(iModel->DeviceChangeInProgress() ) + return; + AppUi()->ProcessCommandL(EEikCmdExit); + break; + + case EBTUICmdDelete: + case EBTUICmdUnblock: + { + + bItemIndex = iContainer->CurrentItemIndex(); + if(bItemIndex < 0) + break; + + TBTDevice device; + device.iIndex = bItemIndex; + iModel->GetDevice(device); + + CAknQueryDialog* dialog = CAknQueryDialog::NewL(CAknQueryDialog::EConfirmationTone); + HBufC* s = StringLoader::LoadLC(R_BT_WARN_ERASE_BLOCKED,device.iName); + TInt keypress = dialog->ExecuteLD(R_BT_GENERIC_QUERY, *s); + + CleanupStack::PopAndDestroy(s); + + if(keypress) // User has accepted the dialog + { + device.iOperation = EOpUnblock; + iModel->ChangeDevice(device); + } + + break; + + } + case EBTUICmdDeleteAll: + case EBTUICmdUnblockAll: + { + CAknQueryDialog* dialog = CAknQueryDialog::NewL(CAknQueryDialog::EConfirmationTone); + HBufC* s=iCoeEnv->AllocReadResourceLC(R_BT_WARN_ERASE_ALL_BLOCKED); + TInt keypress=dialog->ExecuteLD(R_BT_GENERIC_QUERY, *s); + CleanupStack::PopAndDestroy(s); + + if(keypress) + { + iModel->ChangeAllDevices(EOpUnblock); + } + + break; + } + + case EAknCmdHelp: + { + #ifdef __SERIES60_HELP + HlpLauncher::LaunchHelpApplicationL(iEikonEnv->WsSession(), AppUi()->AppHelpContextL()); + #endif + break; + } + + default: + { + AppUi()->HandleCommandL(aCommand); + break; + } + } + TRACE_FUNC_EXIT + } + + +// --------------------------------------------------------- +// From CAknView +// CBTUIBlockedDevicesView::DoActivateL +// --------------------------------------------------------- +// +void CBTUIBlockedDevicesView::DoActivateL(const TVwsViewId& /*aPrevViewId*/, + TUid /*aCustomMessageId*/, + const TDesC8& /*aCustomMessage*/) + { + TRACE_FUNC_ENTRY + // Setup title + // + iModel = CBTDevModel::NewL(EGroupBlocked, this); + iContainer = CBTUiDeviceContainer::NewL(ClientRect(), this, EGroupBlocked, this); + + HBufC* btBlockDevices = iCoeEnv->AllocReadResourceLC(R_BT_TITLE_BLOCKED_DEV); + CEikStatusPane* statusPane = StatusPane(); + CAknTitlePane* titlePane; + titlePane = (CAknTitlePane*) statusPane->ControlL(TUid::Uid(EEikStatusPaneUidTitle)); + titlePane->SetTextL(*btBlockDevices); + CleanupStack::PopAndDestroy(btBlockDevices); + AppUi()->AddToStackL(*this, iContainer); + DimMskL(ETrue ); + // the MSK will be undimmed, if there are blocked devices when + // the deviceList will be refreshed + + if( iBaseView && iConstructAsGsPlugin) + { + iTabHelper->CreateTabGroupL( Id(), + static_cast*> + (iBaseView->TabbedViews()) ); + } + + // notify observer + if( iActivationObserver && iConstructAsGsPlugin == EFalse) + { + iActivationObserver->PluginViewActivated(EBlockedDevicesViewId); + } + + TRACE_FUNC_EXIT + } + +// --------------------------------------------------------- +// From CAknView +// CBTUIBlockedDevicesView::DoDeactivate +// --------------------------------------------------------- +// +void CBTUIBlockedDevicesView::DoDeactivate() + { + TRACE_FUNC_ENTRY + if (iContainer) + { + AppUi()->RemoveFromStack(iContainer); + delete iContainer; + iContainer = NULL; + } + + delete iModel; + iModel=NULL; + if(iConstructAsGsPlugin) + iTabHelper->RemoveTabGroup(); + + TRACE_FUNC_EXIT + } +// --------------------------------------------------------- +// CBTUIBlockedDevicesView::DimMskL +// This will dim/Undim MSK. +// However the command is sent when the key is pressed +// regardless wether the MSK command is visible and +// the view must be able to receive it anyway. +// --------------------------------------------------------- +void CBTUIBlockedDevicesView::DimMskL(TBool aDimmed) + { + TRACE_FUNC_ENTRY + if(aDimmed) + { + Cba()->SetCommandL (EBTUICmdUnblock,KNullDesC); + } + else + { + if(iConstructAsGsPlugin) + { + Cba()->SetCommandSetL(R_BTUI_SOFTKEYS_OPTIONS_BACK__UNBLOCK); + } + else + { + Cba()->SetCommandSetL(R_BTUI_SOFTKEYS_OPTIONS_EXIT__UNBLOCK); + } + } + + Cba()->DrawDeferred(); + + // NOTE: these will only hide the MSK label. + // The command is still being sent if button is pressed. + // HandleCommanL will take care + // of the situation that there may be no devices to unblock + TRACE_FUNC_EXIT + } + +// --------------------------------------------------------- +// From CAknView +// CBTUIBlockedDevicesView::DynInitMenuPaneL +// Shows selected item's context sensitive options menu. +// --------------------------------------------------------- +// +void CBTUIBlockedDevicesView::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 ) ); + } + + // do not show "unblock" and "unblock all" commands + // if there is nothing to unblock + if (aResId == R_BTUI_BLOCK_DEVICES_VIEW_MENU) + { + if( iContainer->CountItems() == 0) + { + aMenu->SetItemDimmed(EBTUICmdUnblock, ETrue); + aMenu->SetItemDimmed(EBTUICmdUnblockAll, ETrue); + } + else + { + aMenu->SetItemDimmed(EBTUICmdUnblockAll, EFalse); + aMenu->SetItemDimmed(EBTUICmdUnblock, ETrue); + } + } + TRACE_FUNC_EXIT + } + +// --------------------------------------------------------- +// From MBTDeviceObserver +// CBTUIBlockedDevicesView::NotifyChangeDeviceComplete +// --------------------------------------------------------- +// +void CBTUIBlockedDevicesView::NotifyChangeDeviceComplete(const TInt aErr, + const TBTDevice&, const RBTDevNameArray* ) + { + TRACE_FUNC_ENTRY + // we do not show any note, when blocked devices are unblocked, + // and that is the only command available. + + if(aErr!= KErrNone) + { + TRAP_IGNORE(TBTUIViewsCommonUtils::ShowGeneralErrorNoteL();); + } + TRACE_FUNC_EXIT + } + + +// ----------------------------------------------- +// From MBTDeviceObserver +// CBTUIBlockedDevicesView::RefreshDeviceList +// ----------------------------------------------- +void CBTUIBlockedDevicesView::RefreshDeviceList(const RDeviceArray* aDevices, + TInt aSelectedItemIndex) + { + TRACE_FUNC_ENTRY + + TRAPD(err, + if(iContainer) + { + iContainer->RefreshDeviceListL(aDevices,aSelectedItemIndex ); + } + // dim the MSK if there are no devices to unblock + DimMskL(aDevices->Count()==0); + + ); + if(err!= KErrNone) + { + TRAP_IGNORE( TBTUIViewsCommonUtils::ShowGeneralErrorNoteL(); ); + } + + TRACE_FUNC_EXIT + } + +// --------------------------------------------------------------------------- +// CBTUIBlockedDevicesView::CreateTabIconL() +// Creates icon for tab. +// --------------------------------------------------------------------------- +// +CGulIcon* CBTUIBlockedDevicesView::CreateTabIconL() + { + TFileName bmpFilename; + bmpFilename += KBitmapFileDrive; + bmpFilename += KDC_APP_BITMAP_DIR; + bmpFilename += KBtuiBmpFileName; + + CGulIcon* icon = AknsUtils::CreateGulIconL( + AknsUtils::SkinInstance(), + KAknsIIDQgnPropBtBlockedTab3, + bmpFilename, + EMbmBtuiQgn_prop_bt_blocked_tab3, + EMbmBtuiQgn_prop_bt_blocked_tab3_mask ); + + return icon; + } +