uifw/AvKon/src/AknIndicatorContainer.cpp
branchRCL_3
changeset 55 aecbbf00d063
parent 38 c52421ed5f07
child 56 d48ab3b357f1
--- a/uifw/AvKon/src/AknIndicatorContainer.cpp	Thu Aug 19 10:11:06 2010 +0300
+++ b/uifw/AvKon/src/AknIndicatorContainer.cpp	Tue Aug 31 15:28:30 2010 +0300
@@ -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"
@@ -112,8 +112,7 @@
     TInt                        iFlags;
     TBool                       iIncallBubbleDisabled;
     TBool                       iIsForeground;
-    CEikStatusPaneBase*         iStatusPane;
-    MTouchFeedback*             iFeedback;
+    TBool                       iIsActiveIdle;
     };
 
 
@@ -141,29 +140,6 @@
         }
 
     TRAP_IGNORE( CCoeEnv::Static()->AddMessageMonitorObserverL( *this ) );
-    
-    iFeedback = MTouchFeedback::Instance();
-    if ( iFeedback &&
-         iIndicatorContainer->iIndicatorContext ==
-                 CAknIndicatorContainer::EUniversalIndicators )
-        {
-        // Tactile feedback is only used for universal indicator pane.
-        CFeedbackSpec* fbSpec = CFeedbackSpec::New();
-        if ( fbSpec )
-            {
-            fbSpec->AddFeedback( ETouchEventStylusDown,
-                                 ETouchFeedbackSensitiveButton );
-            fbSpec->AddFeedback( ETouchEventStylusUp,
-                                 ETouchFeedbackSensitiveButton,
-                                 ETouchFeedbackVibra );
-
-            iFeedback->SetFeedbackArea( iIndicatorContainer,
-                                        0,
-                                        iIndicatorContainer->Rect(),
-                                        fbSpec );
-            delete fbSpec; 
-            }  
-        }
     }
 
 
@@ -174,7 +150,7 @@
     iSmallStatusPaneLayout      = AknStatuspaneUtils::SmallLayoutActive();
     iIncallBubbleAllowedInUsual = ETrue;
     iIsForeground = static_cast<CAknAppUi*>( CEikonEnv::Static()->EikAppUi() )->IsForeground();
-    iStatusPane = CEikStatusPaneBase::Current();
+    iIsActiveIdle = AknStatuspaneUtils::IsActiveIdle();
     }
 
 
@@ -184,12 +160,6 @@
     delete iDataObserver;
 
     CCoeEnv::Static()->RemoveMessageMonitorObserver( *this );
-    
-    MTouchFeedback* feedback = MTouchFeedback::Instance();
-    if ( feedback )
-        {
-        feedback->RemoveFeedbackForControl( iIndicatorContainer );
-        }
     }
 
 
@@ -307,6 +277,9 @@
         iIndicators =
             new (ELeave) CAknIndicatorQueue( KAknIndicatorQueueGranularity );
         }
+
+
+    iTicker = CPeriodic::NewL( CActive::EPriorityLow );
     }
 
 
@@ -636,13 +609,6 @@
             AknStatuspaneUtils::ExtendedStaconPaneActive() ||
             ( AknStatuspaneUtils::StaconPaneActive() &&
               !AknStatuspaneUtils::IdleLayoutActive() ) );
-        
-        if ( iExtension && iExtension->iFeedback )
-            {
-            iExtension->iFeedback->ChangeFeedbackArea( this,
-                                                       0,
-                                                       Rect() );
-            }
         }
 
     AknsUtils::RegisterControlPosition( this );
@@ -832,29 +798,26 @@
 
 EXPORT_C TInt CAknIndicatorContainer::CountComponentControls() const
     {
-    return  iIndicators->Count();
-    }
-
-TInt CAknIndicatorContainer::CountShownIndicator() const
-    {
-    TInt count = iIndicators->Count();
-    TInt indicatorShown = 0;
-    for ( TInt i = 0; i< count; i++ )
-        {
-        if( iIndicators->At(i)->IndicatorState() && iIndicators->At( i )->Priority() != KIndicatorNotShown )
-            {
-            indicatorShown++;
-            }
-        }
-    return indicatorShown;
+    return (iIndicatorsShown);
     }
 
 
 EXPORT_C CCoeControl* CAknIndicatorContainer::ComponentControl(TInt aIndex) const
     {
-    if ( aIndex >= 0 && aIndex < iIndicators->Count() )
+    TInt count = iIndicators->Count();
+
+    TInt ii = 0;
+    for (ii = 0; (ii < count) && (aIndex >= 0); ii++)
         {
-        return iIndicators->At( aIndex );
+        if ( iIndicators->At(ii)->IndicatorState() && (iIndicators->At(ii)->Priority() != KIndicatorNotShown))
+            {
+            aIndex--;
+            }
+        }
+
+    if ( ii > 0 )
+        {
+        return iIndicators->At(--ii);
         }
     else
         {
@@ -863,18 +826,10 @@
     }
 
 
-EXPORT_C void CAknIndicatorContainer::Draw( const TRect& aRect ) const
+EXPORT_C void CAknIndicatorContainer::Draw( const TRect& /*aRect*/ ) const
     {
-    if ( iExtension->iStatusPane && 
-         iExtension->iStatusPane->IsTransparent() &&
-         ( iIndicatorContext != EQueryEditorIndicators ) )
+    if ( iExtension->iIsActiveIdle )
         {
-        CWindowGc& gc = SystemGc();
-        TRgb rgb(TRgb::Color16MA(0));
-        gc.SetDrawMode(CGraphicsContext::EDrawModeWriteAlpha);
-        gc.SetBrushStyle(CGraphicsContext::ESolidBrush);
-        gc.SetBrushColor(rgb);
-        gc.Clear(aRect);
         return;
         }
 
@@ -1080,8 +1035,7 @@
     {
     CAknControl::HandlePointerEventL( aPointerEvent );
 
-    // Pointer events are only handled in the universal indicator container.
-    if ( iExtension && iIndicatorContext == EUniversalIndicators )
+    if ( AknLayoutUtils::PenEnabled() && iExtension )
         {
         TRect rect( Rect() );
 
@@ -1097,23 +1051,32 @@
                     // set flag that down was inside indicator
                     iExtension->iFlags |=
                         EAknIndicatorsButton1DownInIndicatorPaneRect;
+
+                    if ( iIndicatorContext == EUniversalIndicators &&
+                         iExtension->iFlags & EAknIndicatorsButton1DownInIndicatorPaneRect
+                          )
+                        {
+                        MTouchFeedback* feedback = MTouchFeedback::Instance();
+
+                        if ( feedback )
+                            {
+                            feedback->InstantFeedback( this, ETouchFeedbackSensitiveButton );
+                            }
+                        }
                     }
                 break;
                 }
 
             case TPointerEvent::EButton1Up:
                 {
-                // Currently the small digital clock pane, universal
-                // indicator pane and battery pane (in status pane layouts
-                // where it's adjacent to universal indicator or digital
-                // clock pane) are regarded as one touch responsive
-                // area from which the universal indicator popup should
-                // open on tap, so upon pointer up event it must be checked
-                // here if the down event happened inside this control,
-                // but the up event inside digital clock or battery pane area.
+                // Currently the small digital clock pane and universal
+                // indicator pane are regarded as one touch responsive area from
+                // which the universal indicator popup should open on tap,
+                // so upon pointer up event it must be checked here if
+                // the down event happened inside this control, but the up event
+                // inside digital clock pane area.
                 CEikStatusPaneBase* sp = CEikStatusPaneBase::Current();
-                TBool pointerUpInClockArea( EFalse );
-                TBool pointerUpInBatteryArea( EFalse );
+                TRect clockRect( 0, 0, 0, 0 );
 
                 if ( sp )
                     {
@@ -1121,60 +1084,29 @@
                         TUid::Uid( EEikStatusPaneUidDigitalClock ) );
                     if ( clockPane )
                         {
-                        TRect clockRect( clockPane->PositionRelativeToScreen(),
-                                         clockPane->Size() );
-                        pointerUpInClockArea =
-                            clockRect.Contains( aPointerEvent.iParentPosition );
-                        }
-                    
-                    if ( !AknStatuspaneUtils::ExtendedFlatLayoutActive() )
-                        {
-                        CCoeControl* batteryPane = sp->ContainerControlL(
-                            TUid::Uid( EEikStatusPaneUidBattery ) );
-                        if ( batteryPane )
-                            {
-                            TRect batteryRect(
-                                batteryPane->PositionRelativeToScreen(),
-                                batteryPane->Size() );
-                            pointerUpInBatteryArea =
-                                batteryRect.Contains( aPointerEvent.iParentPosition );
-                            }
+                        clockRect = TRect( clockPane->PositionRelativeToScreen(),
+                                           clockPane->Size() );
                         }
                     }
 
                 // if indicator's rect contains pointer up position
-                if ( ( iExtension->iFlags & EAknIndicatorsButton1DownInIndicatorPaneRect &&
+                if ( iIndicatorContext == EUniversalIndicators &&
+                     ( ( iExtension->iFlags & EAknIndicatorsButton1DownInIndicatorPaneRect &&
                          rect.Contains( aPointerEvent.iPosition ) ) ||
-                       pointerUpInClockArea ||
-                       pointerUpInBatteryArea )
+                       clockRect.Contains( aPointerEvent.iParentPosition ) ) )
                     {
-                    if ( iExtension->iFeedback &&
-                         ( pointerUpInClockArea || pointerUpInBatteryArea ) )
-                        {
-                        // The pointer down was received in another control,
-                        // so the tactile feedback must be given directly.
-                        iExtension->iFeedback->InstantFeedback(
-                            this,
-                            ETouchFeedbackSensitiveButton,
-                            ETouchFeedbackVibra,
-                            aPointerEvent );
-                        }
-
-                    CAknSmallIndicator* indicatorNotifier = CAknSmallIndicator::NewLC( TUid::Uid( 0 ) );
-                    indicatorNotifier->HandleIndicatorTapL();
-                    //for indicator popup event
                     MTouchFeedback* feedback = MTouchFeedback::Instance();
                     if ( feedback )
                         {
-                        feedback->InstantFeedback(
-                                           this,
-                                           ETouchFeedbackPopUp,
-                                           ETouchFeedbackVibra,
-                                           aPointerEvent );
+                        feedback->InstantFeedback( this,
+                                                   ETouchFeedbackSensitiveButton,
+                                                   ETouchFeedbackVibra,
+                                                   aPointerEvent );
                         }
+                    CAknSmallIndicator* indicatorNotifier = CAknSmallIndicator::NewLC( TUid::Uid( 0 ) );
+                    indicatorNotifier->HandleIndicatorTapL();
                     CleanupStack::PopAndDestroy( indicatorNotifier );
                     }
-
                 // Up happened, reset button down flag
                 iExtension->iFlags &=
                     ( ~EAknIndicatorsButton1DownInIndicatorPaneRect );
@@ -1208,29 +1140,30 @@
         return;
         }
 
-    // Bubble sorted
-    for (TInt i = 0; i < ( count - 1 ); i++)
+    CAknIndicator* temp;
+    for(TInt ii = 1; ii < count; ii++)
         {
-        TBool swaped = EFalse;
-        for (TInt j = count - 1; j > i; j--)
+        temp = iIndicators->At(ii);
+        TInt tempPriority = temp->Priority();
+        if (tempPriority >= 0)
             {
-            if ( iIndicators->At( j )->Priority()
-                    < iIndicators->At( j - 1 )->Priority() )
+            for(TInt jj = 0; jj <= ii; jj++)
                 {
-                CAknIndicator* temp = iIndicators->At( j );
-                iIndicators->Delete( j );
-                CleanupStack::PushL( temp );
-                iIndicators->InsertL( j - 1, temp );                
-                CleanupStack::Pop( temp );
-                swaped = ETrue;
+                if (tempPriority < iIndicators->At(jj)->Priority())
+                    {
+                    iIndicators->Delete( ii );
+                    CleanupStack::PushL( temp );
+                    iIndicators->InsertL( jj, temp );
+                    CleanupStack::Pop( temp );
+                    break;
+                    }
+                else if ( jj == (ii-1) )
+                    {
+                    break;
+                    }
                 }
             }
-        if( !swaped )
-            {
-            break;
-            }
         }
-
     }
 
 
@@ -1976,16 +1909,15 @@
 
         TInt uid = indicator->Uid().iUid;
 
-        if ( uid == EAknNaviPaneEditorIndicatorGprs || 
-             uid == EAknNaviPaneEditorIndicatorWlanAvailable ||
-             uid == EAknNaviPaneEditorIndicatorWlanActive || 
-             uid == EAknNaviPaneEditorIndicatorWlanActiveSecure || 
-             (!isLandscape && 
-                     (uid  == EAknNaviPaneEditorIndicatorProgressBar ||
-                      uid  == EAknNaviPaneEditorIndicatorFileSize || 
-                      uid  == EAknNaviPaneEditorIndicatorWaitBar || 
-                      uid  == EAknNaviPaneEditorIndicatorSecuredConnection || 
-                      uid == EAknNaviPaneEditorIndicatorWmlWaitGlobe)))
+        if ( uid == EAknNaviPaneEditorIndicatorSecuredConnection ||
+             uid == EAknNaviPaneEditorIndicatorProgressBar       ||
+             uid == EAknNaviPaneEditorIndicatorWmlWaitGlobe      ||
+             uid == EAknNaviPaneEditorIndicatorGprs              ||
+             uid == EAknNaviPaneEditorIndicatorFileSize          ||
+             uid == EAknNaviPaneEditorIndicatorWaitBar           ||
+             uid == EAknNaviPaneEditorIndicatorWlanAvailable     ||
+             uid == EAknNaviPaneEditorIndicatorWlanActive        ||
+             uid == EAknNaviPaneEditorIndicatorWlanActiveSecure )
             {
             // These indicators are not shown in this statuspane layout.
             indicator->SetExtent( TPoint( 0, 0 ), TSize( 0, 0 ) );
@@ -1996,16 +1928,6 @@
 
         if ( iLayoutOrientation == EVertical )
             {
-            if (uid == EAknNaviPaneEditorIndicatorProgressBar || uid
-                    == EAknNaviPaneEditorIndicatorFileSize || uid
-                    == EAknNaviPaneEditorIndicatorWaitBar || uid
-                    == EAknNaviPaneEditorIndicatorSecuredConnection || uid
-                    == EAknNaviPaneEditorIndicatorWmlWaitGlobe)
-                {
-                indicator->SetExtent(TPoint(0, 0), TSize(0, 0));
-                iIndicatorsShown++;
-                continue;
-                }
             // Highest priority indicator is put topmost.
             if ( height < indicator->IconSize().iHeight )
                 {
@@ -2047,112 +1969,6 @@
 
             TInt textIndicatorLeftOffset = KMinSpaceBetweenIconsInPixels;
 
-            ////////////////////////////////////////////////////////////////////////////
-            //small status pane
-            TRect smallStatusPaneRect;
-            AknLayoutUtils::LayoutMetricsRect(AknLayoutUtils::EStatusPane,
-                    smallStatusPaneRect);
-
-            // small statuspane, secure state indicator
-            TAknWindowLineLayout
-                    smallStatusSecureStateLayout =
-                            AknLayout::Small_status_pane_descendants_and_elements_Line_5();
-            TAknLayoutRect smallStatusSecureStateLayoutRect;
-            smallStatusSecureStateLayoutRect.LayoutRect(smallStatusPaneRect,
-                    smallStatusSecureStateLayout);
-            TRect smallStatusSecureStateRect(
-                    smallStatusSecureStateLayoutRect.Rect());
-
-            // small statuspane, wait pane
-            TAknWindowComponentLayout smallStatusWaitPaneLayout =
-                    AknLayoutScalable_Avkon::status_small_wait_pane(3);
-            TAknLayoutRect smallStatusWaitPaneLayoutRect;
-            smallStatusWaitPaneLayoutRect.LayoutRect(smallStatusPaneRect,
-                    smallStatusWaitPaneLayout);
-            TRect smallStatusWaitPaneRect(
-                    smallStatusWaitPaneLayoutRect.Rect());
-
-            // small statuspane, globe
-            TAknWindowComponentLayout smallStatusWmlGlobeLayout =
-                    AknLayoutScalable_Avkon::status_small_pane_g4(0);
-            TAknLayoutRect smallStatusWmlGlobeLayoutRect;
-            smallStatusWmlGlobeLayoutRect.LayoutRect(smallStatusPaneRect,
-                    smallStatusWmlGlobeLayout);
-            TRect smallStatusWmlGlobeRect(
-                    smallStatusWmlGlobeLayoutRect.Rect());
-
-            TInt waitBarIndicatorLeftOffset = smallStatusWaitPaneRect.iTl.iX;
-            TInt progressBarIndicatorLeftOffset = 0;
-            TInt wmlWaitGlobeLeftOffset = smallStatusWmlGlobeRect.iTl.iX;
-
-            TRect rectForMiddleIndicators(wmlWaitGlobeLeftOffset,
-                    containerRect.iTl.iY, wmlWaitGlobeLeftOffset,
-                    containerRect.iBr.iY);
-
-            if (AknLayoutUtils::LayoutMirrored())
-                {
-                wmlWaitGlobeLeftOffset = smallStatusPaneRect.iBr.iX
-                        - smallStatusWmlGlobeRect.iBr.iX;
-                waitBarIndicatorLeftOffset = smallStatusPaneRect.iBr.iX
-                        - smallStatusWaitPaneRect.iBr.iX;
-                }
-
-            if (uid == EAknNaviPaneEditorIndicatorProgressBar)
-                {
-                indicatorWidth = smallStatusWaitPaneRect.Width();
-                indicatorHeight = smallStatusWaitPaneRect.Height();                
-                verticalOffset = (containerRect.Height() - indicatorHeight)/ 2;
-                leftOffset = progressBarIndicatorLeftOffset;
-
-                textIndicatorOffsetNeeded = ETrue;
-                }
-            else if (uid == EAknNaviPaneEditorIndicatorFileSize)
-                {
-                verticalOffset = verticalOffsetForTextIndicator;
-
-                // need left offset in western, right offset in A&H layout.
-                if (AknLayoutUtils::LayoutMirrored())
-                    {
-                    rightOffset = textIndicatorLeftOffset;
-                    }
-                else
-                    {
-                    leftOffset = KMinSpaceBetweenIconsInPixels;
-                    }
-                }
-            else if (uid == EAknNaviPaneEditorIndicatorWmlWaitGlobe)
-                {
-                verticalOffset = (containerRect.Height()
-                        - indicator->IconSize().iHeight) / 2;
-                indicatorWidth = smallStatusWmlGlobeRect.Width();
-                }
-            else if (uid == EAknNaviPaneEditorIndicatorWaitBar)
-                {
-                indicatorWidth = smallStatusWaitPaneRect.Width();
-                indicatorHeight = smallStatusWaitPaneRect.Height();
-                verticalOffset = (containerRect.Height() - indicatorHeight)/ 2;
-                leftOffset = waitBarIndicatorLeftOffset;
-                textIndicatorOffsetNeeded = ETrue;
-                }
-            else if (uid == EAknNaviPaneEditorIndicatorSecuredConnection)
-                {
-                verticalOffset = (containerRect.Height()
-                        - smallStatusSecureStateRect.Height()) / 2;
-
-                // because icon bitmap does not contain enough space, increase offset as
-                // the layout spec states.
-                if (AknLayoutUtils::LayoutMirrored())
-                    {
-                    leftOffset = KMinSpaceBetweenIconsInPixels;
-                    }
-                else
-                    {
-                    rightOffset = KMinSpaceBetweenIconsInPixels;
-                    }
-                textIndicatorOffsetNeeded = EFalse;
-                progressBarIndicatorLeftOffset = 0;
-                }
-            ////////////////////////////////////////////////////////////////////////
             if ( uid == EAknNaviPaneEditorIndicatorMessageInfo    ||
                  uid == EAknNaviPaneEditorIndicatorWmlWindowsText ||
                  uid == EAknNaviPaneEditorIndicatorMessageLength )
@@ -2321,30 +2137,9 @@
             // Place indicators to the middle if any.
             if ( indicatorPosition == EMiddle )
                 {
-                TRect requiredRect( rectForMiddleIndicators.iTl.iX,
-                        rectForMiddleIndicators.iTl.iY,
-                        rectForMiddleIndicators.iTl.iX + leftOffset
-                                + indicatorWidth + rightOffset,
-                        rectForMiddleIndicators.iBr.iY );
-
-                // check if indicator fits
-                if (( requiredRect.Intersects( rectForRightSideIndicators )
-                        || requiredRect.Intersects(rectForLeftSideIndicators ))
-                        || ( rectForMiddleIndicators.Width() != 0 ))
-                    {
-                    indicator->SetExtent(TPoint(0, 0), TSize(0, 0));
-                    iIndicatorsShown++;
-                    continue;
-                    }
-                else
-                    {
-                    indicator->SetExtent( TPoint(
-                            rectForMiddleIndicators.iTl.iX + leftOffset,
-                            verticalOffset ), TSize( indicatorWidth,
-                            indicatorHeight ));
-                    rectForMiddleIndicators.iTl.iX += rightOffset;
-                    rectForMiddleIndicators.iTl.iX += indicatorWidth;
-                    }
+                // Not supported for now, always set size to zero.
+                indicator->SetExtent( TPoint( 0, 0 ), TSize( 0, 0 ) );
+                iIndicatorsShown++;
                 }
             }
 
@@ -3078,87 +2873,67 @@
             iIndicatorsShown++;
 
             TBool showIndicator( ETrue );
-
             switch ( iIndicatorsShown )
                 {
                 case 1:
                     {
-                    if ( extendedFlatLayout )
-                        {
-                        indicatorLayout =
-                            AknLayoutScalable_Avkon::indicator_nsta_pane_cp_g1( 0 );
-                        }
-                    else
-                        {
-                        indicatorLayout =
-                            AknLayoutScalable_Avkon::uni_indicator_pane_g1( 1 );
-                        }
+                    indicatorLayout =
+                        AknLayoutScalable_Avkon::uni_indicator_pane_g1( 1 );
                     break;
                     }
                 case 2:
                     {
-                    if ( extendedFlatLayout )
-                        {
-                        indicatorLayout =
-                            AknLayoutScalable_Avkon::indicator_nsta_pane_cp_g2( 0 );
-                        }
-                    else
-                        {
-                        indicatorLayout =
-                            AknLayoutScalable_Avkon::uni_indicator_pane_g2( 1 );
-                        }
+                    indicatorLayout =
+                        AknLayoutScalable_Avkon::uni_indicator_pane_g2( 1 );
                     break;
                     }
                 case 3:
                     {
-                    if ( extendedFlatLayout )
+                    indicatorLayout =
+                        AknLayoutScalable_Avkon::uni_indicator_pane_g3( 1 );
+                    break;
+                    }
+                    
+                // TODO: Add support (remove the extendedFlatLayout checks
+                // below) for six indicators also in the extended flat layout
+                // once the layout data is fixed.
+                    
+                case 4:
+                    {
+                    if ( !extendedFlatLayout )
                         {
                         indicatorLayout =
-                            AknLayoutScalable_Avkon::indicator_nsta_pane_cp_g3( 0 );
+                            AknLayoutScalable_Avkon::uni_indicator_pane_g4( 1 );
                         }
                     else
                         {
-                        indicatorLayout =
-                            AknLayoutScalable_Avkon::uni_indicator_pane_g3( 1 );
-                        }
-                    break;
-                    }
-                case 4:
-                    {
-                    if ( extendedFlatLayout )
-                        {
                         showIndicator = EFalse;
                         }
-                    else
-                        {
-                        indicatorLayout =
-                            AknLayoutScalable_Avkon::uni_indicator_pane_g4( 1 );
-                        }
                     break;
                     }
                 case 5:
                     {
-                    if ( extendedFlatLayout )
+                    if ( !extendedFlatLayout )
                         {
-                        showIndicator = EFalse;
+                        indicatorLayout =
+                            AknLayoutScalable_Avkon::uni_indicator_pane_g5( 1 );
                         }
                     else
                         {
-                        indicatorLayout =
-                            AknLayoutScalable_Avkon::uni_indicator_pane_g5( 1 );
+                        showIndicator = EFalse;
                         }
                     break;
                     }
                 case 6:
                     {
-                    if ( extendedFlatLayout )
+                    if ( !extendedFlatLayout )
                         {
-                        showIndicator = EFalse;
+                        indicatorLayout =
+                            AknLayoutScalable_Avkon::uni_indicator_pane_g6( 1 );
                         }
                     else
                         {
-                        indicatorLayout =
-                            AknLayoutScalable_Avkon::uni_indicator_pane_g6( 1 );
+                        showIndicator = EFalse;
                         }
                     break;
                     }
@@ -4072,8 +3847,8 @@
             }
         }
 
-    if (indicator && (indicator->IndicatorState() || 
-            indicator->Priority()!= KIndicatorNotShown))
+    if ( indicator &&
+        ( indicator->IndicatorState() || indicator->Priority() != KIndicatorNotShown ) )
         {
         SizeChanged();
         DrawDeferred();
@@ -4285,37 +4060,24 @@
     if ( !iExtension->iIsForeground ||
             R_AVKON_STATUS_PANE_LAYOUT_EMPTY == curId )
         {
-        if ( iTicker )
+        if ( iTicker->IsActive() )
             {
             iTicker->Cancel();
-            delete iTicker;
-            iTicker = NULL;
             }
-
         return;
         }
 
-    if ( iAnimatedIndicatorsShown > 0 )
+    if ( !iTicker->IsActive() && iAnimatedIndicatorsShown > 0 )
         {
-        if ( !iTicker )
-            {
-            TRAP_IGNORE( iTicker = CPeriodic::NewL( CActive::EPriorityLow ) );
-            }
-
-        if ( iTicker && !iTicker->IsActive() )
-            {
-            iTicker->Start( KAknIndicatorAnimationShortDelay,
-                            KAknIndicatorAnimationInterval,
-                            TCallBack( TickerCallback, this ) );
-            }
+        iTicker->Start( KAknIndicatorAnimationShortDelay,
+                        KAknIndicatorAnimationInterval,
+                        TCallBack( TickerCallback, this ) );
         }
-    else if ( iTicker && iAnimatedIndicatorsShown == 0 )
+    else if ( iTicker->IsActive() && iAnimatedIndicatorsShown == 0 )
         {
         // Cancel animation timer if animated indicators
         // are not visible anymore.
         iTicker->Cancel();
-        delete iTicker;
-        iTicker = NULL;
         iSynchronizingValue = 0;
         }
     }