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; |