--- /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 <coemain.h>
+#include <eikenv.h>
+#include <ApUtils.h> //CApUtils, CCommsDatabase, EDatabaseTypeIAP
+#include <AknQueryDialog.h>
+#include <AknWaitDialog.h>
+#include <akninputblock.h> //CAknInputBlock
+#include <bautils.h>
+#include <ConeResLoader.h> // for RConeResourceLoader
+#include <StringLoader.h>
+#include <data_caging_path_literals.hrh>
+
+#include <msvids.h>
+
+#include <MmsSettings.rsg>
+#include <mmsclient.h>
+#include <mmserrors.h>
+#include <MtmExtendedCapabilities.hrh> // 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 <TMsvFactorySettingsLevel> 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