diff -r 594d59766373 -r 7d48bed6ce0c cbs/cbsui/UiSrc/ccbsuisettingsviewcontainer.cpp --- a/cbs/cbsui/UiSrc/ccbsuisettingsviewcontainer.cpp Thu Aug 19 10:28:14 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,683 +0,0 @@ -/* -* Copyright (c) 2002-2010 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: -* Implementation of CCbsUiSettingsViewContainer. -* -* -*/ - - -// INCLUDES -#include // For feature flags -#include // FeatureManager -#include // CAknErrorNote -#include -#include -#include -#include -#include -#include // CRepository -#include // KCRUidCoreApplicationUIs, TCoreAppUIsNetworkConnectionAllowed -#include "CbsUiId.h" -#include -#include // KEikDynamicLayoutVariantSwitch -#include "MCbs.h" -#include "ccbsuisettingsviewcontainer.h" -#include "CCbsUiSettingsView.h" -#include "CbsUiConstants.h" -#include "CCbsUiLanguageSettingPage.h" -#include "CbsUiPanic.h" - - - -// CONSTANTS - -// exact number of items in selection list -const TInt KNumberOfItemsInSelectionPage = 3; - -// There should be only one item in the list box before, which -// is reception. -const TInt KPreciseNumberOfItemsBeforeLanguage = 1; -const TInt KNumberOfOnOfItems = 2; - - - - -// MODULE DATA STRUCTURES -enum TCbsUiSettingValues { EReception, ELanguage, ETopicDetection }; - -// to select right item in setting_items_with_two_available_values -enum TCbsUiSettingOnOff - { - ESettingOn = 0, - ESettingOff - }; - -// ================= MEMBER FUNCTIONS ======================= - -// C++ default constructor can NOT contain any code, that -// might leave. -// -CCbsUiSettingsViewContainer::CCbsUiSettingsViewContainer( - CCbsUiSettingsView& aView, - MCbs& aServer ) - : iView( aView ), iServer( aServer ) - { - } - -// Symbian OS default constructor can leave. -void CCbsUiSettingsViewContainer::ConstructL( const TRect& aRect ) - { - CreateWindowL(); - SetMopParent(&iView); - CreateListBoxL(); - SetRect( aRect ); - - // Prepare FeatureManager, read values to members and uninitialize FeatureManager - FeatureManager::InitializeLibL(); - iOfflineFeatureSupported = FeatureManager::FeatureSupported( KFeatureIdOfflineMode ); - } - -// Two-phased constructor. -CCbsUiSettingsViewContainer* CCbsUiSettingsViewContainer::NewL( - CCbsUiSettingsView& aView, - const TRect& aRect, - MCbs& aServer ) - { - CCbsUiSettingsViewContainer* self = - new (ELeave) CCbsUiSettingsViewContainer(aView, aServer); - - CleanupStack::PushL(self); - self->ConstructL(aRect); - CleanupStack::Pop(); - - return self; - } - -// Destructor -CCbsUiSettingsViewContainer::~CCbsUiSettingsViewContainer() - { - delete iListBox; - FeatureManager::UnInitializeLib(); - } - -// --------------------------------------------------------- -// CCbsUiSettingsViewContainer::CountComponentControls -// -// -// --------------------------------------------------------- -// -TInt CCbsUiSettingsViewContainer::CountComponentControls() const - { - return 1; - } - -// --------------------------------------------------------- -// CCbsUiSettingsViewContainer::ComponentControl -// -// -// --------------------------------------------------------- -// -CCoeControl* CCbsUiSettingsViewContainer::ComponentControl( TInt aIndex ) const - { - CCoeControl* control = NULL; - - switch ( aIndex ) - { - case 0: - control = iListBox; - break; - default: - break; - } - - return control; - } - -// --------------------------------------------------------- -// CCbsUiSettingsViewContainer::OfferKeyEventL -// -// -// --------------------------------------------------------- -// -TKeyResponse CCbsUiSettingsViewContainer::OfferKeyEventL( - const TKeyEvent& aKeyEvent, - TEventCode aType ) - { - return iListBox->OfferKeyEventL( aKeyEvent, aType ); - } - -// --------------------------------------------------------- -// CCbsUiSettingsViewContainer::SizeChanged -// -// -// --------------------------------------------------------- -// -void CCbsUiSettingsViewContainer::SizeChanged() - { - iListBox->SetRect( Rect() ); - } - - -// --------------------------------------------------------- -// CCbsUiSettingsViewContainer::FocusChanged -// --------------------------------------------------------- -// -void CCbsUiSettingsViewContainer::FocusChanged( TDrawNow aDrawNow ) - { - CCoeControl::FocusChanged( aDrawNow ); - if( iListBox ) - { - iListBox->SetFocus( IsFocused(), aDrawNow ); - } - } - - -// --------------------------------------------------------- -// CCbsUiSettingsViewContainer::CreateListBoxL -// -// -// --------------------------------------------------------- -// -void CCbsUiSettingsViewContainer::CreateListBoxL() - { - iListBox = new (ELeave) CAknSettingStyleListBox; - iListBox->SetContainerWindowL( *this ); - iListBox->ConstructL( this, EAknListBoxSelectionListWithShortcuts ); - iListBox->SetListBoxObserver( this ); - iListBox->CreateScrollBarFrameL( ETrue ); - iListBox->ScrollBarFrame()->SetScrollBarVisibilityL( CEikScrollBarFrame::EOff, - CEikScrollBarFrame::EAuto ); - GetSettingsL(); - } - - -// --------------------------------------------------------- -// CCbsUiSettingsViewContainer::GetSettingsL -// -// -// --------------------------------------------------------- -// -void CCbsUiSettingsViewContainer::GetSettingsL() - { - __ASSERT_DEBUG( iListBox, CbsUiPanic(EListBoxNullError) ); - - MDesCArray* itemList = - STATIC_CAST(CEikFormattedCellListBox*, - iListBox)->Model()->ItemTextArray(); - - CDesCArray* itemArray = STATIC_CAST(CDesCArray*, itemList); - - itemArray->Reset(); - - TBool status; - iServer.GetReceptionStatus(status); - - TInt resourceId(R_TEXT_RECEPTION_ON); - - if ( !status ) - { - resourceId = R_TEXT_RECEPTION_OFF; - } - - HBufC* reception = iCoeEnv->AllocReadResourceLC(resourceId); - itemArray->AppendL(*reception); - CleanupStack::PopAndDestroy(); // reception - - // This must be here, don't move; otherwise order - // is different in the list box. - SetLanguageSelectionL(*itemArray); - - iServer.GetTopicDetectionStatus(status); - resourceId = R_TEXT_DETECTION_ON; - - if ( !status ) - { - resourceId = R_TEXT_DETECTION_OFF; - } - - HBufC* detection = iCoeEnv->AllocReadResourceLC(resourceId); - - itemArray->AppendL(*detection); - CleanupStack::PopAndDestroy(); // detection - - iListBox->HandleItemAdditionL(); - - } - - -// --------------------------------------------------------- -// CCbsUiSettingsViewContainer::PrepareLanguageSettingPageL -// -// -// --------------------------------------------------------- -// -void CCbsUiSettingsViewContainer::PrepareLanguageSettingPageL() - { - - CDesCArrayFlat* items = - new (ELeave) CDesCArrayFlat(KNumberOfItemsInSelectionPage); - CleanupStack::PushL(items); - - AddItemsToListL( - R_CBS_LANGUAGE_SETTING_PAGE_ARRAY, *items); - - TInt selected( GetSelected() ); - - LaunchLanguageSettingPageL(*items, selected); - - CleanupStack::PopAndDestroy(); // items - - } - -// --------------------------------------------------------- -// CCbsUiSettingsViewContainer::GetSelected -// -// -// --------------------------------------------------------- -// -TCbsUiLanguageSelectionIndex CCbsUiSettingsViewContainer::GetSelected() - { - TCbsDbLanguages dbLanguages; - iServer.GetLanguages(dbLanguages); - - TCbsUiLanguageSelectionIndex result(ECbsUiSelected); - - if ( dbLanguages.iLanguages[ECbsAll] ) - { - result = ECbsUiAll; - } - else if ( dbLanguages.iLanguages[ECbsOther] ) - { - result = ECbsUiOther; - } - else - { - result = ECbsUiSelected; - } - - return result; - } - -// --------------------------------------------------------- -// CCbsUiSettingsViewContainer::LaunchLanguageSettingPageL -// -// -// --------------------------------------------------------- -// -void CCbsUiSettingsViewContainer::LaunchLanguageSettingPageL( - CDesCArrayFlat& aItems, TInt& aCurrentSelectionIndex ) - { - __ASSERT_DEBUG( - aCurrentSelectionIndex >= ECbsUiAll && - aCurrentSelectionIndex <= ECbsUiOther, - CbsUiPanic(EErrIndexOutOfBounds) ); - __ASSERT_DEBUG( aItems.Count() == 3, CbsUiPanic(EErrInvalidValue) ); - - CCbsUiLanguageSettingPage* languagePage = - new (ELeave) CCbsUiLanguageSettingPage( - R_LANGUAGE_SETTING_PAGE, aCurrentSelectionIndex, - &aItems, iServer); - - languagePage->ExecuteLD(CAknSettingPage::EUpdateWhenChanged); - } - -// --------------------------------------------------------- -// CCbsUiSettingsViewContainer::AddItemsToListL -// -// -// --------------------------------------------------------- -// -void CCbsUiSettingsViewContainer::AddItemsToListL( - TInt aResourceId, - CDesCArrayFlat& aItemList ) const - { - __ASSERT_DEBUG(aResourceId >= 0, CbsUiPanic(EErrInvalidValue) ); - __ASSERT_DEBUG( aItemList.MdcaCount() == 0, CbsUiPanic(EErrInvalidValue) ); - - TResourceReader reader; - iCoeEnv->CreateResourceReaderLC(reader, aResourceId); - TInt count( reader.ReadInt16() ); - - for ( TInt i(0); i < count; i++ ) - { - HBufC* selectableItem = reader.ReadHBufCL(); - - CleanupStack::PushL(selectableItem); - aItemList.AppendL(*selectableItem); - CleanupStack::PopAndDestroy(); // selectableItem - } - - CleanupStack::PopAndDestroy(); // reader - } - - -// --------------------------------------------------------- -// CCbsUiSettingsViewContainer::HandleListViewActionL -// -// -// --------------------------------------------------------- -// -TKeyResponse CCbsUiSettingsViewContainer::HandleListViewActionL( - const CEikListBox* aListBox, TBool aLaunchedFromOptionMenu ) - { - __ASSERT_DEBUG( aListBox, CbsUiPanic(EErrNullPointer) ); - - switch ( aListBox->CurrentItemIndex() ) - { - case EReception: - { - if ( IsPhoneOfflineL() ) - { - // If is in offline mode, don't set reception on or off(Only error note) - HBufC* text = iCoeEnv->AllocReadResourceLC( R_QTN_OFFLINE_NOT_POSSIBLE ); - CAknErrorNote* note = new (ELeave) CAknErrorNote( ETrue ); - note->ExecuteLD( *text ); - CleanupStack::PopAndDestroy( ); //text - } - else - { - TBool reception; - TBool update(ETrue); // if value need to be updated - iServer.GetReceptionStatus(reception); - if ( aLaunchedFromOptionMenu ) - { - LaunchDialogOnOffL(reception, update, R_TEXT_RECEPTION); - } - if ( update ) - { - if ( !reception ) - { - // Reception is off. -> Set reception On - User::LeaveIfError( iServer.SetReceptionStatus( ETrue ) ); - } - else - { - // Reception is On. -> Set reception Off - User::LeaveIfError( iServer.SetReceptionStatus( EFalse ) ); - } - } - } - break; - } - case ELanguage: - { - PrepareLanguageSettingPageL(); - break; - } - case ETopicDetection: - { - TBool detection; - TBool update(ETrue); - - iServer.GetTopicDetectionStatus(detection); - - if ( aLaunchedFromOptionMenu ) - { - LaunchTopicDetectionDialogOnOffL(detection, update, R_TEXT_TOPIC_DETECTION); - } - - if ( update ) - { - User::LeaveIfError( iServer.SetTopicDetectionStatus(!detection) ); - } - break; - } - default: - break; - } - - GetSettingsL(); - - return EKeyWasConsumed; - } - -// --------------------------------------------------------- -// CCbsUiSettingsViewContainer::LaunchDialogOnOffL -// -// -// --------------------------------------------------------- -// -void CCbsUiSettingsViewContainer::LaunchDialogOnOffL( - const TBool& aValue, TBool& aUpdate, TInt aResourceId ) const - { - TInt selected( aValue ? ESettingOn : ESettingOff ); - - CDesCArrayFlat* items = - new (ELeave) CDesCArrayFlat(KNumberOfOnOfItems); - CleanupStack::PushL(items); - - AddItemsToListL(R_CBS_ON_OFF_ARRAY, *items); - - HBufC* settingText = iCoeEnv->AllocReadResourceL(aResourceId); - CleanupStack::PushL(settingText); - - CAknRadioButtonSettingPage* dlg = - new (ELeave) CAknRadioButtonSettingPage( - R_ON_OFF_SETTING_PAGE, selected, items); - - CleanupStack::PushL(dlg); - dlg->SetSettingTextL(*settingText); - CleanupStack::Pop(); // dlg - - dlg->ExecuteLD(CAknSettingPage::EUpdateWhenChanged); - - CleanupStack::PopAndDestroy(); // settingText - - TBool valueNotChanged( - selected == (aValue ? ESettingOn : ESettingOff) ); - if ( valueNotChanged ) - { - aUpdate = EFalse; - } - - CleanupStack::PopAndDestroy(); // items - } - - -// --------------------------------------------------------- -// CCbsUiSettingsViewContainer::LaunchTopicDetectionDialogOnOffL -// -// -// --------------------------------------------------------- -// -void CCbsUiSettingsViewContainer::LaunchTopicDetectionDialogOnOffL( - const TBool& aValue, TBool& aUpdate, TInt aResourceId ) const - { - TInt selected( aValue ? ESettingOn : ESettingOff ); - - CDesCArrayFlat* items = - new (ELeave) CDesCArrayFlat(KNumberOfOnOfItems); - CleanupStack::PushL(items); - - AddItemsToListL(R_CBS_TOPIC_DETECTION_ON_OFF_ARRAY, *items); - - HBufC* settingText = iCoeEnv->AllocReadResourceL(aResourceId); - CleanupStack::PushL(settingText); - - CAknRadioButtonSettingPage* dlg = - new (ELeave) CAknRadioButtonSettingPage( - R_ON_OFF_SETTING_PAGE, selected, items); - - CleanupStack::PushL(dlg); - dlg->SetSettingTextL(*settingText); - CleanupStack::Pop(); // dlg - - dlg->ExecuteLD(CAknSettingPage::EUpdateWhenChanged); - - CleanupStack::PopAndDestroy(); // settingText - - TBool valueNotChanged( - selected == (aValue ? ESettingOn : ESettingOff) ); - if ( valueNotChanged ) - { - aUpdate = EFalse; - } - - CleanupStack::PopAndDestroy(); // items - } - -// --------------------------------------------------------- -// CCbsUiSettingsViewContainer::HandleListViewActiontL -// -// -// --------------------------------------------------------- -// -TKeyResponse CCbsUiSettingsViewContainer::HandleListViewActionL( - TBool aLaunchedFromOptionMenu ) - { - if ( iListBox ) - { - return HandleListViewActionL(iListBox, aLaunchedFromOptionMenu); - } - return EKeyWasNotConsumed; - } - -// --------------------------------------------------------- -// CCbsUiSettingsViewContainer::UpdateSettingsL -// -// -// --------------------------------------------------------- -// -void CCbsUiSettingsViewContainer::UpdateSettingsL() - { - GetSettingsL(); - } - -// --------------------------------------------------------- -// CCbsUiSettingsViewContainer::SetFocusToFirstItem -// -// -// --------------------------------------------------------- -// -void CCbsUiSettingsViewContainer::SetFocusToFirstItem() const - { - __ASSERT_DEBUG( iListBox, CbsUiPanic(EErrNullPointer) ); - iListBox->SetCurrentItemIndexAndDraw(0); - } - -// --------------------------------------------------------- -// CCbsUiSettingsViewContainer::HandleListBoxEventL -// -// -// --------------------------------------------------------- -// -void CCbsUiSettingsViewContainer::HandleListBoxEventL( - CEikListBox* aListBox, - TListBoxEvent aEventType ) - { - if ( EEventEnterKeyPressed == aEventType - || EEventItemSingleClicked == aEventType ) - { - HandleListViewActionL(aListBox, EFalse); - } - } - - -// --------------------------------------------------------- -// CCbsUiSettingsViewContainer::SetLanguageSelectionL -// -// -// --------------------------------------------------------- -// -void CCbsUiSettingsViewContainer::SetLanguageSelectionL( - CDesCArray& aItemArray ) - { - TInt count( aItemArray.MdcaCount() ); - - __ASSERT_ALWAYS( count == KPreciseNumberOfItemsBeforeLanguage, - CbsUiPanic(EErrIndexOutOfBounds) ); - - if ( count == KPreciseNumberOfItemsBeforeLanguage ) - { - TInt textId(R_TEXT_LANGUAGE_ALL); - - switch ( GetSelected() ) - { - case ECbsUiAll: - // do nothing - break; - case ECbsUiSelected: - textId = R_TEXT_LANGUAGE_SELECTED; - break; - case ECbsUiOther: - textId = R_TEXT_LANGUAGE_OTHER; - break; - default: - break; - } - - HBufC* language = iCoeEnv->AllocReadResourceLC(textId); - aItemArray.AppendL(*language); - - CleanupStack::PopAndDestroy(); // language - } - } - - -// --------------------------------------------------------- -// CCbsUiSettingsViewContainer::GetHelpContext -// -// Gets the control's help context. -// --------------------------------------------------------- -// -void CCbsUiSettingsViewContainer::GetHelpContext( - TCoeHelpContext& aContext ) const - { - aContext.iMajor = TUid::Uid(0x100058C5); // Messaging MCE UID - aContext.iContext = KMCE_HLP_SETTINGS_CB; - } - - -// ---------------------------------------------------- -// CCbsUiSettingsViewContainer::HandleResourceChange -// -// ---------------------------------------------------- -void CCbsUiSettingsViewContainer::HandleResourceChange( TInt aType ) - { - CCoeControl::HandleResourceChange( aType ); - - if( aType == KEikDynamicLayoutVariantSwitch ) - { - iView.HandleRectChangeInContainer(); - } - } - - -// --------------------------------------------------------- -// CCbsUiSettingsViewContainer::IsPhoneOfflineL -// -// Checks if phone is in offline mode or not. -// Return ETrue if phone is in offline mode. -// Return EFalse if phone is not in offline mode. -// --------------------------------------------------------- -// -TBool CCbsUiSettingsViewContainer::IsPhoneOfflineL() const - { - if ( iOfflineFeatureSupported ) - { - CRepository* repository = CRepository::NewLC( KCRUidCoreApplicationUIs ); - TInt connAllowed = 1; - repository->Get( KCoreAppUIsNetworkConnectionAllowed, connAllowed ); - CleanupStack::PopAndDestroy(); // repository - if ( !connAllowed ) - { - return ETrue; - } - } - return EFalse; - } - - -// End of File