diff -r 000000000000 -r 72b543305e3a mobilemessaging/mmsui/settingssrc/MmsSettingsHandler.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mobilemessaging/mmsui/settingssrc/MmsSettingsHandler.cpp Thu Dec 17 08:44:11 2009 +0200 @@ -0,0 +1,323 @@ +/* +* Copyright (c) 2004 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: +* Provides MMS Settings. +* +*/ + + + +// INCLUDE FILES +#include +#include +#include //CApUtils, CCommsDatabase, EDatabaseTypeIAP +#include +#include +#include //CAknInputBlock +#include +#include // for RConeResourceLoader +#include +#include + +#include + +#include +#include +#include +#include // for TMscFactorySettingsLevel + +#include "MmsSettingsHandler.h" +#include "MmsSettingsPanic.h" +#include "MmsMtmConst.h" + +_LIT( KMmsSettingsResourceFileName, "mmssettings.rsc" ); + +GLREF_C void Panic(TMmsSettingsPanic aPanic) + { + _LIT( KPanicText,"MmsSettings.dll" ); + User::Panic( KPanicText, aPanic ); + } + +// --------------------------------------------------------- +// CMmsSettingsHandler::CMmsSettingsHandler() +// --------------------------------------------------------- +// +CMmsSettingsHandler::CMmsSettingsHandler( CMmsClientMtm& aMmsClient ) : + iMmsClient( aMmsClient ), iResourceOffset( 0 ) + { + } + +// --------------------------------------------------------- +// CMsgInfoMessageInfoDialog::ConstructL +// --------------------------------------------------------- +// +void CMmsSettingsHandler::ConstructL() + { + iMmsSettings = CMmsSettings::NewL(); + iMmsClient.RestoreSettingsL(); + iMmsSettings->CopyL( iMmsClient.MmsSettings() ); + + TParse fileParse; + fileParse.Set( KMmsSettingsResourceFileName, &KDC_RESOURCE_FILES_DIR, NULL ); + TFileName fileName( fileParse.FullName() ); + CEikonEnv* env = CEikonEnv::Static( ); + BaflUtils::NearestLanguageFile( env->FsSession(), fileName ); + iResourceOffset = env->AddResourceFileL( fileName ); + } + +// --------------------------------------------------------- +// CMmsSettingsHandler::NewL() +// --------------------------------------------------------- +// +EXPORT_C CMmsSettingsHandler* CMmsSettingsHandler::NewL( CMmsClientMtm& aMmsClient ) + { + LOGTEXT( _L8( "CMmsSettingsHandler::NewL, start" ) ); + CMmsSettingsHandler* self = new ( ELeave ) CMmsSettingsHandler( aMmsClient ); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop(); //self + return self; + } + +// --------------------------------------------------------- +// CMmsSettingsHandler::~CMmsSettingsHandler +// Destructor +// --------------------------------------------------------- +// +EXPORT_C CMmsSettingsHandler::~CMmsSettingsHandler() + { + if( iResourceOffset ) + { + CCoeEnv::Static()->DeleteResourceFile( iResourceOffset ); + } + delete iMmsSettings; + if ( iWaitDialog ) + { + TRAP_IGNORE( iWaitDialog->ProcessFinishedL() ); + } + } + +// --------------------------------------------------------- +// CMmsSettingsHandler::ApExistsL +// Checks the existence of given access point +// according to id. +// --------------------------------------------------------- +// +EXPORT_C TBool CMmsSettingsHandler::ApExistsL( TInt32 aAp ) + { + if ( aAp == KErrNotFound ) + { + return EFalse; + } + CCommsDatabase* commsDb = CCommsDatabase::NewL( EDatabaseTypeIAP ); + CleanupStack::PushL( commsDb ); + CApUtils* apUtils = CApUtils::NewLC( *commsDb ); + + TBool exists = EFalse; + TRAPD( error, ( exists = apUtils->WapApExistsL( aAp ) ) ); + + CleanupStack::PopAndDestroy( 2 ); //apUtils, commsDb + + if ( exists ) + { + return ETrue; + } + + if ( error != KErrNotFound ) + { + User::LeaveIfError( error ); + } + return EFalse; + } + +// --------------------------------------------------------- +// CMmsSettingsHandler::CheckSettingsL() const +// Check MMS service settings +// --------------------------------------------------------- +// +EXPORT_C TBool CMmsSettingsHandler::CheckSettingsL( + CMmsSettingsDialog::TMmsExitCode& aExitCode ) + { + TInt error = iMmsSettings->ValidateSettings(); + if ( error == KMmsErrorInvalidSettings ) + { + //Settings corrupted. Restore factory settings. + RestoreDefaultSettingsL( EMmsFactorySettingsLevelNormal ); + //Re-check the service. + //error = iMmsClient.ValidateService( iMmsClient.DefaultSettingsL() ); + error = iMmsSettings->ValidateSettings(); + } + if ( error != KErrNone ) + { // something wrong in service settings + CAknQueryDialog* settingsNotOkQuery = CAknQueryDialog::NewL(); + + if ( settingsNotOkQuery->ExecuteLD( R_MMSUI_QUERY_AP_ERROR ) ) + { + // user wants to correct the settings + CEikStatusPane* sp = CEikonEnv::Static()->AppUiFactory()->StatusPane(); + TInt previous = sp->CurrentLayoutResId(); + sp->SwitchLayoutL( R_AVKON_STATUS_PANE_LAYOUT_USUAL ); + sp->MakeVisible( ETrue ); + sp->DrawNow(); + + LaunchSettingsDialogL( aExitCode ); + + sp->SwitchLayoutL( previous ); + sp->MakeVisible( ETrue ); + sp->DrawNow(); + } + return EFalse; + } + return ETrue; + } + +// --------------------------------------------------------- +// CMsvOperation* CMmsSettingsHandler::CompleteSettingsOperationL( +// TRequestStatus& aCompletionStatus, const CMmsSettingsDialog::TMmsExitCode& aExitCode) +// Creates completed operation after settings dialog closing with appropriate parameters. +// --------------------------------------------------------- +// +EXPORT_C CMsvOperation* CMmsSettingsHandler::CompleteSettingsOperationL( + TRequestStatus& aCompletionStatus, + const CMmsSettingsDialog::TMmsExitCode& aExitCode + /* = CMmsSettingsDialog::EMmsExternalInterrupt */) + { + TInt err = KErrNone; + if ( aExitCode == CMmsSettingsDialog::EMmsExit ) + { + LOGTEXT( _L8( "MmsMtmUi Service Settings dialog exiting" ) ); + err = EEikCmdExit; + } + // Nothing to do, so return a completed operation. + return CMsvCompletedOperation::NewL( iMmsClient.Session(), + KUidMsvLocalServiceMtm, + KNullDesC8, + KMsvLocalServiceIndexEntryId, + aCompletionStatus, + err ); + } + +// --------------------------------------------------------- +// CMmsSettingsHandler::HandleFactorySettingsL +// Reset Factory Settings support +// --------------------------------------------------------- +EXPORT_C void CMmsSettingsHandler::HandleFactorySettingsL( TDes8& aLevel ) + { + TPckgBuf paramPack; + const TInt paramSize = sizeof( TMsvFactorySettingsLevel ); + + __ASSERT_DEBUG( aLevel.Length() > 0, Panic( EMmsSettingsWrongParameters ) ); + + if ( aLevel.Length() > 0 ) + { + paramPack.Copy( aLevel.Ptr(), paramSize ); + const TMsvFactorySettingsLevel& level = paramPack(); + + LOGTEXT2( _L16( "CMmsSettingsHandler calling RestoreFactorySettings with level %d"), level ); + if ( level == EMsvFactorySettingsLevelNormal ) + { + RestoreDefaultSettingsL( EMmsFactorySettingsLevelNormal ); + } + else if ( level == EMsvFactorySettingsLevelDeep ) + { + RestoreDefaultSettingsL( EMmsFactorySettingsLevelDeep ); + } + else + { + __ASSERT_DEBUG( EFalse, Panic( EMmsSettingsWrongParameters ) ); + } + } + } + +// --------------------------------------------------------- +// void CMmsSettingsHandler::LaunchSettingsDialogL( +// CMmsSettingsDialog::TMmsExitCode& aExitCode ) +// Opens either MMS Service Settings or MMS Sending Settings dialog. +// --------------------------------------------------------- +// +EXPORT_C void CMmsSettingsHandler::LaunchSettingsDialogL( + CMmsSettingsDialog::TMmsExitCode& aExitCode ) + { + // Reload settings, because mce does not create CMmsSettingsHandler from scratch + RefreshSettingsL(); + CMmsSettingsDialog* dlg = new ( ELeave ) CMmsSettingsDialog( iMmsSettings, aExitCode ); + + LOGTEXT( _L8( "MmsMtmUi Opening Settings dialog" ) ); + dlg->ConstructL( R_SETTINGSDIALOG_MENUBAR ); + dlg->ExecuteLD( R_MMSUI_MMSSETTINGS ); + //return value ignored. + + // Save changes only if Back or ExitWithSave is selected + if ( aExitCode==CMmsSettingsDialog::EMmsBack + || aExitCode==CMmsSettingsDialog::EMmsExitWithSave ) + { + iWaitDialog = new ( ELeave ) CAknWaitDialog( NULL ); + iWaitDialog->PrepareLC( SAVING_WAIT_NOTE ); + HBufC* text = StringLoader::LoadLC( R_MMS_SETTINGS_PROCESSING ); + iWaitDialog->SetTextL( *text ); + CleanupStack::PopAndDestroy(); // text + + iWaitDialog->SetCallback(this); + iWaitDialog->RunLD(); + //Adding InputBlocker to avoid handling of user keypresses until the mmsclient operations have completed + CAknInputBlock* inputBlock = CAknInputBlock::NewLC(); + iMmsClient.SetSettingsL( *iMmsSettings ); + iMmsClient.StoreSettingsL(); + CleanupStack::PopAndDestroy(inputBlock); + + if ( iWaitDialog ) + { + iWaitDialog->ProcessFinishedL(); + iWaitDialog = NULL; + } + + if ( aExitCode==CMmsSettingsDialog::EMmsExitWithSave ) + { // Change exit code if ExitWithSave is selected + aExitCode = CMmsSettingsDialog::EMmsExit; + } + } + } + +// --------------------------------------------------------- +// CMsvOperation* CMmsSettingsHandler::OpenServiceSettingsDialogL(TRequestStatus& aCompletionStatus) +// Handles MMS service settings +// --------------------------------------------------------- +// +EXPORT_C CMsvOperation* CMmsSettingsHandler::OpenServiceSettingsDialogL( TRequestStatus& aCompletionStatus ) + { + CMmsSettingsDialog::TMmsExitCode exitCode; + LaunchSettingsDialogL( exitCode ); + return CompleteSettingsOperationL( aCompletionStatus, exitCode ); + } + +// --------------------------------------------------------- +// CMmsSettingsHandler::CreateDefaultServiceL +// --------------------------------------------------------- +// +void CMmsSettingsHandler::RestoreDefaultSettingsL( TMmsFactorySettingsLevel aLevel ) const + { + iMmsSettings->RestoreFactorySettingsL( iMmsClient.Session(), aLevel ); + iMmsClient.SetSettingsL( *iMmsSettings ); + iMmsClient.StoreSettingsL(); + } + +// --------------------------------------------------------- +// DialogDismissedL +// --------------------------------------------------------- +// +void CMmsSettingsHandler::DialogDismissedL( TInt /*aButtonId*/ ) + { + iWaitDialog = NULL; + } +// End of File