diff -r 000000000000 -r 72b543305e3a mobilemessaging/mmsui/settingssrc/MmsSettingsDialog.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mobilemessaging/mmsui/settingssrc/MmsSettingsDialog.cpp Thu Dec 17 08:44:11 2009 +0200 @@ -0,0 +1,1418 @@ +/* +* Copyright (c) 2002-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 Dialog methods. +* +*/ + + + +// INCLUDE FILES +#include +#include + +#include +#include +#include +#include +#include +#include + +#include // MMS Engine settings + +#include +#include // image size definitions + +#include +#include +#include +#include +#include +#include +#include //CApSelect + +#include +#include + +#include // link against centralrepository.lib +#include // for Central Repository keys + +#include +#include + +// Features +#include +#include +#include +#include +#include // For HlpLauncher + +#include "unieditorfeatures.h" // EUniFeaturePriority + +#include "MmsMtmConst.h" + +#include "MmsApSelect.h" +#include "MmsSettingsDialog.h" +#include "MmsSettingsPanic.h" +#include "MmsSettings.hrh" + +// CONSTANTS + +const TUid KUidMce = {0x100058C5}; + +// Possible values for mms validity period in seconds +const TInt32 KMmsValidityPeriod1h = 3600; +const TInt32 KMmsValidityPeriod6h = 21600; +const TInt32 KMmsValidityPeriod24h = 86400; +const TInt32 KMmsValidityPeriod3Days = 259200; +const TInt32 KMmsValidityPeriodWeek = 604800; +const TInt32 KMmsValidityPeriodMax = 0; + + +// --------------------------------------------------------- +// CMmsSettingsDialog +// C++ constructor +// --------------------------------------------------------- +// +CMmsSettingsDialog::CMmsSettingsDialog( + //CMmsClientMtm *aClientMtm, + CMmsSettings* aMmsSettings, + TMmsExitCode& aExitCode ) : + //iMmsClient( aClientMtm ), + iMmsSettings( aMmsSettings ), + iExitCode( aExitCode ), + iSettingsFlags( 0 ) + { + iExitCode = EMmsExternalInterrupt; // reference -> cannot be initialized above + } + + +// --------------------------------------------------------- +// ~CMmsSettingsDialog() +// Destructor +// --------------------------------------------------------- +// +CMmsSettingsDialog::~CMmsSettingsDialog() + { + delete iPreviousTitleText; + delete iCommsDb; + + // remove default navi pane + if ( iSettingsFlags & EDefaultNaviPane ) + { + if ( iNaviPane ) + { + // if "EDefaultNaviPane" flag is set + // iNaviPane != 0 + iNaviPane->Pop(NULL); + } + } + + // For lint + iNaviPane = NULL; + iItems = NULL; + //iMmsClient = NULL; + iMmsSettings = NULL; + iTitlePane = NULL; + iListbox = NULL; + } + + +// --------------------------------------------------------- +// CMmsSettingsDialog::ProcessCommandL +// +// Processes menu item commands +// --------------------------------------------------------- +// +void CMmsSettingsDialog::ProcessCommandL( TInt aCommandId ) + { + CAknDialog::ProcessCommandL( aCommandId ); + + switch ( aCommandId ) + { + case EChangeItem: + HandleEditRequestL( iListbox->CurrentItemIndex(), EFalse ); + break; + + case EAknCmdHelp: + { + LaunchHelpL(); + } + break; + + case EExitItem: + ExitDialogL(); + break; + default: + break; + } + } + + +// --------------------------------------------------------- +// CMmsSettingsDialog::ExitDialogL() +// +// --------------------------------------------------------- +// +void CMmsSettingsDialog::ExitDialogL() + { + iExitCode = EMmsExit; + TryExitL( EAknSoftkeyCancel ); + } + + +// --------------------------------------------------------- +// DynInitMenuPaneL(TInt aMenuId, CEikMenuPane* aMenuPane) +// Initializes items on the menu +// --------------------------------------------------------- +// +void CMmsSettingsDialog::DynInitMenuPaneL( + TInt aMenuId, + CEikMenuPane* aMenuPane) + { + if ( aMenuPane + && aMenuId == R_SETTINGSDIALOG_MENUPANE ) + { + // Set help menu-item visibility according featureManager + if ( ! ( iSettingsFlags & EHelpFeatureSupported ) ) + { + aMenuPane->SetItemDimmed( EAknCmdHelp, ETrue ); + } + } + } + + +// --------------------------------------------------------- +// CMmsSettingsDialog::OkToExitL +// +// --------------------------------------------------------- +// +TBool CMmsSettingsDialog::OkToExitL( TInt aKeyCode ) + { + switch ( aKeyCode ) + { + case EChangeItem: + HandleEditRequestL( iListbox->CurrentItemIndex(), ETrue ); + return EFalse; + + case EAknSoftkeyCancel: + { + iSettingsFlags |= EExitSelected; + iSettingsFlags |= EGoingToExit; + if ( ClosingDialogL() ) + { + iExitCode = EMmsExit; + } + else + { + iExitCode = EMmsExitWithSave; + } + + return ETrue; + } + case EAknSoftkeyBack: + { + iSettingsFlags &= ~EExitSelected; + ClosingDialogL(); + + //if exit wanted during back operation + if( iSettingsFlags & ESwitchToExit ) + { + iExitCode = EMmsExit; + } + else//normal back + { + iExitCode = EMmsBack; + } + + // Replace title with old title text + if ( iPreviousTitleText ) + { + iTitlePane->SetTextL( *iPreviousTitleText ); + } + return ETrue; + } + default : + return CAknDialog::OkToExitL( aKeyCode ); + } + + } + + +// --------------------------------------------------------- +// CMmsSettingsDialog::CheckAndCorrectAccessPointL() +// +// Checks the access point as a part of closing dialog +// (back / exit). AP must exist. +// --------------------------------------------------------- +// +TBool CMmsSettingsDialog::CheckAndCorrectAccessPointL() + { + TInt32 ap = iMmsSettings->AccessPoint( 0 ); + + CApUtils* apUtils = CApUtils::NewLC(*iCommsDb); + + // Access point is compulsory + TBool closingWithErrors = EFalse; // ETrue if user wants to close down even with errors + while ( !ApExistsL( apUtils, ap ) ) + { + // Do not save if exit with errors + if ( iSettingsFlags & EExitSelected ) + { + closingWithErrors = ETrue; + } + else + { + closingWithErrors = ShowExitAnywayQueryL(); + } + + if ( closingWithErrors ) + { + break; + } + //if user selects exit in ap dialog, we will exit. + if ( EditAccessPointL() ) + { + //when we return, this tells that we are exiting. + iSettingsFlags |= ESwitchToExit; + break; + } + ap = iMmsSettings->AccessPoint( 0 ); + } + CleanupStack::PopAndDestroy(); // apUtils + return closingWithErrors; + } + + +// --------------------------------------------------------- +// CMmsSettingsDialog::ShowExitAnywayQueryL() const +// +// --------------------------------------------------------- +// +TBool CMmsSettingsDialog::ShowExitAnywayQueryL() const + { + CAknQueryDialog* confirmQuery = CAknQueryDialog::NewL(); + return ( confirmQuery->ExecuteLD( R_MMSUI_QUERY_EXIT_ANYWAY ) ); + } + + +// --------------------------------------------------------- +// CMmsSettingsDialog::ApExistsL(CApUtils* aUtils, TUint32 aAP) const +// Checks whether or not given AP exists +// +// --------------------------------------------------------- +// +TBool CMmsSettingsDialog::ApExistsL( CApUtils* aUtils, TInt32 aAP ) const + { + if ( aAP == KErrNotFound ) + { + return EFalse; + } + TBool exists = EFalse; + TRAPD( error, ( exists = aUtils->WapApExistsL( aAP ) ) ); + if ( exists ) + { + return ETrue; + } + // we are only handling "not found" leave + if ( error != KErrNotFound ) + { + User::LeaveIfError( error ); + } + return EFalse; + } + + +// --------------------------------------------------------- +// CMmsSettingsDialog::PreLayoutDynInitL() +// +// Creates a listbox for the settings. +// Values are read from the resource file. +// +// --------------------------------------------------------- +// +void CMmsSettingsDialog::PreLayoutDynInitL() + { + + // Get supported features from feature manager. + FeatureManager::InitializeLibL(); + if ( FeatureManager::FeatureSupported( KFeatureIdHelp ) ) + { + iSettingsFlags |= EHelpFeatureSupported; + } + FeatureManager::UnInitializeLib(); + + TInt featureBitmask = 0; + CRepository* repository = CRepository::NewL( KCRUidMmsui ); + repository->Get( KMmsuiCsdEnabled, featureBitmask ); + if ( featureBitmask ) + { + iSettingsFlags |= ECSDEnabled; + } + delete repository; + repository = NULL; + featureBitmask = 0; + + repository = CRepository::NewL( KCRUidMuiuVariation ); + repository->Get( KMuiuMmsFeatures, featureBitmask ); + delete repository; + repository = NULL; + if ( featureBitmask & KMmsFeatureIdUserCreationMode ) + { + iSettingsFlags |= ECreationModeChangeEnabled; + } + if ( featureBitmask & KMmsFeatureIdHideReceivingOff ) + { + iSettingsFlags |= EReceivingOffDisabled; + } + if ( featureBitmask & KMmsFeatureIdHideManualFetchMode ) + { + iSettingsFlags |= EReceivingAlwaysManualDisabled; + } + if ( featureBitmask & KMmsFeatureIdHideAutomaticAtHome ) + { + iSettingsFlags |= EReceivingAutomaticHomeDisabled; + } + + SetTitleTextL(); + + iCommsDb = CCommsDatabase::NewL( EDatabaseTypeIAP ); + + // Get listbox pointer + iListbox = static_cast( Control( EDlgSettingListBox ) ); + iListbox->SetListBoxObserver( this ); + + + // Sets correct size for the listbox + iListbox->SetRect( iAvkonAppUi->ClientRect() ); + + iItems = CMuiuSettingsArray::NewL( R_MMS_SERVICE_SETTINGS_LIST ); + GetServiceSettingsValuesL(); + + // scroll bars + iListbox->CreateScrollBarFrameL( ETrue ); + iListbox->ScrollBarFrame()->SetScrollBarVisibilityL( + CEikScrollBarFrame::EOff, + CEikScrollBarFrame::EAuto + ); + + // replace navi pane with empty one. + iNaviPane = static_cast + ( iEikonEnv->AppUiFactory()->StatusPane()->ControlL( + TUid::Uid(EEikStatusPaneUidNavi) ) ); + iNaviPane->PushDefaultL(); + iSettingsFlags |= EDefaultNaviPane; + + CTextListBoxModel* model = iListbox->Model(); + model->SetItemTextArray( iItems ); + } + + +// --------------------------------------------------------- +// CMmsSettingsDialog::ClosingDialogL +// +// --------------------------------------------------------- +// +TBool CMmsSettingsDialog::ClosingDialogL() + { + //if user selects exit or outside exit occurs, no ap checks are made. + return CheckAndCorrectAccessPointL(); + } + +// --------------------------------------------------------- +// CMmsSettingsDialog::GetServiceSettingsValuesL +// Gets the values for the mms service settings and puts them in +// to the listbox. Text strings are from loc files. +// +// --------------------------------------------------------- +// +void CMmsSettingsDialog::GetServiceSettingsValuesL() + { + // Access point + TInt32 ap = iMmsSettings->AccessPoint( 0 ); + TBuf apName; + + GetNameForApL( ap, apName ); + SetArrayItem( EMmsSettingsAccessPoint, static_cast( ap ), apName ); + + TInt fetchHome = iMmsSettings->ReceivingModeHome(); + TInt fetchRoam = iMmsSettings->ReceivingModeForeign(); + + // if default value is not acceptable, choose next by keeping costs low + if ( fetchHome == EMmsReceivingAutomatic && + fetchRoam == EMmsReceivingAutomatic ) + { + SetArrayItem( EMmsSettingsReceivingMode, + EMmsSettingsReceivingAutomaticAlways ); + } + else if ( fetchHome == EMmsReceivingManual && + fetchRoam == EMmsReceivingManual ) + { + if ( ! ( iSettingsFlags & EReceivingAlwaysManualDisabled ) ) + { + SetArrayItem( EMmsSettingsReceivingMode, + EMmsSettingsReceivingManualAlways ); + } + else + { + if ( ! ( iSettingsFlags & EReceivingAutomaticHomeDisabled ) ) + { + SetArrayItem( EMmsSettingsReceivingMode, + EMmsSettingsReceivingAutomaticHome ); + } + else if ( ! ( iSettingsFlags & EReceivingOffDisabled ) ) + { + SetArrayItem( EMmsSettingsReceivingMode, + EMmsSettingsReceivingDisabledAlways ); + } + else + { + SetArrayItem( EMmsSettingsReceivingMode, + EMmsSettingsReceivingAutomaticAlways ); + } + } + } + else if ( fetchHome == EMmsReceivingReject && + fetchRoam == EMmsReceivingReject ) + { + if ( ! ( iSettingsFlags & EReceivingOffDisabled ) ) + { + SetArrayItem( EMmsSettingsReceivingMode, + EMmsSettingsReceivingDisabledAlways ); + } + else + { + if ( ! ( iSettingsFlags & EReceivingAlwaysManualDisabled ) ) + { + SetArrayItem( EMmsSettingsReceivingMode, + EMmsSettingsReceivingManualAlways ); + } + else if ( ! ( iSettingsFlags & EReceivingAutomaticHomeDisabled ) ) + { + SetArrayItem( EMmsSettingsReceivingMode, + EMmsSettingsReceivingAutomaticHome ); + } + else + { + SetArrayItem( EMmsSettingsReceivingMode, + EMmsSettingsReceivingAutomaticAlways ); + } + } + } + else + { + // Should always be automatic@home & manaul@roam + if ( ! ( iSettingsFlags & EReceivingAutomaticHomeDisabled ) ) + { + SetArrayItem( EMmsSettingsReceivingMode, + EMmsSettingsReceivingAutomaticHome ); + } + else + { + if ( ! ( iSettingsFlags & EReceivingAlwaysManualDisabled ) ) + { + SetArrayItem( EMmsSettingsReceivingMode, + EMmsSettingsReceivingManualAlways ); + } + else if ( ! ( iSettingsFlags & EReceivingOffDisabled ) ) + { + SetArrayItem( EMmsSettingsReceivingMode, + EMmsSettingsReceivingDisabledAlways ); + } + else + { + SetArrayItem( EMmsSettingsReceivingMode, + EMmsSettingsReceivingAutomaticAlways ); + } + } + } + + // Receiving anonymous messages + if ( iMmsSettings->AcceptAnonymousMessages() ) + { + SetArrayItem( EMmsSettingsReceivingAnonymous, EMmsSettingsYes ); + } + else + { + SetArrayItem( EMmsSettingsReceivingAnonymous, EMmsSettingsNo ); + } + + + // Receiving ads + if ( iMmsSettings->AcceptAdvertisementMessages() ) + { + SetArrayItem( EMmsSettingsReceivingAds, EMmsSettingsYes ); + } + else + { + SetArrayItem( EMmsSettingsReceivingAds, EMmsSettingsNo ); + } + + // Receive report + TBool deliveryReport = ( iMmsSettings->DeliveryReportWanted() == EMmsYes ); + if ( deliveryReport && iMmsSettings->ReadReplyReportWanted() == EMmsYes ) + { + SetArrayItem( EMmsSettingsReceiveReport, EMmsSettingsReceiveReportBoth ); + } + else if ( deliveryReport ) + { + SetArrayItem( EMmsSettingsReceiveReport, EMmsSettingsReceiveReportDelivery ); + } + else // read report only is not supported + { + SetArrayItem( EMmsSettingsReceiveReport, EMmsSettingsReceiveReportNone ); + } + + // Delivery report sending allowed and read report sending has both their own + // attribute. Writing the value takes care that both have same value. + // Read here only delivery report sending allowed attribute. + if ( iMmsSettings->DeliveryReportSendingAllowed() == EMmsDeliveryReportAllowedYes ) + { + SetArrayItem( EMmsSettingsDenyDeliveryReport, EMmsSettingsNo ); + } + else + { + SetArrayItem( EMmsSettingsDenyDeliveryReport, EMmsSettingsYes ); + } + + // Validity period + switch ( iMmsSettings->ExpiryInterval() ) + { + case KMmsValidityPeriod1h: + SetArrayItem( EMmsSettingsValidityPeriod, EMmsSettingsValidityPeriod1h ); + break; + case KMmsValidityPeriod6h: + SetArrayItem( EMmsSettingsValidityPeriod, EMmsSettingsValidityPeriod6h ); + break; + case KMmsValidityPeriod24h: + SetArrayItem( EMmsSettingsValidityPeriod, EMmsSettingsValidityPeriod24h ); + break; + case KMmsValidityPeriod3Days: + SetArrayItem( EMmsSettingsValidityPeriod, EMmsSettingsValidityPeriod3d ); + break; + case KMmsValidityPeriodWeek: + SetArrayItem( EMmsSettingsValidityPeriod, EMmsSettingsValidityPeriodWeek ); + break; + case KMmsValidityPeriodMax: + default: // default to max + SetArrayItem( EMmsSettingsValidityPeriod, EMmsSettingsValidityPeriodMaximum ); + break; + } + + // Image size + TInt32 imageWidth = iMmsSettings->ImageWidth(); + TInt32 imageHeight = iMmsSettings->ImageHeight(); + + if ( imageWidth == KMmsUniImageLargeWidth && imageHeight == KMmsUniImageLargeHeight ) + { + SetArrayItem( EMmsSettingsImageSize, EMmsSettingsImageLarge ); + } + else + { + SetArrayItem( EMmsSettingsImageSize, EMmsSettingsImageSmall ); + } + + SetArrayItem( EMmsSettingsCreationMode, GetCreationMode() ); + + } + + +// --------------------------------------------------------- +// CMmsSettingsDialog::SetArrayItem(TInt aIndex, TInt aCurrentNumber) +// Updates indexed item of listbox +// +// --------------------------------------------------------- +// +void CMmsSettingsDialog::SetArrayItem( TInt aIndex, TInt aCurrentNumber ) + { + iItems->At( aIndex ).iUserText.Copy( + ( *iItems->At( aIndex ).iMuiuSettingsItemArray )[aCurrentNumber]); + ( *iItems )[aIndex].iCurrentNumber = aCurrentNumber; + } + + +// --------------------------------------------------------- +// CMmsSettingsDialog::SetArrayItem(TInt aIndex, TInt aCurrentNumber, const TDesC& aUserText) +// Updates indexed item of listbox - user text formatted by the caller +// +// --------------------------------------------------------- +// +void CMmsSettingsDialog::SetArrayItem(TInt aIndex, TInt aCurrentNumber, const TDesC& aUserText) + { + iItems->At( aIndex ).iUserText.Copy( aUserText ); + ( *iItems )[aIndex].iCurrentNumber = aCurrentNumber; + } + + +// --------------------------------------------------------- +// CMmsSettingsDialog::HandleListBoxEventL(CEikListBox* aListBox, TListBoxEvent aEventType) +// Handles listbox event +// +// --------------------------------------------------------- +// +void CMmsSettingsDialog::HandleListBoxEventL( CEikListBox* /* aListBox */, + TListBoxEvent aEventType ) + { + switch ( aEventType ) + { + case EEventEnterKeyPressed: + case EEventItemSingleClicked: + HandleEditRequestL( iListbox->CurrentItemIndex(), ETrue ); + break; + default: + break; + } + + } + + +// --------------------------------------------------------- +// CMmsSettingsDialog::HandleListBoxEventL(CEikListBox* aListBox, TListBoxEvent aEventType) +// Handles listbox event +// +// --------------------------------------------------------- +// +TKeyResponse CMmsSettingsDialog::OfferKeyEventL( const TKeyEvent& aKeyEvent, TEventCode aType ) + { + TBool isDestructed( EFalse ); + if ( aType ==EEventKey + && aKeyEvent.iCode == EKeyEscape ) + { + isDestructed = ETrue; + } + + TKeyResponse ret = CAknDialog::OfferKeyEventL( aKeyEvent, aType ); + + if ( !isDestructed + && iSettingsFlags & EShouldExit ) + { + iExitCode = EMmsExit; + TryExitL( EAknSoftkeyCancel ); + } + + return ret; + } + +// --------------------------------------------------------- +// CMmsSettingsDialog::HandleEditRequestL(TInt aIndex, TBool aEnterPressed) +// Handles editing of a selected setting +// +// --------------------------------------------------------- +// +void CMmsSettingsDialog::HandleEditRequestL( TInt aIndex, TBool aEnterPressed ) + { + switch ( aIndex ) + { + case EMmsSettingsAccessPoint: + if ( EditAccessPointL() ) + { + // Cannot exit directly here - we are in the middle of HandleListBoxEvent + // Real exit is activated in OfferKeyEventL() + iSettingsFlags |= EShouldExit; + iExitCode = EMmsExit; + } + break; + case EMmsSettingsReceivingMode: + EditReceivingModeL(); + break; + case EMmsSettingsReceivingAnonymous: + EditReceivingAnonymousL( aEnterPressed ); + break; + case EMmsSettingsReceivingAds: + EditReceivingAdsL( aEnterPressed ); + break; + case EMmsSettingsReceiveReport: + EditReceiveReportsL( ); + break; + case EMmsSettingsDenyDeliveryReport: + EditDenySendingDeliveryReportsL( aEnterPressed ); + break; + case EMmsSettingsValidityPeriod: + EditValidityPeriodL(); + break; + case EMmsSettingsImageSize: + EditImageSizeL( aEnterPressed ); + break; + case EMmsSettingsCreationMode: + EditCreationModeL( aEnterPressed ); + break; + default: + __ASSERT_DEBUG( EFalse, Panic( EMmsSettingsWrongParameters ) ); + break; + } // switch + iListbox->DrawItem( aIndex ); + } + + +// --------------------------------------------------------- +// CMmsSettingsDialog::SetAndGetSettingItemL(TInt& aCurrentItem, TUint aList, TInt aItem) +// Sets the ui for the setting item and returns true if item selection +// is accepted. Selected value is passed as a parameter. +// +// --------------------------------------------------------- +// +TBool CMmsSettingsDialog::SetAndGetSettingItemL( TInt& aCurrentItem, + TInt aList, + TInt aItem) + { + TBool isOk = EFalse; + TResourceReader reader; + iEikonEnv->CreateResourceReaderLC( reader, aList ); + + CDesCArrayFlat* items = new ( ELeave ) CDesCArrayFlat( KSettingsGranularity ); + CleanupStack::PushL( items ); + + // Get the labels from resources + const TInt count = reader.ReadInt16(); + + for ( TInt loop = 0; loop < count; loop++ ) + { + HBufC* label = reader.ReadHBufCL(); + if ( ( aList == R_RECEIVING_MMS_LIST && ( iSettingsFlags & EReceivingAlwaysManualDisabled ) && loop == EMmsSettingsReceivingManualAlways ) || + ( aList == R_RECEIVING_MMS_LIST && ( iSettingsFlags & EReceivingOffDisabled ) && loop == EMmsSettingsReceivingDisabledAlways ) || + ( aList == R_RECEIVING_MMS_LIST && ( iSettingsFlags & EReceivingAutomaticHomeDisabled ) && loop == EMmsSettingsReceivingAutomaticHome ) || + ( aList == R_MMS_IMAGE_SIZE_LIST && iMmsSettings->CreationMode() == EMmsCreationModeRestricted && loop == EMmsSettingsImageLarge ) ) + { + delete label; + } + else + { + CleanupStack::PushL( label ); + TPtr pLabel = label->Des(); + AknTextUtils::DisplayTextLanguageSpecificNumberConversion( pLabel ); + items->AppendL( pLabel ); + CleanupStack::PopAndDestroy( label ); + } + label = NULL; + } + + if ( aList == R_RECEIVING_MMS_LIST ) + { + // 3. removed, update 4 + if ( ( iSettingsFlags & EReceivingAlwaysManualDisabled ) + && aCurrentItem == EMmsSettingsReceivingDisabledAlways ) + { + aCurrentItem--; + } + // 2. removed, update 3 & 4 + if ( ( iSettingsFlags & EReceivingAutomaticHomeDisabled ) + && aCurrentItem >= EMmsSettingsReceivingAutomaticHome ) + { + // Adjust the index for every setting that comes after AutomaticAtHome when it is hidden + aCurrentItem--; + } + } + + CAknRadioButtonSettingPage* dlg = new ( ELeave ) CAknRadioButtonSettingPage( + R_MMS_SETTING_PAGE, + aCurrentItem, + items ); + + dlg->SetSettingTextL( iItems->At( aItem ).iLabelText ); + if ( dlg->ExecuteLD( CAknSettingPage::EUpdateWhenChanged ) ) + { + // Adjust the index back after the user has made the selection + if ( aList == R_RECEIVING_MMS_LIST ) + { + // 2. removed, update 3 & 4 + if ( ( iSettingsFlags & EReceivingAutomaticHomeDisabled ) + && aCurrentItem >= EMmsSettingsReceivingAutomaticHome ) + { + // Adjust the index for every setting that comes after AutomaticAtHome when it is hidden + aCurrentItem++; + } + + // 3. removed, update 4 + if ( ( iSettingsFlags & EReceivingAlwaysManualDisabled ) + && aCurrentItem >= EMmsSettingsReceivingManualAlways ) + { + + aCurrentItem++; + } + } + + isOk = ETrue; + } + + CleanupStack::PopAndDestroy( 2 ); //items & reader + + return isOk; + } + +// --------------------------------------------------------- +// CMmsSettingsDialog::EditReceivingModeL() +// --------------------------------------------------------- +// +void CMmsSettingsDialog::EditReceivingModeL() + { + TInt currentItem = iItems->At( EMmsSettingsReceivingMode ).iCurrentNumber; + + if ( SetAndGetSettingItemL( + currentItem, + R_RECEIVING_MMS_LIST, + EMmsSettingsReceivingMode ) ) + { + switch ( currentItem ) + { + case EMmsSettingsReceivingAutomaticHome: + { + iMmsSettings->SetReceivingModeHome( EMmsReceivingAutomatic ); + iMmsSettings->SetReceivingModeForeign( EMmsReceivingManual ); + break; + } + case EMmsSettingsReceivingAutomaticAlways: + iMmsSettings->SetReceivingModeHome( EMmsReceivingAutomatic ); + iMmsSettings->SetReceivingModeForeign( EMmsReceivingAutomatic ); + break; + case EMmsSettingsReceivingManualAlways: + { + iMmsSettings->SetReceivingModeHome( EMmsReceivingManual ); + iMmsSettings->SetReceivingModeForeign( EMmsReceivingManual ); + break; + } + case EMmsSettingsReceivingDisabledAlways: + iMmsSettings->SetReceivingModeHome( EMmsReceivingReject ); + iMmsSettings->SetReceivingModeForeign( EMmsReceivingReject ); + break; + default: + break; + } + //to be sure that we have the selected item + iItems->At( EMmsSettingsReceivingMode ).iCurrentNumber = currentItem; + + SetArrayItem( EMmsSettingsReceivingMode, currentItem ); + } + } + + +// --------------------------------------------------------- +// CMmsSettingsDialog::EditReceivingAnonymousL +// Edits the value for receiving anonymous messages. +// +// --------------------------------------------------------- +// +void CMmsSettingsDialog::EditReceivingAnonymousL( TBool aEnterPressed ) + { + TBool isOk = EFalse; + TInt currentItem = iItems->At( EMmsSettingsReceivingAnonymous ).iCurrentNumber; + if ( aEnterPressed ) + { + currentItem ^= 1; + } + else + { + isOk = SetAndGetSettingItemL( + currentItem, + R_MMS_YES_NO_LIST, + EMmsSettingsReceivingAnonymous ); + } + + if ( aEnterPressed || isOk ) + { + switch ( currentItem ) + { + case EMmsSettingsNo: + iMmsSettings->SetAcceptAnonymousMessages( EFalse ); + break; + case EMmsSettingsYes: // flow through + default: + iMmsSettings->SetAcceptAnonymousMessages( ETrue ); + break; + } + SetArrayItem( EMmsSettingsReceivingAnonymous, currentItem ); + CEikFormattedCellListBox* settingListBox = + static_cast( Control(EDlgSettingListBox ) ); + settingListBox->DrawNow(); + } + } + + +// --------------------------------------------------------- +// CMmsSettingsDialog::EditReceivingAdsL +// Edits the value for receiving advertisements +// +// --------------------------------------------------------- +// +void CMmsSettingsDialog::EditReceivingAdsL( TBool aEnterPressed ) + { + TBool isOk = EFalse; + TInt currentItem = iItems->At( EMmsSettingsReceivingAds ).iCurrentNumber; + if ( aEnterPressed ) + { + currentItem ^= 1; + } + else + { + isOk = SetAndGetSettingItemL( + currentItem, + R_MMS_YES_NO_LIST, + EMmsSettingsReceivingAds ); + } + + if (aEnterPressed || isOk) + { + switch (currentItem) + { + case EMmsSettingsNo: + iMmsSettings->SetAcceptAdvertisementMessages( EFalse ); + break; + case EMmsSettingsYes: // flow through + default: + iMmsSettings->SetAcceptAdvertisementMessages( ETrue ); + break; + } + SetArrayItem(EMmsSettingsReceivingAds, currentItem); + CEikFormattedCellListBox* settingListBox = + static_cast( Control( EDlgSettingListBox ) ); + settingListBox->DrawNow(); + } + } +// --------------------------------------------------------- +// CMmsSettingsDialog::EditReceiveReportsL +// Edits the value for receiving reports. +// +// --------------------------------------------------------- +// +void CMmsSettingsDialog::EditReceiveReportsL( ) + { + TInt currentItem = iItems->At( EMmsSettingsReceiveReport ).iCurrentNumber; + + if ( SetAndGetSettingItemL( + currentItem, + R_MCE_MMS_REPORTS, + EMmsSettingsReceiveReport ) ) + { + SetReceiveReportSetting( static_cast( currentItem ) ); + } + SetArrayItem( EMmsSettingsReceiveReport, currentItem ); + CEikFormattedCellListBox* settingListBox = + static_cast( Control( EDlgSettingListBox ) ); + settingListBox->DrawNow(); + } + +// --------------------------------------------------------- +// SetReceiveReportSetting( TMmsSettingsReceiveReportValues aReceiveReport ) +// Stores the value for receive report settings. +// +// --------------------------------------------------------- +// +void CMmsSettingsDialog::SetReceiveReportSetting( TMmsSettingsReceiveReportValues aReceiveReport ) + { + switch ( aReceiveReport ) + { + case EMmsSettingsReceiveReportBoth: + iMmsSettings->SetDeliveryReportWanted( EMmsYes ); + iMmsSettings->SetReadReplyReportWanted( EMmsYes ); + break; + case EMmsSettingsReceiveReportDelivery: + iMmsSettings->SetDeliveryReportWanted( EMmsYes ); + iMmsSettings->SetReadReplyReportWanted( EMmsNo ); + break; + case EMmsSettingsReceiveReportNone: + iMmsSettings->SetDeliveryReportWanted( EMmsNo ); + iMmsSettings->SetReadReplyReportWanted( EMmsNo ); + break; + default: + __ASSERT_DEBUG_NO_LEAVE( Panic( EMmsSettingsWrongParameters ) ); + iMmsSettings->SetDeliveryReportWanted( EMmsNo ); + iMmsSettings->SetReadReplyReportWanted( EMmsNo ); + break; + } + } +// --------------------------------------------------------- +// CMmsSettingsDialog::EditDenySendingDeliveryReportL +// Edits the value for sending delivery reports. +// +// --------------------------------------------------------- +// +void CMmsSettingsDialog::EditDenySendingDeliveryReportsL( TBool aEnterPressed ) + { + TBool isOk = EFalse; + TInt currentItem = iItems->At( EMmsSettingsDenyDeliveryReport ).iCurrentNumber; + + if ( aEnterPressed ) + { + currentItem ^= 1; + } + else + { + isOk = SetAndGetSettingItemL( + currentItem, + R_MMS_YES_NO_LIST, + EMmsSettingsDenyDeliveryReport ); + } + + if ( aEnterPressed || isOk ) + { + switch ( currentItem ) + { + case EMmsSettingsNo: + iMmsSettings->SetDeliveryReportSendingAllowed( EMmsDeliveryReportAllowedYes ); + iMmsSettings->SetReadReplyReportSendingAllowed( ETrue ); + break; + case EMmsSettingsYes: // flow through + default: + iMmsSettings->SetDeliveryReportSendingAllowed( EMmsDeliveryReportAllowedNo ); + iMmsSettings->SetReadReplyReportSendingAllowed( EFalse ); + break; + } + SetArrayItem( EMmsSettingsDenyDeliveryReport, currentItem ); + CEikFormattedCellListBox* settingListBox = + static_cast( Control( EDlgSettingListBox ) ); + settingListBox->DrawNow(); + } + } + + +// --------------------------------------------------------- +// CMmsSettingsDialog::EditValidityPeriodL +// Edits the value for validity period +// +// --------------------------------------------------------- +// +void CMmsSettingsDialog::EditValidityPeriodL() + { + TInt currentItem = iItems->At( EMmsSettingsValidityPeriod ).iCurrentNumber; + + if (SetAndGetSettingItemL( currentItem, R_MMS_VALIDITY_PERIOD_LIST, EMmsSettingsValidityPeriod )) + { + switch (currentItem) + { + case EMmsSettingsValidityPeriod1h: + SetValidityPeriodSetting( KMmsValidityPeriod1h ); + break; + case EMmsSettingsValidityPeriod6h: + SetValidityPeriodSetting( KMmsValidityPeriod6h ); + break; + case EMmsSettingsValidityPeriod24h: + SetValidityPeriodSetting( KMmsValidityPeriod24h ); + break; + case EMmsSettingsValidityPeriod3d: + SetValidityPeriodSetting( KMmsValidityPeriod3Days ); + break; + case EMmsSettingsValidityPeriodWeek: + SetValidityPeriodSetting( KMmsValidityPeriodWeek ); + break; + case EMmsSettingsValidityPeriodMaximum: + default: // default to max + SetValidityPeriodSetting( KMmsValidityPeriodMax ); + break; + } + SetArrayItem( EMmsSettingsValidityPeriod, currentItem ); + } + } + + +// --------------------------------------------------------- +// CMmsSettingsDialog::SetValidityPeriodSetting(TInt32 aValidityPeriod) +// Stores the value for validity period settings. +// +// --------------------------------------------------------- +// +void CMmsSettingsDialog::SetValidityPeriodSetting( TInt32 aValidityPeriod ) + { + iMmsSettings->SetExpiryInterval( aValidityPeriod ); + } + +// --------------------------------------------------------- +// CMmsSettingsDialog::EditAccessPointL +// +// --------------------------------------------------------- +// +TBool CMmsSettingsDialog::EditAccessPointL() + { + TUint32 currentItem = iItems->At( EMmsSettingsAccessPoint ).iCurrentNumber; + + + TInt bearers = EApBearerTypeGPRS; + if ( iSettingsFlags & ECSDEnabled ) + { + bearers |= ( EApBearerTypeCSD | EApBearerTypeHSCSD ); + } + + TUint32 selectedAp = KMaxTUint32; // invalid value + TInt taskDone = MmsApSelect::SelectMmsAccessPointL( + *iCommsDb, + currentItem, + selectedAp, + bearers ); + + // Note: taskDone == KApUiEventDeleted is not handled here. + // Basically the user can delete the AP that was selected. This is noticed + // & complained when closing Settings dialog. + CApUtils* apUtils = CApUtils::NewLC( *iCommsDb ); + TBuf apName; + + if( !ApExistsL( apUtils, currentItem ) && taskDone == 0 ) //if ap has been deleted, set "must be defined" + { + selectedAp = 0; + }//if + else if( selectedAp == KMaxTUint32 ) + { + selectedAp = currentItem; + } + GetNameForApL( selectedAp, apName ); + SetArrayItem( EMmsSettingsAccessPoint, selectedAp, apName ); + + // Use cases numbered: + if ( taskDone || selectedAp != 0 ) + { + // 1) sp selected + // 2) previously ap selected but 'back' now + // 3) none selected + while ( iMmsSettings->AccessPointCount() ) + { + iMmsSettings->DeleteAccessPointL( 0 ); + } + + if ( selectedAp != 0 ) + { + // 1) sp selected, 2) previously ap selected but 'back' now + iMmsSettings->AddAccessPointL( selectedAp, 0 ); + } + } + // else - 4) previously none selected and 'back' now + + CleanupStack::PopAndDestroy(); // apUtils + + return ( taskDone & ( KApUiEventExitRequested | KApUiEventShutDownRequested ) ); + } + + +// --------------------------------------------------------- +// CMmsSettingsDialog::GetNameForApL +// Get a name for the given access point id +// +// --------------------------------------------------------- +// +void CMmsSettingsDialog::GetNameForApL( TUint32 aId, TDes& aName ) + { + aName.Zero(); + CApUtils* apUtils = CApUtils::NewLC( *iCommsDb ); + if ( !ApExistsL( apUtils, aId ) ) + { + // No access point -> "Compulsory" + HBufC* text = iEikonEnv->AllocReadResourceLC( R_MMS_SETTINGS_COMPULSORY ); + aName.Copy( *text ); + CleanupStack::PopAndDestroy(); // text + } + else + { + apUtils->NameL( aId, aName ); + } + CleanupStack::PopAndDestroy(); // apUtils + } + + +// --------------------------------------------------------- +// CMmsSettingsDialog::EditImageSizeL +// Edits the value for image size setting. +// +// --------------------------------------------------------- +// +void CMmsSettingsDialog::EditImageSizeL( TBool aEnterPressed ) + { + TBool isOk = EFalse; + TInt currentItem = iItems->At( EMmsSettingsImageSize ).iCurrentNumber; + + if ( aEnterPressed && + iMmsSettings->CreationMode() != EMmsCreationModeRestricted ) + { + currentItem ^= 1; + isOk = ETrue; + } + else + { + // We come here either from "Options -> Change" or with selection key + // in "restricted" mode (opens a list with a single item). + isOk = SetAndGetSettingItemL( + currentItem, + R_MMS_IMAGE_SIZE_LIST, + EMmsSettingsImageSize ); + } + + if ( isOk ) + { + switch ( currentItem ) + { + case EMmsSettingsImageLarge: + iMmsSettings->SetImageWidth( KMmsUniImageLargeWidth ); + iMmsSettings->SetImageHeight( KMmsUniImageLargeHeight ); + break; + case EMmsSettingsImageSmall: // flow through + default: + iMmsSettings->SetImageWidth( KMmsUniImageSmallWidth ); + iMmsSettings->SetImageHeight( KMmsUniImageSmallHeight ); + break; + } + SetArrayItem( EMmsSettingsImageSize, currentItem ); + CEikFormattedCellListBox* settingListBox = + static_cast( Control( EDlgSettingListBox ) ); + settingListBox->DrawNow(); + } + } + + +// --------------------------------------------------------- +// CMmsSettingsDialog::EditCreationModeL +// Edits the value for creation mode setting. +// +// --------------------------------------------------------- +// +void CMmsSettingsDialog::EditCreationModeL( TBool /*aEnterPressed*/ ) + { + if ( !( iSettingsFlags & ECreationModeChangeEnabled ) ) + { + ShowInformationNoteL( R_MMSUI_INFO_CANNOT_CHANGE_CMODE ); + return; + } + + TInt enumMode = EMmsSettingsCreationMode; + + TInt currentItem = iItems->At( enumMode ).iCurrentNumber; + + if ( SetAndGetSettingItemL( currentItem, R_MMS_CREATION_MODE_LIST, enumMode) ) + { + TInt32 oldMode = GetCreationMode(); + switch ( currentItem ) + { + case EMmsSettingsCreationModeRestricted: + iMmsSettings->SetCreationMode( EMmsCreationModeRestricted ); + if ( oldMode != currentItem && + ( iMmsSettings->ImageWidth() != KMmsUniImageSmallWidth || + iMmsSettings->ImageHeight() != KMmsUniImageSmallHeight ) ) + { + iMmsSettings->SetImageWidth( KMmsUniImageSmallWidth ); + iMmsSettings->SetImageHeight( KMmsUniImageSmallHeight ); + SetArrayItem( EMmsSettingsImageSize, EMmsSettingsImageSmall ); + ShowInformationNoteL( R_MMSUI_INFO_IMAGE_SIZE_CHANGED ); + iListbox->DrawItem( EMmsSettingsImageSize ); + } + break; + case EMmsSettingsCreationModeFree: + { + if ( oldMode != currentItem ) + { + CAknQueryDialog* confirmQuery = CAknQueryDialog::NewL(); + if ( confirmQuery->ExecuteLD( R_MMSUI_QUERY_CHANGE_TO_FREE ) ) + { + iMmsSettings->SetCreationMode( EMmsCreationModeFree ); + } + else + { + currentItem = oldMode; + } + } + } + break; + default: + case EMmsSettingsCreationModeGuided: + iMmsSettings->SetCreationMode( EMmsCreationModeWarning ); + break; + } + SetArrayItem( enumMode, currentItem ); + } + + } + +// --------------------------------------------------------- +// CMmsSettingsDialog::GetCreationMode +// Maps creation mode value from engine to SettingsDialog values +// +// --------------------------------------------------------- +// +TInt32 CMmsSettingsDialog::GetCreationMode() + { + switch ( iMmsSettings->CreationMode() ) + { + case EMmsCreationModeRestricted: + return EMmsSettingsCreationModeRestricted; + case EMmsCreationModeFree: + return EMmsSettingsCreationModeFree; + case EMmsCreationModeWarning: + default: + return EMmsSettingsCreationModeGuided; + } + } + +// --------------------------------------------------------- +// CMmsSettingsDialog::SetTitleTextL() +// Makes the status pane +// +// --------------------------------------------------------- +// +void CMmsSettingsDialog::SetTitleTextL() + { + CEikStatusPane *sp = ( static_cast + ( CEikonEnv::Static()->EikAppUi() ) )->StatusPane(); + iTitlePane = static_cast + ( sp->ControlL( TUid::Uid( EEikStatusPaneUidTitle ) ) ); + + //save old title + iPreviousTitleText = ( *iTitlePane->Text() ).Alloc(); + + // set new title + HBufC* text = text = StringLoader::LoadLC( R_MMS_SETTINGS_TITLE_TEXT ); + iTitlePane->SetTextL( *text ); + CleanupStack::PopAndDestroy(); // text + } + + +// --------------------------------------------------------- +// CMmsSettingsDialog::LaunchHelpL +// launch help using context +// +// --------------------------------------------------------- +// +void CMmsSettingsDialog::LaunchHelpL() + { + if ( iSettingsFlags & EHelpFeatureSupported ) + { + CCoeAppUi* editorAppUi = static_cast( ControlEnv()->AppUi() ); + + CArrayFix* helpContext = editorAppUi->AppHelpContextL(); + HlpLauncher::LaunchHelpApplicationL( iEikonEnv->WsSession(), helpContext ); + } + } + + +// --------------------------------------------------------- +// CMmsSettingsDialog::GetHelpContext +// returns helpcontext as aContext +// +// --------------------------------------------------------- +// +void CMmsSettingsDialog::GetHelpContext + ( TCoeHelpContext& aContext ) const + { + if ( iSettingsFlags & EHelpFeatureSupported ) + { + aContext.iMajor = KUidMce; + aContext.iContext = KMCE_HLP_SETTINGS_MMS; + } + } + +// --------------------------------------------------------- +// CMmsSettingsDialog::ShowInformationNoteL +// --------------------------------------------------------- +// +void CMmsSettingsDialog::ShowInformationNoteL( TInt aResourceId ) + { + CAknInformationNote* note = new ( ELeave ) CAknInformationNote( ETrue ); + HBufC* string = StringLoader::LoadLC( aResourceId ); + note->ExecuteLD( *string ); + CleanupStack::PopAndDestroy(); //string + } + +// End of File