--- a/ImagePrint/ImagePrintUI/imgpprintdll/src/cuiprotocolcontroller.cpp Fri Jun 11 16:24:10 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,558 +0,0 @@
-/*
-* Copyright (c) 2004-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:
-*
-*/
-
-
-#include <StringLoader.h>
-#include <AknQueryDialog.h>
-#include <imageprintapp.rsg>
-
-#include "cuiprotocolcontroller.h"
-#include "muimodeobserver.h"
-#include "ciffactory.h"
-#include "midleprinteventregisterif.h"
-#include "mdiscovery.h"
-#include "mprintjob.h"
-#include "mprintsettings.h"
-#include "mdiscoveryobserver.h"
-#include "tprinter.h"
-#include "imgpprintapputil.h"
-#include "ccustomnotedialog.h"
-#include "clog.h"
-
-const TInt KMMCID( 1 );
-
-// CONSTRUCTOR
-EXPORT_C CUIProtocolController* CUIProtocolController::NewL(
- MProtocolObserver* aProtocolObserver,
- CIFFactory& aIFFactory )
- {
- CUIProtocolController* self = NewLC( aProtocolObserver,
- aIFFactory );
- CleanupStack::Pop( self );
- return self;
- }
-
-CUIProtocolController* CUIProtocolController::NewLC(
- MProtocolObserver* aProtocolObserver,
- CIFFactory& aIFFactory )
- {
- CUIProtocolController* self = new ( ELeave ) CUIProtocolController(
- aProtocolObserver,
- aIFFactory );
- CleanupStack::PushL( self );
- self->ConstructL( aIFFactory );
- return self;
- }
-
-// Default constructor
-CUIProtocolController::CUIProtocolController(
- MProtocolObserver* aProtocolObserver,
- CIFFactory& aIFFactory ) :
- iProtocolObserver(aProtocolObserver)
- {
- iIFFactory = &aIFFactory;
- iClassState = ENormalState;
- iDiscoveryDlgManager = NULL;
- iStartUsb = EFalse;
- iWasUsbDisconnected = EFalse;
- }
-
-// 2nd phase constructor
-void CUIProtocolController::ConstructL( CIFFactory& aIFFactory )
- {
- iIdleEventRegister = aIFFactory.IdlePrintEventRegisterIF();
-
- // Register to receive idle event from engine
- iIdleEventRegister->RegisterObserver( this );
-
- iSettings = aIFFactory.SettingsIF();
- iDiscovery = aIFFactory.DiscoveryIF();
- }
-
-// Destructor
-CUIProtocolController::~CUIProtocolController()
- {
- if(iUSBConnectionWaitNote)
- {
- delete iUSBConnectionWaitNote;
- iUSBConnectionWaitNote = NULL;
- }
-
- // Unregister from engine
- if ( iIdleEventRegister )
- {
- iIdleEventRegister->UnRegisterObserver( this );
- }
- }
-
-
-EXPORT_C TBool CUIProtocolController::SearchDefaultPrinterL()
- {
- LOG("CUIProtocolController::SearchDefaultPrinterL START");
- TBool retValue = EFalse;
- TInt defaultProtocol = -1;
- TBool usbOnlyMode = EFalse;
-
- // Get supported protocols from the engine
- TInt supportedProtocols = iIFFactory->DiscoveryIF()->SupportedProtocols();
-
- // If PictBridge is only supported protocol, set it as default
- if( !(supportedProtocols & KImagePrint_PrinterProtocol_BPP) &&
- !(supportedProtocols & KImagePrint_PrinterProtocol_DPOF) &&
- !(supportedProtocols & KImagePrint_PrinterProtocol_UPnP) &&
- (supportedProtocols & KImagePrint_PrinterProtocol_PictBridge) )
- {
- LOG("CUIProtocolController::SearchDefaultPrinterL: USB only mode detected");
- defaultProtocol = MDiscoveryObserver::EUSB;
- usbOnlyMode = ETrue;
- }
- // If usb is connected and PictBridge selected it will be used
- else if( iDiscovery->IsPictBridgeMode() > 0 )
- {
- defaultProtocol = MDiscoveryObserver::EUSB;
- }
- else // check default printer.
- {
- LOG("iSettings->GetDefaultPrinterProtocol()");
- defaultProtocol = iSettings->GetDefaultPrinterProtocol();
- LOG1("defaultProtocol = %d",defaultProtocol);
- }
-
- retValue = SetDefaultPrinterL( defaultProtocol );
-
- // If there is no default printer or default printer not available
- // start settings view with no printer information (but not in usb only mode)
- if( retValue == EFalse && usbOnlyMode == EFalse )
- {
- retValue = ETrue;
- iSettings->SetCurrentPrinterProtocol( MDiscoveryObserver::ENOPRINTER );
- iSettings->SetDefaultPrinterProtocol( MDiscoveryObserver::ENOPRINTER );
- HBufC* noPrinterText = StringLoader::LoadLC( R_PRINT_NO_PRINTER );
- iSettings->SetCurrentPrinterName( *noPrinterText );
- iSettings->SetDefaultPrinterNameL( *noPrinterText );
- CleanupStack::PopAndDestroy ( noPrinterText ); //noPrinterText
- }
-
- if( iStartUsb )
- {
- iStartUsb = EFalse;
- defaultProtocol = MDiscoveryObserver::EUSB;
- retValue = SearchUSBPrinterL();
- if( retValue )
- {
- iSettings->SetCurrentPrinterProtocol( MDiscoveryObserver::EUSB );
-
- // In USB case it also must be checked whether default printer is
- // set at this point, and if not, set USB as default. This is because
- // in normal cases usb overrides the default protocol without
- // changing itself to default.
- TInt realDefault = iSettings->GetDefaultPrinterProtocol();
- if ( realDefault == KErrNotFound )
- {
- iSettings->SetDefaultPrinterProtocol( MDiscoveryObserver::EUSB );
- iSettings->SetDefaultPrinterNameL( *iSettings->GetCurrentPrinterName() );
- }
- }
- }
-
- LOG("CUIProtocolController::SearchDefaultPrinterL END");
- return retValue;
- }
-
-TBool CUIProtocolController::SetDefaultPrinterL( TInt aDefaultProtocol )
- {
- TBool retValue = EFalse;
- switch( aDefaultProtocol )
- {
- case MDiscoveryObserver::EUSB:
- {
- retValue = SearchUSBPrinterL();
- if( retValue )
- {
- iSettings->SetCurrentPrinterProtocol( MDiscoveryObserver::EUSB );
- iSettings->SetDefaultPrinterProtocol( MDiscoveryObserver::EUSB );
- iSettings->SetDefaultPrinterNameL( *iSettings->GetCurrentPrinterName() );
- }
- return retValue;
- }
- case MDiscoveryObserver::EBPP:
- {
- retValue = SearchDefaultBTPrinterL();
- if( retValue )
- {
- iSettings->SetCurrentPrinterProtocol( MDiscoveryObserver::EBPP );
- }
- return retValue;
- }
- case MDiscoveryObserver::EOPP:
- {
- retValue = SearchDefaultBTPrinterL();
- if( retValue )
- {
- iSettings->SetCurrentPrinterProtocol( MDiscoveryObserver::EOPP );
- }
- return retValue;
- }
- case MDiscoveryObserver::EMMC:
- {
- retValue = SearchMMCPrinterL();
- if( retValue )
- {
- iSettings->SetCurrentPrinterProtocol( MDiscoveryObserver::EMMC );
- }
- return retValue;
- }
- case MDiscoveryObserver::EWLAN:
- {
- retValue = SearchDefaultUPnPPrinterL();
- if( retValue )
- {
- iSettings->SetCurrentPrinterProtocol( MDiscoveryObserver::EWLAN );
- }
- return retValue;
- }
-
- default:
- {
- return retValue;
- }
- }
- }
-
-// Changes default printer
-EXPORT_C TBool CUIProtocolController::ChangeDefaultPrinterL( TInt aProtocol )
- {
- LOG("CUIProtocolController::ChangeDefaultPrinterL START");
- TBool retValue;
- TInt previousDefaultProtocol = iSettings->GetDefaultPrinterProtocol();
- iSettings->SetDefaultPrinterProtocol( KErrNotFound );
- iClassState = EDiscoveryOngoing;
-
- switch( aProtocol )
- {
- case MDiscoveryObserver::EUSB:
- {
- retValue = SearchUSBPrinterL();
- if( retValue )
- {
- iSettings->SetDefaultPrinterProtocol( MDiscoveryObserver::EUSB );
- iSettings->SetCurrentPrinterProtocol( MDiscoveryObserver::EUSB );
- iSettings->SetDefaultPrinterNameL( *iSettings->GetCurrentPrinterName() );
- }
- break;
- }
-
- case MDiscoveryObserver::EBPP:
- {
- retValue = SearchBTPrinterL();
- if( retValue )
- {
- iSettings->SetDefaultPrinterProtocol( MDiscoveryObserver::EBPP );
- iSettings->SetCurrentPrinterProtocol( MDiscoveryObserver::EBPP );
- }
- break;
- }
-
- case MDiscoveryObserver::EMMC:
- {
- retValue = SearchMMCPrinterL();
- if( retValue )
- {
- iSettings->SetDefaultPrinterProtocol( MDiscoveryObserver::EMMC );
- iSettings->SetCurrentPrinterProtocol( MDiscoveryObserver::EMMC );
- }
- break;
- }
-
- case MDiscoveryObserver::EWLAN:
- {
- retValue = SearchUPnPPrinterL();
- if( retValue )
- {
- iSettings->SetDefaultPrinterProtocol( MDiscoveryObserver::EWLAN );
- iSettings->SetCurrentPrinterProtocol( MDiscoveryObserver::EWLAN );
- }
-
- break;
- }
-
- default:
- {
- // protocol not supported
- retValue = EFalse;
- break;
- }
- }
-
- if ( retValue == EFalse )
- {
- iSettings->SetDefaultPrinterProtocol( previousDefaultProtocol );
- LOG1("CUIProtocolController::ChangeDefaultPrinterL iClassState == %d", iClassState);
- if ( iClassState == EUSBDisconnectedDuringDiscovery )
- {
- iClassState = ENormalState;
- UsbPrinterDisconnected();
- }
- else if( MDiscoveryObserver::EUSB == previousDefaultProtocol && iWasUsbDisconnected )
- {
- LOG("CUIProtocolController::ChangeDefaultPrinterL nothing selected, but usb previously disconnected, discoverying");
- SearchDefaultPrinterL();
- }
- }
- iClassState = ENormalState;
- LOG("CUIProtocolController::ChangeDefaultPrinterL END");
- return retValue;
- }
-
-TBool CUIProtocolController::SearchUSBPrinterL()
- {
- LOG("CUIProtocolController::SearchUSBPrinterL START");
- TBool retValue = EFalse;
-
- // if the cable is not physically connected, show connect usb cable note
- if( !IsUsbCableConnected() )
- {
- ShowConnectUsbCableNoteL();
-
- // Active scheduler is used here to make this method synchronous
- CActiveScheduler::Start();
- }
- // If usb cable is connected and pictbridge mode
- if( iDiscovery->IsPictBridgeMode() > 0 )
- {
- CDiscoveryDlgManager* discoveryDlgManager =
- CDiscoveryDlgManager::NewLC( *iIFFactory );
- retValue = discoveryDlgManager->StartDlgManagerL(
- KImagePrint_PrinterProtocol_PictBridge, ETrue );
- CleanupStack::PopAndDestroy( discoveryDlgManager );
- discoveryDlgManager = NULL;
- }
- LOG("CUIProtocolController::SearchUSBPrinterL END");
- return retValue;
- }
-
-// Takes BT printer in use
-TBool CUIProtocolController::SearchDefaultBTPrinterL()
- {
- LOG("CUIProtocolController::SearchDefaultBTPrinterL START");
- TBool retValue = EFalse;
-
- CDiscoveryDlgManager* discoveryDlgManager =
- CDiscoveryDlgManager::NewLC( *iIFFactory );
- retValue = discoveryDlgManager->StartDlgManagerL( KAllBTProtocols, ETrue );
- CleanupStack::PopAndDestroy( discoveryDlgManager );
- discoveryDlgManager = NULL;
- LOG("CUIProtocolController::SearchDefaultBTPrinterL END");
- return retValue;
- }
-
-// Takes mmc in use
-TBool CUIProtocolController::SearchMMCPrinterL()
- {
- LOG("CUIProtocolController::SearchMMCPrinterL START");
- TBool retValue = EFalse;
-
- TInt err = iDiscovery->ChoosePrinterL( KMMCID );
- if( err == KErrNone)
- {
- LOG("Print job done succesfully with MMC DEFAULT PRINTER");
- // Set current printer name to be mmc
- HBufC* mmcText = StringLoader::LoadLC
- ( R_QTN_PRINT_MEMORY_CARD );
- iSettings->SetCurrentPrinterName( *mmcText );
- // Set vendor to none
- iSettings->SetCurrentPrinterVendor( TPrinter::EVendorNone );
-
- CleanupStack::PopAndDestroy(); //mmmcText
- retValue = ETrue;
- }
- LOG("CUIProtocolController::SearchMMCPrinterL END");
- return retValue;
- }
-
-// Searches WLAN printers
-TBool CUIProtocolController::SearchUPnPPrinterL()
- {
- LOG("CUIProtocolController::SearchUPnPPrinterL START");
- TBool retValue = EFalse;
- CDiscoveryDlgManager* discoveryDlgManager =
- CDiscoveryDlgManager::NewLC( *iIFFactory );
- retValue = discoveryDlgManager->StartDlgManagerL( KImagePrint_PrinterProtocol_UPnP );
- CleanupStack::PopAndDestroy( discoveryDlgManager );
- discoveryDlgManager = NULL;
- LOG("CUIProtocolController::SearchUPnPPrinterL END");
- return retValue;
- }
-
-// Takes WLAN printer in use
-TBool CUIProtocolController::SearchDefaultUPnPPrinterL()
- {
- LOG("CUIProtocolController::SearchDefaultUPnPPrinterL START");
- TBool retValue = EFalse;
-
- CDiscoveryDlgManager* discoveryDlgManager =
- CDiscoveryDlgManager::NewLC( *iIFFactory );
- retValue = discoveryDlgManager->StartDlgManagerL( KImagePrint_PrinterProtocol_UPnP, ETrue );
- CleanupStack::PopAndDestroy( discoveryDlgManager );
- discoveryDlgManager = NULL;
- LOG("CUIProtocolController::SearchDefaultUPnPPrinterL END");
- return retValue;
- }
-
-TBool CUIProtocolController::SearchBTPrinterL()
- {
- LOG("CUIProtocolController::SearchBTPrinterL START");
- TBool retValue = EFalse;
- CDiscoveryDlgManager* discoveryDlgManager =
- CDiscoveryDlgManager::NewLC( *iIFFactory );
- retValue = discoveryDlgManager->StartDlgManagerL( KAllBTProtocols );
- CleanupStack::PopAndDestroy( discoveryDlgManager );
- discoveryDlgManager = NULL;
- LOG("CUIProtocolController::SearchBTPrinterL END");
- return retValue;
- }
-
-// Searches all supported protocols
-TBool CUIProtocolController::FullSearchL()
- {
- LOG("CUIProtocolController::FullSearchL START");
- TBool retValue = EFalse;
- iDiscoveryDlgManager = CDiscoveryDlgManager::NewL( *iIFFactory );
- LOG("CUIProtocolController::FullSearchL before Fullsearch");
- retValue = iDiscoveryDlgManager->StartDlgManagerL();
- LOG("CUIProtocolController::FullSearchL after FullSearch");
- delete iDiscoveryDlgManager;
- iDiscoveryDlgManager = NULL;
- LOG("CUIProtocolController::FullSearchL END");
- return retValue;
- }
-
-// Is the usb cable connected to phone or not
-TBool CUIProtocolController::IsUsbCableConnected()
- {
- LOG("CUIProtocolController::IsUsbCableConnected START");
- TInt err = iUsbManager.Connect();
- if ( err == KErrNone )
- {
- iUsbManager.GetDeviceState( iDeviceState );
- iUsbManager.Close();
- }
- else
- {
- LOG("CUIProtocolController::IsUsbCableConnected iUsbManager.Connect() FAIL");
- }
- LOG("CUIProtocolController::IsUsbCableConnected END");
- return ( iDeviceState != EUsbDeviceStateUndefined );
- }
-
-void CUIProtocolController::ShowConnectUsbCableNoteL()
- {
- LOG("CUIProtocolController::ShowConnectUsbCableNote START");
- iUSBConnectionWaitNote = new (ELeave) CCustomNoteDialog(
- reinterpret_cast< CEikDialog** > (&iUSBConnectionWaitNote) );
- iUSBConnectionWaitNote->SetCallback( this );
- iUSBConnectionWaitNote->ExecuteLD(R_CONNECT_USB);
- LOG("CUIProtocolController::ShowConnectUsbCableNote END");
- }
-
-// MProgressDialogCallback method
-void CUIProtocolController::DialogDismissedL(TInt /*aButtonId*/ )
- {
- LOG("CUIProtocolController::DialogDismissedL START");
- CActiveScheduler::Stop();
- LOG("CUIProtocolController::DialogDismissedL END");
- }
-
-//Idle observer method
-void CUIProtocolController::UsbPrinterDisconnected()
- {
- LOG("CUIProtocolController::UsbPrinterDisconnected START");
- if( iSettings->GetCurrentPrinterProtocol() == MDiscoveryObserver::EUSB )
- {
- LOG1("CUIProtocolController::UsbPrinterConnected iClassState is %d", iClassState);
- if ( iClassState == EDiscoveryOngoing || iClassState == EUSBDisconnectedDuringDiscovery )
- {
- iClassState = EUSBDisconnectedDuringDiscovery;
- iWasUsbDisconnected = ETrue;
- LOG("CUIProtocolController::UsbPrinterConnected iClassState is now EUSBDisconnectedDuringDiscovery");
- }
- else
- {
- iProtocolObserver->UsbCableDisconnected();
- }
- }
- LOG("CUIProtocolController::UsbPrinterDisconnected END");
- }
-
-//Idle observer method
-void CUIProtocolController::UsbPrinterConnected()
- {
- LOG("CUIProtocolController::UsbPrinterConnected START");
- if( EUSBDisconnectedDuringDiscovery == iClassState )
- {
- iClassState = EDiscoveryOngoing;
- LOG("CUIProtocolController::UsbPrinterConnected iClassState is now EDiscoveryOngoing");
- }
-
- if( iUSBConnectionWaitNote ) // Remove wait note and start discovery
- {
- delete iUSBConnectionWaitNote;
- iUSBConnectionWaitNote = NULL;
- }
- else
- {
- if(iDiscoveryDlgManager)
- {
- iStartUsb = ETrue;
- iDiscoveryDlgManager->CancelDiscovery();
- }
- }
- LOG("CUIProtocolController::UsbPrinterConnected END");
- }
-
-//Idle observer method
-void CUIProtocolController::UsbStateChanged( TImgPrintUSBState aState, TInt aError )
- {
- LOG("CUIProtocolController::UsbStateChanged START");
- if ( aState == ENOUSBEvent )
- {
- TRAP_IGNORE( IMGPPrintAppUtil::ShowErrorMsgL( aError ) );
- }
- LOG("CUIProtocolController::UsbStateChanged END");
- }
-
-//Idle observer method
-void CUIProtocolController::ReadyToContinue()
- {
- LOG("CUIProtocolController::ReadyToContinue START");
- LOG("CUIProtocolController::ReadyToContinue END");
- }
-
-void CUIProtocolController::AsynchronousServerLeave( TInt /*aError*/ )
- {
- LOG("CUIProtocolController::AsynchronousServerLeave START");
-
- // Cancel discovery in case of server leave. No can do if Cancel leaves.
- LOG("CUIProtocolController::AsynchronousServerLeave CancelDeviceDiscoveryL()");
- TRAP_IGNORE( iIFFactory->DiscoveryIF()->CancelDeviceDiscoveryL() );
-
- // Cancel printing in case of server leave. No can do if Cancel leaves.
- TRAP_IGNORE( iIFFactory->PrintJobIF()->CancelL() );
- LOG("CUIProtocolController::AsynchronousServerLeave END");
- }
-
-// End of File