mobilemessaging/mmsui/settingssrc/MmsSettingsHandler.cpp
changeset 0 72b543305e3a
--- /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