--- 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 <bldvariant.hrh> // For feature flags
-#include <featmgr.h> // FeatureManager
-#include <aknnotewrappers.h> // CAknErrorNote
-#include <e32def.h>
-#include <aknlists.h>
-#include <akncheckboxsettingpage.h>
-#include <cbsuiApp.rsg>
-#include <barsread.h>
-#include <centralrepository.h> // CRepository
-#include <CoreApplicationUIsSDKCRKeys.h> // KCRUidCoreApplicationUIs, TCoreAppUIsNetworkConnectionAllowed
-#include "CbsUiId.h"
-#include <csxhelp/mce.hlp.hrh>
-#include <AknDef.h> // 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