menucontentsrv/srvsrc/menusrvappscanner.cpp
branchRCL_3
changeset 130 67f2ed48ad91
parent 122 6cadd6867c17
equal deleted inserted replaced
122:6cadd6867c17 130:67f2ed48ad91
    71 //
    71 //
    72 CMenuSrvAppScanner::~CMenuSrvAppScanner()
    72 CMenuSrvAppScanner::~CMenuSrvAppScanner()
    73     {
    73     {
    74     Cancel();
    74     Cancel();
    75     delete iMcsSatNotifier;
    75     delete iMcsSatNotifier;
    76     delete iSisInstallNotifier;
       
    77     delete iJavaInstallNotifier;
       
    78     delete iNotifier;
    76     delete iNotifier;
    79     iEng.DequeueOperation( *this );
    77     iEng.DequeueOperation( *this );
    80     delete iMmcHistory;
    78     delete iMmcHistory;
    81     iFs.Close();
    79     iFs.Close();
    82 
    80 
    95     if( iCenRepNotifyHandlerCPHiddenFolders )
    93     if( iCenRepNotifyHandlerCPHiddenFolders )
    96         {
    94         {
    97         iCenRepNotifyHandlerCPHiddenFolders->StopListening();
    95         iCenRepNotifyHandlerCPHiddenFolders->StopListening();
    98         }
    96         }
    99     delete iCenRepNotifyHandlerCPHiddenFolders;
    97     delete iCenRepNotifyHandlerCPHiddenFolders;
   100     delete iCenRepSession;
    98   	delete iCenRepSession;
   101     delete iFreeSpaceObserver;
    99   	delete iFreeSpaceObserver;
   102     iInstalledPackages.Close();
   100 
   103     }
   101     }
   104 
   102 
   105 // ---------------------------------------------------------
   103 // ---------------------------------------------------------
   106 // CMenuSrvAppScanner::CMenuSrvAppScanner
   104 // CMenuSrvAppScanner::CMenuSrvAppScanner
   107 // ---------------------------------------------------------
   105 // ---------------------------------------------------------
   124     User::LeaveIfError( iFs.Connect() );
   122     User::LeaveIfError( iFs.Connect() );
   125     TFileName path;
   123     TFileName path;
   126     User::LeaveIfError( iFs.PrivatePath( path ) );
   124     User::LeaveIfError( iFs.PrivatePath( path ) );
   127     TUint attribute;
   125     TUint attribute;
   128     if( iFs.Att( path, attribute) == KErrNotFound )
   126     if( iFs.Att( path, attribute) == KErrNotFound )
   129       {
   127     	{
   130         TInt mdRes = iFs.MkDirAll( path );
   128         TInt mdRes = iFs.MkDirAll( path );
   131         if ( mdRes != KErrNone )
   129         if ( mdRes != KErrNone )
   132           {
   130         	{
   133           User::Leave( mdRes );
   131         	User::Leave( mdRes );
   134           }
   132         	}
   135       }
   133     	}
   136 
   134 
   137     iMmcHistory = new (ELeave) CMenuSrvMmcHistory();
   135     iMmcHistory = new (ELeave) CMenuSrvMmcHistory();
   138     iMmcHistory->LoadL( iFs, KMenuMmcHistoryFname() );
   136     iMmcHistory->LoadL( iFs, KMenuMmcHistoryFname() );
   139     // The notifier has its own session to apparc, instead of taking
   137     // The notifier has its own session to apparc, instead of taking
   140     // it as argument... :(
   138     // it as argument... :(
   141     iNotifier = CApaAppListNotifier::NewL( this, CActive::EPriorityStandard );
   139     iNotifier = CApaAppListNotifier::NewL( this, CActive::EPriorityStandard );
   142 
   140 
   143      iCenRepSession = CRepository::NewL( KCRUidMenu );
   141    	iCenRepSession = CRepository::NewL( KCRUidMenu );
   144 
   142 
   145   iCenRepNotifyHandlerHiddenApps = CCenRepNotifyHandler::NewL(
   143 	iCenRepNotifyHandlerHiddenApps = CCenRepNotifyHandler::NewL(
   146       *this, *iCenRepSession,
   144 	    *this, *iCenRepSession,
   147     CCenRepNotifyHandler::EStringKey, KMenuHideApplication );
   145 		CCenRepNotifyHandler::EStringKey, KMenuHideApplication );
   148   iCenRepNotifyHandlerCPHiddenApps = CCenRepNotifyHandler::NewL(
   146 	iCenRepNotifyHandlerCPHiddenApps = CCenRepNotifyHandler::NewL(
   149       *this, *iCenRepSession,
   147 	    *this, *iCenRepSession,
   150     CCenRepNotifyHandler::EStringKey, KMenuHideCPApplication );
   148 		CCenRepNotifyHandler::EStringKey, KMenuHideCPApplication );
   151 
   149 
   152   iCenRepNotifyHandlerCPHiddenFolders = CCenRepNotifyHandler::NewL(
   150 	iCenRepNotifyHandlerCPHiddenFolders = CCenRepNotifyHandler::NewL(
   153       *this, *iCenRepSession,
   151 	    *this, *iCenRepSession,
   154     CCenRepNotifyHandler::EStringKey, KMenuHideCPFolder );
   152 		CCenRepNotifyHandler::EStringKey, KMenuHideCPFolder );
   155 
   153 
   156   iCenRepNotifyHandlerHiddenApps->StartListeningL();
   154 	iCenRepNotifyHandlerHiddenApps->StartListeningL();
   157   iCenRepNotifyHandlerCPHiddenApps->StartListeningL();
   155 	iCenRepNotifyHandlerCPHiddenApps->StartListeningL();
   158   iCenRepNotifyHandlerCPHiddenFolders->StartListeningL();
   156 	iCenRepNotifyHandlerCPHiddenFolders->StartListeningL();
   159 
   157 
   160   iMcsSatNotifier = CMcsSatNotifier::NewL(
   158 	iMcsSatNotifier = CMcsSatNotifier::NewL(
   161                   this, KCRUidMenu, KMenuShowSatUI );
   159 	                this, KCRUidMenu, KMenuShowSatUI );
   162 
   160 
   163   iFreeSpaceObserver = CMcsFreeSpaceObserver::NewL( *this );
   161 	iFreeSpaceObserver = CMcsFreeSpaceObserver::NewL( *this );
   164 
   162 
   165   iSisInstallNotifier = CMcsInstallNotifier::NewL(
   163     //SetActive();
   166             *this, CMcsInstallNotifier::ESisInstallNotification );
   164 	ScheduleScan();
   167   iJavaInstallNotifier = CMcsInstallNotifier::NewL(
       
   168             *this, CMcsInstallNotifier::EJavaInstallNotification );
       
   169 
       
   170   ScheduleScan();
       
   171     //iOpStatus = ETrue;
   165     //iOpStatus = ETrue;
   172     }
   166     }
   173 
   167 
   174 // ---------------------------------------------------------
   168 // ---------------------------------------------------------
   175 // CMenuSrvAppScanner::RunL
   169 // CMenuSrvAppScanner::RunL
   252 
   246 
   253 // ---------------------------------------------------------
   247 // ---------------------------------------------------------
   254 // CMenuSrvAppScanner::HideAppIfExists
   248 // CMenuSrvAppScanner::HideAppIfExists
   255 // ---------------------------------------------------------
   249 // ---------------------------------------------------------
   256 //
   250 //
   257 void CMenuSrvAppScanner::HideItemIfPresentL(
   251 void CMenuSrvAppScanner::HideItemIfPresentL( TInt aFolder, TInt aId, const TDesC& aUid, TBool aWasHidden )
   258         TInt aFolder, TInt aId, const TDesC& aUid, TBool aWasHidden )
       
   259     {
   252     {
   260     TBool hideItem = EFalse;
   253     TBool hideItem = EFalse;
   261     TMenuSrvAttrFilter uidAppFilter;
   254     TMenuSrvAttrFilter uidAppFilter;
   262     uidAppFilter.SetAttr( KMenuAttrUid(), aUid );
   255     uidAppFilter.SetAttr( KMenuAttrUid(), aUid );
   263 
   256 
   264     RArray<TMenuItem> appItems;
   257     RArray<TMenuItem> appItems;
   265     CleanupClosePushL( appItems );
   258     CleanupClosePushL( appItems );
   266     iEng.GetItemsL( appItems, aFolder, &uidAppFilter, ETrue );
   259     iEng.GetItemsL( appItems, aFolder, &uidAppFilter, ETrue );
   267 
   260 
   268     for( TInt i=0; i < appItems.Count(); i++ )
   261     for (TInt i=0; i < appItems.Count(); i++)
   269         {
   262         {
   270         if( appItems[i].Type() != KMenuTypeLink() )
   263         if(appItems[i].Type() != KMenuTypeLink())
   271           {
   264         	{
   272             const TMenuItem& item = appItems[i];
   265             const TMenuItem& item = appItems[i];
   273 
   266 
   274             TBool itemHidden = (0 != ( item.Flags() & TMenuItem::EHidden ) );
   267             TBool itemHidden = (0 != (item.Flags() & TMenuItem::EHidden));
   275             TBool itemMissing = ( 0 != ( item.Flags() & TMenuItem::EMissing ) );
   268             TBool itemMissing = (0 != (item.Flags() & TMenuItem::EMissing));
   276             if ( !itemHidden && !itemMissing )
   269             if ( !itemHidden && !itemMissing )
   277                 {
   270                 {
   278                 hideItem = ETrue;
   271                 hideItem = ETrue;
   279                 }
   272                 }
   280           }
   273         	}
   281         }
   274         }
       
   275 
   282     SetHiddenFlagL( aId, aWasHidden, hideItem );
   276     SetHiddenFlagL( aId, aWasHidden, hideItem );
   283 
   277 
   284     CleanupStack::PopAndDestroy( &appItems );
   278     CleanupStack::PopAndDestroy( &appItems );
   285     }
   279     }
   286 
   280 
   288 // CMenuSrvAppScanner::SetHiddenFlagL
   282 // CMenuSrvAppScanner::SetHiddenFlagL
   289 // ---------------------------------------------------------
   283 // ---------------------------------------------------------
   290 //
   284 //
   291 void CMenuSrvAppScanner::SetHiddenFlagL( TInt aId, TBool aWasHidden, TBool aHide )
   285 void CMenuSrvAppScanner::SetHiddenFlagL( TInt aId, TBool aWasHidden, TBool aHide )
   292     {
   286     {
   293     if ( aWasHidden != aHide )
   287     if ( aWasHidden ^ aHide )
   294         {
   288         {
   295         iEng.ModifiableObjectL( aId, RMenuNotifier::EItemsAddedRemoved ).
   289         iEng.ModifiableObjectL( aId, RMenuNotifier::EItemsAddedRemoved ).
   296             SetFlags( TMenuItem::EHidden, aHide );
   290             SetFlags( TMenuItem::EHidden, aHide );
   297         }
   291         }
   298     }
   292     }
   314     TBool exists = EFalse;
   308     TBool exists = EFalse;
   315     TBool itemMissing = EFalse;
   309     TBool itemMissing = EFalse;
   316     for (TInt i=0; i < appItems.Count(); i++)
   310     for (TInt i=0; i < appItems.Count(); i++)
   317         {
   311         {
   318         if(appItems[i].Id() != aId)
   312         if(appItems[i].Id() != aId)
   319           {
   313         	{
   320             exists = ETrue;
   314             exists = ETrue;
   321             const TMenuItem& item = appItems[i];
   315             const TMenuItem& item = appItems[i];
   322 
   316 
   323             TBool itemHidden = (0 != (item.Flags() & TMenuItem::EHidden));
   317             TBool itemHidden = (0 != (item.Flags() & TMenuItem::EHidden));
   324             itemMissing = (0 != (item.Flags() & TMenuItem::EMissing));
   318             itemMissing = (0 != (item.Flags() & TMenuItem::EMissing));
   325             if ( !itemHidden && !itemMissing )
   319             if ( !itemHidden && !itemMissing )
   326                 {
   320                 {
   327                 showItem = ETrue;
   321                 showItem = ETrue;
   328                 }
   322                 }
   329           }
   323         	}
   330         }
   324         }
   331 
   325 
   332     UpdateLinkL( aId, exists, showItem, itemMissing );
   326     UpdateLinkL( aId, exists, showItem, itemMissing );
   333 
   327 
   334     CleanupStack::PopAndDestroy( &appItems );
   328     CleanupStack::PopAndDestroy( &appItems );
   469         *ownStatus = KRequestPending;
   463         *ownStatus = KRequestPending;
   470         SetActive();
   464         SetActive();
   471         User::RequestComplete( ownStatus, KErrNone );
   465         User::RequestComplete( ownStatus, KErrNone );
   472         }
   466         }
   473     }
   467     }
   474 
       
   475 // ---------------------------------------------------------
       
   476 //
       
   477 // ---------------------------------------------------------
       
   478 //
       
   479 void CMenuSrvAppScanner::InstallationNotifyL()
       
   480     {
       
   481     TBool isLegacy = iEng.GetOnceLegacyFormat();
       
   482     for( TInt i = iInstalledPackages.Count() - 1; i >= 0; i-- )
       
   483         {
       
   484         RArray<TMenuItem> mcsUidItems;
       
   485         CleanupClosePushL( mcsUidItems );
       
   486         GetMcsAppItemsL( isLegacy, iInstalledPackages[i].iUid, mcsUidItems );
       
   487         if( mcsUidItems.Count() )
       
   488             {
       
   489             iEng.ModifiableObjectL( mcsUidItems[0].Id() );
       
   490             iInstalledPackages.Remove( i );
       
   491             }
       
   492         CleanupStack::PopAndDestroy( &mcsUidItems );
       
   493         }
       
   494     }
       
   495 
       
   496 // ---------------------------------------------------------
       
   497 //
       
   498 // ---------------------------------------------------------
       
   499 //
       
   500 void CMenuSrvAppScanner::RemoveFromInstalledPackages( TUid aUid )
       
   501     {
       
   502     TInt appIndex = iInstalledPackages.Find( aUid );
       
   503     if( appIndex != KErrNotFound )
       
   504         {
       
   505         iInstalledPackages.Remove( appIndex );
       
   506         }
       
   507     }
       
   508 
       
   509 // ---------------------------------------------------------
       
   510 //
       
   511 // ---------------------------------------------------------
       
   512 //
       
   513 CMenuEngObject& CMenuSrvAppScanner::ModifiableObjectL( TUid aUid, TInt aId,
       
   514             TInt aEvent )
       
   515     {
       
   516     if( aEvent != RMenuNotifier::EItemsNone )
       
   517         {
       
   518         RemoveFromInstalledPackages( aUid );
       
   519         }
       
   520     return iEng.ModifiableObjectL( aId, aEvent );
       
   521     }
       
   522 
       
   523 // ---------------------------------------------------------
       
   524 //
       
   525 // ---------------------------------------------------------
       
   526 //
       
   527 void CMenuSrvAppScanner::HandleInstallNotifyL( TUid aUid,
       
   528     CMcsInstallNotifier::TNotificationType aNotificationType )
       
   529     {
       
   530     iInstalledPackages.AppendL( aUid );
       
   531     // when installing java, appscanner first gets notification from appArc,
       
   532     // and then it is notified with instal notifier(RProperty)
       
   533     // so we need another scan for java apps
       
   534     if( aNotificationType == CMcsInstallNotifier::EJavaInstallNotification )
       
   535       {
       
   536     ScheduleScan();
       
   537       }
       
   538     }
       
   539 
       
   540 // ---------------------------------------------------------
   468 // ---------------------------------------------------------
   541 // CMenuSrvAppScanner::RunMenuEngOperationL
   469 // CMenuSrvAppScanner::RunMenuEngOperationL
   542 // ---------------------------------------------------------
   470 // ---------------------------------------------------------
   543 //
   471 //
   544 void CMenuSrvAppScanner::RunMenuEngOperationL()
   472 void CMenuSrvAppScanner::RunMenuEngOperationL()
   545     {
   473     {
   546     UpdateApplicationItemsL();
   474     UpdateApplicationItemsL();
   547     UpdateApplicationWithHideIfInstalledItemsL();
   475     UpdateApplicationWithHideIfInstalledItemsL();
   548     UpdateLinkItemsL();
   476     UpdateLinkItemsL();
   549     InstallationNotifyL();
       
   550     iOpStatus = EFalse;
   477     iOpStatus = EFalse;
   551     }
   478     }
   552 
   479 
       
   480 
   553 // ---------------------------------------------------------
   481 // ---------------------------------------------------------
   554 // CMenuSrvAppScanner::UpdateApplicationItemL
   482 // CMenuSrvAppScanner::UpdateApplicationItemL
   555 // ---------------------------------------------------------
   483 // ---------------------------------------------------------
   556 //
   484 //
   557 void CMenuSrvAppScanner::UpdateApplicationItemL(
   485 void CMenuSrvAppScanner::UpdateApplicationItemL(
   558     RArray<TMenuItem>& aMcsItems, const CMenuSrvAppAttributes& aApaItem,
   486 		RArray<TMenuItem>& aMcsItems, const CMenuSrvAppAttributes& aApaItem,
   559     TUint aMmcId, TBool isLegacy)
   487 		TUint aMmcId, TBool isLegacy)
   560     {
   488     {
   561     RArray<TMenuItem> mcsUidItems;
   489     RArray<TMenuItem> mcsUidItems;
   562     CleanupClosePushL( mcsUidItems );
   490     CleanupClosePushL( mcsUidItems );
   563     TUid appUid = aApaItem.GetUid();
   491     TUid appuid = aApaItem.GetUid();
   564     GetMcsAppItemsL( isLegacy, appUid.iUid, mcsUidItems );
   492     GetMcsAppItemsL( isLegacy, appuid.iUid, mcsUidItems );
   565     TBool isApaItemHidden( aApaItem.IsHidden() );
   493     TBool isApaItemHidden( aApaItem.IsHidden() );
   566 
   494 
   567     // This app is not in the menu, add it now.
   495     // This app is not in the menu, add it now.
   568     // We don't add hidden items, there are too many of them!
   496     // We don't add hidden items, there are too many of them!
   569     // do not display Menu app
   497     // do not display Menu app
   570     if ( !mcsUidItems.Count()
   498     if ( !mcsUidItems.Count()
   571         && !isApaItemHidden
   499     		&& !isApaItemHidden
   572         && appUid !=  KMmUid3  )
   500     		&& appuid !=  KMmUid3  )
   573         {
   501         {
   574         if( appUid == KSatUid )
   502         if( appuid == KSatUid )
   575             {
   503             {
   576             if( CMcsSatHandler::CheckVisibility() )
   504             if( CMcsSatHandler::CheckVisibility() )
   577                {
   505              	{
   578                 AddAppItemL( aApaItem, aMmcId );
   506               	AddAppItemL( aApaItem, aMmcId );
   579                  }
   507                	}
   580             }
   508             }
   581         else
   509         else
   582             {
   510           	{
   583             AddAppItemL( aApaItem, aMmcId );
   511           	AddAppItemL( aApaItem, aMmcId );
   584             GetMcsAppItemsL( isLegacy, appUid.iUid, mcsUidItems );
   512             GetMcsAppItemsL( isLegacy, appuid.iUid, mcsUidItems );
   585             RemoveFromInstalledPackages( appUid );
   513            	}
   586              }
       
   587         }//if
   514         }//if
   588 
   515 
   589     // if there are any items with legacy UID format
   516     // if there are any items with legacy UID format
   590     // update them to new uid format
   517     // update them to new uid format
   591     else if ( mcsUidItems.Count() && isLegacy )
   518     else if ( mcsUidItems.Count() && isLegacy )
   592         {
   519         {
   593         //for every item with matching UID
   520         //for every item with matching UID
   594         for (TInt j=0; j < mcsUidItems.Count(); j++)
   521         for (TInt j=0; j < mcsUidItems.Count(); j++)
   595          {
   522      		{
       
   523        		CMenuEngObject& object =
       
   524       		                iEng.ModifiableObjectL( mcsUidItems[j].Id() );
   596             TBuf<KUidChars> uidString;
   525             TBuf<KUidChars> uidString;
   597             MenuSrvUtil::UidToStringL( appUid.iUid, uidString, EFalse, EHex );
   526             MenuSrvUtil::UidToStringL( appuid.iUid, uidString, EFalse, EHex );
   598             ModifiableObjectL( appUid, mcsUidItems[j].Id() ).SetAttributeL(
   527        	    object.SetAttributeL( KMenuAttrUid(), uidString, EFalse );
   599                     KMenuAttrUid(), uidString, EFalse );
   528        		}//for
   600            }//for
       
   601         }//else if
   529         }//else if
   602     // "hidden", "missing" and "lock_delete"  flags update
   530     // "hidden", "missing" and "lock_delete"  flags update
   603     for ( TInt j = 0; j < mcsUidItems.Count(); j++ )
   531     for ( TInt j = 0; j < mcsUidItems.Count(); j++ )
   604         {
   532         {
   605         const TMenuItem& item = mcsUidItems[j];
   533         const TMenuItem& item = mcsUidItems[j];
   606 
   534 
   607         //we need to handle first run of appscanner,
   535         //we need to handle first run of appscanner,
   608         //there might be some incorrect data in content xml file
   536         //there might be some incorrect data in content xml file
   609         //if this will have impact on performance we may run this methods only at start up
   537         //if this will have impact on performance we may run this methods only at start up
   610          HandleMmcAttrUpdateL( item, aApaItem, aMmcId );
   538        	HandleMmcAttrUpdateL( item, aApaItem, aMmcId );
   611     HandleNativeAttrUpdateL( item, aApaItem );
   539 		HandleNativeAttrUpdateL( item, aApaItem );
   612 
   540 
   613         // "hidden" flag handling.
   541         // "hidden" flag handling.
   614         HandleHiddenFlagUpdateL( item, aApaItem );
   542         HandleHiddenFlagUpdateL( item, aApaItem );
   615 
   543 
   616         // "missing" flag handling
   544         // "missing" flag handling
   617         HandleMissingFlagUpdateL( item, aApaItem );
   545         HandleMissingFlagUpdateL( item );
   618 
   546 
   619         //"lock_delete" flag handling
   547         //"lock_delete" flag handling
   620         HandleLockDeleteFlagUpdateL( item, aApaItem );
   548         HandleLockDeleteFlagUpdateL(item, aApaItem );
   621         // if item was just added to MCS  it is not present in aMcsItems
   549         // if item was just added to MCS  it is not present in aMcsItems
   622         // so we cannot remove it
   550         // so we cannot remove it
   623         TInt index = aMcsItems.Find( item, TIdentityRelation<TMenuItem>( IdMatch ) );
   551         TInt index = aMcsItems.Find( item, TIdentityRelation<TMenuItem>( IdMatch ) );
   624         if ( index != KErrNotFound )
   552         if ( index != KErrNotFound )
   625           {
   553         	{
   626           aMcsItems.Remove( index );
   554         	aMcsItems.Remove( index );
   627           }
   555         	}
   628         }//for
   556         }//for
   629     CleanupStack::PopAndDestroy( &mcsUidItems );
   557     CleanupStack::PopAndDestroy( &mcsUidItems );
   630     }
   558     }
   631 
   559 
   632 // ---------------------------------------------------------
   560 // ---------------------------------------------------------
   633 // CMenuSrvAppScanner::HandleHiddenFlagUpdateL
   561 // CMenuSrvAppScanner::HandleHiddenFlagUpdateL
   634 // ---------------------------------------------------------
   562 // ---------------------------------------------------------
   635 //
   563 //
   636 void CMenuSrvAppScanner::HandleHiddenFlagUpdateL( const TMenuItem & aItem,
   564 void CMenuSrvAppScanner::HandleHiddenFlagUpdateL( const TMenuItem & aItem,
   637         const CMenuSrvAppAttributes& aApaItem )
   565         const CMenuSrvAppAttributes& aApaItem )
   638   {
   566 	{
   639   TBool itemHidden = ( 0 != ( aItem.Flags() & TMenuItem::EHidden ) );
   567 	TBool itemHidden = (0 != (aItem.Flags() & TMenuItem::EHidden));
   640   if( aApaItem.GetUid() == KSatUid )
   568 	if ( aApaItem.GetUid() == KSatUid )
   641     {
   569 		{
   642     if( itemHidden == CMcsSatHandler::CheckVisibility() )
   570 		if (itemHidden == CMcsSatHandler::CheckVisibility())
   643       {
   571 			{
   644       ModifiableObjectL( aApaItem.GetUid(), aItem.Id(),
   572 			iEng.ModifiableObjectL(aItem.Id(), RMenuNotifier::EItemsAddedRemoved).
   645               RMenuNotifier::EItemsAddedRemoved ).SetFlags(
   573 				SetFlags( TMenuItem::EHidden, !CMcsSatHandler::CheckVisibility());
   646                       TMenuItem::EHidden,
   574 			}
   647                       !CMcsSatHandler::CheckVisibility() );
   575 		}
   648       }
   576 	else if ( itemHidden != aApaItem.IsHidden() )
   649     }
   577 		{
   650   else if( itemHidden != aApaItem.IsHidden() )
   578 		iEng.ModifiableObjectL(aItem.Id(), RMenuNotifier::EItemsAddedRemoved).
   651     {
   579 			SetFlags( TMenuItem::EHidden, aApaItem.IsHidden() );
   652     ModifiableObjectL( aApaItem.GetUid(), aItem.Id(),
   580 		}
   653             RMenuNotifier::EItemsAddedRemoved ).SetFlags(
   581 	}
   654                     TMenuItem::EHidden, aApaItem.IsHidden() );
       
   655     }
       
   656   }
       
   657 
   582 
   658 // ---------------------------------------------------------
   583 // ---------------------------------------------------------
   659 // CMenuSrvAppScanner::HandleNativeAttrUpdateL
   584 // CMenuSrvAppScanner::HandleNativeAttrUpdateL
   660 // ---------------------------------------------------------
   585 // ---------------------------------------------------------
   661 //
   586 //
   662 void CMenuSrvAppScanner::HandleNativeAttrUpdateL(
   587 void CMenuSrvAppScanner::HandleNativeAttrUpdateL(
   663     const TMenuItem& aItem, const CMenuSrvAppAttributes& aApaItem )
   588 		const TMenuItem& aItem, const CMenuSrvAppAttributes& aApaItem )
   664   {
   589 	{
   665     //we need this to delete uninstalled java app item
   590     //we need this to delete uninstalled java app item
   666     if( aApaItem.GetAppType() != iEng.ObjectL( aItem.Id() ).GetAppType() )
   591     if( aApaItem.GetAppType() != iEng.ObjectL( aItem.Id() ).GetAppType() )
   667       {
   592     	{
   668       ModifiableObjectL( aApaItem.GetUid(), aItem.Id(),
   593     	iEng.ModifiableObjectL( aItem.Id(),
   669           RMenuNotifier::EItemsNone ).SetAppType( aApaItem.GetAppType() );
   594     			RMenuNotifier::EItemsNone ).SetAppType( aApaItem.GetAppType() );
   670       }
   595     	}
   671   }
   596 	}
   672 
   597 
   673 
   598 
   674 // ---------------------------------------------------------
   599 // ---------------------------------------------------------
   675 // CMenuSrvAppScanner::HandleMmcAttrUpdateL
   600 // CMenuSrvAppScanner::HandleMmcAttrUpdateL
   676 // ---------------------------------------------------------
   601 // ---------------------------------------------------------
   677 //
   602 //
   678 void CMenuSrvAppScanner::HandleMmcAttrUpdateL(
   603 void CMenuSrvAppScanner::HandleMmcAttrUpdateL(
   679     const TMenuItem& aItem, const CMenuSrvAppAttributes& aApaItem, TUint aMmcId )
   604 		const TMenuItem& aItem, const CMenuSrvAppAttributes& aApaItem, TUint aMmcId )
   680   {
   605 	{
   681     TPtrC val;
   606     if ( IsInMmc( aApaItem ) )
   682     TBool dummy;
   607     	{
   683     TBool attributeExists = iEng.ObjectL( aItem.Id() ).FindAttribute(
   608     	//app is instaled on mmc - KMenuAttrMmcId attribute update
   684             KMenuAttrMmcId(), val, dummy );
   609     	TBuf<KUidChars> uidString;
   685     if( IsInMmc( aApaItem ) )
       
   686       {
       
   687       //app is instaled on mmc - KMenuAttrMmcId attribute update
       
   688       TBuf<KUidChars> uidString;
       
   689         uidString.Format( KHexFormat, aMmcId );
   610         uidString.Format( KHexFormat, aMmcId );
   690         if( uidString.Compare( val ) )
   611         iEng.ModifiableObjectL( aItem.Id(), RMenuNotifier::EItemsAddedRemoved ).
   691             {
   612 			SetAttributeL( KMenuAttrMmcId, uidString, EFalse );
   692             ModifiableObjectL( aApaItem.GetUid(), aItem.Id() ).SetAttributeL(
   613     	}
   693                             KMenuAttrMmcId, uidString, EFalse );
   614     else if ( IsInMassStorage( aApaItem )
   694             }
   615     		&& aApaItem.GetAppType() == CMenuEngObject::EWidgetApp )
   695       }
   616     	{
   696     else if( IsInMassStorage( aApaItem )
   617     	//its java app installed on mass storage, we need to leave it in xml
   697         && aApaItem.GetAppType() == CMenuEngObject::EWidgetApp )
   618     	//in case of connecting usb in mass storage mode
   698       {
   619         iEng.ModifiableObjectL( aItem.Id(), RMenuNotifier::EItemsAddedRemoved ).
   699       //its java app installed on mass storage, we need to leave it in xml
   620 			SetAttributeL( KMenuAttrMmcId, KMenuMassStorage, EFalse );
   700       //in case of connecting usb in mass storage mode
   621     	}
   701         if( KMenuMassStorage().Compare( val ) )
   622     else
   702             {
   623     	{
   703             ModifiableObjectL( aApaItem.GetUid(), aItem.Id() ).SetAttributeL(
   624     	//its installed on c: drive - remove attribute
   704                     KMenuAttrMmcId, KMenuMassStorage, EFalse );
   625 		iEng.ModifiableObjectL( aItem.Id(), RMenuNotifier::EItemsAddedRemoved ).
   705             }
   626 			RemoveAttribute( KMenuAttrMmcId );
   706       }
   627     	}
   707     else if( attributeExists )
   628 	}
   708       {
       
   709       //its installed on c: drive - remove attribute
       
   710         ModifiableObjectL( aApaItem.GetUid(), aItem.Id() ).RemoveAttribute(
       
   711                 KMenuAttrMmcId );
       
   712       }
       
   713   }
       
   714 // ---------------------------------------------------------
   629 // ---------------------------------------------------------
   715 // CMenuSrvAppScanner::UpdateApplicationItemsL
   630 // CMenuSrvAppScanner::UpdateApplicationItemsL
   716 // ---------------------------------------------------------
   631 // ---------------------------------------------------------
   717 //
   632 //
   718 void CMenuSrvAppScanner::UpdateApplicationItemsL()
   633 void CMenuSrvAppScanner::UpdateApplicationItemsL()
   724     GetMcsAppItemsL( mcsItems );
   639     GetMcsAppItemsL( mcsItems );
   725     iSrvEngUtils.ReloadApaItemsL();
   640     iSrvEngUtils.ReloadApaItemsL();
   726     GetCrItemsL( iSrvEngUtils.GetAppItemsL() );
   641     GetCrItemsL( iSrvEngUtils.GetAppItemsL() );
   727     TBool isLegacy = iEng.GetOnceLegacyFormat();
   642     TBool isLegacy = iEng.GetOnceLegacyFormat();
   728 
   643 
       
   644 
   729     //for every item in apaAndCrItems array
   645     //for every item in apaAndCrItems array
   730     for ( TInt i = ( iSrvEngUtils.GetAppItemsL().Count() - 1 ); i >= 0 ; i-- )
   646     for ( TInt i = ( iSrvEngUtils.GetAppItemsL().Count() - 1 ); i >= 0 ; i-- )
   731         {
   647         {
   732         // if there was leave for any item we ignore it
   648         // if there was leave for any item we ignore it
   733         // and proceed to the next one
   649         // and proceed to the next one
   734         TRAP_IGNORE( UpdateApplicationItemL( mcsItems,
   650         TRAP_IGNORE(UpdateApplicationItemL(
   735                 *iSrvEngUtils.GetAppItemsL()[i], currentMmcId, isLegacy ) );
   651         		mcsItems, *iSrvEngUtils.GetAppItemsL()[i], currentMmcId, isLegacy));
   736         }
   652         }
   737     // Here the big list contains menu items that refer to missing apps.
   653     // Here the big list contains menu items that refer to missing apps.
   738     HandleMissingItemsL( mcsItems );
   654     HandleMissingItemsL( mcsItems );
   739     CleanupStack::PopAndDestroy( &mcsItems );
   655     CleanupStack::PopAndDestroy( &mcsItems );
   740     }
   656     }
   742 // ---------------------------------------------------------
   658 // ---------------------------------------------------------
   743 // CMenuSrvAppScanner::HandleLockDeleteFlagUpdateL
   659 // CMenuSrvAppScanner::HandleLockDeleteFlagUpdateL
   744 // ---------------------------------------------------------
   660 // ---------------------------------------------------------
   745 //
   661 //
   746 void CMenuSrvAppScanner::HandleLockDeleteFlagUpdateL(
   662 void CMenuSrvAppScanner::HandleLockDeleteFlagUpdateL(
   747     const TMenuItem& aItem, const CMenuSrvAppAttributes& aApaItem )
   663 		const TMenuItem& aItem, const CMenuSrvAppAttributes& aApaItem )
   748   {
   664 	{
   749   TBool isHidden = ( ( iEng.ObjectL( aItem.Id() )
   665 	TBool isHidden = ( ( iEng.ObjectL( aItem.Id() )
   750               .Flags() & TMenuItem::EHidden ) != 0 );
   666 							.Flags() & TMenuItem::EHidden ) != 0 );
   751   if ( !isHidden && IsInRomL( aApaItem ) )
   667 	if ( !isHidden && IsInRomL( aApaItem ) )
   752     {
   668 		{
   753     if ( ( aItem.Flags() & TMenuItem::ELockDelete ) == 0 )
   669 		if ( ( aItem.Flags() & TMenuItem::ELockDelete ) == 0 )
   754       {
   670 			{
   755             ModifiableObjectL( aApaItem.GetUid(), aItem.Id()).SetFlags(
   671 			iEng.ModifiableObjectL(aItem.Id())
   756                     TMenuItem::ELockDelete, ETrue );
   672 					.SetFlags( TMenuItem::ELockDelete, ETrue );
   757       }
   673 			}
   758     }
   674 		}
   759   else
   675 	else
   760     {
   676 		{
   761     if ( ( aItem.Flags() & TMenuItem::ELockDelete ) != 0 )
   677 		if ( ( aItem.Flags() & TMenuItem::ELockDelete ) != 0 )
   762       {
   678 			{
   763             ModifiableObjectL( aApaItem.GetUid(), aItem.Id() ).SetFlags(
   679 			iEng.ModifiableObjectL(aItem.Id())
   764                     TMenuItem::ELockDelete, EFalse );
   680 					.SetFlags( TMenuItem::ELockDelete, EFalse );
   765       }
   681 			}
   766     }
   682 		}
   767   }
   683 	}
   768 
   684 
   769 // ---------------------------------------------------------
   685 // ---------------------------------------------------------
   770 // CMenuSrvAppScanner::HandleMissingFlagUpdateL
   686 // CMenuSrvAppScanner::HandleMissingFlagUpdateL
   771 // ---------------------------------------------------------
   687 // ---------------------------------------------------------
   772 //
   688 //
   773 void CMenuSrvAppScanner::HandleMissingFlagUpdateL(
   689 void CMenuSrvAppScanner::HandleMissingFlagUpdateL( const TMenuItem& aItem )
   774         const TMenuItem& aItem,  const CMenuSrvAppAttributes& aApaItem  )
   690 	{
   775   {
   691 	if ( aItem.Flags() & TMenuItem::EMissing )
   776   if ( aItem.Flags() & TMenuItem::EMissing )
       
   777         {
   692         {
   778         CLOG_WRITE_FORMAT8( "Unsetting flag EMissing on %d", item.Id() );
   693         CLOG_WRITE_FORMAT8( "Unsetting flag EMissing on %d", item.Id() );
   779         //application found so we unset "missing" flag
   694         //application found so we unset "missing" flag
   780         ModifiableObjectL( aApaItem.GetUid(), aItem.Id(),
   695         iEng.ModifiableObjectL( aItem.Id(), RMenuNotifier::EItemsAddedRemoved ).
   781                 RMenuNotifier::EItemsAddedRemoved ).SetFlags(
   696             SetFlags( TMenuItem::EMissing, EFalse );
   782                         TMenuItem::EMissing, EFalse );
   697         }
   783         }
   698 	}
   784   }
       
   785 
   699 
   786 // ---------------------------------------------------------
   700 // ---------------------------------------------------------
   787 // CMenuSrvAppScanner::GetCrItemsL
   701 // CMenuSrvAppScanner::GetCrItemsL
   788 // ---------------------------------------------------------
   702 // ---------------------------------------------------------
   789 //
   703 //
   790 void CMenuSrvAppScanner::GetCrItemsL( RPointerArray<CMenuSrvAppAttributes>& aArray )
   704 void CMenuSrvAppScanner::GetCrItemsL( RPointerArray<CMenuSrvAppAttributes>& aArray )
   791     {
   705     {
   792    TBuf<KCenRepBufferSize> buf;
   706  	TBuf<KCenRepBufferSize> buf;
   793   iCenRepSession->Get( KMenuHideCPApplication, buf );
   707 	iCenRepSession->Get( KMenuHideCPApplication, buf );
   794   ParseUidsL( buf, aArray );// parses UIDs from buf and appends them to array
   708 	ParseUidsL( buf, aArray );// parses UIDs from buf and appends them to array
   795   iCenRepSession->Get( KMenuHideApplication, buf );
   709 	iCenRepSession->Get( KMenuHideApplication, buf );
   796   ParseUidsL( buf, aArray );// parses UIDs from buf and appends them to array
   710 	ParseUidsL( buf, aArray );// parses UIDs from buf and appends them to array
   797     }
   711     }
   798 
   712 
   799 // ---------------------------------------------------------
   713 // ---------------------------------------------------------
   800 // CMenuSrvAppScanner::ParseUidsL
   714 // CMenuSrvAppScanner::ParseUidsL
   801 // ---------------------------------------------------------
   715 // ---------------------------------------------------------
   809     TBool notEmpty = EFalse;
   723     TBool notEmpty = EFalse;
   810     while ( !input.Eos() )
   724     while ( !input.Eos() )
   811         {
   725         {
   812         if( input.Peek() == ',')
   726         if( input.Peek() == ',')
   813             {
   727             {
   814             SetHiddenL(input.MarkedToken( startMark ), aArray);
   728             SetHidden(input.MarkedToken( startMark ), aArray);
   815             input.Inc();
   729             input.Inc();
   816             input.Mark( startMark );
   730             input.Mark( startMark );
   817             }
   731             }
   818         input.Inc();
   732         input.Inc();
   819         notEmpty = ETrue;
   733         notEmpty = ETrue;
   820         }
   734         }
   821     if ( notEmpty )
   735 	if ( notEmpty )
   822         {
   736 		{
   823         SetHiddenL( input.MarkedToken( startMark ), aArray );
   737 		SetHidden(input.MarkedToken( startMark ), aArray);
   824         }
   738 		}
       
   739 
       
   740 
   825     }
   741     }
   826 
   742 
   827 // ---------------------------------------------------------
   743 // ---------------------------------------------------------
   828 // CMenuSrvAppScanner::SetHidden
   744 // CMenuSrvAppScanner::SetHidden
   829 // ---------------------------------------------------------
   745 // ---------------------------------------------------------
   830 //
   746 //
   831 void CMenuSrvAppScanner::SetHiddenL(
   747 void CMenuSrvAppScanner::SetHidden(
   832         const TDesC& aHiddenAppUid, RPointerArray<CMenuSrvAppAttributes>& aArray )
   748         const TDesC& aHiddenAppUid, RPointerArray<CMenuSrvAppAttributes>& aArray )
   833     {
   749     {
   834     TLex appUidDescriptor(aHiddenAppUid);
   750     TLex appUidDescriptor(aHiddenAppUid);
   835     TUint hiddenAppUid( 0 );
   751     TUint hiddenAppUid( 0 );
   836     appUidDescriptor.Val( hiddenAppUid, EHex );
   752     appUidDescriptor.Val( hiddenAppUid, EHex );
   948 // ---------------------------------------------------------
   864 // ---------------------------------------------------------
   949 // CMenuSrvAppScanner::ScheduleScan
   865 // CMenuSrvAppScanner::ScheduleScan
   950 // ---------------------------------------------------------
   866 // ---------------------------------------------------------
   951 //
   867 //
   952 void CMenuSrvAppScanner::ScheduleScan()
   868 void CMenuSrvAppScanner::ScheduleScan()
   953   {
   869 	{
   954   if ( !IsActive() && !iOpStatus )
   870 	if ( !IsActive() && !iOpStatus )
   955     {
   871 		{
   956     iOpStatus = ETrue;
   872 		iOpStatus = ETrue;
   957     TRequestStatus* ownStatus = &iStatus;
   873 		TRequestStatus* ownStatus = &iStatus;
   958     *ownStatus = KRequestPending;
   874 		*ownStatus = KRequestPending;
   959     SetActive();
   875 		SetActive();
   960     User::RequestComplete( ownStatus, KErrNone );
   876 		User::RequestComplete( ownStatus, KErrNone );
   961     }
   877 		}
   962   }
   878 	}
   963 
   879 
   964 // ---------------------------------------------------------
   880 // ---------------------------------------------------------
   965 // CMenuSrvAppScanner::CreateInstallFolderL
   881 // CMenuSrvAppScanner::CreateInstallFolderL
   966 // ---------------------------------------------------------
   882 // ---------------------------------------------------------
   967 //
   883 //
   968 TInt CMenuSrvAppScanner::CreateInstallFolderL( const CMenuSrvAppAttributes& aApaItem )
   884 TInt CMenuSrvAppScanner::CreateInstallFolderL( const CMenuSrvAppAttributes& aApaItem )
   969   {
   885 	{
   970     // Find a folder for this app.
   886     // Find a folder for this app.
   971     TInt folder(0);
   887     TInt folder(0);
   972     if ( aApaItem.GetGroupName().Length() )
   888     if ( aApaItem.GetGroupName().Length() )
   973         {
   889         {
   974         // appgroup_name is defined for this app. Find or create folder.
   890         // appgroup_name is defined for this app. Find or create folder.
   983         {
   899         {
   984         // Last resort: it goes to the root.
   900         // Last resort: it goes to the root.
   985         iEng.RootFolderL( folder );
   901         iEng.RootFolderL( folder );
   986         }
   902         }
   987     return folder;
   903     return folder;
   988   }
   904 	}
   989 
   905 
   990 // ---------------------------------------------------------
   906 // ---------------------------------------------------------
   991 // CMenuSrvAppScanner::AddAppItemL
   907 // CMenuSrvAppScanner::AddAppItemL
   992 // ---------------------------------------------------------
   908 // ---------------------------------------------------------
   993 //
   909 //
  1009         // This app is on the MMC, set the "mmc_id" attribute.
   925         // This app is on the MMC, set the "mmc_id" attribute.
  1010         uidString.Format( KHexFormat, aCurrentMmcId );
   926         uidString.Format( KHexFormat, aCurrentMmcId );
  1011         object->SetAttributeL( KMenuAttrMmcId, uidString, EFalse );
   927         object->SetAttributeL( KMenuAttrMmcId, uidString, EFalse );
  1012         }
   928         }
  1013     if( aApaItem.GetAppType() == CMenuEngObject::EWidgetApp )
   929     if( aApaItem.GetAppType() == CMenuEngObject::EWidgetApp )
  1014       {
   930     	{
  1015       //we need this to delete uninstalled java or wrt widget app item
   931     	//we need this to delete uninstalled java or wrt widget app item
  1016       if ( !IsInMmc( aApaItem )
   932     	if ( !IsInMmc( aApaItem )
  1017           && IsInMassStorage( aApaItem ) )
   933     			&& IsInMassStorage( aApaItem ) )
  1018         {
   934     		{
  1019         object->SetAttributeL( KMenuAttrMmcId, KMenuMassStorage, EFalse );
   935     		object->SetAttributeL( KMenuAttrMmcId, KMenuMassStorage, EFalse );
  1020         }
   936     		}
  1021       }
   937     	}
  1022     object->SetAppType( aApaItem.GetAppType() );
   938     object->SetAppType( aApaItem.GetAppType() );
  1023     EnsureFolderWritableL( folder );
   939     EnsureFolderWritableL( folder );
  1024     iEng.AddL( *object, folder, 0 );
   940     iEng.AddL( *object, folder, 0 );
  1025     CleanupStack::Pop( object );
   941     CleanupStack::Pop( object );
  1026     }
   942     }
  1039     const CMenuEngObject& rootObject = iEng.ObjectL( defaultFolderId );
   955     const CMenuEngObject& rootObject = iEng.ObjectL( defaultFolderId );
  1040     TPtrC groupName;
   956     TPtrC groupName;
  1041     TBool localized;
   957     TBool localized;
  1042 
   958 
  1043     if ( rootObject.FindAttribute( KMenuAttrAppGroupName, groupName, localized ) &&
   959     if ( rootObject.FindAttribute( KMenuAttrAppGroupName, groupName, localized ) &&
  1044       groupName.Compare( aAppGroupName )==0 )
   960     	groupName.Compare( aAppGroupName )==0 )
  1045         {
   961         {
  1046         folder = defaultFolderId;
   962         folder = defaultFolderId;
  1047         }
   963         }
  1048     else
   964     else
  1049       {
   965     	{
  1050         TMenuSrvTypeAttrFilter filter;
   966         TMenuSrvTypeAttrFilter filter;
  1051         filter.SetType( KMenuTypeFolder() );
   967         filter.SetType( KMenuTypeFolder() );
  1052         filter.SetAttr( KMenuAttrAppGroupName(), aAppGroupName );
   968         filter.SetAttr( KMenuAttrAppGroupName(), aAppGroupName );
  1053         RArray<TMenuItem> items;
   969         RArray<TMenuItem> items;
  1054         CleanupClosePushL( items );
   970         CleanupClosePushL( items );
  1057         if ( items.Count() )
   973         if ( items.Count() )
  1058             {
   974             {
  1059             folder = items[0].Id();
   975             folder = items[0].Id();
  1060             }
   976             }
  1061         CleanupStack::PopAndDestroy( &items );
   977         CleanupStack::PopAndDestroy( &items );
  1062       }
   978     	}
  1063     if ( !folder )
   979     if ( !folder )
  1064         {
   980         {
  1065         // No such folder, create it now.
   981         // No such folder, create it now.
  1066         CMenuEngObject* object = iEng.NewObjectL( KMenuTypeFolder() );
   982         CMenuEngObject* object = iEng.NewObjectL( KMenuTypeFolder() );
  1067         CleanupStack::PushL( object );
   983         CleanupStack::PushL( object );
  1147             }
  1063             }
  1148         }
  1064         }
  1149     else if( iEng.ObjectL( aItem.Id() ).GetAppType()
  1065     else if( iEng.ObjectL( aItem.Id() ).GetAppType()
  1150                 != CMenuEngObject::EWidgetApp
  1066                 != CMenuEngObject::EWidgetApp
  1151             || iEng.ObjectL( aItem.Id() ).FindAttribute(
  1067             || iEng.ObjectL( aItem.Id() ).FindAttribute(
  1152                 KMenuAttrPredefined(), val, dummy ) )
  1068             		KMenuAttrPredefined(), val, dummy ) )
  1153         {
  1069         {
  1154         flags = TMenuItem::EHidden;
  1070         flags = TMenuItem::EHidden;
  1155         }
  1071         }
  1156     return flags;
  1072     return flags;
  1157     }
  1073     }
  1181 // ---------------------------------------------------------
  1097 // ---------------------------------------------------------
  1182 // CMenuSrvAppScanner::SetObjectFlagsL
  1098 // CMenuSrvAppScanner::SetObjectFlagsL
  1183 // ---------------------------------------------------------
  1099 // ---------------------------------------------------------
  1184 //
  1100 //
  1185 void CMenuSrvAppScanner::SetObjectFlagsL( TBool aFlagValue, const TMenuItem& aItem,
  1101 void CMenuSrvAppScanner::SetObjectFlagsL( TBool aFlagValue, const TMenuItem& aItem,
  1186     const TMenuItem::TFlags& aFlag, const RMenuNotifier::TEvent& aEvent  )
  1102 		const TMenuItem::TFlags& aFlag, const RMenuNotifier::TEvent& aEvent  )
  1187   {
  1103 	{
  1188   TBool itemFlagPresent = (0 != (aItem.Flags() & aFlag));
  1104 	TBool itemFlagPresent = (0 != (aItem.Flags() & aFlag));
  1189   if( aFlagValue != itemFlagPresent )
  1105 	if( aFlagValue != itemFlagPresent )
  1190     {
  1106 		{
  1191         iEng.ModifiableObjectL( aItem.Id(), aEvent ).
  1107 		iEng.ModifiableObjectL( aItem.Id(), aEvent ).
  1192                  SetFlags( aFlag, aFlagValue );
  1108 			 SetFlags( aFlag, aFlagValue );
  1193     }
  1109 		}
  1194   }
  1110 	}
  1195 
  1111 
  1196 // ---------------------------------------------------------
  1112 // ---------------------------------------------------------
  1197 // CMenuSrvAppScanner::UpdateMmcHistoryL
  1113 // CMenuSrvAppScanner::UpdateMmcHistoryL
  1198 // ---------------------------------------------------------
  1114 // ---------------------------------------------------------
  1199 //
  1115 //
  1200 TUint CMenuSrvAppScanner::UpdateMmcHistoryL()
  1116 TUint CMenuSrvAppScanner::UpdateMmcHistoryL()
  1201     {
  1117     {
  1202     TUint mmcId = CurrentMmcId();
  1118     TUint mmcId = CurrentMmcId();
  1203     if( mmcId )
  1119     if( mmcId )
  1204       {
  1120     	{
  1205       iMmcHistory->InsertL( mmcId );
  1121     	iMmcHistory->InsertL( mmcId );
  1206       iMmcHistory->SaveL( iFs, KMenuMmcHistoryFname() );
  1122     	iMmcHistory->SaveL( iFs, KMenuMmcHistoryFname() );
  1207       }
  1123     	}
  1208     return mmcId;
  1124     return mmcId;
  1209     }
  1125     }
  1210 
  1126 
  1211 // ---------------------------------------------------------
  1127 // ---------------------------------------------------------
  1212 // CMenuSrvAppScanner::CurrentMmcId
  1128 // CMenuSrvAppScanner::CurrentMmcId
  1217     // Get mmc id. Errors are ignored.
  1133     // Get mmc id. Errors are ignored.
  1218     TUint mmcId = 0;
  1134     TUint mmcId = 0;
  1219     TInt mmcDrive;
  1135     TInt mmcDrive;
  1220     TInt err;
  1136     TInt err;
  1221     err = DriveInfo::GetDefaultDrive(
  1137     err = DriveInfo::GetDefaultDrive(
  1222           DriveInfo::EDefaultRemovableMassStorage, mmcDrive );
  1138     	    DriveInfo::EDefaultRemovableMassStorage, mmcDrive );
  1223     if ( !err )
  1139     if ( !err )
  1224         {
  1140         {
  1225         TVolumeInfo volumeInfo;
  1141         TVolumeInfo volumeInfo;
  1226         err = iFs.Volume( volumeInfo, mmcDrive );
  1142         err = iFs.Volume( volumeInfo, mmcDrive );
  1227         if( !err )
  1143         if( !err )
  1235 // ---------------------------------------------------------
  1151 // ---------------------------------------------------------
  1236 // CMenuSrvAppScanner::IsFileInDrive
  1152 // CMenuSrvAppScanner::IsFileInDrive
  1237 // ---------------------------------------------------------
  1153 // ---------------------------------------------------------
  1238 //
  1154 //
  1239 TBool CMenuSrvAppScanner::IsFileInDrive(
  1155 TBool CMenuSrvAppScanner::IsFileInDrive(
  1240       const TDesC& aFileName,
  1156 			const TDesC& aFileName,
  1241       const DriveInfo::TDefaultDrives& aDefaultDrive ) const
  1157 			const DriveInfo::TDefaultDrives& aDefaultDrive ) const
  1242     {
  1158     {
  1243     if ( aFileName.Length() )
  1159     if ( aFileName.Length() )
  1244         {
  1160         {
  1245         TInt mmcDrive;
  1161         TInt mmcDrive;
  1246         TInt err = DriveInfo::GetDefaultDrive(
  1162         TInt err = DriveInfo::GetDefaultDrive(
  1247             aDefaultDrive, mmcDrive );
  1163 						aDefaultDrive, mmcDrive );
  1248         if ( !err )
  1164         if ( !err )
  1249             {
  1165             {
  1250             TInt fileDrive;
  1166             TInt fileDrive;
  1251             err = RFs::CharToDrive( aFileName[0], fileDrive );
  1167             err = RFs::CharToDrive( aFileName[0], fileDrive );
  1252             if ( !err && fileDrive == mmcDrive )
  1168             if ( !err && fileDrive == mmcDrive )
  1262 // CMenuSrvAppScanner::IsAppInDrive
  1178 // CMenuSrvAppScanner::IsAppInDrive
  1263 // ---------------------------------------------------------
  1179 // ---------------------------------------------------------
  1264 //
  1180 //
  1265 TBool CMenuSrvAppScanner::IsAppInDrive(
  1181 TBool CMenuSrvAppScanner::IsAppInDrive(
  1266         const CMenuSrvAppAttributes& aApaItem,
  1182         const CMenuSrvAppAttributes& aApaItem,
  1267     const DriveInfo::TDefaultDrives& aDefaultDrive ) const
  1183 		const DriveInfo::TDefaultDrives& aDefaultDrive ) const
  1268     {
  1184     {
  1269     TBool ret( EFalse );
  1185     TBool ret( EFalse );
  1270     if ( IsFileInDrive( aApaItem.GetFullName(), aDefaultDrive ) )
  1186     if ( IsFileInDrive( aApaItem.GetFullName(), aDefaultDrive ) )
  1271       {
  1187     	{
  1272       ret = ETrue;
  1188     	ret = ETrue;
  1273       }
  1189     	}
  1274     return ret;
  1190     return ret;
  1275     }
  1191     }
  1276 
  1192 
  1277 // ---------------------------------------------------------
  1193 // ---------------------------------------------------------
  1278 // CMenuSrvAppScanner::IsInMmc
  1194 // CMenuSrvAppScanner::IsInMmc
  1304 // ---------------------------------------------------------
  1220 // ---------------------------------------------------------
  1305 // CMenuSrvAppScanner::IsDriveInUse
  1221 // CMenuSrvAppScanner::IsDriveInUse
  1306 // ---------------------------------------------------------
  1222 // ---------------------------------------------------------
  1307 //
  1223 //
  1308 TBool CMenuSrvAppScanner::IsDriveInUse(
  1224 TBool CMenuSrvAppScanner::IsDriveInUse(
  1309     const DriveInfo::TDefaultDrives& aDefaultDrive )
  1225 		const DriveInfo::TDefaultDrives& aDefaultDrive )
  1310     {
  1226     {
  1311     TBool inUse( EFalse );
  1227     TBool inUse( EFalse );
  1312     TInt drive;
  1228     TInt drive;
  1313 
  1229 
  1314     TInt err = DriveInfo::GetDefaultDrive( aDefaultDrive, drive );
  1230     TInt err = DriveInfo::GetDefaultDrive( aDefaultDrive, drive );
  1315     if( err == KErrNone )
  1231     if( err == KErrNone )
  1316     {
  1232 		{
  1317     TUint status;
  1233 		TUint status;
  1318     err =  DriveInfo::GetDriveStatus(  iFs, drive, status );
  1234 		err =  DriveInfo::GetDriveStatus(  iFs, drive, status );
  1319     if( err == KErrNone
  1235 		if( err == KErrNone
  1320         && ( status & DriveInfo::EDriveInUse ) )
  1236 				&& ( status & DriveInfo::EDriveInUse ) )
  1321       {
  1237 			{
  1322       inUse = ETrue;
  1238 			inUse = ETrue;
  1323       }
  1239 			}
  1324     }
  1240 		}
  1325 
  1241 
  1326   return inUse;
  1242 	return inUse;
  1327     }
  1243     }
  1328 
  1244 
  1329 //  End of File
  1245 //  End of File