startupservices/Startup/src/StartupAppUi.cpp
branchRCL_3
changeset 63 c2c61fdca848
parent 62 924385140d98
child 70 739cef680932
--- a/startupservices/Startup/src/StartupAppUi.cpp	Tue Aug 31 15:24:25 2010 +0300
+++ b/startupservices/Startup/src/StartupAppUi.cpp	Wed Sep 01 12:24:48 2010 +0100
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2002-2010 Nokia Corporation and/or its subsidiary(-ies). 
+* Copyright (c) 2002-2008 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"
@@ -18,7 +18,14 @@
 
 // SYSTEM INCLUDES
 #include <StringLoader.h>
-
+#include <AknGlobalNote.h>          //used for Selftest failed note
+#include <aknPopup.h>
+#include <aknlists.h>
+#include <aknSDData.h>
+#include <badesca.h>
+#include <tzlocalizationdatatypes.h>
+#include <tzlocalizer.h>
+#include <tz.h>
 #include <featmgr.h>                // Feature Manager
 #include <centralrepository.h>
 #include <startup.rsg>
@@ -28,21 +35,53 @@
 #include <startupdomaincrkeys.h>
 #include <CoreApplicationUIsSDKCRKeys.h>
 #include <starterclient.h>
-#include <hbdevicemessageboxsymbian.h>
-#include "sanimstartupctrl.h"
-#include <apgtask.h>
+#include "StartupWelcomeCrKeys.h"
+
+#ifdef RD_UI_TRANSITION_EFFECTS_PHASE2
+// Transition effects
+#include <gfxtranseffect/gfxtranseffect.h>
+#include <akntranseffect.h>
+#endif
+
+#ifdef RD_STARTUP_ANIMATION_CUSTOMIZATION
+  #include "sanimstartupctrl.h"
+#else // RD_STARTUP_ANIMATION_CUSTOMIZATION
+  #include <akndef.h>                 // For layout change event definitions
+  #include <AknSoundSystem.h>
+#endif // RD_STARTUP_ANIMATION_CUSTOMIZATION
 
 // USER INCLUDES
 #include "StartupAppUi.h"
 #include "StartupApplication.h"
-
+#include "StartupUserWelcomeNote.h"
+#include "StartupQueryDialog.h"     //used for Startup own Time and Date queries
+#include "StartupPopupList.h"       //used for Startup own City and Country queries
+#include "StartupMediatorObserver.h"
 #include "StartupPubSubObserver.h"
-#include "startupanimationwrapper.h"
-#include "startupview.h"
-  
-#include <eikenv.h>
+
+#ifdef RD_STARTUP_ANIMATION_CUSTOMIZATION
+  #include "startupanimationwrapper.h"
+  #include "startupview.h"
+#else // RD_STARTUP_ANIMATION_CUSTOMIZATION
+  #include "StartupDocument.h"
+  #include "StartupOperatorAnimation.h"
+  #include "StartupTone.h"
+  #include "StartupWelcomeAnimation.h"
+#endif // RD_STARTUP_ANIMATION_CUSTOMIZATION
 
 
+// CONSTANTS
+const TInt KUserWelcomeNoteShowPeriodTime = 3000000; // 3 sec
+
+#ifndef RD_STARTUP_ANIMATION_CUSTOMIZATION
+  const TInt KOneMilliSecondInMicroSeconds = 1000;
+  const TInt KMaxToneInitWait = 200; // 200 ms
+#endif // RD_STARTUP_ANIMATION_CUSTOMIZATION
+
+static const TInt KMaxCityLength(120);
+static const TInt KMaxCountryLength(120);
+
+#ifdef RD_STARTUP_ANIMATION_CUSTOMIZATION
 static const CSAnimStartupCtrl::TAnimationParams KStartupAnimationParams =
     {
     KCRUidStartupConf,
@@ -52,7 +91,15 @@
     KStartupTonePath,
     KStartupToneVolume
     };
+#endif // RD_STARTUP_ANIMATION_CUSTOMIZATION
 
+_LIT(KEmpty, " ");
+
+// Default date and time value is used if cenrep string is not valid
+// Default date is 01.01.2007 and default time is 09:00 AM
+_LIT( KDefaultDateTimeValue, "20070000:090000" ); // YYYYMMDD:HHMMSS
+
+static const TInt KTimeFormatLength(16); // "20070000:090000."
 
 _LIT_SECURITY_POLICY_C1(KReadDeviceDataPolicy, ECapabilityReadDeviceData);
 _LIT_SECURITY_POLICY_C1(KWriteDeviceDataPolicy, ECapabilityWriteDeviceData);
@@ -60,6 +107,7 @@
 
 // ======== LOCAL FUNCTIONS ==================================================
 
+#ifdef RD_STARTUP_ANIMATION_CUSTOMIZATION
 namespace
     {
     TInt AnimationFinishedFunc( TAny* aPtr )
@@ -68,7 +116,7 @@
         return KErrNone;
         }
     }
-
+#endif // RD_STARTUP_ANIMATION_CUSTOMIZATION
 
 
 // ================= MEMBER FUNCTIONS ========================================
@@ -77,8 +125,17 @@
 // CStartupAppUi::CStartupAppUi()
 // ---------------------------------------------------------------------------
 CStartupAppUi::CStartupAppUi() :
-   iInternalState( EStartupStartingUp ),
-
+    iUserWelcomeNote( NULL ),
+#ifndef RD_STARTUP_ANIMATION_CUSTOMIZATION
+    iStartupTone( NULL ),
+    iOpStartupTone( NULL ),
+    iToneInitWaitTime( 0 ),
+    iAnimation( EFalse ),
+#endif // RD_STARTUP_ANIMATION_CUSTOMIZATION
+    iInternalState( EStartupStartingUp ),
+#ifndef RD_STARTUP_ANIMATION_CUSTOMIZATION
+    iSplashScreenShouldBeRemoved( EFalse ),
+#endif // RD_STARTUP_ANIMATION_CUSTOMIZATION
     iStartupFirstBootAndRTCCheckAlreadyCalled( EFalse ),
     iChargingOrAlarmBoot( EFalse ),
     iFirstBoot( ETrue ),
@@ -88,8 +145,15 @@
     iCriticalBlockEnded( EFalse ),
     iSwStateFatalStartupError( EFalse ),
     iStartupWaitingShowStartupAnimation( EFalse ),
-    iSimSupported( ETrue )
-
+    iSimSupported( ETrue ),
+    iStartupMediatorObserver( NULL ),
+    iCoverUISupported( EFalse ),
+    iCounryListIndex( 0 )
+    , iTime( 0 )
+#ifndef RD_STARTUP_ANIMATION_CUSTOMIZATION
+    , iTouchScreenCalibSupport( EFalse )
+    , iTouchScreenCalibrationDone( EFalse )
+#endif // RD_STARTUP_ANIMATION_CUSTOMIZATION
     {
     TRACES("CStartupAppUi::CStartupAppUi");
     }
@@ -99,18 +163,18 @@
 // ---------------------------------------------------------------------------
 void CStartupAppUi::ConstructL()
     {
-    RThread thread; //increase the thread priority to smooth the animation
-    thread.SetPriority(EPriorityAbsoluteForeground);
-    thread.Close();
     TRACES("CStartupAppUi::ConstructL()");
-    TInt flags = EStandardApp;
-   BaseConstructL( flags );
-        
+    TInt flags = EStandardApp|EAknEnableSkin|EAknEnableMSK ;
+
+    BaseConstructL(flags);
+
+    iAvkonAppUi->SetKeyEventFlags( CAknAppUiBase::EDisableSendKeyShort |
+                                   CAknAppUiBase::EDisableSendKeyLong );
+
+#ifdef RD_STARTUP_ANIMATION_CUSTOMIZATION
     iMainView = CStartupView::NewL( ApplicationRect() );
-    
-   
     iAnimation = CStartupAnimationWrapper::NewL( *iMainView );
-
+#endif // RD_STARTUP_ANIMATION_CUSTOMIZATION
 
     TInt err = RProperty::Define( KPSUidStartupApp,
                                   KPSStartupAppState,
@@ -135,9 +199,42 @@
 
     iStartupPubSubObserver = CStartupPubSubObserver::NewL( this );
 
+#ifndef RD_STARTUP_ANIMATION_CUSTOMIZATION
+    err = RProperty::Define( KPSUidStartup,
+                             KStartupBootIntoOffline,
+                             RProperty::EInt,
+                             KReadDeviceDataPolicy,
+                             KWriteDeviceDataPolicy );
 
+    if( KErrNone != err &&
+        KErrAlreadyExists != err )
+        {
+        TRACES1("CStartupAppUi::ConstructL(): KStartupBootIntoOffline define err %d", err);
+        }
 
+    err = RProperty::Define( KPSUidStartup,
+                             KStartupSecurityCodeQueryStatus,
+                             RProperty::EInt,
+                             KReadDeviceDataPolicy,
+                             KWriteDeviceDataPolicy );
+    if( KErrNone != err &&
+        KErrAlreadyExists != err )
+        {
+        TRACES1("CStartupAppUi::ConstructL(): KStartupSecurityCodeQueryStatus define err %d", err);
+        }
+    err = RProperty::Define( KPSUidStartup,
+                             KStartupCleanBoot,
+                             RProperty::EInt,
+                             KReadDeviceDataPolicy,
+                             KWriteDeviceDataPolicy );
+    if( KErrNone != err &&
+        KErrAlreadyExists != err )
+        {
+        TRACES1("CStartupAppUi::ConstructL(): KStartupCleanBoot define err %d", err);
+        }
+#endif // RD_STARTUP_ANIMATION_CUSTOMIZATION
 
+#ifdef RD_STARTUP_ANIMATION_CUSTOMIZATION
     err = RProperty::Define( KPSUidStartup,
                              KPSStartupUiPhase,
                              RProperty::EInt, 
@@ -151,7 +248,7 @@
         }
     
     UpdateStartupUiPhase( EStartupUiPhaseUninitialized );
-
+#endif // RD_STARTUP_ANIMATION_CUSTOMIZATION
 
     FeatureManager::InitializeLibL();
     if ( FeatureManager::FeatureSupported( KFeatureIdOfflineMode ) )
@@ -162,30 +259,60 @@
         {
         iSimSupported = EFalse;
         }
-    
+    if ( FeatureManager::FeatureSupported( KFeatureIdCoverDisplay ) )
+        {
+        iCoverUISupported = ETrue;
+        }
 
     TRACES1("CStartupAppUi::ConstructL(): Offline mode supported: %d", iOfflineModeSupported );
     TRACES1("CStartupAppUi::ConstructL(): SIM card supported:     %d", iSimSupported );
-    
+    TRACES1("CStartupAppUi::ConstructL(): CoverUI supported:      %d", iCoverUISupported );
+
+#if defined (RD_SCALABLE_UI_V2) && !defined(RD_STARTUP_ANIMATION_CUSTOMIZATION)
+    if ( FeatureManager::FeatureSupported(KFeatureIdPenSupport) &&
+         FeatureManager::FeatureSupported(KFeatureIdPenSupportCalibration) )
+        {
+        iTouchScreenCalibSupport = ETrue;
+        }
+#endif // RD_SCALABLE_UI_V2 && !RD_STARTUP_ANIMATION_CUSTOMIZATION
+
+    if (iCoverUISupported)
+        {
+        iStartupMediatorObserver = CStartupMediatorObserver::NewL( this );
+        }
 
     iFirstBoot = FirstBoot();
     TRACES1("CStartupAppUi::ConstructL(): First boot:             %d", iFirstBoot );
 
-
-    CEikonEnv* eikEnv = CEikonEnv::Static();
+#ifndef RD_STARTUP_ANIMATION_CUSTOMIZATION
+    iWelcomeAnimation = CStartupWelcomeAnimation::NewL( this, ClientRect());
+    AddToStackL( iWelcomeAnimation );
+#endif // RD_STARTUP_ANIMATION_CUSTOMIZATION
 
     // Set Startup application to be system application
-    eikEnv->SetSystem( ETrue );
+    iEikonEnv->SetSystem( ETrue );
 
-    eikEnv->RootWin().SetOrdinalPosition(0,0);
+    iEikonEnv->RootWin().SetOrdinalPosition(0,0);
 
     // Disable priority changes of window server
-    eikEnv->WsSession().ComputeMode(
+    iEikonEnv->WsSession().ComputeMode(
         RWsSession::EPriorityControlDisabled );
-   iNoteTimer = CPeriodic::NewL( EPriorityNormal );
 
+    iNoteTimer = CPeriodic::NewL( EPriorityNormal );
+#ifndef RD_STARTUP_ANIMATION_CUSTOMIZATION
+    iAnimTimer = CPeriodic::NewL( EPriorityNormal );
+#endif // RD_STARTUP_ANIMATION_CUSTOMIZATION
     iExitTimer = CPeriodic::NewL( EPriorityNormal );
 
+#ifndef RD_STARTUP_ANIMATION_CUSTOMIZATION
+    TRACES("CStartupAppUi::ConstructL(): StartupTone: Initialising");
+    iStartupTone = CStartupTone::NewL( this, EStartupTone );
+    TRACES("CStartupAppUi::ConstructL(): StartupTone: Initialised");
+
+    TRACES("CStartupAppUi::ConstructL(): Operator StartupTone: Initialising");
+    iOpStartupTone = CStartupTone::NewL( this, EStartupOpTone );
+    TRACES("CStartupAppUi::ConstructL(): Operator StartupTone: Initialised");
+#endif // RD_STARTUP_ANIMATION_CUSTOMIZATION
 
     if ( iSwStateFatalStartupError )
         {
@@ -207,6 +334,43 @@
     {
     TRACES("CStartupAppUi::~CStartupAppUi()");
 
+#ifndef RD_STARTUP_ANIMATION_CUSTOMIZATION
+    if (iWelcomeAnimation)
+        {
+        RemoveFromStack( iWelcomeAnimation );
+        delete iWelcomeAnimation;
+        }
+
+    if (iOperatorAnimation)
+        {
+        RemoveFromStack( iOperatorAnimation);
+        delete iOperatorAnimation;
+        }
+
+    if (iUserWelcomeNote)
+        {
+        RemoveFromStack( iUserWelcomeNote );
+        delete iUserWelcomeNote;
+        iUserWelcomeNote = NULL;
+        }
+
+    if (iStartupPubSubObserver)
+        {
+        delete iStartupPubSubObserver;
+        }
+    if (iStartupMediatorObserver)
+        {
+        delete iStartupMediatorObserver;
+        }
+    if (iStartupTone)
+        {
+        delete iStartupTone;
+        }
+    if (iOpStartupTone)
+        {
+        delete iOpStartupTone;
+        }
+#endif // RD_STARTUP_ANIMATION_CUSTOMIZATION
 
     if( iExitTimer )
         {
@@ -214,7 +378,13 @@
         delete iExitTimer;
         }
 
-
+#ifndef RD_STARTUP_ANIMATION_CUSTOMIZATION
+    if( iAnimTimer )
+        {
+        iAnimTimer->Cancel();
+        delete iAnimTimer;
+        }
+#endif // RD_STARTUP_ANIMATION_CUSTOMIZATION
 
     if( iNoteTimer )
         {
@@ -222,13 +392,13 @@
         delete iNoteTimer;
         }
 
-
- 
+#ifdef RD_STARTUP_ANIMATION_CUSTOMIZATION
+    delete iUserWelcomeNote;
     delete iAnimation;
     delete iStartupPubSubObserver;
-   
+    delete iStartupMediatorObserver;
     delete iMainView;
-
+#endif // RD_STARTUP_ANIMATION_CUSTOMIZATION
 
     FeatureManager::UnInitializeLib();
 
@@ -242,11 +412,26 @@
     {
     TRACES("CStartupAppUi::PrepareToExit()");
 
-
+#ifdef RD_UI_TRANSITION_EFFECTS_PHASE2
+    // Start the custom exit effect at boot time.
+    // Note: Not allowed to call GfxTransEffect::EndFullScreen() as AVKON takes care of that when
+    // EApplicationExit context is used!
 
- 
-	CEikAppUi::PrepareToExit();
+#ifdef RD_STARTUP_ANIMATION_CUSTOMIZATION
+    if ( !( iAnimation->WasCancelled() ) )
+#else // RD_STARTUP_ANIMATION_CUSTOMIZATION
+    if( !iWelcomeAnimation->IsAnimationCancelled() )
+#endif // RD_STARTUP_ANIMATION_CUSTOMIZATION
+        {
+        TRACES("CStartupAppUi::PrepareToExit(): Starting transition effect");
 
+        GfxTransEffect::BeginFullScreen( AknTransEffect::EApplicationExit, TRect(),
+            AknTransEffect::EParameterType,
+            AknTransEffect::GfxTransParam( KUidStartUp, AknTransEffect::TParameter::EAllowAtBoot ) );
+        }
+#endif
+
+    CEikAppUi::PrepareToExit();
 #ifndef RD_BOOT_CUSTOMIZABLE_AI
     if( !iChargingOrAlarmBoot )
         {
@@ -290,7 +475,6 @@
     return KErrNone;
     }
 
-
 // ---------------------------------------------------------------------------
 // CStartupAppUi::HandleKeyEventL
 // ---------------------------------------------------------------------------
@@ -329,7 +513,13 @@
             iOfflineModeQueryShown = EFalse;
             response = EKeyWasConsumed;
             }
-		
+        else if ( iUserWelcomeNote )
+            {
+            TRACES("CStartupAppUi::HandleKeyEventL(): This key event is used to stop UserWelcomeAnimation");
+            //this is used to stop User Welcome note showing
+            StopTimingL();
+            response = EKeyWasConsumed;
+            }
         else if ( ( iInternalState == EStartupShowingWelcomeAnimation ||
                     iInternalState == EStartupShowingOperatorAnimation ) &&
                    !( iAnimation->WasCancelled() ) )
@@ -345,8 +535,7 @@
     return response;
     }
 
-/*
- * Qt Support Not available..
+#ifdef RD_STARTUP_ANIMATION_CUSTOMIZATION
 // ---------------------------------------------------------------------------
 // CStartupAppUi::HandleResourceChangeL
 //
@@ -356,20 +545,17 @@
     {
     TRACES("CStartupAppUi::HandleResourceChangeL()");
     TRACES1("CStartupAppUi::HandleResourceChangeL Type: %d", aType);
-  
-    
-     * No equivalent in Qt. 
+
     CAknAppUi::HandleResourceChangeL( aType );
 
     if ( aType == KEikDynamicLayoutVariantSwitch )
         {
         iMainView->SetRect( ApplicationRect() );
         }
-     
+
     TRACES("CStartupAppUi::HandleResourceChangeL(): End");
     }
-
-*/
+#endif // RD_STARTUP_ANIMATION_CUSTOMIZATION
 
 
 // ---------------------------------------------------------------------------
@@ -383,8 +569,7 @@
         case EEikCmdExit:
             {
             TRACES("CStartupAppUi::HandleCommandL(): EEikCmdExit");
-
-			Exit();
+            Exit();
             }
             break;
         default:
@@ -399,13 +584,14 @@
 void CStartupAppUi::DoStartupStartPartL()
     {
     TRACES("CStartupAppUi::DoStartupStartPartL()");
-
+#ifdef RD_STARTUP_ANIMATION_CUSTOMIZATION
     TryPreLoadAnimation();
-
+#endif // RD_STARTUP_ANIMATION_CUSTOMIZATION
     DoNextStartupPhaseL( EStartupWaitingCriticalBlock );
     TRACES("CStartupAppUi::DoStartupStartPartL(): End");
     }
 
+#ifdef RD_STARTUP_ANIMATION_CUSTOMIZATION
 // ---------------------------------------------------------------------------
 // CStartupAppUi::TryPreLoadAnimation()
 // ---------------------------------------------------------------------------
@@ -436,7 +622,7 @@
         {
         iAnimation->PreLoad(
             ClientRect(),
-			*iMainView,
+            *iMainView,
             KStartupAnimationParams,
             ETrue,
             SecondaryDisplay::EStartWelcomeAnimation );
@@ -444,7 +630,7 @@
 
     TRACES("CStartupAppUi::TryPreLoadAnimation(): End");
     }
-
+#endif // RD_STARTUP_ANIMATION_CUSTOMIZATION
 
 
 // ---------------------------------------------------------------------------
@@ -459,24 +645,44 @@
         //the same way like in the end of ShowUserWelcomeNoteL()
         TRACES("CStartupAppUi::DoStartupShowWelcomeAnimationL(): Skip the animation and UWN because it's hidden reset");
         TRACES("CStartupAppUi::DoStartupShowWelcomeAnimationL(): and change internal state directly to EStartupFirstBootAndRTCCheck");
-
+#ifndef RD_STARTUP_ANIMATION_CUSTOMIZATION
+        iWelcomeAnimation->RemoveSplashScreen();
+#endif // RD_STARTUP_ANIMATION_CUSTOMIZATION
         DoNextStartupPhaseL( EStartupFirstBootAndRTCCheck );
-
+#ifndef RD_STARTUP_ANIMATION_CUSTOMIZATION
+        return;
+#endif // RD_STARTUP_ANIMATION_CUSTOMIZATION
         }
-
+#ifdef RD_STARTUP_ANIMATION_CUSTOMIZATION
     else
         {
         TRACES("CStartupAppUi::DoStartupShowWelcomeAnimationL(): Show animation");
 
         iAnimation->Play(
             ClientRect(),
-			*iMainView,
+            *iMainView,
             KStartupAnimationParams,
             ETrue,
             SecondaryDisplay::EStartWelcomeAnimation,
             TCallBack( AnimationFinishedFunc, this ) );
         }
+#else // RD_STARTUP_ANIMATION_CUSTOMIZATION
 
+    TRACES("CStartupAppUi::DoStartupShowWelcomeAnimationL(): Play startup tone.");
+
+    // Play startup tone
+    if (iStartupTone->Play() != KErrNone)
+        {
+        // Play startup beep.
+        TRACES("CStartupAppUi::DoStartupShowWelcomeAnimationL(): Play startup beep");
+        static_cast<CAknAppUi*>(iEikonEnv->
+                                EikAppUi())->
+                                KeySounds()->
+                                PlaySound( EAvkonSIDPowerOnTone );
+        }
+    iWelcomeAnimation->SetAnimationShowing(ETrue);
+    ShowWelcomeAnimationL();
+#endif // RD_STARTUP_ANIMATION_CUSTOMIZATION
 
     TRACES("CStartupAppUi::DoStartupShowWelcomeAnimationL(): End");
     }
@@ -494,9 +700,11 @@
         TRACES("CStartupAppUi::DoStartupShowOperatorAnimationL(): Skip the animation and UWN because it's hidden reset");
         TRACES("CStartupAppUi::DoStartupShowOperatorAnimationL(): and change internal state directly to EStartupFirstBootAndRTCCheck");
         DoNextStartupPhaseL( EStartupFirstBootAndRTCCheck );
-
+#ifndef RD_STARTUP_ANIMATION_CUSTOMIZATION
+        return;
+#endif // RD_STARTUP_ANIMATION_CUSTOMIZATION
         }
-
+#ifdef RD_STARTUP_ANIMATION_CUSTOMIZATION
     else
         {
         TRACES("CStartupAppUi::DoStartupShowOperatorAnimationL(): Show animation");
@@ -510,18 +718,61 @@
         params.iVolumeKey = KStartupOperatorToneVolume;
         iAnimation->Play(
             ClientRect(),
-	
             *iMainView,
             params,
             EFalse,
             SecondaryDisplay::EStartOperatorAnimation,
             TCallBack( AnimationFinishedFunc, this ) );
         }
-
+#else // RD_STARTUP_ANIMATION_CUSTOMIZATION
+    if ( iOperatorAnimation->ShowingTime() )
+        {
+        TRACES("CStartupAppUi::DoStartupShowOperatorAnimationL(): Operator animation time defined properly");
+        iOperatorAnimation->SetAnimationShowing(ETrue);
+        iOpStartupTone->Play();
+        ShowOperatorAnimationL();
+        }
+    else
+        {
+        TRACES("CStartupAppUi::DoStartupShowOperatorAnimationL(): Operator animation not defined. Skip it.");
+        iOperatorAnimation->SetAnimationShowing(EFalse);
+        DoNextStartupPhaseL( EStartupShowingUserWelcomeNote );
+        }
+#endif // RD_STARTUP_ANIMATION_CUSTOMIZATION
 
     TRACES("CStartupAppUi::DoStartupShowOperatorAnimationL(): End");
     }
 
+// ---------------------------------------------------------------------------
+// CStartupAppUi::DoStartupShowUserWelcomeNoteL()
+// ---------------------------------------------------------------------------
+void CStartupAppUi::DoStartupShowUserWelcomeNoteL()
+    {
+    TRACES("CStartupAppUi::DoStartupShowUserWelcomeNoteL()");
+    ShowUserWelcomeNoteL();
+    TRACES("CStartupAppUi::DoStartupShowUserWelcomeNoteL(): End");
+    }
+
+// ---------------------------------------------------------------------------
+// CStartupAppUi::StartupQueriesEnabled()
+// ---------------------------------------------------------------------------
+TBool CStartupAppUi::StartupQueriesEnabled()
+    {
+    TRACES("CStartupAppUi::StartupQueriesEnabled()");
+
+    TInt value( EStartupQueriesEnabled );
+    CRepository* repository(NULL);
+
+    TRAPD( err, repository = CRepository::NewL( KCRUidStartupConf ) );
+    if ( err == KErrNone )
+        {
+        err = repository->Get( KStartupQueries, value );
+        }
+    delete repository;
+
+    TRACES1("CStartupAppUi::StartupQueriesEnabled(): returns %d", value);
+    return value;
+    }
 
 // ---------------------------------------------------------------------------
 // CStartupAppUi::PredictiveTimeEnabled()
@@ -551,46 +802,69 @@
     {
     TRACES("CStartupAppUi::DoStartupFirstBootAndRTCCheckL()");
 
-
+#ifdef RD_STARTUP_ANIMATION_CUSTOMIZATION
     RProperty::Set( KPSUidStartup, KStartupCleanBoot, iCleanBoot );
     RProperty::Set( KPSUidStartup, KPSSplashShutdown, ESplashShutdown );
 
+    delete iUserWelcomeNote;
+    iUserWelcomeNote = NULL;
     iMainView->DrawDeferred();
-
+#endif // RD_STARTUP_ANIMATION_CUSTOMIZATION
 
     // When Predictive Time and Country Selection is enabled, no queries are
     // shown to user during first boot. Instead, Clock application gets the
     // time and location from the network and marks the first boot as done.
     if( !PredictiveTimeEnabled() )
         {
-        if( iFirstBoot && !HiddenReset() ) //&& StartupQueriesEnabled() )
+        if( iFirstBoot && !HiddenReset() && StartupQueriesEnabled() )
             {
             TRACES("CStartupAppUi::DoStartupFirstBootAndRTCCheckL(): First boot. Show city, time and date queries.");
-		    TRACES("CStartupAppUi::DoStartupFirstBootAndRTCCheckL(): Mark first boot");
+    
+    
+#ifndef RD_STARTUP_ANIMATION_CUSTOMIZATION
+            iWelcomeAnimation->UpdateDrawInfo( EStartupDICityTimeDateQueries );
+            iWelcomeAnimation->DrawNow();
+    
+            if (iOperatorAnimation)
+                {
+                RemoveFromStack( iOperatorAnimation );
+                delete iOperatorAnimation;
+                iOperatorAnimation = NULL;
+                }
+            if (iUserWelcomeNote)
+                {
+                RemoveFromStack( iUserWelcomeNote );
+                delete iUserWelcomeNote;
+                iUserWelcomeNote = NULL;
+                }
+#endif // RD_STARTUP_ANIMATION_CUSTOMIZATION
+            
+            ShowStartupQueriesL();
+            TRACES("CStartupAppUi::DoStartupFirstBootAndRTCCheckL(): Mark first boot");
             MarkFirstBoot();    
                 
             }
-		else if( !RTCStatus() && !HiddenReset() ) // && StartupQueriesEnabled())
+        else if( !RTCStatus() && !HiddenReset() && StartupQueriesEnabled())
             {
             TRACES("CStartupAppUi::DoStartupFirstBootAndRTCCheckL(): No first boot but RTCStatus is corrupted. Ask time and date");
-		     }
-		if( iFirstBoot )  // && !StartupQueriesEnabled() )
+    #ifndef RD_STARTUP_ANIMATION_CUSTOMIZATION
+            iWelcomeAnimation->UpdateDrawInfo( EStartupDICityTimeDateQueries );
+            if (iUserWelcomeNote)
+                {
+                RemoveFromStack( iUserWelcomeNote );
+                delete iUserWelcomeNote;
+                iUserWelcomeNote = NULL;
+                }
+    #endif // RD_STARTUP_ANIMATION_CUSTOMIZATION
+    
+            ShowStartupQueriesL(); // Not first boot, so skips Country/City query
+            }
+        if( iFirstBoot && !StartupQueriesEnabled() )
             {
             TRACES("CStartupAppUi::DoStartupFirstBootAndRTCCheckL(): First boot ongoing and queries are disabled.");
             MarkFirstBoot();
             }
         }
-	else
-		{
-		// Temporary fix for the defect VEZI-7YDEAR , as clock is not yet supported.
-		TRACES("CStartupAppUi::DoStartupFirstBootAndRTCCheckL(): if PredictiveTimeEnabled is set");
-		if( iFirstBoot && !HiddenReset() )
-		    {
-            TRACES("CStartupAppUi::DoStartupFirstBootAndRTCCheckL(): Mark first boot");
-            MarkFirstBoot();
-			}
-		// End of temporary fix.
-		}
 
     TRACES("CStartupAppUi::DoStartupFirstBootAndRTCCheckL(): Setting KPSStartupAppState = EStartupAppStateFinished");
     TInt err = RProperty::Set( KPSUidStartupApp, KPSStartupAppState, EStartupAppStateFinished );
@@ -600,11 +874,58 @@
                 , err);
         }
 
-    DoNextStartupPhaseL( EStartupStartupOK );
+    DoNextStartupPhaseL( EStartupWaitingCUIStartupReady );
     }
 
+// ---------------------------------------------------------------------------
+// CStartupAppUi::ShowStartupQueriesL()
+// ---------------------------------------------------------------------------
+void CStartupAppUi::ShowStartupQueriesL()
+    {
+    TRACES("CStartupAppUi::ShowStartupQueriesL()");
 
+    TBool citysaved(EFalse);
+    TBool timesaved(EFalse);
+    TBool datesaved(EFalse);
 
+    // Get default time ( to be used only in date query )
+    GetDefaultTimeAndDate( iTime );
+
+    // Show Country, Date and Time queries ( with possibility to go back ).
+    // Country query is shown only in the first boot.
+
+    while (!timesaved)
+        {
+        while (!datesaved)
+            {
+            while (!citysaved && iFirstBoot)
+                {
+                // 1. Select time zone
+                ShowCountryAndCityListsL();
+                citysaved = ETrue;
+                TRACES1("CStartupAppUi::ShowStartupQueriesL(): citysaved = %d", citysaved );
+                }
+            // 2. Set date
+            datesaved = ShowDateQueryL();
+            TRACES1("CStartupAppUi::ShowStartupQueriesL(): datesaved = %d", datesaved );
+            if (!datesaved)
+                {
+                citysaved = EFalse;
+                }
+            }
+        // 3. Set time
+        timesaved = ShowTimeQueryL();
+        TRACES1("CStartupAppUi::ShowStartupQueriesL(): timesaved = %d", timesaved );
+        if (!timesaved)
+            {
+            datesaved = EFalse;
+            }
+        }
+
+    // All the queries completed.
+
+    TRACES("CStartupAppUi::ShowStartupQueriesL() - END");
+    }
 
 // ---------------------------------------------------------------------------
 // CStartupAppUi::DoStartupEndPart()
@@ -613,31 +934,100 @@
     {
     TRACES("CStartupAppUi::DoStartupEndPart()");
     TRACES("CStartupAppUi::DoStartupEndPart(): STARTUP OK");
+
+#ifndef RD_STARTUP_ANIMATION_CUSTOMIZATION
+    RProperty::Set( KPSUidStartup, KStartupCleanBoot, iCleanBoot );
+#endif // RD_STARTUP_ANIMATION_CUSTOMIZATION
+
+#ifdef RD_STARTUP_ANIMATION_CUSTOMIZATION    
+    TBool fTUDone = ETrue;
+    TRAP_IGNORE(IsFTUAvailableL(fTUDone));
     
-    TBool ftuenabled=EFalse;
-    TInt err=KErrNone;
-#ifndef __WINSCW__
-    TRAP(err,
-            TInt enabled=0;
-            //open cenrep;
-            CRepository *cenrep=CRepository::NewLC(KCRUidStartupConf);
-            //check if ftu is enabled or not
-            User::LeaveIfError(cenrep->Get(KFtuStartupEnabled,enabled));
-            ftuenabled=!!enabled; //make sure we only have a boolean value here
-            CleanupStack::PopAndDestroy(cenrep);
-            );
-#endif     
-    if(!ftuenabled)
+    if(fTUDone)
+    	{
+    	UpdateStartupUiPhase( EStartupUiPhaseAllDone );
+    	}
+	else
         {
-        UpdateStartupUiPhase( EStartupUiPhaseAllDone );
+        UpdateStartupUiPhase(EStartupUiPhaseAllDone+1);
         }
 
+    //UpdateStartupUiPhase( EStartupUiPhaseAllDone );
+    
+    
+#endif // RD_STARTUP_ANIMATION_CUSTOMIZATION
+
     TRACES("CStartupAppUi::DoStartupEndPart(): Exit application.");
     iExitTimer->Start( 100000, 100000, TCallBack( DoExitApplication, this ) );
     TRACES("CStartupAppUi::DoStartupEndPart(): DoExitApplication-timer called.");
     TRACES("CStartupAppUi::DoStartupEndPart(): End");
     }
 
+void CStartupAppUi::IsFTUAvailableL(TBool& aFTUAvailable)
+    {
+    	//From Startupwelcomecrkeys.h
+    	CRepository* repo = CRepository::NewLC(KCRUidWelcome6);
+			repo->Get(KPhoneActicationCompleted, aFTUAvailable);
+			CleanupStack::PopAndDestroy(repo);
+    }
+
+
+#ifndef RD_STARTUP_ANIMATION_CUSTOMIZATION
+// ---------------------------------------------------------------------------
+// CStartupAppUi::ContinueStartupAfterToneL()
+// ---------------------------------------------------------------------------
+void CStartupAppUi::ContinueStartupAfterToneL(TToneType aToneType)
+    {
+    TRACES("CStartupAppUi::ContinueStartupAfterToneL()");
+
+    if (aToneType == EStartupTone)
+        {
+        TRACES("CStartupAppUi::ContinueStartupAfterToneL(): Tone type EStartupTone");
+        DoNextStartupPhaseL( EStartupWaitingCUIOperatorAnim );
+        }
+    else if (aToneType == EStartupOpTone)
+        {
+        TRACES("CStartupAppUi::ContinueStartupAfterToneL(): Tone type EStartupOpTone");
+        DoNextStartupPhaseL( EStartupShowingUserWelcomeNote );
+        }
+    else
+        {
+        TRACES("CStartupAppUi::ContinueStartupAfterToneL(): Tone interrupted");
+        DoNextStartupPhaseL( EStartupFirstBootAndRTCCheck );
+        }
+    TRACES("CStartupAppUi::ContinueStartupAfterToneL(): End");
+    }
+
+// ---------------------------------------------------------------------------
+// CStartupAppUi::BringToForeground()
+// ---------------------------------------------------------------------------
+void CStartupAppUi::BringToForeground()
+    {
+    TRACES("CStartupAppUi::BringToForeground()");
+    if ((iInternalState != EStartupWaitingTouchScreenCalib) ||
+        (iTouchScreenCalibrationDone))
+        {
+        TRACES("CStartupAppUi::BringToForeground(): Bring to foreground");
+        TApaTask self(iCoeEnv->WsSession());
+        self.SetWgId(iCoeEnv->RootWin().Identifier());
+        self.BringToForeground();
+        }
+    TRACES("CStartupAppUi::BringToForeground(): End");
+    }
+
+// ---------------------------------------------------------------------------
+// CStartupAppUi::SendToBackground()
+// ---------------------------------------------------------------------------
+void CStartupAppUi::SendToBackground()
+    {
+    TRACES("CStartupAppUi::SendToBackground()");
+    TApaTask self(iCoeEnv->WsSession());
+    self.SetWgId(iCoeEnv->RootWin().Identifier());
+    self.SendToBackground();
+    TRACES("CStartupAppUi::SendToBackground(): End");
+    }
+#endif // RD_STARTUP_ANIMATION_CUSTOMIZATION
+
 // ---------------------------------------------------------------------------
 // CStartupAppUi::StopTimingL()
 // ---------------------------------------------------------------------------
@@ -653,10 +1043,87 @@
             TRACES("CStartupAppUi::StopTimingL(): Stopping UWN");
             iStartupFirstBootAndRTCCheckAlreadyCalled = ETrue;
             iNoteTimer->Cancel();
-
+#ifdef RD_STARTUP_ANIMATION_CUSTOMIZATION
             UpdateStartupUiPhase( EStartupUiPhaseUserWelcomeDone );
             DoNextStartupPhaseL( EStartupFirstBootAndRTCCheck );
+#else // RD_STARTUP_ANIMATION_CUSTOMIZATION
+       iUserWelcomeNote->CancelNoteCancelTimer();
+            iWelcomeAnimation->UpdateDrawInfo( EStartupDIWelcomeNoteEnd );
+            iWelcomeAnimation->DrawNow();
+            iUserWelcomeNote->SetUserWelcomeNoteShowing(EFalse);
+            TRACES("CStartupAppUi::StopTimingL(): UWN stopped");
 
+            if (iStartupTone->Playing())
+                {
+                TRACES("CStartupAppUi::StopTimingL(): Startup tone playing. Cannot continue to next phase");
+                iStartupTone->StartupWaiting(ETrue);
+                }
+            else
+                {
+                DoNextStartupPhaseL( EStartupFirstBootAndRTCCheck );
+                }
+            }
+        else if (iInternalState == EStartupShowingOperatorAnimation)  // EStartupShowingOperatorAnimation
+            {
+            TRACES("CStartupAppUi::StopTimingL(): Stopping animation");
+            iAnimTimer->Cancel();
+            iWelcomeAnimation->CancelAnimCancelTimer();
+            iOperatorAnimation->UpdateDrawInfo( EStartupDIOperatorAnimEnd );
+            iOperatorAnimation->SetAnimationShowing(EFalse);
+            TRACES("CStartupAppUi::StopTimingL(): operator animation showing stopped");
+            if ( iOperatorAnimation->IsAnimationCancelled())
+                {
+                TRACES("CStartupAppUi::StopTimingL(): Animation is cancelled by user and therefore UWN is not shown");
+                StopOperatorTone();
+                iStartupFirstBootAndRTCCheckAlreadyCalled = ETrue;
+                DoNextStartupPhaseL( EStartupFirstBootAndRTCCheck );
+                }
+            else
+                {
+                // If tone is still playing wait until it completes.
+                if (iOpStartupTone->Playing())
+                    {
+                    TRACES("CStartupAppUi::StopTimingL(): Operator startup tone is still playing. Wait until it completes.");
+                    iOpStartupTone->StartupWaiting(ETrue);
+                    }
+                else
+                    {
+                    TRACES("CStartupAppUi::StopTimingL(): Lets display UWN");
+                    DoNextStartupPhaseL( EStartupShowingUserWelcomeNote );
+                    }
+                }
+            TRACES("CStartupAppUi::StopTimingL(): Operator Animation stopped");
+            }
+        else // EStartupShowingWelcomeAnimation
+            {
+            TRACES("CStartupAppUi::StopTimingL(): Stopping animation");
+            iAnimTimer->Cancel();
+            iWelcomeAnimation->CancelAnimCancelTimer();
+            iWelcomeAnimation->UpdateDrawInfo( EStartupDIWelcomeAnimEnd );
+            iWelcomeAnimation->SetAnimationShowing(EFalse);
+            TRACES("CStartupAppUi::StopTimingL(): Welcome animation showing stopped");
+
+            if ( iWelcomeAnimation->IsAnimationCancelled())
+                {
+                TRACES("CStartupAppUi::StopTimingL(): Animation is cancelled by user and therefore operator animation and UWN is not shown");
+                StopStartupTone();
+                iStartupFirstBootAndRTCCheckAlreadyCalled = ETrue;
+                DoNextStartupPhaseL( EStartupFirstBootAndRTCCheck );
+                }
+            else
+                {
+                if (iStartupTone->Playing())
+                    {
+                    // If tone is still playing wait until it completes.
+                    iStartupTone->StartupWaiting(ETrue);
+                    }
+                else
+                    {
+                    DoNextStartupPhaseL( EStartupWaitingCUIOperatorAnim );
+                    }
+                }
+            TRACES("CStartupAppUi::StopTimingL(): Animation stopped");
+#endif // RD_STARTUP_ANIMATION_CUSTOMIZATION
             }
         }
 
@@ -674,6 +1141,331 @@
     TRACES("CStartupAppUi::ExitApplication(): End");
     }
 
+#ifndef RD_STARTUP_ANIMATION_CUSTOMIZATION
+// ---------------------------------------------------------------------------
+// CStartupAppUi::ShowWelcomeAnimationL()
+// ---------------------------------------------------------------------------
+void CStartupAppUi::ShowWelcomeAnimationL()
+    {
+    TRACES("CStartupAppUi::ShowWelcomeAnimationL()");
+    __ASSERT_DEBUG( iWelcomeAnimation , PANIC( EStartupPanicClassMemberVariableIsNull ) );
+    TInt showtime = iWelcomeAnimation->ShowingTime();
+    iAnimation = ETrue;
+    TRACES("CStartupAppUi::ShowWelcomeAnimationL(): Animation timer started");
+    iAnimTimer->Start(
+            showtime*KOneMilliSecondInMicroSeconds,
+            showtime*KOneMilliSecondInMicroSeconds,
+            TCallBack( DoStopTimingL, this ) );
+    iWelcomeAnimation->StartL();
+    TRACES("CStartupAppUi::ShowWelcomeAnimationL(): End");
+    }
+
+// ---------------------------------------------------------------------------
+// CStartupAppUi::ShowOperatorAnimationL()
+// ---------------------------------------------------------------------------
+void CStartupAppUi::ShowOperatorAnimationL()
+    {
+    TRACES("CStartupAppUi::ShowOperatorAnimationL()");
+    __ASSERT_DEBUG( iOperatorAnimation , PANIC( EStartupPanicClassMemberVariableIsNull ) );
+    TInt showtime = iOperatorAnimation->ShowingTime();
+    iAnimation = ETrue;
+    TRACES("CStartupAppUi::ShowWelcomeAnimationL(): Operator Animation timer started");
+    iAnimTimer->Start(
+        showtime*KOneMilliSecondInMicroSeconds,
+        showtime*KOneMilliSecondInMicroSeconds,
+        TCallBack( DoStopTimingL, this ) );
+    iOperatorAnimation->StartL();
+    TRACES("CStartupAppUi::ShowOperatorAnimationL(): End");
+    }
+#endif // RD_STARTUP_ANIMATION_CUSTOMIZATION
+
+// ---------------------------------------------------------------------------
+// CStartupAppUi::ShowUserWelcomeNoteL()
+// ---------------------------------------------------------------------------
+void CStartupAppUi::ShowUserWelcomeNoteL()
+    {
+    TRACES("CStartupAppUi::ShowUserWelcomeNoteL()");
+#ifdef RD_STARTUP_ANIMATION_CUSTOMIZATION
+    iUserWelcomeNote = CStartupUserWelcomeNote::NewL( *this, ClientRect(), *iMainView );
+    TStartupNoteTypeInformation type = iUserWelcomeNote->NoteTypeInformation();
+#else // RD_STARTUP_ANIMATION_CUSTOMIZATION
+    __ASSERT_DEBUG( iUserWelcomeNote , PANIC( EStartupPanicClassMemberVariableIsNull ) );
+    TStartupNoteTypeInformation type;
+    type = iUserWelcomeNote->NoteTypeInformation();
+#endif // RD_STARTUP_ANIMATION_CUSTOMIZATION
+    if( type == EStartupImage )
+        {
+        // UserWelcomeNote type is EStartupImage
+        // This type of note is shown fixed (KUserWelcomeNoteShowPeriodTime) time
+        TRACES("CStartupAppUi::ShowUserWelcomeNoteL(): UWNTimer started (graphic)");
+#ifndef RD_STARTUP_ANIMATION_CUSTOMIZATION
+        iAnimation = EFalse;
+#endif // RD_STARTUP_ANIMATION_CUSTOMIZATION
+        iNoteTimer->Start(
+            KUserWelcomeNoteShowPeriodTime,
+            KUserWelcomeNoteShowPeriodTime,
+            TCallBack( DoStopTimingL, this ) );
+#ifdef RD_STARTUP_ANIMATION_CUSTOMIZATION
+        iUserWelcomeNote->StartL();
+#endif // RD_STARTUP_ANIMATION_CUSTOMIZATION
+        }
+#ifdef RD_STARTUP_ANIMATION_CUSTOMIZATION
+    else if ( type == EStartupText )
+        {
+        TRACES("CStartupAppUi::ShowUserWelcomeNoteL(): Text UWN");
+
+        iUserWelcomeNote->StartL();
+        
+        UpdateStartupUiPhase( EStartupUiPhaseUserWelcomeDone );
+                
+        DoNextStartupPhaseL( EStartupFirstBootAndRTCCheck );
+        }
+    else
+        {
+        TRACES("CStartupAppUi::ShowUserWelcomeNoteL(): No UWN");
+
+        DoNextStartupPhaseL( EStartupFirstBootAndRTCCheck );
+#else // RD_STARTUP_ANIMATION_CUSTOMIZATION
+    else
+        {
+        //if User Welcome Note type is ETextWelcomeNote nothing to do here,
+        //because it is implemented with Avkon globalnote
+        //or if type is EDefaultWelcomeNote no User Welcome Note is shown.
+        TRACES("CStartupAppUi::ShowUserWelcomeNoteL(): No UWN to show or UWN is text");
+        }
+    //invoke welcome note container to show note
+    iUserWelcomeNote->StartL();
+
+    if( type == EStartupText || type == EStartupNoNote)
+        {
+        //this is called already here because timer not activated in text uwn case
+        //and so DoStopTimingL() is never called and should be called here.
+        StopTimingL();
+#endif // RD_STARTUP_ANIMATION_CUSTOMIZATION
+        }
+
+    TRACES("CStartupAppUi::ShowUserWelcomeNoteL(): End");
+    }
+
+#ifndef RD_STARTUP_ANIMATION_CUSTOMIZATION
+// ---------------------------------------------------------------------------
+// CStartupAppUi::WaitingTouchScreenCalibL()
+// ---------------------------------------------------------------------------
+void CStartupAppUi::WaitingTouchScreenCalibL()
+    {
+    TRACES("CStartupAppUi::WaitingTouchScreenCalibL()");
+#ifdef RD_SCALABLE_UI_V2
+
+    if( iFirstBoot && iTouchScreenCalibSupport )
+        {
+        if (iTouchScreenCalibrationDone)
+            {
+            TRACES("CStartupAppUi::WaitingTouchScreenCalibL(): Calibration already done. Continue boot up");
+            DoNextStartupPhaseL( EStartupOfflineModeQuery );
+            }
+        else
+            {
+            SendToBackground();
+
+            iWelcomeAnimation->UpdateDrawInfo( EStartupDITouchScreenCalib );
+            iWelcomeAnimation->DrawNow();
+            TRACES("CStartupAppUi::WaitingTouchScreenCalibL(): Startup sequence halted until Touch Screen Calibration is done");
+            }
+        }
+    else
+        {
+        TRACES("CStartupAppUi::WaitingTouchScreenCalibL(): Not first boot or calibration not supported. Continue boot up");
+        DoNextStartupPhaseL( EStartupOfflineModeQuery );
+        }
+
+#else // !RD_SCALABLE_UI_V2
+    TRACES("CStartupAppUi::WaitingTouchScreenCalibL(): Calibration not supported. Continue boot up");
+    DoNextStartupPhaseL( EStartupOfflineModeQuery );
+
+#endif // RD_SCALABLE_UI_V2
+    TRACES("CStartupAppUi::WaitingTouchScreenCalibL(): End");
+    }
+
+#ifdef RD_SCALABLE_UI_V2
+// ---------------------------------------------------------------------------
+// CStartupAppUi::TouchScreenCalibrationDoneL()
+// ---------------------------------------------------------------------------
+void CStartupAppUi::TouchScreenCalibrationDoneL()
+    {
+    TRACES("CStartupAppUi::TouchScreenCalibrationDoneL()");
+    if (iInternalState == EStartupWaitingTouchScreenCalib)
+        {
+        iTouchScreenCalibrationDone = ETrue;
+        BringToForeground();
+        DoNextStartupPhaseL( EStartupOfflineModeQuery );
+        }
+    else
+        {
+        iTouchScreenCalibrationDone = ETrue;
+        }
+    TRACES("CStartupAppUi::TouchScreenCalibrationDoneL(): End");
+    }
+#endif // RD_SCALABLE_UI_V2
+#endif // RD_STARTUP_ANIMATION_CUSTOMIZATION
+
+#ifndef RD_STARTUP_ANIMATION_CUSTOMIZATION
+// ---------------------------------------------------------------------------
+// CStartupAppUi::CoverUIWelcomeAnimationSyncOKL()
+// ---------------------------------------------------------------------------
+void CStartupAppUi::CoverUIWelcomeAnimationSyncOKL()
+    {
+    TRACES("CStartupAppUi::CoverUIWelcomeAnimationSyncOKL()");
+    DoNextStartupPhaseL( EStartupWaitingStartupTone );
+    TRACES("CStartupAppUi::CoverUIWelcomeAnimationSyncOKL(): End");
+    }
+
+// ---------------------------------------------------------------------------
+// CStartupAppUi::WaitingCoverUIWelcomeAnimationSyncL()
+// ---------------------------------------------------------------------------
+void CStartupAppUi::WaitingCoverUIWelcomeAnimationSyncL()
+    {
+    TRACES("CStartupAppUi::WaitingCoverUIWelcomeAnimationSyncL()");
+    if (iCoverUISupported)
+        {
+        iStartupMediatorObserver->IssueCommand(SecondaryDisplay::ECmdStartupSync,
+                                               SecondaryDisplay::EStartWelcomeAnimation);
+        }
+    else
+        {
+        DoNextStartupPhaseL( EStartupWaitingStartupTone );
+        }
+    TRACES("CStartupAppUi::WaitingCoverUIWelcomeAnimationSyncL(): End");
+    }
+
+// ---------------------------------------------------------------------------
+// CStartupAppUi::CoverUIOperatorAnimationSyncOKL()
+// ---------------------------------------------------------------------------
+void CStartupAppUi::CoverUIOperatorAnimationSyncOKL()
+    {
+    TRACES("CStartupAppUi::CoverUIOperatorAnimationSyncOKL()");
+    DoNextStartupPhaseL( EStartupShowingOperatorAnimation );
+    TRACES("CStartupAppUi::CoverUIOperatorAnimationSyncOKL(): End");
+    }
+
+// ---------------------------------------------------------------------------
+// CStartupAppUi::WaitingCoverUIOperatorAnimationSyncL()
+// ---------------------------------------------------------------------------
+void CStartupAppUi::WaitingCoverUIOperatorAnimationSyncL()
+    {
+    TRACES("CStartupAppUi::WaitingCoverUIOperatorAnimationSyncL()");
+    if (iCoverUISupported)
+        {
+        if (iOperatorAnimation->ShowingTime())
+            {
+            iStartupMediatorObserver->IssueCommand(SecondaryDisplay::ECmdStartupSync,
+                                                   SecondaryDisplay::EStartOperatorAnimation );
+            }
+        else
+            {
+            DoNextStartupPhaseL( EStartupShowingOperatorAnimation );
+            }
+        }
+    else
+        {
+        DoNextStartupPhaseL( EStartupShowingOperatorAnimation );
+        }
+    TRACES("CStartupAppUi::WaitingCoverUIOperatorAnimationSyncL(): End");
+    }
+
+// ---------------------------------------------------------------------------
+// CStartupAppUi::WaitingStartupToneL()
+// ---------------------------------------------------------------------------
+void CStartupAppUi::WaitingStartupToneL()
+    {
+    if( iStartupTone->ToneFound() && !iStartupTone->AudioReady() )
+        {
+        TRACES("CStartupAppUi::WaitingStartupToneL(): Startup tone found but not ready. Waiting tone to init");
+        iToneInitTimer = CPeriodic::NewL( EPriorityNormal );
+        iToneInitTimer->Start( KOneMilliSecondInMicroSeconds,
+                               KOneMilliSecondInMicroSeconds,
+                               TCallBack( ToneInitTimerTimeoutL, this ) );
+        }
+    else
+        {
+        TRACES("CStartupAppUi::WaitingStartupToneL(): Audio ready");
+        DoNextStartupPhaseL( EStartupShowingWelcomeAnimation );
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CStartupAppUi::ToneInitTimerTimeoutL()
+// ---------------------------------------------------------------------------
+TInt CStartupAppUi::ToneInitTimerTimeoutL(TAny* aObject)
+    {
+    STATIC_CAST( CStartupAppUi*, aObject )->StartupToneWaitStatusL(); // cast, and call non-static function
+    return KErrNone;
+    }
+
+// ---------------------------------------------------------------------------
+// CStartupAppUi::StartupToneWaitStatusL()
+// ---------------------------------------------------------------------------
+void CStartupAppUi::StartupToneWaitStatusL()
+    {
+    iToneInitWaitTime++;
+    TRACES1("CStartupAppUi::StartupToneWaitStatusL(): Total tone init wait time = %d ms", iToneInitWaitTime );
+    TBool audioReady = iStartupTone->AudioReady();
+    if ( audioReady || (iToneInitWaitTime>=KMaxToneInitWait) )
+        {
+        iToneInitTimer->Cancel();
+        delete iToneInitTimer;
+        iToneInitTimer = NULL;
+
+        TRACES1("CStartupAppUi::StartupToneWaitStatusL(): AudioReady: %d, proceed", audioReady );
+        DoNextStartupPhaseL( EStartupShowingWelcomeAnimation );
+        }
+    }
+#endif // RD_STARTUP_ANIMATION_CUSTOMIZATION
+
+// ---------------------------------------------------------------------------
+// CStartupAppUi::CoverUIStartupReadySyncOKL()
+// ---------------------------------------------------------------------------
+void CStartupAppUi::CoverUIStartupReadySyncOKL()
+    {
+    TRACES("CStartupAppUi::CoverUIStartupReadySyncOKL()");
+    DoNextStartupPhaseL( EStartupStartupOK );
+    TRACES("CStartupAppUi::CoverUIStartupReadySyncOKL(): End");
+    }
+
+// ---------------------------------------------------------------------------
+// CStartupAppUi::WaitingCoverUIStartupReadySyncL()
+// ---------------------------------------------------------------------------
+void CStartupAppUi::WaitingCoverUIStartupReadySyncL()
+    {
+    TRACES("CStartupAppUi::WaitingCoverUIStartupReadySyncL()");
+    if (iCoverUISupported)
+        {
+        iStartupMediatorObserver->IssueCommand(SecondaryDisplay::ECmdStartupSync,
+                                               SecondaryDisplay::EStartStartupReady);
+        }
+    else
+        {
+        DoNextStartupPhaseL( EStartupStartupOK );
+        }
+    TRACES("CStartupAppUi::WaitingCoverUIStartupReadySyncL(): End");
+    }
+
+// ---------------------------------------------------------------------------
+// CStartupAppUi::RaiseCoverUIEvent()
+// ---------------------------------------------------------------------------
+void CStartupAppUi::RaiseCoverUIEvent( TUid aCategory,
+                                       TInt aEventId,
+                                       const TDesC8& aData )
+    {
+    TRACES("CStartupAppUi::RaiseCoverUIEvent()");
+    if (iCoverUISupported)
+        {
+        iStartupMediatorObserver->RaiseEvent( aCategory,
+                                              aEventId,
+                                              aData );
+        }
+    TRACES("CStartupAppUi::RaiseCoverUIEvent(): End");
+    }
+
 // ---------------------------------------------------------------------------
 // CStartupAppUi::SetCriticalBlockEndedL()
 // ---------------------------------------------------------------------------
@@ -698,8 +1490,11 @@
     if( iCriticalBlockEnded )
         {
         TRACES("CStartupAppUi::WaitingCriticalBlockEndingL(): CriticalBlock has ended. Continue.");
-
+#ifdef RD_STARTUP_ANIMATION_CUSTOMIZATION
         DoNextStartupPhaseL( EStartupOfflineModeQuery );
+#else // RD_STARTUP_ANIMATION_CUSTOMIZATION
+        DoNextStartupPhaseL( EStartupWaitingTouchScreenCalib );
+#endif // RD_STARTUP_ANIMATION_CUSTOMIZATION
         }
     TRACES("CStartupAppUi::WaitingCriticalBlockEndingL(): End");
     }
@@ -744,7 +1539,7 @@
         {
         TRACES("CStartupAppUi::SetEmergencyCallsOnlyL(): Entered emergency calls only state.");
 
-        DoNextStartupPhaseL( EStartupStartupOK );
+        DoNextStartupPhaseL( EStartupWaitingCUIStartupReady );
         }
     TRACES("CStartupAppUi::SetEmergencyCallsOnlyL(): End");
     }
@@ -766,6 +1561,28 @@
 
     TRACES("CStartupAppUi::SwStateFatalStartupErrorL(): End");
     }
+
+
+#ifndef RD_STARTUP_ANIMATION_CUSTOMIZATION
+// ---------------------------------------------------------------------------
+// CStartupAppUi::GetOfflineModeQueryShown()
+// ---------------------------------------------------------------------------
+TBool CStartupAppUi::GetOfflineModeQueryShown()
+    {
+    TRACES1("CStartupAppUi::GetOfflineModeQueryShown(): iOfflineModeQueryShown == %d ", iOfflineModeQueryShown );
+    return iOfflineModeQueryShown;
+    }
+
+// ---------------------------------------------------------------------------
+// CStartupAppUi::SetOfflineModeQueryShown()
+// ---------------------------------------------------------------------------
+void CStartupAppUi::SetOfflineModeQueryShown(TBool aValue)
+    {
+    TRACES1("CStartupAppUi::SetOfflineModeQueryShown(): iOfflineModeQueryShown == %d ", iOfflineModeQueryShown );
+    iOfflineModeQueryShown = aValue;
+    }
+#endif // RD_STARTUP_ANIMATION_CUSTOMIZATION
+
 // ----------------------------------------------------------------------------
 // CStartAppUi::DosInOfflineModeL()
 // ----------------------------------------------------------------------------
@@ -848,23 +1665,20 @@
         else if ( iOfflineModeSupported && DosInOfflineModeL() )
             {
             TRACES("CStartupAppUi::ShowOfflineModeQueryL(): Offline mode query needed");
+#ifdef RD_STARTUP_ANIMATION_CUSTOMIZATION
             RProperty::Set( KPSUidStartup, KPSSplashShutdown, ESplashShutdown );
             iAnimation->BringToForeground();
             iMainView->DrawDeferred();
+#else // RD_STARTUP_ANIMATION_CUSTOMIZATION
+            iWelcomeAnimation->UpdateDrawInfo( EStartupDIQueriesOn );
+            iWelcomeAnimation->DrawNow();
+#endif // RD_STARTUP_ANIMATION_CUSTOMIZATION
             iOfflineModeQueryShown = ETrue;
-            CHbDeviceMessageBoxSymbian *aMessageBox = NULL;
-        	aMessageBox = CHbDeviceMessageBoxSymbian::NewL(CHbDeviceMessageBoxSymbian::EQuestion);
-       	 	_LIT(KText, "Continue using phone in Offline mode?");
-        	aMessageBox->SetTextL(KText);
-        	_LIT(KAcceptText, "Yes");
-        	aMessageBox->SetButtonTextL(CHbDeviceMessageBoxSymbian::EAcceptButton, KAcceptText);
-        	_LIT(KRejectText, "No");
-        	aMessageBox->SetButtonTextL(CHbDeviceMessageBoxSymbian::ERejectButton, KRejectText);
-        	//aMessageBox->SetDismissPolicy(HbPopup::NoDismiss);
-        	//define the selection button to hold user's option choice
-        	CHbDeviceMessageBoxSymbian::TButtonId selection;
-        	selection = aMessageBox->ExecL();
-            if ( selection == CHbDeviceMessageBoxSymbian::EAcceptButton )
+            CAknQueryDialog* dlg = new (ELeave) CAknQueryDialog( CAknQueryDialog::ENoTone );
+            TRACES("CStartupAppUi::ShowOfflineModeQueryL(): Publish dialog for Secondary UI");
+            dlg->PublishDialogL(SecondaryDisplay::ECmdShowOfflineQuery,
+                                SecondaryDisplay::KCatStartup);
+            if ( dlg->ExecuteLD( R_STARTUP_OFFLINE_MODE_QUERY ) )
                 {
                 TRACES("CStartupAppUi::ShowOfflineModeQueryL(): Offline Mode query: YES -> Boot to Offline");
                 reply = 1;
@@ -898,7 +1712,7 @@
         {
         TRACES1("CStartupAppUi::ShowOfflineModeQueryL(): KStartupBootIntoOffline set err %d", err);
         }
-   
+
     TRACES("CStartupAppUi::ShowOfflineModeQueryL(): End");
     }
 
@@ -908,13 +1722,395 @@
 void CStartupAppUi::CancelAnimation()
     {
     TRACES("CStartupAppUi::CancelAnimation()");
-
+#ifdef RD_STARTUP_ANIMATION_CUSTOMIZATION
     iAnimation->Cancel();
-
+#else // RD_STARTUP_ANIMATION_CUSTOMIZATION
+    iWelcomeAnimation->CancelAnimation();
+#endif // RD_STARTUP_ANIMATION_CUSTOMIZATION
     TRACES("CStartupAppUi::CancelAnimation(): End");
     }
 
+// ---------------------------------------------------------------------------
+// CStartupAppUi::ShowCountryAndCityListsL()
+// ---------------------------------------------------------------------------
+void CStartupAppUi::ShowCountryAndCityListsL()
+    {
+    TRACES("CStartupAppUi::ShowCountryAndCityListsL()");
 
+    TInt cityselected( EFalse );
+    while ( !cityselected )
+        {
+        TRACES1("CStartupAppUi::ShowCountryAndCityListsL(): City item to focus: %d", iCounryListIndex);
+        TInt cityGroupId = ShowCountryListL();
+        TRACES1("CStartupAppUi::ShowCountryAndCityListsL(): City group id: %d", cityGroupId);
+        if ( cityGroupId != KErrCancel )
+            {
+            cityselected = ShowCityListL(cityGroupId);
+            }
+        else
+            {
+            cityselected = ETrue;
+            }
+        }
+    TRACES("CStartupAppUi::ShowCountryAndCityListsL(): End");
+    }
+
+// ---------------------------------------------------------------------------
+// CStartupAppUi::ShowCountryListL()
+// ---------------------------------------------------------------------------
+TInt CStartupAppUi::ShowCountryListL()
+    {
+    TRACES("CStartupAppUi::ShowCountryListL()");
+
+    CAknSinglePopupMenuStyleListBox* listBox =
+        new(ELeave) CAknSinglePopupMenuStyleListBox;
+    CleanupStack::PushL(listBox);
+
+    CStartupPopupList* popupList = CStartupPopupList::NewL(listBox, R_AVKON_SOFTKEYS_SELECT_CANCEL__SELECT,
+                                                           AknPopupLayouts::EMenuGraphicHeadingWindow );
+
+    CleanupStack::PushL(popupList);
+
+    listBox->ConstructL(popupList, EAknListBoxSelectionList | EAknListBoxScrollBarSizeExcluded);
+    listBox->CreateScrollBarFrameL( ETrue );
+    listBox->ScrollBarFrame()->SetScrollBarVisibilityL( CEikScrollBarFrame::EOff,
+                                                        CEikScrollBarFrame::EAuto );
+
+    listBox->ItemDrawer()->FormattedCellData()->EnableMarqueeL( ETrue );
+
+    CDesCArrayFlat *items = new(ELeave)CDesCArrayFlat(1);
+
+    CleanupStack::PushL(items);
+
+    CTzLocalizer* tzLocalizer = CTzLocalizer::NewL();
+    CleanupStack::PushL(tzLocalizer);
+
+    CTzLocalizedCityGroupArray* countryList;
+    countryList = tzLocalizer->GetAllCityGroupsL(CTzLocalizer::ETzAlphaNameAscending);
+    CleanupStack::PushL(countryList);
+
+    TRACES("CStartupAppUi::ShowCountryListL(): Create list of cities");
+    for(TInt i = 0; i <countryList->Count(); i++)
+        {
+        CTzLocalizedCityGroup& cityGroup = countryList->At(i);
+
+        // Check if the country name is blank.
+        // If it is blank, ignore it. Empty name shouldn't be shown in the list.
+        if(cityGroup.Name().Compare(KEmpty) != 0)
+            {
+            TBuf<KMaxCountryLength> countryitem;
+            countryitem.Insert(0,cityGroup.Name());
+            TRACES1("CStartupAppUi::ShowCountryListL(): Create country to list: %S", &countryitem);
+            items->AppendL(countryitem);
+            }
+        }
+
+    CleanupStack::PopAndDestroy( countryList );
+
+    CTextListBoxModel* model=listBox->Model();
+    model->SetItemTextArray(items);
+    model->SetOwnershipType(ELbmOwnsItemArray);
+
+    TRACES("CStartupAppUi::ShowCountryListL(): Set title");
+    // Set title
+    HBufC* title = StringLoader::LoadLC( R_QTN_SU_SELECT_COUNTRY );
+    popupList->SetTitleL(title->Des());
+    CleanupStack::PopAndDestroy( title );
+
+    popupList->EnableAdaptiveFind();
+    listBox->SetCurrentItemIndex(iCounryListIndex);
+
+    TInt cityGroupId;
+
+    if (iCoverUISupported)
+        {
+        TRACES("CStartupAppUi::ShowCountryListL(): Publish country list for Secondary UI");
+        TPckgBuf<TInt> data( SecondaryDisplay::EShowCountryQuery );
+        iStartupMediatorObserver->RaiseEvent( SecondaryDisplay::KCatStartup,
+                                              SecondaryDisplay::EMsgStartupEvent,
+                                              data );
+        }
+
+    TRACES("CStartupAppUi::ShowCountryListL(): Show the list");
+    if (popupList->ExecuteLD())
+        {
+        iCounryListIndex = listBox->CurrentItemIndex();
+        TRACES1("CStartupAppUi::ShowCountryListL(): CurrentItemIndex: %d", iCounryListIndex);
+        TPtrC countryName = listBox->Model()->ItemText(iCounryListIndex);
+
+        CTzLocalizedCityGroup* tzLocalizedCityGroup = tzLocalizer->FindCityGroupByNameL(countryName);
+        CleanupStack::PushL(tzLocalizedCityGroup);
+
+        cityGroupId = tzLocalizedCityGroup->Id();
+        CleanupStack::PopAndDestroy( tzLocalizedCityGroup );
+
+        TRACES1("CStartupAppUi::ShowCountryListL(): Selected country %S", &countryName);
+        }
+    else
+        {
+        TRACES("CStartupAppUi::ShowCountryListL(): Country list cancelled");
+        cityGroupId = KErrCancel;
+        }
+
+    CleanupStack::PopAndDestroy( tzLocalizer );
+    CleanupStack::Pop( items );
+    CleanupStack::Pop( popupList );
+    CleanupStack::PopAndDestroy( listBox ); 
+
+    TRACES1("CStartupAppUi::ShowCountryListL(): End. Return city group id: %d", cityGroupId);
+    return cityGroupId;
+    }
+
+// ---------------------------------------------------------------------------
+// CStartupAppUi::ShowCityListL()
+// ---------------------------------------------------------------------------
+TBool CStartupAppUi::ShowCityListL(TUint8 cityGroupId)
+    {
+    TRACES("CStartupAppUi::ShowCityListL()");
+
+    TBool retval( ETrue );
+
+    CTzLocalizer* tzLocalizer = CTzLocalizer::NewL();
+    CleanupStack::PushL(tzLocalizer);
+
+    CTzLocalizedCityArray* cityList;
+
+    TRACES1("CStartupAppUi::ShowCityListL(): Create list of cities in group %d", cityGroupId);
+
+    cityList = tzLocalizer->GetCitiesInGroupL(cityGroupId,//cityGroup.Id(),
+                                                  CTzLocalizer::ETzAlphaNameAscending );
+    CleanupStack::PushL(cityList);
+
+    if ( cityList->Count() == 1 )
+        {
+        TRACES("CStartupAppUi::ShowCityListL(): Only one city in citygroup. This can be selected automatically.");
+
+        CTzLocalizedCity& city = cityList->At(0);
+
+        CTzLocalizedCity* tzLocalizedCity = tzLocalizer->FindCityByNameL(city.Name());
+        CleanupStack::PushL(tzLocalizedCity);
+
+        TInt timeZoneId = tzLocalizedCity->TimeZoneId();
+
+        tzLocalizer->SetTimeZoneL(timeZoneId);
+        tzLocalizer->SetFrequentlyUsedZoneL(*tzLocalizedCity, CTzLocalizedTimeZone::ECurrentZone);
+
+        CleanupStack::PopAndDestroy( tzLocalizedCity );
+        CleanupStack::PopAndDestroy( cityList );
+        CleanupStack::PopAndDestroy( tzLocalizer );
+
+        TRACES1("CStartupAppUi::ShowCityListL(): End, returns %d", retval);
+        return retval;
+        }
+
+    CAknSinglePopupMenuStyleListBox* listBox =
+        new(ELeave) CAknSinglePopupMenuStyleListBox;
+    CleanupStack::PushL(listBox);
+
+    CStartupPopupList* popupList = CStartupPopupList::NewL(listBox, R_AVKON_SOFTKEYS_SELECT_CANCEL__SELECT,
+                                                           AknPopupLayouts::EMenuGraphicHeadingWindow );
+
+    CleanupStack::PushL(popupList);
+
+    CDesCArrayFlat *items = new(ELeave)CDesCArrayFlat(1);
+
+    CleanupStack::PushL(items);
+
+    for(TInt j = 0; j < cityList->Count(); j++)
+        {
+        CTzLocalizedCity& city = cityList->At(j);
+
+        // Check if the city name is blank.
+        // If it is blank, ignore it. Empty name shouldn't be shown in the list.
+        if(city.Name().Compare(KEmpty) != 0)
+            {
+            TBuf<KMaxCityLength> homecityitem;
+            homecityitem.Insert(0,city.Name());
+            TRACES1("CStartupAppUi::ShowCityListL(): Create to list: %S", &homecityitem);
+            items->AppendL(homecityitem);
+            }
+        }
+
+    listBox->ConstructL(popupList, EAknListBoxSelectionList | EAknListBoxScrollBarSizeExcluded);
+    listBox->CreateScrollBarFrameL( ETrue );
+    listBox->ScrollBarFrame()->SetScrollBarVisibilityL( CEikScrollBarFrame::EOff,
+                                                        CEikScrollBarFrame::EAuto );
+
+    listBox->ItemDrawer()->FormattedCellData()->EnableMarqueeL( ETrue );
+
+    CTextListBoxModel* model=listBox->Model();
+    model->SetItemTextArray(items);
+    model->SetOwnershipType(ELbmOwnsItemArray);
+
+    TRACES("CStartupAppUi::ShowCityListL(): Set title");
+    // Set title
+    HBufC* title = StringLoader::LoadLC( R_QTN_SU_SELECT_CITY );
+    popupList->SetTitleL(title->Des());
+    CleanupStack::PopAndDestroy(title);
+
+    popupList->EnableAdaptiveFind();
+
+    if (iCoverUISupported)
+        {
+        TRACES("CStartupAppUi::ShowCountryListL(): Publish city list for Secondary UI");
+        TPckgBuf<TInt> data( SecondaryDisplay::EShowCityQuery );
+        iStartupMediatorObserver->RaiseEvent( SecondaryDisplay::KCatStartup,
+                                              SecondaryDisplay::EMsgStartupEvent,
+                                              data );
+        }
+
+    TRACES("CStartupAppUi::ShowCityListL(): Show the list");
+    if (popupList->ExecuteLD())
+        {
+        TInt index(listBox->CurrentItemIndex());
+        TRACES1("CStartupAppUi::ShowCityListL(): CurrentItemIndex: %d", index);
+        TPtrC cityName = listBox->Model()->ItemText(index);
+
+        CTzLocalizedCity* tzLocalizedCity = tzLocalizer->FindCityByNameL(cityName);
+        CleanupStack::PushL(tzLocalizedCity);
+
+        TInt timeZoneId = tzLocalizedCity->TimeZoneId();
+
+        tzLocalizer->SetTimeZoneL(timeZoneId);
+        tzLocalizer->SetFrequentlyUsedZoneL(*tzLocalizedCity, CTzLocalizedTimeZone::ECurrentZone);
+
+        CleanupStack::PopAndDestroy(tzLocalizedCity);
+
+        TRACES1("CStartupAppUi::ShowCityListL(): Selected city    %S", &cityName);
+        }
+    else
+        {
+        TRACES("CStartupAppUi::ShowCityListL(): City list cancelled");
+        retval = EFalse;
+        }
+
+    CleanupStack::Pop(items);
+    CleanupStack::Pop(popupList);
+    CleanupStack::PopAndDestroy(listBox);
+    CleanupStack::PopAndDestroy(cityList);
+    CleanupStack::PopAndDestroy(tzLocalizer);
+
+
+    TRACES("CStartupAppUi::ShowCityListL(): Home city selected");
+    TRACES1("CStartupAppUi::ShowCityListL(): End, return %d", retval);
+    return retval;
+    }
+
+// ---------------------------------------------------------------------------
+// CStartupAppUi::ShowTimeQueryL()
+// ---------------------------------------------------------------------------
+TBool CStartupAppUi::ShowTimeQueryL()
+    {
+    TRACES("CStartupAppUi::ShowTimeQueryL()");
+
+    TTime time;
+    GetDefaultTimeAndDate( time );
+
+    CStartupQueryDialog* dlg = new (ELeave) CStartupQueryDialog(time, CAknQueryDialog::ENoTone);
+    TRACES("CStartupAppUi::ShowTimeQueryL(): Publish dialog for Secondary UI");
+    dlg->PublishDialogL(SecondaryDisplay::ECmdShowTimeQuery, SecondaryDisplay::KCatStartup);
+    if( dlg->ExecuteLD( R_STARTUP_TIME_SETTING_QUERY ) )
+        {
+        TTime current;
+        current.HomeTime();
+        TDateTime cTime = current.DateTime();
+        TDateTime atime = time.DateTime();
+        atime.SetYear(cTime.Year());
+        atime.SetMonth(cTime.Month());
+        atime.SetDay(cTime.Day());
+        time = atime;
+
+        RTz rtz;
+        User::LeaveIfError(rtz.Connect());
+        User::LeaveIfError(rtz.SetHomeTime(time));
+        rtz.Close();
+
+        TRACES("CStartupAppUi::ShowTimeQueryL(): End, return ETrue");
+        return ETrue;
+        }
+    else
+        {
+        //in case of poweroff key was pressed and shutdown is occuring
+        TRACES("CStartupAppUi::ShowTimeQueryL(): End, return EFalse");
+        return EFalse;
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CStartupAppUi::ShowDateQueryL()
+// ---------------------------------------------------------------------------
+TBool CStartupAppUi::ShowDateQueryL()
+    {
+    TRACES("CStartupAppUi::ShowDateQueryL()");
+
+
+    CStartupQueryDialog* dlg = new (ELeave) CStartupQueryDialog(iTime, CAknQueryDialog::ENoTone);
+    TRACES("CStartupAppUi::ShowDateQueryL(): Publish dialog for Secondary UI");
+    dlg->PublishDialogL(SecondaryDisplay::ECmdShowDateQuery, SecondaryDisplay::KCatStartup);
+
+    TInt query( R_STARTUP_DATE_SETTING_QUERY_NOBACK );
+    if ( iFirstBoot ) 
+        {
+        query = R_STARTUP_DATE_SETTING_QUERY;
+        }
+
+    if( dlg->ExecuteLD( query ) )
+        {
+        TTime current;
+        current.HomeTime();
+        TDateTime cTime = current.DateTime();
+        TDateTime atime = iTime.DateTime();
+        atime.SetHour(cTime.Hour());
+        atime.SetMinute(cTime.Minute());
+        atime.SetSecond(cTime.Second());
+        atime.SetMicroSecond(cTime.MicroSecond());
+        iTime = atime;
+
+        RTz rtz;
+        User::LeaveIfError(rtz.Connect());
+        User::LeaveIfError(rtz.SetHomeTime(iTime));
+        rtz.Close();
+
+        TRACES("CStartupAppUi::ShowDateQueryL(): End, return ETrue");
+        return ETrue;
+        }
+    else
+        {
+        // Back key pressed. ( Or poweroff key was pressed and shutdown is occuring )
+        TRACES("CStartupAppUi::ShowDateQueryL(): End, return EFalse");
+        return EFalse;
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CStartupAppUi::GetDefaultTimeAndDate()
+// ---------------------------------------------------------------------------
+void CStartupAppUi::GetDefaultTimeAndDate( TTime& aTime )
+    {
+    TRACES("CStartupAppUi::GetDefaultTimeAndDate(): Get Time and Date from CenRep");
+
+    CRepository* repository(NULL);
+
+    TRAPD( err, repository = CRepository::NewL( KCRUidStartupConf ) );
+    if ( !err )
+        {
+        TBuf<KTimeFormatLength> buf;
+        err = repository->Get( KStartupDefaultTime, buf );
+        if( !err )
+            {
+            err = aTime.Set(buf); // returns error if cenrep time format not valid
+            }
+        }
+
+    if ( err )
+        {
+        TRACES("CStartupAppUi::GetDefaultTimeAndDate(): Failed to get valid data from CenRep. Using default");
+        aTime.Set(KDefaultDateTimeValue);
+        }
+
+    delete repository;
+    TRACES("CStartupAppUi::GetDefaultTimeAndDate(): End");
+    }
 
 // ---------------------------------------------------------------------------
 // CStartupAppUi::FirstBoot()
@@ -1016,7 +2212,7 @@
     }
 
 
-
+#ifdef RD_STARTUP_ANIMATION_CUSTOMIZATION
 // ---------------------------------------------------------------------------
 // CStartupAppUi::AnimationFinished()
 // ---------------------------------------------------------------------------
@@ -1058,7 +2254,7 @@
         }
     else if ( iInternalState == EStartupShowingOperatorAnimation )
         {
-        TRAP(err, DoNextStartupPhaseL( EStartupFirstBootAndRTCCheck));
+        TRAP(err, DoNextStartupPhaseL( EStartupShowingUserWelcomeNote ));
         }
 
     if ( err != KErrNone )
@@ -1068,6 +2264,51 @@
 
     TRACES("CStartupAppUi::AnimationFinished(): End");
     }
+#else // RD_STARTUP_ANIMATION_CUSTOMIZATION
+// ---------------------------------------------------------------------------
+// CStartupAppUi::StopStartupTone()
+// ---------------------------------------------------------------------------
+void CStartupAppUi::StopStartupTone()
+    {
+    TRACES("CStartupAppUi::StopStartupTone()");
+    if ((iStartupTone) && (iStartupTone->Playing()))
+        {
+        iStartupTone->Stop();
+        }
+    TRACES("CStartupAppUi::StopStartupTone(): End");
+    }
+
+// ---------------------------------------------------------------------------
+// CStartupAppUi::StopOperatorTone()
+// ---------------------------------------------------------------------------
+void CStartupAppUi::StopOperatorTone()
+    {
+    TRACES("CStartupAppUi::StopOperatorTone()");
+    if ((iOpStartupTone) && (iOpStartupTone->Playing()))
+        {
+        iOpStartupTone->Stop();
+        }
+    TRACES("CStartupAppUi::StopOperatorTone(): End");
+    }
+
+// ---------------------------------------------------------------------------
+// CStartupAppUi::StartupTonePlaying()
+// ---------------------------------------------------------------------------
+TBool CStartupAppUi::StartupTonePlaying()
+    {
+    TRACES("CStartupAppUi::StartupTonePlaying()");
+    return iStartupTone->Playing();
+    }
+
+// ---------------------------------------------------------------------------
+// CStartupAppUi::OperatorTonePlaying()
+// ---------------------------------------------------------------------------
+TBool CStartupAppUi::OperatorTonePlaying()
+    {
+    TRACES("CStartupAppUi::OperatorTonePlaying()");
+    return iOpStartupTone->Playing();
+    }
+#endif // RD_STARTUP_ANIMATION_CUSTOMIZATION
 
 // ---------------------------------------------------------------------------
 // CStartupAppUi::SetCleanBoot()
@@ -1088,7 +2329,14 @@
     return iSimSupported;
     }
 
-
+// ----------------------------------------------------------------------------
+// CStartupAppUi::CoverUISupported()
+// ----------------------------------------------------------------------------
+TBool CStartupAppUi::CoverUISupported()
+    {
+    TRACES("CStartupAppUi::CoverUISupported()");
+    return iCoverUISupported;
+    }
 
 // ---------------------------------------------------------------------------
 // CStartupAppUi::DoNextStartupPhaseL( TStartupInternalState toState )
@@ -1100,14 +2348,14 @@
 // 5    EStartupWaitingTouchScreenCalib
 // 6    EStartupWaitingPhoneLightIdle    8, 18
 // 8    EStartupOfflineModeQuery         9, 18
-// 9    EStartupWaitingCUIWelcomeAnim    10, 18 Removed
+// 9    EStartupWaitingCUIWelcomeAnim    10, 18
 // 10   EStartupWaitingStartupTone       11, 18
 // 11   EStartupShowingWelcomeAnimation  12, 14, 18
 // 12   EStartupWaitingCUIOperatorAnim   13, 18
 // 13   EStartupShowingOperatorAnimation 14, 14, 18
-// 14   EStartupShowingUserWelcomeNote   15, 18 Removed
+// 14   EStartupShowingUserWelcomeNote   15, 18
 // 15   EStartupFirstBootAndRTCCheck     16, 18
-// 16   EStartupWaitingCUIStartupReady   17, 18 Removed
+// 16   EStartupWaitingCUIStartupReady   17, 18
 // 17   EStartupStartupOK                -
 // 18   EStartupSystemFatalError         -
 
@@ -1143,18 +2391,42 @@
             {
             switch( toState )
                 {
-                case EStartupStartupOK:
-                    iInternalState = EStartupStartupOK;
-                    TRACES("CStartupAppUi::DoNextStartupPhaseL(): InternalState : EStartupStartupOK");
-                    DoStartupEndPart();
+                case EStartupWaitingCUIStartupReady:
+                    iInternalState = EStartupWaitingCUIStartupReady;
+                    TRACES("CStartupAppUi::DoNextStartupPhaseL(): InternalState : EStartupWaitingCUIStartupReady");
+                    WaitingCoverUIStartupReadySyncL();
+                    break;
+#ifndef RD_STARTUP_ANIMATION_CUSTOMIZATION
+                case EStartupWaitingTouchScreenCalib:
+                    iInternalState = EStartupWaitingTouchScreenCalib;
+                    TRACES("CStartupAppUi::DoNextStartupPhaseL(): InternalState : EStartupWaitingTouchScreenCalib");
+                    WaitingTouchScreenCalibL();
+                    break;
+                case EStartupSystemFatalError:
+                    SystemFatalErrorL();
                     break;
-
+                default:
+                    __ASSERT_DEBUG(
+                        EFalse,
+                        PANIC( EStartupInvalidInternalStateChange ) );
+                    break;
+                }
+            }
+            break;
+        case EStartupWaitingTouchScreenCalib:
+            {
+            switch( toState )
+                {
+#endif // RD_STARTUP_ANIMATION_CUSTOMIZATION
                 case EStartupOfflineModeQuery:
                     iInternalState = EStartupOfflineModeQuery;
                     TRACES("CStartupAppUi::DoNextStartupPhaseL(): InternalState : EStartupOfflineModeQuery");
                     ShowOfflineModeQueryL();
-
+#ifdef RD_STARTUP_ANIMATION_CUSTOMIZATION
                     DoNextStartupPhaseL( EStartupWaitingShowStartupAnimation );
+#else // RD_STARTUP_ANIMATION_CUSTOMIZATION
+                    DoNextStartupPhaseL( EStartupWaitingCUIWelcomeAnim );
+#endif // RD_STARTUP_ANIMATION_CUSTOMIZATION
                     break;
                 case EStartupSystemFatalError:
                     SystemFatalErrorL();
@@ -1171,13 +2443,20 @@
             {
             switch( toState )
                 {
-
+#ifdef RD_STARTUP_ANIMATION_CUSTOMIZATION
                 case EStartupWaitingShowStartupAnimation:
                     iInternalState = EStartupWaitingShowStartupAnimation;
                     TRACES("CStartupAppUi::DoNextStartupPhaseL(): InternalState : EStartupWaitingShowStartupAnimation");
                     WaitingStartupAnimationStartL();
                     break;
-              case EStartupSystemFatalError:
+#else // RD_STARTUP_ANIMATION_CUSTOMIZATION
+                case EStartupWaitingCUIWelcomeAnim:
+                    iInternalState = EStartupWaitingCUIWelcomeAnim;
+                    TRACES("CStartupAppUi::DoNextStartupPhaseL(): InternalState : EStartupWaitingCUIWelcomeAnim");
+                    WaitingCoverUIWelcomeAnimationSyncL();
+                    break;
+#endif // RD_STARTUP_ANIMATION_CUSTOMIZATION
+                case EStartupSystemFatalError:
                     SystemFatalErrorL();
                     break;
                 default:
@@ -1188,6 +2467,50 @@
                 }
             }
             break;
+#ifndef RD_STARTUP_ANIMATION_CUSTOMIZATION
+        case EStartupWaitingCUIWelcomeAnim:
+            {
+            switch( toState )
+                {
+                case EStartupWaitingStartupTone:
+                    iInternalState = EStartupWaitingStartupTone;
+                    TRACES("CStartupAppUi::DoNextStartupPhaseL(): InternalState : EStartupWaitingStartupTone");
+                    WaitingStartupToneL();
+                    break;
+                case EStartupSystemFatalError:
+                    SystemFatalErrorL();
+                    break;
+                default:
+                    __ASSERT_DEBUG( EFalse,
+                        PANIC( EStartupInvalidInternalStateChange ) );
+                    break;
+                }
+            }
+            break;
+        case EStartupWaitingStartupTone:
+            {
+            switch( toState )
+                {
+                case EStartupShowingWelcomeAnimation:
+                    iInternalState = EStartupShowingWelcomeAnimation;
+                    TRACES("CStartupAppUi::DoNextStartupPhaseL(): InternalState : EStartupShowingWelcomeAnimation");
+                    iWelcomeAnimation->UpdateDrawInfo( EStartupDIWelcomeAnimStart );
+                    iWelcomeAnimation->DrawNow();
+                    DoStartupShowWelcomeAnimationL();
+                    iWelcomeAnimation->UpdateDrawInfo( EStartupDIWelcomeAnimEnd );
+                    iWelcomeAnimation->DrawNow();
+                    break;
+                case EStartupSystemFatalError:
+                    SystemFatalErrorL();
+                    break;
+                default:
+                    __ASSERT_DEBUG( EFalse,
+                        PANIC( EStartupInvalidInternalStateChange ) );
+                    break;
+                }
+            }
+            break;
+#endif // RD_STARTUP_ANIMATION_CUSTOMIZATION
         case EStartupWaitingShowStartupAnimation:
             {
             switch( toState )
@@ -1212,11 +2535,19 @@
             {
             switch( toState )
                 {
-
+#ifdef RD_STARTUP_ANIMATION_CUSTOMIZATION
                 case EStartupShowingOperatorAnimation:
                     iInternalState = EStartupShowingOperatorAnimation;
                     TRACES("CStartupAppUi::DoNextStartupPhaseL(): InternalState: EStartupShowingOperatorAnimation");
                     DoStartupShowOperatorAnimationL();
+#else // RD_STARTUP_ANIMATION_CUSTOMIZATION
+                case EStartupWaitingCUIOperatorAnim:
+                    iOperatorAnimation = CStartupOperatorAnimation::NewL( this, ClientRect());
+                    AddToStackL( iOperatorAnimation);
+                    iInternalState = EStartupWaitingCUIOperatorAnim;
+                    TRACES("CStartupAppUi::DoNextStartupPhaseL(): InternalState: EStartupWaitingCUIOperatorAnim");
+                    WaitingCoverUIOperatorAnimationSyncL();
+#endif // RD_STARTUP_ANIMATION_CUSTOMIZATION
                     break;
                 case EStartupFirstBootAndRTCCheck:
                     iInternalState = EStartupFirstBootAndRTCCheck;
@@ -1233,12 +2564,45 @@
                 }
             }
             break;
+#ifndef RD_STARTUP_ANIMATION_CUSTOMIZATION
+        case EStartupWaitingCUIOperatorAnim:
+            {
+            switch( toState )
+                {
+                case EStartupShowingOperatorAnimation:
+                    iInternalState = EStartupShowingOperatorAnimation;
+                    TRACES("CStartupAppUi::DoNextStartupPhaseL(): InternalState: EStartupShowingOperatorAnimation");
+                    iOperatorAnimation->UpdateDrawInfo( EStartupDIOperatorAnimStart );
+                    DoStartupShowOperatorAnimationL();
+                    break;
+                case EStartupSystemFatalError:
+                    SystemFatalErrorL();
+                    break;
+                default:
+                    __ASSERT_DEBUG( EFalse,
+                        PANIC( EStartupInvalidInternalStateChange ) );
+                    break;
+                }
+            }
+            break;
+#endif // RD_STARTUP_ANIMATION_CUSTOMIZATION
         case EStartupShowingOperatorAnimation:
             {
             switch( toState )
                 {
-                
-                 
+                case EStartupShowingUserWelcomeNote:
+#ifndef RD_STARTUP_ANIMATION_CUSTOMIZATION
+                    iUserWelcomeNote = CStartupUserWelcomeNote::NewL( *this, ClientRect());
+                    AddToStackL( iUserWelcomeNote );
+#endif // RD_STARTUP_ANIMATION_CUSTOMIZATION
+                    iInternalState = EStartupShowingUserWelcomeNote;
+                    TRACES("CStartupAppUi::DoNextStartupPhaseL(): InternalState: EStartupShowingUserWelcomeNote");
+#ifndef RD_STARTUP_ANIMATION_CUSTOMIZATION
+                    iWelcomeAnimation->UpdateDrawInfo( EStartupDIWelcomeNoteStart );
+                    iUserWelcomeNote->SetUserWelcomeNoteShowing(ETrue);
+#endif // RD_STARTUP_ANIMATION_CUSTOMIZATION
+                    DoStartupShowUserWelcomeNoteL();
+                    break;
                 case EStartupFirstBootAndRTCCheck:
                     iInternalState = EStartupFirstBootAndRTCCheck;
                     TRACES("CStartupAppUi::DoNextStartupPhaseL(): InternalState : EStartupFirstBootAndRTCCheck");
@@ -1254,15 +2618,52 @@
                 }
             }
             break;
-      
+        case EStartupShowingUserWelcomeNote:
+            {
+            switch( toState )
+                {
+                case EStartupFirstBootAndRTCCheck:
+                    iInternalState = EStartupFirstBootAndRTCCheck;
+                    TRACES("CStartupAppUi::DoNextStartupPhaseL(): InternalState : EStartupFirstBootAndRTCCheck");
+                    DoStartupFirstBootAndRTCCheckL();
+                    break;
+                case EStartupSystemFatalError:
+                    SystemFatalErrorL();
+                    break;
+                default:
+                    __ASSERT_DEBUG( EFalse,
+                        PANIC( EStartupInvalidInternalStateChange ) );
+                    break;
+                }
+            }
+            break;
         case EStartupFirstBootAndRTCCheck:
             {
             switch( toState )
                 {
+                case EStartupWaitingCUIStartupReady:
+                    iInternalState = EStartupWaitingCUIStartupReady;
+                    TRACES("CStartupAppUi::DoNextStartupPhaseL(): InternalState : EStartupWaitingCUIStartupReady");
+                    WaitingCoverUIStartupReadySyncL();
+                    break;
+                case EStartupSystemFatalError:
+                    SystemFatalErrorL();
+                    break;
+                default:
+                    __ASSERT_DEBUG( EFalse,
+                        PANIC( EStartupInvalidInternalStateChange ) );
+                    break;
+                }
+            }
+            break;
+        case EStartupWaitingCUIStartupReady:
+            {
+            switch( toState )
+                {
                 case EStartupStartupOK:
-                        iInternalState = EStartupStartupOK;
-                        TRACES("CStartupAppUi::DoNextStartupPhaseL(): InternalState : EStartupInvokeAndWaitForFtu");
-                        DoStartupEndPart();
+                    iInternalState = EStartupStartupOK;
+                    TRACES("CStartupAppUi::DoNextStartupPhaseL(): InternalState : EStartupStartupOK");
+                    DoStartupEndPart();
                     break;
                 case EStartupSystemFatalError:
                     SystemFatalErrorL();
@@ -1282,6 +2683,7 @@
                 case EStartupOfflineModeQuery:
                 case EStartupShowingWelcomeAnimation:
                 case EStartupShowingOperatorAnimation:
+                case EStartupShowingUserWelcomeNote:
                 case EStartupFirstBootAndRTCCheck:
                 case EStartupWaitingCUIStartupReady:
                 case EStartupStartupOK:
@@ -1337,7 +2739,7 @@
     return ret_val;
     }
 
-
+#ifdef RD_STARTUP_ANIMATION_CUSTOMIZATION
 // ---------------------------------------------------------------------------
 // CStartupAppUi::UpdateStartupUiPhase()
 // ---------------------------------------------------------------------------
@@ -1352,5 +2754,5 @@
         TRACES1("CStartupAppUi::UpdateStartupUiPhase(): KPSStartupUiPhase set err %d", err);
         }                          
     }
-
+#endif // RD_STARTUP_ANIMATION_CUSTOMIZATION
 // End of file