coreapplicationuis/SysAp/Src/SysApConfirmationQuery.cpp
changeset 0 2e3d3ce01487
child 29 6a787171e1de
child 33 332e7bf3b42f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/coreapplicationuis/SysAp/Src/SysApConfirmationQuery.cpp	Tue Feb 02 10:12:00 2010 +0200
@@ -0,0 +1,382 @@
+/*
+* 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:  CSysApConfirmationQuery implementation.
+*
+*/
+
+
+// INCLUDES
+
+#include <avkon.hrh>
+#include <avkon.rsg>
+#include "SysAp.hrh"
+#include "SysApConfirmationQuery.h"
+#include "SysApAppUi.h"
+#include <StringLoader.h>
+#include <avkon.hrh>
+#include <avkon.rsg>
+#include <SysAp.rsg>
+#include <SecondaryDisplay/SecondaryDisplaySysApAPI.h>
+#include <aknSDData.h>
+
+// Constants
+_LIT( KEmptyString, "" );
+
+
+
+// ============================ MEMBER FUNCTIONS ==============================
+
+// ----------------------------------------------------------------------------
+// CSysApConfirmationQuery::NewL() 
+// ----------------------------------------------------------------------------
+CSysApConfirmationQuery* CSysApConfirmationQuery::NewL( CSysApAppUi& aSysApAppUi )
+    {
+    CSysApConfirmationQuery* self = new(ELeave) CSysApConfirmationQuery( aSysApAppUi );
+    CleanupStack::PushL(self);
+    self->ConstructL();
+    CleanupStack::Pop();
+    return self;
+    }
+
+// ----------------------------------------------------------------------------
+// CSysApConfirmationQuery::ConstructL() 
+// ----------------------------------------------------------------------------
+void CSysApConfirmationQuery::ConstructL()
+    {
+    CActiveScheduler::Add(this);
+    iQuery = CAknGlobalConfirmationQuery::NewL();           
+    iQueryId = ESysApNoQuery;
+    }
+
+// ----------------------------------------------------------------------------
+// CSysApConfirmationQuery::CSysApConfirmationQuery( CSysApAppUi& aSysApAppUi )
+// ----------------------------------------------------------------------------
+
+CSysApConfirmationQuery::CSysApConfirmationQuery( CSysApAppUi& aSysApAppUi ) 
+  : CActive( EPriorityStandard ), iSysApAppUi( aSysApAppUi )
+    {
+    }
+
+// ----------------------------------------------------------------------------
+// CSysApConfirmationQuery::~CSysApConfirmationQuery() 
+// ----------------------------------------------------------------------------
+
+CSysApConfirmationQuery::~CSysApConfirmationQuery() 
+    {
+    Cancel();
+    delete iQuery;
+    iQuery = NULL;
+    }
+
+
+// ----------------------------------------------------------------------------
+// CSysApConfirmationQuery::DoCancel() 
+// ----------------------------------------------------------------------------
+
+void CSysApConfirmationQuery::DoCancel() 
+    {
+    TRACES( RDebug::Print( _L("CSysApConfirmationQuery::DoCancel()" ) ) );
+    iQuery->CancelConfirmationQuery();
+    }
+
+// ----------------------------------------------------------------------------
+// CSysApConfirmationQuery::ShowQueryL()
+// ----------------------------------------------------------------------------
+
+void CSysApConfirmationQuery::ShowQueryL( const TSysApConfirmationQueryIds aQueryId, CCoeEnv* aLoaderEnv )
+    {
+    ShowQueryL( aQueryId, KNullDesC, aLoaderEnv );
+    }
+
+// ----------------------------------------------------------------------------
+// CSysApConfirmationQuery::ShowQueryL()
+// ----------------------------------------------------------------------------
+
+#ifdef RD_MULTIPLE_DRIVE
+void CSysApConfirmationQuery::ShowQueryL( const TSysApConfirmationQueryIds aQueryId, const TDesC& aValue, CCoeEnv* aLoaderEnv )
+#else // RD_MULTIPLE_DRIVE
+void CSysApConfirmationQuery::ShowQueryL( const TSysApConfirmationQueryIds aQueryId,  const TDesC& /*aValue*/, CCoeEnv* aLoaderEnv )
+#endif // RD_MULTIPLE_DRIVE
+    {
+    TRACES( RDebug::Print( _L("CSysApConfirmationQuery::ShowQueryL( %d )"), aQueryId ) );
+    HBufC* queryStringBuf = NULL;
+    HBufC* deviceNameBuf = NULL;
+    CAknQueryDialog::TTone tone = CAknQueryDialog::ENoTone;    
+    
+    if( !IsActive() )
+        {
+        iQueryId = aQueryId;
+        TInt secondaryDisplayCmdId(SecondaryDisplay::ECmdNoNote);
+        TInt keys(0);
+        TInt anim(0);        
+
+        switch ( iQueryId )
+            {
+            case ESysApRestartPhoneQuery:
+                queryStringBuf = StringLoader::LoadLC( R_QTN_RESTART_QUERY, aLoaderEnv );
+                keys = R_AVKON_SOFTKEYS_OK_EMPTY;
+                anim = R_QGN_NOTE_WARNING_ANIM;
+                secondaryDisplayCmdId = SecondaryDisplay::ECmdShowRestartPhoneQuery;
+                break;
+            case ESysApLeaveOfflineModeQuery:
+                queryStringBuf = StringLoader::LoadLC( R_QTN_LEAVE_OFFLINE_MODE_QUERY, aLoaderEnv );
+                keys = R_AVKON_SOFTKEYS_YES_NO;
+                secondaryDisplayCmdId = SecondaryDisplay::ECmdShowLeaveOfflineModeQuery;
+                break;
+#ifndef RD_MULTIPLE_DRIVE
+            case ESysApRemoveMmcNote:
+                queryStringBuf = StringLoader::LoadLC( R_QTN_MEMC_INFO_EJECT, aLoaderEnv );
+                keys = R_AVKON_SOFTKEYS_OK_EMPTY;
+                anim = R_QGN_NOTE_INFO_ANIM;
+                secondaryDisplayCmdId = SecondaryDisplay::ECmdShowRemoveMmcQuery;
+                break;
+            case ESysApEjectMmcQuery:
+                queryStringBuf = StringLoader::LoadLC( R_QTN_MEMC_CONF_EJECT, aLoaderEnv );
+                keys = R_AVKON_SOFTKEYS_YES_NO;
+                secondaryDisplayCmdId = SecondaryDisplay::ECmdShowEjectMmcQuery;
+                break;
+#else // RD_MULTIPLE_DRIVE
+            case ESysApRemoveMmcNote:
+                queryStringBuf = aValue.AllocLC();
+                keys = R_AVKON_SOFTKEYS_OK_EMPTY;
+                anim = R_QGN_NOTE_INFO_ANIM;
+                secondaryDisplayCmdId = SecondaryDisplay::ECmdShowRemoveMmcQuery;
+                break;
+            case ESysApEjectMmcQuery:
+                queryStringBuf = aValue.AllocLC();
+                keys = R_AVKON_SOFTKEYS_YES_NO;
+                secondaryDisplayCmdId = SecondaryDisplay::ECmdShowEjectMmcQuery;
+                break;
+#endif // RD_MULTIPLE_DRIVE
+            case ESysApBtSapDisconnectQuery:
+                deviceNameBuf = iSysApAppUi.GetBtSapDeviceNameL();
+                if ( deviceNameBuf )
+                    {
+                    CleanupStack::PushL(deviceNameBuf);
+                    queryStringBuf = StringLoader::LoadL( R_QTN_BT_DISCONN_FROM, *deviceNameBuf, aLoaderEnv );
+                    }
+                else
+                    {
+                    queryStringBuf = StringLoader::LoadL( R_QTN_BT_DISCONN_FROM, KEmptyString, aLoaderEnv ); 
+                    }
+                CleanupStack::PushL(queryStringBuf);
+                keys = R_AVKON_SOFTKEYS_YES_NO;
+                secondaryDisplayCmdId = SecondaryDisplay::ECmdShowBtSapDisconnectQuery;
+                break;
+            case ESysApMemoryCardLockedNote:
+                iPendingQuery = ESysApMemoryCardLockedNote;
+                queryStringBuf = StringLoader::LoadLC( R_QTN_MEMC_LOCKED_NOT_SUPPORTED, aLoaderEnv );
+                keys = R_AVKON_SOFTKEYS_OK_EMPTY;
+                anim = R_QGN_NOTE_INFO_ANIM;
+                secondaryDisplayCmdId = SecondaryDisplay::ECmdShowMemoryCardLockedQuery;
+                break;
+            case ESysApUseFmTxInOfflineQuery:
+                 queryStringBuf 
+                     = StringLoader::LoadLC( R_QTN_FMTX_SYSAP_NOTE_ACTIVATE_IN_OFFLINE,
+                                             aLoaderEnv );
+                 keys = R_AVKON_SOFTKEYS_YES_NO;
+                 secondaryDisplayCmdId = SecondaryDisplay::ECmdShowFmTxKeepOnInOfflineQuery;
+                 break;
+            case ESysApBattChargingPowerSavingQuery:
+                queryStringBuf = StringLoader::LoadLC( R_QTN_BATTERY_CHARGING_POWER_SAVING_QUERY, aLoaderEnv );
+                keys = R_AVKON_SOFTKEYS_YES_NO;
+                secondaryDisplayCmdId = SecondaryDisplay::ECmdShowChargingDeactivatePowerSavingQuery;
+                tone = static_cast<CAknQueryDialog::TTone>( EAvkonSIDChargingBatteryTone );                
+                break;
+            
+            case ESysApBattLowPowerSavingQuery:
+                queryStringBuf = StringLoader::LoadLC( R_QTN_BATTERY_CONF_QUERY, aLoaderEnv );
+                keys = R_AVKON_SOFTKEYS_YES_NO;
+                secondaryDisplayCmdId = SecondaryDisplay::ECmdShowBattLowActivatePowerSavingQuery;
+                break;
+            
+            default:
+                break;
+            }
+
+        if ( iSysApAppUi.CoverDisplaySupported() && secondaryDisplayCmdId != SecondaryDisplay::ECmdNoNote )
+            {
+            TRACES( RDebug::Print( _L("CSysApConfirmationQuery::ShowQueryL - Notifying secondary display") ) );
+            CAknSDData* sd = NULL;
+            if ( secondaryDisplayCmdId == SecondaryDisplay::ECmdShowBtSapDisconnectQuery )
+                {
+                SecondaryDisplay::TDeviceName sdDeviceName;
+                sdDeviceName.Append(deviceNameBuf->Left(SecondaryDisplay::KMaxDeviceNameLen));
+                SecondaryDisplay::TBtSapDisconnectQueryPckg pckg(sdDeviceName);
+                sd = CAknSDData::NewL(SecondaryDisplay::KCatSysAp, SecondaryDisplay::ECmdShowBtSapDisconnectQuery, pckg);
+                }
+            else
+                {
+                sd = CAknSDData::NewL(SecondaryDisplay::KCatSysAp, secondaryDisplayCmdId, KNullDesC8);
+                }
+            iQuery->SetSecondaryDisplayData(sd); // ownership to notifier client
+            }
+
+        if ( keys && queryStringBuf )
+            {
+            if ( anim )
+                {
+                iQuery->ShowConfirmationQueryL( iStatus, 
+                                                queryStringBuf->Des(), 
+                                                keys,
+                                                anim,
+                                                KNullDesC,
+                                                0,
+                                                0,
+                                                tone );
+                }
+            else
+                {
+                iQuery->ShowConfirmationQueryL( iStatus, 
+                                                queryStringBuf->Des(), 
+                                                keys,
+                                                0,
+                                                KNullDesC,
+                                                0,
+                                                0,
+                                                tone );
+                }
+            }
+
+        SetActive();
+        }    
+     else
+        {
+        // If another query is wanted when ESysApMemoryCardLockedNote is active, override it (Continues in RunL which handles cancel).
+        if ( iQueryId == ESysApMemoryCardLockedNote && aQueryId != ESysApMemoryCardLockedNote )
+            {
+            iPendingQuery = aQueryId;
+            iQuery->CancelConfirmationQuery();
+            }
+        }
+
+    if ( queryStringBuf )
+        {
+        CleanupStack::PopAndDestroy( queryStringBuf ); // queryStringbuf
+        }
+
+    if ( deviceNameBuf )
+        {
+        CleanupStack::PopAndDestroy( deviceNameBuf ); // deviceNameBuf
+        }
+
+    }       
+
+// ----------------------------------------------------------------------------
+// CSysApConfirmationQuery::RunL() 
+// ----------------------------------------------------------------------------
+
+void CSysApConfirmationQuery::RunL() 
+    {
+    TRACES( RDebug::Print( _L( "CSysApConfirmationQuery::RunL: iQueryId = %d, iStatus = %d" ), iQueryId, iStatus.Int() ) );
+    switch ( iQueryId ) 
+        {
+        case ESysApRestartPhoneQuery: 
+            {    
+            TRACES( RDebug::Print( _L( "CSysApConfirmationQuery::RunL: calling CSysApAppUi::DoShutdownL( ETrue, EDataRestoreReset )" ) ) );
+            iSysApAppUi.DoShutdownL( ETrue, RStarterSession::EDataRestoreReset );
+            }
+            break;
+        case ESysApLeaveOfflineModeQuery:                  
+            if ( iStatus.Int() == EAknSoftkeyYes )
+                {
+                TRACES( RDebug::Print( _L( "CSysApConfirmationQuery::RunL: calling CSysApAppUi::ActivateOnlineProfileL()" ) ) );
+                iSysApAppUi.ActivateOnlineProfileL();
+                }
+            break;
+        case ESysApRemoveMmcNote:
+            TRACES( RDebug::Print( _L( "CSysApConfirmationQuery::RunL: calling CSysApAppUi::MMCDismountedDialogConfirmed()" ) ) );
+            iSysApAppUi.MMCDismountedDialogConfirmed();
+            break;
+        case ESysApEjectMmcQuery:
+            if ( iStatus.Int() == EAknSoftkeyYes || iStatus.Int() == EEikBidOk )
+                {
+                TRACES( RDebug::Print( _L( "CSysApConfirmationQuery::RunL: calling CSysApAppUi::EjectMMCL()" ) ) );
+                iSysApAppUi.EjectMMCL();
+                }
+            else
+                {
+                iSysApAppUi.EjectMMCCanceled();
+                }
+            break;
+        case ESysApBtSapDisconnectQuery:
+            if ( iStatus.Int() == EAknSoftkeyYes )
+                {
+                TRACES( RDebug::Print( _L( "CSysApConfirmationQuery::RunL: calling CSysApAppUi::DisconnectBtSap()" ) ) );
+                iSysApAppUi.DisconnectBtSap();
+                }
+            break;
+        case ESysApMemoryCardLockedNote:
+            // In case of MMC locked note we are only interested about error, as it means there is overriding query
+            if ( iStatus.Int() < 0 && iPendingQuery != ESysApMemoryCardLockedNote )
+                {
+                TRACES( RDebug::Print( _L( "CSysApConfirmationQuery::RunL: Canceled ESysApMemoryCardLockedNote because more important query" ) ) );
+                ShowQueryL( iPendingQuery, CCoeEnv::Static() );
+                }
+            break;
+         case ESysApUseFmTxInOfflineQuery:
+             if ( iStatus.Int() == EAknSoftkeyNo )
+                 {
+                 TRACES( RDebug::Print( _L( "CSysApConfirmationQuery::RunL: calling CSysApAppUi::ChangeFmTxStateL( EFalse )" ) ) );
+                 iSysApAppUi.ChangeFmTxStateL( EFalse ); // disable FM TX
+                 }
+             break;
+         case ESysApBattChargingPowerSavingQuery:
+            iSysApAppUi.HandleDeactivatePsmQueryResponse( iStatus.Int() == EAknSoftkeyYes );
+            break;
+            
+         case ESysApBattLowPowerSavingQuery:
+            iSysApAppUi.HandleActivatePsmQueryResponse( iStatus.Int() == EAknSoftkeyYes );
+            break;           
+         
+         default:
+            TRACES( RDebug::Print( _L( "CSysApConfirmationQuery::RunL: default" ) ) );
+            break;
+        }
+    }
+
+// ----------------------------------------------------------------------------
+// CSysApConfirmationQuery::RunError( TInt aError )
+// ----------------------------------------------------------------------------
+
+#ifdef _DEBUG
+TInt CSysApConfirmationQuery::RunError( TInt aError )
+#else
+TInt CSysApConfirmationQuery::RunError( TInt /* aError */ )
+#endif
+    {
+    TRACES( RDebug::Print( _L( "CSysApConfirmationQuery::RunError: error code: %d " ), aError ) );
+    return KErrNone;            
+    }
+    
+// ----------------------------------------------------------------------------
+// CSysApConfirmationQuery::CurrentQuery()
+// ----------------------------------------------------------------------------
+
+TInt CSysApConfirmationQuery::CurrentQuery()
+    {
+    TInt retval(ESysApNoQuery);
+    
+    if( IsActive() )
+        {
+        retval = iQueryId;
+        }
+        
+    return retval;
+    }
+
+// End of File
+
+
+