coreapplicationuis/SysAp/Src/SysApConfirmationQuery.cpp
changeset 0 2e3d3ce01487
child 9 332e7bf3b42f
equal deleted inserted replaced
-1:000000000000 0:2e3d3ce01487
       
     1 /*
       
     2 * Copyright (c) 2004-2007 Nokia Corporation and/or its subsidiary(-ies). 
       
     3 * All rights reserved.
       
     4 * This component and the accompanying materials are made available
       
     5 * under the terms of "Eclipse Public License v1.0"
       
     6 * which accompanies this distribution, and is available
       
     7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     8 *
       
     9 * Initial Contributors:
       
    10 * Nokia Corporation - initial contribution.
       
    11 *
       
    12 * Contributors:
       
    13 *
       
    14 * Description:  CSysApConfirmationQuery implementation.
       
    15 *
       
    16 */
       
    17 
       
    18 
       
    19 // INCLUDES
       
    20 
       
    21 #include <avkon.hrh>
       
    22 #include <avkon.rsg>
       
    23 #include "SysAp.hrh"
       
    24 #include "SysApConfirmationQuery.h"
       
    25 #include "SysApAppUi.h"
       
    26 #include <StringLoader.h>
       
    27 #include <avkon.hrh>
       
    28 #include <avkon.rsg>
       
    29 #include <SysAp.rsg>
       
    30 #include <SecondaryDisplay/SecondaryDisplaySysApAPI.h>
       
    31 #include <aknSDData.h>
       
    32 
       
    33 // Constants
       
    34 _LIT( KEmptyString, "" );
       
    35 
       
    36 
       
    37 
       
    38 // ============================ MEMBER FUNCTIONS ==============================
       
    39 
       
    40 // ----------------------------------------------------------------------------
       
    41 // CSysApConfirmationQuery::NewL() 
       
    42 // ----------------------------------------------------------------------------
       
    43 CSysApConfirmationQuery* CSysApConfirmationQuery::NewL( CSysApAppUi& aSysApAppUi )
       
    44     {
       
    45     CSysApConfirmationQuery* self = new(ELeave) CSysApConfirmationQuery( aSysApAppUi );
       
    46     CleanupStack::PushL(self);
       
    47     self->ConstructL();
       
    48     CleanupStack::Pop();
       
    49     return self;
       
    50     }
       
    51 
       
    52 // ----------------------------------------------------------------------------
       
    53 // CSysApConfirmationQuery::ConstructL() 
       
    54 // ----------------------------------------------------------------------------
       
    55 void CSysApConfirmationQuery::ConstructL()
       
    56     {
       
    57     CActiveScheduler::Add(this);
       
    58     iQuery = CAknGlobalConfirmationQuery::NewL();           
       
    59     iQueryId = ESysApNoQuery;
       
    60     }
       
    61 
       
    62 // ----------------------------------------------------------------------------
       
    63 // CSysApConfirmationQuery::CSysApConfirmationQuery( CSysApAppUi& aSysApAppUi )
       
    64 // ----------------------------------------------------------------------------
       
    65 
       
    66 CSysApConfirmationQuery::CSysApConfirmationQuery( CSysApAppUi& aSysApAppUi ) 
       
    67   : CActive( EPriorityStandard ), iSysApAppUi( aSysApAppUi )
       
    68     {
       
    69     }
       
    70 
       
    71 // ----------------------------------------------------------------------------
       
    72 // CSysApConfirmationQuery::~CSysApConfirmationQuery() 
       
    73 // ----------------------------------------------------------------------------
       
    74 
       
    75 CSysApConfirmationQuery::~CSysApConfirmationQuery() 
       
    76     {
       
    77     Cancel();
       
    78     delete iQuery;
       
    79     iQuery = NULL;
       
    80     }
       
    81 
       
    82 
       
    83 // ----------------------------------------------------------------------------
       
    84 // CSysApConfirmationQuery::DoCancel() 
       
    85 // ----------------------------------------------------------------------------
       
    86 
       
    87 void CSysApConfirmationQuery::DoCancel() 
       
    88     {
       
    89     TRACES( RDebug::Print( _L("CSysApConfirmationQuery::DoCancel()" ) ) );
       
    90     iQuery->CancelConfirmationQuery();
       
    91     }
       
    92 
       
    93 // ----------------------------------------------------------------------------
       
    94 // CSysApConfirmationQuery::ShowQueryL()
       
    95 // ----------------------------------------------------------------------------
       
    96 
       
    97 void CSysApConfirmationQuery::ShowQueryL( const TSysApConfirmationQueryIds aQueryId, CCoeEnv* aLoaderEnv )
       
    98     {
       
    99     ShowQueryL( aQueryId, KNullDesC, aLoaderEnv );
       
   100     }
       
   101 
       
   102 // ----------------------------------------------------------------------------
       
   103 // CSysApConfirmationQuery::ShowQueryL()
       
   104 // ----------------------------------------------------------------------------
       
   105 
       
   106 #ifdef RD_MULTIPLE_DRIVE
       
   107 void CSysApConfirmationQuery::ShowQueryL( const TSysApConfirmationQueryIds aQueryId, const TDesC& aValue, CCoeEnv* aLoaderEnv )
       
   108 #else // RD_MULTIPLE_DRIVE
       
   109 void CSysApConfirmationQuery::ShowQueryL( const TSysApConfirmationQueryIds aQueryId,  const TDesC& /*aValue*/, CCoeEnv* aLoaderEnv )
       
   110 #endif // RD_MULTIPLE_DRIVE
       
   111     {
       
   112     TRACES( RDebug::Print( _L("CSysApConfirmationQuery::ShowQueryL( %d )"), aQueryId ) );
       
   113     HBufC* queryStringBuf = NULL;
       
   114     HBufC* deviceNameBuf = NULL;
       
   115     CAknQueryDialog::TTone tone = CAknQueryDialog::ENoTone;    
       
   116     
       
   117     if( !IsActive() )
       
   118         {
       
   119         iQueryId = aQueryId;
       
   120         TInt secondaryDisplayCmdId(SecondaryDisplay::ECmdNoNote);
       
   121         TInt keys(0);
       
   122         TInt anim(0);        
       
   123 
       
   124         switch ( iQueryId )
       
   125             {
       
   126             case ESysApRestartPhoneQuery:
       
   127                 queryStringBuf = StringLoader::LoadLC( R_QTN_RESTART_QUERY, aLoaderEnv );
       
   128                 keys = R_AVKON_SOFTKEYS_OK_EMPTY;
       
   129                 anim = R_QGN_NOTE_WARNING_ANIM;
       
   130                 secondaryDisplayCmdId = SecondaryDisplay::ECmdShowRestartPhoneQuery;
       
   131                 break;
       
   132             case ESysApLeaveOfflineModeQuery:
       
   133                 queryStringBuf = StringLoader::LoadLC( R_QTN_LEAVE_OFFLINE_MODE_QUERY, aLoaderEnv );
       
   134                 keys = R_AVKON_SOFTKEYS_YES_NO;
       
   135                 secondaryDisplayCmdId = SecondaryDisplay::ECmdShowLeaveOfflineModeQuery;
       
   136                 break;
       
   137 #ifndef RD_MULTIPLE_DRIVE
       
   138             case ESysApRemoveMmcNote:
       
   139                 queryStringBuf = StringLoader::LoadLC( R_QTN_MEMC_INFO_EJECT, aLoaderEnv );
       
   140                 keys = R_AVKON_SOFTKEYS_OK_EMPTY;
       
   141                 anim = R_QGN_NOTE_INFO_ANIM;
       
   142                 secondaryDisplayCmdId = SecondaryDisplay::ECmdShowRemoveMmcQuery;
       
   143                 break;
       
   144             case ESysApEjectMmcQuery:
       
   145                 queryStringBuf = StringLoader::LoadLC( R_QTN_MEMC_CONF_EJECT, aLoaderEnv );
       
   146                 keys = R_AVKON_SOFTKEYS_YES_NO;
       
   147                 secondaryDisplayCmdId = SecondaryDisplay::ECmdShowEjectMmcQuery;
       
   148                 break;
       
   149 #else // RD_MULTIPLE_DRIVE
       
   150             case ESysApRemoveMmcNote:
       
   151                 queryStringBuf = aValue.AllocLC();
       
   152                 keys = R_AVKON_SOFTKEYS_OK_EMPTY;
       
   153                 anim = R_QGN_NOTE_INFO_ANIM;
       
   154                 secondaryDisplayCmdId = SecondaryDisplay::ECmdShowRemoveMmcQuery;
       
   155                 break;
       
   156             case ESysApEjectMmcQuery:
       
   157                 queryStringBuf = aValue.AllocLC();
       
   158                 keys = R_AVKON_SOFTKEYS_YES_NO;
       
   159                 secondaryDisplayCmdId = SecondaryDisplay::ECmdShowEjectMmcQuery;
       
   160                 break;
       
   161 #endif // RD_MULTIPLE_DRIVE
       
   162             case ESysApBtSapDisconnectQuery:
       
   163                 deviceNameBuf = iSysApAppUi.GetBtSapDeviceNameL();
       
   164                 if ( deviceNameBuf )
       
   165                     {
       
   166                     CleanupStack::PushL(deviceNameBuf);
       
   167                     queryStringBuf = StringLoader::LoadL( R_QTN_BT_DISCONN_FROM, *deviceNameBuf, aLoaderEnv );
       
   168                     }
       
   169                 else
       
   170                     {
       
   171                     queryStringBuf = StringLoader::LoadL( R_QTN_BT_DISCONN_FROM, KEmptyString, aLoaderEnv ); 
       
   172                     }
       
   173                 CleanupStack::PushL(queryStringBuf);
       
   174                 keys = R_AVKON_SOFTKEYS_YES_NO;
       
   175                 secondaryDisplayCmdId = SecondaryDisplay::ECmdShowBtSapDisconnectQuery;
       
   176                 break;
       
   177             case ESysApMemoryCardLockedNote:
       
   178                 iPendingQuery = ESysApMemoryCardLockedNote;
       
   179                 queryStringBuf = StringLoader::LoadLC( R_QTN_MEMC_LOCKED_NOT_SUPPORTED, aLoaderEnv );
       
   180                 keys = R_AVKON_SOFTKEYS_OK_EMPTY;
       
   181                 anim = R_QGN_NOTE_INFO_ANIM;
       
   182                 secondaryDisplayCmdId = SecondaryDisplay::ECmdShowMemoryCardLockedQuery;
       
   183                 break;
       
   184             case ESysApUseFmTxInOfflineQuery:
       
   185                  queryStringBuf 
       
   186                      = StringLoader::LoadLC( R_QTN_FMTX_SYSAP_NOTE_ACTIVATE_IN_OFFLINE,
       
   187                                              aLoaderEnv );
       
   188                  keys = R_AVKON_SOFTKEYS_YES_NO;
       
   189                  secondaryDisplayCmdId = SecondaryDisplay::ECmdShowFmTxKeepOnInOfflineQuery;
       
   190                  break;
       
   191             case ESysApBattChargingPowerSavingQuery:
       
   192                 queryStringBuf = StringLoader::LoadLC( R_QTN_BATTERY_CHARGING_POWER_SAVING_QUERY, aLoaderEnv );
       
   193                 keys = R_AVKON_SOFTKEYS_YES_NO;
       
   194                 secondaryDisplayCmdId = SecondaryDisplay::ECmdShowChargingDeactivatePowerSavingQuery;
       
   195                 tone = static_cast<CAknQueryDialog::TTone>( EAvkonSIDChargingBatteryTone );                
       
   196                 break;
       
   197             
       
   198             case ESysApBattLowPowerSavingQuery:
       
   199                 queryStringBuf = StringLoader::LoadLC( R_QTN_BATTERY_CONF_QUERY, aLoaderEnv );
       
   200                 keys = R_AVKON_SOFTKEYS_YES_NO;
       
   201                 secondaryDisplayCmdId = SecondaryDisplay::ECmdShowBattLowActivatePowerSavingQuery;
       
   202                 break;
       
   203             
       
   204             default:
       
   205                 break;
       
   206             }
       
   207 
       
   208         if ( iSysApAppUi.CoverDisplaySupported() && secondaryDisplayCmdId != SecondaryDisplay::ECmdNoNote )
       
   209             {
       
   210             TRACES( RDebug::Print( _L("CSysApConfirmationQuery::ShowQueryL - Notifying secondary display") ) );
       
   211             CAknSDData* sd = NULL;
       
   212             if ( secondaryDisplayCmdId == SecondaryDisplay::ECmdShowBtSapDisconnectQuery )
       
   213                 {
       
   214                 SecondaryDisplay::TDeviceName sdDeviceName;
       
   215                 sdDeviceName.Append(deviceNameBuf->Left(SecondaryDisplay::KMaxDeviceNameLen));
       
   216                 SecondaryDisplay::TBtSapDisconnectQueryPckg pckg(sdDeviceName);
       
   217                 sd = CAknSDData::NewL(SecondaryDisplay::KCatSysAp, SecondaryDisplay::ECmdShowBtSapDisconnectQuery, pckg);
       
   218                 }
       
   219             else
       
   220                 {
       
   221                 sd = CAknSDData::NewL(SecondaryDisplay::KCatSysAp, secondaryDisplayCmdId, KNullDesC8);
       
   222                 }
       
   223             iQuery->SetSecondaryDisplayData(sd); // ownership to notifier client
       
   224             }
       
   225 
       
   226         if ( keys && queryStringBuf )
       
   227             {
       
   228             if ( anim )
       
   229                 {
       
   230                 iQuery->ShowConfirmationQueryL( iStatus, 
       
   231                                                 queryStringBuf->Des(), 
       
   232                                                 keys,
       
   233                                                 anim,
       
   234                                                 KNullDesC,
       
   235                                                 0,
       
   236                                                 0,
       
   237                                                 tone );
       
   238                 }
       
   239             else
       
   240                 {
       
   241                 iQuery->ShowConfirmationQueryL( iStatus, 
       
   242                                                 queryStringBuf->Des(), 
       
   243                                                 keys,
       
   244                                                 0,
       
   245                                                 KNullDesC,
       
   246                                                 0,
       
   247                                                 0,
       
   248                                                 tone );
       
   249                 }
       
   250             }
       
   251 
       
   252         SetActive();
       
   253         }    
       
   254      else
       
   255         {
       
   256         // If another query is wanted when ESysApMemoryCardLockedNote is active, override it (Continues in RunL which handles cancel).
       
   257         if ( iQueryId == ESysApMemoryCardLockedNote && aQueryId != ESysApMemoryCardLockedNote )
       
   258             {
       
   259             iPendingQuery = aQueryId;
       
   260             iQuery->CancelConfirmationQuery();
       
   261             }
       
   262         }
       
   263 
       
   264     if ( queryStringBuf )
       
   265         {
       
   266         CleanupStack::PopAndDestroy( queryStringBuf ); // queryStringbuf
       
   267         }
       
   268 
       
   269     if ( deviceNameBuf )
       
   270         {
       
   271         CleanupStack::PopAndDestroy( deviceNameBuf ); // deviceNameBuf
       
   272         }
       
   273 
       
   274     }       
       
   275 
       
   276 // ----------------------------------------------------------------------------
       
   277 // CSysApConfirmationQuery::RunL() 
       
   278 // ----------------------------------------------------------------------------
       
   279 
       
   280 void CSysApConfirmationQuery::RunL() 
       
   281     {
       
   282     TRACES( RDebug::Print( _L( "CSysApConfirmationQuery::RunL: iQueryId = %d, iStatus = %d" ), iQueryId, iStatus.Int() ) );
       
   283     switch ( iQueryId ) 
       
   284         {
       
   285         case ESysApRestartPhoneQuery: 
       
   286             {    
       
   287             TRACES( RDebug::Print( _L( "CSysApConfirmationQuery::RunL: calling CSysApAppUi::DoShutdownL( ETrue, EDataRestoreReset )" ) ) );
       
   288             iSysApAppUi.DoShutdownL( ETrue, RStarterSession::EDataRestoreReset );
       
   289             }
       
   290             break;
       
   291         case ESysApLeaveOfflineModeQuery:                  
       
   292             if ( iStatus.Int() == EAknSoftkeyYes )
       
   293                 {
       
   294                 TRACES( RDebug::Print( _L( "CSysApConfirmationQuery::RunL: calling CSysApAppUi::ActivateOnlineProfileL()" ) ) );
       
   295                 iSysApAppUi.ActivateOnlineProfileL();
       
   296                 }
       
   297             break;
       
   298         case ESysApRemoveMmcNote:
       
   299             TRACES( RDebug::Print( _L( "CSysApConfirmationQuery::RunL: calling CSysApAppUi::MMCDismountedDialogConfirmed()" ) ) );
       
   300             iSysApAppUi.MMCDismountedDialogConfirmed();
       
   301             break;
       
   302         case ESysApEjectMmcQuery:
       
   303             if ( iStatus.Int() == EAknSoftkeyYes || iStatus.Int() == EEikBidOk )
       
   304                 {
       
   305                 TRACES( RDebug::Print( _L( "CSysApConfirmationQuery::RunL: calling CSysApAppUi::EjectMMCL()" ) ) );
       
   306                 iSysApAppUi.EjectMMCL();
       
   307                 }
       
   308             else
       
   309                 {
       
   310                 iSysApAppUi.EjectMMCCanceled();
       
   311                 }
       
   312             break;
       
   313         case ESysApBtSapDisconnectQuery:
       
   314             if ( iStatus.Int() == EAknSoftkeyYes )
       
   315                 {
       
   316                 TRACES( RDebug::Print( _L( "CSysApConfirmationQuery::RunL: calling CSysApAppUi::DisconnectBtSap()" ) ) );
       
   317                 iSysApAppUi.DisconnectBtSap();
       
   318                 }
       
   319             break;
       
   320         case ESysApMemoryCardLockedNote:
       
   321             // In case of MMC locked note we are only interested about error, as it means there is overriding query
       
   322             if ( iStatus.Int() < 0 && iPendingQuery != ESysApMemoryCardLockedNote )
       
   323                 {
       
   324                 TRACES( RDebug::Print( _L( "CSysApConfirmationQuery::RunL: Canceled ESysApMemoryCardLockedNote because more important query" ) ) );
       
   325                 ShowQueryL( iPendingQuery, CCoeEnv::Static() );
       
   326                 }
       
   327             break;
       
   328          case ESysApUseFmTxInOfflineQuery:
       
   329              if ( iStatus.Int() == EAknSoftkeyNo )
       
   330                  {
       
   331                  TRACES( RDebug::Print( _L( "CSysApConfirmationQuery::RunL: calling CSysApAppUi::ChangeFmTxStateL( EFalse )" ) ) );
       
   332                  iSysApAppUi.ChangeFmTxStateL( EFalse ); // disable FM TX
       
   333                  }
       
   334              break;
       
   335          case ESysApBattChargingPowerSavingQuery:
       
   336             iSysApAppUi.HandleDeactivatePsmQueryResponse( iStatus.Int() == EAknSoftkeyYes );
       
   337             break;
       
   338             
       
   339          case ESysApBattLowPowerSavingQuery:
       
   340             iSysApAppUi.HandleActivatePsmQueryResponse( iStatus.Int() == EAknSoftkeyYes );
       
   341             break;           
       
   342          
       
   343          default:
       
   344             TRACES( RDebug::Print( _L( "CSysApConfirmationQuery::RunL: default" ) ) );
       
   345             break;
       
   346         }
       
   347     }
       
   348 
       
   349 // ----------------------------------------------------------------------------
       
   350 // CSysApConfirmationQuery::RunError( TInt aError )
       
   351 // ----------------------------------------------------------------------------
       
   352 
       
   353 #ifdef _DEBUG
       
   354 TInt CSysApConfirmationQuery::RunError( TInt aError )
       
   355 #else
       
   356 TInt CSysApConfirmationQuery::RunError( TInt /* aError */ )
       
   357 #endif
       
   358     {
       
   359     TRACES( RDebug::Print( _L( "CSysApConfirmationQuery::RunError: error code: %d " ), aError ) );
       
   360     return KErrNone;            
       
   361     }
       
   362     
       
   363 // ----------------------------------------------------------------------------
       
   364 // CSysApConfirmationQuery::CurrentQuery()
       
   365 // ----------------------------------------------------------------------------
       
   366 
       
   367 TInt CSysApConfirmationQuery::CurrentQuery()
       
   368     {
       
   369     TInt retval(ESysApNoQuery);
       
   370     
       
   371     if( IsActive() )
       
   372         {
       
   373         retval = iQueryId;
       
   374         }
       
   375         
       
   376     return retval;
       
   377     }
       
   378 
       
   379 // End of File
       
   380 
       
   381 
       
   382