iaupdate/IAD/ui/src/iaupdateuicontroller.cpp
branchRCL_3
changeset 11 3ba40be8e484
parent 9 51c0f5edf5ef
child 17 741e5bba2bd1
equal deleted inserted replaced
9:51c0f5edf5ef 11:3ba40be8e484
    61 #include "iaupdateparametersfilemanager.h"
    61 #include "iaupdateparametersfilemanager.h"
    62 #include "iaupdateerrorcodes.h"
    62 #include "iaupdateerrorcodes.h"
    63 #include "iaupdatefileconsts.h"
    63 #include "iaupdatefileconsts.h"
    64 #include "iaupdatefirsttimeinfo.h"
    64 #include "iaupdatefirsttimeinfo.h"
    65 #include "iaupdaterefreshhandler.h"
    65 #include "iaupdaterefreshhandler.h"
       
    66 #include "iaupdatenodeid.h"
    66 #include "iaupdatedebug.h"
    67 #include "iaupdatedebug.h"
    67 
    68 
    68 
    69 
    69 // cenrep in emulator:
    70 // cenrep in emulator:
    70 // copy 2000F85A.txt to '\epoc32\release\winscw\udeb\Z\private\10202be9\'
    71 // copy 2000F85A.txt to '\epoc32\release\winscw\udeb\Z\private\10202be9\'
   254     delete iController;
   255     delete iController;
   255     iNodes.Reset();
   256     iNodes.Reset();
   256     iFwNodes.Reset();
   257     iFwNodes.Reset();
   257     iSelectedNodesArray.Reset();
   258     iSelectedNodesArray.Reset();
   258     iServicePackNodes.Reset();
   259     iServicePackNodes.Reset();
       
   260     iPreviousSelections.Reset();
   259     delete iFilter;
   261     delete iFilter;
   260     delete iControllerFile;
   262     delete iControllerFile;
   261     delete iIdle;
   263     delete iIdle;
   262     delete iStarter;
   264     delete iStarter;
   263     delete iConfigData;
   265     delete iConfigData;
   264     delete iRoamingHandler;
   266     delete iRoamingHandler;
   265     delete iParams;
   267     delete iParams;
   266     delete iRefreshHandler;
   268     delete iRefreshHandler;
   267     delete iPreviousSelections;
       
   268 
   269 
   269     // If dialogs have not been released yet, release them now.
   270     // If dialogs have not been released yet, release them now.
   270     // ProcessFinishedL() should normally be used for dialogs but
   271     // ProcessFinishedL() should normally be used for dialogs but
   271     // here just use non-leaving delete. In normal cases, dialogs should
   272     // here just use non-leaving delete. In normal cases, dialogs should
   272     // already be released in the end of the update flow before coming here.
   273     // already be released in the end of the update flow before coming here.
  1574 	    {
  1575 	    {
  1575 	    CIAUpdateAppUi* appUi = static_cast< CIAUpdateAppUi* >( iEikEnv->EikAppUi() );
  1576 	    CIAUpdateAppUi* appUi = static_cast< CIAUpdateAppUi* >( iEikEnv->EikAppUi() );
  1576         if ( appUi->UiRefreshAllowed() )
  1577         if ( appUi->UiRefreshAllowed() )
  1577 		    {
  1578 		    {
  1578 	    	iState = EUiRefreshing;
  1579 	    	iState = EUiRefreshing;
  1579 	        // store node identification (package UID and version) of currently selected nodes
  1580 	        // store node identification (Id and namespace) of currently selected nodes
  1580 	        // to restore selections after refresh
  1581 	        // to restore selections after refresh
  1581 	        delete iPreviousSelections;
  1582 	        iPreviousSelections.Reset();
  1582 	        iPreviousSelections = NULL;
  1583 	    	for ( TInt i = 0; i < iNodes.Count(); ++i )
  1583 	        iPreviousSelections = new( ELeave ) CArrayFixFlat<SIAUpdateNodeId>( iNodes.Count() + 1 );
       
  1584 	        for ( TInt i = 0; i < iNodes.Count(); ++i )
       
  1585                 {
  1584                 {
  1586                 MIAUpdateNode* node( iNodes[ i ] );
  1585                 MIAUpdateNode* node( iNodes[ i ] );
  1587                 SIAUpdateNodeId nodeId;
  1586                 CIAUpdateNodeId* nodeId = CIAUpdateNodeId::NewLC();
  1588                 nodeId.iNodeType = MIAUpdateAnyNode::ENodeTypeNormal;
  1587                 nodeId->SetIdL( node->Base().MetaId() );
  1589                 nodeId.iPackageUid = node->Base().Uid();
  1588                 nodeId->SetNamespaceL( node->Base().MetaNamespace() );
  1590                 nodeId.iVersion = node->Base().Version();
  1589                 nodeId->SetNodeType( MIAUpdateAnyNode::ENodeTypeNormal );
  1591                 nodeId.iSelected = node->Base().IsSelected();
  1590                 nodeId->SetSelected( node->Base().IsSelected() );
  1592                 iPreviousSelections->AppendL( nodeId );
  1591                 iPreviousSelections.AppendL( nodeId );
       
  1592                 CleanupStack::Pop( nodeId );
       
  1593                 
  1593                 }
  1594                 }
  1594 
  1595 
  1595             if ( iFwNodes.Count() > 0 )
  1596             if ( iFwNodes.Count() > 0 )
  1596                 {   
  1597                 {
  1597                 MIAUpdateFwNode* fwNode( iFwNodes[ 0 ] );
  1598                 MIAUpdateFwNode* fwNode( iFwNodes[ 0 ] );
  1598                 SIAUpdateNodeId nodeId;
  1599                 CIAUpdateNodeId* nodeId = CIAUpdateNodeId::NewLC();
  1599                 nodeId.iNodeType = MIAUpdateAnyNode::ENodeTypeFw;
  1600                 nodeId->SetIdL( fwNode->Base().MetaId() );
  1600                 nodeId.iSelected = fwNode->Base().IsSelected();
  1601                 nodeId->SetNamespaceL( fwNode->Base().MetaNamespace() );
  1601                 iPreviousSelections->AppendL( nodeId );
  1602                 nodeId->SetNodeType( MIAUpdateAnyNode::ENodeTypeFw );
       
  1603                 nodeId->SetSelected( fwNode->Base().IsSelected() );
       
  1604                 iPreviousSelections.AppendL( nodeId );
       
  1605                 CleanupStack::Pop( nodeId );
  1602                 }
  1606                 }
  1603         
  1607         
  1604    	        iController->StartRefreshL( EFalse );
  1608    	        iController->StartRefreshL( EFalse );
  1605 	        }
  1609 	        }
  1606 	    }
  1610 	    }
  1715     iFwNodes.Reset();
  1719     iFwNodes.Reset();
  1716     iNodes.ReserveL( aNodes.Count() );
  1720     iNodes.ReserveL( aNodes.Count() );
  1717     // Find out if there was umarked firmware update in old selections,
  1721     // Find out if there was umarked firmware update in old selections,
  1718     // that case needs special handling
  1722     // that case needs special handling
  1719     TBool unmarkedFw = EFalse;
  1723     TBool unmarkedFw = EFalse;
  1720     for ( TInt i = 0; i < iPreviousSelections->Count(); ++i )
  1724     for ( TInt i = 0; i < iPreviousSelections.Count(); ++i )
  1721         {
  1725         {
  1722         SIAUpdateNodeId prevNodeId = iPreviousSelections->At( i );
  1726         CIAUpdateNodeId* prevNodeId( iPreviousSelections[ i ] );
  1723         if ( prevNodeId.iNodeType == MIAUpdateAnyNode::ENodeTypeFw  && !prevNodeId.iSelected )
  1727         if ( prevNodeId->NodeType() == MIAUpdateAnyNode::ENodeTypeFw  && !prevNodeId->Selected() )
  1724              {
  1728              {
  1725              unmarkedFw = ETrue;
  1729              unmarkedFw = ETrue;
  1726              }
  1730              }
  1727         }
  1731         }
  1728      
  1732      
  1761     
  1765     
  1762     //restore previous selections/deselections  
  1766     //restore previous selections/deselections  
  1763     for ( TInt i = 0; i < iNodes.Count(); ++i )
  1767     for ( TInt i = 0; i < iNodes.Count(); ++i )
  1764         {
  1768         {
  1765         MIAUpdateNode* node( iNodes[ i ] );
  1769         MIAUpdateNode* node( iNodes[ i ] );
  1766         for ( TInt j = 0; j < iPreviousSelections->Count(); ++j )
  1770         for ( TInt j = 0; j < iPreviousSelections.Count(); ++j )
  1767             {
  1771             {
  1768             SIAUpdateNodeId prevNodeId = iPreviousSelections->At(j);
  1772             CIAUpdateNodeId* prevNodeId( iPreviousSelections[ j ] );
  1769         	if ( node->Base().Uid() == prevNodeId.iPackageUid &&
  1773         	if ( node->Base().MetaId() == prevNodeId->Id() && 
  1770         	     node->Base().Version() == prevNodeId.iVersion )
  1774         	     node->Base().MetaNamespace() == prevNodeId->Namespace() )
  1771                 {
  1775         	    {
  1772         		node->Base().SetSelected( prevNodeId.iSelected );
  1776         	    node->Base().SetSelected( prevNodeId->Selected() );
  1773         	    }
  1777         	    }
  1774             }
  1778             }
  1775         }
  1779         }
  1776     
  1780     
  1777     // When dependant is marked, all dependencies to be marked also
  1781     // When dependant is marked, all dependencies to be marked also
  1786     
  1790     
  1787     TBool firmwareSelected = EFalse;
  1791     TBool firmwareSelected = EFalse;
  1788     for ( TInt i = 0; i < iFwNodes.Count(); ++i )
  1792     for ( TInt i = 0; i < iFwNodes.Count(); ++i )
  1789         {
  1793         {
  1790         MIAUpdateFwNode* fwNode( iFwNodes[ i ] );
  1794         MIAUpdateFwNode* fwNode( iFwNodes[ i ] );
  1791     	for ( TInt j = 0; j < iPreviousSelections->Count(); ++j )
  1795     	for ( TInt j = 0; j < iPreviousSelections.Count(); ++j )
  1792     	    {
  1796     	    {
  1793     	    SIAUpdateNodeId prevNodeId = iPreviousSelections->At(j);
  1797     	    CIAUpdateNodeId* prevNodeId( iPreviousSelections[ j ] );
  1794     		if ( prevNodeId.iNodeType == MIAUpdateAnyNode::ENodeTypeFw )
  1798     		if ( prevNodeId->NodeType() == MIAUpdateAnyNode::ENodeTypeFw )
  1795     		    {
  1799     		    {
  1796     			fwNode->Base().SetSelected( prevNodeId.iSelected );
  1800     			fwNode->Base().SetSelected( prevNodeId->Selected() );
  1797     		    }
  1801     		    }
  1798     	    }
  1802     	    }
  1799     	if ( fwNode->Base().IsSelected() )
  1803     	if ( fwNode->Base().IsSelected() )
  1800     	    {
  1804     	    {
  1801     	    firmwareSelected = ETrue;
  1805     	    firmwareSelected = ETrue;