30 #include "menuutil.h" |
30 #include "menuutil.h" |
31 |
31 |
32 _LIT( KMenuOne, "1" ); |
32 _LIT( KMenuOne, "1" ); |
33 _LIT( KMenuAttrMmcId, "mmc_id" ); |
33 _LIT( KMenuAttrMmcId, "mmc_id" ); |
34 _LIT( KMenuMassStorage, "mass_storage" ); |
34 _LIT( KMenuMassStorage, "mass_storage" ); |
|
35 _LIT( KMenuPredefinedWidget, "predefined_widget" ); |
35 _LIT( KMenuMmcHistoryFname, "mmchistory" ); |
36 _LIT( KMenuMmcHistoryFname, "mmchistory" ); |
36 |
37 |
37 // ==================== LOCAL FUNCTIONS ==================== |
38 // ==================== LOCAL FUNCTIONS ==================== |
38 |
39 |
39 /** |
40 /** |
1033 |
1034 |
1034 // --------------------------------------------------------- |
1035 // --------------------------------------------------------- |
1035 // CMenuSrvAppScanner::HandleMissingItemsL |
1036 // CMenuSrvAppScanner::HandleMissingItemsL |
1036 // --------------------------------------------------------- |
1037 // --------------------------------------------------------- |
1037 // |
1038 // |
1038 void CMenuSrvAppScanner::HandleMissingItemsL |
1039 TMenuItem::TFlags CMenuSrvAppScanner::GetProperFlagL( const TMenuItem& aItem ) |
1039 ( const RArray<TMenuItem>& aItems ) |
1040 { |
|
1041 TMenuItem::TFlags flags = TMenuItem::ENoFlag; |
|
1042 |
|
1043 TUint mmcId = 0; |
|
1044 TPtrC val; |
|
1045 TBool dummy; |
|
1046 if( iEng.ObjectL( aItem.Id() ).FindAttribute( KMenuAttrMmcId(), val, dummy ) ) |
|
1047 { |
|
1048 MenuUtils::GetTUint( val, mmcId ); |
|
1049 if ( mmcId && KErrNotFound != iMmcHistory->Find( mmcId ) ) |
|
1050 { |
|
1051 // This item is on an MMC which is currently in the MMC history. |
|
1052 // Set it "missing" but keep it. |
|
1053 flags = TMenuItem::EMissing; |
|
1054 } |
|
1055 else if ( val == KMenuMassStorage() |
|
1056 && IsDriveInUse( DriveInfo::EDefaultMassStorage ) ) |
|
1057 { |
|
1058 flags = TMenuItem::EMissing; |
|
1059 } |
|
1060 else if ( iEng.ObjectL( aItem.Id() ).FindAttribute( |
|
1061 KMenuPredefinedWidget(), val, dummy ) ) |
|
1062 { |
|
1063 flags = TMenuItem::EMissing; |
|
1064 } |
|
1065 } |
|
1066 else if( iEng.ObjectL( aItem.Id() ).GetAppType() |
|
1067 != CMenuEngObject::EWidgetApp |
|
1068 || iEng.ObjectL( aItem.Id() ).FindAttribute( |
|
1069 KMenuPredefinedWidget(), val, dummy ) ) |
|
1070 { |
|
1071 flags = TMenuItem::EHidden; |
|
1072 } |
|
1073 return flags; |
|
1074 } |
|
1075 |
|
1076 // --------------------------------------------------------- |
|
1077 // CMenuSrvAppScanner::HandleMissingItemsL |
|
1078 // --------------------------------------------------------- |
|
1079 // |
|
1080 void CMenuSrvAppScanner::HandleMissingItemsL( |
|
1081 const RArray<TMenuItem>& aItems ) |
1040 { |
1082 { |
1041 for ( TInt i = 0; i < aItems.Count(); i++ ) |
1083 for ( TInt i = 0; i < aItems.Count(); i++ ) |
1042 { |
1084 { |
1043 const TInt id = aItems[i].Id(); |
1085 TMenuItem::TFlags flags = GetProperFlagL( aItems[i] ); |
1044 TUint mmcId = 0; |
1086 if( flags == TMenuItem::ENoFlag ) |
1045 TPtrC val; |
1087 { |
1046 TBool dummy; |
1088 iEng.RemoveL( aItems[i].Id() ); |
1047 if( iEng.ObjectL( id ).FindAttribute( KMenuAttrMmcId(), val, dummy ) ) |
|
1048 { |
|
1049 MenuUtils::GetTUint( val, mmcId ); |
|
1050 if ( mmcId && KErrNotFound != iMmcHistory->Find( mmcId ) ) |
|
1051 { |
|
1052 // This item is on an MMC which is currently in the MMC history. |
|
1053 // Set it "missing" but keep it. |
|
1054 SetObjectFlagsL( ETrue, aItems[i], TMenuItem::EMissing, |
|
1055 RMenuNotifier::EItemsAddedRemoved ); |
|
1056 } |
|
1057 else if ( val == KMenuMassStorage() |
|
1058 && IsDriveInUse( DriveInfo::EDefaultMassStorage ) ) |
|
1059 { |
|
1060 SetObjectFlagsL( ETrue, aItems[i], TMenuItem::EMissing, |
|
1061 RMenuNotifier::EItemsAddedRemoved ); |
|
1062 } |
|
1063 else |
|
1064 { |
|
1065 iEng.RemoveL( id ); |
|
1066 } |
|
1067 } |
1089 } |
1068 else |
1090 else |
1069 { |
1091 { |
1070 // This item is not on MMC or its MMC has been purged from the MMC |
1092 SetObjectFlagsL( ETrue, aItems[i], flags, |
1071 // history. Hide the item. |
1093 RMenuNotifier::EItemsAddedRemoved ); |
1072 SetObjectFlagsL( EFalse, aItems[i], TMenuItem::ELockDelete ); |
|
1073 |
|
1074 if( iEng.ObjectL( id ).GetAppType() != CMenuEngObject::EWidgetApp ) |
|
1075 { |
|
1076 SetObjectFlagsL( ETrue, aItems[i], TMenuItem::EHidden, |
|
1077 RMenuNotifier::EItemsAddedRemoved ); |
|
1078 } |
|
1079 else |
|
1080 { |
|
1081 iEng.RemoveL( id ); |
|
1082 } |
|
1083 } |
1094 } |
1084 } |
1095 } |
1085 } |
1096 } |
1086 |
1097 |
1087 // --------------------------------------------------------- |
1098 // --------------------------------------------------------- |