psln/Src/PslnUi.cpp
changeset 37 89c890c70182
parent 34 6b5204869ed5
child 45 667edd0b8678
--- a/psln/Src/PslnUi.cpp	Fri Jun 25 18:53:58 2010 +0800
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1482 +0,0 @@
-/*
-* Copyright (c) 2002-2007 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:  UI class of Psln.
-*
-*/
-
-
-// INCLUDE FILES
-
-#include "PslnUi.h"
-
-#include <barsread.h>
-#include <StringLoader.h>
-
-// Navi pane, Title Pane & Tab groups
-#include <aknnavi.h>
-#include <aknnavide.h>
-#include <akntitle.h>
-
-// Notes & Dialogs
-#include <AknGlobalNote.h>
-#include <aknnotewrappers.h>
-
-// DRM.
-#include <DRMHelper.h>
-#include <DRMRights.h>
-
-// Psln specific.
-#include <psln.rsg>
-#include "PslnModel.h"
-#include "PslnSkinEntry.h"
-#include "PslnFeatures.h"
-#include "PslnSoundActivator.h"
-#include "pslntaskactivatesounds.h"
-#include "pslntaskgenericupdate.h"
-#include "pslnidletaskcreateviews.h"
-#include "PslnConst.h"
-#include "PslnDebug.h"
-#include "PslnModel.h"
-#include "PslnPropertySubscriber.h"
-
-// Views
-#include "PslnMainView.h"
-#include "PslnGeneralThemeView.h"
-#include "PslnScreenSaverView.h"
-#include "PslnWallpaperView.h"
-
-// Framework
-#include "PslnPluginHandler.h"
-#include <pslnfwplugininterface.h>
-#include <pslnfwbaseview.h>
-
-// Help texts
-#include <hlplch.h>
-#include <csxhelp/skins.hlp.hrh>
-#include <UsbWatcherInternalPSKeys.h>           // KPSUidUsbWatcher
-#include <usbpersonalityids.h>                  // Usb Personality Ids
-
-// Sets internal state correctly when leave occurs in skin changing.
-
-// Handles application exit correctly when leave occurs in exiting.
-void HandleExitLeave( TAny* aPtr )
-    {
-    CPslnUi* psln = static_cast<CPslnUi*>(aPtr);
-    psln->HandleCmdExitLeave();
-    }
-
-// ========================= MEMBER FUNCTIONS ================================
-// ---------------------------------------------------------------------------
-// C++ constructor can NOT contain any code, that might leave.
-// ---------------------------------------------------------------------------
-//
-CPslnUi::CPslnUi() : iPslnUiStatus ( EPslnCreated )
-    {
-    }
-
-// ---------------------------------------------------------------------------
-// Symbian two-phased constructor.
-// ---------------------------------------------------------------------------
-//
-void CPslnUi::ConstructL()
-    {
-    PSLN_TRACE_DEBUG1("CPslnUi::ConstructL, Start:%d", User::NTickCount() );
-
-    BaseConstructL( EAknEnableSkin | EAknEnableMSK | EAknSingleClickCompatible );
-    EnableExternalViewSwitches(ETrue);
-
-    // Create ECOM plugin loader.
-    PSLN_TRACE_DEBUG("CPslnUi::ConstructL PluginHandler");
-    iPluginHandler = CPslnPluginHandler::NewL( this );
-
-    PSLN_TRACE_DEBUG("CPslnUi::ConstructL Model");
-    // Force creation of model, since it is anyway created when ANY view is
-    // activated.
-    CreateModelL();
-
-    PSLN_TRACE_DEBUG("CPslnUi::ConstructL StatusPane");
-    // Show tabs for main views from resources
-    CEikStatusPane* sp = StatusPane();
-    if ( sp )
-        {
-        // Fetch pointer to the default navi pane control
-        iNaviPane = (CAknNavigationControlContainer*)sp->ControlL(
-            TUid::Uid(EEikStatusPaneUidNavi));
-        }
-
-    // New main view
-    PSLN_TRACE_DEBUG("CPslnUi::ConstructL View-Main");
-    CPslnMainView* view = CPslnMainView::NewLC();
-    AddViewL( view );          // transfer ownership to CAknViewAppUi
-    CleanupStack::Pop( view ); // the view has to be popped from cleanupstack here
-    iMainView = view;
-    SetDefaultViewL( *view );
-
-    iIdleActivateSkin = CIdle::NewL( CActive::EPriorityIdle );
-    iIdleUpdateSkin = CIdle::NewL( CActive::EPriorityIdle );
-    
-    PSLN_TRACE_DEBUG("CPslnUi::ConstructL OK");
-    User::LeaveIfError( iEnableUSBWatchProperty.Attach(
-          KPSUidUsbWatcher, KUsbWatcherSelectedPersonality) );
-    iUSBWatchSubscriber = new (ELeave) CPslnPropertySubscriber(
-        TCallBack(USBCallBackL, this), iEnableUSBWatchProperty );
-    iUSBWatchSubscriber->Subscribe();
-    
-    
-    TInt value = KErrNone;
-    iEnableUSBWatchProperty.Get(value);
-    if (value == KUsbPersonalityIdMS)
-        {
-        iUSBAttached = ETrue;
-        }
-    else
-        {
-        iUSBAttached = EFalse;
-        }
-    }
-
-// ---------------------------------------------------------------------------
-// Destructor
-// ---------------------------------------------------------------------------
-//
-CPslnUi::~CPslnUi()
-    {
-    PSLN_TRACE_DEBUG("CPslnUi::Destructor");
-
-    // Reset skin info when exiting normally. This prevents model class
-    // from trying to revert back to previous skin.
-    if ( iView && iView->Id().iUid == KPslnMainView2.iUid )
-        {
-        // It is possible that Model is not created, if exiting immediately after
-        // application launch. So first check that Model is created.
-        if ( iModel )
-            {
-            TInt currentlySelected = iModel->ActiveSkinIndex();
-            iModel->SetCurrentSelectedSkinIndex( currentlySelected );
-            }
-        }
-    delete iModel;
-    // This nullification is needed, since external DLL's may try to access
-    // model through view framework and it might succeed even if model and UI
-    // classes are already deleted, but external DLLs aren't.
-    // This is due to that model reference is passed as a pointer due to delayed
-    // construction - it is not available at the time when view is constructed.
-    iModel = NULL;
-    delete iDecoratedTabGroup;
-
-    if ( iPluginHandler )
-        {
-        delete iPluginHandler;
-        }
-
-    delete iIdleTask;
-    delete iIdleActivateSkin;
-    delete iIdleUpdateSkin;
-    
-    
-    if( iUSBWatchSubscriber )
-        {
-        iUSBWatchSubscriber->Cancel();
-        }
-    iEnableUSBWatchProperty.Close();
-    delete iUSBWatchSubscriber;
-    }
-
-// ---------------------------------------------------------------------------
-// Handles event when focus loss or gain.
-// ---------------------------------------------------------------------------
-//
-void CPslnUi::HandleWsEventL( const TWsEvent& aEvent, CCoeControl* aDestination )
-    {
-    PSLN_TRACE_DEBUG("CPslnUi::HandlwWSEvent");
-    if ( iView )
-        {
-        TInt eventType = aEvent.Type();
-        TUid currentView = iView->Id();
-
-        // do this everytime when foreground gained.
-        if ( ( currentView.iUid == KPslnGeneralView.iUid ) &&
-             ( eventType == EEventFocusGained ) &&
-             ( GetStatus( EPslnListUpdateNeeded )  ||
-               GetStatus( EPslnProtectedSkinInList ) ) && IsForeground() )
-            {
-            PSLN_TRACE_DEBUG("CPslnUi::HandlwWSEvent Update list");
-            SetStateOff( EPslnListUpdateNeeded );
-            DoCreateWaitNoteL();
-            }
-        }
-    CAknViewAppUi::HandleWsEventL( aEvent, aDestination );
-    }
-
-// ---------------------------------------------------------------------------
-// Handles commands directed to this class.
-// ---------------------------------------------------------------------------
-//
-void CPslnUi::HandleCommandL( TInt aCommand )
-    {
-    PSLN_TRACE_DEBUG1("CPslnUi::HandleCommand %d", aCommand );
-    switch ( aCommand )
-        {
-        //both exit commands should do the same thing
-        case EEikCmdExit:
-        case EAknCmdExit:
-        case EAknSoftkeyExit:
-            HandleCmdExitL();
-            break;
-
-        case EPslnCmdAppActivate:
-            {
-            if (!iIdleActivateSkin->IsActive())
-                {
-                iIdleActivateSkin->Start(TCallBack( DoActivateSkinL, this ));
-                }
-            }
-            break;
-        case EPslnCmdAppDownload:
-            DownloadSkinL();
-            break;
-        case EAknCmdHelp:
-        case EPslnCmdAppHelp:
-            {
-            HlpLauncher::LaunchHelpApplicationL(
-                iEikonEnv->WsSession(), AppHelpContextL());
-            }
-            break;
-        case EAknSoftkeyBack:
-            // If General view is active and Back key is
-            // pressed and there is skin activation ongoing
-            // set internal state off.
-            if ( iView && GetStatus( EPslnSkinChangeRequested ) &&
-                   ( iView->Id().iUid == KPslnGeneralView.iUid )  )
-                {
-                SetStateOff( EPslnSkinChangeRequested );
-                }
-            ActivateLocalViewL( KPslnMainView2 );
-            break;
-        default:
-            CAknViewAppUi::HandleCommandL( aCommand );
-            break;
-        }
-    }
-
-// ---------------------------------------------------------------------------
-// CPslnUi::HandleResourceChangeL
-// ---------------------------------------------------------------------------
-//
-void CPslnUi::HandleResourceChangeL( TInt aType )
-    {
-    PSLN_TRACE_DEBUG("CPslnUi::HandleResourceChangeL");
-    if (  iView && !GetStatus( EPslnSkinChangeRequested ) &&
-          iView->Id().iUid == KPslnGeneralView.iUid &&
-          aType == KAknsMessageSkinChange )
-        {
-        iGeneralThemeView->UpdateSkinListItemsDColumnOnlyL();
-        }
-    CAknViewAppUi::HandleResourceChangeL( aType );
-    }
-
-// ---------------------------------------------------------------------------
-// CPslnUi::ActivateLocalViewL
-// ---------------------------------------------------------------------------
-//
-void CPslnUi::ActivateLocalViewL( TUid aViewId )
-    {
-    if ( GetStatus( EPslnListUpdateNeeded ) &&
-         ( aViewId.iUid == KPslnGeneralView.iUid ) )
-        {
-        PSLN_TRACE_DEBUG("CPslnUi::ActivateLocalViewL update list");
-        SetStateOff( EPslnListUpdateNeeded );
-        DoCreateWaitNoteL();
-        }
-    CAknViewAppUi::ActivateLocalViewL( aViewId );
-    }
-
-// ---------------------------------------------------------------------------
-// CPslnUi::SkinContentChanged
-// ---------------------------------------------------------------------------
-//
-void CPslnUi::SkinContentChanged()
-    {
-    PSLN_TRACE_DEBUG("CPslnUi::SkinContentChanged");
-    if ( !iView || iView->Id().iUid != KPslnGeneralView.iUid  )
-        {
-        SetStateOn( EPslnListUpdateNeeded );
-        }
-    }
-
-// ---------------------------------------------------------------------------
-// CPslnUi::SkinConfigurationChanged
-// ---------------------------------------------------------------------------
-//
-void CPslnUi::SkinConfigurationChanged(
-    const TAknsSkinStatusConfigurationChangeReason aReason )
-    {
-    PSLN_TRACE_DEBUG("CPslnUi::SkinConfigurationChanged");
-    TRAPD( err, SkinConfigurationChangedL( aReason ) );
-    if ( err != KErrNone )
-        {
-        TRAP_IGNORE( iGeneralThemeView->UpdateSkinListItemsL() );
-        TRAP_IGNORE( ToggleScreenBlankerL( EFalse, EFalse ) );
-        }
-    }
-
-// ---------------------------------------------------------------------------
-// CPslnUi::SkinPackageChanged
-// ---------------------------------------------------------------------------
-//
-void CPslnUi::SkinPackageChanged(
-    const TAknsSkinStatusPackageChangeReason aReason )
-    {
-    PSLN_TRACE_DEBUG("CPslnUi::SkinPackageChanged");
-    if ( aReason == EAknsSkinStatusPackageListUpdate )
-        {
-        if ( !iView || iView->Id().iUid != KPslnGeneralView.iUid )
-            {
-            SetStateOn( EPslnListUpdateNeeded );
-            }
-        else
-            {
-            PSLN_TRACE_DEBUG("CPslnUi::SkinPackageChanged update list");
-            //To Fix Defect:ESNN-7CXCT2:Themes: Layout is incorrect 
-            //when removing memory card which the active theme is installed in.
-            //DoCreateWaitNoteL take too much time and stop the skin refresh.
-            //Need to wait for the Skin Server finish its work,so we use CIdle.
-            //Also we need User::After to delay some time to make sure 
-            //iIdleUpdateSkin start late enough.
-            User::After(KPslnUpdateSkinDelay);
-            if (!iIdleUpdateSkin->IsActive())
-                {
-                iIdleUpdateSkin->Start(TCallBack( DoCreateWaitNoteL, this ));
-                }
-            SetStateOff( EPslnListUpdateNeeded );
-            }
-        }
-    }
-
-// ---------------------------------------------------------------------------
-// Return model pointer.
-// ---------------------------------------------------------------------------
-//
-CPslnModel* CPslnUi::Model() const
-    {
-    return iModel;
-    }
-
-// ---------------------------------------------------------------------------
-// Updates tab group to current tab index
-// The parameters are optional.
-// ---------------------------------------------------------------------------
-//
-#ifdef RD_CONTROL_PANEL
-void CPslnUi::UpdateTabIndex( const TInt aMyId, const TInt /*aMyTabIndex*/ )
-#else
-void CPslnUi::UpdateTabIndex( const TInt /*aMyId*/, const TInt aMyTabIndex )
-#endif // RD_CONTROL_PANEL
-    {
-#ifdef RD_CONTROL_PANEL
-    if ( aMyId != KErrNotFound )
-        {
-        if ( iMainView )
-            {
-            iMainView->SetActiveFolder( TUid::Uid( aMyId ) );
-            }
-        }
-#else
-    if ( aMyTabIndex != KErrNotFound )
-        {
-        if ( iTabGroup )
-            {
-            iTabGroup->SetActiveTabById( aMyTabIndex );
-            }
-        }
-    if ( ( iView == iMainView ) && iTabGroup && iMainView )
-        {
-        iTabGroup->SetActiveTabByIndex( iMainView->ActiveView() );
-        }
-#endif //RD_CONTROL_PANEL
-    }
-
-// ---------------------------------------------------------------------------
-// Creates given view.
-// ---------------------------------------------------------------------------
-//
-void CPslnUi::CreateViewL( TUid aViewUid )
-    {
-    PSLN_TRACE_DEBUG1("CPslnUi::CreateViewL, Start:%d", User::NTickCount() );
-    TBitFlags views = ViewSupport();
-
-if ( aViewUid == KPslnWallpaperView &&
-              !GetStatus( EPslnWallpaperViewCreated ) )
-        {
-
-        if ( views.IsSet( EPslnWallpaperView ) )
-            {
-            CAknView* view = CPslnWallpaperView::NewLC();
-            AddViewL( view );          // transfer ownership to CAknViewAppUi
-            CleanupStack::Pop( view );
-
-            SetStateOn( EPslnWallpaperViewCreated );
-
-            PSLN_TRACE_DEBUG("CPslnUi::CreateViewL - Wallpaper");
-            PSLN_TRACE_DEBUG1("CPslnUi::CreateViewL, End:%d", User::NTickCount() );
-            }
-        }
-    // Screensaver view.
-    else if ( aViewUid == KPslnScreenSaverView &&
-              !GetStatus( EPslnScreenSaverViewCreated ) )
-        {
-        if ( views.IsSet( EPslnScreensaverView ) )
-            {
-            CAknView* view = CPslnScreenSaverView::NewLC();
-            AddViewL( view );          // transfer ownership to CAknViewAppUi
-            CleanupStack::Pop( view );
-
-            SetStateOn( EPslnScreenSaverViewCreated );
-
-            PSLN_TRACE_DEBUG("CPslnUi::CreateViewL - ScreenSaver");
-            PSLN_TRACE_DEBUG1("CPslnUi::CreateViewL, End:%d", User::NTickCount() );
-            }
-        }
-    // General view.
-    else if ( aViewUid.iUid == KPslnGeneralView.iUid &&
-              !GetStatus( EPslnGeneralViewCreated ) )
-        {
-        CAknView* view = CPslnGeneralThemeView::NewLC();
-        AddViewL( view );          // transfer ownership to CAknViewAppUi
-        iGeneralThemeView = static_cast< CPslnGeneralThemeView* >( view );
-        CleanupStack::Pop( view );
-
-        SetStateOn( EPslnGeneralViewCreated );
-
-        PSLN_TRACE_DEBUG("CPslnUi::CreateViewL - General");
-        PSLN_TRACE_DEBUG1("CPslnUi::CreateViewL, End:%d", User::NTickCount() );
-        }
-    }
-
-// ---------------------------------------------------------------------------
-// Return navi control container pointer.
-// ---------------------------------------------------------------------------
-//
-CAknNavigationControlContainer* CPslnUi::NaviContainer() const
-    {
-    return iNaviPane;
-    }
-
-// ---------------------------------------------------------------------------
-// Return tab group pointer.
-// ---------------------------------------------------------------------------
-//
-CAknNavigationDecorator* CPslnUi::PslnTabGroup()
-    {
-     if ( !GetStatus( EPslnTabGroupCreated ) )
-         {
-         TRAP_IGNORE( ConstructTabGroupL() );
-         }
-    return iDecoratedTabGroup;
-    }
-
-// ---------------------------------------------------------------------------
-// Return plugin handler pointer.
-// ---------------------------------------------------------------------------
-//
-CPslnPluginHandler* CPslnUi::PluginHandler() const
-    {
-    return iPluginHandler;
-    }
-
-// ---------------------------------------------------------------------------
-// Adds new view to UI class, if the UI class is not already completed.
-// ---------------------------------------------------------------------------
-//
-void CPslnUi::AddNewViewL( CAknView* aNewView )
-    {
-    if ( GetStatus( EPslnCreated ) )
-        {
-        if ( aNewView && !View( aNewView->Id() ) )
-            {
-            AddViewL( aNewView );
-            }
-        }
-    }
-
-// ---------------------------------------------------------------------------
-// When this method is called, UI class considers itself to be complete.
-// ---------------------------------------------------------------------------
-//
-void CPslnUi::AllViewsDone()
-    {
-    SetStateOff( EPslnCreated );
-    }
-
-// ---------------------------------------------------------------------------
-// Handles errors that occur when handling images.
-// ---------------------------------------------------------------------------
-//
-void CPslnUi::HandleImageErrorsL( TInt aError )
-    {
-    PSLN_TRACE_DEBUG1("CPslnUi::HandleImageError %d", aError );
-    if ( aError == KErrNoMemory || aError == KErrTooBig )
-        {
-        // Show information note
-        HBufC* prompt = iCoeEnv->AllocReadResourceLC( R_PSLN_IMAGE_TOO_LARGE );
-        CAknInformationNote* note = new (ELeave) CAknInformationNote( ETrue );
-        note->ExecuteLD( *prompt );
-        CleanupStack::PopAndDestroy( prompt );
-        }
-    else if ( aError == KErrCancel || aError == KErrCouldNotConnect )
-        {
-        // Other error codes are ignored; as not real errors (i.e. KErrCancel),
-        // or such errors that Psln cannot react to them (KErrCouldNotConnect)
-        }
-    else
-        {
-        // Show information note
-        HBufC* prompt = iCoeEnv->AllocReadResourceLC( R_PSLN_IMAGE_CORRUPTED );
-        CAknInformationNote* note = new (ELeave) CAknInformationNote( ETrue );
-        note->ExecuteLD( *prompt );
-        CleanupStack::PopAndDestroy( prompt );
-        }
-    }
-
-// ---------------------------------------------------------------------------
-// Indicate that tab group has been changed.
-// ---------------------------------------------------------------------------
-//
-#ifndef RD_CONTROL_PANEL
-void CPslnUi::TabChangedL( TInt aIndex )
-    {
-    PSLN_TRACE_DEBUG("CPslnUi::TabChangedL 1" );
-    // If it is one of the dynamically created views, check if the view is
-    // already created. If view is not created, create it.
-    if ( aIndex == KPslnGeneralView.iUid )
-        {
-        if ( !GetStatus( EPslnGeneralViewCreated ) )
-            {
-            CreateViewL( KPslnGeneralView );
-            }
-        }
-    else if ( aIndex == KPslnWallpaperView.iUid )
-        {
-        if ( !GetStatus( EPslnWallpaperViewCreated ) )
-            {
-            CreateViewL( KPslnWallpaperView );
-            }
-        }
-    else if ( aIndex == KPslnScreenSaverView.iUid )
-        {
-        if ( !GetStatus( EPslnScreenSaverViewCreated ) )
-            {
-            CreateViewL( KPslnScreenSaverView );
-            }
-        }
-    if ( iMainView )
-        {
-        iMainView->SetActiveFolder( aIndex );
-        ActivateLocalViewL( TUid::Uid( iMainView->ActiveFolderUid() ) );
-        }
-    }
-#endif //RD_CONTROL_PANEL
-
-// ---------------------------------------------------------------------------
-// Loads views when application is idle.
-// ---------------------------------------------------------------------------
-//
-void CPslnUi::LoadViewsWhenIdleL()
-    {
-    if ( !iIdleTask )
-        {
-        iIdleTask = CPslnIdleTaskCreateViews::NewL( this );
-        }
-    }
-
-// ---------------------------------------------------------------------------
-// Constructs the Tab group.
-// ---------------------------------------------------------------------------
-void CPslnUi::ConstructTabGroupL()
-    {
-#ifdef RD_CONTROL_PANEL
-    return;
-#else
-    if ( GetStatus( EPslnTabGroupCreated ) )
-        {
-        // Tabgroup has already been created.
-        return;
-        }
-    // Tabgroup has been read from resource and it were pushed to the navi pane.
-    // Get pointer to the navigation decorator
-    // and set this to be a MAknTabObserver.
-    if ( iNaviPane )
-        {
-        iDecoratedTabGroup = iNaviPane->ResourceDecorator();
-        }
-    if ( iDecoratedTabGroup )
-        {
-        PSLN_TRACE_DEBUG("CPslnUi::ConstructTabGroupL DecoTabGrp");
-        iTabGroup = static_cast <CAknTabGroup*>
-            ( iDecoratedTabGroup->DecoratedControl() );
-        iTabGroup->SetObserver( this );
-        }
-    TInt tabCount = 1; // index 0 = general view
-    TBitFlags views = ViewSupport();
-
-    // Update Tab group to contain default plugins.
-    if ( iPluginHandler )
-        {
-        CPslnFWPluginInterface* plugin =
-            iPluginHandler->GetPlugin( KPslnASPluginUid );
-        if ( plugin )
-            {
-            AddPluginToTab( *plugin );
-            static_cast <CPslnFWBaseView*>
-                (plugin)->SetNaviPaneDecorator( iDecoratedTabGroup );
-            tabCount++; // index 1 = AS plugin
-            }
-        plugin = iPluginHandler->GetPlugin( KPslnAIPluginUid );
-        if ( plugin )
-            {
-            AddPluginToTab( *plugin );
-            static_cast <CPslnFWBaseView*>
-                (plugin)->SetNaviPaneDecorator( iDecoratedTabGroup );
-            tabCount++; // index 2 = AI plugin
-            }
-        }
-
-    // Add tabs for screen saver and wallpaper.
-    if ( iTabGroup )
-        {
-        if ( views.IsSet( EPslnWallpaperView ) )
-            {
-            TResourceReader reader;
-            iCoeEnv->CreateResourceReaderLC( reader, R_PSLN_WALLPAPER_TAB );
-            iTabGroup->AddTabL( reader );
-            CleanupStack::PopAndDestroy(); // reader - AppUi now owns this tab,
-            tabCount++; // index 3 = Wallpaper view
-            }
-
-        if ( views.IsSet( EPslnScreensaverView ) )
-            {
-            TResourceReader reader2;
-            iCoeEnv->CreateResourceReaderLC( reader2, R_PSLN_SCREENSAVER_TAB );
-            iTabGroup->AddTabL( reader2 );
-            CleanupStack::PopAndDestroy(); // reader2  - AppUi now owns this tab,
-            tabCount++; // index 4 = Screensaver view
-            }
-        PSLN_TRACE_DEBUG("CPslnUi::ConstructTabGroupL Default Tabs added to TabGrp");
-        }
-
-    // Add rest of the plugins to tabs.
-    if ( iPluginHandler )
-        {
-        // Fetch the plugin array.
-        CArrayPtrFlat<CPslnFWPluginInterface>* pluginArray =
-            iPluginHandler->GetPluginArray();
-        CleanupStack::PushL( pluginArray );
-        TInt pluginCount = pluginArray->Count();
-        PSLN_TRACE_DEBUG1("CPslnUi::ConstructTabGroupL Plugin count=%d", pluginCount );
-
-        // Go through all the plugins and add plugins to tab group.
-        for ( TInt i = 0; i < pluginCount; i++ )
-            {
-            CPslnFWPluginInterface* plugin = pluginArray->operator[]( i );
-
-            if ( !plugin )
-                {
-                PSLN_TRACE_DEBUG("CPslnUi::ConstructTabGroupL Plugin fails");
-                }
-            // Default plugins can be skipped.
-            else if ( plugin->Id().iUid == KPslnASPluginUid.iUid ||
-                      plugin->Id().iUid == KPslnAIPluginUid.iUid )
-                {
-                PSLN_TRACE_DEBUG("CPslnUi::ConstructTabGroupL Plugin skipped");
-                }
-            else
-                {
-                PSLN_TRACE_DEBUG1("CPslnUi::ConstructTabGroupL Plugin Id=%d", plugin->Id().iUid );
-                AddPluginToTab( *plugin );
-                static_cast <CPslnFWBaseView*>
-                    (plugin)->SetNaviPaneDecorator( iDecoratedTabGroup );
-                // Inform to the plugin which tab index it is using.
-                static_cast <CPslnFWBaseView*>
-                    (plugin)->SetTabIndex( tabCount++ );
-                PSLN_TRACE_DEBUG("CPslnUi::ConstructTabGroupL Plugin added to tab");
-                }
-            }
-        CleanupStack::Pop( pluginArray ); // plugin handler owns plugin array
-        }
-    // Push empty navi pane, so that tab group is not shown with default item (first),
-    // if other than main view is activated externally.
-    iNaviPane->PushDefaultL();
-    SetStateOn( EPslnTabGroupCreated );
-#endif //RD_CONTROL_PANEL
-    }
-
-// ---------------------------------------------------------------------------
-// Activates screen blanker. Note that second parameter is only used when
-// enabling blanker (i.e. first parameter is ETrue ).
-// ---------------------------------------------------------------------------
-void CPslnUi::ToggleScreenBlankerL( 
-    const TBool& aToggleValue, const TBool& /*aStatusPaneVisible*/, const TBool& aRealAct )
-    {
-    TInt transitionEffectsValue = iModel->GetTransitionEffectStateL();
-    if ( aToggleValue )
-        {
-        // Effects are enabled if value is NOT KMaxTInt.
-        if( transitionEffectsValue != KMaxTInt )
-            {
-            if ( aRealAct )
-                {
-                iModel->TransEffect(EPslnTransitionEffectStartThemeActivation);
-                }
-            else
-                {
-                iModel->TransEffect(EPslnTransitionEffectStartPreview);
-                }
-            }
-//        else if ( iView && iView->MenuBar()->IsDisplayed() )
-//            {
-//            iView->MenuBar()->StopDisplayingMenuBar();
-//            }
-        }
-    else
-        {
-        // Effects are enabled if value is NOT KMaxTInt.
-        if( transitionEffectsValue != KMaxTInt )
-            {
-            iModel->TransEffect(EPslnTransitionEffectStop);
-            }
-//        else if ( iView && iView->MenuBar()->IsDisplayed() )
-//            {
-//            iView->MenuBar()->MenuPane()->DrawNow();
-//            }
-        }
-    }
-
-
-// ---------------------------------------------------------------------------
-// Is this class able to handle a new skin activation related command.
-// ---------------------------------------------------------------------------
-TBool CPslnUi::IsReadyToHandleCommands()
-    {
-    return !GetStatus( EPslnSkinChangeRequested );
-    }
-
-// ---------------------------------------------------------------------------
-// Ensure that Exit() is called when trying to exit and leave occurs.
-// ---------------------------------------------------------------------------
-void CPslnUi::HandleCmdExitLeave()
-    {
-    Exit();
-    }
-
-// ---------------------------------------------------------------------------
-// Sets title pane back to default text.
-// ---------------------------------------------------------------------------
-void CPslnUi::SetTitleToDefaultL()
-    {
-    // Set default title back. But do not change title when application is about
-    // to die.
-    if ( iCoeEnv && Model() )
-        {
-        TResourceReader rReader;
-        iCoeEnv->CreateResourceReaderLC( rReader, R_PSLN_SKIN_LIST_VIEW_TITLE );
-        if ( iAvkonAppUi )
-            {
-            CEikStatusPane* sp = iAvkonAppUi->StatusPane();
-            if ( sp )
-                {
-                CAknTitlePane* title = static_cast<CAknTitlePane*>(
-                    sp->ControlL( TUid::Uid( EEikStatusPaneUidTitle ) ) );
-
-                if ( title )
-                    {
-                    title->SetFromResourceL( rReader );
-                    }
-                }
-            }
-        CleanupStack::PopAndDestroy(); // rReader
-        }
-    }
-
-// ---------------------------------------------------------------------------
-// Checks if a view has been created.
-// ---------------------------------------------------------------------------
-TBitFlags CPslnUi::ViewSupport()
-    {
-    // Initially all views are 'on'.
-    TBitFlags viewFlags;
-    viewFlags.SetAll();
-    if ( GetStatus( EPslnViewSupportChecked ) )
-        {
-        if ( GetStatus( EPslnNoScreenSaverView ) )
-            {
-            viewFlags.Clear( EPslnScreensaverView );
-            }
-        if ( GetStatus( EPslnNoWallpaperView ) )
-            {
-            viewFlags.Clear( EPslnWallpaperView );
-            }
-        }
-    else
-        {
-        TBool noWallpaperView = PslnFeatures::IsSupported( KPslnRemoveWallpaper );
-        TBool noScreenSaverView = PslnFeatures::IsSupported( KPslnRemoveScreensaver );
-        if ( noWallpaperView )
-            {
-            SetStateOn( EPslnNoWallpaperView );
-            viewFlags.Clear( EPslnWallpaperView );
-            }
-        if ( noScreenSaverView )
-            {
-            SetStateOn( EPslnNoScreenSaverView );
-            viewFlags.Clear( EPslnScreensaverView );
-            }
-        SetStateOn( EPslnViewSupportChecked );
-        }
-    return viewFlags;
-    }
-
-// ---------------------------------------------------------------------------
-//
-// ---------------------------------------------------------------------------
-void CPslnUi::SetDRMProtectedSkinInSkinList(
-    const TBool& aProtectedSkinInList )
-    {
-    if ( aProtectedSkinInList )
-        {
-        SetStateOn( EPslnProtectedSkinInList );
-        }
-    else
-        {
-        SetStateOff( EPslnProtectedSkinInList );
-        }
-    }
-
-
-// -----------------------------------------------------------------------------
-// Callback - USB status change.
-// -----------------------------------------------------------------------------
-//
-TInt CPslnUi::USBCallBackL(TAny* aPtr)
-    {
-    CPslnUi* self = static_cast<CPslnUi*>(aPtr);
-    if ( self )
-        {
-        self->HandleUSBCallBackL();
-        }
-    return KErrNone;
-    }
-    
-    
-    /**
-    * USB Attach State.
-    * @return ETrue when USB already attached, otherwise EFalse,
-    */
-// ---------------------------------------------------------------------------
-// USB Attach State.
-// ---------------------------------------------------------------------------
-TBool CPslnUi::USBAttachState()
-    {
-    return iUSBAttached;
-    }
-
-// ---------------------------------------------------------------------------
-// Called when a key is pressed and no other class has catched the event.
-// Handles only key events that are meant to control the tab group.
-// ---------------------------------------------------------------------------
-#ifdef RD_CONTROL_PANEL
-TKeyResponse CPslnUi::HandleKeyEventL(
-    const TKeyEvent& /*aKeyEvent*/, TEventCode /*aType*/ )
-#else
-TKeyResponse CPslnUi::HandleKeyEventL(
-    const TKeyEvent& aKeyEvent, TEventCode aType )
-#endif // RD_CONTROL_PANEL
-    {
-    PSLN_TRACE_DEBUG("CPslnUi::HandleKeyEventL");
-
-#ifndef RD_CONTROL_PANEL
-    // If tab group is not yet created, create it.
-    if ( !GetStatus( EPslnTabGroupCreated ) )
-        {
-        ConstructTabGroupL();
-        }
-    iTabGroup = static_cast<CAknTabGroup*>
-        ( iDecoratedTabGroup->DecoratedControl() );
-
-    // Only forward key events to tabgroup when:
-    //     1) TabGroup has been created (and is not NULL)
-    //     2) Active view is not MainView (there is no tab group in Main)
-    //     3) key event is either left key or right key
-    if ( iTabGroup && iView && iView->Id().iUid != KPslnMainView2.iUid &&
-         ( aKeyEvent.iScanCode == EStdKeyLeftArrow ||
-           aKeyEvent.iScanCode == EStdKeyRightArrow ) )
-        {
-        PSLN_TRACE_DEBUG("CPslnUi::HandleKeyEventL forward event to Tab");
-        // If preview is about to activate, cancel it.
-        if ( GetStatus( EPslnSkinChangeRequested ) &&
-             iView->Id().iUid == KPslnGeneralView.iUid )
-            {
-            SetStateOff( EPslnSkinChangeRequested );
-            }
-
-        return iTabGroup->OfferKeyEventL( aKeyEvent, aType );
-        }
-#endif // !RD_CONTROL_PANEL
-    return EKeyWasNotConsumed;
-    }
-
-// ---------------------------------------------------------------------------
-// CPslnUi::SkinConfigurationChangedL
-// ---------------------------------------------------------------------------
-//
-void CPslnUi::SkinConfigurationChangedL(
-    const TAknsSkinStatusConfigurationChangeReason aReason )
-    {
-    PSLN_TRACE_DEBUG1("CPslnUi::SkinConfigurationChangedL internal state before: %d", iPslnUiStatus );
-    HBufC* errorBuf = NULL;
-
-    switch( aReason )
-        {
-        // Skin activation failed due to OOM.
-        // Set skin activation user activity off, so that subsequent attempts can be made.
-        // Also, set error note text.
-        // Finally, set skin activation attempt off and update skin list.
-        case EAknsSkinStatusConfigurationFailedOOM:
-            SetStateOff( EPslnSkinChangeRequested );
-            errorBuf = StringLoader::LoadLC( R_PSLN_QTN_MEMLO_RAM_OUT_OF_MEM );
-            if ( GetStatus( EPslnSkinActivated ) )
-                {
-                SetStateOff( EPslnSkinActivated );
-                DoCreateWaitNoteL();
-                }
-            break;
-        // Skin activation failed due to skin being corrupted.
-        // Set skin activation user activity off, so that subsequent attempts can be made.
-        // Also, set error note text.
-        // Then set skin activation attempt off and update skin list.
-        // Finally, activate default skin.
-        case EAknsSkinStatusConfigurationFailedCorrupt:
-            SetStateOff( EPslnSkinChangeRequested );
-            iGeneralThemeView->HightlightDefaultSkin();
-            errorBuf = StringLoader::LoadLC( R_PSLN_QTN_SKINS_ERROR_CORRUPTED );
-            if ( GetStatus( EPslnSkinActivated ) )
-                {
-                SetStateOff( EPslnSkinActivated );
-                DoCreateWaitNoteL();
-                }
-            SetStateOn( EPslnListUpdateNeeded );
-            break;
-        // Skin activation was success.
-        // Set skin activation user activity off.
-        // Show confirmation note about the skin change and set activation
-        // request state off. Finally, check if there are sounds in the skin.
-        case EAknsSkinStatusConfigurationDeployed:
-            SetStateOff( EPslnSkinChangeRequested );
-            if ( GetStatus( EPslnSkinActivated ) )
-                {
-                SetStateOff( EPslnSkinActivated );
-                SkinDeployedL();
-                }
-            else // Theme changed by other app, update view.
-                {
-                iModel->PerformCompleteUpdateL();             
-                iGeneralThemeView->UpdateSkinListItemsL( iModel->ActiveSkinIndex() + 
-                                PslnFeatures::IsEnhancedEmbeddedLinksSupported() );
-                iGeneralThemeView->RemoveLocalSkinItems();
-                }
-            
-            if ( GetStatus( EPslnSoundActivationPending ) )
-                {
-                SetStateOff( EPslnSoundActivationPending );
-                ActivateSoundsL();
-                }
-            ToggleScreenBlankerL( EFalse, EFalse );
-            break;
-        default:
-            break;
-        }
-
-    if( errorBuf )
-        {
-        ShowErrorNoteL( *errorBuf );
-        CleanupStack::PopAndDestroy( errorBuf );
-        }
-    PSLN_TRACE_DEBUG1("CPslnUi::SkinConfigurationChangedL internal state after: %d", iPslnUiStatus );
-    }
-
-// ---------------------------------------------------------------------------
-// Activate a Skin.
-// ---------------------------------------------------------------------------
-//
-void CPslnUi::ActivateSkinL()
-    {
-    PSLN_TRACE_DEBUG("CPslnUi::ActivateSkinL");
-    TInt skinIndex = iModel->CurrentSelectedSkinIndex();
-
-    CPslnSkinEntry* entry = iModel->VisibleSkin( skinIndex );
-    if( !entry )
-        {
-        SetStateOff( EPslnSkinChangeRequested );
-        return;
-        }
-
-    TBool showWaitNote = EFalse;
-    TInt drmError = KErrNone;
-    HBufC* errorBuf = NULL;
-
-    PSLN_TRACE_DEBUG1("CPslnUi::ActivateSkinL entry->Protection: %d", entry->Protection() );
-    switch ( entry->Protection() )
-        {
-        case EAknsSrvNoRights:
-            drmError = CDRMRights::ENoRights;
-            showWaitNote = ETrue;
-            break;
-        case EAknsSrvFutureRights:
-            drmError = CDRMRights::ERightsExpired;
-            break;
-        case EAknsSrvExpiredRights:
-            drmError = CDRMRights::ERightsExpired;
-            showWaitNote = ETrue;
-            break;
-        default :
-            break;
-        }
-
-    // DRMHelper handles the error.
-    if ( drmError )
-        {
-        RAknsSrvSession skinsrv;
-        User::LeaveIfError( skinsrv.Connect() );
-        CleanupClosePushL( skinsrv );
-
-        TInt fileserverhandle;
-        TInt filehandle;
-        fileserverhandle = skinsrv.OpenBitmapFile( entry->FullName(), filehandle );
-        RFile file;
-        User::LeaveIfError( file.AdoptFromServer( fileserverhandle, filehandle ) );
-        CleanupClosePushL( file );
-
-        TInt returnCode = KErrNone;
-        PSLN_TRACE_DEBUG("CPslnUi::ActivateSkinL use DRMHelper to show the error note");
-        CDRMHelper* drmhelper = CDRMHelper::NewLC( *CCoeEnv::Static() );
-        returnCode = drmhelper->HandleErrorL(
-            drmError,
-            file );
-
-        PSLN_TRACE_DEBUG1("CPslnUi::ActivateSkinL DRMHelper returns: %d", returnCode );
-        if ( returnCode && showWaitNote )
-            {
-            if ( GetStatus( EPslnListUpdateNeeded ) )
-                {
-                SetStateOff( EPslnListUpdateNeeded );
-                DoCreateWaitNoteL();
-                }
-            }
-        SetStateOff( EPslnSkinChangeRequested );
-        CleanupStack::PopAndDestroy( 3 ); // drmHelper, skinsrv, file
-        }
-    else
-        {
-        if ( entry->Protection() == EAknsSrvCountBased )
-            {
-            errorBuf = StringLoader::LoadLC( R_PSLN_QTN_DRM_PREV_RIGHTS_SET );
-            }
-        // Check for corruption.
-        if ( entry->IsCorrupted() )
-            {
-            PSLN_TRACE_DEBUG("CPslnUi::ActivateSkinL corrupt skin!");
-            errorBuf = StringLoader::LoadLC( R_PSLN_QTN_SKINS_ERROR_CORRUPTED );
-            }
-
-        // Non-DRMHelper error handling.
-        if ( errorBuf )
-            {
-            SetStateOff( EPslnSkinChangeRequested );
-            ShowErrorNoteL( *errorBuf );
-            CleanupStack::PopAndDestroy( errorBuf );
-            }
-        // No errors, activate the skin.
-        else
-            {
-            PSLN_TRACE_DEBUG("CPslnUi::ActivateSkinL 2");
-            // Start changing active skin.
-            iModel->GuardActivationLC();
-            TBool shownote = EFalse;
-
-            // Show screen clearer when skin is changing.
-            ToggleScreenBlankerL( ETrue, ETrue );
-
-            PSLN_TRACE_DEBUG("CPslnUi::ActivateSkinL directly");
-            shownote = iModel->ActivateSkinL( skinIndex );
-
-            if ( shownote )
-                {
-                PSLN_TRACE_DEBUG("CPslnUi::ActivateSkinL skin activated");
-                SetStateOn( EPslnSkinActivated );
-                }
-            else
-                {
-                // If user declined to activate protected skin, re-initialize status
-                // flag.
-                if ( GetStatus( EPslnSkinChangeRequested ) )
-                    {
-                    PSLN_TRACE_DEBUG("CPslnUi::ActivateSkinL decline DRM activation");
-                    SetStateOff( EPslnSkinChangeRequested );
-                    // Remove screen clearer.
-                    ToggleScreenBlankerL( EFalse, EFalse );
-                    }
-                }
-            CleanupStack::PopAndDestroy(); // activation guard
-            }
-        }
-    }
-
-// ---------------------------------------------------------------------------
-// CPslnUi::ActivateSoundsL
-// ---------------------------------------------------------------------------
-//
-void CPslnUi::ActivateSoundsL()
-    {
-    PSLN_TRACE_DEBUG("CPslnUi::ActivateSoundsL");
-
-    // Is sounds are not supperted, ignore.
-    if ( !PslnFeatures::IsSoundsInSkinsSupported()
-
-    // If sounds are supported, but general view is not active, ignore.
-        || iView && iView->Id().iUid != KPslnGeneralView.iUid  )
-        {
-        return;
-        }
-
-    TPath skinPath;
-    CPslnSkinEntry* entry = iModel->VisibleSkin( iModel->ActiveSkinIndex() );
-    if( entry )
-        {
-        entry->GetSkinPath( skinPath );
-        skinPath.Append( KPslnPathSeparator );
-        }
-    else
-        {
-        User::Leave( KErrUnknown );
-        }
-
-    // Find sound files.
-    CPslnSoundActivator* activator = CPslnSoundActivator::NewLC();
-    TInt numberOfSounds = 0;
-    activator->CollectSoundsL( skinPath, numberOfSounds );
-
-    PSLN_TRACE_DEBUG1("CPslnUi::ActivateSoundsL num of tunes %d", numberOfSounds );
-
-    if ( numberOfSounds <= 0 )
-        {
-        CleanupStack::PopAndDestroy( activator );
-        return;
-        }
-
-    // Launch profile settings loader.
-    CPslnTaskActivateSounds* activateTask = new (ELeave)
-        CPslnTaskActivateSounds( *activator );
-    CleanupStack::PushL( activateTask );
-
-    CreateAndShowWaitWrapperL(
-        *activateTask,
-        R_PSLN_QTN_GEN_NOTE_OPENING,
-        KNullDesC() );
-
-    HBufC* noteText = NULL;
-
-    PSLN_TRACE_DEBUG1("CPslnUi::ActivateSoundsL error %d", activateTask->iActivationErr );
-
-    if( activateTask->iActivationErr == KErrNone )
-        {
-        if ( numberOfSounds == 1 )
-            {
-            noteText = StringLoader::LoadLC(
-                R_PSLN_QTN_SKINS_NOTE_TONE_ACTIVATED );
-            }
-        else
-            {
-            noteText = StringLoader::LoadLC(
-                R_PSLN_QTN_SKINS_NOTE_TONES_ACTIVATED );
-            }
-
-        CAknConfirmationNote* note =
-            new (ELeave) CAknConfirmationNote( ETrue );
-        note->ExecuteLD( *noteText );
-        }
-    else
-        {
-        if( activateTask->iActivationErr == KErrPermissionDenied )
-            {
-            noteText = StringLoader::LoadLC(
-                R_PSLN_QTN_PROFILES_INFO_TONE_NO_DRM );
-            }
-        else
-            {
-            noteText = StringLoader::LoadLC(
-                R_PSLN_QTN_FILE_FORMAT_ERROR );
-            }
-        CAknErrorNote* note =
-            new (ELeave) CAknErrorNote( ETrue );
-        note->ExecuteLD( *noteText );
-        }
-    
-    CleanupStack::PopAndDestroy( 3, activator );
-    }
-
-// ---------------------------------------------------------------------------
-// CPslnUi::DownloadSkinL
-// ---------------------------------------------------------------------------
-//
-void CPslnUi::DownloadSkinL()
-    {
-    PSLN_TRACE_DEBUG("CPslnUi::DownloadSkinL");
-    iModel->DownloadSkinL();
-    }
-
-// ---------------------------------------------------------------------------
-// CPslnUi::CreateAndShowWaitWrapperL
-// ---------------------------------------------------------------------------
-//
-void CPslnUi::CreateAndShowWaitWrapperL( MAknBackgroundProcess& aTask,
-    const TInt aResourceID, const TDesC& aString,
-    const TBool aShowImmediately )
-    {
-    HBufC* noteText = NULL;
-    if ( aString.Length() == 0 )
-        {
-        noteText = StringLoader::LoadLC( aResourceID, iEikonEnv );
-        }
-    else
-        {
-        noteText = StringLoader::LoadLC( aResourceID, aString, iEikonEnv );
-        }
-
-    CAknWaitNoteWrapper* wrapper = CAknWaitNoteWrapper::NewL();
-    CleanupDeletePushL( wrapper );
-    if ( wrapper )
-        {
-        wrapper->ExecuteL(
-            R_PSLN_GENERAL_WAIT_NOTE, aTask, *noteText, aShowImmediately );
-        }
-
-    CleanupStack::PopAndDestroy( 2, noteText ); // noteText, wrapper
-    }
-
-// ---------------------------------------------------------------------------
-// CPslnUi::AddPluginToTabL
-// ---------------------------------------------------------------------------
-//
-#ifndef RD_CONTROL_PANEL
-void CPslnUi::AddPluginToTabL( CPslnFWPluginInterface& aPlugin )
-    {
-    PSLN_TRACE_DEBUG("CPslnUi::AddPluginToTabL Start");
-    HBufC* buf = HBufC::NewLC( KPslnItemLength );
-    TPtr ptrBuf = buf->Des();
-    aPlugin.GetTabTextL( ptrBuf );
-    TInt pluginUid = aPlugin.Id().iUid;
-    if ( iTabGroup )
-        {
-        iTabGroup->AddTabL( pluginUid, ptrBuf );
-        }
-    PSLN_TRACE_DEBUG("CPslnUi::AddPluginToTabL Default Plugin added to tab");
-    CleanupStack::PopAndDestroy( buf );
-    }
-#endif //!RD_CONTROL_PANEL
-
-// ---------------------------------------------------------------------------
-// Handles Exit command.
-// ---------------------------------------------------------------------------
-//
-void CPslnUi::HandleCmdExitL()
-    {
-    Exit();
-    }
-
-// ---------------------------------------------------------------------------
-// Shows error note.
-// ---------------------------------------------------------------------------
-//
-void CPslnUi::ShowErrorNoteL( HBufC& aErrorBuf ) const
-    {
-    // Display global note.
-    CAknGlobalNote* errorNote = CAknGlobalNote::NewLC();
-    errorNote->ShowNoteL( EAknGlobalErrorNote, aErrorBuf );
-    CleanupStack::PopAndDestroy( errorNote );
-    }
-// ---------------------------------------------------------------------------
-// Callback when idle time occurs for skin update.
-// ---------------------------------------------------------------------------
-//
-TInt CPslnUi::DoCreateWaitNoteL( TAny* aAny )
-    {
-    static_cast< CPslnUi* >( aAny )->DoCreateWaitNoteL();
-    return EFalse;
-    }
-// ---------------------------------------------------------------------------
-// CPslnUi::DoCreateWaitNoteL
-// ---------------------------------------------------------------------------
-//
-void CPslnUi::DoCreateWaitNoteL()
-    {
-    CPslnTaskGenericUpdate* updateTask =
-        new (ELeave) CPslnTaskGenericUpdate(
-        *this, &CPslnModel::PerformCompleteUpdateL, ETrue );
-    CleanupStack::PushL( updateTask );
-
-    CreateAndShowWaitWrapperL( *updateTask,
-        R_PSLN_QTN_GEN_NOTE_OPENING, KNullDesC(), EFalse );
-
-    User::LeaveIfError( updateTask->iCallErr );
-
-    CleanupStack::PopAndDestroy( updateTask );
-    }
-
-// ---------------------------------------------------------------------------
-// This operation needs to be atomic. If it leaves, set state back to previous.
-// ---------------------------------------------------------------------------
-//
-TInt CPslnUi::ActivateSkin( const TInt aPslnStatus )
-    {
-    TInt error = KErrNone;
-    if ( !GetStatus( aPslnStatus ) )
-        {
-        SetStateOn( aPslnStatus );
-        TRAPD( err, ActivateSkinL() );
-        if ( err != KErrNone )
-            {
-            SetStateOff( aPslnStatus );
-            error = err;
-            }
-        }
-    iGeneralThemeView->RemoveLocalSkinItems();
-    return error;
-    }
-
-// ---------------------------------------------------------------------------
-// Non-leaving version of AddPluginToTabL.
-// ---------------------------------------------------------------------------
-//
-#ifndef RD_CONTROL_PANEL
-TInt CPslnUi::AddPluginToTab( CPslnFWPluginInterface& aPlugin )
-    {
-    TRAPD( err, AddPluginToTabL( aPlugin ) );
-    if ( err )
-        {
-        PSLN_TRACE_DEBUG1("CPslnUi::AddPluginToTab plugin fails: ", aPlugin.Id().iUid );
-        }
-    return err;
-    }
-#endif //!RD_CONTROL_PANEL
-
-// ---------------------------------------------------------------------------
-// Show skin activated note.
-// ---------------------------------------------------------------------------
-//
-void CPslnUi::SkinDeployedL()
-    {
-#ifdef RD_UI_TRANSITION_EFFECTS_PHASE2
-    // Only set sound state - no conf note anymore.
-    SetStateOn( EPslnSoundActivationPending );
-#else
-    HBufC* skinName = HBufC::NewLC( KMaxName );
-    TPtr skinNamePtr = skinName->Des();
-    TInt skinIndex = iModel->ActiveSkinIndex();
-
-    iModel->GetSkinNameByIndex(
-        skinIndex,
-        skinNamePtr,
-        EPslnSkinNameTypeTitle );
-
-    // Show confirmation note about skin change.
-    HBufC* noteTxt = StringLoader::LoadL(
-        R_PSLN_CONFIRM_ACTIVE_SKIN_STRING,
-        skinNamePtr,
-        iEikonEnv );
-    CleanupStack::PushL( noteTxt );
-
-    SetStateOn( EPslnSoundActivationPending );
-    CAknConfirmationNote* note =
-        new (ELeave) CAknConfirmationNote( ETrue );
-    note->ExecuteLD( *noteTxt );
-    CleanupStack::PopAndDestroy( 2, skinName ); // skinName, noteTxt
-
-#endif
-    iGeneralThemeView->UpdateSkinListItemsL();
-    }
-
-// ---------------------------------------------------------------------------
-// Creates model class.
-// ---------------------------------------------------------------------------
-//
-void CPslnUi::CreateModelL()
-    {
-    if ( !GetStatus( EPslnModelCreated ) )
-        {
-        iModel = CPslnModel::NewL( this );
-        SetStateOn( EPslnModelCreated );
-        }
-    }
-
-// ---------------------------------------------------------------------------
-// Callback when idle time occurs for skin activation.
-// ---------------------------------------------------------------------------
-//
-TInt CPslnUi::DoActivateSkinL( TAny* aAny )
-    {
-    static_cast< CPslnUi* >( aAny )->DoActivateSkinL();
-    return EFalse;
-    }
-
-// ---------------------------------------------------------------------------
-// Callback when idle time occurs for skin activation.
-// ---------------------------------------------------------------------------
-//
-void CPslnUi::DoActivateSkinL()
-    {
-    TInt error = ActivateSkin( EPslnSkinChangeRequested );
-    if ( error == KErrNoMemory )
-        {
-        HBufC* errorBuf = StringLoader::LoadLC(
-            R_PSLN_QTN_MEMLO_RAM_OUT_OF_MEM );
-        // Display global note.
-        CAknGlobalNote* errorNote = CAknGlobalNote::NewLC();
-        errorNote->ShowNoteL( EAknGlobalErrorNote, *errorBuf );
-        CleanupStack::PopAndDestroy( 2 ); // errorNote & errorBuf
-        }
-    }
-
-
-/**
-* Handle USB Callback.
-*/
-void CPslnUi::HandleUSBCallBackL()
-    {
-    if ( iView && iView->Id().iUid == KPslnGeneralView.iUid )
-        {
-        TInt value = KErrNone;
-        iEnableUSBWatchProperty.Get(value);
-        
-        if (value == KUsbPersonalityIdMS )
-            {
-            iUSBAttached = ETrue;
-            }
-        else
-            {
-            iUSBAttached = EFalse;
-            }
-        static_cast< CPslnGeneralThemeView* >( iView )->RestartQuickPreviewL();
-        }
-    }
-// End of File
-