bluetoothengine/btui/Ecom/src/BTUIBlockedDevicesView.cpp
branchRCL_3
changeset 56 9386f31cc85b
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bluetoothengine/btui/Ecom/src/BTUIBlockedDevicesView.cpp	Wed Sep 01 12:20:04 2010 +0100
@@ -0,0 +1,439 @@
+/*
+* 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.hrh>                    // AVKON components
+#include <akntitle.h>
+#include <aknViewAppUi.h>
+#include <BtuiViewResources.rsg>                     // Compiled resource ids
+#include <featmgr.h>                    // Feature Manager
+#include <AknGlobalNote.h>
+#include <aknmessagequerydialog.h> 
+#include <aknnotewrappers.h>
+#include <StringLoader.h>   // Series 60 localisation stringloader
+#include <aknnavi.h>
+#include <hlplch.h>         // Help launcher
+#include <SecondaryDisplay/BtuiSecondaryDisplayAPI.h>
+
+#include "BTUIBlockedDevicesView.h"
+#include "BTUIDeviceContainer.h"
+#include "debug.h"
+#include "btui.h"
+
+#include <gstabhelper.h>
+#include <btui.mbg>						// Tab icon for General Setting
+#include <bluetoothuiutil.h>
+#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<MGSTabbedView>* aTabViewArray )
+    {
+	iBaseView = aBaseView,
+    iTabHelper = CGSTabHelper::NewL();
+    aTabViewArray->AppendL(this); 
+    
+    BaseConstructL(R_BTUI_BLOCK_DEVICES_VIEW_GS);  
+    	
+    TRACE_INFO(_L("CBtuiGSPlugin* aBaseView, CArrayPtrFlat<MGSTabbedView>* 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<MGSTabbedView>* 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);
+        	
+        	RBuf s;
+        	CleanupClosePushL( s );
+        	BluetoothUiUtil::LoadResourceAndSubstringL(
+        	        s, R_BT_WARN_ERASE_BLOCKED, device.iName, 0);
+        	
+        	CAknQueryDialog* dialog = CAknQueryDialog::NewL(CAknQueryDialog::EConfirmationTone);
+			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<CArrayPtrFlat<MGSTabbedView>*>
+            (iBaseView->TabbedViews()) ); 
+        }
+        
+
+    MenuBar()->SetContextMenuTitleResourceId(
+            R_BTUI_MENUBAR_BLOCK_DEVICES_VIEW); 
+        
+	// 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 "unblock all" commands 
+    // if there is nothing to unblock
+	if (aResId == R_BTUI_BLOCK_DEVICES_VIEW_MENU)
+	    {
+        if( iContainer->CountItems() == 0) 
+            {        
+            aMenu->SetItemDimmed(EBTUICmdUnblockAll, ETrue);            
+            }
+        else
+            {
+            aMenu->SetItemDimmed(EBTUICmdUnblockAll, EFalse);
+            }
+	    }
+	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;
+    }   
+