29 |
27 |
30 #include "HtiAppControl.h" |
28 #include "HtiAppControl.h" |
31 #include <HtiDispatcherInterface.h> |
29 #include <HtiDispatcherInterface.h> |
32 #include <HtiLogging.h> |
30 #include <HtiLogging.h> |
33 |
31 |
|
32 #if ( SYMBIAN_VERSION_SUPPORT < SYMBIAN_4 ) |
34 #include <SWInstApi.h> |
33 #include <SWInstApi.h> |
35 #include <swi/sisregistrysession.h> |
34 #include <swi/sisregistrysession.h> |
36 #include <swi/sisregistrypackage.h> |
35 #include <swi/sisregistrypackage.h> |
|
36 #else |
|
37 #include <usif/sif/sif.h> |
|
38 #include <usif/scr/scr.h> //RSoftwareComponentRegistry |
|
39 #endif |
37 #include <javaregistryincludes.h> |
40 #include <javaregistryincludes.h> |
38 #include <WidgetRegistryClient.h> |
41 #include <WidgetRegistryClient.h> |
39 |
42 |
40 using namespace Java; |
43 using namespace Java; |
|
44 #if ( SYMBIAN_VERSION_SUPPORT >= SYMBIAN_4 ) |
|
45 _LIT8( KSisxMimeType, "x-epoc/x-sisx-app" ); |
|
46 _LIT8( KSisMimeType, "application/vnd.symbian.install" ); |
|
47 _LIT8( KPipMimeType, "application/x-pip" ); |
|
48 _LIT8( KJadMIMEType, "text/vnd.sun.j2me.app-descriptor" ); |
|
49 _LIT8( KJarMIMEType, "application/java-archive" ); |
|
50 _LIT8( KJavaMIMEType, "application/java"); |
|
51 _LIT8( KJarxMIMEType, "application/x-java-archive"); |
|
52 #endif |
41 |
53 |
42 // CONSTANTS |
54 // CONSTANTS |
43 const static TUid KAppServiceUid = { 0x1020DEC7 }; //This is Uid of AppServiceOS |
55 const static TUid KAppServiceUid = { 0x1020DEC7 }; //This is Uid of AppServiceOS |
44 |
56 |
45 //error descriptions |
57 //error descriptions |
112 { |
126 { |
113 iMimeTypes->Reset(); |
127 iMimeTypes->Reset(); |
114 delete iMimeTypes; |
128 delete iMimeTypes; |
115 } |
129 } |
116 |
130 |
|
131 #if ( SYMBIAN_VERSION_SUPPORT < SYMBIAN_4 ) |
117 iAugmentations.ResetAndDestroy(); |
132 iAugmentations.ResetAndDestroy(); |
|
133 #endif |
118 |
134 |
119 HTI_LOG_FUNC_OUT( "~CHtiAppControl" ); |
135 HTI_LOG_FUNC_OUT( "~CHtiAppControl" ); |
120 } |
136 } |
121 |
137 |
122 // Second phase construction. |
138 // Second phase construction. |
123 void CHtiAppControl::ConstructL() |
139 void CHtiAppControl::ConstructL() |
124 { |
140 { |
125 HTI_LOG_FUNC_IN( "CHtiAppControl::ConstructL" ); |
141 HTI_LOG_FUNC_IN( "CHtiAppControl::ConstructL" ); |
126 iMimeTypes = new (ELeave) CDesC8ArrayFlat( 8 ); |
142 iMimeTypes = new (ELeave) CDesC8ArrayFlat( 8 ); |
|
143 #if ( SYMBIAN_VERSION_SUPPORT < SYMBIAN_4 ) |
127 iMimeTypes->AppendL( SwiUI::KSisxMimeType() ); |
144 iMimeTypes->AppendL( SwiUI::KSisxMimeType() ); |
128 iMimeTypes->AppendL( SwiUI::KSisMimeType() ); |
145 iMimeTypes->AppendL( SwiUI::KSisMimeType() ); |
129 iMimeTypes->AppendL( SwiUI::KPipMimeType() ); |
146 iMimeTypes->AppendL( SwiUI::KPipMimeType() ); |
130 iMimeTypes->AppendL( SwiUI::KJadMIMEType() ); |
147 iMimeTypes->AppendL( SwiUI::KJadMIMEType() ); |
131 iMimeTypes->AppendL( SwiUI::KJarMIMEType() ); |
148 iMimeTypes->AppendL( SwiUI::KJarMIMEType() ); |
132 iMimeTypes->AppendL( SwiUI::KJavaMIMEType() ); |
149 iMimeTypes->AppendL( SwiUI::KJavaMIMEType() ); |
133 iMimeTypes->AppendL( SwiUI::KJarxMIMEType() ); |
150 iMimeTypes->AppendL( SwiUI::KJarxMIMEType() ); |
|
151 #else |
|
152 iMimeTypes->AppendL( KSisxMimeType() ); |
|
153 iMimeTypes->AppendL( KSisMimeType() ); |
|
154 iMimeTypes->AppendL( KPipMimeType() ); |
|
155 iMimeTypes->AppendL( KJadMIMEType() ); |
|
156 iMimeTypes->AppendL( KJarMIMEType() ); |
|
157 iMimeTypes->AppendL( KJavaMIMEType() ); |
|
158 iMimeTypes->AppendL( KJarxMIMEType() ); |
|
159 #endif |
134 iMimeTypes->AppendL( KWidgetMime() ); // from widgetregistryconstants.h |
160 iMimeTypes->AppendL( KWidgetMime() ); // from widgetregistryconstants.h |
|
161 #if ( SYMBIAN_VERSION_SUPPORT < SYMBIAN_4 ) |
135 iAugmentationIndex = 0; |
162 iAugmentationIndex = 0; |
|
163 #endif |
136 |
164 |
137 TInt err = iAppServer.Connect(); |
165 TInt err = iAppServer.Connect(); |
138 if ( err == KErrNone ) |
166 if ( err == KErrNone ) |
139 { |
167 { |
140 err = iWs.Connect(); |
168 err = iWs.Connect(); |
668 break; |
699 break; |
669 } |
700 } |
670 |
701 |
671 launcher.Close(); |
702 launcher.Close(); |
672 SendMessageL( EOk ); |
703 SendMessageL( EOk ); |
|
704 #else |
|
705 HTI_LOG_TEXT( "============RSoftwareInstall::Install=============" ); |
|
706 Usif::RSoftwareInstall installer; |
|
707 TInt err = installer.Connect(); |
|
708 if(err) |
|
709 { |
|
710 SendErrorMsg( err , KErrDescrFailedConnectSilentInstaller ); |
|
711 HTI_LOG_FORMAT("cannot connect to SIF server, err %d", err); |
|
712 User::Leave(err); |
|
713 } |
|
714 CleanupClosePushL(installer); |
|
715 TRequestStatus status; |
|
716 Usif::COpaqueNamedParams *arguments = Usif::COpaqueNamedParams::NewL(); |
|
717 CleanupStack::PushL(arguments); |
|
718 Usif::COpaqueNamedParams *results = Usif::COpaqueNamedParams::NewL(); |
|
719 CleanupStack::PushL(results); |
|
720 |
|
721 arguments->AddIntL(Usif::KSifInParam_InstallSilently, ETrue); |
|
722 |
|
723 TInt intValue = ConvertToSifPolicy(parameters[offset]); offset++; |
|
724 if(intValue != Usif::EAllowed) |
|
725 arguments->AddIntL(Usif::KSifInParam_AllowUpgrade, intValue); |
|
726 HTI_LOG_FORMAT( "iUpgrade: %d", intValue ); |
|
727 intValue = ConvertToSifPolicy(parameters[offset]); offset++; |
|
728 if(intValue != Usif::EAllowed) |
|
729 arguments->AddIntL(Usif::KSifInParam_InstallOptionalItems, intValue); |
|
730 HTI_LOG_FORMAT( "iOptionalItems: %d", intValue ); |
|
731 intValue = ConvertToSifPolicy(parameters[offset]); offset++; |
|
732 if(intValue != Usif::EAllowed) |
|
733 arguments->AddIntL(Usif::KSifInParam_PerformOCSP, intValue); |
|
734 HTI_LOG_FORMAT( "iOCSP: %d", intValue ); |
|
735 intValue = ConvertToSifPolicy(parameters[offset]); offset++; |
|
736 if(intValue != Usif::EAllowed) |
|
737 arguments->AddIntL(Usif::KSifInParam_IgnoreOCSPWarnings, intValue); |
|
738 HTI_LOG_FORMAT( "iIgnoreOCSPWarnings: %d", intValue ); |
|
739 intValue = ConvertToSifPolicy(parameters[offset]); offset++; |
|
740 if(intValue != Usif::ENotAllowed) |
|
741 arguments->AddIntL(Usif::KSifInParam_AllowUntrusted, intValue); |
|
742 HTI_LOG_FORMAT( "iUntrusted: %d", intValue ); |
|
743 intValue = ConvertToSifPolicy(parameters[offset]); offset++; |
|
744 if(intValue != Usif::EAllowed) |
|
745 arguments->AddIntL(Usif::KSifInParam_PackageInfo, intValue); |
|
746 HTI_LOG_FORMAT( "iPackageInfo: %d", intValue ); |
|
747 intValue = ConvertToSifPolicy(parameters[offset]); offset++; |
|
748 if(intValue != Usif::EAllowed) |
|
749 arguments->AddIntL(Usif::KSifInParam_GrantCapabilities,intValue); |
|
750 HTI_LOG_FORMAT( "iCapabilities: %d", intValue ); |
|
751 intValue = ConvertToSifPolicy(parameters[offset]); offset++; |
|
752 if(intValue != Usif::EAllowed) |
|
753 arguments->AddIntL(Usif::KSifInParam_AllowAppShutdown,intValue); |
|
754 HTI_LOG_FORMAT( "iKillApp: %d", intValue ); |
|
755 intValue = ConvertToSifPolicy(parameters[offset]); offset++; |
|
756 if(intValue != Usif::EAllowed) |
|
757 arguments->AddIntL(Usif::KSifInParam_AllowOverwrite,intValue); |
|
758 HTI_LOG_FORMAT( "iOverwrite: %d", intValue ); |
|
759 intValue = ConvertToSifPolicy(parameters[offset]); offset++; |
|
760 if(intValue != Usif::EAllowed) |
|
761 arguments->AddIntL(Usif::KSifInParam_AllowDownload, intValue); |
|
762 HTI_LOG_FORMAT( "iDownload: %d", intValue ); |
|
763 |
|
764 TBuf<32> login; |
|
765 offset = ParseString( parameters, offset, unicode, login ); |
|
766 HTI_LOG_FORMAT( "login length: %d", login.Length() ); |
|
767 if(login != KNullDesC) |
|
768 { |
|
769 arguments->AddStringL(Usif::KSifInParam_UserName, login); |
|
770 } |
|
771 HTI_LOG_TEXT( "Parsed login:" ); |
|
772 HTI_LOG_DES( login ) |
|
773 |
|
774 TBuf<32> password; |
|
775 offset = ParseString( parameters, offset, unicode, password ); |
|
776 HTI_LOG_FORMAT( "password length: %d", password.Length() ); |
|
777 if(password != KNullDesC) |
|
778 { |
|
779 arguments->AddStringL(Usif::KSifInParam_Password, password ); |
|
780 } |
|
781 HTI_LOG_TEXT( "Parsed password:" ); |
|
782 HTI_LOG_DES( password ) |
|
783 |
|
784 TChar driver = (TChar) parameters[offset]; offset++; |
|
785 if(driver >= 'A' && driver <= 'Z') |
|
786 { |
|
787 intValue = driver - (TChar)'A'; |
|
788 arguments->AddIntL(Usif::KSifInParam_Drive, intValue); |
|
789 HTI_LOG_FORMAT( "iDrive: %c", intValue + 'a' ); |
|
790 } |
|
791 else if(driver >= 'a' && driver <= 'z') |
|
792 { |
|
793 intValue = driver - (TChar)'a'; |
|
794 arguments->AddIntL(Usif::KSifInParam_Drive, intValue); |
|
795 HTI_LOG_FORMAT( "iDrive: %c", intValue + 'a' ); |
|
796 } |
|
797 |
|
798 TLanguage oldFormatLanuage = (TLanguage)parameters[offset]; offset++; |
|
799 |
|
800 TBool usePhoneLang = (TBool)parameters[offset]; offset++; |
|
801 HTI_LOG_FORMAT( "iUsePhoneLang: %d", usePhoneLang ); |
|
802 |
|
803 intValue = ConvertToSifPolicy( parameters[offset] );offset++; |
|
804 /*if(intValue != Usif::EAllowed) |
|
805 arguments->AddIntL(Usif::KSifInParam_AllowUpgrade, intValue);*/ |
|
806 HTI_LOG_FORMAT( "iUpgradeData: %d", intValue ); |
|
807 |
|
808 HTI_LOG_FORMAT( "parameters length: %d", parameters.Length()); |
|
809 HTI_LOG_FORMAT( "next offset: %d", offset); |
|
810 |
|
811 if(usePhoneLang == EFalse) |
|
812 { |
|
813 if(parameters.Length() > offset) |
|
814 { |
|
815 TLanguage language = ELangTest; |
|
816 if (parameters.Length() == offset+2) |
|
817 { |
|
818 language = (TLanguage)(parameters[offset] + (parameters[offset+1]<<8)); |
|
819 } |
|
820 else if (parameters.Length() == offset+1) |
|
821 { |
|
822 language = (TLanguage)(parameters[offset]); |
|
823 } |
|
824 if ((language > ELangTest) && (language < ELangMaximum)) |
|
825 { |
|
826 arguments->AddIntL(Usif::KSifInParam_Languages, language); |
|
827 HTI_LOG_FORMAT( "iLang: %d", language ); |
|
828 } |
|
829 } |
|
830 else |
|
831 { |
|
832 arguments->AddIntL(Usif::KSifInParam_Languages, oldFormatLanuage); |
|
833 HTI_LOG_FORMAT( "iLang0: %d", oldFormatLanuage ); |
|
834 } |
|
835 } |
|
836 |
|
837 installer.Install(path, *arguments, *results, status); |
|
838 User::WaitForRequest(status); |
|
839 HTI_LOG_FORMAT("install status: %d", status.Int()); |
|
840 TInt componentId = 0; |
|
841 TBool idExisted = results->GetIntByNameL(Usif::KSifOutParam_ComponentId, componentId); |
|
842 if ( idExisted ) |
|
843 { |
|
844 HTI_LOG_FORMAT( "componentId:%d", componentId); |
|
845 } |
|
846 CleanupStack::PopAndDestroy(3); |
|
847 if (status != KErrNone) |
|
848 { |
|
849 SendErrorMsg( status.Int(), KErrDescrFailedInstall ); |
|
850 break; |
|
851 } |
|
852 SendMessageL( EOk ); |
|
853 #endif |
673 } |
854 } |
674 else |
855 else |
675 { |
856 { |
676 HTI_LOG_TEXT( "Error parsing path" ); |
857 HTI_LOG_TEXT( "Error parsing path" ); |
677 SendErrorMsg( offset , KErrDescrInvalidArguments ); |
858 SendErrorMsg( offset , KErrDescrInvalidArguments ); |
702 } |
883 } |
703 |
884 |
704 TInt offset = 0; |
885 TInt offset = 0; |
705 TInt32 uid = KErrNotFound; |
886 TInt32 uid = KErrNotFound; |
706 HBufC* packageName = NULL; |
887 HBufC* packageName = NULL; |
|
888 #if ( SYMBIAN_VERSION_SUPPORT >= SYMBIAN_4 ) |
|
889 Usif::TComponentId cid = KErrNotFound; |
|
890 HTI_LOG_TEXT( "============RSoftwareInstall::Uninstall=============" ); |
|
891 Usif::RSoftwareInstall installer; |
|
892 TInt err = installer.Connect(); |
|
893 if(err) |
|
894 { |
|
895 SendErrorMsg( err , KErrDescrFailedConnectSilentInstaller ); |
|
896 HTI_LOG_FORMAT("cannot connect to SIF server, err %d", err); |
|
897 User::Leave(err); |
|
898 } |
|
899 CleanupClosePushL(installer); |
|
900 TRequestStatus status; |
|
901 Usif::COpaqueNamedParams *arguments = Usif::COpaqueNamedParams::NewL(); |
|
902 CleanupStack::PushL(arguments); |
|
903 Usif::COpaqueNamedParams *results = Usif::COpaqueNamedParams::NewL(); |
|
904 CleanupStack::PushL(results); |
|
905 #endif |
707 if ( aMessage[0] == EUnInstall ) |
906 if ( aMessage[0] == EUnInstall ) |
708 { |
907 { |
709 uid = Parse32<TInt32>( parameters ); |
908 uid = Parse32<TInt32>( parameters ); |
710 offset += 4; |
909 offset += 4; |
711 HTI_LOG_FORMAT( "Uninstall by uid: %d", uid ); |
910 HTI_LOG_FORMAT( "Uninstall by uid: %d", uid ); |
|
911 #if ( SYMBIAN_VERSION_SUPPORT >= SYMBIAN_4 ) |
|
912 cid = GetComponentIdFromUid(uid); |
|
913 if ( cid == KErrNotFound ) |
|
914 { |
|
915 HTI_LOG_FORMAT( "cid: %d", cid ); |
|
916 SendErrorMsg( KErrNotFound, KErrDescrBadComponentId ); |
|
917 CleanupStack::PopAndDestroy(3); //results, arguments, installer |
|
918 break; |
|
919 } |
|
920 #endif |
712 } |
921 } |
713 else |
922 else |
714 { |
923 { |
715 packageName = HBufC::NewLC( parameters[offset] ); |
924 packageName = HBufC::NewLC( parameters[offset] ); |
716 TPtr namePtr = packageName->Des(); |
925 TPtr namePtr = packageName->Des(); |
717 offset = ParseString( parameters, offset, unicode, namePtr ); |
926 offset = ParseString( parameters, offset, unicode, namePtr ); |
718 HTI_LOG_FORMAT( "Uninstall by name: %S", packageName ); |
927 HTI_LOG_FORMAT( "Uninstall by name: %S", packageName ); |
719 } |
928 #if ( SYMBIAN_VERSION_SUPPORT >= SYMBIAN_4 ) |
|
929 cid = GetComponentIdFromPackageName(*packageName); |
|
930 CleanupStack::PopAndDestroy(); // packageName |
|
931 if ( cid == KErrNotFound ) |
|
932 { |
|
933 HTI_LOG_FORMAT( "cid: %d", cid ); |
|
934 SendErrorMsg( KErrNotFound, KErrDescrFailedFindPackage ); |
|
935 CleanupStack::PopAndDestroy(3); //results, arguments, installer |
|
936 break; |
|
937 } |
|
938 #endif |
|
939 } |
|
940 #if ( SYMBIAN_VERSION_SUPPORT < SYMBIAN_4 ) |
720 iUnInstOpts = SwiUI::TUninstallOptions(); |
941 iUnInstOpts = SwiUI::TUninstallOptions(); |
721 iUnInstOpts.iKillApp = ConvertToPolicy( parameters[offset] ); |
942 iUnInstOpts.iKillApp = ConvertToPolicy( parameters[offset] ); |
722 offset++; |
943 offset++; |
723 iUnInstOpts.iBreakDependency = ConvertToPolicy( parameters[offset] ); |
944 iUnInstOpts.iBreakDependency = ConvertToPolicy( parameters[offset] ); |
724 offset++; |
945 offset++; |
786 SendErrorMsg( err , KErrDescrFailedUnInstall ); |
1007 SendErrorMsg( err , KErrDescrFailedUnInstall ); |
787 break; |
1008 break; |
788 } |
1009 } |
789 |
1010 |
790 launcher.Close(); |
1011 launcher.Close(); |
|
1012 #else |
|
1013 |
|
1014 TInt intValue = ConvertToSifPolicy( parameters[offset] ); |
|
1015 offset++; |
|
1016 arguments->AddIntL(Usif::KSifInParam_AllowAppShutdown, intValue); |
|
1017 HTI_LOG_FORMAT( "iKillApp: %d", intValue ); |
|
1018 intValue = ConvertToSifPolicy( parameters[offset] ); |
|
1019 offset++; |
|
1020 arguments->AddIntL(Usif::KSifInParam_AllowAppBreakDependency, intValue); |
|
1021 HTI_LOG_FORMAT( "iBreakDependency: %d", intValue ); |
|
1022 |
|
1023 TInt mimeIndex = parameters[offset]; |
|
1024 if ( mimeIndex > iMimeTypes->Count() - 1 ) |
|
1025 { |
|
1026 HTI_LOG_FORMAT( "Invalid mime type: %d", mimeIndex ); |
|
1027 SendErrorMsg( KErrArgument, KErrDescrInvalidCmd ); |
|
1028 break; |
|
1029 } |
|
1030 |
|
1031 HTI_LOG_TEXT( "Uninstall mime type:" ); |
|
1032 HTI_LOG_DES( (*iMimeTypes)[mimeIndex] ); |
|
1033 |
|
1034 HBufC* buf = HBufC::NewLC((*iMimeTypes)[mimeIndex].Length()); |
|
1035 TPtr ptr = buf->Des(); |
|
1036 ptr.Copy((*iMimeTypes)[mimeIndex]); |
|
1037 arguments->AddStringL(Usif::KSifInParam_MimeType, *buf); |
|
1038 CleanupStack::PopAndDestroy(); // buf |
|
1039 |
|
1040 HTI_LOG_FORMAT( "Component ID = %d", cid ); |
|
1041 |
|
1042 arguments->AddIntL(Usif::KSifInParam_InstallSilently, ETrue); |
|
1043 |
|
1044 installer.Uninstall(cid, *arguments, *results, status, EFalse); |
|
1045 User::WaitForRequest(status); |
|
1046 HTI_LOG_FORMAT("uninstall status:%d", status.Int()); |
|
1047 CleanupStack::PopAndDestroy(3); //results, arguments, installer |
|
1048 if (status != KErrNone) |
|
1049 { |
|
1050 SendErrorMsg(status.Int(), KErrDescrFailedUnInstall); |
|
1051 break; |
|
1052 } |
|
1053 #endif |
791 SendMessageL( EOk ); |
1054 SendMessageL( EOk ); |
792 } |
1055 } |
793 break; |
1056 break; |
794 |
1057 |
795 default: |
1058 default: |
1731 User::Leave( KErrArgument ); |
2005 User::Leave( KErrArgument ); |
1732 } |
2006 } |
1733 |
2007 |
1734 return KErrNone; // never returns from here |
2008 return KErrNone; // never returns from here |
1735 } |
2009 } |
1736 |
2010 #else |
1737 |
2011 TInt CHtiAppControl::GetComponentIdFromUid(const TInt32 aUid) |
|
2012 { |
|
2013 TInt cid = KErrNotFound; |
|
2014 Usif::RSoftwareComponentRegistry registry; |
|
2015 User::LeaveIfError(registry.Connect()); |
|
2016 CleanupClosePushL(registry); |
|
2017 RArray<TUid> uidList; |
|
2018 CleanupClosePushL(uidList); |
|
2019 RArray<Usif::TComponentId> componentIdList; |
|
2020 CleanupClosePushL(componentIdList); |
|
2021 registry.GetComponentIdsL(componentIdList); |
|
2022 for(TInt i = 0; i < componentIdList.Count(); i++) |
|
2023 { |
|
2024 Usif::TComponentId compId = componentIdList[i]; |
|
2025 Usif::CComponentEntry *compEntry = Usif::CComponentEntry::NewLC(); |
|
2026 if(registry.GetComponentL(compId, *compEntry)) |
|
2027 { |
|
2028 /*if(compEntry->IsRemovable() && |
|
2029 compEntry->SoftwareType() == Usif::KSoftwareTypeNative)*/ |
|
2030 if(compEntry->IsRemovable()) |
|
2031 { |
|
2032 _LIT(KCompUid, "CompUid"); |
|
2033 Usif::CPropertyEntry *property = |
|
2034 registry.GetComponentPropertyL(compId, KCompUid); |
|
2035 CleanupStack::PushL(property); |
|
2036 Usif::CIntPropertyEntry* intProperty = |
|
2037 dynamic_cast<Usif::CIntPropertyEntry*>(property); |
|
2038 uidList.AppendL(TUid::Uid(intProperty->IntValue())); |
|
2039 CleanupStack::PopAndDestroy(property); |
|
2040 } |
|
2041 else |
|
2042 { |
|
2043 uidList.AppendL(KNullUid); |
|
2044 } |
|
2045 } |
|
2046 CleanupStack::PopAndDestroy( compEntry ); |
|
2047 } |
|
2048 TUid tuid(TUid::Uid(aUid)); |
|
2049 if(tuid != KNullUid) |
|
2050 { |
|
2051 TInt index = uidList.Find(tuid); |
|
2052 if(index >= 0 && index < componentIdList.Count()) |
|
2053 { |
|
2054 cid = componentIdList[index]; |
|
2055 } |
|
2056 } |
|
2057 CleanupStack::PopAndDestroy( 3, ®istry );// componentIdList, uidList, registry |
|
2058 return cid; |
|
2059 } |
|
2060 |
|
2061 TInt CHtiAppControl::GetComponentIdFromPackageName(const TDesC& aPackageName) |
|
2062 { |
|
2063 TInt cid = KErrNotFound; |
|
2064 Usif::RSoftwareComponentRegistry registry; |
|
2065 User::LeaveIfError(registry.Connect()); |
|
2066 CleanupClosePushL(registry); |
|
2067 RArray<Usif::TComponentId> componentIdList; |
|
2068 CleanupClosePushL(componentIdList); |
|
2069 registry.GetComponentIdsL(componentIdList); |
|
2070 TInt count = componentIdList.Count(); |
|
2071 for(TInt i = 0; i < count; i++) |
|
2072 { |
|
2073 Usif::TComponentId compId = componentIdList[i]; |
|
2074 Usif::CComponentEntry *compEntry = Usif::CComponentEntry::NewLC(); |
|
2075 if(registry.GetComponentL(compId, *compEntry)) |
|
2076 { |
|
2077 if(compEntry->IsRemovable()) |
|
2078 { |
|
2079 if ( aPackageName.Compare( compEntry->Name() ) == 0 ) |
|
2080 { |
|
2081 cid = compId; |
|
2082 CleanupStack::PopAndDestroy( compEntry ); |
|
2083 break; |
|
2084 } |
|
2085 } |
|
2086 } |
|
2087 CleanupStack::PopAndDestroy( compEntry ); |
|
2088 } |
|
2089 CleanupStack::PopAndDestroy( 2, ®istry );// componentIdList, registry |
|
2090 return cid; |
|
2091 } |
|
2092 |
|
2093 #endif |
1738 // End of File |
2094 // End of File |