cbs/cbsui/UiSrc/ccbsuisettingsviewcontainer.cpp
branchRCL_3
changeset 19 7d48bed6ce0c
parent 18 594d59766373
child 20 987c9837762f
--- 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